@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,67 @@
1
+ import { LitElement as m, nothing as c } from "lit";
2
+ import { property as l } from "lit/decorators.js";
3
+ import { Component as p } from "../../../../shared/lib/lit/component.js";
4
+ import { scss as u } from "../../../../shared/lib/lit/scss.js";
5
+ import { OS_LEADERBOARD_CASINO_STATS as h } from "../../constants/tags.js";
6
+ import { osLeaderboardCasinoTheme as f } from "../../theme/styles.js";
7
+ import b from "./stats-section.html.js";
8
+ import S from "./stats-section.scss.js";
9
+ var L = Object.defineProperty, d = Object.getOwnPropertyDescriptor, g = (r, e, n, i) => {
10
+ for (var t = i > 1 ? void 0 : i ? d(e, n) : e, o = r.length - 1, a; o >= 0; o--)
11
+ (a = r[o]) && (t = (i ? a(e, n, t) : a(t)) || t);
12
+ return i && t && L(e, n, t), t;
13
+ };
14
+ function P(r, e = "USD") {
15
+ try {
16
+ return new Intl.NumberFormat("en-US", {
17
+ style: "currency",
18
+ currency: e,
19
+ maximumFractionDigits: 0
20
+ }).format(r);
21
+ } catch {
22
+ return r.toLocaleString();
23
+ }
24
+ }
25
+ let s = class extends m {
26
+ get participantsLabel() {
27
+ return this.section.totalParticipants.toLocaleString();
28
+ }
29
+ get showPrizes() {
30
+ return this.section.totalPrizes != null;
31
+ }
32
+ get prizesLabel() {
33
+ return (this.section.totalPrizes ?? 0).toLocaleString();
34
+ }
35
+ get showBiggestWin() {
36
+ return this.section.biggestWin != null;
37
+ }
38
+ get biggestWinLabel() {
39
+ return P(
40
+ this.section.biggestWin ?? 0,
41
+ this.section.biggestWinCurrency ?? "USD"
42
+ );
43
+ }
44
+ get participantsSegment() {
45
+ return !this.showPrizes && !this.showBiggestWin ? "solo" : "start";
46
+ }
47
+ get prizesSegment() {
48
+ return this.showBiggestWin ? "middle" : "end";
49
+ }
50
+ get biggestWinSegment() {
51
+ return "end";
52
+ }
53
+ render() {
54
+ return this.section ? b(this) : c;
55
+ }
56
+ };
57
+ s.styles = [f, u(S)];
58
+ g([
59
+ l({ attribute: !1 })
60
+ ], s.prototype, "section", 2);
61
+ s = g([
62
+ p({ selector: h })
63
+ ], s);
64
+ export {
65
+ s as OsLeaderboardCasinoStats
66
+ };
67
+ //# sourceMappingURL=stats-section.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stats-section.js","sources":["../../../../../src/components/os-leaderboard-casino/sections/stats-section/stats-section.ts"],"sourcesContent":["import { LitElement, 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 { OS_LEADERBOARD_CASINO_STATS } from '@os-leaderboard-casino/constants/tags.js';\nimport { osLeaderboardCasinoTheme } from '@os-leaderboard-casino/theme/index.js';\nimport type { OsLeaderboardCasinoStatsSection } from '@os-leaderboard-casino/types/sections.js';\nimport type { StatsSectionHost, StatRailSegment } from './stats-section.host.js';\nimport './components/stat-rail/stat-rail.js';\nimport renderTemplate from './stats-section.html?lit-html';\nimport styles from './stats-section.scss?inline';\n\nfunction formatWinAmount(value: number, currency = 'USD'): string {\n try {\n return new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency,\n maximumFractionDigits: 0,\n }).format(value);\n } catch {\n return value.toLocaleString();\n }\n}\n\n@Component({ selector: OS_LEADERBOARD_CASINO_STATS })\nexport class OsLeaderboardCasinoStats\n extends LitElement\n implements StatsSectionHost\n{\n static styles = [osLeaderboardCasinoTheme, scss(styles)];\n\n @property({ attribute: false })\n section!: OsLeaderboardCasinoStatsSection;\n\n get participantsLabel(): string {\n return this.section.totalParticipants.toLocaleString();\n }\n\n get showPrizes(): boolean {\n return this.section.totalPrizes != null;\n }\n\n get prizesLabel(): string {\n return (this.section.totalPrizes ?? 0).toLocaleString();\n }\n\n get showBiggestWin(): boolean {\n return this.section.biggestWin != null;\n }\n\n get biggestWinLabel(): string {\n return formatWinAmount(\n this.section.biggestWin ?? 0,\n this.section.biggestWinCurrency ?? 'USD',\n );\n }\n\n get participantsSegment(): StatRailSegment {\n if (!this.showPrizes && !this.showBiggestWin) return 'solo';\n return 'start';\n }\n\n get prizesSegment(): StatRailSegment {\n return this.showBiggestWin ? 'middle' : 'end';\n }\n\n get biggestWinSegment(): StatRailSegment {\n return 'end';\n }\n\n render() {\n if (!this.section) return nothing;\n return renderTemplate(this);\n }\n}\n"],"names":["formatWinAmount","value","currency","OsLeaderboardCasinoStats","LitElement","renderTemplate","nothing","osLeaderboardCasinoTheme","scss","styles","__decorateClass","property","Component","OS_LEADERBOARD_CASINO_STATS"],"mappings":";;;;;;;;;;;;;AAYA,SAASA,EAAgBC,GAAeC,IAAW,OAAe;AAChE,MAAI;AACF,WAAO,IAAI,KAAK,aAAa,SAAS;AAAA,MACpC,OAAO;AAAA,MACP,UAAAA;AAAA,MACA,uBAAuB;AAAA,IAAA,CACxB,EAAE,OAAOD,CAAK;AAAA,EACjB,QAAQ;AACN,WAAOA,EAAM,eAAA;AAAA,EACf;AACF;AAGO,IAAME,IAAN,cACGC,EAEV;AAAA,EAME,IAAI,oBAA4B;AAC9B,WAAO,KAAK,QAAQ,kBAAkB,eAAA;AAAA,EACxC;AAAA,EAEA,IAAI,aAAsB;AACxB,WAAO,KAAK,QAAQ,eAAe;AAAA,EACrC;AAAA,EAEA,IAAI,cAAsB;AACxB,YAAQ,KAAK,QAAQ,eAAe,GAAG,eAAA;AAAA,EACzC;AAAA,EAEA,IAAI,iBAA0B;AAC5B,WAAO,KAAK,QAAQ,cAAc;AAAA,EACpC;AAAA,EAEA,IAAI,kBAA0B;AAC5B,WAAOJ;AAAA,MACL,KAAK,QAAQ,cAAc;AAAA,MAC3B,KAAK,QAAQ,sBAAsB;AAAA,IAAA;AAAA,EAEvC;AAAA,EAEA,IAAI,sBAAuC;AACzC,WAAI,CAAC,KAAK,cAAc,CAAC,KAAK,iBAAuB,SAC9C;AAAA,EACT;AAAA,EAEA,IAAI,gBAAiC;AACnC,WAAO,KAAK,iBAAiB,WAAW;AAAA,EAC1C;AAAA,EAEA,IAAI,oBAAqC;AACvC,WAAO;AAAA,EACT;AAAA,EAEA,SAAS;AACP,WAAK,KAAK,UACHK,EAAe,IAAI,IADAC;AAAA,EAE5B;AACF;AAjDaH,EAIJ,SAAS,CAACI,GAA0BC,EAAKC,CAAM,CAAC;AAGvDC,EAAA;AAAA,EADCC,EAAS,EAAE,WAAW,GAAA,CAAO;AAAA,GANnBR,EAOX,WAAA,WAAA,CAAA;AAPWA,IAANO,EAAA;AAAA,EADNE,EAAU,EAAE,UAAUC,EAAA,CAA6B;AAAA,GACvCV,CAAA;"}
@@ -0,0 +1,5 @@
1
+ const t = ":host{display:block;width:100%}.strip{display:flex;align-items:stretch;gap:10px;width:100%}@media(max-width:560px){.strip{flex-direction:column}}";
2
+ export {
3
+ t as default
4
+ };
5
+ //# sourceMappingURL=stats-section.scss.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stats-section.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
@@ -0,0 +1,38 @@
1
+ import { html as s } from "lit";
2
+ function n(a) {
3
+ return s`<section>
4
+ <div class="section-header">
5
+ <h2 class="section-title">${a.sectionTitle}</h2>
6
+ </div>
7
+
8
+ <div class="card-shell">
9
+ <div class="card-accent" aria-hidden="true"></div>
10
+ <div class="card">
11
+ <div class="table-scroll">
12
+ <div class="table-head">
13
+ <span class="col-rank">Rank</span>
14
+ <span class="col-player">Player</span>
15
+ <span class="col-games">Games</span>
16
+ <span class="col-win-rate">Win rate</span>
17
+ <span class="col-bet">Total bet</span>
18
+ <span class="col-points">Points</span>
19
+ <span class="col-rank-change">Change</span>
20
+ </div>
21
+ <div class="empty" ?hidden=${a.hasPlayers}>${a.emptyMessage}</div>
22
+ ${a.renderPlayers()}
23
+ <div class="divider" ?hidden=${!a.showPinned}>Your position</div>
24
+ ${a.renderPinnedRow()}
25
+ </div>
26
+ </div>
27
+ </div>
28
+
29
+ <button type="button" class="cta" @click=${a.onOpenClick}>
30
+ ${a.ctaLabel}
31
+ </button>
32
+ </section>
33
+ `;
34
+ }
35
+ export {
36
+ n as default
37
+ };
38
+ //# sourceMappingURL=table-section.html.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table-section.html.js","sources":["../../../../../src/components/os-leaderboard-casino/sections/table-section/table-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 </div>\n\n <div class=\"card-shell\">\n <div class=\"card-accent\" aria-hidden=\"true\"></div>\n <div class=\"card\">\n <div class=\"table-scroll\">\n <div class=\"table-head\">\n <span class=\"col-rank\">Rank</span>\n <span class=\"col-player\">Player</span>\n <span class=\"col-games\">Games</span>\n <span class=\"col-win-rate\">Win rate</span>\n <span class=\"col-bet\">Total bet</span>\n <span class=\"col-points\">Points</span>\n <span class=\"col-rank-change\">Change</span>\n </div>\n <div class=\"empty\" ?hidden=${host.hasPlayers}>${host.emptyMessage}</div>\n ${host.renderPlayers()}\n <div class=\"divider\" ?hidden=${!host.showPinned}>Your position</div>\n ${host.renderPinnedRow()}\n </div>\n </div>\n </div>\n\n <button type=\"button\" class=\"cta\" @click=${host.onOpenClick}>\n ${host.ctaLabel}\n </button>\n</section>\n`;\n}\n"],"names":["render","host","html"],"mappings":";AAGe,SAASA,EAAOC,GAAM;AACnC,SAAOC;AAAA;AAAA,gCAEuBD,EAAK,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mCAgBdA,EAAK,UAAU,IAAIA,EAAK,YAAY;AAAA,QAC/DA,EAAK,cAAa,CAAE;AAAA,qCACS,CAACA,EAAK,UAAU;AAAA,QAC7CA,EAAK,gBAAe,CAAE;AAAA;AAAA;AAAA;AAAA;AAAA,6CAKeA,EAAK,WAAW;AAAA,MACvDA,EAAK,QAAQ;AAAA;AAAA;AAAA;AAInB;"}
@@ -0,0 +1,182 @@
1
+ import { LitElement as f, html as r, nothing as i } from "lit";
2
+ import { property as d } from "lit/decorators.js";
3
+ import { unsafeSVG as c } from "lit/directives/unsafe-svg.js";
4
+ import v from "../../assets/icons/table.rank-up.svg.js";
5
+ import b from "../../assets/icons/table.rank-down.svg.js";
6
+ import g from "../../assets/icons/table.rank-neutral.svg.js";
7
+ import { Component as k } from "../../../../shared/lib/lit/component.js";
8
+ import { scss as y } from "../../../../shared/lib/lit/scss.js";
9
+ import { DEFAULT_TABLE_TITLE as $, DEFAULT_CTA_LABEL_FINISHED as _, DEFAULT_CTA_LABEL as w } from "../../constants/defaults.js";
10
+ import { OS_LEADERBOARD_CASINO_TABLE as P } from "../../constants/tags.js";
11
+ import { osLeaderboardCasinoTheme as S } from "../../theme/styles.js";
12
+ import { renderPlayerName as C } from "../../theme/vip-mark.js";
13
+ import { labelText as R } from "../../types/data.js";
14
+ import { prizeForRank as L, podiumVariantForRank as E } from "../../theme/prize-resolve.js";
15
+ import { OS_LEADERBOARD_CASINO_OPEN as O } from "../../types/events.js";
16
+ import z from "./table-section.html.js";
17
+ import A from "./table-section.scss.js";
18
+ var D = Object.defineProperty, T = Object.getOwnPropertyDescriptor, l = (e, s, t, o) => {
19
+ for (var n = o > 1 ? void 0 : o ? T(s, t) : s, p = e.length - 1, u; p >= 0; p--)
20
+ (u = e[p]) && (n = (o ? u(s, t, n) : u(n)) || n);
21
+ return o && n && D(s, t, n), n;
22
+ };
23
+ function U(e) {
24
+ return new Intl.NumberFormat("en-US", {
25
+ style: "currency",
26
+ currency: "USD",
27
+ maximumFractionDigits: 0
28
+ }).format(e);
29
+ }
30
+ function B(e) {
31
+ return e != null ? e.toLocaleString() : "—";
32
+ }
33
+ function m(e) {
34
+ return e.replace("<svg ", '<svg viewBox="0 0 512 512" ');
35
+ }
36
+ const x = m(v), N = m(b), h = m(g);
37
+ let a = class extends f {
38
+ constructor() {
39
+ super(...arguments), this.uuid = "", this.finished = !1;
40
+ }
41
+ connectedCallback() {
42
+ super.connectedCallback(), this._resizeObserver = new ResizeObserver(() => this._syncStickyWidth()), this._resizeObserver.observe(this);
43
+ }
44
+ disconnectedCallback() {
45
+ super.disconnectedCallback(), this._resizeObserver?.disconnect();
46
+ }
47
+ updated() {
48
+ this._syncStickyWidth();
49
+ }
50
+ _syncStickyWidth() {
51
+ const e = this.shadowRoot?.querySelector(".card"), s = this.shadowRoot?.querySelector(".col-player");
52
+ e && this.style.setProperty(
53
+ "--table-scrollport-width",
54
+ `${e.clientWidth}px`
55
+ ), s && this.style.setProperty(
56
+ "--sticky-player-width",
57
+ `${s.offsetWidth}px`
58
+ );
59
+ }
60
+ get sectionTitle() {
61
+ return $;
62
+ }
63
+ get ctaLabel() {
64
+ return this.section?.ctaLabel ?? (this.finished ? _ : w);
65
+ }
66
+ get visiblePlayers() {
67
+ return this.section?.topPlayers ?? [];
68
+ }
69
+ get pinnedCurrentUser() {
70
+ const e = this.section?.currentUser;
71
+ return !e || !("you" in e) || (this.section?.topPlayers ?? []).some((t) => t.you) ? void 0 : e;
72
+ }
73
+ get hasPlayers() {
74
+ return this.visiblePlayers.length > 0;
75
+ }
76
+ get emptyMessage() {
77
+ return "No players yet.";
78
+ }
79
+ get showPinned() {
80
+ return this.pinnedCurrentUser != null;
81
+ }
82
+ onOpenClick() {
83
+ this.dispatchEvent(
84
+ new CustomEvent(O, {
85
+ detail: { uuid: this.uuid },
86
+ bubbles: !0,
87
+ composed: !0
88
+ })
89
+ );
90
+ }
91
+ resolvePlayerPrize(e) {
92
+ const s = this.section?.prizes ?? [];
93
+ return L(s, e.rank) ?? e.prize;
94
+ }
95
+ renderRankChange(e) {
96
+ if (e.previousRank == null)
97
+ return r`<span class="chip flat"
98
+ >${c(h)}</span
99
+ >`;
100
+ const s = e.previousRank - e.rank;
101
+ return s === 0 ? r`<span class="chip flat"
102
+ >${c(h)}</span
103
+ >` : s > 0 ? r`<span class="chip up"
104
+ >${c(x)}${s}</span
105
+ >` : r`<span class="chip down"
106
+ >${c(N)}${Math.abs(s)}</span
107
+ >`;
108
+ }
109
+ avatarUrl(e) {
110
+ return `https://api.dicebear.com/9.x/lorelei/svg?seed=${encodeURIComponent(
111
+ e
112
+ )}`;
113
+ }
114
+ renderRow(e) {
115
+ const s = !e.you && e.rank <= 3 ? `podium-${e.rank}` : "", t = this.resolvePlayerPrize(e), o = e.totalBet ?? Math.round(e.points * (1.8 + e.rank * 0.04));
116
+ return r`
117
+ <div
118
+ class="row ${e.you ? "you" : ""} ${e.vip ? "vip" : ""} ${s}"
119
+ >
120
+ ${e.rank <= 3 && !e.you ? r`<span class="rank col-rank"
121
+ ><os-leaderboard-casino-medal-coin
122
+ variant=${E(e.rank)}
123
+ rank=${e.rank}
124
+ size=${30}
125
+ ></os-leaderboard-casino-medal-coin
126
+ ></span>` : r`<span class="rank col-rank">#${e.rank}</span>`}
127
+ <div class="player col-player">
128
+ <span class="avatar">
129
+ <img src=${this.avatarUrl(e.username)} alt="" loading="lazy" />
130
+ </span>
131
+ <span class="who">
132
+ <span class="username">
133
+ ${C(e.username, {
134
+ vip: e.vip,
135
+ suffix: e.you ? r`<span class="you-tag">You</span>` : i
136
+ })}
137
+ </span>
138
+ ${t ? r`<span class="prize-sub"
139
+ ><span class="prize-label"
140
+ >${R(t.label)}</span
141
+ ></span
142
+ >` : i}
143
+ </span>
144
+ </div>
145
+ <span class="col-games">${B(e.gamesPlayed)}</span>
146
+ <span class="col-win-rate"
147
+ >${e.winRate != null ? `${e.winRate}%` : "—"}</span
148
+ >
149
+ <span class="col-bet">${U(o)}</span>
150
+ <span class="col-points"><b>${e.points.toLocaleString()}</b></span>
151
+ <span class="col-rank-change">${this.renderRankChange(e)}</span>
152
+ </div>
153
+ `;
154
+ }
155
+ renderPlayers() {
156
+ return r`${this.visiblePlayers.map((e) => this.renderRow(e))}`;
157
+ }
158
+ renderPinnedRow() {
159
+ const e = this.pinnedCurrentUser;
160
+ return e ? this.renderRow(e) : i;
161
+ }
162
+ render() {
163
+ return this.section ? z(this) : i;
164
+ }
165
+ };
166
+ a.styles = [S, y(A)];
167
+ l([
168
+ d({ attribute: !1 })
169
+ ], a.prototype, "section", 2);
170
+ l([
171
+ d({ type: String })
172
+ ], a.prototype, "uuid", 2);
173
+ l([
174
+ d({ type: Boolean })
175
+ ], a.prototype, "finished", 2);
176
+ a = l([
177
+ k({ selector: P })
178
+ ], a);
179
+ export {
180
+ a as OsLeaderboardCasinoTable
181
+ };
182
+ //# sourceMappingURL=table-section.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table-section.js","sources":["../../../../../src/components/os-leaderboard-casino/sections/table-section/table-section.ts"],"sourcesContent":["import { LitElement, html, nothing } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { unsafeSVG } from 'lit/directives/unsafe-svg.js';\nimport rankUpSvg from '../../assets/icons/table.rank-up.svg?raw';\nimport rankDownSvg from '../../assets/icons/table.rank-down.svg?raw';\nimport rankNeutralSvg from '../../assets/icons/table.rank-neutral.svg?raw';\nimport { Component } from '@oddsmith/lib/lit/component.js';\nimport { scss } from '@oddsmith/lib/lit/scss.js';\nimport {\n DEFAULT_CTA_LABEL,\n DEFAULT_CTA_LABEL_FINISHED,\n DEFAULT_TABLE_TITLE,\n} from '@os-leaderboard-casino/constants/defaults.js';\nimport { OS_LEADERBOARD_CASINO_TABLE } 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 {\n labelText,\n type QuizPrize,\n type UserRank,\n} from '@os-leaderboard-casino/types/data.js';\nimport {\n podiumVariantForRank,\n prizeForRank,\n} from '@os-leaderboard-casino/theme/prize-resolve.js';\nimport { OS_LEADERBOARD_CASINO_OPEN } from '@os-leaderboard-casino/types/events.js';\nimport type { OsLeaderboardCasinoTableView } from '@os-leaderboard-casino/types/sections.js';\nimport type { TableSectionHost } from './table-section.host.js';\nimport '@os-leaderboard-casino/sections/prize-section/components/medal-coin/medal-coin.js';\nimport renderTemplate from './table-section.html?lit-html';\nimport styles from './table-section.scss?inline';\n\nfunction formatTotalBet(value: number): string {\n return new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'USD',\n maximumFractionDigits: 0,\n }).format(value);\n}\n\nfunction formatGamesPlayed(value: number | undefined): string {\n return value != null ? value.toLocaleString() : '—';\n}\n\nfunction addViewBox(svg: string): string {\n return svg.replace('<svg ', '<svg viewBox=\"0 0 512 512\" ');\n}\n\nconst rankUpSvgVb = addViewBox(rankUpSvg);\nconst rankDownSvgVb = addViewBox(rankDownSvg);\nconst rankNeutralSvgVb = addViewBox(rankNeutralSvg);\n\n/** Top-players preview — pinned current user, golden CTA. */\n@Component({ selector: OS_LEADERBOARD_CASINO_TABLE })\nexport class OsLeaderboardCasinoTable\n extends LitElement\n implements TableSectionHost\n{\n static styles = [osLeaderboardCasinoTheme, scss(styles)];\n\n private _resizeObserver?: ResizeObserver;\n\n connectedCallback() {\n super.connectedCallback();\n this._resizeObserver = new ResizeObserver(() => this._syncStickyWidth());\n this._resizeObserver.observe(this);\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this._resizeObserver?.disconnect();\n }\n\n protected updated() {\n this._syncStickyWidth();\n }\n\n private _syncStickyWidth() {\n const card = this.shadowRoot?.querySelector<HTMLElement>('.card');\n const player = this.shadowRoot?.querySelector<HTMLElement>('.col-player');\n\n if (card) {\n this.style.setProperty(\n '--table-scrollport-width',\n `${card.clientWidth}px`,\n );\n }\n\n if (player) {\n this.style.setProperty(\n '--sticky-player-width',\n `${player.offsetWidth}px`,\n );\n }\n }\n\n @property({ attribute: false })\n section!: OsLeaderboardCasinoTableView;\n\n /** Campaign uuid included in the `leaderboard-open` event detail. */\n @property({ type: String })\n uuid = '';\n\n @property({ type: Boolean })\n finished = false;\n\n get sectionTitle(): string {\n return DEFAULT_TABLE_TITLE;\n }\n\n get ctaLabel(): string {\n return (\n this.section?.ctaLabel ??\n (this.finished ? DEFAULT_CTA_LABEL_FINISHED : DEFAULT_CTA_LABEL)\n );\n }\n\n private get visiblePlayers(): UserRank[] {\n return this.section?.topPlayers ?? [];\n }\n\n private get pinnedCurrentUser(): UserRank | undefined {\n const current = this.section?.currentUser;\n if (!current || !('you' in current)) return undefined;\n const players = this.section?.topPlayers ?? [];\n return players.some((p) => p.you) ? undefined : current;\n }\n\n get hasPlayers(): boolean {\n return this.visiblePlayers.length > 0;\n }\n\n get emptyMessage(): string {\n return 'No players yet.';\n }\n\n get showPinned(): boolean {\n return this.pinnedCurrentUser != null;\n }\n\n onOpenClick() {\n this.dispatchEvent(\n new CustomEvent(OS_LEADERBOARD_CASINO_OPEN, {\n detail: { uuid: this.uuid },\n bubbles: true,\n composed: true,\n }),\n );\n }\n\n private resolvePlayerPrize(player: UserRank): QuizPrize | null {\n const prizes = this.section?.prizes ?? [];\n return prizeForRank(prizes, player.rank) ?? player.prize;\n }\n\n private renderRankChange(player: UserRank) {\n if (player.previousRank == null)\n return html`<span class=\"chip flat\"\n >${unsafeSVG(rankNeutralSvgVb)}</span\n >`;\n const delta = player.previousRank - player.rank;\n if (delta === 0)\n return html`<span class=\"chip flat\"\n >${unsafeSVG(rankNeutralSvgVb)}</span\n >`;\n if (delta > 0)\n return html`<span class=\"chip up\"\n >${unsafeSVG(rankUpSvgVb)}${delta}</span\n >`;\n return html`<span class=\"chip down\"\n >${unsafeSVG(rankDownSvgVb)}${Math.abs(delta)}</span\n >`;\n }\n\n private avatarUrl(username: string): string {\n return `https://api.dicebear.com/9.x/lorelei/svg?seed=${encodeURIComponent(\n username,\n )}`;\n }\n\n private renderRow(player: UserRank) {\n const podiumClass =\n !player.you && player.rank <= 3 ? `podium-${player.rank}` : '';\n const prize = this.resolvePlayerPrize(player);\n const totalBet =\n player.totalBet ?? Math.round(player.points * (1.8 + player.rank * 0.04));\n return html`\n <div\n class=\"row ${player.you ? 'you' : ''} ${player.vip\n ? 'vip'\n : ''} ${podiumClass}\"\n >\n ${player.rank <= 3 && !player.you\n ? html`<span class=\"rank col-rank\"\n ><os-leaderboard-casino-medal-coin\n variant=${podiumVariantForRank(player.rank as 1 | 2 | 3)}\n rank=${player.rank}\n size=${30}\n ></os-leaderboard-casino-medal-coin\n ></span>`\n : html`<span class=\"rank col-rank\">#${player.rank}</span>`}\n <div class=\"player col-player\">\n <span class=\"avatar\">\n <img src=${this.avatarUrl(player.username)} alt=\"\" loading=\"lazy\" />\n </span>\n <span class=\"who\">\n <span class=\"username\">\n ${renderPlayerName(player.username, {\n vip: player.vip,\n suffix: player.you\n ? html`<span class=\"you-tag\">You</span>`\n : nothing,\n })}\n </span>\n ${prize\n ? html`<span class=\"prize-sub\"\n ><span class=\"prize-label\"\n >${labelText(prize.label)}</span\n ></span\n >`\n : nothing}\n </span>\n </div>\n <span class=\"col-games\">${formatGamesPlayed(player.gamesPlayed)}</span>\n <span class=\"col-win-rate\"\n >${player.winRate != null ? `${player.winRate}%` : '—'}</span\n >\n <span class=\"col-bet\">${formatTotalBet(totalBet)}</span>\n <span class=\"col-points\"><b>${player.points.toLocaleString()}</b></span>\n <span class=\"col-rank-change\">${this.renderRankChange(player)}</span>\n </div>\n `;\n }\n\n renderPlayers() {\n return html`${this.visiblePlayers.map((p) => this.renderRow(p))}`;\n }\n\n renderPinnedRow() {\n const pinned = this.pinnedCurrentUser;\n if (!pinned) return nothing;\n return this.renderRow(pinned);\n }\n\n render() {\n if (!this.section) return nothing;\n return renderTemplate(this);\n }\n}\n"],"names":["formatTotalBet","value","formatGamesPlayed","addViewBox","svg","rankUpSvgVb","rankUpSvg","rankDownSvgVb","rankDownSvg","rankNeutralSvgVb","rankNeutralSvg","OsLeaderboardCasinoTable","LitElement","card","player","DEFAULT_TABLE_TITLE","DEFAULT_CTA_LABEL_FINISHED","DEFAULT_CTA_LABEL","current","p","OS_LEADERBOARD_CASINO_OPEN","prizes","prizeForRank","html","unsafeSVG","delta","username","podiumClass","prize","totalBet","podiumVariantForRank","renderPlayerName","nothing","labelText","pinned","renderTemplate","osLeaderboardCasinoTheme","scss","styles","__decorateClass","property","Component","OS_LEADERBOARD_CASINO_TABLE"],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ const a = '@charset "UTF-8";:host{display:flex;flex-direction:column;flex:1;width:100%;min-height:0}.card-shell{position:relative;flex:1;min-width:0;min-height:0;display:flex}.card{position:relative;background:radial-gradient(120% 80% at 50% -10%,rgba(157,107,255,.12),transparent 60%),linear-gradient(180deg,var(--surface-2),var(--surface)),var(--bg);border:1px solid var(--hairline-strong);border-radius:var(--radius-sm);box-shadow:0 1px #ffffff0d inset,0 40px 80px -40px #000c;overflow-x:auto;-webkit-overflow-scrolling:touch;min-width:0;flex:1;scrollbar-width:thin;scrollbar-color:color-mix(in srgb,var(--gold) 35%,transparent) transparent}.card::-webkit-scrollbar{height:3px}.card::-webkit-scrollbar-track{background:transparent}.card::-webkit-scrollbar-thumb{background:color-mix(in srgb,var(--gold) 35%,transparent);border-radius:99px}.card::-webkit-scrollbar-thumb:hover{background:color-mix(in srgb,var(--gold) 60%,transparent)}.card-accent{position:absolute;top:0;left:50%;transform:translate(-50%);width:min(400px,88%);height:1px;background:linear-gradient(90deg,transparent,var(--gold),transparent);opacity:.5;pointer-events:none;z-index:2}@media(min-width:641px){.card-accent{width:100%;max-width:none;transform:none;left:0;background:linear-gradient(90deg,transparent,var(--gold) 45%,var(--gold) 55%,transparent)}}.table-scroll{display:grid;min-width:min-content;--table-col-gap: 18px;--table-pad-l: var(--table-col-gap);grid-template-columns:52px minmax(min-content,1fr) 56px 68px 72px 60px 60px;column-gap:var(--table-col-gap)}section{display:flex;flex-direction:column;flex:1;min-height:0}.table-head,.row{display:grid;grid-column:1/-1;grid-template-columns:subgrid;align-items:center;row-gap:0;padding:12px 16px 12px var(--table-pad-l)}.col-rank{grid-column:1}.col-player{grid-column:2}.col-games{grid-column:3}.col-win-rate{grid-column:4}.col-bet{grid-column:5}.col-points{grid-column:6}.col-rank-change{grid-column:7}.table-head .col-rank,.table-head .col-player,.table-head .col-bet,.table-head .col-points,.table-head .col-win-rate,.table-head .col-games,.table-head .col-rank-change,.col-rank,.col-player,.col-bet,.col-points,.col-win-rate,.col-games,.col-rank-change{min-width:0}.table-head .col-rank,.table-head .col-player,.col-rank,.col-player{justify-self:start;text-align:left}.table-head .col-rank,.col-rank{position:sticky;left:var(--table-pad-l);z-index:3;justify-self:stretch;align-self:stretch;display:flex;align-items:center}.table-head .col-player,.col-player{position:sticky;left:calc(var(--table-pad-l) + 40px + var(--table-col-gap));z-index:3;justify-self:stretch;align-self:stretch;display:flex;align-items:center}@keyframes scroll-cols-hide{0%{opacity:1}to{opacity:0}}.table-head .col-games,.col-games,.table-head .col-win-rate,.col-win-rate,.table-head .col-bet,.col-bet,.table-head .col-points,.col-points,.table-head .col-rank-change,.col-rank-change{animation:scroll-cols-hide linear both;animation-timeline:view(inline calc(var(--table-pad-l) + 40px + var(--table-col-gap) + var(--sticky-player-width, 120px)) 0px);animation-range:exit 0% exit 100%}.table-head .col-bet,.table-head .col-points,.table-head .col-win-rate,.table-head .col-games,.col-bet,.col-points,.col-win-rate,.col-games{justify-self:stretch;align-self:stretch;display:flex;align-items:center;justify-content:flex-end;text-align:right}.table-head .col-rank-change,.col-rank-change{justify-self:stretch;align-self:stretch;display:flex;align-items:center;justify-content:center;text-align:center}.table-head{padding-top:18px;padding-bottom:14px;border-bottom:1px solid var(--hairline)}.table-head .col-rank,.table-head .col-player,.table-head .col-bet,.table-head .col-points,.table-head .col-win-rate,.table-head .col-games,.table-head .col-rank-change{font-size:11px;font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:var(--text-faint);white-space:nowrap}.row{position:relative;min-height:34px;border-bottom:1px solid var(--hairline);transition:background .25s ease;cursor:pointer}.row:after{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:transparent;transition:background .25s ease}.row:hover{background:linear-gradient(90deg,rgba(255,255,255,.04),transparent 70%)}.row:hover:after{background:var(--gold)}.row:last-child{border-bottom:none}.row.podium-1{background:linear-gradient(90deg,#f4cf6b33,#f4cf6b0d 70%)}.row.podium-1:after{box-shadow:none;transition:background .25s ease,box-shadow .25s ease}.row.podium-1:hover:after{background:var(--gold);box-shadow:0 0 14px 1px #f4cf6b80}.row.podium-1:hover{background:linear-gradient(90deg,#f4cf6b42,#f4cf6b12 70%)}.row.podium-2{background:linear-gradient(90deg,#cdd3df33,#cdd3df0d 70%)}.row.podium-2:after{box-shadow:none;transition:background .25s ease,box-shadow .25s ease}.row.podium-2:hover:after{background:var(--silver);box-shadow:0 0 14px 1px #cdd3df80}.row.podium-2:hover{background:linear-gradient(90deg,#cdd3df42,#cdd3df12 70%)}.row.podium-3{background:linear-gradient(90deg,#d99a6c33,#d99a6c0d 70%)}.row.podium-3:after{box-shadow:none;transition:background .25s ease,box-shadow .25s ease}.row.podium-3:hover:after{background:var(--bronze);box-shadow:0 0 14px 1px #d99a6c80}.row.podium-3:hover{background:linear-gradient(90deg,#d99a6c42,#d99a6c12 70%)}.row.you{background:linear-gradient(90deg,#9d6bff33,#9d6bff0d 70%);min-height:40px}.row.you:after{box-shadow:none;transition:background .25s ease,box-shadow .25s ease}.row.you:hover:after{background:var(--violet);box-shadow:0 0 14px 1px #9d6bff80}.row.you:hover{background:linear-gradient(90deg,#9d6bff42,#9d6bff12 70%)}.rank{display:flex;align-items:center;gap:10px;font-family:var(--font-mono);font-size:14px;font-weight:700;font-variant-numeric:tabular-nums;color:var(--text-dim)}.col-rank os-leaderboard-casino-medal-coin{--coin-text-scale: 2;margin-left:-5px}.player{display:flex;align-items:center;gap:10px;min-width:0;width:100%}.avatar{flex:none;width:40px;height:40px;border-radius:50%;overflow:hidden;display:grid;place-items:center;background:color-mix(in srgb,var(--violet) 18%,var(--surface-solid));box-shadow:0 0 0 1px #ffffff1a inset}.avatar img{width:100%;height:100%;object-fit:cover;display:block}.who{min-width:0;display:flex;flex-direction:column;gap:3px}.username{font-size:14px;font-weight:600;color:var(--text);white-space:nowrap}.you-tag{margin-left:6px;font-size:9px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;padding:2px 7px;border-radius:6px;background:var(--violet-soft);color:var(--violet);border:1px solid rgba(157,107,255,.5);vertical-align:1px}.prize-sub{display:flex;align-items:center;gap:6px;min-width:0}.prize-sub .prize-label{font-size:11px;font-weight:600;color:var(--violet);white-space:nowrap}.prize-sub .prize-icon--table{flex:none;display:grid;place-items:center;width:14px;height:14px;min-width:14px;line-height:0}.prize-sub .prize-icon--table svg{width:14px;height:14px}.prize-sub os-leaderboard-casino-medal-coin{flex:none;display:block;width:16px;height:16px;line-height:0;--coin-text-scale: 1.6}.col-win-rate,.col-games{font-family:var(--font-mono);font-size:14px;font-weight:600;font-variant-numeric:tabular-nums;color:var(--text-dim)}.col-bet{font-family:var(--font-mono);font-size:14px;font-weight:700;font-variant-numeric:tabular-nums;color:var(--gold)}.col-points{font-family:var(--font-mono);font-size:14px;font-weight:600;font-variant-numeric:tabular-nums;color:var(--text-dim)}.col-points b{font-weight:700;color:var(--text)}.col-rank-change{font-variant-numeric:tabular-nums}.chip{display:inline-flex;align-items:center;gap:3px;padding:3px 7px 3px 5px;border-radius:7px;font-family:var(--font-mono);font-weight:700;font-size:12px;line-height:1}.chip svg{width:16px;height:16px;flex-shrink:0}.chip.up{color:#00b200;background:#00b2001f}.chip.down{color:#c20000;background:#c200001f}.chip.flat{color:var(--text-faint)}.empty{grid-column:1/-1;padding:24px 16px;text-align:center;font-size:13px;color:var(--text-dim)}.divider{grid-column:1/-1;position:sticky;left:0;z-index:4;width:var(--table-scrollport-width, 100%);max-width:var(--table-scrollport-width, 100%);box-sizing:border-box;padding:11px 16px;font-size:10.5px;font-weight:700;letter-spacing:.18em;text-transform:uppercase;color:var(--text-faint);background:#ffffff04;border-top:1px solid var(--hairline);border-bottom:1px solid var(--hairline)}.cta{position:relative;overflow:hidden;display:block;width:100%;margin-top:16px;border:none;cursor:pointer;font-family:var(--font-display);font-size:15.5px;font-weight:800;letter-spacing:.01em;color:#1c1306;background:linear-gradient(120deg,var(--gold-strong) 0%,var(--gold) 45%,var(--gold-deep) 100%);padding:16px 22px;border-radius:15px;box-shadow:var(--shadow-gold);transition:transform var(--transition-fast),box-shadow var(--transition-fast)}.cta:after{content:"";position:absolute;top:0;left:-75%;width:45%;height:100%;background:linear-gradient(100deg,transparent,rgba(255,255,255,.35),transparent);transform:skew(-18deg);animation:cta-sweep 3.2s ease-in-out infinite}@keyframes cta-sweep{0%,60%{left:-75%}90%,to{left:125%}}.cta:hover{transform:translateY(-2px);box-shadow:0 18px 52px -14px var(--gold-glow)}@media(max-width:640px){.table-head,.row{padding:10px 16px 10px var(--table-pad-l)}.table-head .col-rank,.table-head .col-player,.table-head .col-bet,.table-head .col-points,.table-head .col-win-rate,.table-head .col-games,.table-head .col-rank-change{font-size:10px;letter-spacing:.1em}.rank,.col-bet,.col-points,.col-win-rate,.col-games,.username{font-size:12px}.avatar{width:32px;height:32px}.medallion{width:26px;height:26px;font-size:11px}.player{gap:8px}}';
2
+ export {
3
+ a as default
4
+ };
5
+ //# sourceMappingURL=table-section.scss.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table-section.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
@@ -0,0 +1,49 @@
1
+ class i {
2
+ toLayout(a) {
3
+ return this.buildLayout(a.config, a.sections);
4
+ }
5
+ applyThemeVars(a, e) {
6
+ const r = e.config.themeVars ?? {};
7
+ for (const t of Object.keys(r))
8
+ a.style.removeProperty(t);
9
+ for (const [t, l] of Object.entries(r))
10
+ a.style.setProperty(t, l);
11
+ }
12
+ buildLayout(a, e) {
13
+ const r = {
14
+ mainOrder: this.mainOrder(a)
15
+ };
16
+ if (this.isEnabled(a, "marquee") && e.marquee && (r.marquee = e.marquee), this.isEnabled(a, "events") && e.events && (r.eventsBanner = e.events), this.isEnabled(a, "hero") && e.hero) {
17
+ const { endTs: t, ...l } = e.hero;
18
+ r.hero = {
19
+ ...l,
20
+ ...t != null ? { endTs: String(t) } : {}
21
+ };
22
+ }
23
+ return this.isEnabled(a, "prize") && e.prize && (r.prize = {
24
+ title: e.prize.title,
25
+ prizePackage: e.prize.prizePackage,
26
+ allocationStrategy: e.prize.allocationStrategy
27
+ }), this.isEnabled(a, "stats") && e.stats && (r.stats = e.stats), this.isEnabled(a, "games") && e.games && (r.games = {
28
+ title: e.games.title,
29
+ games: e.games.games ?? e.games.items ?? []
30
+ }), this.isEnabled(a, "climb") && e.climb && (r.climb = e.climb), this.isEnabled(a, "table") && e.table?.mode === "preview" && (r.table = {
31
+ topPlayers: e.table.topPlayers ?? [],
32
+ currentUser: e.table.currentUser,
33
+ ctaLabel: e.table.ctaLabel ?? a.labels?.cta,
34
+ prizes: e.prize?.prizePackage?.prizes
35
+ }), this.isEnabled(a, "footer") && e.footer && (r.footer = e.footer), this.isEnabled(a, "legals") && e.legals && (r.legals = e.legals), r;
36
+ }
37
+ isEnabled(a, e) {
38
+ return a.enabled.includes(e);
39
+ }
40
+ mainOrder(a) {
41
+ return (a.mainOrder ?? ["prize", "stats", "games", "climb", "table"]).filter((r) => this.isEnabled(a, r));
42
+ }
43
+ }
44
+ const m = new i();
45
+ export {
46
+ i as AdapterService,
47
+ m as adapterService
48
+ };
49
+ //# sourceMappingURL=adapter.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.service.js","sources":["../../../../src/components/os-leaderboard-casino/services/adapter.service.ts"],"sourcesContent":["import type { OsLeaderboardCasinoLayout } from '@os-leaderboard-casino/types/sections.js';\nimport type {\n OsLeaderboardCasinoConfig,\n OsLeaderboardCasinoMainSectionId,\n OsLeaderboardCasinoSectionData,\n OsLeaderboardCasinoSectionId,\n OsLeaderboardCasinoState,\n} from '../types/state.js';\n\n/** Maps facade state into the glam layout shell. */\nexport class AdapterService {\n toLayout(state: OsLeaderboardCasinoState): OsLeaderboardCasinoLayout {\n return this.buildLayout(state.config, state.sections);\n }\n\n applyThemeVars(\n host: HTMLElement,\n state: OsLeaderboardCasinoState,\n ): void {\n const vars = state.config.themeVars ?? {};\n for (const name of Object.keys(vars)) {\n host.style.removeProperty(name);\n }\n for (const [name, value] of Object.entries(vars)) {\n host.style.setProperty(name, value);\n }\n }\n\n private buildLayout(\n config: OsLeaderboardCasinoConfig,\n sections: OsLeaderboardCasinoSectionData,\n ): OsLeaderboardCasinoLayout {\n const layout: OsLeaderboardCasinoLayout = {\n mainOrder: this.mainOrder(config),\n };\n\n if (this.isEnabled(config, 'marquee') && sections.marquee) {\n layout.marquee = sections.marquee;\n }\n if (this.isEnabled(config, 'events') && sections.events) {\n layout.eventsBanner = sections.events;\n }\n if (this.isEnabled(config, 'hero') && sections.hero) {\n const { endTs, ...hero } = sections.hero;\n layout.hero = {\n ...hero,\n ...(endTs != null ? { endTs: String(endTs) } : {}),\n };\n }\n if (this.isEnabled(config, 'prize') && sections.prize) {\n layout.prize = {\n title: sections.prize.title,\n prizePackage: sections.prize.prizePackage,\n allocationStrategy: sections.prize.allocationStrategy,\n };\n }\n if (this.isEnabled(config, 'stats') && sections.stats) {\n layout.stats = sections.stats;\n }\n if (this.isEnabled(config, 'games') && sections.games) {\n layout.games = {\n title: sections.games.title,\n games: sections.games.games ?? sections.games.items ?? [],\n };\n }\n if (this.isEnabled(config, 'climb') && sections.climb) {\n layout.climb = sections.climb;\n }\n if (this.isEnabled(config, 'table') && sections.table?.mode === 'preview') {\n layout.table = {\n topPlayers: sections.table.topPlayers ?? [],\n currentUser: sections.table.currentUser,\n ctaLabel: sections.table.ctaLabel ?? config.labels?.cta,\n prizes: sections.prize?.prizePackage?.prizes,\n };\n }\n if (this.isEnabled(config, 'footer') && sections.footer) {\n layout.footer = sections.footer;\n }\n if (this.isEnabled(config, 'legals') && sections.legals) {\n layout.legals = sections.legals;\n }\n\n return layout;\n }\n\n private isEnabled(\n config: OsLeaderboardCasinoConfig,\n id: OsLeaderboardCasinoSectionId,\n ): boolean {\n return config.enabled.includes(id);\n }\n\n private mainOrder(\n config: OsLeaderboardCasinoConfig,\n ): OsLeaderboardCasinoMainSectionId[] {\n const order =\n config.mainOrder ?? ['prize', 'stats', 'games', 'climb', 'table'];\n return order.filter((id) => this.isEnabled(config, id));\n }\n}\n\nexport const adapterService = new AdapterService();\n"],"names":["AdapterService","state","host","vars","name","value","config","sections","layout","endTs","hero","id","adapterService"],"mappings":"AAUO,MAAMA,EAAe;AAAA,EAC1B,SAASC,GAA4D;AACnE,WAAO,KAAK,YAAYA,EAAM,QAAQA,EAAM,QAAQ;AAAA,EACtD;AAAA,EAEA,eACEC,GACAD,GACM;AACN,UAAME,IAAOF,EAAM,OAAO,aAAa,CAAA;AACvC,eAAWG,KAAQ,OAAO,KAAKD,CAAI;AACjC,MAAAD,EAAK,MAAM,eAAeE,CAAI;AAEhC,eAAW,CAACA,GAAMC,CAAK,KAAK,OAAO,QAAQF,CAAI;AAC7C,MAAAD,EAAK,MAAM,YAAYE,GAAMC,CAAK;AAAA,EAEtC;AAAA,EAEQ,YACNC,GACAC,GAC2B;AAC3B,UAAMC,IAAoC;AAAA,MACxC,WAAW,KAAK,UAAUF,CAAM;AAAA,IAAA;AASlC,QANI,KAAK,UAAUA,GAAQ,SAAS,KAAKC,EAAS,YAChDC,EAAO,UAAUD,EAAS,UAExB,KAAK,UAAUD,GAAQ,QAAQ,KAAKC,EAAS,WAC/CC,EAAO,eAAeD,EAAS,SAE7B,KAAK,UAAUD,GAAQ,MAAM,KAAKC,EAAS,MAAM;AACnD,YAAM,EAAE,OAAAE,GAAO,GAAGC,EAAA,IAASH,EAAS;AACpC,MAAAC,EAAO,OAAO;AAAA,QACZ,GAAGE;AAAA,QACH,GAAID,KAAS,OAAO,EAAE,OAAO,OAAOA,CAAK,MAAM,CAAA;AAAA,MAAC;AAAA,IAEpD;AACA,WAAI,KAAK,UAAUH,GAAQ,OAAO,KAAKC,EAAS,UAC9CC,EAAO,QAAQ;AAAA,MACb,OAAOD,EAAS,MAAM;AAAA,MACtB,cAAcA,EAAS,MAAM;AAAA,MAC7B,oBAAoBA,EAAS,MAAM;AAAA,IAAA,IAGnC,KAAK,UAAUD,GAAQ,OAAO,KAAKC,EAAS,UAC9CC,EAAO,QAAQD,EAAS,QAEtB,KAAK,UAAUD,GAAQ,OAAO,KAAKC,EAAS,UAC9CC,EAAO,QAAQ;AAAA,MACb,OAAOD,EAAS,MAAM;AAAA,MACtB,OAAOA,EAAS,MAAM,SAASA,EAAS,MAAM,SAAS,CAAA;AAAA,IAAC,IAGxD,KAAK,UAAUD,GAAQ,OAAO,KAAKC,EAAS,UAC9CC,EAAO,QAAQD,EAAS,QAEtB,KAAK,UAAUD,GAAQ,OAAO,KAAKC,EAAS,OAAO,SAAS,cAC9DC,EAAO,QAAQ;AAAA,MACb,YAAYD,EAAS,MAAM,cAAc,CAAA;AAAA,MACzC,aAAaA,EAAS,MAAM;AAAA,MAC5B,UAAUA,EAAS,MAAM,YAAYD,EAAO,QAAQ;AAAA,MACpD,QAAQC,EAAS,OAAO,cAAc;AAAA,IAAA,IAGtC,KAAK,UAAUD,GAAQ,QAAQ,KAAKC,EAAS,WAC/CC,EAAO,SAASD,EAAS,SAEvB,KAAK,UAAUD,GAAQ,QAAQ,KAAKC,EAAS,WAC/CC,EAAO,SAASD,EAAS,SAGpBC;AAAA,EACT;AAAA,EAEQ,UACNF,GACAK,GACS;AACT,WAAOL,EAAO,QAAQ,SAASK,CAAE;AAAA,EACnC;AAAA,EAEQ,UACNL,GACoC;AAGpC,YADEA,EAAO,aAAa,CAAC,SAAS,SAAS,SAAS,SAAS,OAAO,GACrD,OAAO,CAACK,MAAO,KAAK,UAAUL,GAAQK,CAAE,CAAC;AAAA,EACxD;AACF;AAEO,MAAMC,IAAiB,IAAIZ,EAAA;"}
@@ -0,0 +1,192 @@
1
+ import c from "../assets/icons/prize.casino-credits.svg.js";
2
+ import m from "../assets/icons/prize.default.svg.js";
3
+ import g from "../assets/icons/prize.elite-bonus.svg.js";
4
+ import l from "../assets/icons/prize.free-spins.svg.js";
5
+ import _ from "../assets/icons/prize.grand-jackpot.svg.js";
6
+ import u from "../assets/icons/prize.high-roller.svg.js";
7
+ import p from "../assets/icons/prize.mystery-bonus.svg.js";
8
+ import f from "../assets/icons/stat.clock.svg.js";
9
+ import v from "../assets/icons/stat.gift.svg.js";
10
+ import d from "../assets/icons/stat.users.svg.js";
11
+ import h from "../assets/icons/table.rank-down.svg.js";
12
+ import b from "../assets/icons/table.rank-neutral.svg.js";
13
+ import w from "../assets/icons/table.rank-up.svg.js";
14
+ import y from "../assets/icons/vip.crown.svg.js";
15
+ import I from "../assets/icons/win.bag.svg.js";
16
+ import k from "../assets/icons/win.bolt.svg.js";
17
+ import z from "../assets/icons/win.coin.svg.js";
18
+ import S from "../assets/icons/win.fire.svg.js";
19
+ import $ from "../assets/icons/win.gem.svg.js";
20
+ import N from "../assets/icons/win.trophy.svg.js";
21
+ import { html as o } from "lit";
22
+ import { unsafeSVG as n } from "lit/directives/unsafe-svg.js";
23
+ import { labelText as O } from "../types/data.js";
24
+ import E from "../assets/images/games/cards.png.js";
25
+ import L from "../assets/images/games/chips.png.js";
26
+ import P from "../assets/images/games/dice.png.js";
27
+ import j from "../assets/images/games/gates-of-olympus.png.js";
28
+ import G from "../assets/images/games/roulette.png.js";
29
+ import C from "../assets/images/games/slot-machine.png.js";
30
+ const M = /* @__PURE__ */ Object.assign({
31
+ "../assets/icons/prize.casino-credits.svg": c,
32
+ "../assets/icons/prize.default.svg": m,
33
+ "../assets/icons/prize.elite-bonus.svg": g,
34
+ "../assets/icons/prize.free-spins.svg": l,
35
+ "../assets/icons/prize.grand-jackpot.svg": _,
36
+ "../assets/icons/prize.high-roller.svg": u,
37
+ "../assets/icons/prize.mystery-bonus.svg": p,
38
+ "../assets/icons/stat.clock.svg": f,
39
+ "../assets/icons/stat.gift.svg": v,
40
+ "../assets/icons/stat.users.svg": d,
41
+ "../assets/icons/table.rank-down.svg": h,
42
+ "../assets/icons/table.rank-neutral.svg": b,
43
+ "../assets/icons/table.rank-up.svg": w,
44
+ "../assets/icons/vip.crown.svg": y,
45
+ "../assets/icons/win.bag.svg": I,
46
+ "../assets/icons/win.bolt.svg": k,
47
+ "../assets/icons/win.coin.svg": z,
48
+ "../assets/icons/win.fire.svg": S,
49
+ "../assets/icons/win.gem.svg": $,
50
+ "../assets/icons/win.trophy.svg": N
51
+ }), A = {
52
+ "game.cards": E,
53
+ "game.chips": L,
54
+ "game.dice": P,
55
+ "game.gates-of-olympus": j,
56
+ "game.roulette": G,
57
+ "game.slot-machine": C
58
+ }, a = [
59
+ "game.cards",
60
+ "game.chips",
61
+ "game.dice",
62
+ "game.gates-of-olympus",
63
+ "game.roulette",
64
+ "game.slot-machine"
65
+ ], R = {
66
+ cards: "game.cards",
67
+ chips: "game.chips",
68
+ dice: "game.dice",
69
+ "gates-of-olympus": "game.gates-of-olympus",
70
+ roulette: "game.roulette",
71
+ "slot-machine": "game.slot-machine"
72
+ };
73
+ function U(r) {
74
+ return r.match(/\/([^/]+)\.svg$/)?.[1] ?? "";
75
+ }
76
+ function x(r, e) {
77
+ return {
78
+ name: r,
79
+ kind: "svg",
80
+ svg() {
81
+ return o`${n(e)}`;
82
+ },
83
+ render({ className: s = "" } = {}) {
84
+ const t = o`${n(e)}`;
85
+ return s ? o`<span class=${s}>${t}</span>` : t;
86
+ }
87
+ };
88
+ }
89
+ function D(r, e) {
90
+ return {
91
+ name: r,
92
+ kind: "image",
93
+ url: e,
94
+ svg() {
95
+ throw new Error(`[IconService] Icon "${r}" is an image, not SVG`);
96
+ },
97
+ render({ className: s = "", alt: t = "" } = {}) {
98
+ return o`<img
99
+ src=${e}
100
+ alt=${t}
101
+ class=${s}
102
+ loading="lazy"
103
+ />`;
104
+ }
105
+ };
106
+ }
107
+ function F(r) {
108
+ const e = O(r).toLowerCase();
109
+ return e.includes("grand jackpot") || e === "jackpot" ? "prize.grand-jackpot" : e.includes("elite bonus") ? "prize.elite-bonus" : e.includes("high roller") ? "prize.high-roller" : e.includes("free spin") ? "prize.free-spins" : e.includes("casino credit") ? "prize.casino-credits" : e.includes("mystery") ? "prize.mystery-bonus" : "prize.default";
110
+ }
111
+ function H(r, e) {
112
+ return R[r] ?? a[e % a.length];
113
+ }
114
+ class T {
115
+ constructor() {
116
+ this.registry = /* @__PURE__ */ new Map(), this.loadPromise = null, this.loaded = !1;
117
+ }
118
+ /** Load all bundled SVG and game image icons. Call once on app start. */
119
+ async load() {
120
+ if (!this.loaded)
121
+ return this.loadPromise ? this.loadPromise : (this.loadPromise = (async () => {
122
+ for (const [e, s] of Object.entries(M)) {
123
+ const t = U(e);
124
+ t && this.registry.set(t, x(t, s));
125
+ }
126
+ for (const [e, s] of Object.entries(A))
127
+ this.registry.set(e, D(e, s));
128
+ this.loaded = !0;
129
+ })(), this.loadPromise);
130
+ }
131
+ /** Pick a loaded icon by registry name, e.g. `prize.free-spins`. */
132
+ get(e) {
133
+ this.assertLoaded();
134
+ const s = this.registry.get(e);
135
+ if (!s)
136
+ throw new Error(`[IconService] Unknown icon "${e}"`);
137
+ return s;
138
+ }
139
+ has(e) {
140
+ return this.assertLoaded(), this.registry.has(e);
141
+ }
142
+ resolvePrizeIconName(e) {
143
+ return F(e);
144
+ }
145
+ resolveGameIconName(e, s) {
146
+ return H(e, s);
147
+ }
148
+ resolveWinIconName(e, s) {
149
+ const t = `win.${e}`;
150
+ if (this.has(t)) return t;
151
+ const i = [
152
+ "win.bag",
153
+ "win.coin",
154
+ "win.trophy",
155
+ "win.fire",
156
+ "win.gem",
157
+ "win.bolt"
158
+ ];
159
+ return i[s % i.length];
160
+ }
161
+ resolveStatIconName(e) {
162
+ const s = `stat.${e}`;
163
+ return this.has(s) ? s : "stat.users";
164
+ }
165
+ render(e, s) {
166
+ return this.get(e).render(s);
167
+ }
168
+ svg(e) {
169
+ return this.get(e).svg();
170
+ }
171
+ url(e) {
172
+ const s = this.get(e);
173
+ if (s.kind !== "image" || !s.url)
174
+ throw new Error(`[IconService] Icon "${e}" has no image URL`);
175
+ return s.url;
176
+ }
177
+ assertLoaded() {
178
+ if (!this.loaded)
179
+ throw new Error("[IconService] Call load() before get()");
180
+ }
181
+ }
182
+ const V = new T();
183
+ function we(r) {
184
+ const e = r.startsWith("win.") ? r : `win.${r}`;
185
+ return V.svg(e);
186
+ }
187
+ export {
188
+ T as IconService,
189
+ V as iconService,
190
+ we as winIcon
191
+ };
192
+ //# sourceMappingURL=icon.service.js.map