@oddsmith/ui 0.0.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (396) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +4 -115
  3. package/dist/components/os-leaderboard-casino/assets/fallback/catalog.json +9 -0
  4. package/dist/components/os-leaderboard-casino/assets/fallback/catalog.json.js +13 -0
  5. package/dist/components/os-leaderboard-casino/assets/fallback/catalog.json.js.map +1 -0
  6. package/dist/components/os-leaderboard-casino/assets/fallback/config.json +8 -0
  7. package/dist/components/os-leaderboard-casino/assets/fallback/defaults/glam-sections.json +564 -0
  8. package/dist/components/os-leaderboard-casino/assets/fallback/fonts.json +3 -0
  9. package/dist/components/os-leaderboard-casino/assets/fallback/labels.json +5 -0
  10. package/dist/components/os-leaderboard-casino/assets/fallback/labels.json.js +12 -0
  11. package/dist/components/os-leaderboard-casino/assets/fallback/labels.json.js.map +1 -0
  12. package/dist/components/os-leaderboard-casino/assets/fallback/manifest.json +6 -0
  13. package/dist/components/os-leaderboard-casino/assets/fallback/presets.json +38 -0
  14. package/dist/components/os-leaderboard-casino/assets/fallback/presets.json.js +10 -0
  15. package/dist/components/os-leaderboard-casino/assets/fallback/presets.json.js.map +1 -0
  16. package/dist/components/os-leaderboard-casino/assets/fallback/resolved-presets.json +601 -0
  17. package/dist/components/os-leaderboard-casino/assets/fallback/resolved-presets.json.js +8 -0
  18. package/dist/components/os-leaderboard-casino/assets/fallback/resolved-presets.json.js.map +1 -0
  19. package/dist/components/os-leaderboard-casino/assets/fallback/themes.json +69 -0
  20. package/dist/components/os-leaderboard-casino/assets/fallback/themes.json.js +73 -0
  21. package/dist/components/os-leaderboard-casino/assets/fallback/themes.json.js.map +1 -0
  22. package/dist/components/os-leaderboard-casino/assets/icons/prize.casino-credits.svg +7 -0
  23. package/dist/components/os-leaderboard-casino/assets/icons/prize.casino-credits.svg.js +12 -0
  24. package/dist/components/os-leaderboard-casino/assets/icons/prize.casino-credits.svg.js.map +1 -0
  25. package/dist/components/os-leaderboard-casino/assets/icons/prize.default.svg +7 -0
  26. package/dist/components/os-leaderboard-casino/assets/icons/prize.default.svg.js +12 -0
  27. package/dist/components/os-leaderboard-casino/assets/icons/prize.default.svg.js.map +1 -0
  28. package/dist/components/os-leaderboard-casino/assets/icons/prize.elite-bonus.svg +5 -0
  29. package/dist/components/os-leaderboard-casino/assets/icons/prize.elite-bonus.svg.js +10 -0
  30. package/dist/components/os-leaderboard-casino/assets/icons/prize.elite-bonus.svg.js.map +1 -0
  31. package/dist/components/os-leaderboard-casino/assets/icons/prize.free-spins.svg +10 -0
  32. package/dist/components/os-leaderboard-casino/assets/icons/prize.free-spins.svg.js +15 -0
  33. package/dist/components/os-leaderboard-casino/assets/icons/prize.free-spins.svg.js.map +1 -0
  34. package/dist/components/os-leaderboard-casino/assets/icons/prize.grand-jackpot.svg +5 -0
  35. package/dist/components/os-leaderboard-casino/assets/icons/prize.grand-jackpot.svg.js +10 -0
  36. package/dist/components/os-leaderboard-casino/assets/icons/prize.grand-jackpot.svg.js.map +1 -0
  37. package/dist/components/os-leaderboard-casino/assets/icons/prize.high-roller.svg +5 -0
  38. package/dist/components/os-leaderboard-casino/assets/icons/prize.high-roller.svg.js +10 -0
  39. package/dist/components/os-leaderboard-casino/assets/icons/prize.high-roller.svg.js.map +1 -0
  40. package/dist/components/os-leaderboard-casino/assets/icons/prize.mystery-bonus.svg +8 -0
  41. package/dist/components/os-leaderboard-casino/assets/icons/prize.mystery-bonus.svg.js +13 -0
  42. package/dist/components/os-leaderboard-casino/assets/icons/prize.mystery-bonus.svg.js.map +1 -0
  43. package/dist/components/os-leaderboard-casino/assets/icons/stat.clock.svg +4 -0
  44. package/dist/components/os-leaderboard-casino/assets/icons/stat.clock.svg.js +9 -0
  45. package/dist/components/os-leaderboard-casino/assets/icons/stat.clock.svg.js.map +1 -0
  46. package/dist/components/os-leaderboard-casino/assets/icons/stat.gift.svg +5 -0
  47. package/dist/components/os-leaderboard-casino/assets/icons/stat.gift.svg.js +10 -0
  48. package/dist/components/os-leaderboard-casino/assets/icons/stat.gift.svg.js.map +1 -0
  49. package/dist/components/os-leaderboard-casino/assets/icons/stat.users.svg +5 -0
  50. package/dist/components/os-leaderboard-casino/assets/icons/stat.users.svg.js +10 -0
  51. package/dist/components/os-leaderboard-casino/assets/icons/stat.users.svg.js.map +1 -0
  52. package/dist/components/os-leaderboard-casino/assets/icons/table.rank-down.svg +4 -0
  53. package/dist/components/os-leaderboard-casino/assets/icons/table.rank-down.svg.js +9 -0
  54. package/dist/components/os-leaderboard-casino/assets/icons/table.rank-down.svg.js.map +1 -0
  55. package/dist/components/os-leaderboard-casino/assets/icons/table.rank-neutral.svg +4 -0
  56. package/dist/components/os-leaderboard-casino/assets/icons/table.rank-neutral.svg.js +9 -0
  57. package/dist/components/os-leaderboard-casino/assets/icons/table.rank-neutral.svg.js.map +1 -0
  58. package/dist/components/os-leaderboard-casino/assets/icons/table.rank-up.svg +4 -0
  59. package/dist/components/os-leaderboard-casino/assets/icons/table.rank-up.svg.js +9 -0
  60. package/dist/components/os-leaderboard-casino/assets/icons/table.rank-up.svg.js.map +1 -0
  61. package/dist/components/os-leaderboard-casino/assets/icons/vip.crown.svg +7 -0
  62. package/dist/components/os-leaderboard-casino/assets/icons/vip.crown.svg.js +12 -0
  63. package/dist/components/os-leaderboard-casino/assets/icons/vip.crown.svg.js.map +1 -0
  64. package/dist/components/os-leaderboard-casino/assets/icons/win.bag.svg +5 -0
  65. package/dist/components/os-leaderboard-casino/assets/icons/win.bag.svg.js +10 -0
  66. package/dist/components/os-leaderboard-casino/assets/icons/win.bag.svg.js.map +1 -0
  67. package/dist/components/os-leaderboard-casino/assets/icons/win.bolt.svg +4 -0
  68. package/dist/components/os-leaderboard-casino/assets/icons/win.bolt.svg.js +9 -0
  69. package/dist/components/os-leaderboard-casino/assets/icons/win.bolt.svg.js.map +1 -0
  70. package/dist/components/os-leaderboard-casino/assets/icons/win.coin.svg +5 -0
  71. package/dist/components/os-leaderboard-casino/assets/icons/win.coin.svg.js +10 -0
  72. package/dist/components/os-leaderboard-casino/assets/icons/win.coin.svg.js.map +1 -0
  73. package/dist/components/os-leaderboard-casino/assets/icons/win.fire.svg +4 -0
  74. package/dist/components/os-leaderboard-casino/assets/icons/win.fire.svg.js +9 -0
  75. package/dist/components/os-leaderboard-casino/assets/icons/win.fire.svg.js.map +1 -0
  76. package/dist/components/os-leaderboard-casino/assets/icons/win.gem.svg +5 -0
  77. package/dist/components/os-leaderboard-casino/assets/icons/win.gem.svg.js +10 -0
  78. package/dist/components/os-leaderboard-casino/assets/icons/win.gem.svg.js.map +1 -0
  79. package/dist/components/os-leaderboard-casino/assets/icons/win.trophy.svg +5 -0
  80. package/dist/components/os-leaderboard-casino/assets/icons/win.trophy.svg.js +10 -0
  81. package/dist/components/os-leaderboard-casino/assets/icons/win.trophy.svg.js.map +1 -0
  82. package/dist/components/os-leaderboard-casino/assets/images/games/cards.png +0 -0
  83. package/dist/components/os-leaderboard-casino/assets/images/games/cards.png.js +5 -0
  84. package/dist/components/os-leaderboard-casino/assets/images/games/cards.png.js.map +1 -0
  85. package/dist/components/os-leaderboard-casino/assets/images/games/chips.png +0 -0
  86. package/dist/components/os-leaderboard-casino/assets/images/games/chips.png.js +5 -0
  87. package/dist/components/os-leaderboard-casino/assets/images/games/chips.png.js.map +1 -0
  88. package/dist/components/os-leaderboard-casino/assets/images/games/dice.png +0 -0
  89. package/dist/components/os-leaderboard-casino/assets/images/games/dice.png.js +5 -0
  90. package/dist/components/os-leaderboard-casino/assets/images/games/dice.png.js.map +1 -0
  91. package/dist/components/os-leaderboard-casino/assets/images/games/gates-of-olympus.png +0 -0
  92. package/dist/components/os-leaderboard-casino/assets/images/games/gates-of-olympus.png.js +5 -0
  93. package/dist/components/os-leaderboard-casino/assets/images/games/gates-of-olympus.png.js.map +1 -0
  94. package/dist/components/os-leaderboard-casino/assets/images/games/roulette.png +0 -0
  95. package/dist/components/os-leaderboard-casino/assets/images/games/roulette.png.js +5 -0
  96. package/dist/components/os-leaderboard-casino/assets/images/games/roulette.png.js.map +1 -0
  97. package/dist/components/os-leaderboard-casino/assets/images/games/slot-machine.png +0 -0
  98. package/dist/components/os-leaderboard-casino/assets/images/games/slot-machine.png.js +5 -0
  99. package/dist/components/os-leaderboard-casino/assets/images/games/slot-machine.png.js.map +1 -0
  100. package/dist/components/os-leaderboard-casino/assets/images/logo.png +0 -0
  101. package/dist/components/os-leaderboard-casino/constants/defaults.js +9 -0
  102. package/dist/components/os-leaderboard-casino/constants/defaults.js.map +1 -0
  103. package/dist/components/os-leaderboard-casino/constants/tags.js +15 -0
  104. package/dist/components/os-leaderboard-casino/constants/tags.js.map +1 -0
  105. package/dist/components/os-leaderboard-casino/container/os-leaderboard-casino.html.js +20 -0
  106. package/dist/components/os-leaderboard-casino/container/os-leaderboard-casino.html.js.map +1 -0
  107. package/dist/components/os-leaderboard-casino/container/os-leaderboard-casino.js +152 -0
  108. package/dist/components/os-leaderboard-casino/container/os-leaderboard-casino.js.map +1 -0
  109. package/dist/components/os-leaderboard-casino/container/os-leaderboard-casino.scss.js +5 -0
  110. package/dist/components/os-leaderboard-casino/container/os-leaderboard-casino.scss.js.map +1 -0
  111. package/dist/components/os-leaderboard-casino/index.js +39 -0
  112. package/dist/components/os-leaderboard-casino/index.js.map +1 -0
  113. package/dist/components/os-leaderboard-casino/integration/assemble-assets.js +48 -0
  114. package/dist/components/os-leaderboard-casino/integration/assemble-assets.js.map +1 -0
  115. package/dist/components/os-leaderboard-casino/integration/assets-context.js +64 -0
  116. package/dist/components/os-leaderboard-casino/integration/assets-context.js.map +1 -0
  117. package/dist/components/os-leaderboard-casino/integration/load-assets.js +22 -0
  118. package/dist/components/os-leaderboard-casino/integration/load-assets.js.map +1 -0
  119. package/dist/components/os-leaderboard-casino/integration/resolve-input.js +99 -0
  120. package/dist/components/os-leaderboard-casino/integration/resolve-input.js.map +1 -0
  121. package/dist/components/os-leaderboard-casino/sections/climb-section/climb-section.html.js +46 -0
  122. package/dist/components/os-leaderboard-casino/sections/climb-section/climb-section.html.js.map +1 -0
  123. package/dist/components/os-leaderboard-casino/sections/climb-section/climb-section.js +74 -0
  124. package/dist/components/os-leaderboard-casino/sections/climb-section/climb-section.js.map +1 -0
  125. package/dist/components/os-leaderboard-casino/sections/climb-section/climb-section.scss.js +5 -0
  126. package/dist/components/os-leaderboard-casino/sections/climb-section/climb-section.scss.js.map +1 -0
  127. package/dist/components/os-leaderboard-casino/sections/events-banner/components/event-icons.js +116 -0
  128. package/dist/components/os-leaderboard-casino/sections/events-banner/components/event-icons.js.map +1 -0
  129. package/dist/components/os-leaderboard-casino/sections/events-banner/events-banner.js +89 -0
  130. package/dist/components/os-leaderboard-casino/sections/events-banner/events-banner.js.map +1 -0
  131. package/dist/components/os-leaderboard-casino/sections/events-banner/events-banner.scss.js +5 -0
  132. package/dist/components/os-leaderboard-casino/sections/events-banner/events-banner.scss.js.map +1 -0
  133. package/dist/components/os-leaderboard-casino/sections/footer-section/footer-section.html.js +18 -0
  134. package/dist/components/os-leaderboard-casino/sections/footer-section/footer-section.html.js.map +1 -0
  135. package/dist/components/os-leaderboard-casino/sections/footer-section/footer-section.js +38 -0
  136. package/dist/components/os-leaderboard-casino/sections/footer-section/footer-section.js.map +1 -0
  137. package/dist/components/os-leaderboard-casino/sections/footer-section/footer-section.scss.js +5 -0
  138. package/dist/components/os-leaderboard-casino/sections/footer-section/footer-section.scss.js.map +1 -0
  139. package/dist/components/os-leaderboard-casino/sections/games-section/games-section.html.js +15 -0
  140. package/dist/components/os-leaderboard-casino/sections/games-section/games-section.html.js.map +1 -0
  141. package/dist/components/os-leaderboard-casino/sections/games-section/games-section.js +86 -0
  142. package/dist/components/os-leaderboard-casino/sections/games-section/games-section.js.map +1 -0
  143. package/dist/components/os-leaderboard-casino/sections/games-section/games-section.scss.js +5 -0
  144. package/dist/components/os-leaderboard-casino/sections/games-section/games-section.scss.js.map +1 -0
  145. package/dist/components/os-leaderboard-casino/sections/hero-section/hero-section.html.js +34 -0
  146. package/dist/components/os-leaderboard-casino/sections/hero-section/hero-section.html.js.map +1 -0
  147. package/dist/components/os-leaderboard-casino/sections/hero-section/hero-section.js +159 -0
  148. package/dist/components/os-leaderboard-casino/sections/hero-section/hero-section.js.map +1 -0
  149. package/dist/components/os-leaderboard-casino/sections/hero-section/hero-section.scss.js +5 -0
  150. package/dist/components/os-leaderboard-casino/sections/hero-section/hero-section.scss.js.map +1 -0
  151. package/dist/components/os-leaderboard-casino/sections/legals-section/legals-section.html.js +33 -0
  152. package/dist/components/os-leaderboard-casino/sections/legals-section/legals-section.html.js.map +1 -0
  153. package/dist/components/os-leaderboard-casino/sections/legals-section/legals-section.js +73 -0
  154. package/dist/components/os-leaderboard-casino/sections/legals-section/legals-section.js.map +1 -0
  155. package/dist/components/os-leaderboard-casino/sections/legals-section/legals-section.scss.js +5 -0
  156. package/dist/components/os-leaderboard-casino/sections/legals-section/legals-section.scss.js.map +1 -0
  157. package/dist/components/os-leaderboard-casino/sections/marquee-section/components/win-icons.js +8 -0
  158. package/dist/components/os-leaderboard-casino/sections/marquee-section/components/win-icons.js.map +1 -0
  159. package/dist/components/os-leaderboard-casino/sections/marquee-section/marquee-item.js +57 -0
  160. package/dist/components/os-leaderboard-casino/sections/marquee-section/marquee-item.js.map +1 -0
  161. package/dist/components/os-leaderboard-casino/sections/marquee-section/marquee-section.html.js +17 -0
  162. package/dist/components/os-leaderboard-casino/sections/marquee-section/marquee-section.html.js.map +1 -0
  163. package/dist/components/os-leaderboard-casino/sections/marquee-section/marquee-section.js +287 -0
  164. package/dist/components/os-leaderboard-casino/sections/marquee-section/marquee-section.js.map +1 -0
  165. package/dist/components/os-leaderboard-casino/sections/marquee-section/marquee-section.scss.js +5 -0
  166. package/dist/components/os-leaderboard-casino/sections/marquee-section/marquee-section.scss.js.map +1 -0
  167. package/dist/components/os-leaderboard-casino/sections/marquee-section/marquee-variants.js +16 -0
  168. package/dist/components/os-leaderboard-casino/sections/marquee-section/marquee-variants.js.map +1 -0
  169. package/dist/components/os-leaderboard-casino/sections/prize-section/prize-section.html.js +18 -0
  170. package/dist/components/os-leaderboard-casino/sections/prize-section/prize-section.html.js.map +1 -0
  171. package/dist/components/os-leaderboard-casino/sections/prize-section/prize-section.js +134 -0
  172. package/dist/components/os-leaderboard-casino/sections/prize-section/prize-section.js.map +1 -0
  173. package/dist/components/os-leaderboard-casino/sections/prize-section/prize-section.scss.js +5 -0
  174. package/dist/components/os-leaderboard-casino/sections/prize-section/prize-section.scss.js.map +1 -0
  175. package/dist/components/os-leaderboard-casino/sections/stats-section/stats-section.html.js +34 -0
  176. package/dist/components/os-leaderboard-casino/sections/stats-section/stats-section.html.js.map +1 -0
  177. package/dist/components/os-leaderboard-casino/sections/stats-section/stats-section.js +67 -0
  178. package/dist/components/os-leaderboard-casino/sections/stats-section/stats-section.js.map +1 -0
  179. package/dist/components/os-leaderboard-casino/sections/stats-section/stats-section.scss.js +5 -0
  180. package/dist/components/os-leaderboard-casino/sections/stats-section/stats-section.scss.js.map +1 -0
  181. package/dist/components/os-leaderboard-casino/sections/table-section/table-section.html.js +38 -0
  182. package/dist/components/os-leaderboard-casino/sections/table-section/table-section.html.js.map +1 -0
  183. package/dist/components/os-leaderboard-casino/sections/table-section/table-section.js +182 -0
  184. package/dist/components/os-leaderboard-casino/sections/table-section/table-section.js.map +1 -0
  185. package/dist/components/os-leaderboard-casino/sections/table-section/table-section.scss.js +5 -0
  186. package/dist/components/os-leaderboard-casino/sections/table-section/table-section.scss.js.map +1 -0
  187. package/dist/components/os-leaderboard-casino/services/adapter.service.js +49 -0
  188. package/dist/components/os-leaderboard-casino/services/adapter.service.js.map +1 -0
  189. package/dist/components/os-leaderboard-casino/services/icon.service.js +192 -0
  190. package/dist/components/os-leaderboard-casino/services/icon.service.js.map +1 -0
  191. package/dist/components/os-leaderboard-casino/theme/prize-resolve.js +11 -0
  192. package/dist/components/os-leaderboard-casino/theme/prize-resolve.js.map +1 -0
  193. package/dist/components/os-leaderboard-casino/theme/styles.js +179 -0
  194. package/dist/components/os-leaderboard-casino/theme/styles.js.map +1 -0
  195. package/dist/components/os-leaderboard-casino/theme/vip-icons.js +6 -0
  196. package/dist/components/os-leaderboard-casino/theme/vip-icons.js.map +1 -0
  197. package/dist/components/os-leaderboard-casino/theme/vip-mark.js +20 -0
  198. package/dist/components/os-leaderboard-casino/theme/vip-mark.js.map +1 -0
  199. package/dist/components/os-leaderboard-casino/types/data.js +7 -0
  200. package/dist/components/os-leaderboard-casino/types/data.js.map +1 -0
  201. package/dist/components/os-leaderboard-casino/types/events.js +8 -0
  202. package/dist/components/os-leaderboard-casino/types/events.js.map +1 -0
  203. package/dist/components/os-leaderboard-casino/types/state.js +12 -0
  204. package/dist/components/os-leaderboard-casino/types/state.js.map +1 -0
  205. package/dist/index.d.ts +734 -0
  206. package/dist/shared/lib/lit/component.js +8 -0
  207. package/dist/shared/lib/lit/component.js.map +1 -0
  208. package/dist/shared/lib/lit/safe-custom-element.js +7 -0
  209. package/dist/shared/lib/lit/safe-custom-element.js.map +1 -0
  210. package/dist/shared/lib/lit/scss.js +8 -0
  211. package/dist/shared/lib/lit/scss.js.map +1 -0
  212. package/dist/shared/vendor/keen-slider-keen-slider.es.js +538 -0
  213. package/dist/shared/vendor/keen-slider-keen-slider.es.js.map +1 -0
  214. package/package.json +36 -39
  215. package/.eleventy.cjs +0 -14
  216. package/custom-elements.json +0 -1539
  217. package/docs/_README/index.html +0 -4
  218. package/docs/api/index.html +0 -2100
  219. package/docs/components.bundle.js +0 -1669
  220. package/docs/components.bundle.js.map +0 -1
  221. package/docs/docs.css +0 -162
  222. package/docs/examples/index.html +0 -56
  223. package/docs/index.html +0 -53
  224. package/docs/install/index.html +0 -45
  225. package/docs/prism-okaidia.css +0 -123
  226. package/docs-src/.nojekyll +0 -0
  227. package/docs-src/_README.md +0 -7
  228. package/docs-src/_data/api.11tydata.js +0 -8
  229. package/docs-src/_includes/example.11ty.js +0 -35
  230. package/docs-src/_includes/footer.11ty.js +0 -6
  231. package/docs-src/_includes/header.11ty.js +0 -7
  232. package/docs-src/_includes/nav.11ty.js +0 -11
  233. package/docs-src/_includes/page.11ty.js +0 -32
  234. package/docs-src/_includes/relative-path.cjs +0 -9
  235. package/docs-src/api.11ty.js +0 -85
  236. package/docs-src/bundle.ts +0 -9
  237. package/docs-src/docs.css +0 -162
  238. package/docs-src/examples/index.md +0 -15
  239. package/docs-src/index.md +0 -39
  240. package/docs-src/install.md +0 -28
  241. package/docs-src/package.json +0 -3
  242. package/index.html +0 -19
  243. package/karma.conf.cjs +0 -24
  244. package/main.css +0 -210
  245. package/main.ts +0 -124
  246. package/previews/casino.ts +0 -12
  247. package/previews/catalog.ts +0 -94
  248. package/previews/leaderboard-v1.ts +0 -12
  249. package/previews/leaderboard-v2.ts +0 -17
  250. package/previews/sample-data.ts +0 -101
  251. package/previews/sf-leaderboard.ts +0 -100
  252. package/previews/sf-live-feed.ts +0 -15
  253. package/previews/streaks.ts +0 -40
  254. package/previews/types.ts +0 -18
  255. package/src/components/README.md +0 -16
  256. package/src/components/casino-leaderboard/casino-leaderboard.html +0 -80
  257. package/src/components/casino-leaderboard/casino-leaderboard.scss +0 -585
  258. package/src/components/casino-leaderboard/casino-leaderboard.ts +0 -136
  259. package/src/components/casino-leaderboard/data.ts +0 -111
  260. package/src/components/casino-leaderboard/index.ts +0 -5
  261. package/src/components/casino-leaderboard/todo.txt +0 -2
  262. package/src/components/casino-leaderboard/types.ts +0 -19
  263. package/src/components/leaderboard/components/leaderboard.ts +0 -373
  264. package/src/components/leaderboard/components/player-card.ts +0 -342
  265. package/src/components/leaderboard/components/ui.ts +0 -452
  266. package/src/components/leaderboard/data.ts +0 -152
  267. package/src/components/leaderboard/index.ts +0 -2
  268. package/src/components/leaderboard/main.ts +0 -42
  269. package/src/components/leaderboard/styles.ts +0 -67
  270. package/src/components/leaderboard/types.ts +0 -28
  271. package/src/components/leaderboard-v2/components/sf-leaderboard-player.ts +0 -451
  272. package/src/components/leaderboard-v2/components/sf-leaderboard-ui.ts +0 -512
  273. package/src/components/leaderboard-v2/components/sf-leaderboard.ts +0 -205
  274. package/src/components/leaderboard-v2/constants.ts +0 -16
  275. package/src/components/leaderboard-v2/demo/sample-data.ts +0 -152
  276. package/src/components/leaderboard-v2/events.ts +0 -13
  277. package/src/components/leaderboard-v2/icons.ts +0 -22
  278. package/src/components/leaderboard-v2/index.ts +0 -23
  279. package/src/components/leaderboard-v2/sf-leaderboard.html +0 -1
  280. package/src/components/leaderboard-v2/sf-leaderboard.scss +0 -382
  281. package/src/components/leaderboard-v2/tokens.ts +0 -35
  282. package/src/components/leaderboard-v2/types.ts +0 -30
  283. package/src/components/sf-leaderboard/index.ts +0 -77
  284. package/src/components/sf-leaderboard/sections/footer-section/footer-section.host.ts +0 -3
  285. package/src/components/sf-leaderboard/sections/footer-section/footer-section.html +0 -3
  286. package/src/components/sf-leaderboard/sections/footer-section/footer-section.scss +0 -18
  287. package/src/components/sf-leaderboard/sections/footer-section/footer-section.ts +0 -22
  288. package/src/components/sf-leaderboard/sections/header-section/header-section.host.ts +0 -14
  289. package/src/components/sf-leaderboard/sections/header-section/header-section.html +0 -27
  290. package/src/components/sf-leaderboard/sections/header-section/header-section.scss +0 -189
  291. package/src/components/sf-leaderboard/sections/header-section/header-section.ts +0 -70
  292. package/src/components/sf-leaderboard/sections/ranking-section/ranking-section.host.ts +0 -22
  293. package/src/components/sf-leaderboard/sections/ranking-section/ranking-section.html +0 -38
  294. package/src/components/sf-leaderboard/sections/ranking-section/ranking-section.scss +0 -99
  295. package/src/components/sf-leaderboard/sections/ranking-section/ranking-section.ts +0 -121
  296. package/src/components/sf-leaderboard/sections/stats-section/stats-section.host.ts +0 -8
  297. package/src/components/sf-leaderboard/sections/stats-section/stats-section.html +0 -6
  298. package/src/components/sf-leaderboard/sections/stats-section/stats-section.scss +0 -44
  299. package/src/components/sf-leaderboard/sections/stats-section/stats-section.ts +0 -41
  300. package/src/components/sf-leaderboard/sections/table-section/table-section.host.ts +0 -17
  301. package/src/components/sf-leaderboard/sections/table-section/table-section.html +0 -19
  302. package/src/components/sf-leaderboard/sections/table-section/table-section.scss +0 -37
  303. package/src/components/sf-leaderboard/sections/table-section/table-section.ts +0 -108
  304. package/src/components/sf-leaderboard/services/index.ts +0 -22
  305. package/src/components/sf-leaderboard/services/sf-leaderboard-data.service.ts +0 -54
  306. package/src/components/sf-leaderboard/services/sf-leaderboard.state.ts +0 -160
  307. package/src/components/sf-leaderboard/shared/components/activity-feed/activity-feed.host.ts +0 -7
  308. package/src/components/sf-leaderboard/shared/components/activity-feed/activity-feed.html +0 -10
  309. package/src/components/sf-leaderboard/shared/components/activity-feed/activity-feed.scss +0 -180
  310. package/src/components/sf-leaderboard/shared/components/activity-feed/activity-feed.ts +0 -88
  311. package/src/components/sf-leaderboard/shared/components/filters/filters.host.ts +0 -12
  312. package/src/components/sf-leaderboard/shared/components/filters/filters.html +0 -22
  313. package/src/components/sf-leaderboard/shared/components/filters/filters.scss +0 -122
  314. package/src/components/sf-leaderboard/shared/components/filters/filters.ts +0 -75
  315. package/src/components/sf-leaderboard/shared/components/player-avatar/player-avatar.host.ts +0 -9
  316. package/src/components/sf-leaderboard/shared/components/player-avatar/player-avatar.html +0 -5
  317. package/src/components/sf-leaderboard/shared/components/player-avatar/player-avatar.scss +0 -81
  318. package/src/components/sf-leaderboard/shared/components/player-avatar/player-avatar.ts +0 -34
  319. package/src/components/sf-leaderboard/shared/components/podium/map-players.ts +0 -24
  320. package/src/components/sf-leaderboard/shared/components/podium/podium.host.ts +0 -10
  321. package/src/components/sf-leaderboard/shared/components/podium/podium.html +0 -53
  322. package/src/components/sf-leaderboard/shared/components/podium/podium.scss +0 -580
  323. package/src/components/sf-leaderboard/shared/components/podium/podium.ts +0 -49
  324. package/src/components/sf-leaderboard/shared/components/podium/podium.types.ts +0 -9
  325. package/src/components/sf-leaderboard/shared/components/rank-badge/rank-badge.host.ts +0 -11
  326. package/src/components/sf-leaderboard/shared/components/rank-badge/rank-badge.html +0 -9
  327. package/src/components/sf-leaderboard/shared/components/rank-badge/rank-badge.scss +0 -98
  328. package/src/components/sf-leaderboard/shared/components/rank-badge/rank-badge.ts +0 -63
  329. package/src/components/sf-leaderboard/shared/components/stat-card/stat-card.host.ts +0 -9
  330. package/src/components/sf-leaderboard/shared/components/stat-card/stat-card.html +0 -15
  331. package/src/components/sf-leaderboard/shared/components/stat-card/stat-card.scss +0 -210
  332. package/src/components/sf-leaderboard/shared/components/stat-card/stat-card.ts +0 -36
  333. package/src/components/sf-leaderboard/shared/components/table/table.host.ts +0 -5
  334. package/src/components/sf-leaderboard/shared/components/table/table.html +0 -11
  335. package/src/components/sf-leaderboard/shared/components/table/table.scss +0 -212
  336. package/src/components/sf-leaderboard/shared/components/table/table.ts +0 -111
  337. package/src/components/sf-leaderboard/shared/constants/defaults.ts +0 -7
  338. package/src/components/sf-leaderboard/shared/constants/filters.ts +0 -16
  339. package/src/components/sf-leaderboard/shared/constants/index.ts +0 -5
  340. package/src/components/sf-leaderboard/shared/constants/player-stats.ts +0 -3
  341. package/src/components/sf-leaderboard/shared/constants/stats-overview.ts +0 -38
  342. package/src/components/sf-leaderboard/shared/constants/tags.ts +0 -16
  343. package/src/components/sf-leaderboard/shared/styles/_section.scss +0 -35
  344. package/src/components/sf-leaderboard/shared/types/data.ts +0 -29
  345. package/src/components/sf-leaderboard/shared/types/events.ts +0 -30
  346. package/src/components/sf-leaderboard/shared/types/player-stats.ts +0 -3
  347. package/src/components/sf-leaderboard/shared/types/sections.ts +0 -100
  348. package/src/components/sf-leaderboard/shared/utils/utils.ts +0 -17
  349. package/src/components/sf-leaderboard/theme/THEMING.md +0 -54
  350. package/src/components/sf-leaderboard/theme/context.ts +0 -16
  351. package/src/components/sf-leaderboard/theme/default-theme.ts +0 -4
  352. package/src/components/sf-leaderboard/theme/hex-to-rgb.ts +0 -25
  353. package/src/components/sf-leaderboard/theme/index.ts +0 -18
  354. package/src/components/sf-leaderboard/theme/inject-theme.ts +0 -39
  355. package/src/components/sf-leaderboard/theme/load-theme.ts +0 -26
  356. package/src/components/sf-leaderboard/theme/merge-theme.ts +0 -59
  357. package/src/components/sf-leaderboard/theme/scss/_colors.scss +0 -101
  358. package/src/components/sf-leaderboard/theme/scss/shared.scss +0 -123
  359. package/src/components/sf-leaderboard/theme/styles.ts +0 -6
  360. package/src/components/sf-leaderboard/theme/theme-to-css-vars.ts +0 -99
  361. package/src/components/sf-leaderboard/theme/themes/fallback.json +0 -62
  362. package/src/components/sf-leaderboard/theme/themes/red.json +0 -62
  363. package/src/components/sf-leaderboard/theme/types.ts +0 -71
  364. package/src/components/sf-live-feed/components/avatar/avatar.host.ts +0 -5
  365. package/src/components/sf-live-feed/components/avatar/avatar.html +0 -3
  366. package/src/components/sf-live-feed/components/avatar/avatar.scss +0 -24
  367. package/src/components/sf-live-feed/components/avatar/avatar.ts +0 -27
  368. package/src/components/sf-live-feed/components/sf-live-feed/sf-live-feed.host.ts +0 -8
  369. package/src/components/sf-live-feed/components/sf-live-feed/sf-live-feed.html +0 -10
  370. package/src/components/sf-live-feed/components/sf-live-feed/sf-live-feed.scss +0 -177
  371. package/src/components/sf-live-feed/components/sf-live-feed/sf-live-feed.ts +0 -65
  372. package/src/components/sf-live-feed/constants.ts +0 -4
  373. package/src/components/sf-live-feed/demo/sample-data.ts +0 -34
  374. package/src/components/sf-live-feed/index.ts +0 -19
  375. package/src/components/sf-live-feed/styles/theme.scss +0 -19
  376. package/src/components/sf-live-feed/styles/theme.ts +0 -5
  377. package/src/components/sf-live-feed/types.ts +0 -19
  378. package/src/components/sf-live-feed/utils.ts +0 -17
  379. package/src/components/streaks/constants.ts +0 -17
  380. package/src/components/streaks/demo/sample-steps.ts +0 -10
  381. package/src/components/streaks/events.ts +0 -8
  382. package/src/components/streaks/index.ts +0 -16
  383. package/src/components/streaks/sf-streaks.html +0 -26
  384. package/src/components/streaks/sf-streaks.scss +0 -351
  385. package/src/components/streaks/sf-streaks.ts +0 -235
  386. package/src/components/streaks/types.ts +0 -7
  387. package/src/lib/lit/component.ts +0 -10
  388. package/src/lib/lit/safe-custom-element.ts +0 -12
  389. package/src/lib/lit/scss.ts +0 -6
  390. package/src/vite-env.d.ts +0 -18
  391. package/styles/global.css +0 -125
  392. package/todo.txt +0 -54
  393. package/tsconfig.json +0 -31
  394. package/vite.config.ts +0 -56
  395. package/vite.docs.config.ts +0 -33
  396. package/vite.lit-html-plugin.ts +0 -43
