@sportsdataverse/sdvplot 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.
Files changed (135) hide show
  1. package/NOTICE.md +15 -0
  2. package/README.md +84 -8
  3. package/dist/chartjs-surface.d.ts +2 -2
  4. package/dist/chartjs-surface.js +2 -2
  5. package/dist/chartjs-surface.js.map +1 -1
  6. package/dist/chartjs.d.ts +32 -2
  7. package/dist/chartjs.js +7 -4
  8. package/dist/chartjs.js.map +1 -1
  9. package/dist/chunk-57WFSI4Q.js +128 -0
  10. package/dist/chunk-57WFSI4Q.js.map +1 -0
  11. package/dist/{chunk-KKH6ABMA.js → chunk-7ULOCCFL.js} +94 -4
  12. package/dist/chunk-7ULOCCFL.js.map +1 -0
  13. package/dist/chunk-AMXASQHT.js +120 -0
  14. package/dist/chunk-AMXASQHT.js.map +1 -0
  15. package/dist/chunk-B2MP37SR.js +175 -0
  16. package/dist/chunk-B2MP37SR.js.map +1 -0
  17. package/dist/{chunk-NLPH2VZT.js → chunk-DYMUVE6K.js} +4 -4
  18. package/dist/{chunk-NLPH2VZT.js.map → chunk-DYMUVE6K.js.map} +1 -1
  19. package/dist/{chunk-QY65DUEF.js → chunk-H2C3FMMA.js} +4 -10
  20. package/dist/chunk-H2C3FMMA.js.map +1 -0
  21. package/dist/{chunk-JJFTD4VB.js → chunk-J4P4HDBF.js} +4 -4
  22. package/dist/{chunk-JJFTD4VB.js.map → chunk-J4P4HDBF.js.map} +1 -1
  23. package/dist/chunk-M3XD2OSN.js +132 -0
  24. package/dist/chunk-M3XD2OSN.js.map +1 -0
  25. package/dist/{chunk-OKEE4AH6.js → chunk-OIILARXI.js} +3 -3
  26. package/dist/{chunk-OKEE4AH6.js.map → chunk-OIILARXI.js.map} +1 -1
  27. package/dist/chunk-RPVVJY74.js +170 -0
  28. package/dist/chunk-RPVVJY74.js.map +1 -0
  29. package/dist/chunk-UL5M6KDE.js +205 -0
  30. package/dist/chunk-UL5M6KDE.js.map +1 -0
  31. package/dist/chunk-WQT4IVLX.js +10 -0
  32. package/dist/chunk-WQT4IVLX.js.map +1 -0
  33. package/dist/{chunk-TAXO3VXH.js → chunk-ZAEQXFJM.js} +3 -3
  34. package/dist/{chunk-TAXO3VXH.js.map → chunk-ZAEQXFJM.js.map} +1 -1
  35. package/dist/cytoscape.d.ts +188 -0
  36. package/dist/cytoscape.js +219 -0
  37. package/dist/cytoscape.js.map +1 -0
  38. package/dist/d3.d.ts +3 -3
  39. package/dist/d3.js +6 -6
  40. package/dist/d3.js.map +1 -1
  41. package/dist/deckgl.d.ts +232 -0
  42. package/dist/deckgl.js +197 -0
  43. package/dist/deckgl.js.map +1 -0
  44. package/dist/echarts.js +5 -5
  45. package/dist/g2.d.ts +251 -0
  46. package/dist/g2.js +102 -0
  47. package/dist/g2.js.map +1 -0
  48. package/dist/index.d.ts +2 -1
  49. package/dist/index.js +4 -5
  50. package/dist/lightweight-charts.d.ts +217 -0
  51. package/dist/lightweight-charts.js +155 -0
  52. package/dist/lightweight-charts.js.map +1 -0
  53. package/dist/maplibre.d.ts +271 -0
  54. package/dist/maplibre.js +175 -0
  55. package/dist/maplibre.js.map +1 -0
  56. package/dist/mui.d.ts +338 -0
  57. package/dist/mui.js +184 -0
  58. package/dist/mui.js.map +1 -0
  59. package/dist/nivo.d.ts +193 -0
  60. package/dist/nivo.js +8 -0
  61. package/dist/nivo.js.map +1 -0
  62. package/dist/perspective.d.ts +198 -0
  63. package/dist/perspective.js +171 -0
  64. package/dist/perspective.js.map +1 -0
  65. package/dist/placement-UWkqUzpa.d.ts +32 -0
  66. package/dist/plot.d.ts +7 -5
  67. package/dist/plot.js +9 -8
  68. package/dist/plot.js.map +1 -1
  69. package/dist/plotly.js +5 -5
  70. package/dist/react.d.ts +279 -3
  71. package/dist/react.js +364 -6
  72. package/dist/react.js.map +1 -1
  73. package/dist/recharts.d.ts +162 -0
  74. package/dist/recharts.js +8 -0
  75. package/dist/recharts.js.map +1 -0
  76. package/dist/shadcn.d.ts +83 -0
  77. package/dist/shadcn.js +88 -0
  78. package/dist/shadcn.js.map +1 -0
  79. package/dist/shots.js +3 -2
  80. package/dist/shots.js.map +1 -1
  81. package/dist/surface-TR7YFJW3.js +4 -0
  82. package/dist/surface-TR7YFJW3.js.map +1 -0
  83. package/dist/surfaces-MIG7HOFU.js +6 -0
  84. package/dist/surfaces-MIG7HOFU.js.map +1 -0
  85. package/dist/surfaces-W-odWLpT.d.ts +47 -0
  86. package/dist/svelte/HeadshotMark.svelte +25 -0
  87. package/dist/svelte/HeadshotMark.svelte.d.ts +10 -0
  88. package/dist/svelte/HeadshotMark.svelte.d.ts.map +1 -0
  89. package/dist/svelte/LogoMark.svelte +25 -0
  90. package/dist/svelte/LogoMark.svelte.d.ts +10 -0
  91. package/dist/svelte/LogoMark.svelte.d.ts.map +1 -0
  92. package/dist/svelte/Marks.svelte +25 -0
  93. package/dist/svelte/Marks.svelte.d.ts +10 -0
  94. package/dist/svelte/Marks.svelte.d.ts.map +1 -0
  95. package/dist/svelte/Surface.svelte +29 -0
  96. package/dist/svelte/Surface.svelte.d.ts +9 -0
  97. package/dist/svelte/Surface.svelte.d.ts.map +1 -0
  98. package/dist/svelte/SurfaceBackdrop.svelte +26 -0
  99. package/dist/svelte/SurfaceBackdrop.svelte.d.ts +11 -0
  100. package/dist/svelte/SurfaceBackdrop.svelte.d.ts.map +1 -0
  101. package/dist/svelte/index.d.ts +13 -0
  102. package/dist/svelte/index.d.ts.map +1 -0
  103. package/dist/svelte/index.js +11 -0
  104. package/dist/svelte-core.d.ts +139 -0
  105. package/dist/svelte-core.js +123 -0
  106. package/dist/svelte-core.js.map +1 -0
  107. package/dist/tanstack.d.ts +240 -0
  108. package/dist/tanstack.js +110 -0
  109. package/dist/tanstack.js.map +1 -0
  110. package/dist/testing.js +4 -5
  111. package/dist/testing.js.map +1 -1
  112. package/dist/three.d.ts +223 -0
  113. package/dist/three.js +50 -0
  114. package/dist/three.js.map +1 -0
  115. package/dist/{tiers-B6pUBPcE.d.ts → tiers-BN4md-GB.d.ts} +2 -30
  116. package/dist/unovis.d.ts +127 -0
  117. package/dist/unovis.js +108 -0
  118. package/dist/unovis.js.map +1 -0
  119. package/dist/uplot.d.ts +120 -0
  120. package/dist/uplot.js +110 -0
  121. package/dist/uplot.js.map +1 -0
  122. package/dist/vega.js +5 -5
  123. package/dist/victory.d.ts +107 -0
  124. package/dist/victory.js +38 -0
  125. package/dist/victory.js.map +1 -0
  126. package/package.json +218 -6
  127. package/dist/chunk-KKH6ABMA.js.map +0 -1
  128. package/dist/chunk-QY65DUEF.js.map +0 -1
  129. package/dist/chunk-RMT2GMFH.js +0 -97
  130. package/dist/chunk-RMT2GMFH.js.map +0 -1
  131. package/dist/chunk-SEBO35DV.js +0 -76
  132. package/dist/chunk-SEBO35DV.js.map +0 -1
  133. package/dist/chunk-TDNBAEQB.js +0 -105
  134. package/dist/chunk-TDNBAEQB.js.map +0 -1
  135. package/dist/surfaces-ChaD9nei.d.ts +0 -38
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/team-palette.ts","../src/_web.ts"],"names":[],"mappings":";;;;;;AASO,IAAM,YAAA,GAAe,CAAA;AASrB,IAAM,WAAA,GAAc,EAAA;AAE3B,IAAM,IAAA,GAAO,IAAA;AAEb,IAAM,GAAA,GAAM,CAAC,CAAA,KAAsB;AACjC,EAAA,MAAM,IAAI,CAAA,GAAI,GAAA;AACd,EAAA,OAAO,KAAK,OAAA,GAAU,CAAA,GAAI,KAAA,GAAA,CAAA,CAAU,CAAA,GAAI,SAAS,KAAA,KAAU,GAAA;AAC7D,CAAA;AACA,IAAM,CAAA,GAAI,CAAC,CAAA,KAAuB,CAAA,GAAI,MAAM,KAAA,GAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,GAAM,KAAA,GAAQ,EAAA,GAAM,CAAA,GAAK,MAAM,EAAA,GAAK,GAAA;AAEnG,SAAS,IAAI,KAAA,EAAyC;AACpD,EAAA,MAAM,CAAA,GAAI,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,KAAA,EAAO,EAAE,SAAA,EAAW,IAAA,EAAM,CAAA,CAAE,KAAA,CAAM,CAAC,GAAG,EAAE,CAAA;AACvE,EAAA,MAAM,CAAC,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA,GAAI,CAAC,IAAI,CAAA,IAAK,EAAE,CAAA,EAAG,GAAA,CAAK,KAAK,CAAA,GAAK,GAAG,GAAG,GAAA,CAAI,CAAA,GAAI,GAAG,CAAC,CAAA;AAClE,EAAA,MAAM,CAAA,GAAI,GAAG,MAAA,GAAS,CAAA,GAAI,SAAS,CAAA,GAAI,MAAA,GAAS,KAAK,OAAO,CAAA;AAC5D,EAAA,MAAM,IAAI,CAAA,CAAE,MAAA,GAAS,IAAI,MAAA,GAAS,CAAA,GAAI,SAAS,CAAC,CAAA;AAChD,EAAA,MAAM,CAAA,GAAI,GAAG,MAAA,GAAS,CAAA,GAAI,SAAS,CAAA,GAAI,MAAA,GAAS,KAAK,OAAO,CAAA;AAC5D,EAAA,OAAO,CAAC,MAAM,CAAA,GAAI,EAAA,EAAI,OAAO,CAAA,GAAI,CAAA,CAAA,EAAI,GAAA,IAAO,CAAA,GAAI,CAAA,CAAE,CAAA;AACpD;AACA,IAAM,IAAA,GAAO,CAAC,CAAA,KAAuB,CAAA,GAAI,CAAA,GAAI,EAAA,GAAK,CAAA,IAAK,CAAA,GAAI,CAAA,GAAA,CAAK,CAAA,GAAI,EAAA,KAAO,CAAA,IAAK,IAAI,CAAA,GAAI,EAAA,CAAA;AACxF,IAAM,KAAA,GAAQ,CAAC,CAAA,KAAsB;AACnC,EAAA,MAAM,CAAA,GAAI,KAAK,GAAA,CAAI,CAAA,EAAG,KAAK,GAAA,CAAI,CAAA,EAAG,CAAC,CAAC,CAAA;AACpC,EAAA,MAAM,CAAA,GAAI,KAAK,QAAA,GAAY,KAAA,GAAQ,IAAI,KAAA,GAAQ,CAAA,KAAM,IAAI,GAAA,CAAA,GAAO,KAAA;AAChE,EAAA,OAAO,IAAA,CAAK,KAAA,CAAM,CAAA,GAAI,GAAG,CAAA,CACtB,SAAS,EAAE,CAAA,CACX,QAAA,CAAS,CAAA,EAAG,GAAG,CAAA;AACpB,CAAA;AAEA,SAAS,OAAA,CAAQ,CAAC,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA,EAA8C;AACrE,EAAA,MAAM,EAAA,GAAA,CAAM,IAAI,EAAA,IAAM,GAAA;AACtB,EAAA,MAAM,CAAC,GAAG,CAAA,EAAG,CAAC,IAAI,CAAC,OAAA,GAAU,KAAK,EAAA,GAAK,CAAA,GAAI,GAAG,CAAA,EAAG,IAAA,CAAK,EAAE,CAAA,EAAG,OAAA,GAAU,KAAK,EAAA,GAAK,CAAA,GAAI,GAAG,CAAC,CAAA;AACvF,EAAA,OAAO,CAAA,CAAA,EAAI,KAAA,CAAM,MAAA,GAAS,CAAA,GAAI,MAAA,GAAS,CAAA,GAAI,MAAA,GAAS,CAAC,CAAC,CAAA,EAAG,KAAA,CAAM,OAAA,GAAU,CAAA,GAAI,SAAS,CAAA,GAAI,MAAA,GAAS,CAAC,CAAC,CAAA,EAAG,KAAA,CAAM,MAAA,GAAS,CAAA,GAAI,KAAA,GAAQ,CAAA,GAAI,KAAA,GAAQ,CAAC,CAAC,CAAA,CAAA;AACnJ;AACA,IAAM,IAAA,GAAO,CAAC,CAAA,EAAsB,CAAA,KAClC,IAAA,CAAK,KAAA,CAAA,CAAO,CAAA,CAAE,CAAC,CAAA,IAAK,CAAA,KAAM,CAAA,CAAE,CAAC,CAAA,IAAK,CAAA,CAAA,EAAA,CAAK,CAAA,CAAE,CAAC,CAAA,IAAK,CAAA,KAAM,CAAA,CAAE,CAAC,CAAA,IAAK,CAAA,CAAA,EAAA,CAAK,CAAA,CAAE,CAAC,CAAA,IAAK,CAAA,KAAM,CAAA,CAAE,CAAC,KAAK,CAAA,CAAE,CAAA;AAQ5F,IAAM,OAAA,GAAU,MAAM,IAAA,CAAK,EAAE,QAAQ,EAAA,EAAG,EAAG,CAAC,CAAA,EAAG,CAAA,KAAA,CAAO,IAAI,CAAA,KAAM,CAAA,GAAI,IAAI,EAAA,IAAM,CAAA,GAAI,KAAK,IAAA,CAAK,CAAA,GAAI,CAAC,CAAC,CAAA;AAClG,IAAM,OAAA,GAAU,MAAM,IAAA,CAAK,EAAE,QAAQ,EAAA,EAAG,EAAG,CAAC,CAAA,EAAG,CAAA,KAAA,CAAO,IAAI,CAAA,KAAM,CAAA,GAAI,IAAI,EAAA,IAAM,EAAA,GAAK,KAAK,IAAA,CAAK,CAAA,GAAI,CAAC,CAAC,CAAA;AACnG,IAAM,UAAU,CAAC,CAAA,EAAG,KAAK,EAAA,EAAI,GAAA,EAAK,IAAI,EAAE,CAAA;AAExC,SAAS,OAAO,IAAA,EAAwB;AACtC,EAAA,MAAM,CAAC,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA,GAAI,IAAI,IAAI,CAAA;AAC1B,EAAA,MAAM,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA;AACzB,EAAA,MAAM,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA;AACzB,EAAA,MAAM,MAAgB,EAAC;AACvB,EAAA,KAAA,MAAW,EAAA,IAAM,OAAA;AACf,IAAA,KAAA,MAAW,EAAA,IAAM,OAAA;AACf,MAAA,KAAA,MAAW,MAAM,OAAA,EAAS;AACxB,QAAA,MAAM,EAAA,GAAK,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAI,EAAE,CAAA;AAC7B,QAAA,MAAM,EAAA,GAAK,CAAA,GAAK,EAAA,GAAK,IAAA,CAAK,EAAA,GAAM,GAAA;AAChC,QAAA,GAAA,CAAI,IAAA,CAAK,OAAA,CAAQ,CAAC,IAAA,CAAK,GAAA,CAAI,KAAK,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,CAAA,GAAI,EAAE,CAAC,GAAG,EAAA,GAAK,IAAA,CAAK,GAAA,CAAI,EAAE,CAAA,EAAG,EAAA,GAAK,KAAK,GAAA,CAAI,EAAE,CAAC,CAAC,CAAC,CAAA;AAAA,MAC9F;AACJ,EAAA,OAAO,GAAA;AACT;AAGO,SAAS,QAAA,CAAS,CAAA,EAAW,GAAA,EAAgC,EAAA,EAAoB;AACtF,EAAA,IAAI,QAAA,CAAS,CAAA,EAAG,EAAE,CAAA,IAAK,cAAc,OAAO,CAAA;AAC5C,EAAA,IAAI,OAAO,IAAA,IAAQ,QAAA,CAAS,KAAK,EAAE,CAAA,IAAK,cAAc,OAAO,GAAA;AAC7D,EAAA,MAAM,GAAA,GAAM,QAAQ,EAAE,CAAA;AACtB,EAAA,KAAA,IAAS,CAAA,GAAI,IAAA,EAAM,CAAA,GAAI,CAAA,EAAG,KAAK,IAAA,EAAM;AACnC,IAAA,MAAM,CAAA,GAAI,GAAA,CAAI,CAAA,EAAG,GAAA,EAAK,CAAC,CAAA;AACvB,IAAA,IAAI,QAAA,CAAS,CAAA,EAAG,EAAE,CAAA,IAAK,cAAc,OAAO,CAAA;AAAA,EAC9C;AACA,EAAA,OAAO,GAAA;AACT;AAcO,SAAS,WAAA,CACd,MAAA,EACA,IAAA,EACA,UAAA,EACA,SAA4B,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAA,EAAI,CAAA,GAAI,CAAC,EAAE,CAAA,EAClD;AACV,EAAA,MAAM,EAAA,GAAK,KAAK,UAAU,CAAA;AAC1B,EAAA,MAAM,GAAA,GAAM,QAAQ,EAAE,CAAA;AACtB,EAAA,MAAM,MAAgB,EAAC;AACvB,EAAA,MAAM,OAAmC,EAAC;AAC1C,EAAA,MAAM,KAAA,GAAQ,CAAC,CAAA,KAAsB;AACnC,IAAA,MAAM,CAAA,GAAI,IAAI,CAAC,CAAA;AACf,IAAA,OAAO,IAAA,CAAK,UAAU,CAAC,CAAA,KAAM,KAAK,CAAA,EAAG,CAAC,IAAI,WAAW,CAAA;AAAA,EACvD,CAAA;AACA,EAAA,MAAM,EAAA,GAAK,CAAC,CAAA,KAAuB,QAAA,CAAS,CAAA,EAAG,EAAE,CAAA,IAAK,YAAA,IAAgB,KAAA,CAAM,CAAC,CAAA,GAAI,CAAA;AACjF,EAAA,MAAM,IAAA,GAAO,CAAC,CAAA,KAAoB;AAChC,IAAA,GAAA,CAAI,KAAK,CAAC,CAAA;AACV,IAAA,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,CAAC,CAAC,CAAA;AAAA,EAClB,CAAA;AACA,EAAA,MAAA,CAAO,OAAA,CAAQ,CAAC,KAAA,EAAO,CAAA,KAAM;AAC3B,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,CAAC,CAAA,IAAK,IAAA;AACvB,IAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,KAAA,EAAO,GAAA,EAAK,EAAE,CAAA;AACrC,IAAA,IAAI,MAAM,KAAK,CAAA,GAAI,CAAA,EAAG,OAAO,KAAK,KAAK,CAAA;AACvC,IAAA,MAAM,SAAS,GAAA,KAAQ,IAAA,GAAO,OAAO,QAAA,CAAS,GAAA,EAAK,MAAM,EAAE,CAAA;AAC3D,IAAA,IAAI,WAAW,IAAA,IAAQ,EAAA,CAAG,MAAM,CAAA,EAAG,OAAO,KAAK,MAAM,CAAA;AAErD,IAAA,MAAM,IAAA,GAAO,CAAC,KAAK,CAAA;AACnB,IAAA,KAAA,IAAS,IAAI,IAAA,EAAM,CAAA,GAAI,CAAA,EAAG,CAAA,IAAK,MAAM,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,KAAA,EAAO,KAAK,CAAC,CAAA,EAAG,IAAI,KAAA,EAAO,EAAA,EAAI,CAAC,CAAC,CAAA;AACpF,IAAA,IAAA,CAAK,IAAA,CAAK,GAAG,MAAA,CAAO,KAAK,CAAC,CAAA;AAC1B,IAAA,IAAI,WAAW,IAAA,EAAM,IAAA,CAAK,KAAK,GAAG,MAAA,CAAO,MAAM,CAAC,CAAA;AAChD,IAAA,MAAM,KAAA,GAAQ,IAAI,KAAK,CAAA;AACvB,IAAA,IAAI,IAAA;AACJ,IAAA,IAAI,OAAO,MAAA,CAAO,iBAAA;AAClB,IAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,IAAA,KAAA,MAAW,KAAK,IAAA,EAAM;AACpB,MAAA,IAAI,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,EAAG;AACjB,MAAA,IAAA,CAAK,IAAI,CAAC,CAAA;AACV,MAAA,MAAM,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAC,GAAG,KAAK,CAAA;AAC5B,MAAA,IAAI,CAAA,GAAI,IAAA,IAAQ,EAAA,CAAG,CAAC,CAAA,EAAG;AACrB,QAAA,IAAA,GAAO,CAAA;AACP,QAAA,IAAA,GAAO,CAAA;AAAA,MACT;AAAA,IACF;AACA,IAAA,IAAI,IAAA,KAAS,MAAA,EAAW,OAAO,IAAA,CAAK,IAAI,CAAA;AACxC,IAAA,MAAM,CAAA,GAAI,MAAM,KAAK,CAAA;AACrB,IAAA,IAAA;AAAA,MACE,CAAA,aAAA,EAAgB,EAAE,CAAA,CAAA,EAAI,MAAA,CAAO,CAAC,CAAC,CAAA,CAAA,EAAI,MAAA,CAAO,CAAC,CAAC,CAAA,CAAA;AAAA,MAC5C,GAAG,MAAA,CAAO,CAAC,CAAC,CAAA,EAAA,EAAK,KAAK,CAAA,uBAAA,EAAqB,WAAW,CAAA,IAAA,EAAO,MAAA,CAAO,CAAC,CAAC,CAAA,EAAA,EAAK,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAA,sCAAA;AAAA,KAC7F;AACA,IAAA,IAAA,CAAK,KAAK,CAAA;AAAA,EACZ,CAAC,CAAA;AACD,EAAA,OAAO,GAAA;AACT;;;AC5EO,SAAS,OAAO,CAAA,EAAsB;AAC3C,EAAA,OAAO,EAAE,MAAA,IAAU,eAAA;AACrB;AAEO,SAAS,WAAW,IAAA,EAAyB;AAClD,EAAA,IAAI,IAAA,KAAS,OAAO,IAAA,KAAS,GAAA;AAC3B,IAAA,MAAM,IAAI,UAAA,CAAW,CAAA,6BAAA,EAAgC,KAAK,SAAA,CAAU,IAAI,CAAC,CAAA,CAAE,CAAA;AAC7E,EAAA,OAAO,IAAA;AACT;AAKO,SAAS,WAAA,CAAY,GAAc,KAAA,EAA6C;AACrF,EAAA,OAAO,KAAA,EAAO,GAAA,CAAI,CAAA,CAAE,GAAG,CAAA,IAAK,SAAA,CAAU,CAAA,CAAE,GAAG,CAAA,CAAE,OAAA,CAAQ,sBAAA,EAAwB,KAAK,CAAA;AACpF;AACO,SAAS,YAAA,CAAa,IAA0B,KAAA,EAA+C;AACpG,EAAA,OAAO,GAAG,GAAA,CAAI,CAAC,MAAM,WAAA,CAAY,CAAA,EAAG,KAAK,CAAC,CAAA;AAC5C;AAGA,eAAsB,YAAA,CACpB,IAAA,EACA,OAAA,GAAwB,KAAA,EACM;AAC9B,EAAA,MAAM,GAAA,uBAAU,GAAA,EAAoB;AACpC,EAAA,KAAA,MAAW,GAAA,IAAO,IAAI,GAAA,CAAI,IAAI,CAAA,EAAG;AAC/B,IAAA,MAAM,GAAA,GAAM,MAAM,OAAA,CAAQ,GAAG,CAAA;AAC7B,IAAA,IAAI,CAAC,GAAA,CAAI,EAAA,EAAI,MAAM,IAAI,aAAA,CAAc,CAAA,OAAA,EAAU,GAAG,CAAA,UAAA,EAAa,GAAA,CAAI,MAAM,CAAA,CAAA,EAAI,GAAA,EAAK,IAAI,MAAM,CAAA;AAE5F,IAAA,MAAM,OACJ,GAAA,CAAI,OAAA,CAAQ,IAAI,cAAc,CAAA,EAAG,MAAM,GAAG,CAAA,CAAE,CAAC,CAAA,EAAG,IAAA,OAC/C,GAAA,CAAI,WAAA,GAAc,QAAA,CAAS,MAAM,IAAI,eAAA,GAAkB,0BAAA,CAAA;AAC1D,IAAA,MAAM,QAAQ,IAAI,UAAA,CAAW,MAAM,GAAA,CAAI,aAAa,CAAA;AACpD,IAAA,IAAI,GAAA,GAAM,EAAA;AACV,IAAA,KAAA,MAAW,CAAA,IAAK,KAAA,EAAO,GAAA,IAAO,MAAA,CAAO,aAAa,CAAC,CAAA;AACnD,IAAA,GAAA,CAAI,GAAA,CAAI,KAAK,CAAA,KAAA,EAAQ,IAAI,WAAW,IAAA,CAAK,GAAG,CAAC,CAAA,CAAE,CAAA;AAAA,EACjD;AACA,EAAA,OAAO,GAAA;AACT;AAGO,SAAS,MAAA,CAAO,IAAA,EAAsB,IAAA,EAAc,IAAA,EAAuB;AAChF,EAAA,IAAI,IAAA,CAAK,SAAS,CAAA,IAAK,CAAC,KAAK,IAAA,CAAK,CAAC,CAAA,KAAM,IAAA,IAAQ,CAAC,CAAA;AAChD,IAAA,MAAM,IAAI,WAAW,CAAA,EAAG,IAAI,WAAW,IAAA,CAAK,SAAA,CAAU,IAAI,CAAC,CAAA,eAAA,CAAiB,CAAA;AAC9E,EAAA,OAAO,KAAK,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAI,CAAU,CAAA;AACzC;AAEO,SAAS,OAAA,CACd,MACA,MAAA,EACsC;AACtC,EAAA,IAAI,OAAO,WAAW,QAAA,IAAY,IAAA,CAAK,KAAK,CAAC,CAAA,KAAM,UAAU,CAAC,CAAA;AAC5D,IAAA,OAAO,KAAK,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,MAAM,CAAgB,CAAA;AACjD,EAAA,OAAO,MAAA;AACT;AAGO,SAAS,cAAA,CACd,IAAA,EACA,IAAA,EACA,CAAA,EACa;AACb,EAAA,MAAM,EAAA,GAAK,MAAA,CAAO,IAAA,EAAM,CAAA,CAAE,GAAG,GAAG,CAAA;AAChC,EAAA,MAAM,EAAA,GAAK,MAAA,CAAO,IAAA,EAAM,CAAA,CAAE,GAAG,GAAG,CAAA;AAChC,EAAA,IAAI,SAAS,UAAA,EAAY;AACvB,IAAA,MAAM,CAAA,GAAI,CAAA;AACV,IAAA,OAAO,SAAA,CAAM,IAAI,EAAA,EAAI,MAAA,CAAO,MAAM,CAAA,CAAE,MAAA,EAAQ,QAAQ,CAAA,EAAG;AAAA,MACrD,QAAQ,CAAA,CAAE,MAAA;AAAA,MACV,IAAA;AAAA,MACA,QAAA,EAAU,EAAE,QAAA,IAAY;AAAA,KACzB,CAAA;AAAA,EACH;AACA,EAAA,MAAM,CAAA,GAAI,CAAA;AACV,EAAA,MAAM,EAAA,GAAmB,EAAE,MAAA,EAAQ,CAAA,CAAE,QAAQ,IAAA,EAAK;AAClD,EAAA,IAAI,CAAA,CAAE,WAAW,MAAA,EAAW,EAAA,CAAG,SAAS,OAAA,CAAQ,IAAA,EAAM,EAAE,MAAM,CAAA;AAC9D,EAAA,IAAI,CAAA,CAAE,OAAA,KAAY,MAAA,EAAW,EAAA,CAAG,UAAU,CAAA,CAAE,OAAA;AAC5C,EAAA,IAAI,CAAA,CAAE,QAAA,KAAa,MAAA,EAAW,EAAA,CAAG,WAAW,CAAA,CAAE,QAAA;AAC9C,EAAA,OAAO,SAAA,CAAM,IAAI,EAAA,EAAI,MAAA,CAAO,MAAM,CAAA,CAAE,IAAA,EAAM,MAAM,CAAA,EAAG,EAAE,CAAA;AACvD;AAEO,SAAS,cAAA,CAAe,MAAA,EAA2B,MAAA,EAAmB,CAAA,EAA6B;AACxG,EAAA,MAAM,QAAQ,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,EAAG,MAAM,CAAC,CAAA;AACpC,EAAA,MAAM,MAAA,GAAS,MAAA,CAAO,GAAA,CAAI,MAAM,CAAC,CAAA;AACjC,EAAA,MAAM,EAAA,GAAmB,EAAE,MAAA,EAAQ,CAAA,CAAE,QAAQ,IAAA,EAAM,CAAA,CAAE,YAAY,MAAA,EAAO;AACxE,EAAA,IAAI,CAAA,CAAE,MAAA,KAAW,MAAA,EAAW,EAAA,CAAG,SAAS,CAAA,CAAE,MAAA;AAC1C,EAAA,IAAI,CAAA,CAAE,OAAA,KAAY,MAAA,EAAW,EAAA,CAAG,UAAU,CAAA,CAAE,OAAA;AAC5C,EAAA,IAAI,CAAA,CAAE,QAAA,KAAa,MAAA,EAAW,EAAA,CAAG,WAAW,CAAA,CAAE,QAAA;AAC9C,EAAA,OAAO,SAAA,CAAM,MAAA,KAAW,GAAA,GAAM,KAAA,GAAQ,MAAA,EAAQ,WAAW,GAAA,GAAM,MAAA,GAAS,KAAA,EAAO,MAAA,EAAQ,EAAE,CAAA;AAC3F;AAEO,SAAS,SAAA,CACd,MAAA,EACA,KAAA,EACA,CAAA,GAAoF,EAAC,EAClE;AACnB,EAAA,OAAO,cAAA,CAAe,QAAQ,KAAA,EAA2B,CAAC,EAAE,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,IAAK,IAAI,CAAA;AAClF;AAWO,SAAS,YAAA,CACd,MAAA,EACA,KAAA,EACA,CAAA,GAQI,EAAC,EACK;AACV,EAAA,MAAM,QAAA,GAAW,EAAE,QAAA,IAAY,SAAA;AAC/B,EAAA,MAAM,MAAA,GAAS,EAAE,MAAA,KAAW,MAAA,GAAY,EAAC,GAAI,EAAE,MAAA,EAAQ,CAAA,CAAE,MAAA,EAAO;AAChE,EAAA,MAAM,GAAA,GAAM,WAAA,CAAY,KAAA,EAA2B,MAAA,EAAQ;AAAA,IACzD,GAAG,MAAA;AAAA,IACH,GAAI,EAAE,QAAA,KAAa,MAAA,GAAY,EAAC,GAAI,EAAE,QAAA,EAAU,CAAA,CAAE,QAAA,EAAS;AAAA,IAC3D,GAAI,EAAE,MAAA,KAAW,MAAA,GAAY,EAAC,GAAI,EAAE,MAAA,EAAQ,CAAA,CAAE,MAAA;AAAO,GACtD,CAAA;AACD,EAAA,MAAM,KAAA,GAAQ,CAAC,GAAG,IAAI,GAAA,CAAI,GAAA,CAAI,MAAA,CAAO,CAAC,EAAA,KAAO,EAAA,KAAO,MAAS,CAAC,CAAC,CAAA;AAC/D,EAAA,MAAM,KAAA,GAAQ,EAAE,KAAA,IAAS,SAAA;AACzB,EAAA,MAAM,EAAA,GAAK,EAAE,GAAG,MAAA,EAAQ,UAAU,SAAA,EAAmB;AACrD,EAAA,MAAM,IAAA,GAAO,UAAU,MAAA,EAAQ,KAAA,EAAO,EAAE,GAAG,EAAA,EAAI,OAAO,CAAA;AACtD,EAAA,MAAM,KAAA,GAAQ,SAAA,CAAU,MAAA,EAAQ,KAAA,EAAO,EAAE,GAAG,EAAA,EAAI,KAAA,EAAO,KAAA,KAAU,SAAA,GAAY,WAAA,GAAc,SAAA,EAAW,CAAA;AACtG,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,EAAG,MAAM,CAAA,IAAK,KAAA,CAAM,CAAC,CAAA,IAAK,QAAQ,CAAA;AAC3D,EAAA,MAAM,KAAK,CAAA,CAAE,UAAA,KAAe,SAAY,MAAA,GAAY,IAAA,CAAK,EAAE,UAAU,CAAA;AACrE,EAAA,MAAM,OAAA,GACJ,EAAA,KAAO,MAAA,GACH,MAAA,GACA,WAAA;AAAA,IACE,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,KAAM,IAAA,CAAK,GAAG,EAAE,SAAA,EAAW,IAAA,EAAM,CAAC,CAAA;AAAA,IAC9C,KAAA;AAAA,IACA,EAAA;AAAA,IACA;AAAA,GACF;AACN,EAAA,MAAM,IAAA,GAAO,IAAI,GAAA,CAAI,KAAA,CAAM,IAAI,CAAC,EAAA,EAAI,CAAA,KAAM,CAAC,EAAA,EAAI,OAAA,CAAQ,CAAC,CAAE,CAAC,CAAC,CAAA;AAC5D,EAAA,OAAO,GAAA,CAAI,GAAA,CAAI,CAAC,EAAA,KAAQ,EAAA,KAAO,SAAY,QAAA,GAAW,IAAA,CAAK,GAAA,CAAI,EAAE,CAAG,CAAA;AACtE","file":"chunk-UL5M6KDE.js","sourcesContent":["/**\n * Team colours for a chart background: each colour readable against it (3:1, WCAG 1.4.11) and distinct from the teams\n * before it (CIE76 ΔE). Internal, shared by the chart adapters that take a `background`; it depends only on\n * `contrast.ts` and `errors.ts`.\n */\nimport { contrast, hex6, mix, onColor } from \"./contrast.js\";\nimport { warn } from \"./errors.js\";\n\n/** WCAG 1.4.11 (non-text contrast): a graphical object needs 3:1 against what is next to it. */\nexport const MIN_CONTRAST = 3;\n/**\n * The smallest CIE76 ΔE (Lab distance) two teams' colours may sit apart. ΔE 2.3 is a just-noticeable difference for\n * two large patches side by side; a chart compares thin lines and small marks a legend away from each other, which\n * needs several times that (at 10, New England's and Kansas City's reds ended 10.2 apart on black). 20 is the\n * largest value measured (2026-10-18) to leave every team distinct with no warning: thresholds 10 to 20 on the full\n * NBA (30), NFL (32), MLB (30) and NHL (32) in league order, on #181a1b, #000000 and #ffffff, all gave zero warnings\n * with this search, and 20 is the cap set for it (test/team-palette.test.ts holds every one of those cells at 20).\n */\nexport const MIN_DELTA_E = 20;\n/** The step, as a fraction of the way to the target colour, of the readable and lightness mixes. */\nconst STEP = 0.05;\n\nconst lin = (v: number): number => {\n const s = v / 255;\n return s <= 0.04045 ? s / 12.92 : ((s + 0.055) / 1.055) ** 2.4;\n};\nconst f = (t: number): number => (t > 216 / 24389 ? Math.cbrt(t) : ((24389 / 27) * t) / 116 + 16 / 116);\n/** CIE Lab (D65) of a hex colour. */\nfunction lab(color: string): [number, number, number] {\n const n = Number.parseInt(hex6(color, { dropAlpha: true }).slice(1), 16);\n const [r, g, b] = [lin(n >> 16), lin((n >> 8) & 255), lin(n & 255)];\n const x = f((0.4124 * r + 0.3576 * g + 0.1805 * b) / 0.95047);\n const y = f(0.2126 * r + 0.7152 * g + 0.0722 * b);\n const z = f((0.0193 * r + 0.1192 * g + 0.9505 * b) / 1.08883);\n return [116 * y - 16, 500 * (x - y), 200 * (y - z)];\n}\nconst finv = (t: number): number => (t > 6 / 29 ? t ** 3 : 3 * (6 / 29) ** 2 * (t - 4 / 29));\nconst gamma = (v: number): string => {\n const c = Math.min(1, Math.max(0, v)); // out of gamut: clipped, and the hex is what gets measured\n const s = c <= 0.0031308 ? 12.92 * c : 1.055 * c ** (1 / 2.4) - 0.055;\n return Math.round(s * 255)\n .toString(16)\n .padStart(2, \"0\");\n};\n/** The hex colour of a CIE Lab (D65) triple, clipped to sRGB. */\nfunction fromLab([l, a, b]: readonly [number, number, number]): string {\n const fy = (l + 16) / 116;\n const [x, y, z] = [0.95047 * finv(fy + a / 500), finv(fy), 1.08883 * finv(fy - b / 200)];\n return `#${gamma(3.2406 * x - 1.5372 * y - 0.4986 * z)}${gamma(-0.9689 * x + 1.8758 * y + 0.0415 * z)}${gamma(0.0557 * x - 0.204 * y + 1.057 * z)}`;\n}\nconst dist = (p: readonly number[], q: readonly number[]): number =>\n Math.hypot((p[0] ?? 0) - (q[0] ?? 0), (p[1] ?? 0) - (q[1] ?? 0), (p[2] ?? 0) - (q[2] ?? 0));\n/** CIE76 ΔE: the Euclidean distance of two colours in Lab. */\nexport function deltaE(a: string, b: string): number {\n return dist(lab(a), lab(b));\n}\n\n// The synthetic search grid around a team colour, in LCh: lightness, hue and chroma steps. ponytail: a fixed grid of\n// about 5,000 points per base colour, scanned only for a team whose brand colours both clash (milliseconds per palette).\nconst L_STEPS = Array.from({ length: 25 }, (_, k) => (k % 2 === 0 ? 1 : -1) * 4 * Math.ceil(k / 2)); // 0, -4, 4, … ±48\nconst H_STEPS = Array.from({ length: 36 }, (_, k) => (k % 2 === 0 ? 1 : -1) * 10 * Math.ceil(k / 2)); // 0, -10, 10, … 180\nconst C_STEPS = [0, -15, 15, -30, 30, 45];\n/** Colours near `base`: its lightness, hue and chroma stepped, each clipped to sRGB. */\nfunction nearby(base: string): string[] {\n const [l, a, b] = lab(base);\n const c = Math.hypot(a, b);\n const h = Math.atan2(b, a);\n const out: string[] = [];\n for (const dl of L_STEPS)\n for (const dh of H_STEPS)\n for (const dc of C_STEPS) {\n const cc = Math.max(0, c + dc);\n const hh = h + (dh * Math.PI) / 180;\n out.push(fromLab([Math.min(100, Math.max(0, l + dl)), cc * Math.cos(hh), cc * Math.sin(hh)]));\n }\n return out;\n}\n\n/** `c`, else `alt`, else `c` mixed towards the background's ink until it reaches 3:1 against `bg`. */\nexport function readable(c: string, alt: string | null | undefined, bg: string): string {\n if (contrast(c, bg) >= MIN_CONTRAST) return c;\n if (alt != null && contrast(alt, bg) >= MIN_CONTRAST) return alt;\n const ink = onColor(bg);\n for (let t = STEP; t < 1; t += STEP) {\n const m = mix(c, ink, t);\n if (contrast(m, bg) >= MIN_CONTRAST) return m;\n }\n return ink;\n}\n\n/**\n * One colour per team for a chart on `background`, in order: each readable against it, and at least `MIN_DELTA_E`\n * from every earlier team's colour. A team whose readable colour is too close to an earlier one tries its other\n * colour (made readable); failing that, the colours near both (lightness, hue in LCh and chroma stepped) that are 3:1\n * and distinct, taking the one closest to the team's brand colour (ΔE; the first generated on a tie). Only when none\n * is left does it keep the readable colour and warn once. Deterministic: the same colours give the same palette. A\n * colour already readable and distinct is returned as it is.\n *\n * @param colors - each team's colour (`#rrggbb`).\n * @param alts - each team's other colour, or null.\n * @param labels - names for the warning (default: the positions).\n */\nexport function teamPalette(\n colors: readonly string[],\n alts: readonly (string | null | undefined)[],\n background: string,\n labels: readonly string[] = colors.map((_, i) => `#${i + 1}`),\n): string[] {\n const bg = hex6(background);\n const ink = onColor(bg);\n const out: string[] = [];\n const labs: [number, number, number][] = [];\n const clash = (c: string): number => {\n const p = lab(c);\n return labs.findIndex((q) => dist(p, q) < MIN_DELTA_E);\n };\n const ok = (c: string): boolean => contrast(c, bg) >= MIN_CONTRAST && clash(c) < 0;\n const keep = (c: string): void => {\n out.push(c);\n labs.push(lab(c));\n };\n colors.forEach((color, i) => {\n const alt = alts[i] ?? null;\n const first = readable(color, alt, bg);\n if (clash(first) < 0) return keep(first);\n const second = alt === null ? null : readable(alt, null, bg);\n if (second !== null && ok(second)) return keep(second);\n // the synthetic candidates, the one nearest the brand colour first\n const pool = [first];\n for (let t = STEP; t < 1; t += STEP) pool.push(mix(first, ink, t), mix(first, bg, t));\n pool.push(...nearby(first));\n if (second !== null) pool.push(...nearby(second));\n const brand = lab(color);\n let pick: string | undefined;\n let best = Number.POSITIVE_INFINITY;\n const seen = new Set<string>();\n for (const c of pool) {\n if (seen.has(c)) continue;\n seen.add(c);\n const d = dist(lab(c), brand);\n if (d < best && ok(c)) {\n pick = c;\n best = d;\n }\n }\n if (pick !== undefined) return keep(pick);\n const j = clash(first);\n warn(\n `team-palette:${bg}:${labels[j]}:${labels[i]}`,\n `${labels[i]} (${first}) stays within ΔE ${MIN_DELTA_E} of ${labels[j]} (${out[j]}) on ${bg}: no readable colour of it is distinct`,\n );\n keep(first);\n });\n return out;\n}\n","/** What the spec adapters (Plotly, Vega-Lite, ECharts) share: image sources, aspect ratios, row access, team colours. */\nimport { teamColorsSync } from \"./colors.js\";\nimport { hex6 } from \"./contrast.js\";\nimport { DownloadError, InputError } from \"./errors.js\";\nimport { HEADSHOT_ASPECT } from \"./headshots.js\";\nimport { type Kind, type PlaceOptions, type Placement, placeSync as place } from \"./placement.js\";\nimport { type Value, resolveSync } from \"./resolve.js\";\nimport { teamPalette } from \"./team-palette.js\";\nimport type { IdSystem, League, MarkType, SeasonInput, Variant, Which } from \"./types.js\";\n\nexport type { Placement } from \"./placement.js\";\nexport { checkAlpha, checkHeight, placeSync as place } from \"./placement.js\";\n\n/** What the module-level test hooks return. Positional on purpose (cheap to assert); the contract shim in test/adapters.contract.test.ts converts. */\nexport type DrawnMark = readonly [id: string, x: unknown, y: unknown, height: number, url: string];\nexport type DrawnAxisMark = readonly [id: string, index: number, height: number];\n\nexport type Row = Record<string, unknown>;\n/** Options of `withLogos` / `withWordmarks` (each adapter adds its own subplot options). */\nexport interface MarkOptions {\n /** Name of the row column holding each mark's x position. */\n x: string;\n /** Name of the row column holding each mark's y position. */\n y: string;\n /** Name of the row column holding the team (abbreviation, name or id; see `idSystem`). */\n team: string;\n /** The league the teams (or players) belong to, e.g. \"nfl\". */\n league: League;\n /** A season (number or string) for every row, or the name of a row column holding each row's season. */\n season?: SeasonInput;\n /** Mark height as a fraction of the plot area's height, in (0, 1]. Default 0.1. */\n height?: number;\n /** Opacity in [0, 1]. Default 1. */\n alpha?: number;\n /** Logo variant, e.g. \"dark\". Default \"default\". */\n variant?: Variant;\n /** How the `team` values are read. Default \"auto\". */\n idSystem?: IdSystem;\n /** url → data URI map from `embedSources`, to inline the images. */\n embed?: ReadonlyMap<string, string>;\n}\n/** Options of `withHeadshots`. */\nexport interface HeadshotOptions {\n /** Name of the row column holding each headshot's x position. */\n x: string;\n /** Name of the row column holding each headshot's y position. */\n y: string;\n /** Name of the row column holding the player id. */\n player: string;\n /** The league the teams (or players) belong to, e.g. \"nfl\". */\n league: League;\n /** Headshot height as a fraction of the plot area's height, in (0, 1]. Default 0.1. */\n height?: number;\n /** Opacity in [0, 1]. Default 1. */\n alpha?: number;\n /** What the `player` ids are: ESPN athlete ids, or nflverse gsis ids (needs `loadGsis()` first). Default \"espn\". */\n idSystem?: \"espn\" | \"gsis\";\n /** url → data URI map from `embedSources`, to inline the images. */\n embed?: ReadonlyMap<string, string>;\n}\n/** Options of `withAxisLogos`: the categories of the axis are the teams. */\nexport interface AxisOptions {\n /** The league the teams (or players) belong to, e.g. \"nfl\". */\n league: League;\n /** The season the axis' teams are resolved for. */\n season?: SeasonInput;\n /** Image height as a fraction of the plot area's height, in (0, 1]. Default 0.1. */\n height?: number;\n /** Logo variant, e.g. \"dark\". Default \"default\". */\n variant?: Variant;\n /** \"logo\" (default) or \"wordmark\". */\n markType?: MarkType;\n /** How the axis categories are read. Default \"auto\". */\n idSystem?: IdSystem;\n /** url → data URI map from `embedSources`, to inline the images. */\n embed?: ReadonlyMap<string, string>;\n}\n\nexport function aspect(p: Placement): number {\n return p.aspect ?? HEADSHOT_ASPECT;\n}\n\nexport function axisLetter(axis: string): \"x\" | \"y\" {\n if (axis !== \"x\" && axis !== \"y\")\n throw new InputError(`axis must be \"x\" or \"y\", got ${JSON.stringify(axis)}`);\n return axis;\n}\n\n// encodeURI keeps the URL punctuation Python's SAFE_URL keeps (-._~:/?#[]@!$&()*+,;=%) and escapes the rest, so an\n// unvalidated URL still cannot close an attribute the adapter writes it into. `%` is re-escaped only when it does not\n// already start a %XX escape.\nexport function imageSource(p: Placement, embed?: ReadonlyMap<string, string>): string {\n return embed?.get(p.url) ?? encodeURI(p.url).replace(/%25([0-9A-Fa-f]{2})/g, \"%$1\");\n}\nexport function imageSources(ps: readonly Placement[], embed?: ReadonlyMap<string, string>): string[] {\n return ps.map((p) => imageSource(p, embed));\n}\n\n/** Data URIs for each distinct url, fetched once each. The one async helper of the adapters: call it, then pass the map as `embed`. */\nexport async function embedSources(\n urls: Iterable<string>,\n fetchFn: typeof fetch = fetch,\n): Promise<Map<string, string>> {\n const out = new Map<string, string>();\n for (const url of new Set(urls)) {\n const res = await fetchFn(url);\n if (!res.ok) throw new DownloadError(`embed: ${url} answered ${res.status}`, url, res.status);\n // `||`: an empty content-type header falls back to the inferred type too\n const mime =\n res.headers.get(\"content-type\")?.split(\";\")[0]?.trim() ||\n (url.toLowerCase().endsWith(\".svg\") ? \"image/svg+xml\" : \"application/octet-stream\");\n const bytes = new Uint8Array(await res.arrayBuffer());\n let bin = \"\";\n for (const b of bytes) bin += String.fromCharCode(b);\n out.set(url, `data:${mime};base64,${btoa(bin)}`);\n }\n return out;\n}\n\n// Cells are typed Value for placeSync; a Date (temporal x) or any other cell passes through it untouched.\nexport function column(rows: readonly Row[], name: string, what: string): Value[] {\n if (rows.length > 0 && !rows.some((r) => name in r))\n throw new InputError(`${what} column ${JSON.stringify(name)} is not in rows`);\n return rows.map((r) => r[name] as Value);\n}\n\nexport function seasons(\n rows: readonly Row[],\n season: MarkOptions[\"season\"],\n): readonly SeasonInput[] | SeasonInput {\n if (typeof season === \"string\" && rows.some((r) => season in r))\n return rows.map((r) => r[season] as SeasonInput);\n return season as SeasonInput;\n}\n\n/** placeSync over row columns (x, y, team or player, season value or column), leaving out options the caller left out. */\nexport function markPlacements(\n rows: readonly Row[],\n kind: Kind,\n o: MarkOptions | HeadshotOptions,\n): Placement[] {\n const xs = column(rows, o.x, \"x\");\n const ys = column(rows, o.y, \"y\");\n if (kind === \"headshot\") {\n const h = o as HeadshotOptions;\n return place(xs, ys, column(rows, h.player, \"player\"), {\n league: h.league,\n kind,\n idSystem: h.idSystem ?? \"espn\",\n });\n }\n const m = o as MarkOptions;\n const po: PlaceOptions = { league: m.league, kind };\n if (m.season !== undefined) po.season = seasons(rows, m.season);\n if (m.variant !== undefined) po.variant = m.variant;\n if (m.idSystem !== undefined) po.idSystem = m.idSystem;\n return place(xs, ys, column(rows, m.team, \"team\"), po);\n}\n/** placeSync over a category axis: label i sits at index i along `letter` and 0 across, so `p.x`/`p.y` is its tick index. */\nexport function axisPlacements(labels: readonly string[], letter: \"x\" | \"y\", o: AxisOptions): Placement[] {\n const index = labels.map((_, i) => i);\n const across = labels.map(() => 0);\n const po: PlaceOptions = { league: o.league, kind: o.markType ?? \"logo\" };\n if (o.season !== undefined) po.season = o.season;\n if (o.variant !== undefined) po.variant = o.variant;\n if (o.idSystem !== undefined) po.idSystem = o.idSystem;\n return place(letter === \"x\" ? index : across, letter === \"x\" ? across : index, labels, po);\n}\n\nexport function colorList(\n league: League,\n teams: readonly unknown[],\n o: { which?: \"primary\" | \"secondary\"; season?: SeasonInput; idSystem?: IdSystem } = {},\n): (string | null)[] {\n return teamColorsSync(league, teams as readonly Value[], o).map((c) => c ?? null);\n}\n\n/**\n * The shared team palette behind every adapter's `teamColorPalette`: one colour per entry of `teams`, in order. Each\n * value is resolved to its team (one warning for the values that do not resolve) and takes that team's `which`\n * colour, else its other colour, else `fallback`. With `background`, the colours are the shared palette\n * (`teamPalette`: 3:1 against it, ΔE 20 apart) over the distinct resolved teams in order of first appearance, so\n * aliases of one team (\"KC\", 12, \"Kansas City Chiefs\") share one colour, and a value that does not resolve takes\n * `fallback` with no palette slot, so it never moves a real team's colour. Python's `perspective._palette` and\n * `pydeck._end_colors`.\n */\nexport function colorPalette(\n league: League,\n teams: readonly unknown[],\n o: {\n which?: Which;\n season?: SeasonInput;\n idSystem?: IdSystem;\n fallback?: string;\n background?: string;\n /** Throw UnresolvedTeamError for a value that does not resolve, instead of warning. Default false. */\n strict?: boolean;\n } = {},\n): string[] {\n const fallback = o.fallback ?? \"#808080\";\n const season = o.season === undefined ? {} : { season: o.season };\n const ids = resolveSync(teams as readonly Value[], league, {\n ...season,\n ...(o.idSystem === undefined ? {} : { idSystem: o.idSystem }),\n ...(o.strict === undefined ? {} : { strict: o.strict }),\n });\n const known = [...new Set(ids.filter((id) => id !== undefined))];\n const which = o.which ?? \"primary\";\n const co = { ...season, idSystem: \"team_id\" as const };\n const main = colorList(league, known, { ...co, which });\n const other = colorList(league, known, { ...co, which: which === \"primary\" ? \"secondary\" : \"primary\" });\n const colors = main.map((c, i) => c ?? other[i] ?? fallback);\n const bg = o.background === undefined ? undefined : hex6(o.background);\n const palette =\n bg === undefined\n ? colors\n : teamPalette(\n colors.map((c) => hex6(c, { dropAlpha: true })),\n other,\n bg,\n known,\n );\n const byId = new Map(known.map((id, j) => [id, palette[j]!]));\n return ids.map((id) => (id === undefined ? fallback : byId.get(id)!));\n}\n"]}
@@ -0,0 +1,10 @@
1
+ // src/content-id.ts
2
+ function contentId(prefix, text) {
3
+ let h = 2166136261;
4
+ for (let i = 0; i < text.length; i++) h = Math.imul(h ^ text.charCodeAt(i), 16777619);
5
+ return `${prefix}-${(h >>> 0).toString(36)}`;
6
+ }
7
+
8
+ export { contentId };
9
+ //# sourceMappingURL=chunk-WQT4IVLX.js.map
10
+ //# sourceMappingURL=chunk-WQT4IVLX.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/content-id.ts"],"names":[],"mappings":";AACO,SAAS,SAAA,CAAU,QAAgB,IAAA,EAAsB;AAC9D,EAAA,IAAI,CAAA,GAAI,UAAA;AACR,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,QAAQ,CAAA,EAAA,EAAK,CAAA,GAAI,IAAA,CAAK,IAAA,CAAK,CAAA,GAAI,IAAA,CAAK,UAAA,CAAW,CAAC,GAAG,QAAU,CAAA;AACtF,EAAA,OAAO,GAAG,MAAM,CAAA,CAAA,EAAA,CAAK,MAAM,CAAA,EAAG,QAAA,CAAS,EAAE,CAAC,CAAA,CAAA;AAC5C","file":"chunk-WQT4IVLX.js","sourcesContent":["/** FNV-1a: an id that is a function of the content it names, stable across SSR, hydration and prerender. */\nexport function contentId(prefix: string, text: string): string {\n let h = 0x811c9dc5;\n for (let i = 0; i < text.length; i++) h = Math.imul(h ^ text.charCodeAt(i), 0x01000193);\n return `${prefix}-${(h >>> 0).toString(36)}`;\n}\n"]}
@@ -551,6 +551,6 @@ async function teamColors(league, teams, opts = {}) {
551
551
  return teamColorsSync(league, teams, opts);
552
552
  }
