@oddsmith/ui 1.0.0 → 1.0.2

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 (184) hide show
  1. package/README.md +1 -1
  2. package/dist/components/os-leaderboard-casino/assets/fallback/defaults/glam-sections.json +3 -3
  3. package/dist/components/os-leaderboard-casino/assets/fallback/manifest.json +1 -1
  4. package/dist/components/os-leaderboard-casino/assets/fallback/resolved-presets.json +6 -4
  5. package/dist/components/os-leaderboard-casino/assets/fallback/resolved-presets.json.js +1 -1
  6. package/dist/components/os-leaderboard-casino/assets/fallback/themes.json +3 -4
  7. package/dist/components/os-leaderboard-casino/assets/fallback/themes.json.js +3 -4
  8. package/dist/components/os-leaderboard-casino/assets/fallback/themes.json.js.map +1 -1
  9. package/dist/components/os-leaderboard-casino/constants/defaults.d.ts +8 -0
  10. package/dist/components/os-leaderboard-casino/constants/index.d.ts +2 -0
  11. package/dist/components/os-leaderboard-casino/constants/tags.d.ts +22 -0
  12. package/dist/components/os-leaderboard-casino/constants/tags.js +6 -4
  13. package/dist/components/os-leaderboard-casino/constants/tags.js.map +1 -1
  14. package/dist/components/os-leaderboard-casino/container/os-leaderboard-casino.d.ts +35 -0
  15. package/dist/components/os-leaderboard-casino/container/os-leaderboard-casino.host.d.ts +13 -0
  16. package/dist/components/os-leaderboard-casino/container/os-leaderboard-casino.html.js +5 -3
  17. package/dist/components/os-leaderboard-casino/container/os-leaderboard-casino.html.js.map +1 -1
  18. package/dist/components/os-leaderboard-casino/container/os-leaderboard-casino.js +12 -10
  19. package/dist/components/os-leaderboard-casino/container/os-leaderboard-casino.js.map +1 -1
  20. package/dist/components/os-leaderboard-casino/container/os-leaderboard-casino.scss.js +1 -1
  21. package/dist/components/os-leaderboard-casino/index.d.ts +36 -0
  22. package/dist/components/os-leaderboard-casino/index.js +23 -23
  23. package/dist/components/os-leaderboard-casino/integration/assemble-assets.d.ts +21 -0
  24. package/dist/components/os-leaderboard-casino/integration/assets-context.d.ts +26 -0
  25. package/dist/components/os-leaderboard-casino/integration/assets-context.js +40 -35
  26. package/dist/components/os-leaderboard-casino/integration/assets-context.js.map +1 -1
  27. package/dist/components/os-leaderboard-casino/integration/defaults-glam.d.ts +14 -0
  28. package/dist/components/os-leaderboard-casino/integration/defaults-new-money.d.ts +3 -0
  29. package/dist/components/os-leaderboard-casino/integration/index.d.ts +5 -0
  30. package/dist/components/os-leaderboard-casino/integration/labels.d.ts +1 -0
  31. package/dist/components/os-leaderboard-casino/integration/load-assets.d.ts +9 -0
  32. package/dist/components/os-leaderboard-casino/integration/presets.d.ts +1 -0
  33. package/dist/components/os-leaderboard-casino/integration/resolve-input.d.ts +20 -0
  34. package/dist/components/os-leaderboard-casino/integration/resolve-input.js +31 -27
  35. package/dist/components/os-leaderboard-casino/integration/resolve-input.js.map +1 -1
  36. package/dist/components/os-leaderboard-casino/integration/themes.d.ts +1 -0
  37. package/dist/components/os-leaderboard-casino/sections/climb-section/climb-section.d.ts +18 -0
  38. package/dist/components/os-leaderboard-casino/sections/climb-section/climb-section.host.d.ts +14 -0
  39. package/dist/components/os-leaderboard-casino/sections/climb-section/climb-section.html.js +7 -5
  40. package/dist/components/os-leaderboard-casino/sections/climb-section/climb-section.html.js.map +1 -1
  41. package/dist/components/os-leaderboard-casino/sections/climb-section/climb-section.js +33 -38
  42. package/dist/components/os-leaderboard-casino/sections/climb-section/climb-section.js.map +1 -1
  43. package/dist/components/os-leaderboard-casino/sections/events-banner/components/event-icons.d.ts +5 -0
  44. package/dist/components/os-leaderboard-casino/sections/events-banner/components/event-icons.js +7 -5
  45. package/dist/components/os-leaderboard-casino/sections/events-banner/components/event-icons.js.map +1 -1
  46. package/dist/components/os-leaderboard-casino/sections/events-banner/events-banner.d.ts +16 -0
  47. package/dist/components/os-leaderboard-casino/sections/events-banner/events-banner.host.d.ts +8 -0
  48. package/dist/components/os-leaderboard-casino/sections/events-banner/events-banner.js +26 -22
  49. package/dist/components/os-leaderboard-casino/sections/events-banner/events-banner.js.map +1 -1
  50. package/dist/components/os-leaderboard-casino/sections/footer-section/footer-section.d.ts +10 -0
  51. package/dist/components/os-leaderboard-casino/sections/footer-section/footer-section.host.d.ts +3 -0
  52. package/dist/components/os-leaderboard-casino/sections/footer-section/footer-section.html.js +7 -5
  53. package/dist/components/os-leaderboard-casino/sections/footer-section/footer-section.html.js.map +1 -1
  54. package/dist/components/os-leaderboard-casino/sections/footer-section/footer-section.js +11 -8
  55. package/dist/components/os-leaderboard-casino/sections/footer-section/footer-section.js.map +1 -1
  56. package/dist/components/os-leaderboard-casino/sections/games-section/components/game-images.d.ts +1 -0
  57. package/dist/components/os-leaderboard-casino/sections/games-section/games-section.d.ts +20 -0
  58. package/dist/components/os-leaderboard-casino/sections/games-section/games-section.host.d.ts +7 -0
  59. package/dist/components/os-leaderboard-casino/sections/games-section/games-section.html.js +5 -3
  60. package/dist/components/os-leaderboard-casino/sections/games-section/games-section.html.js.map +1 -1
  61. package/dist/components/os-leaderboard-casino/sections/games-section/games-section.js +15 -13
  62. package/dist/components/os-leaderboard-casino/sections/games-section/games-section.js.map +1 -1
  63. package/dist/components/os-leaderboard-casino/sections/header-section/header-section.d.ts +12 -0
  64. package/dist/components/os-leaderboard-casino/sections/header-section/header-section.host.d.ts +8 -0
  65. package/dist/components/os-leaderboard-casino/sections/hero-section/hero-section.d.ts +37 -0
  66. package/dist/components/os-leaderboard-casino/sections/hero-section/hero-section.host.d.ts +20 -0
  67. package/dist/components/os-leaderboard-casino/sections/hero-section/hero-section.html.js +6 -4
  68. package/dist/components/os-leaderboard-casino/sections/hero-section/hero-section.html.js.map +1 -1
  69. package/dist/components/os-leaderboard-casino/sections/hero-section/hero-section.js +6 -2
  70. package/dist/components/os-leaderboard-casino/sections/hero-section/hero-section.js.map +1 -1
  71. package/dist/components/os-leaderboard-casino/sections/legals-section/legals-section.d.ts +18 -0
  72. package/dist/components/os-leaderboard-casino/sections/legals-section/legals-section.host.d.ts +8 -0
  73. package/dist/components/os-leaderboard-casino/sections/legals-section/legals-section.html.js +5 -3
  74. package/dist/components/os-leaderboard-casino/sections/legals-section/legals-section.html.js.map +1 -1
  75. package/dist/components/os-leaderboard-casino/sections/legals-section/legals-section.js +10 -5
  76. package/dist/components/os-leaderboard-casino/sections/legals-section/legals-section.js.map +1 -1
  77. package/dist/components/os-leaderboard-casino/sections/live-feed-section/live-feed-section.d.ts +13 -0
  78. package/dist/components/os-leaderboard-casino/sections/live-feed-section/live-feed-section.host.d.ts +8 -0
  79. package/dist/components/os-leaderboard-casino/sections/marquee-section/components/win-icons.d.ts +3 -0
  80. package/dist/components/os-leaderboard-casino/sections/marquee-section/marquee-item.d.ts +14 -0
  81. package/dist/components/os-leaderboard-casino/sections/marquee-section/marquee-section.d.ts +42 -0
  82. package/dist/components/os-leaderboard-casino/sections/marquee-section/marquee-section.host.d.ts +8 -0
  83. package/dist/components/os-leaderboard-casino/sections/marquee-section/marquee-section.html.js +5 -3
  84. package/dist/components/os-leaderboard-casino/sections/marquee-section/marquee-section.html.js.map +1 -1
  85. package/dist/components/os-leaderboard-casino/sections/marquee-section/marquee-section.js +26 -23
  86. package/dist/components/os-leaderboard-casino/sections/marquee-section/marquee-section.js.map +1 -1
  87. package/dist/components/os-leaderboard-casino/sections/marquee-section/marquee-variants.d.ts +6 -0
  88. package/dist/components/os-leaderboard-casino/sections/prize-section/components/medal-coin/medal-coin.d.ts +16 -0
  89. package/dist/components/os-leaderboard-casino/sections/prize-section/components/medal-coin/medal-coin.js +73 -0
  90. package/dist/components/os-leaderboard-casino/sections/prize-section/components/medal-coin/medal-coin.js.map +1 -0
  91. package/dist/components/os-leaderboard-casino/sections/prize-section/components/medal-coin/medal-coin.scss.js +5 -0
  92. package/dist/components/os-leaderboard-casino/sections/prize-section/components/medal-coin/medal-coin.scss.js.map +1 -0
  93. package/dist/components/os-leaderboard-casino/sections/prize-section/prize-section.d.ts +23 -0
  94. package/dist/components/os-leaderboard-casino/sections/prize-section/prize-section.host.d.ts +11 -0
  95. package/dist/components/os-leaderboard-casino/sections/prize-section/prize-section.html.js +5 -3
  96. package/dist/components/os-leaderboard-casino/sections/prize-section/prize-section.html.js.map +1 -1
  97. package/dist/components/os-leaderboard-casino/sections/prize-section/prize-section.js +18 -15
  98. package/dist/components/os-leaderboard-casino/sections/prize-section/prize-section.js.map +1 -1
  99. package/dist/components/os-leaderboard-casino/sections/stats-section/components/stat-band/stat-band.d.ts +17 -0
  100. package/dist/components/os-leaderboard-casino/sections/stats-section/components/stat-card/stat-card.d.ts +15 -0
  101. package/dist/components/os-leaderboard-casino/sections/stats-section/components/stat-chip/stat-chip.d.ts +17 -0
  102. package/dist/components/os-leaderboard-casino/sections/stats-section/components/stat-gauge/stat-gauge.d.ts +14 -0
  103. package/dist/components/os-leaderboard-casino/sections/stats-section/components/stat-icons.d.ts +5 -0
  104. package/dist/components/os-leaderboard-casino/sections/stats-section/components/stat-icons.js +11 -0
  105. package/dist/components/os-leaderboard-casino/sections/stats-section/components/stat-icons.js.map +1 -0
  106. package/dist/components/os-leaderboard-casino/sections/stats-section/components/stat-meter/stat-meter.d.ts +17 -0
  107. package/dist/components/os-leaderboard-casino/sections/stats-section/components/stat-rail/stat-rail.d.ts +17 -0
  108. package/dist/components/os-leaderboard-casino/sections/stats-section/components/stat-rail/stat-rail.js +63 -0
  109. package/dist/components/os-leaderboard-casino/sections/stats-section/components/stat-rail/stat-rail.js.map +1 -0
  110. package/dist/components/os-leaderboard-casino/sections/stats-section/components/stat-rail/stat-rail.scss.js +5 -0
  111. package/dist/components/os-leaderboard-casino/sections/stats-section/components/stat-rail/stat-rail.scss.js.map +1 -0
  112. package/dist/components/os-leaderboard-casino/sections/stats-section/stats-section.d.ts +16 -0
  113. package/dist/components/os-leaderboard-casino/sections/stats-section/stats-section.host.d.ts +13 -0
  114. package/dist/components/os-leaderboard-casino/sections/stats-section/stats-section.html.js +5 -3
  115. package/dist/components/os-leaderboard-casino/sections/stats-section/stats-section.html.js.map +1 -1
  116. package/dist/components/os-leaderboard-casino/sections/stats-section/stats-section.js +20 -16
  117. package/dist/components/os-leaderboard-casino/sections/stats-section/stats-section.js.map +1 -1
  118. package/dist/components/os-leaderboard-casino/sections/table-section/table-section.d.ts +31 -0
  119. package/dist/components/os-leaderboard-casino/sections/table-section/table-section.host.d.ts +15 -0
  120. package/dist/components/os-leaderboard-casino/sections/table-section/table-section.html.js +5 -3
  121. package/dist/components/os-leaderboard-casino/sections/table-section/table-section.html.js.map +1 -1
  122. package/dist/components/os-leaderboard-casino/sections/table-section/table-section.js +17 -14
  123. package/dist/components/os-leaderboard-casino/sections/table-section/table-section.js.map +1 -1
  124. package/dist/components/os-leaderboard-casino/services/adapter.service.d.ts +11 -0
  125. package/dist/components/os-leaderboard-casino/services/icon.service.d.ts +28 -0
  126. package/dist/components/os-leaderboard-casino/services/icon.service.js +10 -8
  127. package/dist/components/os-leaderboard-casino/services/icon.service.js.map +1 -1
  128. package/dist/components/os-leaderboard-casino/services/index.d.ts +2 -0
  129. package/dist/components/os-leaderboard-casino/theme/background.d.ts +4 -0
  130. package/dist/components/os-leaderboard-casino/theme/background.js +22 -0
  131. package/dist/components/os-leaderboard-casino/theme/background.js.map +1 -0
  132. package/dist/components/os-leaderboard-casino/theme/index.d.ts +3 -0
  133. package/dist/components/os-leaderboard-casino/theme/prize-icons.d.ts +1 -0
  134. package/dist/components/os-leaderboard-casino/theme/prize-resolve.d.ts +5 -0
  135. package/dist/components/os-leaderboard-casino/theme/styles.d.ts +9 -0
  136. package/dist/components/os-leaderboard-casino/theme/styles.js +3 -3
  137. package/dist/components/os-leaderboard-casino/theme/styles.js.map +1 -1
  138. package/dist/components/os-leaderboard-casino/theme/vip-icons.d.ts +2 -0
  139. package/dist/components/os-leaderboard-casino/theme/vip-mark.d.ts +7 -0
  140. package/dist/components/os-leaderboard-casino/theme/vip-mark.js +11 -9
  141. package/dist/components/os-leaderboard-casino/theme/vip-mark.js.map +1 -1
  142. package/dist/components/os-leaderboard-casino/types/assets.d.ts +42 -0
  143. package/dist/components/os-leaderboard-casino/types/data.d.ts +106 -0
  144. package/dist/components/os-leaderboard-casino/types/events.d.ts +18 -0
  145. package/dist/components/os-leaderboard-casino/types/icons.d.ts +18 -0
  146. package/dist/components/os-leaderboard-casino/types/input.d.ts +79 -0
  147. package/dist/components/os-leaderboard-casino/types/ledger.d.ts +67 -0
  148. package/dist/components/os-leaderboard-casino/types/sections.d.ts +200 -0
  149. package/dist/components/os-leaderboard-casino/types/state.d.ts +69 -0
  150. package/dist/shared/lib/lit/component.d.ts +5 -0
  151. package/dist/shared/lib/lit/safe-custom-element.d.ts +5 -0
  152. package/dist/shared/lib/lit/scss.d.ts +3 -0
  153. package/dist/shared/lib/lit/scss.js +4 -4
  154. package/dist/shared/lib/lit/template.d.ts +3 -0
  155. package/dist/shared/vendor/lit-element-lit-element.js +45 -0
  156. package/dist/shared/vendor/lit-element-lit-element.js.map +1 -0
  157. package/dist/shared/vendor/lit-html-directive-helpers.js +32 -0
  158. package/dist/shared/vendor/lit-html-directive-helpers.js.map +1 -0
  159. package/dist/shared/vendor/lit-html-directive.js +23 -0
  160. package/dist/shared/vendor/lit-html-directive.js.map +1 -0
  161. package/dist/shared/vendor/lit-html-keyed.js +18 -0
  162. package/dist/shared/vendor/lit-html-keyed.js.map +1 -0
  163. package/dist/shared/vendor/lit-html-lit-html.js +234 -0
  164. package/dist/shared/vendor/lit-html-lit-html.js.map +1 -0
  165. package/dist/shared/vendor/lit-html-repeat.js +57 -0
  166. package/dist/shared/vendor/lit-html-repeat.js.map +1 -0
  167. package/dist/shared/vendor/lit-html-unsafe-html.js +21 -0
  168. package/dist/shared/vendor/lit-html-unsafe-html.js.map +1 -0
  169. package/dist/shared/vendor/lit-html-unsafe-svg.js +10 -0
  170. package/dist/shared/vendor/lit-html-unsafe-svg.js.map +1 -0
  171. package/dist/shared/vendor/lit-reactive-element-base.js +5 -0
  172. package/dist/shared/vendor/lit-reactive-element-base.js.map +1 -0
  173. package/dist/shared/vendor/lit-reactive-element-css-tag.js +46 -0
  174. package/dist/shared/vendor/lit-reactive-element-css-tag.js.map +1 -0
  175. package/dist/shared/vendor/lit-reactive-element-property.js +33 -0
  176. package/dist/shared/vendor/lit-reactive-element-property.js.map +1 -0
  177. package/dist/shared/vendor/lit-reactive-element-query.js +13 -0
  178. package/dist/shared/vendor/lit-reactive-element-query.js.map +1 -0
  179. package/dist/shared/vendor/lit-reactive-element-reactive-element.js +226 -0
  180. package/dist/shared/vendor/lit-reactive-element-reactive-element.js.map +1 -0
  181. package/dist/shared/vendor/lit-reactive-element-state.js +8 -0
  182. package/dist/shared/vendor/lit-reactive-element-state.js.map +1 -0
  183. package/package.json +5 -2
  184. package/dist/index.d.ts +0 -734
