@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
@@ -1,180 +0,0 @@
1
- :host {
2
- display: block;
3
- }
4
-
5
- .feed-container {
6
- border-radius: var(--surface-radius);
7
- border: 1px solid var(--surface-border-color);
8
- background: var(--surface-gradient);
9
- box-shadow: var(--surface-shadow);
10
- overflow: hidden;
11
- }
12
-
13
- .feed-header {
14
- display: flex;
15
- align-items: center;
16
- justify-content: space-between;
17
- padding: 0.75rem 1rem;
18
- border-bottom: 1px solid var(--border-subtle);
19
- background: var(--muted);
20
- }
21
-
22
- .header-left {
23
- display: flex;
24
- align-items: center;
25
- gap: 0.5rem;
26
- }
27
-
28
- .live-dot {
29
- position: relative;
30
- width: 8px;
31
- height: 8px;
32
- background: var(--success);
33
- border-radius: 50%;
34
-
35
- &::before {
36
- content: '';
37
- position: absolute;
38
- inset: 0;
39
- border-radius: 50%;
40
- background: var(--success);
41
- animation: ping 1.5s ease-out infinite;
42
- }
43
- }
44
-
45
- @keyframes ping {
46
- 0% {
47
- transform: scale(1);
48
- opacity: 1;
49
- }
50
- 100% {
51
- transform: scale(2.5);
52
- opacity: 0;
53
- }
54
- }
55
-
56
- .header-title {
57
- font-size: 0.875rem;
58
- font-weight: 600;
59
- }
60
-
61
- .event-count {
62
- font-size: 0.65rem;
63
- padding: 0.2rem 0.5rem;
64
- border-radius: var(--radius-sm);
65
- border: 1px solid var(--inset-border);
66
- background: var(--inset-bg);
67
- color: var(--muted-foreground);
68
- }
69
-
70
- .feed-body {
71
- max-height: 400px;
72
- overflow-y: auto;
73
- }
74
-
75
- .activity-item {
76
- display: flex;
77
- align-items: flex-start;
78
- gap: 0.75rem;
79
- padding: 0.75rem 1rem;
80
- border-bottom: 1px solid var(--border-subtle);
81
- transition: background var(--transition-fast);
82
- animation: slide-in 0.3s ease-out forwards;
83
- opacity: 0;
84
-
85
- &:hover {
86
- background: var(--inset-hover-bg);
87
- }
88
-
89
- &:last-child {
90
- border-bottom: none;
91
- }
92
- }
93
-
94
- @keyframes slide-in {
95
- from {
96
- opacity: 0;
97
- transform: translateY(-5px);
98
- }
99
- to {
100
- opacity: 1;
101
- transform: translateY(0);
102
- }
103
- }
104
-
105
- .activity-content {
106
- flex: 1;
107
- min-width: 0;
108
- }
109
-
110
- .activity-header {
111
- display: flex;
112
- align-items: center;
113
- gap: 0.5rem;
114
- flex-wrap: wrap;
115
- }
116
-
117
- .player-name {
118
- font-size: 0.875rem;
119
- font-weight: 600;
120
- }
121
-
122
- .activity-badge {
123
- display: inline-flex;
124
- align-items: center;
125
- gap: 0.25rem;
126
- font-size: 0.6rem;
127
- padding: 0.15rem 0.4rem;
128
- border-radius: var(--radius-sm);
129
- border: 1px solid;
130
- font-weight: 600;
131
- text-transform: uppercase;
132
- letter-spacing: 0.04em;
133
-
134
- &.win {
135
- background: var(--badge-success-bg);
136
- border-color: var(--badge-success-border);
137
- color: var(--success);
138
- }
139
-
140
- &.jackpot {
141
- background: var(--medal-gold-bg);
142
- border-color: var(--medal-gold-border);
143
- color: var(--gold);
144
- }
145
-
146
- &.streak {
147
- background: var(--badge-warning-bg);
148
- border-color: var(--badge-warning-border);
149
- color: var(--warning);
150
- }
151
-
152
- &.achievement {
153
- background: var(--badge-accent-bg);
154
- border-color: var(--badge-accent-border);
155
- color: var(--primary);
156
- }
157
- }
158
-
159
- .activity-message {
160
- font-size: 0.875rem;
161
- color: var(--muted-foreground);
162
- margin-top: 0.25rem;
163
- white-space: nowrap;
164
- overflow: hidden;
165
- text-overflow: ellipsis;
166
- }
167
-
168
- .activity-amount {
169
- font-family: var(--font-mono);
170
- font-weight: 700;
171
- color: var(--success);
172
- font-size: 0.875rem;
173
- margin-top: 0.25rem;
174
- }
175
-
176
- .activity-time {
177
- font-size: 0.65rem;
178
- color: var(--muted-foreground);
179
- white-space: nowrap;
180
- }
@@ -1,88 +0,0 @@
1
- import { LitElement } from 'lit';
2
- import { property } from 'lit/decorators.js';
3
- import { Component } from '../../../../../../lib/lit/component.js';
4
- import { scss } from '../../../../../../lib/lit/scss.js';
5
- import { SF_LEADERBOARD_ACTIVITY_FEED, SF_LEADERBOARD_PLAYER_AVATAR } from '../../constants/tags.js';
6
- import { sfLeaderboardTheme } from '../../../theme/styles.js';
7
- import type { Activity } from '../../types/data.js';
8
- import { formatCurrency, formatTime } from '../../utils/utils.js';
9
- import '../player-avatar/player-avatar.js';
10
- import type { ActivityFeedHost } from './activity-feed.host.js';
11
- import renderTemplate from './activity-feed.html?lit-html';
12
- import styles from './activity-feed.scss?inline';
13
-
14
- @Component({ selector: SF_LEADERBOARD_ACTIVITY_FEED })
15
- export class SfLeaderboardActivityFeed extends LitElement
16
- implements ActivityFeedHost {
17
- static styles = [sfLeaderboardTheme, scss(styles)];
18
-
19
- @property({ type: Array }) activities: Activity[] = [];
20
-
21
- private getActivityBadge(type: Activity['type']) {
22
- const badges: Record<
23
- Activity['type'],
24
- { label: string; icon: string }
25
- > = {
26
- win: { label: 'WIN', icon: '💵' },
27
- jackpot: { label: 'JACKPOT', icon: '⚡' },
28
- streak: { label: 'STREAK', icon: '🔥' },
29
- achievement: { label: 'ACHIEVEMENT', icon: '🏆' },
30
- };
31
- return badges[type];
32
- }
33
-
34
- private createActivityItem(activity: Activity, index: number): HTMLElement {
35
- const badge = this.getActivityBadge(activity.type);
36
-
37
- const item = document.createElement('div');
38
- item.className = 'activity-item';
39
- item.style.animationDelay = `${index * 100}ms`;
40
-
41
- const avatar = document.createElement(SF_LEADERBOARD_PLAYER_AVATAR);
42
- avatar.username = activity.player.username;
43
- avatar.avatar = activity.player.avatar || '';
44
- avatar.size = 'sm';
45
-
46
- const content = document.createElement('div');
47
- content.className = 'activity-content';
48
-
49
- const header = document.createElement('div');
50
- header.className = 'activity-header';
51
- const playerName = document.createElement('span');
52
- playerName.className = 'player-name';
53
- playerName.textContent = activity.player.username;
54
- const badgeEl = document.createElement('span');
55
- badgeEl.className = `activity-badge ${activity.type}`;
56
- badgeEl.textContent = `${badge.icon} ${badge.label}`;
57
- header.append(playerName, badgeEl);
58
-
59
- const message = document.createElement('p');
60
- message.className = 'activity-message';
61
- message.textContent = activity.message;
62
- content.append(header, message);
63
-
64
- if (activity.amount) {
65
- const amount = document.createElement('p');
66
- amount.className = 'activity-amount';
67
- amount.textContent = `+${formatCurrency(activity.amount)}`;
68
- content.append(amount);
69
- }
70
-
71
- const time = document.createElement('span');
72
- time.className = 'activity-time';
73
- time.textContent = formatTime(activity.timestamp);
74
-
75
- item.append(avatar, content, time);
76
- return item;
77
- }
78
-
79
- renderActivities() {
80
- return this.activities.map((activity, index) =>
81
- this.createActivityItem(activity, index),
82
- );
83
- }
84
-
85
- render() {
86
- return renderTemplate(this);
87
- }
88
- }
@@ -1,12 +0,0 @@
1
- import type { TemplateResult } from 'lit';
2
- import type { Category, TimeFrame } from '../../types/data.js';
3
-
4
- export interface FiltersHost {
5
- activeTimeframe: TimeFrame;
6
- activeCategory: Category;
7
- searchQuery: string;
8
- renderTimeframeTabs(): TemplateResult;
9
- renderCategoryOptions(): TemplateResult;
10
- handleSearchInput(e: Event): void;
11
- handleCategoryChange(e: Event): void;
12
- }
@@ -1,22 +0,0 @@
1
- <div class="filters">
2
- <div class="search-wrapper">
3
- <span class="search-icon">🔍</span>
4
- <input
5
- type="text"
6
- class="search-input"
7
- placeholder="Search players..."
8
- .value="${host.searchQuery}"
9
- @input="${host.handleSearchInput}"
10
- />
11
- </div>
12
-
13
- <div class="timeframe-tabs">${host.renderTimeframeTabs()}</div>
14
-
15
- <select
16
- class="category-select"
17
- .value="${host.activeCategory}"
18
- @change="${host.handleCategoryChange}"
19
- >
20
- ${host.renderCategoryOptions()}
21
- </select>
22
- </div>
@@ -1,122 +0,0 @@
1
- :host {
2
- display: block;
3
- }
4
-
5
- .filters {
6
- display: flex;
7
- flex-direction: column;
8
- gap: 0.75rem;
9
- width: 100%;
10
- min-width: 0;
11
-
12
- @media (min-width: 640px) {
13
- flex-direction: row;
14
- flex-wrap: wrap;
15
- align-items: center;
16
- gap: 1rem;
17
- }
18
- }
19
-
20
- .search-wrapper {
21
- position: relative;
22
- flex: 1;
23
- }
24
-
25
- .search-icon {
26
- position: absolute;
27
- left: 12px;
28
- top: 50%;
29
- transform: translateY(-50%);
30
- color: var(--muted-foreground);
31
- font-size: 0.875rem;
32
- }
33
-
34
- .search-input {
35
- width: 100%;
36
- padding: 0.625rem 1rem 0.625rem 2.5rem;
37
- border-radius: var(--radius-sm);
38
- border: 1px solid var(--surface-border-color);
39
- background: var(--inset-bg);
40
- color: var(--foreground);
41
- font-size: 0.875rem;
42
- font-family: inherit;
43
- outline: none;
44
- transition: border-color 0.2s ease;
45
-
46
- &::placeholder {
47
- color: var(--muted-foreground);
48
- }
49
-
50
- &:focus {
51
- border-color: var(--primary);
52
- }
53
- }
54
-
55
- .timeframe-tabs {
56
- display: flex;
57
- align-items: center;
58
- gap: 4px;
59
- padding: 4px;
60
- background: var(--inset-bg);
61
- border: 1px solid var(--inset-border);
62
- border-radius: var(--radius-sm);
63
- width: 100%;
64
- overflow-x: auto;
65
- -webkit-overflow-scrolling: touch;
66
- flex-wrap: nowrap;
67
-
68
- @media (min-width: 640px) {
69
- width: auto;
70
- overflow-x: visible;
71
- }
72
- }
73
-
74
- .tab-btn {
75
- padding: 0.375rem 0.75rem;
76
- border: none;
77
- border-radius: var(--radius-sm);
78
- background: transparent;
79
- color: var(--muted-foreground);
80
- font-size: 0.75rem;
81
- font-weight: 500;
82
- font-family: inherit;
83
- cursor: pointer;
84
- transition: all 0.2s ease;
85
-
86
- &:hover {
87
- color: var(--foreground);
88
- }
89
-
90
- &.active {
91
- background: var(--accent-gradient);
92
- color: var(--primary-foreground);
93
- box-shadow: var(--surface-shadow);
94
- }
95
- }
96
-
97
- .category-select {
98
- display: flex;
99
- align-items: center;
100
- gap: 0.5rem;
101
- padding: 0.5rem 1rem;
102
- border-radius: var(--radius-sm);
103
- border: 1px solid var(--surface-border-color);
104
- background: var(--surface-gradient);
105
- color: var(--foreground);
106
- font-size: 0.875rem;
107
- font-family: inherit;
108
- cursor: pointer;
109
- outline: none;
110
- width: 100%;
111
- min-width: 0;
112
- max-width: 100%;
113
-
114
- @media (min-width: 640px) {
115
- width: auto;
116
- min-width: 140px;
117
- }
118
-
119
- &:focus {
120
- border-color: var(--primary);
121
- }
122
- }
@@ -1,75 +0,0 @@
1
- import { LitElement } from 'lit';
2
- import { property } from 'lit/decorators.js';
3
- import { Component } from '../../../../../../lib/lit/component.js';
4
- import { scss } from '../../../../../../lib/lit/scss.js';
5
- import {
6
- CATEGORY_OPTIONS,
7
- DEFAULT_CATEGORY,
8
- DEFAULT_TIMEFRAME,
9
- SF_LEADERBOARD_FILTERS,
10
- TIMEFRAME_OPTIONS,
11
- } from '../../constants/index.js';
12
- import {
13
- SF_LEADERBOARD_CATEGORY_CHANGE,
14
- SF_LEADERBOARD_SEARCH_CHANGE,
15
- SF_LEADERBOARD_TIMEFRAME_CHANGE,
16
- } from '../../types/events.js';
17
- import { sfLeaderboardTheme } from '../../../theme/styles.js';
18
- import type { Category, TimeFrame } from '../../types/data.js';
19
- import type { FiltersHost } from './filters.host.js';
20
- import renderTemplate from './filters.html?lit-html';
21
- import styles from './filters.scss?inline';
22
-
23
- @Component({ selector: SF_LEADERBOARD_FILTERS })
24
- export class SfLeaderboardFilters extends LitElement implements FiltersHost {
25
- static styles = [sfLeaderboardTheme, scss(styles)];
26
-
27
- @property({ type: String }) activeTimeframe: TimeFrame = DEFAULT_TIMEFRAME;
28
- @property({ type: String }) activeCategory: Category = DEFAULT_CATEGORY;
29
- @property({ type: String }) searchQuery = '';
30
-
31
- private emit<T>(name: string, detail: T) {
32
- this.dispatchEvent(
33
- new CustomEvent(name, { detail, bubbles: true, composed: true }),
34
- );
35
- }
36
-
37
- handleSearchInput(e: Event) {
38
- const input = e.target as HTMLInputElement;
39
- this.emit(SF_LEADERBOARD_SEARCH_CHANGE, input.value);
40
- }
41
-
42
- handleTimeframeClick(value: TimeFrame) {
43
- this.emit(SF_LEADERBOARD_TIMEFRAME_CHANGE, value);
44
- }
45
-
46
- handleCategoryChange(e: Event) {
47
- const select = e.target as HTMLSelectElement;
48
- this.emit(SF_LEADERBOARD_CATEGORY_CHANGE, select.value as Category);
49
- }
50
-
51
- renderTimeframeTabs() {
52
- return TIMEFRAME_OPTIONS.map((tf) => {
53
- const btn = document.createElement('button');
54
- btn.className = `tab-btn ${this.activeTimeframe === tf.value ? 'active' : ''}`;
55
- btn.textContent = tf.label;
56
- btn.addEventListener('click', () =>
57
- this.handleTimeframeClick(tf.value as TimeFrame),
58
- );
59
- return btn;
60
- });
61
- }
62
-
63
- renderCategoryOptions() {
64
- return CATEGORY_OPTIONS.map((cat) => {
65
- const option = document.createElement('option');
66
- option.value = cat.value;
67
- option.textContent = cat.label;
68
- return option;
69
- });
70
- }
71
-
72
- render() {
73
- return renderTemplate(this);
74
- }
75
- }
@@ -1,9 +0,0 @@
1
- export interface PlayerAvatarHost {
2
- username: string;
3
- avatar: string;
4
- initials: string;
5
- hasAvatar: boolean;
6
- size: 'sm' | 'md' | 'lg' | 'xl';
7
- isOnline: boolean;
8
- highlight: boolean;
9
- }
@@ -1,5 +0,0 @@
1
- <div class="avatar ${host.size} ${host.highlight ? 'highlight' : ''}">
2
- <img ?hidden="${!host.hasAvatar}" src="${host.avatar}" alt="${host.username}" />
3
- <span ?hidden="${host.hasAvatar}">${host.initials}</span>
4
- </div>
5
- <span class="online-indicator" ?hidden="${!host.isOnline}"></span>
@@ -1,81 +0,0 @@
1
- :host {
2
- display: inline-block;
3
- position: relative;
4
- }
5
-
6
- .avatar {
7
- display: flex;
8
- align-items: center;
9
- justify-content: center;
10
- border-radius: 50%;
11
- border: 2px solid var(--border);
12
- background: var(--secondary);
13
- color: var(--foreground);
14
- font-weight: 700;
15
- overflow: hidden;
16
-
17
- &.sm {
18
- width: 32px;
19
- height: 32px;
20
- font-size: 0.7rem;
21
- }
22
-
23
- &.md {
24
- width: 48px;
25
- height: 48px;
26
- font-size: 0.875rem;
27
- }
28
-
29
- &.lg {
30
- width: 64px;
31
- height: 64px;
32
- font-size: 1.25rem;
33
- }
34
-
35
- &.xl {
36
- width: 80px;
37
- height: 80px;
38
- font-size: 1.5rem;
39
- }
40
-
41
- &.highlight {
42
- border-color: var(--primary);
43
- }
44
-
45
- img {
46
- width: 100%;
47
- height: 100%;
48
- object-fit: cover;
49
- }
50
- }
51
-
52
- .online-indicator {
53
- position: absolute;
54
- bottom: -2px;
55
- right: -2px;
56
- width: 12px;
57
- height: 12px;
58
- background: var(--success);
59
- border-radius: 50%;
60
- border: 2px solid var(--surface-border-color);
61
-
62
- &::before {
63
- content: '';
64
- position: absolute;
65
- inset: 0;
66
- border-radius: 50%;
67
- background: var(--success);
68
- animation: pulse-ring 1.5s ease-out infinite;
69
- }
70
- }
71
-
72
- @keyframes pulse-ring {
73
- 0% {
74
- transform: scale(0.8);
75
- opacity: 1;
76
- }
77
- 100% {
78
- transform: scale(2);
79
- opacity: 0;
80
- }
81
- }
@@ -1,34 +0,0 @@
1
- import { LitElement } from 'lit';
2
- import { property } from 'lit/decorators.js';
3
- import { Component } from '../../../../../../lib/lit/component.js';
4
- import { scss } from '../../../../../../lib/lit/scss.js';
5
- import { SF_LEADERBOARD_PLAYER_AVATAR } from '../../constants/tags.js';
6
- import { sfLeaderboardTheme } from '../../../theme/styles.js';
7
- import { getInitials } from '../../utils/utils.js';
8
- import type { PlayerAvatarHost } from './player-avatar.host.js';
9
- import renderTemplate from './player-avatar.html?lit-html';
10
- import styles from './player-avatar.scss?inline';
11
-
12
- @Component({ selector: SF_LEADERBOARD_PLAYER_AVATAR })
13
- export class SfLeaderboardPlayerAvatar extends LitElement
14
- implements PlayerAvatarHost {
15
- static styles = [sfLeaderboardTheme, scss(styles)];
16
-
17
- @property({ type: String }) username = '';
18
- @property({ type: String }) avatar = '';
19
- @property({ type: String }) size: 'sm' | 'md' | 'lg' | 'xl' = 'md';
20
- @property({ type: Boolean }) isOnline = false;
21
- @property({ type: Boolean }) highlight = false;
22
-
23
- get hasAvatar(): boolean {
24
- return Boolean(this.avatar);
25
- }
26
-
27
- get initials(): string {
28
- return getInitials(this.username);
29
- }
30
-
31
- render() {
32
- return renderTemplate(this);
33
- }
34
- }
@@ -1,24 +0,0 @@
1
- import type { Player } from '../../types/data.js';
2
- import { formatCurrency, getInitials } from '../../utils/utils.js';
3
- import type { PodiumEntry } from './podium.types.js';
4
-
5
- function badgeFor(player: Player): string {
6
- if (player.streak >= 5) return '🔥';
7
- if (player.rank === 1) return '👑';
8
- return '✌️';
9
- }
10
-
11
- export function mapPlayerToPodiumEntry(player: Player): PodiumEntry {
12
- return {
13
- rank: player.rank,
14
- initials: getInitials(player.username),
15
- username: player.username,
16
- earnings: formatCurrency(player.totalWinnings),
17
- winRate: `${player.winRate}% WR`,
18
- badgeEmoji: badgeFor(player),
19
- };
20
- }
21
-
22
- export function mapPlayersToPodiumEntries(players: Player[]): PodiumEntry[] {
23
- return players.map(mapPlayerToPodiumEntry);
24
- }
@@ -1,10 +0,0 @@
1
- import type { PodiumEntry } from './podium.types.js';
2
-
3
- /** Host API required by `podium.html`. */
4
- export interface PodiumHost {
5
- /** Set when `hasPodium` is true (template only renders then). */
6
- readonly first: PodiumEntry;
7
- readonly second: PodiumEntry;
8
- readonly third: PodiumEntry;
9
- readonly hasPodium: boolean;
10
- }