@sportsdataverse/sdvtables 0.1.0 → 0.2.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/README.md +70 -112
- package/data/table_themes.json +12136 -0
- package/data/table_themes.json.sha256 +1 -0
- package/dist/aggrid.d.ts +104 -0
- package/dist/aggrid.js +230 -0
- package/dist/aggrid.js.map +1 -0
- package/dist/chunk-3TJR7TKS.js +223 -0
- package/dist/chunk-3TJR7TKS.js.map +1 -0
- package/dist/{chunk-UCRLJGDL.js → chunk-R375P3MN.js} +963 -276
- package/dist/chunk-R375P3MN.js.map +1 -0
- package/dist/chunk-UTOVFIFT.js +15176 -0
- package/dist/chunk-UTOVFIFT.js.map +1 -0
- package/dist/{chunk-U6W6MWKW.js → chunk-VLF2S6VW.js} +7 -5
- package/dist/chunk-VLF2S6VW.js.map +1 -0
- package/dist/chunk-WBTFIGYK.js +189 -0
- package/dist/chunk-WBTFIGYK.js.map +1 -0
- package/dist/{engine-CkfxYXAL.d.ts → engine-BFIPJUlC.d.ts} +1 -1
- package/dist/export.d.ts +1 -1
- package/dist/export.js +4 -3
- package/dist/export.js.map +1 -1
- package/dist/html.d.ts +8 -5
- package/dist/html.js +4 -3
- package/dist/index.d.ts +121 -8
- package/dist/index.js +51 -3
- package/dist/index.js.map +1 -1
- package/dist/mui.d.ts +134 -0
- package/dist/mui.js +193 -0
- package/dist/mui.js.map +1 -0
- package/dist/react.d.ts +2 -2
- package/dist/react.js +3 -2
- package/dist/react.js.map +1 -1
- package/dist/spec-A88vJX5A.d.ts +748 -0
- package/dist/tanstack-table.d.ts +113 -0
- package/dist/tanstack-table.js +98 -0
- package/dist/tanstack-table.js.map +1 -0
- package/dist/{tokens-CpYFsFtf.d.ts → tokens-CHwBt9gs.d.ts} +1 -1
- package/package.json +40 -3
- package/dist/chunk-4VKYHOHL.js +0 -2081
- package/dist/chunk-4VKYHOHL.js.map +0 -1
- package/dist/chunk-U6W6MWKW.js.map +0 -1
- package/dist/chunk-UCRLJGDL.js.map +0 -1
- package/dist/spec-BEhLDtj_.d.ts +0 -430
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/team-name.ts","../src/html/escape.ts","../src/html/icons.ts","../src/html/fonts.ts","../src/table-id.ts","../src/themes/base-css.ts","../src/scale.ts","../src/html/named-colors.ts","../src/html/svg.ts","../src/html/cells.ts","../src/html/legend-icon.ts","../src/html/social-icons.ts","../src/html/decorations.ts","../src/html/layout.ts","../src/html/parts.ts"],"names":["i","NAMED","a","present","mix","url","dir","hex6","onColor","r","solid","contrast"],"mappings":"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","file":"chunk-R375P3MN.js","sourcesContent":["// src/team-name.ts — sdvplot exports no sync name lookup (getLeagueSync is internal), so prepare() caches the names once.\nimport type { League } from \"@sportsdataverse/sdvplot\";\nimport { loadLeague } from \"@sportsdataverse/sdvplot\";\n\nconst NAMES = new Map<string, string>();\nexport async function loadTeamNames(leagues: readonly League[]): Promise<void> {\n await Promise.all(\n leagues.map(async (l) => {\n for (const t of (await loadLeague(l)).teams) if (t.name) NAMES.set(`${l}:${t.team_id}`, t.name);\n }),\n );\n}\n/** The team's name after prepare(); undefined before (alt text then falls back to the cell value). */\nexport function teamNameSync(league: League, teamId: string): string | undefined {\n return NAMES.get(`${league}:${teamId}`);\n}\n","// src/html/escape.ts\nimport { TableSpecError } from \"../errors.js\";\nconst MAP: Readonly<Record<string, string>> = {\n \"&\": \"&\",\n \"<\": \"<\",\n \">\": \">\",\n '\"': \""\",\n \"'\": \"'\",\n};\nexport const escapeHtml = (s: unknown): string =>\n String(s ?? \"\").replace(/[&<>\"']/g, (c) => MAP[c] as string);\nexport const escapeAttr: (s: unknown) => string = escapeHtml;\n/** What can end a CSS declaration, rule, string, attribute or element, or make the value fetch a resource (`url(`). */\nconst CSS_UNSAFE = /[;{}<>\"\\\\\\n\\r]|url\\(/i;\n/** True when `v` can sit in a CSS declaration value as is (the non-throwing check, for data). */\nexport const isCssValue = (v: unknown): boolean => !CSS_UNSAFE.test(String(v));\n/** A spec value bound for a CSS declaration (deco `<style>` rule or inline style): returned as is, or TableSpecError naming the field. */\nexport function cssValue(v: unknown, field: string): string {\n const s = String(v);\n if (CSS_UNSAFE.test(s))\n throw new TableSpecError(\n `${field} ${JSON.stringify(s)} is not a CSS value: it may not contain ; { } < > \" \\\\ url( or a line break`,\n );\n return s;\n}\n/** A spec number bound for CSS: a finite number (or numeric string), else TableSpecError naming the field; null and \"\" are rejected. */\nexport function checkPx(v: unknown, field: string): number {\n const n = typeof v === \"number\" ? v : typeof v === \"string\" && v.trim() !== \"\" ? Number(v) : Number.NaN;\n if (!Number.isFinite(n))\n throw new TableSpecError(`${field} must be a finite number, got ${JSON.stringify(v)}`);\n return n;\n}\n/** `{ \"background-color\": \"#fff\", \"font-size\": null }` → `background-color:#fff` (nulls dropped; values CSS-checked and escaped). Bare declarations, no `style=`. */\nexport function styleAttr(decl: Readonly<Record<string, string | number | null | undefined>>): string {\n return Object.entries(decl)\n .filter(([, v]) => v !== null && v !== undefined && v !== \"\")\n .map(([k, v]) => `${k}:${escapeAttr(cssValue(v, `CSS ${k}`))}`)\n .join(\";\");\n}\n/** The ONE place a `style=\"…\"` attribute is built: declaration lists joined with \";\" in order (later wins in CSS); \"\" when all are empty. */\nexport function styleOf(decls: readonly string[]): string {\n const s = decls.filter((x) => x !== \"\").join(\";\");\n return s ? ` style=\"${s}\"` : \"\";\n}\n","import { TableSpecError } from \"../errors.js\";\n// src/html/icons.ts — the inline-SVG icon set iconSet / iconAssign draw: plain geometry on a 16x16 grid, drawn for\n// sdvtables (no icon font, no Font Awesome), so a table is one self-contained HTML string.\nimport type { IconName } from \"../spec.js\";\nimport { escapeAttr } from \"./escape.js\";\n\nconst PATHS = {\n circle: \"M8 1a7 7 0 1 0 0 14A7 7 0 1 0 8 1z\",\n square: \"M2 2h12v12H2z\",\n diamond: \"M8 0.5 15.5 8 8 15.5 0.5 8z\",\n star: \"M8 0.8l2.2 4.6 5 .6-3.7 3.5.9 5L8 12l-4.4 2.5.9-5L.8 6l5-.6z\",\n \"triangle-up\": \"M8 1.5 15 14.5H1z\",\n \"triangle-down\": \"M1 1.5h14L8 14.5z\",\n \"arrow-up\": \"M8 1 14 8H10v7H6V8H2z\",\n \"arrow-down\": \"M6 1h4v7h4l-6 7-6-7h4z\",\n \"arrow-right\": \"M1 6h7V2l7 6-7 6v-4H1z\",\n check: \"M1.5 8.5 3.6 6.4 6.2 9 12.4 2.8 14.5 4.9 6.2 13.2z\",\n xmark: \"M3.1 1 8 5.9 12.9 1 15 3.1 10.1 8 15 12.9 12.9 15 8 10.1 3.1 15 1 12.9 5.9 8 1 3.1z\",\n minus: \"M1 6.5h14v3H1z\",\n plus: \"M6.5 1h3v5.5H15v3H9.5V15h-3V9.5H1v-3h5.5z\",\n heart: \"M8 14.5 1.6 8.2A3.9 3.9 0 0 1 8 3.4a3.9 3.9 0 0 1 6.4 4.8z\",\n} as const satisfies Readonly<Record<IconName, string>>;\n\n/** Every icon name iconSet / iconAssign accept. */\nexport const ICON_NAMES: readonly IconName[] = Object.keys(PATHS) as IconName[];\n\n/** One icon as inline SVG, `size` px square, filled with `color` (a CSS colour, already validated by the caller). */\nexport function iconSvg(name: IconName, color: string, size: number): string {\n const d = Object.hasOwn(PATHS, name) ? PATHS[name] : undefined;\n if (d === undefined)\n throw new TableSpecError(`unknown icon ${JSON.stringify(name)}; icons are ${ICON_NAMES.join(\", \")}`);\n return `<svg class=\"sdvt-icon\" viewBox=\"0 0 16 16\" width=\"${size}\" height=\"${size}\" fill=\"${escapeAttr(color)}\" aria-hidden=\"true\" style=\"vertical-align:middle\"><path d=\"${d}\"/></svg>`;\n}\n","import type { GoogleFont } from \"../themes/tokens.js\";\n/** The Google Fonts css2 `<link>` for these faces (weights merged per family, families sorted); \"\" when there are none. */\nexport function fontsLink(fonts: readonly GoogleFont[]): string {\n const byFamily = new Map<string, Set<number>>();\n for (const f of fonts) {\n const set = byFamily.get(f.family) ?? new Set<number>();\n for (const w of f.weights) set.add(w);\n byFamily.set(f.family, set);\n }\n if (byFamily.size === 0) return \"\";\n const q = [...byFamily.entries()]\n .sort(([a], [b]) => a.localeCompare(b))\n .map(\n ([fam, ws]) =>\n `family=${encodeURIComponent(fam).replace(/%20/g, \"+\")}:wght@${[...ws].sort((a, b) => a - b).join(\";\")}`,\n )\n .join(\"&\");\n return `<link rel=\"stylesheet\" href=\"https://fonts.googleapis.com/css2?${q}&display=swap\">`;\n}\n","// src/table-id.ts — deterministic id from the spec (functions dropped by JSON.stringify, which is what we want).\n// JSON.stringify is key-order sensitive: the builder always emits one key order, so a built spec and its JSON round-trip share an id.\nimport type { TableSpec } from \"./spec.js\";\n\nexport function fnv1a32(s: string): string {\n let h = 0x811c9dc5;\n for (let i = 0; i < s.length; i++) {\n h ^= s.charCodeAt(i);\n h = Math.imul(h, 0x01000193) >>> 0;\n }\n return h.toString(16).padStart(8, \"0\");\n}\nexport function tableId<Row>(spec: TableSpec<Row>): string {\n return spec.id ?? `sdvt-${fnv1a32(JSON.stringify(spec))}`;\n}\n","// src/themes/base-css.ts\nimport type { ThemeTokens } from \"./tokens.js\";\nimport { TOKEN_KEYS } from \"./tokens.js\";\nconst kebab = (s: string): string => s.replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`);\nexport function tokensCSS(sel: string, t: ThemeTokens): string {\n return `${sel}{${TOKEN_KEYS.map((k) => `--sdvt-${kebab(k)}:${t[k]};`).join(\"\")}}`;\n}\nexport function BASE_CSS(sel: string): string {\n const s = sel;\n return [\n `${s}{display:inline-block;max-width:100%;background:var(--sdvt-bg);color:var(--sdvt-text);font-family:var(--sdvt-font-body);font-size:var(--sdvt-body-size);font-weight:var(--sdvt-body-weight);line-height:var(--sdvt-line-height)}`,\n // font:inherit: a host's table{font} (Observable Framework's 13px sans) outranks inheriting the root's type\n `${s} table{font:inherit;border-collapse:collapse;border-spacing:0;width:auto;border-top:var(--sdvt-table-border-top);border-bottom:var(--sdvt-table-border-bottom);border-left:var(--sdvt-table-border-x);border-right:var(--sdvt-table-border-x)}`,\n `${s} caption{caption-side:top;text-align:var(--sdvt-heading-align);background:var(--sdvt-heading-bg);padding:var(--sdvt-heading-pad) 5px}`,\n `${s} .sdvt-title{font-family:var(--sdvt-font-title);font-weight:var(--sdvt-title-weight);font-size:var(--sdvt-title-size);color:var(--sdvt-title-color);text-transform:var(--sdvt-title-transform);letter-spacing:var(--sdvt-title-tracking)}`,\n `${s} .sdvt-subtitle{display:block;font-size:var(--sdvt-subtitle-size);font-style:var(--sdvt-subtitle-style);font-weight:var(--sdvt-subtitle-weight);color:var(--sdvt-subtitle-color)}`, // great_tables draws the subtitle on its own heading row in every theme\n `${s} thead{position:relative}${s} thead::after{content:\"\";position:absolute;left:0;right:0;bottom:0;height:4px;background:var(--sdvt-horizon)}`,\n `${s} th.sdvt-label{font-family:var(--sdvt-font-label);font-weight:var(--sdvt-label-weight);font-size:var(--sdvt-label-size);font-style:var(--sdvt-label-style);color:var(--sdvt-label-color);background:var(--sdvt-label-bg);text-transform:var(--sdvt-label-transform);letter-spacing:var(--sdvt-label-tracking);border-top:var(--sdvt-label-border-top);border-bottom:var(--sdvt-label-border-bottom);padding:var(--sdvt-label-pad) 5px;vertical-align:bottom}`,\n `${s} .sdvt-subheader{display:block;font-weight:400;font-size:0.8em;color:var(--sdvt-muted);text-transform:none;letter-spacing:normal}`,\n `${s} th.sdvt-group{font-family:var(--sdvt-font-label);font-weight:var(--sdvt-group-weight);font-size:var(--sdvt-group-size);color:var(--sdvt-group-color);background:var(--sdvt-group-bg);text-transform:var(--sdvt-group-transform);border-top:var(--sdvt-group-border-top);border-bottom:var(--sdvt-group-border-bottom);text-align:left;padding:var(--sdvt-group-pad) 5px}`,\n // A host's td{color} (Framework; Infima's --ifm-table-cell-color) outranks the ink a cell only inherits, so the\n // cell asks for it explicitly. inherit, not var(--sdvt-text): the row's ink is the theme's, or spotlight's dim on\n // the <tr>. ponytail: (0,1,0), the scope in :where(): beats any element-only host rule (td, table td), loses to an\n // author's class-qualified rule (.page td at (0,1,1)) and to every theme rule and inline cell style.\n `:where(${s}) .sdvt-cell{color:inherit}`,\n // Hosts paint rows: Infima stripes every second one (table tr:nth-child(2n), (0,1,2)) under cells that leave the\n // ground to the root, and Framework and Infima rule them. sdvtables' own sheets never colour or border a <tr>\n // (themes and decorations style cells; cutlines and watermarks are images; row decorations are inline), so rows\n // stay clear. ponytail: :nth-child(n) lifts this to (0,2,1), past that stripe whatever the stylesheet order.\n `${s} tr:nth-child(n){background-color:transparent;border:0}`,\n // Infima borders every cell (table th, table td { border }, (0,0,2)). ponytail: (0,1,1) clears that, and every\n // border sdvtables draws comes from a more specific rule or a later one (themes and decorations follow BASE_CSS)\n `${s} td,${s} th{border:0}`,\n `${s} td.sdvt-cell{padding:var(--sdvt-pad) 5px;border-top:var(--sdvt-hline);font-variant-numeric:tabular-nums;vertical-align:middle}`,\n `${s} tbody tr:first-child td.sdvt-cell{border-top:none}${s} tbody{border-bottom:var(--sdvt-body-border-bottom)}`,\n // background-color, not the `background` shorthand: the shorthand would reset the hovered row's underline image\n `${s} tr.sdvt-stripe td.sdvt-cell{background-color:var(--sdvt-stripe)}`,\n `${s} .sdvt-left{text-align:left}${s} .sdvt-center{text-align:center}${s} .sdvt-right{text-align:right}`,\n `${s} tfoot td{font-size:var(--sdvt-source-size);font-style:var(--sdvt-source-style);color:var(--sdvt-source-color);padding:var(--sdvt-source-pad) 5px;text-align:left}`,\n `${s} img.sdvt-mark{vertical-align:middle}`,\n `${s} img{max-width:none}`, // A47: a host img{max-width:100%} reset (Docusaurus, Tailwind preflight) squashed cell logos\n `${s} table{--bs-table-bg:transparent;--bs-table-color:currentcolor}`, // utils-theme.R .theme_bs_host: Bootstrap hosts repaint td\n // Phase 5 controls: renderHTML(table), hydrate and <SdvTable/> (the last rule is J31 A5, a neutral selected-row overlay)\n `${s} .sdvt-sort{all:unset;cursor:pointer;display:inline-block;width:100%}`,\n `${s} .sdvt-sort:focus-visible{outline:2px solid currentColor;outline-offset:2px}`, // all:unset drops the UA focus ring (WCAG 2.4.7)\n // the arrow repeats aria-sort, so its alt text is empty (kept out of the button name); the plain declaration is the fallback\n `${s} th[aria-sort=\"ascending\"] .sdvt-sort::after{content:\" ▲\";content:\" ▲\"/\"\";font-size:.7em}`,\n `${s} th[aria-sort=\"descending\"] .sdvt-sort::after{content:\" ▼\";content:\" ▼\"/\"\";font-size:.7em}`,\n `${s} .sdvt-toolbar{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:6px}`,\n // I4 (WCAG 1.4.11): the theme's rule taken 60% of the way to the text colour, 3:1 or better on the table background\n // in every theme (a black or ink rule stays itself); where color-mix is unsupported, the text colour\n `${s} .sdvt-toolbar input{font:inherit;padding:2px 6px;border:1px solid var(--sdvt-text);border-color:color-mix(in srgb,var(--sdvt-text) 60%,var(--sdvt-rule));background:var(--sdvt-bg);color:var(--sdvt-text)}`,\n `${s} .sdvt-pager{display:flex;gap:8px;align-items:center;justify-content:flex-end;margin-top:6px}`,\n `${s} .sdvt-page{font:inherit;cursor:pointer}`,\n `${s} .sdvt-page[aria-disabled=\"true\"]{opacity:.4;cursor:default}`, // M1: aria-disabled, so focus stays on an edge button\n `${s} tr.sdvt-selected>td{box-shadow:inset 0 0 0 9999px rgba(127,127,127,.18)}`,\n `${s} tr.sdvt-selected>td:first-child{box-shadow:inset 3px 0 0 var(--sdvt-text),inset 0 0 0 9999px rgba(127,127,127,.18)}`, // I4: the tint is 1.2:1; a text-coloured bar gives the state 3:1\n // J31 (A29): a hovered row (its own pointer, or a linked figure's) gets a text-coloured underline, 3:1 like I4's bar.\n // A background image: it sits beside the selected overlay (box-shadow) and moves no layout. The scope and the row\n // sit in :where(), so the rule weighs (0,1,1), td.sdvt-cell alone: the documented one-rule opt-out\n // tr.sdvt-hover>td.sdvt-cell{background-image:none}, at (0,2,2), wins wherever a page puts it\n `:where(${s} tr.sdvt-hover)>td.sdvt-cell{background-image:linear-gradient(var(--sdvt-text),var(--sdvt-text));background-size:100% 2px;background-position:0 100%;background-repeat:no-repeat}`,\n `${s} tr.sdvt-row:focus-visible{outline:2px solid currentColor;outline-offset:-2px}`, // Task 10: the grid's tab stop (WCAG 2.4.7)\n `${s} th.sdvt-col-current .sdvt-sort{text-decoration:underline;text-underline-offset:4px}`, // Task 10: the column `s` sorts\n ].join(\"\\n\");\n}\n","// src/scale.ts — ports of sdvplot Python great_tables/_cells.py `_ramp` / `_ranks` and _layout.py `_quantile`.\nimport { mix } from \"@sportsdataverse/sdvplot\";\nimport { TableSpecError } from \"./errors.js\";\n\n/** Python `_ramp` (_cells.py:1027-1048): piecewise-linear sRGB over evenly spaced stops, as great_tables `data_color`; null outside the domain. */\nexport function ramp(\n palette: readonly string[],\n [lo, hi]: readonly [number, number],\n bias = 1,\n): (v: number) => string | null {\n const k = palette.length - 1;\n if (!(bias > 0)) throw new TableSpecError(`bias must be a positive number, got ${String(bias)}`);\n // grDevices::colorRamp(bias): stop i sits at (i / k) ^ bias; bias 1 is the evenly spaced great_tables ramp\n const stops = palette.map((_, i) => (k === 0 ? 0 : (i / k) ** bias));\n return (v) => {\n if (!(lo <= v && v <= hi)) return null;\n if (k === 0) return palette[0] ?? null;\n const t = hi === lo ? 0.5 : (v - lo) / (hi - lo);\n if (bias === 1) {\n const i = Math.min(Math.floor(t * k), k - 1);\n return mix(palette[i] as string, palette[i + 1] as string, t * k - i);\n }\n let i = 0;\n while (i < k - 1 && t > (stops[i + 1] as number)) i++;\n const a = stops[i] as number;\n const b = stops[i + 1] as number;\n return mix(palette[i] as string, palette[i + 1] as string, Math.min(1, Math.max(0, (t - a) / (b - a))));\n };\n}\n\n/** dplyr::ntile(x, n): rank with ties broken by position (row_number), then `n` equal-count buckets, larger first; null stays null. */\nexport function ntile(values: readonly (number | null)[], n: number): (number | null)[] {\n if (!(Number.isInteger(n) && n > 0))\n throw new TableSpecError(`buckets must be a positive integer, got ${String(n)}`);\n const order = values\n .map((v, i) => [v, i] as const)\n .filter((p): p is readonly [number, number] => p[0] !== null)\n .sort((a, b) => a[0] - b[0] || a[1] - b[1]);\n const len = order.length;\n const out: (number | null)[] = values.map(() => null);\n const nLarger = len % n;\n const larger = Math.ceil(len / n);\n const smaller = Math.floor(len / n);\n const threshold = larger * nLarger;\n order.forEach(([, i], j) => {\n const x = j + 1;\n out[i] = Math.floor(\n x <= threshold ? (x + larger - 1) / larger : (x - threshold + smaller - 1) / smaller + nLarger,\n );\n });\n return out;\n}\n\n/** Python `_ranks` (_cells.py:1051-1066): R rank(ties = \"average\", na.last = \"keep\") ascending; desc flips it as top − r + 1, top = the largest rank. */\nexport function averageRanks(values: readonly (number | null)[], desc: boolean): (number | null)[] {\n const idx = values\n .map((v, i) => [v, i] as const)\n .filter((p): p is readonly [number, number] => p[0] !== null)\n .sort((a, b) => a[0] - b[0] || a[1] - b[1]);\n const out: (number | null)[] = values.map(() => null);\n for (let s = 0; s < idx.length; ) {\n let e = s;\n while (e + 1 < idx.length && idx[e + 1]?.[0] === idx[s]?.[0]) e++;\n const r = (s + e) / 2 + 1;\n for (let j = s; j <= e; j++) out[idx[j]?.[1] as number] = r;\n s = e + 1;\n }\n if (!desc || idx.length === 0) return out;\n let top = 0;\n for (const r of out) if (r !== null && r > top) top = r;\n return out.map((r) => (r === null ? null : top - r + 1));\n}\n\nexport function domainOf(columns: readonly (readonly (number | null)[])[]): [number, number] {\n let lo = Number.POSITIVE_INFINITY;\n let hi = Number.NEGATIVE_INFINITY;\n for (const col of columns)\n for (const v of col)\n if (v !== null) {\n if (v < lo) lo = v;\n if (v > hi) hi = v;\n }\n if (lo > hi) throw new TableSpecError(\"no domain given and no numeric value to derive one from\");\n return [lo, hi];\n}\n\n/** Python `_quantile` (_layout.py:1159): R type-7 quantile. */\nexport function quantile7(xs: readonly number[], p: number): number {\n const s = [...xs].sort((a, b) => a - b);\n const h = (s.length - 1) * p;\n const lo = Math.floor(h);\n return (s[lo] as number) + (h - lo) * ((s[Math.min(lo + 1, s.length - 1)] as number) - (s[lo] as number));\n}\n\nexport function sampleSd(xs: readonly number[]): number {\n const m = xs.reduce((a, b) => a + b, 0) / xs.length;\n return Math.sqrt(xs.reduce((a, b) => a + (b - m) ** 2, 0) / (xs.length - 1));\n}\n","// src/html/named-colors.ts — the 148 CSS Color Module Level 4 named colours, for data-driven colour columns\n// (`colorRef`, `iconColorRef`); reactablefmtr users put \"red\" / \"steelblue\" in those columns and the browser reads them.\n\n/** Lower-case CSS colour name -> `#rrggbb` (CSS Color Module Level 4, 148 names; `transparent` deliberately absent). */\nconst NAMED: ReadonlyMap<string, string> = new Map(\n Object.entries({\n aliceblue: \"f0f8ff\",\n antiquewhite: \"faebd7\",\n aqua: \"00ffff\",\n aquamarine: \"7fffd4\",\n azure: \"f0ffff\",\n beige: \"f5f5dc\",\n bisque: \"ffe4c4\",\n black: \"000000\",\n blanchedalmond: \"ffebcd\",\n blue: \"0000ff\",\n blueviolet: \"8a2be2\",\n brown: \"a52a2a\",\n burlywood: \"deb887\",\n cadetblue: \"5f9ea0\",\n chartreuse: \"7fff00\",\n chocolate: \"d2691e\",\n coral: \"ff7f50\",\n cornflowerblue: \"6495ed\",\n cornsilk: \"fff8dc\",\n crimson: \"dc143c\",\n cyan: \"00ffff\",\n darkblue: \"00008b\",\n darkcyan: \"008b8b\",\n darkgoldenrod: \"b8860b\",\n darkgray: \"a9a9a9\",\n darkgreen: \"006400\",\n darkgrey: \"a9a9a9\",\n darkkhaki: \"bdb76b\",\n darkmagenta: \"8b008b\",\n darkolivegreen: \"556b2f\",\n darkorange: \"ff8c00\",\n darkorchid: \"9932cc\",\n darkred: \"8b0000\",\n darksalmon: \"e9967a\",\n darkseagreen: \"8fbc8f\",\n darkslateblue: \"483d8b\",\n darkslategray: \"2f4f4f\",\n darkslategrey: \"2f4f4f\",\n darkturquoise: \"00ced1\",\n darkviolet: \"9400d3\",\n deeppink: \"ff1493\",\n deepskyblue: \"00bfff\",\n dimgray: \"696969\",\n dimgrey: \"696969\",\n dodgerblue: \"1e90ff\",\n firebrick: \"b22222\",\n floralwhite: \"fffaf0\",\n forestgreen: \"228b22\",\n fuchsia: \"ff00ff\",\n gainsboro: \"dcdcdc\",\n ghostwhite: \"f8f8ff\",\n gold: \"ffd700\",\n goldenrod: \"daa520\",\n gray: \"808080\",\n green: \"008000\",\n greenyellow: \"adff2f\",\n grey: \"808080\",\n honeydew: \"f0fff0\",\n hotpink: \"ff69b4\",\n indianred: \"cd5c5c\",\n indigo: \"4b0082\",\n ivory: \"fffff0\",\n khaki: \"f0e68c\",\n lavender: \"e6e6fa\",\n lavenderblush: \"fff0f5\",\n lawngreen: \"7cfc00\",\n lemonchiffon: \"fffacd\",\n lightblue: \"add8e6\",\n lightcoral: \"f08080\",\n lightcyan: \"e0ffff\",\n lightgoldenrodyellow: \"fafad2\",\n lightgray: \"d3d3d3\",\n lightgreen: \"90ee90\",\n lightgrey: \"d3d3d3\",\n lightpink: \"ffb6c1\",\n lightsalmon: \"ffa07a\",\n lightseagreen: \"20b2aa\",\n lightskyblue: \"87cefa\",\n lightslategray: \"778899\",\n lightslategrey: \"778899\",\n lightsteelblue: \"b0c4de\",\n lightyellow: \"ffffe0\",\n lime: \"00ff00\",\n limegreen: \"32cd32\",\n linen: \"faf0e6\",\n magenta: \"ff00ff\",\n maroon: \"800000\",\n mediumaquamarine: \"66cdaa\",\n mediumblue: \"0000cd\",\n mediumorchid: \"ba55d3\",\n mediumpurple: \"9370db\",\n mediumseagreen: \"3cb371\",\n mediumslateblue: \"7b68ee\",\n mediumspringgreen: \"00fa9a\",\n mediumturquoise: \"48d1cc\",\n mediumvioletred: \"c71585\",\n midnightblue: \"191970\",\n mintcream: \"f5fffa\",\n mistyrose: \"ffe4e1\",\n moccasin: \"ffe4b5\",\n navajowhite: \"ffdead\",\n navy: \"000080\",\n oldlace: \"fdf5e6\",\n olive: \"808000\",\n olivedrab: \"6b8e23\",\n orange: \"ffa500\",\n orangered: \"ff4500\",\n orchid: \"da70d6\",\n palegoldenrod: \"eee8aa\",\n palegreen: \"98fb98\",\n paleturquoise: \"afeeee\",\n palevioletred: \"db7093\",\n papayawhip: \"ffefd5\",\n peachpuff: \"ffdab9\",\n peru: \"cd853f\",\n pink: \"ffc0cb\",\n plum: \"dda0dd\",\n powderblue: \"b0e0e6\",\n purple: \"800080\",\n rebeccapurple: \"663399\",\n red: \"ff0000\",\n rosybrown: \"bc8f8f\",\n royalblue: \"4169e1\",\n saddlebrown: \"8b4513\",\n salmon: \"fa8072\",\n sandybrown: \"f4a460\",\n seagreen: \"2e8b57\",\n seashell: \"fff5ee\",\n sienna: \"a0522d\",\n silver: \"c0c0c0\",\n skyblue: \"87ceeb\",\n slateblue: \"6a5acd\",\n slategray: \"708090\",\n slategrey: \"708090\",\n snow: \"fffafa\",\n springgreen: \"00ff7f\",\n steelblue: \"4682b4\",\n tan: \"d2b48c\",\n teal: \"008080\",\n thistle: \"d8bfd8\",\n tomato: \"ff6347\",\n turquoise: \"40e0d0\",\n violet: \"ee82ee\",\n wheat: \"f5deb3\",\n white: \"ffffff\",\n whitesmoke: \"f5f5f5\",\n yellow: \"ffff00\",\n yellowgreen: \"9acd32\",\n }).map(([k, v]) => [k, `#${v}`]),\n);\n\n/**\n * The `#rrggbb` of a CSS colour name, case-insensitive and trimmed (`\" SteelBlue \"` -> `\"#4682b4\"`); undefined for\n * anything else. `transparent` is undefined on purpose: a data-driven colour column treats it as blank, not a fill.\n */\nexport function namedColor(s: string): string | undefined {\n return NAMED.get(s.trim().toLowerCase());\n}\n","import { TableSpecError } from \"../errors.js\";\nimport type { ColumnSpec, SeriesHighlight, SeriesPoint, SeriesStat } from \"../spec.js\";\nimport { cssValue, escapeAttr, escapeHtml } from \"./escape.js\";\n\n/** Round half to even, as Python :.0f formats. */\nexport const halfEven = (x: number): string => {\n const r = Math.round(x);\n return String(Math.abs(x % 1) === 0.5 && r % 2 !== 0 ? r - 1 : r);\n};\n/** Python _cutline_svg (_cells.py:806-817) byte for byte: uppercase label, `quote(svg, safe=\"\")`, `;charset=utf-8`. */\nexport function cutlineSvg(text: string, color: string, size: number): string {\n const t = text.toUpperCase();\n const tracking = 1.1;\n const esc = t.replace(/&/g, \"&\").replace(/</g, \"<\").replace(/>/g, \">\");\n const svg = `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${halfEven(t.length * (size * 0.8 + tracking) + 4)}\" height=\"${halfEven(size + 4)}\"><text x=\"0\" y=\"${(size + 0.5).toFixed(1)}\" font-family=\"Helvetica,Arial,sans-serif\" font-size=\"${size}\" font-weight=\"700\" letter-spacing=\"${tracking}\" fill=\"${color}\">${esc}</text></svg>`;\n return `data:image/svg+xml;charset=utf-8,${pyQuote(svg)}`;\n}\n/** Python `urllib.parse.quote(s, safe=\"\")`: encodeURIComponent also leaves `!'()*` alone. */\nexport const pyQuote = (x: string): string =>\n encodeURIComponent(x).replace(/[!'()*]/g, (c) => `%${c.charCodeAt(0).toString(16).toUpperCase()}`);\n/** Python _watermark_svg (_layout.py:251-268): returns the data URI and whether the rotated box is taller than wide. */\nexport function watermarkSvg(\n text: string,\n color: string,\n opacity: number,\n angle: number,\n font: string,\n): [string, boolean] {\n const label = text.replace(/&/g, \"&\").replace(/</g, \"<\").replace(/>/g, \">\");\n const size = 100;\n const textW = Math.max(label.length * size * 0.62, size);\n const textH = size * 1.3;\n const rad = (Math.abs(angle) * Math.PI) / 180;\n const w = Math.ceil(textW * Math.cos(rad) + textH * Math.sin(rad)) + 4;\n const h = Math.ceil(textW * Math.sin(rad) + textH * Math.cos(rad)) + 4;\n const rot = angle !== 0 ? ` transform=\"rotate(${angle} ${w / 2} ${h / 2})\"` : \"\";\n const attr = (v: string): string => v.replace(/&/g, \"&\").replace(/</g, \"<\").replace(/\"/g, \""\");\n const svg = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 ${w} ${h}\" width=\"${w}\" height=\"${h}\"><text x=\"50%\" y=\"50%\" text-anchor=\"middle\" dominant-baseline=\"central\" font-family=\"${attr(font)}\" font-size=\"${size}\" font-weight=\"700\" fill=\"${attr(color)}\" fill-opacity=\"${opacity}\"${rot}>${label}</text></svg>`;\n return [`data:image/svg+xml,${pyQuote(svg)}`, h > w];\n}\n/** A CSS string body: backslash-escape what could end the string or the <style> element. */\nexport const cssStr = (v: string): string =>\n v.replace(/[\\\\\"\\n\\r<]/g, (c) => `\\\\${c.charCodeAt(0).toString(16)} `);\n\n// ---- in-cell charts: reactablefmtr react_sparkline / react_sparkbar / gauge_chart as inline SVG, ported from sdvplot's\n// _reactable_charts.py (the Python Tier 2) so both libraries draw the same marks: margins, scales, labels, aria-labels.\n\n// Row-agnostic views of the three kinds: the drawing reads options, never rows\ntype Of<K> = Omit<Extract<ColumnSpec<never>, { kind: K }>, \"key\" | \"compare\"> & { readonly key: string };\ntype Sparkline = Of<\"sparkline\">;\ntype Sparkbar = Of<\"sparkbar\">;\ntype Gauge = Of<\"gauge\">;\ntype Named = \"first\" | \"last\" | \"min\" | \"max\";\ntype At = Readonly<Record<Named, number>>;\ntype Pt = readonly [number, number];\nconst NAMED: readonly Named[] = [\"first\", \"last\", \"min\", \"max\"];\n\n/** A coordinate, short: two decimals at most, no trailing zeros, never \"-0\". */\nconst n2 = (v: number): string => String(Math.round(v * 100) / 100 + 0);\n/** A number as people write it (12, 0.523, 0.0000125, 1234567.5): four significant figures at least, so a small value never prints as 0. */\nexport function plainNumber(v: number): string {\n if (Number.isInteger(v)) return String(v);\n const places = Math.max(4, 3 - Math.floor(Math.log10(Math.abs(v))));\n return v.toFixed(places).replace(/0+$/, \"\").replace(/\\.$/, \"\");\n}\n/** `toFixed` without a negative zero: -0.4 at 0 decimals prints \"0\", not \"-0\". */\nconst fixed = (v: number, d: number): string => {\n const s = v.toFixed(d);\n return /^-0(.0*)?$/.test(s) ? s.slice(1) : s;\n};\n/** A spec colour or size bound for an SVG attribute: a CSS value (cssValue names the field), escaped. */\nconst att = (v: string, field: string): string => escapeAttr(cssValue(v, field));\n/** R type 7 (d3.quantile), as dataui's innerquartiles band. */\nfunction quantile(xs: readonly number[], p: number): number {\n const s = [...xs].sort((a, b) => a - b);\n const h = (s.length - 1) * p;\n const lo = Math.floor(h);\n const a = s[lo] as number;\n return a + (h - lo) * ((s[Math.min(lo + 1, s.length - 1)] as number) - a);\n}\nconst STAT: Readonly<Record<SeriesStat, (xs: readonly number[]) => number>> = {\n mean: (xs) => xs.reduce((s, x) => s + x, 0) / xs.length,\n median: (xs) => quantile(xs, 0.5),\n min: (xs) => Math.min(...xs),\n max: (xs) => Math.max(...xs),\n};\n/** reactablefmtr's default margins [top, right, bottom, left] and the height a default 22px chart grows to. */\nfunction margins(labels: readonly SeriesPoint[], statline: boolean, bars: boolean): readonly number[] {\n const any = labels.length > 0;\n const endsOnly = any && !labels.some((n) => n === \"min\" || n === \"max\" || n === \"all\");\n if (bars) {\n if (statline) return any ? [12, 26, 3, 26, 22] : [4, 28, 3, 13, 22];\n return any ? [12, 26, 0, 26, 22] : [3, 13, 0, 13, 22];\n }\n if (statline) return !any ? [4, 28, 3, 13, 22] : endsOnly ? [5, 28, 3, 24, 22] : [14, 28, 10, 13, 28];\n return !any ? [3, 13, 2, 13, 22] : endsOnly ? [5, 24, 3, 24, 22] : [14, 13, 10, 13, 30];\n}\n/** The drawable box and the y scale of one sparkline / sparkbar cell. */\ninterface Frame {\n readonly h: number;\n readonly top: number;\n readonly right: number;\n readonly bottom: number;\n readonly left: number;\n readonly lo: number;\n readonly hi: number;\n readonly y: (v: number) => number;\n}\nfunction frameOf(col: Sparkline | Sparkbar, present: readonly number[], bars: boolean, row: number): Frame {\n const [t = 0, r = 0, b = 0, l = 0, grown = 22] = margins(col.labels, col.statline !== undefined, bars);\n const h = col.chartHeight ?? grown;\n if (col.chartWidth <= l + r || h <= t + b)\n throw new TableSpecError(\n `column \"${col.key}\": ${col.kind} chartWidth x chartHeight ${plainNumber(col.chartWidth)} x ${plainNumber(h)} leaves no room inside its margins (${l + r} x ${t + b} px with these labels/statline); make the chart larger`,\n );\n // bars stand on zero, so the scale holds it (reactablefmtr's smallest bar would have no height)\n const lo = col.minValue ?? Math.min(...present, ...(bars ? [0] : []));\n const hi = col.maxValue ?? Math.max(...present, ...(bars ? [0] : []));\n if (lo > hi)\n throw new TableSpecError(\n `column \"${col.key}\" row ${row}: minValue/maxValue cross the row's data (bottom ${plainNumber(lo)} is above top ${plainNumber(hi)}); give both bounds, or one the data stays on the right side of`,\n );\n const bottom = h - b;\n const y = (v: number): number =>\n hi === lo ? (t + bottom) / 2 : t + Math.min(Math.max((hi - v) / (hi - lo), 0), 1) * (bottom - t);\n return { h, top: t, right: col.chartWidth - r, bottom, left: l, lo, hi, y };\n}\nfunction statlineSvg(col: Sparkline | Sparkbar, f: Frame, present: readonly number[]): string {\n if (col.statline === undefined) return \"\";\n const v = STAT[col.statline](present);\n const y = n2(f.y(v));\n const c = att(col.statlineColor, `${col.kind} statlineColor`);\n const size = att(col.statlineLabelSize, `${col.kind} statlineLabelSize`);\n return `<line class=\"sdvt-statline\" x1=\"${n2(f.left)}\" x2=\"${n2(f.right)}\" y1=\"${y}\" y2=\"${y}\" stroke=\"${c}\" stroke-width=\"1\" stroke-dasharray=\"2,2\" stroke-opacity=\"0.75\"/><text class=\"sdvt-statline-label\" x=\"${n2(f.right + 5)}\" y=\"${y}\" dominant-baseline=\"middle\" fill=\"${c}\" font-weight=\"bold\" font-size=\"${size}\">${fixed(v, col.decimals)}</text>`;\n}\nfunction bandlineSvg(col: Sparkline | Sparkbar, f: Frame, present: readonly number[]): string {\n if (col.bandline === undefined) return \"\";\n const range = col.bandline === \"range\" || present.length < 2;\n const lo = range ? Math.min(...present) : quantile(present, 0.25);\n const hi = range ? Math.max(...present) : quantile(present, 0.75);\n const y1 = f.y(hi);\n return `<rect class=\"sdvt-bandline\" x=\"${n2(f.left)}\" y=\"${n2(y1)}\" width=\"${n2(f.right - f.left)}\" height=\"${n2(f.y(lo) - y1)}\" fill=\"${att(col.bandlineColor, `${col.kind} bandlineColor`)}\" fill-opacity=\"${col.bandlineOpacity}\"/>`;\n}\n/** The aria-label: count, min, max and last value, then the statline and bandline when drawn. */\nfunction summary(name: string, col: Sparkline | Sparkbar, present: readonly number[]): string {\n const n = present.length;\n let out = `${name} of ${n} value${n === 1 ? \"\" : \"s\"}: min ${plainNumber(Math.min(...present))}, max ${plainNumber(Math.max(...present))}, last ${plainNumber(present[n - 1] as number)}`;\n if (col.statline) out += `; ${col.statline} line at ${fixed(STAT[col.statline](present), col.decimals)}`;\n if (col.bandline)\n out += `; band over the ${col.bandline === \"innerquartiles\" ? \"inner quartiles\" : \"range\"}`;\n return out;\n}\n/** The index of the first, last, min and max present value (the first of ties); `idx` lists the present indexes. */\nfunction pointsAt(values: readonly (number | null)[], idx: readonly number[]): At {\n const v = (i: number): number => values[i] as number;\n let min = idx[0] as number;\n let max = min;\n for (const i of idx) {\n if (v(i) < v(min)) min = i;\n if (v(i) > v(max)) max = i;\n }\n return { first: idx[0] as number, last: idx.at(-1) as number, min, max };\n}\n/** Each marked index's colour: \"all\" first, then first/last/min/max, a later name winning where two coincide. */\nfunction markColors(\n h: SeriesHighlight | undefined,\n at: At,\n idx: readonly number[],\n field: string,\n): Map<number, string> {\n const named: Readonly<Partial<Record<SeriesPoint, string>>> =\n h === undefined\n ? {}\n : Array.isArray(h)\n ? Object.fromEntries((h as readonly SeriesPoint[]).map((n) => [n, \"red\"]))\n : (h as Readonly<Partial<Record<SeriesPoint, string>>>);\n const out = new Map<number, string>();\n const all = named.all;\n if (all !== undefined) for (const i of idx) out.set(i, att(all, field));\n for (const n of NAMED) {\n const c = named[n];\n if (c !== undefined) out.set(at[n], att(c, field));\n }\n return new Map([...out].sort((a, b) => a[0] - b[0]));\n}\n/** The indexes whose values are printed, in order. */\nconst labelled = (labels: readonly SeriesPoint[], at: At, idx: readonly number[]): number[] =>\n labels.includes(\"all\") ? [...idx] : [...new Set(labels.map((n) => at[n as Named]))].sort((a, b) => a - b);\nfunction chartSvg(kind: string, w: number, h: number, label: string, body: string): string {\n return `<svg class=\"sdvt-${kind}\" xmlns=\"http://www.w3.org/2000/svg\" width=\"${n2(w)}\" height=\"${n2(h)}\" viewBox=\"0 0 ${n2(w)} ${n2(h)}\" role=\"img\" aria-label=\"${escapeAttr(label)}\" style=\"display:inline-block;vertical-align:middle;overflow:visible\"><title>${escapeHtml(label)}</title>${body}</svg>`;\n}\nconst present = (values: readonly (number | null)[]): number[] =>\n values.filter((v): v is number => v !== null);\nconst presentIdx = (values: readonly (number | null)[]): number[] =>\n values.flatMap((v, i) => (v === null ? [] : [i]));\n\n/**\n * A sparkline cell. `values` holds a finite number or `null` (a gap) per point, at least one a number; `color` is the\n * line's colour (spec colours are checked here, through cssValue); `row` names the row in a bounds error.\n */\nexport function sparklineSvg(\n col: Sparkline,\n values: readonly (number | null)[],\n color: string,\n row: number,\n): string {\n const xs = present(values);\n const idx = presentIdx(values);\n const f = frameOf(col, xs, false, row);\n const n = values.length;\n const step = n > 1 ? (f.right - f.left) / (n - 1) : 0;\n const pts = new Map<number, Pt>(\n idx.map((i) => [i, [n > 1 ? f.left + i * step : (f.left + f.right) / 2, f.y(values[i] as number)]]),\n );\n const path: string[] = [];\n for (let i = 0; i < n; i++) {\n const p = pts.get(i);\n if (!p) continue;\n const down = pts.has(i - 1);\n path.push(`${down ? \"L\" : \"M\"}${n2(p[0])},${n2(p[1])}`);\n if (!down && !pts.has(i + 1)) path.push(\"h0\"); // an isolated point: the round cap draws it as a dot\n }\n const stroke = att(color, \"sparkline lineColor\");\n let body = bandlineSvg(col, f, xs);\n if (col.showArea) {\n // one closed shape per unbroken run of points, down to the chart's bottom\n const runs: Pt[][] = [];\n for (const i of idx) {\n if (pts.has(i - 1)) runs.at(-1)?.push(pts.get(i) as Pt);\n else runs.push([pts.get(i) as Pt]);\n }\n const b = n2(f.bottom);\n const d = runs\n .map(\n (r) =>\n `M${n2((r[0] as Pt)[0])},${b} ${r.map(([x, y]) => `L${n2(x)},${n2(y)}`).join(\" \")} L${n2((r.at(-1) as Pt)[0])},${b} Z`,\n )\n .join(\" \");\n const fill = col.areaColor === undefined ? stroke : att(col.areaColor, \"sparkline areaColor\");\n body += `<path class=\"sdvt-area\" d=\"${d}\" fill=\"${fill}\" fill-opacity=\"${col.areaOpacity}\"/>`;\n }\n body += `<path class=\"sdvt-line\" d=\"${path.join(\" \")}\" fill=\"none\" stroke=\"${stroke}\" stroke-width=\"${col.lineWidth}\" stroke-linejoin=\"round\" stroke-linecap=\"round\"/>`;\n body += statlineSvg(col, f, xs);\n const at = pointsAt(values, idx);\n for (const [i, c] of markColors(col.highlightPoints, at, idx, \"sparkline highlightPoints\")) {\n const [x, y] = pts.get(i) as Pt;\n body += `<circle class=\"sdvt-point\" cx=\"${n2(x)}\" cy=\"${n2(y)}\" r=\"${col.pointSize}\" fill=\"${c}\" stroke=\"${c}\"/>`;\n }\n // first/last labels alone sit beside their points (as reactablefmtr), any other set above them\n const endsOnly =\n col.labels.length > 0 && !col.labels.some((l) => l === \"min\" || l === \"max\" || l === \"all\");\n const size = att(col.labelSize, \"sparkline labelSize\");\n for (const i of labelled(col.labels, at, idx)) {\n const [x, y] = pts.get(i) as Pt;\n const pos =\n endsOnly && i === at.first\n ? `x=\"${n2(x - 6)}\" y=\"${n2(y)}\" text-anchor=\"end\" dominant-baseline=\"middle\"`\n : endsOnly && i === at.last\n ? `x=\"${n2(x + 6)}\" y=\"${n2(y)}\" text-anchor=\"start\" dominant-baseline=\"middle\"`\n : `x=\"${n2(x)}\" y=\"${n2(y - 7)}\" text-anchor=\"middle\"`;\n body += `<text class=\"sdvt-label\" ${pos} fill=\"currentColor\" font-size=\"${size}\">${fixed(values[i] as number, col.decimals)}</text>`;\n }\n return chartSvg(\"sparkline\", col.chartWidth, f.h, summary(\"Sparkline\", col, xs), body);\n}\n\n/** A sparkbar cell, as `sparklineSvg`: bars stand on zero, a gap leaves its slot empty. */\nexport function sparkbarSvg(\n col: Sparkbar,\n values: readonly (number | null)[],\n color: string,\n row: number,\n): string {\n const xs = present(values);\n const idx = presentIdx(values);\n const f = frameOf(col, xs, true, row);\n const band = (f.right - f.left) / values.length;\n const barW = band * 0.8;\n const base = f.y(Math.min(Math.max(0, f.lo), f.hi));\n const at = pointsAt(values, idx);\n const marks = markColors(col.highlightBars, at, idx, \"sparkbar highlightBars\");\n const fill = att(color, \"sparkbar fillColor\");\n let body = bandlineSvg(col, f, xs);\n const tops = new Map<number, Pt>();\n for (const i of idx) {\n const x = f.left + i * band + (band - barW) / 2;\n const y = f.y(values[i] as number);\n tops.set(i, [x + barW / 2, Math.min(y, base)]);\n body += `<rect class=\"sdvt-bar\" x=\"${n2(x)}\" y=\"${n2(Math.min(y, base))}\" width=\"${n2(barW)}\" height=\"${n2(Math.abs(base - y))}\" fill=\"${marks.get(i) ?? fill}\" fill-opacity=\"${col.fillOpacity}\"/>`;\n }\n body += statlineSvg(col, f, xs);\n const size = att(col.labelSize, \"sparkbar labelSize\");\n for (const i of labelled(col.labels, at, idx)) {\n const [x, y] = tops.get(i) as Pt;\n body += `<text class=\"sdvt-label\" x=\"${n2(x)}\" y=\"${n2(y - 3)}\" text-anchor=\"middle\" fill=\"currentColor\" font-size=\"${size}\">${fixed(values[i] as number, col.decimals)}</text>`;\n }\n return chartSvg(\"sparkbar\", col.chartWidth, f.h, summary(\"Bar chart\", col, xs), body);\n}\n\n/** The annulus path from the gauge's left end, `frac` of the way round the top towards its right end. */\nfunction arc(c: number, outer: number, inner: number, frac: number): string {\n const t = Math.PI * (1 - frac);\n const cos = Math.cos(t);\n const sin = Math.sin(t);\n return `M${n2(c - outer)},${n2(c)} A${n2(outer)},${n2(outer)} 0 0 1 ${n2(c + outer * cos)},${n2(c - outer * sin)} L${n2(c + inner * cos)},${n2(c - inner * sin)} A${n2(inner)},${n2(inner)} 0 0 0 ${n2(c - inner)},${n2(c)} Z`;\n}\n/**\n * A gauge cell for the finite value `v` on the scale `lo`..`hi` (lo at most hi; equal draws an empty gauge), filled\n * in `color` (checked by the caller), its numbers printed by `fmt`. The absolute value fills the gauge.\n */\nexport function gaugeSvg(\n col: Gauge,\n v: number,\n lo: number,\n hi: number,\n color: string,\n fmt: (n: number) => string,\n): string {\n const w = 50 * col.size;\n const r = w / 2;\n const inner = r * 0.75; // reactablefmtr's cover is 75% of the gauge's width\n const frac = hi === lo ? 0 : Math.min(Math.max((Math.abs(v) - lo) / (hi - lo), 0), 1);\n const ink = col.textColor === undefined ? \"currentColor\" : att(col.textColor, \"gauge textColor\");\n const weight = col.boldText ? ' font-weight=\"bold\"' : \"\";\n const font = col.textSize === undefined ? \"\" : ` font-size=\"${att(col.textSize, \"gauge textSize\")}\"`;\n let body = `<path class=\"sdvt-track\" d=\"${arc(r, r, inner, 1)}\" fill=\"${att(col.background, \"gauge background\")}\"/>`;\n if (frac > 0)\n body += `<path class=\"sdvt-fill\" d=\"${arc(r, r, inner, frac)}\" fill=\"${color}\" fill-opacity=\"${col.opacity}\"/>`;\n body += `<text class=\"sdvt-value\" x=\"${n2(r)}\" y=\"${n2(r - 2)}\" text-anchor=\"middle\" fill=\"${ink}\"${weight}${font}>${escapeHtml(fmt(v))}</text>`;\n if (col.showMinMax) {\n const y = n2(r + 10 * col.size);\n body += `<text class=\"sdvt-min\" x=\"0\" y=\"${y}\" text-anchor=\"start\" fill=\"${ink}\" font-size=\"0.7em\">${escapeHtml(fmt(lo))}</text><text class=\"sdvt-max\" x=\"${n2(w)}\" y=\"${y}\" text-anchor=\"end\" fill=\"${ink}\" font-size=\"0.7em\">${escapeHtml(fmt(hi))}</text>`;\n }\n const gauged = v < 0 ? ` (its absolute value, ${fmt(Math.abs(v))}, is gauged)` : \"\";\n const label = `Gauge: ${fmt(v)}${gauged} on a scale from ${fmt(lo)} to ${fmt(hi)}`;\n return chartSvg(\"gauge\", w, r + (col.showMinMax ? 12 * col.size : 0), label, body);\n}\n","// src/html/cells.ts — Task 5 version: the context types + dispatcher + text; Tasks 6–8 add the other kinds in this file\nimport {\n contrast,\n headshotUrl,\n hex6,\n logoUrlSync,\n mix,\n onColor,\n resolveSync,\n solid,\n teamColorsSync,\n} from \"@sportsdataverse/sdvplot\";\nimport type { EspnHeadshotLeague, League, SeasonInput, Which } from \"@sportsdataverse/sdvplot\";\nimport { checkChart } from \"../define.js\";\nimport { TableSpecError } from \"../errors.js\";\nimport {\n formatNumber,\n formatValue,\n isBlank,\n naturalDigits,\n ordinal,\n scaledNumber,\n toNumber,\n} from \"../format.js\";\nimport { matches } from \"../predicate.js\";\nimport { averageRanks, domainOf, ntile, ramp } from \"../scale.js\";\nimport type { ColumnSpec, IconName, MarkOpts, NumberFormat, TableSpec } from \"../spec.js\";\nimport { teamNameSync } from \"../team-name.js\";\nimport type { Theme } from \"../themes/tokens.js\";\nimport { checkPx, cssValue, escapeAttr, escapeHtml, styleAttr } from \"./escape.js\";\nimport { ICON_NAMES, iconSvg } from \"./icons.js\";\nimport { namedColor } from \"./named-colors.js\";\nimport { gaugeSvg, sparkbarSvg, sparklineSvg } from \"./svg.js\";\n/** One scaled column (pills, ranks, percentile), computed once per column by Task 8's columnScales. */\nexport interface ColumnScale {\n readonly domain: readonly [number, number];\n readonly palette: readonly string[];\n readonly reverse: boolean;\n readonly values: readonly (number | null)[];\n readonly color: (v: number) => string | null;\n /** colorPills: the widest label in `ch`, computed once per column (gt_color_pills); 1 otherwise. */\n readonly labelWidth: number;\n}\n/** Decided once here; Tasks 7, 8 and 10 fill the maps (index.ts passes them empty until then). */\nexport interface RenderContext<Row> {\n readonly spec: TableSpec<Row>;\n readonly rows: readonly Row[];\n /** J31 (A4): the rows scale and legend domains come from (`RenderOptions.domainRows`, default `rows`). */\n readonly domainRows: readonly Row[];\n readonly theme: Theme;\n readonly id: string;\n readonly sel: string;\n readonly columns: readonly ColumnSpec<Row>[];\n readonly groupKey: string | undefined;\n readonly warn: (key: string, message: string) => void;\n /** Task 7: team ids per team column, ONE resolveSync per column (J28), keyed by the column key. */\n readonly teamIds: ReadonlyMap<string, readonly (string | undefined)[]>;\n /** Task 8: scales per pills/ranks/percentile column, keyed by column key. */\n readonly scales: ReadonlyMap<string, ColumnScale>;\n /** Task 8: the last scale in column order — what gt_legend_continuous reads back as `_sdvplot_scale`. */\n readonly recorded: ColumnScale | undefined;\n /** Task 10: scaleNote divisor + decimals per num/int column; applyDecorations fills it before the row loop. */\n readonly scaled: Map<string, { readonly divisor: number; readonly decimals: number }>;\n}\nexport const cellValue = <Row>(row: Row, key: string): unknown => (row as Record<string, unknown>)[key];\n/** Cell text: null/undefined/NaN/blank string render empty, never \"NaN\". */\nconst blankOr = (v: unknown): string => (isBlank(v) ? \"\" : escapeHtml(v));\nconst tableBg = <Row>(ctx: RenderContext<Row>): string =>\n ctx.theme.tokens.bg === \"transparent\" ? \"#ffffff\" : hex6(ctx.theme.tokens.bg);\n\n// ---- Task 7 helpers\nexport function markImg(src: string, alt: string, heightPx: number, teamId?: string): string {\n return `<img class=\"sdvt-mark\" src=\"${escapeAttr(src)}\" alt=\"${escapeAttr(alt)}\" style=\"height:${heightPx}px\"${teamId ? ` data-sdvplot-team=\"${escapeAttr(teamId)}\"` : \"\"}>`;\n}\n/** sdvplotR sdv_readable_ink() = Python readable_ink (_marks.py:373-386): primary, else secondary, else primary blended toward onColor(bg), weights 0.95 -> 0. */\nexport function readableInk(\n primary: string,\n secondary: string | undefined,\n background: string,\n target = 4.5,\n): string {\n const toward = onColor(background);\n for (const c of [primary, secondary]) if (c !== undefined && contrast(c, background) >= target) return c;\n for (let i = 0; i < 20; i++) {\n const c = mix(toward, primary, Math.max(0.95 + i * -0.05, 0)); // R seq(0.95, 0, by = -0.05), unrounded\n if (contrast(c, background) >= target) return c;\n }\n return toward;\n}\nfunction checkHeight(h: number, kind: string): number {\n if (!(Number.isFinite(h) && h >= 1))\n throw new TableSpecError(`${kind} height must be a number of pixels >= 1, got ${String(h)}`);\n return h;\n}\n/** ONE resolveSync per team-aware column (J28: one warning per call listing every unresolved value; strict throws once). */\nexport function teamIdsOf<Row>(\n spec: TableSpec<Row>,\n rows: readonly Row[],\n): Map<string, (string | undefined)[]> {\n const out = new Map<string, (string | undefined)[]>();\n for (const c of spec.columns) {\n checkRefs(c);\n checkChart(c); // a hand-written (JSON) spec skips build(): its chart numbers reach SVG attributes\n // the reactablefmtr-style kinds join in when they name a team column (team colours, or a logo/wordmark mark)\n const optIn = \"team\" in c && c.kind !== \"mergeStackTeamColor\" && c.team !== undefined;\n if (\n !optIn &&\n c.kind !== \"logo\" &&\n c.kind !== \"wordmark\" &&\n c.kind !== \"mergeStackTeamColor\" &&\n c.kind !== \"teamColorBar\" &&\n c.kind !== \"teamColorBg\"\n )\n continue;\n if (c.league === undefined)\n throw new TableSpecError(`column \"${c.key}\" names a team column, so it needs a league`);\n const from = \"team\" in c && c.team !== undefined ? c.team : c.key;\n const values = rows.map((r) => {\n const v = cellValue(r, from);\n return isBlank(v) ? null : String(v).trim(); // the raw value, never the escaped one (Review Focus 1)\n });\n out.set(\n c.key,\n resolveSync(values, c.league, {\n ...(c.season !== undefined ? { season: c.season } : {}),\n ...(c.idSystem ? { idSystem: c.idSystem } : {}),\n strict: c.strict ?? false,\n }),\n );\n }\n return out;\n}\n\ntype PillsCol = Pick<\n Extract<ColumnSpec<never>, { kind: \"colorPills\" }>,\n \"formatType\" | \"scalePercent\" | \"digits\" | \"suffix\"\n>;\nconst pillLabel = (col: PillsCol, v: number | null): string =>\n formatValue(\n v !== null && col.formatType === \"percent\" && col.scalePercent ? v * 100 : v,\n col.digits,\n col.formatType,\n col.suffix,\n );\ntype HighlightNaCol = Extract<ColumnSpec<never>, { kind: \"highlightNa\" }>;\nconst isNa = (col: HighlightNaCol, v: unknown): boolean =>\n isBlank(v) ||\n col.naStrings.some((n) => (col.ignoreCase ? n.toLowerCase() === String(v).toLowerCase() : n === String(v)));\n\n// ---- reactablefmtr-style kinds (dataBar, iconSet, iconAssign, mergeStack, bubble) and the colorRef / extreme options\n\n/** reactablefmtr `number_fmt`, as data: scale, digits, type, prefix and suffix (formatValue prints the plain \"-\"). */\nconst fmtNum = (n: number, f: NumberFormat | undefined): string =>\n `${f?.prefix ?? \"\"}${formatValue(n * (f?.scale ?? 1), f?.digits, f?.type ?? \"number\", f?.suffix ?? \"\")}`;\nconst clamp01 = (x: number): number => (x < 0 ? 0 : x > 1 ? 1 : x);\n/** grDevices::adjustcolor(alpha.f): a hex colour with its alpha replaced; opacity 1 leaves the colour as given. */\nfunction withAlpha(color: string, opacity: number, field: string): string {\n if (!(opacity >= 0 && opacity <= 1))\n throw new TableSpecError(`${field} must be between 0 and 1, got ${opacity}`);\n if (opacity === 1) return cssValue(color, field);\n const a = Math.round(opacity * 255)\n .toString(16)\n .padStart(2, \"0\");\n return `${hex6(color, { dropAlpha: true })}${a}`;\n}\n\n/** One numeric column over `domainRows`, computed once per render (keyed by the domainRows array). */\ninterface Stats {\n readonly nums: readonly (number | null)[];\n readonly min: number;\n readonly max: number;\n readonly maxAbs: number;\n /** min, max and max |v| over the finite values only (gauge: an infinity is a gap, never the scale's end) */\n readonly finite: readonly [number, number, number];\n readonly index: ReadonlyMap<unknown, number>;\n readonly tiles: Map<number, readonly (number | null)[]>;\n}\n// ponytail: keyed by the domainRows array, so rows are treated as immutable — mutating a row between renders of the\n// same array serves stale stats; pass a new array after changing rows.\nconst STATS = new WeakMap<readonly unknown[], Map<string, Stats>>();\nfunction statsOf<Row>(ctx: RenderContext<Row>, key: string): Stats {\n let byKey = STATS.get(ctx.domainRows);\n if (!byKey) {\n byKey = new Map();\n STATS.set(ctx.domainRows, byKey);\n }\n const hit = byKey.get(key);\n if (hit) return hit;\n const nums = ctx.domainRows.map((r) => toNumber(cellValue(r, key)));\n const present = nums.filter((n): n is number => n !== null);\n const fin = present.filter(Number.isFinite);\n const st: Stats = {\n nums,\n min: present.length ? Math.min(...present) : Number.NaN,\n max: present.length ? Math.max(...present) : Number.NaN,\n maxAbs: present.length ? Math.max(...present.map(Math.abs)) : Number.NaN,\n finite: fin.length\n ? [Math.min(...fin), Math.max(...fin), Math.max(...fin.map(Math.abs))]\n : [Number.NaN, Number.NaN, Number.NaN],\n index: new Map(ctx.domainRows.map((r, j) => [r, j] as const)),\n tiles: new Map(),\n };\n byKey.set(key, st);\n return st;\n}\n/** Row `i`'s dplyr::ntile bucket (1..n) among the column's domain rows; a row outside them is ranked as if appended. */\nfunction tileOf<Row>(ctx: RenderContext<Row>, key: string, row: Row, i: number, n: number): number | null {\n const st = statsOf(ctx, key);\n const j = ctx.domainRows === ctx.rows ? i : st.index.get(row);\n if (j === undefined) return ntile([...st.nums, toNumber(cellValue(row, key))], n).at(-1) ?? null;\n let t = st.tiles.get(n);\n if (!t) {\n t = ntile(st.nums, n);\n st.tiles.set(n, t);\n }\n return t[j] ?? null;\n}\n/** reactablefmtr data_bars / bubble_grid size: `|v| / max|v|`, or scaled between minValue and maxValue; clamped to [0, 1]. */\nfunction sizeOf(v: number, st: Stats, minValue: number | undefined, maxValue: number | undefined): number {\n const top = maxValue ?? st.maxAbs;\n const r = minValue === undefined ? Math.abs(v) / top : (Math.abs(v) - minValue) / (top - minValue);\n return Number.isFinite(r) ? clamp01(r) : 0;\n}\n/** reactablefmtr's colour position: (v - min) / (max - min) over the column, 1 when every value is the same. */\nconst normalized = (v: number, lo: number, hi: number): number =>\n hi === lo ? 1 : clamp01((v - lo) / (hi - lo));\n/**\n * A row's colour value (`colorRef`, `iconColorRef`): a CSS colour name (case-insensitive, `\"steelblue\"`) resolved to\n * its `#rrggbb`, or the trimmed string when it is a hex colour `solid()` can read (`#rgb`, `#rgba`, `#rrggbb`,\n * `#rrggbbaa`), else undefined. Only hex ever reaches CSS and this never throws: a blank, `transparent`, unknown name,\n * `rgb()` / `hsl()` or hostile (`url(...)`) value is treated as blank.\n */\nfunction dataColor(v: unknown): string | undefined {\n if (isBlank(v)) return undefined;\n const s = String(v).trim();\n const named = namedColor(s);\n if (named !== undefined) return named;\n try {\n hex6(s, { dropAlpha: true });\n return s;\n } catch {\n return undefined;\n }\n}\n/** The row's own colour: `colorRef`'s value, else `team`'s `which` colour; undefined when neither gives one. */\nfunction refColor<Row>(\n col: {\n readonly key: string;\n readonly colorRef?: string;\n readonly team?: string;\n readonly league?: League;\n readonly which?: Which;\n },\n row: Row,\n i: number,\n ctx: RenderContext<Row>,\n): string | undefined {\n if (col.colorRef !== undefined) {\n const c = dataColor(cellValue(row, col.colorRef));\n if (c !== undefined) return c;\n }\n if (col.team === undefined || col.league === undefined) return undefined;\n const id = ctx.teamIds.get(col.key)?.[i];\n return id === undefined\n ? undefined\n : teamColorsSync(col.league, id, { which: col.which ?? \"primary\", idSystem: \"team_id\" });\n}\n/** Spec errors a reactablefmtr-style column can only show once rendered: a mark without what it reads. */\nfunction checkRefs<Row>(c: ColumnSpec<Row>): void {\n if (!(\"mark\" in c) || c.mark === undefined) return;\n if ((c.mark === \"logo\" || c.mark === \"wordmark\") && (c.team === undefined || c.league === undefined))\n throw new TableSpecError(\n `column \"${c.key}\": mark \"${c.mark}\" reads the team column, so set team and league`,\n );\n if (c.mark === \"headshot\" && (c.markKey === undefined || c.league === undefined))\n throw new TableSpecError(\n `column \"${c.key}\": mark \"headshot\" reads an ESPN athlete id, so set markKey and league`,\n );\n}\n/** The column's logo, wordmark or headshot for row `i`, or \"\" (blank or unknown: the column's resolveSync warned once). */\nfunction markOf<Row>(\n col: MarkOpts<Row> & {\n readonly key: string;\n readonly kind: string;\n readonly league?: League;\n readonly season?: SeasonInput;\n },\n row: Row,\n i: number,\n ctx: RenderContext<Row>,\n): string {\n if (col.mark === undefined || col.league === undefined) return \"\";\n const h = checkHeight(col.markHeight ?? 20, `${col.kind} mark`);\n if (col.mark === \"headshot\") {\n const raw = col.markKey === undefined ? null : cellValue(row, col.markKey);\n if (isBlank(raw)) return \"\";\n const url = headshotUrl(String(raw).trim(), col.league as EspnHeadshotLeague, { idSystem: \"espn\" });\n return url ? markImg(url, String(raw).trim(), h) : \"\";\n }\n const id = ctx.teamIds.get(col.key)?.[i];\n if (id === undefined) return \"\";\n const url = logoUrlSync(id, col.league, {\n ...(col.season !== undefined ? { season: col.season } : {}),\n markType: col.mark,\n idSystem: \"team_id\",\n });\n return url ? markImg(url, teamNameSync(col.league, id) ?? id, h, id) : \"\";\n}\n\ntype DataBarCol<Row> = Extract<ColumnSpec<Row>, { kind: \"dataBar\" }>;\n/** reactablefmtr data_bars (2.1.0 source): track, fill, text position, diverging bars around a #666666 centre line. */\nfunction dataBar<Row>(col: DataBarCol<Row>, row: Row, i: number, ctx: RenderContext<Row>): string {\n const raw = cellValue(row, col.key);\n const v = toNumber(raw);\n if (v === null) return blankOr(raw);\n if (col.fill.length === 0) throw new TableSpecError(\"dataBar fill needs at least one colour\");\n if (col.gradient && col.fill.length < 2)\n throw new TableSpecError(\"dataBar gradient needs at least two colours in fill\");\n const st = statsOf(ctx, col.key);\n const pos = col.textPosition;\n const h =\n col.barHeight !== undefined ? checkPx(col.barHeight, \"dataBar barHeight\") : pos === \"above\" ? 5 : 18;\n const radius = col.roundEdges ? h / 2 : 0;\n const posNeg = col.posNeg ?? st.min < 0;\n const ref = refColor(col, row, i, ctx);\n const fill =\n ref ??\n (posNeg && col.fill.length === 2\n ? (col.fill[v < 0 ? 0 : 1] as string)\n : col.fill.length === 1\n ? (col.fill[0] as string)\n : (ramp(\n col.fill.map((c) => hex6(c)),\n [0, 1],\n col.bias,\n )(normalized(v, st.min, st.max)) as string)); // reactablefmtr data_bars: colour over the column's range, minValue/maxValue set width only (bubble_grid uses them for both)\n const gradient = col.gradient ? `linear-gradient(to right, ${col.fill.join(\", \")})` : undefined;\n const inside = pos === \"inside-end\" || pos === \"inside-base\" || pos === \"center\";\n const inkOn = col.gradient ? (col.fill.at(v < 0 ? 0 : -1) as string) : fill;\n const ink =\n pos === \"none\" ? \"transparent\" : (col.textColor ?? (inside ? onColor(solid(inkOn)) : undefined));\n const label = escapeHtml(fmtNum(v, col.numberFormat));\n const m = markOf(col, row, i, ctx);\n const mark = m ? `<span style=\"display:inline-flex;margin:0 4px\">${m}</span>` : \"\";\n const right = col.align === \"right\";\n const width = Number((sizeOf(v, st, col.minValue, col.maxValue) * 100).toFixed(4));\n // one bar: its text inside (inside-*/center/none) or empty; `dir` sets which way it grows\n const bar = (dir: \"row\" | \"row-reverse\", text: boolean, gap: boolean): string =>\n `<div style=\"${styleAttr({\n display: \"flex\",\n \"align-items\": \"center\",\n \"flex-direction\": dir,\n \"justify-content\": pos === \"center\" ? \"center\" : pos === \"inside-base\" ? \"flex-start\" : \"flex-end\",\n background: gradient ? undefined : fill,\n \"background-image\": gradient,\n \"border-radius\": `${radius}px`,\n color: text ? ink : undefined,\n width: `${width}%`,\n height: `${h}px`,\n \"white-space\": \"nowrap\",\n [dir === \"row\" ? \"margin-right\" : \"margin-left\"]: gap ? \"6px\" : undefined,\n })}\">${text ? `<span>${label}</span>` : \"\"}</div>`;\n const textSpan = `<span${ink ? ` style=\"color:${escapeAttr(cssValue(ink, \"dataBar textColor\"))}\"` : \"\"}>${label}</span>`;\n const group = (dir: \"row\" | \"row-reverse\"): string =>\n inside || pos === \"none\"\n ? `<div style=\"display:flex;align-items:center;flex-direction:${dir};width:100%\">${bar(dir, true, false)}${mark}</div>`\n : `<div style=\"display:flex;align-items:center;flex-direction:${dir};width:100%\">${bar(dir, false, true)}${mark}${textSpan}</div>`;\n if (posNeg) {\n const half = (side: \"neg\" | \"pos\"): string =>\n `<div style=\"flex:1 1 0;display:flex;align-items:center${side === \"neg\" ? \";justify-content:flex-end\" : \"\"}\">${(v < 0) === (side === \"neg\") ? group(side === \"neg\" ? \"row-reverse\" : \"row\") : \"\"}</div>`;\n return `<div class=\"sdvt-databar\" style=\"display:flex;align-items:stretch;min-height:${h}px\">${half(\"neg\")}<div style=\"width:1px;background:#666666\"></div>${half(\"pos\")}</div>`;\n }\n const dir = right ? \"row-reverse\" : \"row\";\n const track = (inner: string, gap = false): string =>\n `<div style=\"${styleAttr({ \"flex-grow\": 1, \"border-radius\": `${radius}px`, background: col.background, [right ? \"margin-right\" : \"margin-left\"]: gap ? \"6px\" : undefined })}\">${inner}</div>`;\n if (pos === \"above\")\n return `<div class=\"sdvt-databar\"><div style=\"text-align:${right ? \"right\" : \"left\"}${ink ? `;color:${escapeAttr(cssValue(ink, \"dataBar textColor\"))}` : \"\"}\">${label}</div>${track(`<div style=\"display:flex;align-items:center;flex-direction:${dir}\">${bar(dir, false, false)}${mark}</div>`)}</div>`;\n if (pos === \"outside-base\") {\n const chars = Math.max(\n 1,\n ...st.nums.filter((n): n is number => n !== null).map((n) => fmtNum(n, col.numberFormat).length),\n );\n return `<div class=\"sdvt-databar\" style=\"display:flex;align-items:center;flex-direction:${dir}\"><span style=\"${styleAttr({ \"min-width\": `${chars}ch`, \"text-align\": right ? \"left\" : \"right\", \"font-variant-numeric\": \"tabular-nums\", color: ink })}\">${label}</span>${track(`<div style=\"display:flex;align-items:center;flex-direction:${dir}\">${bar(dir, false, false)}${mark}</div>`, true)}</div>`;\n }\n return `<div class=\"sdvt-databar\" style=\"display:flex\">${track(group(dir))}</div>`;\n}\n\ntype IconSetCol<Row> = Extract<ColumnSpec<Row>, { kind: \"iconSet\" }>;\n/** reactablefmtr icon_sets: icon and colour by equal-count bucket (or per row), beside the value. */\nfunction iconSet<Row>(col: IconSetCol<Row>, row: Row, i: number, ctx: RenderContext<Row>): string {\n const raw = cellValue(row, col.key);\n const v = toNumber(raw);\n if (v === null) return blankOr(raw);\n // a blank or unknown iconRef / iconColorRef value falls back to the row's bucket icon / colour (one bad row never throws)\n const named = col.iconRef === undefined ? undefined : cellValue(row, col.iconRef);\n const icon: IconName =\n !isBlank(named) && ICON_NAMES.includes(String(named).trim() as IconName)\n ? (String(named).trim() as IconName)\n : (col.icons[(tileOf(ctx, col.key, row, i, col.icons.length) ?? 1) - 1] as IconName);\n const color =\n (col.iconColorRef === undefined ? undefined : dataColor(cellValue(row, col.iconColorRef))) ??\n (col.colors[(tileOf(ctx, col.key, row, i, col.colors.length) ?? 1) - 1] as string);\n const svg = iconSvg(\n icon,\n withAlpha(color, col.opacity, \"iconSet colors\"),\n checkPx(col.iconSize, \"iconSet iconSize\"),\n );\n const label = escapeHtml(fmtNum(v, col.numberFormat));\n switch (col.iconPosition) {\n case \"left\":\n return `<span style=\"display:inline-block;margin-right:8px\">${svg}</span>${label}`;\n case \"above\":\n return `<div>${svg}</div><div>${label}</div>`;\n case \"below\":\n return `<div>${label}</div><div>${svg}</div>`;\n case \"over\":\n return `${svg}<span style=\"font-size:0;color:transparent\">${label}</span>`;\n default:\n return `${label}<span style=\"display:inline-block;margin-left:8px\">${svg}</span>`;\n }\n}\n\ntype IconAssignCol<Row> = Extract<ColumnSpec<Row>, { kind: \"iconAssign\" }>;\n/** reactablefmtr icon_assign: one icon per unit up to the column maximum, filled up to the rounded value (or by bucket). */\nfunction iconAssign<Row>(col: IconAssignCol<Row>, row: Row, i: number, ctx: RenderContext<Row>): string {\n const raw = cellValue(row, col.key);\n const v = toNumber(raw);\n if (v === null) return blankOr(raw);\n const size = checkPx(col.iconSize, \"iconAssign iconSize\");\n const on = withAlpha(col.fill, col.fillOpacity, \"iconAssign fill\");\n const off = withAlpha(col.empty, col.emptyOpacity, \"iconAssign empty\");\n const half = (x: number): number => Math.floor(x + 0.5);\n let steps: number[];\n let filled: (s: number) => boolean;\n let title: string;\n if (col.buckets !== undefined) {\n const b = tileOf(ctx, col.key, row, i, col.buckets) ?? 0;\n steps = Array.from({ length: col.buckets }, (_, k) => k + 1);\n filled = (s) => s <= half(b);\n title = `${b} out of ${col.buckets}`;\n } else {\n if (!(col.seqBy > 0)) throw new TableSpecError(`iconAssign seqBy must be positive, got ${col.seqBy}`);\n const top = half(statsOf(ctx, col.key).max);\n const n = half(v);\n steps = [];\n // ponytail: an all-negative column (top < 0) draws no icons, only the value; R's seq(1, top) errors there\n if (top === 0) steps.push(0);\n else for (let s = 1; s <= top; s += col.seqBy) steps.push(s);\n if (steps.length > 1000)\n throw new TableSpecError(`iconAssign would draw ${steps.length} icons per cell; set buckets or seqBy`);\n filled = top === 0 ? (s) => s < n : (s) => s <= n;\n title = `${naturalDigits(v)} out of ${top}`;\n }\n const icons = steps.map((s) => iconSvg(col.icon, filled(s) ? on : off, size)).join(\"\");\n const box = `<span title=\"${escapeAttr(title)}\" aria-label=\"${escapeAttr(title)}\" role=\"img\">${icons}</span>`;\n const label = escapeHtml(fmtNum(v, col.numberFormat));\n switch (col.showValues) {\n case \"right\":\n return `${box}<span style=\"margin-left:6px\">${label}</span>`;\n case \"left\":\n return `<span style=\"margin-right:6px\">${label}</span>${box}`;\n case \"above\":\n return `<div>${label}</div><div>${box}</div>`;\n case \"below\":\n return `<div>${box}</div><div>${label}</div>`;\n default:\n return box;\n }\n}\n\ntype MergeStackCol<Row> = Extract<ColumnSpec<Row>, { kind: \"mergeStack\" }>;\n/** reactablefmtr merge_column: the value and a second column's value, `spacing + 3` px apart, optional mark first. */\nfunction mergeStack<Row>(col: MergeStackCol<Row>, row: Row, i: number, ctx: RenderContext<Row>): string {\n const main = `font-size:${checkPx(col.size, \"mergeStack size\")}px;${styleAttr({ color: col.color, \"font-weight\": col.weight, \"font-style\": col.style })}`;\n const sub = `font-size:${checkPx(col.stackSize, \"mergeStack stackSize\")}px;${styleAttr({ color: col.stackColor, \"font-weight\": col.stackWeight, \"font-style\": col.stackStyle })}`;\n const gap = checkPx(col.spacing, \"mergeStack spacing\") + 3;\n const a = blankOr(cellValue(row, col.key));\n const b = blankOr(cellValue(row, col.stack));\n const body =\n col.position === \"below\"\n ? `<div><div style=\"${main};margin-bottom:${gap}px\">${a}</div><div style=\"${sub}\">${b}</div></div>`\n : col.position === \"above\"\n ? `<div><div style=\"${sub};margin-bottom:${gap}px\">${b}</div><div style=\"${main}\">${a}</div></div>`\n : col.position === \"left\"\n ? `<span style=\"${sub};margin-right:${gap}px\">${b}</span><span style=\"${main}\">${a}</span>`\n : `<span style=\"${main};margin-right:${gap}px\">${a}</span><span style=\"${sub}\">${b}</span>`;\n const m = markOf(col, row, i, ctx);\n const stacked = col.position === \"below\" || col.position === \"above\"; // already one block\n return m\n ? `<div style=\"display:flex;align-items:center;gap:6px\">${m}${stacked ? body : `<div>${body}</div>`}</div>`\n : body;\n}\n\ntype BubbleCol<Row> = Extract<ColumnSpec<Row>, { kind: \"bubble\" }>;\n/** reactablefmtr bubble_grid: a circle or square `maxSize * |v| / max|v|` px across, coloured on the column's ramp. */\nfunction bubble<Row>(col: BubbleCol<Row>, row: Row, i: number, ctx: RenderContext<Row>): string {\n const raw = cellValue(row, col.key);\n const v = toNumber(raw);\n if (v === null) return blankOr(raw);\n if (col.colors.length === 0) throw new TableSpecError(\"bubble colors needs at least one colour\");\n const st = statsOf(ctx, col.key);\n const px = Number(\n (sizeOf(v, st, col.minValue, col.maxValue) * checkPx(col.maxSize, \"bubble maxSize\")).toFixed(2),\n );\n const base =\n refColor(col, row, i, ctx) ??\n (ramp(\n col.colors.map((c) => hex6(c)),\n [0, 1],\n col.bias,\n )(normalized(v, col.minValue ?? st.min, col.maxValue ?? st.max)) as string);\n const fill = withAlpha(base, col.opacity, \"bubble opacity\");\n const ink = col.showText ? (col.textColor ?? onColor(solid(fill, tableBg(ctx)))) : \"transparent\";\n return `<div style=\"${styleAttr({\n background: fill,\n color: ink,\n display: \"inline-flex\",\n \"justify-content\": \"center\",\n \"align-items\": \"center\",\n \"text-align\": \"center\",\n height: `${px}px`,\n width: `${px}px`,\n \"border-radius\": col.shape === \"circles\" ? \"50%\" : undefined,\n })}\">${escapeHtml(fmtNum(v, col.numberFormat))}</div>`;\n}\n\n// ---- in-cell charts (reactablefmtr react_sparkline, react_sparkbar, gauge_chart); the SVG is drawn in svg.ts\n\ntype ChartCol<Row> = Extract<ColumnSpec<Row>, { kind: \"sparkline\" | \"sparkbar\" | \"gauge\" }>;\n/**\n * The row's own chart colour: `colorRef`'s hex value as given, else the team's `which` colour checked for 3:1\n * non-text contrast (WCAG 1.4.11) on the table background: its other colour when that reads, else blended toward\n * readable. Undefined when the row has neither.\n */\nfunction chartColor<Row>(\n col: ChartCol<Row>,\n row: Row,\n i: number,\n ctx: RenderContext<Row>,\n): string | undefined {\n if (col.colorRef !== undefined) {\n const c = dataColor(cellValue(row, col.colorRef));\n if (c !== undefined) return c;\n }\n const id = col.team === undefined ? undefined : ctx.teamIds.get(col.key)?.[i];\n if (id === undefined || col.league === undefined) return undefined;\n const which = col.which ?? \"primary\";\n const own = teamColorsSync(col.league, id, { which, idSystem: \"team_id\" });\n const other = teamColorsSync(col.league, id, {\n which: which === \"primary\" ? \"secondary\" : \"primary\",\n idSystem: \"team_id\",\n });\n const first = own ?? other;\n return first === undefined\n ? undefined\n : readableInk(first, own === undefined ? undefined : other, tableBg(ctx), 3);\n}\n/**\n * A cell's series: each finite number, or numeric string as `toNumber` reads it (a JSON spec may carry \"12\"), kept;\n * anything else (null, NaN, ±Infinity, a boolean, other text) a gap. null when the cell is not an array.\n */\nfunction seriesOf(v: unknown): (number | null)[] | null {\n if (!Array.isArray(v)) return null;\n return v.map((x) => {\n const n = typeof x === \"number\" || typeof x === \"string\" ? toNumber(x) : null;\n return n !== null && Number.isFinite(n) ? n : null;\n });\n}\nfunction seriesCell<Row>(\n col: Extract<ColumnSpec<Row>, { kind: \"sparkline\" | \"sparkbar\" }>,\n row: Row,\n i: number,\n ctx: RenderContext<Row>,\n): string {\n const values = seriesOf(cellValue(row, col.key));\n if (values === null || values.every((v) => v === null)) return \"\"; // empty, missing or not an array: blank\n const color = chartColor(col, row, i, ctx);\n return col.kind === \"sparkline\"\n ? sparklineSvg(col, values, color ?? col.lineColor, i)\n : sparkbarSvg(col, values, color ?? col.fillColor, i);\n}\ntype GaugeCol<Row> = Extract<ColumnSpec<Row>, { kind: \"gauge\" }>;\n/** reactablefmtr gauge_chart: |v| fills a half circle from minValue (0) to maxValue (the column's max |v|). */\nfunction gauge<Row>(col: GaugeCol<Row>, row: Row, i: number, ctx: RenderContext<Row>): string {\n const raw = cellValue(row, col.key);\n const v = toNumber(raw);\n if (v === null) return blankOr(raw); // text passes through (reactablefmtr returns a non-numeric value as is)\n if (!Number.isFinite(v)) return \"\"; // ±Infinity is a gap, as NaN\n const [cmin, cmax, cabs] = statsOf(ctx, col.key).finite;\n const lo = col.minValue ?? 0;\n const hi = col.maxValue ?? (Number.isFinite(cabs) ? cabs : Math.abs(v));\n if (lo > hi)\n throw new TableSpecError(\n `column \"${col.key}\" row ${i}: gauge minValue ${naturalDigits(lo)} is above the column's largest absolute value ${naturalDigits(hi)}; give maxValue too`,\n );\n const color =\n chartColor(col, row, i, ctx) ??\n (col.fill.length === 1\n ? (col.fill[0] as string)\n : (ramp(\n col.fill.map((c) => hex6(c)),\n [0, 1],\n col.bias,\n )(normalized(v, Number.isFinite(cmin) ? cmin : v, Number.isFinite(cmax) ? cmax : v)) as string));\n return gaugeSvg(col, v, lo, hi, escapeAttr(cssValue(color, \"gauge fill\")), (n) =>\n fmtNum(n, col.numberFormat),\n );\n}\n\n/** highlight's extreme mode (reactablefmtr highlight_min/max/min_max): \"min\", \"max\" or null for this row. */\nfunction extremeOf<Row>(\n col: Extract<ColumnSpec<Row>, { kind: \"highlight\" }>,\n row: Row,\n ctx: RenderContext<Row>,\n): \"min\" | \"max\" | null {\n if (col.extreme === undefined) return col.when !== undefined && matches(col.when, row) ? \"max\" : null;\n const v = toNumber(cellValue(row, col.key));\n if (v === null) return null;\n const st = statsOf(ctx, col.key);\n if (col.extreme !== \"max\" && v === st.min) return \"min\";\n if (col.extreme !== \"min\" && v === st.max) return \"max\";\n return null;\n}\n\n/** The column kinds `columnScales` computes a scale for. */\nexport const isScaled = <Row>(\n col: ColumnSpec<Row>,\n): col is Extract<ColumnSpec<Row>, { kind: \"colorPills\" | \"colorRanks\" | \"percentileBar\" }> =>\n col.kind === \"colorPills\" || col.kind === \"colorRanks\" || col.kind === \"percentileBar\";\n/** One pass per scaled column (pills, ranks, percentile): numbers, ranks, domain, ramp — gt computes these per column, not per cell. */\nexport function columnScales<Row>(\n spec: TableSpec<Row>,\n rows: readonly Row[],\n warnFn: (key: string, m: string) => void,\n domainRows: readonly Row[] = rows,\n): Map<string, ColumnScale> {\n // J31 (A4): domain, ranks and the out-of-domain count come from domainRows; `values` and pill widths follow `rows`\n const at = domainRows === rows ? null : new Map(domainRows.map((r, j) => [r, j] as const));\n const missing = at !== null && rows.some((r) => !at.has(r));\n const out = new Map<string, ColumnScale>();\n for (const col of spec.columns) {\n if (!isScaled(col)) continue;\n if (missing)\n warnFn(\n `sdvtables:domainRows:${col.key}`,\n `column \"${col.key}\": a rendered row is not in domainRows (matched by identity, not by value), so it is colored from its own value (a rank fill: not at all); pass the same row objects as rows`,\n );\n // zero rows: no domain to derive, nothing to color. Phase 4's throw for an all-null NON-empty column stays (domainOf).\n if (col.domain === undefined && domainRows.length === 0) continue;\n const nums = domainRows.map((r) => toNumber(cellValue(r, col.key)));\n let values: (number | null)[] = nums;\n let own = (n: number | null): number | null => n; // a rendered row's value when it is not in domainRows (I2)\n let spanned: readonly [number, number] | undefined;\n let buckets: readonly string[] | undefined;\n if (col.kind === \"colorPills\" && col.fillType === \"rank\") {\n values = averageRanks(nums, col.rankOrder === \"desc\");\n own = () => null; // a rank exists only within domainRows\n }\n if (col.kind === \"colorRanks\" && col.evenBreaks) {\n // reactablefmtr even_breaks: colour i of n for the i-th equal-count bucket (dplyr::ntile), no ramp\n buckets = col.palette.map((c) => hex6(c));\n values = ntile(nums, buckets.length);\n own = () => null;\n } else if (col.kind === \"colorRanks\" && col.span && col.domain === undefined) {\n // reactablefmtr span: one range over several columns (TRUE: every numeric column of the data)\n const keys =\n col.span === true\n ? [...new Set(domainRows.flatMap((r) => Object.keys(r as object)))].filter((k) =>\n domainRows.some((r) => typeof cellValue(r, k) === \"number\"),\n )\n : col.span;\n spanned = domainOf(keys.map((k) => domainRows.map((r) => toNumber(cellValue(r, k)))));\n }\n if (col.kind === \"percentileBar\") {\n const present = nums.filter((n): n is number => n !== null);\n const [lo, hi] = col.domain;\n const scale = col.scale;\n // _layout.py:772-779,806: numeric scale multiplies; \"auto\" maps proportions only when every value is in [0, 1] and hi > 1\n const proportion =\n scale === \"auto\" && present.length > 0 && present.every((n) => n >= 0 && n <= 1) && hi > 1;\n own = (n) =>\n n === null ? null : typeof scale === \"number\" ? n * scale : proportion ? lo + n * (hi - lo) : n;\n values = nums.map(own);\n }\n const domain: readonly [number, number] = buckets\n ? [1, buckets.length]\n : (col.domain ?? spanned ?? domainOf([values]));\n const fmt = (): string => `(${naturalDigits(domain[0])} to ${naturalDigits(domain[1])})`;\n if (col.kind === \"colorPills\" && col.domain === undefined)\n warnFn(\n `sdvtables:domain:${col.key}:${domain.join(\",\")}`,\n `no domain given, so the colors span the observed range ${fmt()}; set domain to compare colors across tables or columns`,\n ); // _cells.py:1197-1201\n const palette = col.palette.map((c) => hex6(c));\n const ordered = col.reverse ? [...palette].reverse() : palette;\n const color = buckets\n ? (b: number): string | null => ordered[b - 1] ?? null\n : ramp(ordered, domain, col.kind === \"colorRanks\" ? (col.bias ?? 1) : 1);\n const outside = values.filter((v) => v !== null && color(v) === null).length;\n if (col.kind === \"colorPills\" && outside > 0)\n warnFn(\n `sdvtables:outside:${col.key}:${outside}:${domain.join(\",\")}`,\n `${outside} value(s) fall outside the domain ${fmt()} and are drawn grey`,\n ); // _cells.py:1226-1227\n const shown =\n at === null\n ? values\n : rows.map((r) => {\n const j = at.get(r);\n return j === undefined ? own(toNumber(cellValue(r, col.key))) : (values[j] ?? null);\n });\n const shownNums = at === null ? nums : rows.map((r) => toNumber(cellValue(r, col.key)));\n const labelWidth =\n col.kind === \"colorPills\" ? Math.max(1, ...shownNums.map((n) => pillLabel(col, n).length)) : 1;\n out.set(col.key, { domain, palette, reverse: col.reverse, values: shown, color, labelWidth });\n }\n return out;\n}\n\nexport function renderCell<Row>(col: ColumnSpec<Row>, row: Row, i: number, ctx: RenderContext<Row>): string {\n switch (col.kind) {\n case \"text\":\n case \"colorResults\": // colorResults fills its row (decorations.ts, Task 9); the cell is its text\n return blankOr(cellValue(row, col.key));\n // ---- Task 6\n case \"num\":\n case \"int\": {\n const n = toNumber(cellValue(row, col.key));\n if (n === null) return \"\";\n const sc = ctx.scaled.get(col.key); // scaleNote (Task 10): Python fmt_number(scale_by = 1/divisor, decimals) replaces the column's own format\n if (sc) return escapeHtml(scaledNumber(n, sc));\n return escapeHtml(\n col.kind === \"int\"\n ? formatNumber(n, { digits: 0, big: true })\n : formatNumber(n, {\n ...(col.digits !== undefined ? { digits: col.digits } : {}),\n big: col.big ?? false,\n prefix: col.prefix ?? \"\",\n suffix: col.suffix ?? \"\",\n forceSign: col.forceSign ?? false,\n }),\n );\n }\n case \"pct\": {\n const n = toNumber(cellValue(row, col.key));\n return n === null\n ? \"\"\n : escapeHtml(`${formatNumber(col.scale ? n * 100 : n, { digits: col.digits })}%`);\n }\n case \"rank\": {\n const n = toNumber(cellValue(row, col.key));\n if (n === null) return \"\";\n const o = ordinal(n);\n const num = String(Math.trunc(n));\n return col.superscript\n ? `${num}<sup style=\"font-size:${escapeAttr(cssValue(col.suffixSize, \"rank suffixSize\"))}\">${o.slice(num.length)}</sup>`\n : escapeHtml(o);\n }\n case \"delta\": {\n const a = toNumber(cellValue(row, col.key));\n const b = toNumber(cellValue(row, col.to));\n if (a === null || b === null) return \"\";\n const d = col.percent ? (a === 0 ? null : (b - a) / a) : b - a;\n if (d === null || !Number.isFinite(d)) return \"\";\n const shown = col.arrows ? Math.abs(d) : d;\n const text = `${col.arrows ? (d > 0 ? \"▲ \" : d < 0 ? \"▼ \" : \"\") : \"\"}${formatNumber(col.percent ? shown * 100 : shown, { digits: col.decimals, forceSign: col.forceSign && !col.arrows })}${col.percent ? \"%\" : \"\"}`;\n const color = !col.color\n ? null\n : d > 0\n ? col.colorPositive\n : d < 0\n ? col.colorNegative\n : (col.colorNeutral ?? null);\n return color\n ? `<span style=\"color:${escapeAttr(cssValue(color, \"delta color\"))}\">${escapeHtml(text)}</span>`\n : escapeHtml(text);\n }\n case \"tally\": {\n const ns = col.keys.map((k) => toNumber(cellValue(row, k)));\n if (ns.some((n) => n === null)) {\n const v = cellValue(row, col.key);\n return blankOr(v);\n }\n const xs = ns as number[];\n if (col.share && !(Number.isInteger(col.shareOf) && col.shareOf >= 0 && col.shareOf < xs.length))\n throw new TableSpecError(`tally shareOf must index (from 0) one of ${col.keys.join(\", \")}`);\n const text = xs.map((n) => naturalDigits(n)).join(col.separator);\n const total = xs.reduce((s, n) => s + n, 0);\n if (!col.share || total === 0) return escapeHtml(text);\n return escapeHtml(\n `${text}${col.sharePrefix}${formatNumber(((xs[col.shareOf] ?? 0) / total) * 100, { digits: col.shareDecimals })}%${col.shareSuffix}`,\n );\n }\n // ---- Task 7\n case \"logo\":\n case \"wordmark\": {\n const raw = cellValue(row, col.key);\n const text = blankOr(raw);\n const id = ctx.teamIds.get(col.key)?.[i];\n if (id === undefined) return text; // blank or unknown: text kept; the column's one resolveSync already warned (J28)\n const url = logoUrlSync(id, col.league, {\n ...(col.season !== undefined ? { season: col.season } : {}),\n ...(col.variant ? { variant: col.variant } : {}),\n markType: col.kind,\n idSystem: \"team_id\",\n });\n if (!url) return text; // no mark of that type archived (sdvplot warns once)\n return (\n markImg(url, teamNameSync(col.league, id) ?? String(raw), checkHeight(col.height, col.kind), id) +\n (col.kind === \"logo\" && col.includeName ? text : \"\")\n );\n }\n case \"headshot\": {\n const raw = cellValue(row, col.key);\n if (isBlank(raw)) return \"\";\n const url = headshotUrl(String(raw).trim(), col.league, { idSystem: col.idSystem });\n return url ? markImg(url, String(raw).trim(), checkHeight(col.height, \"headshot\")) : blankOr(raw);\n }\n case \"mergeStackTeamColor\": {\n // gt_merge_stack_team_color (_marks.py:451-475): two divs; the bottom in the team's readable color, #bebebe when unresolved\n const id = ctx.teamIds.get(col.key)?.[i];\n const bg = col.background ? solid(col.background) : tableBg(ctx);\n const p = id === undefined ? undefined : teamColorsSync(col.league, id, { idSystem: \"team_id\" });\n const s =\n id === undefined\n ? undefined\n : teamColorsSync(col.league, id, { which: \"secondary\", idSystem: \"team_id\" });\n const ink = readableInk(p ?? \"#bebebe\", s, bg);\n return `<div style=\"line-height:${col.fontSizeTop - 2}px\"><span style=\"${styleAttr({ \"font-weight\": \"bold\", \"font-variant\": \"small-caps\", color: col.color, \"font-size\": `${col.fontSizeTop}px` })}\">${blankOr(cellValue(row, col.key))}</span></div>\\n<div style=\"line-height:${col.fontSizeBottom - 2}px\"><span style=\"${styleAttr({ \"font-weight\": \"bold\", color: ink, \"font-size\": `${col.fontSizeBottom}px` })}\">${blankOr(cellValue(row, col.stack))}</span></div>`;\n }\n case \"teamColorBar\":\n case \"teamColorBg\":\n return blankOr(cellValue(row, col.key)); // the color lives on the <td> (kindCellStyle)\n // ---- Task 8\n case \"colorPills\": {\n // gt_color_pills (_cells.py:1203-1225)\n const sc = ctx.scales.get(col.key);\n if (!sc) return \"\";\n const pillHeight = checkPx(col.pillHeight, \"colorPills pillHeight\");\n const outlineWidth = checkPx(col.outlineWidth, \"colorPills outlineWidth\");\n const s = sc.values[i] ?? null;\n const width = sc.labelWidth;\n let fill: string;\n let text: string;\n if (s === null) {\n if (col.naColor === undefined) return \"\";\n fill = col.naColor;\n text = \"\";\n } else {\n fill = refColor(col, row, i, ctx) ?? sc.color(s) ?? \"#808080\";\n text = pillLabel(col, toNumber(cellValue(row, col.key)));\n }\n const ink = col.textColor ?? onColor(solid(fill, tableBg(ctx)));\n const outline =\n col.outlineColor !== undefined\n ? `;border:${outlineWidth}px solid ${escapeAttr(cssValue(col.outlineColor, \"colorPills outlineColor\"))}`\n : \"\";\n return `<span style=\"display:inline-block;width:${width}ch;padding-left:3px;padding-right:3px;height:${pillHeight}px;line-height:${pillHeight}px;background-color:${escapeAttr(cssValue(fill, \"colorPills naColor\"))};color:${escapeAttr(cssValue(ink, \"colorPills textColor\"))};border-radius:10px;text-align:center${outline}\">${escapeHtml(text)}</span>`;\n }\n case \"colorRanks\":\n case \"highlight\":\n return blankOr(cellValue(row, col.key)); // the fill lives on the <td> (kindCellStyle)\n case \"highlightNa\":\n return isNa(col, cellValue(row, col.key))\n ? escapeHtml(col.missingText ?? \"\")\n : blankOr(cellValue(row, col.key));\n case \"percentileBar\": {\n const sc = ctx.scales.get(col.key);\n const v = sc?.values[i] ?? null;\n const th = checkPx(col.trackHeight, \"percentileBar trackHeight\");\n const m = checkPx(col.markerSize, \"percentileBar markerSize\");\n const fontSize = col.fontSize === undefined ? m / 2 : checkPx(col.fontSize, \"percentileBar fontSize\");\n const ringWidth = checkPx(col.ringWidth, \"percentileBar ringWidth\");\n const trackColor = escapeAttr(cssValue(col.trackColor, \"percentileBar trackColor\"));\n const textColor = escapeAttr(cssValue(col.textColor, \"percentileBar textColor\"));\n if (sc === undefined || v === null) {\n // broken track: flex, so no `left:` anywhere\n const seg = `<div style=\"flex:1;height:${th}px;background:${escapeAttr(cssValue(col.naTrackColor ?? col.trackColor, \"percentileBar naTrackColor\"))};border-radius:${th}px\"></div>`;\n return `<div class=\"sdvt-pbar\" style=\"display:flex;align-items:center;height:${m}px;width:100%\">${seg}<span style=\"margin:0 6px;color:${escapeAttr(cssValue(col.naTextColor, \"percentileBar naTextColor\"))};font-size:${fontSize}px\">${escapeHtml(col.naLabel ?? \"\")}</span>${seg}</div>`;\n }\n const [lo, hi] = sc.domain;\n const clamped = Math.min(hi, Math.max(lo, v));\n const p = Number((hi === lo ? 50 : ((clamped - lo) / (hi - lo)) * 100).toFixed(4));\n const color = sc.color(clamped) ?? trackColor; // ramp output is hex\n const track = `<div style=\"position:absolute;top:50%;left:0;right:0;height:${th}px;margin-top:-${th / 2}px;background:${trackColor};border-radius:${th}px\"></div>`;\n const fill = col.fullTrack\n ? \"\"\n : `<div style=\"position:absolute;top:50%;left:0;width:${p}%;height:${th}px;margin-top:-${th / 2}px;background:${color};border-radius:${th}px\"></div>`;\n const ring =\n col.ringColor !== undefined\n ? `;box-shadow:0 0 0 ${ringWidth}px ${escapeAttr(cssValue(col.ringColor, \"percentileBar ringColor\"))}`\n : \"\";\n const marker = `<div style=\"position:absolute;top:0;left:${p}%;margin-left:-${m / 2}px;width:${m}px;height:${m}px;border-radius:50%;background:${color};color:${textColor};font-size:${fontSize}px;line-height:${m}px;text-align:center;font-weight:700;letter-spacing:-0.02em${ring}\">${escapeHtml(formatValue(v, col.decimals, \"number\", \"\"))}</div>`;\n return `<div class=\"sdvt-pbar\" style=\"position:relative;height:${m}px;width:100%\">${track}${fill}${marker}</div>`;\n }\n case \"indicatorBox\": {\n // gt_indicator_boxes (_cells.py:1428-1449): box only (no show_text in Phase 4)\n const on = col.truthy.includes(cellValue(row, col.key));\n if ((col.showOnly === \"filled\" && !on) || (col.showOnly === \"neutral\" && on)) return \"\";\n return `<span style=\"${styleAttr({ display: \"inline-block\", width: `${col.size}px`, height: `${col.size}px`, \"background-color\": on ? col.fill : col.neutral, \"vertical-align\": \"middle\", margin: \"4px 1px\" })}\"></span>`;\n }\n case \"image\": {\n const v = cellValue(row, col.key);\n if (isBlank(v)) return \"\";\n const alt = col.alt ? cellValue(row, col.alt) : \"\";\n return markImg(\n String(v),\n isBlank(alt) ? \"\" : String(alt),\n checkHeight(Number.parseFloat(col.height), \"image\"),\n );\n }\n // ---- reactablefmtr-style kinds\n case \"dataBar\":\n return dataBar(col, row, i, ctx);\n case \"iconSet\":\n return iconSet(col, row, i, ctx);\n case \"iconAssign\":\n return iconAssign(col, row, i, ctx);\n case \"mergeStack\":\n return mergeStack(col, row, i, ctx);\n case \"bubble\":\n return bubble(col, row, i, ctx);\n case \"sparkline\":\n case \"sparkbar\":\n return seriesCell(col, row, i, ctx);\n case \"gauge\":\n return gauge(col, row, i, ctx);\n default: {\n const bad: never = col;\n throw new TableSpecError(`unknown column kind ${String((bad as { kind: string }).kind)}`); // exhaustive over the 29 kinds\n }\n }\n}\n/** Bare `prop:value` declarations a column kind puts on its own `<td>` (Task 7 team colors; Task 8 colorRanks/highlight/highlightNa); \"\" otherwise. */\nexport function kindCellStyle<Row>(\n col: ColumnSpec<Row>,\n row: Row,\n i: number,\n ctx: RenderContext<Row>,\n): string {\n switch (col.kind) {\n case \"teamColorBar\":\n case \"teamColorBg\": {\n // reactable_sdv_team_color_bar/_bg\n const id = ctx.teamIds.get(col.key)?.[i];\n const color =\n (id === undefined\n ? undefined\n : teamColorsSync(col.league, id, { which: col.which, idSystem: \"team_id\" })) ?? col.naColor;\n if (col.kind === \"teamColorBar\")\n return styleAttr({ \"border-left\": `${col.barWidth}px solid ${color}` });\n const a = Math.round(Math.min(1, Math.max(0, col.alpha)) * 255)\n .toString(16)\n .padStart(2, \"0\");\n return styleAttr({ \"background-color\": `${hex6(color, { dropAlpha: true })}${a}` }); // scales::alpha(): replace any alpha the color had\n }\n case \"colorRanks\": {\n // data_color on the <td>; null or outside the domain -> na_color \"white\" (gt_color_ranks default)\n const sc = ctx.scales.get(col.key);\n const s = sc?.values[i] ?? null;\n const ref = s === null ? undefined : refColor(col, row, i, ctx); // a null cell stays white (na_color)\n const fill = ref ?? (s === null ? null : sc?.color(s)) ?? \"#ffffff\";\n return styleAttr({\n \"background-color\": fill,\n color: col.showText === false ? \"transparent\" : onColor(solid(fill, tableBg(ctx))),\n });\n }\n case \"highlight\": {\n const hit = extremeOf(col, row, ctx);\n return hit\n ? styleAttr({\n \"background-color\": col.fill,\n color: col.textColor ?? (col.extreme === undefined ? undefined : hit === \"min\" ? \"red\" : \"green\"),\n \"font-weight\": col.bold ? \"bold\" : undefined,\n })\n : \"\";\n }\n case \"highlightNa\":\n return isNa(col, cellValue(row, col.key))\n ? styleAttr({\n \"background-color\": col.fill,\n color: col.textColor,\n \"font-weight\": col.bold ? \"bold\" : undefined,\n \"font-style\": col.italic ? \"italic\" : undefined,\n })\n : \"\";\n default:\n return \"\";\n }\n}\n","// src/html/legend-icon.ts — the legendIcon decoration (reactablefmtr add_icon_legend, R/add_icon_legend.R in 2.1.0):\n// presets and layout from reactablefmtr; icons are small inline SVGs, so no icon font is loaded.\nimport { TableSpecError } from \"../errors.js\";\nimport type { LegendIconDecoration, LegendIconShape } from \"../spec.js\";\nimport { checkPx, cssValue, escapeAttr, escapeHtml } from \"./escape.js\";\n\n/** reactablefmtr's three icon sets: shape, colour and default label of each icon. */\nexport const LEGEND_ICON_SETS: Readonly<\n Record<\n NonNullable<LegendIconDecoration[\"iconSet\"]>,\n readonly (readonly [LegendIconShape, string, string])[]\n >\n> = {\n \"ski rating\": [\n [\"circle\", \"#39b54a\", \"Easy\"],\n [\"square\", \"#0f75bc\", \"Moderate\"],\n [\"diamond\", \"#000000\", \"Difficult\"], // Font Awesome \"square\" turned 45 degrees\n [\"double-diamond\", \"#000000\", \"Most Difficult\"],\n ],\n medals: [\n [\"medal\", \"#A77044\", \"Bronze\"],\n [\"medal\", \"#D7D7D7\", \"Silver\"],\n [\"medal\", \"#D6AF36\", \"Gold\"],\n ],\n batteries: [\n [\"battery-quarter\", \"#d7191c\", \"0-25%\"],\n [\"battery-half\", \"#fdae61\", \"25-50%\"],\n [\"battery-three-quarters\", \"#a6d96a\", \"50-75%\"],\n [\"battery-full\", \"#1a9641\", \"75-100%\"],\n ],\n};\n\nconst battery = (level: number): string =>\n `<rect x=\"0.75\" y=\"4.25\" width=\"12.5\" height=\"7.5\" rx=\"1\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"/><rect x=\"13.75\" y=\"6.5\" width=\"1.75\" height=\"3\" fill=\"currentColor\"/><rect x=\"2.5\" y=\"6\" width=\"${9 * level}\" height=\"4\" fill=\"currentColor\"/>`;\n/** Each shape's SVG body on a 16-unit square (double-diamond is 30 wide), drawn in currentColor. */\nconst SHAPES: Readonly<Record<LegendIconShape, readonly [number, string]>> = {\n circle: [16, `<circle cx=\"8\" cy=\"8\" r=\"7\" fill=\"currentColor\"/>`],\n square: [16, `<rect x=\"1\" y=\"1\" width=\"14\" height=\"14\" fill=\"currentColor\"/>`],\n diamond: [16, `<path d=\"M8 .5 15.5 8 8 15.5 .5 8Z\" fill=\"currentColor\"/>`],\n \"double-diamond\": [\n 30,\n `<path d=\"M8 .5 15.5 8 8 15.5 .5 8ZM22 .5 29.5 8 22 15.5 14.5 8Z\" fill=\"currentColor\"/>`,\n ],\n \"triangle-up\": [16, `<path d=\"M8 1.5 15 14.5H1Z\" fill=\"currentColor\"/>`],\n \"triangle-down\": [16, `<path d=\"M1 1.5H15L8 14.5Z\" fill=\"currentColor\"/>`],\n medal: [\n 16,\n `<path d=\"M3 0h3.5l2 5.5H5ZM13 0H9.5l-2 5.5H11Z\" fill=\"currentColor\"/><circle cx=\"8\" cy=\"10.5\" r=\"5\" fill=\"currentColor\"/>`,\n ],\n \"battery-quarter\": [16, battery(0.25)],\n \"battery-half\": [16, battery(0.5)],\n \"battery-three-quarters\": [16, battery(0.75)],\n \"battery-full\": [16, battery(1)],\n};\n\n/** One icon as an inline SVG `size` px high, coloured through `color` (validated CSS). */\nexport function legendIconSvg(shape: LegendIconShape, color: string, size: number): string {\n const s = Object.hasOwn(SHAPES, shape) ? SHAPES[shape] : undefined;\n if (!s)\n throw new TableSpecError(\n `legendIcon icon must be one of ${Object.keys(SHAPES).join(\", \")}, not \"${shape}\"`,\n );\n const [w, body] = s;\n return `<svg class=\"sdvt-legend-icon\" viewBox=\"0 0 ${w} 16\" width=\"${(size * w) / 16}\" height=\"${size}\" aria-hidden=\"true\" focusable=\"false\" style=\"color:${escapeAttr(cssValue(color, \"legendIcon colors\"))};vertical-align:middle\">${body}</svg>`;\n}\n\n/** The legend block: an optional bold title, the icons with their labels, an optional muted footer. */\nexport function legendIconBlock(d: LegendIconDecoration): string {\n if (d.align !== \"left\" && d.align !== \"right\")\n throw new TableSpecError(`legendIcon align must be left or right, not \"${String(d.align)}\"`);\n if (d.location !== \"top\" && d.location !== \"bottom\")\n throw new TableSpecError(`legendIcon location must be top or bottom, not \"${String(d.location)}\"`);\n const size = checkPx(d.iconSize, \"legendIcon iconSize\");\n if (size <= 0) throw new TableSpecError(`legendIcon iconSize must be positive, got ${size}`);\n let items: (readonly [LegendIconShape, string, string])[];\n if (d.iconSet !== undefined && d.icons !== undefined)\n throw new TableSpecError(\"legendIcon takes an iconSet or icons, not both\");\n if (d.iconSet !== undefined) {\n const set = Object.hasOwn(LEGEND_ICON_SETS, d.iconSet) ? LEGEND_ICON_SETS[d.iconSet] : undefined;\n if (!set)\n throw new TableSpecError(\n `legendIcon iconSet must be \"ski rating\", \"medals\" or \"batteries\", not \"${d.iconSet}\"`,\n );\n if (d.labels && d.labels.length !== set.length)\n throw new TableSpecError(\n `legendIcon iconSet \"${d.iconSet}\" needs ${set.length} labels, got ${d.labels.length}`,\n );\n items = set.map(([shape, color, label], i) => [shape, color, d.labels?.[i] ?? label]);\n } else {\n if (!d.icons || d.icons.length === 0) throw new TableSpecError(\"legendIcon needs an iconSet or icons\");\n const colors = d.colors && d.colors.length > 0 ? d.colors : [\"currentColor\"];\n if (d.labels && d.labels.length !== d.icons.length)\n throw new TableSpecError(\n `legendIcon needs one label per icon: ${d.icons.length} icons, ${d.labels.length} labels`,\n );\n if (!d.labels && d.showLabels)\n throw new TableSpecError(\"legendIcon icons need labels when showLabels is true\");\n // without labels the icon's accessible name is its shape (\"double diamond\")\n items = d.icons.map((shape, i) => [\n shape,\n colors[i % colors.length] as string,\n d.labels?.[i] ?? shape.replace(/-/g, \" \"),\n ]);\n }\n const icons = items\n .map(([shape, color, label]) =>\n d.showLabels\n ? `<span class=\"sdvt-legend-item\" style=\"display:inline-flex;align-items:center;gap:4px\">${legendIconSvg(shape, color, size)}${escapeHtml(label)}</span>`\n : `<span class=\"sdvt-legend-item\" role=\"img\" aria-label=\"${escapeAttr(label)}\">${legendIconSvg(shape, color, size)}</span>`,\n )\n .join(\"\");\n const justify = d.align === \"left\" ? \"flex-start\" : \"flex-end\";\n return `<div class=\"sdvt-legend sdvt-legend-icon sdvt-legend-${d.location}\" style=\"text-align:${d.align}\">${d.title ? `<div class=\"sdvt-legend-title\" style=\"margin-bottom:8px;font-weight:bold;font-size:90%\">${escapeHtml(d.title)}</div>` : \"\"}<div style=\"display:flex;flex-wrap:wrap;justify-content:${justify};align-items:center;gap:4px 10px;font-size:13px;word-spacing:1px\">${icons}</div>${d.footer ? `<div class=\"sdvt-legend-sub\" style=\"font-size:70%;color:var(--sdvt-muted)\">${escapeHtml(d.footer)}</div>` : \"\"}</div>`;\n}\n","// src/html/social-icons.ts - Font Awesome Free 6 brand/solid icons (https://fontawesome.com, CC BY 4.0; see NOTICE.md).\n// Platform keys and aliases follow Python _SOCIAL (_layout.py:1525-1538); every icon keeps its own viewBox width (not all 512).\n// Paths: faicons 0.2.2 (the Python dependency) for instagram, github, youtube, facebook, globe, envelope; Font Awesome Free 6.7.2 for x-twitter and bluesky,\n// which faicons 0.2.2 predates (Python falls back to the twitter bird for X and raises for bluesky).\nconst X =\n '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"><path d=\"M389.2 48h70.6L305.6 224.2 487 464H345L233.7 318.6 106.5 464H35.8L200.7 275.5 26.8 48H172.4L272.9 180.9 389.2 48zM364.4 421.8h39.1L151.1 88h-42L364.4 421.8z\"/></svg>';\nconst IG =\n '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"><path d=\"M224.1 141c-63.6 0-114.9 51.3-114.9 114.9s51.3 114.9 114.9 114.9S339 319.5 339 255.9 287.7 141 224.1 141zm0 189.6c-41.1 0-74.7-33.5-74.7-74.7s33.5-74.7 74.7-74.7 74.7 33.5 74.7 74.7-33.6 74.7-74.7 74.7zm146.4-194.3c0 14.9-12 26.8-26.8 26.8-14.9 0-26.8-12-26.8-26.8s12-26.8 26.8-26.8 26.8 12 26.8 26.8zm76.1 27.2c-1.7-35.9-9.9-67.7-36.2-93.9-26.2-26.2-58-34.4-93.9-36.2-37-2.1-147.9-2.1-184.9 0-35.8 1.7-67.6 9.9-93.9 36.1s-34.4 58-36.2 93.9c-2.1 37-2.1 147.9 0 184.9 1.7 35.9 9.9 67.7 36.2 93.9s58 34.4 93.9 36.2c37 2.1 147.9 2.1 184.9 0 35.9-1.7 67.7-9.9 93.9-36.2 26.2-26.2 34.4-58 36.2-93.9 2.1-37 2.1-147.8 0-184.8zM398.8 388c-7.8 19.6-22.9 34.7-42.6 42.6-29.5 11.7-99.5 9-132.1 9s-102.7 2.6-132.1-9c-19.6-7.8-34.7-22.9-42.6-42.6-11.7-29.5-9-99.5-9-132.1s-2.6-102.7 9-132.1c7.8-19.6 22.9-34.7 42.6-42.6 29.5-11.7 99.5-9 132.1-9s102.7-2.6 132.1 9c19.6 7.8 34.7 22.9 42.6 42.6 11.7 29.5 9 99.5 9 132.1s2.7 102.7-9 132.1z\"/></svg>';\nconst BSKY =\n '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"><path d=\"M111.8 62.2C170.2 105.9 233 194.7 256 242.4c23-47.6 85.8-136.4 144.2-180.2c42.1-31.6 110.3-56 110.3 21.8c0 15.5-8.9 130.5-14.1 149.2C478.2 298 412 314.6 353.1 304.5c102.9 17.5 129.1 75.5 72.5 133.5c-107.4 110.2-154.3-27.6-166.3-62.9l0 0c-1.7-4.9-2.6-7.8-3.3-7.8s-1.6 3-3.3 7.8l0 0c-12 35.3-59 173.1-166.3 62.9c-56.5-58-30.4-116 72.5-133.5C100 314.6 33.8 298 15.7 233.1C10.4 214.4 1.5 99.4 1.5 83.9c0-77.8 68.2-53.4 110.3-21.8z\"/></svg>';\nconst GH =\n '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 496 512\"><path d=\"M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z\"/></svg>';\nconst YT =\n '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 576 512\"><path d=\"M549.655 124.083c-6.281-23.65-24.787-42.276-48.284-48.597C458.781 64 288 64 288 64S117.22 64 74.629 75.486c-23.497 6.322-42.003 24.947-48.284 48.597-11.412 42.867-11.412 132.305-11.412 132.305s0 89.438 11.412 132.305c6.281 23.65 24.787 41.5 48.284 47.821C117.22 448 288 448 288 448s170.78 0 213.371-11.486c23.497-6.321 42.003-24.171 48.284-47.821 11.412-42.867 11.412-132.305 11.412-132.305s0-89.438-11.412-132.305zm-317.51 213.508V175.185l142.739 81.205-142.739 81.201z\"/></svg>';\nconst FB =\n '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"><path d=\"M504 256C504 119 393 8 256 8S8 119 8 256c0 123.78 90.69 226.38 209.25 245V327.69h-63V256h63v-54.64c0-62.15 37-96.48 93.67-96.48 27.14 0 55.52 4.84 55.52 4.84v61h-31.28c-30.8 0-40.41 19.12-40.41 38.73V256h68.78l-11 71.69h-57.78V501C413.31 482.38 504 379.78 504 256z\"/></svg>';\nconst WEB =\n '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"><path d=\"M352 256c0 22.2-1.2 43.6-3.3 64H163.3c-2.2-20.4-3.3-41.8-3.3-64s1.2-43.6 3.3-64H348.7c2.2 20.4 3.3 41.8 3.3 64zm28.8-64H503.9c5.3 20.5 8.1 41.9 8.1 64s-2.8 43.5-8.1 64H380.8c2.1-20.6 3.2-42 3.2-64s-1.1-43.4-3.2-64zm112.6-32H376.7c-10-63.9-29.8-117.4-55.3-151.6c78.3 20.7 142 77.5 171.9 151.6zm-149.1 0H167.7c6.1-36.4 15.5-68.6 27-94.7c10.5-23.6 22.2-40.7 33.5-51.5C239.4 3.2 248.7 0 256 0s16.6 3.2 27.8 13.8c11.3 10.8 23 27.9 33.5 51.5c11.6 26 21 58.2 27 94.7zm-209 0H18.6C48.6 85.9 112.2 29.1 190.6 8.4C165.1 42.6 145.3 96.1 135.3 160zM8.1 192H131.2c-2.1 20.6-3.2 42-3.2 64s1.1 43.4 3.2 64H8.1C2.8 299.5 0 278.1 0 256s2.8-43.5 8.1-64zM194.7 446.6c-11.6-26-20.9-58.2-27-94.6H344.3c-6.1 36.4-15.5 68.6-27 94.6c-10.5 23.6-22.2 40.7-33.5 51.5C272.6 508.8 263.3 512 256 512s-16.6-3.2-27.8-13.8c-11.3-10.8-23-27.9-33.5-51.5zM135.3 352c10 63.9 29.8 117.4 55.3 151.6C112.2 482.9 48.6 426.1 18.6 352H135.3zm358.1 0c-30 74.1-93.6 130.9-171.9 151.6c25.5-34.2 45.2-87.7 55.3-151.6H493.4z\"/></svg>';\nconst EMAIL =\n '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"><path d=\"M48 64C21.5 64 0 85.5 0 112c0 15.1 7.1 29.3 19.2 38.4L236.8 313.6c11.4 8.5 27 8.5 38.4 0L492.8 150.4c12.1-9.1 19.2-23.3 19.2-38.4c0-26.5-21.5-48-48-48H48zM0 176V384c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V176L294.4 339.2c-22.8 17.1-54 17.1-76.8 0L0 176z\"/></svg>';\nexport const SOCIAL_ICONS: Readonly<Record<string, string>> = {\n x: X,\n twitter: X,\n ig: IG,\n bsky: BSKY,\n gh: GH,\n yt: YT,\n fb: FB,\n web: WEB,\n website: WEB,\n link: WEB,\n email: EMAIL,\n mail: EMAIL,\n};\n","// src/html/decorations.ts — Task 5 version: every hook exists (defaults are no-ops); title, subtitle, sourceNote here; groupBy is read by index.ts.\n// Later tasks only POPULATE hooks; none adds one. Style hooks return bare declarations — index.ts builds the one style=\"\" (styleOf).\nimport { contrast, hex6, mix, onColor, solid } from \"@sportsdataverse/sdvplot\";\nimport { RANK_PALETTE } from \"../define.js\";\nimport { TableSpecError } from \"../errors.js\";\nimport { formatNumber, formatValue, isBlank, naturalDigits, toNumber } from \"../format.js\";\nimport { selectRows } from \"../predicate.js\";\nimport { domainOf, quantile7, ramp, sampleSd } from \"../scale.js\";\nimport type { ColumnSpec, Decoration, RowSelector, TableSpec, TextStyle } from \"../spec.js\";\nimport { secondaryOn } from \"../themes/sdv.js\";\nimport { type GoogleFont, fontStack } from \"../themes/tokens.js\";\nimport { type RenderContext, cellValue, isScaled } from \"./cells.js\";\nimport { checkPx, cssValue, escapeAttr, escapeHtml, isCssValue, styleAttr } from \"./escape.js\";\nimport { legendIconBlock } from \"./legend-icon.js\";\nimport { SOCIAL_ICONS } from \"./social-icons.js\";\nimport { cssStr, cutlineSvg, watermarkSvg } from \"./svg.js\";\nexport interface DecorationOutput<Row> {\n caption: string;\n headRows: string;\n foot: string[];\n before: string;\n after: string;\n css: string[];\n fonts: GoogleFont[];\n hiddenColumns: Set<string>;\n /** raw label text replacing a column's label (marginalia, Task 11) */\n labelText: Map<string, string>;\n /** label HTML from raw text: escapes; wrapLabels (Task 6) wraps first */\n label(col: ColumnSpec<Row>, text: string): string;\n /** raw text appended to a label before label() (scaleNote where \"label\"/\"both\", Task 10) */\n labelSuffix(key: string): string;\n /** `<th>` declarations after the column's own width (marginalia width, Task 11) */\n labelStyle(key: string): string;\n /** \" cls\" list for `<tr class=\"sdvt-row…\">` (groupStripes, cutline — Task 9) */\n rowClass(i: number): string;\n /** `<tr>` declarations (rowAccent, boldRows, spotlight, colorResults — Task 9) */\n rowStyle(i: number): string;\n /** \" cls\" for the group header row of the `groupIndex`-th group (groupStripes, Task 9) */\n groupRowClass(groupIndex: number): string;\n /** `<td>` declarations after the kind's own (spotlight columns — Task 9; outliers, marginalia, tiers — Tasks 11–12) */\n cellStyle(i: number, key: string): string;\n /** HTML appended after the rendered cell (significance stars, outlier symbol — Task 11) */\n cellSuffix(i: number, key: string): string;\n}\n// ---- Task 6: R strwrap via Python textwrap.wrap(width - 1) (_layout.py:1813-1815) and _balanced (:1818-1833)\nfunction strwrap(words: readonly string[], width: number): string[] {\n const w = Math.max(width - 1, 1);\n const out: string[] = [];\n let cur = \"\";\n for (const word of words) {\n if (cur && cur.length + 1 + word.length > w) {\n out.push(cur);\n cur = word;\n } else cur = cur ? `${cur} ${word}` : word;\n }\n return cur ? [...out, cur] : out;\n}\nexport function wrapLabel(text: string, width: number, balance: boolean): string[] {\n const words = text.split(/\\s+/).filter((x) => x !== \"\");\n if (words.length <= 1) return [text];\n const greedy = strwrap(words, width);\n if (greedy.length <= 1) return [text];\n if (!balance) return greedy;\n const target = Math.ceil(words.reduce((s, x) => s + x.length + 1, 0) / greedy.length);\n const lines: string[] = [];\n let cur = \"\";\n for (const word of words) {\n const cand = cur ? `${cur} ${word}` : word;\n if (cand.length > target && cur) {\n lines.push(cur);\n cur = word;\n } else cur = cand;\n }\n return cur ? [...lines, cur] : lines;\n}\n\n// ---- Task 9\nexport function groupIndexOf<Row>(rows: readonly Row[], key: string): number[] {\n const seen = new Map<unknown, number>();\n return rows.map((r) => {\n const g = cellValue(r, key);\n if (!seen.has(g)) seen.set(g, seen.size);\n return seen.get(g) as number;\n });\n}\nconst isList = (p: unknown): p is readonly string[] => Array.isArray(p);\n\n// ---- Task 10\nexport function textStyleAttr(ts: TextStyle | undefined): string {\n if (!ts) return \"\";\n const s = styleAttr({\n color: ts.color,\n \"font-size\": ts.size,\n \"font-weight\": ts.weight,\n \"font-family\": ts.font ? fontStack(checkFamily(ts.font)) : undefined,\n \"text-transform\": ts.transform === \"uppercase\" ? \"uppercase\" : undefined,\n \"font-style\": ts.style === \"italic\" ? \"italic\" : undefined,\n });\n return s ? ` style=\"${s}\"` : \"\";\n}\n/** A family name lands inside `'…'` in CSS: letters, digits, spaces, `.`, `-`, `_` only. */\nfunction checkFamily(f: string): string {\n if (!/^[\\w .-]+$/.test(f))\n throw new TableSpecError(`font family \"${f}\" may only hold letters, digits, spaces, \".\" \"-\" \"_\"`);\n return f;\n}\nconst checkLocation = (l: string, arg: string): \"top\" | \"bottom\" => {\n if (l !== \"top\" && l !== \"bottom\")\n throw new TableSpecError(`${arg} location must be top or bottom, not ${JSON.stringify(l)}`);\n return l;\n};\nconst ALIGN = new Set([\"left\", \"center\", \"right\"]);\nconst checkAlign = (a: string, arg: string): string => {\n if (!ALIGN.has(a)) throw new TableSpecError(`${arg} must be left, center or right, not \"${a}\"`);\n return a;\n};\n/** Python _SCALE_NAMES (_layout.py:1442-1447): only these four divisors have names. */\nconst SCALE_NAMES: Readonly<Record<number, readonly [string, string]>> = {\n 1e3: [\"thousands\", \"(000s)\"],\n 1e6: [\"millions\", \"(millions)\"],\n 1e9: [\"billions\", \"(billions)\"],\n 1e12: [\"trillions\", \"(trillions)\"],\n};\n\n/** gt_scale_note (_layout.py:1495-1515): a scaleNote's checked note and label suffix (shared with sdvtables/mui). */\nexport function scaleNoteOf<Row>(d: Extract<Decoration<Row>, { type: \"scaleNote\" }>): {\n note: string;\n suffix: string;\n} {\n if (!(Number.isFinite(d.divisor) && d.divisor !== 0))\n throw new TableSpecError(`scaleNote divisor must be a single non-zero number, got ${d.divisor}`);\n if (d.columns.length === 0) throw new TableSpecError(\"scaleNote columns matched no columns\");\n const named = SCALE_NAMES[d.divisor];\n const shown = Number.isInteger(d.divisor)\n ? formatNumber(d.divisor, { digits: 0, big: true })\n : naturalDigits(d.divisor, true);\n return {\n note: d.note ?? (named ? `Figures in ${named[0]}.` : `Figures divided by ${shown}.`),\n suffix: d.labelSuffix ?? (named ? named[1] : `(÷${shown})`),\n };\n}\n\nexport function applyDecorations<Row>(\n spec: TableSpec<Row>,\n rows: readonly Row[],\n ctx: RenderContext<Row>,\n): DecorationOutput<Row> {\n const none = (): string => \"\";\n const out: DecorationOutput<Row> = {\n caption: \"\",\n headRows: \"\",\n foot: [],\n before: \"\",\n after: \"\",\n css: [],\n fonts: [],\n hiddenColumns: new Set(),\n labelText: new Map(),\n label: (_c, t) => escapeHtml(t),\n labelSuffix: none,\n labelStyle: none,\n rowClass: none,\n rowStyle: none,\n groupRowClass: none,\n cellStyle: none,\n cellSuffix: none,\n };\n const title = spec.decorations.find(\n (d): d is Extract<Decoration<Row>, { type: \"title\" }> => d.type === \"title\",\n );\n const subtitle = spec.decorations.find(\n (d): d is Extract<Decoration<Row>, { type: \"subtitle\" }> => d.type === \"subtitle\",\n );\n if (title || subtitle)\n out.caption = `${title ? `<span class=\"sdvt-title\">${escapeHtml(title.text)}</span>` : \"\"}${subtitle ? `<span class=\"sdvt-subtitle\">${escapeHtml(subtitle.text)}</span>` : \"\"}`;\n // Task 9: the per-row / per-cell maps every row and cell decoration writes into (later tasks reuse them)\n const rowStyles = new Map<number, Record<string, string>>();\n const rowClasses = new Map<number, string[]>();\n const cellStyles = new Map<string, Record<string, string | undefined>>(); // key `${i}:${col}`\n const addRow = (i: number, decl: Record<string, string>): void => {\n rowStyles.set(i, { ...rowStyles.get(i), ...decl });\n };\n const addClass = (i: number, c: string): void => {\n rowClasses.set(i, [...(rowClasses.get(i) ?? []), c]);\n };\n const addCell = (i: number, key: string, decl: Record<string, string | undefined>): void => {\n cellStyles.set(`${i}:${key}`, { ...cellStyles.get(`${i}:${key}`), ...decl });\n };\n // Fills go on every <td> (Python applies them as !important cell styles, _cells.py:221): a <tr> background is hidden by the stripe and theme band rules on td\n const fillCells = (i: number, decl: Record<string, string | undefined>): void => {\n for (const c of ctx.columns) addCell(i, c.key, decl);\n };\n const suffixes = new Map<string, string>(); // Task 11, key `${i}:${col}`\n const labelStyles = new Map<string, string>(); // Task 11\n let recordedKey: Readonly<Record<string, string>> | undefined; // tiers sets it for legendDiscrete(\"recorded\")\n let cutCount = 0; // one id per .cutline() call so two calls never share a class\n const bg = ctx.theme.tokens.bg === \"transparent\" ? \"#ffffff\" : hex6(ctx.theme.tokens.bg);\n // \"matched no rows\" asks the source rows (A49): a page or filter that hides the picked rows still dims / skips the rest\n const matchesNone = (sel: RowSelector<Row>): boolean => selectRows(sel, ctx.domainRows).length === 0;\n // colorResults is a column kind (spec §6.1) whose effect is a row fill: gt_color_results (_cells.py:203-222), exact W/L or 1/0\n for (const c of spec.columns)\n if (c.kind === \"colorResults\") {\n const [win, loss]: readonly [unknown, unknown] = c.resultType === \"binary\" ? [1, 0] : [\"W\", \"L\"];\n const eq = (v: unknown, want: unknown): boolean =>\n v === want || (typeof v === \"boolean\" && Number(v) === want);\n rows.forEach((r, i) => {\n const v = cellValue(r, c.key);\n if (isBlank(v)) return;\n if (eq(v, win)) fillCells(i, { \"background-color\": c.winColor, color: c.winTextColor });\n else if (eq(v, loss)) fillCells(i, { \"background-color\": c.lossColor, color: c.lossTextColor });\n else if (c.tieColor !== undefined && eq(v, c.tieValue))\n fillCells(i, { \"background-color\": c.tieColor, color: c.tieTextColor });\n });\n }\n for (const d of spec.decorations)\n switch (d.type) {\n case \"sourceNote\":\n out.foot.push(d.unsafe ? d.html : escapeHtml(d.html));\n break;\n case \"wrapLabels\": {\n const prev = out.label;\n out.label = (col, text) =>\n !d.columns || d.columns.includes(col.key)\n ? wrapLabel(text, d.width, d.balance).map(escapeHtml).join(\"<br>\")\n : prev(col, text);\n break;\n }\n // ---- Task 9\n case \"groupStripes\": {\n if (!ctx.groupKey) throw new TableSpecError(\"groupStripes needs .groupBy(key)\");\n const on = (gi: number): boolean => gi % 2 === (d.start === 2 ? 1 : 0);\n groupIndexOf(rows, ctx.groupKey).forEach((g, i) => {\n if (on(g)) addClass(i, \"sdvt-gstripe\");\n });\n // Python gt_group_stripes (_cells.py:421-424, 458-463) styles body (+stub) rows only: \"Group heading rows are left alone\" - the brief striped the header too; Python wins\n out.css.push(\n `${ctx.sel} tr.sdvt-gstripe td{background-color:${cssValue(d.color, \"groupStripes color\")}}`,\n );\n break;\n }\n case \"rowAccent\": {\n // gt_row_accent (_layout.py:1123-1156): no palette = the column holds the colors; a list maps sorted levels, recycled\n if (d.side !== \"left\" && d.side !== \"right\")\n throw new TableSpecError(`rowAccent side must be left or right, not ${JSON.stringify(d.side)}`);\n const keyOf = (r: Row): string | null => {\n const v = cellValue(r, d.key);\n return isBlank(v) ? null : String(v);\n };\n const keys = rows.map(keyOf);\n // A49: levels from the source rows, so a row keeps its accent colour under paging, filtering and brushing\n const levels = [...new Set(ctx.domainRows.map(keyOf).filter((k): k is string => k !== null))].sort();\n const pal = d.palette;\n const colors = keys.map((k) =>\n k === null\n ? undefined\n : pal === undefined\n ? k\n : isList(pal)\n ? pal[levels.indexOf(k) % pal.length]\n : Object.hasOwn(pal, k)\n ? pal[k]\n : undefined,\n );\n const keep = d.rows ? new Set(selectRows(d.rows, rows, ctx.domainRows)) : null;\n if (d.rows && keep?.size === 0 && matchesNone(d.rows)) {\n ctx.warn(`sdvtables:rowAccent:${ctx.id}`, \"rows matched no rows; the table is unchanged\");\n break;\n }\n const unsafe = new Set<string>();\n colors.forEach((c, i) => {\n const fill = c ?? d.naColor;\n if (fill === \"transparent\" || (keep && !keep.has(i))) return;\n // a color read from the DATA (no palette) never throws: warn once per call and skip that row's accent\n if (pal === undefined && c !== undefined && !isCssValue(c)) unsafe.add(c);\n else addRow(i, { [`border-${d.side}`]: `${d.width}px solid ${fill}` });\n });\n if (unsafe.size > 0)\n ctx.warn(\n `sdvtables:rowAccent:${ctx.id}:css:${[...unsafe].join(\",\")}`,\n `${[...unsafe].map((c) => JSON.stringify(c)).join(\", \")} in \"${d.key}\" cannot be a CSS color, so ${unsafe.size === 1 ? \"that row gets\" : \"those rows get\"} no accent`,\n );\n if (d.hide) out.hiddenColumns.add(d.key);\n break;\n }\n case \"boldRows\":\n for (const i of selectRows(d.rows, rows, ctx.domainRows)) {\n addRow(i, { \"font-weight\": \"bold\" });\n fillCells(i, {\n color: d.textColor,\n ...(d.highlightColor ? { \"background-color\": d.highlightColor } : {}),\n });\n }\n break;\n case \"spotlight\": {\n // gt_spotlight (_layout.py:1036-1074): no rows → unchanged + warning; `columns` narrows the lit cells, the rest of a lit row dims\n const lit = new Set(selectRows(d.rows, rows, ctx.domainRows));\n if (lit.size === 0 && matchesNone(d.rows)) {\n ctx.warn(`sdvtables:spotlight:${ctx.id}`, \"rows matched no rows, so the table is unchanged\");\n break;\n }\n const dim = d.dimColor === \"auto\" ? secondaryOn(bg, onColor(bg)) : d.dimColor;\n const fill: Record<string, string> = {\n ...(d.fill ? { \"background-color\": d.fill } : {}),\n ...(d.textColor ? { color: d.textColor } : {}),\n };\n const look: Record<string, string> = { ...fill, ...(d.bold ? { \"font-weight\": \"bold\" } : {}) };\n rows.forEach((_, i) => {\n if (!lit.has(i)) {\n if (dim) addRow(i, { color: dim });\n return;\n }\n if (d.accentColor) addRow(i, { \"box-shadow\": `inset ${d.accentWidth}px 0 0 ${d.accentColor}` });\n if (!d.columns) {\n fillCells(i, fill);\n if (d.bold) addRow(i, { \"font-weight\": \"bold\" });\n return;\n }\n for (const c of ctx.columns)\n if ((d.columns as readonly string[]).includes(c.key)) addCell(i, c.key, look);\n else if (dim) addCell(i, c.key, { color: dim });\n });\n break;\n }\n case \"cutline\": {\n // gt_cutline (_cells.py:880-950): `after` rows above the line → the rule is the TOP border of 0-based row `after`\n if (!d.after.every((a) => Number.isInteger(a)))\n throw new TableSpecError(`cutline after must be whole row numbers, got ${d.after.join(\", \")}`);\n if (d.gap.length < 1 || d.gap.length > 2 || d.gap.some((g) => !(g >= 0)))\n throw new TableSpecError(\"cutline gap must be one or two non-negative numbers\");\n const n = rows.length;\n const dropped = d.after.filter((a) => a < 0 || a >= n);\n if (dropped.length > 0)\n ctx.warn(\n `sdvtables:cutline:${ctx.id}:${dropped.join(\",\")}`,\n `dropped ${dropped.length} cut line(s) at ${dropped.join(\", \")}: after must be between 0 and ${n - 1}; a line after the last row is just the table border`,\n );\n const color = cssValue(d.color, \"cutline color\");\n const style = cssValue(d.style, \"cutline style\");\n const weight = checkPx(d.weight, \"cutline weight\");\n const labelSize = checkPx(d.labelSize, \"cutline labelSize\");\n const cn = cutCount++;\n const above = d.gap[0] ?? 0;\n const below = d.gap[d.gap.length - 1] ?? 0;\n d.after.forEach((a, j) => {\n if (a < 0 || a >= n) return;\n const label = d.label && d.label.length > 0 ? (d.label[j % d.label.length] ?? null) : null;\n const top = d.labelPosition === \"below\" || a === 0;\n const labelRow = top ? a : a - 1;\n addClass(a, `sdvt-cut-${cn}-${j}`);\n out.css.push(`${ctx.sel} tr.sdvt-cut-${cn}-${j} td{border-top:${weight}px ${style} ${color}}`);\n if (above > 0 && a > 0 && !(label && labelRow === a - 1)) {\n addClass(a - 1, `sdvt-cut-${cn}-${j}-above`);\n out.css.push(`${ctx.sel} tr.sdvt-cut-${cn}-${j}-above td{padding-bottom:${above}px}`);\n }\n if (below > 0 && !(label && labelRow === a))\n out.css.push(`${ctx.sel} tr.sdvt-cut-${cn}-${j} td{padding-top:${below}px}`);\n if (label) {\n addClass(labelRow, `sdvt-cut-${cn}-${j}-label`);\n out.css.push(\n `${ctx.sel} tr.sdvt-cut-${cn}-${j}-label td{padding-${top ? \"top\" : \"bottom\"}:${labelSize + 13 + (top ? below : above)}px;background-color:transparent}`,\n `${ctx.sel} tr.sdvt-cut-${cn}-${j}-label{background-image:url(\"${cutlineSvg(label, d.labelColor ?? color, labelSize)}\");background-repeat:no-repeat;background-position:${top ? \"left 5px\" : \"left bottom 5px\"}}`,\n );\n }\n });\n break;\n }\n case \"borderGrid\": {\n // _cells.py:793-803\n const color = cssValue(d.color, \"borderGrid color\");\n const b = `border-right:${checkPx(d.weight, \"borderGrid weight\")}px solid ${color}`;\n out.css.push(\n `${ctx.sel} td.sdvt-cell:not(:last-child){${b}}`,\n `${ctx.sel} td.sdvt-cell{border-top-color:${color}}`,\n );\n if (d.includeLabels) out.css.push(`${ctx.sel} th.sdvt-label:not(:last-child){${b}}`);\n break;\n }\n // ---- Task 10\n case \"titleHeader\": {\n // gt_title_header (_layout.py:121-215): kicker / title / subtitle / date, each with its own style; Python's kicker and date defaults live in the rules below\n for (const ts of [d.kickerStyle, d.titleStyle, d.subtitleStyle, d.dateStyle])\n if (ts?.font)\n out.fonts.push({\n family: checkFamily(ts.font),\n weights: [typeof ts.weight === \"number\" ? ts.weight : 400],\n });\n out.css.push(\n `${ctx.sel} .sdvt-kicker{font-size:0.75em;font-weight:700;color:#C84630;text-transform:uppercase;letter-spacing:0.08em;margin-bottom:0.15em}`,\n `${ctx.sel} .sdvt-date{font-size:0.85em;font-weight:400;color:#8A8A8A;margin-top:0.15em}`,\n );\n out.caption = `${d.kicker ? `<div class=\"sdvt-kicker\"${textStyleAttr(d.kickerStyle)}>${escapeHtml(d.kicker)}</div>` : \"\"}<span class=\"sdvt-title\"${textStyleAttr(d.titleStyle)}>${escapeHtml(d.title)}</span>${d.subtitle ? `<span class=\"sdvt-subtitle\"${textStyleAttr(d.subtitleStyle)}>${escapeHtml(d.subtitle)}</span>` : \"\"}${d.date ? `<div class=\"sdvt-date\"${textStyleAttr(d.dateStyle)}>${escapeHtml(d.date)}</div>` : \"\"}`;\n break;\n }\n case \"caption538\": {\n // gt_538_caption (_cells.py:482-535): the TOP note carries the rule + size, the BOTTOM note the alignment\n const align = checkAlign(d.align, \"caption538 align\");\n if (!d.top && !d.bottom)\n throw new TableSpecError(\"caption538: nothing to caption; pass top, bottom, or both\");\n const rule = d.ruleColor ?? ctx.theme.tokens.text;\n if (d.top)\n out.foot.push(\n `<div class=\"sdvt-cap538\" style=\"${styleAttr({ \"border-bottom\": `${d.ruleWidth}px solid ${rule}`, \"font-size\": `${d.size}px` })}\">${escapeHtml(d.top)}</div>`,\n );\n if (d.bottom)\n out.foot.push(\n `<div class=\"sdvt-cap538\" style=\"${styleAttr({ \"text-align\": align })}\">${escapeHtml(d.bottom)}</div>`,\n );\n break;\n }\n case \"socialTag\": {\n // gt_social_tag (_layout.py:1553-1620): handles behind icons; a caption is a gt_538_caption TOP note (rule + size), the handle line the bottom\n const align = checkAlign(d.align, \"socialTag align\");\n const entries = Object.entries(d.accounts);\n if (entries.length === 0)\n throw new TableSpecError(\"socialTag accounts must be a non-empty {platform: handle} object\");\n const parts = entries.map(([k, handle]) => {\n const svg = SOCIAL_ICONS[k.toLowerCase()];\n if (!svg)\n throw new TableSpecError(\n `socialTag: unknown platform \"${k}\"; one of ${Object.keys(SOCIAL_ICONS).join(\", \")}`,\n );\n return `<span class=\"sdvt-handle\">${svg.replace(\"<svg \", `<svg style=\"${styleAttr({ height: d.iconHeight, \"vertical-align\": \"-0.125em\", fill: d.iconColor ?? \"currentColor\" })}\" `)}${escapeHtml(handle)}</span>`;\n });\n out.css.push(\n `${ctx.sel} .sdvt-handle{display:inline-flex;align-items:center;gap:0.3em;white-space:nowrap}`,\n );\n if (d.caption)\n out.foot.push(\n `<div class=\"sdvt-cap538\" style=\"${styleAttr({ \"border-bottom\": `1px solid ${ctx.theme.tokens.text}`, \"font-size\": \"12px\" })}\">${escapeHtml(d.caption)}</div>`,\n );\n out.foot.push(\n `<div class=\"sdvt-social\" style=\"text-align:${align}\">${parts.join(d.stack ? \"<br>\" : escapeHtml(d.separator))}</div>`,\n );\n break;\n }\n case \"scaleNote\": {\n const { note, suffix } = scaleNoteOf(d);\n for (const k of d.columns) ctx.scaled.set(k, { divisor: d.divisor, decimals: d.decimals });\n if (d.where !== \"label\") out.foot.push(escapeHtml(note));\n if (d.where !== \"sourceNote\") {\n const prev = out.labelSuffix;\n out.labelSuffix = (key) =>\n (d.columns as readonly string[]).includes(key) ? ` ${suffix}` : prev(key);\n }\n break;\n }\n case \"borderBars\": {\n // _bars (_cells.py:560-594): no text/img = one full-width bar per color; either = ONE flex bar in the first color holding the text and image (Python)\n if (d.side !== \"top\" && d.side !== \"bottom\")\n throw new TableSpecError(`borderBars side must be top or bottom, not ${JSON.stringify(d.side)}`);\n checkAlign(d.barAlign, \"borderBars barAlign\");\n const barWidth = escapeAttr(cssValue(d.barWidth, \"borderBars barWidth\"));\n const colors = d.colors.map((c) => escapeAttr(cssValue(c, \"borderBars colors\")));\n if (d.imgAlign !== \"left\" && d.imgAlign !== \"right\")\n throw new TableSpecError(\n `borderBars imgAlign must be left or right, not ${JSON.stringify(d.imgAlign)}`,\n );\n const barHeight = Number(d.barHeight);\n if (!Number.isFinite(barHeight))\n throw new TableSpecError(\n `borderBars barHeight must be a number, got ${JSON.stringify(d.barHeight)}`,\n );\n if (d.textAlign !== \"left\" && d.textAlign !== \"right\")\n throw new TableSpecError(`borderBars textAlign must be left or right, not \"${d.textAlign}\"`);\n const margin = {\n left: \"margin-left:0;margin-right:auto\",\n center: \"margin-left:auto;margin-right:auto\",\n right: \"margin-left:auto;margin-right:0\",\n }[d.barAlign as \"left\" | \"center\" | \"right\"];\n let block: string;\n if (!d.text && !d.img) {\n const bars = colors\n .map((c) => `<div class=\"sdvt-bar\" style=\"height:${barHeight}px;background-color:${c}\"></div>`)\n .join(\"\");\n block = `<div class=\"sdvt-bars-box\" style=\"background-color:transparent;width:${barWidth};${margin}\">${bars}</div>`;\n } else {\n const text = d.text\n ? `<span class=\"sdvt-bars-text\" style=\"${styleAttr({ \"font-weight\": d.textWeight, color: d.textColor, \"font-size\": `${d.textSize}px`, [`padding-${d.textAlign}`]: `${d.textPadding}px`, \"font-family\": \"inherit\" })}\">${escapeHtml(d.text)}</span>`\n : \"<span></span>\";\n const img = d.img\n ? `<img class=\"sdvt-bars-img\" src=\"${escapeAttr(d.img)}\" alt=\"\" style=\"${styleAttr({ width: `${d.imgWidth}px`, height: `${d.imgHeight}px`, [`padding-${d.imgAlign}`]: `${d.imgPadding}px` })}\">`\n : \"\";\n block = `<div class=\"sdvt-bars-row\" style=\"display:flex;justify-content:space-between;align-items:center;height:${barHeight}px;background-color:${colors[0] ?? \"#000\"};width:${barWidth};${margin}\">${text}${img}</div>`;\n }\n const wrapped = `<div class=\"sdvt-bars sdvt-bars-${d.side}\">${block}</div>`;\n if (d.side === \"top\") out.before += wrapped;\n else out.after += wrapped;\n break;\n }\n case \"watermark\": {\n // gt_watermark (_layout.py:271-340); Python reads a local image into a base64 URI, here `image` is a URL used as is\n if (!d.text === !d.image) throw new TableSpecError(\"watermark: supply exactly one of text or image\");\n let url: string;\n let tall = false;\n let extra = \"\";\n const opacity = checkPx(d.opacity, \"watermark opacity\");\n if (d.image) {\n url = cssStr(d.image);\n extra = `;opacity:${opacity}`;\n } else [url, tall] = watermarkSvg(d.text ?? \"\", d.color, opacity, d.angle, d.font);\n const size = cssValue(d.size, \"watermark size\");\n out.css.push(\n `${ctx.sel} tbody{background-image:url(\"${url}\");background-repeat:no-repeat;background-position:${cssValue(d.position, \"watermark position\")};background-size:${tall ? `auto ${size}` : `${size} auto`}${extra}}`,\n );\n break;\n }\n case \"font\": {\n const stack = fontStack(checkFamily(d.family));\n if (d.google)\n out.fonts.push({ family: d.family, weights: [typeof d.weight === \"number\" ? d.weight : 400] });\n out.css.push(\n `${ctx.sel}{--sdvt-font-body:${stack};--sdvt-font-label:${stack};--sdvt-font-title:${stack}${d.weight ? `;--sdvt-body-weight:${cssValue(d.weight, \"font weight\")}` : \"\"}${d.style ? `;font-style:${cssValue(d.style, \"font style\")}` : \"\"}}`,\n );\n break;\n }\n // ---- Task 11\n case \"legendContinuous\": {\n // gt_legend_continuous (_layout.py:395-470), type \"steps\": nBins swatches sampled at bin midpoints (k + 0.5) / nBins (:471)\n const rec = ctx.recorded;\n const palette = (d.palette ?? rec?.palette ?? RANK_PALETTE).map((c) => hex6(c));\n let domain = d.domain ?? rec?.domain;\n if (!domain && d.columns && ctx.domainRows.length > 0)\n domain = domainOf(d.columns.map((k) => ctx.domainRows.map((r) => toNumber(cellValue(r, k)))));\n // J31 (A4): the domain comes from domainRows like the cell scales, so a paged or brushed legend holds still.\n // No domain rows: a data-derived domain does not exist yet (an empty page, fontsLinkFor), so no legend; a spec with no source still throws\n if (!domain && ctx.domainRows.length === 0 && (d.columns || ctx.columns.some(isScaled))) break;\n if (!domain)\n throw new TableSpecError(\n \"legendContinuous: no recorded scale (color a column with colorPills/colorRanks/percentileBar first) and no domain or columns given\",\n );\n if (d.nBins < 1) throw new TableSpecError(\"legendContinuous nBins must be at least 1\");\n const loc = checkLocation(d.location, \"legendContinuous\");\n const swW = checkPx(d.swatchWidth, \"legendContinuous swatchWidth\");\n const swH = checkPx(d.swatchHeight, \"legendContinuous swatchHeight\");\n const rev = d.reverse ?? rec?.reverse ?? false;\n const r = ramp(rev ? [...palette].reverse() : palette, domain);\n const [lo, hi] = domain;\n const sw = Array.from(\n { length: d.nBins },\n (_, b) =>\n `<span class=\"sdvt-swatch\" style=\"display:inline-block;width:${swW}px;height:${swH}px;background-color:${r(lo + ((b + 0.5) / d.nBins) * (hi - lo)) ?? \"#808080\"}\"></span>`,\n );\n const labels = d.labels ?? [lo, hi].map((v) => formatValue(v, d.digits, \"comma\", \"\"));\n const block = `<div class=\"sdvt-legend sdvt-legend-${loc}\" style=\"display:flex;flex-direction:${d.titlePosition === \"left\" ? \"row\" : \"column\"};align-items:center;gap:6px;justify-content:center\">${d.title ? `<div class=\"sdvt-legend-title\">${escapeHtml(d.title)}</div>` : \"\"}<div class=\"sdvt-legend-bar\" style=\"display:flex;align-items:center;gap:4px\"><span class=\"sdvt-legend-lab\">${escapeHtml(labels[0] ?? \"\")}</span>${sw.join(\"\")}<span class=\"sdvt-legend-lab\">${escapeHtml(labels[labels.length - 1] ?? \"\")}</span></div></div>`;\n if (loc === \"top\") out.before += block;\n else out.after += block;\n break;\n }\n case \"legendDiscrete\": {\n const key = d.key === \"recorded\" ? recordedKey : d.key;\n if (!key)\n throw new TableSpecError(\n 'legendDiscrete(\"recorded\") needs a .tiers() decoration before it (no recorded key)',\n );\n const loc = checkLocation(d.location, \"legendDiscrete\");\n const size = checkPx(d.swatchSize, \"legendDiscrete swatchSize\");\n const gap = checkPx(d.gap, \"legendDiscrete gap\");\n const items = Object.entries(key).map(\n ([label, color]) =>\n `<span class=\"sdvt-key-item\" style=\"display:inline-flex;align-items:center;gap:6px\"><span class=\"sdvt-swatch\" style=\"${styleAttr({ display: \"inline-block\", width: `${size}px`, height: `${size}px`, \"background-color\": color, border: d.border ? `1px solid ${d.borderColor ?? \"currentColor\"}` : undefined, \"border-radius\": d.shape === \"circle\" ? \"50%\" : undefined })}\"></span>${escapeHtml(label)}</span>`,\n );\n const align = checkAlign(d.align, \"legendDiscrete align\") as \"left\" | \"center\" | \"right\";\n const block = `<div class=\"sdvt-legend sdvt-legend-${loc}\" style=\"display:flex;flex-direction:column;align-items:${{ left: \"flex-start\", center: \"center\", right: \"flex-end\" }[align]};gap:4px\">${d.heading ? `<div class=\"sdvt-legend-title\">${escapeHtml(d.heading)}</div>` : \"\"}${d.subtitle ? `<div class=\"sdvt-legend-sub\">${escapeHtml(d.subtitle)}</div>` : \"\"}<div style=\"display:flex;flex-direction:${d.direction === \"vertical\" ? \"column\" : \"row\"};flex-wrap:wrap;gap:${gap}px\">${items.join(\"\")}</div></div>`;\n if (loc === \"top\") out.before += block;\n else out.after += block;\n break;\n }\n case \"legendIcon\": {\n // reactablefmtr add_icon_legend: appended after the table by default\n const block = legendIconBlock(d);\n if (d.location === \"top\") out.before += block;\n else out.after += block;\n break;\n }\n case \"significance\": {\n // gt_significance (_layout.py:1342-1369): levels ascending (strictest first), the first level p is below wins; p columns hidden\n if (d.levels.length !== d.symbols.length)\n throw new TableSpecError(\"significance levels and symbols must be the same length\");\n if (d.levels.some((x, j) => j > 0 && x < (d.levels[j - 1] ?? x)))\n throw new TableSpecError(\"significance levels must be in ascending order, strictest first\");\n for (const pair of d.pairs) {\n rows.forEach((r, i) => {\n const p = toNumber(cellValue(r, pair.p));\n if (p === null) return;\n const s = d.symbols[d.levels.findIndex((x) => p < x)];\n if (s) {\n const k = `${i}:${pair.estimate}`;\n suffixes.set(\n k,\n `${suffixes.get(k) ?? \"\"}${d.superscript ? `<sup style=\"font-size:0.7em\">${escapeHtml(s)}</sup>` : escapeHtml(s)}`,\n );\n }\n });\n if (d.hideP) out.hiddenColumns.add(pair.p);\n }\n if (d.note)\n out.foot.push(\n escapeHtml(d.levels.map((x, j) => `${d.symbols[j] ?? \"\"} p < ${naturalDigits(x)}`).join(\", \")),\n );\n break;\n }\n case \"outliers\": {\n // gt_outliers (_layout.py:1240-1290); limits = _limits (:1165-1180): fewer than 2 values or zero spread flags nothing\n if (d.method === \"bounds\" && !d.bounds)\n throw new TableSpecError(\"outliers bounds must be [lower, upper] when method is 'bounds'\");\n const t = d.threshold ?? (d.method === \"sd\" ? 3 : 1.5);\n const shown = d.fill === undefined ? null : solid(d.fill, bg);\n const ink =\n d.color ?? (shown === null || contrast(\"#B3261E\", shown) >= 4.5 ? \"#B3261E\" : onColor(shown));\n let flagged = false;\n for (const k of d.columns) {\n const xs = rows.map((r) => toNumber(cellValue(r, k)));\n // A49: the limits come from the source rows, so a page or filter never flags a value the whole column does not\n const nums = ctx.domainRows\n .map((r) => toNumber(cellValue(r, k)))\n .filter((v): v is number => v !== null);\n let lo = Number.NEGATIVE_INFINITY;\n let hi = Number.POSITIVE_INFINITY;\n if (d.method === \"bounds\") {\n lo = d.bounds?.[0] ?? lo;\n hi = d.bounds?.[1] ?? hi;\n } else if (nums.length >= 2 && d.method === \"sd\") {\n const m = nums.reduce((a, b) => a + b, 0) / nums.length;\n const s = sampleSd(nums);\n if (s !== 0) {\n lo = m - t * s;\n hi = m + t * s;\n }\n } else if (nums.length >= 2) {\n const q1 = quantile7(nums, 0.25);\n const q3 = quantile7(nums, 0.75);\n if (q3 !== q1) {\n lo = q1 - t * (q3 - q1);\n hi = q3 + t * (q3 - q1);\n }\n }\n xs.forEach((v, i) => {\n if (v === null || !((v < lo && d.side !== \"high\") || (v > hi && d.side !== \"low\"))) return;\n flagged = true;\n addCell(i, k, {\n color: ink,\n \"font-weight\": d.bold ? \"bold\" : undefined,\n \"background-color\": d.fill,\n });\n if (d.symbol)\n suffixes.set(`${i}:${k}`, `${suffixes.get(`${i}:${k}`) ?? \"\"}${escapeHtml(d.symbol)}`);\n });\n }\n if (flagged && d.note) {\n const tail = { both: \"\", high: \" (high side only)\", low: \" (low side only)\" }[d.side];\n out.foot.push(\n escapeHtml(\n typeof d.note === \"string\"\n ? d.note\n : d.method === \"sd\"\n ? `Marked values fall more than ${naturalDigits(t)} standard deviation${t === 1 ? \"\" : \"s\"} from the column mean${tail}.`\n : d.method === \"iqr\"\n ? `Marked values fall outside ${naturalDigits(t)} × IQR of the column quartiles${tail}.`\n : `Marked values fall outside ${d.bounds?.[0] ?? \"NA\"}–${d.bounds?.[1] ?? \"NA\"}${tail}.`,\n ),\n );\n }\n break;\n }\n case \"marginalia\": {\n // gt_marginalia (_layout.py:1420-1434): muted ink = secondaryOn(bg, onColor(bg)); hairline = mix(bg, ink, 0.18)\n const ink = onColor(bg);\n const color = d.color ?? secondaryOn(bg, ink);\n const rule = d.ruleColor ?? mix(bg, ink, 0.18);\n const align = checkAlign(d.align, \"marginalia align\");\n for (const k of d.columns) {\n out.labelText.set(k, d.label);\n if (d.width !== undefined)\n labelStyles.set(\n k,\n `width:${typeof d.width === \"number\" ? `${d.width}px` : escapeAttr(cssValue(d.width, \"marginalia width\"))}`,\n );\n rows.forEach((_, i) =>\n addCell(i, k, {\n \"font-style\": d.italic ? \"italic\" : \"normal\",\n \"font-size\": d.size,\n color,\n \"border-left\": d.rule ? `1px solid ${rule}` : undefined,\n \"text-align\": align,\n }),\n );\n }\n break;\n }\n case \"tiers\": {\n // gt_tiers (_layout.py:870-913): colors required; each level's tier cells filled, bold readable ink; recorded for legendDiscrete(\"recorded\")\n if (!d.colors)\n throw new TableSpecError(\"tiers colors is missing; pass levels and colors as two lists\");\n if (d.colors.length !== d.levels.length)\n throw new TableSpecError(\n `tiers levels and colors must be the same length: got ${d.levels.length} levels and ${d.colors.length} colors`,\n );\n const fills = d.colors.map((c) => hex6(c));\n const tierOf = (r: Row): string | null => {\n const v = cellValue(r, d.tierKey);\n return isBlank(v) ? null : String(v);\n };\n // A49: the levels the SOURCE rows hold, so a page or filter without a level warns nothing\n const held = [...new Set(ctx.domainRows.map(tierOf).filter((t): t is string => t !== null))];\n const missing = d.levels.filter((l) => !held.includes(l));\n if (missing.length > 0)\n ctx.warn(\n `sdvtables:tiers:${ctx.id}`,\n `tier(s) ${missing.join(\", \")} are not in \"${d.tierKey}\", so they get no rows; it holds ${held.join(\", \")}`,\n );\n rows.forEach((r, i) => {\n const t = tierOf(r);\n const f = t === null ? undefined : fills[d.levels.indexOf(t)];\n if (f) addCell(i, d.tierKey, { \"background-color\": f, color: onColor(f), \"font-weight\": \"bold\" });\n });\n recordedKey = Object.fromEntries(d.levels.map((l, j) => [l, fills[j] ?? \"\"]));\n break;\n }\n default:\n break; // title/subtitle (above), groupBy and snake (index.ts)\n }\n out.cellSuffix = (i, key) => suffixes.get(`${i}:${key}`) ?? \"\";\n out.labelStyle = (key) => labelStyles.get(key) ?? \"\";\n out.css = out.css.map((r) => r.replace(/</g, \"\\\\3c \")); // nothing a spec says can close the <style> element\n out.rowClass = (i) => (rowClasses.get(i) ?? []).map((c) => ` ${c}`).join(\"\");\n out.rowStyle = (i) => {\n const s = rowStyles.get(i);\n return s ? styleAttr(s) : \"\";\n };\n out.cellStyle = (i, key) => {\n const s = cellStyles.get(`${i}:${key}`);\n return s ? styleAttr(s) : \"\";\n };\n return out;\n}\n","// src/html/layout.ts — the two decorations that reshape the table rather than style it\nimport { snakeAlign } from \"../snake.js\";\nimport type { ColumnSpec, Decoration, TableSpec } from \"../spec.js\";\nimport { escapeHtml } from \"./escape.js\";\n\ntype Tiers<Row> = Extract<Decoration<Row>, { type: \"tiers\" }>;\ntype Snake<Row> = Extract<Decoration<Row>, { type: \"snake\" }>;\n\n/** gt_tiers' reshaping (_layout.py:870-890): theme `tier` (style), image columns at imgHeight, every label blanked. */\nexport function expandTiers<Row>(spec: TableSpec<Row>): TableSpec<Row> {\n const d = spec.decorations.find((x): x is Tiers<Row> => x.type === \"tiers\");\n if (!d) return spec;\n const columns = spec.columns.map((c): ColumnSpec<Row> => {\n if (!d.imageColumns.includes(c.key)) return { ...c, label: \"\" };\n return {\n key: c.key,\n label: \"\",\n kind: \"image\",\n height: d.imgHeight,\n ...(c.align ? { align: c.align } : {}),\n ...(c.width ? { width: c.width } : {}),\n };\n });\n return {\n ...spec,\n theme: { name: \"tier\", density: spec.theme.density, options: { style: d.style } },\n columns,\n };\n}\n\n/** gt_snake: N side-by-side blocks inside ONE <table>; each output row carries the FIRST block's data-row and row hooks.\n * Returns null when Python leaves the table unchanged (fewer than two blocks, or no rows). */\nexport function snakeLayout<Row>(\n d: Snake<Row>,\n rows: readonly Row[],\n headCells: string,\n ncol: number,\n rowHtml: (row: Row, i: number) => string,\n trOf: (i: number, cells: string) => string,\n gapTh: string,\n gapTd: string,\n): { head: string; body: string[] } | null {\n const blocks = snakeAlign(\n rows.map((row, i) => ({ row, i })),\n { nCols: d.nCols, ...(d.rowsPerCol !== undefined ? { rowsPerCol: d.rowsPerCol } : {}) },\n );\n if (blocks.length < 2 || rows.length === 0) return null;\n const per = blocks[0]?.length ?? 0;\n const blank = `<td class=\"sdvt-cell sdvt-blank\">${escapeHtml(d.fill)}</td>`.repeat(ncol);\n const body = Array.from({ length: per }, (_, k) =>\n trOf(\n blocks[0]?.[k]?.i ?? k,\n blocks\n .map((b) => {\n const e = b[k];\n return e ? rowHtml(e.row, e.i) : blank;\n })\n .join(gapTd),\n ),\n );\n return { head: blocks.map(() => headCells).join(gapTh), body };\n}\n","// src/html/parts.ts — Phase 4's renderHTML body (moved from index.ts), split into strings so the static path,\n// renderHTML(table), hydrate and <SdvTable/> share ONE renderer (Phase 5 Task 2).\nimport { warn } from \"@sportsdataverse/sdvplot\";\nimport type { Sort, TableCursor } from \"../engine.js\";\nimport { TableSpecError } from \"../errors.js\";\nimport type { ColumnSpec, Decoration, TableSpec, ThemeRef } from \"../spec.js\";\nimport { fnv1a32, tableId } from \"../table-id.js\";\nimport { BASE_CSS, tokensCSS } from \"../themes/base-css.js\";\nimport { resolveTheme } from \"../themes/index.js\";\nimport type { GoogleFont, Theme } from \"../themes/tokens.js\";\nimport {\n type RenderContext,\n cellValue,\n columnScales,\n isScaled,\n kindCellStyle,\n renderCell,\n teamIdsOf,\n} from \"./cells.js\";\nimport { applyDecorations } from \"./decorations.js\";\nimport { cssValue, escapeAttr, escapeHtml, styleOf } from \"./escape.js\";\nimport { fontsLink } from \"./fonts.js\";\nimport { expandTiers, snakeLayout } from \"./layout.js\";\n\nexport interface RenderOptions {\n readonly css?: \"inline\" | \"none\";\n readonly fonts?: boolean;\n /** Phase 5: a sort button on every `sortable !== false` column, and aria-sort on the sorted one */\n readonly interactive?: boolean;\n /** Phase 5: the engine's current sort, for aria-sort */\n readonly sort?: Sort | null;\n /** Phase 5: engine-hidden column keys (merged with decoration-hidden columns); a key that is not a column throws `TableSpecError` */\n readonly hidden?: readonly string[];\n /** J31 (A5): page-relative indices of selected rows → `sdvt-selected` on their `<tr>` */\n readonly selected?: ReadonlySet<number>;\n /**\n * J31 (A4): rows the scale/legend domains, outlier limits and row-accent levels are computed from, and the rows\n * an index row selector (`boldRows([5])`) counts in; default the rendered rows. Interactive renders pass the\n * table's full source rows (A49), so nothing re-colours or moves while the user pages, filters, sorts or brushes.\n * It must hold the same row OBJECTS as `rows` (matched by identity, as the engine passes them), not equal copies:\n * a rendered row missing from it is colored from its own value (a rank fill gets none) and warns once per column.\n */\n readonly domainRows?: readonly unknown[];\n /**\n * Task 10 (A48): with `interactive`, render the table as a selectable ARIA grid: `role=\"grid\"` and\n * `aria-multiselectable=\"true\"` on the table, `tabindex=\"0\"` on the body row whose index is `grid.row` (clamped to\n * the rows) and `\"-1\"` on the others, `aria-selected` on every body row, and `sdvt-col-current` plus\n * `aria-current=\"true\"` on the header of `grid.col`. Ignored without `interactive`.\n */\n readonly grid?: TableCursor;\n}\n/** One render split into strings: `assemble` joins them into `renderHTML`'s output; `tableHTML` is the part that depends on the rows. */\nexport interface RenderedParts {\n /** the table id (`tableId(spec)`), also the wrapper's `id` */\n readonly id: string;\n /** the Google Fonts `<link>`, or \"\" */\n readonly link: string;\n /** class, id, data-sdvt-theme, data-sdvt-density — UNESCAPED values, in this order */\n readonly wrapperAttrs: Readonly<Record<string, string>>;\n /** the shared theme sheet (`styleSheet`) without the tag, or \"\" when css === \"none\" */\n readonly sheet: string;\n /** the decorations' own rules without the tag, or \"\" — part of the table block, so hydrate re-renders them */\n readonly rules: string;\n /** decoration blocks placed before the table element (top border bars and legends), or \"\" */\n readonly before: string;\n /** the caption element (title, subtitle), or \"\" */\n readonly caption: string;\n /** header rows above the main one, or \"\" (no decoration emits any yet) */\n readonly headRows: string;\n /** the `<th>` cells of the main header row */\n readonly head: string;\n /** each SHOWN column's header text, unescaped, keyed by column key (a marginalia rename and scaleNote suffix included): the toolbar's filter labels */\n readonly labels: ReadonlyMap<string, string>;\n /** every body `<tr>` (group header rows included) */\n readonly rows: string;\n /** the tfoot element (source notes, footnotes), or \"\" */\n readonly foot: string;\n /** decoration blocks placed after the table element (bottom border bars and legends), or \"\" */\n readonly after: string;\n /** the `<table>` tag's attributes with a leading space (Task 10: the grid role), or \"\" */\n readonly tableAttrs: string;\n}\n\nfunction checkKeys<Row>(spec: TableSpec<Row>, rows: readonly Row[]): void {\n const first = rows[0];\n if (first === undefined) return;\n const keys = new Set(Object.keys(first as object));\n for (const col of spec.columns) {\n const need: string[] = [\n col.key,\n ...(\"to\" in col ? [col.to] : []),\n ...(\"keys\" in col ? col.keys : []),\n ...([\"stack\", \"team\", \"colorRef\", \"markKey\", \"iconRef\", \"iconColorRef\"] as const).flatMap((f) => {\n const k = (col as unknown as Readonly<Record<string, unknown>>)[f];\n return typeof k === \"string\" ? [k] : [];\n }),\n ];\n for (const k of need)\n if (!keys.has(k))\n throw new TableSpecError(\n `column \"${k}\" (kind ${col.kind}) is not a key of the first row; keys are ${[...keys].join(\", \")}`,\n );\n }\n}\nexport function alignOf<Row>(col: ColumnSpec<Row>): \"left\" | \"center\" | \"right\" {\n if (col.align) return col.align;\n switch (col.kind) {\n case \"num\":\n case \"int\":\n case \"pct\":\n case \"rank\":\n case \"delta\":\n case \"tally\":\n case \"colorPills\":\n case \"colorRanks\":\n case \"iconSet\":\n return \"right\";\n case \"bubble\":\n case \"gauge\":\n return \"center\";\n case \"logo\":\n case \"wordmark\":\n case \"headshot\":\n case \"indicatorBox\":\n case \"image\":\n return \"center\";\n default:\n return \"left\";\n }\n}\nexport function labelOf<Row>(col: ColumnSpec<Row>): string {\n return col.label ?? col.key.replace(/_/g, \" \").replace(/\\b\\w/g, (m) => m.toUpperCase());\n}\n\n/** Class shared by every table with the same theme name + density + options (two sdvTeam tables for different teams get different keys). */\nexport function themeKey(ref: ThemeRef): string {\n return `sdvt-t-${fnv1a32(JSON.stringify([ref.name, ref.density, Object.entries(ref.options ?? {}).sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0))]))}`;\n}\n/** The `<style>` body without the tag: token block + base sheet + the theme's own rules, scoped to `.sdvt-t-<key>`. A host page emits it once per key. */\nexport function styleSheet<Row>(spec: TableSpec<Row>, theme: Theme = resolveTheme(spec.theme)): string {\n const sel = `.${themeKey(spec.theme)}`;\n return `${tokensCSS(sel, theme.tokens)}\\n${BASE_CSS(sel)}\\n${theme.rules(sel)}`;\n}\n\n/** The `aria-sort` value of column `key` under `sort`: \"none\" unless `sort` is on that column. */\nexport function sortAria(sort: Sort | null | undefined, key: string): \"ascending\" | \"descending\" | \"none\" {\n if (!sort || sort.col !== key) return \"none\";\n return sort.dir === \"asc\" ? \"ascending\" : \"descending\";\n}\n/** ` k=\"v\"` for each entry, in order. Values are attribute-escaped; keys are NOT escaped, so they must be trusted names. */\nexport function attrsText(attrs: Readonly<Record<string, string>>): string {\n return Object.entries(attrs)\n .map(([k, v]) => ` ${k}=\"${escapeAttr(v)}\"`)\n .join(\"\");\n}\nconst styleTag = (css: string): string => (css ? `<style>${css}</style>` : \"\");\n/** The table block: the decorations' own `<style>`, then before + `<table>` + after. hydrate re-renders exactly this. */\nexport function tableHTML(p: RenderedParts): string {\n return `${styleTag(p.rules)}${p.before}<table${p.tableAttrs}>${p.caption}<thead>${p.headRows}<tr>${p.head}</tr></thead><tbody>${p.rows}</tbody>${p.foot}</table>${p.after}`;\n}\n/**\n * The fonts link, then the wrapper holding the theme sheet and `inner` (default: the table block).\n * `inner` is inserted as raw, unescaped HTML: pass trusted renderer output (`tableHTML`) only, never data.\n */\nexport function assemble(p: RenderedParts, inner: string = tableHTML(p)): string {\n return `${p.link ? `${p.link}\\n` : \"\"}<div${attrsText(p.wrapperAttrs)}>${styleTag(p.sheet)}${inner}</div>`;\n}\n\n/**\n * Render `rows` of `spec` as {@link RenderedParts}; `assemble(renderParts(spec, rows, opts))` is `renderHTML`'s output.\n * Throws `TableSpecError` for a column key missing from the first row, an unknown `hidden` key, or an invalid spec.\n */\nexport function renderParts<Row>(\n input: TableSpec<Row>,\n rows: readonly Row[],\n opts: RenderOptions = {},\n): RenderedParts {\n checkKeys(input, rows);\n const id = tableId(input); // the spec as built, before tier expansion\n const spec = expandTiers(input);\n const theme = resolveTheme(spec.theme);\n if (!/^[A-Za-z][\\w-]*$/.test(id))\n throw new TableSpecError(\n `table id ${JSON.stringify(id)} must match /^[A-Za-z][\\\\w-]*$/ (it becomes a CSS selector)`,\n );\n const sel = `#${id}`;\n const groupBy = spec.decorations.find(\n (d): d is Extract<Decoration<Row>, { type: \"groupBy\" }> => d.type === \"groupBy\",\n );\n const engineHidden = opts.hidden ?? [];\n const bad = engineHidden.filter((k) => !spec.columns.some((c) => c.key === k));\n if (bad.length > 0)\n throw new TableSpecError(\n `hidden names no column ${bad.map((k) => JSON.stringify(k)).join(\", \")}; columns are ${spec.columns.map((c) => c.key).join(\", \")}`,\n );\n const domainRows = (opts.domainRows ?? rows) as readonly Row[]; // J31 (A4)\n const grid = opts.interactive === true ? opts.grid : undefined; // Task 10 (A48)\n const tabRow = grid === undefined ? -1 : Math.min(grid.row, rows.length - 1); // exactly one tab stop\n const scales = columnScales(spec, rows, warn, domainRows);\n const ctx: RenderContext<Row> = {\n spec,\n rows,\n domainRows,\n theme,\n id,\n sel,\n columns: spec.columns,\n groupKey: groupBy?.key,\n warn,\n teamIds: teamIdsOf(spec, rows),\n scales,\n recorded: scales.get(spec.columns.filter(isScaled).at(-1)?.key ?? \"\"), // none when the last one was skipped (zero rows)\n scaled: new Map(),\n };\n const deco = applyDecorations(spec, rows, ctx);\n const visible = spec.columns.filter((c) => !deco.hiddenColumns.has(c.key) && !engineHidden.includes(c.key));\n const ncol = visible.length;\n const span = Math.max(1, ncol); // every column hidden: a colspan is never 0\n const labels = new Map(\n visible.map((c) => [c.key, (deco.labelText.get(c.key) ?? labelOf(c)) + deco.labelSuffix(c.key)] as const),\n );\n let head = visible\n .map((c) => {\n const label = `${deco.label(c, labels.get(c.key) as string)}${c.subheader ? `<span class=\"sdvt-subheader\">${escapeHtml(c.subheader)}</span>` : \"\"}`;\n const sortable = opts.interactive === true && c.sortable !== false;\n const dir = sortAria(opts.sort, c.key);\n const aria = sortable && dir !== \"none\" ? ` aria-sort=\"${dir}\"` : \"\"; // ARIA 1.2: only the sorted header carries it\n const inner = sortable\n ? `<button type=\"button\" class=\"sdvt-sort\" data-sdv-sort=\"${escapeAttr(c.key)}\">${label}</button>`\n : label;\n const isCurrent = grid?.col === c.key;\n const current = isCurrent ? \" sdvt-col-current\" : \"\";\n // fix 1 (I2): the column `s` sorts, for assistive tech too (the class is only the visual marker)\n const currentAria = isCurrent ? ' aria-current=\"true\"' : \"\";\n return `<th scope=\"col\" class=\"sdvt-label sdvt-${escapeAttr(alignOf(c))}${current}\" data-col=\"${escapeAttr(c.key)}\" data-kind=\"${escapeAttr(c.kind)}\"${currentAria}${aria}${styleOf([c.width ? `width:${escapeAttr(cssValue(c.width, `column ${c.key} width`))}` : \"\", deco.labelStyle(c.key)])}>${inner}</th>`;\n })\n .join(\"\");\n // `>` + the cell; with `tooltip` (reactablefmtr tooltip = TRUE) a `title` first: the cell text, else the raw value\n const cellOf = (c: ColumnSpec<Row>, row: Row, i: number): string => {\n const html = renderCell(c, row, i, ctx);\n if (c.tooltip !== true) return `>${html}`;\n const text = html\n .replace(/<[^>]*>/g, \" \")\n .replace(/\\s+/g, \" \")\n .trim();\n const raw = cellValue(row, c.key);\n const title = text || (raw === null || raw === undefined ? \"\" : escapeAttr(raw));\n return title ? ` title=\"${title}\">${html}` : `>${html}`;\n };\n const cellsOf = (row: Row, i: number): string =>\n visible\n .map(\n (c) =>\n `<td class=\"sdvt-cell sdvt-kind-${escapeAttr(c.kind)} sdvt-${escapeAttr(alignOf(c))}\" data-col=\"${escapeAttr(c.key)}\"${styleOf([kindCellStyle(c, row, i, ctx), deco.cellStyle(i, c.key)])}${cellOf(c, row, i)}${deco.cellSuffix(i, c.key)}</td>`,\n )\n .join(\"\");\n // opt_row_striping: great_tables marks every second DISPLAYED data row (j % 2 == 1 over the body in display order, group headers not counted)\n const striped = theme.tokens.stripe !== \"transparent\";\n let shown = 0;\n const gridRow = (i: number): string =>\n grid === undefined\n ? \"\"\n : ` tabindex=\"${i === tabRow ? 0 : -1}\" aria-selected=\"${opts.selected?.has(i) === true}\"`;\n const trOf = (i: number, cells: string): string =>\n `<tr class=\"sdvt-row${striped && shown++ % 2 === 1 ? \" sdvt-stripe\" : \"\"}${deco.rowClass(i)}${opts.selected?.has(i) === true ? \" sdvt-selected\" : \"\"}\" data-row=\"${i}\"${gridRow(i)}${styleOf([deco.rowStyle(i)])}>${cells}</tr>`;\n let body: string[] = [];\n const snake = spec.decorations.find(\n (d): d is Extract<Decoration<Row>, { type: \"snake\" }> => d.type === \"snake\",\n );\n if (snake && ctx.groupKey !== undefined) throw new TableSpecError(\"snake cannot be combined with groupBy\");\n // a snaked <tr> holds one row per block but carries only the first block's data-row, so a click or hover in\n // another block would select the wrong row, and every block repeats the sort buttons\n if (snake && opts.interactive === true)\n throw new TableSpecError(\n \"snake cannot be combined with an interactive table (renderHTML(table), hydrate, SdvTable); render it statically with renderHTML(spec, rows)\",\n );\n const gap = snake && snake.gap > 0 ? `style=\"width:${snake.gap}px;border:none\"` : \"\";\n const snaked = snake\n ? snakeLayout(\n snake,\n rows,\n head,\n ncol,\n cellsOf,\n trOf,\n gap ? `<th class=\"sdvt-gap\" ${gap}></th>` : \"\",\n gap ? `<td class=\"sdvt-gap\" ${gap}></td>` : \"\",\n )\n : null;\n if (snake && snaked) {\n head = snaked.head;\n body = snaked.body;\n if (snake.cleanGaps)\n deco.css.push(\n `${sel} .sdvt-gap,${sel} td.sdvt-blank{border:none!important;background:transparent!important;box-shadow:none!important}`,\n );\n } else {\n // Stable partition by first-appearance group (gt groupname_col): one header per group, rows keep their original index.\n const groups = new Map<unknown, number[]>();\n if (ctx.groupKey === undefined)\n groups.set(\n undefined,\n rows.map((_, i) => i),\n );\n else\n rows.forEach((row, i) => {\n const g = (row as Record<string, unknown>)[ctx.groupKey as string];\n const list = groups.get(g);\n if (list) list.push(i);\n else groups.set(g, [i]);\n });\n let groupIndex = -1;\n for (const [g, idxs] of groups) {\n groupIndex++;\n if (ctx.groupKey !== undefined)\n body.push(\n `<tr class=\"sdvt-group-row${deco.groupRowClass(groupIndex)}\"><th scope=\"rowgroup\" colspan=\"${span}\" class=\"sdvt-group\">${escapeHtml(g)}</th></tr>`,\n );\n for (const i of idxs) body.push(trOf(i, cellsOf(rows[i] as Row, i)));\n }\n }\n const fonts: GoogleFont[] = [...theme.fonts, ...deco.fonts];\n const name = spec.theme.name;\n return {\n id,\n link: opts.fonts === false ? \"\" : fontsLink(fonts), // css:\"none\" drops only the shared theme sheet (A98, A100)\n wrapperAttrs: {\n class: `sdvt sdvt-theme-${name} ${themeKey(spec.theme)}`,\n id,\n \"data-sdvt-theme\": name,\n \"data-sdvt-density\": spec.theme.density,\n },\n sheet: opts.css === \"none\" ? \"\" : styleSheet(spec, theme),\n rules: deco.css.join(\"\\n\"),\n before: deco.before,\n caption: deco.caption ? `<caption>${deco.caption}</caption>` : \"\",\n headRows: deco.headRows,\n head,\n labels,\n rows: body.join(\"\"),\n foot:\n deco.foot.length > 0\n ? `<tfoot>${deco.foot.map((f) => `<tr><td colspan=\"${span}\">${f}</td></tr>`).join(\"\")}</tfoot>`\n : \"\",\n after: deco.after,\n tableAttrs: grid === undefined ? \"\" : ' role=\"grid\" aria-multiselectable=\"true\"',\n };\n}\n// ponytail: renders the empty table to get the font link; cheap and always consistent with renderHTML\n/** The Google Fonts link element `renderHTML(spec, ...)` would emit (theme and decoration fonts), or \"\": for a page's head. */\nexport const fontsLinkFor = <Row>(spec: TableSpec<Row>): string => renderParts(spec, []).link;\n"]}
|