553
553
 
554
- export { ESPN_HEADSHOT_LEAGUES, EXPLICIT_ONLY, HEADSHOT_ASPECT, INDEX_VERSION, LEAGUES, MANIFEST_LAST_MODIFIED, PRIORITY, VARIANTS, archiveUrl, getLeagueSync, headshotUrl, latestSeason, loadGsis, loadLeague, mlbHeadshotUrl, nbaHeadshotUrl, nhlHeadshotUrl, normSeason, normValue, palette, preloadAll, resolve, resolveSync, seasonBounds, suggest, teamColorPairSync, teamColors, teamColorsSync, wnbaHeadshotUrl };
555
- //# sourceMappingURL=chunk-TAXO3VXH.js.map
556
- //# sourceMappingURL=chunk-TAXO3VXH.js.map
554
+ export { ESPN_HEADSHOT_LEAGUES, EXPLICIT_ONLY, HEADSHOT_ASPECT, INDEX_VERSION, LEAGUES, MANIFEST_LAST_MODIFIED, PRIORITY, VARIANTS, archiveUrl, checkLeague, getLeagueSync, headshotUrl, latestSeason, loadGsis, loadLeague, mlbHeadshotUrl, nbaHeadshotUrl, nhlHeadshotUrl, normSeason, normValue, palette, preloadAll, resolve, resolveSync, seasonBounds, suggest, teamColorPairSync, teamColors, teamColorsSync, wnbaHeadshotUrl };
555
+ //# sourceMappingURL=chunk-ZAEQXFJM.js.map
556
+ //# sourceMappingURL=chunk-ZAEQXFJM.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/types.ts","../src/data/index.ts","../src/index-data.ts","../src/normalize.ts","../src/headshots.ts","../src/resolve.ts","../src/colors.ts"],"names":[],"mappings":"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","file":"chunk-TAXO3VXH.js","sourcesContent":["export type { League } from \"./data/index.js\";\n\ndeclare const brand: unique symbol;\n/** A canonical SDV team id. Only `resolve()` makes one; a raw abbreviation is a `string`, not a `TeamId`. */\nexport type TeamId = string & { readonly [brand]: \"TeamId\" };\nexport const asTeamId = (s: string): TeamId => s as TeamId;\n\nexport const PRIORITY = [\n \"team_id\",\n \"espn\",\n \"espn_abbr\",\n \"nhl\",\n \"nflverse\",\n \"mlbstats\",\n \"nba_api\",\n \"hockeytech\",\n \"ncaa\",\n \"pff\",\n \"cricinfo\",\n \"cfbd\",\n \"bref\",\n \"sportsipy\",\n \"fangraphs\",\n \"sdvplotr\",\n \"name\",\n] as const;\nexport const EXPLICIT_ONLY = [\"nhl_id\"] as const;\nexport type IdSystem = \"auto\" | (typeof PRIORITY)[number] | (typeof EXPLICIT_ONLY)[number];\nexport type MarkType = \"logo\" | \"wordmark\";\nexport type Which = \"primary\" | \"secondary\";\n/** \"default\" and \"dark\" always exist; other archive variant names are accepted and checked at runtime. */\nexport type Variant = \"default\" | \"dark\" | (string & {});\nexport type SeasonInput = number | string | null | undefined;\nexport type HeadshotIdSystem = \"espn\" | \"gsis\";\n","// generated by tools/build-index — do not edit\nexport const LEAGUES = [\"aaf\",\"ahl\",\"cfb\",\"cricket\",\"echl\",\"mbb\",\"milb\",\"mlb\",\"nba\",\"nbagl\",\"ncaa_baseball\",\"ncaa_mhockey\",\"ncaa_softball\",\"ncaa_whockey\",\"nfl\",\"nhl\",\"ohl\",\"phf\",\"pwhl\",\"qmjhl\",\"soccer\",\"ufl\",\"usfl\",\"ushl\",\"wbb\",\"whl\",\"wnba\",\"xfl\"] as const;\nexport type League = (typeof LEAGUES)[number];\nexport const INDEX_VERSION: string = \"1c025b69f8cf\";\nexport const MANIFEST_LAST_MODIFIED: string = \"2026-10-06\";\nexport const VARIANTS = [\"alternate\",\"cap_on_dark\",\"cap_on_light\",\"cricinfo\",\"crop_64px\",\"dark\",\"default\",\"grayscale\",\"large\",\"logo2\",\"medium\",\"on_dark\",\"on_light\",\"primary_logo_black\",\"primary_logo_on_black_color\",\"primary_logo_on_primary_color\",\"primary_logo_on_secondary_color\",\"primary_logo_on_white_color\",\"primary_logo_white\",\"primary_on_dark\",\"primary_on_light\",\"scoreboard\",\"scoreboard_dark\",\"secondary_logo_black\",\"secondary_logo_on_black_color\",\"secondary_logo_on_primary_color\",\"secondary_logo_on_secondary_color\",\"secondary_logo_on_white_color\",\"secondary_logo_white\",\"sport_pictogram\",\"squared\",\"team_strip\"] as const;\nexport const INDEX_FIRST_SEASON: number | null = 1871; export const INDEX_LAST_ALIAS_SEASON: number | null = 2027;\nexport const LEAGUE_META: Readonly<Record<League, { latestSeason: number | null; firstSeason: number | null }>> = {\"aaf\":{\"latestSeason\":null,\"firstSeason\":null},\"ahl\":{\"latestSeason\":null,\"firstSeason\":null},\"cfb\":{\"latestSeason\":null,\"firstSeason\":null},\"cricket\":{\"latestSeason\":null,\"firstSeason\":null},\"echl\":{\"latestSeason\":null,\"firstSeason\":null},\"mbb\":{\"latestSeason\":null,\"firstSeason\":null},\"milb\":{\"latestSeason\":null,\"firstSeason\":null},\"mlb\":{\"latestSeason\":2026,\"firstSeason\":1871},\"nba\":{\"latestSeason\":2027,\"firstSeason\":1947},\"nbagl\":{\"latestSeason\":null,\"firstSeason\":null},\"ncaa_baseball\":{\"latestSeason\":null,\"firstSeason\":null},\"ncaa_mhockey\":{\"latestSeason\":null,\"firstSeason\":null},\"ncaa_softball\":{\"latestSeason\":null,\"firstSeason\":null},\"ncaa_whockey\":{\"latestSeason\":null,\"firstSeason\":null},\"nfl\":{\"latestSeason\":2026,\"firstSeason\":1920},\"nhl\":{\"latestSeason\":1997,\"firstSeason\":null},\"ohl\":{\"latestSeason\":null,\"firstSeason\":null},\"phf\":{\"latestSeason\":null,\"firstSeason\":null},\"pwhl\":{\"latestSeason\":null,\"firstSeason\":null},\"qmjhl\":{\"latestSeason\":null,\"firstSeason\":null},\"soccer\":{\"latestSeason\":null,\"firstSeason\":null},\"ufl\":{\"latestSeason\":2026,\"firstSeason\":2024},\"usfl\":{\"latestSeason\":null,\"firstSeason\":null},\"ushl\":{\"latestSeason\":null,\"firstSeason\":null},\"wbb\":{\"latestSeason\":null,\"firstSeason\":null},\"whl\":{\"latestSeason\":null,\"firstSeason\":null},\"wnba\":{\"latestSeason\":2026,\"firstSeason\":1997},\"xfl\":{\"latestSeason\":2023,\"firstSeason\":2020}};\nexport interface Team { league: League; team_id: string; abbr: string | null; name: string | null; short_name: string | null; location: string | null; program: string | null; conference_id: string | null; conference: string | null; color_primary: string | null; color_secondary: string | null; color_source: string | null }\nexport interface Alias { id_system: string; value: string; team_id: string; valid_from: number | null; valid_to: number | null }\nexport interface MarkRow { team_id: string; mark_type: \"logo\" | \"wordmark\"; variant: string; valid_from: number | null; valid_to: number | null; source: string; source_rank: number; first_seen: string; sha256: string; ext: string; width: number | null; height: number | null; archive_url: string }\n/** Shard row: archive_url is derived by the loader (archiveUrl), never stored. */\nexport type StoredMark = Omit<MarkRow, \"archive_url\">;\nexport interface LeagueData { teams: readonly Team[]; aliases: readonly Alias[]; marks: readonly MarkRow[] }\nexport const ARCHIVE_BASE: string = \"https://sdv.nyc3.cdn.digitaloceanspaces.com/assets/public/sha256\";\n/** Content-addressed archive URL of a mark (<base>/<sha[:2]>/<sha>.<ext>, Python _images.mark_file). */\nexport function archiveUrl(sha256: string, ext: string): string { return `${ARCHIVE_BASE}/${sha256.slice(0, 2)}/${sha256}.${ext}`; }\nexport const loaders: Readonly<Record<League, () => Promise<LeagueData>>> = {\n \"aaf\": async () => { const [t, a, m] = await Promise.all([import(\"./teams/aaf.js\"), import(\"./aliases/aaf.js\"), import(\"./marks/aaf.js\")]); return { teams: t.teams, aliases: a.aliases, marks: m.marks.map((r) => ({ ...r, archive_url: archiveUrl(r.sha256, r.ext) })) }; },\n \"ahl\": async () => { const [t, a, m] = await Promise.all([import(\"./teams/ahl.js\"), import(\"./aliases/ahl.js\"), import(\"./marks/ahl.js\")]); return { teams: t.teams, aliases: a.aliases, marks: m.marks.map((r) => ({ ...r, archive_url: archiveUrl(r.sha256, r.ext) })) }; },\n \"cfb\": async () => { const [t, a, m] = await Promise.all([import(\"./teams/cfb.js\"), import(\"./aliases/cfb.js\"), import(\"./marks/cfb.js\")]); return { teams: t.teams, aliases: a.aliases, marks: m.marks.map((r) => ({ ...r, archive_url: archiveUrl(r.sha256, r.ext) })) }; },\n \"cricket\": async () => { const [t, a, m] = await Promise.all([import(\"./teams/cricket.js\"), import(\"./aliases/cricket.js\"), import(\"./marks/cricket.js\")]); return { teams: t.teams, aliases: a.aliases, marks: m.marks.map((r) => ({ ...r, archive_url: archiveUrl(r.sha256, r.ext) })) }; },\n \"echl\": async () => { const [t, a, m] = await Promise.all([import(\"./teams/echl.js\"), import(\"./aliases/echl.js\"), import(\"./marks/echl.js\")]); return { teams: t.teams, aliases: a.aliases, marks: m.marks.map((r) => ({ ...r, archive_url: archiveUrl(r.sha256, r.ext) })) }; },\n \"mbb\": async () => { const [t, a, m] = await Promise.all([import(\"./teams/mbb.js\"), import(\"./aliases/mbb.js\"), import(\"./marks/mbb.js\")]); return { teams: t.teams, aliases: a.aliases, marks: m.marks.map((r) => ({ ...r, archive_url: archiveUrl(r.sha256, r.ext) })) }; },\n \"milb\": async () => { const [t, a, m] = await Promise.all([import(\"./teams/milb.js\"), import(\"./aliases/milb.js\"), import(\"./marks/milb.js\")]); return { teams: t.teams, aliases: a.aliases, marks: m.marks.map((r) => ({ ...r, archive_url: archiveUrl(r.sha256, r.ext) })) }; },\n \"mlb\": async () => { const [t, a, m] = await Promise.all([import(\"./teams/mlb.js\"), import(\"./aliases/mlb.js\"), import(\"./marks/mlb.js\")]); return { teams: t.teams, aliases: a.aliases, marks: m.marks.map((r) => ({ ...r, archive_url: archiveUrl(r.sha256, r.ext) })) }; },\n \"nba\": async () => { const [t, a, m] = await Promise.all([import(\"./teams/nba.js\"), import(\"./aliases/nba.js\"), import(\"./marks/nba.js\")]); return { teams: t.teams, aliases: a.aliases, marks: m.marks.map((r) => ({ ...r, archive_url: archiveUrl(r.sha256, r.ext) })) }; },\n \"nbagl\": async () => { const [t, a, m] = await Promise.all([import(\"./teams/nbagl.js\"), import(\"./aliases/nbagl.js\"), import(\"./marks/nbagl.js\")]); return { teams: t.teams, aliases: a.aliases, marks: m.marks.map((r) => ({ ...r, archive_url: archiveUrl(r.sha256, r.ext) })) }; },\n \"ncaa_baseball\": async () => { const [t, a, m] = await Promise.all([import(\"./teams/ncaa_baseball.js\"), import(\"./aliases/ncaa_baseball.js\"), import(\"./marks/ncaa_baseball.js\")]); return { teams: t.teams, aliases: a.aliases, marks: m.marks.map((r) => ({ ...r, archive_url: archiveUrl(r.sha256, r.ext) })) }; },\n \"ncaa_mhockey\": async () => { const [t, a, m] = await Promise.all([import(\"./teams/ncaa_mhockey.js\"), import(\"./aliases/ncaa_mhockey.js\"), import(\"./marks/ncaa_mhockey.js\")]); return { teams: t.teams, aliases: a.aliases, marks: m.marks.map((r) => ({ ...r, archive_url: archiveUrl(r.sha256, r.ext) })) }; },\n \"ncaa_softball\": async () => { const [t, a, m] = await Promise.all([import(\"./teams/ncaa_softball.js\"), import(\"./aliases/ncaa_softball.js\"), import(\"./marks/ncaa_softball.js\")]); return { teams: t.teams, aliases: a.aliases, marks: m.marks.map((r) => ({ ...r, archive_url: archiveUrl(r.sha256, r.ext) })) }; },\n \"ncaa_whockey\": async () => { const [t, a, m] = await Promise.all([import(\"./teams/ncaa_whockey.js\"), import(\"./aliases/ncaa_whockey.js\"), import(\"./marks/ncaa_whockey.js\")]); return { teams: t.teams, aliases: a.aliases, marks: m.marks.map((r) => ({ ...r, archive_url: archiveUrl(r.sha256, r.ext) })) }; },\n \"nfl\": async () => { const [t, a, m] = await Promise.all([import(\"./teams/nfl.js\"), import(\"./aliases/nfl.js\"), import(\"./marks/nfl.js\")]); return { teams: t.teams, aliases: a.aliases, marks: m.marks.map((r) => ({ ...r, archive_url: archiveUrl(r.sha256, r.ext) })) }; },\n \"nhl\": async () => { const [t, a, m] = await Promise.all([import(\"./teams/nhl.js\"), import(\"./aliases/nhl.js\"), import(\"./marks/nhl.js\")]); return { teams: t.teams, aliases: a.aliases, marks: m.marks.map((r) => ({ ...r, archive_url: archiveUrl(r.sha256, r.ext) })) }; },\n \"ohl\": async () => { const [t, a, m] = await Promise.all([import(\"./teams/ohl.js\"), import(\"./aliases/ohl.js\"), import(\"./marks/ohl.js\")]); return { teams: t.teams, aliases: a.aliases, marks: m.marks.map((r) => ({ ...r, archive_url: archiveUrl(r.sha256, r.ext) })) }; },\n \"phf\": async () => { const [t, a, m] = await Promise.all([import(\"./teams/phf.js\"), import(\"./aliases/phf.js\"), import(\"./marks/phf.js\")]); return { teams: t.teams, aliases: a.aliases, marks: m.marks.map((r) => ({ ...r, archive_url: archiveUrl(r.sha256, r.ext) })) }; },\n \"pwhl\": async () => { const [t, a, m] = await Promise.all([import(\"./teams/pwhl.js\"), import(\"./aliases/pwhl.js\"), import(\"./marks/pwhl.js\")]); return { teams: t.teams, aliases: a.aliases, marks: m.marks.map((r) => ({ ...r, archive_url: archiveUrl(r.sha256, r.ext) })) }; },\n \"qmjhl\": async () => { const [t, a, m] = await Promise.all([import(\"./teams/qmjhl.js\"), import(\"./aliases/qmjhl.js\"), import(\"./marks/qmjhl.js\")]); return { teams: t.teams, aliases: a.aliases, marks: m.marks.map((r) => ({ ...r, archive_url: archiveUrl(r.sha256, r.ext) })) }; },\n \"soccer\": async () => { const [t, a, m] = await Promise.all([import(\"./teams/soccer.js\"), import(\"./aliases/soccer.js\"), import(\"./marks/soccer.js\")]); return { teams: t.teams, aliases: a.aliases, marks: m.marks.map((r) => ({ ...r, archive_url: archiveUrl(r.sha256, r.ext) })) }; },\n \"ufl\": async () => { const [t, a, m] = await Promise.all([import(\"./teams/ufl.js\"), import(\"./aliases/ufl.js\"), import(\"./marks/ufl.js\")]); return { teams: t.teams, aliases: a.aliases, marks: m.marks.map((r) => ({ ...r, archive_url: archiveUrl(r.sha256, r.ext) })) }; },\n \"usfl\": async () => { const [t, a, m] = await Promise.all([import(\"./teams/usfl.js\"), import(\"./aliases/usfl.js\"), import(\"./marks/usfl.js\")]); return { teams: t.teams, aliases: a.aliases, marks: m.marks.map((r) => ({ ...r, archive_url: archiveUrl(r.sha256, r.ext) })) }; },\n \"ushl\": async () => { const [t, a, m] = await Promise.all([import(\"./teams/ushl.js\"), import(\"./aliases/ushl.js\"), import(\"./marks/ushl.js\")]); return { teams: t.teams, aliases: a.aliases, marks: m.marks.map((r) => ({ ...r, archive_url: archiveUrl(r.sha256, r.ext) })) }; },\n \"wbb\": async () => { const [t, a, m] = await Promise.all([import(\"./teams/wbb.js\"), import(\"./aliases/wbb.js\"), import(\"./marks/wbb.js\")]); return { teams: t.teams, aliases: a.aliases, marks: m.marks.map((r) => ({ ...r, archive_url: archiveUrl(r.sha256, r.ext) })) }; },\n \"whl\": async () => { const [t, a, m] = await Promise.all([import(\"./teams/whl.js\"), import(\"./aliases/whl.js\"), import(\"./marks/whl.js\")]); return { teams: t.teams, aliases: a.aliases, marks: m.marks.map((r) => ({ ...r, archive_url: archiveUrl(r.sha256, r.ext) })) }; },\n \"wnba\": async () => { const [t, a, m] = await Promise.all([import(\"./teams/wnba.js\"), import(\"./aliases/wnba.js\"), import(\"./marks/wnba.js\")]); return { teams: t.teams, aliases: a.aliases, marks: m.marks.map((r) => ({ ...r, archive_url: archiveUrl(r.sha256, r.ext) })) }; },\n \"xfl\": async () => { const [t, a, m] = await Promise.all([import(\"./teams/xfl.js\"), import(\"./aliases/xfl.js\"), import(\"./marks/xfl.js\")]); return { teams: t.teams, aliases: a.aliases, marks: m.marks.map((r) => ({ ...r, archive_url: archiveUrl(r.sha256, r.ext) })) }; },\n};\n","import {\n INDEX_FIRST_SEASON,\n INDEX_LAST_ALIAS_SEASON,\n LEAGUES,\n LEAGUE_META,\n type League,\n type LeagueData,\n loaders,\n} from \"./data/index.js\";\nimport { InputError } from \"./errors.js\";\nimport { loadGsis } from \"./headshots.js\";\n\nconst loaded = new Map<League, LeagueData>();\nconst pending = new Map<League, Promise<LeagueData>>();\n\nexport function checkLeague(league: string): asserts league is League {\n if (!(LEAGUES as readonly string[]).includes(league))\n throw new InputError(`unknown league ${JSON.stringify(league)}; known leagues: ${LEAGUES.join(\", \")}`);\n}\n/**\n * Load a league's bundled teams, aliases and marks (one code-split chunk; nothing is downloaded). Every `*Sync`\n * function needs it first. Async throughout: an unknown league rejects (never throws synchronously); a failed chunk\n * load can be retried.\n *\n * @example\n * ```ts\n * import { loadLeague } from \"@sportsdataverse/sdvplot\";\n *\n * const nfl = await loadLeague(\"nfl\");\n * nfl.teams.find((t) => t.abbr === \"KC\");\n * ```\n */\nexport async function loadLeague(league: League): Promise<LeagueData> {\n checkLeague(league);\n const hit = loaded.get(league);\n if (hit) return hit;\n let p = pending.get(league);\n if (!p) {\n p = loaders[league]().then(\n (d) => {\n loaded.set(league, d);\n pending.delete(league);\n return d;\n },\n (e: unknown) => {\n pending.delete(league);\n throw e;\n },\n );\n pending.set(league, p);\n }\n return p;\n}\n/** Every league shard plus the gsis map, so every *Sync variant works afterwards. */\nexport async function preloadAll(): Promise<void> {\n await Promise.all([...LEAGUES.map(loadLeague), loadGsis()]);\n}\nexport function getLeagueSync(league: League): LeagueData {\n checkLeague(league);\n const d = loaded.get(league);\n if (!d)\n throw new InputError(\n `league ${league} is not loaded; await loadLeague(\"${league}\") or preloadAll() before calling the *Sync variant`,\n );\n return d;\n}\n/** Port of `_index.season_bounds`: [first, last]; last = max(latest alias season, next year). */\nexport function seasonBounds(league?: League): readonly [number, number] | null {\n if (INDEX_FIRST_SEASON === null || INDEX_LAST_ALIAS_SEASON === null) return null;\n const last = Math.max(INDEX_LAST_ALIAS_SEASON, new Date().getFullYear() + 1);\n const first = league ? (LEAGUE_META[league].firstSeason ?? INDEX_FIRST_SEASON) : INDEX_FIRST_SEASON;\n return [first, last];\n}\n/**\n * The latest season any dated alias of `league` names (the last relocation or rename the index records), or `null`\n * when no alias is dated. It is not the current season: the NHL's is 1997. A value resolved without a season is\n * matched at this season first.\n */\nexport const latestSeason = (league: League): number | null => LEAGUE_META[league].latestSeason;\n","import type { League } from \"./data/index.js\";\nimport { InputError } from \"./errors.js\";\nimport { seasonBounds } from \"./index-data.js\";\nimport type { SeasonInput } from \"./types.js\";\n\nconst FLOAT_ID = /^-?\\d+\\.0+$/;\nconst PUNCT: Record<string, string> = { \"‘\": \"'\", \"’\": \"'\", \"–\": \"-\", \"—\": \"-\" };\n\n/** Port of `_normalize.norm_value`: trimmed, accents + typographic punctuation folded, case-folded, integral numbers without \".0\". */\nexport function normValue(value: unknown): string | null {\n if (value === null || value === undefined) return null;\n if (typeof value === \"boolean\") return String(value);\n if (typeof value === \"bigint\") return value.toString();\n if (typeof value === \"number\") return Number.isNaN(value) ? null : String(value);\n let s = String(value).trim();\n // biome-ignore lint/suspicious/noControlCharactersInRegex: ASCII fast-path test\n if (!/^[\\x00-\\x7F]*$/.test(s))\n s = s\n .replace(/[‘’–—]/g, (c) => PUNCT[c] ?? c)\n .normalize(\"NFKD\")\n .replace(/\\p{M}/gu, \"\");\n s = s.toLowerCase().replace(/ß/g, \"ss\").replace(/ς/g, \"σ\"); // Python casefold ≈ toLowerCase for these inputs; the oracle (Task 7) confirms\n if (FLOAT_ID.test(s)) s = s.split(\".\")[0] as string;\n return s || null;\n}\n\nexport function checkSeason(year: number, league?: League): void {\n const b = seasonBounds(league);\n if (b && !(b[0] <= year && year <= b[1]))\n throw new InputError(\n `season ${year} is outside the seasons sdvplot knows${league ? ` for ${league}` : \"\"} (${b[0]} to ${b[1]}); pass a year such as 2020`,\n );\n}\n\nconst SPLIT = /^\\s*(\\d{4})\\s*[-/]\\s*(\\d{2}|\\d{4})\\s*$/;\nexport function normSeason(value: SeasonInput, league?: League): number | null {\n if (value === null || value === undefined) return null;\n let year: number | null = null;\n if (typeof value === \"number\") {\n if (Number.isNaN(value)) return null;\n if (Number.isInteger(value)) year = value;\n } else if (/^\\d+$/.test(value.trim())) year = Number.parseInt(value.trim(), 10);\n if (year === null) {\n const m = typeof value === \"string\" ? SPLIT.exec(value) : null;\n const hint = m\n ? `; for a split season pass its ending year (${Number(m[1]) + 1} for '${String(value).trim()}')`\n : \"\";\n throw new InputError(`season must be a year such as 2020, got ${JSON.stringify(value)}${hint}`);\n }\n checkSeason(year, league);\n return year;\n}\n","import { InputError } from \"./errors.js\";\nimport { normValue } from \"./normalize.js\";\nimport type { Value } from \"./resolve.js\";\nimport type { HeadshotIdSystem } from \"./types.js\";\n\n/** Port of `_headshots.ESPN_HEADSHOT_LEAGUES`. */\nexport const ESPN_HEADSHOT_LEAGUES = {\n nfl: \"nfl\",\n nba: \"nba\",\n wnba: \"wnba\",\n mlb: \"mlb\",\n nhl: \"nhl\",\n cfb: \"college-football\",\n mbb: \"mens-college-basketball\",\n wbb: \"womens-college-basketball\",\n} as const;\n/** Leagues with ESPN headshots (gsis ids are nfl-only, and nfl is one of these). */\nexport type EspnHeadshotLeague = keyof typeof ESPN_HEADSHOT_LEAGUES;\n\n/** Width / height of a headshot image box (the ESPN combiner crop). */\nexport const HEADSHOT_ASPECT: number = 600 / 436;\n\n// League-id CDN builders, ported from sdvplotR `league_headshot_url`.\nexport function nbaHeadshotUrl(id: string | number): string {\n return `https://cdn.nba.com/headshots/nba/latest/260x190/${id}.png`;\n}\nexport function wnbaHeadshotUrl(id: string | number): string {\n return `https://cdn.wnba.com/headshots/wnba/latest/260x190/${id}.png`;\n}\nexport function mlbHeadshotUrl(id: string | number): string {\n return `https://img.mlbstatic.com/mlb-photos/image/upload/d_people:generic:headshot:67:current.png/w_213,q_auto:best/v1/people/${id}/headshot/67/current.png`;\n}\nexport function nhlHeadshotUrl(id: string | number): string {\n return `https://assets.nhle.com/mugs/nhl/latest/${id}.png`;\n}\n\nfunction espn(id: string, league: string): string | undefined {\n if (!/^\\d+$/.test(id)) return undefined;\n return `https://a.espncdn.com/combiner/i?img=/i/headshots/${ESPN_HEADSHOT_LEAGUES[league as EspnHeadshotLeague]}/players/full/${id}.png`;\n}\n\ntype GsisRow = { espn_id: string | null; headshot: string | null };\nlet gsis: Readonly<Record<string, GsisRow>> | undefined;\nlet gsisPending: Promise<void> | undefined;\n/** Loads the bundled nflverse gsis map (its own ~3 MB chunk, imported only on demand); required before `headshotUrl(…, { idSystem: \"gsis\" })`. Nothing is downloaded. */\nexport async function loadGsis(): Promise<void> {\n if (gsis) return;\n gsisPending ??= import(\"./data/nfl_gsis.js\").then(\n (m) => {\n gsis = m.NFL_GSIS;\n },\n (e: unknown) => {\n gsisPending = undefined;\n throw e;\n },\n );\n return gsisPending;\n}\n\n/**\n * Sync port of `_headshots.headshot_url`. ESPN ids need no data; gsis ids need `await loadGsis()` (or `preloadAll()`)\n * first.\n *\n * @example\n * ```ts\n * import { headshotUrl } from \"@sportsdataverse/sdvplot\";\n *\n * headshotUrl(\"3139477\", \"nfl\"); // Patrick Mahomes, by ESPN athlete id\n * ```\n */\nexport function headshotUrl(\n playerId: Value,\n league: EspnHeadshotLeague,\n { idSystem = \"espn\" }: { idSystem?: HeadshotIdSystem } = {},\n): string | undefined {\n if (idSystem === \"espn\" && !Object.hasOwn(ESPN_HEADSHOT_LEAGUES, league))\n throw new InputError(\n `no ESPN headshots for league ${JSON.stringify(league)}; supported: ${Object.keys(ESPN_HEADSHOT_LEAGUES).sort().join(\", \")}`,\n );\n if (idSystem !== \"espn\" && !(idSystem === \"gsis\" && league === \"nfl\"))\n throw new InputError(\n `idSystem must be 'espn' (any league) or 'gsis' (nfl), got ${JSON.stringify(idSystem)} for ${JSON.stringify(league)}`,\n );\n if (idSystem === \"gsis\" && !gsis)\n throw new InputError(\n 'the gsis map is not loaded; await loadGsis() (or preloadAll()) before headshotUrl(…, { idSystem: \"gsis\" })',\n );\n const pid = normValue(playerId);\n if (pid === null) return undefined;\n if (idSystem === \"espn\") return espn(pid, league);\n const key = String(playerId).trim();\n const row = gsis && Object.hasOwn(gsis, key) ? gsis[key] : undefined;\n if (!row) return undefined;\n if (row.headshot) {\n const t = row.headshot.replace(\"/f_auto,q_auto/\", \"/t_headshot_desktop/f_auto/\");\n return t.endsWith(\".png\") ? t : `${t}.png`;\n }\n return row.espn_id ? espn(row.espn_id, \"nfl\") : undefined;\n}\n","import type { League, LeagueData } from \"./data/index.js\";\nimport { InputError, UnresolvedTeamError, warn } from \"./errors.js\";\nimport { getLeagueSync, latestSeason, loadLeague } from \"./index-data.js\";\nimport { checkSeason, normSeason, normValue } from \"./normalize.js\";\nimport { EXPLICIT_ONLY, type IdSystem, PRIORITY, type SeasonInput, type TeamId, asTeamId } from \"./types.js\";\n\nexport type Value = string | number | bigint | null | undefined;\nexport type Resolved<T> = T extends readonly Value[] ? (TeamId | undefined)[] : TeamId | undefined;\nexport interface ResolveOptions {\n season?: SeasonInput | readonly SeasonInput[];\n idSystem?: IdSystem;\n strict?: boolean;\n}\n\ntype Cand = readonly [teamId: string, from: number | null, to: number | null];\ntype Lookup = Map<string, Map<string, Cand[]>>; // id_system → normalized value → candidates\nconst lookups = new WeakMap<LeagueData, Lookup>();\nfunction lookup(d: LeagueData): Lookup {\n let l = lookups.get(d);\n if (!l) {\n l = new Map();\n for (const a of d.aliases) {\n const k = normValue(a.value);\n if (k === null) continue;\n let sys = l.get(a.id_system);\n if (!sys) {\n sys = new Map();\n l.set(a.id_system, sys);\n }\n let c = sys.get(k);\n if (!c) {\n c = [];\n sys.set(k, c);\n }\n c.push([a.team_id, a.valid_from, a.valid_to]);\n }\n lookups.set(d, l);\n }\n return l;\n}\nconst covers = (lo: number | null, hi: number | null, s: number): boolean =>\n (lo === null || s >= lo) && (hi === null || s <= hi);\n\nfunction systems(idSystem: IdSystem): readonly string[] {\n if (\n idSystem !== \"auto\" &&\n !(PRIORITY as readonly string[]).includes(idSystem) &&\n !(EXPLICIT_ONLY as readonly string[]).includes(idSystem)\n )\n throw new InputError(\n `unknown idSystem ${JSON.stringify(idSystem)}; use \"auto\" or one of ${[...PRIORITY, ...EXPLICIT_ONLY].join(\", \")}`,\n );\n return idSystem === \"auto\" ? PRIORITY : [idSystem];\n}\n\n/** Python `_match`: passes [season, latest, none] (deduped, nulls dropped) × systems in order; first system with a candidate decides. */\nfunction match(\n key: string,\n season: number | null,\n sys: readonly string[],\n table: Lookup,\n latest: number | null,\n): string | readonly string[] | null {\n const whens: (number | null)[] = [];\n for (const w of [season, latest]) if (w !== null && !whens.includes(w)) whens.push(w);\n whens.push(null);\n for (const when of whens)\n for (const s of sys) {\n let cands = table.get(s)?.get(key);\n if (!cands?.length) continue;\n if (when !== null) {\n cands = cands.filter((c) => covers(c[1], c[2], when));\n if (!cands.length) continue;\n }\n const ids = [...new Set(cands.map((c) => c[0]))];\n return ids.length === 1 ? (ids[0] as string) : ids.sort();\n }\n return null;\n}\n\nfunction seasons(season: ResolveOptions[\"season\"], n: number, league: League): (number | null)[] {\n if (!Array.isArray(season)) return Array<number | null>(n).fill(normSeason(season as SeasonInput, league));\n if (season.length !== n)\n throw new InputError(`season has ${season.length} values but there are ${n} teams`);\n return (season as readonly SeasonInput[]).map((s) => normSeason(s, league));\n}\n\nfunction resolveIds(\n items: readonly Value[],\n league: League,\n ss: (number | null)[],\n idSystem: IdSystem,\n d: LeagueData,\n): { out: (TeamId | undefined)[]; unresolved: Map<string, string> } {\n const sys = systems(idSystem);\n for (const y of new Set(ss)) if (y !== null) checkSeason(y, league);\n const table = lookup(d);\n const latest = latestSeason(league);\n let names: Map<string, string> | undefined; // only the ambiguous message reads it: build it on first use, not per call\n const nameOf = (t: string): string => {\n names ??= new Map(d.teams.map((x) => [x.team_id, x.name ?? \"\"]));\n return names.get(t) ?? \"\";\n };\n const out: (TeamId | undefined)[] = [];\n const unresolved = new Map<string, string>();\n const memo = new Map<string, ReturnType<typeof match>>();\n items.forEach((v, i) => {\n const key = normValue(v);\n if (key === null) {\n out.push(undefined);\n return;\n }\n const mk = `${key}\\u0000${ss[i]}`;\n if (!memo.has(mk)) memo.set(mk, match(key, ss[i] ?? null, sys, table, latest));\n const hit = memo.get(mk) as ReturnType<typeof match>;\n if (hit === null || Array.isArray(hit)) {\n unresolved.set(\n String(v),\n hit === null\n ? \"unknown\"\n : `ambiguous: ${(hit as readonly string[]).map((t) => `${t} ${nameOf(t)}`.trim()).join(\" or \")}`,\n );\n out.push(undefined);\n } else out.push(asTeamId(hit as string));\n });\n return { out, unresolved };\n}\n\nfunction report(unresolved: Map<string, string>, league: League, strict: boolean): void {\n const shown = [...unresolved].map(([v, why]) => `'${v}' (${why})`).join(\", \");\n let msg = `${unresolved.size} value(s) did not resolve to a ${league} team: ${shown}`;\n if ([...unresolved.values()].some((w) => w.startsWith(\"ambiguous\")))\n msg += \"; pass season for a code reused across eras, or idSystem for the id system of the values\";\n if (strict) throw new UnresolvedTeamError(msg);\n warn(\n `${league}:${[...unresolved.keys()].join(\",\")}`,\n `${msg}. Use suggest() for candidates, or strict: true to throw.`,\n );\n}\n\nexport function resolveSync<T extends Value | readonly Value[]>(\n values: T,\n league: League,\n opts: ResolveOptions = {},\n): Resolved<T> {\n const d = getLeagueSync(league);\n const arr = Array.isArray(values);\n const items = (arr ? values : [values]) as readonly Value[];\n const { out, unresolved } = resolveIds(\n items,\n league,\n seasons(opts.season, items.length, league),\n opts.idSystem ?? \"auto\",\n d,\n );\n if (unresolved.size) report(unresolved, league, opts.strict ?? false);\n return (arr ? out : out[0]) as Resolved<T>;\n}\n/**\n * Resolve team values (abbreviations, ids, names) to ESPN team ids, loading the league first. Unknown values give\n * `undefined` and one warning per call; `strict: true` throws `UnresolvedTeamError`.\n *\n * @example\n * ```ts\n * import { resolve } from \"@sportsdataverse/sdvplot\";\n *\n * await resolve([\"KC\", \"Kansas City Chiefs\", \"OAK\"], \"nfl\", { season: 2019 });\n * ```\n */\nexport async function resolve<T extends Value | readonly Value[]>(\n values: T,\n league: League,\n opts: ResolveOptions = {},\n): Promise<Resolved<T>> {\n await loadLeague(league);\n return resolveSync(values, league, opts);\n}\n\n/** Port of `suggest`: difflib.get_close_matches(cutoff 0.6): SequenceMatcher(a=candidate, b=query).ratio() ≥ 0.6, best first, ties by candidate key descending; never picks one. */\nexport async function suggest(\n value: Value,\n league: League,\n opts: { n?: number } = {},\n): Promise<Array<[TeamId, string]>> {\n const n = opts.n ?? 5;\n if (!Number.isInteger(n) || n < 1)\n throw new InputError(\n `n is the most candidates to return, an int of at least 1, got ${JSON.stringify(n)}`,\n );\n const d = await loadLeague(league);\n const key = normValue(value);\n if (key === null) return [];\n const merged = new Map<string, string[]>();\n for (const sys of lookup(d).values())\n for (const [k, cands] of sys) merged.set(k, [...(merged.get(k) ?? []), ...cands.map((c) => c[0])]);\n const names = new Map(d.teams.map((t) => [t.team_id, t.name ?? t.team_id]));\n const scored = [...merged.keys()]\n .map((k) => [k, ratio(k, key)] as const)\n .filter(([, r]) => r >= 0.6)\n .sort((a, b) => b[1] - a[1] || (a[0] < b[0] ? 1 : a[0] > b[0] ? -1 : 0))\n .slice(0, n * 3);\n const out: Array<[TeamId, string]> = [];\n for (const [k] of scored)\n for (const tid of merged.get(k) ?? [])\n if (!out.some(([t]) => t === tid)) out.push([asTeamId(tid), names.get(tid) ?? tid]);\n return out.slice(0, n);\n}\n/** difflib.SequenceMatcher.ratio(): 2*M/T with M = matched chars via longest-common-substring recursion. */\nexport function ratio(a: string, b: string): number {\n const matches = (x: string, y: string): number => {\n if (!x || !y) return 0;\n let bi = 0;\n let bj = 0;\n let best = 0;\n let prev: number[] = Array<number>(y.length + 1).fill(0);\n for (let i = 1; i <= x.length; i++) {\n const cur: number[] = Array<number>(y.length + 1).fill(0);\n for (let j = 1; j <= y.length; j++)\n if (x[i - 1] === y[j - 1]) {\n const v = (prev[j - 1] ?? 0) + 1;\n cur[j] = v;\n if (v > best) {\n best = v;\n bi = i;\n bj = j;\n }\n }\n prev = cur;\n }\n if (!best) return 0;\n return best + matches(x.slice(0, bi - best), y.slice(0, bj - best)) + matches(x.slice(bi), y.slice(bj));\n };\n return a.length + b.length === 0 ? 1 : (2 * matches(a, b)) / (a.length + b.length);\n}\n","import { InputError, warn } from \"./errors.js\";\nimport { checkLeague, getLeagueSync, loadLeague } from \"./index-data.js\";\nimport { type ResolveOptions, type Resolved, type Value, resolveSync } from \"./resolve.js\";\nimport type { League, Which } from \"./types.js\";\n\nexport interface ColorOptions extends ResolveOptions {\n which?: Which;\n}\nexport type ColorResult<T> = T extends readonly Value[] ? (string | undefined)[] : string | undefined;\n\nconst COLUMNS = { primary: \"color_primary\", secondary: \"color_secondary\" } as const;\nfunction column(which: string): \"color_primary\" | \"color_secondary\" {\n if (which !== \"primary\" && which !== \"secondary\")\n throw new InputError(`which must be one of primary, secondary, got ${JSON.stringify(which)}`);\n return COLUMNS[which];\n}\nfunction colorMap(league: League, col: \"color_primary\" | \"color_secondary\"): Map<string, string> {\n const m = new Map<string, string>();\n for (const t of getLeagueSync(league).teams) if (t[col]) m.set(t.team_id, t[col] as string);\n return m;\n}\n\n/**\n * `{team: \"#hex\"}` for a league. Without `teams`: keyed by abbr, or team_id where abbr is null/shared (one warning).\n * With `teams`: keyed by the caller's own values; first team wins on a reused value.\n *\n * @example\n * ```ts\n * import { palette } from \"@sportsdataverse/sdvplot\";\n *\n * await palette(\"nfl\", [\"KC\", \"BUF\", \"PHI\"]);\n * ```\n */\nexport async function palette(\n league: League,\n teams?: Value | readonly Value[],\n opts: ColorOptions = {},\n): Promise<Record<string, string>> {\n const col = column(opts.which ?? \"primary\");\n checkLeague(league);\n await loadLeague(league);\n const colors = colorMap(league, col);\n const out: Record<string, string> = Object.create(null);\n if (teams == null) {\n const rows = getLeagueSync(league).teams;\n const counts = new Map<string, number>();\n for (const t of rows) if (t.abbr) counts.set(t.abbr, (counts.get(t.abbr) ?? 0) + 1);\n const shared = [...counts].filter(([, n]) => n > 1).map(([a]) => a);\n if (shared.length)\n warn(\n `palette:shared:${league}`,\n `abbreviations shared by several ${league} teams are keyed by team_id: ${shared.sort().join(\", \")}`,\n );\n for (const t of rows) {\n const c = colors.get(t.team_id);\n if (c === undefined) continue;\n out[!t.abbr || shared.includes(t.abbr) ? t.team_id : t.abbr] = c;\n }\n return out;\n }\n const values = (Array.isArray(teams) ? teams : [teams]) as readonly Value[];\n const slot = values.find((v) => v === \"primary\" || v === \"secondary\");\n if (slot !== undefined)\n throw new InputError(\n `${JSON.stringify(slot)} is a color slot, not a team; pass it as an option: palette(league, teams, { which: \"${slot}\" })`,\n );\n const ss: unknown[] = Array.isArray(opts.season) ? opts.season : Array(values.length).fill(opts.season);\n if (ss.length !== values.length)\n throw new InputError(`season has ${ss.length} values but there are ${values.length} teams`);\n const seen = new Set<string>();\n const vs: Value[] = [];\n const ys: ResolveOptions[\"season\"][] = [];\n values.forEach((v, i) => {\n if (v === null || v === undefined) return;\n const k = `${typeof v}:${String(v)}\\u0000${String(ss[i])}`;\n if (seen.has(k)) return;\n seen.add(k);\n vs.push(v);\n ys.push(ss[i] as ResolveOptions[\"season\"]);\n });\n const ids = resolveSync(vs, league, { ...opts, season: ys as never });\n vs.forEach((v, i) => {\n const id = ids[i];\n const c = id === undefined ? undefined : colors.get(id);\n if (c !== undefined) out[String(v)] ??= c;\n });\n return out;\n}\n\n/** One `#hex` (or undefined) per team value, in the container the values came in. Call after the league is loaded. */\nexport function teamColorsSync<T extends Value | readonly Value[]>(\n league: League,\n teams: T,\n opts: ColorOptions = {},\n): ColorResult<T> {\n const col = column(opts.which ?? \"primary\");\n checkLeague(league);\n const colors = colorMap(league, col);\n const ids = resolveSync(teams, league, opts) as Resolved<T>;\n const pick = (id: string | undefined): string | undefined =>\n id === undefined ? undefined : colors.get(id);\n return (\n Array.isArray(ids) ? (ids as (string | undefined)[]).map(pick) : pick(ids as string | undefined)\n ) as ColorResult<T>;\n}\n\n/** Both colours for ONE team from a single resolve (one warning if unresolved). Internal: not in the barrel. */\nexport function teamColorPairSync(\n league: League,\n team: Value,\n opts: Omit<ColorOptions, \"which\"> = {},\n): { primary: string | undefined; secondary: string | undefined } {\n checkLeague(league);\n const id = resolveSync(team, league, opts) as string | undefined;\n const pick = (col: \"color_primary\" | \"color_secondary\") =>\n id === undefined ? undefined : colorMap(league, col).get(id);\n return { primary: pick(\"color_primary\"), secondary: pick(\"color_secondary\") };\n}\n\n/**\n * Team colour(s), loading the league first: one team gives one `#hex` (or `undefined`), an array gives one per team.\n * `which: \"secondary\"` picks the second colour; an unknown team gives `undefined` and one warning.\n *\n * @example\n * ```ts\n * import { teamColors } from \"@sportsdataverse/sdvplot\";\n *\n * await teamColors(\"nba\", [\"LAL\", \"BOS\"], { which: \"secondary\" });\n * ```\n */\nexport async function teamColors<T extends Value | readonly Value[]>(\n league: League,\n teams: T,\n opts: ColorOptions = {},\n): Promise<ColorResult<T>> {\n await loadLeague(league);\n return teamColorsSync(league, teams, opts);\n}\n"]}
1
+ {"version":3,"sources":["../src/types.ts","../src/data/index.ts","../src/index-data.ts","../src/normalize.ts","../src/headshots.ts","../src/resolve.ts","../src/colors.ts"],"names":[],"mappings":"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","file":"chunk-ZAEQXFJM.js","sourcesContent":["export type { League } from \"./data/index.js\";\n\ndeclare const brand: unique symbol;\n/** A canonical SDV team id. Only `resolve()` makes one; a raw abbreviation is a `string`, not a `TeamId`. */\nexport type TeamId = string & { readonly [brand]: \"TeamId\" };\nexport const asTeamId = (s: string): TeamId => s as TeamId;\n\nexport const PRIORITY = [\n \"team_id\",\n \"espn\",\n \"espn_abbr\",\n \"nhl\",\n \"nflverse\",\n \"mlbstats\",\n \"nba_api\",\n \"hockeytech\",\n \"ncaa\",\n \"pff\",\n \"cricinfo\",\n \"cfbd\",\n \"bref\",\n \"sportsipy\",\n \"fangraphs\",\n \"sdvplotr\",\n \"name\",\n] as const;\nexport const EXPLICIT_ONLY = [\"nhl_id\"] as const;\nexport type IdSystem = \"auto\" | (typeof PRIORITY)[number] | (typeof EXPLICIT_ONLY)[number];\nexport type MarkType = \"logo\" | \"wordmark\";\nexport type Which = \"primary\" | \"secondary\";\n/** \"default\" and \"dark\" always exist; other archive variant names are accepted and checked at runtime. */\nexport type Variant = \"default\" | \"dark\" | (string & {});\nexport type SeasonInput = number | string | null | undefined;\nexport type HeadshotIdSystem = \"espn\" | \"gsis\";\n","// generated by tools/build-index — do not edit\nexport const LEAGUES = [\"aaf\",\"ahl\",\"cfb\",\"cricket\",\"echl\",\"mbb\",\"milb\",\"mlb\",\"nba\",\"nbagl\",\"ncaa_baseball\",\"ncaa_mhockey\",\"ncaa_softball\",\"ncaa_whockey\",\"nfl\",\"nhl\",\"ohl\",\"phf\",\"pwhl\",\"qmjhl\",\"soccer\",\"ufl\",\"usfl\",\"ushl\",\"wbb\",\"whl\",\"wnba\",\"xfl\"] as const;\nexport type League = (typeof LEAGUES)[number];\nexport const INDEX_VERSION: string = \"1c025b69f8cf\";\nexport const MANIFEST_LAST_MODIFIED: string = \"2026-10-06\";\nexport const VARIANTS = [\"alternate\",\"cap_on_dark\",\"cap_on_light\",\"cricinfo\",\"crop_64px\",\"dark\",\"default\",\"grayscale\",\"large\",\"logo2\",\"medium\",\"on_dark\",\"on_light\",\"primary_logo_black\",\"primary_logo_on_black_color\",\"primary_logo_on_primary_color\",\"primary_logo_on_secondary_color\",\"primary_logo_on_white_color\",\"primary_logo_white\",\"primary_on_dark\",\"primary_on_light\",\"scoreboard\",\"scoreboard_dark\",\"secondary_logo_black\",\"secondary_logo_on_black_color\",\"secondary_logo_on_primary_color\",\"secondary_logo_on_secondary_color\",\"secondary_logo_on_white_color\",\"secondary_logo_white\",\"sport_pictogram\",\"squared\",\"team_strip\"] as const;\nexport const INDEX_FIRST_SEASON: number | null = 1871; export const INDEX_LAST_ALIAS_SEASON: number | null = 2027;\nexport const LEAGUE_META: Readonly<Record<League, { latestSeason: number | null; firstSeason: number | null }>> = {\"aaf\":{\"latestSeason\":null,\"firstSeason\":null},\"ahl\":{\"latestSeason\":null,\"firstSeason\":null},\"cfb\":{\"latestSeason\":null,\"firstSeason\":null},\"cricket\":{\"latestSeason\":null,\"firstSeason\":null},\"echl\":{\"latestSeason\":null,\"firstSeason\":null},\"mbb\":{\"latestSeason\":null,\"firstSeason\":null},\"milb\":{\"latestSeason\":null,\"firstSeason\":null},\"mlb\":{\"latestSeason\":2026,\"firstSeason\":1871},\"nba\":{\"latestSeason\":2027,\"firstSeason\":1947},\"nbagl\":{\"latestSeason\":null,\"firstSeason\":null},\"ncaa_baseball\":{\"latestSeason\":null,\"firstSeason\":null},\"ncaa_mhockey\":{\"latestSeason\":null,\"firstSeason\":null},\"ncaa_softball\":{\"latestSeason\":null,\"firstSeason\":null},\"ncaa_whockey\":{\"latestSeason\":null,\"firstSeason\":null},\"nfl\":{\"latestSeason\":2026,\"firstSeason\":1920},\"nhl\":{\"latestSeason\":1997,\"firstSeason\":null},\"ohl\":{\"latestSeason\":null,\"firstSeason\":null},\"phf\":{\"latestSeason\":null,\"firstSeason\":null},\"pwhl\":{\"latestSeason\":null,\"firstSeason\":null},\"qmjhl\":{\"latestSeason\":null,\"firstSeason\":null},\"soccer\":{\"latestSeason\":null,\"firstSeason\":null},\"ufl\":{\"latestSeason\":2026,\"firstSeason\":2024},\"usfl\":{\"latestSeason\":null,\"firstSeason\":null},\"ushl\":{\"latestSeason\":null,\"firstSeason\":null},\"wbb\":{\"latestSeason\":null,\"firstSeason\":null},\"whl\":{\"latestSeason\":null,\"firstSeason\":null},\"wnba\":{\"latestSeason\":2026,\"firstSeason\":1997},\"xfl\":{\"latestSeason\":2023,\"firstSeason\":2020}};\nexport interface Team { league: League; team_id: string; abbr: string | null; name: string | null; short_name: string | null; location: string | null; program: string | null; conference_id: string | null; conference: string | null; color_primary: string | null; color_secondary: string | null; color_source: string | null }\nexport interface Alias { id_system: string; value: string; team_id: string; valid_from: number | null; valid_to: number | null }\nexport interface MarkRow { team_id: string; mark_type: \"logo\" | \"wordmark\"; variant: string; valid_from: number | null; valid_to: number | null; source: string; source_rank: number; first_seen: string; sha256: string; ext: string; width: number | null; height: number | null; archive_url: string }\n/** Shard row: archive_url is derived by the loader (archiveUrl), never stored. */\nexport type StoredMark = Omit<MarkRow, \"archive_url\">;\nexport interface LeagueData { teams: readonly Team[]; aliases: readonly Alias[]; marks: readonly MarkRow[] }\nexport const ARCHIVE_BASE: string = \"https://sdv.nyc3.cdn.digitaloceanspaces.com/assets/public/sha256\";\n/** Content-addressed archive URL of a mark (<base>/<sha[:2]>/<sha>.<ext>, Python _images.mark_file). */\nexport function archiveUrl(sha256: string, ext: string): string { return `${ARCHIVE_BASE}/${sha256.slice(0, 2)}/${sha256}.${ext}`; }\nexport const loaders: Readonly<Record<League, () => Promise<LeagueData>>> = {\n \"aaf\": async () => { const [t, a, m] = await Promise.all([import(\"./teams/aaf.js\"), import(\"./aliases/aaf.js\"), import(\"./marks/aaf.js\")]); return { teams: t.teams, aliases: a.aliases, marks: m.marks.map((r) => ({ ...r, archive_url: archiveUrl(r.sha256, r.ext) })) }; },\n \"ahl\": async () => { const [t, a, m] = await Promise.all([import(\"./teams/ahl.js\"), import(\"./aliases/ahl.js\"), import(\"./marks/ahl.js\")]); return { teams: t.teams, aliases: a.aliases, marks: m.marks.map((r) => ({ ...r, archive_url: archiveUrl(r.sha256, r.ext) })) }; },\n \"cfb\": async () => { const [t, a, m] = await Promise.all([import(\"./teams/cfb.js\"), import(\"./aliases/cfb.js\"), import(\"./marks/cfb.js\")]); return { teams: t.teams, aliases: a.aliases, marks: m.marks.map((r) => ({ ...r, archive_url: archiveUrl(r.sha256, r.ext) })) }; },\n \"cricket\": async () => { const [t, a, m] = await Promise.all([import(\"./teams/cricket.js\"), import(\"./aliases/cricket.js\"), import(\"./marks/cricket.js\")]); return { teams: t.teams, aliases: a.aliases, marks: m.marks.map((r) => ({ ...r, archive_url: archiveUrl(r.sha256, r.ext) })) }; },\n \"echl\": async () => { const [t, a, m] = await Promise.all([import(\"./teams/echl.js\"), import(\"./aliases/echl.js\"), import(\"./marks/echl.js\")]); return { teams: t.teams, aliases: a.aliases, marks: m.marks.map((r) => ({ ...r, archive_url: archiveUrl(r.sha256, r.ext) })) }; },\n \"mbb\": async () => { const [t, a, m] = await Promise.all([import(\"./teams/mbb.js\"), import(\"./aliases/mbb.js\"), import(\"./marks/mbb.js\")]); return { teams: t.teams, aliases: a.aliases, marks: m.marks.map((r) => ({ ...r, archive_url: archiveUrl(r.sha256, r.ext) })) }; },\n \"milb\": async () => { const [t, a, m] = await Promise.all([import(\"./teams/milb.js\"), import(\"./aliases/milb.js\"), import(\"./marks/milb.js\")]); return { teams: t.teams, aliases: a.aliases, marks: m.marks.map((r) => ({ ...r, archive_url: archiveUrl(r.sha256, r.ext) })) }; },\n \"mlb\": async () => { const [t, a, m] = await Promise.all([import(\"./teams/mlb.js\"), import(\"./aliases/mlb.js\"), import(\"./marks/mlb.js\")]); return { teams: t.teams, aliases: a.aliases, marks: m.marks.map((r) => ({ ...r, archive_url: archiveUrl(r.sha256, r.ext) })) }; },\n \"nba\": async () => { const [t, a, m] = await Promise.all([import(\"./teams/nba.js\"), import(\"./aliases/nba.js\"), import(\"./marks/nba.js\")]); return { teams: t.teams, aliases: a.aliases, marks: m.marks.map((r) => ({ ...r, archive_url: archiveUrl(r.sha256, r.ext) })) }; },\n \"nbagl\": async () => { const [t, a, m] = await Promise.all([import(\"./teams/nbagl.js\"), import(\"./aliases/nbagl.js\"), import(\"./marks/nbagl.js\")]); return { teams: t.teams, aliases: a.aliases, marks: m.marks.map((r) => ({ ...r, archive_url: archiveUrl(r.sha256, r.ext) })) }; },\n \"ncaa_baseball\": async () => { const [t, a, m] = await Promise.all([import(\"./teams/ncaa_baseball.js\"), import(\"./aliases/ncaa_baseball.js\"), import(\"./marks/ncaa_baseball.js\")]); return { teams: t.teams, aliases: a.aliases, marks: m.marks.map((r) => ({ ...r, archive_url: archiveUrl(r.sha256, r.ext) })) }; },\n \"ncaa_mhockey\": async () => { const [t, a, m] = await Promise.all([import(\"./teams/ncaa_mhockey.js\"), import(\"./aliases/ncaa_mhockey.js\"), import(\"./marks/ncaa_mhockey.js\")]); return { teams: t.teams, aliases: a.aliases, marks: m.marks.map((r) => ({ ...r, archive_url: archiveUrl(r.sha256, r.ext) })) }; },\n \"ncaa_softball\": async () => { const [t, a, m] = await Promise.all([import(\"./teams/ncaa_softball.js\"), import(\"./aliases/ncaa_softball.js\"), import(\"./marks/ncaa_softball.js\")]); return { teams: t.teams, aliases: a.aliases, marks: m.marks.map((r) => ({ ...r, archive_url: archiveUrl(r.sha256, r.ext) })) }; },\n \"ncaa_whockey\": async () => { const [t, a, m] = await Promise.all([import(\"./teams/ncaa_whockey.js\"), import(\"./aliases/ncaa_whockey.js\"), import(\"./marks/ncaa_whockey.js\")]); return { teams: t.teams, aliases: a.aliases, marks: m.marks.map((r) => ({ ...r, archive_url: archiveUrl(r.sha256, r.ext) })) }; },\n \"nfl\": async () => { const [t, a, m] = await Promise.all([import(\"./teams/nfl.js\"), import(\"./aliases/nfl.js\"), import(\"./marks/nfl.js\")]); return { teams: t.teams, aliases: a.aliases, marks: m.marks.map((r) => ({ ...r, archive_url: archiveUrl(r.sha256, r.ext) })) }; },\n \"nhl\": async () => { const [t, a, m] = await Promise.all([import(\"./teams/nhl.js\"), import(\"./aliases/nhl.js\"), import(\"./marks/nhl.js\")]); return { teams: t.teams, aliases: a.aliases, marks: m.marks.map((r) => ({ ...r, archive_url: archiveUrl(r.sha256, r.ext) })) }; },\n \"ohl\": async () => { const [t, a, m] = await Promise.all([import(\"./teams/ohl.js\"), import(\"./aliases/ohl.js\"), import(\"./marks/ohl.js\")]); return { teams: t.teams, aliases: a.aliases, marks: m.marks.map((r) => ({ ...r, archive_url: archiveUrl(r.sha256, r.ext) })) }; },\n \"phf\": async () => { const [t, a, m] = await Promise.all([import(\"./teams/phf.js\"), import(\"./aliases/phf.js\"), import(\"./marks/phf.js\")]); return { teams: t.teams, aliases: a.aliases, marks: m.marks.map((r) => ({ ...r, archive_url: archiveUrl(r.sha256, r.ext) })) }; },\n \"pwhl\": async () => { const [t, a, m] = await Promise.all([import(\"./teams/pwhl.js\"), import(\"./aliases/pwhl.js\"), import(\"./marks/pwhl.js\")]); return { teams: t.teams, aliases: a.aliases, marks: m.marks.map((r) => ({ ...r, archive_url: archiveUrl(r.sha256, r.ext) })) }; },\n \"qmjhl\": async () => { const [t, a, m] = await Promise.all([import(\"./teams/qmjhl.js\"), import(\"./aliases/qmjhl.js\"), import(\"./marks/qmjhl.js\")]); return { teams: t.teams, aliases: a.aliases, marks: m.marks.map((r) => ({ ...r, archive_url: archiveUrl(r.sha256, r.ext) })) }; },\n \"soccer\": async () => { const [t, a, m] = await Promise.all([import(\"./teams/soccer.js\"), import(\"./aliases/soccer.js\"), import(\"./marks/soccer.js\")]); return { teams: t.teams, aliases: a.aliases, marks: m.marks.map((r) => ({ ...r, archive_url: archiveUrl(r.sha256, r.ext) })) }; },\n \"ufl\": async () => { const [t, a, m] = await Promise.all([import(\"./teams/ufl.js\"), import(\"./aliases/ufl.js\"), import(\"./marks/ufl.js\")]); return { teams: t.teams, aliases: a.aliases, marks: m.marks.map((r) => ({ ...r, archive_url: archiveUrl(r.sha256, r.ext) })) }; },\n \"usfl\": async () => { const [t, a, m] = await Promise.all([import(\"./teams/usfl.js\"), import(\"./aliases/usfl.js\"), import(\"./marks/usfl.js\")]); return { teams: t.teams, aliases: a.aliases, marks: m.marks.map((r) => ({ ...r, archive_url: archiveUrl(r.sha256, r.ext) })) }; },\n \"ushl\": async () => { const [t, a, m] = await Promise.all([import(\"./teams/ushl.js\"), import(\"./aliases/ushl.js\"), import(\"./marks/ushl.js\")]); return { teams: t.teams, aliases: a.aliases, marks: m.marks.map((r) => ({ ...r, archive_url: archiveUrl(r.sha256, r.ext) })) }; },\n \"wbb\": async () => { const [t, a, m] = await Promise.all([import(\"./teams/wbb.js\"), import(\"./aliases/wbb.js\"), import(\"./marks/wbb.js\")]); return { teams: t.teams, aliases: a.aliases, marks: m.marks.map((r) => ({ ...r, archive_url: archiveUrl(r.sha256, r.ext) })) }; },\n \"whl\": async () => { const [t, a, m] = await Promise.all([import(\"./teams/whl.js\"), import(\"./aliases/whl.js\"), import(\"./marks/whl.js\")]); return { teams: t.teams, aliases: a.aliases, marks: m.marks.map((r) => ({ ...r, archive_url: archiveUrl(r.sha256, r.ext) })) }; },\n \"wnba\": async () => { const [t, a, m] = await Promise.all([import(\"./teams/wnba.js\"), import(\"./aliases/wnba.js\"), import(\"./marks/wnba.js\")]); return { teams: t.teams, aliases: a.aliases, marks: m.marks.map((r) => ({ ...r, archive_url: archiveUrl(r.sha256, r.ext) })) }; },\n \"xfl\": async () => { const [t, a, m] = await Promise.all([import(\"./teams/xfl.js\"), import(\"./aliases/xfl.js\"), import(\"./marks/xfl.js\")]); return { teams: t.teams, aliases: a.aliases, marks: m.marks.map((r) => ({ ...r, archive_url: archiveUrl(r.sha256, r.ext) })) }; },\n};\n","import {\n INDEX_FIRST_SEASON,\n INDEX_LAST_ALIAS_SEASON,\n LEAGUES,\n LEAGUE_META,\n type League,\n type LeagueData,\n loaders,\n} from \"./data/index.js\";\nimport { InputError } from \"./errors.js\";\nimport { loadGsis } from \"./headshots.js\";\n\nconst loaded = new Map<League, LeagueData>();\nconst pending = new Map<League, Promise<LeagueData>>();\n\nexport function checkLeague(league: string): asserts league is League {\n if (!(LEAGUES as readonly string[]).includes(league))\n throw new InputError(`unknown league ${JSON.stringify(league)}; known leagues: ${LEAGUES.join(\", \")}`);\n}\n/**\n * Load a league's bundled teams, aliases and marks (one code-split chunk; nothing is downloaded). Every `*Sync`\n * function needs it first. Async throughout: an unknown league rejects (never throws synchronously); a failed chunk\n * load can be retried.\n *\n * @example\n * ```ts\n * import { loadLeague } from \"@sportsdataverse/sdvplot\";\n *\n * const nfl = await loadLeague(\"nfl\");\n * nfl.teams.find((t) => t.abbr === \"KC\");\n * ```\n */\nexport async function loadLeague(league: League): Promise<LeagueData> {\n checkLeague(league);\n const hit = loaded.get(league);\n if (hit) return hit;\n let p = pending.get(league);\n if (!p) {\n p = loaders[league]().then(\n (d) => {\n loaded.set(league, d);\n pending.delete(league);\n return d;\n },\n (e: unknown) => {\n pending.delete(league);\n throw e;\n },\n );\n pending.set(league, p);\n }\n return p;\n}\n/** Every league shard plus the gsis map, so every *Sync variant works afterwards. */\nexport async function preloadAll(): Promise<void> {\n await Promise.all([...LEAGUES.map(loadLeague), loadGsis()]);\n}\nexport function getLeagueSync(league: League): LeagueData {\n checkLeague(league);\n const d = loaded.get(league);\n if (!d)\n throw new InputError(\n `league ${league} is not loaded; await loadLeague(\"${league}\") or preloadAll() before calling the *Sync variant`,\n );\n return d;\n}\n/** Port of `_index.season_bounds`: [first, last]; last = max(latest alias season, next year). */\nexport function seasonBounds(league?: League): readonly [number, number] | null {\n if (INDEX_FIRST_SEASON === null || INDEX_LAST_ALIAS_SEASON === null) return null;\n const last = Math.max(INDEX_LAST_ALIAS_SEASON, new Date().getFullYear() + 1);\n const first = league ? (LEAGUE_META[league].firstSeason ?? INDEX_FIRST_SEASON) : INDEX_FIRST_SEASON;\n return [first, last];\n}\n/**\n * The latest season any dated alias of `league` names (the last relocation or rename the index records), or `null`\n * when no alias is dated. It is not the current season: the NHL's is 1997. A value resolved without a season is\n * matched at this season first.\n */\nexport const latestSeason = (league: League): number | null => LEAGUE_META[league].latestSeason;\n","import type { League } from \"./data/index.js\";\nimport { InputError } from \"./errors.js\";\nimport { seasonBounds } from \"./index-data.js\";\nimport type { SeasonInput } from \"./types.js\";\n\nconst FLOAT_ID = /^-?\\d+\\.0+$/;\nconst PUNCT: Record<string, string> = { \"‘\": \"'\", \"’\": \"'\", \"–\": \"-\", \"—\": \"-\" };\n\n/** Port of `_normalize.norm_value`: trimmed, accents + typographic punctuation folded, case-folded, integral numbers without \".0\". */\nexport function normValue(value: unknown): string | null {\n if (value === null || value === undefined) return null;\n if (typeof value === \"boolean\") return String(value);\n if (typeof value === \"bigint\") return value.toString();\n if (typeof value === \"number\") return Number.isNaN(value) ? null : String(value);\n let s = String(value).trim();\n // biome-ignore lint/suspicious/noControlCharactersInRegex: ASCII fast-path test\n if (!/^[\\x00-\\x7F]*$/.test(s))\n s = s\n .replace(/[‘’–—]/g, (c) => PUNCT[c] ?? c)\n .normalize(\"NFKD\")\n .replace(/\\p{M}/gu, \"\");\n s = s.toLowerCase().replace(/ß/g, \"ss\").replace(/ς/g, \"σ\"); // Python casefold ≈ toLowerCase for these inputs; the oracle (Task 7) confirms\n if (FLOAT_ID.test(s)) s = s.split(\".\")[0] as string;\n return s || null;\n}\n\nexport function checkSeason(year: number, league?: League): void {\n const b = seasonBounds(league);\n if (b && !(b[0] <= year && year <= b[1]))\n throw new InputError(\n `season ${year} is outside the seasons sdvplot knows${league ? ` for ${league}` : \"\"} (${b[0]} to ${b[1]}); pass a year such as 2020`,\n );\n}\n\nconst SPLIT = /^\\s*(\\d{4})\\s*[-/]\\s*(\\d{2}|\\d{4})\\s*$/;\nexport function normSeason(value: SeasonInput, league?: League): number | null {\n if (value === null || value === undefined) return null;\n let year: number | null = null;\n if (typeof value === \"number\") {\n if (Number.isNaN(value)) return null;\n if (Number.isInteger(value)) year = value;\n } else if (/^\\d+$/.test(value.trim())) year = Number.parseInt(value.trim(), 10);\n if (year === null) {\n const m = typeof value === \"string\" ? SPLIT.exec(value) : null;\n const hint = m\n ? `; for a split season pass its ending year (${Number(m[1]) + 1} for '${String(value).trim()}')`\n : \"\";\n throw new InputError(`season must be a year such as 2020, got ${JSON.stringify(value)}${hint}`);\n }\n checkSeason(year, league);\n return year;\n}\n","import { InputError } from \"./errors.js\";\nimport { normValue } from \"./normalize.js\";\nimport type { Value } from \"./resolve.js\";\nimport type { HeadshotIdSystem } from \"./types.js\";\n\n/** Port of `_headshots.ESPN_HEADSHOT_LEAGUES`. */\nexport const ESPN_HEADSHOT_LEAGUES = {\n nfl: \"nfl\",\n nba: \"nba\",\n wnba: \"wnba\",\n mlb: \"mlb\",\n nhl: \"nhl\",\n cfb: \"college-football\",\n mbb: \"mens-college-basketball\",\n wbb: \"womens-college-basketball\",\n} as const;\n/** Leagues with ESPN headshots (gsis ids are nfl-only, and nfl is one of these). */\nexport type EspnHeadshotLeague = keyof typeof ESPN_HEADSHOT_LEAGUES;\n\n/** Width / height of a headshot image box (the ESPN combiner crop). */\nexport const HEADSHOT_ASPECT: number = 600 / 436;\n\n// League-id CDN builders, ported from sdvplotR `league_headshot_url`.\nexport function nbaHeadshotUrl(id: string | number): string {\n return `https://cdn.nba.com/headshots/nba/latest/260x190/${id}.png`;\n}\nexport function wnbaHeadshotUrl(id: string | number): string {\n return `https://cdn.wnba.com/headshots/wnba/latest/260x190/${id}.png`;\n}\nexport function mlbHeadshotUrl(id: string | number): string {\n return `https://img.mlbstatic.com/mlb-photos/image/upload/d_people:generic:headshot:67:current.png/w_213,q_auto:best/v1/people/${id}/headshot/67/current.png`;\n}\nexport function nhlHeadshotUrl(id: string | number): string {\n return `https://assets.nhle.com/mugs/nhl/latest/${id}.png`;\n}\n\nfunction espn(id: string, league: string): string | undefined {\n if (!/^\\d+$/.test(id)) return undefined;\n return `https://a.espncdn.com/combiner/i?img=/i/headshots/${ESPN_HEADSHOT_LEAGUES[league as EspnHeadshotLeague]}/players/full/${id}.png`;\n}\n\ntype GsisRow = { espn_id: string | null; headshot: string | null };\nlet gsis: Readonly<Record<string, GsisRow>> | undefined;\nlet gsisPending: Promise<void> | undefined;\n/** Loads the bundled nflverse gsis map (its own ~3 MB chunk, imported only on demand); required before `headshotUrl(…, { idSystem: \"gsis\" })`. Nothing is downloaded. */\nexport async function loadGsis(): Promise<void> {\n if (gsis) return;\n gsisPending ??= import(\"./data/nfl_gsis.js\").then(\n (m) => {\n gsis = m.NFL_GSIS;\n },\n (e: unknown) => {\n gsisPending = undefined;\n throw e;\n },\n );\n return gsisPending;\n}\n\n/**\n * Sync port of `_headshots.headshot_url`. ESPN ids need no data; gsis ids need `await loadGsis()` (or `preloadAll()`)\n * first.\n *\n * @example\n * ```ts\n * import { headshotUrl } from \"@sportsdataverse/sdvplot\";\n *\n * headshotUrl(\"3139477\", \"nfl\"); // Patrick Mahomes, by ESPN athlete id\n * ```\n */\nexport function headshotUrl(\n playerId: Value,\n league: EspnHeadshotLeague,\n { idSystem = \"espn\" }: { idSystem?: HeadshotIdSystem } = {},\n): string | undefined {\n if (idSystem === \"espn\" && !Object.hasOwn(ESPN_HEADSHOT_LEAGUES, league))\n throw new InputError(\n `no ESPN headshots for league ${JSON.stringify(league)}; supported: ${Object.keys(ESPN_HEADSHOT_LEAGUES).sort().join(\", \")}`,\n );\n if (idSystem !== \"espn\" && !(idSystem === \"gsis\" && league === \"nfl\"))\n throw new InputError(\n `idSystem must be 'espn' (any league) or 'gsis' (nfl), got ${JSON.stringify(idSystem)} for ${JSON.stringify(league)}`,\n );\n if (idSystem === \"gsis\" && !gsis)\n throw new InputError(\n 'the gsis map is not loaded; await loadGsis() (or preloadAll()) before headshotUrl(…, { idSystem: \"gsis\" })',\n );\n const pid = normValue(playerId);\n if (pid === null) return undefined;\n if (idSystem === \"espn\") return espn(pid, league);\n const key = String(playerId).trim();\n const row = gsis && Object.hasOwn(gsis, key) ? gsis[key] : undefined;\n if (!row) return undefined;\n if (row.headshot) {\n const t = row.headshot.replace(\"/f_auto,q_auto/\", \"/t_headshot_desktop/f_auto/\");\n return t.endsWith(\".png\") ? t : `${t}.png`;\n }\n return row.espn_id ? espn(row.espn_id, \"nfl\") : undefined;\n}\n","import type { League, LeagueData } from \"./data/index.js\";\nimport { InputError, UnresolvedTeamError, warn } from \"./errors.js\";\nimport { getLeagueSync, latestSeason, loadLeague } from \"./index-data.js\";\nimport { checkSeason, normSeason, normValue } from \"./normalize.js\";\nimport { EXPLICIT_ONLY, type IdSystem, PRIORITY, type SeasonInput, type TeamId, asTeamId } from \"./types.js\";\n\nexport type Value = string | number | bigint | null | undefined;\nexport type Resolved<T> = T extends readonly Value[] ? (TeamId | undefined)[] : TeamId | undefined;\nexport interface ResolveOptions {\n season?: SeasonInput | readonly SeasonInput[];\n idSystem?: IdSystem;\n strict?: boolean;\n}\n\ntype Cand = readonly [teamId: string, from: number | null, to: number | null];\ntype Lookup = Map<string, Map<string, Cand[]>>; // id_system → normalized value → candidates\nconst lookups = new WeakMap<LeagueData, Lookup>();\nfunction lookup(d: LeagueData): Lookup {\n let l = lookups.get(d);\n if (!l) {\n l = new Map();\n for (const a of d.aliases) {\n const k = normValue(a.value);\n if (k === null) continue;\n let sys = l.get(a.id_system);\n if (!sys) {\n sys = new Map();\n l.set(a.id_system, sys);\n }\n let c = sys.get(k);\n if (!c) {\n c = [];\n sys.set(k, c);\n }\n c.push([a.team_id, a.valid_from, a.valid_to]);\n }\n lookups.set(d, l);\n }\n return l;\n}\nconst covers = (lo: number | null, hi: number | null, s: number): boolean =>\n (lo === null || s >= lo) && (hi === null || s <= hi);\n\nfunction systems(idSystem: IdSystem): readonly string[] {\n if (\n idSystem !== \"auto\" &&\n !(PRIORITY as readonly string[]).includes(idSystem) &&\n !(EXPLICIT_ONLY as readonly string[]).includes(idSystem)\n )\n throw new InputError(\n `unknown idSystem ${JSON.stringify(idSystem)}; use \"auto\" or one of ${[...PRIORITY, ...EXPLICIT_ONLY].join(\", \")}`,\n );\n return idSystem === \"auto\" ? PRIORITY : [idSystem];\n}\n\n/** Python `_match`: passes [season, latest, none] (deduped, nulls dropped) × systems in order; first system with a candidate decides. */\nfunction match(\n key: string,\n season: number | null,\n sys: readonly string[],\n table: Lookup,\n latest: number | null,\n): string | readonly string[] | null {\n const whens: (number | null)[] = [];\n for (const w of [season, latest]) if (w !== null && !whens.includes(w)) whens.push(w);\n whens.push(null);\n for (const when of whens)\n for (const s of sys) {\n let cands = table.get(s)?.get(key);\n if (!cands?.length) continue;\n if (when !== null) {\n cands = cands.filter((c) => covers(c[1], c[2], when));\n if (!cands.length) continue;\n }\n const ids = [...new Set(cands.map((c) => c[0]))];\n return ids.length === 1 ? (ids[0] as string) : ids.sort();\n }\n return null;\n}\n\nfunction seasons(season: ResolveOptions[\"season\"], n: number, league: League): (number | null)[] {\n if (!Array.isArray(season)) return Array<number | null>(n).fill(normSeason(season as SeasonInput, league));\n if (season.length !== n)\n throw new InputError(`season has ${season.length} values but there are ${n} teams`);\n return (season as readonly SeasonInput[]).map((s) => normSeason(s, league));\n}\n\nfunction resolveIds(\n items: readonly Value[],\n league: League,\n ss: (number | null)[],\n idSystem: IdSystem,\n d: LeagueData,\n): { out: (TeamId | undefined)[]; unresolved: Map<string, string> } {\n const sys = systems(idSystem);\n for (const y of new Set(ss)) if (y !== null) checkSeason(y, league);\n const table = lookup(d);\n const latest = latestSeason(league);\n let names: Map<string, string> | undefined; // only the ambiguous message reads it: build it on first use, not per call\n const nameOf = (t: string): string => {\n names ??= new Map(d.teams.map((x) => [x.team_id, x.name ?? \"\"]));\n return names.get(t) ?? \"\";\n };\n const out: (TeamId | undefined)[] = [];\n const unresolved = new Map<string, string>();\n const memo = new Map<string, ReturnType<typeof match>>();\n items.forEach((v, i) => {\n const key = normValue(v);\n if (key === null) {\n out.push(undefined);\n return;\n }\n const mk = `${key}\\u0000${ss[i]}`;\n if (!memo.has(mk)) memo.set(mk, match(key, ss[i] ?? null, sys, table, latest));\n const hit = memo.get(mk) as ReturnType<typeof match>;\n if (hit === null || Array.isArray(hit)) {\n unresolved.set(\n String(v),\n hit === null\n ? \"unknown\"\n : `ambiguous: ${(hit as readonly string[]).map((t) => `${t} ${nameOf(t)}`.trim()).join(\" or \")}`,\n );\n out.push(undefined);\n } else out.push(asTeamId(hit as string));\n });\n return { out, unresolved };\n}\n\nfunction report(unresolved: Map<string, string>, league: League, strict: boolean): void {\n const shown = [...unresolved].map(([v, why]) => `'${v}' (${why})`).join(\", \");\n let msg = `${unresolved.size} value(s) did not resolve to a ${league} team: ${shown}`;\n if ([...unresolved.values()].some((w) => w.startsWith(\"ambiguous\")))\n msg += \"; pass season for a code reused across eras, or idSystem for the id system of the values\";\n if (strict) throw new UnresolvedTeamError(msg);\n warn(\n `${league}:${[...unresolved.keys()].join(\",\")}`,\n `${msg}. Use suggest() for candidates, or strict: true to throw.`,\n );\n}\n\nexport function resolveSync<T extends Value | readonly Value[]>(\n values: T,\n league: League,\n opts: ResolveOptions = {},\n): Resolved<T> {\n const d = getLeagueSync(league);\n const arr = Array.isArray(values);\n const items = (arr ? values : [values]) as readonly Value[];\n const { out, unresolved } = resolveIds(\n items,\n league,\n seasons(opts.season, items.length, league),\n opts.idSystem ?? \"auto\",\n d,\n );\n if (unresolved.size) report(unresolved, league, opts.strict ?? false);\n return (arr ? out : out[0]) as Resolved<T>;\n}\n/**\n * Resolve team values (abbreviations, ids, names) to ESPN team ids, loading the league first. Unknown values give\n * `undefined` and one warning per call; `strict: true` throws `UnresolvedTeamError`.\n *\n * @example\n * ```ts\n * import { resolve } from \"@sportsdataverse/sdvplot\";\n *\n * await resolve([\"KC\", \"Kansas City Chiefs\", \"OAK\"], \"nfl\", { season: 2019 });\n * ```\n */\nexport async function resolve<T extends Value | readonly Value[]>(\n values: T,\n league: League,\n opts: ResolveOptions = {},\n): Promise<Resolved<T>> {\n await loadLeague(league);\n return resolveSync(values, league, opts);\n}\n\n/** Port of `suggest`: difflib.get_close_matches(cutoff 0.6): SequenceMatcher(a=candidate, b=query).ratio() ≥ 0.6, best first, ties by candidate key descending; never picks one. */\nexport async function suggest(\n value: Value,\n league: League,\n opts: { n?: number } = {},\n): Promise<Array<[TeamId, string]>> {\n const n = opts.n ?? 5;\n if (!Number.isInteger(n) || n < 1)\n throw new InputError(\n `n is the most candidates to return, an int of at least 1, got ${JSON.stringify(n)}`,\n );\n const d = await loadLeague(league);\n const key = normValue(value);\n if (key === null) return [];\n const merged = new Map<string, string[]>();\n for (const sys of lookup(d).values())\n for (const [k, cands] of sys) merged.set(k, [...(merged.get(k) ?? []), ...cands.map((c) => c[0])]);\n const names = new Map(d.teams.map((t) => [t.team_id, t.name ?? t.team_id]));\n const scored = [...merged.keys()]\n .map((k) => [k, ratio(k, key)] as const)\n .filter(([, r]) => r >= 0.6)\n .sort((a, b) => b[1] - a[1] || (a[0] < b[0] ? 1 : a[0] > b[0] ? -1 : 0))\n .slice(0, n * 3);\n const out: Array<[TeamId, string]> = [];\n for (const [k] of scored)\n for (const tid of merged.get(k) ?? [])\n if (!out.some(([t]) => t === tid)) out.push([asTeamId(tid), names.get(tid) ?? tid]);\n return out.slice(0, n);\n}\n/** difflib.SequenceMatcher.ratio(): 2*M/T with M = matched chars via longest-common-substring recursion. */\nexport function ratio(a: string, b: string): number {\n const matches = (x: string, y: string): number => {\n if (!x || !y) return 0;\n let bi = 0;\n let bj = 0;\n let best = 0;\n let prev: number[] = Array<number>(y.length + 1).fill(0);\n for (let i = 1; i <= x.length; i++) {\n const cur: number[] = Array<number>(y.length + 1).fill(0);\n for (let j = 1; j <= y.length; j++)\n if (x[i - 1] === y[j - 1]) {\n const v = (prev[j - 1] ?? 0) + 1;\n cur[j] = v;\n if (v > best) {\n best = v;\n bi = i;\n bj = j;\n }\n }\n prev = cur;\n }\n if (!best) return 0;\n return best + matches(x.slice(0, bi - best), y.slice(0, bj - best)) + matches(x.slice(bi), y.slice(bj));\n };\n return a.length + b.length === 0 ? 1 : (2 * matches(a, b)) / (a.length + b.length);\n}\n","import { InputError, warn } from \"./errors.js\";\nimport { checkLeague, getLeagueSync, loadLeague } from \"./index-data.js\";\nimport { type ResolveOptions, type Resolved, type Value, resolveSync } from \"./resolve.js\";\nimport type { League, Which } from \"./types.js\";\n\nexport interface ColorOptions extends ResolveOptions {\n which?: Which;\n}\nexport type ColorResult<T> = T extends readonly Value[] ? (string | undefined)[] : string | undefined;\n\nconst COLUMNS = { primary: \"color_primary\", secondary: \"color_secondary\" } as const;\nfunction column(which: string): \"color_primary\" | \"color_secondary\" {\n if (which !== \"primary\" && which !== \"secondary\")\n throw new InputError(`which must be one of primary, secondary, got ${JSON.stringify(which)}`);\n return COLUMNS[which];\n}\nfunction colorMap(league: League, col: \"color_primary\" | \"color_secondary\"): Map<string, string> {\n const m = new Map<string, string>();\n for (const t of getLeagueSync(league).teams) if (t[col]) m.set(t.team_id, t[col] as string);\n return m;\n}\n\n/**\n * `{team: \"#hex\"}` for a league. Without `teams`: keyed by abbr, or team_id where abbr is null/shared (one warning).\n * With `teams`: keyed by the caller's own values; first team wins on a reused value.\n *\n * @example\n * ```ts\n * import { palette } from \"@sportsdataverse/sdvplot\";\n *\n * await palette(\"nfl\", [\"KC\", \"BUF\", \"PHI\"]);\n * ```\n */\nexport async function palette(\n league: League,\n teams?: Value | readonly Value[],\n opts: ColorOptions = {},\n): Promise<Record<string, string>> {\n const col = column(opts.which ?? \"primary\");\n checkLeague(league);\n await loadLeague(league);\n const colors = colorMap(league, col);\n const out: Record<string, string> = Object.create(null);\n if (teams == null) {\n const rows = getLeagueSync(league).teams;\n const counts = new Map<string, number>();\n for (const t of rows) if (t.abbr) counts.set(t.abbr, (counts.get(t.abbr) ?? 0) + 1);\n const shared = [...counts].filter(([, n]) => n > 1).map(([a]) => a);\n if (shared.length)\n warn(\n `palette:shared:${league}`,\n `abbreviations shared by several ${league} teams are keyed by team_id: ${shared.sort().join(\", \")}`,\n );\n for (const t of rows) {\n const c = colors.get(t.team_id);\n if (c === undefined) continue;\n out[!t.abbr || shared.includes(t.abbr) ? t.team_id : t.abbr] = c;\n }\n return out;\n }\n const values = (Array.isArray(teams) ? teams : [teams]) as readonly Value[];\n const slot = values.find((v) => v === \"primary\" || v === \"secondary\");\n if (slot !== undefined)\n throw new InputError(\n `${JSON.stringify(slot)} is a color slot, not a team; pass it as an option: palette(league, teams, { which: \"${slot}\" })`,\n );\n const ss: unknown[] = Array.isArray(opts.season) ? opts.season : Array(values.length).fill(opts.season);\n if (ss.length !== values.length)\n throw new InputError(`season has ${ss.length} values but there are ${values.length} teams`);\n const seen = new Set<string>();\n const vs: Value[] = [];\n const ys: ResolveOptions[\"season\"][] = [];\n values.forEach((v, i) => {\n if (v === null || v === undefined) return;\n const k = `${typeof v}:${String(v)}\\u0000${String(ss[i])}`;\n if (seen.has(k)) return;\n seen.add(k);\n vs.push(v);\n ys.push(ss[i] as ResolveOptions[\"season\"]);\n });\n const ids = resolveSync(vs, league, { ...opts, season: ys as never });\n vs.forEach((v, i) => {\n const id = ids[i];\n const c = id === undefined ? undefined : colors.get(id);\n if (c !== undefined) out[String(v)] ??= c;\n });\n return out;\n}\n\n/** One `#hex` (or undefined) per team value, in the container the values came in. Call after the league is loaded. */\nexport function teamColorsSync<T extends Value | readonly Value[]>(\n league: League,\n teams: T,\n opts: ColorOptions = {},\n): ColorResult<T> {\n const col = column(opts.which ?? \"primary\");\n checkLeague(league);\n const colors = colorMap(league, col);\n const ids = resolveSync(teams, league, opts) as Resolved<T>;\n const pick = (id: string | undefined): string | undefined =>\n id === undefined ? undefined : colors.get(id);\n return (\n Array.isArray(ids) ? (ids as (string | undefined)[]).map(pick) : pick(ids as string | undefined)\n ) as ColorResult<T>;\n}\n\n/** Both colours for ONE team from a single resolve (one warning if unresolved). Internal: not in the barrel. */\nexport function teamColorPairSync(\n league: League,\n team: Value,\n opts: Omit<ColorOptions, \"which\"> = {},\n): { primary: string | undefined; secondary: string | undefined } {\n checkLeague(league);\n const id = resolveSync(team, league, opts) as string | undefined;\n const pick = (col: \"color_primary\" | \"color_secondary\") =>\n id === undefined ? undefined : colorMap(league, col).get(id);\n return { primary: pick(\"color_primary\"), secondary: pick(\"color_secondary\") };\n}\n\n/**\n * Team colour(s), loading the league first: one team gives one `#hex` (or `undefined`), an array gives one per team.\n * `which: \"secondary\"` picks the second colour; an unknown team gives `undefined` and one warning.\n *\n * @example\n * ```ts\n * import { teamColors } from \"@sportsdataverse/sdvplot\";\n *\n * await teamColors(\"nba\", [\"LAL\", \"BOS\"], { which: \"secondary\" });\n * ```\n */\nexport async function teamColors<T extends Value | readonly Value[]>(\n league: League,\n teams: T,\n opts: ColorOptions = {},\n): Promise<ColorResult<T>> {\n await loadLeague(league);\n return teamColorsSync(league, teams, opts);\n}\n"]}