@@ -0,0 +1,287 @@
1
+ import { LitElement as f, html as t, nothing as i } from "lit";
2
+ import { keyed as $ } from "lit/directives/keyed.js";
3
+ import { repeat as g } from "lit/directives/repeat.js";
4
+ import { property as h, state as v } from "lit/decorators.js";
5
+ import { Component as I } from "../../../../shared/lib/lit/component.js";
6
+ import { scss as b } from "../../../../shared/lib/lit/scss.js";
7
+ import { OS_LEADERBOARD_CASINO_MARQUEE as y } from "../../constants/tags.js";
8
+ import { osLeaderboardCasinoTheme as T } from "../../theme/styles.js";
9
+ import { renderPlayerName as C } from "../../theme/vip-mark.js";
10
+ import { iconService as u } from "../../services/icon.service.js";
11
+ import { winIcon as R } from "./components/win-icons.js";
12
+ import { parseMarqueeItem as m, formatWinAmount as o } from "./marquee-item.js";
13
+ import { ACTIVE_MARQUEE_VARIANT as q, isMarqueeVariant as A } from "./marquee-variants.js";
14
+ import S from "./marquee-section.html.js";
15
+ import x from "./marquee-section.scss.js";
16
+ var M = Object.defineProperty, V = Object.getOwnPropertyDescriptor, c = (e, s, r, a) => {
17
+ for (var n = a > 1 ? void 0 : a ? V(s, r) : s, d = e.length - 1, l; d >= 0; d--)
18
+ (l = e[d]) && (n = (a ? l(s, r, n) : l(n)) || n);
19
+ return a && n && M(s, r, n), n;
20
+ };
21
+ let p = class extends f {
22
+ constructor() {
23
+ super(...arguments), this.variant = q, this.hudIndex = 0, this.feedRows = [], this.feedCursor = 0, this.feedKey = 0;
24
+ }
25
+ get speedSec() {
26
+ return this.section?.speedSec ?? 30;
27
+ }
28
+ connectedCallback() {
29
+ super.connectedCallback(), this.syncVariantAttribute(), this.startVariantTimers();
30
+ }
31
+ updated(e) {
32
+ (e.has("variant") || e.has("section")) && (this.syncVariantAttribute(), this.stopVariantTimers(), this.startVariantTimers());
33
+ }
34
+ disconnectedCallback() {
35
+ this.stopVariantTimers(), super.disconnectedCallback();
36
+ }
37
+ syncVariantAttribute() {
38
+ const e = A(this.variant) ? this.variant : "classic";
39
+ this.dataset.variant = e;
40
+ }
41
+ parsedWins() {
42
+ return (this.section?.items ?? []).map(
43
+ (e, s) => m(e, s)
44
+ );
45
+ }
46
+ startVariantTimers() {
47
+ if (this.variant === "hud" && (this.hudIndex = 0, this.hudTimer = setInterval(() => {
48
+ const e = this.section?.items?.length ?? 0;
49
+ e > 1 && (this.hudIndex = (this.hudIndex + 1) % e);
50
+ }, 3e3)), this.variant === "feed") {
51
+ this.feedRows = [], this.feedCursor = 0, this.feedKey = 0;
52
+ for (let e = 0; e < 4; e += 1) this.pushFeedRow(!1);
53
+ this.feedTimer = setInterval(() => this.pushFeedRow(!0), 2600);
54
+ }
55
+ }
56
+ stopVariantTimers() {
57
+ this.hudTimer && clearInterval(this.hudTimer), this.feedTimer && clearInterval(this.feedTimer), this.hudTimer = void 0, this.feedTimer = void 0;
58
+ }
59
+ pushFeedRow(e) {
60
+ const s = this.parsedWins();
61
+ if (!s.length) return;
62
+ const r = s[this.feedCursor % s.length];
63
+ this.feedCursor += 1;
64
+ const a = { ...r, key: this.feedKey++ };
65
+ this.feedRows = e ? [a, ...this.feedRows].slice(0, 4) : [a, ...this.feedRows];
66
+ }
67
+ formatAmount(e) {
68
+ return o(e.amount ?? null, e.currency ?? "USD");
69
+ }
70
+ renderSeparator() {
71
+ return t`<span class="sep" aria-hidden="true">·</span>`;
72
+ }
73
+ renderItemIcon(e) {
74
+ if (e.gameId) {
75
+ const s = u.resolveGameIconName(e.gameId, 0), r = u.get(s).url;
76
+ return t`<img src=${r} alt=${e.game} />`;
77
+ }
78
+ return R(e.icon);
79
+ }
80
+ /** Uses shared VIP badge styles from theme (v0 outline tag). */
81
+ renderMarqueeUser(e, s) {
82
+ return C(e, { vip: s });
83
+ }
84
+ renderClassicItem(e, s) {
85
+ const r = m(e, s), a = this.formatAmount(e);
86
+ return t`
87
+ <span class="item">
88
+ <span class="icon">${this.renderItemIcon(r)}</span>
89
+ <span class="txt">
90
+ ${this.renderMarqueeUser(r.user, r.vip)}
91
+ <span class="verb">won</span>
92
+ ${e.amount != null ? t`<span class="amt">${a}</span>` : i}
93
+ ${r.game ? t`
94
+ <span class="tail">
95
+ <span class="on">on</span>
96
+ <span class="game">${r.game}</span>
97
+ </span>
98
+ ` : i}
99
+ </span>
100
+ </span>
101
+ `;
102
+ }
103
+ renderClassicGroup(e) {
104
+ return t`
105
+ <span class="group" aria-hidden="true">
106
+ ${e.map(
107
+ (s, r) => t`
108
+ ${this.renderClassicItem(s, r)}${this.renderSeparator()}
109
+ `
110
+ )}
111
+ </span>
112
+ `;
113
+ }
114
+ renderTrack() {
115
+ const e = this.section?.items ?? [];
116
+ return t`${this.renderClassicGroup(e)}${this.renderClassicGroup(e)}`;
117
+ }
118
+ renderHudLabel() {
119
+ return i;
120
+ }
121
+ renderTickerWin(e) {
122
+ const s = o(e.amount, e.currency);
123
+ return t`
124
+ <span class="win ${e.big ? "big" : ""}">
125
+ <span class="chip">${this.renderItemIcon(e)}</span>
126
+ <span class="txt">
127
+ ${this.renderMarqueeUser(e.user, e.vip)}
128
+ <span class="verb">won</span>
129
+ ${s ? t`<span class="amt">${s}</span>` : i}
130
+ ${e.game ? t`
131
+ <span class="tail">
132
+ <span class="on">on</span>
133
+ <span class="game">${e.game}</span>
134
+ </span>
135
+ ` : i}
136
+ </span>
137
+ </span>
138
+ ${this.renderSeparator()}
139
+ `;
140
+ }
141
+ renderTicker() {
142
+ const e = this.parsedWins(), s = t`<div class="group">
143
+ ${e.map((r) => this.renderTickerWin(r))}
144
+ </div>`;
145
+ return t`
146
+ <div
147
+ class="marquee"
148
+ style="--speed: ${this.speedSec}s"
149
+ role="region"
150
+ aria-label="Recent winners"
151
+ >
152
+ <div class="track">${s}${s}</div>
153
+ </div>
154
+ `;
155
+ }
156
+ renderHudStreamGroup(e) {
157
+ return t`<div class="group">
158
+ ${e.map(
159
+ (s) => t`
160
+ <span class="win ${s.vip ? "vip" : ""}">
161
+ ${this.renderItemIcon(s)}${this.renderMarqueeUser(s.user, s.vip)}<span class="amt">${o(s.amount, s.currency)}</span
162
+ ><span class="sep-inline">/</span><span class="game">${s.game}</span>
163
+ </span>
164
+ `
165
+ )}
166
+ </div>`;
167
+ }
168
+ renderHud() {
169
+ const e = this.parsedWins();
170
+ if (!e.length) return i;
171
+ const s = e[this.hudIndex] ?? e[0], r = this.renderHudStreamGroup(e);
172
+ return t`
173
+ <div
174
+ class="marquee"
175
+ style="--speed: ${this.speedSec}s"
176
+ role="region"
177
+ aria-label="Recent winners"
178
+ >
179
+ <div class="hero">
180
+ <span class="badge">Latest win</span>
181
+ <span class="chip">${this.renderItemIcon(s)}</span>
182
+ ${$(
183
+ this.hudIndex,
184
+ t`<span class="info">
185
+ <span class="who">${this.renderMarqueeUser(s.user, s.vip)}</span>
186
+ <span class="val">${o(s.amount, s.currency)}</span>
187
+ </span>`
188
+ )}
189
+ </div>
190
+ <div class="stream">
191
+ <div class="track">${r}${r}</div>
192
+ </div>
193
+ </div>
194
+ `;
195
+ }
196
+ renderBeltGroup(e) {
197
+ return t`<div class="group">
198
+ ${e.map(
199
+ (s) => t`
200
+ <span class="pill ${s.big ? "big" : ""} ${s.vip ? "vip" : ""}">
201
+ <span class="chip">${this.renderItemIcon(s)}</span>
202
+ ${this.renderMarqueeUser(s.user, s.vip)}
203
+ <span class="game">${s.game}</span>
204
+ <span class="amt">+${o(s.amount, s.currency)}</span>
205
+ </span>
206
+ `
207
+ )}
208
+ </div>`;
209
+ }
210
+ renderBelt() {
211
+ const e = this.parsedWins(), s = e, r = [...e].reverse(), a = this.renderBeltGroup(s), n = this.renderBeltGroup(r);
212
+ return t`
213
+ <div
214
+ class="marquee"
215
+ style="--speed: ${this.speedSec}s"
216
+ role="region"
217
+ aria-label="Recent winners"
218
+ >
219
+ <div class="lane lane-a">${a}${a}</div>
220
+ <div class="lane lane-b">${n}${n}</div>
221
+ </div>
222
+ `;
223
+ }
224
+ renderFeed() {
225
+ return t`
226
+ <div class="marquee feed-panel" role="region" aria-label="Recent winners">
227
+ <div class="head">
228
+ <span class="live"><i></i> Live wins</span>
229
+ <small>updating in real time</small>
230
+ </div>
231
+ <div class="list">
232
+ ${g(
233
+ this.feedRows,
234
+ (e) => e.key,
235
+ (e) => t`
236
+ <div class="row ${e.big ? "big" : ""} ${e.vip ? "vip" : ""}">
237
+ <span class="chip">${this.renderItemIcon(e)}</span>
238
+ <span class="meta">
239
+ ${this.renderMarqueeUser(e.user, e.vip)}
240
+ <span class="game-line">on ${e.game}</span>
241
+ </span>
242
+ <span class="amt"
243
+ >+${o(e.amount, e.currency)}</span
244
+ >
245
+ </div>
246
+ `
247
+ )}
248
+ </div>
249
+ </div>
250
+ `;
251
+ }
252
+ render() {
253
+ if (!(this.section?.items ?? []).length) return i;
254
+ switch (this.variant) {
255
+ case "ticker":
256
+ return this.renderTicker();
257
+ case "hud":
258
+ return this.renderHud();
259
+ case "belt":
260
+ return this.renderBelt();
261
+ case "feed":
262
+ return this.renderFeed();
263
+ default:
264
+ return S(this);
265
+ }
266
+ }
267
+ };
268
+ p.styles = [T, b(x)];
269
+ c([
270
+ h({ attribute: !1 })
271
+ ], p.prototype, "section", 2);
272
+ c([
273
+ h({ attribute: "variant" })
274
+ ], p.prototype, "variant", 2);
275
+ c([
276
+ v()
277
+ ], p.prototype, "hudIndex", 2);
278
+ c([
279
+ v()
280
+ ], p.prototype, "feedRows", 2);
281
+ p = c([
282
+ I({ selector: y })
283
+ ], p);
284
+ export {
285
+ p as OsLeaderboardCasinoMarquee
286
+ };
287
+ //# sourceMappingURL=marquee-section.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"marquee-section.js","sources":["../../../../../src/components/os-leaderboard-casino/sections/marquee-section/marquee-section.ts"],"sourcesContent":["import { LitElement, html, nothing, type TemplateResult } from 'lit';\nimport { keyed } from 'lit/directives/keyed.js';\nimport { repeat } from 'lit/directives/repeat.js';\nimport { property, state } from 'lit/decorators.js';\nimport { Component } from '@oddsmith/lib/lit/component.js';\nimport { scss } from '@oddsmith/lib/lit/scss.js';\nimport { OS_LEADERBOARD_CASINO_MARQUEE } from '@os-leaderboard-casino/constants/tags.js';\nimport { osLeaderboardCasinoTheme } from '@os-leaderboard-casino/theme/index.js';\nimport { renderPlayerName } from '@os-leaderboard-casino/theme/vip-mark.js';\nimport type {\n OsLeaderboardCasinoMarqueeItem,\n OsLeaderboardCasinoMarqueeSection,\n} from '@os-leaderboard-casino/types/sections.js';\nimport { iconService } from '@os-leaderboard-casino/services/icon.service.js';\nimport { winIcon } from './components/win-icons.js';\nimport {\n formatWinAmount,\n parseMarqueeItem,\n type ParsedMarqueeWin,\n} from './marquee-item.js';\nimport {\n ACTIVE_MARQUEE_VARIANT,\n isMarqueeVariant,\n type MarqueeVariant,\n} from './marquee-variants.js';\nimport type { MarqueeSectionHost } from './marquee-section.host.js';\nimport renderTemplate from './marquee-section.html?lit-html';\nimport styles from './marquee-section.scss?inline';\n\ninterface FeedRow extends ParsedMarqueeWin {\n key: number;\n}\n\n/** Infinitely-scrolling winners ticker — v0 variant ports + classic fallback. */\n@Component({ selector: OS_LEADERBOARD_CASINO_MARQUEE })\nexport class OsLeaderboardCasinoMarquee\n extends LitElement\n implements MarqueeSectionHost\n{\n static styles = [osLeaderboardCasinoTheme, scss(styles)];\n\n @property({ attribute: false })\n section!: OsLeaderboardCasinoMarqueeSection;\n\n @property({ attribute: 'variant' })\n variant: MarqueeVariant = ACTIVE_MARQUEE_VARIANT;\n\n @state()\n private hudIndex = 0;\n\n @state()\n private feedRows: FeedRow[] = [];\n\n private hudTimer?: ReturnType<typeof setInterval>;\n private feedTimer?: ReturnType<typeof setInterval>;\n private feedCursor = 0;\n private feedKey = 0;\n\n get speedSec(): number {\n return this.section?.speedSec ?? 30;\n }\n\n connectedCallback(): void {\n super.connectedCallback();\n this.syncVariantAttribute();\n this.startVariantTimers();\n }\n\n updated(changed: Map<string, unknown>): void {\n if (changed.has('variant') || changed.has('section')) {\n this.syncVariantAttribute();\n this.stopVariantTimers();\n this.startVariantTimers();\n }\n }\n\n disconnectedCallback(): void {\n this.stopVariantTimers();\n super.disconnectedCallback();\n }\n\n private syncVariantAttribute(): void {\n const next = isMarqueeVariant(this.variant) ? this.variant : 'classic';\n this.dataset.variant = next;\n }\n\n private parsedWins(): ParsedMarqueeWin[] {\n return (this.section?.items ?? []).map((item, index) =>\n parseMarqueeItem(item, index),\n );\n }\n\n private startVariantTimers(): void {\n if (this.variant === 'hud') {\n this.hudIndex = 0;\n this.hudTimer = setInterval(() => {\n const count = this.section?.items?.length ?? 0;\n if (count > 1) this.hudIndex = (this.hudIndex + 1) % count;\n }, 3000);\n }\n\n if (this.variant === 'feed') {\n this.feedRows = [];\n this.feedCursor = 0;\n this.feedKey = 0;\n for (let i = 0; i < 4; i += 1) this.pushFeedRow(false);\n this.feedTimer = setInterval(() => this.pushFeedRow(true), 2600);\n }\n }\n\n private stopVariantTimers(): void {\n if (this.hudTimer) clearInterval(this.hudTimer);\n if (this.feedTimer) clearInterval(this.feedTimer);\n this.hudTimer = undefined;\n this.feedTimer = undefined;\n }\n\n private pushFeedRow(trim: boolean): void {\n const wins = this.parsedWins();\n if (!wins.length) return;\n const win = wins[this.feedCursor % wins.length];\n this.feedCursor += 1;\n const row: FeedRow = { ...win, key: this.feedKey++ };\n this.feedRows = trim\n ? [row, ...this.feedRows].slice(0, 4)\n : [row, ...this.feedRows];\n }\n\n private formatAmount(item: OsLeaderboardCasinoMarqueeItem): string {\n return formatWinAmount(item.amount ?? null, item.currency ?? 'USD');\n }\n\n private renderSeparator() {\n return html`<span class=\"sep\" aria-hidden=\"true\">·</span>`;\n }\n\n private renderItemIcon(win: ParsedMarqueeWin) {\n if (win.gameId) {\n const iconName = iconService.resolveGameIconName(win.gameId, 0);\n const url = iconService.get(iconName).url!;\n return html`<img src=${url} alt=${win.game} />`;\n }\n return winIcon(win.icon);\n }\n\n /** Uses shared VIP badge styles from theme (v0 outline tag). */\n private renderMarqueeUser(user: string, vip?: boolean) {\n return renderPlayerName(user, { vip });\n }\n\n private renderClassicItem(item: OsLeaderboardCasinoMarqueeItem, index: number) {\n const win = parseMarqueeItem(item, index);\n const amount = this.formatAmount(item);\n return html`\n <span class=\"item\">\n <span class=\"icon\">${this.renderItemIcon(win)}</span>\n <span class=\"txt\">\n ${this.renderMarqueeUser(win.user, win.vip)}\n <span class=\"verb\">won</span>\n ${item.amount != null\n ? html`<span class=\"amt\">${amount}</span>`\n : nothing}\n ${win.game\n ? html`\n <span class=\"tail\">\n <span class=\"on\">on</span>\n <span class=\"game\">${win.game}</span>\n </span>\n `\n : nothing}\n </span>\n </span>\n `;\n }\n\n private renderClassicGroup(items: OsLeaderboardCasinoMarqueeItem[]) {\n return html`\n <span class=\"group\" aria-hidden=\"true\">\n ${items.map(\n (item, index) => html`\n ${this.renderClassicItem(item, index)}${this.renderSeparator()}\n `,\n )}\n </span>\n `;\n }\n\n renderTrack(): TemplateResult {\n const items = this.section?.items ?? [];\n return html`${this.renderClassicGroup(items)}${this.renderClassicGroup(items)}`;\n }\n\n renderHudLabel(): TemplateResult | typeof nothing {\n return nothing;\n }\n\n private renderTickerWin(win: ParsedMarqueeWin) {\n const amount = formatWinAmount(win.amount, win.currency);\n return html`\n <span class=\"win ${win.big ? 'big' : ''}\">\n <span class=\"chip\">${this.renderItemIcon(win)}</span>\n <span class=\"txt\">\n ${this.renderMarqueeUser(win.user, win.vip)}\n <span class=\"verb\">won</span>\n ${amount ? html`<span class=\"amt\">${amount}</span>` : nothing}\n ${win.game\n ? html`\n <span class=\"tail\">\n <span class=\"on\">on</span>\n <span class=\"game\">${win.game}</span>\n </span>\n `\n : nothing}\n </span>\n </span>\n ${this.renderSeparator()}\n `;\n }\n\n private renderTicker() {\n const wins = this.parsedWins();\n const group = html`<div class=\"group\">\n ${wins.map((win) => this.renderTickerWin(win))}\n </div>`;\n return html`\n <div\n class=\"marquee\"\n style=\"--speed: ${this.speedSec}s\"\n role=\"region\"\n aria-label=\"Recent winners\"\n >\n <div class=\"track\">${group}${group}</div>\n </div>\n `;\n }\n\n private renderHudStreamGroup(wins: ParsedMarqueeWin[]) {\n return html`<div class=\"group\">\n ${wins.map(\n (win) => html`\n <span class=\"win ${win.vip ? 'vip' : ''}\">\n ${this.renderItemIcon(win)}${this.renderMarqueeUser(win.user, win.vip)}<span class=\"amt\">${formatWinAmount(win.amount, win.currency)}</span\n ><span class=\"sep-inline\">/</span><span class=\"game\">${win.game}</span>\n </span>\n `,\n )}\n </div>`;\n }\n\n private renderHud() {\n const wins = this.parsedWins();\n if (!wins.length) return nothing;\n const hero = wins[this.hudIndex] ?? wins[0];\n const group = this.renderHudStreamGroup(wins);\n\n return html`\n <div\n class=\"marquee\"\n style=\"--speed: ${this.speedSec}s\"\n role=\"region\"\n aria-label=\"Recent winners\"\n >\n <div class=\"hero\">\n <span class=\"badge\">Latest win</span>\n <span class=\"chip\">${this.renderItemIcon(hero)}</span>\n ${keyed(\n this.hudIndex,\n html`<span class=\"info\">\n <span class=\"who\">${this.renderMarqueeUser(hero.user, hero.vip)}</span>\n <span class=\"val\">${formatWinAmount(hero.amount, hero.currency)}</span>\n </span>`,\n )}\n </div>\n <div class=\"stream\">\n <div class=\"track\">${group}${group}</div>\n </div>\n </div>\n `;\n }\n\n private renderBeltGroup(wins: ParsedMarqueeWin[]) {\n return html`<div class=\"group\">\n ${wins.map(\n (win) => html`\n <span class=\"pill ${win.big ? 'big' : ''} ${win.vip ? 'vip' : ''}\">\n <span class=\"chip\">${this.renderItemIcon(win)}</span>\n ${this.renderMarqueeUser(win.user, win.vip)}\n <span class=\"game\">${win.game}</span>\n <span class=\"amt\">+${formatWinAmount(win.amount, win.currency)}</span>\n </span>\n `,\n )}\n </div>`;\n }\n\n private renderBelt() {\n const wins = this.parsedWins();\n const top = wins;\n const bottom = [...wins].reverse();\n const topGroup = this.renderBeltGroup(top);\n const bottomGroup = this.renderBeltGroup(bottom);\n\n return html`\n <div\n class=\"marquee\"\n style=\"--speed: ${this.speedSec}s\"\n role=\"region\"\n aria-label=\"Recent winners\"\n >\n <div class=\"lane lane-a\">${topGroup}${topGroup}</div>\n <div class=\"lane lane-b\">${bottomGroup}${bottomGroup}</div>\n </div>\n `;\n }\n\n private renderFeed() {\n return html`\n <div class=\"marquee feed-panel\" role=\"region\" aria-label=\"Recent winners\">\n <div class=\"head\">\n <span class=\"live\"><i></i> Live wins</span>\n <small>updating in real time</small>\n </div>\n <div class=\"list\">\n ${repeat(\n this.feedRows,\n (row) => row.key,\n (row) => html`\n <div class=\"row ${row.big ? 'big' : ''} ${row.vip ? 'vip' : ''}\">\n <span class=\"chip\">${this.renderItemIcon(row)}</span>\n <span class=\"meta\">\n ${this.renderMarqueeUser(row.user, row.vip)}\n <span class=\"game-line\">on ${row.game}</span>\n </span>\n <span class=\"amt\"\n >+${formatWinAmount(row.amount, row.currency)}</span\n >\n </div>\n `,\n )}\n </div>\n </div>\n `;\n }\n\n render() {\n const items = this.section?.items ?? [];\n if (!items.length) return nothing;\n\n switch (this.variant) {\n case 'ticker':\n return this.renderTicker();\n case 'hud':\n return this.renderHud();\n case 'belt':\n return this.renderBelt();\n case 'feed':\n return this.renderFeed();\n default:\n return renderTemplate(this);\n }\n }\n}\n"],"names":["OsLeaderboardCasinoMarquee","LitElement","ACTIVE_MARQUEE_VARIANT","changed","next","isMarqueeVariant","item","index","parseMarqueeItem","count","i","trim","wins","win","row","formatWinAmount","html","iconName","iconService","url","winIcon","user","vip","renderPlayerName","amount","nothing","items","group","hero","keyed","top","bottom","topGroup","bottomGroup","repeat","renderTemplate","osLeaderboardCasinoTheme","scss","styles","__decorateClass","property","state","Component","OS_LEADERBOARD_CASINO_MARQUEE"],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ const a = '@charset "UTF-8";:host{display:block;width:100%}.marquee{position:relative;overflow:hidden}:host([data-variant=classic]) .marquee,:host(:not([data-variant])) .marquee{border-radius:var(--radius-sm);border:1px solid var(--panel-border);background:var(--panel-bg);box-shadow:var(--panel-shadow)}:host([data-variant=classic]) .marquee:before,:host([data-variant=classic]) .marquee:after,:host(:not([data-variant])) .marquee:before,:host(:not([data-variant])) .marquee:after{content:"";position:absolute;top:0;bottom:0;width:56px;z-index:2;pointer-events:none}:host([data-variant=classic]) .marquee:before,:host(:not([data-variant])) .marquee:before{left:0;background:linear-gradient(90deg,var(--panel-fade-start),transparent)}:host([data-variant=classic]) .marquee:after,:host(:not([data-variant])) .marquee:after{right:0;background:linear-gradient(-90deg,var(--panel-fade-end),transparent)}:host([data-variant=classic]) .track,:host(:not([data-variant])) .track{display:flex;width:max-content;animation:scroll var(--speed, 30s) linear infinite}:host([data-variant=classic]) .group,:host(:not([data-variant])) .group{display:flex;align-items:center}:host([data-variant=classic]) .item,:host(:not([data-variant])) .item{display:inline-flex;align-items:center;gap:7px;padding:8px 0;white-space:nowrap;font-size:12px;color:var(--text-dim)}:host([data-variant=classic]) .item .txt,:host(:not([data-variant])) .item .txt{display:inline-flex;align-items:center;gap:.35em;line-height:1}:host([data-variant=classic]) .item .amt,:host(:not([data-variant])) .item .amt{font-family:var(--font-mono);font-weight:800;color:var(--gold-strong);text-shadow:0 0 12px var(--gold-glow)}:host([data-variant=classic]) .item .tail,:host(:not([data-variant])) .item .tail{display:inline-flex;align-items:center;gap:.35em}:host([data-variant=classic]) .item .icon img,:host(:not([data-variant])) .item .icon img{width:16px;height:16px;object-fit:contain;border-radius:3px;vertical-align:middle}:host([data-variant=classic]) .sep,:host(:not([data-variant])) .sep{margin:0 18px;font-size:10px;line-height:1;color:var(--text-faint);opacity:.5}:host([data-variant=ticker]) .marquee{border:1px solid var(--panel-border);border-radius:var(--radius-sm);background:var(--panel-bg);padding:10px 0;box-shadow:inset 0 1px #ffffff0d,var(--panel-shadow)}:host([data-variant=ticker]) .marquee:before,:host([data-variant=ticker]) .marquee:after{content:"";position:absolute;top:0;bottom:0;width:56px;z-index:2;pointer-events:none}:host([data-variant=ticker]) .marquee:before{left:0;background:linear-gradient(90deg,var(--panel-fade-start),transparent)}:host([data-variant=ticker]) .marquee:after{right:0;background:linear-gradient(-90deg,var(--panel-fade-end),transparent)}:host([data-variant=ticker]) .track{display:flex;align-items:center;width:max-content;animation:scroll var(--speed, 38s) linear infinite}:host([data-variant=ticker]) .group{display:flex;flex-shrink:0;align-items:center}:host([data-variant=ticker]) .win{display:inline-flex;align-items:center;gap:8px;padding:0 18px;white-space:nowrap}:host([data-variant=ticker]) .win .chip{display:grid;place-items:center;width:24px;height:24px;border-radius:8px;color:var(--green);background:color-mix(in srgb,var(--green) 16%,transparent);flex-shrink:0}:host([data-variant=ticker]) .win.big .chip{color:var(--gold-strong);background:color-mix(in srgb,var(--gold) 18%,transparent)}:host([data-variant=ticker]) .win .chip svg{width:15px;height:15px}:host([data-variant=ticker]) .win .chip img{width:15px;height:15px;object-fit:contain;border-radius:3px}:host([data-variant=ticker]) .txt{display:inline-flex;align-items:center;gap:.35em;line-height:1;font-size:13px;color:var(--text)}:host([data-variant=ticker]) .txt .verb,:host([data-variant=ticker]) .txt .on{color:var(--text-dim)}:host([data-variant=ticker]) .txt .tail{display:inline-flex;align-items:center;gap:.35em}:host([data-variant=ticker]) .txt .player-name .name{font-weight:700}:host([data-variant=ticker]) .txt .game{color:var(--text-faint)}:host([data-variant=ticker]) .amt{font-family:var(--font-mono);font-weight:700;font-size:13px;color:var(--green)}:host([data-variant=ticker]) .win.big .amt{color:var(--gold-strong)}:host([data-variant=ticker]) .win.big .player-name:not(.is-vip) .name{color:var(--gold-strong)}:host([data-variant=ticker]) .sep{flex-shrink:0;align-self:center;margin:0 14px;font-size:10px;line-height:1;color:var(--text-faint);opacity:.5;user-select:none}:host([data-variant=hud]) .marquee{display:flex;align-items:stretch;gap:0;background:var(--panel-bg);border:1px solid color-mix(in srgb,var(--violet) 35%,var(--panel-border));clip-path:polygon(14px 0,100% 0,100% calc(100% - 14px),calc(100% - 14px) 100%,0 100%,0 14px);box-shadow:var(--panel-shadow),inset 0 0 30px color-mix(in srgb,var(--violet) 8%,transparent)}:host([data-variant=hud]) .hero{display:flex;align-items:center;gap:14px;padding:16px 22px;flex-shrink:0;background:linear-gradient(135deg,color-mix(in srgb,var(--gold) 16%,transparent),transparent);border-right:1px solid color-mix(in srgb,var(--violet) 25%,transparent);position:relative}:host([data-variant=hud]) .hero .badge{position:absolute;top:8px;left:22px;font-size:9px;font-weight:800;letter-spacing:.18em;text-transform:uppercase;color:color-mix(in srgb,var(--violet) 80%,white)}:host([data-variant=hud]) .hero .chip{display:grid;place-items:center;width:40px;height:40px;color:var(--gold-strong);margin-top:10px}:host([data-variant=hud]) .hero .chip svg{width:32px;height:32px}:host([data-variant=hud]) .hero .chip img{width:32px;height:32px;object-fit:contain;border-radius:4px}:host([data-variant=hud]) .hero .info{display:flex;flex-direction:column;margin-top:12px;animation:flip .5s ease}:host([data-variant=hud]) .hero .who{font-size:13px;color:var(--text);font-weight:700}:host([data-variant=hud]) .hero .val{font-family:var(--font-mono);font-weight:800;font-size:22px;color:var(--gold-strong);line-height:1}:host([data-variant=hud]) .stream{position:relative;overflow:hidden;flex:1;display:flex;align-items:center}:host([data-variant=hud]) .stream:after{content:"";position:absolute;right:0;top:0;bottom:0;width:60px;background:linear-gradient(270deg,var(--panel-bg),transparent)}:host([data-variant=hud]) .track{display:flex;width:max-content;animation:scroll var(--speed, 32s) linear infinite}:host([data-variant=hud]) .group{display:flex;flex-shrink:0}:host([data-variant=hud]) .win{display:inline-flex;align-items:center;gap:8px;padding:0 18px;white-space:nowrap;font-size:13px;color:var(--text-faint)}:host([data-variant=hud]) .win svg{width:15px;height:15px;color:color-mix(in srgb,var(--violet) 75%,white)}:host([data-variant=hud]) .win .name,:host([data-variant=hud]) .win .player-name .name{color:var(--text)}:host([data-variant=hud]) .win .amt{font-family:var(--font-mono);font-weight:700;color:var(--gold-strong)}:host([data-variant=hud]) .win .sep{color:color-mix(in srgb,var(--violet) 50%,transparent)}:host([data-variant=belt]) .marquee{display:flex;flex-direction:column;gap:10px;padding:16px 0;border:1px solid var(--panel-border);border-radius:18px;background:linear-gradient(180deg,var(--panel-bg),var(--bg));box-shadow:var(--panel-shadow)}:host([data-variant=belt]) .marquee:before,:host([data-variant=belt]) .marquee:after{content:"";position:absolute;top:0;bottom:0;width:80px;z-index:2;pointer-events:none}:host([data-variant=belt]) .marquee:before{left:0;background:linear-gradient(90deg,var(--panel-bg),transparent)}:host([data-variant=belt]) .marquee:after{right:0;background:linear-gradient(270deg,var(--panel-bg),transparent)}:host([data-variant=belt]) .lane{display:flex;width:max-content}:host([data-variant=belt]) .lane-a{animation:scroll var(--speed, 40s) linear infinite}:host([data-variant=belt]) .lane-b{animation:scroll-reverse var(--speed, 40s) linear infinite}:host([data-variant=belt]) .group{display:flex;flex-shrink:0;gap:10px;padding-right:10px}:host([data-variant=belt]) .pill{display:inline-flex;align-items:center;gap:9px;padding:8px 14px;border-radius:999px;white-space:nowrap;background:#ffffff0a;border:1px solid var(--panel-border)}:host([data-variant=belt]) .pill.big{background:color-mix(in srgb,var(--gold) 12%,transparent);border-color:color-mix(in srgb,var(--gold) 35%,transparent)}:host([data-variant=belt]) .pill .chip{display:grid;place-items:center;width:24px;height:24px;border-radius:7px;color:#46d18a;background:color-mix(in srgb,#46d18a 16%,transparent);flex-shrink:0}:host([data-variant=belt]) .pill.big .chip{color:var(--gold-strong);background:color-mix(in srgb,var(--gold) 20%,transparent)}:host([data-variant=belt]) .pill .chip svg{width:15px;height:15px}:host([data-variant=belt]) .pill .chip img{width:15px;height:15px;object-fit:contain;border-radius:3px}:host([data-variant=belt]) .pill .player-name .name{font-size:13px;font-weight:700;color:var(--text)}:host([data-variant=belt]) .pill .game{font-size:12px;color:var(--text-faint)}:host([data-variant=belt]) .pill .amt{font-family:var(--font-mono);font-weight:700;font-size:13px;color:#46d18a}:host([data-variant=belt]) .pill.big .amt{color:var(--gold-strong)}:host([data-variant=feed]) .feed-panel{border:1px solid var(--panel-border);border-radius:18px;background:linear-gradient(180deg,var(--panel-bg),var(--bg));padding:14px;box-shadow:var(--panel-shadow)}:host([data-variant=feed]) .head{display:flex;align-items:center;gap:8px;padding:2px 6px 12px}:host([data-variant=feed]) .live{display:inline-flex;align-items:center;gap:6px;font-size:11px;font-weight:800;letter-spacing:.12em;color:#46d18a;text-transform:uppercase}:host([data-variant=feed]) .live i{width:7px;height:7px;border-radius:50%;background:#46d18a;box-shadow:0 0 color-mix(in srgb,#46d18a 70%,transparent);animation:pulse 1.6s infinite}:host([data-variant=feed]) .head small{color:var(--text-faint);font-size:12px}:host([data-variant=feed]) .list{display:flex;flex-direction:column;gap:8px;overflow:hidden}:host([data-variant=feed]) .row{display:flex;align-items:center;gap:12px;padding:10px 12px;border-radius:12px;background:#ffffff08;border:1px solid var(--panel-border);animation:drop .5s cubic-bezier(.22,1,.36,1)}:host([data-variant=feed]) .row.big{background:color-mix(in srgb,var(--gold) 12%,transparent);border-color:color-mix(in srgb,var(--gold) 35%,transparent)}:host([data-variant=feed]) .row .chip{display:grid;place-items:center;width:34px;height:34px;border-radius:10px;flex-shrink:0;color:#46d18a;background:color-mix(in srgb,#46d18a 16%,transparent)}:host([data-variant=feed]) .row.big .chip{color:var(--gold-strong);background:color-mix(in srgb,var(--gold) 20%,transparent)}:host([data-variant=feed]) .row .chip svg{width:20px;height:20px}:host([data-variant=feed]) .row .chip img{width:20px;height:20px;object-fit:contain;border-radius:4px}:host([data-variant=feed]) .meta{display:flex;flex-direction:column;min-width:0}:host([data-variant=feed]) .meta .player-name .name{font-size:14px;color:var(--text)}:host([data-variant=feed]) .meta .game-line{font-size:12px;color:var(--text-faint);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host([data-variant=feed]) .amt{margin-left:auto;font-family:var(--font-mono);font-weight:700;font-size:15px;color:#46d18a}:host([data-variant=feed]) .row.big .amt{color:var(--gold-strong)}.marquee:hover .track,.marquee:hover .lane{animation-play-state:paused}@keyframes scroll{to{transform:translate(-50%)}}@keyframes scroll-reverse{0%{transform:translate(-50%)}to{transform:translate(0)}}@keyframes flip{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@keyframes drop{0%{opacity:0;transform:translateY(-14px) scale(.98)}to{opacity:1;transform:translateY(0) scale(1)}}@keyframes pulse{to{box-shadow:0 0 0 7px transparent}}@media(prefers-reduced-motion:reduce){.track,.lane{animation:none!important}:host([data-variant=hud]) .hero .info,:host([data-variant=feed]) .row,:host([data-variant=feed]) .live i{animation:none}}';
2
+ export {
3
+ a as default
4
+ };
5
+ //# sourceMappingURL=marquee-section.scss.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"marquee-section.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
@@ -0,0 +1,16 @@
1
+ const t = [
2
+ "classic",
3
+ "ticker",
4
+ "feed",
5
+ "hud",
6
+ "belt"
7
+ ], c = "ticker";
8
+ function i(e) {
9
+ return t.includes(e);
10
+ }
11
+ export {
12
+ c as ACTIVE_MARQUEE_VARIANT,
13
+ t as MARQUEE_VARIANTS,
14
+ i as isMarqueeVariant
15
+ };
16
+ //# sourceMappingURL=marquee-variants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"marquee-variants.js","sources":["../../../../../src/components/os-leaderboard-casino/sections/marquee-section/marquee-variants.ts"],"sourcesContent":["/** Visual treatments for the winners ticker (v0 + legacy). */\nexport const MARQUEE_VARIANTS = [\n 'classic',\n 'ticker',\n 'feed',\n 'hud',\n 'belt',\n] as const;\n\nexport type MarqueeVariant = (typeof MARQUEE_VARIANTS)[number];\n\n/** Active variant — v0 seamless ticker from `v0-components/marquee-section`. */\nexport const ACTIVE_MARQUEE_VARIANT: MarqueeVariant = 'ticker';\n\nexport function isMarqueeVariant(value: string): value is MarqueeVariant {\n return (MARQUEE_VARIANTS as readonly string[]).includes(value);\n}\n"],"names":["MARQUEE_VARIANTS","ACTIVE_MARQUEE_VARIANT","isMarqueeVariant","value"],"mappings":"AACO,MAAMA,IAAmB;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAKaC,IAAyC;AAE/C,SAASC,EAAiBC,GAAwC;AACvE,SAAQH,EAAuC,SAASG,CAAK;AAC/D;"}
@@ -0,0 +1,18 @@
1
+ import { html as i } from "lit";
2
+ function t(e) {
3
+ return i`<section>
4
+ <div class="section-header">
5
+ <h2 class="section-title">${e.sectionTitle}</h2>
6
+ <span class="strategy" ?hidden=${!e.showStrategy}>${e.strategyLabel}</span>
7
+ </div>
8
+
9
+ <div class="podium">${e.renderPodium()}</div>
10
+
11
+ <div class="list" ?hidden=${!e.hasTierList}>${e.renderTierList()}</div>
12
+ </section>
13
+ `;
14
+ }
15
+ export {
16
+ t as default
17
+ };
18
+ //# sourceMappingURL=prize-section.html.js.map
@@ -0,0 +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;"}
@@ -0,0 +1,134 @@
1
+ import { LitElement as f, html as o, nothing as a } from "lit";
2
+ import { property as P } from "lit/decorators.js";
3
+ import { Component as p } from "../../../../shared/lib/lit/component.js";
4
+ import { scss as v } from "../../../../shared/lib/lit/scss.js";
5
+ import { DEFAULT_PRIZE_TITLE as b } from "../../constants/defaults.js";
6
+ import { OS_LEADERBOARD_CASINO_PRIZE as $ } from "../../constants/tags.js";
7
+ 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 { OS_LEADERBOARD_CASINO_PRIZE_CLICK as k } from "../../types/events.js";
11
+ import S from "./prize-section.html.js";
12
+ import _ from "./prize-section.scss.js";
13
+ 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);
16
+ return i && s && y(t, e, s), s;
17
+ };
18
+ function F(r) {
19
+ return r.rankFrom === r.rankTo ? `#${r.rankFrom}` : `#${r.rankFrom}–${r.rankTo}`;
20
+ }
21
+ function m(r, t) {
22
+ return r.find(
23
+ (e) => e.rankFrom === t && e.rankTo === t
24
+ );
25
+ }
26
+ function C(r) {
27
+ return r.filter(
28
+ (t) => !(t.rankFrom === t.rankTo && t.rankFrom >= 1 && t.rankFrom <= 3)
29
+ );
30
+ }
31
+ let l = class extends f {
32
+ constructor() {
33
+ super(...arguments), this.restPrizes = [];
34
+ }
35
+ get sectionTitle() {
36
+ return this.section?.title ?? b;
37
+ }
38
+ get showStrategy() {
39
+ return !!this.section?.allocationStrategy;
40
+ }
41
+ get strategyLabel() {
42
+ return this.section?.allocationStrategy === "SPLIT_PRIZE" ? "Split Prize" : "Best Prize";
43
+ }
44
+ get hasTierList() {
45
+ return this.restPrizes.length > 0;
46
+ }
47
+ willUpdate() {
48
+ const r = this.section?.prizePackage?.prizes ?? [];
49
+ this.firstPrize = m(r, 1), this.secondPrize = m(r, 2), this.thirdPrize = m(r, 3), this.restPrizes = C(r).sort(
50
+ (t, e) => t.rankFrom - e.rankFrom
51
+ );
52
+ }
53
+ onPrizeClick(r) {
54
+ this.dispatchEvent(
55
+ new CustomEvent(k, {
56
+ detail: { prize: r },
57
+ bubbles: !0,
58
+ composed: !0
59
+ })
60
+ );
61
+ }
62
+ formatValue(r) {
63
+ if (r.value == null) return "";
64
+ try {
65
+ return new Intl.NumberFormat("en-US", {
66
+ style: "currency",
67
+ currency: r.currency ?? "USD",
68
+ maximumFractionDigits: 0
69
+ }).format(r.value);
70
+ } catch {
71
+ return `${r.value} ${r.currency ?? ""}`.trim();
72
+ }
73
+ }
74
+ renderPodiumSlot(r, t) {
75
+ const e = {
76
+ first: "gold",
77
+ second: "silver",
78
+ third: "bronze"
79
+ }, i = { first: 1, second: 2, third: 3 }, s = {
80
+ first: "Champion",
81
+ second: "2nd place",
82
+ third: "3rd place"
83
+ }, n = t === "first" ? 68 : 52;
84
+ return o`
85
+ <button class="slot ${t}" @click=${() => this.onPrizeClick(r)}>
86
+ <div class="coin">
87
+ <os-leaderboard-casino-medal-coin
88
+ variant=${e[t]}
89
+ rank=${i[t]}
90
+ size=${n}
91
+ ></os-leaderboard-casino-medal-coin>
92
+ </div>
93
+ <div class="place">${s[t]}</div>
94
+ <div class="name">${d(r.label)}</div>
95
+ <div class="value">${this.formatValue(r)}</div>
96
+ </button>
97
+ `;
98
+ }
99
+ renderPodium() {
100
+ return o`
101
+ ${this.secondPrize ? this.renderPodiumSlot(this.secondPrize, "second") : a}
102
+ ${this.firstPrize ? this.renderPodiumSlot(this.firstPrize, "first") : a}
103
+ ${this.thirdPrize ? this.renderPodiumSlot(this.thirdPrize, "third") : a}
104
+ `;
105
+ }
106
+ renderTierList() {
107
+ return o`${this.restPrizes.map(
108
+ (r) => o`
109
+ <button class="tier" @click=${() => this.onPrizeClick(r)}>
110
+ <span class="icon">${u.get(u.resolvePrizeIconName(r.label)).svg()}</span>
111
+ <span class="info">
112
+ <span class="name">${d(r.label)}</span>
113
+ <span class="range">Rank ${F(r)}</span>
114
+ </span>
115
+ <span class="value">${this.formatValue(r)}</span>
116
+ </button>
117
+ `
118
+ )}`;
119
+ }
120
+ render() {
121
+ return (this.section?.prizePackage?.prizes ?? []).length ? S(this) : a;
122
+ }
123
+ };
124
+ l.styles = [g, v(_)];
125
+ h([
126
+ P({ attribute: !1 })
127
+ ], l.prototype, "section", 2);
128
+ l = h([
129
+ p({ selector: $ })
130
+ ], l);
131
+ export {
132
+ l as OsLeaderboardCasinoPrize
133
+ };
134
+ //# sourceMappingURL=prize-section.js.map
@@ -0,0 +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":";;;;;;;;;;;;;;;;;AAmBA,SAASA,EAAUC,GAA0B;AAC3C,SAAOA,EAAM,aAAaA,EAAM,SAC5B,IAAIA,EAAM,QAAQ,KAClB,IAAIA,EAAM,QAAQ,IAAIA,EAAM,MAAM;AACxC;AAEA,SAASC,EACPC,GACAC,GACuB;AACvB,SAAOD,EAAO;AAAA,IACZ,CAACF,MAAUA,EAAM,aAAaG,KAAQH,EAAM,WAAWG;AAAA,EAAA;AAE3D;AAEA,SAASC,EAAeF,GAAkC;AACxD,SAAOA,EAAO;AAAA,IACZ,CAACF,MACC,EACEA,EAAM,aAAaA,EAAM,UACzBA,EAAM,YAAY,KAClBA,EAAM,YAAY;AAAA,EAAA;AAG1B;AAIO,IAAMK,IAAN,cACGC,EAEV;AAAA,EAHO,cAAA;AAAA,UAAA,GAAA,SAAA,GASL,KAAQ,aAA0B,CAAA;AAAA,EAAC;AAAA,EAKnC,IAAI,eAAuB;AACzB,WAAO,KAAK,SAAS,SAASC;AAAA,EAChC;AAAA,EAEA,IAAI,eAAwB;AAC1B,WAAO,EAAQ,KAAK,SAAS;AAAA,EAC/B;AAAA,EAEA,IAAI,gBAAwB;AAC1B,WAAO,KAAK,SAAS,uBAAuB,gBACxC,gBACA;AAAA,EACN;AAAA,EAEA,IAAI,cAAuB;AACzB,WAAO,KAAK,WAAW,SAAS;AAAA,EAClC;AAAA,EAEA,aAAa;AACX,UAAML,IAAS,KAAK,SAAS,cAAc,UAAU,CAAA;AACrD,SAAK,aAAaD,EAAmBC,GAAQ,CAAC,GAC9C,KAAK,cAAcD,EAAmBC,GAAQ,CAAC,GAC/C,KAAK,aAAaD,EAAmBC,GAAQ,CAAC,GAC9C,KAAK,aAAaE,EAAeF,CAAM,EAAE;AAAA,MACvC,CAACM,GAAMC,MAAUD,EAAK,WAAWC,EAAM;AAAA,IAAA;AAAA,EAE3C;AAAA,EAEQ,aAAaT,GAAkB;AACrC,SAAK;AAAA,MACH,IAAI,YAAYU,GAAmC;AAAA,QACjD,QAAQ,EAAE,OAAAV,EAAA;AAAA,QACV,SAAS;AAAA,QACT,UAAU;AAAA,MAAA,CACX;AAAA,IAAA;AAAA,EAEL;AAAA,EAEQ,YAAYA,GAA0B;AAC5C,QAAIA,EAAM,SAAS,KAAM,QAAO;AAChC,QAAI;AACF,aAAO,IAAI,KAAK,aAAa,SAAS;AAAA,QACpC,OAAO;AAAA,QACP,UAAUA,EAAM,YAAY;AAAA,QAC5B,uBAAuB;AAAA,MAAA,CACxB,EAAE,OAAOA,EAAM,KAAK;AAAA,IACvB,QAAQ;AACN,aAAO,GAAGA,EAAM,KAAK,IAAIA,EAAM,YAAY,EAAE,GAAG,KAAA;AAAA,IAClD;AAAA,EACF;AAAA,EAEQ,iBACNA,GACAW,GACA;AACA,UAAMC,IAAW;AAAA,MACf,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,OAAO;AAAA,IAAA,GAEHC,IAAQ,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,EAAA,GACtCC,IAAS;AAAA,MACb,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,OAAO;AAAA,IAAA,GAEHC,IAAWJ,MAAU,UAAU,KAAK;AAC1C,WAAOK;AAAA,4BACiBL,CAAK,YAAY,MAAM,KAAK,aAAaX,CAAK,CAAC;AAAA;AAAA;AAAA,sBAGrDY,EAASD,CAAK,CAAC;AAAA,mBAClBE,EAAMF,CAAK,CAAC;AAAA,mBACZI,CAAQ;AAAA;AAAA;AAAA,6BAGED,EAAOH,CAAK,CAAC;AAAA,4BACdM,EAAUjB,EAAM,KAAK,CAAC;AAAA,6BACrB,KAAK,YAAYA,CAAK,CAAC;AAAA;AAAA;AAAA,EAGlD;AAAA,EAEA,eAAe;AACb,WAAOgB;AAAA,QACH,KAAK,cACH,KAAK,iBAAiB,KAAK,aAAa,QAAQ,IAChDE,CAAO;AAAA,QACT,KAAK,aACH,KAAK,iBAAiB,KAAK,YAAY,OAAO,IAC9CA,CAAO;AAAA,QACT,KAAK,aACH,KAAK,iBAAiB,KAAK,YAAY,OAAO,IAC9CA,CAAO;AAAA;AAAA,EAEf;AAAA,EAEA,iBAAiB;AACf,WAAOF,IAAO,KAAK,WAAW;AAAA,MAC5B,CAAChB,MAAUgB;AAAA,sCACqB,MAAM,KAAK,aAAahB,CAAK,CAAC;AAAA,+BACrCmB,EAAY,IAAIA,EAAY,qBAAqBnB,EAAM,KAAK,CAAC,EAAE,KAAK;AAAA;AAAA,iCAElEiB,EAAUjB,EAAM,KAAK,CAAC;AAAA,uCAChBD,EAAUC,CAAK,CAAC;AAAA;AAAA,gCAEvB,KAAK,YAAYA,CAAK,CAAC;AAAA;AAAA;AAAA,IAAA,CAGlD;AAAA,EACH;AAAA,EAEA,SAAS;AAEP,YADe,KAAK,SAAS,cAAc,UAAU,CAAA,GACzC,SACLoB,EAAe,IAAI,IADCF;AAAA,EAE7B;AACF;AAnIab,EAIJ,SAAS,CAACgB,GAA0BC,EAAKC,CAAM,CAAC;AAGvDC,EAAA;AAAA,EADCC,EAAS,EAAE,WAAW,GAAA,CAAO;AAAA,GANnBpB,EAOX,WAAA,WAAA,CAAA;AAPWA,IAANmB,EAAA;AAAA,EADNE,EAAU,EAAE,UAAUC,EAAA,CAA6B;AAAA,GACvCtB,CAAA;"}
@@ -0,0 +1,5 @@
1
+ const o = '@charset "UTF-8";:host{display:block;width:100%}.strategy{font-size:9.5px;font-weight:800;letter-spacing:.12em;text-transform:uppercase;padding:4px 10px;border-radius:999px;background:var(--violet-soft);border:1px solid color-mix(in srgb,var(--violet) 40%,transparent);color:#c9adff}.podium{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;align-items:end}.slot{position:relative;overflow:hidden;border-radius:var(--radius-sm);padding:16px 12px 14px;text-align:center;border:1px solid var(--panel-border);background:var(--panel-bg);box-shadow:var(--panel-shadow);transition:transform var(--transition-fast),box-shadow var(--transition-fast)}.slot:hover{transform:translateY(-3px)}.slot.first{order:2;padding-top:22px;padding-bottom:20px;border-color:var(--panel-border);background:radial-gradient(120% 90% at 50% -10%,color-mix(in srgb,var(--gold) 18%,transparent),transparent 60%),var(--panel-bg);box-shadow:var(--panel-shadow)}.slot.second{order:1;border-color:var(--panel-border);background:var(--panel-bg)}.slot.third{order:3;border-color:var(--panel-border);background:var(--panel-bg)}.coin{display:flex;justify-content:center;min-height:52px}.slot.first .coin{min-height:68px}.place{margin-top:7px;font-size:9px;font-weight:800;letter-spacing:.16em;text-transform:uppercase;color:var(--text-faint)}.slot.first .place{color:var(--gold)}.slot.second .place{color:var(--silver)}.slot.third .place{color:var(--bronze)}.slot .name{margin-top:5px;font-size:12px;font-weight:700;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.slot .value{margin-top:6px;font-family:var(--font-mono);font-size:16px;font-weight:800;color:var(--gold-strong)}.slot.first .value{font-size:20px;text-shadow:0 0 18px var(--gold-glow)}.list{display:flex;flex-direction:column;gap:7px;margin-top:10px}.tier{display:flex;align-items:center;gap:12px;width:100%;text-align:left;font-family:var(--font-body);padding:11px 14px;background:var(--panel-bg);border:1px solid var(--panel-border);border-radius:var(--radius-sm);box-shadow:var(--panel-shadow);transition:border-color var(--transition-fast)}.tier:hover{border-color:var(--hairline-gold)}.tier .icon{flex:none;display:grid;place-items:center;line-height:0}.tier .icon svg{width:28px;height:28px}.tier .info{flex:1;min-width:0}.tier .name{font-size:13px;font-weight:700;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tier .range{margin-top:1px;font-size:11px;color:var(--text-dim)}.tier .value{flex:none;font-family:var(--font-mono);font-size:13.5px;font-weight:700;color:var(--gold)}@media(max-width:480px){.slot .value{font-size:13.5px}.slot.first .value{font-size:16px}}';
2
+ export {
3
+ o as default
4
+ };
5
+ //# sourceMappingURL=prize-section.scss.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prize-section.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
@@ -0,0 +1,34 @@
1
+ import { html as a } from "lit";
2
+ function t(e) {
3
+ return a`<section class="strip">
4
+ <os-leaderboard-casino-stat-rail
5
+ accent="participants"
6
+ icon="users"
7
+ segment="${e.participantsSegment}"
8
+ value="${e.participantsLabel}"
9
+ label="Participants"
10
+ ></os-leaderboard-casino-stat-rail>
11
+ <os-leaderboard-casino-stat-rail
12
+ ?hidden=${!e.showPrizes}
13
+ accent="prizes"
14
+ icon="gift"
15
+ segment="${e.prizesSegment}"
16
+ value="${e.prizesLabel}"
17
+ label="Prize Tiers"
18
+ ></os-leaderboard-casino-stat-rail>
19
+ <os-leaderboard-casino-stat-rail
20
+ ?hidden=${!e.showBiggestWin}
21
+ accent="biggestWin"
22
+ icon="trophy"
23
+ segment="${e.biggestWinSegment}"
24
+ value="${e.biggestWinLabel}"
25
+ label="Biggest Win"
26
+ compact
27
+ ></os-leaderboard-casino-stat-rail>
28
+ </section>
29
+ `;
30
+ }
31
+ export {
32
+ t as default
33
+ };
34
+ //# sourceMappingURL=stats-section.html.js.map
@@ -0,0 +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;"}