# API Reference Source: https://www.pitchkitjs.com/docs/api > Every public export of PitchKit's packages, generated from TSDoc. Generated from the source's TSDoc comments on every build — always in sync with the published types. Anything marked `@internal` in the source (core's SVG painters, per [issue #6](https://github.com/yribeiro/pitchkit/issues/6)) is deliberately excluded. * **[@pitchkit/core](/docs/api/core)** — the framework-agnostic engine: coordinate transforms, pitch geometry, layer types, heatmap binning, theming tokens. * **[@pitchkit/react](/docs/api/react)** — the officially supported React bindings: ``, the overlay components, and `usePitch()`. * **[@pitchkit/data-providers](/docs/api/data-providers)** — the optional open-data loaders: parsers, fetchers, selectors and predicates, per provider. For task-oriented documentation, start from the [guides](/docs/guides/coordinates), [Data](/docs/data) and per-component pages instead — this section is the exhaustive symbol-level reference. --- # @pitchkit/core Source: https://www.pitchkitjs.com/docs/api/core [![npm](https://img.shields.io/npm/v/@pitchkit/core)](https://www.npmjs.com/package/@pitchkit/core) [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/yribeiro/pitchkit/blob/main/LICENSE) The zero-dependency, framework-agnostic engine behind PitchKit: pitch dimensions, coordinate transforms, the scene/layer model, geometry algorithms, and heatmap binning. **Docs: [pitchkitjs.com](https://www.pitchkitjs.com)** > **Most people want [`@pitchkit/react`](https://www.npmjs.com/package/@pitchkit/react) > instead.** That's the supported rendering surface. This package is the maths underneath it — > useful directly if you're computing pitch geometry outside React, or building bindings for > another framework. > **Early days — pre-`1.0`.** The API isn't stable yet. ## Install ```bash npm install @pitchkit/core ``` Zero runtime dependencies. ESM, tree-shakeable, ships its own types. ## What's inside **Pitch dimensions** — `statsbomb`, `opta`, `uefa`, each in the provider's real coordinate space, sourced from mplsoccer's published constants so real event data aligns exactly. ```ts import { getPitchDimensions, cropForHalf } from "@pitchkit/core"; const dimensions = getPitchDimensions("statsbomb"); // 120 × 80, markings included const half = cropForHalf(dimensions); // crop window for the attacking half ``` **Coordinate transforms** — map provider coordinates to pixels, with orientation, padding and cropping handled for you. ```ts import { createPixelTransform } from "@pitchkit/core"; const transform = createPixelTransform({ dimensions, viewport, orientation: "vertical" }); ``` `createStandardizeTransform()` converts between providers' coordinate spaces. **Geometry** — `computeConvexHull`, `computeVoronoiCells`, `computeGoalAngle`, `computeFlowBins`, `computePolygonCentroid`, plus arc/arrow/comet path maths. **Density** — `computeHeatmapBins` (uniform grid), `computePositionalBins` (Juego de Posición zones), `computeHexBins` (hexagonal lattice) and `computeKdeGrid` (Gaussian KDE) for binning (count or weighted), `createColorScale` for a dependency-free colour ramp, and `renderDensityLayersToCanvas` for painting to a `devicePixelRatio`-aware canvas. **Theming** — `pitchTokens` (CSS variable names, for autocomplete) and `partStyle`. ## Note on the SVG renderer `svgRenderer` / `renderSceneToSVGElement` are exported but **internal** — they exist to support this repo's own dev harness, not as a supported vanilla-JS consumption path, and new mark types are not added to them. Use `@pitchkit/react` to render. (Canvas heatmap rendering is unaffected — `@pitchkit/react`'s `` calls straight into it.) ## Links * [Documentation & gallery](https://www.pitchkitjs.com) * [Repository](https://github.com/yribeiro/pitchkit) * [Issues](https://github.com/yribeiro/pitchkit/issues) * [`@pitchkit/react`](https://www.npmjs.com/package/@pitchkit/react) — the React bindings ## Licence MIT © Yohahn Ribeiro ## Interfaces * [AnnotateLayer](/docs/api/core/interfaces/AnnotateLayer) * [Arc](/docs/api/core/interfaces/Arc) * [ArrowsLayer](/docs/api/core/interfaces/ArrowsLayer) * [Circle](/docs/api/core/interfaces/Circle) * [CometLayer](/docs/api/core/interfaces/CometLayer) * [ConvexHullLayer](/docs/api/core/interfaces/ConvexHullLayer) * [CropWindow](/docs/api/core/interfaces/CropWindow) * [FlowBin](/docs/api/core/interfaces/FlowBin) * [FlowLayer](/docs/api/core/interfaces/FlowLayer) * [FlowVector](/docs/api/core/interfaces/FlowVector) * [GoalAngleLayer](/docs/api/core/interfaces/GoalAngleLayer) * [HeatmapBin](/docs/api/core/interfaces/HeatmapBin) * [HeatmapLayer](/docs/api/core/interfaces/HeatmapLayer) * [HexBin](/docs/api/core/interfaces/HexBin) * [HexbinLayer](/docs/api/core/interfaces/HexbinLayer) * [KdeGrid](/docs/api/core/interfaces/KdeGrid) * [KdeLayer](/docs/api/core/interfaces/KdeLayer) * [Line](/docs/api/core/interfaces/Line) * [PitchAppearance](/docs/api/core/interfaces/PitchAppearance) * [PitchDimensionOverrides](/docs/api/core/interfaces/PitchDimensionOverrides) * [PitchDimensions](/docs/api/core/interfaces/PitchDimensions) * [PitchGeometry](/docs/api/core/interfaces/PitchGeometry) * [PitchMarkings](/docs/api/core/interfaces/PitchMarkings) * [PixelTransform](/docs/api/core/interfaces/PixelTransform) * [PolygonLayer](/docs/api/core/interfaces/PolygonLayer) * [PositionalBin](/docs/api/core/interfaces/PositionalBin) * [PositionalHeatmapLayer](/docs/api/core/interfaces/PositionalHeatmapLayer) * [PositionalZone](/docs/api/core/interfaces/PositionalZone) * [Rect](/docs/api/core/interfaces/Rect) * [Renderer](/docs/api/core/interfaces/Renderer) * [RenderHeatmapOptions](/docs/api/core/interfaces/RenderHeatmapOptions) * [ScatterLayer](/docs/api/core/interfaces/ScatterLayer) * [Scene](/docs/api/core/interfaces/Scene) * [Viewport](/docs/api/core/interfaces/Viewport) * [ViewportPadding](/docs/api/core/interfaces/ViewportPadding) * [VoronoiLayer](/docs/api/core/interfaces/VoronoiLayer) ## Type Aliases * [Accessor](/docs/api/core/type-aliases/Accessor) * [GoalType](/docs/api/core/type-aliases/GoalType) * [Layer](/docs/api/core/type-aliases/Layer) * [Orientation](/docs/api/core/type-aliases/Orientation) * [PitchOrigin](/docs/api/core/type-aliases/PitchOrigin) * [PitchStripes](/docs/api/core/type-aliases/PitchStripes) * [PitchTypeId](/docs/api/core/type-aliases/PitchTypeId) * [Point](/docs/api/core/type-aliases/Point) * [PositionalLayout](/docs/api/core/type-aliases/PositionalLayout) * [YDirection](/docs/api/core/type-aliases/YDirection) ## Variables * [ARROW\_HEAD\_HALF\_ANGLE](/docs/api/core/variables/ARROW_HEAD_HALF_ANGLE) * [canvasRenderer](/docs/api/core/variables/canvasRenderer) * [PITCH\_DIMENSIONS](/docs/api/core/variables/PITCH_DIMENSIONS) * [pitchTokens](/docs/api/core/variables/pitchTokens) * [renderHeatmapLayersToCanvas](/docs/api/core/variables/renderHeatmapLayersToCanvas) * [svgRenderer](/docs/api/core/variables/svgRenderer) ## Functions * [arcPathData](/docs/api/core/functions/arcPathData) * [arcSweepFlag](/docs/api/core/functions/arcSweepFlag) * [clipPolygonByHalfPlane](/docs/api/core/functions/clipPolygonByHalfPlane) * [computeArrowHeadCorners](/docs/api/core/functions/computeArrowHeadCorners) * [computeCometQuad](/docs/api/core/functions/computeCometQuad) * [computeConvexHull](/docs/api/core/functions/computeConvexHull) * [computeFlowBins](/docs/api/core/functions/computeFlowBins) * [computeGoalAngle](/docs/api/core/functions/computeGoalAngle) * [computeGoalBox](/docs/api/core/functions/computeGoalBox) * [computeHeatmapBins](/docs/api/core/functions/computeHeatmapBins) * [computeHexBins](/docs/api/core/functions/computeHexBins) * [computeKdeGrid](/docs/api/core/functions/computeKdeGrid) * [computePitchGeometry](/docs/api/core/functions/computePitchGeometry) * [computePolygonCentroid](/docs/api/core/functions/computePolygonCentroid) * [computePositionalBins](/docs/api/core/functions/computePositionalBins) * [computePositionalZones](/docs/api/core/functions/computePositionalZones) * [computeStripeBands](/docs/api/core/functions/computeStripeBands) * [computeVoronoiCells](/docs/api/core/functions/computeVoronoiCells) * [createColorScale](/docs/api/core/functions/createColorScale) * [createPixelTransform](/docs/api/core/functions/createPixelTransform) * [createStandardizeTransform](/docs/api/core/functions/createStandardizeTransform) * [cropForHalf](/docs/api/core/functions/cropForHalf) * [displayUnitScale](/docs/api/core/functions/displayUnitScale) * [getPitchDimensions](/docs/api/core/functions/getPitchDimensions) * [goalBoxDepth](/docs/api/core/functions/goalBoxDepth) * [hexCorners](/docs/api/core/functions/hexCorners) * [partStyle](/docs/api/core/functions/partStyle) * [renderDensityLayersToCanvas](/docs/api/core/functions/renderDensityLayersToCanvas) * [renderSceneToSVGElement](/docs/api/core/functions/renderSceneToSVGElement) * [resolve](/docs/api/core/functions/resolve) * [resolveStripeCount](/docs/api/core/functions/resolveStripeCount) * [selectGoal](/docs/api/core/functions/selectGoal) * [silvermanBandwidth](/docs/api/core/functions/silvermanBandwidth) --- # @pitchkit/data-providers Source: https://www.pitchkitjs.com/docs/api/data-providers Convenience loaders for open football data, shaped for [PitchKit](https://www.pitchkitjs.com). Raw provider JSON in, typed events out — with the coordinates already where a `` accessor wants them. Two provider modules today: **StatsBomb** (events + 360 tracking) and **SkillCorner** (broadcast tracking, dynamic events, phases of play), each on its own import subpath so you only pull in what you use. ```bash npm install @pitchkit/data-providers ``` One runtime dependency (`csv-parse`, for SkillCorner's CSV files), and no dependency on `@pitchkit/core` or `@pitchkit/react` — it's pure data transformation, useful on its own. ## A shot map, end to end ```tsx import { fetchMatchEvents, shots, isGoal } from "@pitchkit/data-providers/statsbomb"; import { Scatter, VerticalPitch } from "@pitchkit/react"; const events = await fetchMatchEvents(15946); const barcelona = shots(events).filter((shot) => shot.team.name === "Barcelona"); shot.x} y={(shot) => shot.y} r={(shot) => 3 + Math.sqrt(shot.shot.statsbomb_xg) * 11} fill={(shot) => (isGoal(shot) ? "orange" : "steelblue")} /> ; ``` ## What this is (and isn't) A convenience package, for tutorials, prototypes, learning and agent-assisted builds — getting from "a match id" to "a chart" without a data pipeline in between. It is **not** a production data layer. If you already have your own pipeline, you don't need this: PitchKit's marks take accessor functions, so they read whatever shape your data is already in. Nothing here is required to use PitchKit. ## Design **StatsBomb's data stays StatsBomb's.** Fields keep their names and their `snake_case` spelling; values keep StatsBomb's own strings. An outcome is `"Off T"`, not `"off-target"`. You can read StatsBomb's spec and this package's types side by side with no mapping table in between, and nothing is paraphrased into a vocabulary you'd then have to learn. **Coordinates are the one exception.** `location` and `end_location` arrays are *also* surfaced as `x`, `y`, `endX`, `endY` (and `endZ` for shots that left the ground), so they drop straight into an accessor. The original arrays are left untouched. **Interpretation lives in functions, not fields.** There's no invented `complete: boolean` on a pass — there's an `isComplete(pass)` you apply. Same for `isGoal`, `isCorner`, `isCross`. The data stays a faithful record; the reading of it is opt-in and inspectable. **Nothing is dropped.** Only shots, passes and carries are typed explicitly. Every other event type comes back as a `StatsBombGenericEvent` with its own sub-object intact — reach it with `ofType(events, "Duel")`. There is no `raw` field because the parsed event *is* the original, spread, plus coordinates. ### Narrowing goes through the guards StatsBomb's discriminant is `type.name` — nested one level down. TypeScript only narrows unions on *top-level* literal discriminants, so this compiles but does **not** narrow: ```ts if (event.type.name === "Shot") { event.shot.statsbomb_xg; // ✗ Property 'shot' does not exist on type 'StatsBombEvent' } ``` Use the guards instead — they narrow properly, and they check the sub-object is really present rather than trusting the name: ```ts if (isShot(event)) { event.shot.statsbomb_xg; // ✓ } ``` Hoisting a top-level discriminant would fix this, but only by inventing a field StatsBomb doesn't have — which is exactly what this package avoids. ## API Import from `@pitchkit/data-providers/statsbomb`. Everything is tree-shakeable, and provider modules are separate entry points so you never pull in code for a provider you don't use. **Parse** — pure, no network. `parseEvents`, `parseCompetitions`, `parseMatches`, `parseLineups`. **Load from a URL** — a mirror, your own host, anything. `loadEvents`, `loadCompetitions`, `loadMatches`, `loadLineups`, `loadThreeSixty`. **Fetch from open data** — builds the public URL for you. `fetchMatchEvents(matchId)`, `fetchCompetitions()`, `fetchMatches(competitionId, seasonId)`, `fetchLineups(matchId)`, `fetchMatchThreeSixty(matchId)`. Each takes optional `{ baseUrl, fetch, signal }`, so you can point at a mirror or wrap the request (Next.js caching, a proxy, a test stub). Built on the global `fetch` — no HTTP client dependency. Note that `competitions.json` rows are competition **and season** pairs, which is why `fetchMatches` needs both ids. **Select** — `shots`, `passes`, `carries`, `ofType`, and the `isShot` / `isPass` / `isCarry` guards. For 360 data: `indexThreeSixtyByEvent` (the join), `teammatesIn`/`opponentsIn`/`actorIn`/`keeperIn` (filtering a frame's tracked players), and `visibleAreaPolygon` (the camera-coverage polygon as point pairs for a `Polygon` layer). **Predicates** — `isComplete`, `isCorner`, `isFreeKick`, `isThrowIn`, `isCross`, `isThroughBall`, `isSwitch`, `isAssist`, `isKeyPass`, `isSetPiece`, `isGoal`, `isPenalty`, `isOnTarget`. For 360 tracked players: `isTeammate`, `isOpponent`, `isActor`, `isKeeper`. ### 360 tracking data ```ts import { fetchMatchEvents, fetchMatchThreeSixty, indexThreeSixtyByEvent, isShot, } from "@pitchkit/data-providers/statsbomb"; const [events, frames] = await Promise.all([ fetchMatchEvents(3857276), fetchMatchThreeSixty(3857276), ]); const frameByEvent = indexThreeSixtyByEvent(frames); const shot = events.find(isShot); const frame = shot && frameByEvent.get(shot.id); // undefined if this event wasn't tracked ``` Not every match has 360 coverage, and not every event within a covered match has a frame — coverage varies by match (85% in one sampled World Cup match) since 360 only runs on events the camera could see. Check `match.match_status_360 === "available"` before fetching, and don't assume `frameByEvent.get(event.id)` will hit even within a covered match. A tracked player carries no identity — `{ teammate, actor, keeper, location }` only, relative to the event's own team — which is why the selectors above read like predicates rather than lookups. ### Gotchas worth knowing * **A completed pass has no `outcome` at all.** StatsBomb encodes success as the *absence* of `pass.outcome`, not as a value — testing for `outcome.name === "Complete"` finds nothing. That's what `isComplete` is for. * **Events files are large; 360 files are larger.** A match's events are roughly 3 MB, its 360 tracking 5-7 MB — fetch once and cache either. * **`endZ` is optional**, even on shots: StatsBomb writes a two-element `end_location` for a shot that never left the ground. * **Some events have no location** — Starting XI, Half Start, Substitution and friends — so `x`/`y` are optional on the base event. They're required on shots, passes and carries, which always have one. ## SkillCorner ```ts import { fetchMatch, fetchDynamicEvents, streamTracking, offBallRuns, } from "@pitchkit/data-providers/skillcorner"; const match = await fetchMatch(1874553); const runs = offBallRuns(await fetchDynamicEvents(match)); ``` 20 A-League 2024/25 matches of broadcast tracking, plus SkillCorner's derived dynamic events and phases of play. Same four layers as above, with four differences that matter before you plot anything: * **Coordinates are metres from the centre spot**, on a pitch whose real dimensions vary by match (104, 105 and 106 m all appear in the dataset). The parsers add corner-origin `pitchX`/`pitchY` using that match's own dimensions, leaving `x`/`y` exactly as SkillCorner wrote them — which is why the loaders take the match object, not just its id. They stay in that match's real metres; mapping onto a fixed pitch type is your call. * **The two files disagree about direction.** Tracking positions are absolute and swap ends at half time; dynamic-event `x` is normalised so positive always points at the goal being attacked. Mixing them up mirrors half a match silently. `attackingSideOf(match, teamId, period)` resolves the former. * **Tracking files are \~90 MB** and stored in **Git LFS**, so they come from `media.githubusercontent.com`, not the raw host — fetching the raw URL returns a 130-byte pointer stub that fails as "not valid JSON". Prefer `streamTracking` (an async generator; `break` aborts the download) or `fetchTrackingWindow` (an HTTP `Range` read) over `fetchTracking`. * **Roughly a third of positions are extrapolated, not seen.** Broadcast tracking only covers what the camera framed; `is_detected` says which is which, and it's worth surfacing rather than hiding. The dynamic-events CSV has **322 columns**. The \~40 you plot or filter on are typed; the rest stay reachable under their original names through an index signature. Selectors: `playerPossessions`, `passingOptions`, `offBallRuns`, `onBallEngagements`, `ofEventType`. Tracking joins onto the match through `indexPlayersById` — on `players[].id`, **not** `trackable_object`. ### Files you already have Both provider modules split the network layer in two: `loadX(url)` takes any URL — a mirror, your own bucket, a static server — and `fetchX(id)` is sugar that builds the open-data URL for you. If the files are on disk, skip both and use the `parse*` layer, which is pure: ```ts import { readFileSync, createReadStream } from "node:fs"; import { createInterface } from "node:readline"; import { parseMatch, parseDynamicEvents, parseTrackingFrame, pitchProjection, } from "@pitchkit/data-providers/skillcorner"; // The match file first — everything else needs its pitch dimensions. const match = parseMatch(JSON.parse(readFileSync("1874553_match.json", "utf8"))); const events = parseDynamicEvents(readFileSync("1874553_dynamic_events.csv", "utf8"), match); ``` Tracking files are far too big to read into a string, so parse them a line at a time — which is exactly what `parseTrackingFrame` and `pitchProjection` are exported for: ```ts const project = pitchProjection(match); const lines = createInterface({ input: createReadStream("1874553_tracking_extrapolated.jsonl"), crlfDelay: Infinity, }); for await (const line of lines) { if (!line.trim()) continue; const frame = parseTrackingFrame(JSON.parse(line), project); // …one frame at a time, constant memory } ``` ## Data licence and attribution This package ships **no data**. It fetches from whatever URL you give it. The default URLs point at each provider's own open-data repository. **Both ask to be credited** in anything you publish from their data. **StatsBomb** — [open-data](https://github.com/statsbomb/open-data) · [specifications](https://github.com/statsbomb/open-data/tree/master/doc) · [free data hub](https://statsbomb.com/what-we-do/hub/free-data/) · [usage terms](https://statsbomb.com/what-we-do/hub/free-data/free-data-usage-terms/). Released under StatsBomb's own user agreement rather than an OSI licence, so read the terms before you rely on it. **SkillCorner** — [opendata](https://github.com/SkillCorner/opendata) · [documentation](https://skillcorner.github.io/opendata/) · [tutorials](https://github.com/SkillCorner/opendata/tree/master/notebooks/tutorials) · [skillcorner.com](https://skillcorner.com/). MIT-licensed, with a request for credit. Both providers' documentation is the authority on what the fields mean; this package only covers loading them. ## Adding a provider Providers live one per directory under `src/`, each with its own entry in `package.json`'s `exports` and `tsup.config.ts`'s `entry`. Follow `src/statsbomb/` — types, parse, load, select, predicates — and keep the same principle: the provider's own vocabulary in the data, interpretation in the functions. ## Licence MIT ## Modules * [index](/docs/api/data-providers/index) * [skillcorner](/docs/api/data-providers/skillcorner) * [statsbomb](/docs/api/data-providers/statsbomb) * [wyscout](/docs/api/data-providers/wyscout) --- # @pitchkit/react Source: https://www.pitchkitjs.com/docs/api/react [![npm](https://img.shields.io/npm/v/@pitchkit/react)](https://www.npmjs.com/package/@pitchkit/react) [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/yribeiro/pitchkit/blob/main/LICENSE) Declarative React components for football pitch visualisation — mplsoccer's feature set for the web. Responsive by default, themed with CSS variables, SSR-safe. **Docs and live examples: [pitchkitjs.com](https://www.pitchkitjs.com)** > **Early days — pre-`1.0`.** Usable and tested, but the API isn't stable yet; expect > breaking changes before `1.0`. ## Install ```bash npm install @pitchkit/react ``` React >= 18 is a peer dependency. [`@pitchkit/core`](https://www.npmjs.com/package/@pitchkit/core) is installed automatically. ## Usage ```tsx import { Pitch, Scatter } from "@pitchkit/react"; const shots = [ { x: 112, y: 39, xg: 0.76, outcome: "goal" }, { x: 105, y: 44, xg: 0.31, outcome: "saved" }, { x: 99, y: 47, xg: 0.13, outcome: "off target" }, ]; export function ShotMap() { return ( s.x} y={(s) => s.y} r={(s) => 3 + s.xg * 9} fill={(s) => (s.outcome === "goal" ? "#fb923c" : "#38bdf8")} tooltip={(s) => `${s.outcome} · xG ${s.xg.toFixed(2)}`} /> ); } ``` `` owns the coordinate system; children are layers drawn into it, stacked in render order. Every visual prop accepts a static value **or** a function of the datum — `fill="red"` and `fill={(d) => d.teamColor}` are the same prop. ## Components | Component | Draws | | --------------------- | ------------------------------------------------------ | | `` | The pitch surface + coordinate context (horizontal) | | `` | Same, rotated to a vertical framing | | `` | Circles — shots, players, events | | `` | Text labels | | `` | Straight arrows — passes, carries | | `` | Tapered lines with direction implied by width | | `` | Binned density on Canvas (client-only) | | `` | Juego de Posición zone density on Canvas (client-only) | | `` | Hexagonal density on Canvas (client-only) | | `` | Smooth kernel density surface on Canvas (client-only) | | `` | Arbitrary closed shapes | | `` | Convex hull of a point set | | `` | Voronoi cells, clipped to the pitch | | `` | The angle-to-goal wedge from a shot location | | `` | Binned direction + magnitude vectors | | `usePitch()` | Hook exposing the pixel transform for custom SVG | ## Sizing Responsive is the default — with no size props the pitch fills its container via `ResizeObserver` and recomputes on resize. Explicit sizing is the opt-out: ```tsx {/* fills container */} {/* fixed — exports, OG images */} ``` ## Layer order Markings paint *below* the layer children by default, so discrete marks sit on top of the lines. An opaque density fill will therefore cover them — set `appearance.linesOnTop` to paint the markings above instead (mplsoccer's `line_zorder`): ```tsx t.x} y={(t) => t.y} /> ``` Only the markings move — the grass surface and stripes stay at the bottom either way. ## Pitch types `statsbomb` · `opta` · `uefa`, each using the provider's real coordinate space so event data goes in unmodified. ```tsx import { cropForHalf, getPitchDimensions } from "@pitchkit/core"; const dimensions = getPitchDimensions("statsbomb"); {/* … */} ``` ## Theming CSS variables only — no theme objects, no providers. Define once; every chart inherits, including dark mode: ```css :root { --pitch-surface: #1a472a; --pitch-stripe: #1d4f30; --pitch-lines: rgba(255, 255, 255, 0.8); } ``` Marks accept `className`, so Tailwind works directly: ```tsx s.x} y={(s) => s.y} className="fill-emerald-400 stroke-white" /> ``` Setting `className` without an explicit `fill`/`stroke` makes the mark drop its themed default so your class wins. For marks whose JSX you don't own, every element carries `data-pitchkit-mark` / `-layer` / `-part` attributes to target instead. ## Next.js / SSR SVG marks server-render cleanly. Because layer components take accessor *functions* as props, the `` tree must originate inside a `"use client"` component — React Server Components can't pass functions across the client boundary. SSR still happens; only the prop-serialisation boundary moves. `` is Canvas-backed and therefore client-only. ## Agent Skill No model has PitchKit in its training data, so coding agents asked for a shot map tend to invent an mplsoccer-flavoured API. This package ships an Agent Skill — `skills/pitchkit/` inside the tarball — that documents the real one. ```bash npx @pitchkit/react skills install # -> .claude/skills/pitchkit/ npx @pitchkit/react skills install --dir .cursor/skills npx @pitchkit/react skills path # where it lives in node_modules ``` Install *symlinks* the target at the copy inside `node_modules`, so `npm update @pitchkit/react` moves the skill with it and an agent can't end up reading last version's API. On a filesystem that won't take a symlink it copies instead and says so — that copy is a snapshot, so re-run with `--force` after upgrading. The default directory suits Claude Code; for any other agent, point `--dir` at wherever it reads skills from, or hand it the `skills path` output to read directly. The layout follows the `skills//SKILL.md` convention, so generic installers like `skills-npm` find it in `node_modules` without needing this CLI at all. ## Links * [Documentation & gallery](https://www.pitchkitjs.com) * [Repository](https://github.com/yribeiro/pitchkit) * [Issues](https://github.com/yribeiro/pitchkit/issues) * [`@pitchkit/core`](https://www.npmjs.com/package/@pitchkit/core) — the framework-agnostic engine ## Licence MIT © Yohahn Ribeiro ## Interfaces * [AnnotateProps](/docs/api/react/interfaces/AnnotateProps) * [ArrowsProps](/docs/api/react/interfaces/ArrowsProps) * [CometProps](/docs/api/react/interfaces/CometProps) * [ConvexHullProps](/docs/api/react/interfaces/ConvexHullProps) * [FlowProps](/docs/api/react/interfaces/FlowProps) * [GoalAngleProps](/docs/api/react/interfaces/GoalAngleProps) * [HeatmapProps](/docs/api/react/interfaces/HeatmapProps) * [HexbinProps](/docs/api/react/interfaces/HexbinProps) * [KDEProps](/docs/api/react/interfaces/KDEProps) * [PitchProps](/docs/api/react/interfaces/PitchProps) * [PolygonProps](/docs/api/react/interfaces/PolygonProps) * [PositionalHeatmapProps](/docs/api/react/interfaces/PositionalHeatmapProps) * [ScatterProps](/docs/api/react/interfaces/ScatterProps) * [TooltipState](/docs/api/react/interfaces/TooltipState) * [VoronoiProps](/docs/api/react/interfaces/VoronoiProps) ## Functions * [Annotate](/docs/api/react/functions/Annotate) * [Arrows](/docs/api/react/functions/Arrows) * [Comet](/docs/api/react/functions/Comet) * [ConvexHull](/docs/api/react/functions/ConvexHull) * [Flow](/docs/api/react/functions/Flow) * [GoalAngle](/docs/api/react/functions/GoalAngle) * [Heatmap](/docs/api/react/functions/Heatmap) * [Hexbin](/docs/api/react/functions/Hexbin) * [KDE](/docs/api/react/functions/KDE) * [Pitch](/docs/api/react/functions/Pitch) * [Polygon](/docs/api/react/functions/Polygon) * [PositionalHeatmap](/docs/api/react/functions/PositionalHeatmap) * [Scatter](/docs/api/react/functions/Scatter) * [usePitch](/docs/api/react/functions/usePitch) * [VerticalPitch](/docs/api/react/functions/VerticalPitch) * [Voronoi](/docs/api/react/functions/Voronoi) --- # arcPathData() Source: https://www.pitchkitjs.com/docs/api/core/functions/arcPathData ```ts function arcPathData( radius, start, end, sweep ): string; ``` Defined in: [packages/core/src/render/arc-sweep.ts:24](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/render/arc-sweep.ts#L24) Builds the SVG path `d` string for a circular arc between two already-transformed pixel-space points. Shared so the DOM renderer and React's JSX emission produce byte-identical path syntax. ## Parameters | Parameter | Type | | --------- | -------------------------------------------- | | `radius` | `number` | | `start` | [`Point`](/docs/api/core/type-aliases/Point) | | `end` | [`Point`](/docs/api/core/type-aliases/Point) | | `sweep` | `0` \| `1` | ## Returns `string` --- # arcSweepFlag() Source: https://www.pitchkitjs.com/docs/api/core/functions/arcSweepFlag ```ts function arcSweepFlag( center, start, end ): 0 | 1; ``` Defined in: [packages/core/src/render/arc-sweep.ts:10](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/render/arc-sweep.ts#L10) Picks the SVG arc sweep-flag from already-transformed pixel-space points, rather than assuming a fixed direction. The pixel transform may have flipped or swapped axes (yDirection, orientation), which would otherwise silently mirror the arc onto the wrong side. Shared between the SVG DOM renderer and @pitchkit/react's JSX emission (both draw `` arcs). ## Parameters | Parameter | Type | | --------- | -------------------------------------------- | | `center` | [`Point`](/docs/api/core/type-aliases/Point) | | `start` | [`Point`](/docs/api/core/type-aliases/Point) | | `end` | [`Point`](/docs/api/core/type-aliases/Point) | ## Returns `0` | `1` --- # clipPolygonByHalfPlane() Source: https://www.pitchkitjs.com/docs/api/core/functions/clipPolygonByHalfPlane ```ts function clipPolygonByHalfPlane( polygon, boundaryPoint, inwardNormal ): Point[]; ``` Defined in: [packages/core/src/geometry/voronoi.ts:28](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/geometry/voronoi.ts#L28) Sutherland–Hodgman clip of a convex `polygon` against one half-plane: the boundary line passes through `boundaryPoint` perpendicular to `inwardNormal`, and points on the `inwardNormal` side are kept. Exported directly (not just as a `voronoi.ts` internal) since it's the reusable primitive `computeVoronoiCells` repeatedly applies per site pair, and it's independently testable without a full multi-site setup. ## Parameters | Parameter | Type | | --------------- | -------------------------------------------------------- | | `polygon` | readonly [`Point`](/docs/api/core/type-aliases/Point)\[] | | `boundaryPoint` | [`Point`](/docs/api/core/type-aliases/Point) | | `inwardNormal` | [`Point`](/docs/api/core/type-aliases/Point) | ## Returns [`Point`](/docs/api/core/type-aliases/Point)\[] --- # computeArrowHeadCorners() Source: https://www.pitchkitjs.com/docs/api/core/functions/computeArrowHeadCorners ```ts function computeArrowHeadCorners( start, end, headSize ): [Point, Point]; ``` Defined in: [packages/core/src/render/arrow-geometry.ts:14](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/render/arrow-geometry.ts#L14) Computes the two back corners of an arrowhead triangle pointing from `start` to `end`, both already in pixel space. Shared between the SVG DOM renderer and @pitchkit/react's JSX emission — the angle is derived from the *pixel-space* endpoints (not provider coordinates) so it points correctly regardless of any axis flip/swap the pixel transform applied (orientation, yDirection), consistent with `arcSweepFlag`'s approach. ## Parameters | Parameter | Type | | ---------- | -------------------------------------------- | | `start` | [`Point`](/docs/api/core/type-aliases/Point) | | `end` | [`Point`](/docs/api/core/type-aliases/Point) | | `headSize` | `number` | ## Returns \[[`Point`](/docs/api/core/type-aliases/Point), [`Point`](/docs/api/core/type-aliases/Point)] --- # computeCometQuad() Source: https://www.pitchkitjs.com/docs/api/core/functions/computeCometQuad ```ts function computeCometQuad( start, end, startWidth, endWidth ): [Point, Point, Point, Point]; ``` Defined in: [packages/core/src/render/comet-geometry.ts:10](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/render/comet-geometry.ts#L10) Computes the four corners of a tapered quadrilateral from `start` to `end` (both already in pixel space), narrow at `start` (`startWidth`) and wide at `end` (`endWidth`). SVG has no way to vary a ``'s stroke-width along its length, so both renderers build this shape directly instead. Shared so the taper math can't drift between them. ## Parameters | Parameter | Type | | ------------ | -------------------------------------------- | | `start` | [`Point`](/docs/api/core/type-aliases/Point) | | `end` | [`Point`](/docs/api/core/type-aliases/Point) | | `startWidth` | `number` | | `endWidth` | `number` | ## Returns \[[`Point`](/docs/api/core/type-aliases/Point), [`Point`](/docs/api/core/type-aliases/Point), [`Point`](/docs/api/core/type-aliases/Point), [`Point`](/docs/api/core/type-aliases/Point)] --- # computeConvexHull() Source: https://www.pitchkitjs.com/docs/api/core/functions/computeConvexHull ```ts function computeConvexHull(points): Point[]; ``` Defined in: [packages/core/src/geometry/convex-hull.ts:18](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/geometry/convex-hull.ts#L18) Convex hull via the monotone chain (Andrew's) algorithm: sort points lexicographically, then build the lower and upper hull chains in one pass each, popping any point that would make a clockwise (non-left) turn. O(n log n), no dependency — the same "hand-rolled over a library" choice as `color/scale.ts`'s `createColorScale`. Fewer than 3 distinct points have no well-defined hull interior; returns the deduplicated points as-is (a point or a segment) rather than throwing, so a caller can still render *something* for a sparse dataset. ## Parameters | Parameter | Type | | --------- | -------------------------------------------------------- | | `points` | readonly [`Point`](/docs/api/core/type-aliases/Point)\[] | ## Returns [`Point`](/docs/api/core/type-aliases/Point)\[] --- # computeFlowBins() Source: https://www.pitchkitjs.com/docs/api/core/functions/computeFlowBins ```ts function computeFlowBins( vectors, binsX, binsY, dimensions ): FlowBin[]; ``` Defined in: [packages/core/src/geometry/flow.ts:31](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/geometry/flow.ts#L31) Bins `vectors` by start location into a `binsX` x `binsY` grid over the pitch (same cell math as `heatmap/bins.ts`'s `computeHeatmapBins`, kept independent rather than shared — that helper sums a scalar weight per bin, this one averages an end-point vector, which doesn't fit the same single-accumulator shape). Each occupied bin becomes one arrow: from the bin's center to the mean of every vector's end point that landed there. Empty bins are omitted rather than returned with `count: 0`, since there's no "zero-length arrow" to draw for a flow diagram the way a heatmap still colors an empty cell. ## Parameters | Parameter | Type | | ------------ | ---------------------------------------------------------------- | | `vectors` | readonly [`FlowVector`](/docs/api/core/interfaces/FlowVector)\[] | | `binsX` | `number` | | `binsY` | `number` | | `dimensions` | [`PitchDimensions`](/docs/api/core/interfaces/PitchDimensions) | ## Returns [`FlowBin`](/docs/api/core/interfaces/FlowBin)\[] --- # computeGoalAngle() Source: https://www.pitchkitjs.com/docs/api/core/functions/computeGoalAngle ```ts function computeGoalAngle( point, post1, post2 ): number; ``` Defined in: [packages/core/src/geometry/goal-angle.ts:10](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/geometry/goal-angle.ts#L10) The angle subtended at `point` by the segment `post1`-`post2` (e.g. a goal mouth), in radians, always in `[0, π]`. Works in either provider or pixel coordinates — the trig is invariant to the caller's space, unlike `arcSweepFlag`'s sweep direction, which does depend on it. ## Parameters | Parameter | Type | | --------- | -------------------------------------------- | | `point` | [`Point`](/docs/api/core/type-aliases/Point) | | `post1` | [`Point`](/docs/api/core/type-aliases/Point) | | `post2` | [`Point`](/docs/api/core/type-aliases/Point) | ## Returns `number` --- # computeGoalBox() Source: https://www.pitchkitjs.com/docs/api/core/functions/computeGoalBox ```ts function computeGoalBox( goal, isLeft, depth ): Rect; ``` Defined in: [packages/core/src/scene/appearance.ts:44](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/appearance.ts#L44) Computes the goal-box Rect for one goal line. `isLeft` = the pitch's near/left goal. ## Parameters | Parameter | Type | | --------- | ---------------------------------------- | | `goal` | [`Line`](/docs/api/core/interfaces/Line) | | `isLeft` | `boolean` | | `depth` | `number` | ## Returns [`Rect`](/docs/api/core/interfaces/Rect) --- # computeHeatmapBins() Source: https://www.pitchkitjs.com/docs/api/core/functions/computeHeatmapBins ```ts function computeHeatmapBins(layer, dimensions): HeatmapBin[]; ``` Defined in: [packages/core/src/heatmap/bins.ts:26](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/heatmap/bins.ts#L26) Divides the pitch into a `binsX` x `binsY` grid (in provider coordinates) and buckets each datum by point count, or by summed `weight` if the layer provides one. Pure — knows nothing about pixels/canvas/color, which keeps it independently testable and reusable regardless of render backend, mirroring `computePitchGeometry`. Points outside the pitch extent are ignored rather than clamped into an edge bin — they're not part of the pitch's heat distribution. Points exactly on the far edge (x === length or y === width) land in the last bin rather than being dropped. ## Type Parameters | Type Parameter | | -------------- | | `T` | ## Parameters | Parameter | Type | | ------------ | -------------------------------------------------------------- | | `layer` | [`HeatmapLayer`](/docs/api/core/interfaces/HeatmapLayer)\<`T`> | | `dimensions` | [`PitchDimensions`](/docs/api/core/interfaces/PitchDimensions) | ## Returns [`HeatmapBin`](/docs/api/core/interfaces/HeatmapBin)\[] --- # computeHexBins() Source: https://www.pitchkitjs.com/docs/api/core/functions/computeHexBins ```ts function computeHexBins(layer, dimensions): HexBin[]; ``` Defined in: [packages/core/src/hexbin/bins.ts:62](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/hexbin/bins.ts#L62) Buckets points into a hexagonal lattice over the pitch — mplsoccer's `hexbin`. Hexagons pack more evenly than squares (every neighbour is equidistant), so dense event data reads with less of the axis-aligned banding a rectangular `Heatmap` shows. Hand-rolled rather than taking `d3-hexbin`, to preserve @pitchkit/core's zero-runtime-dependency invariant — the same call `color/scale.ts` documents. The lattice itself is d3-hexbin's: two interleaved rectangular grids (odd rows offset by half a column), where a point's bin is the nearer of the two candidate centres. Bins with no points are omitted rather than returned with `value: 0`; unlike a rectangular grid, an empty hex has no cell to shade in a tiling that never covers the pitch exactly at its edges anyway. Cell size is driven by `binsX` (hexagon columns across the pitch length), mirroring `Heatmap`'s `binsX`, rather than an absolute radius — so the same layer looks right on a 120x80 StatsBomb pitch and a 100x100 Opta one. The pitch transform is uniform-scale (see `createPixelTransform`), so hexagons that are regular in provider units stay regular in pixels. ## Type Parameters | Type Parameter | | -------------- | | `T` | ## Parameters | Parameter | Type | | ------------ | -------------------------------------------------------------- | | `layer` | [`HexbinLayer`](/docs/api/core/interfaces/HexbinLayer)\<`T`> | | `dimensions` | [`PitchDimensions`](/docs/api/core/interfaces/PitchDimensions) | ## Returns [`HexBin`](/docs/api/core/interfaces/HexBin)\[] --- # computeKdeGrid() Source: https://www.pitchkitjs.com/docs/api/core/functions/computeKdeGrid ```ts function computeKdeGrid(layer, dimensions): KdeGrid; ``` Defined in: [packages/core/src/kde/density.ts:65](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/kde/density.ts#L65) Estimates a smooth density surface from point data via a 2D Gaussian kernel density estimate, sampled on a `resolution x resolution` grid over the pitch — mplsoccer's `kdeplot`. Unlike `computeHeatmapBins`, which is a hard histogram, each point spreads influence over its neighbourhood, so the result reads as a continuous surface rather than a grid of cells. Pure and framework-agnostic (no pixels, no colour) like every other binning function here; `render/canvas/paint-kde.ts` turns the grid into pixels. The kernel is axis-aligned with a per-axis bandwidth, defaulting to Silverman's rule (see `silvermanBandwidth`) so a caller gets a sensible surface without tuning; `bandwidth` overrides both axes when the data's own spread isn't the right smoothing scale (e.g. a handful of points). Values are densities, not probabilities — they're only ever consumed relative to `maxValue`, so the normalising constant is omitted. ## Type Parameters | Type Parameter | | -------------- | | `T` | ## Parameters | Parameter | Type | | ------------ | -------------------------------------------------------------- | | `layer` | [`KdeLayer`](/docs/api/core/interfaces/KdeLayer)\<`T`> | | `dimensions` | [`PitchDimensions`](/docs/api/core/interfaces/PitchDimensions) | ## Returns [`KdeGrid`](/docs/api/core/interfaces/KdeGrid) --- # computePitchGeometry() Source: https://www.pitchkitjs.com/docs/api/core/functions/computePitchGeometry ```ts function computePitchGeometry(dimensions): PitchGeometry; ``` Defined in: [packages/core/src/scene/geometry.ts:58](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/geometry.ts#L58) Computes pitch markings in provider coordinates from a PitchDimensions model. Pure geometry — knows nothing about pixels/viewports, which keeps it independently testable and reusable by a future Canvas renderer. ## Parameters | Parameter | Type | | ------------ | -------------------------------------------------------------- | | `dimensions` | [`PitchDimensions`](/docs/api/core/interfaces/PitchDimensions) | ## Returns [`PitchGeometry`](/docs/api/core/interfaces/PitchGeometry) --- # computePolygonCentroid() Source: https://www.pitchkitjs.com/docs/api/core/functions/computePolygonCentroid ```ts function computePolygonCentroid(points): Point; ``` Defined in: [packages/core/src/geometry/polygon.ts:9](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/geometry/polygon.ts#L9) Mean of the vertices. Used as the anchor point for a `` tooltip (there's no single "position" for an arbitrary shape the way a scatter point has one) — not a true area centroid, which would need per-edge shoelace weighting for a non-convex or unevenly-vertexed shape. ## Parameters | Parameter | Type | | --------- | -------------------------------------------------------- | | `points` | readonly [`Point`](/docs/api/core/type-aliases/Point)\[] | ## Returns [`Point`](/docs/api/core/type-aliases/Point) --- # computePositionalBins() Source: https://www.pitchkitjs.com/docs/api/core/functions/computePositionalBins ```ts function computePositionalBins(layer, dimensions): PositionalBin[]; ``` Defined in: [packages/core/src/heatmap/positional.ts:160](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/heatmap/positional.ts#L160) Buckets each datum into the Juego de Posición zone that contains it, by point count or by summed `weight` — mplsoccer's `bin_statistic_positional`. Zones tile the pitch without overlapping, so the first containing zone wins; points outside the pitch extent are ignored (same rule as `computeHeatmapBins`) and points exactly on the far edge land in the last zone that touches them rather than being dropped. ## Type Parameters | Type Parameter | | -------------- | | `T` | ## Parameters | Parameter | Type | | ------------ | ---------------------------------------------------------------------------------- | | `layer` | [`PositionalHeatmapLayer`](/docs/api/core/interfaces/PositionalHeatmapLayer)\<`T`> | | `dimensions` | [`PitchDimensions`](/docs/api/core/interfaces/PitchDimensions) | ## Returns [`PositionalBin`](/docs/api/core/interfaces/PositionalBin)\[] --- # computePositionalZones() Source: https://www.pitchkitjs.com/docs/api/core/functions/computePositionalZones ```ts function computePositionalZones(dimensions, layout?): PositionalZone[]; ``` Defined in: [packages/core/src/heatmap/positional.ts:87](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/heatmap/positional.ts#L87) Builds the Juego de Posición ("positional play") zones that mplsoccer's `bin_statistic_positional` bins into — 20 zones for the default `"full"` layout, 5 for `"horizontal"`, 6 for `"vertical"`. Ported from mplsoccer's `positional_zones()` so analysts get the layout they already know rather than an invented one. The `"full"` layout is not a grid: the two flank bands are split into all six columns, the three central bands only span penalty-area line to penalty-area line, and each penalty area is a single wide zone covering those three central bands. The zones still tile the pitch exactly. Names follow mplsoccer (`top-1`, `middle-2-1`, `penalty-left`, ...), and "top" means the top of the pitch *as displayed*, so which band earns that name depends on the provider's `yDirection` — matching mplsoccer's own `invert_y` branch. ## Parameters | Parameter | Type | Default value | | ------------ | ------------------------------------------------------------------ | ------------- | | `dimensions` | [`PitchDimensions`](/docs/api/core/interfaces/PitchDimensions) | `undefined` | | `layout` | [`PositionalLayout`](/docs/api/core/type-aliases/PositionalLayout) | `"full"` | ## Returns [`PositionalZone`](/docs/api/core/interfaces/PositionalZone)\[] --- # computeStripeBands() Source: https://www.pitchkitjs.com/docs/api/core/functions/computeStripeBands ```ts function computeStripeBands(outline, stripeCount): Rect[]; ``` Defined in: [packages/core/src/scene/appearance.ts:18](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/appearance.ts#L18) Computes the alternating vertical grass stripe bands across the outline (every other band is painted — the gaps are the "unpainted" stripes, left to show the surface color underneath). Pure geometry, no rendering. ## Parameters | Parameter | Type | | ------------- | ---------------------------------------- | | `outline` | [`Rect`](/docs/api/core/interfaces/Rect) | | `stripeCount` | `number` | ## Returns [`Rect`](/docs/api/core/interfaces/Rect)\[] --- # computeVoronoiCells() Source: https://www.pitchkitjs.com/docs/api/core/functions/computeVoronoiCells ```ts function computeVoronoiCells(sites, bounds): Point[][]; ``` Defined in: [packages/core/src/geometry/voronoi.ts:76](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/geometry/voronoi.ts#L76) Bounded Voronoi tessellation via half-plane intersection: each site's cell starts as the full `bounds` rectangle and gets clipped by the perpendicular-bisector half-plane against every other site (keeping the side closer to this site). O(n²) clips total — core has no runtime dependencies (`color/scale.ts`), so this stands in for a Delaunay-based library (e.g. d3-delaunay) at the point counts a pitch plot needs (tens of players, not thousands). Coincident sites produce a zero-magnitude bisector normal and are simply skipped for that pair (clipping against a degenerate half-plane would otherwise collapse the cell to nothing for both sites). ## Parameters | Parameter | Type | | --------- | -------------------------------------------------------- | | `sites` | readonly [`Point`](/docs/api/core/type-aliases/Point)\[] | | `bounds` | [`Rect`](/docs/api/core/interfaces/Rect) | ## Returns [`Point`](/docs/api/core/type-aliases/Point)\[]\[] --- # createColorScale() Source: https://www.pitchkitjs.com/docs/api/core/functions/createColorScale ```ts function createColorScale( minValue, maxValue, colorMin, colorMax ): (value) => string; ``` Defined in: [packages/core/src/color/scale.ts:25](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/color/scale.ts#L25) Builds a `value -> color` function that linearly interpolates between two 6-digit hex colors across `[minValue, maxValue]`. Hand-rolled rather than a colormap dependency, to preserve @pitchkit/core's zero-runtime-dependency invariant. Values outside the domain are clamped to the nearest end color. ## Parameters | Parameter | Type | | ---------- | -------- | | `minValue` | `number` | | `maxValue` | `number` | | `colorMin` | `string` | | `colorMax` | `string` | ## Returns (`value`) => `string` --- # createPixelTransform() Source: https://www.pitchkitjs.com/docs/api/core/functions/createPixelTransform ```ts function createPixelTransform(dimensions, viewport): PixelTransform; ``` Defined in: [packages/core/src/transform/pixel-transform.ts:18](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/transform/pixel-transform.ts#L18) Builds the provider-coordinates -> pixel-space transform for a single render. This is PitchKit's "internal scale + transform pipeline" (PRD §8.2): every layer calls toPixel() and inherits this single source of truth, so pitch geometry and data marks always stay aligned. ## Parameters | Parameter | Type | | ------------ | -------------------------------------------------------------- | | `dimensions` | [`PitchDimensions`](/docs/api/core/interfaces/PitchDimensions) | | `viewport` | [`Viewport`](/docs/api/core/interfaces/Viewport) | ## Returns [`PixelTransform`](/docs/api/core/interfaces/PixelTransform) --- # createStandardizeTransform() Source: https://www.pitchkitjs.com/docs/api/core/functions/createStandardizeTransform ```ts function createStandardizeTransform(from, to): (point) => Point; ``` Defined in: [packages/core/src/transform/standardize.ts:19](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/transform/standardize.ts#L19) Pure provider-to-provider coordinate conversion, based on each pitch's relative position along its length/width axes. This is the math underlying the public `Standardizer` API (PRD §7.1, tagged Phase 1) — M0 ships only this pure function, not a stateful public class. This is a simplified uniform-extent standardizer. mplsoccer's own Standardizer instead interpolates between pitch markings (six-yard line, penalty line, etc.) as piecewise control points, which keeps markings aligned across providers whose box-to-pitch-size ratios differ slightly. A uniform mapping is exact for extent-only landmarks (corners, center spot) but won't perfectly align marking boundaries between providers. Revisit if Milestone 1's public Standardizer needs that precision. ## Parameters | Parameter | Type | | --------- | -------------------------------------------------------------- | | `from` | [`PitchDimensions`](/docs/api/core/interfaces/PitchDimensions) | | `to` | [`PitchDimensions`](/docs/api/core/interfaces/PitchDimensions) | ## Returns (`point`) => [`Point`](/docs/api/core/type-aliases/Point) --- # cropForHalf() Source: https://www.pitchkitjs.com/docs/api/core/functions/cropForHalf ```ts function cropForHalf(dimensions): CropWindow; ``` Defined in: [packages/core/src/transform/half.ts:14](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/transform/half.ts#L14) Crop window for the attacking (right-hand) half of the pitch, in the provider's own coordinates. Built in the extent frame and converted back out, so it lands correctly for center-origin providers too — halving `length` alone would put the crop in the wrong place on a grid that starts at `-length/2`. `createPixelTransform` normalizes the corners regardless of yDirection, so y stays full-height. ## Parameters | Parameter | Type | | ------------ | -------------------------------------------------------------- | | `dimensions` | [`PitchDimensions`](/docs/api/core/interfaces/PitchDimensions) | ## Returns [`CropWindow`](/docs/api/core/interfaces/CropWindow) --- # displayUnitScale() Source: https://www.pitchkitjs.com/docs/api/core/functions/displayUnitScale ```ts function displayUnitScale(dimensions): Point; ``` Defined in: [packages/core/src/transform/canonical.ts:32](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/transform/canonical.ts#L32) How many real-world metres one grid unit covers, per axis. `[1, 1]` for every provider whose grid is already in real units — a UEFA or SkillCorner unit *is* a metre — and for StatsBomb, whose abstract 120x80 grid has always been rendered at its own shape and stays that way. Percentage grids are the exception, and the reason this exists. Opta and Wyscout both run `0..100` on *both* axes, but those axes measure different amounts of grass: x spans 105 m, y only 68 m. Deriving the pitch's shape from `length`/`width` alone therefore draws a square, which is [issue #2](https://github.com/yribeiro/pitchkit/issues/2). Converting to metres first fixes it and keeps the pixel scale a single number — pixels per metre — rather than stretching the two axes independently, so a centre circle stays a circle. ## Parameters | Parameter | Type | | ------------ | -------------------------------------------------------------- | | `dimensions` | [`PitchDimensions`](/docs/api/core/interfaces/PitchDimensions) | ## Returns [`Point`](/docs/api/core/type-aliases/Point) --- # getPitchDimensions() Source: https://www.pitchkitjs.com/docs/api/core/functions/getPitchDimensions ```ts function getPitchDimensions(pitchType, overrides?): PitchDimensions; ``` Defined in: [packages/core/src/dimensions/registry.ts:29](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/dimensions/registry.ts#L29) ## Parameters | Parameter | Type | | ------------ | ------------------------------------------------------------------------------ | | `pitchType` | [`PitchTypeId`](/docs/api/core/type-aliases/PitchTypeId) | | `overrides?` | [`PitchDimensionOverrides`](/docs/api/core/interfaces/PitchDimensionOverrides) | ## Returns [`PitchDimensions`](/docs/api/core/interfaces/PitchDimensions) --- # goalBoxDepth() Source: https://www.pitchkitjs.com/docs/api/core/functions/goalBoxDepth ```ts function goalBoxDepth(cornerArcRadius): number; ``` Defined in: [packages/core/src/scene/appearance.ts:39](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/appearance.ts#L39) The goal-box visual depth: a scaled-off approximation (a multiple of the corner-arc radius, itself a small provider-unit constant), not a regulation goal-depth figure, since this is a styling flourish, not a measured mark. ## Parameters | Parameter | Type | | ----------------- | -------- | | `cornerArcRadius` | `number` | ## Returns `number` --- # hexCorners() Source: https://www.pitchkitjs.com/docs/api/core/functions/hexCorners ```ts function hexCorners( centerX, centerY, radius ): readonly [number, number][]; ``` Defined in: [packages/core/src/hexbin/bins.ts:29](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/hexbin/bins.ts#L29) The six vertices of a pointy-top hexagon, in provider coordinates, starting at the top vertex and going clockwise. Shared by the painter and the tests so "what shape is a hex bin" has one definition. ## Parameters | Parameter | Type | | --------- | -------- | | `centerX` | `number` | | `centerY` | `number` | | `radius` | `number` | ## Returns readonly \[`number`, `number`]\[] --- # partStyle() Source: https://www.pitchkitjs.com/docs/api/core/functions/partStyle ```ts function partStyle(part): string; ``` Defined in: [packages/core/src/theme/part-style.ts:10](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/theme/part-style.ts#L10) Maps a `data-pitchkit-part` to its default presentation as an inline `style` string referencing themeable CSS variables with built-in fallbacks (PRD §8.7). Consumers retheme by setting the `--pitch-*` variables — never by overriding these shapes' fill/stroke directly. Shared verbatim between the SVG DOM renderer and @pitchkit/react's JSX emission, so the two can never drift on pitch-part styling. ## Parameters | Parameter | Type | | --------- | -------- | | `part` | `string` | ## Returns `string` --- # renderDensityLayersToCanvas() Source: https://www.pitchkitjs.com/docs/api/core/functions/renderDensityLayersToCanvas ```ts function renderDensityLayersToCanvas( scene, canvas, options? ): void; ``` Defined in: [packages/core/src/render/canvas/render-heatmap.ts:26](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/render/canvas/render-heatmap.ts#L26) Paints every density-type layer in a Scene (`heatmap`, `positionalHeatmap`, `hexbin`, `kde`) onto a 2D canvas, ignoring every other layer type — the SVG renderer handles those. Backs the canvas at `cssSize x devicePixelRatio` physical pixels and scales the drawing context accordingly (PRD §8.6), so dense layers stay crisp on retina displays without every painter needing to know about DPR itself. Does not attempt to composite with the SVG renderer's output — stacking the resulting canvas with an `` in the DOM is a consumer concern (`@pitchkit/react`'s), not core's. ## Parameters | Parameter | Type | | --------- | ------------------------------------------------------------------------ | | `scene` | [`Scene`](/docs/api/core/interfaces/Scene) | | `canvas` | `HTMLCanvasElement` | | `options` | [`RenderHeatmapOptions`](/docs/api/core/interfaces/RenderHeatmapOptions) | ## Returns `void` --- # renderSceneToSVGElement() Source: https://www.pitchkitjs.com/docs/api/core/functions/renderSceneToSVGElement ```ts function renderSceneToSVGElement(scene, doc?): SVGSVGElement; ``` Defined in: [packages/core/src/render/svg/render-scene.ts:54](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/render/svg/render-scene.ts#L54) **`Internal`** Walks a Scene and builds an SVGSVGElement via DOM APIs (not string templating) — runs under happy-dom in tests and a real DOM in the browser with the same code path, and extends cleanly to interactive marks (event listeners need real nodes) in Milestone 1. Resolves issue #6: `@pitchkit/react` re-emits its own JSX rather than calling this (JSX is what makes output SSR-able), so this function's only first-party consumer is the `packages/core/examples/index.html` dev harness. It is kept — and exported from `@pitchkit/core` so that harness keeps working — as an internal building block, not a supported public API for framework-agnostic/vanilla-JS consumption. React is the only officially supported rendering surface for marks; do not add painters for new Milestone 2 mark types (hexbin, KDE, flow, polygon, hull, Voronoi, goal angle) — ship those React-only. `canvasRenderer` (heatmaps) is unaffected and remains fully supported. ## Parameters | Parameter | Type | Default value | | --------- | ------------------------------------------ | ------------- | | `scene` | [`Scene`](/docs/api/core/interfaces/Scene) | `undefined` | | `doc` | `Document` | `document` | ## Returns `SVGSVGElement` --- # resolve() Source: https://www.pitchkitjs.com/docs/api/core/functions/resolve ```ts function resolve( prop, d, i ): V; ``` Defined in: [packages/core/src/scene/resolve.ts:8](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/resolve.ts#L8) Resolves a layer's `Accessor` prop for one datum: calls it if it's a function, returns it as-is otherwise. The single place every painter goes through for visual-prop resolution (PRD §8.7's accessor-prop ordering). ## Type Parameters | Type Parameter | | -------------- | | `T` | | `V` | ## Parameters | Parameter | Type | | --------- | ------------------------------------------------------------- | | `prop` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `V`> | | `d` | `T` | | `i` | `number` | ## Returns `V` --- # resolveStripeCount() Source: https://www.pitchkitjs.com/docs/api/core/functions/resolveStripeCount ```ts function resolveStripeCount(stripes): number; ``` Defined in: [packages/core/src/scene/appearance.ts:7](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/appearance.ts#L7) `true` -> a sensible default band count; a number -> that count (floored, min 0). ## Parameters | Parameter | Type | | --------- | ------------------------------------------------------------------------- | | `stripes` | [`PitchStripes`](/docs/api/core/type-aliases/PitchStripes) \| `undefined` | ## Returns `number` --- # selectGoal() Source: https://www.pitchkitjs.com/docs/api/core/functions/selectGoal ```ts function selectGoal( point, goals, which ): Line; ``` Defined in: [packages/core/src/geometry/goal-angle.ts:31](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/geometry/goal-angle.ts#L31) Picks which of the pitch's two goals (`computePitchGeometry(dimensions).goals`) a goal-angle mark should measure against. `"nearest"` compares distance from `point` to each goal's midpoint — the usual default, since a shot's angle is normally read against the goal it's aimed at, not a fixed side. ## Parameters | Parameter | Type | | --------- | ---------------------------------------------------------------------------------------------- | | `point` | [`Point`](/docs/api/core/type-aliases/Point) | | `goals` | readonly \[[`Line`](/docs/api/core/interfaces/Line), [`Line`](/docs/api/core/interfaces/Line)] | | `which` | `"left"` \| `"right"` \| `"nearest"` | ## Returns [`Line`](/docs/api/core/interfaces/Line) --- # silvermanBandwidth() Source: https://www.pitchkitjs.com/docs/api/core/functions/silvermanBandwidth ```ts function silvermanBandwidth(values): number; ``` Defined in: [packages/core/src/kde/density.ts:38](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/kde/density.ts#L38) Silverman's rule of thumb for a d-dimensional Gaussian kernel: `h = σ · (4 / (d + 2))^(1/(d+4)) · n^(-1/(d+4))`. For d = 2 the constant factor is exactly 1, leaving `h = σ · n^(-1/6)` — the same default seaborn's `kdeplot` (which mplsoccer wraps) starts from. Hand-rolled, like `color/scale.ts`'s colour interpolation, rather than taking a stats dependency for six lines of arithmetic. ## Parameters | Parameter | Type | | --------- | -------------------- | | `values` | readonly `number`\[] | ## Returns `number` --- # AnnotateLayer Source: https://www.pitchkitjs.com/docs/api/core/interfaces/AnnotateLayer Defined in: [packages/core/src/scene/types.ts:32](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L32) Text labels: one `` per datum, offset from its anchor point in pixels. ## Type Parameters | Type Parameter | Default type | | -------------- | ------------ | | `T` | `unknown` | ## Properties | Property | Modifier | Type | Description | Defined in | | ------------------------------------------ | ---------- | ------------------------------------------------------------------ | ------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | | `className?` | `readonly` | `string` | Applied as the `` element's `class` attribute; styling escape hatch (PRD §8.7). | [packages/core/src/scene/types.ts:41](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L41) | | `data` | `readonly` | readonly `T`\[] | - | [packages/core/src/scene/types.ts:34](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L34) | | `label` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `string`> | - | [packages/core/src/scene/types.ts:37](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L37) | | `offsetX?` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | [packages/core/src/scene/types.ts:38](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L38) | | `offsetY?` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | [packages/core/src/scene/types.ts:39](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L39) | | `type` | `readonly` | `"annotate"` | - | [packages/core/src/scene/types.ts:33](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L33) | | `x` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | [packages/core/src/scene/types.ts:35](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L35) | | `y` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | [packages/core/src/scene/types.ts:36](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L36) | --- # Arc Source: https://www.pitchkitjs.com/docs/api/core/interfaces/Arc Defined in: [packages/core/src/scene/geometry.ts:27](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/geometry.ts#L27) Described by center/radius plus explicit start/end points (rather than angles) so the renderer can feed coordinates straight through the same toPixel() transform as every other shape, and so SVG's arc path command (which takes endpoints, not angles) needs no extra conversion. ## Properties | Property | Modifier | Type | Defined in | | ----------------------------------- | ---------- | -------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | | `center` | `readonly` | [`Point`](/docs/api/core/type-aliases/Point) | [packages/core/src/scene/geometry.ts:28](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/geometry.ts#L28) | | `end` | `readonly` | [`Point`](/docs/api/core/type-aliases/Point) | [packages/core/src/scene/geometry.ts:31](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/geometry.ts#L31) | | `radius` | `readonly` | `number` | [packages/core/src/scene/geometry.ts:29](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/geometry.ts#L29) | | `start` | `readonly` | [`Point`](/docs/api/core/type-aliases/Point) | [packages/core/src/scene/geometry.ts:30](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/geometry.ts#L30) | --- # ArrowsLayer Source: https://www.pitchkitjs.com/docs/api/core/interfaces/ArrowsLayer Defined in: [packages/core/src/scene/types.ts:48](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L48) Directional marks: one straight line + arrowhead per datum, from `(x, y)` to `(x2, y2)` in provider coordinates (e.g. pass direction). ## Type Parameters | Type Parameter | Default type | | -------------- | ------------ | | `T` | `unknown` | ## Properties | Property | Modifier | Type | Description | Defined in | | -------------------------------------------------- | ---------- | ------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | | `className?` | `readonly` | `string` | Applied as both the shaft's and arrowhead's `class` attribute; styling escape hatch (PRD §8.7). | [packages/core/src/scene/types.ts:61](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L61) | | `data` | `readonly` | readonly `T`\[] | - | [packages/core/src/scene/types.ts:50](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L50) | | `headSize?` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | Arrowhead size in pixels. | [packages/core/src/scene/types.ts:59](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L59) | | `stroke?` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `string`> | - | [packages/core/src/scene/types.ts:55](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L55) | | `strokeOpacity?` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | [packages/core/src/scene/types.ts:57](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L57) | | `strokeWidth?` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | [packages/core/src/scene/types.ts:56](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L56) | | `type` | `readonly` | `"arrows"` | - | [packages/core/src/scene/types.ts:49](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L49) | | `x` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | [packages/core/src/scene/types.ts:51](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L51) | | `x2` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | [packages/core/src/scene/types.ts:53](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L53) | | `y` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | [packages/core/src/scene/types.ts:52](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L52) | | `y2` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | [packages/core/src/scene/types.ts:54](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L54) | --- # Circle Source: https://www.pitchkitjs.com/docs/api/core/interfaces/Circle Defined in: [packages/core/src/scene/geometry.ts:16](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/geometry.ts#L16) ## Properties | Property | Modifier | Type | Defined in | | ----------------------------------- | ---------- | -------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | | `center` | `readonly` | [`Point`](/docs/api/core/type-aliases/Point) | [packages/core/src/scene/geometry.ts:17](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/geometry.ts#L17) | | `radius` | `readonly` | `number` | [packages/core/src/scene/geometry.ts:18](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/geometry.ts#L18) | --- # CometLayer Source: https://www.pitchkitjs.com/docs/api/core/interfaces/CometLayer Defined in: [packages/core/src/scene/types.ts:70](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L70) Tapered "comet" lines: one filled shape per datum, narrow at `(x, y)` and wide at `(x2, y2)`, optionally fading in via a gradient. SVG can't vary a ``'s stroke-width along its length, so this is painted as a filled quadrilateral instead. ## Type Parameters | Type Parameter | Default type | | -------------- | ------------ | | `T` | `unknown` | ## Properties | Property | Modifier | Type | Description | Defined in | | -------------------------------------------- | ---------- | ------------------------------------------------------------------ | ---------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | | `className?` | `readonly` | `string` | Applied as every ``'s `class` attribute; styling escape hatch (PRD §8.7). | [packages/core/src/scene/types.ts:83](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L83) | | `color?` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `string`> | - | [packages/core/src/scene/types.ts:77](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L77) | | `data` | `readonly` | readonly `T`\[] | - | [packages/core/src/scene/types.ts:72](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L72) | | `endWidth?` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | [packages/core/src/scene/types.ts:79](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L79) | | `gradient?` | `readonly` | `boolean` | Fades opacity from 0 at the start to 1 at the end via a linear gradient. | [packages/core/src/scene/types.ts:81](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L81) | | `startWidth?` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | [packages/core/src/scene/types.ts:78](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L78) | | `type` | `readonly` | `"comet"` | - | [packages/core/src/scene/types.ts:71](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L71) | | `x` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | [packages/core/src/scene/types.ts:73](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L73) | | `x2` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | [packages/core/src/scene/types.ts:75](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L75) | | `y` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | [packages/core/src/scene/types.ts:74](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L74) | | `y2` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | [packages/core/src/scene/types.ts:76](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L76) | --- # ConvexHullLayer Source: https://www.pitchkitjs.com/docs/api/core/interfaces/ConvexHullLayer Defined in: [packages/core/src/scene/types.ts:234](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L234) The convex hull of a point set (e.g. a player's touches), rendered as a single filled polygon. ## Type Parameters | Type Parameter | Default type | | -------------- | ------------ | | `T` | `unknown` | ## Properties | Property | Modifier | Type | Description | Defined in | | ---------------------------------------------- | ---------- | ------------------------------------------------------------------ | -------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | | `className?` | `readonly` | `string` | Applied as the resulting polygon's `class` attribute; styling escape hatch (PRD §8.7). | [packages/core/src/scene/types.ts:244](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L244) | | `data` | `readonly` | readonly `T`\[] | - | [packages/core/src/scene/types.ts:236](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L236) | | `fill?` | `readonly` | `string` | - | [packages/core/src/scene/types.ts:239](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L239) | | `fillOpacity?` | `readonly` | `number` | - | [packages/core/src/scene/types.ts:240](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L240) | | `stroke?` | `readonly` | `string` | - | [packages/core/src/scene/types.ts:241](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L241) | | `strokeWidth?` | `readonly` | `number` | - | [packages/core/src/scene/types.ts:242](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L242) | | `type` | `readonly` | `"convexHull"` | - | [packages/core/src/scene/types.ts:235](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L235) | | `x` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | [packages/core/src/scene/types.ts:237](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L237) | | `y` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | [packages/core/src/scene/types.ts:238](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L238) | --- # CropWindow Source: https://www.pitchkitjs.com/docs/api/core/interfaces/CropWindow Defined in: [packages/core/src/transform/types.ts:8](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/transform/types.ts#L8) A crop window expressed in provider coordinates (not necessarily ordered). ## Properties | Property | Modifier | Type | Defined in | | --------------------------- | ---------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------- | | `x0` | `readonly` | `number` | [packages/core/src/transform/types.ts:9](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/transform/types.ts#L9) | | `x1` | `readonly` | `number` | [packages/core/src/transform/types.ts:11](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/transform/types.ts#L11) | | `y0` | `readonly` | `number` | [packages/core/src/transform/types.ts:10](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/transform/types.ts#L10) | | `y1` | `readonly` | `number` | [packages/core/src/transform/types.ts:12](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/transform/types.ts#L12) | --- # FlowBin Source: https://www.pitchkitjs.com/docs/api/core/interfaces/FlowBin Defined in: [packages/core/src/geometry/flow.ts:12](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/geometry/flow.ts#L12) One occupied grid cell: its center as the arrow start, the averaged end point, and how many vectors landed in it. ## Properties | Property | Modifier | Type | Defined in | | --------------------------------- | ---------- | -------- | ------------------------------------------------------------------------------------------------------------------------------ | | `count` | `readonly` | `number` | [packages/core/src/geometry/flow.ts:17](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/geometry/flow.ts#L17) | | `x` | `readonly` | `number` | [packages/core/src/geometry/flow.ts:13](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/geometry/flow.ts#L13) | | `x2` | `readonly` | `number` | [packages/core/src/geometry/flow.ts:15](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/geometry/flow.ts#L15) | | `y` | `readonly` | `number` | [packages/core/src/geometry/flow.ts:14](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/geometry/flow.ts#L14) | | `y2` | `readonly` | `number` | [packages/core/src/geometry/flow.ts:16](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/geometry/flow.ts#L16) | --- # FlowLayer Source: https://www.pitchkitjs.com/docs/api/core/interfaces/FlowLayer Defined in: [packages/core/src/scene/types.ts:282](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L282) Aggregated movement/pass data, binned by start location into a grid and rendered as one arrow per occupied bin, sized/colored by that bin's volume (mplsoccer's `flow`). ## Type Parameters | Type Parameter | Default type | | -------------- | ------------ | | `T` | `unknown` | ## Properties | Property | Modifier | Type | Description | Defined in | | ---------------------------------------------------- | ---------- | ------------------------------------------------------------------ | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | | `binsX?` | `readonly` | `number` | - | [packages/core/src/scene/types.ts:289](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L289) | | `binsY?` | `readonly` | `number` | - | [packages/core/src/scene/types.ts:290](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L290) | | `className?` | `readonly` | `string` | Applied as every arrow's `class` attribute; styling escape hatch (PRD §8.7). | [packages/core/src/scene/types.ts:300](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L300) | | `colorMax?` | `readonly` | `string` | Color at the highest bin count in the layer's data. | [packages/core/src/scene/types.ts:294](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L294) | | `colorMin?` | `readonly` | `string` | Color at the lowest bin count in the layer's data. | [packages/core/src/scene/types.ts:292](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L292) | | `data` | `readonly` | readonly `T`\[] | - | [packages/core/src/scene/types.ts:284](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L284) | | `strokeWidthMax?` | `readonly` | `number` | Arrow stroke width at the highest bin count. | [packages/core/src/scene/types.ts:298](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L298) | | `strokeWidthMin?` | `readonly` | `number` | Arrow stroke width at the lowest bin count. | [packages/core/src/scene/types.ts:296](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L296) | | `type` | `readonly` | `"flow"` | - | [packages/core/src/scene/types.ts:283](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L283) | | `x` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | [packages/core/src/scene/types.ts:285](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L285) | | `x2` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | [packages/core/src/scene/types.ts:287](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L287) | | `y` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | [packages/core/src/scene/types.ts:286](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L286) | | `y2` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | [packages/core/src/scene/types.ts:288](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L288) | --- # FlowVector Source: https://www.pitchkitjs.com/docs/api/core/interfaces/FlowVector Defined in: [packages/core/src/geometry/flow.ts:4](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/geometry/flow.ts#L4) One movement/pass, in provider coordinates, before binning. ## Properties | Property | Modifier | Type | Defined in | | --------------------------- | ---------- | -------- | ---------------------------------------------------------------------------------------------------------------------------- | | `x` | `readonly` | `number` | [packages/core/src/geometry/flow.ts:5](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/geometry/flow.ts#L5) | | `x2` | `readonly` | `number` | [packages/core/src/geometry/flow.ts:7](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/geometry/flow.ts#L7) | | `y` | `readonly` | `number` | [packages/core/src/geometry/flow.ts:6](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/geometry/flow.ts#L6) | | `y2` | `readonly` | `number` | [packages/core/src/geometry/flow.ts:8](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/geometry/flow.ts#L8) | --- # GoalAngleLayer Source: https://www.pitchkitjs.com/docs/api/core/interfaces/GoalAngleLayer Defined in: [packages/core/src/scene/types.ts:262](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L262) The angle subtended at each point by a goal mouth, rendered as a wedge from the point to both posts. ## Type Parameters | Type Parameter | Default type | | -------------- | ------------ | | `T` | `unknown` | ## Properties | Property | Modifier | Type | Description | Defined in | | ---------------------------------------------- | ---------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | | `className?` | `readonly` | `string` | Applied as every wedge's `class` attribute; styling escape hatch (PRD §8.7). | [packages/core/src/scene/types.ts:274](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L274) | | `data` | `readonly` | readonly `T`\[] | - | [packages/core/src/scene/types.ts:264](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L264) | | `fill?` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `string`> | - | [packages/core/src/scene/types.ts:269](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L269) | | `fillOpacity?` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | [packages/core/src/scene/types.ts:270](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L270) | | `goal?` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `"left"` \| `"right"` \| `"nearest"`> | Which goal to measure against; `"nearest"` (the default) picks by distance. | [packages/core/src/scene/types.ts:268](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L268) | | `stroke?` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `string`> | - | [packages/core/src/scene/types.ts:271](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L271) | | `strokeWidth?` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | [packages/core/src/scene/types.ts:272](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L272) | | `type` | `readonly` | `"goalAngle"` | - | [packages/core/src/scene/types.ts:263](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L263) | | `x` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | [packages/core/src/scene/types.ts:265](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L265) | | `y` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | [packages/core/src/scene/types.ts:266](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L266) | --- # HeatmapBin Source: https://www.pitchkitjs.com/docs/api/core/interfaces/HeatmapBin Defined in: [packages/core/src/heatmap/bins.ts:10](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/heatmap/bins.ts#L10) ## Extends * [`Rect`](/docs/api/core/interfaces/Rect) ## Properties | Property | Modifier | Type | Inherited from | Defined in | | ----------------------------------- | ---------- | -------- | --------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | | `height` | `readonly` | `number` | [`Rect`](/docs/api/core/interfaces/Rect).[`height`](/docs/api/core/interfaces/Rect#property-height) | [packages/core/src/scene/geometry.ts:8](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/geometry.ts#L8) | | `value` | `readonly` | `number` | - | [packages/core/src/heatmap/bins.ts:11](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/heatmap/bins.ts#L11) | | `width` | `readonly` | `number` | [`Rect`](/docs/api/core/interfaces/Rect).[`width`](/docs/api/core/interfaces/Rect#property-width) | [packages/core/src/scene/geometry.ts:7](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/geometry.ts#L7) | | `x` | `readonly` | `number` | [`Rect`](/docs/api/core/interfaces/Rect).[`x`](/docs/api/core/interfaces/Rect#property-x) | [packages/core/src/scene/geometry.ts:5](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/geometry.ts#L5) | | `y` | `readonly` | `number` | [`Rect`](/docs/api/core/interfaces/Rect).[`y`](/docs/api/core/interfaces/Rect#property-y) | [packages/core/src/scene/geometry.ts:6](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/geometry.ts#L6) | --- # HeatmapLayer Source: https://www.pitchkitjs.com/docs/api/core/interfaces/HeatmapLayer Defined in: [packages/core/src/scene/types.ts:93](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L93) Binned aggregate marks: divides the pitch into a `binsX` x `binsY` grid and colors each cell by point count (default) or, if `weight` is given, the sum of that weight per cell (e.g. total xG per zone). Rendered via the Canvas path (PRD §8.1) — SVG's per-element DOM cost doesn't scale to dense raster data the way a handful of `fillRect` calls does. ## Type Parameters | Type Parameter | Default type | | -------------- | ------------ | | `T` | `unknown` | ## Properties | Property | Modifier | Type | Description | Defined in | | ---------------------------------------- | ---------- | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------- | | `binsX?` | `readonly` | `number` | - | [packages/core/src/scene/types.ts:100](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L100) | | `binsY?` | `readonly` | `number` | - | [packages/core/src/scene/types.ts:101](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L101) | | `colorMax?` | `readonly` | `string` | Color at the highest bin value in the scene's data. | [packages/core/src/scene/types.ts:105](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L105) | | `colorMin?` | `readonly` | `string` | Color at the lowest bin value in the scene's data. | [packages/core/src/scene/types.ts:103](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L103) | | `data` | `readonly` | readonly `T`\[] | - | [packages/core/src/scene/types.ts:95](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L95) | | `type` | `readonly` | `"heatmap"` | - | [packages/core/src/scene/types.ts:94](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L94) | | `weight?` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | Omitted = count of points per bin; provided = sum of this per bin. | [packages/core/src/scene/types.ts:99](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L99) | | `x` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | [packages/core/src/scene/types.ts:96](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L96) | | `y` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | [packages/core/src/scene/types.ts:97](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L97) | --- # HexBin Source: https://www.pitchkitjs.com/docs/api/core/interfaces/HexBin Defined in: [packages/core/src/hexbin/bins.ts:17](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/hexbin/bins.ts#L17) One hexagonal cell: its centre in provider coordinates plus the statistic accumulated inside it. `radius` is the circumradius (centre to vertex), also in provider units, so a painter can derive the six corners without re-deriving the tiling. ## Properties | Property | Modifier | Type | Defined in | | ----------------------------------- | ---------- | -------- | -------------------------------------------------------------------------------------------------------------------------- | | `radius` | `readonly` | `number` | [packages/core/src/hexbin/bins.ts:20](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/hexbin/bins.ts#L20) | | `value` | `readonly` | `number` | [packages/core/src/hexbin/bins.ts:21](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/hexbin/bins.ts#L21) | | `x` | `readonly` | `number` | [packages/core/src/hexbin/bins.ts:18](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/hexbin/bins.ts#L18) | | `y` | `readonly` | `number` | [packages/core/src/hexbin/bins.ts:19](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/hexbin/bins.ts#L19) | --- # HexbinLayer Source: https://www.pitchkitjs.com/docs/api/core/interfaces/HexbinLayer Defined in: [packages/core/src/scene/types.ts:142](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L142) Hexagonally-binned density (mplsoccer's `hexbin`): the same aggregation as `HeatmapLayer` over a hexagonal lattice, which packs more evenly than a square grid and so shows less axis-aligned banding. Canvas-rendered. ## Type Parameters | Type Parameter | Default type | | -------------- | ------------ | | `T` | `unknown` | ## Properties | Property | Modifier | Type | Description | Defined in | | ---------------------------------------------- | ---------- | ------------------------------------------------------------------ | -------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | | `binsX?` | `readonly` | `number` | Hexagon columns across the pitch length; the cell size follows from it. | [packages/core/src/scene/types.ts:150](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L150) | | `colorMax?` | `readonly` | `string` | - | [packages/core/src/scene/types.ts:152](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L152) | | `colorMin?` | `readonly` | `string` | - | [packages/core/src/scene/types.ts:151](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L151) | | `data` | `readonly` | readonly `T`\[] | - | [packages/core/src/scene/types.ts:144](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L144) | | `stroke?` | `readonly` | `string` | Stroke colour for hexagon outlines; omitted = no outlines. | [packages/core/src/scene/types.ts:154](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L154) | | `strokeWidth?` | `readonly` | `number` | - | [packages/core/src/scene/types.ts:155](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L155) | | `type` | `readonly` | `"hexbin"` | - | [packages/core/src/scene/types.ts:143](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L143) | | `weight?` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | Omitted = count of points per hexagon; provided = sum of this per hexagon. | [packages/core/src/scene/types.ts:148](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L148) | | `x` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | [packages/core/src/scene/types.ts:145](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L145) | | `y` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | [packages/core/src/scene/types.ts:146](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L146) | --- # KdeGrid Source: https://www.pitchkitjs.com/docs/api/core/interfaces/KdeGrid Defined in: [packages/core/src/kde/density.ts:15](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/kde/density.ts#L15) A kernel density estimate sampled on a regular grid over the pitch. `values` is row-major (`row * cols + col`), each entry the estimated density at that cell's *centre* in provider coordinates. ## Properties | Property | Modifier | Type | Description | Defined in | | ------------------------------------------- | ---------- | -------------------- | --------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | | `bandwidthX` | `readonly` | `number` | The bandwidths actually used, whether given or derived by Silverman's rule. | [packages/core/src/kde/density.ts:25](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/kde/density.ts#L25) | | `bandwidthY` | `readonly` | `number` | - | [packages/core/src/kde/density.ts:26](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/kde/density.ts#L26) | | `cellHeight` | `readonly` | `number` | - | [packages/core/src/kde/density.ts:19](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/kde/density.ts#L19) | | `cellWidth` | `readonly` | `number` | - | [packages/core/src/kde/density.ts:18](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/kde/density.ts#L18) | | `cols` | `readonly` | `number` | - | [packages/core/src/kde/density.ts:16](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/kde/density.ts#L16) | | `maxValue` | `readonly` | `number` | Highest density in `values` — 0 when there's no data. | [packages/core/src/kde/density.ts:23](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/kde/density.ts#L23) | | `rows` | `readonly` | `number` | - | [packages/core/src/kde/density.ts:17](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/kde/density.ts#L17) | | `values` | `readonly` | readonly `number`\[] | Row-major density at each cell centre; length `cols * rows`. | [packages/core/src/kde/density.ts:21](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/kde/density.ts#L21) | --- # KdeLayer Source: https://www.pitchkitjs.com/docs/api/core/interfaces/KdeLayer Defined in: [packages/core/src/scene/types.ts:164](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L164) A smooth 2D kernel density estimate (mplsoccer's `kdeplot`), evaluated on a grid and painted as a continuous surface. Unlike the binned layers, low-density areas fade out rather than being filled with `colorMin`, so the pitch stays visible underneath. Canvas-rendered. ## Type Parameters | Type Parameter | Default type | | -------------- | ------------ | | `T` | `unknown` | ## Properties | Property | Modifier | Type | Description | Defined in | | -------------------------------------------- | ---------- | ------------------------------------------------------------------ | --------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | | `bandwidth?` | `readonly` | `number` | Kernel bandwidth in provider units; omitted = Silverman's rule of thumb per axis. | [packages/core/src/scene/types.ts:174](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L174) | | `colorMax?` | `readonly` | `string` | - | [packages/core/src/scene/types.ts:176](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L176) | | `colorMin?` | `readonly` | `string` | - | [packages/core/src/scene/types.ts:175](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L175) | | `data` | `readonly` | readonly `T`\[] | - | [packages/core/src/scene/types.ts:166](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L166) | | `maxOpacity?` | `readonly` | `number` | Opacity at the densest cell; density fades linearly to fully transparent at zero. | [packages/core/src/scene/types.ts:178](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L178) | | `resolution?` | `readonly` | `number` | Grid cells per axis the estimate is sampled on; higher = smoother, slower. | [packages/core/src/scene/types.ts:172](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L172) | | `type` | `readonly` | `"kde"` | - | [packages/core/src/scene/types.ts:165](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L165) | | `weight?` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | Omitted = every point counts equally; provided = each point's contribution is scaled by this. | [packages/core/src/scene/types.ts:170](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L170) | | `x` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | [packages/core/src/scene/types.ts:167](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L167) | | `y` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | [packages/core/src/scene/types.ts:168](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L168) | --- # Line Source: https://www.pitchkitjs.com/docs/api/core/interfaces/Line Defined in: [packages/core/src/scene/geometry.ts:11](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/geometry.ts#L11) ## Properties | Property | Modifier | Type | Defined in | | ------------------------------- | ---------- | -------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | | `from` | `readonly` | [`Point`](/docs/api/core/type-aliases/Point) | [packages/core/src/scene/geometry.ts:12](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/geometry.ts#L12) | | `to` | `readonly` | [`Point`](/docs/api/core/type-aliases/Point) | [packages/core/src/scene/geometry.ts:13](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/geometry.ts#L13) | --- # PitchAppearance Source: https://www.pitchkitjs.com/docs/api/core/interfaces/PitchAppearance Defined in: [packages/core/src/scene/types.ts:316](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L316) Non-coordinate visual treatment of the pitch surface (PRD §8.7's "grass/stripes, line colour/width/alpha, goal types" styling knobs). Deliberately separate from `PitchDimensions` (a fact about the provider's coordinate system) and from CSS variables (the colours themselves) — this only toggles which shapes get painted. ## Properties | Property | Modifier | Type | Description | Defined in | | -------------------------------------------- | ---------- | ---------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | | `goalType?` | `readonly` | [`GoalType`](/docs/api/core/type-aliases/GoalType) | - | [packages/core/src/scene/types.ts:318](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L318) | | `linesOnTop?` | `readonly` | `boolean` | Paint the pitch markings *above* the layers rather than below them — mplsoccer's `line_zorder`. Off by default, so SVG marks (a scatter dot on the penalty spot, an arrow crossing the halfway line) sit on top of the lines, which is what you want for discrete marks. Turn it on for the density layers: an opaque `heatmap`/ `positionalHeatmap`/`hexbin`/`kde` fill covers the whole pitch and would otherwise hide the markings underneath it — the same masking problem opaque stripes caused for the outline in issue #14, one level up. Only the *markings* move; the grass surface and stripes always stay at the bottom. | [packages/core/src/scene/types.ts:334](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L334) | | `stripes?` | `readonly` | [`PitchStripes`](/docs/api/core/type-aliases/PitchStripes) | - | [packages/core/src/scene/types.ts:317](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L317) | --- # PitchDimensionOverrides Source: https://www.pitchkitjs.com/docs/api/core/interfaces/PitchDimensionOverrides Defined in: [packages/core/src/dimensions/registry.ts:24](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/dimensions/registry.ts#L24) The real extent of one particular pitch, for providers whose coordinates are metres on an actual pitch rather than a fixed grid. Only meaningful for non-normalised types: SkillCorner's open data spans 104 to 106 m, because those are the stadiums' real sizes. Overriding a normalised grid (Opta's 0-100) would be meaningless and is rejected. ## Properties | Property | Modifier | Type | Defined in | | ------------------------------------ | ---------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------ | | `length?` | `readonly` | `number` | [packages/core/src/dimensions/registry.ts:25](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/dimensions/registry.ts#L25) | | `width?` | `readonly` | `number` | [packages/core/src/dimensions/registry.ts:26](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/dimensions/registry.ts#L26) | --- # PitchDimensions Source: https://www.pitchkitjs.com/docs/api/core/interfaces/PitchDimensions Defined in: [packages/core/src/dimensions/types.ts:34](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/dimensions/types.ts#L34) Encodes a provider's coordinate system: extent, origin corner, y-axis direction, and whether coordinates are normalized (e.g. Opta's 0-100 scale), per PRD §8.2. Display orientation (horizontal/vertical) is deliberately NOT part of this model — it's a Viewport/display concern, not a fact about the provider's coordinate system. ## Properties | Property | Modifier | Type | Description | Defined in | | ------------------------------------------------------- | ---------- | ---------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ | | `length` | `readonly` | `number` | Full pitch extent in provider units (along the x-axis). | [packages/core/src/dimensions/types.ts:37](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/dimensions/types.ts#L37) | | `markings` | `readonly` | [`PitchMarkings`](/docs/api/core/interfaces/PitchMarkings) | - | [packages/core/src/dimensions/types.ts:52](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/dimensions/types.ts#L52) | | `normalized` | `readonly` | `boolean` | True for percentage-style normalized grids (e.g. Opta's 0-100). | [packages/core/src/dimensions/types.ts:43](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/dimensions/types.ts#L43) | | `origin` | `readonly` | [`PitchOrigin`](/docs/api/core/type-aliases/PitchOrigin) | - | [packages/core/src/dimensions/types.ts:40](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/dimensions/types.ts#L40) | | `pitchType` | `readonly` | [`PitchTypeId`](/docs/api/core/type-aliases/PitchTypeId) | - | [packages/core/src/dimensions/types.ts:35](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/dimensions/types.ts#L35) | | `realLengthMeters` | `readonly` | `number` | Approximate real-world pitch size this provider's grid is calibrated against. Used only for documentation / sanity-check conversions — not an exact per-axis scale for every provider (e.g. Opta's circle\_diameter constant is not axis-aware, so width-axis conversions of circular markings are approximate by design). | [packages/core/src/dimensions/types.ts:50](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/dimensions/types.ts#L50) | | `realWidthMeters` | `readonly` | `number` | - | [packages/core/src/dimensions/types.ts:51](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/dimensions/types.ts#L51) | | `width` | `readonly` | `number` | Full pitch extent in provider units (along the y-axis). | [packages/core/src/dimensions/types.ts:39](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/dimensions/types.ts#L39) | | `yDirection` | `readonly` | [`YDirection`](/docs/api/core/type-aliases/YDirection) | - | [packages/core/src/dimensions/types.ts:41](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/dimensions/types.ts#L41) | --- # PitchGeometry Source: https://www.pitchkitjs.com/docs/api/core/interfaces/PitchGeometry Defined in: [packages/core/src/scene/geometry.ts:34](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/geometry.ts#L34) ## Properties | Property | Modifier | Type | Description | Defined in | | ----------------------------------------------- | ---------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | | `centerCircle` | `readonly` | [`Circle`](/docs/api/core/interfaces/Circle) | - | [packages/core/src/scene/geometry.ts:37](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/geometry.ts#L37) | | `centerSpot` | `readonly` | [`Point`](/docs/api/core/type-aliases/Point) | - | [packages/core/src/scene/geometry.ts:38](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/geometry.ts#L38) | | `cornerArcs` | `readonly` | readonly \[[`Arc`](/docs/api/core/interfaces/Arc), [`Arc`](/docs/api/core/interfaces/Arc), [`Arc`](/docs/api/core/interfaces/Arc), [`Arc`](/docs/api/core/interfaces/Arc)] | \[top-left, top-right, bottom-left, bottom-right] in provider-native (0,0)-(length,width) terms | [packages/core/src/scene/geometry.ts:48](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/geometry.ts#L48) | | `goals` | `readonly` | readonly \[[`Line`](/docs/api/core/interfaces/Line), [`Line`](/docs/api/core/interfaces/Line)] | \[left, right] | [packages/core/src/scene/geometry.ts:50](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/geometry.ts#L50) | | `halfwayLine` | `readonly` | [`Line`](/docs/api/core/interfaces/Line) | - | [packages/core/src/scene/geometry.ts:36](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/geometry.ts#L36) | | `outline` | `readonly` | [`Rect`](/docs/api/core/interfaces/Rect) | - | [packages/core/src/scene/geometry.ts:35](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/geometry.ts#L35) | | `penaltyArcs` | `readonly` | readonly \[[`Arc`](/docs/api/core/interfaces/Arc), [`Arc`](/docs/api/core/interfaces/Arc)] | \[left, right] | [packages/core/src/scene/geometry.ts:46](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/geometry.ts#L46) | | `penaltyAreas` | `readonly` | readonly \[[`Rect`](/docs/api/core/interfaces/Rect), [`Rect`](/docs/api/core/interfaces/Rect)] | \[left, right] | [packages/core/src/scene/geometry.ts:40](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/geometry.ts#L40) | | `penaltySpots` | `readonly` | readonly \[[`Point`](/docs/api/core/type-aliases/Point), [`Point`](/docs/api/core/type-aliases/Point)] | \[left, right] | [packages/core/src/scene/geometry.ts:44](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/geometry.ts#L44) | | `sixYardBoxes` | `readonly` | readonly \[[`Rect`](/docs/api/core/interfaces/Rect), [`Rect`](/docs/api/core/interfaces/Rect)] | \[left, right] | [packages/core/src/scene/geometry.ts:42](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/geometry.ts#L42) | --- # PitchMarkings Source: https://www.pitchkitjs.com/docs/api/core/interfaces/PitchMarkings Defined in: [packages/core/src/dimensions/types.ts:16](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/dimensions/types.ts#L16) Pitch markings in provider units. Sourced from mplsoccer's published per-provider constants (not derived from real-world meters) because real event/tracking data sets are published against these exact landmark positions — deriving our own values would silently misalign rendered markings against real provider data. ## Properties | Property | Modifier | Type | Defined in | | ------------------------------------------------------------- | ---------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------ | | `centerCircleRadius` | `readonly` | `number` | [packages/core/src/dimensions/types.ts:21](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/dimensions/types.ts#L21) | | `cornerArcRadius` | `readonly` | `number` | [packages/core/src/dimensions/types.ts:23](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/dimensions/types.ts#L23) | | `goalWidth` | `readonly` | `number` | [packages/core/src/dimensions/types.ts:24](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/dimensions/types.ts#L24) | | `penaltyAreaLength` | `readonly` | `number` | [packages/core/src/dimensions/types.ts:17](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/dimensions/types.ts#L17) | | `penaltyAreaWidth` | `readonly` | `number` | [packages/core/src/dimensions/types.ts:18](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/dimensions/types.ts#L18) | | `penaltySpotDistance` | `readonly` | `number` | [packages/core/src/dimensions/types.ts:22](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/dimensions/types.ts#L22) | | `sixYardLength` | `readonly` | `number` | [packages/core/src/dimensions/types.ts:19](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/dimensions/types.ts#L19) | | `sixYardWidth` | `readonly` | `number` | [packages/core/src/dimensions/types.ts:20](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/dimensions/types.ts#L20) | --- # PixelTransform Source: https://www.pitchkitjs.com/docs/api/core/interfaces/PixelTransform Defined in: [packages/core/src/transform/types.ts:34](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/transform/types.ts#L34) ## Properties | Property | Modifier | Type | Description | Defined in | | --------------------------------- | ---------- | -------- | --------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | | `scale` | `readonly` | `number` | Uniform pixels-per-provider-unit scale factor actually applied. | [packages/core/src/transform/types.ts:39](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/transform/types.ts#L39) | ## Methods ### toPixel() ```ts toPixel(point): Point; ``` Defined in: [packages/core/src/transform/types.ts:35](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/transform/types.ts#L35) #### Parameters | Parameter | Type | | --------- | -------------------------------------------- | | `point` | [`Point`](/docs/api/core/type-aliases/Point) | #### Returns [`Point`](/docs/api/core/type-aliases/Point) *** ### toProvider() ```ts toProvider(point): Point; ``` Defined in: [packages/core/src/transform/types.ts:37](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/transform/types.ts#L37) Inverse of toPixel; useful for future hit-testing. #### Parameters | Parameter | Type | | --------- | -------------------------------------------- | | `point` | [`Point`](/docs/api/core/type-aliases/Point) | #### Returns [`Point`](/docs/api/core/type-aliases/Point) --- # PolygonLayer Source: https://www.pitchkitjs.com/docs/api/core/interfaces/PolygonLayer Defined in: [packages/core/src/scene/types.ts:221](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L221) An arbitrary closed shape: one polygon per datum, from a list of vertices in provider coordinates. ## Type Parameters | Type Parameter | Default type | | -------------- | ------------ | | `T` | `unknown` | ## Properties | Property | Modifier | Type | Description | Defined in | | ---------------------------------------------- | ---------- | ---------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------- | | `className?` | `readonly` | `string` | Applied as every polygon's `class` attribute; styling escape hatch (PRD §8.7). | [packages/core/src/scene/types.ts:230](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L230) | | `data` | `readonly` | readonly `T`\[] | - | [packages/core/src/scene/types.ts:223](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L223) | | `fill?` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `string`> | - | [packages/core/src/scene/types.ts:225](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L225) | | `fillOpacity?` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | [packages/core/src/scene/types.ts:226](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L226) | | `points` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, readonly readonly \[`number`, `number`]\[]> | - | [packages/core/src/scene/types.ts:224](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L224) | | `stroke?` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `string`> | - | [packages/core/src/scene/types.ts:227](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L227) | | `strokeWidth?` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | [packages/core/src/scene/types.ts:228](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L228) | | `type` | `readonly` | `"polygon"` | - | [packages/core/src/scene/types.ts:222](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L222) | --- # PositionalBin Source: https://www.pitchkitjs.com/docs/api/core/interfaces/PositionalBin Defined in: [packages/core/src/heatmap/positional.ts:17](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/heatmap/positional.ts#L17) A zone plus the statistic accumulated inside it. ## Extends * [`PositionalZone`](/docs/api/core/interfaces/PositionalZone) ## Properties | Property | Modifier | Type | Inherited from | Defined in | | ----------------------------------- | ---------- | -------- | --------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | | `height` | `readonly` | `number` | [`PositionalZone`](/docs/api/core/interfaces/PositionalZone).[`height`](/docs/api/core/interfaces/PositionalZone#property-height) | [packages/core/src/scene/geometry.ts:8](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/geometry.ts#L8) | | `name` | `readonly` | `string` | [`PositionalZone`](/docs/api/core/interfaces/PositionalZone).[`name`](/docs/api/core/interfaces/PositionalZone#property-name) | [packages/core/src/heatmap/positional.ts:13](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/heatmap/positional.ts#L13) | | `value` | `readonly` | `number` | - | [packages/core/src/heatmap/positional.ts:18](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/heatmap/positional.ts#L18) | | `width` | `readonly` | `number` | [`PositionalZone`](/docs/api/core/interfaces/PositionalZone).[`width`](/docs/api/core/interfaces/PositionalZone#property-width) | [packages/core/src/scene/geometry.ts:7](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/geometry.ts#L7) | | `x` | `readonly` | `number` | [`PositionalZone`](/docs/api/core/interfaces/PositionalZone).[`x`](/docs/api/core/interfaces/PositionalZone#property-x) | [packages/core/src/scene/geometry.ts:5](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/geometry.ts#L5) | | `y` | `readonly` | `number` | [`PositionalZone`](/docs/api/core/interfaces/PositionalZone).[`y`](/docs/api/core/interfaces/PositionalZone#property-y) | [packages/core/src/scene/geometry.ts:6](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/geometry.ts#L6) | --- # PositionalHeatmapLayer Source: https://www.pitchkitjs.com/docs/api/core/interfaces/PositionalHeatmapLayer Defined in: [packages/core/src/scene/types.ts:121](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L121) Like `HeatmapLayer`, but binned into Juego de Posición *zones* derived from the pitch markings (penalty areas, six-yard boxes, halfway line) rather than a uniform `binsX` x `binsY` grid — mplsoccer's `bin_statistic_positional` + `heatmap_positional`. Also Canvas-rendered. ## Type Parameters | Type Parameter | Default type | | -------------- | ------------ | | `T` | `unknown` | ## Properties | Property | Modifier | Type | Description | Defined in | | ---------------------------------------------- | ---------- | ------------------------------------------------------------------ | -------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | | `colorMax?` | `readonly` | `string` | - | [packages/core/src/scene/types.ts:131](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L131) | | `colorMin?` | `readonly` | `string` | - | [packages/core/src/scene/types.ts:130](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L130) | | `data` | `readonly` | readonly `T`\[] | - | [packages/core/src/scene/types.ts:123](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L123) | | `layout?` | `readonly` | [`PositionalLayout`](/docs/api/core/type-aliases/PositionalLayout) | Defaults to `"full"`, the 20-zone layout. | [packages/core/src/scene/types.ts:129](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L129) | | `stroke?` | `readonly` | `string` | Stroke colour for zone outlines; omitted = no outlines. | [packages/core/src/scene/types.ts:133](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L133) | | `strokeWidth?` | `readonly` | `number` | - | [packages/core/src/scene/types.ts:134](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L134) | | `type` | `readonly` | `"positionalHeatmap"` | - | [packages/core/src/scene/types.ts:122](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L122) | | `weight?` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | Omitted = count of points per zone; provided = sum of this per zone. | [packages/core/src/scene/types.ts:127](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L127) | | `x` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | [packages/core/src/scene/types.ts:124](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L124) | | `y` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | [packages/core/src/scene/types.ts:125](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L125) | --- # PositionalZone Source: https://www.pitchkitjs.com/docs/api/core/interfaces/PositionalZone Defined in: [packages/core/src/heatmap/positional.ts:12](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/heatmap/positional.ts#L12) One Juego de Posición zone: a rectangle in provider coordinates plus mplsoccer's name for it, so a consumer can label or key off a zone without re-deriving the layout. ## Extends * [`Rect`](/docs/api/core/interfaces/Rect) ## Extended by * [`PositionalBin`](/docs/api/core/interfaces/PositionalBin) ## Properties | Property | Modifier | Type | Inherited from | Defined in | | ----------------------------------- | ---------- | -------- | --------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | | `height` | `readonly` | `number` | [`Rect`](/docs/api/core/interfaces/Rect).[`height`](/docs/api/core/interfaces/Rect#property-height) | [packages/core/src/scene/geometry.ts:8](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/geometry.ts#L8) | | `name` | `readonly` | `string` | - | [packages/core/src/heatmap/positional.ts:13](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/heatmap/positional.ts#L13) | | `width` | `readonly` | `number` | [`Rect`](/docs/api/core/interfaces/Rect).[`width`](/docs/api/core/interfaces/Rect#property-width) | [packages/core/src/scene/geometry.ts:7](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/geometry.ts#L7) | | `x` | `readonly` | `number` | [`Rect`](/docs/api/core/interfaces/Rect).[`x`](/docs/api/core/interfaces/Rect#property-x) | [packages/core/src/scene/geometry.ts:5](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/geometry.ts#L5) | | `y` | `readonly` | `number` | [`Rect`](/docs/api/core/interfaces/Rect).[`y`](/docs/api/core/interfaces/Rect#property-y) | [packages/core/src/scene/geometry.ts:6](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/geometry.ts#L6) | --- # Rect Source: https://www.pitchkitjs.com/docs/api/core/interfaces/Rect Defined in: [packages/core/src/scene/geometry.ts:4](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/geometry.ts#L4) ## Extended by * [`HeatmapBin`](/docs/api/core/interfaces/HeatmapBin) * [`PositionalZone`](/docs/api/core/interfaces/PositionalZone) ## Properties | Property | Modifier | Type | Defined in | | ----------------------------------- | ---------- | -------- | ------------------------------------------------------------------------------------------------------------------------------ | | `height` | `readonly` | `number` | [packages/core/src/scene/geometry.ts:8](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/geometry.ts#L8) | | `width` | `readonly` | `number` | [packages/core/src/scene/geometry.ts:7](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/geometry.ts#L7) | | `x` | `readonly` | `number` | [packages/core/src/scene/geometry.ts:5](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/geometry.ts#L5) | | `y` | `readonly` | `number` | [packages/core/src/scene/geometry.ts:6](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/geometry.ts#L6) | --- # RenderHeatmapOptions Source: https://www.pitchkitjs.com/docs/api/core/interfaces/RenderHeatmapOptions Defined in: [packages/core/src/render/canvas/render-heatmap.ts:9](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/render/canvas/render-heatmap.ts#L9) ## Properties | Property | Modifier | Type | Description | Defined in | | -------------------------------------------------------- | ---------- | -------- | ------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `devicePixelRatio?` | `readonly` | `number` | Defaults to `window.devicePixelRatio` (falling back to 1 if unavailable). | [packages/core/src/render/canvas/render-heatmap.ts:11](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/render/canvas/render-heatmap.ts#L11) | --- # Renderer Source: https://www.pitchkitjs.com/docs/api/core/interfaces/Renderer Defined in: [packages/core/src/render/renderer.ts:13](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/render/renderer.ts#L13) **`Internal`** A layer declares *what* to draw; the renderer decides SVG vs Canvas (PRD §8.1). `svgRenderer` (the SVG implementation of this interface) is internal building-block surface, not a supported public consumption path — see the note on `svgRenderer` in `render/svg/render-scene.ts` (resolves issue #6). `canvasRenderer` for heatmaps is unaffected: `@pitchkit/react`'s `` calls into it directly and it remains fully supported. ## Type Parameters | Type Parameter | | -------------- | | `TOutput` | ## Methods ### render() ```ts render(scene): TOutput; ``` Defined in: [packages/core/src/render/renderer.ts:14](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/render/renderer.ts#L14) #### Parameters | Parameter | Type | | --------- | ------------------------------------------ | | `scene` | [`Scene`](/docs/api/core/interfaces/Scene) | #### Returns `TOutput` --- # ScatterLayer Source: https://www.pitchkitjs.com/docs/api/core/interfaces/ScatterLayer Defined in: [packages/core/src/scene/types.ts:17](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L17) Scatter marks: one circle per datum, positioned in the scene's own provider coordinates (not pre-converted — that's a consumer concern via `createStandardizeTransform`). ## Type Parameters | Type Parameter | Default type | | -------------- | ------------ | | `T` | `unknown` | ## Properties | Property | Modifier | Type | Description | Defined in | | ---------------------------------------------- | ---------- | ------------------------------------------------------------------ | --------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | | `className?` | `readonly` | `string` | Applied as every ``'s `class` attribute; styling escape hatch (PRD §8.7). | [packages/core/src/scene/types.ts:28](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L28) | | `data` | `readonly` | readonly `T`\[] | - | [packages/core/src/scene/types.ts:19](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L19) | | `fill?` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `string`> | - | [packages/core/src/scene/types.ts:23](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L23) | | `fillOpacity?` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | [packages/core/src/scene/types.ts:24](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L24) | | `r?` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | [packages/core/src/scene/types.ts:22](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L22) | | `stroke?` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `string`> | - | [packages/core/src/scene/types.ts:25](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L25) | | `strokeWidth?` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | [packages/core/src/scene/types.ts:26](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L26) | | `type` | `readonly` | `"scatter"` | - | [packages/core/src/scene/types.ts:18](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L18) | | `x` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | [packages/core/src/scene/types.ts:20](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L20) | | `y` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | [packages/core/src/scene/types.ts:21](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L21) | --- # Scene Source: https://www.pitchkitjs.com/docs/api/core/interfaces/Scene Defined in: [packages/core/src/scene/types.ts:342](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L342) A Scene is the renderer-independent description of one pitch render: which provider coordinate system, how it's displayed, and what's drawn on it (PRD §8.3). Pure data — layers don't own DOM. ## Properties | Property | Modifier | Type | Defined in | | -------------------------------------------- | ---------- | -------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | | `appearance?` | `readonly` | [`PitchAppearance`](/docs/api/core/interfaces/PitchAppearance) | [packages/core/src/scene/types.ts:345](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L345) | | `dimensions` | `readonly` | [`PitchDimensions`](/docs/api/core/interfaces/PitchDimensions) | [packages/core/src/scene/types.ts:343](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L343) | | `layers` | `readonly` | readonly [`Layer`](/docs/api/core/type-aliases/Layer)\[] | [packages/core/src/scene/types.ts:346](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L346) | | `viewport` | `readonly` | [`Viewport`](/docs/api/core/interfaces/Viewport) | [packages/core/src/scene/types.ts:344](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L344) | --- # Viewport Source: https://www.pitchkitjs.com/docs/api/core/interfaces/Viewport Defined in: [packages/core/src/transform/types.ts:22](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/transform/types.ts#L22) ## Properties | Property | Modifier | Type | Description | Defined in | | --------------------------------------------- | ---------- | -------------------------------------------------------------- | ----------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | | `crop?` | `readonly` | [`CropWindow`](/docs/api/core/interfaces/CropWindow) | Undefined = full pitch. | [packages/core/src/transform/types.ts:29](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/transform/types.ts#L29) | | `height` | `readonly` | `number` | CSS pixel height of the rendering container. | [packages/core/src/transform/types.ts:26](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/transform/types.ts#L26) | | `orientation` | `readonly` | [`Orientation`](/docs/api/core/type-aliases/Orientation) | - | [packages/core/src/transform/types.ts:27](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/transform/types.ts#L27) | | `padding?` | `readonly` | [`ViewportPadding`](/docs/api/core/interfaces/ViewportPadding) | Pixel padding inside the viewport; defaults to zero on all sides. | [packages/core/src/transform/types.ts:31](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/transform/types.ts#L31) | | `width` | `readonly` | `number` | CSS pixel width of the rendering container. | [packages/core/src/transform/types.ts:24](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/transform/types.ts#L24) | --- # ViewportPadding Source: https://www.pitchkitjs.com/docs/api/core/interfaces/ViewportPadding Defined in: [packages/core/src/transform/types.ts:15](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/transform/types.ts#L15) ## Properties | Property | Modifier | Type | Defined in | | ----------------------------------- | ---------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------- | | `bottom` | `readonly` | `number` | [packages/core/src/transform/types.ts:18](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/transform/types.ts#L18) | | `left` | `readonly` | `number` | [packages/core/src/transform/types.ts:19](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/transform/types.ts#L19) | | `right` | `readonly` | `number` | [packages/core/src/transform/types.ts:17](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/transform/types.ts#L17) | | `top` | `readonly` | `number` | [packages/core/src/transform/types.ts:16](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/transform/types.ts#L16) | --- # VoronoiLayer Source: https://www.pitchkitjs.com/docs/api/core/interfaces/VoronoiLayer Defined in: [packages/core/src/scene/types.ts:248](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L248) Voronoi tessellation over a point set (e.g. player positions), clipped to the pitch outline. ## Type Parameters | Type Parameter | Default type | | -------------- | ------------ | | `T` | `unknown` | ## Properties | Property | Modifier | Type | Description | Defined in | | ---------------------------------------------- | ---------- | ------------------------------------------------------------------ | --------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | | `className?` | `readonly` | `string` | Applied as every cell's `class` attribute; styling escape hatch (PRD §8.7). | [packages/core/src/scene/types.ts:258](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L258) | | `data` | `readonly` | readonly `T`\[] | - | [packages/core/src/scene/types.ts:250](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L250) | | `fill?` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `string`> | - | [packages/core/src/scene/types.ts:253](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L253) | | `fillOpacity?` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | [packages/core/src/scene/types.ts:254](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L254) | | `stroke?` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `string`> | - | [packages/core/src/scene/types.ts:255](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L255) | | `strokeWidth?` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | [packages/core/src/scene/types.ts:256](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L256) | | `type` | `readonly` | `"voronoi"` | - | [packages/core/src/scene/types.ts:249](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L249) | | `x` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | [packages/core/src/scene/types.ts:251](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L251) | | `y` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | [packages/core/src/scene/types.ts:252](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L252) | --- # Accessor Source: https://www.pitchkitjs.com/docs/api/core/type-aliases/Accessor ```ts type Accessor = V | ((d, i) => V); ``` Defined in: [packages/core/src/scene/types.ts:10](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L10) A visual property of a layer: either a static value applied to every datum, or a function of the datum (and its index) computing it per-mark. Mirrors the PRD's `x={d => d.location[0]}` ergonomics (§8.7) — every visual prop accepts either form via the same prop name. ## Type Parameters | Type Parameter | | -------------- | | `T` | | `V` | --- # GoalType Source: https://www.pitchkitjs.com/docs/api/core/type-aliases/GoalType ```ts type GoalType = "line" | "box"; ``` Defined in: [packages/core/src/scene/types.ts:307](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L307) Visual treatment of the goal markings. --- # Layer Source: https://www.pitchkitjs.com/docs/api/core/type-aliases/Layer ```ts type Layer = | ScatterLayer | AnnotateLayer | ArrowsLayer | CometLayer | HeatmapLayer | PositionalHeatmapLayer | HexbinLayer | KdeLayer; ``` Defined in: [packages/core/src/scene/types.ts:197](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L197) The discriminated union of all layer kinds a Scene can draw. Milestone 1 adds Scatter/Annotate, then Arrows/Comet, then Heatmap here; Milestone 2 adds the remaining density layers (positional heatmap, hexbin, KDE). Those four density variants are the ones the SVG renderer deliberately skips — see `render/canvas/render-heatmap.ts`, the only renderer that reads them, using the same Scene/PixelTransform as everything else. Erased to `any` rather than `unknown` here deliberately: each accessor function's parameter type makes every `*Layer` invariant in `T` under `strictFunctionTypes`, so a concrete `ScatterLayer` could never widen to `ScatterLayer` for storage in this heterogeneous array. Individual layer constructors (and the painters, called generically per-layer) stay fully typed in `T`. --- # Orientation Source: https://www.pitchkitjs.com/docs/api/core/type-aliases/Orientation ```ts type Orientation = "horizontal" | "vertical"; ``` Defined in: [packages/core/src/transform/types.ts:5](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/transform/types.ts#L5) Display orientation: which physical axis the pitch's length runs along. --- # PitchOrigin Source: https://www.pitchkitjs.com/docs/api/core/type-aliases/PitchOrigin ```ts type PitchOrigin = "top-left" | "bottom-left" | "center"; ``` Defined in: [packages/core/src/dimensions/types.ts:5](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/dimensions/types.ts#L5) Which corner of the pitch sits at provider coordinate (0, 0). --- # PitchStripes Source: https://www.pitchkitjs.com/docs/api/core/type-aliases/PitchStripes ```ts type PitchStripes = boolean | number; ``` Defined in: [packages/core/src/scene/types.ts:304](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L304) How many vertical grass stripes to paint; `true` picks a sensible default. --- # PitchTypeId Source: https://www.pitchkitjs.com/docs/api/core/type-aliases/PitchTypeId ```ts type PitchTypeId = "statsbomb" | "opta" | "uefa" | "skillcorner" | "wyscout"; ``` Defined in: [packages/core/src/dimensions/types.ts:2](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/dimensions/types.ts#L2) The provider coordinate systems supported in this milestone. --- # Point Source: https://www.pitchkitjs.com/docs/api/core/type-aliases/Point ```ts type Point = readonly [number, number]; ``` Defined in: [packages/core/src/transform/types.ts:2](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/transform/types.ts#L2) A 2D point as a tuple, in either provider coordinates or pixel space. --- # PositionalLayout Source: https://www.pitchkitjs.com/docs/api/core/type-aliases/PositionalLayout ```ts type PositionalLayout = "full" | "horizontal" | "vertical"; ``` Defined in: [packages/core/src/scene/types.ts:113](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L113) Which Juego de Posición layout to bin into: the full 20-zone grid, the five lateral bands only, or the six vertical columns only. Mirrors mplsoccer's `positional` argument. --- # YDirection Source: https://www.pitchkitjs.com/docs/api/core/type-aliases/YDirection ```ts type YDirection = "down" | "up"; ``` Defined in: [packages/core/src/dimensions/types.ts:8](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/dimensions/types.ts#L8) Does increasing y move toward the bottom or top of the pitch (in a standard top-down view)? --- # ARROW HEAD HALF ANGLE Source: https://www.pitchkitjs.com/docs/api/core/variables/ARROW_HEAD_HALF_ANGLE ```ts const ARROW_HEAD_HALF_ANGLE: number; ``` Defined in: [packages/core/src/render/arrow-geometry.ts:4](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/render/arrow-geometry.ts#L4) Half-angle of the arrowhead, in radians (\~26°) — a conventional proportion. --- # PITCH DIMENSIONS Source: https://www.pitchkitjs.com/docs/api/core/variables/PITCH_DIMENSIONS ```ts const PITCH_DIMENSIONS: Readonly>; ``` Defined in: [packages/core/src/dimensions/registry.ts:8](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/dimensions/registry.ts#L8) --- # canvasRenderer Source: https://www.pitchkitjs.com/docs/api/core/variables/canvasRenderer ```ts const canvasRenderer: Renderer; ``` Defined in: [packages/core/src/render/canvas/render-heatmap.ts:77](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/render/canvas/render-heatmap.ts#L77) Concrete `Renderer` implementation backed by the Canvas density path. --- # pitchTokens Source: https://www.pitchkitjs.com/docs/api/core/variables/pitchTokens ```ts const pitchTokens: object; ``` Defined in: [packages/core/src/theme/tokens.ts:7](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/theme/tokens.ts#L7) CSS custom property names the renderer reads for theming (PRD §8.7). This object exists purely for editor autocomplete and typo-safety when consumers set these variables in their own CSS — the values themselves always live in CSS, never here. ## Type Declaration ### lines ```ts readonly lines: "--pitch-lines" = "--pitch-lines"; ``` ### lineWidth ```ts readonly lineWidth: "--pitch-line-width" = "--pitch-line-width"; ``` ### markerGoal ```ts readonly markerGoal: "--pitch-marker-goal" = "--pitch-marker-goal"; ``` ### markerMiss ```ts readonly markerMiss: "--pitch-marker-miss" = "--pitch-marker-miss"; ``` ### markerPrimary ```ts readonly markerPrimary: "--pitch-marker-primary" = "--pitch-marker-primary"; ``` ### stripe ```ts readonly stripe: "--pitch-stripe" = "--pitch-stripe"; ``` ### surface ```ts readonly surface: "--pitch-surface" = "--pitch-surface"; ``` --- # renderHeatmapLayersToCanvas Source: https://www.pitchkitjs.com/docs/api/core/variables/renderHeatmapLayersToCanvas ```ts const renderHeatmapLayersToCanvas: (scene, canvas, options) => void = renderDensityLayersToCanvas; ``` Defined in: [packages/core/src/render/canvas/render-heatmap.ts:74](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/render/canvas/render-heatmap.ts#L74) The original name for `renderDensityLayersToCanvas`, from when `heatmap` was the only Canvas-rendered layer. Kept as an alias because it shipped in `@pitchkit/core@0.1.0`'s public API — it paints every density layer, not just heatmaps. Paints every density-type layer in a Scene (`heatmap`, `positionalHeatmap`, `hexbin`, `kde`) onto a 2D canvas, ignoring every other layer type — the SVG renderer handles those. Backs the canvas at `cssSize x devicePixelRatio` physical pixels and scales the drawing context accordingly (PRD §8.6), so dense layers stay crisp on retina displays without every painter needing to know about DPR itself. Does not attempt to composite with the SVG renderer's output — stacking the resulting canvas with an `` in the DOM is a consumer concern (`@pitchkit/react`'s), not core's. ## Parameters | Parameter | Type | | --------- | ------------------------------------------------------------------------ | | `scene` | [`Scene`](/docs/api/core/interfaces/Scene) | | `canvas` | `HTMLCanvasElement` | | `options` | [`RenderHeatmapOptions`](/docs/api/core/interfaces/RenderHeatmapOptions) | ## Returns `void` --- # svgRenderer Source: https://www.pitchkitjs.com/docs/api/core/variables/svgRenderer ```ts const svgRenderer: Renderer; ``` Defined in: [packages/core/src/render/svg/render-scene.ts:78](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/render/svg/render-scene.ts#L78) **`Internal`** Concrete `Renderer` implementation backed by the SVG renderer. See the note on `renderSceneToSVGElement` above — internal building-block surface, not a supported public consumption path. --- # index Source: https://www.pitchkitjs.com/docs/api/data-providers/index Root entry: only the pieces every provider module shares. The actual loaders live on per-provider subpaths — `/statsbomb`, `/skillcorner` and `/wyscout` today, room for `/metrica` later — so importing one provider never pulls in code for the others. `@module` names this entry in the generated API reference; without it TypeDoc falls back to the source path, and the docs URLs end up carrying `packages/data-providers/src/...`. ## Classes * [DataProviderError](/docs/api/data-providers/index/classes/DataProviderError) ## Interfaces * [LoadOptions](/docs/api/data-providers/index/interfaces/LoadOptions) ## Type Aliases * [DataProviderErrorKind](/docs/api/data-providers/index/type-aliases/DataProviderErrorKind) ## Functions * [fetchJson](/docs/api/data-providers/index/functions/fetchJson) --- # skillcorner Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner SkillCorner open-data loader — broadcast tracking, dynamic events and phases of play from 20 A-League 2024/25 matches. ```ts import { fetchMatch, fetchDynamicEvents, offBallRuns } from "@pitchkit/data-providers/skillcorner"; const match = await fetchMatch(1874553); const runs = offBallRuns(await fetchDynamicEvents(match)); ``` Same four layers as the StatsBomb module — `parse*` (pure), `fetch*` (network), narrowing selectors, composable predicates — with three differences worth knowing before you plot anything: 1. **Coordinates are metres from the centre spot**, on a pitch whose real dimensions vary by match (104-106 m long in this dataset). Parsers add corner-origin `pitchX`/`pitchY` using that match's own dimensions, which is why the loaders take the match rather than just its id. 2. **The two files disagree about direction.** Tracking positions are absolute and swap ends at half time; dynamic-event x is normalised so positive always points at the goal being attacked. See `attackingSideOf` for resolving the former. 3. **Tracking is big** — about 90 MB a match — and is served from a different host because it's stored in Git LFS. Prefer `streamTracking` or `fetchTrackingWindow` over `fetchTracking`. Data is MIT-licensed; SkillCorner ask to be credited in anything published from it. ## See [https://github.com/SkillCorner/opendata](https://github.com/SkillCorner/opendata) ## Interfaces * [PitchProjection](/docs/api/data-providers/skillcorner/interfaces/PitchProjection) * [SkillCornerBall](/docs/api/data-providers/skillcorner/interfaces/SkillCornerBall) * [SkillCornerEventBase](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase) * [SkillCornerFrame](/docs/api/data-providers/skillcorner/interfaces/SkillCornerFrame) * [SkillCornerLoadOptions](/docs/api/data-providers/skillcorner/interfaces/SkillCornerLoadOptions) * [SkillCornerMatch](/docs/api/data-providers/skillcorner/interfaces/SkillCornerMatch) * [SkillCornerMatchPlayer](/docs/api/data-providers/skillcorner/interfaces/SkillCornerMatchPlayer) * [SkillCornerMatchSummary](/docs/api/data-providers/skillcorner/interfaces/SkillCornerMatchSummary) * [SkillCornerOffBallRun](/docs/api/data-providers/skillcorner/interfaces/SkillCornerOffBallRun) * [SkillCornerOnBallEngagement](/docs/api/data-providers/skillcorner/interfaces/SkillCornerOnBallEngagement) * [SkillCornerOtherEvent](/docs/api/data-providers/skillcorner/interfaces/SkillCornerOtherEvent) * [SkillCornerPassingOption](/docs/api/data-providers/skillcorner/interfaces/SkillCornerPassingOption) * [SkillCornerPeriod](/docs/api/data-providers/skillcorner/interfaces/SkillCornerPeriod) * [SkillCornerPhase](/docs/api/data-providers/skillcorner/interfaces/SkillCornerPhase) * [SkillCornerPlayerPossession](/docs/api/data-providers/skillcorner/interfaces/SkillCornerPlayerPossession) * [SkillCornerPlayerRole](/docs/api/data-providers/skillcorner/interfaces/SkillCornerPlayerRole) * [SkillCornerTeamRef](/docs/api/data-providers/skillcorner/interfaces/SkillCornerTeamRef) * [SkillCornerTrackedPlayer](/docs/api/data-providers/skillcorner/interfaces/SkillCornerTrackedPlayer) * [TrackingWindowOptions](/docs/api/data-providers/skillcorner/interfaces/TrackingWindowOptions) ## Type Aliases * [Known](/docs/api/data-providers/skillcorner/type-aliases/Known) * [SkillCornerEvent](/docs/api/data-providers/skillcorner/type-aliases/SkillCornerEvent) * [SkillCornerEventType](/docs/api/data-providers/skillcorner/type-aliases/SkillCornerEventType) * [SkillCornerSide](/docs/api/data-providers/skillcorner/type-aliases/SkillCornerSide) ## Variables * [SKILLCORNER\_LFS\_BASE\_URL](/docs/api/data-providers/skillcorner/variables/SKILLCORNER_LFS_BASE_URL) * [SKILLCORNER\_OPEN\_DATA\_BASE\_URL](/docs/api/data-providers/skillcorner/variables/SKILLCORNER_OPEN_DATA_BASE_URL) ## Functions * [attackingSideOf](/docs/api/data-providers/skillcorner/functions/attackingSideOf) * [breaksDefensiveLine](/docs/api/data-providers/skillcorner/functions/breaksDefensiveLine) * [detectedPlayers](/docs/api/data-providers/skillcorner/functions/detectedPlayers) * [dynamicEventsUrl](/docs/api/data-providers/skillcorner/functions/dynamicEventsUrl) * [fetchDynamicEvents](/docs/api/data-providers/skillcorner/functions/fetchDynamicEvents) * [fetchMatch](/docs/api/data-providers/skillcorner/functions/fetchMatch) * [fetchMatches](/docs/api/data-providers/skillcorner/functions/fetchMatches) * [fetchPhasesOfPlay](/docs/api/data-providers/skillcorner/functions/fetchPhasesOfPlay) * [fetchTracking](/docs/api/data-providers/skillcorner/functions/fetchTracking) * [fetchTrackingWindow](/docs/api/data-providers/skillcorner/functions/fetchTrackingWindow) * [framesInPhase](/docs/api/data-providers/skillcorner/functions/framesInPhase) * [hasLocation](/docs/api/data-providers/skillcorner/functions/hasLocation) * [hasPath](/docs/api/data-providers/skillcorner/functions/hasPath) * [inAttackingThird](/docs/api/data-providers/skillcorner/functions/inAttackingThird) * [indexPlayersById](/docs/api/data-providers/skillcorner/functions/indexPlayersById) * [inPenaltyArea](/docs/api/data-providers/skillcorner/functions/inPenaltyArea) * [inPlayFrames](/docs/api/data-providers/skillcorner/functions/inPlayFrames) * [isCarry](/docs/api/data-providers/skillcorner/functions/isCarry) * [isCompletePass](/docs/api/data-providers/skillcorner/functions/isCompletePass) * [isDangerous](/docs/api/data-providers/skillcorner/functions/isDangerous) * [isDetected](/docs/api/data-providers/skillcorner/functions/isDetected) * [isOffBallRun](/docs/api/data-providers/skillcorner/functions/isOffBallRun) * [isOnBallEngagement](/docs/api/data-providers/skillcorner/functions/isOnBallEngagement) * [isOneTouch](/docs/api/data-providers/skillcorner/functions/isOneTouch) * [isPassingOption](/docs/api/data-providers/skillcorner/functions/isPassingOption) * [isPhaseType](/docs/api/data-providers/skillcorner/functions/isPhaseType) * [isPlayerPossession](/docs/api/data-providers/skillcorner/functions/isPlayerPossession) * [isRunBehind](/docs/api/data-providers/skillcorner/functions/isRunBehind) * [isRunSubtype](/docs/api/data-providers/skillcorner/functions/isRunSubtype) * [isSprint](/docs/api/data-providers/skillcorner/functions/isSprint) * [leadToGoal](/docs/api/data-providers/skillcorner/functions/leadToGoal) * [leadToShot](/docs/api/data-providers/skillcorner/functions/leadToShot) * [loadDynamicEvents](/docs/api/data-providers/skillcorner/functions/loadDynamicEvents) * [loadMatch](/docs/api/data-providers/skillcorner/functions/loadMatch) * [loadMatches](/docs/api/data-providers/skillcorner/functions/loadMatches) * [loadPhasesOfPlay](/docs/api/data-providers/skillcorner/functions/loadPhasesOfPlay) * [loadTracking](/docs/api/data-providers/skillcorner/functions/loadTracking) * [loadTrackingWindow](/docs/api/data-providers/skillcorner/functions/loadTrackingWindow) * [matchesUrl](/docs/api/data-providers/skillcorner/functions/matchesUrl) * [matchUrl](/docs/api/data-providers/skillcorner/functions/matchUrl) * [ofEventType](/docs/api/data-providers/skillcorner/functions/ofEventType) * [offBallRuns](/docs/api/data-providers/skillcorner/functions/offBallRuns) * [onBallEngagements](/docs/api/data-providers/skillcorner/functions/onBallEngagements) * [parseDynamicEvents](/docs/api/data-providers/skillcorner/functions/parseDynamicEvents) * [parseMatch](/docs/api/data-providers/skillcorner/functions/parseMatch) * [parseMatches](/docs/api/data-providers/skillcorner/functions/parseMatches) * [parsePhasesOfPlay](/docs/api/data-providers/skillcorner/functions/parsePhasesOfPlay) * [parseTracking](/docs/api/data-providers/skillcorner/functions/parseTracking) * [parseTrackingFrame](/docs/api/data-providers/skillcorner/functions/parseTrackingFrame) * [passingOptions](/docs/api/data-providers/skillcorner/functions/passingOptions) * [phaseLedToGoal](/docs/api/data-providers/skillcorner/functions/phaseLedToGoal) * [phaseLedToShot](/docs/api/data-providers/skillcorner/functions/phaseLedToShot) * [phasesOfPlayUrl](/docs/api/data-providers/skillcorner/functions/phasesOfPlayUrl) * [pitchProjection](/docs/api/data-providers/skillcorner/functions/pitchProjection) * [playerPossessions](/docs/api/data-providers/skillcorner/functions/playerPossessions) * [playersOfTeam](/docs/api/data-providers/skillcorner/functions/playersOfTeam) * [projectOrNull](/docs/api/data-providers/skillcorner/functions/projectOrNull) * [streamTracking](/docs/api/data-providers/skillcorner/functions/streamTracking) * [streamTrackingFrom](/docs/api/data-providers/skillcorner/functions/streamTrackingFrom) * [trackingUrl](/docs/api/data-providers/skillcorner/functions/trackingUrl) * [wasReceived](/docs/api/data-providers/skillcorner/functions/wasReceived) * [wasTargeted](/docs/api/data-providers/skillcorner/functions/wasTargeted) ## References ### DataProviderError Re-exports [DataProviderError](/docs/api/data-providers/index/classes/DataProviderError) *** ### DataProviderErrorKind Re-exports [DataProviderErrorKind](/docs/api/data-providers/index/type-aliases/DataProviderErrorKind) *** ### LoadOptions Re-exports [LoadOptions](/docs/api/data-providers/index/interfaces/LoadOptions) --- # statsbomb Source: https://www.pitchkitjs.com/docs/api/data-providers/statsbomb StatsBomb open-data loader. ```ts import { fetchMatchEvents, shots, isGoal } from "@pitchkit/data-providers/statsbomb"; const events = await fetchMatchEvents(15946); const goals = shots(events).filter(isGoal); ``` Four layers, each usable on its own: `parse*` (pure, no network), `load*`/`fetch*` (network), `shots`/`passes`/`carries` (narrowing selectors) and the `is*` predicates (composable filters). 360 optical tracking data follows the same pattern — `parseThreeSixty`/`fetchMatchThreeSixty`, joined to events with `indexThreeSixtyByEvent` — but only exists for matches StatsBomb has tracked; check `match.match_status_360 === "available"` first. ## Interfaces * [StatsBombBaseEvent](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent) * [StatsBombCarry](/docs/api/data-providers/statsbomb/interfaces/StatsBombCarry) * [StatsBombCompetition](/docs/api/data-providers/statsbomb/interfaces/StatsBombCompetition) * [StatsBombFreezeFramePlayer](/docs/api/data-providers/statsbomb/interfaces/StatsBombFreezeFramePlayer) * [StatsBombGenericEvent](/docs/api/data-providers/statsbomb/interfaces/StatsBombGenericEvent) * [StatsBombLineup](/docs/api/data-providers/statsbomb/interfaces/StatsBombLineup) * [StatsBombLineupPlayer](/docs/api/data-providers/statsbomb/interfaces/StatsBombLineupPlayer) * [StatsBombLoadOptions](/docs/api/data-providers/statsbomb/interfaces/StatsBombLoadOptions) * [StatsBombMatch](/docs/api/data-providers/statsbomb/interfaces/StatsBombMatch) * [StatsBombPass](/docs/api/data-providers/statsbomb/interfaces/StatsBombPass) * [StatsBombRef](/docs/api/data-providers/statsbomb/interfaces/StatsBombRef) * [StatsBombShot](/docs/api/data-providers/statsbomb/interfaces/StatsBombShot) * [StatsBombThreeSixtyFrame](/docs/api/data-providers/statsbomb/interfaces/StatsBombThreeSixtyFrame) * [StatsBombThreeSixtyPlayer](/docs/api/data-providers/statsbomb/interfaces/StatsBombThreeSixtyPlayer) ## Type Aliases * [PassBodyPart](/docs/api/data-providers/statsbomb/type-aliases/PassBodyPart) * [PassHeight](/docs/api/data-providers/statsbomb/type-aliases/PassHeight) * [PassOutcome](/docs/api/data-providers/statsbomb/type-aliases/PassOutcome) * [PassType](/docs/api/data-providers/statsbomb/type-aliases/PassType) * [PlayPattern](/docs/api/data-providers/statsbomb/type-aliases/PlayPattern) * [ShotBodyPart](/docs/api/data-providers/statsbomb/type-aliases/ShotBodyPart) * [ShotOutcome](/docs/api/data-providers/statsbomb/type-aliases/ShotOutcome) * [ShotType](/docs/api/data-providers/statsbomb/type-aliases/ShotType) * [StatsBombEvent](/docs/api/data-providers/statsbomb/type-aliases/StatsBombEvent) ## Variables * [STATSBOMB\_OPEN\_DATA\_BASE\_URL](/docs/api/data-providers/statsbomb/variables/STATSBOMB_OPEN_DATA_BASE_URL) ## Functions * [actorIn](/docs/api/data-providers/statsbomb/functions/actorIn) * [carries](/docs/api/data-providers/statsbomb/functions/carries) * [fetchCompetitions](/docs/api/data-providers/statsbomb/functions/fetchCompetitions) * [fetchLineups](/docs/api/data-providers/statsbomb/functions/fetchLineups) * [fetchMatches](/docs/api/data-providers/statsbomb/functions/fetchMatches) * [fetchMatchEvents](/docs/api/data-providers/statsbomb/functions/fetchMatchEvents) * [fetchMatchThreeSixty](/docs/api/data-providers/statsbomb/functions/fetchMatchThreeSixty) * [indexThreeSixtyByEvent](/docs/api/data-providers/statsbomb/functions/indexThreeSixtyByEvent) * [isActor](/docs/api/data-providers/statsbomb/functions/isActor) * [isAssist](/docs/api/data-providers/statsbomb/functions/isAssist) * [isCarry](/docs/api/data-providers/statsbomb/functions/isCarry) * [isComplete](/docs/api/data-providers/statsbomb/functions/isComplete) * [isCorner](/docs/api/data-providers/statsbomb/functions/isCorner) * [isCross](/docs/api/data-providers/statsbomb/functions/isCross) * [isFreeKick](/docs/api/data-providers/statsbomb/functions/isFreeKick) * [isGoal](/docs/api/data-providers/statsbomb/functions/isGoal) * [isKeeper](/docs/api/data-providers/statsbomb/functions/isKeeper) * [isKeyPass](/docs/api/data-providers/statsbomb/functions/isKeyPass) * [isOnTarget](/docs/api/data-providers/statsbomb/functions/isOnTarget) * [isOpponent](/docs/api/data-providers/statsbomb/functions/isOpponent) * [isPass](/docs/api/data-providers/statsbomb/functions/isPass) * [isPenalty](/docs/api/data-providers/statsbomb/functions/isPenalty) * [isSetPiece](/docs/api/data-providers/statsbomb/functions/isSetPiece) * [isShot](/docs/api/data-providers/statsbomb/functions/isShot) * [isSwitch](/docs/api/data-providers/statsbomb/functions/isSwitch) * [isTeammate](/docs/api/data-providers/statsbomb/functions/isTeammate) * [isThroughBall](/docs/api/data-providers/statsbomb/functions/isThroughBall) * [isThrowIn](/docs/api/data-providers/statsbomb/functions/isThrowIn) * [keeperIn](/docs/api/data-providers/statsbomb/functions/keeperIn) * [loadCompetitions](/docs/api/data-providers/statsbomb/functions/loadCompetitions) * [loadEvents](/docs/api/data-providers/statsbomb/functions/loadEvents) * [loadLineups](/docs/api/data-providers/statsbomb/functions/loadLineups) * [loadMatches](/docs/api/data-providers/statsbomb/functions/loadMatches) * [loadThreeSixty](/docs/api/data-providers/statsbomb/functions/loadThreeSixty) * [matchEventsUrl](/docs/api/data-providers/statsbomb/functions/matchEventsUrl) * [matchThreeSixtyUrl](/docs/api/data-providers/statsbomb/functions/matchThreeSixtyUrl) * [ofType](/docs/api/data-providers/statsbomb/functions/ofType) * [opponentsIn](/docs/api/data-providers/statsbomb/functions/opponentsIn) * [parseCompetitions](/docs/api/data-providers/statsbomb/functions/parseCompetitions) * [parseEvents](/docs/api/data-providers/statsbomb/functions/parseEvents) * [parseLineups](/docs/api/data-providers/statsbomb/functions/parseLineups) * [parseMatches](/docs/api/data-providers/statsbomb/functions/parseMatches) * [parseThreeSixty](/docs/api/data-providers/statsbomb/functions/parseThreeSixty) * [passes](/docs/api/data-providers/statsbomb/functions/passes) * [shots](/docs/api/data-providers/statsbomb/functions/shots) * [teammatesIn](/docs/api/data-providers/statsbomb/functions/teammatesIn) * [visibleAreaPolygon](/docs/api/data-providers/statsbomb/functions/visibleAreaPolygon) ## References ### DataProviderError Re-exports [DataProviderError](/docs/api/data-providers/index/classes/DataProviderError) *** ### DataProviderErrorKind Re-exports [DataProviderErrorKind](/docs/api/data-providers/index/type-aliases/DataProviderErrorKind) *** ### LoadOptions Re-exports [LoadOptions](/docs/api/data-providers/index/interfaces/LoadOptions) --- # wyscout Source: https://www.pitchkitjs.com/docs/api/data-providers/wyscout Wyscout open-data loader. The Pappalardo et al. dataset: 1,941 matches of event data across the 2017/18 Spanish, Italian, English, German and French first divisions, plus the 2018 World Cup and Euro 2016. Released under CC BY 4.0. Four layers, each usable on its own: `parse*` (pure, no network), `load*`/`fetch*` (network), `shots`/`passes`/`duels` (narrowing selectors) and the `is*` predicates (composable filters). ```ts import { fetchMatch, shots, isGoal } from "@pitchkit/data-providers/wyscout"; const match = await fetchMatch(2499841); // Huddersfield v Man City const goals = shots(match.events).filter(isGoal); ``` Three things about this data are load-bearing and easy to get wrong: 1. **Coordinates are normalised to the attacking direction.** `x: 100` is always the goal that event's team is attacking, in both halves — so both teams appear to attack left-to-right and nothing flips at half time. 2. **A shot has no end coordinate.** Where it went is in its goal-mouth tag (`shotGoalZone`), not in `positions[1]`, which is a placeholder. Hence `endX`/`endY` are absent on shots rather than wrong. 3. **Everything else is a tag too.** Accuracy, assists, cards, body part — all numeric ids on `event.tags`. `hasTag` and the named predicates are how you read them. Plot it with ``, whose grid is this one: 0-100 on both axes, origin top-left, y downward. Note that is **not** Opta's grid, which is y-up from the bottom-left. ## Interfaces * [WyscoutArea](/docs/api/data-providers/wyscout/interfaces/WyscoutArea) * [WyscoutCompetition](/docs/api/data-providers/wyscout/interfaces/WyscoutCompetition) * [WyscoutEvent](/docs/api/data-providers/wyscout/interfaces/WyscoutEvent) * [WyscoutLoadOptions](/docs/api/data-providers/wyscout/interfaces/WyscoutLoadOptions) * [WyscoutMatch](/docs/api/data-providers/wyscout/interfaces/WyscoutMatch) * [WyscoutMatchPlayer](/docs/api/data-providers/wyscout/interfaces/WyscoutMatchPlayer) * [WyscoutPlayer](/docs/api/data-providers/wyscout/interfaces/WyscoutPlayer) * [WyscoutPlayerRole](/docs/api/data-providers/wyscout/interfaces/WyscoutPlayerRole) * [WyscoutPosition](/docs/api/data-providers/wyscout/interfaces/WyscoutPosition) * [WyscoutTag](/docs/api/data-providers/wyscout/interfaces/WyscoutTag) * [WyscoutTeam](/docs/api/data-providers/wyscout/interfaces/WyscoutTeam) ## Type Aliases * [Known](/docs/api/data-providers/wyscout/type-aliases/Known) * [WyscoutEventName](/docs/api/data-providers/wyscout/type-aliases/WyscoutEventName) * [WyscoutMatchPeriod](/docs/api/data-providers/wyscout/type-aliases/WyscoutMatchPeriod) * [WyscoutReferenceFile](/docs/api/data-providers/wyscout/type-aliases/WyscoutReferenceFile) ## Variables * [WYSCOUT\_EVENTS\_BASE\_URL](/docs/api/data-providers/wyscout/variables/WYSCOUT_EVENTS_BASE_URL) * [WYSCOUT\_GOAL\_ZONE\_TAGS](/docs/api/data-providers/wyscout/variables/WYSCOUT_GOAL_ZONE_TAGS) * [WYSCOUT\_REFERENCE\_BASE\_URL](/docs/api/data-providers/wyscout/variables/WYSCOUT_REFERENCE_BASE_URL) * [WYSCOUT\_REFERENCE\_FILE\_IDS](/docs/api/data-providers/wyscout/variables/WYSCOUT_REFERENCE_FILE_IDS) * [WYSCOUT\_TAGS](/docs/api/data-providers/wyscout/variables/WYSCOUT_TAGS) ## Functions * [byPlayer](/docs/api/data-providers/wyscout/functions/byPlayer) * [byTeam](/docs/api/data-providers/wyscout/functions/byTeam) * [duels](/docs/api/data-providers/wyscout/functions/duels) * [fetchCompetitions](/docs/api/data-providers/wyscout/functions/fetchCompetitions) * [fetchMatch](/docs/api/data-providers/wyscout/functions/fetchMatch) * [fetchMatchEvents](/docs/api/data-providers/wyscout/functions/fetchMatchEvents) * [fetchTeams](/docs/api/data-providers/wyscout/functions/fetchTeams) * [fouls](/docs/api/data-providers/wyscout/functions/fouls) * [freeKicks](/docs/api/data-providers/wyscout/functions/freeKicks) * [hasEndLocation](/docs/api/data-providers/wyscout/functions/hasEndLocation) * [hasTag](/docs/api/data-providers/wyscout/functions/hasTag) * [indexPlayersById](/docs/api/data-providers/wyscout/functions/indexPlayersById) * [inMatchOrder](/docs/api/data-providers/wyscout/functions/inMatchOrder) * [isAccurate](/docs/api/data-providers/wyscout/functions/isAccurate) * [isAssist](/docs/api/data-providers/wyscout/functions/isAssist) * [isBlocked](/docs/api/data-providers/wyscout/functions/isBlocked) * [isClearance](/docs/api/data-providers/wyscout/functions/isClearance) * [isCounterAttack](/docs/api/data-providers/wyscout/functions/isCounterAttack) * [isDangerousBallLost](/docs/api/data-providers/wyscout/functions/isDangerousBallLost) * [isGoal](/docs/api/data-providers/wyscout/functions/isGoal) * [isHeadOrBody](/docs/api/data-providers/wyscout/functions/isHeadOrBody) * [isInterception](/docs/api/data-providers/wyscout/functions/isInterception) * [isKeyPass](/docs/api/data-providers/wyscout/functions/isKeyPass) * [isLeftFoot](/docs/api/data-providers/wyscout/functions/isLeftFoot) * [isNotAccurate](/docs/api/data-providers/wyscout/functions/isNotAccurate) * [isOpportunity](/docs/api/data-providers/wyscout/functions/isOpportunity) * [isOwnGoal](/docs/api/data-providers/wyscout/functions/isOwnGoal) * [isRedCard](/docs/api/data-providers/wyscout/functions/isRedCard) * [isRightFoot](/docs/api/data-providers/wyscout/functions/isRightFoot) * [isSecondYellowCard](/docs/api/data-providers/wyscout/functions/isSecondYellowCard) * [isSendingOff](/docs/api/data-providers/wyscout/functions/isSendingOff) * [isSlidingTackle](/docs/api/data-providers/wyscout/functions/isSlidingTackle) * [isThrough](/docs/api/data-providers/wyscout/functions/isThrough) * [isYellowCard](/docs/api/data-providers/wyscout/functions/isYellowCard) * [loadCompetitions](/docs/api/data-providers/wyscout/functions/loadCompetitions) * [loadMatch](/docs/api/data-providers/wyscout/functions/loadMatch) * [loadMatchEvents](/docs/api/data-providers/wyscout/functions/loadMatchEvents) * [loadTeams](/docs/api/data-providers/wyscout/functions/loadTeams) * [lostDuel](/docs/api/data-providers/wyscout/functions/lostDuel) * [matchSeconds](/docs/api/data-providers/wyscout/functions/matchSeconds) * [matchUrl](/docs/api/data-providers/wyscout/functions/matchUrl) * [neutralDuel](/docs/api/data-providers/wyscout/functions/neutralDuel) * [ofType](/docs/api/data-providers/wyscout/functions/ofType) * [parseCompetitions](/docs/api/data-providers/wyscout/functions/parseCompetitions) * [parseEvents](/docs/api/data-providers/wyscout/functions/parseEvents) * [parseMatch](/docs/api/data-providers/wyscout/functions/parseMatch) * [parseMatchPlayers](/docs/api/data-providers/wyscout/functions/parseMatchPlayers) * [parseTeams](/docs/api/data-providers/wyscout/functions/parseTeams) * [passes](/docs/api/data-providers/wyscout/functions/passes) * [referenceUrl](/docs/api/data-providers/wyscout/functions/referenceUrl) * [shotGoalZone](/docs/api/data-providers/wyscout/functions/shotGoalZone) * [shots](/docs/api/data-providers/wyscout/functions/shots) * [squadOf](/docs/api/data-providers/wyscout/functions/squadOf) * [teamIds](/docs/api/data-providers/wyscout/functions/teamIds) * [wonDuel](/docs/api/data-providers/wyscout/functions/wonDuel) ## References ### DataProviderError Re-exports [DataProviderError](/docs/api/data-providers/index/classes/DataProviderError) *** ### DataProviderErrorKind Re-exports [DataProviderErrorKind](/docs/api/data-providers/index/type-aliases/DataProviderErrorKind) *** ### LoadOptions Re-exports [LoadOptions](/docs/api/data-providers/index/interfaces/LoadOptions) --- # Annotate() Source: https://www.pitchkitjs.com/docs/api/react/functions/Annotate ```ts function Annotate(__namedParameters): Element; ``` Defined in: [packages/react/src/Annotate.tsx:14](https://github.com/yribeiro/pitchkit/blob/main/packages/react/src/Annotate.tsx#L14) One `` per datum — the JSX equivalent of core's `paintAnnotateLayer`. ## Type Parameters | Type Parameter | | -------------- | | `T` | ## Parameters | Parameter | Type | | ------------------- | ----------------------------------------------------------------- | | `__namedParameters` | [`AnnotateProps`](/docs/api/react/interfaces/AnnotateProps)\<`T`> | ## Returns `Element` --- # Arrows() Source: https://www.pitchkitjs.com/docs/api/react/functions/Arrows ```ts function Arrows(__namedParameters): Element; ``` Defined in: [packages/react/src/Arrows.tsx:19](https://github.com/yribeiro/pitchkit/blob/main/packages/react/src/Arrows.tsx#L19) One shaft `` + arrowhead `` per datum — the JSX equivalent of core's `paintArrowsLayer`, sharing its `computeArrowHeadCorners` geometry so the head angle can't drift between the two renderers. ## Type Parameters | Type Parameter | | -------------- | | `T` | ## Parameters | Parameter | Type | | ------------------- | ------------------------------------------------------------- | | `__namedParameters` | [`ArrowsProps`](/docs/api/react/interfaces/ArrowsProps)\<`T`> | ## Returns `Element` --- # Comet() Source: https://www.pitchkitjs.com/docs/api/react/functions/Comet ```ts function Comet(__namedParameters): Element; ``` Defined in: [packages/react/src/Comet.tsx:22](https://github.com/yribeiro/pitchkit/blob/main/packages/react/src/Comet.tsx#L22) One filled quadrilateral per datum — the JSX equivalent of core's `paintCometLayer`, sharing its `computeCometQuad` taper geometry. Gradient ids come from `useId()` (SSR-safe stable id) rather than a module-level counter like core's DOM renderer, since two independent server renders must not produce colliding ids. ## Type Parameters | Type Parameter | | -------------- | | `T` | ## Parameters | Parameter | Type | | ------------------- | ----------------------------------------------------------- | | `__namedParameters` | [`CometProps`](/docs/api/react/interfaces/CometProps)\<`T`> | ## Returns `Element` --- # ConvexHull() Source: https://www.pitchkitjs.com/docs/api/react/functions/ConvexHull ```ts function ConvexHull(__namedParameters): Element; ``` Defined in: [packages/react/src/ConvexHull.tsx:20](https://github.com/yribeiro/pitchkit/blob/main/packages/react/src/ConvexHull.tsx#L20) One filled `` for the convex hull of every datum's `(x, y)` — e.g. a player's touch map. Unlike per-datum marks, `fill`/`stroke`/etc. take plain values rather than `Accessor`, since there's only ever one shape produced from the whole `data` array. ## Type Parameters | Type Parameter | | -------------- | | `T` | ## Parameters | Parameter | Type | | ------------------- | --------------------------------------------------------------------- | | `__namedParameters` | [`ConvexHullProps`](/docs/api/react/interfaces/ConvexHullProps)\<`T`> | ## Returns `Element` --- # Flow() Source: https://www.pitchkitjs.com/docs/api/react/functions/Flow ```ts function Flow(__namedParameters): Element; ``` Defined in: [packages/react/src/Flow.tsx:26](https://github.com/yribeiro/pitchkit/blob/main/packages/react/src/Flow.tsx#L26) Bins pass/movement data by start location (`computeFlowBins`) and draws one arrow per occupied bin, from the bin center toward the mean end point, colored and sized by that bin's volume — mplsoccer's `flow`. Unlike every other layer here, the rendered marks are aggregates rather than one-per-datum, so `tooltip` takes a `FlowBin`, not a `T`. ## Type Parameters | Type Parameter | | -------------- | | `T` | ## Parameters | Parameter | Type | | ------------------- | --------------------------------------------------------- | | `__namedParameters` | [`FlowProps`](/docs/api/react/interfaces/FlowProps)\<`T`> | ## Returns `Element` --- # GoalAngle() Source: https://www.pitchkitjs.com/docs/api/react/functions/GoalAngle ```ts function GoalAngle(__namedParameters): Element; ``` Defined in: [packages/react/src/GoalAngle.tsx:21](https://github.com/yribeiro/pitchkit/blob/main/packages/react/src/GoalAngle.tsx#L21) One triangular `` wedge per datum, from the point to both goalposts — the angle subtended at that point by the goal mouth (mplsoccer's `goal_angle`). Goalpost coordinates come from `computePitchGeometry(dimensions).goals`, already computed for the pitch markings themselves; picking which of the two goals uses `selectGoal`. ## Type Parameters | Type Parameter | | -------------- | | `T` | ## Parameters | Parameter | Type | | ------------------- | ------------------------------------------------------------------- | | `__namedParameters` | [`GoalAngleProps`](/docs/api/react/interfaces/GoalAngleProps)\<`T`> | ## Returns `Element` --- # Heatmap() Source: https://www.pitchkitjs.com/docs/api/react/functions/Heatmap ```ts function Heatmap(__namedParameters): Element; ``` Defined in: [packages/react/src/Heatmap.tsx:22](https://github.com/yribeiro/pitchkit/blob/main/packages/react/src/Heatmap.tsx#L22) Client-only `` heatmap: bins `data` into a uniform `binsX` x `binsY` grid and colours each cell by count (or summed `weight`). See `DensityCanvas` for why every Canvas layer is painted imperatively rather than re-emitted as JSX. ## Type Parameters | Type Parameter | | -------------- | | `T` | ## Parameters | Parameter | Type | | ------------------- | --------------------------------------------------------------- | | `__namedParameters` | [`HeatmapProps`](/docs/api/react/interfaces/HeatmapProps)\<`T`> | ## Returns `Element` --- # Hexbin() Source: https://www.pitchkitjs.com/docs/api/react/functions/Hexbin ```ts function Hexbin(__namedParameters): Element; ``` Defined in: [packages/react/src/Hexbin.tsx:17](https://github.com/yribeiro/pitchkit/blob/main/packages/react/src/Hexbin.tsx#L17) Client-only `` hexagonal density — mplsoccer's `hexbin`. Hexagons pack more evenly than squares (every neighbour is equidistant), so dense touch/event data reads with less of the axis-aligned banding a rectangular `` shows. Empty hexagons aren't drawn at all, so the pitch stays visible wherever there's no data. ## Type Parameters | Type Parameter | | -------------- | | `T` | ## Parameters | Parameter | Type | | ------------------- | ------------------------------------------------------------- | | `__namedParameters` | [`HexbinProps`](/docs/api/react/interfaces/HexbinProps)\<`T`> | ## Returns `Element` --- # KDE() Source: https://www.pitchkitjs.com/docs/api/react/functions/KDE ```ts function KDE(__namedParameters): Element; ``` Defined in: [packages/react/src/KDE.tsx:21](https://github.com/yribeiro/pitchkit/blob/main/packages/react/src/KDE.tsx#L21) Client-only `` kernel density estimate — mplsoccer's `kdeplot`. Unlike the binned layers, each point spreads influence over its neighbourhood, so the result is a continuous surface rather than a grid of cells, and low-density areas fade out instead of being filled with `colorMin`. `bandwidth` controls the smoothing radius in provider units; leave it unset to let Silverman's rule of thumb pick one per axis from the data's own spread. ## Type Parameters | Type Parameter | | -------------- | | `T` | ## Parameters | Parameter | Type | | ------------------- | ------------------------------------------------------- | | `__namedParameters` | [`KDEProps`](/docs/api/react/interfaces/KDEProps)\<`T`> | ## Returns `Element` --- # Pitch() Source: https://www.pitchkitjs.com/docs/api/react/functions/Pitch ```ts function Pitch(__namedParameters): Element; ``` Defined in: [packages/react/src/Pitch.tsx:79](https://github.com/yribeiro/pitchkit/blob/main/packages/react/src/Pitch.tsx#L79) The root pitch component: owns the coordinate system, is responsive by default (fills its container via ResizeObserver — explicit width/height is the opt-out), and provides the pixel transform to layer-component children via context. ## Parameters | Parameter | Type | | ------------------- | ----------------------------------------------------- | | `__namedParameters` | [`PitchProps`](/docs/api/react/interfaces/PitchProps) | ## Returns `Element` --- # Polygon() Source: https://www.pitchkitjs.com/docs/api/react/functions/Polygon ```ts function Polygon(__namedParameters): Element; ``` Defined in: [packages/react/src/Polygon.tsx:17](https://github.com/yribeiro/pitchkit/blob/main/packages/react/src/Polygon.tsx#L17) One `` per datum, from an arbitrary list of vertices — mplsoccer's `polygon`. ## Type Parameters | Type Parameter | | -------------- | | `T` | ## Parameters | Parameter | Type | | ------------------- | --------------------------------------------------------------- | | `__namedParameters` | [`PolygonProps`](/docs/api/react/interfaces/PolygonProps)\<`T`> | ## Returns `Element` --- # PositionalHeatmap() Source: https://www.pitchkitjs.com/docs/api/react/functions/PositionalHeatmap ```ts function PositionalHeatmap(__namedParameters): Element; ``` Defined in: [packages/react/src/PositionalHeatmap.tsx:21](https://github.com/yribeiro/pitchkit/blob/main/packages/react/src/PositionalHeatmap.tsx#L21) Client-only `` heatmap binned into Juego de Posición zones — mplsoccer's `bin_statistic_positional` + `heatmap_positional`. Same aggregation as ``, but the cells come from the pitch markings (penalty areas, six-yard boxes, halfway line) rather than a uniform grid, which is what makes zone-to-zone comparisons meaningful to an analyst reading positional play. Pass `stroke` to outline the zones — off by default, since the boundaries compete with the pitch markings they're derived from. ## Type Parameters | Type Parameter | | -------------- | | `T` | ## Parameters | Parameter | Type | | ------------------- | ----------------------------------------------------------------------------------- | | `__namedParameters` | [`PositionalHeatmapProps`](/docs/api/react/interfaces/PositionalHeatmapProps)\<`T`> | ## Returns `Element` --- # Scatter() Source: https://www.pitchkitjs.com/docs/api/react/functions/Scatter ```ts function Scatter(__namedParameters): Element; ``` Defined in: [packages/react/src/Scatter.tsx:14](https://github.com/yribeiro/pitchkit/blob/main/packages/react/src/Scatter.tsx#L14) One `` per datum — the JSX equivalent of core's `paintScatterLayer`. ## Type Parameters | Type Parameter | | -------------- | | `T` | ## Parameters | Parameter | Type | | ------------------- | --------------------------------------------------------------- | | `__namedParameters` | [`ScatterProps`](/docs/api/react/interfaces/ScatterProps)\<`T`> | ## Returns `Element` --- # VerticalPitch() Source: https://www.pitchkitjs.com/docs/api/react/functions/VerticalPitch ```ts function VerticalPitch(props): Element; ``` Defined in: [packages/react/src/VerticalPitch.tsx:11](https://github.com/yribeiro/pitchkit/blob/main/packages/react/src/VerticalPitch.tsx#L11) ``, named to match mplsoccer's `VerticalPitch` for familiarity. Core has no separate vertical pitch concept (orientation is a `Viewport` field, not a distinct coordinate system) — this is purely a naming/ergonomics convenience at the component-API layer. ## Parameters | Parameter | Type | | --------- | ------------------------------------------------------------------------------- | | `props` | `Omit`\<[`PitchProps`](/docs/api/react/interfaces/PitchProps), `"orientation"`> | ## Returns `Element` --- # Voronoi() Source: https://www.pitchkitjs.com/docs/api/react/functions/Voronoi ```ts function Voronoi(__namedParameters): Element; ``` Defined in: [packages/react/src/Voronoi.tsx:21](https://github.com/yribeiro/pitchkit/blob/main/packages/react/src/Voronoi.tsx#L21) One filled `` cell per datum — Voronoi tessellation over every datum's `(x, y)`, clipped to the pitch outline. Cells are computed in provider coordinates (against `computePitchGeometry(dimensions).outline`) and pixel-transformed afterward, the same order `Heatmap`'s binning uses, so the tessellation itself is independent of orientation/crop. ## Type Parameters | Type Parameter | | -------------- | | `T` | ## Parameters | Parameter | Type | | ------------------- | --------------------------------------------------------------- | | `__namedParameters` | [`VoronoiProps`](/docs/api/react/interfaces/VoronoiProps)\<`T`> | ## Returns `Element` --- # usePitch() Source: https://www.pitchkitjs.com/docs/api/react/functions/usePitch ```ts function usePitch(): Pick; ``` Defined in: [packages/react/src/use-pitch.ts:10](https://github.com/yribeiro/pitchkit/blob/main/packages/react/src/use-pitch.ts#L10) Imperative escape hatch: returns the enclosing ``/``'s dimensions, viewport, and pixel transform. Must be called from a descendant of `` — for advanced cases (custom marks, manual coordinate math) that the built-in layer components don't cover. ## Returns `Pick`\<`PitchContextValue`, `"dimensions"` | `"viewport"` | `"transform"`> --- # AnnotateProps Source: https://www.pitchkitjs.com/docs/api/react/interfaces/AnnotateProps Defined in: [packages/react/src/Annotate.tsx:6](https://github.com/yribeiro/pitchkit/blob/main/packages/react/src/Annotate.tsx#L6) ## Extends * `Omit`\<[`AnnotateLayer`](/docs/api/core/interfaces/AnnotateLayer)\<`T`>, `"type"`> ## Type Parameters | Type Parameter | | -------------- | | `T` | ## Properties | Property | Modifier | Type | Description | Inherited from | Defined in | | ------------------------------------------ | ---------- | ------------------------------------------------------------------ | ------------------------------------------------------------------------------------- | ---------------- | -------------------------------------------------------------------------------------------------------------------------- | | `className?` | `readonly` | `string` | Applied as the `` element's `class` attribute; styling escape hatch (PRD §8.7). | `Omit.className` | [packages/core/src/scene/types.ts:41](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L41) | | `data` | `readonly` | readonly `T`\[] | - | `Omit.data` | [packages/core/src/scene/types.ts:34](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L34) | | `label` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `string`> | - | `Omit.label` | [packages/core/src/scene/types.ts:37](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L37) | | `offsetX?` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | `Omit.offsetX` | [packages/core/src/scene/types.ts:38](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L38) | | `offsetY?` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | `Omit.offsetY` | [packages/core/src/scene/types.ts:39](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L39) | | `tooltip?` | `public` | (`d`, `i`) => `ReactNode` | - | - | [packages/react/src/Annotate.tsx:7](https://github.com/yribeiro/pitchkit/blob/main/packages/react/src/Annotate.tsx#L7) | | `x` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | `Omit.x` | [packages/core/src/scene/types.ts:35](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L35) | | `y` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | `Omit.y` | [packages/core/src/scene/types.ts:36](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L36) | --- # ArrowsProps Source: https://www.pitchkitjs.com/docs/api/react/interfaces/ArrowsProps Defined in: [packages/react/src/Arrows.tsx:6](https://github.com/yribeiro/pitchkit/blob/main/packages/react/src/Arrows.tsx#L6) ## Extends * `Omit`\<[`ArrowsLayer`](/docs/api/core/interfaces/ArrowsLayer)\<`T`>, `"type"`> ## Type Parameters | Type Parameter | | -------------- | | `T` | ## Properties | Property | Modifier | Type | Description | Inherited from | Defined in | | -------------------------------------------------- | ---------- | ------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------- | -------------------- | -------------------------------------------------------------------------------------------------------------------------- | | `className?` | `readonly` | `string` | Applied as both the shaft's and arrowhead's `class` attribute; styling escape hatch (PRD §8.7). | `Omit.className` | [packages/core/src/scene/types.ts:61](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L61) | | `data` | `readonly` | readonly `T`\[] | - | `Omit.data` | [packages/core/src/scene/types.ts:50](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L50) | | `headSize?` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | Arrowhead size in pixels. | `Omit.headSize` | [packages/core/src/scene/types.ts:59](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L59) | | `stroke?` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `string`> | - | `Omit.stroke` | [packages/core/src/scene/types.ts:55](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L55) | | `strokeOpacity?` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | `Omit.strokeOpacity` | [packages/core/src/scene/types.ts:57](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L57) | | `strokeWidth?` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | `Omit.strokeWidth` | [packages/core/src/scene/types.ts:56](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L56) | | `tooltip?` | `public` | (`d`, `i`) => `ReactNode` | - | - | [packages/react/src/Arrows.tsx:7](https://github.com/yribeiro/pitchkit/blob/main/packages/react/src/Arrows.tsx#L7) | | `x` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | `Omit.x` | [packages/core/src/scene/types.ts:51](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L51) | | `x2` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | `Omit.x2` | [packages/core/src/scene/types.ts:53](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L53) | | `y` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | `Omit.y` | [packages/core/src/scene/types.ts:52](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L52) | | `y2` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | `Omit.y2` | [packages/core/src/scene/types.ts:54](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L54) | --- # CometProps Source: https://www.pitchkitjs.com/docs/api/react/interfaces/CometProps Defined in: [packages/react/src/Comet.tsx:7](https://github.com/yribeiro/pitchkit/blob/main/packages/react/src/Comet.tsx#L7) ## Extends * `Omit`\<[`CometLayer`](/docs/api/core/interfaces/CometLayer)\<`T`>, `"type"`> ## Type Parameters | Type Parameter | | -------------- | | `T` | ## Properties | Property | Modifier | Type | Description | Inherited from | Defined in | | -------------------------------------------- | ---------- | ------------------------------------------------------------------ | ---------------------------------------------------------------------------------- | ----------------- | -------------------------------------------------------------------------------------------------------------------------- | | `className?` | `readonly` | `string` | Applied as every ``'s `class` attribute; styling escape hatch (PRD §8.7). | `Omit.className` | [packages/core/src/scene/types.ts:83](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L83) | | `color?` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `string`> | - | `Omit.color` | [packages/core/src/scene/types.ts:77](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L77) | | `data` | `readonly` | readonly `T`\[] | - | `Omit.data` | [packages/core/src/scene/types.ts:72](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L72) | | `endWidth?` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | `Omit.endWidth` | [packages/core/src/scene/types.ts:79](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L79) | | `gradient?` | `readonly` | `boolean` | Fades opacity from 0 at the start to 1 at the end via a linear gradient. | `Omit.gradient` | [packages/core/src/scene/types.ts:81](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L81) | | `startWidth?` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | `Omit.startWidth` | [packages/core/src/scene/types.ts:78](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L78) | | `tooltip?` | `public` | (`d`, `i`) => `ReactNode` | - | - | [packages/react/src/Comet.tsx:8](https://github.com/yribeiro/pitchkit/blob/main/packages/react/src/Comet.tsx#L8) | | `x` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | `Omit.x` | [packages/core/src/scene/types.ts:73](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L73) | | `x2` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | `Omit.x2` | [packages/core/src/scene/types.ts:75](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L75) | | `y` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | `Omit.y` | [packages/core/src/scene/types.ts:74](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L74) | | `y2` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | `Omit.y2` | [packages/core/src/scene/types.ts:76](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L76) | --- # ConvexHullProps Source: https://www.pitchkitjs.com/docs/api/react/interfaces/ConvexHullProps Defined in: [packages/react/src/ConvexHull.tsx:6](https://github.com/yribeiro/pitchkit/blob/main/packages/react/src/ConvexHull.tsx#L6) ## Extends * `Omit`\<[`ConvexHullLayer`](/docs/api/core/interfaces/ConvexHullLayer)\<`T`>, `"type"`> ## Type Parameters | Type Parameter | | -------------- | | `T` | ## Properties | Property | Modifier | Type | Description | Inherited from | Defined in | | ---------------------------------------------- | ---------- | ------------------------------------------------------------------ | -------------------------------------------------------------------------------------- | ------------------ | ---------------------------------------------------------------------------------------------------------------------------- | | `className?` | `readonly` | `string` | Applied as the resulting polygon's `class` attribute; styling escape hatch (PRD §8.7). | `Omit.className` | [packages/core/src/scene/types.ts:244](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L244) | | `data` | `readonly` | readonly `T`\[] | - | `Omit.data` | [packages/core/src/scene/types.ts:236](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L236) | | `fill?` | `readonly` | `string` | - | `Omit.fill` | [packages/core/src/scene/types.ts:239](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L239) | | `fillOpacity?` | `readonly` | `number` | - | `Omit.fillOpacity` | [packages/core/src/scene/types.ts:240](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L240) | | `stroke?` | `readonly` | `string` | - | `Omit.stroke` | [packages/core/src/scene/types.ts:241](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L241) | | `strokeWidth?` | `readonly` | `number` | - | `Omit.strokeWidth` | [packages/core/src/scene/types.ts:242](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L242) | | `tooltip?` | `public` | `ReactNode` | Static — there's exactly one resulting shape for the whole dataset, not one per datum. | - | [packages/react/src/ConvexHull.tsx:8](https://github.com/yribeiro/pitchkit/blob/main/packages/react/src/ConvexHull.tsx#L8) | | `x` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | `Omit.x` | [packages/core/src/scene/types.ts:237](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L237) | | `y` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | `Omit.y` | [packages/core/src/scene/types.ts:238](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L238) | --- # FlowProps Source: https://www.pitchkitjs.com/docs/api/react/interfaces/FlowProps Defined in: [packages/react/src/Flow.tsx:6](https://github.com/yribeiro/pitchkit/blob/main/packages/react/src/Flow.tsx#L6) ## Extends * `Omit`\<[`FlowLayer`](/docs/api/core/interfaces/FlowLayer)\<`T`>, `"type"`> ## Type Parameters | Type Parameter | | -------------- | | `T` | ## Properties | Property | Modifier | Type | Description | Inherited from | Defined in | | ---------------------------------------------------- | ---------- | ------------------------------------------------------------------ | ------------------------------------------------------------------------------------------- | --------------------- | ---------------------------------------------------------------------------------------------------------------------------- | | `binsX?` | `readonly` | `number` | - | `Omit.binsX` | [packages/core/src/scene/types.ts:289](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L289) | | `binsY?` | `readonly` | `number` | - | `Omit.binsY` | [packages/core/src/scene/types.ts:290](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L290) | | `className?` | `readonly` | `string` | Applied as every arrow's `class` attribute; styling escape hatch (PRD §8.7). | `Omit.className` | [packages/core/src/scene/types.ts:300](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L300) | | `colorMax?` | `readonly` | `string` | Color at the highest bin count in the layer's data. | `Omit.colorMax` | [packages/core/src/scene/types.ts:294](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L294) | | `colorMin?` | `readonly` | `string` | Color at the lowest bin count in the layer's data. | `Omit.colorMin` | [packages/core/src/scene/types.ts:292](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L292) | | `data` | `readonly` | readonly `T`\[] | - | `Omit.data` | [packages/core/src/scene/types.ts:284](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L284) | | `strokeWidthMax?` | `readonly` | `number` | Arrow stroke width at the highest bin count. | `Omit.strokeWidthMax` | [packages/core/src/scene/types.ts:298](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L298) | | `strokeWidthMin?` | `readonly` | `number` | Arrow stroke width at the lowest bin count. | `Omit.strokeWidthMin` | [packages/core/src/scene/types.ts:296](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L296) | | `tooltip?` | `public` | (`bin`, `i`) => `ReactNode` | Per-*bin* (not per-datum) — the rendered arrows are aggregates, one per occupied grid cell. | - | [packages/react/src/Flow.tsx:8](https://github.com/yribeiro/pitchkit/blob/main/packages/react/src/Flow.tsx#L8) | | `x` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | `Omit.x` | [packages/core/src/scene/types.ts:285](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L285) | | `x2` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | `Omit.x2` | [packages/core/src/scene/types.ts:287](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L287) | | `y` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | `Omit.y` | [packages/core/src/scene/types.ts:286](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L286) | | `y2` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | `Omit.y2` | [packages/core/src/scene/types.ts:288](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L288) | --- # GoalAngleProps Source: https://www.pitchkitjs.com/docs/api/react/interfaces/GoalAngleProps Defined in: [packages/react/src/GoalAngle.tsx:6](https://github.com/yribeiro/pitchkit/blob/main/packages/react/src/GoalAngle.tsx#L6) ## Extends * `Omit`\<[`GoalAngleLayer`](/docs/api/core/interfaces/GoalAngleLayer)\<`T`>, `"type"`> ## Type Parameters | Type Parameter | | -------------- | | `T` | ## Properties | Property | Modifier | Type | Description | Inherited from | Defined in | | ---------------------------------------------- | ---------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ------------------ | ---------------------------------------------------------------------------------------------------------------------------- | | `className?` | `readonly` | `string` | Applied as every wedge's `class` attribute; styling escape hatch (PRD §8.7). | `Omit.className` | [packages/core/src/scene/types.ts:274](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L274) | | `data` | `readonly` | readonly `T`\[] | - | `Omit.data` | [packages/core/src/scene/types.ts:264](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L264) | | `fill?` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `string`> | - | `Omit.fill` | [packages/core/src/scene/types.ts:269](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L269) | | `fillOpacity?` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | `Omit.fillOpacity` | [packages/core/src/scene/types.ts:270](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L270) | | `goal?` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `"left"` \| `"right"` \| `"nearest"`> | Which goal to measure against; `"nearest"` (the default) picks by distance. | `Omit.goal` | [packages/core/src/scene/types.ts:268](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L268) | | `stroke?` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `string`> | - | `Omit.stroke` | [packages/core/src/scene/types.ts:271](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L271) | | `strokeWidth?` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | `Omit.strokeWidth` | [packages/core/src/scene/types.ts:272](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L272) | | `tooltip?` | `public` | (`d`, `i`) => `ReactNode` | - | - | [packages/react/src/GoalAngle.tsx:7](https://github.com/yribeiro/pitchkit/blob/main/packages/react/src/GoalAngle.tsx#L7) | | `x` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | `Omit.x` | [packages/core/src/scene/types.ts:265](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L265) | | `y` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | `Omit.y` | [packages/core/src/scene/types.ts:266](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L266) | --- # HeatmapProps Source: https://www.pitchkitjs.com/docs/api/react/interfaces/HeatmapProps Defined in: [packages/react/src/Heatmap.tsx:5](https://github.com/yribeiro/pitchkit/blob/main/packages/react/src/Heatmap.tsx#L5) ## Extends * `Omit`\<[`HeatmapLayer`](/docs/api/core/interfaces/HeatmapLayer)\<`T`>, `"type"`> ## Type Parameters | Type Parameter | | -------------- | | `T` | ## Properties | Property | Modifier | Type | Description | Inherited from | Defined in | | ------------------------------------------ | ---------- | ------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------- | ---------------------------------------------------------------------------------------------------------------------------- | | `binsX?` | `readonly` | `number` | - | `Omit.binsX` | [packages/core/src/scene/types.ts:100](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L100) | | `binsY?` | `readonly` | `number` | - | `Omit.binsY` | [packages/core/src/scene/types.ts:101](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L101) | | `className?` | `public` | `string` | Every bin gets painted (from `colorMin` to `colorMax`, including zero-value bins) rather than leaving low bins transparent, so a heatmap fully covers the pitch underneath by default. Set an opacity here (or a blend mode) to let the pitch show through. | - | [packages/react/src/Heatmap.tsx:12](https://github.com/yribeiro/pitchkit/blob/main/packages/react/src/Heatmap.tsx#L12) | | `colorMax?` | `readonly` | `string` | Color at the highest bin value in the scene's data. | `Omit.colorMax` | [packages/core/src/scene/types.ts:105](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L105) | | `colorMin?` | `readonly` | `string` | Color at the lowest bin value in the scene's data. | `Omit.colorMin` | [packages/core/src/scene/types.ts:103](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L103) | | `data` | `readonly` | readonly `T`\[] | - | `Omit.data` | [packages/core/src/scene/types.ts:95](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L95) | | `style?` | `public` | `CSSProperties` | - | - | [packages/react/src/Heatmap.tsx:13](https://github.com/yribeiro/pitchkit/blob/main/packages/react/src/Heatmap.tsx#L13) | | `weight?` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | Omitted = count of points per bin; provided = sum of this per bin. | `Omit.weight` | [packages/core/src/scene/types.ts:99](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L99) | | `x` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | `Omit.x` | [packages/core/src/scene/types.ts:96](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L96) | | `y` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | `Omit.y` | [packages/core/src/scene/types.ts:97](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L97) | --- # HexbinProps Source: https://www.pitchkitjs.com/docs/api/react/interfaces/HexbinProps Defined in: [packages/react/src/Hexbin.tsx:5](https://github.com/yribeiro/pitchkit/blob/main/packages/react/src/Hexbin.tsx#L5) ## Extends * `Omit`\<[`HexbinLayer`](/docs/api/core/interfaces/HexbinLayer)\<`T`>, `"type"`> ## Type Parameters | Type Parameter | | -------------- | | `T` | ## Properties | Property | Modifier | Type | Description | Inherited from | Defined in | | ---------------------------------------------- | ---------- | ------------------------------------------------------------------ | -------------------------------------------------------------------------- | ------------------ | ---------------------------------------------------------------------------------------------------------------------------- | | `binsX?` | `readonly` | `number` | Hexagon columns across the pitch length; the cell size follows from it. | `Omit.binsX` | [packages/core/src/scene/types.ts:150](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L150) | | `className?` | `public` | `string` | - | - | [packages/react/src/Hexbin.tsx:6](https://github.com/yribeiro/pitchkit/blob/main/packages/react/src/Hexbin.tsx#L6) | | `colorMax?` | `readonly` | `string` | - | `Omit.colorMax` | [packages/core/src/scene/types.ts:152](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L152) | | `colorMin?` | `readonly` | `string` | - | `Omit.colorMin` | [packages/core/src/scene/types.ts:151](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L151) | | `data` | `readonly` | readonly `T`\[] | - | `Omit.data` | [packages/core/src/scene/types.ts:144](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L144) | | `stroke?` | `readonly` | `string` | Stroke colour for hexagon outlines; omitted = no outlines. | `Omit.stroke` | [packages/core/src/scene/types.ts:154](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L154) | | `strokeWidth?` | `readonly` | `number` | - | `Omit.strokeWidth` | [packages/core/src/scene/types.ts:155](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L155) | | `style?` | `public` | `CSSProperties` | - | - | [packages/react/src/Hexbin.tsx:7](https://github.com/yribeiro/pitchkit/blob/main/packages/react/src/Hexbin.tsx#L7) | | `weight?` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | Omitted = count of points per hexagon; provided = sum of this per hexagon. | `Omit.weight` | [packages/core/src/scene/types.ts:148](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L148) | | `x` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | `Omit.x` | [packages/core/src/scene/types.ts:145](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L145) | | `y` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | `Omit.y` | [packages/core/src/scene/types.ts:146](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L146) | --- # KDEProps Source: https://www.pitchkitjs.com/docs/api/react/interfaces/KDEProps Defined in: [packages/react/src/KDE.tsx:5](https://github.com/yribeiro/pitchkit/blob/main/packages/react/src/KDE.tsx#L5) ## Extends * `Omit`\<[`KdeLayer`](/docs/api/core/interfaces/KdeLayer)\<`T`>, `"type"`> ## Type Parameters | Type Parameter | | -------------- | | `T` | ## Properties | Property | Modifier | Type | Description | Inherited from | Defined in | | -------------------------------------------- | ---------- | ------------------------------------------------------------------ | --------------------------------------------------------------------------------------------- | ----------------- | ---------------------------------------------------------------------------------------------------------------------------- | | `bandwidth?` | `readonly` | `number` | Kernel bandwidth in provider units; omitted = Silverman's rule of thumb per axis. | `Omit.bandwidth` | [packages/core/src/scene/types.ts:174](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L174) | | `className?` | `public` | `string` | - | - | [packages/react/src/KDE.tsx:6](https://github.com/yribeiro/pitchkit/blob/main/packages/react/src/KDE.tsx#L6) | | `colorMax?` | `readonly` | `string` | - | `Omit.colorMax` | [packages/core/src/scene/types.ts:176](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L176) | | `colorMin?` | `readonly` | `string` | - | `Omit.colorMin` | [packages/core/src/scene/types.ts:175](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L175) | | `data` | `readonly` | readonly `T`\[] | - | `Omit.data` | [packages/core/src/scene/types.ts:166](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L166) | | `maxOpacity?` | `readonly` | `number` | Opacity at the densest cell; density fades linearly to fully transparent at zero. | `Omit.maxOpacity` | [packages/core/src/scene/types.ts:178](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L178) | | `resolution?` | `readonly` | `number` | Grid cells per axis the estimate is sampled on; higher = smoother, slower. | `Omit.resolution` | [packages/core/src/scene/types.ts:172](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L172) | | `style?` | `public` | `CSSProperties` | - | - | [packages/react/src/KDE.tsx:7](https://github.com/yribeiro/pitchkit/blob/main/packages/react/src/KDE.tsx#L7) | | `weight?` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | Omitted = every point counts equally; provided = each point's contribution is scaled by this. | `Omit.weight` | [packages/core/src/scene/types.ts:170](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L170) | | `x` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | `Omit.x` | [packages/core/src/scene/types.ts:167](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L167) | | `y` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | `Omit.y` | [packages/core/src/scene/types.ts:168](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L168) | --- # PitchProps Source: https://www.pitchkitjs.com/docs/api/react/interfaces/PitchProps Defined in: [packages/react/src/Pitch.tsx:24](https://github.com/yribeiro/pitchkit/blob/main/packages/react/src/Pitch.tsx#L24) ## Properties | Property | Type | Description | Defined in | | ---------------------------------------------- | ------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------ | | `appearance?` | [`PitchAppearance`](/docs/api/core/interfaces/PitchAppearance) | - | [packages/react/src/Pitch.tsx:46](https://github.com/yribeiro/pitchkit/blob/main/packages/react/src/Pitch.tsx#L46) | | `children?` | `ReactNode` | - | [packages/react/src/Pitch.tsx:49](https://github.com/yribeiro/pitchkit/blob/main/packages/react/src/Pitch.tsx#L49) | | `className?` | `string` | - | [packages/react/src/Pitch.tsx:47](https://github.com/yribeiro/pitchkit/blob/main/packages/react/src/Pitch.tsx#L47) | | `crop?` | [`CropWindow`](/docs/api/core/interfaces/CropWindow) | - | [packages/react/src/Pitch.tsx:44](https://github.com/yribeiro/pitchkit/blob/main/packages/react/src/Pitch.tsx#L44) | | `dimensions?` | [`PitchDimensionOverrides`](/docs/api/core/interfaces/PitchDimensionOverrides) | The real extent of this particular pitch, for providers whose coordinates are metres on an actual pitch rather than a fixed grid. SkillCorner is the case that needs it: their pitches really are 104 to 106 m long, and the data is in real metres, so passing the match's own `pitch_length`/`pitch_width` draws the touchlines where they actually were. Markings don't move — a penalty area is 16.5 m deep on any pitch. Leave it unset for grid-based providers; overriding a normalized grid (Opta's 0-100) throws rather than silently rescaling. | [packages/react/src/Pitch.tsx:38](https://github.com/yribeiro/pitchkit/blob/main/packages/react/src/Pitch.tsx#L38) | | `height?` | `number` | - | [packages/react/src/Pitch.tsx:43](https://github.com/yribeiro/pitchkit/blob/main/packages/react/src/Pitch.tsx#L43) | | `orientation?` | [`Orientation`](/docs/api/core/type-aliases/Orientation) | **Default** `"horizontal"` | [packages/react/src/Pitch.tsx:40](https://github.com/yribeiro/pitchkit/blob/main/packages/react/src/Pitch.tsx#L40) | | `padding?` | [`ViewportPadding`](/docs/api/core/interfaces/ViewportPadding) | - | [packages/react/src/Pitch.tsx:45](https://github.com/yribeiro/pitchkit/blob/main/packages/react/src/Pitch.tsx#L45) | | `style?` | `CSSProperties` | - | [packages/react/src/Pitch.tsx:48](https://github.com/yribeiro/pitchkit/blob/main/packages/react/src/Pitch.tsx#L48) | | `type` | [`PitchTypeId`](/docs/api/core/type-aliases/PitchTypeId) | - | [packages/react/src/Pitch.tsx:25](https://github.com/yribeiro/pitchkit/blob/main/packages/react/src/Pitch.tsx#L25) | | `width?` | `number` | Fixed pixel size — the opt-out from the responsive default. Provide both, or neither. | [packages/react/src/Pitch.tsx:42](https://github.com/yribeiro/pitchkit/blob/main/packages/react/src/Pitch.tsx#L42) | --- # PolygonProps Source: https://www.pitchkitjs.com/docs/api/react/interfaces/PolygonProps Defined in: [packages/react/src/Polygon.tsx:6](https://github.com/yribeiro/pitchkit/blob/main/packages/react/src/Polygon.tsx#L6) ## Extends * `Omit`\<[`PolygonLayer`](/docs/api/core/interfaces/PolygonLayer)\<`T`>, `"type"`> ## Type Parameters | Type Parameter | | -------------- | | `T` | ## Properties | Property | Modifier | Type | Description | Inherited from | Defined in | | ---------------------------------------------- | ---------- | ---------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------ | ------------------ | ---------------------------------------------------------------------------------------------------------------------------- | | `className?` | `readonly` | `string` | Applied as every polygon's `class` attribute; styling escape hatch (PRD §8.7). | `Omit.className` | [packages/core/src/scene/types.ts:230](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L230) | | `data` | `readonly` | readonly `T`\[] | - | `Omit.data` | [packages/core/src/scene/types.ts:223](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L223) | | `fill?` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `string`> | - | `Omit.fill` | [packages/core/src/scene/types.ts:225](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L225) | | `fillOpacity?` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | `Omit.fillOpacity` | [packages/core/src/scene/types.ts:226](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L226) | | `points` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, readonly readonly \[`number`, `number`]\[]> | - | `Omit.points` | [packages/core/src/scene/types.ts:224](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L224) | | `stroke?` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `string`> | - | `Omit.stroke` | [packages/core/src/scene/types.ts:227](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L227) | | `strokeWidth?` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | `Omit.strokeWidth` | [packages/core/src/scene/types.ts:228](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L228) | | `tooltip?` | `public` | (`d`, `i`) => `ReactNode` | - | - | [packages/react/src/Polygon.tsx:7](https://github.com/yribeiro/pitchkit/blob/main/packages/react/src/Polygon.tsx#L7) | --- # PositionalHeatmapProps Source: https://www.pitchkitjs.com/docs/api/react/interfaces/PositionalHeatmapProps Defined in: [packages/react/src/PositionalHeatmap.tsx:5](https://github.com/yribeiro/pitchkit/blob/main/packages/react/src/PositionalHeatmap.tsx#L5) ## Extends * `Omit`\<[`PositionalHeatmapLayer`](/docs/api/core/interfaces/PositionalHeatmapLayer)\<`T`>, `"type"`> ## Type Parameters | Type Parameter | | -------------- | | `T` | ## Properties | Property | Modifier | Type | Description | Inherited from | Defined in | | ---------------------------------------------- | ---------- | ------------------------------------------------------------------ | -------------------------------------------------------------------- | ------------------ | ---------------------------------------------------------------------------------------------------------------------------------------- | | `className?` | `public` | `string` | - | - | [packages/react/src/PositionalHeatmap.tsx:6](https://github.com/yribeiro/pitchkit/blob/main/packages/react/src/PositionalHeatmap.tsx#L6) | | `colorMax?` | `readonly` | `string` | - | `Omit.colorMax` | [packages/core/src/scene/types.ts:131](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L131) | | `colorMin?` | `readonly` | `string` | - | `Omit.colorMin` | [packages/core/src/scene/types.ts:130](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L130) | | `data` | `readonly` | readonly `T`\[] | - | `Omit.data` | [packages/core/src/scene/types.ts:123](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L123) | | `layout?` | `readonly` | [`PositionalLayout`](/docs/api/core/type-aliases/PositionalLayout) | Defaults to `"full"`, the 20-zone layout. | `Omit.layout` | [packages/core/src/scene/types.ts:129](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L129) | | `stroke?` | `readonly` | `string` | Stroke colour for zone outlines; omitted = no outlines. | `Omit.stroke` | [packages/core/src/scene/types.ts:133](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L133) | | `strokeWidth?` | `readonly` | `number` | - | `Omit.strokeWidth` | [packages/core/src/scene/types.ts:134](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L134) | | `style?` | `public` | `CSSProperties` | - | - | [packages/react/src/PositionalHeatmap.tsx:7](https://github.com/yribeiro/pitchkit/blob/main/packages/react/src/PositionalHeatmap.tsx#L7) | | `weight?` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | Omitted = count of points per zone; provided = sum of this per zone. | `Omit.weight` | [packages/core/src/scene/types.ts:127](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L127) | | `x` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | `Omit.x` | [packages/core/src/scene/types.ts:124](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L124) | | `y` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | `Omit.y` | [packages/core/src/scene/types.ts:125](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L125) | --- # ScatterProps Source: https://www.pitchkitjs.com/docs/api/react/interfaces/ScatterProps Defined in: [packages/react/src/Scatter.tsx:6](https://github.com/yribeiro/pitchkit/blob/main/packages/react/src/Scatter.tsx#L6) ## Extends * `Omit`\<[`ScatterLayer`](/docs/api/core/interfaces/ScatterLayer)\<`T`>, `"type"`> ## Type Parameters | Type Parameter | | -------------- | | `T` | ## Properties | Property | Modifier | Type | Description | Inherited from | Defined in | | ---------------------------------------------- | ---------- | ------------------------------------------------------------------ | --------------------------------------------------------------------------------- | ------------------ | -------------------------------------------------------------------------------------------------------------------------- | | `className?` | `readonly` | `string` | Applied as every ``'s `class` attribute; styling escape hatch (PRD §8.7). | `Omit.className` | [packages/core/src/scene/types.ts:28](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L28) | | `data` | `readonly` | readonly `T`\[] | - | `Omit.data` | [packages/core/src/scene/types.ts:19](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L19) | | `fill?` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `string`> | - | `Omit.fill` | [packages/core/src/scene/types.ts:23](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L23) | | `fillOpacity?` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | `Omit.fillOpacity` | [packages/core/src/scene/types.ts:24](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L24) | | `r?` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | `Omit.r` | [packages/core/src/scene/types.ts:22](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L22) | | `stroke?` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `string`> | - | `Omit.stroke` | [packages/core/src/scene/types.ts:25](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L25) | | `strokeWidth?` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | `Omit.strokeWidth` | [packages/core/src/scene/types.ts:26](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L26) | | `tooltip?` | `public` | (`d`, `i`) => `ReactNode` | - | - | [packages/react/src/Scatter.tsx:7](https://github.com/yribeiro/pitchkit/blob/main/packages/react/src/Scatter.tsx#L7) | | `x` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | `Omit.x` | [packages/core/src/scene/types.ts:20](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L20) | | `y` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | `Omit.y` | [packages/core/src/scene/types.ts:21](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L21) | --- # TooltipState Source: https://www.pitchkitjs.com/docs/api/react/interfaces/TooltipState Defined in: [packages/react/src/context.ts:5](https://github.com/yribeiro/pitchkit/blob/main/packages/react/src/context.ts#L5) ## Properties | Property | Modifier | Type | Description | Defined in | | ------------------------------------- | ---------- | ----------- | ------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------ | | `content` | `readonly` | `ReactNode` | - | [packages/react/src/context.ts:6](https://github.com/yribeiro/pitchkit/blob/main/packages/react/src/context.ts#L6) | | `x` | `readonly` | `number` | Pixel position within the \ wrapper, not the viewport. | [packages/react/src/context.ts:8](https://github.com/yribeiro/pitchkit/blob/main/packages/react/src/context.ts#L8) | | `y` | `readonly` | `number` | - | [packages/react/src/context.ts:9](https://github.com/yribeiro/pitchkit/blob/main/packages/react/src/context.ts#L9) | --- # VoronoiProps Source: https://www.pitchkitjs.com/docs/api/react/interfaces/VoronoiProps Defined in: [packages/react/src/Voronoi.tsx:6](https://github.com/yribeiro/pitchkit/blob/main/packages/react/src/Voronoi.tsx#L6) ## Extends * `Omit`\<[`VoronoiLayer`](/docs/api/core/interfaces/VoronoiLayer)\<`T`>, `"type"`> ## Type Parameters | Type Parameter | | -------------- | | `T` | ## Properties | Property | Modifier | Type | Description | Inherited from | Defined in | | ---------------------------------------------- | ---------- | ------------------------------------------------------------------ | --------------------------------------------------------------------------- | ------------------ | ---------------------------------------------------------------------------------------------------------------------------- | | `className?` | `readonly` | `string` | Applied as every cell's `class` attribute; styling escape hatch (PRD §8.7). | `Omit.className` | [packages/core/src/scene/types.ts:258](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L258) | | `data` | `readonly` | readonly `T`\[] | - | `Omit.data` | [packages/core/src/scene/types.ts:250](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L250) | | `fill?` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `string`> | - | `Omit.fill` | [packages/core/src/scene/types.ts:253](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L253) | | `fillOpacity?` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | `Omit.fillOpacity` | [packages/core/src/scene/types.ts:254](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L254) | | `stroke?` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `string`> | - | `Omit.stroke` | [packages/core/src/scene/types.ts:255](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L255) | | `strokeWidth?` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | `Omit.strokeWidth` | [packages/core/src/scene/types.ts:256](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L256) | | `tooltip?` | `public` | (`d`, `i`) => `ReactNode` | - | - | [packages/react/src/Voronoi.tsx:7](https://github.com/yribeiro/pitchkit/blob/main/packages/react/src/Voronoi.tsx#L7) | | `x` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | `Omit.x` | [packages/core/src/scene/types.ts:251](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L251) | | `y` | `readonly` | [`Accessor`](/docs/api/core/type-aliases/Accessor)\<`T`, `number`> | - | `Omit.y` | [packages/core/src/scene/types.ts:252](https://github.com/yribeiro/pitchkit/blob/main/packages/core/src/scene/types.ts#L252) | --- # fetchJson() Source: https://www.pitchkitjs.com/docs/api/data-providers/index/functions/fetchJson ```ts function fetchJson(url, options?): Promise; ``` Defined in: [packages/data-providers/src/fetch-json.ts:22](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/fetch-json.ts#L22) GET a URL and parse it as JSON, translating every failure mode into a [DataProviderError](/docs/api/data-providers/index/classes/DataProviderError) with a `kind` the caller can branch on. Deliberately built on the global `fetch` rather than an HTTP client — see `http.ts` for the shared request path. ## Type Parameters | Type Parameter | Default type | | -------------- | ------------ | | `T` | `unknown` | ## Parameters | Parameter | Type | | --------- | ---------------------------------------------------------------------- | | `url` | `string` | | `options` | [`LoadOptions`](/docs/api/data-providers/index/interfaces/LoadOptions) | ## Returns `Promise`\<`T`> --- # DataProviderError Source: https://www.pitchkitjs.com/docs/api/data-providers/index/classes/DataProviderError Defined in: [packages/data-providers/src/errors.ts:18](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/errors.ts#L18) ## Extends * `Error` ## Constructors ### Constructor ```ts new DataProviderError( kind, message, options? ): DataProviderError; ``` Defined in: [packages/data-providers/src/errors.ts:23](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/errors.ts#L23) #### Parameters | Parameter | Type | | ----------------- | -------------------------------------------------------------------------------------------- | | `kind` | [`DataProviderErrorKind`](/docs/api/data-providers/index/type-aliases/DataProviderErrorKind) | | `message` | `string` | | `options` | \{ `cause?`: `unknown`; `status?`: `number`; `url?`: `string`; } | | `options.cause?` | `unknown` | | `options.status?` | `number` | | `options.url?` | `string` | #### Returns `DataProviderError` #### Overrides ```ts Error.constructor ``` ## Properties ### cause? ```ts optional cause?: unknown; ``` Defined in: [node\_modules/typescript/lib/lib.es2022.error.d.ts:26](https://github.com/yribeiro/pitchkit/blob/main/../../../node_modules/typescript/lib/lib.es2022.error.d.ts#L26) #### Inherited from ```ts Error.cause ``` *** ### kind ```ts readonly kind: DataProviderErrorKind; ``` Defined in: [packages/data-providers/src/errors.ts:19](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/errors.ts#L19) *** ### message ```ts message: string; ``` Defined in: [node\_modules/typescript/lib/lib.es5.d.ts:1077](https://github.com/yribeiro/pitchkit/blob/main/../../../node_modules/typescript/lib/lib.es5.d.ts#L1077) #### Inherited from ```ts Error.message ``` *** ### name ```ts name: string; ``` Defined in: [node\_modules/typescript/lib/lib.es5.d.ts:1076](https://github.com/yribeiro/pitchkit/blob/main/../../../node_modules/typescript/lib/lib.es5.d.ts#L1076) #### Inherited from ```ts Error.name ``` *** ### stack? ```ts optional stack?: string; ``` Defined in: [node\_modules/typescript/lib/lib.es5.d.ts:1078](https://github.com/yribeiro/pitchkit/blob/main/../../../node_modules/typescript/lib/lib.es5.d.ts#L1078) #### Inherited from ```ts Error.stack ``` *** ### status? ```ts readonly optional status?: number; ``` Defined in: [packages/data-providers/src/errors.ts:21](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/errors.ts#L21) *** ### url? ```ts readonly optional url?: string; ``` Defined in: [packages/data-providers/src/errors.ts:20](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/errors.ts#L20) *** ### stackTraceLimit ```ts static stackTraceLimit: number; ``` Defined in: [packages/data-providers/node\_modules/@types/node/globals.d.ts:68](https://github.com/yribeiro/pitchkit/blob/main/../node_modules/@types/node/globals.d.ts#L68) The `Error.stackTraceLimit` property specifies the number of stack frames collected by a stack trace (whether generated by `new Error().stack` or `Error.captureStackTrace(obj)`). The default value is `10` but may be set to any valid JavaScript number. Changes will affect any stack trace captured *after* the value has been changed. If set to a non-number value, or set to a negative number, stack traces will not capture any frames. #### Inherited from ```ts Error.stackTraceLimit ``` ## Methods ### captureStackTrace() ```ts static captureStackTrace(targetObject, constructorOpt?): void; ``` Defined in: [packages/data-providers/node\_modules/@types/node/globals.d.ts:52](https://github.com/yribeiro/pitchkit/blob/main/../node_modules/@types/node/globals.d.ts#L52) Creates a `.stack` property on `targetObject`, which when accessed returns a string representing the location in the code at which `Error.captureStackTrace()` was called. ```js const myObject = {}; Error.captureStackTrace(myObject); myObject.stack; // Similar to `new Error().stack` ``` The first line of the trace will be prefixed with `${myObject.name}: ${myObject.message}`. The optional `constructorOpt` argument accepts a function. If given, all frames above `constructorOpt`, including `constructorOpt`, will be omitted from the generated stack trace. The `constructorOpt` argument is useful for hiding implementation details of error generation from the user. For instance: ```js function a() { b(); } function b() { c(); } function c() { // Create an error without stack trace to avoid calculating the stack trace twice. const { stackTraceLimit } = Error; Error.stackTraceLimit = 0; const error = new Error(); Error.stackTraceLimit = stackTraceLimit; // Capture the stack trace above function b Error.captureStackTrace(error, b); // Neither function c, nor b is included in the stack trace throw error; } a(); ``` #### Parameters | Parameter | Type | | ----------------- | ---------- | | `targetObject` | `object` | | `constructorOpt?` | `Function` | #### Returns `void` #### Inherited from ```ts Error.captureStackTrace ``` *** ### prepareStackTrace() ```ts static prepareStackTrace(err, stackTraces): any; ``` Defined in: [packages/data-providers/node\_modules/@types/node/globals.d.ts:56](https://github.com/yribeiro/pitchkit/blob/main/../node_modules/@types/node/globals.d.ts#L56) #### Parameters | Parameter | Type | | ------------- | ------------- | | `err` | `Error` | | `stackTraces` | `CallSite`\[] | #### Returns `any` #### See [https://v8.dev/docs/stack-trace-api#customizing-stack-traces](https://v8.dev/docs/stack-trace-api#customizing-stack-traces) #### Inherited from ```ts Error.prepareStackTrace ``` --- # LoadOptions Source: https://www.pitchkitjs.com/docs/api/data-providers/index/interfaces/LoadOptions Defined in: [packages/data-providers/src/fetch-json.ts:4](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/fetch-json.ts#L4) ## Extended by * [`StatsBombLoadOptions`](/docs/api/data-providers/statsbomb/interfaces/StatsBombLoadOptions) * [`SkillCornerLoadOptions`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerLoadOptions) * [`WyscoutLoadOptions`](/docs/api/data-providers/wyscout/interfaces/WyscoutLoadOptions) ## Properties | Property | Modifier | Type | Description | Defined in | | ------------------------------------ | ---------- | -------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | | `fetch?` | `readonly` | \{ (`input`, `init?`): `Promise`\<`Response`>; (`input`, `init?`): `Promise`\<`Response`>; } | Fetch implementation to use instead of the global one. Injecting is how this package's own tests avoid touching the network, and it's the hook for a Next.js caching wrapper or a Node agent with a proxy configured. | [packages/data-providers/src/fetch-json.ts:10](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/fetch-json.ts#L10) | | `signal?` | `readonly` | `AbortSignal` | Forwarded to the underlying request, so callers can cancel a slow load. | [packages/data-providers/src/fetch-json.ts:12](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/fetch-json.ts#L12) | --- # DataProviderErrorKind Source: https://www.pitchkitjs.com/docs/api/data-providers/index/type-aliases/DataProviderErrorKind ```ts type DataProviderErrorKind = "network" | "http" | "parse" | "schema"; ``` Defined in: [packages/data-providers/src/errors.ts:8](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/errors.ts#L8) Every failure this package raises, so a consumer can `catch` one type and still tell the cases apart via `kind`. The demo app in `examples/react-nextjs` leans on exactly this: a bad URL, a 404, a CORS rejection and "valid JSON, but not the file you thought" all need distinguishable messages, and a bare `Error` can't carry that. --- # attackingSideOf() Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/functions/attackingSideOf ```ts function attackingSideOf( match, teamId, period ): "left_to_right" | "right_to_left" | undefined; ``` Defined in: [packages/data-providers/src/skillcorner/coordinates.ts:81](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/coordinates.ts#L81) Which way a team attacks in a given period, resolved from the match's `home_team_side`. Needed because tracking coordinates are absolute and swap at half time, unlike the dynamic-events file. Returns `undefined` for a period the match file doesn't describe rather than guessing a direction. ## Parameters | Parameter | Type | | --------- | -------------------------------------------------------------------------------------- | | `match` | [`SkillCornerMatch`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerMatch) | | `teamId` | `number` | | `period` | `number` | ## Returns `"left_to_right"` | `"right_to_left"` | `undefined` --- # breaksDefensiveLine() Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/functions/breaksDefensiveLine ```ts function breaksDefensiveLine(run): boolean; ``` Defined in: [packages/data-providers/src/skillcorner/predicates.ts:51](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/predicates.ts#L51) ## Parameters | Parameter | Type | | --------- | ------------------------------------------------------------------------------------------------ | | `run` | [`SkillCornerOffBallRun`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerOffBallRun) | ## Returns `boolean` --- # detectedPlayers() Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/functions/detectedPlayers ```ts function detectedPlayers(frame): SkillCornerTrackedPlayer[]; ``` Defined in: [packages/data-providers/src/skillcorner/select.ts:89](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/select.ts#L89) Positions the camera actually saw, as opposed to extrapolated estimates. ## Parameters | Parameter | Type | | --------- | -------------------------------------------------------------------------------------- | | `frame` | [`SkillCornerFrame`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerFrame) | ## Returns [`SkillCornerTrackedPlayer`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerTrackedPlayer)\[] --- # dynamicEventsUrl() Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/functions/dynamicEventsUrl ```ts function dynamicEventsUrl(matchId, options?): string; ``` Defined in: [packages/data-providers/src/skillcorner/load.ts:72](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/load.ts#L72) ## Parameters | Parameter | Type | | --------- | -------------------------------------------------------------------------------------------------- | | `matchId` | `number` | | `options` | [`SkillCornerLoadOptions`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerLoadOptions) | ## Returns `string` --- # fetchDynamicEvents() Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/functions/fetchDynamicEvents ```ts function fetchDynamicEvents(match, options?): Promise; ``` Defined in: [packages/data-providers/src/skillcorner/load.ts:170](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/load.ts#L170) A match's dynamic events (\~4-5 MB, 322 columns). Takes the `match` because coordinates are metres measured from the centre spot, and turning them into plottable ones needs that match's own pitch dimensions. ## Parameters | Parameter | Type | | --------- | -------------------------------------------------------------------------------------------------- | | `match` | [`SkillCornerMatch`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerMatch) | | `options` | [`SkillCornerLoadOptions`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerLoadOptions) | ## Returns `Promise`\<[`SkillCornerEvent`](/docs/api/data-providers/skillcorner/type-aliases/SkillCornerEvent)\[]> --- # fetchMatch() Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/functions/fetchMatch ```ts function fetchMatch(matchId, options?): Promise; ``` Defined in: [packages/data-providers/src/skillcorner/load.ts:156](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/load.ts#L156) One match's metadata (\~30 KB): lineups, periods, pitch dimensions. ## Parameters | Parameter | Type | | --------- | -------------------------------------------------------------------------------------------------- | | `matchId` | `number` | | `options` | [`SkillCornerLoadOptions`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerLoadOptions) | ## Returns `Promise`\<[`SkillCornerMatch`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerMatch)> --- # fetchMatches() Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/functions/fetchMatches ```ts function fetchMatches(options?): Promise; ``` Defined in: [packages/data-providers/src/skillcorner/load.ts:149](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/load.ts#L149) The 20-match index (\~7 KB). ## Parameters | Parameter | Type | | --------- | -------------------------------------------------------------------------------------------------- | | `options` | [`SkillCornerLoadOptions`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerLoadOptions) | ## Returns `Promise`\<[`SkillCornerMatchSummary`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerMatchSummary)\[]> --- # fetchPhasesOfPlay() Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/functions/fetchPhasesOfPlay ```ts function fetchPhasesOfPlay(match, options?): Promise; ``` Defined in: [packages/data-providers/src/skillcorner/load.ts:178](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/load.ts#L178) A match's phases of play (\~110 KB). ## Parameters | Parameter | Type | | --------- | -------------------------------------------------------------------------------------------------- | | `match` | [`SkillCornerMatch`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerMatch) | | `options` | [`SkillCornerLoadOptions`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerLoadOptions) | ## Returns `Promise`\<[`SkillCornerPhase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerPhase)\[]> --- # fetchTracking() Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/functions/fetchTracking ```ts function fetchTracking(match, options?): Promise; ``` Defined in: [packages/data-providers/src/skillcorner/load.ts:349](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/load.ts#L349) The whole tracking file at once (\~90 MB). Here for completeness — server-side batch work, mostly. In a browser prefer `streamTracking` or `fetchTrackingWindow`. ## Parameters | Parameter | Type | | --------- | -------------------------------------------------------------------------------------------------- | | `match` | [`SkillCornerMatch`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerMatch) | | `options` | [`SkillCornerLoadOptions`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerLoadOptions) | ## Returns `Promise`\<[`SkillCornerFrame`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerFrame)\[]> --- # fetchTrackingWindow() Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/functions/fetchTrackingWindow ```ts function fetchTrackingWindow(match, options): Promise; ``` Defined in: [packages/data-providers/src/skillcorner/load.ts:289](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/load.ts#L289) Read a window of frames without downloading the whole file, using an HTTP `Range` request. JSONL has no index, so a frame number can't be turned into an exact byte offset. Frames are near-uniform in size, so this **estimates** the offset, fetches a padded range around it, discards the partial lines at either end, and then filters to the frames actually asked for. If the estimate lands short the result is simply fewer frames than requested — never wrong ones, since every frame carries its own number. Falls back to a full read when the server ignores the `Range` header (a 200 instead of a 206), so it stays correct against hosts without range support. ## Parameters | Parameter | Type | | --------- | ------------------------------------------------------------------------------------------------ | | `match` | [`SkillCornerMatch`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerMatch) | | `options` | [`TrackingWindowOptions`](/docs/api/data-providers/skillcorner/interfaces/TrackingWindowOptions) | ## Returns `Promise`\<[`SkillCornerFrame`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerFrame)\[]> --- # framesInPhase() Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/functions/framesInPhase ```ts function framesInPhase(frames, phase): SkillCornerFrame[]; ``` Defined in: [packages/data-providers/src/skillcorner/select.ts:99](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/select.ts#L99) The frames belonging to one phase of play, by frame number. ## Parameters | Parameter | Type | | --------- | -------------------------------------------------------------------------------------------------- | | `frames` | readonly [`SkillCornerFrame`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerFrame)\[] | | `phase` | [`SkillCornerPhase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerPhase) | ## Returns [`SkillCornerFrame`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerFrame)\[] --- # hasLocation() Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/functions/hasLocation ```ts function hasLocation(event): boolean; ``` Defined in: [packages/data-providers/src/skillcorner/predicates.ts:38](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/predicates.ts#L38) Has a start position that can actually be plotted. ## Parameters | Parameter | Type | | --------- | ---------------------------------------------------------------------------------------- | | `event` | [`SkillCornerEvent`](/docs/api/data-providers/skillcorner/type-aliases/SkillCornerEvent) | ## Returns `boolean` --- # hasPath() Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/functions/hasPath ```ts function hasPath(event): boolean; ``` Defined in: [packages/data-providers/src/skillcorner/predicates.ts:43](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/predicates.ts#L43) Has both a start and an end position — needed for arrows and comets. ## Parameters | Parameter | Type | | --------- | ---------------------------------------------------------------------------------------- | | `event` | [`SkillCornerEvent`](/docs/api/data-providers/skillcorner/type-aliases/SkillCornerEvent) | ## Returns `boolean` --- # inAttackingThird() Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/functions/inAttackingThird ```ts function inAttackingThird(event): boolean; ``` Defined in: [packages/data-providers/src/skillcorner/predicates.ts:33](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/predicates.ts#L33) ## Parameters | Parameter | Type | | --------- | ---------------------------------------------------------------------------------------- | | `event` | [`SkillCornerEvent`](/docs/api/data-providers/skillcorner/type-aliases/SkillCornerEvent) | ## Returns `boolean` --- # inPenaltyArea() Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/functions/inPenaltyArea ```ts function inPenaltyArea(event): boolean; ``` Defined in: [packages/data-providers/src/skillcorner/predicates.ts:29](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/predicates.ts#L29) Started inside the penalty area the team is attacking. ## Parameters | Parameter | Type | | --------- | ---------------------------------------------------------------------------------------- | | `event` | [`SkillCornerEvent`](/docs/api/data-providers/skillcorner/type-aliases/SkillCornerEvent) | ## Returns `boolean` --- # inPlayFrames() Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/functions/inPlayFrames ```ts function inPlayFrames(frames): SkillCornerFrame[]; ``` Defined in: [packages/data-providers/src/skillcorner/select.ts:94](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/select.ts#L94) Frames with the ball in play — period set and at least one tracked player. ## Parameters | Parameter | Type | | --------- | -------------------------------------------------------------------------------------------------- | | `frames` | readonly [`SkillCornerFrame`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerFrame)\[] | ## Returns [`SkillCornerFrame`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerFrame)\[] --- # indexPlayersById() Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/functions/indexPlayersById ```ts function indexPlayersById(match): Map; ``` Defined in: [packages/data-providers/src/skillcorner/select.ts:75](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/select.ts#L75) Players by id, for putting names and teams onto tracked positions. Tracking frames carry only `player_id` — no name, number or team — so anything that colours by team needs this lookup. Note the join is on `players[].id`, **not** `trackable_object`, which is a different id space and matches nothing in the tracking file. ## Parameters | Parameter | Type | | --------- | -------------------------------------------------------------------------------------- | | `match` | [`SkillCornerMatch`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerMatch) | ## Returns `Map`\<`number`, [`SkillCornerMatchPlayer`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerMatchPlayer)> --- # isCarry() Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/functions/isCarry ```ts function isCarry(possession): boolean; ``` Defined in: [packages/data-providers/src/skillcorner/predicates.ts:95](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/predicates.ts#L95) ## Parameters | Parameter | Type | | ------------ | ------------------------------------------------------------------------------------------------------------ | | `possession` | [`SkillCornerPlayerPossession`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerPlayerPossession) | ## Returns `boolean` --- # isCompletePass() Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/functions/isCompletePass ```ts function isCompletePass(possession): boolean; ``` Defined in: [packages/data-providers/src/skillcorner/predicates.ts:91](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/predicates.ts#L91) A completed pass out of this possession. Unlike StatsBomb — where success is the *absence* of `pass.outcome` — SkillCorner writes the outcome explicitly, so this really is an equality check and not a trap. ## Parameters | Parameter | Type | | ------------ | ------------------------------------------------------------------------------------------------------------ | | `possession` | [`SkillCornerPlayerPossession`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerPlayerPossession) | ## Returns `boolean` --- # isDangerous() Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/functions/isDangerous ```ts function isDangerous(option): boolean; ``` Defined in: [packages/data-providers/src/skillcorner/predicates.ts:78](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/predicates.ts#L78) ## Parameters | Parameter | Type | | --------- | ------------------------------------------------------------------------------------------------------ | | `option` | [`SkillCornerPassingOption`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerPassingOption) | ## Returns `boolean` --- # isDetected() Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/functions/isDetected ```ts function isDetected(player): boolean; ``` Defined in: [packages/data-providers/src/skillcorner/predicates.ts:106](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/predicates.ts#L106) The position was seen by the camera, not extrapolated between sightings. ## Parameters | Parameter | Type | | --------- | ------------------------------------------------------------------------------------------------------ | | `player` | [`SkillCornerTrackedPlayer`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerTrackedPlayer) | ## Returns `boolean` --- # isOffBallRun() Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/functions/isOffBallRun ```ts function isOffBallRun(event): event is SkillCornerOffBallRun; ``` Defined in: [packages/data-providers/src/skillcorner/select.ts:30](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/select.ts#L30) ## Parameters | Parameter | Type | | --------- | ---------------------------------------------------------------------------------------- | | `event` | [`SkillCornerEvent`](/docs/api/data-providers/skillcorner/type-aliases/SkillCornerEvent) | ## Returns `event is SkillCornerOffBallRun` --- # isOnBallEngagement() Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/functions/isOnBallEngagement ```ts function isOnBallEngagement(event): event is SkillCornerOnBallEngagement; ``` Defined in: [packages/data-providers/src/skillcorner/select.ts:34](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/select.ts#L34) ## Parameters | Parameter | Type | | --------- | ---------------------------------------------------------------------------------------- | | `event` | [`SkillCornerEvent`](/docs/api/data-providers/skillcorner/type-aliases/SkillCornerEvent) | ## Returns `event is SkillCornerOnBallEngagement` --- # isOneTouch() Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/functions/isOneTouch ```ts function isOneTouch(possession): boolean; ``` Defined in: [packages/data-providers/src/skillcorner/predicates.ts:99](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/predicates.ts#L99) ## Parameters | Parameter | Type | | ------------ | ------------------------------------------------------------------------------------------------------------ | | `possession` | [`SkillCornerPlayerPossession`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerPlayerPossession) | ## Returns `boolean` --- # isPassingOption() Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/functions/isPassingOption ```ts function isPassingOption(event): event is SkillCornerPassingOption; ``` Defined in: [packages/data-providers/src/skillcorner/select.ts:26](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/select.ts#L26) ## Parameters | Parameter | Type | | --------- | ---------------------------------------------------------------------------------------- | | `event` | [`SkillCornerEvent`](/docs/api/data-providers/skillcorner/type-aliases/SkillCornerEvent) | ## Returns `event is SkillCornerPassingOption` --- # isPhaseType() Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/functions/isPhaseType ```ts function isPhaseType(type): (phase) => boolean; ``` Defined in: [packages/data-providers/src/skillcorner/predicates.ts:112](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/predicates.ts#L112) ## Parameters | Parameter | Type | | --------- | -------- | | `type` | `string` | ## Returns (`phase`) => `boolean` --- # isPlayerPossession() Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/functions/isPlayerPossession ```ts function isPlayerPossession(event): event is SkillCornerPlayerPossession; ``` Defined in: [packages/data-providers/src/skillcorner/select.ts:22](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/select.ts#L22) Guards and selectors — the only things here that narrow the event union. SkillCorner's discriminant is top level, so `event.event_type === "off_ball_run"` narrows natively too (unlike StatsBomb's nested one). These guards go a step further and confirm the row actually carries the fields the type promises. ## Parameters | Parameter | Type | | --------- | ---------------------------------------------------------------------------------------- | | `event` | [`SkillCornerEvent`](/docs/api/data-providers/skillcorner/type-aliases/SkillCornerEvent) | ## Returns `event is SkillCornerPlayerPossession` --- # isRunBehind() Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/functions/isRunBehind ```ts function isRunBehind(run): boolean; ``` Defined in: [packages/data-providers/src/skillcorner/predicates.ts:55](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/predicates.ts#L55) ## Parameters | Parameter | Type | | --------- | ------------------------------------------------------------------------------------------------ | | `run` | [`SkillCornerOffBallRun`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerOffBallRun) | ## Returns `boolean` --- # isRunSubtype() Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/functions/isRunSubtype ```ts function isRunSubtype(subtype): (run) => boolean; ``` Defined in: [packages/data-providers/src/skillcorner/predicates.ts:64](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/predicates.ts#L64) ## Parameters | Parameter | Type | | --------- | -------- | | `subtype` | `string` | ## Returns (`run`) => `boolean` --- # isSprint() Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/functions/isSprint ```ts function isSprint(run): boolean; ``` Defined in: [packages/data-providers/src/skillcorner/predicates.ts:60](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/predicates.ts#L60) SkillCorner's own speed banding, rather than a threshold invented here. ## Parameters | Parameter | Type | | --------- | ------------------------------------------------------------------------------------------------ | | `run` | [`SkillCornerOffBallRun`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerOffBallRun) | ## Returns `boolean` --- # leadToGoal() Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/functions/leadToGoal ```ts function leadToGoal(event): boolean; ``` Defined in: [packages/data-providers/src/skillcorner/predicates.ts:24](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/predicates.ts#L24) ## Parameters | Parameter | Type | | --------- | ---------------------------------------------------------------------------------------- | | `event` | [`SkillCornerEvent`](/docs/api/data-providers/skillcorner/type-aliases/SkillCornerEvent) | ## Returns `boolean` --- # leadToShot() Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/functions/leadToShot ```ts function leadToShot(event): boolean; ``` Defined in: [packages/data-providers/src/skillcorner/predicates.ts:20](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/predicates.ts#L20) Composable filters over SkillCorner's own fields, meant for `.filter()`. Same principle as the StatsBomb module: interpretation lives in functions, not in invented fields. Nothing here adds a column to the data — each one just reads what SkillCorner already wrote. ## Parameters | Parameter | Type | | --------- | ---------------------------------------------------------------------------------------- | | `event` | [`SkillCornerEvent`](/docs/api/data-providers/skillcorner/type-aliases/SkillCornerEvent) | ## Returns `boolean` --- # loadDynamicEvents() Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/functions/loadDynamicEvents ```ts function loadDynamicEvents( url, match, options? ): Promise; ``` Defined in: [packages/data-providers/src/skillcorner/load.ts:113](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/load.ts#L113) Fetch and parse a dynamic-events CSV from any URL. ## Parameters | Parameter | Type | | ---------- | -------------------------------------------------------------------------------------- | | `url` | `string` | | `match` | [`SkillCornerMatch`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerMatch) | | `options?` | [`LoadOptions`](/docs/api/data-providers/index/interfaces/LoadOptions) | ## Returns `Promise`\<[`SkillCornerEvent`](/docs/api/data-providers/skillcorner/type-aliases/SkillCornerEvent)\[]> --- # loadMatch() Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/functions/loadMatch ```ts function loadMatch(url, options?): Promise; ``` Defined in: [packages/data-providers/src/skillcorner/load.ts:108](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/load.ts#L108) Fetch and parse a match metadata file from any URL. ## Parameters | Parameter | Type | | ---------- | ---------------------------------------------------------------------- | | `url` | `string` | | `options?` | [`LoadOptions`](/docs/api/data-providers/index/interfaces/LoadOptions) | ## Returns `Promise`\<[`SkillCornerMatch`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerMatch)> --- # loadMatches() Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/functions/loadMatches ```ts function loadMatches(url, options?): Promise; ``` Defined in: [packages/data-providers/src/skillcorner/load.ts:100](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/load.ts#L100) Fetch and parse a matches index from any URL. ## Parameters | Parameter | Type | | ---------- | ---------------------------------------------------------------------- | | `url` | `string` | | `options?` | [`LoadOptions`](/docs/api/data-providers/index/interfaces/LoadOptions) | ## Returns `Promise`\<[`SkillCornerMatchSummary`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerMatchSummary)\[]> --- # loadPhasesOfPlay() Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/functions/loadPhasesOfPlay ```ts function loadPhasesOfPlay( url, match, options? ): Promise; ``` Defined in: [packages/data-providers/src/skillcorner/load.ts:122](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/load.ts#L122) Fetch and parse a phases-of-play CSV from any URL. ## Parameters | Parameter | Type | | ---------- | -------------------------------------------------------------------------------------- | | `url` | `string` | | `match` | [`SkillCornerMatch`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerMatch) | | `options?` | [`LoadOptions`](/docs/api/data-providers/index/interfaces/LoadOptions) | ## Returns `Promise`\<[`SkillCornerPhase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerPhase)\[]> --- # loadTracking() Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/functions/loadTracking ```ts function loadTracking( url, match, options? ): Promise; ``` Defined in: [packages/data-providers/src/skillcorner/load.ts:136](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/load.ts#L136) Fetch and parse a whole tracking file from any URL (\~90 MB upstream). Prefer `streamTrackingFrom` or `loadTrackingWindow` unless you really want every frame in memory at once. ## Parameters | Parameter | Type | | ---------- | -------------------------------------------------------------------------------------- | | `url` | `string` | | `match` | [`SkillCornerMatch`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerMatch) | | `options?` | [`LoadOptions`](/docs/api/data-providers/index/interfaces/LoadOptions) | ## Returns `Promise`\<[`SkillCornerFrame`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerFrame)\[]> --- # loadTrackingWindow() Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/functions/loadTrackingWindow ```ts function loadTrackingWindow( url, match, options ): Promise; ``` Defined in: [packages/data-providers/src/skillcorner/load.ts:297](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/load.ts#L297) Read a window of frames from any URL — the primitive behind `fetchTrackingWindow`. ## Parameters | Parameter | Type | | --------- | ------------------------------------------------------------------------------------------------ | | `url` | `string` | | `match` | [`SkillCornerMatch`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerMatch) | | `options` | [`TrackingWindowOptions`](/docs/api/data-providers/skillcorner/interfaces/TrackingWindowOptions) | ## Returns `Promise`\<[`SkillCornerFrame`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerFrame)\[]> --- # matchUrl() Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/functions/matchUrl ```ts function matchUrl(matchId, options?): string; ``` Defined in: [packages/data-providers/src/skillcorner/load.ts:68](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/load.ts#L68) ## Parameters | Parameter | Type | | --------- | -------------------------------------------------------------------------------------------------- | | `matchId` | `number` | | `options` | [`SkillCornerLoadOptions`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerLoadOptions) | ## Returns `string` --- # matchesUrl() Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/functions/matchesUrl ```ts function matchesUrl(options?): string; ``` Defined in: [packages/data-providers/src/skillcorner/load.ts:64](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/load.ts#L64) ## Parameters | Parameter | Type | | --------- | -------------------------------------------------------------------------------------------------- | | `options` | [`SkillCornerLoadOptions`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerLoadOptions) | ## Returns `string` --- # ofEventType() Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/functions/ofEventType ```ts function ofEventType(events, type): SkillCornerEvent[]; ``` Defined in: [packages/data-providers/src/skillcorner/select.ts:59](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/select.ts#L59) Everything of one type, including types this package doesn't model. ## Parameters | Parameter | Type | | --------- | ---------------------------------------------------------------------------------------------------- | | `events` | readonly [`SkillCornerEvent`](/docs/api/data-providers/skillcorner/type-aliases/SkillCornerEvent)\[] | | `type` | `string` | ## Returns [`SkillCornerEvent`](/docs/api/data-providers/skillcorner/type-aliases/SkillCornerEvent)\[] --- # offBallRuns() Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/functions/offBallRuns ```ts function offBallRuns(events): SkillCornerOffBallRun[]; ``` Defined in: [packages/data-providers/src/skillcorner/select.ts:48](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/select.ts#L48) ## Parameters | Parameter | Type | | --------- | ---------------------------------------------------------------------------------------------------- | | `events` | readonly [`SkillCornerEvent`](/docs/api/data-providers/skillcorner/type-aliases/SkillCornerEvent)\[] | ## Returns [`SkillCornerOffBallRun`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerOffBallRun)\[] --- # onBallEngagements() Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/functions/onBallEngagements ```ts function onBallEngagements(events): SkillCornerOnBallEngagement[]; ``` Defined in: [packages/data-providers/src/skillcorner/select.ts:52](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/select.ts#L52) ## Parameters | Parameter | Type | | --------- | ---------------------------------------------------------------------------------------------------- | | `events` | readonly [`SkillCornerEvent`](/docs/api/data-providers/skillcorner/type-aliases/SkillCornerEvent)\[] | ## Returns [`SkillCornerOnBallEngagement`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerOnBallEngagement)\[] --- # parseDynamicEvents() Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/functions/parseDynamicEvents ```ts function parseDynamicEvents(text, match): SkillCornerEvent[]; ``` Defined in: [packages/data-providers/src/skillcorner/parse.ts:209](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/parse.ts#L209) Parse a match's dynamic-events CSV. ## Parameters | Parameter | Type | | --------- | -------------------------------------------------------------------------------------- | | `text` | `string` | | `match` | [`SkillCornerMatch`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerMatch) | ## Returns [`SkillCornerEvent`](/docs/api/data-providers/skillcorner/type-aliases/SkillCornerEvent)\[] --- # parseMatch() Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/functions/parseMatch ```ts function parseMatch(json): SkillCornerMatch; ``` Defined in: [packages/data-providers/src/skillcorner/parse.ts:113](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/parse.ts#L113) Parse a match metadata file. ## Parameters | Parameter | Type | | --------- | --------- | | `json` | `unknown` | ## Returns [`SkillCornerMatch`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerMatch) --- # parseMatches() Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/functions/parseMatches ```ts function parseMatches(json): SkillCornerMatchSummary[]; ``` Defined in: [packages/data-providers/src/skillcorner/parse.ts:94](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/parse.ts#L94) Parse the top-level `matches.json` index. ## Parameters | Parameter | Type | | --------- | --------- | | `json` | `unknown` | ## Returns [`SkillCornerMatchSummary`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerMatchSummary)\[] --- # parsePhasesOfPlay() Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/functions/parsePhasesOfPlay ```ts function parsePhasesOfPlay(text, match): SkillCornerPhase[]; ``` Defined in: [packages/data-providers/src/skillcorner/parse.ts:290](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/parse.ts#L290) Parse a match's phases-of-play CSV. ## Parameters | Parameter | Type | | --------- | -------------------------------------------------------------------------------------- | | `text` | `string` | | `match` | [`SkillCornerMatch`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerMatch) | ## Returns [`SkillCornerPhase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerPhase)\[] --- # parseTracking() Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/functions/parseTracking ```ts function parseTracking(text, match): SkillCornerFrame[]; ``` Defined in: [packages/data-providers/src/skillcorner/parse.ts:180](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/parse.ts#L180) Parse a whole tracking file (JSONL — one frame per line). A full match is roughly **90 MB and 60,000 frames**, so prefer `streamTracking` or `fetchTrackingWindow` unless you genuinely want all of it in memory at once. ## Parameters | Parameter | Type | | --------- | -------------------------------------------------------------------------------------- | | `text` | `string` | | `match` | [`SkillCornerMatch`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerMatch) | ## Returns [`SkillCornerFrame`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerFrame)\[] --- # parseTrackingFrame() Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/functions/parseTrackingFrame ```ts function parseTrackingFrame(json, project): SkillCornerFrame; ``` Defined in: [packages/data-providers/src/skillcorner/parse.ts:141](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/parse.ts#L141) Parse one line of a tracking file. Exported because the streaming loaders parse line by line, and because a caller reading the file their own way shouldn't have to reimplement this. ## Parameters | Parameter | Type | | --------- | ------------------------------------------------------------------------------------ | | `json` | `unknown` | | `project` | [`PitchProjection`](/docs/api/data-providers/skillcorner/interfaces/PitchProjection) | ## Returns [`SkillCornerFrame`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerFrame) --- # passingOptions() Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/functions/passingOptions ```ts function passingOptions(events): SkillCornerPassingOption[]; ``` Defined in: [packages/data-providers/src/skillcorner/select.ts:44](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/select.ts#L44) ## Parameters | Parameter | Type | | --------- | ---------------------------------------------------------------------------------------------------- | | `events` | readonly [`SkillCornerEvent`](/docs/api/data-providers/skillcorner/type-aliases/SkillCornerEvent)\[] | ## Returns [`SkillCornerPassingOption`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerPassingOption)\[] --- # phaseLedToGoal() Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/functions/phaseLedToGoal ```ts function phaseLedToGoal(phase): boolean; ``` Defined in: [packages/data-providers/src/skillcorner/predicates.ts:120](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/predicates.ts#L120) ## Parameters | Parameter | Type | | --------- | -------------------------------------------------------------------------------------- | | `phase` | [`SkillCornerPhase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerPhase) | ## Returns `boolean` --- # phaseLedToShot() Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/functions/phaseLedToShot ```ts function phaseLedToShot(phase): boolean; ``` Defined in: [packages/data-providers/src/skillcorner/predicates.ts:116](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/predicates.ts#L116) ## Parameters | Parameter | Type | | --------- | -------------------------------------------------------------------------------------- | | `phase` | [`SkillCornerPhase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerPhase) | ## Returns `boolean` --- # phasesOfPlayUrl() Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/functions/phasesOfPlayUrl ```ts function phasesOfPlayUrl(matchId, options?): string; ``` Defined in: [packages/data-providers/src/skillcorner/load.ts:76](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/load.ts#L76) ## Parameters | Parameter | Type | | --------- | -------------------------------------------------------------------------------------------------- | | `matchId` | `number` | | `options` | [`SkillCornerLoadOptions`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerLoadOptions) | ## Returns `string` --- # pitchProjection() Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/functions/pitchProjection ```ts function pitchProjection(match): PitchProjection; ``` Defined in: [packages/data-providers/src/skillcorner/coordinates.ts:32](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/coordinates.ts#L32) Builds the translation for one match. ## Parameters | Parameter | Type | | --------- | ------------------------------------------------------------------------------------------------------------------------------------ | | `match` | `Pick`\<[`SkillCornerMatch`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerMatch), `"pitch_length"` \| `"pitch_width"`> | ## Returns [`PitchProjection`](/docs/api/data-providers/skillcorner/interfaces/PitchProjection) --- # playerPossessions() Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/functions/playerPossessions ```ts function playerPossessions(events): SkillCornerPlayerPossession[]; ``` Defined in: [packages/data-providers/src/skillcorner/select.ts:38](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/select.ts#L38) ## Parameters | Parameter | Type | | --------- | ---------------------------------------------------------------------------------------------------- | | `events` | readonly [`SkillCornerEvent`](/docs/api/data-providers/skillcorner/type-aliases/SkillCornerEvent)\[] | ## Returns [`SkillCornerPlayerPossession`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerPlayerPossession)\[] --- # playersOfTeam() Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/functions/playersOfTeam ```ts function playersOfTeam( frame, teamId, players ): SkillCornerTrackedPlayer[]; ``` Defined in: [packages/data-providers/src/skillcorner/select.ts:80](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/select.ts#L80) The tracked players belonging to one team in a frame. ## Parameters | Parameter | Type | | --------- | -------------------------------------------------------------------------------------------------------------------- | | `frame` | [`SkillCornerFrame`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerFrame) | | `teamId` | `number` | | `players` | `Map`\<`number`, [`SkillCornerMatchPlayer`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerMatchPlayer)> | ## Returns [`SkillCornerTrackedPlayer`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerTrackedPlayer)\[] --- # projectOrNull() Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/functions/projectOrNull ```ts function projectOrNull( project, x, y ): readonly [number | null, number | null]; ``` Defined in: [packages/data-providers/src/skillcorner/coordinates.ts:62](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/coordinates.ts#L62) Applies a projection to a possibly-missing coordinate pair. Returns nulls unless both halves are real numbers — half a coordinate is not a position. ## Parameters | Parameter | Type | | --------- | ------------------------------------------------------------------------------------ | | `project` | [`PitchProjection`](/docs/api/data-providers/skillcorner/interfaces/PitchProjection) | | `x` | `number` \| `null` \| `undefined` | | `y` | `number` \| `null` \| `undefined` | ## Returns readonly \[`number` | `null`, `number` | `null`] --- # streamTracking() Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/functions/streamTracking ```ts function streamTracking(match, options?): AsyncGenerator; ``` Defined in: [packages/data-providers/src/skillcorner/load.ts:209](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/load.ts#L209) Stream a match's tracking frames, yielding each as it arrives. A full file is around **90 MB and 60,000 frames** at 10 fps, so this is the default way to read one: the async iterator lets a caller stop early, and `break`ing out aborts the underlying response rather than downloading the rest. ```ts const match = await fetchMatch(1874553); const opening: SkillCornerFrame[] = []; for await (const frame of streamTracking(match)) { if (frame.period !== null) opening.push(frame); if (opening.length >= 300) break; // 30 seconds; download stops here } ``` ## Parameters | Parameter | Type | | --------- | -------------------------------------------------------------------------------------------------- | | `match` | [`SkillCornerMatch`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerMatch) | | `options` | [`SkillCornerLoadOptions`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerLoadOptions) | ## Returns `AsyncGenerator`\<[`SkillCornerFrame`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerFrame), `void`, `undefined`> --- # streamTrackingFrom() Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/functions/streamTrackingFrom ```ts function streamTrackingFrom( url, match, options? ): AsyncGenerator; ``` Defined in: [packages/data-providers/src/skillcorner/load.ts:223](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/load.ts#L223) Stream tracking frames from any URL — the primitive `streamTracking` is sugar over. Same contract: `break`ing out of the loop cancels the reader, which aborts the download rather than letting the rest arrive unread. ## Parameters | Parameter | Type | | --------- | -------------------------------------------------------------------------------------- | | `url` | `string` | | `match` | [`SkillCornerMatch`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerMatch) | | `options` | [`LoadOptions`](/docs/api/data-providers/index/interfaces/LoadOptions) | ## Returns `AsyncGenerator`\<[`SkillCornerFrame`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerFrame), `void`, `undefined`> --- # trackingUrl() Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/functions/trackingUrl ```ts function trackingUrl(matchId, options?): string; ``` Defined in: [packages/data-providers/src/skillcorner/load.ts:80](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/load.ts#L80) ## Parameters | Parameter | Type | | --------- | -------------------------------------------------------------------------------------------------- | | `matchId` | `number` | | `options` | [`SkillCornerLoadOptions`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerLoadOptions) | ## Returns `string` --- # wasReceived() Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/functions/wasReceived ```ts function wasReceived(option): boolean; ``` Defined in: [packages/data-providers/src/skillcorner/predicates.ts:74](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/predicates.ts#L74) ## Parameters | Parameter | Type | | --------- | ------------------------------------------------------------------------------------------------------ | | `option` | [`SkillCornerPassingOption`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerPassingOption) | ## Returns `boolean` --- # wasTargeted() Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/functions/wasTargeted ```ts function wasTargeted(option): boolean; ``` Defined in: [packages/data-providers/src/skillcorner/predicates.ts:70](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/predicates.ts#L70) ## Parameters | Parameter | Type | | --------- | ------------------------------------------------------------------------------------------------------ | | `option` | [`SkillCornerPassingOption`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerPassingOption) | ## Returns `boolean` --- # PitchProjection() Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/interfaces/PitchProjection Defined in: [packages/data-providers/src/skillcorner/coordinates.ts:24](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/coordinates.ts#L24) SkillCorner puts the origin on the centre spot: x runs from `-length/2` to `+length/2`, y from `-width/2` to `+width/2`, both in metres. Chart libraries — PitchKit included — want a corner origin, so the parsers add `pitchX`/`pitchY` alongside the untouched `x`/`y`. The conversion is a **pure translation**, verified against the data rather than assumed: * `y > 0` is the attacking team's **left**, confirmed against the CSV's own `channel_start` labels (every `wide_left`/`half_space_left` row has `y > 0` and every `*_right` row `y < 0`, across a full match, with no crossover). * Drawn with the attack running left-to-right in a y-up frame, the attacker's left is the **top** of the pitch — high y. So y needs no flip, only the half-width offset. It deliberately uses **the match's own `pitch_length`/`pitch_width`**, which really do differ per stadium in the open dataset (104, 105 and 106 metres all appear). The output is therefore in that match's real metres. Squeezing it onto some fixed pitch is a rendering decision, and is left to the caller. ```ts PitchProjection(x, y): readonly [number, number]; ``` Defined in: [packages/data-providers/src/skillcorner/coordinates.ts:28](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/coordinates.ts#L28) Centre-origin metres in, corner-origin metres out. ## Parameters | Parameter | Type | | --------- | -------- | | `x` | `number` | | `y` | `number` | ## Returns readonly \[`number`, `number`] ## Properties | Property | Modifier | Type | Defined in | | ----------------------------------- | ---------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `length` | `readonly` | `number` | [packages/data-providers/src/skillcorner/coordinates.ts:25](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/coordinates.ts#L25) | | `width` | `readonly` | `number` | [packages/data-providers/src/skillcorner/coordinates.ts:26](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/coordinates.ts#L26) | --- # SkillCornerBall Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/interfaces/SkillCornerBall Defined in: [packages/data-providers/src/skillcorner/types.ts:100](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L100) ## Properties | Property | Modifier | Type | Defined in | | --------------------------------------------- | ---------- | ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `is_detected` | `readonly` | `boolean` \| `null` | [packages/data-providers/src/skillcorner/types.ts:104](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L104) | | `x` | `readonly` | `number` \| `null` | [packages/data-providers/src/skillcorner/types.ts:101](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L101) | | `y` | `readonly` | `number` \| `null` | [packages/data-providers/src/skillcorner/types.ts:102](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L102) | | `z` | `readonly` | `number` \| `null` | [packages/data-providers/src/skillcorner/types.ts:103](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L103) | --- # SkillCornerEventBase Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase Defined in: [packages/data-providers/src/skillcorner/types.ts:170](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L170) The fields shared by every dynamic-event row. The source CSV carries **322 columns**. The ones below are typed because they are the ones you plot or filter on; every other column stays reachable through the index signature under its original name, as the string the CSV held. Typing all 322 would be a worse lie than leaving them honest. ## Extended by * [`SkillCornerOffBallRun`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerOffBallRun) * [`SkillCornerOnBallEngagement`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerOnBallEngagement) * [`SkillCornerOtherEvent`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerOtherEvent) * [`SkillCornerPassingOption`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerPassingOption) * [`SkillCornerPlayerPossession`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerPlayerPossession) ## Indexable ```ts [key: string]: unknown ``` Every other column, as the CSV spelled it. ## Properties | Property | Modifier | Type | Description | Defined in | | ----------------------------------------------------------- | ---------- | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `attacking_side` | `readonly` | [`SkillCornerSide`](/docs/api/data-providers/skillcorner/type-aliases/SkillCornerSide) \| `null` | - | [packages/data-providers/src/skillcorner/types.ts:188](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L188) | | `channel_end` | `readonly` | `string` \| `null` | - | [packages/data-providers/src/skillcorner/types.ts:204](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L204) | | `channel_start` | `readonly` | `string` \| `null` | - | [packages/data-providers/src/skillcorner/types.ts:202](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L202) | | `duration` | `readonly` | `number` \| `null` | - | [packages/data-providers/src/skillcorner/types.ts:183](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L183) | | `event_id` | `readonly` | `string` | - | [packages/data-providers/src/skillcorner/types.ts:171](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L171) | | `event_subtype` | `readonly` | `string` \| `null` | - | [packages/data-providers/src/skillcorner/types.ts:175](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L175) | | `event_type` | `readonly` | [`SkillCornerEventType`](/docs/api/data-providers/skillcorner/type-aliases/SkillCornerEventType) | - | [packages/data-providers/src/skillcorner/types.ts:174](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L174) | | `frame_end` | `readonly` | `number` \| `null` | - | [packages/data-providers/src/skillcorner/types.ts:178](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L178) | | `frame_start` | `readonly` | `number` | - | [packages/data-providers/src/skillcorner/types.ts:177](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L177) | | `index` | `readonly` | `number` | - | [packages/data-providers/src/skillcorner/types.ts:172](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L172) | | `lead_to_goal` | `readonly` | `boolean` \| `null` | - | [packages/data-providers/src/skillcorner/types.ts:217](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L217) | | `lead_to_shot` | `readonly` | `boolean` \| `null` | - | [packages/data-providers/src/skillcorner/types.ts:216](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L216) | | `match_id` | `readonly` | `number` | - | [packages/data-providers/src/skillcorner/types.ts:173](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L173) | | `minute_start` | `readonly` | `number` \| `null` | - | [packages/data-providers/src/skillcorner/types.ts:181](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L181) | | `penalty_area_end` | `readonly` | `boolean` \| `null` | - | [packages/data-providers/src/skillcorner/types.ts:207](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L207) | | `penalty_area_start` | `readonly` | `boolean` \| `null` | - | [packages/data-providers/src/skillcorner/types.ts:206](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L206) | | `period` | `readonly` | `number` \| `null` | - | [packages/data-providers/src/skillcorner/types.ts:184](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L184) | | `phase_index` | `readonly` | `number` \| `null` | - | [packages/data-providers/src/skillcorner/types.ts:215](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L215) | | `pitchEndX` | `readonly` | `number` \| `null` | - | [packages/data-providers/src/skillcorner/types.ts:212](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L212) | | `pitchEndY` | `readonly` | `number` \| `null` | - | [packages/data-providers/src/skillcorner/types.ts:213](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L213) | | `pitchX` | `readonly` | `number` \| `null` | Corner-origin metres, added by the parser, for direct plotting. | [packages/data-providers/src/skillcorner/types.ts:210](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L210) | | `pitchY` | `readonly` | `number` \| `null` | - | [packages/data-providers/src/skillcorner/types.ts:211](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L211) | | `player_id` | `readonly` | `number` \| `null` | - | [packages/data-providers/src/skillcorner/types.ts:189](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L189) | | `player_name` | `readonly` | `string` \| `null` | - | [packages/data-providers/src/skillcorner/types.ts:190](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L190) | | `player_position` | `readonly` | `string` \| `null` | - | [packages/data-providers/src/skillcorner/types.ts:191](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L191) | | `second_start` | `readonly` | `number` \| `null` | - | [packages/data-providers/src/skillcorner/types.ts:182](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L182) | | `team_id` | `readonly` | `number` \| `null` | - | [packages/data-providers/src/skillcorner/types.ts:186](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L186) | | `team_shortname` | `readonly` | `string` \| `null` | - | [packages/data-providers/src/skillcorner/types.ts:187](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L187) | | `third_end` | `readonly` | `string` \| `null` | - | [packages/data-providers/src/skillcorner/types.ts:205](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L205) | | `third_start` | `readonly` | `string` \| `null` | - | [packages/data-providers/src/skillcorner/types.ts:203](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L203) | | `time_end` | `readonly` | `string` \| `null` | - | [packages/data-providers/src/skillcorner/types.ts:180](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L180) | | `time_start` | `readonly` | `string` \| `null` | - | [packages/data-providers/src/skillcorner/types.ts:179](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L179) | | `x_end` | `readonly` | `number` \| `null` | - | [packages/data-providers/src/skillcorner/types.ts:200](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L200) | | `x_start` | `readonly` | `number` \| `null` | Metres from the centre spot, but **normalised to the attacking direction**: positive x always points at the goal this team is attacking, in both halves. Unlike tracking coordinates these never flip at half time. | [packages/data-providers/src/skillcorner/types.ts:198](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L198) | | `xthreat` | `readonly` | `number` \| `null` | - | [packages/data-providers/src/skillcorner/types.ts:218](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L218) | | `y_end` | `readonly` | `number` \| `null` | - | [packages/data-providers/src/skillcorner/types.ts:201](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L201) | | `y_start` | `readonly` | `number` \| `null` | - | [packages/data-providers/src/skillcorner/types.ts:199](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L199) | --- # SkillCornerFrame Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/interfaces/SkillCornerFrame Defined in: [packages/data-providers/src/skillcorner/types.ts:138](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L138) One 10 fps tracking frame. Frames before kickoff and during stoppages carry nulls throughout with an empty `player_data` — that is the file's own shape, not a parse failure. **Tracking positions are absolute**: a team's coordinates flip sign at half time, per `SkillCornerMatch.home_team_side`. This is the opposite of the dynamic-events file, whose x is normalised so positive always points at the goal being attacked. Confusing the two silently mirrors half a match, so the distinction is modelled rather than smoothed over. ## Indexable ```ts [key: string]: unknown ``` ## Properties | Property | Modifier | Type | Description | Defined in | | --------------------------------------------- | ---------- | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `ball_data` | `readonly` | [`SkillCornerBall`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerBall) | - | [packages/data-providers/src/skillcorner/types.ts:142](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L142) | | `ballPitchX` | `readonly` | `number` \| `null` | Ball position in corner-origin metres; null when the ball wasn't located. | [packages/data-providers/src/skillcorner/types.ts:149](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L149) | | `ballPitchY` | `readonly` | `number` \| `null` | - | [packages/data-providers/src/skillcorner/types.ts:150](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L150) | | `frame` | `readonly` | `number` | - | [packages/data-providers/src/skillcorner/types.ts:139](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L139) | | `period` | `readonly` | `number` \| `null` | - | [packages/data-providers/src/skillcorner/types.ts:141](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L141) | | `player_data` | `readonly` | readonly [`SkillCornerTrackedPlayer`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerTrackedPlayer)\[] | - | [packages/data-providers/src/skillcorner/types.ts:147](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L147) | | `possession` | `readonly` | `object` | - | [packages/data-providers/src/skillcorner/types.ts:143](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L143) | | `possession.group` | `readonly` | `string` \| `null` | - | [packages/data-providers/src/skillcorner/types.ts:145](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L145) | | `possession.player_id` | `readonly` | `number` \| `null` | - | [packages/data-providers/src/skillcorner/types.ts:144](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L144) | | `timestamp` | `readonly` | `string` \| `null` | - | [packages/data-providers/src/skillcorner/types.ts:140](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L140) | --- # SkillCornerLoadOptions Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/interfaces/SkillCornerLoadOptions Defined in: [packages/data-providers/src/skillcorner/load.ts:49](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/load.ts#L49) ## Extends * [`LoadOptions`](/docs/api/data-providers/index/interfaces/LoadOptions) ## Extended by * [`TrackingWindowOptions`](/docs/api/data-providers/skillcorner/interfaces/TrackingWindowOptions) ## Properties | Property | Modifier | Type | Description | Inherited from | Defined in | | -------------------------------------------- | ---------- | -------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | | `baseUrl?` | `readonly` | `string` | Override for a mirror or a local copy of the repository's `data` dir. | - | [packages/data-providers/src/skillcorner/load.ts:51](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/load.ts#L51) | | `fetch?` | `readonly` | \{ (`input`, `init?`): `Promise`\<`Response`>; (`input`, `init?`): `Promise`\<`Response`>; } | Fetch implementation to use instead of the global one. Injecting is how this package's own tests avoid touching the network, and it's the hook for a Next.js caching wrapper or a Node agent with a proxy configured. | [`LoadOptions`](/docs/api/data-providers/index/interfaces/LoadOptions).[`fetch`](/docs/api/data-providers/index/interfaces/LoadOptions#property-fetch) | [packages/data-providers/src/fetch-json.ts:10](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/fetch-json.ts#L10) | | `lfsBaseUrl?` | `readonly` | `string` | Override for the LFS host serving tracking files. | - | [packages/data-providers/src/skillcorner/load.ts:53](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/load.ts#L53) | | `signal?` | `readonly` | `AbortSignal` | Forwarded to the underlying request, so callers can cancel a slow load. | [`LoadOptions`](/docs/api/data-providers/index/interfaces/LoadOptions).[`signal`](/docs/api/data-providers/index/interfaces/LoadOptions#property-signal) | [packages/data-providers/src/fetch-json.ts:12](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/fetch-json.ts#L12) | --- # SkillCornerMatch Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/interfaces/SkillCornerMatch Defined in: [packages/data-providers/src/skillcorner/types.ts:80](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L80) A match's metadata file. `pitch_length`/`pitch_width` are the **real dimensions of that stadium's pitch**, and they genuinely vary across the open dataset — 104, 105 and 106 metres all appear. Coordinates are in those metres, so anything converting them has to read the values off the match rather than assume 105x68. ## Indexable ```ts [key: string]: unknown ``` ## Properties | Property | Modifier | Type | Description | Defined in | | ----------------------------------------------------- | ---------- | -------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | | `away_team` | `readonly` | [`SkillCornerTeamRef`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerTeamRef) | - | [packages/data-providers/src/skillcorner/types.ts:83](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L83) | | `away_team_score` | `readonly` | `number` | - | [packages/data-providers/src/skillcorner/types.ts:85](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L85) | | `date_time` | `readonly` | `string` | - | [packages/data-providers/src/skillcorner/types.ts:86](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L86) | | `home_team` | `readonly` | [`SkillCornerTeamRef`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerTeamRef) | - | [packages/data-providers/src/skillcorner/types.ts:82](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L82) | | `home_team_score` | `readonly` | `number` | - | [packages/data-providers/src/skillcorner/types.ts:84](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L84) | | `home_team_side` | `readonly` | readonly [`SkillCornerSide`](/docs/api/data-providers/skillcorner/type-aliases/SkillCornerSide)\[] | Which way the **home** team attacks, indexed by period (0 = first half). | [packages/data-providers/src/skillcorner/types.ts:91](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L91) | | `id` | `readonly` | `number` | - | [packages/data-providers/src/skillcorner/types.ts:81](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L81) | | `match_periods` | `readonly` | readonly [`SkillCornerPeriod`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerPeriod)\[] | - | [packages/data-providers/src/skillcorner/types.ts:89](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L89) | | `pitch_length` | `readonly` | `number` | - | [packages/data-providers/src/skillcorner/types.ts:87](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L87) | | `pitch_width` | `readonly` | `number` | - | [packages/data-providers/src/skillcorner/types.ts:88](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L88) | | `players` | `readonly` | readonly [`SkillCornerMatchPlayer`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerMatchPlayer)\[] | - | [packages/data-providers/src/skillcorner/types.ts:92](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L92) | --- # SkillCornerMatchPlayer Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/interfaces/SkillCornerMatchPlayer Defined in: [packages/data-providers/src/skillcorner/types.ts:60](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L60) ## Indexable ```ts [key: string]: unknown ``` ## Properties | Property | Modifier | Type | Description | Defined in | | --------------------------------------------- | ---------- | ---------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | | `first_name` | `readonly` | `string` | - | [packages/data-providers/src/skillcorner/types.ts:64](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L64) | | `id` | `readonly` | `number` | The id tracking frames join on — **not** `trackable_object`. | [packages/data-providers/src/skillcorner/types.ts:62](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L62) | | `last_name` | `readonly` | `string` | - | [packages/data-providers/src/skillcorner/types.ts:65](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L65) | | `number` | `readonly` | `number` \| `null` | - | [packages/data-providers/src/skillcorner/types.ts:67](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L67) | | `player_role` | `readonly` | [`SkillCornerPlayerRole`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerPlayerRole) \| `null` | - | [packages/data-providers/src/skillcorner/types.ts:68](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L68) | | `short_name` | `readonly` | `string` | - | [packages/data-providers/src/skillcorner/types.ts:66](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L66) | | `team_id` | `readonly` | `number` | - | [packages/data-providers/src/skillcorner/types.ts:63](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L63) | --- # SkillCornerMatchSummary Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/interfaces/SkillCornerMatchSummary Defined in: [packages/data-providers/src/skillcorner/types.ts:33](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L33) A row of the top-level `matches.json` index. ## Indexable ```ts [key: string]: unknown ``` ## Properties | Property | Modifier | Type | Defined in | | --------------------------------------------------- | ---------- | ------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | | `away_team` | `readonly` | [`SkillCornerTeamRef`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerTeamRef) | [packages/data-providers/src/skillcorner/types.ts:37](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L37) | | `competition_id` | `readonly` | `number` | [packages/data-providers/src/skillcorner/types.ts:39](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L39) | | `date_time` | `readonly` | `string` | [packages/data-providers/src/skillcorner/types.ts:35](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L35) | | `home_team` | `readonly` | [`SkillCornerTeamRef`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerTeamRef) | [packages/data-providers/src/skillcorner/types.ts:36](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L36) | | `id` | `readonly` | `number` | [packages/data-providers/src/skillcorner/types.ts:34](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L34) | | `season_id` | `readonly` | `number` | [packages/data-providers/src/skillcorner/types.ts:40](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L40) | | `status` | `readonly` | `string` | [packages/data-providers/src/skillcorner/types.ts:38](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L38) | --- # SkillCornerOffBallRun Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/interfaces/SkillCornerOffBallRun Defined in: [packages/data-providers/src/skillcorner/types.ts:247](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L247) An off-the-ball movement, with its own distance and speed measures. ## Extends * [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase) ## Indexable ```ts [key: string]: unknown ``` Every other column, as the CSV spelled it. ## Properties | Property | Modifier | Type | Description | Overrides | Inherited from | Defined in | | --------------------------------------------------------------- | ---------- | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `attacking_side` | `readonly` | [`SkillCornerSide`](/docs/api/data-providers/skillcorner/type-aliases/SkillCornerSide) \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`attacking_side`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-attacking_side) | [packages/data-providers/src/skillcorner/types.ts:188](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L188) | | `break_defensive_line` | `readonly` | `boolean` \| `null` | - | - | - | [packages/data-providers/src/skillcorner/types.ts:252](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L252) | | `channel_end` | `readonly` | `string` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`channel_end`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-channel_end) | [packages/data-providers/src/skillcorner/types.ts:204](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L204) | | `channel_start` | `readonly` | `string` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`channel_start`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-channel_start) | [packages/data-providers/src/skillcorner/types.ts:202](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L202) | | `distance_covered` | `readonly` | `number` \| `null` | - | - | - | [packages/data-providers/src/skillcorner/types.ts:249](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L249) | | `duration` | `readonly` | `number` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`duration`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-duration) | [packages/data-providers/src/skillcorner/types.ts:183](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L183) | | `event_id` | `readonly` | `string` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`event_id`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-event_id) | [packages/data-providers/src/skillcorner/types.ts:171](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L171) | | `event_subtype` | `readonly` | `string` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`event_subtype`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-event_subtype) | [packages/data-providers/src/skillcorner/types.ts:175](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L175) | | `event_type` | `readonly` | `"off_ball_run"` | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`event_type`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-event_type) | - | [packages/data-providers/src/skillcorner/types.ts:248](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L248) | | `frame_end` | `readonly` | `number` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`frame_end`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-frame_end) | [packages/data-providers/src/skillcorner/types.ts:178](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L178) | | `frame_start` | `readonly` | `number` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`frame_start`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-frame_start) | [packages/data-providers/src/skillcorner/types.ts:177](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L177) | | `index` | `readonly` | `number` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`index`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-index) | [packages/data-providers/src/skillcorner/types.ts:172](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L172) | | `intended_run_behind` | `readonly` | `boolean` \| `null` | - | - | - | [packages/data-providers/src/skillcorner/types.ts:253](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L253) | | `lead_to_goal` | `readonly` | `boolean` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`lead_to_goal`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-lead_to_goal) | [packages/data-providers/src/skillcorner/types.ts:217](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L217) | | `lead_to_shot` | `readonly` | `boolean` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`lead_to_shot`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-lead_to_shot) | [packages/data-providers/src/skillcorner/types.ts:216](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L216) | | `match_id` | `readonly` | `number` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`match_id`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-match_id) | [packages/data-providers/src/skillcorner/types.ts:173](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L173) | | `minute_start` | `readonly` | `number` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`minute_start`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-minute_start) | [packages/data-providers/src/skillcorner/types.ts:181](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L181) | | `penalty_area_end` | `readonly` | `boolean` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`penalty_area_end`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-penalty_area_end) | [packages/data-providers/src/skillcorner/types.ts:207](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L207) | | `penalty_area_start` | `readonly` | `boolean` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`penalty_area_start`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-penalty_area_start) | [packages/data-providers/src/skillcorner/types.ts:206](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L206) | | `period` | `readonly` | `number` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`period`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-period) | [packages/data-providers/src/skillcorner/types.ts:184](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L184) | | `phase_index` | `readonly` | `number` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`phase_index`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-phase_index) | [packages/data-providers/src/skillcorner/types.ts:215](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L215) | | `pitchEndX` | `readonly` | `number` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`pitchEndX`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-pitchendx) | [packages/data-providers/src/skillcorner/types.ts:212](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L212) | | `pitchEndY` | `readonly` | `number` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`pitchEndY`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-pitchendy) | [packages/data-providers/src/skillcorner/types.ts:213](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L213) | | `pitchX` | `readonly` | `number` \| `null` | Corner-origin metres, added by the parser, for direct plotting. | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`pitchX`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-pitchx) | [packages/data-providers/src/skillcorner/types.ts:210](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L210) | | `pitchY` | `readonly` | `number` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`pitchY`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-pitchy) | [packages/data-providers/src/skillcorner/types.ts:211](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L211) | | `player_id` | `readonly` | `number` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`player_id`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-player_id) | [packages/data-providers/src/skillcorner/types.ts:189](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L189) | | `player_name` | `readonly` | `string` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`player_name`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-player_name) | [packages/data-providers/src/skillcorner/types.ts:190](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L190) | | `player_position` | `readonly` | `string` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`player_position`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-player_position) | [packages/data-providers/src/skillcorner/types.ts:191](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L191) | | `second_start` | `readonly` | `number` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`second_start`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-second_start) | [packages/data-providers/src/skillcorner/types.ts:182](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L182) | | `speed_avg` | `readonly` | `number` \| `null` | - | - | - | [packages/data-providers/src/skillcorner/types.ts:250](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L250) | | `speed_avg_band` | `readonly` | `string` \| `null` | - | - | - | [packages/data-providers/src/skillcorner/types.ts:251](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L251) | | `team_id` | `readonly` | `number` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`team_id`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-team_id) | [packages/data-providers/src/skillcorner/types.ts:186](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L186) | | `team_shortname` | `readonly` | `string` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`team_shortname`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-team_shortname) | [packages/data-providers/src/skillcorner/types.ts:187](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L187) | | `third_end` | `readonly` | `string` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`third_end`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-third_end) | [packages/data-providers/src/skillcorner/types.ts:205](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L205) | | `third_start` | `readonly` | `string` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`third_start`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-third_start) | [packages/data-providers/src/skillcorner/types.ts:203](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L203) | | `time_end` | `readonly` | `string` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`time_end`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-time_end) | [packages/data-providers/src/skillcorner/types.ts:180](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L180) | | `time_start` | `readonly` | `string` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`time_start`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-time_start) | [packages/data-providers/src/skillcorner/types.ts:179](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L179) | | `x_end` | `readonly` | `number` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`x_end`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-x_end) | [packages/data-providers/src/skillcorner/types.ts:200](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L200) | | `x_start` | `readonly` | `number` \| `null` | Metres from the centre spot, but **normalised to the attacking direction**: positive x always points at the goal this team is attacking, in both halves. Unlike tracking coordinates these never flip at half time. | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`x_start`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-x_start) | [packages/data-providers/src/skillcorner/types.ts:198](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L198) | | `xthreat` | `readonly` | `number` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`xthreat`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-xthreat) | [packages/data-providers/src/skillcorner/types.ts:218](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L218) | | `y_end` | `readonly` | `number` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`y_end`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-y_end) | [packages/data-providers/src/skillcorner/types.ts:201](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L201) | | `y_start` | `readonly` | `number` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`y_start`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-y_start) | [packages/data-providers/src/skillcorner/types.ts:199](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L199) | --- # SkillCornerOnBallEngagement Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/interfaces/SkillCornerOnBallEngagement Defined in: [packages/data-providers/src/skillcorner/types.ts:257](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L257) A defensive engagement — pressure, press, duel. ## Extends * [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase) ## Indexable ```ts [key: string]: unknown ``` Every other column, as the CSV spelled it. ## Properties | Property | Modifier | Type | Description | Overrides | Inherited from | Defined in | | --------------------------------------------------------------- | ---------- | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `angle_of_engagement` | `readonly` | `number` \| `null` | - | - | - | [packages/data-providers/src/skillcorner/types.ts:261](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L261) | | `attacking_side` | `readonly` | [`SkillCornerSide`](/docs/api/data-providers/skillcorner/type-aliases/SkillCornerSide) \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`attacking_side`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-attacking_side) | [packages/data-providers/src/skillcorner/types.ts:188](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L188) | | `channel_end` | `readonly` | `string` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`channel_end`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-channel_end) | [packages/data-providers/src/skillcorner/types.ts:204](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L204) | | `channel_start` | `readonly` | `string` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`channel_start`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-channel_start) | [packages/data-providers/src/skillcorner/types.ts:202](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L202) | | `duration` | `readonly` | `number` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`duration`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-duration) | [packages/data-providers/src/skillcorner/types.ts:183](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L183) | | `event_id` | `readonly` | `string` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`event_id`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-event_id) | [packages/data-providers/src/skillcorner/types.ts:171](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L171) | | `event_subtype` | `readonly` | `string` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`event_subtype`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-event_subtype) | [packages/data-providers/src/skillcorner/types.ts:175](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L175) | | `event_type` | `readonly` | `"on_ball_engagement"` | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`event_type`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-event_type) | - | [packages/data-providers/src/skillcorner/types.ts:258](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L258) | | `frame_end` | `readonly` | `number` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`frame_end`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-frame_end) | [packages/data-providers/src/skillcorner/types.ts:178](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L178) | | `frame_start` | `readonly` | `number` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`frame_start`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-frame_start) | [packages/data-providers/src/skillcorner/types.ts:177](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L177) | | `index` | `readonly` | `number` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`index`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-index) | [packages/data-providers/src/skillcorner/types.ts:172](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L172) | | `interplayer_distance` | `readonly` | `number` \| `null` | - | - | - | [packages/data-providers/src/skillcorner/types.ts:259](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L259) | | `lead_to_goal` | `readonly` | `boolean` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`lead_to_goal`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-lead_to_goal) | [packages/data-providers/src/skillcorner/types.ts:217](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L217) | | `lead_to_shot` | `readonly` | `boolean` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`lead_to_shot`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-lead_to_shot) | [packages/data-providers/src/skillcorner/types.ts:216](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L216) | | `match_id` | `readonly` | `number` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`match_id`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-match_id) | [packages/data-providers/src/skillcorner/types.ts:173](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L173) | | `minute_start` | `readonly` | `number` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`minute_start`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-minute_start) | [packages/data-providers/src/skillcorner/types.ts:181](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L181) | | `penalty_area_end` | `readonly` | `boolean` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`penalty_area_end`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-penalty_area_end) | [packages/data-providers/src/skillcorner/types.ts:207](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L207) | | `penalty_area_start` | `readonly` | `boolean` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`penalty_area_start`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-penalty_area_start) | [packages/data-providers/src/skillcorner/types.ts:206](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L206) | | `period` | `readonly` | `number` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`period`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-period) | [packages/data-providers/src/skillcorner/types.ts:184](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L184) | | `phase_index` | `readonly` | `number` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`phase_index`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-phase_index) | [packages/data-providers/src/skillcorner/types.ts:215](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L215) | | `pitchEndX` | `readonly` | `number` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`pitchEndX`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-pitchendx) | [packages/data-providers/src/skillcorner/types.ts:212](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L212) | | `pitchEndY` | `readonly` | `number` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`pitchEndY`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-pitchendy) | [packages/data-providers/src/skillcorner/types.ts:213](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L213) | | `pitchX` | `readonly` | `number` \| `null` | Corner-origin metres, added by the parser, for direct plotting. | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`pitchX`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-pitchx) | [packages/data-providers/src/skillcorner/types.ts:210](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L210) | | `pitchY` | `readonly` | `number` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`pitchY`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-pitchy) | [packages/data-providers/src/skillcorner/types.ts:211](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L211) | | `player_id` | `readonly` | `number` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`player_id`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-player_id) | [packages/data-providers/src/skillcorner/types.ts:189](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L189) | | `player_name` | `readonly` | `string` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`player_name`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-player_name) | [packages/data-providers/src/skillcorner/types.ts:190](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L190) | | `player_position` | `readonly` | `string` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`player_position`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-player_position) | [packages/data-providers/src/skillcorner/types.ts:191](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L191) | | `pressing_chain` | `readonly` | `boolean` \| `null` | - | - | - | [packages/data-providers/src/skillcorner/types.ts:260](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L260) | | `second_start` | `readonly` | `number` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`second_start`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-second_start) | [packages/data-providers/src/skillcorner/types.ts:182](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L182) | | `team_id` | `readonly` | `number` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`team_id`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-team_id) | [packages/data-providers/src/skillcorner/types.ts:186](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L186) | | `team_shortname` | `readonly` | `string` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`team_shortname`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-team_shortname) | [packages/data-providers/src/skillcorner/types.ts:187](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L187) | | `third_end` | `readonly` | `string` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`third_end`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-third_end) | [packages/data-providers/src/skillcorner/types.ts:205](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L205) | | `third_start` | `readonly` | `string` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`third_start`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-third_start) | [packages/data-providers/src/skillcorner/types.ts:203](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L203) | | `time_end` | `readonly` | `string` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`time_end`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-time_end) | [packages/data-providers/src/skillcorner/types.ts:180](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L180) | | `time_start` | `readonly` | `string` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`time_start`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-time_start) | [packages/data-providers/src/skillcorner/types.ts:179](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L179) | | `x_end` | `readonly` | `number` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`x_end`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-x_end) | [packages/data-providers/src/skillcorner/types.ts:200](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L200) | | `x_start` | `readonly` | `number` \| `null` | Metres from the centre spot, but **normalised to the attacking direction**: positive x always points at the goal this team is attacking, in both halves. Unlike tracking coordinates these never flip at half time. | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`x_start`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-x_start) | [packages/data-providers/src/skillcorner/types.ts:198](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L198) | | `xthreat` | `readonly` | `number` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`xthreat`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-xthreat) | [packages/data-providers/src/skillcorner/types.ts:218](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L218) | | `y_end` | `readonly` | `number` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`y_end`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-y_end) | [packages/data-providers/src/skillcorner/types.ts:201](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L201) | | `y_start` | `readonly` | `number` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`y_start`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-y_start) | [packages/data-providers/src/skillcorner/types.ts:199](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L199) | --- # SkillCornerOtherEvent Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/interfaces/SkillCornerOtherEvent Defined in: [packages/data-providers/src/skillcorner/types.ts:265](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L265) Any event type this package doesn't model explicitly. ## Extends * [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase) ## Indexable ```ts [key: string]: unknown ``` Every other column, as the CSV spelled it. ## Properties | Property | Modifier | Type | Description | Overrides | Inherited from | Defined in | | ----------------------------------------------------------- | ---------- | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `attacking_side` | `readonly` | [`SkillCornerSide`](/docs/api/data-providers/skillcorner/type-aliases/SkillCornerSide) \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`attacking_side`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-attacking_side) | [packages/data-providers/src/skillcorner/types.ts:188](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L188) | | `channel_end` | `readonly` | `string` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`channel_end`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-channel_end) | [packages/data-providers/src/skillcorner/types.ts:204](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L204) | | `channel_start` | `readonly` | `string` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`channel_start`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-channel_start) | [packages/data-providers/src/skillcorner/types.ts:202](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L202) | | `duration` | `readonly` | `number` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`duration`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-duration) | [packages/data-providers/src/skillcorner/types.ts:183](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L183) | | `event_id` | `readonly` | `string` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`event_id`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-event_id) | [packages/data-providers/src/skillcorner/types.ts:171](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L171) | | `event_subtype` | `readonly` | `string` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`event_subtype`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-event_subtype) | [packages/data-providers/src/skillcorner/types.ts:175](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L175) | | `event_type` | `readonly` | `string` & `Record`\<`never`, `never`> | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`event_type`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-event_type) | - | [packages/data-providers/src/skillcorner/types.ts:266](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L266) | | `frame_end` | `readonly` | `number` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`frame_end`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-frame_end) | [packages/data-providers/src/skillcorner/types.ts:178](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L178) | | `frame_start` | `readonly` | `number` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`frame_start`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-frame_start) | [packages/data-providers/src/skillcorner/types.ts:177](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L177) | | `index` | `readonly` | `number` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`index`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-index) | [packages/data-providers/src/skillcorner/types.ts:172](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L172) | | `lead_to_goal` | `readonly` | `boolean` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`lead_to_goal`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-lead_to_goal) | [packages/data-providers/src/skillcorner/types.ts:217](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L217) | | `lead_to_shot` | `readonly` | `boolean` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`lead_to_shot`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-lead_to_shot) | [packages/data-providers/src/skillcorner/types.ts:216](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L216) | | `match_id` | `readonly` | `number` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`match_id`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-match_id) | [packages/data-providers/src/skillcorner/types.ts:173](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L173) | | `minute_start` | `readonly` | `number` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`minute_start`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-minute_start) | [packages/data-providers/src/skillcorner/types.ts:181](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L181) | | `penalty_area_end` | `readonly` | `boolean` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`penalty_area_end`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-penalty_area_end) | [packages/data-providers/src/skillcorner/types.ts:207](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L207) | | `penalty_area_start` | `readonly` | `boolean` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`penalty_area_start`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-penalty_area_start) | [packages/data-providers/src/skillcorner/types.ts:206](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L206) | | `period` | `readonly` | `number` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`period`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-period) | [packages/data-providers/src/skillcorner/types.ts:184](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L184) | | `phase_index` | `readonly` | `number` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`phase_index`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-phase_index) | [packages/data-providers/src/skillcorner/types.ts:215](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L215) | | `pitchEndX` | `readonly` | `number` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`pitchEndX`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-pitchendx) | [packages/data-providers/src/skillcorner/types.ts:212](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L212) | | `pitchEndY` | `readonly` | `number` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`pitchEndY`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-pitchendy) | [packages/data-providers/src/skillcorner/types.ts:213](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L213) | | `pitchX` | `readonly` | `number` \| `null` | Corner-origin metres, added by the parser, for direct plotting. | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`pitchX`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-pitchx) | [packages/data-providers/src/skillcorner/types.ts:210](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L210) | | `pitchY` | `readonly` | `number` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`pitchY`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-pitchy) | [packages/data-providers/src/skillcorner/types.ts:211](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L211) | | `player_id` | `readonly` | `number` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`player_id`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-player_id) | [packages/data-providers/src/skillcorner/types.ts:189](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L189) | | `player_name` | `readonly` | `string` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`player_name`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-player_name) | [packages/data-providers/src/skillcorner/types.ts:190](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L190) | | `player_position` | `readonly` | `string` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`player_position`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-player_position) | [packages/data-providers/src/skillcorner/types.ts:191](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L191) | | `second_start` | `readonly` | `number` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`second_start`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-second_start) | [packages/data-providers/src/skillcorner/types.ts:182](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L182) | | `team_id` | `readonly` | `number` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`team_id`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-team_id) | [packages/data-providers/src/skillcorner/types.ts:186](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L186) | | `team_shortname` | `readonly` | `string` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`team_shortname`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-team_shortname) | [packages/data-providers/src/skillcorner/types.ts:187](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L187) | | `third_end` | `readonly` | `string` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`third_end`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-third_end) | [packages/data-providers/src/skillcorner/types.ts:205](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L205) | | `third_start` | `readonly` | `string` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`third_start`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-third_start) | [packages/data-providers/src/skillcorner/types.ts:203](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L203) | | `time_end` | `readonly` | `string` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`time_end`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-time_end) | [packages/data-providers/src/skillcorner/types.ts:180](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L180) | | `time_start` | `readonly` | `string` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`time_start`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-time_start) | [packages/data-providers/src/skillcorner/types.ts:179](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L179) | | `x_end` | `readonly` | `number` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`x_end`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-x_end) | [packages/data-providers/src/skillcorner/types.ts:200](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L200) | | `x_start` | `readonly` | `number` \| `null` | Metres from the centre spot, but **normalised to the attacking direction**: positive x always points at the goal this team is attacking, in both halves. Unlike tracking coordinates these never flip at half time. | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`x_start`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-x_start) | [packages/data-providers/src/skillcorner/types.ts:198](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L198) | | `xthreat` | `readonly` | `number` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`xthreat`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-xthreat) | [packages/data-providers/src/skillcorner/types.ts:218](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L218) | | `y_end` | `readonly` | `number` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`y_end`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-y_end) | [packages/data-providers/src/skillcorner/types.ts:201](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L201) | | `y_start` | `readonly` | `number` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`y_start`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-y_start) | [packages/data-providers/src/skillcorner/types.ts:199](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L199) | --- # SkillCornerPassingOption Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/interfaces/SkillCornerPassingOption Defined in: [packages/data-providers/src/skillcorner/types.ts:236](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L236) A team-mate available to receive — SkillCorner's passing-option model. ## Extends * [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase) ## Indexable ```ts [key: string]: unknown ``` Every other column, as the CSV spelled it. ## Properties | Property | Modifier | Type | Description | Overrides | Inherited from | Defined in | | ----------------------------------------------------------------- | ---------- | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `attacking_side` | `readonly` | [`SkillCornerSide`](/docs/api/data-providers/skillcorner/type-aliases/SkillCornerSide) \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`attacking_side`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-attacking_side) | [packages/data-providers/src/skillcorner/types.ts:188](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L188) | | `channel_end` | `readonly` | `string` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`channel_end`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-channel_end) | [packages/data-providers/src/skillcorner/types.ts:204](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L204) | | `channel_start` | `readonly` | `string` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`channel_start`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-channel_start) | [packages/data-providers/src/skillcorner/types.ts:202](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L202) | | `dangerous` | `readonly` | `boolean` \| `null` | - | - | - | [packages/data-providers/src/skillcorner/types.ts:240](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L240) | | `difficult_pass_target` | `readonly` | `boolean` \| `null` | - | - | - | [packages/data-providers/src/skillcorner/types.ts:241](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L241) | | `duration` | `readonly` | `number` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`duration`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-duration) | [packages/data-providers/src/skillcorner/types.ts:183](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L183) | | `event_id` | `readonly` | `string` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`event_id`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-event_id) | [packages/data-providers/src/skillcorner/types.ts:171](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L171) | | `event_subtype` | `readonly` | `string` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`event_subtype`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-event_subtype) | [packages/data-providers/src/skillcorner/types.ts:175](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L175) | | `event_type` | `readonly` | `"passing_option"` | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`event_type`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-event_type) | - | [packages/data-providers/src/skillcorner/types.ts:237](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L237) | | `frame_end` | `readonly` | `number` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`frame_end`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-frame_end) | [packages/data-providers/src/skillcorner/types.ts:178](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L178) | | `frame_start` | `readonly` | `number` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`frame_start`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-frame_start) | [packages/data-providers/src/skillcorner/types.ts:177](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L177) | | `index` | `readonly` | `number` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`index`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-index) | [packages/data-providers/src/skillcorner/types.ts:172](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L172) | | `lead_to_goal` | `readonly` | `boolean` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`lead_to_goal`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-lead_to_goal) | [packages/data-providers/src/skillcorner/types.ts:217](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L217) | | `lead_to_shot` | `readonly` | `boolean` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`lead_to_shot`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-lead_to_shot) | [packages/data-providers/src/skillcorner/types.ts:216](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L216) | | `match_id` | `readonly` | `number` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`match_id`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-match_id) | [packages/data-providers/src/skillcorner/types.ts:173](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L173) | | `minute_start` | `readonly` | `number` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`minute_start`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-minute_start) | [packages/data-providers/src/skillcorner/types.ts:181](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L181) | | `pass_angle` | `readonly` | `number` \| `null` | - | - | - | [packages/data-providers/src/skillcorner/types.ts:243](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L243) | | `penalty_area_end` | `readonly` | `boolean` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`penalty_area_end`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-penalty_area_end) | [packages/data-providers/src/skillcorner/types.ts:207](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L207) | | `penalty_area_start` | `readonly` | `boolean` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`penalty_area_start`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-penalty_area_start) | [packages/data-providers/src/skillcorner/types.ts:206](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L206) | | `period` | `readonly` | `number` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`period`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-period) | [packages/data-providers/src/skillcorner/types.ts:184](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L184) | | `phase_index` | `readonly` | `number` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`phase_index`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-phase_index) | [packages/data-providers/src/skillcorner/types.ts:215](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L215) | | `pitchEndX` | `readonly` | `number` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`pitchEndX`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-pitchendx) | [packages/data-providers/src/skillcorner/types.ts:212](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L212) | | `pitchEndY` | `readonly` | `number` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`pitchEndY`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-pitchendy) | [packages/data-providers/src/skillcorner/types.ts:213](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L213) | | `pitchX` | `readonly` | `number` \| `null` | Corner-origin metres, added by the parser, for direct plotting. | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`pitchX`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-pitchx) | [packages/data-providers/src/skillcorner/types.ts:210](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L210) | | `pitchY` | `readonly` | `number` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`pitchY`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-pitchy) | [packages/data-providers/src/skillcorner/types.ts:211](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L211) | | `player_id` | `readonly` | `number` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`player_id`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-player_id) | [packages/data-providers/src/skillcorner/types.ts:189](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L189) | | `player_name` | `readonly` | `string` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`player_name`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-player_name) | [packages/data-providers/src/skillcorner/types.ts:190](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L190) | | `player_position` | `readonly` | `string` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`player_position`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-player_position) | [packages/data-providers/src/skillcorner/types.ts:191](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L191) | | `received` | `readonly` | `boolean` \| `null` | - | - | - | [packages/data-providers/src/skillcorner/types.ts:239](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L239) | | `second_start` | `readonly` | `number` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`second_start`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-second_start) | [packages/data-providers/src/skillcorner/types.ts:182](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L182) | | `targeted` | `readonly` | `boolean` \| `null` | - | - | - | [packages/data-providers/src/skillcorner/types.ts:238](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L238) | | `team_id` | `readonly` | `number` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`team_id`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-team_id) | [packages/data-providers/src/skillcorner/types.ts:186](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L186) | | `team_shortname` | `readonly` | `string` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`team_shortname`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-team_shortname) | [packages/data-providers/src/skillcorner/types.ts:187](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L187) | | `third_end` | `readonly` | `string` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`third_end`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-third_end) | [packages/data-providers/src/skillcorner/types.ts:205](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L205) | | `third_start` | `readonly` | `string` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`third_start`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-third_start) | [packages/data-providers/src/skillcorner/types.ts:203](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L203) | | `time_end` | `readonly` | `string` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`time_end`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-time_end) | [packages/data-providers/src/skillcorner/types.ts:180](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L180) | | `time_start` | `readonly` | `string` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`time_start`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-time_start) | [packages/data-providers/src/skillcorner/types.ts:179](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L179) | | `x_end` | `readonly` | `number` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`x_end`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-x_end) | [packages/data-providers/src/skillcorner/types.ts:200](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L200) | | `x_start` | `readonly` | `number` \| `null` | Metres from the centre spot, but **normalised to the attacking direction**: positive x always points at the goal this team is attacking, in both halves. Unlike tracking coordinates these never flip at half time. | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`x_start`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-x_start) | [packages/data-providers/src/skillcorner/types.ts:198](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L198) | | `xpass_completion` | `readonly` | `number` \| `null` | - | - | - | [packages/data-providers/src/skillcorner/types.ts:242](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L242) | | `xthreat` | `readonly` | `number` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`xthreat`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-xthreat) | [packages/data-providers/src/skillcorner/types.ts:218](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L218) | | `y_end` | `readonly` | `number` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`y_end`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-y_end) | [packages/data-providers/src/skillcorner/types.ts:201](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L201) | | `y_start` | `readonly` | `number` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`y_start`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-y_start) | [packages/data-providers/src/skillcorner/types.ts:199](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L199) | --- # SkillCornerPeriod Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/interfaces/SkillCornerPeriod Defined in: [packages/data-providers/src/skillcorner/types.ts:44](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L44) ## Properties | Property | Modifier | Type | Defined in | | ------------------------------------------------------- | ---------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | | `duration_frames` | `readonly` | `number` | [packages/data-providers/src/skillcorner/types.ts:49](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L49) | | `duration_minutes` | `readonly` | `number` | [packages/data-providers/src/skillcorner/types.ts:50](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L50) | | `end_frame` | `readonly` | `number` | [packages/data-providers/src/skillcorner/types.ts:48](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L48) | | `name` | `readonly` | `string` | [packages/data-providers/src/skillcorner/types.ts:46](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L46) | | `period` | `readonly` | `number` | [packages/data-providers/src/skillcorner/types.ts:45](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L45) | | `start_frame` | `readonly` | `number` | [packages/data-providers/src/skillcorner/types.ts:47](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L47) | --- # SkillCornerPhase Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/interfaces/SkillCornerPhase Defined in: [packages/data-providers/src/skillcorner/types.ts:292](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L292) A stretch of the match with the ball in play and one team in possession. ## Indexable ```ts [key: string]: unknown ``` ## Properties | Property | Modifier | Type | Defined in | | ----------------------------------------------------------------------------------------- | ---------- | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `attacking_side` | `readonly` | [`SkillCornerSide`](/docs/api/data-providers/skillcorner/type-aliases/SkillCornerSide) \| `null` | [packages/data-providers/src/skillcorner/types.ts:303](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L303) | | `duration` | `readonly` | `number` \| `null` | [packages/data-providers/src/skillcorner/types.ts:301](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L301) | | `frame_end` | `readonly` | `number` | [packages/data-providers/src/skillcorner/types.ts:296](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L296) | | `frame_start` | `readonly` | `number` | [packages/data-providers/src/skillcorner/types.ts:295](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L295) | | `index` | `readonly` | `number` | [packages/data-providers/src/skillcorner/types.ts:293](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L293) | | `match_id` | `readonly` | `number` | [packages/data-providers/src/skillcorner/types.ts:294](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L294) | | `minute_start` | `readonly` | `number` \| `null` | [packages/data-providers/src/skillcorner/types.ts:299](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L299) | | `period` | `readonly` | `number` \| `null` | [packages/data-providers/src/skillcorner/types.ts:302](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L302) | | `second_start` | `readonly` | `number` \| `null` | [packages/data-providers/src/skillcorner/types.ts:300](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L300) | | `team_in_possession_id` | `readonly` | `number` \| `null` | [packages/data-providers/src/skillcorner/types.ts:304](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L304) | | `team_in_possession_length_start` | `readonly` | `number` \| `null` | [packages/data-providers/src/skillcorner/types.ts:315](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L315) | | `team_in_possession_phase_type` | `readonly` | `string` \| `null` | [packages/data-providers/src/skillcorner/types.ts:306](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L306) | | `team_in_possession_shortname` | `readonly` | `string` \| `null` | [packages/data-providers/src/skillcorner/types.ts:305](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L305) | | `team_in_possession_width_start` | `readonly` | `number` \| `null` | [packages/data-providers/src/skillcorner/types.ts:314](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L314) | | `team_out_of_possession_phase_type` | `readonly` | `string` \| `null` | [packages/data-providers/src/skillcorner/types.ts:307](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L307) | | `team_possession_lead_to_goal` | `readonly` | `boolean` \| `null` | [packages/data-providers/src/skillcorner/types.ts:309](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L309) | | `team_possession_lead_to_shot` | `readonly` | `boolean` \| `null` | [packages/data-providers/src/skillcorner/types.ts:308](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L308) | | `time_end` | `readonly` | `string` \| `null` | [packages/data-providers/src/skillcorner/types.ts:298](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L298) | | `time_start` | `readonly` | `string` \| `null` | [packages/data-providers/src/skillcorner/types.ts:297](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L297) | | `x_end` | `readonly` | `number` \| `null` | [packages/data-providers/src/skillcorner/types.ts:312](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L312) | | `x_start` | `readonly` | `number` \| `null` | [packages/data-providers/src/skillcorner/types.ts:310](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L310) | | `y_end` | `readonly` | `number` \| `null` | [packages/data-providers/src/skillcorner/types.ts:313](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L313) | | `y_start` | `readonly` | `number` \| `null` | [packages/data-providers/src/skillcorner/types.ts:311](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L311) | --- # SkillCornerPlayerPossession Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/interfaces/SkillCornerPlayerPossession Defined in: [packages/data-providers/src/skillcorner/types.ts:225](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L225) A player's time on the ball. ## Extends * [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase) ## Indexable ```ts [key: string]: unknown ``` Every other column, as the CSV spelled it. ## Properties | Property | Modifier | Type | Description | Overrides | Inherited from | Defined in | | ----------------------------------------------------------- | ---------- | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `attacking_side` | `readonly` | [`SkillCornerSide`](/docs/api/data-providers/skillcorner/type-aliases/SkillCornerSide) \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`attacking_side`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-attacking_side) | [packages/data-providers/src/skillcorner/types.ts:188](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L188) | | `carry` | `readonly` | `boolean` \| `null` | - | - | - | [packages/data-providers/src/skillcorner/types.ts:227](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L227) | | `channel_end` | `readonly` | `string` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`channel_end`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-channel_end) | [packages/data-providers/src/skillcorner/types.ts:204](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L204) | | `channel_start` | `readonly` | `string` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`channel_start`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-channel_start) | [packages/data-providers/src/skillcorner/types.ts:202](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L202) | | `duration` | `readonly` | `number` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`duration`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-duration) | [packages/data-providers/src/skillcorner/types.ts:183](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L183) | | `event_id` | `readonly` | `string` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`event_id`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-event_id) | [packages/data-providers/src/skillcorner/types.ts:171](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L171) | | `event_subtype` | `readonly` | `string` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`event_subtype`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-event_subtype) | [packages/data-providers/src/skillcorner/types.ts:175](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L175) | | `event_type` | `readonly` | `"player_possession"` | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`event_type`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-event_type) | - | [packages/data-providers/src/skillcorner/types.ts:226](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L226) | | `frame_end` | `readonly` | `number` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`frame_end`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-frame_end) | [packages/data-providers/src/skillcorner/types.ts:178](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L178) | | `frame_start` | `readonly` | `number` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`frame_start`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-frame_start) | [packages/data-providers/src/skillcorner/types.ts:177](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L177) | | `index` | `readonly` | `number` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`index`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-index) | [packages/data-providers/src/skillcorner/types.ts:172](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L172) | | `is_header` | `readonly` | `boolean` \| `null` | - | - | - | [packages/data-providers/src/skillcorner/types.ts:232](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L232) | | `lead_to_goal` | `readonly` | `boolean` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`lead_to_goal`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-lead_to_goal) | [packages/data-providers/src/skillcorner/types.ts:217](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L217) | | `lead_to_shot` | `readonly` | `boolean` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`lead_to_shot`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-lead_to_shot) | [packages/data-providers/src/skillcorner/types.ts:216](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L216) | | `match_id` | `readonly` | `number` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`match_id`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-match_id) | [packages/data-providers/src/skillcorner/types.ts:173](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L173) | | `minute_start` | `readonly` | `number` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`minute_start`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-minute_start) | [packages/data-providers/src/skillcorner/types.ts:181](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L181) | | `one_touch` | `readonly` | `boolean` \| `null` | - | - | - | [packages/data-providers/src/skillcorner/types.ts:228](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L228) | | `pass_angle` | `readonly` | `number` \| `null` | - | - | - | [packages/data-providers/src/skillcorner/types.ts:231](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L231) | | `pass_distance` | `readonly` | `number` \| `null` | - | - | - | [packages/data-providers/src/skillcorner/types.ts:230](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L230) | | `pass_outcome` | `readonly` | `string` \| `null` | - | - | - | [packages/data-providers/src/skillcorner/types.ts:229](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L229) | | `penalty_area_end` | `readonly` | `boolean` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`penalty_area_end`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-penalty_area_end) | [packages/data-providers/src/skillcorner/types.ts:207](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L207) | | `penalty_area_start` | `readonly` | `boolean` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`penalty_area_start`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-penalty_area_start) | [packages/data-providers/src/skillcorner/types.ts:206](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L206) | | `period` | `readonly` | `number` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`period`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-period) | [packages/data-providers/src/skillcorner/types.ts:184](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L184) | | `phase_index` | `readonly` | `number` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`phase_index`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-phase_index) | [packages/data-providers/src/skillcorner/types.ts:215](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L215) | | `pitchEndX` | `readonly` | `number` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`pitchEndX`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-pitchendx) | [packages/data-providers/src/skillcorner/types.ts:212](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L212) | | `pitchEndY` | `readonly` | `number` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`pitchEndY`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-pitchendy) | [packages/data-providers/src/skillcorner/types.ts:213](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L213) | | `pitchX` | `readonly` | `number` \| `null` | Corner-origin metres, added by the parser, for direct plotting. | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`pitchX`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-pitchx) | [packages/data-providers/src/skillcorner/types.ts:210](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L210) | | `pitchY` | `readonly` | `number` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`pitchY`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-pitchy) | [packages/data-providers/src/skillcorner/types.ts:211](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L211) | | `player_id` | `readonly` | `number` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`player_id`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-player_id) | [packages/data-providers/src/skillcorner/types.ts:189](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L189) | | `player_name` | `readonly` | `string` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`player_name`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-player_name) | [packages/data-providers/src/skillcorner/types.ts:190](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L190) | | `player_position` | `readonly` | `string` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`player_position`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-player_position) | [packages/data-providers/src/skillcorner/types.ts:191](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L191) | | `second_start` | `readonly` | `number` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`second_start`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-second_start) | [packages/data-providers/src/skillcorner/types.ts:182](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L182) | | `team_id` | `readonly` | `number` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`team_id`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-team_id) | [packages/data-providers/src/skillcorner/types.ts:186](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L186) | | `team_shortname` | `readonly` | `string` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`team_shortname`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-team_shortname) | [packages/data-providers/src/skillcorner/types.ts:187](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L187) | | `third_end` | `readonly` | `string` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`third_end`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-third_end) | [packages/data-providers/src/skillcorner/types.ts:205](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L205) | | `third_start` | `readonly` | `string` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`third_start`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-third_start) | [packages/data-providers/src/skillcorner/types.ts:203](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L203) | | `time_end` | `readonly` | `string` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`time_end`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-time_end) | [packages/data-providers/src/skillcorner/types.ts:180](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L180) | | `time_start` | `readonly` | `string` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`time_start`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-time_start) | [packages/data-providers/src/skillcorner/types.ts:179](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L179) | | `x_end` | `readonly` | `number` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`x_end`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-x_end) | [packages/data-providers/src/skillcorner/types.ts:200](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L200) | | `x_start` | `readonly` | `number` \| `null` | Metres from the centre spot, but **normalised to the attacking direction**: positive x always points at the goal this team is attacking, in both halves. Unlike tracking coordinates these never flip at half time. | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`x_start`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-x_start) | [packages/data-providers/src/skillcorner/types.ts:198](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L198) | | `xthreat` | `readonly` | `number` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`xthreat`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-xthreat) | [packages/data-providers/src/skillcorner/types.ts:218](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L218) | | `y_end` | `readonly` | `number` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`y_end`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-y_end) | [packages/data-providers/src/skillcorner/types.ts:201](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L201) | | `y_start` | `readonly` | `number` \| `null` | - | - | [`SkillCornerEventBase`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase).[`y_start`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerEventBase#property-y_start) | [packages/data-providers/src/skillcorner/types.ts:199](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L199) | --- # SkillCornerPlayerRole Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/interfaces/SkillCornerPlayerRole Defined in: [packages/data-providers/src/skillcorner/types.ts:53](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L53) ## Properties | Property | Modifier | Type | Defined in | | --------------------------------------------------- | ---------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | | `acronym` | `readonly` | `string` | [packages/data-providers/src/skillcorner/types.ts:56](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L56) | | `id` | `readonly` | `number` | [packages/data-providers/src/skillcorner/types.ts:54](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L54) | | `name` | `readonly` | `string` | [packages/data-providers/src/skillcorner/types.ts:55](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L55) | | `position_group` | `readonly` | `string` | [packages/data-providers/src/skillcorner/types.ts:57](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L57) | --- # SkillCornerTeamRef Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/interfaces/SkillCornerTeamRef Defined in: [packages/data-providers/src/skillcorner/types.ts:25](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L25) ## Properties | Property | Modifier | Type | Defined in | | ------------------------------------------- | ---------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | | `acronym?` | `readonly` | `string` | [packages/data-providers/src/skillcorner/types.ts:29](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L29) | | `id` | `readonly` | `number` | [packages/data-providers/src/skillcorner/types.ts:26](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L26) | | `name?` | `readonly` | `string` | [packages/data-providers/src/skillcorner/types.ts:28](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L28) | | `short_name` | `readonly` | `string` | [packages/data-providers/src/skillcorner/types.ts:27](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L27) | --- # SkillCornerTrackedPlayer Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/interfaces/SkillCornerTrackedPlayer Defined in: [packages/data-providers/src/skillcorner/types.ts:107](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L107) ## Properties | Property | Modifier | Type | Description | Defined in | | --------------------------------------------- | ---------- | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `is_detected` | `readonly` | `boolean` | `false` means this position was **extrapolated**, not seen. Broadcast tracking only covers what the camera framed — across a sampled match only about 65% of player positions were true detections — so an extrapolated position is an estimate, not a measurement. | [packages/data-providers/src/skillcorner/types.ts:120](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L120) | | `pitchX` | `readonly` | `number` | Corner-origin metres, added by the parser. See `coordinates.ts`. | [packages/data-providers/src/skillcorner/types.ts:122](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L122) | | `pitchY` | `readonly` | `number` | - | [packages/data-providers/src/skillcorner/types.ts:123](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L123) | | `player_id` | `readonly` | `number` | Joins to `SkillCornerMatch.players[].id`. | [packages/data-providers/src/skillcorner/types.ts:109](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L109) | | `x` | `readonly` | `number` | Metres from the centre spot, along the pitch's length. | [packages/data-providers/src/skillcorner/types.ts:111](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L111) | | `y` | `readonly` | `number` | Metres from the centre spot, across the pitch's width. | [packages/data-providers/src/skillcorner/types.ts:113](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L113) | --- # TrackingWindowOptions Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/interfaces/TrackingWindowOptions Defined in: [packages/data-providers/src/skillcorner/load.ts:268](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/load.ts#L268) ## Extends * [`SkillCornerLoadOptions`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerLoadOptions) ## Properties | Property | Modifier | Type | Description | Inherited from | Defined in | | -------------------------------------------- | ---------- | -------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | | `baseUrl?` | `readonly` | `string` | Override for a mirror or a local copy of the repository's `data` dir. | [`SkillCornerLoadOptions`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerLoadOptions).[`baseUrl`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerLoadOptions#property-baseurl) | [packages/data-providers/src/skillcorner/load.ts:51](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/load.ts#L51) | | `fetch?` | `readonly` | \{ (`input`, `init?`): `Promise`\<`Response`>; (`input`, `init?`): `Promise`\<`Response`>; } | Fetch implementation to use instead of the global one. Injecting is how this package's own tests avoid touching the network, and it's the hook for a Next.js caching wrapper or a Node agent with a proxy configured. | [`SkillCornerLoadOptions`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerLoadOptions).[`fetch`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerLoadOptions#property-fetch) | [packages/data-providers/src/fetch-json.ts:10](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/fetch-json.ts#L10) | | `fromFrame` | `readonly` | `number` | First frame number wanted (inclusive). | - | [packages/data-providers/src/skillcorner/load.ts:270](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/load.ts#L270) | | `lfsBaseUrl?` | `readonly` | `string` | Override for the LFS host serving tracking files. | [`SkillCornerLoadOptions`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerLoadOptions).[`lfsBaseUrl`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerLoadOptions#property-lfsbaseurl) | [packages/data-providers/src/skillcorner/load.ts:53](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/load.ts#L53) | | `signal?` | `readonly` | `AbortSignal` | Forwarded to the underlying request, so callers can cancel a slow load. | [`SkillCornerLoadOptions`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerLoadOptions).[`signal`](/docs/api/data-providers/skillcorner/interfaces/SkillCornerLoadOptions#property-signal) | [packages/data-providers/src/fetch-json.ts:12](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/fetch-json.ts#L12) | | `toFrame` | `readonly` | `number` | Last frame number wanted (inclusive). | - | [packages/data-providers/src/skillcorner/load.ts:272](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/load.ts#L272) | --- # Known Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/type-aliases/Known ```ts type Known = T | string & Record; ``` Defined in: [packages/data-providers/src/skillcorner/types.ts:16](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L16) A literal union that still accepts anything — so editors autocomplete the values SkillCorner actually ships without the type claiming to be exhaustive. `Record` rather than `{}` keeps `no-empty-object-type` quiet. ## Type Parameters | Type Parameter | | ---------------------- | | `T` *extends* `string` | --- # SkillCornerEvent Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/type-aliases/SkillCornerEvent ```ts type SkillCornerEvent = | SkillCornerPlayerPossession | SkillCornerPassingOption | SkillCornerOffBallRun | SkillCornerOnBallEngagement | SkillCornerOtherEvent; ``` Defined in: [packages/data-providers/src/skillcorner/types.ts:280](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L280) The dynamic-events union. Unlike StatsBomb's, this discriminant is **top level**, so `if (event.event_type === "off_ball_run")` narrows natively. The guards in `select.ts` exist anyway, because they also confirm the row really carries what that type implies. --- # SkillCornerEventType Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/type-aliases/SkillCornerEventType ```ts type SkillCornerEventType = Known< | "player_possession" | "passing_option" | "off_ball_run" | "on_ball_engagement">; ``` Defined in: [packages/data-providers/src/skillcorner/types.ts:158](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L158) --- # SkillCornerSide Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/type-aliases/SkillCornerSide ```ts type SkillCornerSide = Known<"left_to_right" | "right_to_left">; ``` Defined in: [packages/data-providers/src/skillcorner/types.ts:19](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/types.ts#L19) Which way a team is attacking, in absolute pitch terms. --- # SKILLCORNER LFS BASE URL Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/variables/SKILLCORNER_LFS_BASE_URL ```ts const SKILLCORNER_LFS_BASE_URL: "https://media.githubusercontent.com/media/SkillCorner/opendata/master/data" = "https://media.githubusercontent.com/media/SkillCorner/opendata/master/data"; ``` Defined in: [packages/data-providers/src/skillcorner/load.ts:46](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/load.ts#L46) Where the **tracking** files live — a different host, deliberately. Tracking files are stored with Git LFS, and `raw.githubusercontent.com` serves an LFS *pointer* for those (a \~130-byte text stub naming an oid), not the data. The real bytes come from the `media.` host. This is not a typo: parsing a match's tracking from the raw host fails with "not valid JSON" on a file that looks fine in the browser, which is a miserable thing to debug, so the two are separate constants. --- # SKILLCORNER OPEN DATA BASE URL Source: https://www.pitchkitjs.com/docs/api/data-providers/skillcorner/variables/SKILLCORNER_OPEN_DATA_BASE_URL ```ts const SKILLCORNER_OPEN_DATA_BASE_URL: "https://raw.githubusercontent.com/SkillCorner/opendata/master/data" = "https://raw.githubusercontent.com/SkillCorner/opendata/master/data"; ``` Defined in: [packages/data-providers/src/skillcorner/load.ts:33](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/skillcorner/load.ts#L33) Where the small files live. --- # actorIn() Source: https://www.pitchkitjs.com/docs/api/data-providers/statsbomb/functions/actorIn ```ts function actorIn(frame): | StatsBombThreeSixtyPlayer | undefined; ``` Defined in: [packages/data-providers/src/statsbomb/select.ts:125](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/select.ts#L125) The player who performed the frame's event — undefined only for malformed data, since StatsBomb always marks exactly one actor per frame. ## Parameters | Parameter | Type | | --------- | ---------------------------------------------------------------------------------------------------- | | `frame` | [`StatsBombThreeSixtyFrame`](/docs/api/data-providers/statsbomb/interfaces/StatsBombThreeSixtyFrame) | ## Returns \| [`StatsBombThreeSixtyPlayer`](/docs/api/data-providers/statsbomb/interfaces/StatsBombThreeSixtyPlayer) \| `undefined` --- # carries() Source: https://www.pitchkitjs.com/docs/api/data-providers/statsbomb/functions/carries ```ts function carries(events): StatsBombCarry[]; ``` Defined in: [packages/data-providers/src/statsbomb/select.ts:74](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/select.ts#L74) Every carry in the feed, narrowed. ## Parameters | Parameter | Type | | --------- | ---------------------------------------------------------------------------------------------- | | `events` | readonly [`StatsBombEvent`](/docs/api/data-providers/statsbomb/type-aliases/StatsBombEvent)\[] | ## Returns [`StatsBombCarry`](/docs/api/data-providers/statsbomb/interfaces/StatsBombCarry)\[] --- # fetchCompetitions() Source: https://www.pitchkitjs.com/docs/api/data-providers/statsbomb/functions/fetchCompetitions ```ts function fetchCompetitions(options?): Promise; ``` Defined in: [packages/data-providers/src/statsbomb/load.ts:93](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/load.ts#L93) Every competition-and-season pair available in open data (80 of them at the time of writing). Each row pairs a `competition_id` with a `season_id`; both are needed to list that season's matches. ## Parameters | Parameter | Type | | --------- | -------------------------------------------------------------------------------------------- | | `options` | [`StatsBombLoadOptions`](/docs/api/data-providers/statsbomb/interfaces/StatsBombLoadOptions) | ## Returns `Promise`\<[`StatsBombCompetition`](/docs/api/data-providers/statsbomb/interfaces/StatsBombCompetition)\[]> --- # fetchLineups() Source: https://www.pitchkitjs.com/docs/api/data-providers/statsbomb/functions/fetchLineups ```ts function fetchLineups(matchId, options?): Promise; ``` Defined in: [packages/data-providers/src/statsbomb/load.ts:122](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/load.ts#L122) Both teams' lineups for one match. ## Parameters | Parameter | Type | | --------- | -------------------------------------------------------------------------------------------- | | `matchId` | `number` | | `options` | [`StatsBombLoadOptions`](/docs/api/data-providers/statsbomb/interfaces/StatsBombLoadOptions) | ## Returns `Promise`\<[`StatsBombLineup`](/docs/api/data-providers/statsbomb/interfaces/StatsBombLineup)\[]> --- # fetchMatchEvents() Source: https://www.pitchkitjs.com/docs/api/data-providers/statsbomb/functions/fetchMatchEvents ```ts function fetchMatchEvents(matchId, options?): Promise; ``` Defined in: [packages/data-providers/src/statsbomb/load.ts:114](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/load.ts#L114) Every event in one match. These files are large — a typical match is around 3 MB — so prefer fetching once and caching, and expect a visible wait on a cold load. ## Parameters | Parameter | Type | | --------- | -------------------------------------------------------------------------------------------- | | `matchId` | `number` | | `options` | [`StatsBombLoadOptions`](/docs/api/data-providers/statsbomb/interfaces/StatsBombLoadOptions) | ## Returns `Promise`\<[`StatsBombEvent`](/docs/api/data-providers/statsbomb/type-aliases/StatsBombEvent)\[]> --- # fetchMatchThreeSixty() Source: https://www.pitchkitjs.com/docs/api/data-providers/statsbomb/functions/fetchMatchThreeSixty ```ts function fetchMatchThreeSixty(matchId, options?): Promise; ``` Defined in: [packages/data-providers/src/statsbomb/load.ts:142](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/load.ts#L142) Every 360 tracking frame for one match. Bigger than the events file for the same match — typically 5-7 MB — and only exists for matches StatsBomb has tracked, which most haven't. Check `StatsBombMatch.match_status_360 === "available"` before fetching rather than reacting to a 404. ## Parameters | Parameter | Type | | --------- | -------------------------------------------------------------------------------------------- | | `matchId` | `number` | | `options` | [`StatsBombLoadOptions`](/docs/api/data-providers/statsbomb/interfaces/StatsBombLoadOptions) | ## Returns `Promise`\<[`StatsBombThreeSixtyFrame`](/docs/api/data-providers/statsbomb/interfaces/StatsBombThreeSixtyFrame)\[]> --- # fetchMatches() Source: https://www.pitchkitjs.com/docs/api/data-providers/statsbomb/functions/fetchMatches ```ts function fetchMatches( competitionId, seasonId, options? ): Promise; ``` Defined in: [packages/data-providers/src/statsbomb/load.ts:100](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/load.ts#L100) Every match in one season of one competition. ## Parameters | Parameter | Type | | --------------- | -------------------------------------------------------------------------------------------- | | `competitionId` | `number` | | `seasonId` | `number` | | `options` | [`StatsBombLoadOptions`](/docs/api/data-providers/statsbomb/interfaces/StatsBombLoadOptions) | ## Returns `Promise`\<[`StatsBombMatch`](/docs/api/data-providers/statsbomb/interfaces/StatsBombMatch)\[]> --- # indexThreeSixtyByEvent() Source: https://www.pitchkitjs.com/docs/api/data-providers/statsbomb/functions/indexThreeSixtyByEvent ```ts function indexThreeSixtyByEvent(frames): Map; ``` Defined in: [packages/data-providers/src/statsbomb/select.ts:105](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/select.ts#L105) Join 360 frames to the events they belong to — `frame.event_uuid` equals the matching `StatsBombEvent.id`. Build this once with the frames array and reuse it via `.get(event.id)`; that's far cheaper than `.find()`-ing the frames array per event when scrubbing through a whole match's worth of them. ```ts const frames = indexThreeSixtyByEvent(await fetchMatchThreeSixty(matchId)); const frame = frames.get(event.id); // undefined if this event has no 360 coverage ``` ## Parameters | Parameter | Type | | --------- | ---------------------------------------------------------------------------------------------------------------- | | `frames` | readonly [`StatsBombThreeSixtyFrame`](/docs/api/data-providers/statsbomb/interfaces/StatsBombThreeSixtyFrame)\[] | ## Returns `Map`\<`string`, [`StatsBombThreeSixtyFrame`](/docs/api/data-providers/statsbomb/interfaces/StatsBombThreeSixtyFrame)> --- # isActor() Source: https://www.pitchkitjs.com/docs/api/data-providers/statsbomb/functions/isActor ```ts function isActor(player): boolean; ``` Defined in: [packages/data-providers/src/statsbomb/predicates.ts:114](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/predicates.ts#L114) ## Parameters | Parameter | Type | | --------- | ------------------------------------------------------------------------------------------------------ | | `player` | [`StatsBombThreeSixtyPlayer`](/docs/api/data-providers/statsbomb/interfaces/StatsBombThreeSixtyPlayer) | ## Returns `boolean` --- # isAssist() Source: https://www.pitchkitjs.com/docs/api/data-providers/statsbomb/functions/isAssist ```ts function isAssist(pass): boolean; ``` Defined in: [packages/data-providers/src/statsbomb/predicates.ts:63](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/predicates.ts#L63) A pass that directly assisted a goal. ## Parameters | Parameter | Type | | --------- | ------------------------------------------------------------------------------ | | `pass` | [`StatsBombPass`](/docs/api/data-providers/statsbomb/interfaces/StatsBombPass) | ## Returns `boolean` --- # isCarry() Source: https://www.pitchkitjs.com/docs/api/data-providers/statsbomb/functions/isCarry ```ts function isCarry(event): event is StatsBombCarry; ``` Defined in: [packages/data-providers/src/statsbomb/select.ts:59](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/select.ts#L59) ## Parameters | Parameter | Type | | --------- | ---------------------------------------------------------------------------------- | | `event` | [`StatsBombEvent`](/docs/api/data-providers/statsbomb/type-aliases/StatsBombEvent) | ## Returns `event is StatsBombCarry` --- # isComplete() Source: https://www.pitchkitjs.com/docs/api/data-providers/statsbomb/functions/isComplete ```ts function isComplete(pass): boolean; ``` Defined in: [packages/data-providers/src/statsbomb/predicates.ts:33](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/predicates.ts#L33) Whether a pass found its target. StatsBomb encodes a completed pass as the **absence** of `pass.outcome` rather than as an outcome value, which is the single most common way to get pass numbers wrong. (In match 15946, 984 of 1163 passes have no `outcome` key at all.) ## Parameters | Parameter | Type | | --------- | ------------------------------------------------------------------------------ | | `pass` | [`StatsBombPass`](/docs/api/data-providers/statsbomb/interfaces/StatsBombPass) | ## Returns `boolean` --- # isCorner() Source: https://www.pitchkitjs.com/docs/api/data-providers/statsbomb/functions/isCorner ```ts function isCorner(pass): boolean; ``` Defined in: [packages/data-providers/src/statsbomb/predicates.ts:37](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/predicates.ts#L37) ## Parameters | Parameter | Type | | --------- | ------------------------------------------------------------------------------ | | `pass` | [`StatsBombPass`](/docs/api/data-providers/statsbomb/interfaces/StatsBombPass) | ## Returns `boolean` --- # isCross() Source: https://www.pitchkitjs.com/docs/api/data-providers/statsbomb/functions/isCross ```ts function isCross(pass): boolean; ``` Defined in: [packages/data-providers/src/statsbomb/predicates.ts:49](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/predicates.ts#L49) ## Parameters | Parameter | Type | | --------- | ------------------------------------------------------------------------------ | | `pass` | [`StatsBombPass`](/docs/api/data-providers/statsbomb/interfaces/StatsBombPass) | ## Returns `boolean` --- # isFreeKick() Source: https://www.pitchkitjs.com/docs/api/data-providers/statsbomb/functions/isFreeKick ```ts function isFreeKick(pass): boolean; ``` Defined in: [packages/data-providers/src/statsbomb/predicates.ts:41](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/predicates.ts#L41) ## Parameters | Parameter | Type | | --------- | ------------------------------------------------------------------------------ | | `pass` | [`StatsBombPass`](/docs/api/data-providers/statsbomb/interfaces/StatsBombPass) | ## Returns `boolean` --- # isGoal() Source: https://www.pitchkitjs.com/docs/api/data-providers/statsbomb/functions/isGoal ```ts function isGoal(shot): boolean; ``` Defined in: [packages/data-providers/src/statsbomb/predicates.ts:81](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/predicates.ts#L81) ## Parameters | Parameter | Type | | --------- | ------------------------------------------------------------------------------ | | `shot` | [`StatsBombShot`](/docs/api/data-providers/statsbomb/interfaces/StatsBombShot) | ## Returns `boolean` --- # isKeeper() Source: https://www.pitchkitjs.com/docs/api/data-providers/statsbomb/functions/isKeeper ```ts function isKeeper(player): boolean; ``` Defined in: [packages/data-providers/src/statsbomb/predicates.ts:118](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/predicates.ts#L118) ## Parameters | Parameter | Type | | --------- | ------------------------------------------------------------------------------------------------------ | | `player` | [`StatsBombThreeSixtyPlayer`](/docs/api/data-providers/statsbomb/interfaces/StatsBombThreeSixtyPlayer) | ## Returns `boolean` --- # isKeyPass() Source: https://www.pitchkitjs.com/docs/api/data-providers/statsbomb/functions/isKeyPass ```ts function isKeyPass(pass): boolean; ``` Defined in: [packages/data-providers/src/statsbomb/predicates.ts:68](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/predicates.ts#L68) A pass that led to a shot, scored or not. ## Parameters | Parameter | Type | | --------- | ------------------------------------------------------------------------------ | | `pass` | [`StatsBombPass`](/docs/api/data-providers/statsbomb/interfaces/StatsBombPass) | ## Returns `boolean` --- # isOnTarget() Source: https://www.pitchkitjs.com/docs/api/data-providers/statsbomb/functions/isOnTarget ```ts function isOnTarget(shot): boolean; ``` Defined in: [packages/data-providers/src/statsbomb/predicates.ts:95](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/predicates.ts#L95) Whether a shot was heading in. `"Saved Off T"` is deliberately excluded: it records a save on a shot that was going wide, which is a save but not a shot on target. ## Parameters | Parameter | Type | | --------- | ------------------------------------------------------------------------------ | | `shot` | [`StatsBombShot`](/docs/api/data-providers/statsbomb/interfaces/StatsBombShot) | ## Returns `boolean` --- # isOpponent() Source: https://www.pitchkitjs.com/docs/api/data-providers/statsbomb/functions/isOpponent ```ts function isOpponent(player): boolean; ``` Defined in: [packages/data-providers/src/statsbomb/predicates.ts:110](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/predicates.ts#L110) ## Parameters | Parameter | Type | | --------- | ------------------------------------------------------------------------------------------------------ | | `player` | [`StatsBombThreeSixtyPlayer`](/docs/api/data-providers/statsbomb/interfaces/StatsBombThreeSixtyPlayer) | ## Returns `boolean` --- # isPass() Source: https://www.pitchkitjs.com/docs/api/data-providers/statsbomb/functions/isPass ```ts function isPass(event): event is StatsBombPass; ``` Defined in: [packages/data-providers/src/statsbomb/select.ts:55](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/select.ts#L55) ## Parameters | Parameter | Type | | --------- | ---------------------------------------------------------------------------------- | | `event` | [`StatsBombEvent`](/docs/api/data-providers/statsbomb/type-aliases/StatsBombEvent) | ## Returns `event is StatsBombPass` --- # isPenalty() Source: https://www.pitchkitjs.com/docs/api/data-providers/statsbomb/functions/isPenalty ```ts function isPenalty(shot): boolean; ``` Defined in: [packages/data-providers/src/statsbomb/predicates.ts:85](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/predicates.ts#L85) ## Parameters | Parameter | Type | | --------- | ------------------------------------------------------------------------------ | | `shot` | [`StatsBombShot`](/docs/api/data-providers/statsbomb/interfaces/StatsBombShot) | ## Returns `boolean` --- # isSetPiece() Source: https://www.pitchkitjs.com/docs/api/data-providers/statsbomb/functions/isSetPiece ```ts function isSetPiece(event): boolean; ``` Defined in: [packages/data-providers/src/statsbomb/predicates.ts:73](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/predicates.ts#L73) Whether a pass or shot restarted play rather than coming from open play. ## Parameters | Parameter | Type | | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `event` | \| [`StatsBombShot`](/docs/api/data-providers/statsbomb/interfaces/StatsBombShot) \| [`StatsBombPass`](/docs/api/data-providers/statsbomb/interfaces/StatsBombPass) | ## Returns `boolean` --- # isShot() Source: https://www.pitchkitjs.com/docs/api/data-providers/statsbomb/functions/isShot ```ts function isShot(event): event is StatsBombShot; ``` Defined in: [packages/data-providers/src/statsbomb/select.ts:51](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/select.ts#L51) ## Parameters | Parameter | Type | | --------- | ---------------------------------------------------------------------------------- | | `event` | [`StatsBombEvent`](/docs/api/data-providers/statsbomb/type-aliases/StatsBombEvent) | ## Returns `event is StatsBombShot` --- # isSwitch() Source: https://www.pitchkitjs.com/docs/api/data-providers/statsbomb/functions/isSwitch ```ts function isSwitch(pass): boolean; ``` Defined in: [packages/data-providers/src/statsbomb/predicates.ts:58](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/predicates.ts#L58) A pass that switched play from one flank to the other. ## Parameters | Parameter | Type | | --------- | ------------------------------------------------------------------------------ | | `pass` | [`StatsBombPass`](/docs/api/data-providers/statsbomb/interfaces/StatsBombPass) | ## Returns `boolean` --- # isTeammate() Source: https://www.pitchkitjs.com/docs/api/data-providers/statsbomb/functions/isTeammate ```ts function isTeammate(player): boolean; ``` Defined in: [packages/data-providers/src/statsbomb/predicates.ts:106](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/predicates.ts#L106) 360 freeze-frame predicates. `teammate` is already boolean, so `isOpponent` is its negation — read as "not on the acting player's side", not "unknown team": a 360 frame only ever tracks the 22 players actually on the pitch. ## Parameters | Parameter | Type | | --------- | ------------------------------------------------------------------------------------------------------ | | `player` | [`StatsBombThreeSixtyPlayer`](/docs/api/data-providers/statsbomb/interfaces/StatsBombThreeSixtyPlayer) | ## Returns `boolean` --- # isThroughBall() Source: https://www.pitchkitjs.com/docs/api/data-providers/statsbomb/functions/isThroughBall ```ts function isThroughBall(pass): boolean; ``` Defined in: [packages/data-providers/src/statsbomb/predicates.ts:53](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/predicates.ts#L53) ## Parameters | Parameter | Type | | --------- | ------------------------------------------------------------------------------ | | `pass` | [`StatsBombPass`](/docs/api/data-providers/statsbomb/interfaces/StatsBombPass) | ## Returns `boolean` --- # isThrowIn() Source: https://www.pitchkitjs.com/docs/api/data-providers/statsbomb/functions/isThrowIn ```ts function isThrowIn(pass): boolean; ``` Defined in: [packages/data-providers/src/statsbomb/predicates.ts:45](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/predicates.ts#L45) ## Parameters | Parameter | Type | | --------- | ------------------------------------------------------------------------------ | | `pass` | [`StatsBombPass`](/docs/api/data-providers/statsbomb/interfaces/StatsBombPass) | ## Returns `boolean` --- # keeperIn() Source: https://www.pitchkitjs.com/docs/api/data-providers/statsbomb/functions/keeperIn ```ts function keeperIn(frame): | StatsBombThreeSixtyPlayer | undefined; ``` Defined in: [packages/data-providers/src/statsbomb/select.ts:130](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/select.ts#L130) The tracked goalkeeper in this frame, if the camera could see one. ## Parameters | Parameter | Type | | --------- | ---------------------------------------------------------------------------------------------------- | | `frame` | [`StatsBombThreeSixtyFrame`](/docs/api/data-providers/statsbomb/interfaces/StatsBombThreeSixtyFrame) | ## Returns \| [`StatsBombThreeSixtyPlayer`](/docs/api/data-providers/statsbomb/interfaces/StatsBombThreeSixtyPlayer) \| `undefined` --- # loadCompetitions() Source: https://www.pitchkitjs.com/docs/api/data-providers/statsbomb/functions/loadCompetitions ```ts function loadCompetitions(url, options?): Promise; ``` Defined in: [packages/data-providers/src/statsbomb/load.ts:63](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/load.ts#L63) Fetch and parse a competitions file from any URL. ## Parameters | Parameter | Type | | ---------- | ---------------------------------------------------------------------- | | `url` | `string` | | `options?` | [`LoadOptions`](/docs/api/data-providers/index/interfaces/LoadOptions) | ## Returns `Promise`\<[`StatsBombCompetition`](/docs/api/data-providers/statsbomb/interfaces/StatsBombCompetition)\[]> --- # loadEvents() Source: https://www.pitchkitjs.com/docs/api/data-providers/statsbomb/functions/loadEvents ```ts function loadEvents(url, options?): Promise; ``` Defined in: [packages/data-providers/src/statsbomb/load.ts:58](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/load.ts#L58) Fetch and parse an events file from any URL. ## Parameters | Parameter | Type | | ---------- | ---------------------------------------------------------------------- | | `url` | `string` | | `options?` | [`LoadOptions`](/docs/api/data-providers/index/interfaces/LoadOptions) | ## Returns `Promise`\<[`StatsBombEvent`](/docs/api/data-providers/statsbomb/type-aliases/StatsBombEvent)\[]> --- # loadLineups() Source: https://www.pitchkitjs.com/docs/api/data-providers/statsbomb/functions/loadLineups ```ts function loadLineups(url, options?): Promise; ``` Defined in: [packages/data-providers/src/statsbomb/load.ts:76](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/load.ts#L76) Fetch and parse a lineups file from any URL. ## Parameters | Parameter | Type | | ---------- | ---------------------------------------------------------------------- | | `url` | `string` | | `options?` | [`LoadOptions`](/docs/api/data-providers/index/interfaces/LoadOptions) | ## Returns `Promise`\<[`StatsBombLineup`](/docs/api/data-providers/statsbomb/interfaces/StatsBombLineup)\[]> --- # loadMatches() Source: https://www.pitchkitjs.com/docs/api/data-providers/statsbomb/functions/loadMatches ```ts function loadMatches(url, options?): Promise; ``` Defined in: [packages/data-providers/src/statsbomb/load.ts:71](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/load.ts#L71) Fetch and parse a matches file from any URL. ## Parameters | Parameter | Type | | ---------- | ---------------------------------------------------------------------- | | `url` | `string` | | `options?` | [`LoadOptions`](/docs/api/data-providers/index/interfaces/LoadOptions) | ## Returns `Promise`\<[`StatsBombMatch`](/docs/api/data-providers/statsbomb/interfaces/StatsBombMatch)\[]> --- # loadThreeSixty() Source: https://www.pitchkitjs.com/docs/api/data-providers/statsbomb/functions/loadThreeSixty ```ts function loadThreeSixty(url, options?): Promise; ``` Defined in: [packages/data-providers/src/statsbomb/load.ts:81](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/load.ts#L81) Fetch and parse a 360 file from any URL. ## Parameters | Parameter | Type | | ---------- | ---------------------------------------------------------------------- | | `url` | `string` | | `options?` | [`LoadOptions`](/docs/api/data-providers/index/interfaces/LoadOptions) | ## Returns `Promise`\<[`StatsBombThreeSixtyFrame`](/docs/api/data-providers/statsbomb/interfaces/StatsBombThreeSixtyFrame)\[]> --- # matchEventsUrl() Source: https://www.pitchkitjs.com/docs/api/data-providers/statsbomb/functions/matchEventsUrl ```ts function matchEventsUrl(matchId, options?): string; ``` Defined in: [packages/data-providers/src/statsbomb/load.ts:53](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/load.ts#L53) The open-data URL of one match's events file. ## Parameters | Parameter | Type | | --------- | -------------------------------------------------------------------------------------------- | | `matchId` | `number` | | `options` | [`StatsBombLoadOptions`](/docs/api/data-providers/statsbomb/interfaces/StatsBombLoadOptions) | ## Returns `string` --- # matchThreeSixtyUrl() Source: https://www.pitchkitjs.com/docs/api/data-providers/statsbomb/functions/matchThreeSixtyUrl ```ts function matchThreeSixtyUrl(matchId, options?): string; ``` Defined in: [packages/data-providers/src/statsbomb/load.ts:130](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/load.ts#L130) The open-data URL of one match's 360 file. ## Parameters | Parameter | Type | | --------- | -------------------------------------------------------------------------------------------- | | `matchId` | `number` | | `options` | [`StatsBombLoadOptions`](/docs/api/data-providers/statsbomb/interfaces/StatsBombLoadOptions) | ## Returns `string` --- # ofType() Source: https://www.pitchkitjs.com/docs/api/data-providers/statsbomb/functions/ofType ```ts function ofType(events, typeName): StatsBombGenericEvent[]; ``` Defined in: [packages/data-providers/src/statsbomb/select.ts:86](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/select.ts#L86) Escape hatch for the event types this package doesn't model explicitly — `ofType(events, "Duel")`, `ofType(events, "Goal Keeper")`, and so on. The result is typed as a generic event, whose index signature reaches the type-specific sub-object (`duel`, `goalkeeper`, ...) as `unknown`. Nothing in a feed is ever unreachable; it just isn't typed for you. ## Parameters | Parameter | Type | | ---------- | ---------------------------------------------------------------------------------------------- | | `events` | readonly [`StatsBombEvent`](/docs/api/data-providers/statsbomb/type-aliases/StatsBombEvent)\[] | | `typeName` | `string` | ## Returns [`StatsBombGenericEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombGenericEvent)\[] --- # opponentsIn() Source: https://www.pitchkitjs.com/docs/api/data-providers/statsbomb/functions/opponentsIn ```ts function opponentsIn(frame): StatsBombThreeSixtyPlayer[]; ``` Defined in: [packages/data-providers/src/statsbomb/select.ts:117](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/select.ts#L117) Every tracked player on the other side. ## Parameters | Parameter | Type | | --------- | ---------------------------------------------------------------------------------------------------- | | `frame` | [`StatsBombThreeSixtyFrame`](/docs/api/data-providers/statsbomb/interfaces/StatsBombThreeSixtyFrame) | ## Returns [`StatsBombThreeSixtyPlayer`](/docs/api/data-providers/statsbomb/interfaces/StatsBombThreeSixtyPlayer)\[] --- # parseCompetitions() Source: https://www.pitchkitjs.com/docs/api/data-providers/statsbomb/functions/parseCompetitions ```ts function parseCompetitions(json): StatsBombCompetition[]; ``` Defined in: [packages/data-providers/src/statsbomb/parse.ts:107](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/parse.ts#L107) Parse `competitions.json`. Rows are competition **and season** pairs, so the same competition appears once per season of it that is available. ## Parameters | Parameter | Type | | --------- | --------- | | `json` | `unknown` | ## Returns [`StatsBombCompetition`](/docs/api/data-providers/statsbomb/interfaces/StatsBombCompetition)\[] --- # parseEvents() Source: https://www.pitchkitjs.com/docs/api/data-providers/statsbomb/functions/parseEvents ```ts function parseEvents(json): StatsBombEvent[]; ``` Defined in: [packages/data-providers/src/statsbomb/parse.ts:68](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/parse.ts#L68) Parse a match's events file. Every event is returned as StatsBomb wrote it, **spread** rather than rebuilt — so fields this package doesn't model (and ones StatsBomb adds later) survive untouched. The only additions are the lifted coordinates: `x`/`y` from `location`, and `endX`/`endY`/`endZ` from the `end_location` of a shot, pass or carry. Narrowing the returned union goes through the guards — `shots(events)`, `isShot(event)` — **not** through `event.type.name === "Shot"`. TypeScript only narrows on top-level literal discriminants, and StatsBomb's discriminant is nested one level down inside `type`, so a hand-rolled comparison runs correctly but fails to typecheck. ## Parameters | Parameter | Type | | --------- | --------- | | `json` | `unknown` | ## Returns [`StatsBombEvent`](/docs/api/data-providers/statsbomb/type-aliases/StatsBombEvent)\[] --- # parseLineups() Source: https://www.pitchkitjs.com/docs/api/data-providers/statsbomb/functions/parseLineups ```ts function parseLineups(json): StatsBombLineup[]; ``` Defined in: [packages/data-providers/src/statsbomb/parse.ts:135](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/parse.ts#L135) Parse a match's `lineups/{match_id}.json` file (one entry per team). ## Parameters | Parameter | Type | | --------- | --------- | | `json` | `unknown` | ## Returns [`StatsBombLineup`](/docs/api/data-providers/statsbomb/interfaces/StatsBombLineup)\[] --- # parseMatches() Source: https://www.pitchkitjs.com/docs/api/data-providers/statsbomb/functions/parseMatches ```ts function parseMatches(json): StatsBombMatch[]; ``` Defined in: [packages/data-providers/src/statsbomb/parse.ts:121](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/parse.ts#L121) Parse a `matches/{competition_id}/{season_id}.json` file. ## Parameters | Parameter | Type | | --------- | --------- | | `json` | `unknown` | ## Returns [`StatsBombMatch`](/docs/api/data-providers/statsbomb/interfaces/StatsBombMatch)\[] --- # parseThreeSixty() Source: https://www.pitchkitjs.com/docs/api/data-providers/statsbomb/functions/parseThreeSixty ```ts function parseThreeSixty(json): StatsBombThreeSixtyFrame[]; ``` Defined in: [packages/data-providers/src/statsbomb/parse.ts:157](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/parse.ts#L157) Parse a match's `three-sixty/{match_id}.json` file — StatsBomb's optical tracking data. Same shape of guarantee as `parseEvents`: every frame, and every player within it, is **spread** rather than rebuilt, so nothing this package doesn't model is lost. The only addition is `x`/`y` lifted from each tracked player's `location` pair. ## Parameters | Parameter | Type | | --------- | --------- | | `json` | `unknown` | ## Returns [`StatsBombThreeSixtyFrame`](/docs/api/data-providers/statsbomb/interfaces/StatsBombThreeSixtyFrame)\[] --- # passes() Source: https://www.pitchkitjs.com/docs/api/data-providers/statsbomb/functions/passes ```ts function passes(events): StatsBombPass[]; ``` Defined in: [packages/data-providers/src/statsbomb/select.ts:69](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/select.ts#L69) Every pass in the feed, narrowed — completed and not. See `isComplete`. ## Parameters | Parameter | Type | | --------- | ---------------------------------------------------------------------------------------------- | | `events` | readonly [`StatsBombEvent`](/docs/api/data-providers/statsbomb/type-aliases/StatsBombEvent)\[] | ## Returns [`StatsBombPass`](/docs/api/data-providers/statsbomb/interfaces/StatsBombPass)\[] --- # shots() Source: https://www.pitchkitjs.com/docs/api/data-providers/statsbomb/functions/shots ```ts function shots(events): StatsBombShot[]; ``` Defined in: [packages/data-providers/src/statsbomb/select.ts:64](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/select.ts#L64) Every shot in the feed, narrowed. ## Parameters | Parameter | Type | | --------- | ---------------------------------------------------------------------------------------------- | | `events` | readonly [`StatsBombEvent`](/docs/api/data-providers/statsbomb/type-aliases/StatsBombEvent)\[] | ## Returns [`StatsBombShot`](/docs/api/data-providers/statsbomb/interfaces/StatsBombShot)\[] --- # teammatesIn() Source: https://www.pitchkitjs.com/docs/api/data-providers/statsbomb/functions/teammatesIn ```ts function teammatesIn(frame): StatsBombThreeSixtyPlayer[]; ``` Defined in: [packages/data-providers/src/statsbomb/select.ts:112](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/select.ts#L112) Every tracked player on the acting player's side, including the actor. ## Parameters | Parameter | Type | | --------- | ---------------------------------------------------------------------------------------------------- | | `frame` | [`StatsBombThreeSixtyFrame`](/docs/api/data-providers/statsbomb/interfaces/StatsBombThreeSixtyFrame) | ## Returns [`StatsBombThreeSixtyPlayer`](/docs/api/data-providers/statsbomb/interfaces/StatsBombThreeSixtyPlayer)\[] --- # visibleAreaPolygon() Source: https://www.pitchkitjs.com/docs/api/data-providers/statsbomb/functions/visibleAreaPolygon ```ts function visibleAreaPolygon(frame): readonly readonly [number, number][]; ``` Defined in: [packages/data-providers/src/statsbomb/select.ts:138](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/select.ts#L138) `visible_area` as point pairs for a PitchKit `Polygon` layer, rather than StatsBomb's flat `[x0, y0, x1, y1, ...]` encoding. ## Parameters | Parameter | Type | | --------- | ---------------------------------------------------------------------------------------------------- | | `frame` | [`StatsBombThreeSixtyFrame`](/docs/api/data-providers/statsbomb/interfaces/StatsBombThreeSixtyFrame) | ## Returns readonly readonly \[`number`, `number`]\[] --- # StatsBombBaseEvent Source: https://www.pitchkitjs.com/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent Defined in: [packages/data-providers/src/statsbomb/types.ts:75](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L75) Fields present on every event, whatever its type. `x`/`y` are optional here because a handful of event types genuinely carry no `location` — Starting XI, Half Start, Half End, Substitution, Tactical Shift and Bad Behaviour. They are re-declared as **required** on the shot, pass and carry types below, which always have one. ## Extended by * [`StatsBombCarry`](/docs/api/data-providers/statsbomb/interfaces/StatsBombCarry) * [`StatsBombGenericEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombGenericEvent) * [`StatsBombPass`](/docs/api/data-providers/statsbomb/interfaces/StatsBombPass) * [`StatsBombShot`](/docs/api/data-providers/statsbomb/interfaces/StatsBombShot) ## Properties | Property | Modifier | Type | Description | Defined in | | ----------------------------------------------------- | ---------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ | | `counterpress?` | `readonly` | `boolean` | - | [packages/data-providers/src/statsbomb/types.ts:92](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L92) | | `duration?` | `readonly` | `number` | - | [packages/data-providers/src/statsbomb/types.ts:90](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L90) | | `id` | `readonly` | `string` | - | [packages/data-providers/src/statsbomb/types.ts:76](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L76) | | `index` | `readonly` | `number` | - | [packages/data-providers/src/statsbomb/types.ts:77](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L77) | | `location?` | `readonly` | readonly `number`\[] | - | [packages/data-providers/src/statsbomb/types.ts:89](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L89) | | `minute` | `readonly` | `number` | - | [packages/data-providers/src/statsbomb/types.ts:80](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L80) | | `off_camera?` | `readonly` | `boolean` | - | [packages/data-providers/src/statsbomb/types.ts:93](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L93) | | `out?` | `readonly` | `boolean` | - | [packages/data-providers/src/statsbomb/types.ts:94](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L94) | | `period` | `readonly` | `number` | - | [packages/data-providers/src/statsbomb/types.ts:78](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L78) | | `play_pattern` | `readonly` | [`StatsBombRef`](/docs/api/data-providers/statsbomb/interfaces/StatsBombRef)\<[`PlayPattern`](/docs/api/data-providers/statsbomb/type-aliases/PlayPattern)> | - | [packages/data-providers/src/statsbomb/types.ts:85](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L85) | | `player?` | `readonly` | [`StatsBombRef`](/docs/api/data-providers/statsbomb/interfaces/StatsBombRef)\<`string`> | - | [packages/data-providers/src/statsbomb/types.ts:87](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L87) | | `position?` | `readonly` | [`StatsBombRef`](/docs/api/data-providers/statsbomb/interfaces/StatsBombRef)\<`string`> | - | [packages/data-providers/src/statsbomb/types.ts:88](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L88) | | `possession` | `readonly` | `number` | - | [packages/data-providers/src/statsbomb/types.ts:83](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L83) | | `possession_team` | `readonly` | [`StatsBombRef`](/docs/api/data-providers/statsbomb/interfaces/StatsBombRef) | - | [packages/data-providers/src/statsbomb/types.ts:84](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L84) | | `related_events?` | `readonly` | readonly `string`\[] | - | [packages/data-providers/src/statsbomb/types.ts:95](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L95) | | `second` | `readonly` | `number` | - | [packages/data-providers/src/statsbomb/types.ts:81](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L81) | | `team` | `readonly` | [`StatsBombRef`](/docs/api/data-providers/statsbomb/interfaces/StatsBombRef) | - | [packages/data-providers/src/statsbomb/types.ts:86](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L86) | | `timestamp` | `readonly` | `string` | - | [packages/data-providers/src/statsbomb/types.ts:79](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L79) | | `type` | `readonly` | [`StatsBombRef`](/docs/api/data-providers/statsbomb/interfaces/StatsBombRef) | - | [packages/data-providers/src/statsbomb/types.ts:82](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L82) | | `under_pressure?` | `readonly` | `boolean` | - | [packages/data-providers/src/statsbomb/types.ts:91](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L91) | | `x?` | `readonly` | `number` | `location[0]`, lifted for direct use as a PitchKit x accessor. | [packages/data-providers/src/statsbomb/types.ts:97](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L97) | | `y?` | `readonly` | `number` | `location[1]`, lifted for direct use as a PitchKit y accessor. | [packages/data-providers/src/statsbomb/types.ts:99](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L99) | --- # StatsBombCarry Source: https://www.pitchkitjs.com/docs/api/data-providers/statsbomb/interfaces/StatsBombCarry Defined in: [packages/data-providers/src/statsbomb/types.ts:175](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L175) Fields present on every event, whatever its type. `x`/`y` are optional here because a handful of event types genuinely carry no `location` — Starting XI, Half Start, Half End, Substitution, Tactical Shift and Bad Behaviour. They are re-declared as **required** on the shot, pass and carry types below, which always have one. ## Extends * [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent) ## Properties | Property | Modifier | Type | Description | Overrides | Inherited from | Defined in | | ----------------------------------------------------- | ---------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | | `carry` | `readonly` | `object` | - | - | - | [packages/data-providers/src/statsbomb/types.ts:182](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L182) | | `carry.end_location` | `readonly` | readonly `number`\[] | - | - | - | [packages/data-providers/src/statsbomb/types.ts:183](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L183) | | `counterpress?` | `readonly` | `boolean` | - | - | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`counterpress`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-counterpress) | [packages/data-providers/src/statsbomb/types.ts:92](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L92) | | `duration?` | `readonly` | `number` | - | - | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`duration`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-duration) | [packages/data-providers/src/statsbomb/types.ts:90](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L90) | | `endX` | `readonly` | `number` | `carry.end_location[0]`. | - | - | [packages/data-providers/src/statsbomb/types.ts:179](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L179) | | `endY` | `readonly` | `number` | `carry.end_location[1]`. | - | - | [packages/data-providers/src/statsbomb/types.ts:181](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L181) | | `id` | `readonly` | `string` | - | - | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`id`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-id) | [packages/data-providers/src/statsbomb/types.ts:76](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L76) | | `index` | `readonly` | `number` | - | - | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`index`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-index) | [packages/data-providers/src/statsbomb/types.ts:77](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L77) | | `location?` | `readonly` | readonly `number`\[] | - | - | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`location`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-location) | [packages/data-providers/src/statsbomb/types.ts:89](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L89) | | `minute` | `readonly` | `number` | - | - | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`minute`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-minute) | [packages/data-providers/src/statsbomb/types.ts:80](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L80) | | `off_camera?` | `readonly` | `boolean` | - | - | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`off_camera`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-off_camera) | [packages/data-providers/src/statsbomb/types.ts:93](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L93) | | `out?` | `readonly` | `boolean` | - | - | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`out`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-out) | [packages/data-providers/src/statsbomb/types.ts:94](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L94) | | `period` | `readonly` | `number` | - | - | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`period`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-period) | [packages/data-providers/src/statsbomb/types.ts:78](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L78) | | `play_pattern` | `readonly` | [`StatsBombRef`](/docs/api/data-providers/statsbomb/interfaces/StatsBombRef)\<[`PlayPattern`](/docs/api/data-providers/statsbomb/type-aliases/PlayPattern)> | - | - | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`play_pattern`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-play_pattern) | [packages/data-providers/src/statsbomb/types.ts:85](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L85) | | `player?` | `readonly` | [`StatsBombRef`](/docs/api/data-providers/statsbomb/interfaces/StatsBombRef)\<`string`> | - | - | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`player`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-player) | [packages/data-providers/src/statsbomb/types.ts:87](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L87) | | `position?` | `readonly` | [`StatsBombRef`](/docs/api/data-providers/statsbomb/interfaces/StatsBombRef)\<`string`> | - | - | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`position`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-position) | [packages/data-providers/src/statsbomb/types.ts:88](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L88) | | `possession` | `readonly` | `number` | - | - | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`possession`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-possession) | [packages/data-providers/src/statsbomb/types.ts:83](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L83) | | `possession_team` | `readonly` | [`StatsBombRef`](/docs/api/data-providers/statsbomb/interfaces/StatsBombRef) | - | - | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`possession_team`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-possession_team) | [packages/data-providers/src/statsbomb/types.ts:84](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L84) | | `related_events?` | `readonly` | readonly `string`\[] | - | - | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`related_events`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-related_events) | [packages/data-providers/src/statsbomb/types.ts:95](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L95) | | `second` | `readonly` | `number` | - | - | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`second`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-second) | [packages/data-providers/src/statsbomb/types.ts:81](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L81) | | `team` | `readonly` | [`StatsBombRef`](/docs/api/data-providers/statsbomb/interfaces/StatsBombRef) | - | - | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`team`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-team) | [packages/data-providers/src/statsbomb/types.ts:86](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L86) | | `timestamp` | `readonly` | `string` | - | - | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`timestamp`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-timestamp) | [packages/data-providers/src/statsbomb/types.ts:79](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L79) | | `type` | `readonly` | [`StatsBombRef`](/docs/api/data-providers/statsbomb/interfaces/StatsBombRef) | - | - | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`type`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-type) | [packages/data-providers/src/statsbomb/types.ts:82](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L82) | | `under_pressure?` | `readonly` | `boolean` | - | - | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`under_pressure`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-under_pressure) | [packages/data-providers/src/statsbomb/types.ts:91](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L91) | | `x` | `readonly` | `number` | `location[0]`, lifted for direct use as a PitchKit x accessor. | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`x`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-x) | - | [packages/data-providers/src/statsbomb/types.ts:176](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L176) | | `y` | `readonly` | `number` | `location[1]`, lifted for direct use as a PitchKit y accessor. | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`y`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-y) | - | [packages/data-providers/src/statsbomb/types.ts:177](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L177) | --- # StatsBombCompetition Source: https://www.pitchkitjs.com/docs/api/data-providers/statsbomb/interfaces/StatsBombCompetition Defined in: [packages/data-providers/src/statsbomb/types.ts:207](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L207) One row of `competitions.json`. Note these are competition **and season** pairs, not competitions — the same competition appears once per season it covers, which is why `fetchMatches` needs both ids. ## Properties | Property | Modifier | Type | Defined in | | ------------------------------------------------------------------------- | ---------- | ------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------- | | `competition_gender` | `readonly` | `string` | [packages/data-providers/src/statsbomb/types.ts:212](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L212) | | `competition_id` | `readonly` | `number` | [packages/data-providers/src/statsbomb/types.ts:208](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L208) | | `competition_international` | `readonly` | `boolean` | [packages/data-providers/src/statsbomb/types.ts:214](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L214) | | `competition_name` | `readonly` | `string` | [packages/data-providers/src/statsbomb/types.ts:211](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L211) | | `competition_youth` | `readonly` | `boolean` | [packages/data-providers/src/statsbomb/types.ts:213](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L213) | | `country_name` | `readonly` | `string` | [packages/data-providers/src/statsbomb/types.ts:210](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L210) | | `match_available?` | `readonly` | `string` \| `null` | [packages/data-providers/src/statsbomb/types.ts:217](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L217) | | `match_available_360?` | `readonly` | `string` \| `null` | [packages/data-providers/src/statsbomb/types.ts:219](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L219) | | `match_updated?` | `readonly` | `string` | [packages/data-providers/src/statsbomb/types.ts:216](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L216) | | `match_updated_360?` | `readonly` | `string` \| `null` | [packages/data-providers/src/statsbomb/types.ts:218](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L218) | | `season_id` | `readonly` | `number` | [packages/data-providers/src/statsbomb/types.ts:209](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L209) | | `season_name` | `readonly` | `string` | [packages/data-providers/src/statsbomb/types.ts:215](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L215) | --- # StatsBombFreezeFramePlayer Source: https://www.pitchkitjs.com/docs/api/data-providers/statsbomb/interfaces/StatsBombFreezeFramePlayer Defined in: [packages/data-providers/src/statsbomb/types.ts:60](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L60) One team-mate or opponent in a shot's freeze frame. ## Properties | Property | Modifier | Type | Defined in | | --------------------------------------- | ---------- | ---------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ | | `location` | `readonly` | readonly `number`\[] | [packages/data-providers/src/statsbomb/types.ts:61](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L61) | | `player` | `readonly` | [`StatsBombRef`](/docs/api/data-providers/statsbomb/interfaces/StatsBombRef) | [packages/data-providers/src/statsbomb/types.ts:62](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L62) | | `position` | `readonly` | [`StatsBombRef`](/docs/api/data-providers/statsbomb/interfaces/StatsBombRef) | [packages/data-providers/src/statsbomb/types.ts:63](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L63) | | `teammate` | `readonly` | `boolean` | [packages/data-providers/src/statsbomb/types.ts:64](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L64) | --- # StatsBombGenericEvent Source: https://www.pitchkitjs.com/docs/api/data-providers/statsbomb/interfaces/StatsBombGenericEvent Defined in: [packages/data-providers/src/statsbomb/types.ts:196](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L196) Every event type this package doesn't model explicitly — Duel, Dribble, Goal Keeper, Pressure, Interception and the rest of StatsBomb's \~20 others. They are not dropped or flattened: the type-specific sub-object is still there under its own key, reachable through the index signature. Typing more of them is additive and non-breaking, so coverage can grow when a real use case asks for it. ## Extends * [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent) ## Indexable ```ts [key: string]: unknown ``` ## Properties | Property | Modifier | Type | Description | Inherited from | Defined in | | ----------------------------------------------------- | ---------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ | | `counterpress?` | `readonly` | `boolean` | - | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`counterpress`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-counterpress) | [packages/data-providers/src/statsbomb/types.ts:92](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L92) | | `duration?` | `readonly` | `number` | - | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`duration`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-duration) | [packages/data-providers/src/statsbomb/types.ts:90](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L90) | | `id` | `readonly` | `string` | - | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`id`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-id) | [packages/data-providers/src/statsbomb/types.ts:76](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L76) | | `index` | `readonly` | `number` | - | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`index`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-index) | [packages/data-providers/src/statsbomb/types.ts:77](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L77) | | `location?` | `readonly` | readonly `number`\[] | - | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`location`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-location) | [packages/data-providers/src/statsbomb/types.ts:89](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L89) | | `minute` | `readonly` | `number` | - | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`minute`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-minute) | [packages/data-providers/src/statsbomb/types.ts:80](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L80) | | `off_camera?` | `readonly` | `boolean` | - | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`off_camera`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-off_camera) | [packages/data-providers/src/statsbomb/types.ts:93](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L93) | | `out?` | `readonly` | `boolean` | - | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`out`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-out) | [packages/data-providers/src/statsbomb/types.ts:94](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L94) | | `period` | `readonly` | `number` | - | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`period`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-period) | [packages/data-providers/src/statsbomb/types.ts:78](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L78) | | `play_pattern` | `readonly` | [`StatsBombRef`](/docs/api/data-providers/statsbomb/interfaces/StatsBombRef)\<[`PlayPattern`](/docs/api/data-providers/statsbomb/type-aliases/PlayPattern)> | - | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`play_pattern`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-play_pattern) | [packages/data-providers/src/statsbomb/types.ts:85](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L85) | | `player?` | `readonly` | [`StatsBombRef`](/docs/api/data-providers/statsbomb/interfaces/StatsBombRef)\<`string`> | - | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`player`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-player) | [packages/data-providers/src/statsbomb/types.ts:87](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L87) | | `position?` | `readonly` | [`StatsBombRef`](/docs/api/data-providers/statsbomb/interfaces/StatsBombRef)\<`string`> | - | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`position`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-position) | [packages/data-providers/src/statsbomb/types.ts:88](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L88) | | `possession` | `readonly` | `number` | - | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`possession`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-possession) | [packages/data-providers/src/statsbomb/types.ts:83](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L83) | | `possession_team` | `readonly` | [`StatsBombRef`](/docs/api/data-providers/statsbomb/interfaces/StatsBombRef) | - | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`possession_team`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-possession_team) | [packages/data-providers/src/statsbomb/types.ts:84](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L84) | | `related_events?` | `readonly` | readonly `string`\[] | - | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`related_events`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-related_events) | [packages/data-providers/src/statsbomb/types.ts:95](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L95) | | `second` | `readonly` | `number` | - | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`second`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-second) | [packages/data-providers/src/statsbomb/types.ts:81](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L81) | | `team` | `readonly` | [`StatsBombRef`](/docs/api/data-providers/statsbomb/interfaces/StatsBombRef) | - | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`team`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-team) | [packages/data-providers/src/statsbomb/types.ts:86](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L86) | | `timestamp` | `readonly` | `string` | - | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`timestamp`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-timestamp) | [packages/data-providers/src/statsbomb/types.ts:79](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L79) | | `type` | `readonly` | [`StatsBombRef`](/docs/api/data-providers/statsbomb/interfaces/StatsBombRef) | - | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`type`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-type) | [packages/data-providers/src/statsbomb/types.ts:82](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L82) | | `under_pressure?` | `readonly` | `boolean` | - | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`under_pressure`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-under_pressure) | [packages/data-providers/src/statsbomb/types.ts:91](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L91) | | `x?` | `readonly` | `number` | `location[0]`, lifted for direct use as a PitchKit x accessor. | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`x`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-x) | [packages/data-providers/src/statsbomb/types.ts:97](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L97) | | `y?` | `readonly` | `number` | `location[1]`, lifted for direct use as a PitchKit y accessor. | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`y`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-y) | [packages/data-providers/src/statsbomb/types.ts:99](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L99) | --- # StatsBombLineup Source: https://www.pitchkitjs.com/docs/api/data-providers/statsbomb/interfaces/StatsBombLineup Defined in: [packages/data-providers/src/statsbomb/types.ts:261](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L261) ## Properties | Property | Modifier | Type | Defined in | | ----------------------------------------- | ---------- | ---------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | | `lineup` | `readonly` | readonly [`StatsBombLineupPlayer`](/docs/api/data-providers/statsbomb/interfaces/StatsBombLineupPlayer)\[] | [packages/data-providers/src/statsbomb/types.ts:264](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L264) | | `team_id` | `readonly` | `number` | [packages/data-providers/src/statsbomb/types.ts:262](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L262) | | `team_name` | `readonly` | `string` | [packages/data-providers/src/statsbomb/types.ts:263](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L263) | --- # StatsBombLineupPlayer Source: https://www.pitchkitjs.com/docs/api/data-providers/statsbomb/interfaces/StatsBombLineupPlayer Defined in: [packages/data-providers/src/statsbomb/types.ts:251](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L251) ## Properties | Property | Modifier | Type | Defined in | | ----------------------------------------------------- | ---------- | --------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | | `cards?` | `readonly` | readonly `unknown`\[] | [packages/data-providers/src/statsbomb/types.ts:257](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L257) | | `country?` | `readonly` | [`StatsBombRef`](/docs/api/data-providers/statsbomb/interfaces/StatsBombRef)\<`string`> | [packages/data-providers/src/statsbomb/types.ts:256](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L256) | | `jersey_number` | `readonly` | `number` | [packages/data-providers/src/statsbomb/types.ts:255](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L255) | | `player_id` | `readonly` | `number` | [packages/data-providers/src/statsbomb/types.ts:252](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L252) | | `player_name` | `readonly` | `string` | [packages/data-providers/src/statsbomb/types.ts:253](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L253) | | `player_nickname` | `readonly` | `string` \| `null` | [packages/data-providers/src/statsbomb/types.ts:254](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L254) | | `positions?` | `readonly` | readonly `unknown`\[] | [packages/data-providers/src/statsbomb/types.ts:258](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L258) | --- # StatsBombLoadOptions Source: https://www.pitchkitjs.com/docs/api/data-providers/statsbomb/interfaces/StatsBombLoadOptions Defined in: [packages/data-providers/src/statsbomb/load.ts:40](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/load.ts#L40) ## Extends * [`LoadOptions`](/docs/api/data-providers/index/interfaces/LoadOptions) ## Properties | Property | Modifier | Type | Description | Inherited from | Defined in | | -------------------------------------- | ---------- | -------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | | `baseUrl?` | `readonly` | `string` | Root to build open-data URLs against. Point it at a mirror, a proxy, or a pinned commit instead of `master`. | - | [packages/data-providers/src/statsbomb/load.ts:45](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/load.ts#L45) | | `fetch?` | `readonly` | \{ (`input`, `init?`): `Promise`\<`Response`>; (`input`, `init?`): `Promise`\<`Response`>; } | Fetch implementation to use instead of the global one. Injecting is how this package's own tests avoid touching the network, and it's the hook for a Next.js caching wrapper or a Node agent with a proxy configured. | [`LoadOptions`](/docs/api/data-providers/index/interfaces/LoadOptions).[`fetch`](/docs/api/data-providers/index/interfaces/LoadOptions#property-fetch) | [packages/data-providers/src/fetch-json.ts:10](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/fetch-json.ts#L10) | | `signal?` | `readonly` | `AbortSignal` | Forwarded to the underlying request, so callers can cancel a slow load. | [`LoadOptions`](/docs/api/data-providers/index/interfaces/LoadOptions).[`signal`](/docs/api/data-providers/index/interfaces/LoadOptions#property-signal) | [packages/data-providers/src/fetch-json.ts:12](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/fetch-json.ts#L12) | --- # StatsBombMatch Source: https://www.pitchkitjs.com/docs/api/data-providers/statsbomb/interfaces/StatsBombMatch Defined in: [packages/data-providers/src/statsbomb/types.ts:222](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L222) ## Properties | Property | Modifier | Type | Description | Defined in | | ---------------------------------------------------------- | ---------- | --------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | | `away_score` | `readonly` | `number` | - | [packages/data-providers/src/statsbomb/types.ts:235](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L235) | | `away_team` | `readonly` | `object` | - | [packages/data-providers/src/statsbomb/types.ts:233](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L233) | | `away_team.away_team_id` | `readonly` | `number` | - | [packages/data-providers/src/statsbomb/types.ts:233](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L233) | | `away_team.away_team_name` | `readonly` | `string` | - | [packages/data-providers/src/statsbomb/types.ts:233](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L233) | | `competition` | `readonly` | `object` | - | [packages/data-providers/src/statsbomb/types.ts:226](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L226) | | `competition.competition_id` | `readonly` | `number` | - | [packages/data-providers/src/statsbomb/types.ts:227](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L227) | | `competition.competition_name` | `readonly` | `string` | - | [packages/data-providers/src/statsbomb/types.ts:229](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L229) | | `competition.country_name` | `readonly` | `string` | - | [packages/data-providers/src/statsbomb/types.ts:228](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L228) | | `competition_stage?` | `readonly` | [`StatsBombRef`](/docs/api/data-providers/statsbomb/interfaces/StatsBombRef)\<`string`> | - | [packages/data-providers/src/statsbomb/types.ts:246](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L246) | | `home_score` | `readonly` | `number` | - | [packages/data-providers/src/statsbomb/types.ts:234](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L234) | | `home_team` | `readonly` | `object` | - | [packages/data-providers/src/statsbomb/types.ts:232](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L232) | | `home_team.home_team_id` | `readonly` | `number` | - | [packages/data-providers/src/statsbomb/types.ts:232](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L232) | | `home_team.home_team_name` | `readonly` | `string` | - | [packages/data-providers/src/statsbomb/types.ts:232](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L232) | | `kick_off?` | `readonly` | `string` | - | [packages/data-providers/src/statsbomb/types.ts:225](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L225) | | `match_date` | `readonly` | `string` | - | [packages/data-providers/src/statsbomb/types.ts:224](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L224) | | `match_id` | `readonly` | `number` | - | [packages/data-providers/src/statsbomb/types.ts:223](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L223) | | `match_status?` | `readonly` | `string` | - | [packages/data-providers/src/statsbomb/types.ts:236](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L236) | | `match_status_360?` | `readonly` | `string` | Whether *this specific match* has 360 tracking data available — `"available"` if `fetchMatchThreeSixty`/`matchThreeSixtyUrl` will resolve. A competition can have 360 data for some of its matches and not others (`StatsBombCompetition.match_available_360` only says the competition has *some* coverage). | [packages/data-providers/src/statsbomb/types.ts:244](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L244) | | `match_week?` | `readonly` | `number` | - | [packages/data-providers/src/statsbomb/types.ts:245](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L245) | | `referee?` | `readonly` | [`StatsBombRef`](/docs/api/data-providers/statsbomb/interfaces/StatsBombRef)\<`string`> | - | [packages/data-providers/src/statsbomb/types.ts:248](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L248) | | `season` | `readonly` | `object` | - | [packages/data-providers/src/statsbomb/types.ts:231](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L231) | | `season.season_id` | `readonly` | `number` | - | [packages/data-providers/src/statsbomb/types.ts:231](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L231) | | `season.season_name` | `readonly` | `string` | - | [packages/data-providers/src/statsbomb/types.ts:231](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L231) | | `stadium?` | `readonly` | [`StatsBombRef`](/docs/api/data-providers/statsbomb/interfaces/StatsBombRef)\<`string`> | - | [packages/data-providers/src/statsbomb/types.ts:247](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L247) | --- # StatsBombPass Source: https://www.pitchkitjs.com/docs/api/data-providers/statsbomb/interfaces/StatsBombPass Defined in: [packages/data-providers/src/statsbomb/types.ts:136](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L136) Fields present on every event, whatever its type. `x`/`y` are optional here because a handful of event types genuinely carry no `location` — Starting XI, Half Start, Half End, Substitution, Tactical Shift and Bad Behaviour. They are re-declared as **required** on the shot, pass and carry types below, which always have one. ## Extends * [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent) ## Properties | Property | Modifier | Type | Description | Overrides | Inherited from | Defined in | | ----------------------------------------------------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | | `counterpress?` | `readonly` | `boolean` | - | - | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`counterpress`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-counterpress) | [packages/data-providers/src/statsbomb/types.ts:92](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L92) | | `duration?` | `readonly` | `number` | - | - | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`duration`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-duration) | [packages/data-providers/src/statsbomb/types.ts:90](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L90) | | `endX` | `readonly` | `number` | `pass.end_location[0]`. | - | - | [packages/data-providers/src/statsbomb/types.ts:140](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L140) | | `endY` | `readonly` | `number` | `pass.end_location[1]`. | - | - | [packages/data-providers/src/statsbomb/types.ts:142](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L142) | | `id` | `readonly` | `string` | - | - | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`id`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-id) | [packages/data-providers/src/statsbomb/types.ts:76](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L76) | | `index` | `readonly` | `number` | - | - | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`index`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-index) | [packages/data-providers/src/statsbomb/types.ts:77](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L77) | | `location?` | `readonly` | readonly `number`\[] | - | - | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`location`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-location) | [packages/data-providers/src/statsbomb/types.ts:89](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L89) | | `minute` | `readonly` | `number` | - | - | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`minute`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-minute) | [packages/data-providers/src/statsbomb/types.ts:80](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L80) | | `off_camera?` | `readonly` | `boolean` | - | - | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`off_camera`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-off_camera) | [packages/data-providers/src/statsbomb/types.ts:93](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L93) | | `out?` | `readonly` | `boolean` | - | - | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`out`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-out) | [packages/data-providers/src/statsbomb/types.ts:94](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L94) | | `pass` | `readonly` | `object` | - | - | - | [packages/data-providers/src/statsbomb/types.ts:143](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L143) | | `pass.aerial_won?` | `readonly` | `boolean` | - | - | - | [packages/data-providers/src/statsbomb/types.ts:167](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L167) | | `pass.angle` | `readonly` | `number` | - | - | - | [packages/data-providers/src/statsbomb/types.ts:146](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L146) | | `pass.assisted_shot_id?` | `readonly` | `string` | - | - | - | [packages/data-providers/src/statsbomb/types.ts:171](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L171) | | `pass.body_part?` | `readonly` | [`StatsBombRef`](/docs/api/data-providers/statsbomb/interfaces/StatsBombRef)\<[`PassBodyPart`](/docs/api/data-providers/statsbomb/type-aliases/PassBodyPart)> | - | - | - | [packages/data-providers/src/statsbomb/types.ts:149](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L149) | | `pass.cross?` | `readonly` | `boolean` | - | - | - | [packages/data-providers/src/statsbomb/types.ts:158](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L158) | | `pass.cut_back?` | `readonly` | `boolean` | - | - | - | [packages/data-providers/src/statsbomb/types.ts:161](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L161) | | `pass.deflected?` | `readonly` | `boolean` | - | - | - | [packages/data-providers/src/statsbomb/types.ts:165](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L165) | | `pass.end_location` | `readonly` | readonly `number`\[] | - | - | - | [packages/data-providers/src/statsbomb/types.ts:144](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L144) | | `pass.goal_assist?` | `readonly` | `boolean` | - | - | - | [packages/data-providers/src/statsbomb/types.ts:169](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L169) | | `pass.height` | `readonly` | [`StatsBombRef`](/docs/api/data-providers/statsbomb/interfaces/StatsBombRef)\<[`PassHeight`](/docs/api/data-providers/statsbomb/type-aliases/PassHeight)> | - | - | - | [packages/data-providers/src/statsbomb/types.ts:147](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L147) | | `pass.inswinging?` | `readonly` | `boolean` | - | - | - | [packages/data-providers/src/statsbomb/types.ts:163](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L163) | | `pass.length` | `readonly` | `number` | - | - | - | [packages/data-providers/src/statsbomb/types.ts:145](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L145) | | `pass.miscommunication?` | `readonly` | `boolean` | - | - | - | [packages/data-providers/src/statsbomb/types.ts:166](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L166) | | `pass.no_touch?` | `readonly` | `boolean` | - | - | - | [packages/data-providers/src/statsbomb/types.ts:168](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L168) | | `pass.outcome?` | `readonly` | [`StatsBombRef`](/docs/api/data-providers/statsbomb/interfaces/StatsBombRef)\<[`PassOutcome`](/docs/api/data-providers/statsbomb/type-aliases/PassOutcome)> | Absent on a completed pass — StatsBomb encodes success as the *lack* of an outcome, not as an outcome value. Use `isComplete(pass)` rather than testing this field directly. | - | - | [packages/data-providers/src/statsbomb/types.ts:157](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L157) | | `pass.outswinging?` | `readonly` | `boolean` | - | - | - | [packages/data-providers/src/statsbomb/types.ts:164](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L164) | | `pass.recipient?` | `readonly` | [`StatsBombRef`](/docs/api/data-providers/statsbomb/interfaces/StatsBombRef)\<`string`> | - | - | - | [packages/data-providers/src/statsbomb/types.ts:148](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L148) | | `pass.shot_assist?` | `readonly` | `boolean` | - | - | - | [packages/data-providers/src/statsbomb/types.ts:170](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L170) | | `pass.straight?` | `readonly` | `boolean` | - | - | - | [packages/data-providers/src/statsbomb/types.ts:162](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L162) | | `pass.switch?` | `readonly` | `boolean` | - | - | - | [packages/data-providers/src/statsbomb/types.ts:160](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L160) | | `pass.technique?` | `readonly` | [`StatsBombRef`](/docs/api/data-providers/statsbomb/interfaces/StatsBombRef)\<`string`> | - | - | - | [packages/data-providers/src/statsbomb/types.ts:151](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L151) | | `pass.through_ball?` | `readonly` | `boolean` | - | - | - | [packages/data-providers/src/statsbomb/types.ts:159](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L159) | | `pass.type?` | `readonly` | [`StatsBombRef`](/docs/api/data-providers/statsbomb/interfaces/StatsBombRef)\<[`PassType`](/docs/api/data-providers/statsbomb/type-aliases/PassType)> | - | - | - | [packages/data-providers/src/statsbomb/types.ts:150](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L150) | | `period` | `readonly` | `number` | - | - | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`period`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-period) | [packages/data-providers/src/statsbomb/types.ts:78](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L78) | | `play_pattern` | `readonly` | [`StatsBombRef`](/docs/api/data-providers/statsbomb/interfaces/StatsBombRef)\<[`PlayPattern`](/docs/api/data-providers/statsbomb/type-aliases/PlayPattern)> | - | - | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`play_pattern`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-play_pattern) | [packages/data-providers/src/statsbomb/types.ts:85](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L85) | | `player?` | `readonly` | [`StatsBombRef`](/docs/api/data-providers/statsbomb/interfaces/StatsBombRef)\<`string`> | - | - | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`player`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-player) | [packages/data-providers/src/statsbomb/types.ts:87](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L87) | | `position?` | `readonly` | [`StatsBombRef`](/docs/api/data-providers/statsbomb/interfaces/StatsBombRef)\<`string`> | - | - | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`position`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-position) | [packages/data-providers/src/statsbomb/types.ts:88](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L88) | | `possession` | `readonly` | `number` | - | - | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`possession`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-possession) | [packages/data-providers/src/statsbomb/types.ts:83](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L83) | | `possession_team` | `readonly` | [`StatsBombRef`](/docs/api/data-providers/statsbomb/interfaces/StatsBombRef) | - | - | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`possession_team`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-possession_team) | [packages/data-providers/src/statsbomb/types.ts:84](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L84) | | `related_events?` | `readonly` | readonly `string`\[] | - | - | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`related_events`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-related_events) | [packages/data-providers/src/statsbomb/types.ts:95](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L95) | | `second` | `readonly` | `number` | - | - | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`second`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-second) | [packages/data-providers/src/statsbomb/types.ts:81](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L81) | | `team` | `readonly` | [`StatsBombRef`](/docs/api/data-providers/statsbomb/interfaces/StatsBombRef) | - | - | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`team`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-team) | [packages/data-providers/src/statsbomb/types.ts:86](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L86) | | `timestamp` | `readonly` | `string` | - | - | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`timestamp`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-timestamp) | [packages/data-providers/src/statsbomb/types.ts:79](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L79) | | `type` | `readonly` | [`StatsBombRef`](/docs/api/data-providers/statsbomb/interfaces/StatsBombRef) | - | - | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`type`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-type) | [packages/data-providers/src/statsbomb/types.ts:82](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L82) | | `under_pressure?` | `readonly` | `boolean` | - | - | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`under_pressure`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-under_pressure) | [packages/data-providers/src/statsbomb/types.ts:91](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L91) | | `x` | `readonly` | `number` | `location[0]`, lifted for direct use as a PitchKit x accessor. | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`x`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-x) | - | [packages/data-providers/src/statsbomb/types.ts:137](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L137) | | `y` | `readonly` | `number` | `location[1]`, lifted for direct use as a PitchKit y accessor. | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`y`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-y) | - | [packages/data-providers/src/statsbomb/types.ts:138](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L138) | --- # StatsBombRef Source: https://www.pitchkitjs.com/docs/api/data-providers/statsbomb/interfaces/StatsBombRef Defined in: [packages/data-providers/src/statsbomb/types.ts:26](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L26) StatsBomb's ubiquitous `{ id, name }` reference pair. ## Type Parameters | Type Parameter | Default type | | -------------------------- | ------------ | | `TName` *extends* `string` | `string` | ## Properties | Property | Modifier | Type | Defined in | | ------------------------------- | ---------- | ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ | | `id` | `readonly` | `number` | [packages/data-providers/src/statsbomb/types.ts:27](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L27) | | `name` | `readonly` | `Known`\<`TName`> | [packages/data-providers/src/statsbomb/types.ts:28](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L28) | --- # StatsBombShot Source: https://www.pitchkitjs.com/docs/api/data-providers/statsbomb/interfaces/StatsBombShot Defined in: [packages/data-providers/src/statsbomb/types.ts:102](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L102) Fields present on every event, whatever its type. `x`/`y` are optional here because a handful of event types genuinely carry no `location` — Starting XI, Half Start, Half End, Substitution, Tactical Shift and Bad Behaviour. They are re-declared as **required** on the shot, pass and carry types below, which always have one. ## Extends * [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent) ## Properties | Property | Modifier | Type | Description | Overrides | Inherited from | Defined in | | ----------------------------------------------------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | | `counterpress?` | `readonly` | `boolean` | - | - | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`counterpress`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-counterpress) | [packages/data-providers/src/statsbomb/types.ts:92](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L92) | | `duration?` | `readonly` | `number` | - | - | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`duration`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-duration) | [packages/data-providers/src/statsbomb/types.ts:90](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L90) | | `endX` | `readonly` | `number` | `shot.end_location[0]`. | - | - | [packages/data-providers/src/statsbomb/types.ts:106](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L106) | | `endY` | `readonly` | `number` | `shot.end_location[1]`. | - | - | [packages/data-providers/src/statsbomb/types.ts:108](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L108) | | `endZ?` | `readonly` | `number` | `shot.end_location[2]` — height above the goal line. Genuinely optional: StatsBomb records a 2-element end location for shots that never left the ground, and a 3-element one otherwise. | - | - | [packages/data-providers/src/statsbomb/types.ts:114](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L114) | | `id` | `readonly` | `string` | - | - | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`id`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-id) | [packages/data-providers/src/statsbomb/types.ts:76](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L76) | | `index` | `readonly` | `number` | - | - | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`index`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-index) | [packages/data-providers/src/statsbomb/types.ts:77](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L77) | | `location?` | `readonly` | readonly `number`\[] | - | - | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`location`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-location) | [packages/data-providers/src/statsbomb/types.ts:89](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L89) | | `minute` | `readonly` | `number` | - | - | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`minute`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-minute) | [packages/data-providers/src/statsbomb/types.ts:80](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L80) | | `off_camera?` | `readonly` | `boolean` | - | - | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`off_camera`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-off_camera) | [packages/data-providers/src/statsbomb/types.ts:93](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L93) | | `out?` | `readonly` | `boolean` | - | - | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`out`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-out) | [packages/data-providers/src/statsbomb/types.ts:94](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L94) | | `period` | `readonly` | `number` | - | - | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`period`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-period) | [packages/data-providers/src/statsbomb/types.ts:78](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L78) | | `play_pattern` | `readonly` | [`StatsBombRef`](/docs/api/data-providers/statsbomb/interfaces/StatsBombRef)\<[`PlayPattern`](/docs/api/data-providers/statsbomb/type-aliases/PlayPattern)> | - | - | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`play_pattern`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-play_pattern) | [packages/data-providers/src/statsbomb/types.ts:85](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L85) | | `player?` | `readonly` | [`StatsBombRef`](/docs/api/data-providers/statsbomb/interfaces/StatsBombRef)\<`string`> | - | - | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`player`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-player) | [packages/data-providers/src/statsbomb/types.ts:87](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L87) | | `position?` | `readonly` | [`StatsBombRef`](/docs/api/data-providers/statsbomb/interfaces/StatsBombRef)\<`string`> | - | - | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`position`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-position) | [packages/data-providers/src/statsbomb/types.ts:88](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L88) | | `possession` | `readonly` | `number` | - | - | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`possession`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-possession) | [packages/data-providers/src/statsbomb/types.ts:83](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L83) | | `possession_team` | `readonly` | [`StatsBombRef`](/docs/api/data-providers/statsbomb/interfaces/StatsBombRef) | - | - | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`possession_team`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-possession_team) | [packages/data-providers/src/statsbomb/types.ts:84](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L84) | | `related_events?` | `readonly` | readonly `string`\[] | - | - | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`related_events`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-related_events) | [packages/data-providers/src/statsbomb/types.ts:95](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L95) | | `second` | `readonly` | `number` | - | - | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`second`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-second) | [packages/data-providers/src/statsbomb/types.ts:81](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L81) | | `shot` | `readonly` | `object` | - | - | - | [packages/data-providers/src/statsbomb/types.ts:115](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L115) | | `shot.aerial_won?` | `readonly` | `boolean` | - | - | - | [packages/data-providers/src/statsbomb/types.ts:125](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L125) | | `shot.body_part` | `readonly` | [`StatsBombRef`](/docs/api/data-providers/statsbomb/interfaces/StatsBombRef)\<[`ShotBodyPart`](/docs/api/data-providers/statsbomb/type-aliases/ShotBodyPart)> | - | - | - | [packages/data-providers/src/statsbomb/types.ts:120](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L120) | | `shot.deflected?` | `readonly` | `boolean` | - | - | - | [packages/data-providers/src/statsbomb/types.ts:126](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L126) | | `shot.end_location` | `readonly` | readonly `number`\[] | - | - | - | [packages/data-providers/src/statsbomb/types.ts:117](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L117) | | `shot.first_time?` | `readonly` | `boolean` | - | - | - | [packages/data-providers/src/statsbomb/types.ts:123](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L123) | | `shot.follows_dribble?` | `readonly` | `boolean` | - | - | - | [packages/data-providers/src/statsbomb/types.ts:128](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L128) | | `shot.freeze_frame?` | `readonly` | readonly [`StatsBombFreezeFramePlayer`](/docs/api/data-providers/statsbomb/interfaces/StatsBombFreezeFramePlayer)\[] | - | - | - | [packages/data-providers/src/statsbomb/types.ts:122](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L122) | | `shot.key_pass_id?` | `readonly` | `string` | - | - | - | [packages/data-providers/src/statsbomb/types.ts:132](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L132) | | `shot.one_on_one?` | `readonly` | `boolean` | - | - | - | [packages/data-providers/src/statsbomb/types.ts:124](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L124) | | `shot.open_goal?` | `readonly` | `boolean` | - | - | - | [packages/data-providers/src/statsbomb/types.ts:127](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L127) | | `shot.outcome` | `readonly` | [`StatsBombRef`](/docs/api/data-providers/statsbomb/interfaces/StatsBombRef)\<[`ShotOutcome`](/docs/api/data-providers/statsbomb/type-aliases/ShotOutcome)> | - | - | - | [packages/data-providers/src/statsbomb/types.ts:118](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L118) | | `shot.redirect?` | `readonly` | `boolean` | - | - | - | [packages/data-providers/src/statsbomb/types.ts:129](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L129) | | `shot.saved_off_target?` | `readonly` | `boolean` | - | - | - | [packages/data-providers/src/statsbomb/types.ts:130](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L130) | | `shot.saved_to_post?` | `readonly` | `boolean` | - | - | - | [packages/data-providers/src/statsbomb/types.ts:131](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L131) | | `shot.statsbomb_xg` | `readonly` | `number` | - | - | - | [packages/data-providers/src/statsbomb/types.ts:116](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L116) | | `shot.technique?` | `readonly` | [`StatsBombRef`](/docs/api/data-providers/statsbomb/interfaces/StatsBombRef)\<`string`> | - | - | - | [packages/data-providers/src/statsbomb/types.ts:121](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L121) | | `shot.type` | `readonly` | [`StatsBombRef`](/docs/api/data-providers/statsbomb/interfaces/StatsBombRef)\<[`ShotType`](/docs/api/data-providers/statsbomb/type-aliases/ShotType)> | - | - | - | [packages/data-providers/src/statsbomb/types.ts:119](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L119) | | `team` | `readonly` | [`StatsBombRef`](/docs/api/data-providers/statsbomb/interfaces/StatsBombRef) | - | - | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`team`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-team) | [packages/data-providers/src/statsbomb/types.ts:86](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L86) | | `timestamp` | `readonly` | `string` | - | - | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`timestamp`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-timestamp) | [packages/data-providers/src/statsbomb/types.ts:79](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L79) | | `type` | `readonly` | [`StatsBombRef`](/docs/api/data-providers/statsbomb/interfaces/StatsBombRef) | - | - | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`type`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-type) | [packages/data-providers/src/statsbomb/types.ts:82](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L82) | | `under_pressure?` | `readonly` | `boolean` | - | - | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`under_pressure`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-under_pressure) | [packages/data-providers/src/statsbomb/types.ts:91](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L91) | | `x` | `readonly` | `number` | `location[0]`, lifted for direct use as a PitchKit x accessor. | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`x`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-x) | - | [packages/data-providers/src/statsbomb/types.ts:103](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L103) | | `y` | `readonly` | `number` | `location[1]`, lifted for direct use as a PitchKit y accessor. | [`StatsBombBaseEvent`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent).[`y`](/docs/api/data-providers/statsbomb/interfaces/StatsBombBaseEvent#property-y) | - | [packages/data-providers/src/statsbomb/types.ts:104](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L104) | --- # StatsBombThreeSixtyFrame Source: https://www.pitchkitjs.com/docs/api/data-providers/statsbomb/interfaces/StatsBombThreeSixtyFrame Defined in: [packages/data-providers/src/statsbomb/types.ts:301](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L301) One row of a match's `three-sixty/{match_id}.json` file — StatsBomb's optical tracking data: every player the broadcast camera could see at the moment of one event. `event_uuid` is the matching `StatsBombEvent`'s `id` — join the two files with `indexThreeSixtyByEvent`. Not every event has a frame — coverage varies by match (85% of events in one sampled World Cup match, for instance) since 360 tracking only runs on events with a camera view (StatsBomb's own coverage, not something this package filters) — so always check the join rather than assuming one exists. ## Properties | Property | Modifier | Type | Description | Defined in | | ----------------------------------------------- | ---------- | ------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | | `event_uuid` | `readonly` | `string` | - | [packages/data-providers/src/statsbomb/types.ts:302](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L302) | | `freeze_frame` | `readonly` | readonly [`StatsBombThreeSixtyPlayer`](/docs/api/data-providers/statsbomb/interfaces/StatsBombThreeSixtyPlayer)\[] | - | [packages/data-providers/src/statsbomb/types.ts:311](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L311) | | `visible_area` | `readonly` | readonly `number`\[] | The pitch area the broadcast camera actually covered for this frame — a polygon as StatsBomb encodes it, a flat `[x0, y0, x1, y1, ...]` list of vertex pairs rather than `[[x, y], ...]`. `freeze_frame` only lists players StatsBomb could see inside it. Use `visibleAreaPolygon` to get point pairs for a PitchKit `Polygon` layer. | [packages/data-providers/src/statsbomb/types.ts:310](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L310) | --- # StatsBombThreeSixtyPlayer Source: https://www.pitchkitjs.com/docs/api/data-providers/statsbomb/interfaces/StatsBombThreeSixtyPlayer Defined in: [packages/data-providers/src/statsbomb/types.ts:276](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L276) One tracked player in a 360 freeze frame. Distinct from `StatsBombFreezeFramePlayer` (the freeze frame nested inside `shot.freeze_frame` in the *events* file): this one carries no player identity at all — 360 is optical tracking, not event annotation — just `teammate`/`actor`/`keeper` flags relative to the frame's acting player, plus a location. ## Properties | Property | Modifier | Type | Description | Defined in | | --------------------------------------- | ---------- | -------------------- | ----------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | | `actor` | `readonly` | `boolean` | The player who performed the event this frame belongs to. | [packages/data-providers/src/statsbomb/types.ts:280](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L280) | | `keeper` | `readonly` | `boolean` | - | [packages/data-providers/src/statsbomb/types.ts:281](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L281) | | `location` | `readonly` | readonly `number`\[] | - | [packages/data-providers/src/statsbomb/types.ts:282](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L282) | | `teammate` | `readonly` | `boolean` | Relative to the event's team — `false` means an opponent, not "unknown team". | [packages/data-providers/src/statsbomb/types.ts:278](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L278) | | `x` | `readonly` | `number` | `location[0]`, lifted for direct use as a PitchKit x accessor. | [packages/data-providers/src/statsbomb/types.ts:284](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L284) | | `y` | `readonly` | `number` | `location[1]`, lifted for direct use as a PitchKit y accessor. | [packages/data-providers/src/statsbomb/types.ts:286](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L286) | --- # PassBodyPart Source: https://www.pitchkitjs.com/docs/api/data-providers/statsbomb/type-aliases/PassBodyPart ```ts type PassBodyPart = | "Drop Kick" | "Head" | "Keeper Arm" | "Left Foot" | "No Touch" | "Other" | "Right Foot"; ``` Defined in: [packages/data-providers/src/statsbomb/types.ts:56](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L56) --- # PassHeight Source: https://www.pitchkitjs.com/docs/api/data-providers/statsbomb/type-aliases/PassHeight ```ts type PassHeight = "Ground Pass" | "Low Pass" | "High Pass"; ``` Defined in: [packages/data-providers/src/statsbomb/types.ts:51](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L51) --- # PassOutcome Source: https://www.pitchkitjs.com/docs/api/data-providers/statsbomb/type-aliases/PassOutcome ```ts type PassOutcome = "Incomplete" | "Injury Clearance" | "Out" | "Pass Offside" | "Unknown"; ``` Defined in: [packages/data-providers/src/statsbomb/types.ts:49](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L49) --- # PassType Source: https://www.pitchkitjs.com/docs/api/data-providers/statsbomb/type-aliases/PassType ```ts type PassType = | "Corner" | "Free Kick" | "Goal Kick" | "Interception" | "Kick Off" | "Recovery" | "Throw-in"; ``` Defined in: [packages/data-providers/src/statsbomb/types.ts:53](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L53) --- # PlayPattern Source: https://www.pitchkitjs.com/docs/api/data-providers/statsbomb/type-aliases/PlayPattern ```ts type PlayPattern = | "Regular Play" | "From Corner" | "From Free Kick" | "From Throw In" | "From Counter" | "From Goal Kick" | "From Keeper" | "From Kick Off" | "Other"; ``` Defined in: [packages/data-providers/src/statsbomb/types.ts:31](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L31) --- # ShotBodyPart Source: https://www.pitchkitjs.com/docs/api/data-providers/statsbomb/type-aliases/ShotBodyPart ```ts type ShotBodyPart = "Head" | "Left Foot" | "Right Foot" | "Other"; ``` Defined in: [packages/data-providers/src/statsbomb/types.ts:47](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L47) --- # ShotOutcome Source: https://www.pitchkitjs.com/docs/api/data-providers/statsbomb/type-aliases/ShotOutcome ```ts type ShotOutcome = | "Blocked" | "Goal" | "Off T" | "Post" | "Saved" | "Saved Off T" | "Saved To Post" | "Wayward"; ``` Defined in: [packages/data-providers/src/statsbomb/types.ts:42](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L42) --- # ShotType Source: https://www.pitchkitjs.com/docs/api/data-providers/statsbomb/type-aliases/ShotType ```ts type ShotType = "Open Play" | "Free Kick" | "Penalty" | "Corner" | "Kick Off"; ``` Defined in: [packages/data-providers/src/statsbomb/types.ts:45](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L45) --- # StatsBombEvent Source: https://www.pitchkitjs.com/docs/api/data-providers/statsbomb/type-aliases/StatsBombEvent ```ts type StatsBombEvent = | StatsBombShot | StatsBombPass | StatsBombCarry | StatsBombGenericEvent; ``` Defined in: [packages/data-providers/src/statsbomb/types.ts:200](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/types.ts#L200) --- # STATSBOMB OPEN DATA BASE URL Source: https://www.pitchkitjs.com/docs/api/data-providers/statsbomb/variables/STATSBOMB_OPEN_DATA_BASE_URL ```ts const STATSBOMB_OPEN_DATA_BASE_URL: "https://raw.githubusercontent.com/statsbomb/open-data/master/data" = "https://raw.githubusercontent.com/statsbomb/open-data/master/data"; ``` Defined in: [packages/data-providers/src/statsbomb/load.ts:37](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/statsbomb/load.ts#L37) Raw file root of StatsBomb's public open-data repository. --- # byPlayer() Source: https://www.pitchkitjs.com/docs/api/data-providers/wyscout/functions/byPlayer ```ts function byPlayer(events, playerId): WyscoutEvent[]; ``` Defined in: [packages/data-providers/src/wyscout/select.ts:51](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/select.ts#L51) Every event by one player. ## Parameters | Parameter | Type | | ---------- | -------------------------------------------------------------------------------------- | | `events` | readonly [`WyscoutEvent`](/docs/api/data-providers/wyscout/interfaces/WyscoutEvent)\[] | | `playerId` | `number` | ## Returns [`WyscoutEvent`](/docs/api/data-providers/wyscout/interfaces/WyscoutEvent)\[] --- # byTeam() Source: https://www.pitchkitjs.com/docs/api/data-providers/wyscout/functions/byTeam ```ts function byTeam(events, teamId): WyscoutEvent[]; ``` Defined in: [packages/data-providers/src/wyscout/select.ts:46](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/select.ts#L46) Every event by one team. ## Parameters | Parameter | Type | | --------- | -------------------------------------------------------------------------------------- | | `events` | readonly [`WyscoutEvent`](/docs/api/data-providers/wyscout/interfaces/WyscoutEvent)\[] | | `teamId` | `number` | ## Returns [`WyscoutEvent`](/docs/api/data-providers/wyscout/interfaces/WyscoutEvent)\[] --- # duels() Source: https://www.pitchkitjs.com/docs/api/data-providers/wyscout/functions/duels ```ts function duels(events): WyscoutEvent[]; ``` Defined in: [packages/data-providers/src/wyscout/select.ts:33](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/select.ts#L33) ## Parameters | Parameter | Type | | --------- | -------------------------------------------------------------------------------------- | | `events` | readonly [`WyscoutEvent`](/docs/api/data-providers/wyscout/interfaces/WyscoutEvent)\[] | ## Returns [`WyscoutEvent`](/docs/api/data-providers/wyscout/interfaces/WyscoutEvent)\[] --- # fetchCompetitions() Source: https://www.pitchkitjs.com/docs/api/data-providers/wyscout/functions/fetchCompetitions ```ts function fetchCompetitions(options?): Promise; ``` Defined in: [packages/data-providers/src/wyscout/load.ts:131](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/load.ts#L131) The seven competitions the dataset covers. \~1 KB, straight from figshare. ## Parameters | Parameter | Type | | --------- | -------------------------------------------------------------------------------------- | | `options` | [`WyscoutLoadOptions`](/docs/api/data-providers/wyscout/interfaces/WyscoutLoadOptions) | ## Returns `Promise`\<[`WyscoutCompetition`](/docs/api/data-providers/wyscout/interfaces/WyscoutCompetition)\[]> --- # fetchMatch() Source: https://www.pitchkitjs.com/docs/api/data-providers/wyscout/functions/fetchMatch ```ts function fetchMatch(matchId, options?): Promise; ``` Defined in: [packages/data-providers/src/wyscout/load.ts:115](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/load.ts#L115) A whole match — events, both teams, and their squads — in one call. \~480 KB. The teams and players travel with the events, so there is no second request to label a chart. ## Parameters | Parameter | Type | | --------- | -------------------------------------------------------------------------------------- | | `matchId` | `number` | | `options` | [`WyscoutLoadOptions`](/docs/api/data-providers/wyscout/interfaces/WyscoutLoadOptions) | ## Returns `Promise`\<[`WyscoutMatch`](/docs/api/data-providers/wyscout/interfaces/WyscoutMatch)> --- # fetchMatchEvents() Source: https://www.pitchkitjs.com/docs/api/data-providers/wyscout/functions/fetchMatchEvents ```ts function fetchMatchEvents(matchId, options?): Promise; ``` Defined in: [packages/data-providers/src/wyscout/load.ts:123](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/load.ts#L123) Just the events, for when the squads aren't needed. ## Parameters | Parameter | Type | | --------- | -------------------------------------------------------------------------------------- | | `matchId` | `number` | | `options` | [`WyscoutLoadOptions`](/docs/api/data-providers/wyscout/interfaces/WyscoutLoadOptions) | ## Returns `Promise`\ --- # fetchTeams() Source: https://www.pitchkitjs.com/docs/api/data-providers/wyscout/functions/fetchTeams ```ts function fetchTeams(options?): Promise; ``` Defined in: [packages/data-providers/src/wyscout/load.ts:138](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/load.ts#L138) Every team in the dataset. \~27 KB. ## Parameters | Parameter | Type | | --------- | -------------------------------------------------------------------------------------- | | `options` | [`WyscoutLoadOptions`](/docs/api/data-providers/wyscout/interfaces/WyscoutLoadOptions) | ## Returns `Promise`\<[`WyscoutTeam`](/docs/api/data-providers/wyscout/interfaces/WyscoutTeam)\[]> --- # fouls() Source: https://www.pitchkitjs.com/docs/api/data-providers/wyscout/functions/fouls ```ts function fouls(events): WyscoutEvent[]; ``` Defined in: [packages/data-providers/src/wyscout/select.ts:41](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/select.ts#L41) ## Parameters | Parameter | Type | | --------- | -------------------------------------------------------------------------------------- | | `events` | readonly [`WyscoutEvent`](/docs/api/data-providers/wyscout/interfaces/WyscoutEvent)\[] | ## Returns [`WyscoutEvent`](/docs/api/data-providers/wyscout/interfaces/WyscoutEvent)\[] --- # freeKicks() Source: https://www.pitchkitjs.com/docs/api/data-providers/wyscout/functions/freeKicks ```ts function freeKicks(events): WyscoutEvent[]; ``` Defined in: [packages/data-providers/src/wyscout/select.ts:37](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/select.ts#L37) ## Parameters | Parameter | Type | | --------- | -------------------------------------------------------------------------------------- | | `events` | readonly [`WyscoutEvent`](/docs/api/data-providers/wyscout/interfaces/WyscoutEvent)\[] | ## Returns [`WyscoutEvent`](/docs/api/data-providers/wyscout/interfaces/WyscoutEvent)\[] --- # hasEndLocation() Source: https://www.pitchkitjs.com/docs/api/data-providers/wyscout/functions/hasEndLocation ```ts function hasEndLocation(event): boolean; ``` Defined in: [packages/data-providers/src/wyscout/predicates.ts:118](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/predicates.ts#L118) Does this event have a real end location? False for `Shot`, `Interruption` and `Offside`, where Wyscout writes a placeholder rather than a position — which is why `endX`/`endY` are absent on those events rather than wrong. ## Parameters | Parameter | Type | | --------- | -------------------------------------------------------------------------- | | `event` | [`WyscoutEvent`](/docs/api/data-providers/wyscout/interfaces/WyscoutEvent) | ## Returns `boolean` --- # hasTag() Source: https://www.pitchkitjs.com/docs/api/data-providers/wyscout/functions/hasTag ```ts function hasTag(event, tagId): boolean; ``` Defined in: [packages/data-providers/src/wyscout/predicates.ts:95](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/predicates.ts#L95) Does this event carry the given tag id? The primitive everything else uses. ## Parameters | Parameter | Type | | --------- | -------------------------------------------------------------------------- | | `event` | [`WyscoutEvent`](/docs/api/data-providers/wyscout/interfaces/WyscoutEvent) | | `tagId` | `number` | ## Returns `boolean` --- # inMatchOrder() Source: https://www.pitchkitjs.com/docs/api/data-providers/wyscout/functions/inMatchOrder ```ts function inMatchOrder(events): WyscoutEvent[]; ``` Defined in: [packages/data-providers/src/wyscout/select.ts:92](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/select.ts#L92) Events in play order, halves included. ## Parameters | Parameter | Type | | --------- | -------------------------------------------------------------------------------------- | | `events` | readonly [`WyscoutEvent`](/docs/api/data-providers/wyscout/interfaces/WyscoutEvent)\[] | ## Returns [`WyscoutEvent`](/docs/api/data-providers/wyscout/interfaces/WyscoutEvent)\[] --- # indexPlayersById() Source: https://www.pitchkitjs.com/docs/api/data-providers/wyscout/functions/indexPlayersById ```ts function indexPlayersById(match): Map; ``` Defined in: [packages/data-providers/src/wyscout/select.ts:64](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/select.ts#L64) Every player in the match, keyed by id, so an event's `playerId` can be turned into a name without walking both squads. ## Parameters | Parameter | Type | | --------- | -------------------------------------------------------------------------- | | `match` | [`WyscoutMatch`](/docs/api/data-providers/wyscout/interfaces/WyscoutMatch) | ## Returns `Map`\<`number`, [`WyscoutPlayer`](/docs/api/data-providers/wyscout/interfaces/WyscoutPlayer)> --- # isAccurate() Source: https://www.pitchkitjs.com/docs/api/data-providers/wyscout/functions/isAccurate ```ts function isAccurate(event): boolean; ``` Defined in: [packages/data-providers/src/wyscout/predicates.ts:139](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/predicates.ts#L139) Did the action find its target? Wyscout's equivalent of a completed pass, and it is an explicit tag on both sides: every pass carries either 1801 or 1802. Unlike StatsBomb, where a completed pass is the *absence* of an outcome, there is nothing to infer. ## Parameters | Parameter | Type | | --------- | -------------------------------------------------------------------------- | | `event` | [`WyscoutEvent`](/docs/api/data-providers/wyscout/interfaces/WyscoutEvent) | ## Returns `boolean` --- # isAssist() Source: https://www.pitchkitjs.com/docs/api/data-providers/wyscout/functions/isAssist ```ts function isAssist(event): boolean; ``` Defined in: [packages/data-providers/src/wyscout/predicates.ts:143](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/predicates.ts#L143) ## Parameters | Parameter | Type | | --------- | -------------------------------------------------------------------------- | | `event` | [`WyscoutEvent`](/docs/api/data-providers/wyscout/interfaces/WyscoutEvent) | ## Returns `boolean` --- # isBlocked() Source: https://www.pitchkitjs.com/docs/api/data-providers/wyscout/functions/isBlocked ```ts function isBlocked(event): boolean; ``` Defined in: [packages/data-providers/src/wyscout/predicates.ts:150](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/predicates.ts#L150) ## Parameters | Parameter | Type | | --------- | -------------------------------------------------------------------------- | | `event` | [`WyscoutEvent`](/docs/api/data-providers/wyscout/interfaces/WyscoutEvent) | ## Returns `boolean` --- # isClearance() Source: https://www.pitchkitjs.com/docs/api/data-providers/wyscout/functions/isClearance ```ts function isClearance(event): boolean; ``` Defined in: [packages/data-providers/src/wyscout/predicates.ts:153](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/predicates.ts#L153) ## Parameters | Parameter | Type | | --------- | -------------------------------------------------------------------------- | | `event` | [`WyscoutEvent`](/docs/api/data-providers/wyscout/interfaces/WyscoutEvent) | ## Returns `boolean` --- # isCounterAttack() Source: https://www.pitchkitjs.com/docs/api/data-providers/wyscout/functions/isCounterAttack ```ts function isCounterAttack(event): boolean; ``` Defined in: [packages/data-providers/src/wyscout/predicates.ts:146](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/predicates.ts#L146) ## Parameters | Parameter | Type | | --------- | -------------------------------------------------------------------------- | | `event` | [`WyscoutEvent`](/docs/api/data-providers/wyscout/interfaces/WyscoutEvent) | ## Returns `boolean` --- # isDangerousBallLost() Source: https://www.pitchkitjs.com/docs/api/data-providers/wyscout/functions/isDangerousBallLost ```ts function isDangerousBallLost(event): boolean; ``` Defined in: [packages/data-providers/src/wyscout/predicates.ts:157](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/predicates.ts#L157) ## Parameters | Parameter | Type | | --------- | -------------------------------------------------------------------------- | | `event` | [`WyscoutEvent`](/docs/api/data-providers/wyscout/interfaces/WyscoutEvent) | ## Returns `boolean` --- # isGoal() Source: https://www.pitchkitjs.com/docs/api/data-providers/wyscout/functions/isGoal ```ts function isGoal(event): boolean; ``` Defined in: [packages/data-providers/src/wyscout/predicates.ts:129](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/predicates.ts#L129) Was this a goal? Applies to the event that produced it — but note the same tag also sits on the conceding keeper's `Save attempt`, so filter `shots()` rather than the whole feed unless you want both sides of each goal. See `shots`. ## Parameters | Parameter | Type | | --------- | -------------------------------------------------------------------------- | | `event` | [`WyscoutEvent`](/docs/api/data-providers/wyscout/interfaces/WyscoutEvent) | ## Returns `boolean` --- # isHeadOrBody() Source: https://www.pitchkitjs.com/docs/api/data-providers/wyscout/functions/isHeadOrBody ```ts function isHeadOrBody(event): boolean; ``` Defined in: [packages/data-providers/src/wyscout/predicates.ts:169](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/predicates.ts#L169) ## Parameters | Parameter | Type | | --------- | -------------------------------------------------------------------------- | | `event` | [`WyscoutEvent`](/docs/api/data-providers/wyscout/interfaces/WyscoutEvent) | ## Returns `boolean` --- # isInterception() Source: https://www.pitchkitjs.com/docs/api/data-providers/wyscout/functions/isInterception ```ts function isInterception(event): boolean; ``` Defined in: [packages/data-providers/src/wyscout/predicates.ts:151](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/predicates.ts#L151) ## Parameters | Parameter | Type | | --------- | -------------------------------------------------------------------------- | | `event` | [`WyscoutEvent`](/docs/api/data-providers/wyscout/interfaces/WyscoutEvent) | ## Returns `boolean` --- # isKeyPass() Source: https://www.pitchkitjs.com/docs/api/data-providers/wyscout/functions/isKeyPass ```ts function isKeyPass(event): boolean; ``` Defined in: [packages/data-providers/src/wyscout/predicates.ts:144](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/predicates.ts#L144) ## Parameters | Parameter | Type | | --------- | -------------------------------------------------------------------------- | | `event` | [`WyscoutEvent`](/docs/api/data-providers/wyscout/interfaces/WyscoutEvent) | ## Returns `boolean` --- # isLeftFoot() Source: https://www.pitchkitjs.com/docs/api/data-providers/wyscout/functions/isLeftFoot ```ts function isLeftFoot(event): boolean; ``` Defined in: [packages/data-providers/src/wyscout/predicates.ts:166](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/predicates.ts#L166) Body part. A shot or pass carries at most one. ## Parameters | Parameter | Type | | --------- | -------------------------------------------------------------------------- | | `event` | [`WyscoutEvent`](/docs/api/data-providers/wyscout/interfaces/WyscoutEvent) | ## Returns `boolean` --- # isNotAccurate() Source: https://www.pitchkitjs.com/docs/api/data-providers/wyscout/functions/isNotAccurate ```ts function isNotAccurate(event): boolean; ``` Defined in: [packages/data-providers/src/wyscout/predicates.ts:140](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/predicates.ts#L140) ## Parameters | Parameter | Type | | --------- | -------------------------------------------------------------------------- | | `event` | [`WyscoutEvent`](/docs/api/data-providers/wyscout/interfaces/WyscoutEvent) | ## Returns `boolean` --- # isOpportunity() Source: https://www.pitchkitjs.com/docs/api/data-providers/wyscout/functions/isOpportunity ```ts function isOpportunity(event): boolean; ``` Defined in: [packages/data-providers/src/wyscout/predicates.ts:148](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/predicates.ts#L148) ## Parameters | Parameter | Type | | --------- | -------------------------------------------------------------------------- | | `event` | [`WyscoutEvent`](/docs/api/data-providers/wyscout/interfaces/WyscoutEvent) | ## Returns `boolean` --- # isOwnGoal() Source: https://www.pitchkitjs.com/docs/api/data-providers/wyscout/functions/isOwnGoal ```ts function isOwnGoal(event): boolean; ``` Defined in: [packages/data-providers/src/wyscout/predicates.ts:130](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/predicates.ts#L130) ## Parameters | Parameter | Type | | --------- | -------------------------------------------------------------------------- | | `event` | [`WyscoutEvent`](/docs/api/data-providers/wyscout/interfaces/WyscoutEvent) | ## Returns `boolean` --- # isRedCard() Source: https://www.pitchkitjs.com/docs/api/data-providers/wyscout/functions/isRedCard ```ts function isRedCard(event): boolean; ``` Defined in: [packages/data-providers/src/wyscout/predicates.ts:177](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/predicates.ts#L177) ## Parameters | Parameter | Type | | --------- | -------------------------------------------------------------------------- | | `event` | [`WyscoutEvent`](/docs/api/data-providers/wyscout/interfaces/WyscoutEvent) | ## Returns `boolean` --- # isRightFoot() Source: https://www.pitchkitjs.com/docs/api/data-providers/wyscout/functions/isRightFoot ```ts function isRightFoot(event): boolean; ``` Defined in: [packages/data-providers/src/wyscout/predicates.ts:167](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/predicates.ts#L167) ## Parameters | Parameter | Type | | --------- | -------------------------------------------------------------------------- | | `event` | [`WyscoutEvent`](/docs/api/data-providers/wyscout/interfaces/WyscoutEvent) | ## Returns `boolean` --- # isSecondYellowCard() Source: https://www.pitchkitjs.com/docs/api/data-providers/wyscout/functions/isSecondYellowCard ```ts function isSecondYellowCard(event): boolean; ``` Defined in: [packages/data-providers/src/wyscout/predicates.ts:175](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/predicates.ts#L175) ## Parameters | Parameter | Type | | --------- | -------------------------------------------------------------------------- | | `event` | [`WyscoutEvent`](/docs/api/data-providers/wyscout/interfaces/WyscoutEvent) | ## Returns `boolean` --- # isSendingOff() Source: https://www.pitchkitjs.com/docs/api/data-providers/wyscout/functions/isSendingOff ```ts function isSendingOff(event): boolean; ``` Defined in: [packages/data-providers/src/wyscout/predicates.ts:180](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/predicates.ts#L180) Any dismissal — a straight red, or a second yellow. ## Parameters | Parameter | Type | | --------- | -------------------------------------------------------------------------- | | `event` | [`WyscoutEvent`](/docs/api/data-providers/wyscout/interfaces/WyscoutEvent) | ## Returns `boolean` --- # isSlidingTackle() Source: https://www.pitchkitjs.com/docs/api/data-providers/wyscout/functions/isSlidingTackle ```ts function isSlidingTackle(event): boolean; ``` Defined in: [packages/data-providers/src/wyscout/predicates.ts:155](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/predicates.ts#L155) ## Parameters | Parameter | Type | | --------- | -------------------------------------------------------------------------- | | `event` | [`WyscoutEvent`](/docs/api/data-providers/wyscout/interfaces/WyscoutEvent) | ## Returns `boolean` --- # isThrough() Source: https://www.pitchkitjs.com/docs/api/data-providers/wyscout/functions/isThrough ```ts function isThrough(event): boolean; ``` Defined in: [packages/data-providers/src/wyscout/predicates.ts:145](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/predicates.ts#L145) ## Parameters | Parameter | Type | | --------- | -------------------------------------------------------------------------- | | `event` | [`WyscoutEvent`](/docs/api/data-providers/wyscout/interfaces/WyscoutEvent) | ## Returns `boolean` --- # isYellowCard() Source: https://www.pitchkitjs.com/docs/api/data-providers/wyscout/functions/isYellowCard ```ts function isYellowCard(event): boolean; ``` Defined in: [packages/data-providers/src/wyscout/predicates.ts:173](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/predicates.ts#L173) Cards, which ride on the `Foul` they were shown for. ## Parameters | Parameter | Type | | --------- | -------------------------------------------------------------------------- | | `event` | [`WyscoutEvent`](/docs/api/data-providers/wyscout/interfaces/WyscoutEvent) | ## Returns `boolean` --- # loadCompetitions() Source: https://www.pitchkitjs.com/docs/api/data-providers/wyscout/functions/loadCompetitions ```ts function loadCompetitions(url, options?): Promise; ``` Defined in: [packages/data-providers/src/wyscout/load.ts:98](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/load.ts#L98) ## Parameters | Parameter | Type | | ---------- | ---------------------------------------------------------------------- | | `url` | `string` | | `options?` | [`LoadOptions`](/docs/api/data-providers/index/interfaces/LoadOptions) | ## Returns `Promise`\<[`WyscoutCompetition`](/docs/api/data-providers/wyscout/interfaces/WyscoutCompetition)\[]> --- # loadMatch() Source: https://www.pitchkitjs.com/docs/api/data-providers/wyscout/functions/loadMatch ```ts function loadMatch(url, options?): Promise; ``` Defined in: [packages/data-providers/src/wyscout/load.ts:86](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/load.ts#L86) Parses a match file from any URL. ## Parameters | Parameter | Type | | ---------- | ---------------------------------------------------------------------- | | `url` | `string` | | `options?` | [`LoadOptions`](/docs/api/data-providers/index/interfaces/LoadOptions) | ## Returns `Promise`\<[`WyscoutMatch`](/docs/api/data-providers/wyscout/interfaces/WyscoutMatch)> --- # loadMatchEvents() Source: https://www.pitchkitjs.com/docs/api/data-providers/wyscout/functions/loadMatchEvents ```ts function loadMatchEvents(url, options?): Promise; ``` Defined in: [packages/data-providers/src/wyscout/load.ts:91](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/load.ts#L91) Parses just the events out of a match file at any URL. ## Parameters | Parameter | Type | | ---------- | ---------------------------------------------------------------------- | | `url` | `string` | | `options?` | [`LoadOptions`](/docs/api/data-providers/index/interfaces/LoadOptions) | ## Returns `Promise`\ --- # loadTeams() Source: https://www.pitchkitjs.com/docs/api/data-providers/wyscout/functions/loadTeams ```ts function loadTeams(url, options?): Promise; ``` Defined in: [packages/data-providers/src/wyscout/load.ts:105](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/load.ts#L105) ## Parameters | Parameter | Type | | ---------- | ---------------------------------------------------------------------- | | `url` | `string` | | `options?` | [`LoadOptions`](/docs/api/data-providers/index/interfaces/LoadOptions) | ## Returns `Promise`\<[`WyscoutTeam`](/docs/api/data-providers/wyscout/interfaces/WyscoutTeam)\[]> --- # lostDuel() Source: https://www.pitchkitjs.com/docs/api/data-providers/wyscout/functions/lostDuel ```ts function lostDuel(event): boolean; ``` Defined in: [packages/data-providers/src/wyscout/predicates.ts:162](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/predicates.ts#L162) ## Parameters | Parameter | Type | | --------- | -------------------------------------------------------------------------- | | `event` | [`WyscoutEvent`](/docs/api/data-providers/wyscout/interfaces/WyscoutEvent) | ## Returns `boolean` --- # matchSeconds() Source: https://www.pitchkitjs.com/docs/api/data-providers/wyscout/functions/matchSeconds ```ts function matchSeconds(event): number; ``` Defined in: [packages/data-providers/src/wyscout/select.ts:86](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/select.ts#L86) Seconds since kick-off, across periods. `eventSec` restarts at zero each period, so sorting a whole match by it interleaves the halves. Regulation periods are treated as 45 minutes and extra-time periods as 15, which is what the dataset's own clock assumes. ## Parameters | Parameter | Type | | --------- | -------------------------------------------------------------------------- | | `event` | [`WyscoutEvent`](/docs/api/data-providers/wyscout/interfaces/WyscoutEvent) | ## Returns `number` --- # matchUrl() Source: https://www.pitchkitjs.com/docs/api/data-providers/wyscout/functions/matchUrl ```ts function matchUrl(matchId, options?): string; ``` Defined in: [packages/data-providers/src/wyscout/load.ts:73](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/load.ts#L73) URL of one match's event file. \~480 KB. ## Parameters | Parameter | Type | | --------- | -------------------------------------------------------------------------------------- | | `matchId` | `number` | | `options` | [`WyscoutLoadOptions`](/docs/api/data-providers/wyscout/interfaces/WyscoutLoadOptions) | ## Returns `string` --- # neutralDuel() Source: https://www.pitchkitjs.com/docs/api/data-providers/wyscout/functions/neutralDuel ```ts function neutralDuel(event): boolean; ``` Defined in: [packages/data-providers/src/wyscout/predicates.ts:163](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/predicates.ts#L163) ## Parameters | Parameter | Type | | --------- | -------------------------------------------------------------------------- | | `event` | [`WyscoutEvent`](/docs/api/data-providers/wyscout/interfaces/WyscoutEvent) | ## Returns `boolean` --- # ofType() Source: https://www.pitchkitjs.com/docs/api/data-providers/wyscout/functions/ofType ```ts function ofType(events, eventName): WyscoutEvent[]; ``` Defined in: [packages/data-providers/src/wyscout/select.ts:12](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/select.ts#L12) Every event of one type, e.g. `ofType(events, "Duel")`. ## Parameters | Parameter | Type | | ----------- | -------------------------------------------------------------------------------------- | | `events` | readonly [`WyscoutEvent`](/docs/api/data-providers/wyscout/interfaces/WyscoutEvent)\[] | | `eventName` | `string` | ## Returns [`WyscoutEvent`](/docs/api/data-providers/wyscout/interfaces/WyscoutEvent)\[] --- # parseCompetitions() Source: https://www.pitchkitjs.com/docs/api/data-providers/wyscout/functions/parseCompetitions ```ts function parseCompetitions(json): WyscoutCompetition[]; ``` Defined in: [packages/data-providers/src/wyscout/parse.ts:117](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/parse.ts#L117) ## Parameters | Parameter | Type | | --------- | --------- | | `json` | `unknown` | ## Returns [`WyscoutCompetition`](/docs/api/data-providers/wyscout/interfaces/WyscoutCompetition)\[] --- # parseEvents() Source: https://www.pitchkitjs.com/docs/api/data-providers/wyscout/functions/parseEvents ```ts function parseEvents(json): WyscoutEvent[]; ``` Defined in: [packages/data-providers/src/wyscout/parse.ts:91](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/parse.ts#L91) Parses an array of raw event objects. Pure — no network. ## Parameters | Parameter | Type | | --------- | --------- | | `json` | `unknown` | ## Returns [`WyscoutEvent`](/docs/api/data-providers/wyscout/interfaces/WyscoutEvent)\[] --- # parseMatch() Source: https://www.pitchkitjs.com/docs/api/data-providers/wyscout/functions/parseMatch ```ts function parseMatch(json): WyscoutMatch; ``` Defined in: [packages/data-providers/src/wyscout/parse.ts:101](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/parse.ts#L101) Parses a whole per-match file: `{ events, teams, players }`. Teams and players are passed through as-is; only the events are walked, to lift their coordinates. ## Parameters | Parameter | Type | | --------- | --------- | | `json` | `unknown` | ## Returns [`WyscoutMatch`](/docs/api/data-providers/wyscout/interfaces/WyscoutMatch) --- # parseMatchPlayers() Source: https://www.pitchkitjs.com/docs/api/data-providers/wyscout/functions/parseMatchPlayers ```ts function parseMatchPlayers(json): WyscoutMatchPlayer[]; ``` Defined in: [packages/data-providers/src/wyscout/parse.ts:150](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/parse.ts#L150) Parses a team's squad list out of a per-match file's `players` map. Entries that aren't `{ playerId, player }` pairs are dropped rather than throwing: a squad list is labelling, and losing one substitute should not cost you the match. ## Parameters | Parameter | Type | | --------- | --------- | | `json` | `unknown` | ## Returns [`WyscoutMatchPlayer`](/docs/api/data-providers/wyscout/interfaces/WyscoutMatchPlayer)\[] --- # parseTeams() Source: https://www.pitchkitjs.com/docs/api/data-providers/wyscout/functions/parseTeams ```ts function parseTeams(json): WyscoutTeam[]; ``` Defined in: [packages/data-providers/src/wyscout/parse.ts:130](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/parse.ts#L130) ## Parameters | Parameter | Type | | --------- | --------- | | `json` | `unknown` | ## Returns [`WyscoutTeam`](/docs/api/data-providers/wyscout/interfaces/WyscoutTeam)\[] --- # passes() Source: https://www.pitchkitjs.com/docs/api/data-providers/wyscout/functions/passes ```ts function passes(events): WyscoutEvent[]; ``` Defined in: [packages/data-providers/src/wyscout/select.ts:29](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/select.ts#L29) ## Parameters | Parameter | Type | | --------- | -------------------------------------------------------------------------------------- | | `events` | readonly [`WyscoutEvent`](/docs/api/data-providers/wyscout/interfaces/WyscoutEvent)\[] | ## Returns [`WyscoutEvent`](/docs/api/data-providers/wyscout/interfaces/WyscoutEvent)\[] --- # referenceUrl() Source: https://www.pitchkitjs.com/docs/api/data-providers/wyscout/functions/referenceUrl ```ts function referenceUrl(file, options?): string; ``` Defined in: [packages/data-providers/src/wyscout/load.ts:78](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/load.ts#L78) URL of one of figshare's reference files. ## Parameters | Parameter | Type | | --------- | -------------------------------------------------------------------------------------- | | `file` | `"players"` \| `"competitions"` \| `"teams"` \| `"coaches"` \| `"referees"` | | `options` | [`WyscoutLoadOptions`](/docs/api/data-providers/wyscout/interfaces/WyscoutLoadOptions) | ## Returns `string` --- # shotGoalZone() Source: https://www.pitchkitjs.com/docs/api/data-providers/wyscout/functions/shotGoalZone ```ts function shotGoalZone(event): string | undefined; ``` Defined in: [packages/data-providers/src/wyscout/predicates.ts:103](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/predicates.ts#L103) Where a shot went, as a readable string — `"goal low left"`, `"out high right"` — or `undefined` if the event carries no zone tag. ## Parameters | Parameter | Type | | --------- | -------------------------------------------------------------------------- | | `event` | [`WyscoutEvent`](/docs/api/data-providers/wyscout/interfaces/WyscoutEvent) | ## Returns `string` | `undefined` --- # shots() Source: https://www.pitchkitjs.com/docs/api/data-providers/wyscout/functions/shots ```ts function shots(events): WyscoutEvent[]; ``` Defined in: [packages/data-providers/src/wyscout/select.ts:25](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/select.ts#L25) Shots only. **Not every goal is here.** Wyscout tags a goal on the scoring action *and* on the conceding keeper's `Save attempt`, and a free kick can be scored directly — measured over six matches, tag 101 sat on 15 shots, 19 save attempts and 3 free kicks. `shots(events).filter(isGoal)` counts each goal once; `events.filter(isGoal)` counts most of them twice. ## Parameters | Parameter | Type | | --------- | -------------------------------------------------------------------------------------- | | `events` | readonly [`WyscoutEvent`](/docs/api/data-providers/wyscout/interfaces/WyscoutEvent)\[] | ## Returns [`WyscoutEvent`](/docs/api/data-providers/wyscout/interfaces/WyscoutEvent)\[] --- # squadOf() Source: https://www.pitchkitjs.com/docs/api/data-providers/wyscout/functions/squadOf ```ts function squadOf(match, teamId): readonly WyscoutMatchPlayer[]; ``` Defined in: [packages/data-providers/src/wyscout/select.ts:75](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/select.ts#L75) One team's squad list. ## Parameters | Parameter | Type | | --------- | -------------------------------------------------------------------------- | | `match` | [`WyscoutMatch`](/docs/api/data-providers/wyscout/interfaces/WyscoutMatch) | | `teamId` | `number` | ## Returns readonly [`WyscoutMatchPlayer`](/docs/api/data-providers/wyscout/interfaces/WyscoutMatchPlayer)\[] --- # teamIds() Source: https://www.pitchkitjs.com/docs/api/data-providers/wyscout/functions/teamIds ```ts function teamIds(match): number[]; ``` Defined in: [packages/data-providers/src/wyscout/select.ts:56](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/select.ts#L56) The two team ids in a match file, home first as the file lists them. ## Parameters | Parameter | Type | | --------- | -------------------------------------------------------------------------- | | `match` | [`WyscoutMatch`](/docs/api/data-providers/wyscout/interfaces/WyscoutMatch) | ## Returns `number`\[] --- # wonDuel() Source: https://www.pitchkitjs.com/docs/api/data-providers/wyscout/functions/wonDuel ```ts function wonDuel(event): boolean; ``` Defined in: [packages/data-providers/src/wyscout/predicates.ts:161](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/predicates.ts#L161) Duel outcomes — a duel carries exactly one of these three. ## Parameters | Parameter | Type | | --------- | -------------------------------------------------------------------------- | | `event` | [`WyscoutEvent`](/docs/api/data-providers/wyscout/interfaces/WyscoutEvent) | ## Returns `boolean` --- # WyscoutArea Source: https://www.pitchkitjs.com/docs/api/data-providers/wyscout/interfaces/WyscoutArea Defined in: [packages/data-providers/src/wyscout/types.ts:97](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/types.ts#L97) An area, as Wyscout spells it — `id` is a string on some records. ## Properties | Property | Modifier | Type | Defined in | | ------------------------------------------- | ---------- | -------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | | `alpha2code` | `readonly` | `string` | [packages/data-providers/src/wyscout/types.ts:100](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/types.ts#L100) | | `alpha3code` | `readonly` | `string` | [packages/data-providers/src/wyscout/types.ts:101](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/types.ts#L101) | | `id` | `readonly` | `string` \| `number` | [packages/data-providers/src/wyscout/types.ts:98](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/types.ts#L98) | | `name` | `readonly` | `string` | [packages/data-providers/src/wyscout/types.ts:99](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/types.ts#L99) | --- # WyscoutCompetition Source: https://www.pitchkitjs.com/docs/api/data-providers/wyscout/interfaces/WyscoutCompetition Defined in: [packages/data-providers/src/wyscout/types.ts:141](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/types.ts#L141) ## Indexable ```ts [key: string]: unknown ``` ## Properties | Property | Modifier | Type | Defined in | | ----------------------------------- | ---------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | | `area` | `readonly` | [`WyscoutArea`](/docs/api/data-providers/wyscout/interfaces/WyscoutArea) | [packages/data-providers/src/wyscout/types.ts:146](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/types.ts#L146) | | `format` | `readonly` | `string` | [packages/data-providers/src/wyscout/types.ts:144](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/types.ts#L144) | | `name` | `readonly` | `string` | [packages/data-providers/src/wyscout/types.ts:143](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/types.ts#L143) | | `type` | `readonly` | [`Known`](/docs/api/data-providers/wyscout/type-aliases/Known)\<`"club"` \| `"international"`> | [packages/data-providers/src/wyscout/types.ts:145](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/types.ts#L145) | | `wyId` | `readonly` | `number` | [packages/data-providers/src/wyscout/types.ts:142](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/types.ts#L142) | --- # WyscoutEvent Source: https://www.pitchkitjs.com/docs/api/data-providers/wyscout/interfaces/WyscoutEvent Defined in: [packages/data-providers/src/wyscout/types.ts:54](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/types.ts#L54) ## Indexable ```ts [key: string]: unknown ``` ## Properties | Property | Modifier | Type | Description | Defined in | | ----------------------------------------------- | ---------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | | `endX?` | `readonly` | `number` | `positions[1].x`, lifted — **absent for `Shot`, `Interruption` and `Offside`**, where Wyscout never records a real end location. See `hasEndLocation`. | [packages/data-providers/src/wyscout/types.ts:89](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/types.ts#L89) | | `endY?` | `readonly` | `number` | `positions[1].y`, lifted. Absent wherever `endX` is. | [packages/data-providers/src/wyscout/types.ts:91](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/types.ts#L91) | | `eventId` | `readonly` | `number` | - | [packages/data-providers/src/wyscout/types.ts:61](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/types.ts#L61) | | `eventName` | `readonly` | [`WyscoutEventName`](/docs/api/data-providers/wyscout/type-aliases/WyscoutEventName) | - | [packages/data-providers/src/wyscout/types.ts:62](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/types.ts#L62) | | `eventSec` | `readonly` | `number` | Seconds since the start of this period, not of the match. | [packages/data-providers/src/wyscout/types.ts:67](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/types.ts#L67) | | `id` | `readonly` | `number` | Unique event id. | [packages/data-providers/src/wyscout/types.ts:56](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/types.ts#L56) | | `matchId` | `readonly` | `number` | - | [packages/data-providers/src/wyscout/types.ts:57](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/types.ts#L57) | | `matchPeriod` | `readonly` | [`WyscoutMatchPeriod`](/docs/api/data-providers/wyscout/type-aliases/WyscoutMatchPeriod) | - | [packages/data-providers/src/wyscout/types.ts:65](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/types.ts#L65) | | `playerId` | `readonly` | `number` | `0` when no player is credited (some interruptions). | [packages/data-providers/src/wyscout/types.ts:60](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/types.ts#L60) | | `positions` | `readonly` | readonly [`WyscoutPosition`](/docs/api/data-providers/wyscout/interfaces/WyscoutPosition)\[] | Start and (usually) end point. Almost always two entries; a handful of fouls carry one. **Coordinates are normalised to the attacking direction**, not absolute: `x: 100` is always the goal the event's team is attacking, in both halves. Both teams therefore appear to attack left-to-right, and nothing flips at half time. | [packages/data-providers/src/wyscout/types.ts:78](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/types.ts#L78) | | `subEventId` | `readonly` | `string` \| `number` | - | [packages/data-providers/src/wyscout/types.ts:63](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/types.ts#L63) | | `subEventName` | `readonly` | `string` | - | [packages/data-providers/src/wyscout/types.ts:64](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/types.ts#L64) | | `tags` | `readonly` | readonly [`WyscoutTag`](/docs/api/data-providers/wyscout/interfaces/WyscoutTag)\[] | - | [packages/data-providers/src/wyscout/types.ts:68](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/types.ts#L68) | | `teamId` | `readonly` | `number` | - | [packages/data-providers/src/wyscout/types.ts:58](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/types.ts#L58) | | `x` | `readonly` | `number` | `positions[0].x`, lifted for direct use as a PitchKit x accessor. | [packages/data-providers/src/wyscout/types.ts:81](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/types.ts#L81) | | `y` | `readonly` | `number` | `positions[0].y`, lifted for direct use as a PitchKit y accessor. | [packages/data-providers/src/wyscout/types.ts:83](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/types.ts#L83) | --- # WyscoutLoadOptions Source: https://www.pitchkitjs.com/docs/api/data-providers/wyscout/interfaces/WyscoutLoadOptions Defined in: [packages/data-providers/src/wyscout/load.ts:54](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/load.ts#L54) ## Extends * [`LoadOptions`](/docs/api/data-providers/index/interfaces/LoadOptions) ## Properties | Property | Modifier | Type | Description | Inherited from | Defined in | | -------------------------------------------------------- | ---------- | -------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | | `baseUrl?` | `readonly` | `string` | Root to build per-match event URLs against. Point it at your own mirror. | - | [packages/data-providers/src/wyscout/load.ts:56](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/load.ts#L56) | | `fetch?` | `readonly` | \{ (`input`, `init?`): `Promise`\<`Response`>; (`input`, `init?`): `Promise`\<`Response`>; } | Fetch implementation to use instead of the global one. Injecting is how this package's own tests avoid touching the network, and it's the hook for a Next.js caching wrapper or a Node agent with a proxy configured. | [`LoadOptions`](/docs/api/data-providers/index/interfaces/LoadOptions).[`fetch`](/docs/api/data-providers/index/interfaces/LoadOptions#property-fetch) | [packages/data-providers/src/fetch-json.ts:10](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/fetch-json.ts#L10) | | `referenceBaseUrl?` | `readonly` | `string` | Root for the figshare reference files. Falls back to `baseUrl` if unset. | - | [packages/data-providers/src/wyscout/load.ts:58](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/load.ts#L58) | | `signal?` | `readonly` | `AbortSignal` | Forwarded to the underlying request, so callers can cancel a slow load. | [`LoadOptions`](/docs/api/data-providers/index/interfaces/LoadOptions).[`signal`](/docs/api/data-providers/index/interfaces/LoadOptions#property-signal) | [packages/data-providers/src/fetch-json.ts:12](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/fetch-json.ts#L12) | --- # WyscoutMatch Source: https://www.pitchkitjs.com/docs/api/data-providers/wyscout/interfaces/WyscoutMatch Defined in: [packages/data-providers/src/wyscout/types.ts:156](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/types.ts#L156) A whole match file: the events, plus the two teams and their squads. The teams and players are bundled per match by the mirror this package fetches from, which is why one request is enough to label a chart. ## Properties | Property | Modifier | Type | Description | Defined in | | ------------------------------------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------- | | `events` | `readonly` | readonly [`WyscoutEvent`](/docs/api/data-providers/wyscout/interfaces/WyscoutEvent)\[] | - | [packages/data-providers/src/wyscout/types.ts:157](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/types.ts#L157) | | `players` | `readonly` | `Readonly`\<`Record`\<`string`, readonly [`WyscoutMatchPlayer`](/docs/api/data-providers/wyscout/interfaces/WyscoutMatchPlayer)\[]>> | Keyed by team id, as a string. | [packages/data-providers/src/wyscout/types.ts:161](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/types.ts#L161) | | `teams` | `readonly` | `Readonly`\<`Record`\<`string`, [`WyscoutTeam`](/docs/api/data-providers/wyscout/interfaces/WyscoutTeam)>> | Keyed by team id, as a string — JSON object keys always are. | [packages/data-providers/src/wyscout/types.ts:159](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/types.ts#L159) | --- # WyscoutMatchPlayer Source: https://www.pitchkitjs.com/docs/api/data-providers/wyscout/interfaces/WyscoutMatchPlayer Defined in: [packages/data-providers/src/wyscout/types.ts:136](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/types.ts#L136) One entry of a team's squad list in a per-match file. ## Properties | Property | Modifier | Type | Defined in | | --------------------------------------- | ---------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | | `player` | `readonly` | [`WyscoutPlayer`](/docs/api/data-providers/wyscout/interfaces/WyscoutPlayer) | [packages/data-providers/src/wyscout/types.ts:138](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/types.ts#L138) | | `playerId` | `readonly` | `number` | [packages/data-providers/src/wyscout/types.ts:137](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/types.ts#L137) | --- # WyscoutPlayer Source: https://www.pitchkitjs.com/docs/api/data-providers/wyscout/interfaces/WyscoutPlayer Defined in: [packages/data-providers/src/wyscout/types.ts:120](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/types.ts#L120) ## Indexable ```ts [key: string]: unknown ``` ## Properties | Property | Modifier | Type | Defined in | | ------------------------------------------------- | ---------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | | `birthDate` | `readonly` | `string` \| `null` | [packages/data-providers/src/wyscout/types.ts:126](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/types.ts#L126) | | `currentTeamId` | `readonly` | `number` \| `null` | [packages/data-providers/src/wyscout/types.ts:131](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/types.ts#L131) | | `firstName` | `readonly` | `string` | [packages/data-providers/src/wyscout/types.ts:123](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/types.ts#L123) | | `foot` | `readonly` | [`Known`](/docs/api/data-providers/wyscout/type-aliases/Known)\<`""` \| `"left"` \| `"right"` \| `"both"`> | [packages/data-providers/src/wyscout/types.ts:129](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/types.ts#L129) | | `height` | `readonly` | `number` | [packages/data-providers/src/wyscout/types.ts:127](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/types.ts#L127) | | `lastName` | `readonly` | `string` | [packages/data-providers/src/wyscout/types.ts:124](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/types.ts#L124) | | `middleName` | `readonly` | `string` | [packages/data-providers/src/wyscout/types.ts:125](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/types.ts#L125) | | `role` | `readonly` | [`WyscoutPlayerRole`](/docs/api/data-providers/wyscout/interfaces/WyscoutPlayerRole) | [packages/data-providers/src/wyscout/types.ts:130](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/types.ts#L130) | | `shortName` | `readonly` | `string` | [packages/data-providers/src/wyscout/types.ts:122](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/types.ts#L122) | | `weight` | `readonly` | `number` | [packages/data-providers/src/wyscout/types.ts:128](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/types.ts#L128) | | `wyId` | `readonly` | `number` | [packages/data-providers/src/wyscout/types.ts:121](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/types.ts#L121) | --- # WyscoutPlayerRole Source: https://www.pitchkitjs.com/docs/api/data-providers/wyscout/interfaces/WyscoutPlayerRole Defined in: [packages/data-providers/src/wyscout/types.ts:114](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/types.ts#L114) ## Properties | Property | Modifier | Type | Defined in | | --------------------------------- | ---------- | ----------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | | `code2` | `readonly` | [`Known`](/docs/api/data-providers/wyscout/type-aliases/Known)\<`"GK"` \| `"DF"` \| `"MD"` \| `"FW"`> | [packages/data-providers/src/wyscout/types.ts:115](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/types.ts#L115) | | `code3` | `readonly` | `string` | [packages/data-providers/src/wyscout/types.ts:116](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/types.ts#L116) | | `name` | `readonly` | `string` | [packages/data-providers/src/wyscout/types.ts:117](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/types.ts#L117) | --- # WyscoutPosition Source: https://www.pitchkitjs.com/docs/api/data-providers/wyscout/interfaces/WyscoutPosition Defined in: [packages/data-providers/src/wyscout/types.ts:49](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/types.ts#L49) A point on Wyscout's 0-100 grid. Note `y` before `x` in the raw JSON. ## Properties | Property | Modifier | Type | Defined in | | ------------------------- | ---------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | | `x` | `readonly` | `number` | [packages/data-providers/src/wyscout/types.ts:50](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/types.ts#L50) | | `y` | `readonly` | `number` | [packages/data-providers/src/wyscout/types.ts:51](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/types.ts#L51) | --- # WyscoutTag Source: https://www.pitchkitjs.com/docs/api/data-providers/wyscout/interfaces/WyscoutTag Defined in: [packages/data-providers/src/wyscout/types.ts:44](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/types.ts#L44) A tag id. Wyscout puts every piece of interpretation here rather than in fields — whether a pass found its target, whether a shot was a goal, which foot took it — so `hasTag` and the named predicates are the reading layer. See `WYSCOUT_TAGS` for the full vocabulary. ## Properties | Property | Modifier | Type | Defined in | | --------------------------- | ---------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | | `id` | `readonly` | `number` | [packages/data-providers/src/wyscout/types.ts:45](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/types.ts#L45) | --- # WyscoutTeam Source: https://www.pitchkitjs.com/docs/api/data-providers/wyscout/interfaces/WyscoutTeam Defined in: [packages/data-providers/src/wyscout/types.ts:104](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/types.ts#L104) ## Indexable ```ts [key: string]: unknown ``` ## Properties | Property | Modifier | Type | Defined in | | ----------------------------------------------- | ---------- | ----------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | | `area` | `readonly` | [`WyscoutArea`](/docs/api/data-providers/wyscout/interfaces/WyscoutArea) | [packages/data-providers/src/wyscout/types.ts:110](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/types.ts#L110) | | `city` | `readonly` | `string` | [packages/data-providers/src/wyscout/types.ts:108](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/types.ts#L108) | | `name` | `readonly` | `string` | [packages/data-providers/src/wyscout/types.ts:106](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/types.ts#L106) | | `officialName` | `readonly` | `string` | [packages/data-providers/src/wyscout/types.ts:107](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/types.ts#L107) | | `type` | `readonly` | [`Known`](/docs/api/data-providers/wyscout/type-aliases/Known)\<`"club"` \| `"national"`> | [packages/data-providers/src/wyscout/types.ts:109](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/types.ts#L109) | | `wyId` | `readonly` | `number` | [packages/data-providers/src/wyscout/types.ts:105](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/types.ts#L105) | --- # Known Source: https://www.pitchkitjs.com/docs/api/data-providers/wyscout/type-aliases/Known ```ts type Known = T | string & Record; ``` Defined in: [packages/data-providers/src/wyscout/types.ts:19](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/types.ts#L19) A literal union that still accepts an unrecognised string. Wyscout's vocabularies are fixed in this dataset, but a mirror or a future export could carry a value we don't list, and a hard union would make that a type error for the caller rather than data they can inspect. ## Type Parameters | Type Parameter | | ---------------------- | | `T` *extends* `string` | --- # WyscoutEventName Source: https://www.pitchkitjs.com/docs/api/data-providers/wyscout/type-aliases/WyscoutEventName ```ts type WyscoutEventName = Known< | "Pass" | "Duel" | "Foul" | "Free Kick" | "Shot" | "Save attempt" | "Offside" | "Interruption" | "Others on the ball" | "Goalkeeper leaving line">; ``` Defined in: [packages/data-providers/src/wyscout/types.ts:22](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/types.ts#L22) The ten top-level event types in the dataset. --- # WyscoutMatchPeriod Source: https://www.pitchkitjs.com/docs/api/data-providers/wyscout/type-aliases/WyscoutMatchPeriod ```ts type WyscoutMatchPeriod = Known<"1H" | "2H" | "E1" | "E2" | "P">; ``` Defined in: [packages/data-providers/src/wyscout/types.ts:36](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/types.ts#L36) `1H`/`2H` for regulation, `E1`/`E2` for extra time, `P` for penalties. --- # WyscoutReferenceFile Source: https://www.pitchkitjs.com/docs/api/data-providers/wyscout/type-aliases/WyscoutReferenceFile ```ts type WyscoutReferenceFile = keyof typeof WYSCOUT_REFERENCE_FILE_IDS; ``` Defined in: [packages/data-providers/src/wyscout/load.ts:52](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/load.ts#L52) --- # WYSCOUT EVENTS BASE URL Source: https://www.pitchkitjs.com/docs/api/data-providers/wyscout/variables/WYSCOUT_EVENTS_BASE_URL ```ts const WYSCOUT_EVENTS_BASE_URL: "https://raw.githubusercontent.com/koenvo/wyscout-soccer-match-event-dataset/main/processed/files" = "https://raw.githubusercontent.com/koenvo/wyscout-soccer-match-event-dataset/main/processed/files"; ``` Defined in: [packages/data-providers/src/wyscout/load.ts:34](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/load.ts#L34) Per-match event files, split out of the official archive by `matchId`. --- # WYSCOUT GOAL ZONE TAGS Source: https://www.pitchkitjs.com/docs/api/data-providers/wyscout/variables/WYSCOUT_GOAL_ZONE_TAGS ```ts const WYSCOUT_GOAL_ZONE_TAGS: Readonly>; ``` Defined in: [packages/data-providers/src/wyscout/predicates.ts:68](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/predicates.ts#L68) Where a shot ended up, as Wyscout records it: 1201-1223, covering the nine zones of the goal, the posts, and off-target. This is the reason a shot has no end coordinate — the information is here instead, and `positions[1]` is a placeholder. --- # WYSCOUT REFERENCE BASE URL Source: https://www.pitchkitjs.com/docs/api/data-providers/wyscout/variables/WYSCOUT_REFERENCE_BASE_URL ```ts const WYSCOUT_REFERENCE_BASE_URL: "https://ndownloader.figshare.com/files" = "https://ndownloader.figshare.com/files"; ``` Defined in: [packages/data-providers/src/wyscout/load.ts:38](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/load.ts#L38) figshare's file endpoint, where the official reference files live. --- # WYSCOUT REFERENCE FILE IDS Source: https://www.pitchkitjs.com/docs/api/data-providers/wyscout/variables/WYSCOUT_REFERENCE_FILE_IDS ```ts const WYSCOUT_REFERENCE_FILE_IDS: object; ``` Defined in: [packages/data-providers/src/wyscout/load.ts:44](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/load.ts#L44) figshare addresses files by an opaque numeric id rather than by name, so the id cannot be derived from the filename and has to be recorded. ## Type Declaration ### coaches ```ts readonly coaches: "15073868" = "15073868"; ``` ### competitions ```ts readonly competitions: "15073685" = "15073685"; ``` ### players ```ts readonly players: "15073721" = "15073721"; ``` ### referees ```ts readonly referees: "15074030" = "15074030"; ``` ### teams ```ts readonly teams: "15073697" = "15073697"; ``` --- # WYSCOUT TAGS Source: https://www.pitchkitjs.com/docs/api/data-providers/wyscout/variables/WYSCOUT_TAGS ```ts const WYSCOUT_TAGS: object; ``` Defined in: [packages/data-providers/src/wyscout/predicates.ts:22](https://github.com/yribeiro/pitchkit/blob/main/packages/data-providers/src/wyscout/predicates.ts#L22) The full tag vocabulary, from figshare's `tags2name.csv`. Named by what the tag means rather than by Wyscout's own label column, which mixes cases and spellings (`Goal`, `own_goal`, `not accurate`). ## Type Declaration ### ACCURATE ```ts readonly ACCURATE: 1801 = 1801; ``` ### ANTICIPATED ```ts readonly ANTICIPATED: 601 = 601; ``` ### ANTICIPATION ```ts readonly ANTICIPATION: 602 = 602; ``` ### ASSIST ```ts readonly ASSIST: 301 = 301; ``` ### BLOCKED ```ts readonly BLOCKED: 2101 = 2101; ``` ### CLEARANCE ```ts readonly CLEARANCE: 1501 = 1501; ``` ### COUNTER\_ATTACK ```ts readonly COUNTER_ATTACK: 1901 = 1901; ``` ### DANGEROUS\_BALL\_LOST ```ts readonly DANGEROUS_BALL_LOST: 2001 = 2001; ``` ### DIRECT ```ts readonly DIRECT: 1101 = 1101; ``` ### FAIRPLAY ```ts readonly FAIRPLAY: 1001 = 1001; ``` ### FEINT ```ts readonly FEINT: 1301 = 1301; ``` ### FREE\_SPACE\_LEFT ```ts readonly FREE_SPACE_LEFT: 502 = 502; ``` ### FREE\_SPACE\_RIGHT ```ts readonly FREE_SPACE_RIGHT: 501 = 501; ``` ### GOAL ```ts readonly GOAL: 101 = 101; ``` ### HEAD\_OR\_BODY ```ts readonly HEAD_OR_BODY: 403 = 403; ``` ### HIGH ```ts readonly HIGH: 801 = 801; ``` ### INDIRECT ```ts readonly INDIRECT: 1102 = 1102; ``` ### INTERCEPTION ```ts readonly INTERCEPTION: 1401 = 1401; ``` ### KEY\_PASS ```ts readonly KEY_PASS: 302 = 302; ``` ### LEFT\_FOOT ```ts readonly LEFT_FOOT: 401 = 401; ``` ### LOST ```ts readonly LOST: 701 = 701; ``` ### LOW ```ts readonly LOW: 802 = 802; ``` ### MISSED\_BALL ```ts readonly MISSED_BALL: 1302 = 1302; ``` ### NEUTRAL ```ts readonly NEUTRAL: 702 = 702; ``` ### NOT\_ACCURATE ```ts readonly NOT_ACCURATE: 1802 = 1802; ``` ### OPPORTUNITY ```ts readonly OPPORTUNITY: 201 = 201; ``` ### OWN\_GOAL ```ts readonly OWN_GOAL: 102 = 102; ``` ### RED\_CARD ```ts readonly RED_CARD: 1701 = 1701; ``` ### RIGHT\_FOOT ```ts readonly RIGHT_FOOT: 402 = 402; ``` ### SECOND\_YELLOW\_CARD ```ts readonly SECOND_YELLOW_CARD: 1703 = 1703; ``` ### SLIDING\_TACKLE ```ts readonly SLIDING_TACKLE: 1601 = 1601; ``` ### TAKE\_ON\_LEFT ```ts readonly TAKE_ON_LEFT: 503 = 503; ``` ### TAKE\_ON\_RIGHT ```ts readonly TAKE_ON_RIGHT: 504 = 504; ``` ### THROUGH ```ts readonly THROUGH: 901 = 901; ``` ### WON ```ts readonly WON: 703 = 703; ``` ### YELLOW\_CARD ```ts readonly YELLOW_CARD: 1702 = 1702; ```