@oddsmith/ui 1.0.5 → 1.0.7

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 (436) hide show
  1. package/README.md +10 -4
  2. package/dist/.shared/index.ts +5 -0
  3. package/dist/.shared/labels-engine/engine.d.ts +22 -0
  4. package/dist/.shared/labels-engine/engine.ts +70 -0
  5. package/dist/.shared/labels-engine/index.d.ts +1 -0
  6. package/dist/.shared/labels-engine/index.ts +1 -0
  7. package/dist/.shared/lib/lit/component.ts +10 -0
  8. package/dist/.shared/lib/lit/safe-custom-element.ts +12 -0
  9. package/dist/.shared/lib/lit/scss.ts +6 -0
  10. package/dist/{shared/lib/lit/template.d.ts → .shared/lib/lit/template.ts} +2 -1
  11. package/dist/.shared/theme-engine/animation.d.ts +5 -0
  12. package/dist/.shared/theme-engine/animation.ts +40 -0
  13. package/dist/.shared/theme-engine/default-theme.d.ts +24 -0
  14. package/dist/.shared/theme-engine/default-theme.ts +38 -0
  15. package/dist/.shared/theme-engine/engine.d.ts +22 -0
  16. package/dist/.shared/theme-engine/engine.ts +151 -0
  17. package/dist/.shared/theme-engine/index.d.ts +2 -0
  18. package/dist/.shared/theme-engine/index.ts +8 -0
  19. package/dist/assets/config/data.js +279 -0
  20. package/dist/assets/config/images/events/bolt.svg +4 -0
  21. package/dist/assets/config/images/events/boost.svg +6 -0
  22. package/dist/assets/config/images/events/clock.svg +4 -0
  23. package/dist/assets/config/images/events/fire.svg +4 -0
  24. package/dist/assets/config/images/events/gift.svg +5 -0
  25. package/dist/assets/config/images/events/star.svg +4 -0
  26. package/dist/assets/config/images/games/gates-of-olympus.png +0 -0
  27. package/dist/assets/config/labels.js +79 -0
  28. package/dist/assets/config/theme.js +15 -0
  29. package/dist/assets/icons/prize.medal.svg +5 -0
  30. package/dist/assets/image.fallback.png +0 -0
  31. package/dist/bootstrap/casino.bootstrap.d.ts +32 -0
  32. package/dist/bootstrap/index.d.ts +5 -0
  33. package/dist/constants/default-data.d.ts +8 -0
  34. package/dist/constants/defaults.d.ts +16 -0
  35. package/dist/{components/os-leaderboard-casino/constants → constants}/index.d.ts +1 -0
  36. package/dist/{components/os-leaderboard-casino/constants → constants}/tags.d.ts +0 -9
  37. package/dist/container/os-leaderboard-casino.d.ts +59 -0
  38. package/dist/container/os-leaderboard-casino.host.d.ts +5 -0
  39. package/dist/index.d.ts +3 -0
  40. package/dist/index.js +2483 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/{components/os-leaderboard-casino/sections → sections}/climb-section/climb-section.d.ts +7 -2
  43. package/dist/{components/os-leaderboard-casino/sections → sections}/climb-section/climb-section.host.d.ts +5 -2
  44. package/dist/sections/climb-section/types/labels.d.ts +8 -0
  45. package/dist/sections/climb-section/types/view.d.ts +13 -0
  46. package/dist/sections/events-banner/events-banner.d.ts +30 -0
  47. package/dist/sections/events-banner/events-banner.host.d.ts +15 -0
  48. package/dist/sections/events-banner/types/data.d.ts +18 -0
  49. package/dist/sections/events-banner/types/events.d.ts +8 -0
  50. package/dist/sections/events-banner/types/labels.d.ts +6 -0
  51. package/dist/sections/events-banner/types/view.d.ts +12 -0
  52. package/dist/{components/os-leaderboard-casino/sections → sections}/footer-section/footer-section.d.ts +4 -3
  53. package/dist/sections/footer-section/footer-section.host.d.ts +5 -0
  54. package/dist/sections/footer-section/types/view.d.ts +4 -0
  55. package/dist/{components/os-leaderboard-casino/sections → sections}/games-section/games-section.d.ts +8 -3
  56. package/dist/sections/games-section/games-section.host.d.ts +10 -0
  57. package/dist/sections/games-section/types/data.d.ts +7 -0
  58. package/dist/sections/games-section/types/labels.d.ts +6 -0
  59. package/dist/sections/games-section/types/view.d.ts +9 -0
  60. package/dist/{components/os-leaderboard-casino/sections → sections}/hero-section/hero-section.d.ts +10 -16
  61. package/dist/sections/hero-section/hero-section.host.d.ts +18 -0
  62. package/dist/sections/hero-section/types/data.d.ts +14 -0
  63. package/dist/sections/hero-section/types/labels.d.ts +12 -0
  64. package/dist/sections/hero-section/types/view.d.ts +12 -0
  65. package/dist/sections/index.d.ts +0 -0
  66. package/dist/{components/os-leaderboard-casino/sections → sections}/legals-section/legals-section.d.ts +8 -3
  67. package/dist/{components/os-leaderboard-casino/sections → sections}/legals-section/legals-section.host.d.ts +6 -1
  68. package/dist/sections/legals-section/types/data.d.ts +19 -0
  69. package/dist/sections/legals-section/types/labels.d.ts +5 -0
  70. package/dist/sections/legals-section/types/view.d.ts +6 -0
  71. package/dist/sections/marquee-section/marquee-item.d.ts +13 -0
  72. package/dist/sections/marquee-section/marquee-section.d.ts +19 -0
  73. package/dist/sections/marquee-section/marquee-section.host.d.ts +10 -0
  74. package/dist/sections/marquee-section/types/data.d.ts +18 -0
  75. package/dist/sections/marquee-section/types/labels.d.ts +7 -0
  76. package/dist/sections/marquee-section/types/view.d.ts +17 -0
  77. package/dist/{components/os-leaderboard-casino/sections → sections}/prize-section/prize-section.d.ts +7 -4
  78. package/dist/{components/os-leaderboard-casino/sections → sections}/prize-section/prize-section.host.d.ts +4 -4
  79. package/dist/sections/prize-section/types/data.d.ts +7 -0
  80. package/dist/sections/prize-section/types/events.d.ts +12 -0
  81. package/dist/sections/prize-section/types/labels.d.ts +11 -0
  82. package/dist/sections/prize-section/types/view.d.ts +12 -0
  83. package/dist/{components/os-leaderboard-casino/sections → sections}/stats-section/stats-section.d.ts +9 -6
  84. package/dist/sections/stats-section/stats-section.host.d.ts +15 -0
  85. package/dist/sections/stats-section/types/data.d.ts +12 -0
  86. package/dist/sections/stats-section/types/labels.d.ts +6 -0
  87. package/dist/sections/stats-section/types/view.d.ts +8 -0
  88. package/dist/{components/os-leaderboard-casino/sections → sections}/table-section/table-section.d.ts +17 -7
  89. package/dist/sections/table-section/table-section.host.d.ts +22 -0
  90. package/dist/sections/table-section/types/data.d.ts +24 -0
  91. package/dist/sections/table-section/types/events.d.ts +9 -0
  92. package/dist/sections/table-section/types/labels.d.ts +16 -0
  93. package/dist/sections/table-section/types/view.d.ts +20 -0
  94. package/dist/store/casino.context.d.ts +5 -0
  95. package/dist/store/casino.store.d.ts +37 -0
  96. package/dist/store/consume-store.d.ts +781 -0
  97. package/dist/store/index.d.ts +3 -0
  98. package/dist/types/config.d.ts +6 -0
  99. package/dist/types/data.d.ts +49 -0
  100. package/dist/types/host.d.ts +24 -0
  101. package/dist/types/index.d.ts +35 -0
  102. package/dist/types/labels.d.ts +43 -0
  103. package/dist/types/public.d.ts +23 -0
  104. package/dist/types/status.d.ts +1 -0
  105. package/dist/types/theme.d.ts +1 -0
  106. package/dist/utils/boolean-attr.d.ts +8 -0
  107. package/dist/utils/current-user.d.ts +9 -0
  108. package/dist/utils/data-resolve.d.ts +6 -0
  109. package/dist/utils/demo-countdown.d.ts +2 -0
  110. package/dist/utils/format.d.ts +10 -0
  111. package/dist/utils/image-fallback.d.ts +11 -0
  112. package/dist/utils/index.d.ts +12 -0
  113. package/dist/{components/os-leaderboard-casino/theme/vip-mark.d.ts → utils/player-name.d.ts} +1 -3
  114. package/dist/utils/prize-resolve.d.ts +10 -0
  115. package/dist/utils/safe-href.d.ts +2 -0
  116. package/dist/utils/safe-html.d.ts +6 -0
  117. package/dist/utils/status.d.ts +10 -0
  118. package/dist/utils/svg.d.ts +5 -0
  119. package/index.d.ts +5 -0
  120. package/index.js +3 -0
  121. package/os-leaderboard-casino-pro.d.ts +1 -0
  122. package/os-leaderboard-casino-pro.js +1 -0
  123. package/package.json +33 -50
  124. package/dist/components/os-leaderboard-casino/assets/fallback/catalog.json +0 -9
  125. package/dist/components/os-leaderboard-casino/assets/fallback/catalog.json.js +0 -13
  126. package/dist/components/os-leaderboard-casino/assets/fallback/catalog.json.js.map +0 -1
  127. package/dist/components/os-leaderboard-casino/assets/fallback/config.json +0 -8
  128. package/dist/components/os-leaderboard-casino/assets/fallback/defaults/glam-sections.json +0 -564
  129. package/dist/components/os-leaderboard-casino/assets/fallback/fonts.json +0 -3
  130. package/dist/components/os-leaderboard-casino/assets/fallback/labels.json +0 -5
  131. package/dist/components/os-leaderboard-casino/assets/fallback/labels.json.js +0 -12
  132. package/dist/components/os-leaderboard-casino/assets/fallback/labels.json.js.map +0 -1
  133. package/dist/components/os-leaderboard-casino/assets/fallback/manifest.json +0 -6
  134. package/dist/components/os-leaderboard-casino/assets/fallback/presets.json +0 -38
  135. package/dist/components/os-leaderboard-casino/assets/fallback/presets.json.js +0 -10
  136. package/dist/components/os-leaderboard-casino/assets/fallback/presets.json.js.map +0 -1
  137. package/dist/components/os-leaderboard-casino/assets/fallback/resolved-presets.json +0 -603
  138. package/dist/components/os-leaderboard-casino/assets/fallback/resolved-presets.json.js +0 -8
  139. package/dist/components/os-leaderboard-casino/assets/fallback/resolved-presets.json.js.map +0 -1
  140. package/dist/components/os-leaderboard-casino/assets/fallback/themes.json +0 -68
  141. package/dist/components/os-leaderboard-casino/assets/fallback/themes.json.js +0 -72
  142. package/dist/components/os-leaderboard-casino/assets/fallback/themes.json.js.map +0 -1
  143. package/dist/components/os-leaderboard-casino/assets/icons/prize.casino-credits.svg +0 -7
  144. package/dist/components/os-leaderboard-casino/assets/icons/prize.casino-credits.svg.js +0 -12
  145. package/dist/components/os-leaderboard-casino/assets/icons/prize.casino-credits.svg.js.map +0 -1
  146. package/dist/components/os-leaderboard-casino/assets/icons/prize.default.svg.js +0 -12
  147. package/dist/components/os-leaderboard-casino/assets/icons/prize.default.svg.js.map +0 -1
  148. package/dist/components/os-leaderboard-casino/assets/icons/prize.elite-bonus.svg +0 -5
  149. package/dist/components/os-leaderboard-casino/assets/icons/prize.elite-bonus.svg.js +0 -10
  150. package/dist/components/os-leaderboard-casino/assets/icons/prize.elite-bonus.svg.js.map +0 -1
  151. package/dist/components/os-leaderboard-casino/assets/icons/prize.free-spins.svg +0 -10
  152. package/dist/components/os-leaderboard-casino/assets/icons/prize.free-spins.svg.js +0 -15
  153. package/dist/components/os-leaderboard-casino/assets/icons/prize.free-spins.svg.js.map +0 -1
  154. package/dist/components/os-leaderboard-casino/assets/icons/prize.grand-jackpot.svg +0 -5
  155. package/dist/components/os-leaderboard-casino/assets/icons/prize.grand-jackpot.svg.js +0 -10
  156. package/dist/components/os-leaderboard-casino/assets/icons/prize.grand-jackpot.svg.js.map +0 -1
  157. package/dist/components/os-leaderboard-casino/assets/icons/prize.high-roller.svg +0 -5
  158. package/dist/components/os-leaderboard-casino/assets/icons/prize.high-roller.svg.js +0 -10
  159. package/dist/components/os-leaderboard-casino/assets/icons/prize.high-roller.svg.js.map +0 -1
  160. package/dist/components/os-leaderboard-casino/assets/icons/prize.mystery-bonus.svg +0 -8
  161. package/dist/components/os-leaderboard-casino/assets/icons/prize.mystery-bonus.svg.js +0 -13
  162. package/dist/components/os-leaderboard-casino/assets/icons/prize.mystery-bonus.svg.js.map +0 -1
  163. package/dist/components/os-leaderboard-casino/assets/icons/stat.clock.svg +0 -4
  164. package/dist/components/os-leaderboard-casino/assets/icons/stat.clock.svg.js +0 -9
  165. package/dist/components/os-leaderboard-casino/assets/icons/stat.clock.svg.js.map +0 -1
  166. package/dist/components/os-leaderboard-casino/assets/icons/stat.gift.svg.js +0 -10
  167. package/dist/components/os-leaderboard-casino/assets/icons/stat.gift.svg.js.map +0 -1
  168. package/dist/components/os-leaderboard-casino/assets/icons/stat.users.svg.js +0 -10
  169. package/dist/components/os-leaderboard-casino/assets/icons/stat.users.svg.js.map +0 -1
  170. package/dist/components/os-leaderboard-casino/assets/icons/table.rank-down.svg.js +0 -9
  171. package/dist/components/os-leaderboard-casino/assets/icons/table.rank-down.svg.js.map +0 -1
  172. package/dist/components/os-leaderboard-casino/assets/icons/table.rank-neutral.svg.js +0 -9
  173. package/dist/components/os-leaderboard-casino/assets/icons/table.rank-neutral.svg.js.map +0 -1
  174. package/dist/components/os-leaderboard-casino/assets/icons/table.rank-up.svg.js +0 -9
  175. package/dist/components/os-leaderboard-casino/assets/icons/table.rank-up.svg.js.map +0 -1
  176. package/dist/components/os-leaderboard-casino/assets/icons/vip.crown.svg +0 -7
  177. package/dist/components/os-leaderboard-casino/assets/icons/vip.crown.svg.js +0 -12
  178. package/dist/components/os-leaderboard-casino/assets/icons/vip.crown.svg.js.map +0 -1
  179. package/dist/components/os-leaderboard-casino/assets/icons/win.bag.svg.js +0 -10
  180. package/dist/components/os-leaderboard-casino/assets/icons/win.bag.svg.js.map +0 -1
  181. package/dist/components/os-leaderboard-casino/assets/icons/win.bolt.svg.js +0 -9
  182. package/dist/components/os-leaderboard-casino/assets/icons/win.bolt.svg.js.map +0 -1
  183. package/dist/components/os-leaderboard-casino/assets/icons/win.coin.svg.js +0 -10
  184. package/dist/components/os-leaderboard-casino/assets/icons/win.coin.svg.js.map +0 -1
  185. package/dist/components/os-leaderboard-casino/assets/icons/win.fire.svg.js +0 -9
  186. package/dist/components/os-leaderboard-casino/assets/icons/win.fire.svg.js.map +0 -1
  187. package/dist/components/os-leaderboard-casino/assets/icons/win.gem.svg.js +0 -10
  188. package/dist/components/os-leaderboard-casino/assets/icons/win.gem.svg.js.map +0 -1
  189. package/dist/components/os-leaderboard-casino/assets/icons/win.trophy.svg.js +0 -10
  190. package/dist/components/os-leaderboard-casino/assets/icons/win.trophy.svg.js.map +0 -1
  191. package/dist/components/os-leaderboard-casino/assets/images/games/cards.png.js +0 -5
  192. package/dist/components/os-leaderboard-casino/assets/images/games/cards.png.js.map +0 -1
  193. package/dist/components/os-leaderboard-casino/assets/images/games/chips.png.js +0 -5
  194. package/dist/components/os-leaderboard-casino/assets/images/games/chips.png.js.map +0 -1
  195. package/dist/components/os-leaderboard-casino/assets/images/games/dice.png.js +0 -5
  196. package/dist/components/os-leaderboard-casino/assets/images/games/dice.png.js.map +0 -1
  197. package/dist/components/os-leaderboard-casino/assets/images/games/gates-of-olympus.png +0 -0
  198. package/dist/components/os-leaderboard-casino/assets/images/games/gates-of-olympus.png.js +0 -5
  199. package/dist/components/os-leaderboard-casino/assets/images/games/gates-of-olympus.png.js.map +0 -1
  200. package/dist/components/os-leaderboard-casino/assets/images/games/roulette.png.js +0 -5
  201. package/dist/components/os-leaderboard-casino/assets/images/games/roulette.png.js.map +0 -1
  202. package/dist/components/os-leaderboard-casino/assets/images/games/slot-machine.png.js +0 -5
  203. package/dist/components/os-leaderboard-casino/assets/images/games/slot-machine.png.js.map +0 -1
  204. package/dist/components/os-leaderboard-casino/assets/images/logo.png +0 -0
  205. package/dist/components/os-leaderboard-casino/constants/defaults.d.ts +0 -8
  206. package/dist/components/os-leaderboard-casino/constants/defaults.js +0 -9
  207. package/dist/components/os-leaderboard-casino/constants/defaults.js.map +0 -1
  208. package/dist/components/os-leaderboard-casino/constants/tags.js +0 -17
  209. package/dist/components/os-leaderboard-casino/constants/tags.js.map +0 -1
  210. package/dist/components/os-leaderboard-casino/container/os-leaderboard-casino.d.ts +0 -35
  211. package/dist/components/os-leaderboard-casino/container/os-leaderboard-casino.host.d.ts +0 -13
  212. package/dist/components/os-leaderboard-casino/container/os-leaderboard-casino.html.js +0 -22
  213. package/dist/components/os-leaderboard-casino/container/os-leaderboard-casino.html.js.map +0 -1
  214. package/dist/components/os-leaderboard-casino/container/os-leaderboard-casino.js +0 -154
  215. package/dist/components/os-leaderboard-casino/container/os-leaderboard-casino.js.map +0 -1
  216. package/dist/components/os-leaderboard-casino/container/os-leaderboard-casino.scss.js +0 -5
  217. package/dist/components/os-leaderboard-casino/container/os-leaderboard-casino.scss.js.map +0 -1
  218. package/dist/components/os-leaderboard-casino/index.d.ts +0 -36
  219. package/dist/components/os-leaderboard-casino/index.js +0 -39
  220. package/dist/components/os-leaderboard-casino/index.js.map +0 -1
  221. package/dist/components/os-leaderboard-casino/integration/assemble-assets.d.ts +0 -21
  222. package/dist/components/os-leaderboard-casino/integration/assemble-assets.js +0 -48
  223. package/dist/components/os-leaderboard-casino/integration/assemble-assets.js.map +0 -1
  224. package/dist/components/os-leaderboard-casino/integration/assets-context.d.ts +0 -26
  225. package/dist/components/os-leaderboard-casino/integration/assets-context.js +0 -69
  226. package/dist/components/os-leaderboard-casino/integration/assets-context.js.map +0 -1
  227. package/dist/components/os-leaderboard-casino/integration/defaults-glam.d.ts +0 -14
  228. package/dist/components/os-leaderboard-casino/integration/defaults-new-money.d.ts +0 -3
  229. package/dist/components/os-leaderboard-casino/integration/index.d.ts +0 -5
  230. package/dist/components/os-leaderboard-casino/integration/labels.d.ts +0 -1
  231. package/dist/components/os-leaderboard-casino/integration/load-assets.d.ts +0 -9
  232. package/dist/components/os-leaderboard-casino/integration/load-assets.js +0 -22
  233. package/dist/components/os-leaderboard-casino/integration/load-assets.js.map +0 -1
  234. package/dist/components/os-leaderboard-casino/integration/presets.d.ts +0 -1
  235. package/dist/components/os-leaderboard-casino/integration/resolve-input.d.ts +0 -20
  236. package/dist/components/os-leaderboard-casino/integration/resolve-input.js +0 -115
  237. package/dist/components/os-leaderboard-casino/integration/resolve-input.js.map +0 -1
  238. package/dist/components/os-leaderboard-casino/integration/themes.d.ts +0 -1
  239. package/dist/components/os-leaderboard-casino/sections/climb-section/climb-section.html.js +0 -48
  240. package/dist/components/os-leaderboard-casino/sections/climb-section/climb-section.html.js.map +0 -1
  241. package/dist/components/os-leaderboard-casino/sections/climb-section/climb-section.js +0 -69
  242. package/dist/components/os-leaderboard-casino/sections/climb-section/climb-section.js.map +0 -1
  243. package/dist/components/os-leaderboard-casino/sections/climb-section/climb-section.scss.js +0 -5
  244. package/dist/components/os-leaderboard-casino/sections/climb-section/climb-section.scss.js.map +0 -1
  245. package/dist/components/os-leaderboard-casino/sections/events-banner/components/event-icons.d.ts +0 -5
  246. package/dist/components/os-leaderboard-casino/sections/events-banner/components/event-icons.js +0 -118
  247. package/dist/components/os-leaderboard-casino/sections/events-banner/components/event-icons.js.map +0 -1
  248. package/dist/components/os-leaderboard-casino/sections/events-banner/events-banner.d.ts +0 -16
  249. package/dist/components/os-leaderboard-casino/sections/events-banner/events-banner.host.d.ts +0 -8
  250. package/dist/components/os-leaderboard-casino/sections/events-banner/events-banner.js +0 -93
  251. package/dist/components/os-leaderboard-casino/sections/events-banner/events-banner.js.map +0 -1
  252. package/dist/components/os-leaderboard-casino/sections/events-banner/events-banner.scss.js +0 -5
  253. package/dist/components/os-leaderboard-casino/sections/events-banner/events-banner.scss.js.map +0 -1
  254. package/dist/components/os-leaderboard-casino/sections/footer-section/footer-section.host.d.ts +0 -3
  255. package/dist/components/os-leaderboard-casino/sections/footer-section/footer-section.html.js +0 -20
  256. package/dist/components/os-leaderboard-casino/sections/footer-section/footer-section.html.js.map +0 -1
  257. package/dist/components/os-leaderboard-casino/sections/footer-section/footer-section.js +0 -41
  258. package/dist/components/os-leaderboard-casino/sections/footer-section/footer-section.js.map +0 -1
  259. package/dist/components/os-leaderboard-casino/sections/footer-section/footer-section.scss.js +0 -5
  260. package/dist/components/os-leaderboard-casino/sections/footer-section/footer-section.scss.js.map +0 -1
  261. package/dist/components/os-leaderboard-casino/sections/games-section/components/game-images.d.ts +0 -1
  262. package/dist/components/os-leaderboard-casino/sections/games-section/games-section.host.d.ts +0 -7
  263. package/dist/components/os-leaderboard-casino/sections/games-section/games-section.html.js +0 -17
  264. package/dist/components/os-leaderboard-casino/sections/games-section/games-section.html.js.map +0 -1
  265. package/dist/components/os-leaderboard-casino/sections/games-section/games-section.js +0 -88
  266. package/dist/components/os-leaderboard-casino/sections/games-section/games-section.js.map +0 -1
  267. package/dist/components/os-leaderboard-casino/sections/games-section/games-section.scss.js +0 -5
  268. package/dist/components/os-leaderboard-casino/sections/games-section/games-section.scss.js.map +0 -1
  269. package/dist/components/os-leaderboard-casino/sections/header-section/header-section.d.ts +0 -12
  270. package/dist/components/os-leaderboard-casino/sections/header-section/header-section.host.d.ts +0 -8
  271. package/dist/components/os-leaderboard-casino/sections/hero-section/hero-section.host.d.ts +0 -20
  272. package/dist/components/os-leaderboard-casino/sections/hero-section/hero-section.html.js +0 -36
  273. package/dist/components/os-leaderboard-casino/sections/hero-section/hero-section.html.js.map +0 -1
  274. package/dist/components/os-leaderboard-casino/sections/hero-section/hero-section.js +0 -192
  275. package/dist/components/os-leaderboard-casino/sections/hero-section/hero-section.js.map +0 -1
  276. package/dist/components/os-leaderboard-casino/sections/hero-section/hero-section.scss.js +0 -5
  277. package/dist/components/os-leaderboard-casino/sections/hero-section/hero-section.scss.js.map +0 -1
  278. package/dist/components/os-leaderboard-casino/sections/legals-section/legals-section.html.js +0 -35
  279. package/dist/components/os-leaderboard-casino/sections/legals-section/legals-section.html.js.map +0 -1
  280. package/dist/components/os-leaderboard-casino/sections/legals-section/legals-section.js +0 -78
  281. package/dist/components/os-leaderboard-casino/sections/legals-section/legals-section.js.map +0 -1
  282. package/dist/components/os-leaderboard-casino/sections/legals-section/legals-section.scss.js +0 -5
  283. package/dist/components/os-leaderboard-casino/sections/legals-section/legals-section.scss.js.map +0 -1
  284. package/dist/components/os-leaderboard-casino/sections/live-feed-section/live-feed-section.d.ts +0 -13
  285. package/dist/components/os-leaderboard-casino/sections/live-feed-section/live-feed-section.host.d.ts +0 -8
  286. package/dist/components/os-leaderboard-casino/sections/marquee-section/components/win-icons.d.ts +0 -3
  287. package/dist/components/os-leaderboard-casino/sections/marquee-section/components/win-icons.js +0 -8
  288. package/dist/components/os-leaderboard-casino/sections/marquee-section/components/win-icons.js.map +0 -1
  289. package/dist/components/os-leaderboard-casino/sections/marquee-section/marquee-item.d.ts +0 -14
  290. package/dist/components/os-leaderboard-casino/sections/marquee-section/marquee-item.js +0 -57
  291. package/dist/components/os-leaderboard-casino/sections/marquee-section/marquee-item.js.map +0 -1
  292. package/dist/components/os-leaderboard-casino/sections/marquee-section/marquee-section.d.ts +0 -42
  293. package/dist/components/os-leaderboard-casino/sections/marquee-section/marquee-section.host.d.ts +0 -8
  294. package/dist/components/os-leaderboard-casino/sections/marquee-section/marquee-section.html.js +0 -19
  295. package/dist/components/os-leaderboard-casino/sections/marquee-section/marquee-section.html.js.map +0 -1
  296. package/dist/components/os-leaderboard-casino/sections/marquee-section/marquee-section.js +0 -290
  297. package/dist/components/os-leaderboard-casino/sections/marquee-section/marquee-section.js.map +0 -1
  298. package/dist/components/os-leaderboard-casino/sections/marquee-section/marquee-section.scss.js +0 -5
  299. package/dist/components/os-leaderboard-casino/sections/marquee-section/marquee-section.scss.js.map +0 -1
  300. package/dist/components/os-leaderboard-casino/sections/marquee-section/marquee-variants.d.ts +0 -6
  301. package/dist/components/os-leaderboard-casino/sections/marquee-section/marquee-variants.js +0 -16
  302. package/dist/components/os-leaderboard-casino/sections/marquee-section/marquee-variants.js.map +0 -1
  303. package/dist/components/os-leaderboard-casino/sections/prize-section/components/medal-coin/medal-coin.d.ts +0 -16
  304. package/dist/components/os-leaderboard-casino/sections/prize-section/components/medal-coin/medal-coin.js +0 -73
  305. package/dist/components/os-leaderboard-casino/sections/prize-section/components/medal-coin/medal-coin.js.map +0 -1
  306. package/dist/components/os-leaderboard-casino/sections/prize-section/components/medal-coin/medal-coin.scss.js +0 -5
  307. package/dist/components/os-leaderboard-casino/sections/prize-section/components/medal-coin/medal-coin.scss.js.map +0 -1
  308. package/dist/components/os-leaderboard-casino/sections/prize-section/prize-section.html.js +0 -20
  309. package/dist/components/os-leaderboard-casino/sections/prize-section/prize-section.html.js.map +0 -1
  310. package/dist/components/os-leaderboard-casino/sections/prize-section/prize-section.js +0 -137
  311. package/dist/components/os-leaderboard-casino/sections/prize-section/prize-section.js.map +0 -1
  312. package/dist/components/os-leaderboard-casino/sections/prize-section/prize-section.scss.js +0 -5
  313. package/dist/components/os-leaderboard-casino/sections/prize-section/prize-section.scss.js.map +0 -1
  314. package/dist/components/os-leaderboard-casino/sections/stats-section/components/stat-band/stat-band.d.ts +0 -17
  315. package/dist/components/os-leaderboard-casino/sections/stats-section/components/stat-card/stat-card.d.ts +0 -15
  316. package/dist/components/os-leaderboard-casino/sections/stats-section/components/stat-chip/stat-chip.d.ts +0 -17
  317. package/dist/components/os-leaderboard-casino/sections/stats-section/components/stat-gauge/stat-gauge.d.ts +0 -14
  318. package/dist/components/os-leaderboard-casino/sections/stats-section/components/stat-icons.d.ts +0 -5
  319. package/dist/components/os-leaderboard-casino/sections/stats-section/components/stat-icons.js +0 -11
  320. package/dist/components/os-leaderboard-casino/sections/stats-section/components/stat-icons.js.map +0 -1
  321. package/dist/components/os-leaderboard-casino/sections/stats-section/components/stat-meter/stat-meter.d.ts +0 -17
  322. package/dist/components/os-leaderboard-casino/sections/stats-section/components/stat-rail/stat-rail.d.ts +0 -17
  323. package/dist/components/os-leaderboard-casino/sections/stats-section/components/stat-rail/stat-rail.js +0 -63
  324. package/dist/components/os-leaderboard-casino/sections/stats-section/components/stat-rail/stat-rail.js.map +0 -1
  325. package/dist/components/os-leaderboard-casino/sections/stats-section/components/stat-rail/stat-rail.scss.js +0 -5
  326. package/dist/components/os-leaderboard-casino/sections/stats-section/components/stat-rail/stat-rail.scss.js.map +0 -1
  327. package/dist/components/os-leaderboard-casino/sections/stats-section/stats-section.host.d.ts +0 -13
  328. package/dist/components/os-leaderboard-casino/sections/stats-section/stats-section.html.js +0 -36
  329. package/dist/components/os-leaderboard-casino/sections/stats-section/stats-section.html.js.map +0 -1
  330. package/dist/components/os-leaderboard-casino/sections/stats-section/stats-section.js +0 -71
  331. package/dist/components/os-leaderboard-casino/sections/stats-section/stats-section.js.map +0 -1
  332. package/dist/components/os-leaderboard-casino/sections/stats-section/stats-section.scss.js +0 -5
  333. package/dist/components/os-leaderboard-casino/sections/stats-section/stats-section.scss.js.map +0 -1
  334. package/dist/components/os-leaderboard-casino/sections/table-section/table-section.host.d.ts +0 -15
  335. package/dist/components/os-leaderboard-casino/sections/table-section/table-section.html.js +0 -40
  336. package/dist/components/os-leaderboard-casino/sections/table-section/table-section.html.js.map +0 -1
  337. package/dist/components/os-leaderboard-casino/sections/table-section/table-section.js +0 -185
  338. package/dist/components/os-leaderboard-casino/sections/table-section/table-section.js.map +0 -1
  339. package/dist/components/os-leaderboard-casino/sections/table-section/table-section.scss.js +0 -5
  340. package/dist/components/os-leaderboard-casino/sections/table-section/table-section.scss.js.map +0 -1
  341. package/dist/components/os-leaderboard-casino/services/adapter.service.d.ts +0 -11
  342. package/dist/components/os-leaderboard-casino/services/adapter.service.js +0 -49
  343. package/dist/components/os-leaderboard-casino/services/adapter.service.js.map +0 -1
  344. package/dist/components/os-leaderboard-casino/services/icon.service.d.ts +0 -28
  345. package/dist/components/os-leaderboard-casino/services/icon.service.js +0 -194
  346. package/dist/components/os-leaderboard-casino/services/icon.service.js.map +0 -1
  347. package/dist/components/os-leaderboard-casino/services/index.d.ts +0 -2
  348. package/dist/components/os-leaderboard-casino/theme/background.d.ts +0 -4
  349. package/dist/components/os-leaderboard-casino/theme/background.js +0 -22
  350. package/dist/components/os-leaderboard-casino/theme/background.js.map +0 -1
  351. package/dist/components/os-leaderboard-casino/theme/index.d.ts +0 -3
  352. package/dist/components/os-leaderboard-casino/theme/prize-icons.d.ts +0 -1
  353. package/dist/components/os-leaderboard-casino/theme/prize-resolve.d.ts +0 -5
  354. package/dist/components/os-leaderboard-casino/theme/prize-resolve.js +0 -11
  355. package/dist/components/os-leaderboard-casino/theme/prize-resolve.js.map +0 -1
  356. package/dist/components/os-leaderboard-casino/theme/styles.d.ts +0 -9
  357. package/dist/components/os-leaderboard-casino/theme/styles.js +0 -179
  358. package/dist/components/os-leaderboard-casino/theme/styles.js.map +0 -1
  359. package/dist/components/os-leaderboard-casino/theme/vip-icons.d.ts +0 -2
  360. package/dist/components/os-leaderboard-casino/theme/vip-icons.js +0 -6
  361. package/dist/components/os-leaderboard-casino/theme/vip-icons.js.map +0 -1
  362. package/dist/components/os-leaderboard-casino/theme/vip-mark.js +0 -22
  363. package/dist/components/os-leaderboard-casino/theme/vip-mark.js.map +0 -1
  364. package/dist/components/os-leaderboard-casino/types/assets.d.ts +0 -42
  365. package/dist/components/os-leaderboard-casino/types/data.d.ts +0 -106
  366. package/dist/components/os-leaderboard-casino/types/data.js +0 -7
  367. package/dist/components/os-leaderboard-casino/types/data.js.map +0 -1
  368. package/dist/components/os-leaderboard-casino/types/events.d.ts +0 -18
  369. package/dist/components/os-leaderboard-casino/types/events.js +0 -8
  370. package/dist/components/os-leaderboard-casino/types/events.js.map +0 -1
  371. package/dist/components/os-leaderboard-casino/types/icons.d.ts +0 -18
  372. package/dist/components/os-leaderboard-casino/types/input.d.ts +0 -79
  373. package/dist/components/os-leaderboard-casino/types/ledger.d.ts +0 -67
  374. package/dist/components/os-leaderboard-casino/types/sections.d.ts +0 -200
  375. package/dist/components/os-leaderboard-casino/types/state.d.ts +0 -69
  376. package/dist/components/os-leaderboard-casino/types/state.js +0 -12
  377. package/dist/components/os-leaderboard-casino/types/state.js.map +0 -1
  378. package/dist/components/os-leaderboard-casino/utils/demo-countdown.d.ts +0 -7
  379. package/dist/components/os-leaderboard-casino/utils/demo-countdown.js +0 -22
  380. package/dist/components/os-leaderboard-casino/utils/demo-countdown.js.map +0 -1
  381. package/dist/shared/lib/lit/component.js +0 -8
  382. package/dist/shared/lib/lit/component.js.map +0 -1
  383. package/dist/shared/lib/lit/safe-custom-element.js +0 -7
  384. package/dist/shared/lib/lit/safe-custom-element.js.map +0 -1
  385. package/dist/shared/lib/lit/scss.js +0 -8
  386. package/dist/shared/lib/lit/scss.js.map +0 -1
  387. package/dist/shared/vendor/keen-slider-keen-slider.es.js +0 -538
  388. package/dist/shared/vendor/keen-slider-keen-slider.es.js.map +0 -1
  389. package/dist/shared/vendor/lit-element-lit-element.js +0 -45
  390. package/dist/shared/vendor/lit-element-lit-element.js.map +0 -1
  391. package/dist/shared/vendor/lit-html-directive-helpers.js +0 -32
  392. package/dist/shared/vendor/lit-html-directive-helpers.js.map +0 -1
  393. package/dist/shared/vendor/lit-html-directive.js +0 -23
  394. package/dist/shared/vendor/lit-html-directive.js.map +0 -1
  395. package/dist/shared/vendor/lit-html-keyed.js +0 -18
  396. package/dist/shared/vendor/lit-html-keyed.js.map +0 -1
  397. package/dist/shared/vendor/lit-html-lit-html.js +0 -234
  398. package/dist/shared/vendor/lit-html-lit-html.js.map +0 -1
  399. package/dist/shared/vendor/lit-html-repeat.js +0 -57
  400. package/dist/shared/vendor/lit-html-repeat.js.map +0 -1
  401. package/dist/shared/vendor/lit-html-unsafe-html.js +0 -21
  402. package/dist/shared/vendor/lit-html-unsafe-html.js.map +0 -1
  403. package/dist/shared/vendor/lit-html-unsafe-svg.js +0 -10
  404. package/dist/shared/vendor/lit-html-unsafe-svg.js.map +0 -1
  405. package/dist/shared/vendor/lit-reactive-element-base.js +0 -5
  406. package/dist/shared/vendor/lit-reactive-element-base.js.map +0 -1
  407. package/dist/shared/vendor/lit-reactive-element-css-tag.js +0 -46
  408. package/dist/shared/vendor/lit-reactive-element-css-tag.js.map +0 -1
  409. package/dist/shared/vendor/lit-reactive-element-property.js +0 -33
  410. package/dist/shared/vendor/lit-reactive-element-property.js.map +0 -1
  411. package/dist/shared/vendor/lit-reactive-element-query.js +0 -13
  412. package/dist/shared/vendor/lit-reactive-element-query.js.map +0 -1
  413. package/dist/shared/vendor/lit-reactive-element-reactive-element.js +0 -226
  414. package/dist/shared/vendor/lit-reactive-element-reactive-element.js.map +0 -1
  415. package/dist/shared/vendor/lit-reactive-element-state.js +0 -8
  416. package/dist/shared/vendor/lit-reactive-element-state.js.map +0 -1
  417. /package/dist/{shared → .shared}/lib/lit/component.d.ts +0 -0
  418. /package/dist/{shared → .shared}/lib/lit/safe-custom-element.d.ts +0 -0
  419. /package/dist/{shared → .shared}/lib/lit/scss.d.ts +0 -0
  420. /package/dist/{components/os-leaderboard-casino/assets → assets/config}/images/games/cards.png +0 -0
  421. /package/dist/{components/os-leaderboard-casino/assets → assets/config}/images/games/chips.png +0 -0
  422. /package/dist/{components/os-leaderboard-casino/assets → assets/config}/images/games/dice.png +0 -0
  423. /package/dist/{components/os-leaderboard-casino/assets → assets/config}/images/games/roulette.png +0 -0
  424. /package/dist/{components/os-leaderboard-casino/assets → assets/config}/images/games/slot-machine.png +0 -0
  425. /package/dist/{components/os-leaderboard-casino/assets → assets}/icons/prize.default.svg +0 -0
  426. /package/dist/{components/os-leaderboard-casino/assets → assets}/icons/stat.gift.svg +0 -0
  427. /package/dist/{components/os-leaderboard-casino/assets → assets}/icons/stat.users.svg +0 -0
  428. /package/dist/{components/os-leaderboard-casino/assets → assets}/icons/table.rank-down.svg +0 -0
  429. /package/dist/{components/os-leaderboard-casino/assets → assets}/icons/table.rank-neutral.svg +0 -0
  430. /package/dist/{components/os-leaderboard-casino/assets → assets}/icons/table.rank-up.svg +0 -0
  431. /package/dist/{components/os-leaderboard-casino/assets → assets}/icons/win.bag.svg +0 -0
  432. /package/dist/{components/os-leaderboard-casino/assets → assets}/icons/win.bolt.svg +0 -0
  433. /package/dist/{components/os-leaderboard-casino/assets → assets}/icons/win.coin.svg +0 -0
  434. /package/dist/{components/os-leaderboard-casino/assets → assets}/icons/win.fire.svg +0 -0
  435. /package/dist/{components/os-leaderboard-casino/assets → assets}/icons/win.gem.svg +0 -0
  436. /package/dist/{components/os-leaderboard-casino/assets → assets}/icons/win.trophy.svg +0 -0
