fansunited-frontend-components 0.0.84 → 0.0.86

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 (117) hide show
  1. package/Betslip.js +1 -1
  2. package/ChanceGame.js +10 -10
  3. package/ClassicQuizPlay.js +1 -1
  4. package/CollectLead.js +7 -7
  5. package/CompetitorCard.js +2041 -1812
  6. package/Discussion.js +1 -1
  7. package/EitherOrPlay.js +1 -1
  8. package/EventCard.js +16 -16
  9. package/EventGamePlay.js +1 -1
  10. package/Leaderboard.js +13 -13
  11. package/List.js +15 -15
  12. package/MatchQuizPlay.js +1 -1
  13. package/PersonalityQuizPlay.js +1 -1
  14. package/PickThePair.js +11 -11
  15. package/PlayerOfTheMatch.js +22 -22
  16. package/PollVote.js +1 -1
  17. package/Predictor.js +1 -1
  18. package/README.md +86 -13
  19. package/Standings.js +10 -10
  20. package/TopX.js +3687 -3683
  21. package/chunks/{AccessTime-DIng4pYk.js → AccessTime-DZsXIVlS.js} +1 -1
  22. package/chunks/{AlertMessage-BWlMSgbb.js → AlertMessage-mdjyklCX.js} +5 -5
  23. package/chunks/{Avatar-Cl7jUti0.js → Avatar-D3yp-aRF.js} +3 -3
  24. package/chunks/{Button-BF5yQrSB.js → Button-Ba88lSnz.js} +3 -3
  25. package/chunks/{Card-DZnMgLzk.js → Card-ZbfN9iNz.js} +2 -2
  26. package/chunks/{CardActions-CP8UZhKB.js → CardActions-CmWWezXa.js} +6 -6
  27. package/chunks/{CardContent-B3da1XGq.js → CardContent-DxoVbjf2.js} +2 -2
  28. package/chunks/{ChanceGameEmbedVariant-CBXBs99j.js → ChanceGameEmbedVariant-s8IuiPTs.js} +10 -10
  29. package/chunks/{CheckCircle-Ba6A-omo.js → CheckCircle-BG2qEsq1.js} +1 -1
  30. package/chunks/{Chip-04IiPdT5.js → Chip-dm_ka0yY.js} +3 -3
  31. package/chunks/{Close-BI5dwj8o.js → Close-Da_jsGnv.js} +1 -1
  32. package/chunks/{Close-Dwdou7c8.js → Close-y509nyXQ.js} +1 -1
  33. package/chunks/{CollectLeadForm-CNHJfqvi.js → CollectLeadForm-CQLR-11r.js} +20 -20
  34. package/chunks/{ConsentsList-C5n3yhv4.js → ConsentsList-C-U7raxx.js} +6 -6
  35. package/chunks/{DirectionScope-BIc7TWs5.js → DirectionScope-naCviTG1.js} +1 -1
  36. package/chunks/{Divider-Bt9-5G8v.js → Divider-DQT1c9FQ.js} +3 -3
  37. package/chunks/{Edit-Cl5S7TCO.js → Edit-DaTdMbng.js} +4 -4
  38. package/chunks/{EmojiEvents-D6ZqjCfo.js → EmojiEvents-DFNrzPuy.js} +1 -1
  39. package/chunks/{FavoriteBorder-qttzmXy3.js → FavoriteBorder-CbmeWW2T.js} +1 -1
  40. package/chunks/{FormControl-CsQ1u5ap.js → FormControl-DgzOlvzS.js} +4 -4
  41. package/chunks/{FormLabel-Ch_UsZuc.js → FormLabel-BSFhHZnm.js} +3 -3
  42. package/chunks/{GlobalStyles-BNqsKbp3.js → GlobalStyles-DMO_VrN7.js} +1 -1
  43. package/chunks/{InlineSpinner-vEetFsB9.js → InlineSpinner-BDGu6S9a.js} +2 -2
  44. package/chunks/{Input-CrJDd0R2.js → Input-Cb3solC7.js} +3 -3
  45. package/chunks/{KeyboardArrowDown-Ck_KYBP0.js → KeyboardArrowDown-p7zQXgQW.js} +1 -1
  46. package/chunks/{KeyboardArrowRight-Da1F75tc.js → KeyboardArrowRight-CxFWmjUb.js} +1 -1
  47. package/chunks/{Link-387Dz8iP.js → Link-5-5Tkbsx.js} +2 -2
  48. package/chunks/{ListItemButton-Dc2npFEi.js → ListItemButton-ClXre7Xx.js} +3 -3
  49. package/chunks/{ModalClose-u-S-dkR3.js → ModalClose-DvCxOJfi.js} +6 -6
  50. package/chunks/{ModalDialog-B85LoQPY.js → ModalDialog-BfVORTO9.js} +6 -6
  51. package/chunks/{NotFoundSkeleton-CfNZmwRh.js → NotFoundSkeleton-CBL3Q0e2.js} +2 -2
  52. package/chunks/{Notification-B4yx2-ti.js → Notification-DEfeZ_zB.js} +6 -6
  53. package/chunks/{OverlayScoreStateSkeleton-CBJkyboN.js → OverlayScoreStateSkeleton-BfWHiCoT.js} +4 -4
  54. package/chunks/{OverlayScoreStateWrapperSkeleton-DrMZBh1N.js → OverlayScoreStateWrapperSkeleton-DGCoxYU_.js} +1 -1
  55. package/chunks/{OverlaySignInSkeleton-fvdU5yvx.js → OverlaySignInSkeleton-Bjs-kbH_.js} +4 -4
  56. package/chunks/{OverlaySkeleton-Bs4cQ7IY.js → OverlaySkeleton-CYq0fXsc.js} +9 -9
  57. package/chunks/{Person-C3mqI-IY.js → Person-BvTGLIe1.js} +1 -1
  58. package/chunks/{PersonOutline-Z5sidQSN.js → PersonOutline-DylGIHBz.js} +1 -1
  59. package/chunks/{PickOneOfX-D3cu1GLY.js → PickOneOfX-Cw5YmUZK.js} +3 -3
  60. package/chunks/{Popper-By0Sdkjb.js → Popper-CiuNPpkb.js} +3 -3
  61. package/chunks/{Portal-DD3X3X0b.js → Portal-DzlKOG-O.js} +2 -2
  62. package/chunks/{Portal-BTnSMBHa.js → Portal-IratSYID.js} +1 -1
  63. package/chunks/{Predictor-TCMMMhdo.js → Predictor-C3Kr_dEA.js} +3768 -3747
  64. package/chunks/{PrizeCard-Csw_wrFV.js → PrizeCard-CwEzUVMJ.js} +325 -205
  65. package/chunks/{Search-D-RjUXXT.js → Search-B7BcOoCG.js} +1 -1
  66. package/chunks/{Select-VVas3KeU.js → Select-oNgIy1H3.js} +6 -6
  67. package/chunks/{Sheet-Dxmq7lcU.js → Sheet-DVdyMkHi.js} +2 -2
  68. package/chunks/{SignInCta-BrOH6CrQ.js → SignInCta-DcNkObOQ.js} +3 -3
  69. package/chunks/{Spinner-DEf9YWy9.js → Spinner-DBETUiAV.js} +2 -2
  70. package/chunks/{SportsSoccer-Bjfc11jt.js → SportsSoccer-DGQ7NYD7.js} +1 -1
  71. package/chunks/{Stack-BZadM22I.js → Stack-CppwMpFB.js} +2 -2
  72. package/chunks/{StandardContentSkeleton-DMVsVlzX.js → StandardContentSkeleton-B8nlGHR6.js} +1 -1
  73. package/chunks/{Table-1CWAmBw4.js → Table-Dk1ukQa6.js} +2 -2
  74. package/chunks/{Tabs-C8lKOBnZ.js → Tabs-CmFfmpyp.js} +4 -4
  75. package/chunks/{Textarea-DdXut5qA.js → Textarea-BRHSeC7k.js} +3 -3
  76. package/chunks/{TimerOutlined-565_o9Ld.js → TimerOutlined-iVv_QE1G.js} +1 -1
  77. package/chunks/{Tooltip-B8-odXDM.js → Tooltip-BaFJF8Hm.js} +4 -4
  78. package/chunks/{Typography-BdToTTZ6.js → Typography-Du02dCpZ.js} +1 -1
  79. package/chunks/{WorkspacePremiumOutlined-CAHizmgu.js → WorkspacePremiumOutlined-CgWyDKg5.js} +1 -1
  80. package/chunks/{createSvgIcon-vBfsa1Jk.js → createSvgIcon-BkXgNHbb.js} +1 -1
  81. package/chunks/{createSvgIcon-sZdWifk4.js → createSvgIcon-DvpPe0m8.js} +2 -2
  82. package/chunks/{dividerClasses-DydvRMAT.js → dividerClasses-_a2MkLdj.js} +1 -1
  83. package/chunks/{elementAcceptingRef-C9-rm0Qg.js → elementAcceptingRef-CFCF4JTN.js} +1 -1
  84. package/chunks/{formLabelClasses-CaZ2LhLU.js → formLabelClasses-DnxGgDxQ.js} +1 -1
  85. package/chunks/{helpers-BqT5Gaj_.js → helpers-BVcELFvC.js} +1 -1
  86. package/chunks/index-4WCNqsoq.js +4 -0
  87. package/chunks/index-7NrjBlB3.js +4 -0
  88. package/chunks/index-Blkau85P.js +4 -0
  89. package/chunks/index-CnOFf4hs.js +4 -0
  90. package/chunks/index-CwIKdVGP.js +4 -0
  91. package/chunks/index-DjIGlrHG.js +4 -0
  92. package/chunks/{index-wQVvSbKD.js → index-Jo_fbxsQ.js} +1 -1
  93. package/chunks/index-a8UF4nkE.js +4 -0
  94. package/chunks/{main-Ctg8yMhU.js → main-Che3VjMd.js} +19 -19
  95. package/chunks/{main-B_jPxpdH.js → main-CpERt7cC.js} +30 -30
  96. package/chunks/{main-Daa4Ys1b.js → main-CpXKD7Ei.js} +17 -17
  97. package/chunks/{main-BodcBG7i.js → main-DZoTUuoz.js} +34 -34
  98. package/chunks/{main-BGceteNA.js → main-NkO906fN.js} +3 -3
  99. package/chunks/{main-BQ1LUA4B.js → main-P_iMTyYG.js} +25 -25
  100. package/chunks/{main-fcnxBtBe.js → main-RD9fUvtz.js} +28 -28
  101. package/chunks/{main-D0W90-WP.js → main-f7EUpatJ.js} +22 -22
  102. package/chunks/{useButton-B7X3j09c.js → useButton-Qs8SQ3Oc.js} +2 -2
  103. package/chunks/{useConsents-9akY7De6.js → useConsents-DPYMv1XL.js} +12 -12
  104. package/chunks/{useEventCallback-BGNUZz2p.js → useEventCallback-CdVOlM24.js} +1 -1
  105. package/chunks/{useForwardedInput-C1p5H7xz.js → useForwardedInput-D_hsYWHs.js} +2 -2
  106. package/chunks/{useImageVariant-Bv_ox-BF.js → useImageVariant-DKmsQtyv.js} +1 -1
  107. package/chunks/{useParticipationDraft-D1dvkc_w.js → useParticipationDraft-D9mIeJ3U.js} +6 -6
  108. package/chunks/{useSwitch-CcdDHpCu.js → useSwitch-CqvwWw9p.js} +2 -2
  109. package/index.js +4 -4
  110. package/package.json +2 -2
  111. package/chunks/index-AigkdLMP.js +0 -4
  112. package/chunks/index-B4mpFAU6.js +0 -4
  113. package/chunks/index-B8BdDJ_-.js +0 -4
  114. package/chunks/index-Bj52W3S8.js +0 -4
  115. package/chunks/index-C70XGGoo.js +0 -4
  116. package/chunks/index-DqaWntF9.js +0 -4
  117. package/chunks/index-Dy8p1aJG.js +0 -4