@@ -0,0 +1,73 @@
1
+ import "../../../../../../shared/vendor/lit-reactive-element-reactive-element.js";
2
+ import { svg as m, html as c } from "../../../../../../shared/vendor/lit-html-lit-html.js";
3
+ import { LitElement as y } from "../../../../../../shared/vendor/lit-element-lit-element.js";
4
+ import { property as a } from "../../../../../../shared/vendor/lit-reactive-element-property.js";
5
+ import { Component as f } from "../../../../../../shared/lib/lit/component.js";
6
+ import { scss as d } from "../../../../../../shared/lib/lit/scss.js";
7
+ import { OS_LEADERBOARD_CASINO_MEDAL_COIN as h } from "../../../../constants/tags.js";
8
+ import { osLeaderboardCasinoTheme as b } from "../../../../theme/styles.js";
9
+ import "../../../../../../shared/vendor/lit-html-unsafe-svg.js";
10
+ import v from "./medal-coin.scss.js";
11
+ var g = Object.defineProperty, x = Object.getOwnPropertyDescriptor, t = (i, o, l, s) => {
12
+ for (var e = s > 1 ? void 0 : s ? x(o, l) : o, p = i.length - 1, n; p >= 0; p--)
13
+ (n = i[p]) && (e = (s ? n(o, l, e) : n(e)) || e);
14
+ return s && e && g(o, l, e), e;
15
+ };
16
+ let r = class extends y {
17
+ constructor() {
18
+ super(...arguments), this.variant = "gold", this.rank = 1, this.size = 52;
19
+ }
20
+ willUpdate() {
21
+ this.style.setProperty("--coin-size", `${this.size}px`);
22
+ }
23
+ get displayLabel() {
24
+ return this.label ?? String(this.rank);
25
+ }
26
+ get medalAriaLabel() {
27
+ return this.label ?? `Rank ${this.rank} medal`;
28
+ }
29
+ render() {
30
+ const i = this.displayLabel;
31
+ return c`
32
+ <svg viewBox="0 0 72 72" role="img" aria-label=${this.medalAriaLabel}>
33
+ <circle cx="36" cy="36" r="34" fill="var(--coin-edge)" />
34
+ <circle cx="36" cy="34" r="32" fill="var(--coin-face)" />
35
+ <circle
36
+ cx="36"
37
+ cy="34"
38
+ r="25"
39
+ fill="none"
40
+ stroke="var(--coin-ring)"
41
+ stroke-width="2"
42
+ opacity="0.55"
43
+ />
44
+ ${m`<text
45
+ class="rank-text"
46
+ x="36"
47
+ y="44"
48
+ text-anchor="middle"
49
+ >${i}</text>`}
50
+ </svg>
51
+ `;
52
+ }
53
+ };
54
+ r.styles = [b, d(v)];
55
+ t([
56
+ a({ type: String, reflect: !0 })
57
+ ], r.prototype, "variant", 2);
58
+ t([
59
+ a({ type: Number })
60
+ ], r.prototype, "rank", 2);
61
+ t([
62
+ a({ type: String })
63
+ ], r.prototype, "label", 2);
64
+ t([
65
+ a({ type: Number })
66
+ ], r.prototype, "size", 2);
67
+ r = t([
68
+ f({ selector: h })
69
+ ], r);
70
+ export {
71
+ r as OsLeaderboardCasinoMedalCoin
72
+ };
73
+ //# sourceMappingURL=medal-coin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"medal-coin.js","sources":["../../../../../../../src/components/os-leaderboard-casino/sections/prize-section/components/medal-coin/medal-coin.ts"],"sourcesContent":["import { LitElement, html, svg } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { Component } from '@oddsmith/lib/lit/component.js';\nimport { scss } from '@oddsmith/lib/lit/scss.js';\nimport { OS_LEADERBOARD_CASINO_MEDAL_COIN } from '@os-leaderboard-casino/constants/tags.js';\nimport { osLeaderboardCasinoTheme } from '@os-leaderboard-casino/theme/index.js';\nimport styles from './medal-coin.scss?inline';\n\nexport type MedalCoinVariant = 'gold' | 'silver' | 'bronze';\n\n/** Layered rank coin for podium slots — themed via glam CSS tokens. */\n@Component({ selector: OS_LEADERBOARD_CASINO_MEDAL_COIN })\nexport class OsLeaderboardCasinoMedalCoin extends LitElement {\n static styles = [osLeaderboardCasinoTheme, scss(styles)];\n\n @property({ type: String, reflect: true })\n variant: MedalCoinVariant = 'gold';\n\n @property({ type: Number })\n rank = 1;\n\n /** Optional label override (defaults to rank number). */\n @property({ type: String })\n label?: string;\n\n /** Pixel diameter — also sets `--coin-size` on the host. */\n @property({ type: Number })\n size = 52;\n\n protected override willUpdate(): void {\n this.style.setProperty('--coin-size', `${this.size}px`);\n }\n\n private get displayLabel(): string {\n return this.label ?? String(this.rank);\n }\n\n private get medalAriaLabel(): string {\n return this.label ?? `Rank ${this.rank} medal`;\n }\n\n render() {\n const text = this.displayLabel;\n return html`\n <svg viewBox=\"0 0 72 72\" role=\"img\" aria-label=${this.medalAriaLabel}>\n <circle cx=\"36\" cy=\"36\" r=\"34\" fill=\"var(--coin-edge)\" />\n <circle cx=\"36\" cy=\"34\" r=\"32\" fill=\"var(--coin-face)\" />\n <circle\n cx=\"36\"\n cy=\"34\"\n r=\"25\"\n fill=\"none\"\n stroke=\"var(--coin-ring)\"\n stroke-width=\"2\"\n opacity=\"0.55\"\n />\n ${svg`<text\n class=\"rank-text\"\n x=\"36\"\n y=\"44\"\n text-anchor=\"middle\"\n >${text}</text>`}\n </svg>\n `;\n }\n}\n"],"names":["OsLeaderboardCasinoMedalCoin","LitElement","text","html","svg","osLeaderboardCasinoTheme","scss","styles","__decorateClass","property","Component","OS_LEADERBOARD_CASINO_MEDAL_COIN"],"mappings":";;;;;;;;;;;;;;;AAYO,IAAMA,IAAN,cAA2CC,EAAW;AAAA,EAAtD,cAAA;AAAA,UAAA,GAAA,SAAA,GAIL,KAAA,UAA4B,QAG5B,KAAA,OAAO,GAQP,KAAA,OAAO;AAAA,EAAA;AAAA,EAEY,aAAmB;AACpC,SAAK,MAAM,YAAY,eAAe,GAAG,KAAK,IAAI,IAAI;AAAA,EACxD;AAAA,EAEA,IAAY,eAAuB;AACjC,WAAO,KAAK,SAAS,OAAO,KAAK,IAAI;AAAA,EACvC;AAAA,EAEA,IAAY,iBAAyB;AACnC,WAAO,KAAK,SAAS,QAAQ,KAAK,IAAI;AAAA,EACxC;AAAA,EAEA,SAAS;AACP,UAAMC,IAAO,KAAK;AAClB,WAAOC;AAAAA,uDAC4C,KAAK,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAYhEC;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA,aAKGF,CAAI,SAAS;AAAA;AAAA;AAAA,EAGxB;AACF;AArDaF,EACJ,SAAS,CAACK,GAA0BC,EAAKC,CAAM,CAAC;AAGvDC,EAAA;AAAA,EADCC,EAAS,EAAE,MAAM,QAAQ,SAAS,IAAM;AAAA,GAH9BT,EAIX,WAAA,WAAA,CAAA;AAGAQ,EAAA;AAAA,EADCC,EAAS,EAAE,MAAM,OAAA,CAAQ;AAAA,GANfT,EAOX,WAAA,QAAA,CAAA;AAIAQ,EAAA;AAAA,EADCC,EAAS,EAAE,MAAM,OAAA,CAAQ;AAAA,GAVfT,EAWX,WAAA,SAAA,CAAA;AAIAQ,EAAA;AAAA,EADCC,EAAS,EAAE,MAAM,OAAA,CAAQ;AAAA,GAdfT,EAeX,WAAA,QAAA,CAAA;AAfWA,IAANQ,EAAA;AAAA,EADNE,EAAU,EAAE,UAAUC,EAAA,CAAkC;AAAA,GAC5CX,CAAA;"}
@@ -0,0 +1,5 @@
1
+ const o = ":host{display:inline-block;line-height:0;--coin-size: 52px}:host([variant=gold]){--coin-highlight: var(--gold-strong);--coin-face: var(--gold);--coin-edge: var(--gold-deep);--coin-ring: color-mix(in srgb, var(--gold-strong) 55%, transparent);--coin-shadow: drop-shadow(0 6px 16px rgba(0, 0, 0, .45));--coin-filter: drop-shadow(0 0 14px var(--gold-glow))}:host([variant=silver]){--coin-highlight: var(--silver);--coin-face: color-mix(in srgb, var(--silver) 78%, var(--surface-solid));--coin-edge: color-mix(in srgb, var(--silver) 52%, #5a6270);--coin-ring: color-mix(in srgb, var(--silver) 45%, transparent);--coin-shadow: drop-shadow(0 6px 14px rgba(0, 0, 0, .4));--coin-filter: none}:host([variant=bronze]){--coin-highlight: color-mix(in srgb, var(--bronze) 72%, #ffe8d4);--coin-face: var(--bronze);--coin-edge: color-mix(in srgb, var(--bronze) 62%, #6b4224);--coin-ring: color-mix(in srgb, var(--bronze) 45%, transparent);--coin-shadow: drop-shadow(0 6px 14px rgba(0, 0, 0, .4));--coin-filter: none}svg{display:block;width:var(--coin-size);height:var(--coin-size);filter:var(--coin-filter, var(--coin-shadow))}.rank-text{font-family:var(--font-display);font-size:calc(var(--coin-size) * .42 * var(--coin-text-scale, 1));font-weight:800;fill:#1a1208}";
2
+ export {
3
+ o as default
4
+ };
5
+ //# sourceMappingURL=medal-coin.scss.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"medal-coin.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
@@ -0,0 +1,23 @@
1
+ import { LitElement, nothing } from 'lit';
2
+ import { OsLeaderboardCasinoPrizeSection } from '../../types/sections.js';
3
+ import { PrizeSectionHost } from './prize-section.host.js';
4
+ /** Top-3 metallic podium showcase + remaining prize tiers. */
5
+ export declare class OsLeaderboardCasinoPrize extends LitElement implements PrizeSectionHost {
6
+ static styles: import('lit').CSSResult[];
7
+ section: OsLeaderboardCasinoPrizeSection;
8
+ private restPrizes;
9
+ private secondPrize?;
10
+ private firstPrize?;
11
+ private thirdPrize?;
12
+ get sectionTitle(): string;
13
+ get showStrategy(): boolean;
14
+ get strategyLabel(): string;
15
+ get hasTierList(): boolean;
16
+ willUpdate(): void;
17
+ private onPrizeClick;
18
+ private formatValue;
19
+ private renderPodiumSlot;
20
+ renderPodium(): import('lit').TemplateResult<1>;
21
+ renderTierList(): import('lit').TemplateResult<1>;
22
+ render(): import('lit').TemplateResult | typeof nothing;
23
+ }
@@ -0,0 +1,11 @@
1
+ import { TemplateResult } from 'lit';
2
+ import { OsLeaderboardCasinoPrizeSection } from '../../types/sections.js';
3
+ export interface PrizeSectionHost {
4
+ section: OsLeaderboardCasinoPrizeSection;
5
+ sectionTitle: string;
6
+ showStrategy: boolean;
7
+ strategyLabel: string;
8
+ renderPodium(): TemplateResult;
9
+ renderTierList(): TemplateResult;
10
+ hasTierList: boolean;
11
+ }
@@ -1,5 +1,7 @@
1
- import { html as i } from "lit";
2
- function t(e) {
1
+ import "../../../../shared/vendor/lit-reactive-element-reactive-element.js";
2
+ import { html as i } from "../../../../shared/vendor/lit-html-lit-html.js";
3
+ import "../../../../shared/vendor/lit-element-lit-element.js";
4
+ function d(e) {
3
5
  return i`<section>
4
6
  <div class="section-header">
5
7
  <h2 class="section-title">${e.sectionTitle}</h2>
@@ -13,6 +15,6 @@ function t(e) {
13
15
  `;
14
16
  }
15
17
  export {
16
- t as default
18
+ d as default
17
19
  };
18
20
  //# sourceMappingURL=prize-section.html.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"prize-section.html.js","sources":["../../../../../src/components/os-leaderboard-casino/sections/prize-section/prize-section.html?lit-html"],"sourcesContent":["\nimport { html } from 'lit';\n\nexport default function render(host) {\n return html`<section>\n <div class=\"section-header\">\n <h2 class=\"section-title\">${host.sectionTitle}</h2>\n <span class=\"strategy\" ?hidden=${!host.showStrategy}>${host.strategyLabel}</span>\n </div>\n\n <div class=\"podium\">${host.renderPodium()}</div>\n\n <div class=\"list\" ?hidden=${!host.hasTierList}>${host.renderTierList()}</div>\n</section>\n`;\n}\n"],"names":["render","host","html"],"mappings":";AAGe,SAASA,EAAOC,GAAM;AACnC,SAAOC;AAAA;AAAA,gCAEuBD,EAAK,YAAY;AAAA,qCACZ,CAACA,EAAK,YAAY,IAAIA,EAAK,aAAa;AAAA;AAAA;AAAA,wBAGrDA,EAAK,cAAc;AAAA;AAAA,8BAEb,CAACA,EAAK,WAAW,IAAIA,EAAK,eAAc,CAAE;AAAA;AAAA;AAGxE;"}
1
+ {"version":3,"file":"prize-section.html.js","sources":["../../../../../src/components/os-leaderboard-casino/sections/prize-section/prize-section.html?lit-html"],"sourcesContent":["\nimport { html } from 'lit';\n\nexport default function render(host) {\n return html`<section>\n <div class=\"section-header\">\n <h2 class=\"section-title\">${host.sectionTitle}</h2>\n <span class=\"strategy\" ?hidden=${!host.showStrategy}>${host.strategyLabel}</span>\n </div>\n\n <div class=\"podium\">${host.renderPodium()}</div>\n\n <div class=\"list\" ?hidden=${!host.hasTierList}>${host.renderTierList()}</div>\n</section>\n`;\n}\n"],"names":["render","host","html"],"mappings":";;;AAGe,SAASA,EAAOC,GAAM;AACnC,SAAOC;AAAAA;AAAAA,gCAEuBD,EAAK,YAAY;AAAA,qCACZ,CAACA,EAAK,YAAY,IAAIA,EAAK,aAAa;AAAA;AAAA;AAAA,wBAGrDA,EAAK,cAAc;AAAA;AAAA,8BAEb,CAACA,EAAK,WAAW,IAAIA,EAAK,eAAc,CAAE;AAAA;AAAA;AAGxE;"}
@@ -1,18 +1,21 @@
1
- import { LitElement as f, html as o, nothing as a } from "lit";
2
- import { property as P } from "lit/decorators.js";
1
+ import "../../../../shared/vendor/lit-reactive-element-reactive-element.js";
2
+ import { html as n, nothing as a } from "../../../../shared/vendor/lit-html-lit-html.js";
3
+ import { LitElement as f } from "../../../../shared/vendor/lit-element-lit-element.js";
4
+ import { property as P } from "../../../../shared/vendor/lit-reactive-element-property.js";
3
5
  import { Component as p } from "../../../../shared/lib/lit/component.js";
4
6
  import { scss as v } from "../../../../shared/lib/lit/scss.js";
5
7
  import { DEFAULT_PRIZE_TITLE as b } from "../../constants/defaults.js";
6
8
  import { OS_LEADERBOARD_CASINO_PRIZE as $ } from "../../constants/tags.js";
7
9
  import { osLeaderboardCasinoTheme as g } from "../../theme/styles.js";
8
- import { labelText as d } from "../../types/data.js";
9
- import { iconService as u } from "../../services/icon.service.js";
10
+ import { iconService as d } from "../../services/icon.service.js";
11
+ import { labelText as u } from "../../types/data.js";
10
12
  import { OS_LEADERBOARD_CASINO_PRIZE_CLICK as k } from "../../types/events.js";
13
+ import "./components/medal-coin/medal-coin.js";
11
14
  import S from "./prize-section.html.js";
12
15
  import _ from "./prize-section.scss.js";
13
16
  var y = Object.defineProperty, z = Object.getOwnPropertyDescriptor, h = (r, t, e, i) => {
14
- for (var s = i > 1 ? void 0 : i ? z(t, e) : t, n = r.length - 1, c; n >= 0; n--)
15
- (c = r[n]) && (s = (i ? c(t, e, s) : c(s)) || s);
17
+ for (var s = i > 1 ? void 0 : i ? z(t, e) : t, o = r.length - 1, c; o >= 0; o--)
18
+ (c = r[o]) && (s = (i ? c(t, e, s) : c(s)) || s);
16
19
  return i && s && y(t, e, s), s;
17
20
  };
18
21
  function F(r) {
@@ -80,36 +83,36 @@ let l = class extends f {
80
83
  first: "Champion",
81
84
  second: "2nd place",
82
85
  third: "3rd place"
83
- }, n = t === "first" ? 68 : 52;
84
- return o`
86
+ }, o = t === "first" ? 68 : 52;
87
+ return n`
85
88
  <button class="slot ${t}" @click=${() => this.onPrizeClick(r)}>
86
89
  <div class="coin">
87
90
  <os-leaderboard-casino-medal-coin
88
91
  variant=${e[t]}
89
92
  rank=${i[t]}
90
- size=${n}
93
+ size=${o}
91
94
  ></os-leaderboard-casino-medal-coin>
92
95
  </div>
93
96
  <div class="place">${s[t]}</div>
94
- <div class="name">${d(r.label)}</div>
97
+ <div class="name">${u(r.label)}</div>
95
98
  <div class="value">${this.formatValue(r)}</div>
96
99
  </button>
97
100
  `;
98
101
  }
99
102
  renderPodium() {
100
- return o`
103
+ return n`
101
104
  ${this.secondPrize ? this.renderPodiumSlot(this.secondPrize, "second") : a}
102
105
  ${this.firstPrize ? this.renderPodiumSlot(this.firstPrize, "first") : a}
103
106
  ${this.thirdPrize ? this.renderPodiumSlot(this.thirdPrize, "third") : a}
104
107
  `;
105
108
  }
106
109
  renderTierList() {
107
- return o`${this.restPrizes.map(
108
- (r) => o`
110
+ return n`${this.restPrizes.map(
111
+ (r) => n`
109
112
  <button class="tier" @click=${() => this.onPrizeClick(r)}>
110
- <span class="icon">${u.get(u.resolvePrizeIconName(r.label)).svg()}</span>
113
+ <span class="icon">${d.get(d.resolvePrizeIconName(r.label)).svg()}</span>
111
114
  <span class="info">
112
- <span class="name">${d(r.label)}</span>
115
+ <span class="name">${u(r.label)}</span>
113
116
  <span class="range">Rank ${F(r)}</span>
114
117
  </span>
115
118
  <span class="value">${this.formatValue(r)}</span>
@@ -1 +1 @@
1
- {"version":3,"file":"prize-section.js","sources":["../../../../../src/components/os-leaderboard-casino/sections/prize-section/prize-section.ts"],"sourcesContent":["import { LitElement, html, nothing } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { Component } from '@oddsmith/lib/lit/component.js';\nimport { scss } from '@oddsmith/lib/lit/scss.js';\nimport { DEFAULT_PRIZE_TITLE } from '@os-leaderboard-casino/constants/defaults.js';\nimport { OS_LEADERBOARD_CASINO_PRIZE } from '@os-leaderboard-casino/constants/tags.js';\nimport { osLeaderboardCasinoTheme } from '@os-leaderboard-casino/theme/index.js';\nimport {\n labelText,\n type QuizPrize,\n} from '@os-leaderboard-casino/types/data.js';\nimport { iconService } from '@os-leaderboard-casino/services/icon.service.js';\nimport { OS_LEADERBOARD_CASINO_PRIZE_CLICK } from '@os-leaderboard-casino/types/events.js';\nimport type { OsLeaderboardCasinoPrizeSection } from '@os-leaderboard-casino/types/sections.js';\nimport type { PrizeSectionHost } from './prize-section.host.js';\nimport './components/medal-coin/medal-coin.js';\nimport renderTemplate from './prize-section.html?lit-html';\nimport styles from './prize-section.scss?inline';\n\nfunction rankRange(prize: QuizPrize): string {\n return prize.rankFrom === prize.rankTo\n ? `#${prize.rankFrom}`\n : `#${prize.rankFrom}–${prize.rankTo}`;\n}\n\nfunction podiumPrizeForRank(\n prizes: QuizPrize[],\n rank: 1 | 2 | 3,\n): QuizPrize | undefined {\n return prizes.find(\n (prize) => prize.rankFrom === rank && prize.rankTo === rank,\n );\n}\n\nfunction tierPrizesFrom(prizes: QuizPrize[]): QuizPrize[] {\n return prizes.filter(\n (prize) =>\n !(\n prize.rankFrom === prize.rankTo &&\n prize.rankFrom >= 1 &&\n prize.rankFrom <= 3\n ),\n );\n}\n\n/** Top-3 metallic podium showcase + remaining prize tiers. */\n@Component({ selector: OS_LEADERBOARD_CASINO_PRIZE })\nexport class OsLeaderboardCasinoPrize\n extends LitElement\n implements PrizeSectionHost\n{\n static styles = [osLeaderboardCasinoTheme, scss(styles)];\n\n @property({ attribute: false })\n section!: OsLeaderboardCasinoPrizeSection;\n\n private restPrizes: QuizPrize[] = [];\n private secondPrize?: QuizPrize;\n private firstPrize?: QuizPrize;\n private thirdPrize?: QuizPrize;\n\n get sectionTitle(): string {\n return this.section?.title ?? DEFAULT_PRIZE_TITLE;\n }\n\n get showStrategy(): boolean {\n return Boolean(this.section?.allocationStrategy);\n }\n\n get strategyLabel(): string {\n return this.section?.allocationStrategy === 'SPLIT_PRIZE'\n ? 'Split Prize'\n : 'Best Prize';\n }\n\n get hasTierList(): boolean {\n return this.restPrizes.length > 0;\n }\n\n willUpdate() {\n const prizes = this.section?.prizePackage?.prizes ?? [];\n this.firstPrize = podiumPrizeForRank(prizes, 1);\n this.secondPrize = podiumPrizeForRank(prizes, 2);\n this.thirdPrize = podiumPrizeForRank(prizes, 3);\n this.restPrizes = tierPrizesFrom(prizes).sort(\n (left, right) => left.rankFrom - right.rankFrom,\n );\n }\n\n private onPrizeClick(prize: QuizPrize) {\n this.dispatchEvent(\n new CustomEvent(OS_LEADERBOARD_CASINO_PRIZE_CLICK, {\n detail: { prize },\n bubbles: true,\n composed: true,\n }),\n );\n }\n\n private formatValue(prize: QuizPrize): string {\n if (prize.value == null) return '';\n try {\n return new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: prize.currency ?? 'USD',\n maximumFractionDigits: 0,\n }).format(prize.value);\n } catch {\n return `${prize.value} ${prize.currency ?? ''}`.trim();\n }\n }\n\n private renderPodiumSlot(\n prize: QuizPrize,\n place: 'first' | 'second' | 'third',\n ) {\n const variants = {\n first: 'gold',\n second: 'silver',\n third: 'bronze',\n } as const;\n const ranks = { first: 1, second: 2, third: 3 };\n const labels = {\n first: 'Champion',\n second: '2nd place',\n third: '3rd place',\n };\n const coinSize = place === 'first' ? 68 : 52;\n return html`\n <button class=\"slot ${place}\" @click=${() => this.onPrizeClick(prize)}>\n <div class=\"coin\">\n <os-leaderboard-casino-medal-coin\n variant=${variants[place]}\n rank=${ranks[place]}\n size=${coinSize}\n ></os-leaderboard-casino-medal-coin>\n </div>\n <div class=\"place\">${labels[place]}</div>\n <div class=\"name\">${labelText(prize.label)}</div>\n <div class=\"value\">${this.formatValue(prize)}</div>\n </button>\n `;\n }\n\n renderPodium() {\n return html`\n ${this.secondPrize\n ? this.renderPodiumSlot(this.secondPrize, 'second')\n : nothing}\n ${this.firstPrize\n ? this.renderPodiumSlot(this.firstPrize, 'first')\n : nothing}\n ${this.thirdPrize\n ? this.renderPodiumSlot(this.thirdPrize, 'third')\n : nothing}\n `;\n }\n\n renderTierList() {\n return html`${this.restPrizes.map(\n (prize) => html`\n <button class=\"tier\" @click=${() => this.onPrizeClick(prize)}>\n <span class=\"icon\">${iconService.get(iconService.resolvePrizeIconName(prize.label)).svg()}</span>\n <span class=\"info\">\n <span class=\"name\">${labelText(prize.label)}</span>\n <span class=\"range\">Rank ${rankRange(prize)}</span>\n </span>\n <span class=\"value\">${this.formatValue(prize)}</span>\n </button>\n `,\n )}`;\n }\n\n render() {\n const prizes = this.section?.prizePackage?.prizes ?? [];\n if (!prizes.length) return nothing;\n return renderTemplate(this);\n }\n}\n"],"names":["rankRange","prize","podiumPrizeForRank","prizes","rank","tierPrizesFrom","OsLeaderboardCasinoPrize","LitElement","DEFAULT_PRIZE_TITLE","left","right","OS_LEADERBOARD_CASINO_PRIZE_CLICK","place","variants","ranks","labels","coinSize","html","labelText","nothing","iconService","renderTemplate","osLeaderboardCasinoTheme","scss","styles","__decorateClass","property","Component","OS_LEADERBOARD_CASINO_PRIZE"],"mappings":"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"}
1
+ {"version":3,"file":"prize-section.js","sources":["../../../../../src/components/os-leaderboard-casino/sections/prize-section/prize-section.ts"],"sourcesContent":["import { LitElement, html, nothing } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { Component } from '@oddsmith/lib/lit/component.js';\nimport { scss } from '@oddsmith/lib/lit/scss.js';\nimport { DEFAULT_PRIZE_TITLE } from '@os-leaderboard-casino/constants/defaults.js';\nimport { OS_LEADERBOARD_CASINO_PRIZE } from '@os-leaderboard-casino/constants/tags.js';\nimport { osLeaderboardCasinoTheme } from '@os-leaderboard-casino/theme/index.js';\nimport {\n labelText,\n type QuizPrize,\n} from '@os-leaderboard-casino/types/data.js';\nimport { iconService } from '@os-leaderboard-casino/services/icon.service.js';\nimport { OS_LEADERBOARD_CASINO_PRIZE_CLICK } from '@os-leaderboard-casino/types/events.js';\nimport type { OsLeaderboardCasinoPrizeSection } from '@os-leaderboard-casino/types/sections.js';\nimport type { PrizeSectionHost } from './prize-section.host.js';\nimport './components/medal-coin/medal-coin.js';\nimport renderTemplate from './prize-section.html?lit-html';\nimport styles from './prize-section.scss?inline';\n\nfunction rankRange(prize: QuizPrize): string {\n return prize.rankFrom === prize.rankTo\n ? `#${prize.rankFrom}`\n : `#${prize.rankFrom}–${prize.rankTo}`;\n}\n\nfunction podiumPrizeForRank(\n prizes: QuizPrize[],\n rank: 1 | 2 | 3,\n): QuizPrize | undefined {\n return prizes.find(\n (prize) => prize.rankFrom === rank && prize.rankTo === rank,\n );\n}\n\nfunction tierPrizesFrom(prizes: QuizPrize[]): QuizPrize[] {\n return prizes.filter(\n (prize) =>\n !(\n prize.rankFrom === prize.rankTo &&\n prize.rankFrom >= 1 &&\n prize.rankFrom <= 3\n ),\n );\n}\n\n/** Top-3 metallic podium showcase + remaining prize tiers. */\n@Component({ selector: OS_LEADERBOARD_CASINO_PRIZE })\nexport class OsLeaderboardCasinoPrize\n extends LitElement\n implements PrizeSectionHost\n{\n static styles = [osLeaderboardCasinoTheme, scss(styles)];\n\n @property({ attribute: false })\n section!: OsLeaderboardCasinoPrizeSection;\n\n private restPrizes: QuizPrize[] = [];\n private secondPrize?: QuizPrize;\n private firstPrize?: QuizPrize;\n private thirdPrize?: QuizPrize;\n\n get sectionTitle(): string {\n return this.section?.title ?? DEFAULT_PRIZE_TITLE;\n }\n\n get showStrategy(): boolean {\n return Boolean(this.section?.allocationStrategy);\n }\n\n get strategyLabel(): string {\n return this.section?.allocationStrategy === 'SPLIT_PRIZE'\n ? 'Split Prize'\n : 'Best Prize';\n }\n\n get hasTierList(): boolean {\n return this.restPrizes.length > 0;\n }\n\n willUpdate() {\n const prizes = this.section?.prizePackage?.prizes ?? [];\n this.firstPrize = podiumPrizeForRank(prizes, 1);\n this.secondPrize = podiumPrizeForRank(prizes, 2);\n this.thirdPrize = podiumPrizeForRank(prizes, 3);\n this.restPrizes = tierPrizesFrom(prizes).sort(\n (left, right) => left.rankFrom - right.rankFrom,\n );\n }\n\n private onPrizeClick(prize: QuizPrize) {\n this.dispatchEvent(\n new CustomEvent(OS_LEADERBOARD_CASINO_PRIZE_CLICK, {\n detail: { prize },\n bubbles: true,\n composed: true,\n }),\n );\n }\n\n private formatValue(prize: QuizPrize): string {\n if (prize.value == null) return '';\n try {\n return new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: prize.currency ?? 'USD',\n maximumFractionDigits: 0,\n }).format(prize.value);\n } catch {\n return `${prize.value} ${prize.currency ?? ''}`.trim();\n }\n }\n\n private renderPodiumSlot(\n prize: QuizPrize,\n place: 'first' | 'second' | 'third',\n ) {\n const variants = {\n first: 'gold',\n second: 'silver',\n third: 'bronze',\n } as const;\n const ranks = { first: 1, second: 2, third: 3 };\n const labels = {\n first: 'Champion',\n second: '2nd place',\n third: '3rd place',\n };\n const coinSize = place === 'first' ? 68 : 52;\n return html`\n <button class=\"slot ${place}\" @click=${() => this.onPrizeClick(prize)}>\n <div class=\"coin\">\n <os-leaderboard-casino-medal-coin\n variant=${variants[place]}\n rank=${ranks[place]}\n size=${coinSize}\n ></os-leaderboard-casino-medal-coin>\n </div>\n <div class=\"place\">${labels[place]}</div>\n <div class=\"name\">${labelText(prize.label)}</div>\n <div class=\"value\">${this.formatValue(prize)}</div>\n </button>\n `;\n }\n\n renderPodium() {\n return html`\n ${this.secondPrize\n ? this.renderPodiumSlot(this.secondPrize, 'second')\n : nothing}\n ${this.firstPrize\n ? this.renderPodiumSlot(this.firstPrize, 'first')\n : nothing}\n ${this.thirdPrize\n ? this.renderPodiumSlot(this.thirdPrize, 'third')\n : nothing}\n `;\n }\n\n renderTierList() {\n return html`${this.restPrizes.map(\n (prize) => html`\n <button class=\"tier\" @click=${() => this.onPrizeClick(prize)}>\n <span class=\"icon\">${iconService.get(iconService.resolvePrizeIconName(prize.label)).svg()}</span>\n <span class=\"info\">\n <span class=\"name\">${labelText(prize.label)}</span>\n <span class=\"range\">Rank ${rankRange(prize)}</span>\n </span>\n <span class=\"value\">${this.formatValue(prize)}</span>\n </button>\n `,\n )}`;\n }\n\n render() {\n const prizes = this.section?.prizePackage?.prizes ?? [];\n if (!prizes.length) return nothing;\n return renderTemplate(this);\n }\n}\n"],"names":["rankRange","prize","podiumPrizeForRank","prizes","rank","tierPrizesFrom","OsLeaderboardCasinoPrize","LitElement","DEFAULT_PRIZE_TITLE","left","right","OS_LEADERBOARD_CASINO_PRIZE_CLICK","place","variants","ranks","labels","coinSize","html","labelText","nothing","iconService","renderTemplate","osLeaderboardCasinoTheme","scss","styles","__decorateClass","property","Component","OS_LEADERBOARD_CASINO_PRIZE"],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { LitElement } from 'lit';
2
+ import { statIcons } from '../stat-icons.js';
3
+ export type StatBandAccent = 'participants' | 'prizes' | 'ends';
4
+ export type StatBandIcon = keyof typeof statIcons;
5
+ export type StatBandSegment = 'solo' | 'start' | 'middle' | 'end';
6
+ /** Centered KPI band — accent stripe, icon ring, stacked value + label. */
7
+ export declare class OsLeaderboardCasinoStatBand extends LitElement {
8
+ static styles: import('lit').CSSResult[];
9
+ accent: StatBandAccent;
10
+ icon: StatBandIcon;
11
+ value: string;
12
+ label: string;
13
+ segment: StatBandSegment;
14
+ compact: boolean;
15
+ highlight: boolean;
16
+ render(): import('lit').TemplateResult<1>;
17
+ }
@@ -0,0 +1,15 @@
1
+ import { LitElement } from 'lit';
2
+ import { statIcons } from '../stat-icons.js';
3
+ export type StatCardAccent = 'participants' | 'prizes' | 'ends';
4
+ export type StatCardIcon = keyof typeof statIcons;
5
+ /** Classic glow stat tile — rounded glass cards with soft accent wash. */
6
+ export declare class OsLeaderboardCasinoStatCard extends LitElement {
7
+ static styles: import('lit').CSSResult[];
8
+ accent: StatCardAccent;
9
+ icon: StatCardIcon;
10
+ value: string;
11
+ label: string;
12
+ compact: boolean;
13
+ glow: boolean;
14
+ render(): import('lit').TemplateResult<1>;
15
+ }
@@ -0,0 +1,17 @@
1
+ import { LitElement } from 'lit';
2
+ import { statIcons } from '../stat-icons.js';
3
+ export type StatChipAccent = 'participants' | 'prizes' | 'ends';
4
+ export type StatChipIcon = keyof typeof statIcons;
5
+ export type StatChipSegment = 'solo' | 'start' | 'middle' | 'end';
6
+ /** Compact chip readout — inline icon + value, label tucked below. */
7
+ export declare class OsLeaderboardCasinoStatChip extends LitElement {
8
+ static styles: import('lit').CSSResult[];
9
+ accent: StatChipAccent;
10
+ icon: StatChipIcon;
11
+ value: string;
12
+ label: string;
13
+ segment: StatChipSegment;
14
+ compact: boolean;
15
+ highlight: boolean;
16
+ render(): import('lit').TemplateResult<1>;
17
+ }
@@ -0,0 +1,14 @@
1
+ import { LitElement } from 'lit';
2
+ import { statIcons } from '../stat-icons.js';
3
+ export type StatGaugeAccent = 'participants' | 'prizes' | 'ends';
4
+ export type StatGaugeIcon = keyof typeof statIcons;
5
+ /** Telemetry gauge tile — variant B stat readout from v0 stat-strip. */
6
+ export declare class OsLeaderboardCasinoStatGauge extends LitElement {
7
+ static styles: import('lit').CSSResult[];
8
+ accent: StatGaugeAccent;
9
+ icon: StatGaugeIcon;
10
+ value: string;
11
+ label: string;
12
+ compact: boolean;
13
+ render(): import('lit').TemplateResult<1>;
14
+ }
@@ -0,0 +1,5 @@
1
+ import { TemplateResult } from 'lit';
2
+ export type StatIconName = 'users' | 'gift' | 'clock' | 'trophy';
3
+ type IconFn = () => TemplateResult;
4
+ export declare const statIcons: Record<StatIconName, IconFn>;
5
+ export {};
@@ -0,0 +1,11 @@
1
+ import { iconService as t } from "../../../services/icon.service.js";
2
+ const o = {
3
+ users: () => t.svg("stat.users"),
4
+ gift: () => t.svg("stat.gift"),
5
+ clock: () => t.svg("stat.clock"),
6
+ trophy: () => t.svg("win.trophy")
7
+ };
8
+ export {
9
+ o as statIcons
10
+ };
11
+ //# sourceMappingURL=stat-icons.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stat-icons.js","sources":["../../../../../../src/components/os-leaderboard-casino/sections/stats-section/components/stat-icons.ts"],"sourcesContent":["import { iconService } from '@os-leaderboard-casino/services/icon.service.js';\nimport type { TemplateResult } from 'lit';\n\nexport type StatIconName = 'users' | 'gift' | 'clock' | 'trophy';\n\ntype IconFn = () => TemplateResult;\n\nexport const statIcons: Record<StatIconName, IconFn> = {\n users: () => iconService.svg('stat.users'),\n gift: () => iconService.svg('stat.gift'),\n clock: () => iconService.svg('stat.clock'),\n trophy: () => iconService.svg('win.trophy'),\n};\n"],"names":["statIcons","iconService"],"mappings":";AAOO,MAAMA,IAA0C;AAAA,EACrD,OAAO,MAAMC,EAAY,IAAI,YAAY;AAAA,EACzC,MAAM,MAAMA,EAAY,IAAI,WAAW;AAAA,EACvC,OAAO,MAAMA,EAAY,IAAI,YAAY;AAAA,EACzC,QAAQ,MAAMA,EAAY,IAAI,YAAY;AAC5C;"}
@@ -0,0 +1,17 @@
1
+ import { LitElement } from 'lit';
2
+ import { statIcons } from '../stat-icons.js';
3
+ export type StatMeterAccent = 'participants' | 'prizes' | 'ends';
4
+ export type StatMeterIcon = keyof typeof statIcons;
5
+ export type StatMeterSegment = 'solo' | 'start' | 'middle' | 'end';
6
+ /** Meter readout — label + value with animated accent fill bar. */
7
+ export declare class OsLeaderboardCasinoStatMeter extends LitElement {
8
+ static styles: import('lit').CSSResult[];
9
+ accent: StatMeterAccent;
10
+ icon: StatMeterIcon;
11
+ value: string;
12
+ label: string;
13
+ segment: StatMeterSegment;
14
+ compact: boolean;
15
+ highlight: boolean;
16
+ render(): import('lit').TemplateResult<1>;
17
+ }
@@ -0,0 +1,17 @@
1
+ import { LitElement } from 'lit';
2
+ import { statIcons } from '../stat-icons.js';
3
+ export type StatRailAccent = 'participants' | 'prizes' | 'ends' | 'biggestWin';
4
+ export type StatRailIcon = keyof typeof statIcons;
5
+ export type StatRailSegment = 'solo' | 'start' | 'middle' | 'end';
6
+ /** Horizontal rail segment — icon well + label/value with accent shimmer. */
7
+ export declare class OsLeaderboardCasinoStatRail extends LitElement {
8
+ static styles: import('lit').CSSResult[];
9
+ accent: StatRailAccent;
10
+ icon: StatRailIcon;
11
+ value: string;
12
+ label: string;
13
+ segment: StatRailSegment;
14
+ compact: boolean;
15
+ highlight: boolean;
16
+ render(): import('lit').TemplateResult<1>;
17
+ }
@@ -0,0 +1,63 @@
1
+ import "../../../../../../shared/vendor/lit-reactive-element-reactive-element.js";
2
+ import { html as m } from "../../../../../../shared/vendor/lit-html-lit-html.js";
3
+ import { LitElement as h } from "../../../../../../shared/vendor/lit-element-lit-element.js";
4
+ import { property as o } from "../../../../../../shared/vendor/lit-reactive-element-property.js";
5
+ import { Component as f } from "../../../../../../shared/lib/lit/component.js";
6
+ import { scss as v } from "../../../../../../shared/lib/lit/scss.js";
7
+ import { OS_LEADERBOARD_CASINO_STAT_RAIL as y } from "../../../../constants/tags.js";
8
+ import { osLeaderboardCasinoTheme as u } from "../../../../theme/styles.js";
9
+ import "../../../../../../shared/vendor/lit-html-unsafe-svg.js";
10
+ import { statIcons as c } from "../stat-icons.js";
11
+ import d from "./stat-rail.scss.js";
12
+ var g = Object.defineProperty, _ = Object.getOwnPropertyDescriptor, e = (s, i, a, p) => {
13
+ for (var r = p > 1 ? void 0 : p ? _(i, a) : i, l = s.length - 1, n; l >= 0; l--)
14
+ (n = s[l]) && (r = (p ? n(i, a, r) : n(r)) || r);
15
+ return p && r && g(i, a, r), r;
16
+ };
17
+ let t = class extends h {
18
+ constructor() {
19
+ super(...arguments), this.accent = "participants", this.icon = "users", this.value = "", this.label = "", this.segment = "solo", this.compact = !1, this.highlight = !1;
20
+ }
21
+ render() {
22
+ const s = c[this.icon] ?? c.users;
23
+ return m`
24
+ <div class="rail">
25
+ <div class="icon-well">${s()}</div>
26
+ <div class="copy">
27
+ <div class="label">${this.label}</div>
28
+ <div class="value">${this.value}</div>
29
+ </div>
30
+ <span class="shimmer" aria-hidden="true"></span>
31
+ </div>
32
+ `;
33
+ }
34
+ };
35
+ t.styles = [u, v(d)];
36
+ e([
37
+ o({ type: String, reflect: !0 })
38
+ ], t.prototype, "accent", 2);
39
+ e([
40
+ o({ type: String })
41
+ ], t.prototype, "icon", 2);
42
+ e([
43
+ o({ type: String })
44
+ ], t.prototype, "value", 2);
45
+ e([
46
+ o({ type: String })
47
+ ], t.prototype, "label", 2);
48
+ e([
49
+ o({ type: String, reflect: !0 })
50
+ ], t.prototype, "segment", 2);
51
+ e([
52
+ o({ type: Boolean, reflect: !0 })
53
+ ], t.prototype, "compact", 2);
54
+ e([
55
+ o({ type: Boolean, reflect: !0 })
56
+ ], t.prototype, "highlight", 2);
57
+ t = e([
58
+ f({ selector: y })
59
+ ], t);
60
+ export {
61
+ t as OsLeaderboardCasinoStatRail
62
+ };
63
+ //# sourceMappingURL=stat-rail.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stat-rail.js","sources":["../../../../../../../src/components/os-leaderboard-casino/sections/stats-section/components/stat-rail/stat-rail.ts"],"sourcesContent":["import { LitElement, html } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { Component } from '@oddsmith/lib/lit/component.js';\nimport { scss } from '@oddsmith/lib/lit/scss.js';\nimport { OS_LEADERBOARD_CASINO_STAT_RAIL } from '@os-leaderboard-casino/constants/tags.js';\nimport { osLeaderboardCasinoTheme } from '@os-leaderboard-casino/theme/index.js';\nimport { statIcons } from '../stat-icons.js';\nimport styles from './stat-rail.scss?inline';\n\nexport type StatRailAccent = 'participants' | 'prizes' | 'ends' | 'biggestWin';\nexport type StatRailIcon = keyof typeof statIcons;\nexport type StatRailSegment = 'solo' | 'start' | 'middle' | 'end';\n\n/** Horizontal rail segment — icon well + label/value with accent shimmer. */\n@Component({ selector: OS_LEADERBOARD_CASINO_STAT_RAIL })\nexport class OsLeaderboardCasinoStatRail extends LitElement {\n static styles = [osLeaderboardCasinoTheme, scss(styles)];\n\n @property({ type: String, reflect: true })\n accent: StatRailAccent = 'participants';\n\n @property({ type: String })\n icon: StatRailIcon = 'users';\n\n @property({ type: String })\n value = '';\n\n @property({ type: String })\n label = '';\n\n @property({ type: String, reflect: true })\n segment: StatRailSegment = 'solo';\n\n @property({ type: Boolean, reflect: true })\n compact = false;\n\n @property({ type: Boolean, reflect: true })\n highlight = false;\n\n render() {\n const icon = statIcons[this.icon] ?? statIcons.users;\n return html`\n <div class=\"rail\">\n <div class=\"icon-well\">${icon()}</div>\n <div class=\"copy\">\n <div class=\"label\">${this.label}</div>\n <div class=\"value\">${this.value}</div>\n </div>\n <span class=\"shimmer\" aria-hidden=\"true\"></span>\n </div>\n `;\n }\n}\n"],"names":["OsLeaderboardCasinoStatRail","LitElement","icon","statIcons","html","osLeaderboardCasinoTheme","scss","styles","__decorateClass","property","Component","OS_LEADERBOARD_CASINO_STAT_RAIL"],"mappings":";;;;;;;;;;;;;;;;AAeO,IAAMA,IAAN,cAA0CC,EAAW;AAAA,EAArD,cAAA;AAAA,UAAA,GAAA,SAAA,GAIL,KAAA,SAAyB,gBAGzB,KAAA,OAAqB,SAGrB,KAAA,QAAQ,IAGR,KAAA,QAAQ,IAGR,KAAA,UAA2B,QAG3B,KAAA,UAAU,IAGV,KAAA,YAAY;AAAA,EAAA;AAAA,EAEZ,SAAS;AACP,UAAMC,IAAOC,EAAU,KAAK,IAAI,KAAKA,EAAU;AAC/C,WAAOC;AAAAA;AAAAA,iCAEsBF,GAAM;AAAA;AAAA,+BAER,KAAK,KAAK;AAAA,+BACV,KAAK,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA,EAKvC;AACF;AArCaF,EACJ,SAAS,CAACK,GAA0BC,EAAKC,CAAM,CAAC;AAGvDC,EAAA;AAAA,EADCC,EAAS,EAAE,MAAM,QAAQ,SAAS,IAAM;AAAA,GAH9BT,EAIX,WAAA,UAAA,CAAA;AAGAQ,EAAA;AAAA,EADCC,EAAS,EAAE,MAAM,OAAA,CAAQ;AAAA,GANfT,EAOX,WAAA,QAAA,CAAA;AAGAQ,EAAA;AAAA,EADCC,EAAS,EAAE,MAAM,OAAA,CAAQ;AAAA,GATfT,EAUX,WAAA,SAAA,CAAA;AAGAQ,EAAA;AAAA,EADCC,EAAS,EAAE,MAAM,OAAA,CAAQ;AAAA,GAZfT,EAaX,WAAA,SAAA,CAAA;AAGAQ,EAAA;AAAA,EADCC,EAAS,EAAE,MAAM,QAAQ,SAAS,IAAM;AAAA,GAf9BT,EAgBX,WAAA,WAAA,CAAA;AAGAQ,EAAA;AAAA,EADCC,EAAS,EAAE,MAAM,SAAS,SAAS,IAAM;AAAA,GAlB/BT,EAmBX,WAAA,WAAA,CAAA;AAGAQ,EAAA;AAAA,EADCC,EAAS,EAAE,MAAM,SAAS,SAAS,IAAM;AAAA,GArB/BT,EAsBX,WAAA,aAAA,CAAA;AAtBWA,IAANQ,EAAA;AAAA,EADNE,EAAU,EAAE,UAAUC,EAAA,CAAiC;AAAA,GAC3CX,CAAA;"}
@@ -0,0 +1,5 @@
1
+ const t = ':host{display:block;flex:1;min-width:0}:host([hidden]){display:none}.rail{position:relative;overflow:hidden;display:flex;align-items:center;gap:14px;height:100%;box-sizing:border-box;padding:16px 18px 18px;border:1px solid var(--panel-border);border-radius:var(--radius-sm);background:var(--panel-bg);box-shadow:var(--panel-shadow)}:host([accent=participants]){--rail-accent: var(--green);--icon-bg: var(--green-soft);--icon-color: var(--green)}:host([accent=prizes]){--rail-accent: var(--gold);--icon-bg: var(--gold-soft);--icon-color: var(--gold)}:host([accent=ends]){--rail-accent: var(--violet);--icon-bg: var(--violet-soft);--icon-color: var(--violet)}:host([accent=biggestWin]){--rail-accent: var(--red);--icon-bg: var(--red-soft);--icon-color: var(--red)}.icon-well{flex-shrink:0;width:44px;height:44px;display:grid;place-items:center;border-radius:10px;background:var(--icon-bg);border:1px solid color-mix(in srgb,var(--rail-accent) 30%,transparent);color:var(--icon-color);box-shadow:inset 0 1px color-mix(in srgb,white 8%,transparent)}.icon-well svg{width:20px;height:20px}.copy{min-width:0;flex:1}.label{font-family:var(--font-mono);font-size:10px;font-weight:700;letter-spacing:.16em;text-transform:uppercase;color:var(--text-dim)}.value{margin-top:6px;font-family:var(--font-mono);font-size:24px;font-weight:800;line-height:1.1;color:var(--text);font-variant-numeric:tabular-nums}:host([compact]) .value{font-size:15px;line-height:1.25}:host([highlight]) .value{color:var(--gold-strong);text-shadow:0 0 16px color-mix(in srgb,var(--gold) 35%,transparent)}.shimmer{position:absolute;left:0;right:0;bottom:0;height:2px;background:linear-gradient(90deg,transparent,var(--rail-accent),transparent);opacity:.55}.shimmer:after{content:"";position:absolute;inset:0;background:inherit;filter:blur(4px);opacity:.8}.rail:after{content:"";position:absolute;left:-40%;bottom:0;width:35%;height:2px;background:linear-gradient(90deg,transparent,color-mix(in srgb,var(--rail-accent) 90%,white),transparent);animation:rail-shimmer 3.2s ease-in-out infinite;pointer-events:none}@keyframes rail-shimmer{0%,to{transform:translate(0);opacity:0}20%{opacity:1}80%{opacity:1}to{transform:translate(420%);opacity:0}}@media(prefers-reduced-motion:reduce){.rail:after{animation:none;opacity:.35;left:0;width:100%;transform:none}}';
2
+ export {
3
+ t as default
4
+ };
5
+ //# sourceMappingURL=stat-rail.scss.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stat-rail.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
@@ -0,0 +1,16 @@
1
+ import { LitElement, nothing } from 'lit';
2
+ import { OsLeaderboardCasinoStatsSection } from '../../types/sections.js';
3
+ import { StatsSectionHost, StatRailSegment } from './stats-section.host.js';
4
+ export declare class OsLeaderboardCasinoStats extends LitElement implements StatsSectionHost {
5
+ static styles: import('lit').CSSResult[];
6
+ section: OsLeaderboardCasinoStatsSection;
7
+ get participantsLabel(): string;
8
+ get showPrizes(): boolean;
9
+ get prizesLabel(): string;
10
+ get showBiggestWin(): boolean;
11
+ get biggestWinLabel(): string;
12
+ get participantsSegment(): StatRailSegment;
13
+ get prizesSegment(): StatRailSegment;
14
+ get biggestWinSegment(): StatRailSegment;
15
+ render(): import('lit').TemplateResult | typeof nothing;
16
+ }
@@ -0,0 +1,13 @@
1
+ import { OsLeaderboardCasinoStatsSection } from '../../types/sections.js';
2
+ export type StatRailSegment = 'solo' | 'start' | 'middle' | 'end';
3
+ export interface StatsSectionHost {
4
+ section: OsLeaderboardCasinoStatsSection;
5
+ participantsLabel: string;
6
+ participantsSegment: StatRailSegment;
7
+ showPrizes: boolean;
8
+ prizesLabel: string;
9
+ prizesSegment: StatRailSegment;
10
+ showBiggestWin: boolean;
11
+ biggestWinLabel: string;
12
+ biggestWinSegment: StatRailSegment;
13
+ }
@@ -1,5 +1,7 @@
1
- import { html as a } from "lit";
2
- function t(e) {
1
+ import "../../../../shared/vendor/lit-reactive-element-reactive-element.js";
2
+ import { html as a } from "../../../../shared/vendor/lit-html-lit-html.js";
3
+ import "../../../../shared/vendor/lit-element-lit-element.js";
4
+ function s(e) {
3
5
  return a`<section class="strip">
4
6
  <os-leaderboard-casino-stat-rail
5
7
  accent="participants"
@@ -29,6 +31,6 @@ function t(e) {
29
31
  `;
30
32
  }
31
33
  export {
32
- t as default
34
+ s as default
33
35
  };
34
36
  //# sourceMappingURL=stats-section.html.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"stats-section.html.js","sources":["../../../../../src/components/os-leaderboard-casino/sections/stats-section/stats-section.html?lit-html"],"sourcesContent":["\nimport { html } from 'lit';\n\nexport default function render(host) {\n return html`<section class=\"strip\">\n <os-leaderboard-casino-stat-rail\n accent=\"participants\"\n icon=\"users\"\n segment=\"${host.participantsSegment}\"\n value=\"${host.participantsLabel}\"\n label=\"Participants\"\n ></os-leaderboard-casino-stat-rail>\n <os-leaderboard-casino-stat-rail\n ?hidden=${!host.showPrizes}\n accent=\"prizes\"\n icon=\"gift\"\n segment=\"${host.prizesSegment}\"\n value=\"${host.prizesLabel}\"\n label=\"Prize Tiers\"\n ></os-leaderboard-casino-stat-rail>\n <os-leaderboard-casino-stat-rail\n ?hidden=${!host.showBiggestWin}\n accent=\"biggestWin\"\n icon=\"trophy\"\n segment=\"${host.biggestWinSegment}\"\n value=\"${host.biggestWinLabel}\"\n label=\"Biggest Win\"\n compact\n ></os-leaderboard-casino-stat-rail>\n</section>\n`;\n}\n"],"names":["render","host","html"],"mappings":";AAGe,SAASA,EAAOC,GAAM;AACnC,SAAOC;AAAA;AAAA;AAAA;AAAA,eAIMD,EAAK,mBAAmB;AAAA,aAC1BA,EAAK,iBAAiB;AAAA;AAAA;AAAA;AAAA,cAIrB,CAACA,EAAK,UAAU;AAAA;AAAA;AAAA,eAGfA,EAAK,aAAa;AAAA,aACpBA,EAAK,WAAW;AAAA;AAAA;AAAA;AAAA,cAIf,CAACA,EAAK,cAAc;AAAA;AAAA;AAAA,eAGnBA,EAAK,iBAAiB;AAAA,aACxBA,EAAK,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAMjC;"}
1
+ {"version":3,"file":"stats-section.html.js","sources":["../../../../../src/components/os-leaderboard-casino/sections/stats-section/stats-section.html?lit-html"],"sourcesContent":["\nimport { html } from 'lit';\n\nexport default function render(host) {\n return html`<section class=\"strip\">\n <os-leaderboard-casino-stat-rail\n accent=\"participants\"\n icon=\"users\"\n segment=\"${host.participantsSegment}\"\n value=\"${host.participantsLabel}\"\n label=\"Participants\"\n ></os-leaderboard-casino-stat-rail>\n <os-leaderboard-casino-stat-rail\n ?hidden=${!host.showPrizes}\n accent=\"prizes\"\n icon=\"gift\"\n segment=\"${host.prizesSegment}\"\n value=\"${host.prizesLabel}\"\n label=\"Prize Tiers\"\n ></os-leaderboard-casino-stat-rail>\n <os-leaderboard-casino-stat-rail\n ?hidden=${!host.showBiggestWin}\n accent=\"biggestWin\"\n icon=\"trophy\"\n segment=\"${host.biggestWinSegment}\"\n value=\"${host.biggestWinLabel}\"\n label=\"Biggest Win\"\n compact\n ></os-leaderboard-casino-stat-rail>\n</section>\n`;\n}\n"],"names":["render","host","html"],"mappings":";;;AAGe,SAASA,EAAOC,GAAM;AACnC,SAAOC;AAAAA;AAAAA;AAAAA;AAAAA,eAIMD,EAAK,mBAAmB;AAAA,aAC1BA,EAAK,iBAAiB;AAAA;AAAA;AAAA;AAAA,cAIrB,CAACA,EAAK,UAAU;AAAA;AAAA;AAAA,eAGfA,EAAK,aAAa;AAAA,aACpBA,EAAK,WAAW;AAAA;AAAA;AAAA;AAAA,cAIf,CAACA,EAAK,cAAc;AAAA;AAAA;AAAA,eAGnBA,EAAK,iBAAiB;AAAA,aACxBA,EAAK,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAMjC;"}