package/README.md CHANGED
@@ -1,7 +1,13 @@
1
- # @oddsmith/ui
1
+ # Casino Leaderboard Component
2
2
 
3
- Brandable **Lit web components** built and published from this package.
3
+ Deploy a fully brandable casino leaderboard, ready to match your brand. Your data, our UI.
4
4
 
5
- **Current focus:** `os-leaderboard-casino` a config-driven casino leaderboard (`<os-leaderboard-casino>`). Older component families live under `src/components/_archive/` for reference only.
5
+ A frontend engineer mounts the leaderboard on your site in any frontend stack. There is no Oddsmith backend to connect. You push the data into the component.
6
6
 
7
- **Integration status:** The public API is stabilizing. This README describes how the repo works today for internal development. Full client integration docs will follow separately.
7
+ Create as many custom leaderboards that you need.
8
+
9
+ **Time to a live board: 1 day**
10
+
11
+ Try it: [oddsmith.io](https://oddsmith.io)
12
+
13
+ [Integration docs](https://app.notion.com/p/Client-integration-3c9437e762d68075b87ff9fd358678dd)
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Shared runtime for os-* components. Import via subpath aliases:
3
+ * `@oddsmith/lib/*`, `@oddsmith/theme-engine`, `@oddsmith/labels-engine`.
4
+ */
5
+ export {};
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Generic labels bag — any component's `labels.json` shape.
3
+ * Component-specific types (e.g. LeaderboardLabels) live next to that component.
4
+ */
5
+ export type LabelsMap = Record<string, string>;
6
+ /**
7
+ * Stamps a labels bag on a host and can reverse that stamp.
8
+ * Nested objects are flattened to dotted keys (`hero.pool`).
9
+ * {@link LabelsEngine.get} walks out of shadow roots to find that host.
10
+ */
11
+ export declare class LabelsEngine {
12
+ private static readonly labels;
13
+ apply(host: object, labels: object): void;
14
+ clear(host: object): void;
15
+ /**
16
+ * Resolves one label key from the stamped host, or from a descendant
17
+ * (walks parent elements and shadow hosts).
18
+ * Missing or empty values return `'n/a'`.
19
+ */
20
+ static get(from: object, key: string): string;
21
+ private static resolveHost;
22
+ }
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Generic labels bag — any component's `labels.json` shape.
3
+ * Component-specific types (e.g. LeaderboardLabels) live next to that component.
4
+ */
5
+ export type LabelsMap = Record<string, string>;
6
+
7
+ function flattenLabels(
8
+ value: unknown,
9
+ prefix = '',
10
+ out: LabelsMap = {},
11
+ ): LabelsMap {
12
+ if (typeof value === 'string') {
13
+ if (prefix) out[prefix] = value;
14
+ return out;
15
+ }
16
+ if (value != null && typeof value === 'object') {
17
+ for (const [key, child] of Object.entries(value as Record<string, unknown>)) {
18
+ const path = prefix ? `${prefix}.${key}` : key;
19
+ flattenLabels(child, path, out);
20
+ }
21
+ }
22
+ return out;
23
+ }
24
+
25
+ /**
26
+ * Stamps a labels bag on a host and can reverse that stamp.
27
+ * Nested objects are flattened to dotted keys (`hero.pool`).
28
+ * {@link LabelsEngine.get} walks out of shadow roots to find that host.
29
+ */
30
+ export class LabelsEngine {
31
+ private static readonly labels = new WeakMap<object, LabelsMap>();
32
+
33
+ apply(host: object, labels: object): void {
34
+ LabelsEngine.labels.set(host, flattenLabels(labels));
35
+ }
36
+
37
+ clear(host: object): void {
38
+ LabelsEngine.labels.delete(host);
39
+ }
40
+
41
+ /**
42
+ * Resolves one label key from the stamped host, or from a descendant
43
+ * (walks parent elements and shadow hosts).
44
+ * Missing or empty values return `'n/a'`.
45
+ */
46
+ static get(from: object, key: string): string {
47
+ const host = LabelsEngine.resolveHost(from);
48
+ const value = host != null ? LabelsEngine.labels.get(host)?.[key] : undefined;
49
+ return value != null && value !== '' ? value : 'n/a';
50
+ }
51
+
52
+ private static resolveHost(from: object): object | null {
53
+ if (LabelsEngine.labels.has(from)) return from;
54
+ if (!(from instanceof Node)) return null;
55
+
56
+ let node: Node | null = from;
57
+ while (node) {
58
+ if (node instanceof Element && LabelsEngine.labels.has(node)) {
59
+ return node;
60
+ }
61
+ if (node instanceof Element && node.parentElement) {
62
+ node = node.parentElement;
63
+ continue;
64
+ }
65
+ const root = node.getRootNode();
66
+ node = root instanceof ShadowRoot ? root.host : null;
67
+ }
68
+ return null;
69
+ }
70
+ }
@@ -0,0 +1 @@
1
+ export { LabelsEngine, type LabelsMap } from './engine.js';
@@ -0,0 +1 @@
1
+ export { LabelsEngine, type LabelsMap } from './engine.js';
@@ -0,0 +1,10 @@
1
+ import { customElement } from './safe-custom-element.js';
2
+
3
+ export interface ComponentOptions {
4
+ selector: string;
5
+ }
6
+
7
+ /** Angular-style `@Component` — registers a Lit class as a custom element. */
8
+ export function Component(options: ComponentOptions) {
9
+ return customElement(options.selector);
10
+ }
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Registers a custom element only if the tag is not already in the registry.
3
+ * Use instead of Lit's `@customElement` when HMR or duplicate bundles are possible.
4
+ */
5
+ export function customElement(tag: string) {
6
+ return <T extends CustomElementConstructor>(cls: T): T => {
7
+ if (!customElements.get(tag)) {
8
+ customElements.define(tag, cls);
9
+ }
10
+ return cls;
11
+ };
12
+ }
@@ -0,0 +1,6 @@
1
+ import { unsafeCSS, type CSSResult } from '@lit/reactive-element/css-tag.js';
2
+
3
+ /** Compiled SCSS string → adoptable shadow-root stylesheet. */
4
+ export function scss(stylesheet: string): CSSResult {
5
+ return unsafeCSS(stylesheet);
6
+ }
@@ -1,3 +1,4 @@
1
- import { nothing, TemplateResult } from 'lit';
1
+ import { nothing, type TemplateResult } from 'lit';
2
+
2
3
  /** Lit template slot — real fragment or `nothing` when a section is omitted. */
3
4
  export type LitTemplate = TemplateResult | typeof nothing;
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Runs `apply` while a short-lived transition class is on `nodes`.
3
+ * Skipped when `animate` is false or the user prefers reduced motion.
4
+ */
5
+ export declare function withThemeTransition(nodes: HTMLElement[], animate: boolean, apply: () => void): void;
@@ -0,0 +1,40 @@
1
+ const THEME_TRANSITION_CLASS = 'os-theme-transition';
2
+ const THEME_TRANSITION_MS = 500;
3
+ const THEME_TRANSITION_DELAY_MS = 500;
4
+
5
+ function prefersReducedMotion(): boolean {
6
+ return (
7
+ typeof matchMedia !== 'undefined' &&
8
+ matchMedia('(prefers-reduced-motion: reduce)').matches
9
+ );
10
+ }
11
+
12
+ /**
13
+ * Runs `apply` while a short-lived transition class is on `nodes`.
14
+ * Skipped when `animate` is false or the user prefers reduced motion.
15
+ */
16
+ export function withThemeTransition(
17
+ nodes: HTMLElement[],
18
+ animate: boolean,
19
+ apply: () => void,
20
+ ): void {
21
+ const runAnimation = animate && !prefersReducedMotion();
22
+
23
+ if (runAnimation) {
24
+ for (const node of nodes) {
25
+ node.classList.add(THEME_TRANSITION_CLASS);
26
+ }
27
+ void nodes[0]?.offsetHeight;
28
+ }
29
+
30
+ apply();
31
+
32
+ if (runAnimation) {
33
+ const totalMs = THEME_TRANSITION_DELAY_MS + THEME_TRANSITION_MS + 80;
34
+ window.setTimeout(() => {
35
+ for (const node of nodes) {
36
+ node.classList.remove(THEME_TRANSITION_CLASS);
37
+ }
38
+ }, totalMs);
39
+ }
40
+ }
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Palette bag. Operator chrome colors — not campaign content.
3
+ *
4
+ * Host `.theme` is mixed onto glam {@link DEFAULT_THEME} per key.
5
+ * `background` and `surface` are CSS backgrounds (solid color or gradient).
6
+ * `fontDisplay` / `fontBody` / `fontMono` are CSS `font-family` stacks.
7
+ * The component does not load font files — the host must.
8
+ */
9
+ export type LeaderboardTheme = {
10
+ background: string;
11
+ surface: string;
12
+ text: string;
13
+ textMuted: string;
14
+ primary: string;
15
+ secondary: string;
16
+ success: string;
17
+ danger: string;
18
+ borderRadius: string;
19
+ fontDisplay: string;
20
+ fontBody: string;
21
+ fontMono: string;
22
+ };
23
+ /** Glam palette used when the host omits `.theme`. */
24
+ export declare const DEFAULT_THEME: LeaderboardTheme;
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Palette bag. Operator chrome colors — not campaign content.
3
+ *
4
+ * Host `.theme` is mixed onto glam {@link DEFAULT_THEME} per key.
5
+ * `background` and `surface` are CSS backgrounds (solid color or gradient).
6
+ * `fontDisplay` / `fontBody` / `fontMono` are CSS `font-family` stacks.
7
+ * The component does not load font files — the host must.
8
+ */
9
+ export type LeaderboardTheme = {
10
+ background: string;
11
+ surface: string;
12
+ text: string;
13
+ textMuted: string;
14
+ primary: string;
15
+ secondary: string;
16
+ success: string;
17
+ danger: string;
18
+ borderRadius: string;
19
+ fontDisplay: string;
20
+ fontBody: string;
21
+ fontMono: string;
22
+ };
23
+
24
+ /** Glam palette used when the host omits `.theme`. */
25
+ export const DEFAULT_THEME: LeaderboardTheme = {
26
+ background: '#181622',
27
+ surface: 'rgba(26, 19, 42, 0.78)',
28
+ text: '#f7f3ff',
29
+ textMuted: '#ab9fce',
30
+ primary: '#f5c451',
31
+ secondary: '#9d6bff',
32
+ success: '#41e6a5',
33
+ danger: '#ff5d7c',
34
+ borderRadius: '20px',
35
+ fontDisplay: "'Sora', system-ui, sans-serif",
36
+ fontBody: "'Inter', system-ui, sans-serif",
37
+ fontMono: "ui-monospace, 'JetBrains Mono', monospace",
38
+ };
@@ -0,0 +1,22 @@
1
+ import { LeaderboardTheme } from './default-theme.js';
2
+ export type ThemeEngineOptions = {
3
+ /** Animate color token changes on the host. */
4
+ animate?: boolean;
5
+ /** Prefix for mix/validation console.error. */
6
+ logPrefix?: string;
7
+ };
8
+ /**
9
+ * Mixes a host palette onto {@link DEFAULT_THEME} and stamps the 12 keys
10
+ * as CSS vars on the host.
11
+ */
12
+ export declare class ThemeEngine {
13
+ private host;
14
+ private stamped;
15
+ apply(host: HTMLElement, input?: Partial<LeaderboardTheme> | null, options?: ThemeEngineOptions): void;
16
+ clear(host: HTMLElement, options?: ThemeEngineOptions): void;
17
+ private unstamp;
18
+ private resolveTheme;
19
+ private pickCss;
20
+ private pickFont;
21
+ private cssSupports;
22
+ }
@@ -0,0 +1,151 @@
1
+ import { withThemeTransition } from './animation.js';
2
+ import { DEFAULT_THEME, type LeaderboardTheme } from './default-theme.js';
3
+
4
+ export type ThemeEngineOptions = {
5
+ /** Animate color token changes on the host. */
6
+ animate?: boolean;
7
+ /** Prefix for mix/validation console.error. */
8
+ logPrefix?: string;
9
+ };
10
+
11
+ /** CSS custom properties stamped from the 12 host keys. */
12
+ const THEME_CSS_VARS: Record<keyof LeaderboardTheme, `--${string}`> = {
13
+ background: '--background',
14
+ surface: '--surface',
15
+ text: '--text',
16
+ textMuted: '--text-muted',
17
+ primary: '--primary',
18
+ secondary: '--secondary',
19
+ success: '--success',
20
+ danger: '--danger',
21
+ borderRadius: '--border-radius',
22
+ fontDisplay: '--font-display',
23
+ fontBody: '--font-body',
24
+ fontMono: '--font-mono',
25
+ };
26
+
27
+ const CSS_PROPERTY: Record<
28
+ Exclude<keyof LeaderboardTheme, 'fontDisplay' | 'fontBody' | 'fontMono'>,
29
+ string
30
+ > = {
31
+ background: 'background',
32
+ surface: 'background',
33
+ text: 'color',
34
+ textMuted: 'color',
35
+ primary: 'color',
36
+ secondary: 'color',
37
+ success: 'color',
38
+ danger: 'color',
39
+ borderRadius: 'border-radius',
40
+ };
41
+
42
+ /**
43
+ * Mixes a host palette onto {@link DEFAULT_THEME} and stamps the 12 keys
44
+ * as CSS vars on the host.
45
+ */
46
+ export class ThemeEngine {
47
+ private host: HTMLElement | null = null;
48
+ private stamped: LeaderboardTheme | null = null;
49
+
50
+ apply(
51
+ host: HTMLElement,
52
+ input?: Partial<LeaderboardTheme> | null,
53
+ options: ThemeEngineOptions = {},
54
+ ): void {
55
+ const theme = this.resolveTheme(input, options.logPrefix);
56
+ withThemeTransition([host], options.animate === true, () => {
57
+ this.unstamp();
58
+ for (const key of Object.keys(THEME_CSS_VARS) as (keyof LeaderboardTheme)[]) {
59
+ host.style.setProperty(THEME_CSS_VARS[key], theme[key]);
60
+ }
61
+ this.host = host;
62
+ this.stamped = theme;
63
+ });
64
+ }
65
+
66
+ clear(host: HTMLElement, options: ThemeEngineOptions = {}): void {
67
+ withThemeTransition([host], options.animate === true, () => {
68
+ this.unstamp(host);
69
+ this.host = null;
70
+ this.stamped = null;
71
+ });
72
+ }
73
+
74
+ private unstamp(host: HTMLElement | null = this.host): void {
75
+ if (host == null || this.stamped == null) return;
76
+ for (const varName of Object.values(THEME_CSS_VARS)) {
77
+ host.style.removeProperty(varName);
78
+ }
79
+ }
80
+
81
+ private resolveTheme(
82
+ input?: Partial<LeaderboardTheme> | null,
83
+ logPrefix = '[os-leaderboard-casino]',
84
+ ): LeaderboardTheme {
85
+ return {
86
+ background: this.pickCss(input, 'background', logPrefix),
87
+ surface: this.pickCss(input, 'surface', logPrefix),
88
+ text: this.pickCss(input, 'text', logPrefix),
89
+ textMuted: this.pickCss(input, 'textMuted', logPrefix),
90
+ primary: this.pickCss(input, 'primary', logPrefix),
91
+ secondary: this.pickCss(input, 'secondary', logPrefix),
92
+ success: this.pickCss(input, 'success', logPrefix),
93
+ danger: this.pickCss(input, 'danger', logPrefix),
94
+ borderRadius: this.pickCss(input, 'borderRadius', logPrefix),
95
+ fontDisplay: this.pickFont(input, 'fontDisplay', logPrefix),
96
+ fontBody: this.pickFont(input, 'fontBody', logPrefix),
97
+ fontMono: this.pickFont(input, 'fontMono', logPrefix),
98
+ };
99
+ }
100
+
101
+ private pickCss(
102
+ input: Partial<LeaderboardTheme> | null | undefined,
103
+ key: keyof typeof CSS_PROPERTY,
104
+ logPrefix: string,
105
+ ): string {
106
+ const fallback = DEFAULT_THEME[key];
107
+ if (input == null || !Object.prototype.hasOwnProperty.call(input, key)) {
108
+ return fallback;
109
+ }
110
+ const raw = input[key];
111
+ if (typeof raw !== 'string' || raw.trim() === '') {
112
+ console.error(
113
+ `${logPrefix} theme.${key} is missing or empty; using default.`,
114
+ );
115
+ return fallback;
116
+ }
117
+ if (!this.cssSupports(CSS_PROPERTY[key], raw)) {
118
+ console.error(
119
+ `${logPrefix} theme.${key} is invalid CSS (${JSON.stringify(raw)}); using default.`,
120
+ );
121
+ return fallback;
122
+ }
123
+ return raw;
124
+ }
125
+
126
+ private pickFont(
127
+ input: Partial<LeaderboardTheme> | null | undefined,
128
+ key: 'fontDisplay' | 'fontBody' | 'fontMono',
129
+ logPrefix: string,
130
+ ): string {
131
+ const fallback = DEFAULT_THEME[key];
132
+ if (input == null || !Object.prototype.hasOwnProperty.call(input, key)) {
133
+ return fallback;
134
+ }
135
+ const raw = input[key];
136
+ if (typeof raw !== 'string' || raw.trim() === '') {
137
+ console.error(
138
+ `${logPrefix} theme.${key} is missing or empty; using default.`,
139
+ );
140
+ return fallback;
141
+ }
142
+ return raw;
143
+ }
144
+
145
+ private cssSupports(property: string, value: string): boolean {
146
+ if (typeof CSS === 'undefined' || typeof CSS.supports !== 'function') {
147
+ return value.trim() !== '';
148
+ }
149
+ return CSS.supports(property, value);
150
+ }
151
+ }
@@ -0,0 +1,2 @@
1
+ export { ThemeEngine, type ThemeEngineOptions, } from './engine.js';
2
+ export { DEFAULT_THEME, type LeaderboardTheme, } from './default-theme.js';
@@ -0,0 +1,8 @@
1
+ export {
2
+ ThemeEngine,
3
+ type ThemeEngineOptions,
4
+ } from './engine.js';
5
+ export {
6
+ DEFAULT_THEME,
7
+ type LeaderboardTheme,
8
+ } from './default-theme.js';