package/Discussion.js CHANGED
@@ -1,4 +1,4 @@
1
- import { M as o } from "./chunks/main-Daa4Ys1b.js";
1
+ import { M as o } from "./chunks/main-CpXKD7Ei.js";
2
2
  const i = o;
3
3
  export {
4
4
  i as Discussion
package/EitherOrPlay.js CHANGED
@@ -1,4 +1,4 @@
1
- import { M as r } from "./chunks/main-fcnxBtBe.js";
1
+ import { M as r } from "./chunks/main-RD9fUvtz.js";
2
2
  const t = r;
3
3
  export {
4
4
  t as EitherOrPlay
package/EventCard.js CHANGED
@@ -1,22 +1,22 @@
1
1
  import { jsxs as p, Fragment as G, jsx as r } from "react/jsx-runtime";
2
2
  import K, { useRef as Se, useState as D, useCallback as we, useEffect as fe, useMemo as de, useContext as zn, useLayoutEffect as Pn } from "react";
3
- import { g as on, u as rn, b as Dn, v as an, A as Mn, B as l, z as bt, a as me, f as Gn, d as Hn, y as et, O as Un, n as Bn, i as St, p as jn, o as Vn, q as Kn, r as Yn, C as Xn, s as Qn, E as qn, t as Zn, w as Jn } from "./chunks/PrizeCard-Csw_wrFV.js";
4
- import { S as eo } from "./chunks/Spinner-DEf9YWy9.js";
3
+ import { g as on, u as rn, b as Dn, v as an, A as Mn, B as l, z as bt, a as me, f as Gn, d as Hn, y as et, O as Un, n as Bn, i as St, p as jn, o as Vn, q as Kn, r as Yn, C as Xn, s as Qn, E as qn, t as Zn, w as Jn } from "./chunks/PrizeCard-CwEzUVMJ.js";
4
+ import { S as eo } from "./chunks/Spinner-DBETUiAV.js";
5
5
  import { createPortal as wt } from "react-dom";
6
- import { h as Me } from "./chunks/helpers-BqT5Gaj_.js";
7
- import { E as ft } from "./chunks/EmojiEvents-D6ZqjCfo.js";
8
- import { T as O } from "./chunks/Typography-BdToTTZ6.js";
9
- import { S as rt } from "./chunks/Sheet-Dxmq7lcU.js";
10
- import { T as to } from "./chunks/Tooltip-B8-odXDM.js";
11
- import { K as Pe, a as no } from "./chunks/KeyboardArrowDown-Ck_KYBP0.js";
12
- import { c as Ue } from "./chunks/createSvgIcon-vBfsa1Jk.js";
13
- import { I as oo } from "./chunks/InlineSpinner-vEetFsB9.js";
14
- import { N as ro } from "./chunks/Notification-B4yx2-ti.js";
15
- import { C as tt, E as io, D as It, S as ao, a as so } from "./chunks/SportsSoccer-Bjfc11jt.js";
16
- import { K as lo, a as co } from "./chunks/KeyboardArrowRight-Da1F75tc.js";
17
- import { P as mo } from "./chunks/PersonOutline-Z5sidQSN.js";
18
- import { P as sn } from "./chunks/Person-C3mqI-IY.js";
19
- import { G as uo } from "./chunks/GlobalStyles-BNqsKbp3.js";
6
+ import { h as Me } from "./chunks/helpers-BVcELFvC.js";
7
+ import { E as ft } from "./chunks/EmojiEvents-DFNrzPuy.js";
8
+ import { T as O } from "./chunks/Typography-Du02dCpZ.js";
9
+ import { S as rt } from "./chunks/Sheet-DVdyMkHi.js";
10
+ import { T as to } from "./chunks/Tooltip-BaFJF8Hm.js";
11
+ import { K as Pe, a as no } from "./chunks/KeyboardArrowDown-p7zQXgQW.js";
12
+ import { c as Ue } from "./chunks/createSvgIcon-BkXgNHbb.js";
13
+ import { I as oo } from "./chunks/InlineSpinner-BDGu6S9a.js";
14
+ import { N as ro } from "./chunks/Notification-DEfeZ_zB.js";
15
+ import { C as tt, E as io, D as It, S as ao, a as so } from "./chunks/SportsSoccer-DGQ7NYD7.js";
16
+ import { K as lo, a as co } from "./chunks/KeyboardArrowRight-CxFWmjUb.js";
17
+ import { P as mo } from "./chunks/PersonOutline-DylGIHBz.js";
18
+ import { P as sn } from "./chunks/Person-BvTGLIe1.js";
19
+ import { G as uo } from "./chunks/GlobalStyles-DMO_VrN7.js";
20
20
  const it = ({
21
21
  title: e,
22
22
  children: n,
package/EventGamePlay.js CHANGED
@@ -1,4 +1,4 @@
1
- import { M as a } from "./chunks/main-B_jPxpdH.js";
1
+ import { M as a } from "./chunks/main-CpERt7cC.js";
2
2
  const t = a;
3
3
  export {
4
4
  t as EventGamePlay
package/Leaderboard.js CHANGED
@@ -1,19 +1,19 @@
1
1
  import { jsxs as E, jsx as l, Fragment as ce } from "react/jsx-runtime";
2
2
  import z, { useState as B, useEffect as Q, useCallback as me, useMemo as D } from "react";
3
- import { a as X, b as fe, v as he, x as ge, g as G, f as de, u as O, d as j, B as L, c as ue, m as be, p as ye, o as xe, q as Ce, r as ve, C as Te, s as Pe, E as Se, t as we, w as Ee } from "./chunks/PrizeCard-Csw_wrFV.js";
3
+ import { a as X, b as fe, v as he, x as ge, g as G, f as de, u as O, d as j, B as L, c as ue, m as be, p as ye, o as xe, q as Ce, r as ve, C as Te, s as Pe, E as Se, t as we, w as Ee } from "./chunks/PrizeCard-CwEzUVMJ.js";
4
4
  import { createPortal as Ae } from "react-dom";
5
- import { A as J } from "./chunks/AlertMessage-BWlMSgbb.js";
6
- import { F as Ie } from "./chunks/FormLabel-Ch_UsZuc.js";
7
- import { T as R } from "./chunks/Typography-BdToTTZ6.js";
8
- import { S as Re, a as Le } from "./chunks/Select-VVas3KeU.js";
9
- import { P as ee } from "./chunks/Person-C3mqI-IY.js";
10
- import { h as U, a as Me } from "./chunks/helpers-BqT5Gaj_.js";
11
- import { S as ze } from "./chunks/Spinner-DEf9YWy9.js";
12
- import { S as Be } from "./chunks/Sheet-Dxmq7lcU.js";
13
- import { T as Fe } from "./chunks/Table-1CWAmBw4.js";
14
- import { A as te } from "./chunks/Avatar-Cl7jUti0.js";
15
- import { D as H } from "./chunks/DirectionScope-BIc7TWs5.js";
16
- import { I as k, B as re } from "./chunks/Button-BF5yQrSB.js";
5
+ import { A as J } from "./chunks/AlertMessage-mdjyklCX.js";
6
+ import { F as Ie } from "./chunks/FormLabel-BSFhHZnm.js";
7
+ import { T as R } from "./chunks/Typography-Du02dCpZ.js";
8
+ import { S as Re, a as Le } from "./chunks/Select-oNgIy1H3.js";
9
+ import { P as ee } from "./chunks/Person-BvTGLIe1.js";
10
+ import { h as U, a as Me } from "./chunks/helpers-BVcELFvC.js";
11
+ import { S as ze } from "./chunks/Spinner-DBETUiAV.js";
12
+ import { S as Be } from "./chunks/Sheet-DVdyMkHi.js";
13
+ import { T as Fe } from "./chunks/Table-Dk1ukQa6.js";
14
+ import { A as te } from "./chunks/Avatar-D3yp-aRF.js";
15
+ import { D as H } from "./chunks/DirectionScope-naCviTG1.js";
16
+ import { I as k, B as re } from "./chunks/Button-Ba88lSnz.js";
17
17
  import { C as Ue, a as $e } from "./chunks/chevrons-right-CXSpQt9w.js";
18
18
  import { C as Qe } from "./chunks/chevron-left-CxfCSZcr.js";
19
19
  import { C as He } from "./chunks/chevron-right-BEQMacFn.js";
package/List.js CHANGED
@@ -1,21 +1,21 @@
1
1
  import { jsx as o, jsxs as E } from "react/jsx-runtime";
2
2
  import * as V from "react";
3
3
  import { useState as A, useRef as z, useCallback as W, useEffect as at, lazy as H, Suspense as ct } from "react";
4
- import { F as lt, G as dt, H as pt, _ as $, I as mt, P as h, g as ut, u as ft, f as ht, d as gt, a as J, i as et, B as x, b as yt, v as Ct } from "./chunks/PrizeCard-Csw_wrFV.js";
4
+ import { F as lt, G as dt, H as pt, _ as $, I as mt, P as h, g as ut, u as ft, f as ht, d as gt, a as J, i as et, B as x, b as yt, v as Ct } from "./chunks/PrizeCard-CwEzUVMJ.js";
5
5
  import "react-dom";
6
- import { P as xt } from "./chunks/Portal-BTnSMBHa.js";
7
- import { S as nt } from "./chunks/Spinner-DEf9YWy9.js";
8
- import { a as It } from "./chunks/index-wQVvSbKD.js";
9
- import { C as bt } from "./chunks/Card-DZnMgLzk.js";
10
- import { s as St, b as wt, c as Tt, d as Pt, T as D } from "./chunks/Typography-BdToTTZ6.js";
11
- import { C as Et } from "./chunks/CardContent-B3da1XGq.js";
12
- import { C as vt } from "./chunks/Chip-04IiPdT5.js";
6
+ import { P as xt } from "./chunks/Portal-IratSYID.js";
7
+ import { S as nt } from "./chunks/Spinner-DBETUiAV.js";
8
+ import { a as It } from "./chunks/index-Jo_fbxsQ.js";
9
+ import { C as bt } from "./chunks/Card-ZbfN9iNz.js";
10
+ import { s as St, b as wt, c as Tt, d as Pt, T as D } from "./chunks/Typography-Du02dCpZ.js";
11
+ import { C as Et } from "./chunks/CardContent-DxoVbjf2.js";
12
+ import { C as vt } from "./chunks/Chip-dm_ka0yY.js";
13
13
  import { U as Mt } from "./chunks/users-wbJRbqW8.js";
14
14
  import { W as Ut } from "./chunks/enums-B1lTCQvC.js";
15
- import { M as Lt, a as Rt } from "./chunks/ModalDialog-B85LoQPY.js";
16
- import { M as _t } from "./chunks/ModalClose-u-S-dkR3.js";
17
- import { D as k } from "./chunks/DirectionScope-BIc7TWs5.js";
18
- import { I as G, B as ot } from "./chunks/Button-BF5yQrSB.js";
15
+ import { M as Lt, a as Rt } from "./chunks/ModalDialog-BfVORTO9.js";
16
+ import { M as _t } from "./chunks/ModalClose-DvCxOJfi.js";
17
+ import { D as k } from "./chunks/DirectionScope-naCviTG1.js";
18
+ import { I as G, B as ot } from "./chunks/Button-Ba88lSnz.js";
19
19
  import { C as Ft, a as Ot } from "./chunks/chevrons-right-CXSpQt9w.js";
20
20
  import { C as zt } from "./chunks/chevron-left-CxfCSZcr.js";
21
21
  import { C as At } from "./chunks/chevron-right-BEQMacFn.js";
@@ -543,9 +543,9 @@ const rt = (e) => {
543
543
  ]
544
544
  }
545
545
  );
546
- }, qt = H(() => import("./chunks/index-C70XGGoo.js")), Jt = H(
547
- () => import("./chunks/index-Bj52W3S8.js")
548
- ), Xt = H(() => import("./chunks/index-Dy8p1aJG.js")), te = H(() => import("./chunks/index-B8BdDJ_-.js")), ee = H(() => import("./chunks/index-B4mpFAU6.js")), ne = H(() => import("./chunks/index-AigkdLMP.js")), oe = ({
546
+ }, qt = H(() => import("./chunks/index-CwIKdVGP.js")), Jt = H(
547
+ () => import("./chunks/index-a8UF4nkE.js")
548
+ ), Xt = H(() => import("./chunks/index-Blkau85P.js")), te = H(() => import("./chunks/index-CnOFf4hs.js")), ee = H(() => import("./chunks/index-DjIGlrHG.js")), ne = H(() => import("./chunks/index-4WCNqsoq.js")), oe = ({
549
549
  item: e,
550
550
  open: n,
551
551
  onClose: t,
package/MatchQuizPlay.js CHANGED
@@ -1,4 +1,4 @@
1
- import { M as a } from "./chunks/main-BodcBG7i.js";
1
+ import { M as a } from "./chunks/main-DZoTUuoz.js";
2
2
  const t = a;
3
3
  export {
4
4
  t as MatchQuizPlay
@@ -1,4 +1,4 @@
1
- import { M as o } from "./chunks/main-D0W90-WP.js";
1
+ import { M as o } from "./chunks/main-f7EUpatJ.js";
2
2
  const i = o;
3
3
  export {
4
4
  i as PersonalityQuizPlay
package/PickThePair.js CHANGED
@@ -1,19 +1,19 @@
1
1
  import { jsx as t, jsxs as w, Fragment as K } from "react/jsx-runtime";
2
- import { g as Ie, h as se, e as We, l as De } from "./chunks/helpers-BqT5Gaj_.js";
2
+ import { g as Ie, h as se, e as We, l as De } from "./chunks/helpers-BVcELFvC.js";
3
3
  import J, { useMemo as me, useCallback as Le, useEffect as de, useState as G } from "react";
4
- import { a as ne, i as Z, k as ze, f as ee, g as X, h as ge, B as x, u as re, l as Be, c as ue, d as te, m as ke, n as Ue, o as Ae, p as $e, q as _e, r as He, C as Ee, s as Oe, E as Me, t as je, w as Ne } from "./chunks/PrizeCard-Csw_wrFV.js";
4
+ import { a as ne, i as Z, k as ze, f as ee, g as X, h as ge, B as x, u as re, l as Be, c as ue, d as te, m as ke, n as Ue, o as Ae, p as $e, q as _e, r as He, C as Ee, s as Oe, E as Me, t as je, w as Ne } from "./chunks/PrizeCard-CwEzUVMJ.js";
5
5
  import { P as le, W as fe } from "./chunks/enums-B1lTCQvC.js";
6
- import { S as Ve } from "./chunks/Spinner-DEf9YWy9.js";
6
+ import { S as Ve } from "./chunks/Spinner-DBETUiAV.js";
7
7
  import { createPortal as Ye } from "react-dom";
8
8
  import { u as qe } from "./chunks/useInfoPage-BHdgKdme.js";
9
- import { N as Xe } from "./chunks/NotFoundSkeleton-CfNZmwRh.js";
10
- import { S as Ge, O as Ke } from "./chunks/OverlaySkeleton-Bs4cQ7IY.js";
11
- import { C as Qe } from "./chunks/CollectLeadForm-CNHJfqvi.js";
12
- import { u as he } from "./chunks/useImageVariant-Bv_ox-BF.js";
13
- import { T as p } from "./chunks/Typography-BdToTTZ6.js";
14
- import { T as Je } from "./chunks/TimerOutlined-565_o9Ld.js";
15
- import { B as pe } from "./chunks/Button-BF5yQrSB.js";
16
- import { d as Ze, a as et } from "./chunks/index-wQVvSbKD.js";
9
+ import { N as Xe } from "./chunks/NotFoundSkeleton-CBL3Q0e2.js";
10
+ import { S as Ge, O as Ke } from "./chunks/OverlaySkeleton-CYq0fXsc.js";
11
+ import { C as Qe } from "./chunks/CollectLeadForm-CQLR-11r.js";
12
+ import { u as he } from "./chunks/useImageVariant-DKmsQtyv.js";
13
+ import { T as p } from "./chunks/Typography-Du02dCpZ.js";
14
+ import { T as Je } from "./chunks/TimerOutlined-iVv_QE1G.js";
15
+ import { B as pe } from "./chunks/Button-Ba88lSnz.js";
16
+ import { d as Ze, a as et } from "./chunks/index-Jo_fbxsQ.js";
17
17
  const xe = ({
18
18
  sdk: e,
19
19
  contentId: n,
@@ -1,29 +1,29 @@
1
1
  import { jsx as o, jsxs as b, Fragment as de } from "react/jsx-runtime";
2
2
  import { useRef as we, useEffect as O, useState as I, useMemo as re } from "react";
3
- import { B as p, g as Ke, u as Xe, f as Ve, d as Ue, h as qe, a as H } from "./chunks/PrizeCard-Csw_wrFV.js";
3
+ import { B as p, g as Ke, u as Xe, f as Ve, d as Ue, h as qe, a as H } from "./chunks/PrizeCard-CwEzUVMJ.js";
4
4
  import "react-dom";
5
- import { P as _e } from "./chunks/Portal-BTnSMBHa.js";
6
- import { h as U, c as me } from "./chunks/helpers-BqT5Gaj_.js";
7
- import { S as $e } from "./chunks/Spinner-DEf9YWy9.js";
8
- import { L as et } from "./chunks/Link-387Dz8iP.js";
9
- import { N as tt } from "./chunks/Notification-B4yx2-ti.js";
10
- import { D as Je } from "./chunks/DirectionScope-BIc7TWs5.js";
11
- import { I as be, B as _ } from "./chunks/Button-BF5yQrSB.js";
12
- import { C as ot, a as nt, S as rt } from "./chunks/Search-D-RjUXXT.js";
13
- import { T as f } from "./chunks/Typography-BdToTTZ6.js";
14
- import { C as Ee } from "./chunks/Card-DZnMgLzk.js";
15
- import { C as it } from "./chunks/CardContent-B3da1XGq.js";
16
- import { A as N } from "./chunks/Avatar-Cl7jUti0.js";
17
- import { C as st } from "./chunks/CardActions-CP8UZhKB.js";
5
+ import { P as _e } from "./chunks/Portal-IratSYID.js";
6
+ import { h as U, c as me } from "./chunks/helpers-BVcELFvC.js";
7
+ import { S as $e } from "./chunks/Spinner-DBETUiAV.js";
8
+ import { L as et } from "./chunks/Link-5-5Tkbsx.js";
9
+ import { N as tt } from "./chunks/Notification-DEfeZ_zB.js";
10
+ import { D as Je } from "./chunks/DirectionScope-naCviTG1.js";
11
+ import { I as be, B as _ } from "./chunks/Button-Ba88lSnz.js";
12
+ import { C as ot, a as nt, S as rt } from "./chunks/Search-B7BcOoCG.js";
13
+ import { T as f } from "./chunks/Typography-Du02dCpZ.js";
14
+ import { C as Ee } from "./chunks/Card-ZbfN9iNz.js";
15
+ import { C as it } from "./chunks/CardContent-DxoVbjf2.js";
16
+ import { A as N } from "./chunks/Avatar-D3yp-aRF.js";
17
+ import { C as st } from "./chunks/CardActions-CmWWezXa.js";
18
18
  import { X as at } from "./chunks/x-CK4GYo7T.js";
19
- import { c as Se } from "./chunks/createSvgIcon-vBfsa1Jk.js";
20
- import { C as ct } from "./chunks/Close-BI5dwj8o.js";
21
- import { I as At } from "./chunks/Input-CrJDd0R2.js";
22
- import { C as fe } from "./chunks/Chip-04IiPdT5.js";
23
- import { S as K } from "./chunks/Stack-BZadM22I.js";
24
- import { A as Me } from "./chunks/AccessTime-DIng4pYk.js";
25
- import { C as lt } from "./chunks/CheckCircle-Ba6A-omo.js";
26
- import { S as gt } from "./chunks/Sheet-Dxmq7lcU.js";
19
+ import { c as Se } from "./chunks/createSvgIcon-BkXgNHbb.js";
20
+ import { C as ct } from "./chunks/Close-Da_jsGnv.js";
21
+ import { I as At } from "./chunks/Input-Cb3solC7.js";
22
+ import { C as fe } from "./chunks/Chip-dm_ka0yY.js";
23
+ import { S as K } from "./chunks/Stack-CppwMpFB.js";
24
+ import { A as Me } from "./chunks/AccessTime-DZsXIVlS.js";
25
+ import { C as lt } from "./chunks/CheckCircle-BG2qEsq1.js";
26
+ import { S as gt } from "./chunks/Sheet-DVdyMkHi.js";
27
27
  const Ye = Se(/* @__PURE__ */ o("path", {
28
28
  d: "M4.25 5.61C6.27 8.2 10 13 10 13v6c0 .55.45 1 1 1h2c.55 0 1-.45 1-1v-6s3.72-4.8 5.74-7.39c.51-.66.04-1.61-.79-1.61H5.04c-.83 0-1.3.95-.79 1.61"
29
29
  }), "FilterAlt"), mt = Se(/* @__PURE__ */ o("path", {
package/PollVote.js CHANGED
@@ -1,4 +1,4 @@
1
- import { M as o } from "./chunks/main-Ctg8yMhU.js";
1
+ import { M as o } from "./chunks/main-Che3VjMd.js";
2
2
  const r = o;
3
3
  export {
4
4
  r as PollVote
package/Predictor.js CHANGED
@@ -1,4 +1,4 @@
1
- import { P as e } from "./chunks/Predictor-TCMMMhdo.js";
1
+ import { P as e } from "./chunks/Predictor-C3Kr_dEA.js";
2
2
  export {
3
3
  e as Predictor
4
4
  };
package/README.md CHANGED
@@ -3722,6 +3722,7 @@ Football score predictor component with two templates: the default **multi-tab**
3722
3722
  - Consent management with required/optional consent gates before predicting
3723
3723
  - Customisable banners in 6 positions within the Play tab (`"standard"` only)
3724
3724
  - Authentication-aware UI with configurable sign-in CTA
3725
+ - Opt-in betting odds on the match cards (`showOdds`), pinned to one operator with `operatorId` — see [Predictor Odds](#predictor-odds)
3725
3726
  - Built-in Betslip integration — renders the Betslip widget automatically via the `betslip` prop with two trigger modes
3726
3727
  - Custom theming and multi-language support
3727
3728
 
@@ -3748,6 +3749,8 @@ Football score predictor component with two templates: the default **multi-tab**
3748
3749
  | `playTabBanners` | `PlayTabBanner[]` | Custom banners rendered in the Play tab. Ignored by `"embed"` |
3749
3750
  | `consents` | `ConsentDef[]` | Consent definitions required before predicting |
3750
3751
  | `matchCardBgImageUrl` | `string` | Background image URL for match prediction cards. Ignored by `"embed"` |
3752
+ | `showOdds` | `boolean` | Render betting odds on the match cards (default: false). While false the odds request is skipped, so an `"odds-only"` betslip needs this set |
3753
+ | `operatorId` | `string` | Operator config id to show odds from, e.g. `"betano-bg"`. Unset, each match shows the first operator listed. Falls back to `betslip.operatorId`, and the Betslip falls back to it |
3751
3754
  | `betslip` | `PredictorBetslipConfig` | Betslip integration config. Omit to disable. See [Betslip Integration](#betslip-integration) |
3752
3755
  | `callbacks` | `PredictorCallbacks` | `onEvent` — one observer for every journey event the component emits. See [Analytics](#analytics) |
3753
3756
 
@@ -3992,6 +3995,27 @@ const consents: ConsentDef[] = [
3992
3995
  - Optional consents are shown in the same modal but do not block progression
3993
3996
  - Once accepted, consents are stored and the modal does not reappear
3994
3997
 
3998
+ #### Predictor Odds
3999
+
4000
+ Odds are off by default. With `showOdds` set, each upcoming match card shows full-time 1X2 odds from one operator, refreshed while a match is live — in the Play tab, the `embed` card and a league member's predictions. Odds fail silently: when the odds API has no prices for a match, the card simply shows none.
4001
+
4002
+ - **`showOdds`** — while it is false (the default) the odds request is skipped altogether. A betslip with `trigger: "odds-only"` is fed by clicking those odds, so that trigger needs `showOdds` set.
4003
+ - **`operatorId`** pins the odds to one operator. It is sent to the odds request as the SDK's `operators` filter, so the response is narrowed server-side. Without it, each match shows whichever operator the response lists first, which is not guaranteed to stay the same. A match the chosen operator doesn't price shows no odds; it does not fall back to another operator.
4004
+
4005
+ ```tsx
4006
+ <Predictor entityId="..." sdk={sdk} language="en" showOdds operatorId="betano-bg" />
4007
+ ```
4008
+
4009
+ `operatorId` and `betslip.operatorId` resolve against each other, so the card and the betslip show the same operator unless you set both to different values:
4010
+
4011
+ | You set | Card odds | Betslip |
4012
+ | -------------------- | -------------------- | -------------------- |
4013
+ | `operatorId` | `operatorId` | `operatorId` |
4014
+ | `betslip.operatorId` | `betslip.operatorId` | `betslip.operatorId` |
4015
+ | Both | `operatorId` | `betslip.operatorId` |
4016
+
4017
+ See [Choosing a Bookmaker](#choosing-a-bookmaker) for the list of available operator ids.
4018
+
3995
4019
  #### Betslip Integration
3996
4020
 
3997
4021
  When the `betslip` prop is provided, the Predictor automatically renders a `Betslip` widget as a sibling alongside its own UI — you do not need to add a separate `<Betslip />` component to the page. The widget is configured entirely through `PredictorBetslipConfig`.
@@ -4023,7 +4047,7 @@ const betslipConfig: PredictorBetslipConfig = {
4023
4047
  | `currency` | `string` | `"€"` | Currency symbol |
4024
4048
  | `ctaUrlTemplate` | `string` | — | Bookmaker deep-link URL with `{placeholder}` substitution |
4025
4049
  | `brandingLogoUrl` | `string` | — | Operator logo URL |
4026
- | `operatorId` | `string` | — | Operator config id the Betslip requests odds for, e.g. `"betano-bg"` |
4050
+ | `operatorId` | `string` | — | Operator config id the Betslip requests odds for, e.g. `"betano-bg"`. Falls back to the top-level `operatorId` |
4027
4051
  | `affiliateId` | `string` | — | Affiliate id substituted into the operator's URLs |
4028
4052
  | `labels` | `BetslipLabels` | — | UI text overrides |
4029
4053
  | `themeOptions` | `CustomThemeOptions` | — | Theme for the Betslip widget. Falls back to the Predictor's `themeOptions` when omitted |
@@ -4039,7 +4063,7 @@ type PredictorBetslipTrigger =
4039
4063
  | Mode | When selections are sent |
4040
4064
  | --------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
4041
4065
  | `"predictions-only"` | Every time the user edits a score (home/away increment or decrement). If the user submits without editing (e.g. a default 0:0), the selection is sent at submit time as a fallback. Derived outcome: `"1"` (home win), `"X"` (draw), `"2"` (away win). |
4042
- | `"odds-only"` | Only when the user clicks an odds button on the post-submit odds display. The odds button becomes a command-bus trigger instead of a direct bookmaker link. |
4066
+ | `"odds-only"` | Only when the user clicks an odds button on the post-submit odds display. The odds button becomes a command-bus trigger instead of a direct bookmaker link. Requires `showOdds`. |
4043
4067
 
4044
4068
  **Selection format sent by Predictor:**
4045
4069
 
@@ -4241,6 +4265,7 @@ Selections are sent only when the user explicitly clicks an odds button on the p
4241
4265
  sdk={sdkInstance}
4242
4266
  language="en"
4243
4267
  userIsLoggedIn={true}
4268
+ showOdds={true}
4244
4269
  betslip={{
4245
4270
  trigger: "odds-only",
4246
4271
  position: "bottom-right",
@@ -4294,6 +4319,7 @@ Full-featured competitive picks predictor component with a multi-tab interface f
4294
4319
  - Consent management with required/optional consent gates before predicting
4295
4320
  - Customisable banners in the Play tab
4296
4321
  - Authentication-aware UI with configurable sign-in CTA
4322
+ - Opt-in betting odds on the match cards (`showOdds`), pinned to one operator with `operatorId` — see [TopX Odds](#topx-odds)
4297
4323
  - Built-in Betslip integration via the `betslip` prop
4298
4324
  - Custom theming and multi-language support
4299
4325
 
@@ -4317,6 +4343,8 @@ Full-featured competitive picks predictor component with a multi-tab interface f
4317
4343
  | `playTabBanners` | `PlayTabBanner[]` | — | Custom banners rendered in the Play tab |
4318
4344
  | `consents` | `ConsentDef[]` | — | Consent definitions required before predicting |
4319
4345
  | `matchCardBgImageUrl` | `string` | — | Background image URL for match prediction cards |
4346
+ | `showOdds` | `boolean` | `false` | Render betting odds on the match cards. While false the odds request is skipped, so an `"odds-only"` betslip needs this set |
4347
+ | `operatorId` | `string` | — | Operator config id to show odds from, e.g. `"betano-bg"`. Unset, each match shows the first operator listed. Falls back to `betslip.operatorId`, and the Betslip falls back to it |
4320
4348
  | `betslip` | `TopXBetslipConfig` | — | Betslip integration config. Omit to disable. |
4321
4349
  | `showCountdown` | `boolean` | `true` | Show predictions-close countdown timer on open games |
4322
4350
  | `gameNavLabel` | `TopXGameNavLabel` | `"gameWeek"` | Controls how each game is labelled in the navigation. See [Game Navigation Label](#game-navigation-label) |
@@ -4457,6 +4485,27 @@ const consents: ConsentDef[] = [
4457
4485
  <TopX {...otherProps} consents={consents} />;
4458
4486
  ```
4459
4487
 
4488
+ #### TopX Odds
4489
+
4490
+ Odds are off by default. With `showOdds` set, each upcoming match card shows full-time 1X2 odds from one operator, refreshed while a match is live — in the Play tab and in a league member's predictions. Odds fail silently: when the odds API has no prices for a match, the card simply shows none.
4491
+
4492
+ - **`showOdds`** — while it is false (the default) the odds request is skipped altogether. A betslip with `trigger: "odds-only"` is fed by clicking those odds, so that trigger needs `showOdds` set.
4493
+ - **`operatorId`** pins the odds to one operator. It is sent to the odds request as the SDK's `operators` filter, so the response is narrowed server-side. Without it, each match shows whichever operator the response lists first, which is not guaranteed to stay the same. A match the chosen operator doesn't price shows no odds; it does not fall back to another operator.
4494
+
4495
+ ```tsx
4496
+ <TopX entityId="..." sdk={sdk} language="en" showOdds operatorId="betano-bg" />
4497
+ ```
4498
+
4499
+ `operatorId` and `betslip.operatorId` resolve against each other, so the card and the betslip show the same operator unless you set both to different values:
4500
+
4501
+ | You set | Card odds | Betslip |
4502
+ | -------------------- | -------------------- | -------------------- |
4503
+ | `operatorId` | `operatorId` | `operatorId` |
4504
+ | `betslip.operatorId` | `betslip.operatorId` | `betslip.operatorId` |
4505
+ | Both | `operatorId` | `betslip.operatorId` |
4506
+
4507
+ See [Choosing a Bookmaker](#choosing-a-bookmaker) for the list of available operator ids.
4508
+
4460
4509
  #### Betslip Integration
4461
4510
 
4462
4511
  When the `betslip` prop is provided, the TopX component renders a `Betslip` widget alongside its own UI — no separate `<Betslip />` component is needed.
@@ -4488,7 +4537,7 @@ const betslipConfig: TopXBetslipConfig = {
4488
4537
  | `currency` | `string` | `"€"` | Currency symbol |
4489
4538
  | `ctaUrlTemplate` | `string` | — | Bookmaker deep-link URL with `{placeholder}` substitution |
4490
4539
  | `brandingLogoUrl` | `string` | — | Operator logo URL |
4491
- | `operatorId` | `string` | — | Operator config id the Betslip requests odds for, e.g. `"betano-bg"` |
4540
+ | `operatorId` | `string` | — | Operator config id the Betslip requests odds for, e.g. `"betano-bg"`. Falls back to the top-level `operatorId` |
4492
4541
  | `affiliateId` | `string` | — | Affiliate id substituted into the operator's URLs |
4493
4542
  | `labels` | `BetslipLabels` | — | UI text overrides |
4494
4543
  | `themeOptions` | `CustomThemeOptions` | — | Theme for the Betslip widget. Falls back to the TopX `themeOptions` when omitted |
@@ -4803,7 +4852,7 @@ import { Predictor } from "fansunited-frontend-components";
4803
4852
  | Mode | When selections are sent to Betslip |
4804
4853
  | --------------------- | --------------------------------------------------------------------------------- |
4805
4854
  | `"predictions-only"` | Each time the user changes a score prediction (before submitting) |
4806
- | `"odds-only"` | When the user clicks an odds button on the post-submit odds view |
4855
+ | `"odds-only"` | When the user clicks an odds button on the post-submit odds view (requires `showOdds`) |
4807
4856
 
4808
4857
  #### The CTA Link
4809
4858
 
@@ -4855,6 +4904,8 @@ It is passed to the odds request as the SDK's `operators` filter, so the respons
4855
4904
 
4856
4905
  Everything the Betslip derives from the bookmaker follows — the odds themselves, the accent color, the header and CTA logo, and the deep links. Markets the chosen bookmaker does not price are dropped from the Betslip (see the odds behavior notes below), and if it prices nothing in the betslip, the panel stays hidden.
4857
4906
 
4907
+ Inside `Predictor` or `TopX` you don't need to set it twice: the component's top-level `operatorId` also pins the Betslip, unless `betslip.operatorId` says otherwise. See [Predictor Odds](#predictor-odds).
4908
+
4858
4909
  **Available operator ids:**
4859
4910
 
4860
4911
  ```
@@ -5284,7 +5335,8 @@ A single-event card — a competition header over the two competitors and their
5284
5335
  | `showStandings` | `boolean` | `type="detailed"` only. Show the **Table** (standings) tab. Defaults to `true` |
5285
5336
  | `showHeadToHead` | `boolean` | `type="detailed"` only. Show the **H2H** tab. Defaults to `true` |
5286
5337
  | `defaultSection` | `"preview" \| "summary" \| "stats" \| "lineups" \| "table" \| "h2h"` | `type="detailed"` only. Which tab opens first. Defaults to the first tab of the event's status |
5287
- | `showOdds` | `boolean` | Render betting odds. Defaults to `true` — not yet backed by the API, so currently renders nothing |
5338
+ | `showOdds` | `boolean` | Render betting odds. Defaults to `false` — not yet backed by the API, so currently renders nothing |
5339
+ | `operatorId` | `string` | Operator config id to show odds from, e.g. `"betano-bg"`. Not yet backed by the API, like `showOdds` |
5288
5340
  | `liveRefresh` | `boolean` | Poll while the event is `LIVE`. Defaults to `true` |
5289
5341
  | `refreshInterval` | `number` | Live-refresh interval in ms. Defaults to `30000` (30s) |
5290
5342
  | `userIsLoggedIn` | `boolean` | Whether the visitor is signed in. Required for predictions. Defaults to `false` |
@@ -5627,6 +5679,7 @@ A competitor profile card. It renders the competitor's identity, their season st
5627
5679
  - Teams and athletes from one component, each with its own statistics and second panel
5628
5680
  - Competition switcher (`All` + one per competition) as the card's single scope control — it filters statistics, form, the featured match and the fixtures panel together
5629
5681
  - Season-scoped: a feed that reaches back into the previous season is trimmed to the one its statistics are for
5682
+ - Multi-sport: each sport brings its own points rule, its own scoring vocabulary (`PF` / `PA` / `DIFF` rather than `GF` / `GA` / `GD`) and its own odds market
5630
5683
  - Recent form with per-fixture tooltips, and a featured match with a `Last | Next` toggle
5631
5684
  - 1X2 betting odds under an upcoming featured match, with an optional operator/prices flash mode
5632
5685
  - Live badge with a pulsing dot and the match minute once a fixture is in progress, plus optional polling
@@ -5638,7 +5691,7 @@ A competitor profile card. It renders the competitor's identity, their season st
5638
5691
 
5639
5692
  | Prop | Type | Description |
5640
5693
  | ---------- | -------------------- | ------------------ |
5641
- | `entityId` | `string` | Competitor ID — a team (`"fb:t:8205"`) or an athlete (`"fb:p:48824"`) |
5694
+ | `entityId` | `string` | Competitor ID — a club or national side (`"fb:t:8205"`, `"fb:t:81770"`) or an athlete (`"fb:p:48824"`) |
5642
5695
  | `sdk` | `FansUnitedSDKModel` | SDK instance |
5643
5696
  | `language` | `LanguageType` | Display language |
5644
5697
 
@@ -5661,7 +5714,7 @@ A competitor profile card. It renders the competitor's identity, their season st
5661
5714
  | `showFeaturedMatch` | `boolean` | Render the featured next/last fixture. Defaults to `true` |
5662
5715
  | `featuredMatch` | `CompetitorFeaturedMatchConfig` | `type` (default `"next"`), `toggle` (default `true`), `backgroundGradient`, `matchCTA` |
5663
5716
  | `showOdds` | `boolean` | Render odds inside the featured match. Defaults to `true` |
5664
- | `odds` | `CompetitorOddsConfig` | `mode`, `flashInterval`, `pollingInterval`, `operators` |
5717
+ | `odds` | `CompetitorOddsConfig` | `mode`, `flashInterval`, `pollingInterval`, `operators`, `affiliateId`, `affiliateIds` |
5665
5718
  | `showFixtures` | `boolean` | Render the Fixtures header CTA and its panel. Defaults to `true` |
5666
5719
  | `fixtures` | `CompetitorFixturesConfig` | `matchCTA` for fixture/result rows |
5667
5720
  | `showSquad` | `boolean` | Render the Squad CTA and panel. Defaults to `true`. **Teams only** — inert on an athlete |
@@ -5702,7 +5755,7 @@ Both kinds render the full card; only the statistics and the second panel differ
5702
5755
  | Form / fixtures | The club's own | The player's **club's**, captioned with the club's name |
5703
5756
  | Branding | The club's colours | The **club's** colours — a player declares none |
5704
5757
 
5705
- A goalkeeper's statistics are clean sheets and goals conceded rather than goals and assists, throughout. Appearance and minute totals are measured against the club's matches in the same competition and season (`7 of 11 appearances`); minutes can exceed the total because stoppage time counts.
5758
+ A goalkeeper's statistics are clean sheets and goals conceded rather than goals and assists, throughout. Appearance and minute totals are measured against the club's matches in the same competition and season (`7 of 11 appearances`). Minutes are the one figure with no honest ceiling — the feed counts stoppage time, so an ever-present passes 90 a match — and once they reach it the minutes stand alone rather than claiming "671 of 630"; the full bar says the same thing without the false denominator.
5706
5759
 
5707
5760
  ```tsx
5708
5761
  <CompetitorCard entityId="fb:p:48824" sdk={sdkInstance} language="en" template="hero" />
@@ -5710,26 +5763,44 @@ A goalkeeper's statistics are clean sheets and goals conceded rather than goals
5710
5763
 
5711
5764
  #### Competition Switcher
5712
5765
 
5713
- The switcher (`All`, then the domestic league, then the rest) is the card's single scope control: it filters the statistics, the form, the featured match and the fixtures panel together. The card opens on the domestic league rather than on `All`. It is drawn on the statistics title row but belongs to the whole card, which is why it is the top-level `showCompetitionSwitcher` rather than a `stats` setting.
5766
+ The switcher is the card's single scope control: it filters the statistics, the form, the featured match and the fixtures panel together. It is drawn on the statistics title row but belongs to the whole card, which is why it is the top-level `showCompetitionSwitcher` rather than a `stats` setting.
5767
+
5768
+ The card opens on the competition its own featured match is in — the live one, else the next fixture, else the last result — and that option is listed first, directly after `All`. With no fixtures at all it falls back to the competitor's domestic league. It never opens on `All`, which mixes a league table with a cup run.
5714
5769
 
5715
5770
  Friendlies are excluded everywhere, and a cup awards no table points, so every points figure comes off while one is in scope.
5716
5771
 
5772
+ Wins counted here include the ones the sport settles after regulation, in whichever way the feed spells them: hockey writes `won_ot`, football `won_extratime`, and both sit beside a separate shootout key. Reading `won` alone reports a played match with no result against it — a team whose only win came in overtime showed 0 W, 0 D, 0 L on 1 played, and a World Cup won in extra time read 8 played against 6 won and 1 drawn.
5773
+
5774
+ Totals that cannot be reconciled with the results printed above them are replaced by the results themselves: the card derives the season from its own fixtures whenever the feed covers fewer matches than it shows, or whenever the feed's own W/D/L does not add up to its played count.
5775
+
5776
+ **Points follow the sport's own rule**, not the widget's: football pays 3 for a win and 1 for a draw; ice hockey pays 2 for any win plus 1 for losing after regulation. A league that keeps no points table at all is what `showPoints` is for.
5777
+
5778
+ **The scoring vocabulary follows the sport too.** A sport scored in points rather than goals — American football, basketball, rugby — reads *Points for* / *Points against* / `PF` / `PA` / `DIFF` where football reads *Scored* / *Conceded* / `GF` / `GA` / `GD`; "conceded" is not a word American sports use. Those are six more `labels` keys (`pointsFor`, `pointsAgainst`, `pointsForShort`, `pointsAgainstShort`, `pointsDifference`, `pointsDifferenceShort`), overridable like every other.
5779
+
5780
+ The figures behind those bars are read whichever way the feed states them. Football reports totals (`goals_scored`); American football reports **only averages** (`avg_pts_scored` over `matches_played`) and no total at all, so the total is recovered from the average — exactly, since the feed's two decimals round back to what the fixtures add up to. The bars are labelled with the abbreviation and carry the full name in a tooltip, so the row holds its shape in every language.
5781
+
5782
+ A result settled after regulation is **marked wherever it appears** — `OT` beside the score on a form tile and a fixtures row, a corner tag on a form dot, and "After overtime" in the form tooltip and under the featured match's score. The score itself stays the **regulation** one, because that is all the feed reports: a hockey tie arrives as `5-5` with `winner_id: "DRAW"` and only the status saying it went further, so the card marks the fixture rather than claiming a winner it was not told about.
5783
+
5784
+
5717
5785
  The card covers **one season** — the season its statistics are for. Feeds can return fixtures from the previous season too; those are left out, so a cup run that finished last May never lands in the recent form or inflates an athlete's appearance total.
5718
5786
 
5719
5787
  #### Betting Odds
5720
5788
 
5721
- Full-time 1X2 prices for the upcoming featured match, from the first operator that has them. When the odds API returns nothing the strip simply does not render.
5789
+ Outright prices for the upcoming featured match, from the first operator that has a complete set. The market follows the sport: a fixture that can be drawn is priced three ways (`FT_1X2` — 1 · X · 2), one that cannot is priced two (`WINNER_OT` — 1 · 2). Both are requested together, so one round trip settles it. When no operator has a complete market the strip simply does not render.
5722
5790
 
5723
5791
  ```tsx
5724
5792
  odds={{
5725
5793
  mode: "flash", // "default" | "flash" — defaults to "flash" in compact, "default" elsewhere
5726
5794
  flashInterval: 3000, // ms; ignored unless mode is "flash"
5727
5795
  pollingInterval: 30000, // ms
5728
- operators: ["my-operator-id"],
5796
+ operators: ["my-operator-id"], // preference order; the card shows one operator
5797
+ affiliateId: "aff-123", // substituted into the operator URLs
5729
5798
  }}
5730
5799
  ```
5731
5800
 
5732
- `onAddToBetslip` receives `{ matchId, market: "FT_1X2", pick, odd }`. The widget owns no betslip, so pass this to push the selection into yours — with the Fans United `Betslip`, that is one call. The operator's own link still opens either way.
5801
+ The card shows **one** operator — the first that publishes a complete market — so `operators` is a preference order, not a filter that widens the strip. `affiliateId` is substituted into every operator URL carrying an `{affiliate_id}` placeholder, the same field as `BetslipProps.affiliateId`; `affiliateIds` sets one per operator.
5802
+
5803
+ `onAddToBetslip` receives `{ matchId, market, pick, odd }`, where `market` is the code the price came from (`"FT_1X2"` or `"WINNER_OT"`). The widget owns no betslip, so pass this to push the selection into yours — with the Fans United `Betslip`, that is one call. The operator's own link still opens either way.
5733
5804
 
5734
5805
  ```tsx
5735
5806
  import { CompetitorCard, betslipApi } from "fansunited-frontend-components";
@@ -5768,7 +5839,9 @@ With `url` the row renders as an `<a href target>`, which keeps it crawlable and
5768
5839
 
5769
5840
  The competitor's colours paint the branded header (`hero` and `horizontal`), the headline tile, the featured-match panel and the expanded player card. Set `hasBranding={false}` to fall back to the theme accent, which is also what happens when the entity declares no colours.
5770
5841
 
5771
- Some clubs declare a colour that *is* the card background — Real Madrid's primary is `#ffffff`. The card handles that rather than rendering something invisible: a solid fill walks the palette primary → secondary → tertiary and takes the first colour that stands out; text on a branded surface keeps the white the design intends and flips to dark only where white would be unreadable; and a gradient drops a stop that collides with the card. Both rules resolve against the *current* surface, so a competitor renders differently in light and dark mode.
5842
+ Only the **primary** is read, and the rule is deliberately narrow: **the club keeps its colour, and the text moves.** Some clubs declare a colour that *is* the card background — Real Madrid's primary is `#ffffff` — and their header stays white, with the label on it going dark. White text leads everywhere it is legible, so Manchester City's sky blue keeps the white the club itself puts on it, and gives way only where it genuinely cannot be read.
5843
+
5844
+ A **solid fill** is the exception, because it sits *on* the card and so has no text to move: a primary that collides with the card falls back to the theme accent rather than to the club's other colours — painting Real Madrid gold reads as a different club, not as a fallback. A branded header whose colour is the card also gets a hairline where it meets the body. Everything resolves against the *current* surface, so a competitor renders differently in light and dark mode.
5772
5845
 
5773
5846
  #### Examples
5774
5847
 
package/Standings.js CHANGED
@@ -1,17 +1,17 @@
1
1
  import { jsxs as w, jsx as r, Fragment as W } from "react/jsx-runtime";
2
2
  import P, { useState as N, useEffect as me, useMemo as V, useRef as ke } from "react";
3
- import { g as D, u as F, d as $, B as x, z as q, y as Y, a as Q, f as H, b as Le, v as Re, A as Te, p as De, o as ve, q as Ee, r as Pe, C as Fe, s as Ke, E as Ae, t as Oe, w as ze } from "./chunks/PrizeCard-Csw_wrFV.js";
4
- import { S as Ne } from "./chunks/Spinner-DEf9YWy9.js";
3
+ import { g as D, u as F, d as $, B as x, z as q, y as Y, a as Q, f as H, b as Le, v as Re, A as Te, p as De, o as ve, q as Ee, r as Pe, C as Fe, s as Ke, E as Ae, t as Oe, w as ze } from "./chunks/PrizeCard-CwEzUVMJ.js";
4
+ import { S as Ne } from "./chunks/Spinner-DBETUiAV.js";
5
5
  import { createPortal as pe } from "react-dom";
6
- import { h as ee, b as Ie } from "./chunks/helpers-BqT5Gaj_.js";
6
+ import { h as ee, b as Ie } from "./chunks/helpers-BVcELFvC.js";
7
7
  import { l as le } from "./chunks/index-D-yn2UCo.js";
8
- import { E as $e } from "./chunks/EmojiEvents-D6ZqjCfo.js";
9
- import { T as k } from "./chunks/Typography-BdToTTZ6.js";
10
- import { C as Me } from "./chunks/Chip-04IiPdT5.js";
11
- import { I as Be } from "./chunks/InlineSpinner-vEetFsB9.js";
12
- import { S as fe } from "./chunks/Sheet-Dxmq7lcU.js";
13
- import { T as Ue } from "./chunks/Table-1CWAmBw4.js";
14
- import { T as ge, a as he, b as ye, c as xe } from "./chunks/Tabs-C8lKOBnZ.js";
8
+ import { E as $e } from "./chunks/EmojiEvents-DFNrzPuy.js";
9
+ import { T as k } from "./chunks/Typography-Du02dCpZ.js";
10
+ import { C as Me } from "./chunks/Chip-dm_ka0yY.js";
11
+ import { I as Be } from "./chunks/InlineSpinner-BDGu6S9a.js";
12
+ import { S as fe } from "./chunks/Sheet-DVdyMkHi.js";
13
+ import { T as Ue } from "./chunks/Table-Dk1ukQa6.js";
14
+ import { T as ge, a as he, b as ye, c as xe } from "./chunks/Tabs-CmFfmpyp.js";
15
15
  const We = (e) => e.replace(/([a-z0-9])([A-Z])/g, "$1 $2").replace(/[_-]+/g, " ").trim().replace(
16
16
  /\S+/g,
17
17
  (n) => n.charAt(0).toUpperCase() + n.slice(1).toLowerCase()