@sportsdataverse/sdvplot 0.0.0-stage → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/NOTICE.md +94 -0
- package/README.md +908 -2
- package/dist/_web-D7Aa5Rd8.d.ts +69 -0
- package/dist/aaf-GJ3SH34T.js +13 -0
- package/dist/aaf-HCYN5T6Y.js +37 -0
- package/dist/aaf-ZAE5KS2Y.js +13 -0
- package/dist/ahl-E66MDVCU.js +66 -0
- package/dist/ahl-NPQQWZEV.js +249 -0
- package/dist/ahl-QRDU73XX.js +309 -0
- package/dist/axis-CraWQRUJ.d.ts +49 -0
- package/dist/bins.d.ts +174 -0
- package/dist/bins.js +4 -0
- package/dist/bins.js.map +1 -0
- package/dist/cfb-F42SVS4X.js +5000 -0
- package/dist/cfb-P3SHEYRZ.js +692 -0
- package/dist/cfb-WXRZANLP.js +10226 -0
- package/dist/chartjs-surface.d.ts +42 -0
- package/dist/chartjs-surface.js +65 -0
- package/dist/chartjs-surface.js.map +1 -0
- package/dist/chartjs.d.ts +132 -0
- package/dist/chartjs.js +339 -0
- package/dist/chartjs.js.map +1 -0
- package/dist/chunk-4C3GX6QO.js +92 -0
- package/dist/chunk-4C3GX6QO.js.map +1 -0
- package/dist/chunk-C2CDY5OG.js +137 -0
- package/dist/chunk-C2CDY5OG.js.map +1 -0
- package/dist/chunk-E7G7VSLV.js +43 -0
- package/dist/chunk-E7G7VSLV.js.map +1 -0
- package/dist/chunk-J6R2LEJ7.js +58 -0
- package/dist/chunk-J6R2LEJ7.js.map +1 -0
- package/dist/chunk-JJFTD4VB.js +175 -0
- package/dist/chunk-JJFTD4VB.js.map +1 -0
- package/dist/chunk-KKH6ABMA.js +223 -0
- package/dist/chunk-KKH6ABMA.js.map +1 -0
- package/dist/chunk-NLPH2VZT.js +127 -0
- package/dist/chunk-NLPH2VZT.js.map +1 -0
- package/dist/chunk-OKEE4AH6.js +30 -0
- package/dist/chunk-OKEE4AH6.js.map +1 -0
- package/dist/chunk-QY65DUEF.js +306 -0
- package/dist/chunk-QY65DUEF.js.map +1 -0
- package/dist/chunk-RMT2GMFH.js +97 -0
- package/dist/chunk-RMT2GMFH.js.map +1 -0
- package/dist/chunk-SEBO35DV.js +76 -0
- package/dist/chunk-SEBO35DV.js.map +1 -0
- package/dist/chunk-TAXO3VXH.js +556 -0
- package/dist/chunk-TAXO3VXH.js.map +1 -0
- package/dist/chunk-TDNBAEQB.js +105 -0
- package/dist/chunk-TDNBAEQB.js.map +1 -0
- package/dist/cricket-KPCYG2HL.js +493 -0
- package/dist/cricket-NDXLE25B.js +116 -0
- package/dist/cricket-YUUF7P6M.js +160 -0
- package/dist/d3.d.ts +234 -0
- package/dist/d3.js +198 -0
- package/dist/d3.js.map +1 -0
- package/dist/echarts.d.ts +121 -0
- package/dist/echarts.js +228 -0
- package/dist/echarts.js.map +1 -0
- package/dist/echl-3CR4RGFC.js +241 -0
- package/dist/echl-NPC32C23.js +107 -0
- package/dist/echl-PI33DGJC.js +64 -0
- package/dist/export.d.ts +130 -0
- package/dist/export.js +258 -0
- package/dist/export.js.map +1 -0
- package/dist/headshots-B2J_LOO8.d.ts +40 -0
- package/dist/index.d.ts +182 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/interact.d.ts +567 -0
- package/dist/interact.js +809 -0
- package/dist/interact.js.map +1 -0
- package/dist/marks-DH-tQIP-.d.ts +75 -0
- package/dist/mbb-3TRLVW3H.js +3619 -0
- package/dist/mbb-DQUHCHZP.js +5111 -0
- package/dist/mbb-PRAIO2P5.js +371 -0
- package/dist/milb-6IQ6NCEW.js +291 -0
- package/dist/milb-EYY5MD4T.js +1752 -0
- package/dist/milb-EYZ4SZLI.js +797 -0
- package/dist/mlb-4PBUJSVQ.js +35 -0
- package/dist/mlb-FHPY3GQJ.js +701 -0
- package/dist/mlb-REVGL3N2.js +665 -0
- package/dist/nba-ATT775GS.js +485 -0
- package/dist/nba-LKM4UHVU.js +482 -0
- package/dist/nba-YX7PXM3R.js +35 -0
- package/dist/nbagl-3WGZCZ4S.js +37 -0
- package/dist/nbagl-LP4XJRAL.js +229 -0
- package/dist/nbagl-VTTOU7LN.js +499 -0
- package/dist/ncaa_baseball-UV75LNVR.js +2670 -0
- package/dist/ncaa_baseball-VD5J5C72.js +419 -0
- package/dist/ncaa_baseball-YRBS32D6.js +4592 -0
- package/dist/ncaa_mhockey-IMYHS7QS.js +1033 -0
- package/dist/ncaa_mhockey-TXTKWHE3.js +115 -0
- package/dist/ncaa_mhockey-U3MFW5VT.js +663 -0
- package/dist/ncaa_softball-6WR6KS64.js +420 -0
- package/dist/ncaa_softball-RZCTIE56.js +2654 -0
- package/dist/ncaa_softball-VOD4PVGY.js +4599 -0
- package/dist/ncaa_whockey-6XXGUTBK.js +607 -0
- package/dist/ncaa_whockey-AKKYKY67.js +53 -0
- package/dist/ncaa_whockey-KBEKXFBB.js +293 -0
- package/dist/nfl-BDB2HYAR.js +625 -0
- package/dist/nfl-EHYHDLJD.js +37 -0
- package/dist/nfl-VF4NJCHY.js +514 -0
- package/dist/nfl_gsis-UY64JO37.js +4 -0
- package/dist/nhl-6WPHME7H.js +511 -0
- package/dist/nhl-EMIJFZHY.js +884 -0
- package/dist/nhl-ISFUKRFU.js +37 -0
- package/dist/ohl-2FEM554G.js +113 -0
- package/dist/ohl-C5Q4W6JB.js +32 -0
- package/dist/ohl-TQ4J46VC.js +66 -0
- package/dist/phf-H7POU2KW.js +32 -0
- package/dist/phf-K5IFMZUM.js +13 -0
- package/dist/phf-TWJI3BOW.js +20 -0
- package/dist/plot.d.ts +449 -0
- package/dist/plot.js +711 -0
- package/dist/plot.js.map +1 -0
- package/dist/plotly.d.ts +129 -0
- package/dist/plotly.js +360 -0
- package/dist/plotly.js.map +1 -0
- package/dist/pwhl-OX3BO4JI.js +53 -0
- package/dist/pwhl-W44OC3C6.js +17 -0
- package/dist/pwhl-ZJGG3H7W.js +23 -0
- package/dist/qmjhl-5HISEHLL.js +35 -0
- package/dist/qmjhl-DA3UHKE5.js +125 -0
- package/dist/qmjhl-YG4BOQPF.js +614 -0
- package/dist/react.d.ts +101 -0
- package/dist/react.js +164 -0
- package/dist/react.js.map +1 -0
- package/dist/resolve-CQW-jzvr.d.ts +28 -0
- package/dist/selection-D4T3PkRt.d.ts +140 -0
- package/dist/shots.d.ts +364 -0
- package/dist/shots.js +85 -0
- package/dist/shots.js.map +1 -0
- package/dist/soccer-7BH3ZLVL.js +7898 -0
- package/dist/soccer-MRU25OGE.js +2636 -0
- package/dist/soccer-PF4IPPVA.js +12342 -0
- package/dist/surfaces-ChaD9nei.d.ts +38 -0
- package/dist/testing.d.ts +75 -0
- package/dist/testing.js +240 -0
- package/dist/testing.js.map +1 -0
- package/dist/tiers-B6pUBPcE.d.ts +93 -0
- package/dist/types-C7n6gJF3.d.ts +62 -0
- package/dist/ufl-7VLZTLTT.js +143 -0
- package/dist/ufl-CCMBLPSW.js +100 -0
- package/dist/ufl-F2BJRXME.js +16 -0
- package/dist/usfl-4CR5RMZJ.js +32 -0
- package/dist/usfl-LD7HP2YK.js +14 -0
- package/dist/usfl-VU4YSJQD.js +19 -0
- package/dist/ushl-CPG2LB4L.js +73 -0
- package/dist/ushl-PQL6HJAD.js +88 -0
- package/dist/ushl-ZT2ATPHK.js +22 -0
- package/dist/vega.d.ts +85 -0
- package/dist/vega.js +362 -0
- package/dist/vega.js.map +1 -0
- package/dist/wbb-3KHCDYTK.js +5087 -0
- package/dist/wbb-BMX53Q3Q.js +369 -0
- package/dist/wbb-QNRN2CJJ.js +3620 -0
- package/dist/whl-4ATYZWUB.js +97 -0
- package/dist/whl-RVFPL6MH.js +79 -0
- package/dist/whl-Y7ASKYMM.js +28 -0
- package/dist/wnba-FWX5SFVI.js +232 -0
- package/dist/wnba-GX6HZR4B.js +220 -0
- package/dist/wnba-NTMWIPP6.js +20 -0
- package/dist/xfl-43R2JMJK.js +30 -0
- package/dist/xfl-H3BXQPZZ.js +16 -0
- package/dist/xfl-XON7A7FI.js +69 -0
- package/package.json +154 -3
package/dist/vega.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/vega.ts"],"names":["top"],"mappings":"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","file":"vega.js","sourcesContent":["/** The Vega-Lite adapter: logos, wordmarks and headshots as a native `image` mark layer on a plain spec object.\n * Pure: vega-lite is never imported at runtime; a NEW layered spec is returned. */\nimport {\n type AxisOptions,\n type HeadshotOptions,\n type MarkOptions,\n type Placement,\n type Row,\n aspect,\n axisLetter,\n axisPlacements,\n checkAlpha,\n checkHeight,\n colorList,\n imageSources,\n markPlacements,\n} from \"./_web.js\";\nimport type { DrawnAxisMark, DrawnMark } from \"./_web.js\";\nimport { InputError, UnsupportedTargetError } from \"./errors.js\";\nimport { placedName } from \"./placement.js\";\nimport type { IdSystem, League, SeasonInput } from \"./types.js\";\nexport type { AxisOptions, DrawnAxisMark, DrawnMark, HeadshotOptions, MarkOptions, Row } from \"./_web.js\";\nexport { embedSources } from \"./_web.js\"; // public: the README tells callers to build `embed` with it\n\n/** Structural types for a Vega-Lite spec: the subset `sdvplot/vega` reads and writes. No runtime import of vega-lite. */\nexport type VegaLiteSpec = Record<string, unknown> & {\n layer?: unknown[];\n encoding?: Record<string, unknown>;\n mark?: unknown;\n width?: unknown;\n height?: unknown;\n config?: Record<string, unknown>;\n data?: unknown;\n datasets?: Record<string, unknown>;\n};\n/** One sdvplot image layer. It never shows a tooltip: `mark.tooltip: null` outranks `config.mark.tooltip` and\n * `config.image.tooltip`, and `encoding.tooltip: null` outranks a parent layer's `encoding.tooltip`. */\nexport interface ImageLayer {\n name: string;\n data: { values: Record<string, unknown>[] };\n mark: {\n type: \"image\";\n aria: true;\n width: number;\n height: number;\n aspect: true;\n tooltip: null;\n opacity?: number;\n align?: \"left\" | \"center\" | \"right\";\n baseline?: \"top\" | \"middle\" | \"bottom\";\n };\n encoding: Record<string, unknown>;\n}\n\nconst DEFAULT_HEIGHT = 300; // px: Vega-Lite's continuous view height when neither chart nor config sets one\nconst AXIS_GAP = 6; // px between the axis line and the axis images (past Vega-Lite's 5 px ticks)\nconst LABEL_PADDING = 2; // px: Vega-Lite's default axis labelPadding\nconst URL = \"sdvplot_url\";\nconst TEAM = \"sdvplot_team\";\nconst LABEL = \"sdvplot_label\"; // the accessible description, e.g. \"KC logo\"; Vega's automatic aria-label would read out the image URL\nconst DISCRETE = new Set([\"nominal\", \"ordinal\"]);\nconst UNIT_KEYS = [\"mark\", \"encoding\", \"transform\", \"params\", \"projection\", \"view\", \"name\"] as const; // what moves into the first layer when a unit spec is wrapped\nconst COMPOSITE: Record<string, string> = {\n facet: \"spec.spec\",\n repeat: \"spec.spec\",\n hconcat: \"hconcat[i]\",\n vconcat: \"vconcat[i]\",\n concat: \"concat[i]\",\n};\n\nexport type VlType = \"quantitative\" | \"nominal\" | \"ordinal\" | \"temporal\";\ntype Enc = Record<string, unknown> & {\n field?: string;\n type?: string;\n sort?: unknown;\n timeUnit?: unknown;\n aggregate?: unknown;\n bin?: unknown;\n stack?: unknown;\n axis?: unknown;\n scale?: { domain?: unknown };\n};\n\nfunction specOf(target: unknown): VegaLiteSpec {\n if (typeof target !== \"object\" || target === null || Array.isArray(target))\n throw new UnsupportedTargetError(\n `sdvplot/vega draws on a Vega-Lite spec object, got ${target === null ? \"null\" : typeof target}`,\n );\n for (const key of Object.keys(COMPOSITE))\n if (key in target)\n throw new InputError(\n `sdvplot cannot draw on a ${key} spec; draw on one of its charts (${COMPOSITE[key]}), then combine`,\n );\n return target as VegaLiteSpec;\n}\nconst jsonable = (v: unknown): unknown =>\n v instanceof Date ? v.toISOString() : typeof v === \"bigint\" ? Number(v) : v;\nconst unescapeField = (f: string): string => f.replace(/\\\\(.)/g, \"$1\"); // \"a\\.b\" → the data column \"a.b\"\n\n/** A spec and every layer inside it, outermost first. */\nfunction units(spec: VegaLiteSpec): VegaLiteSpec[] {\n return [spec, ...(spec.layer ?? []).flatMap((s) => units(s as VegaLiteSpec))];\n}\n/** The first (unit, channel def) encoding `channel` with a field. */\nfunction unit(spec: VegaLiteSpec, channel: \"x\" | \"y\"): [VegaLiteSpec, Enc] {\n for (const u of units(spec)) {\n const e = (u.encoding as Record<string, unknown> | undefined)?.[channel];\n if (typeof e === \"object\" && e !== null && \"field\" in e) return [u, e as Enc];\n }\n return [{}, {}];\n}\nfunction pixels(h: unknown, name: string): number {\n if (typeof h !== \"number\" || !Number.isFinite(h) || h <= 0)\n throw new InputError(\n `sdvplot sizes marks from the chart height; ${name} must be a positive number of pixels, not ${JSON.stringify(h)}`,\n );\n return h;\n}\nfunction chartHeight(spec: VegaLiteSpec): number {\n for (const u of units(spec)) if (u.height !== undefined) return pixels(u.height, \"height\");\n if (DISCRETE.has(String(unit(spec, \"y\")[1].type)))\n throw new InputError(\n \"a discrete y axis is sized by its step; set the chart height in pixels (spec.height)\",\n );\n const h =\n (spec.config?.view as { continuousHeight?: unknown } | undefined)?.continuousHeight ?? DEFAULT_HEIGHT;\n return pixels(h, \"config.view.continuousHeight\");\n}\nconst STACKED_BY_DEFAULT = new Set([\"bar\", \"area\", \"arc\"]); // Vega-Lite stacks a quantitative measure on these marks\n/** Vega-Lite's sort-by-channel shorthand (\"y\", \"-y\") as the field sort it compiles to: the channel's aggregate, else\n * \"sum\" for a stacked measure (a bar, area or arc mark unless the channel sets `stack: null`), else \"min\". */\nfunction byChannel(sort: string, u: VegaLiteSpec): Record<string, unknown> {\n const desc = sort.startsWith(\"-\");\n const def = (u.encoding as Record<string, unknown> | undefined)?.[desc ? sort.slice(1) : sort] as\n | Enc\n | undefined;\n if (def?.field === undefined && def?.aggregate === undefined)\n throw new InputError(\n `the sort ${JSON.stringify(sort)} names a channel without a field; sort with an explicit list (sort: [...])`,\n );\n // a shared encoding on a layered spec is stacked when any layer under it stacks\n const marks = units(u).map((v) =>\n String(typeof v.mark === \"object\" && v.mark !== null ? (v.mark as { type?: unknown }).type : v.mark),\n );\n const stacked =\n def.type === \"quantitative\" &&\n !def.bin &&\n (\"stack\" in def ? Boolean(def.stack) : marks.some((m) => STACKED_BY_DEFAULT.has(m)));\n return {\n ...(def.field !== undefined ? { field: def.field } : {}),\n op: def.aggregate ?? (stacked ? \"sum\" : \"min\"),\n ...(desc ? { order: \"descending\" } : {}),\n };\n}\n/** The rows a unit reads: its own inline values or named dataset, else the top-level ones; undefined for url data. */\nfunction inlineRows(spec: VegaLiteSpec, u: VegaLiteSpec): Record<string, unknown>[] | undefined {\n const data = (u.data ?? spec.data ?? {}) as { name?: string; values?: Record<string, unknown>[] };\n return data.name !== undefined\n ? (spec.datasets?.[data.name] as Record<string, unknown>[] | undefined)\n : data.values;\n}\n/** A count sort as the explicit list Vega-Lite orders the axis by: kept as a count, the image layer's own rows would add\n * to the counts (the layers share the scale). Ties keep their first appearance, as Vega's stable sort does. */\nfunction countOrder(\n spec: VegaLiteSpec,\n u: VegaLiteSpec,\n enc: Enc,\n order: unknown,\n channel: string,\n): unknown[] {\n const rows = inlineRows(spec, u);\n const all = units(spec);\n if (\n rows === undefined ||\n new Set(all.map((v) => v.data).filter((d) => d !== undefined)).size > 1 ||\n all.some((v) => v.transform !== undefined)\n )\n throw new InputError(\n `the ${channel} count sort is kept once a layer is added only on inline data with no transform (one data source); sort with an explicit list (sort: [...]), then add the marks`,\n );\n const key = unescapeField(String(enc.field));\n const counts = new Map<unknown, number>();\n for (const r of rows)\n if (r[key] !== null && r[key] !== undefined) counts.set(r[key], (counts.get(r[key]) ?? 0) + 1);\n const sign = order === \"descending\" ? -1 : 1;\n return [...counts].sort((a, b) => (a[1] - b[1]) * sign).map(([c]) => c);\n}\n/** The discrete axis' sort, when Vega-Lite keeps it once another layer shares the scale (it drops the rest).\n * `u` is the unit encoding the channel: the shorthand (\"-y\") reads its sibling channel and comes back as a field sort,\n * and a count sort comes back as the explicit list (`countOrder`), for both layers. */\nfunction sortOf(spec: VegaLiteSpec, enc: Enc, channel: string, u: VegaLiteSpec): unknown {\n const given = \"sort\" in enc ? enc.sort : \"ascending\";\n const sort =\n typeof given === \"string\" && given !== \"ascending\" && given !== \"descending\"\n ? byChannel(given, u)\n : given;\n const op = String((sort as { op?: unknown } | null)?.op);\n const kept =\n sort === null ||\n sort === \"ascending\" ||\n sort === \"descending\" ||\n Array.isArray(sort) ||\n (typeof sort === \"object\" && (\"field\" in sort || op === \"count\") && [\"count\", \"min\", \"max\"].includes(op));\n if (!kept)\n throw new InputError(\n `Vega-Lite drops the ${channel} sort ${JSON.stringify(given)}${given === sort ? \"\" : ` (${JSON.stringify(sort)})`} once a layer is added; sort with an explicit list (sort: [...]) or by a field with op \"count\", \"min\" or \"max\", then add the marks`,\n );\n return op === \"count\" ? countOrder(spec, u, enc, (sort as { order?: unknown }).order, channel) : sort;\n}\n/** The x and y encodings the layer copies: field, type, timeUnit and (discrete) sort. Aggregate/bin raise. */\nfunction encodings(spec: VegaLiteSpec): { x: Enc; y: Enc } {\n const out = {} as { x: Enc; y: Enc };\n for (const ch of [\"x\", \"y\"] as const) {\n const [u, enc] = unit(spec, ch);\n for (const key of [\"aggregate\", \"bin\"] as const) {\n const v = enc[key];\n if (v !== undefined && v !== null && v !== false && v !== \"binned\")\n throw new InputError(\n `the chart's ${ch} encoding has ${key}=${JSON.stringify(v)}, which the logo layer cannot copy; compute it in the data first, encode the result, then add the marks`,\n );\n }\n const e: Enc = { field: enc.field ?? ch, type: enc.type ?? \"quantitative\" };\n if (enc.timeUnit !== undefined) e.timeUnit = enc.timeUnit;\n if (DISCRETE.has(String(e.type)) && \"sort\" in enc) e.sort = sortOf(spec, enc, ch, u);\n out[ch] = e;\n }\n return out;\n}\n/** What each placed image's accessible description names: the resolved team, or a headshot's own player id (placedName). */\nfunction labelsOf(\n rows: readonly Row[],\n ps: readonly Placement[],\n o: MarkOptions | HeadshotOptions,\n): string[] {\n const key = \"player\" in o ? o.player : o.team;\n return ps.map((p) => placedName(p, o.league, rows[p.index]?.[key]));\n}\nfunction layerOf(\n ps: readonly Placement[],\n kind: string,\n h: number,\n chartH: number,\n alpha: number,\n x: Enc,\n y: Enc,\n labels: readonly string[],\n embed?: ReadonlyMap<string, string>,\n): ImageLayer {\n const hPx = h * chartH;\n const sources = imageSources(ps, embed);\n const values = ps.map((p, i) => ({\n [unescapeField(String(x.field))]: jsonable(p.x),\n [unescapeField(String(y.field))]: jsonable(p.y),\n [URL]: sources[i]!,\n [TEAM]: p.id,\n [LABEL]: `${labels[i]} ${kind}`,\n }));\n const widest = ps.length ? Math.max(...ps.map(aspect)) : 1;\n return {\n name: `sdvplot_${kind}`,\n data: { values },\n mark: {\n type: \"image\",\n aria: true,\n width: hPx * widest,\n height: hPx,\n aspect: true,\n tooltip: null,\n opacity: alpha,\n },\n encoding: {\n x,\n y,\n url: { field: URL, type: \"nominal\" },\n description: { field: LABEL, type: \"nominal\" },\n tooltip: null,\n },\n };\n}\n/** `spec` plus `layer` as a layered spec: a unit spec is wrapped, its unit keys moving into layer[0]; a layered spec\n * gains one layer. A layered spec's top-level encoding and transform move into a group around its own layers, so the\n * image layer inherits neither (a shared colour field would add an empty legend entry for the images). */\nfunction layered(spec: VegaLiteSpec, layer: ImageLayer): VegaLiteSpec {\n if (Array.isArray(spec.layer)) {\n const { encoding, transform, ...top } = spec;\n if (encoding === undefined && transform === undefined) return { ...spec, layer: [...spec.layer, layer] };\n const group = {\n ...(transform !== undefined ? { transform } : {}),\n ...(encoding !== undefined ? { encoding } : {}),\n };\n return { ...top, layer: [{ ...group, layer: spec.layer }, layer] };\n }\n const top: VegaLiteSpec = {};\n const first: VegaLiteSpec = {};\n for (const [k, v] of Object.entries(spec))\n ((UNIT_KEYS as readonly string[]).includes(k) ? first : top)[k] = v;\n return { ...top, layer: [first, layer] };\n}\n\n/** One image layer of team logos to drop into a layer list of your own; its fields are \"x\" and \"y\". It never shows a\n * tooltip, even under `config.mark.tooltip` or a parent layer's `encoding.tooltip`. */\nexport function logoLayer(\n rows: readonly Row[],\n o: MarkOptions & {\n /** The chart height in px that `height` is a fraction of. Default 300 (Vega-Lite's continuous height). */\n chartHeight?: number;\n /** The layer's x encoding type (its field is \"x\"). Default \"quantitative\". */\n xType?: VlType;\n /** The layer's y encoding type (its field is \"y\"). Default \"quantitative\". */\n yType?: VlType;\n },\n): ImageLayer {\n const h = checkHeight(o.height ?? 0.1);\n const a = checkAlpha(o.alpha ?? 1);\n const ps = markPlacements(rows, \"logo\", o);\n return layerOf(\n ps,\n \"logo\",\n h,\n o.chartHeight === undefined ? DEFAULT_HEIGHT : pixels(o.chartHeight, \"chartHeight\"),\n a,\n { field: \"x\", type: o.xType ?? \"quantitative\" },\n { field: \"y\", type: o.yType ?? \"quantitative\" },\n labelsOf(rows, ps, o),\n o.embed,\n );\n}\nfunction add(\n target: unknown,\n rows: readonly Row[],\n kind: \"logo\" | \"wordmark\" | \"headshot\",\n o: MarkOptions | HeadshotOptions,\n): VegaLiteSpec {\n const h = checkHeight(o.height ?? 0.1);\n const a = checkAlpha(o.alpha ?? 1);\n const spec = specOf(target);\n const enc = encodings(spec);\n const ps = markPlacements(rows, kind, o);\n const base = structuredClone(spec);\n for (const ch of [\"x\", \"y\"] as const)\n if (Array.isArray(enc[ch].sort)) targetChannel(base, ch).sort = enc[ch].sort; // a count sort's list (sortOf)\n return layered(\n base,\n layerOf(ps, kind, h, chartHeight(spec), a, enc.x, enc.y, labelsOf(rows, ps, o), o.embed),\n );\n}\n/** Team logos as an image layer at each row's (x, y). The layer never shows a tooltip, even when the spec turns tooltips\n * on for every mark (`config.mark.tooltip`). */\nexport function withLogos(spec: VegaLiteSpec, rows: readonly Row[], o: MarkOptions): VegaLiteSpec;\nexport function withLogos<F extends object>(spec: F, rows: readonly Row[], o: MarkOptions): F;\nexport function withLogos(spec: object, rows: readonly Row[], o: MarkOptions): object {\n return add(spec, rows, \"logo\", o);\n}\n/** Team wordmarks as an image layer at each row's (x, y). The layer never shows a tooltip, even when the spec turns\n * tooltips on for every mark (`config.mark.tooltip`). */\nexport function withWordmarks(spec: VegaLiteSpec, rows: readonly Row[], o: MarkOptions): VegaLiteSpec;\nexport function withWordmarks<F extends object>(spec: F, rows: readonly Row[], o: MarkOptions): F;\nexport function withWordmarks(spec: object, rows: readonly Row[], o: MarkOptions): object {\n return add(spec, rows, \"wordmark\", o);\n}\n/** Player headshots as an image layer at each row's (x, y). The layer never shows a tooltip, even when the spec turns\n * tooltips on for every mark (`config.mark.tooltip`). */\nexport function withHeadshots(spec: VegaLiteSpec, rows: readonly Row[], o: HeadshotOptions): VegaLiteSpec;\nexport function withHeadshots<F extends object>(spec: F, rows: readonly Row[], o: HeadshotOptions): F;\nexport function withHeadshots(spec: object, rows: readonly Row[], o: HeadshotOptions): object {\n return add(spec, rows, \"headshot\", o);\n}\n\nfunction named(spec: VegaLiteSpec, prefix: string): ImageLayer[] {\n return units(spec).filter(\n (u): u is VegaLiteSpec & ImageLayer => typeof u.name === \"string\" && u.name.startsWith(prefix),\n );\n}\n/** Test hook: [teamId, x, y, height, url] per image of the sdvplot layers; height = image px / chart px. */\nexport function drawnMarks(spec: VegaLiteSpec): DrawnMark[] {\n const s = specOf(spec);\n const ref = chartHeight(s);\n return named(s, \"sdvplot_\")\n .filter((l) => !l.name.startsWith(\"sdvplot_axis_\"))\n .flatMap((l) => {\n const xk = unescapeField(String((l.encoding.x as Enc).field));\n const yk = unescapeField(String((l.encoding.y as Enc).field));\n return l.data.values.map(\n (r): DrawnMark => [String(r[TEAM]), r[xk], r[yk], l.mark.height / ref, String(r[URL])],\n );\n });\n}\n\nconst BLANKED = /^indexof\\((\\[.*?\\]), datum\\.label\\) >= 0/;\n\n/** A discrete axis' categories in display order: explicit scale domain or sort list, else the inline data. */\nfunction categoriesOf(spec: VegaLiteSpec, u: VegaLiteSpec, enc: Enc): unknown[] {\n if (Array.isArray(enc.scale?.domain)) return enc.scale.domain;\n const sort = \"sort\" in enc ? enc.sort : \"ascending\";\n const rows = inlineRows(spec, u);\n if (rows === undefined) {\n if (Array.isArray(sort)) return sort;\n throw new InputError(\n \"withAxisLogos reads the categories from inline data; give the axis an explicit sort=[...] list\",\n );\n }\n const key = unescapeField(String(enc.field));\n const seen = [...new Set(rows.map((r) => r[key]).filter((v) => v !== null && v !== undefined))];\n if (Array.isArray(sort)) return [...sort, ...seen.filter((c) => !sort.includes(c))];\n if (sort === \"ascending\" || sort === \"descending\")\n return seen.sort((a, b) => String(a).localeCompare(String(b)) * (sort === \"descending\" ? -1 : 1));\n return seen; // sort null or a field sort: data order\n}\n/** The channel object the spec reads the axis from (the first unit encoding it with a field), inside a deep copy. */\nfunction targetChannel(spec: VegaLiteSpec, channel: \"x\" | \"y\"): Enc {\n for (const u of units(spec)) {\n const e = (u.encoding as Record<string, unknown> | undefined)?.[channel];\n if (typeof e === \"object\" && e !== null && \"field\" in e) return e as Enc;\n }\n throw new InputError(`the spec has no ${channel} encoding with a field`);\n}\n\n/** Team logos (or wordmarks, `markType`) in place of the labels of a nominal or ordinal axis: a `labelExpr` blanks the\n * resolved labels and an image layer draws them. Assumes the default axis orient (x at the bottom, y on the left) and\n * that `height` is the plot height: an axis with `orient: \"top\"` or `\"right\"` gets its logos on the opposite side.\n * The image layer never shows a tooltip, even when the spec turns tooltips on for every mark (`config.mark.tooltip`). */\nexport function withAxisLogos(spec: VegaLiteSpec, axis: \"x\" | \"y\", o: AxisOptions): VegaLiteSpec;\nexport function withAxisLogos<F extends object>(spec: F, axis: \"x\" | \"y\", o: AxisOptions): F;\nexport function withAxisLogos(spec: object, axis: \"x\" | \"y\", o: AxisOptions): object {\n const letter = axisLetter(axis);\n const h = checkHeight(o.height ?? 0.1);\n const s = specOf(spec);\n const [u, enc] = unit(s, letter);\n if (!DISCRETE.has(String(enc.type)))\n throw new InputError(`withAxisLogos needs a nominal or ordinal ${letter} axis (team names on the axis)`);\n if (enc.axis === null) throw new InputError(`the chart's ${letter} axis is hidden (axis: null)`);\n const sort = sortOf(s, enc, letter, u);\n const cats = categoriesOf(s, u, enc);\n const ps = axisPlacements(cats.map(String), letter, o);\n const chartH = chartHeight(s);\n const hPx = h * chartH;\n const widest = ps.length ? Math.max(...ps.map(aspect)) : 1;\n const pos = ps.map((p) => Number(letter === \"x\" ? p.x : p.y));\n const blank = JSON.stringify(pos.map((i) => String(cats[i])));\n const old = (typeof enc.axis === \"object\" && enc.axis !== null ? enc.axis : {}) as Record<\n string,\n unknown\n > & { labelExpr?: string; labelPadding?: number };\n const room = (letter === \"x\" ? hPx : hPx * widest) + AXIS_GAP;\n const expr = `indexof(${blank}, datum.label) >= 0 ? '' : ${old.labelExpr !== undefined ? `(${old.labelExpr})` : \"datum.label\"}`;\n const base = structuredClone(s);\n const target = targetChannel(base, letter);\n target.axis = {\n ...old,\n labelExpr: expr,\n labelPadding: (old.labelPadding ?? LABEL_PADDING) + room,\n };\n if (Array.isArray(sort)) target.sort = sort; // a count sort's list (sortOf)\n const key = unescapeField(String(enc.field));\n const sources = imageSources(ps, o.embed);\n const values = ps.map((p, i) => ({\n [key]: cats[pos[i]!],\n [URL]: sources[i]!,\n [TEAM]: p.id,\n [LABEL]: `${placedName(p, o.league, cats[pos[i]!])} ${o.markType ?? \"logo\"}`,\n }));\n const channel: Enc = {\n field: enc.field ?? letter,\n type: String(enc.type),\n ...(\"sort\" in enc ? { sort } : {}),\n };\n const url = { field: URL, type: \"nominal\" as const };\n const description = { field: LABEL, type: \"nominal\" as const };\n const layer: ImageLayer =\n letter === \"x\"\n ? {\n name: \"sdvplot_axis_x\",\n data: { values },\n mark: {\n type: \"image\",\n aria: true,\n width: hPx * widest,\n height: hPx,\n aspect: true,\n tooltip: null,\n baseline: \"top\",\n },\n encoding: { x: channel, y: { value: chartH + AXIS_GAP }, url, description, tooltip: null },\n }\n : {\n name: \"sdvplot_axis_y\",\n data: { values },\n mark: {\n type: \"image\",\n aria: true,\n width: hPx * widest,\n height: hPx,\n aspect: true,\n tooltip: null,\n align: \"right\",\n },\n encoding: { y: channel, x: { value: -AXIS_GAP }, url, description, tooltip: null },\n };\n return layered(base, layer);\n}\n\n/** `{ domain, range }` for `encoding.color.scale`: the values as given, their team colours. */\nexport function teamColorScale(\n league: League,\n teams: readonly unknown[],\n o: { which?: \"primary\" | \"secondary\"; season?: SeasonInput; idSystem?: IdSystem; fallback?: string } = {},\n): { domain: string[]; range: string[] } {\n return {\n domain: teams.map(String),\n range: colorList(league, teams, o).map((c) => c ?? o.fallback ?? \"#808080\"),\n };\n}\n\n/** Test hook: [teamId, category position, height] per image on `axis`, in tick order. */\nexport function drawnAxisMarks(spec: VegaLiteSpec, axis: \"x\" | \"y\"): DrawnAxisMark[] {\n const letter = axisLetter(axis);\n const s = specOf(spec);\n const [u, enc] = unit(s, letter);\n const cats = categoriesOf(s, u, enc);\n const ref = chartHeight(s);\n return named(s, `sdvplot_axis_${letter}`)\n .flatMap((l) => {\n const key = unescapeField(String((l.encoding[letter] as Enc).field));\n return l.data.values.map(\n (r): DrawnAxisMark => [String(r[TEAM]), cats.indexOf(r[key]), l.mark.height / ref],\n );\n })\n .sort((a, b) => a[1] - b[1]);\n}\n/** Test hook: the labels on `axis` its labelExpr still shows as text. */\nexport function visibleAxisLabels(spec: VegaLiteSpec, axis: \"x\" | \"y\"): string[] {\n const letter = axisLetter(axis);\n const s = specOf(spec);\n const [u, enc] = unit(s, letter);\n const m = BLANKED.exec(String((enc.axis as { labelExpr?: string } | undefined)?.labelExpr ?? \"\"));\n const blanked = new Set<string>(m ? (JSON.parse(m[1]!) as string[]) : []);\n return categoriesOf(s, u, enc)\n .map(String)\n .filter((c) => !blanked.has(c));\n}\n"]}
|