@oddsmith/ui 0.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.
- package/.eleventy.cjs +14 -0
- package/LICENSE +28 -0
- package/README.md +118 -0
- package/custom-elements.json +1539 -0
- package/docs/_README/index.html +4 -0
- package/docs/api/index.html +2100 -0
- package/docs/components.bundle.js +1669 -0
- package/docs/components.bundle.js.map +1 -0
- package/docs/docs.css +162 -0
- package/docs/examples/index.html +56 -0
- package/docs/index.html +53 -0
- package/docs/install/index.html +45 -0
- package/docs/prism-okaidia.css +123 -0
- package/docs-src/.nojekyll +0 -0
- package/docs-src/_README.md +7 -0
- package/docs-src/_data/api.11tydata.js +8 -0
- package/docs-src/_includes/example.11ty.js +35 -0
- package/docs-src/_includes/footer.11ty.js +6 -0
- package/docs-src/_includes/header.11ty.js +7 -0
- package/docs-src/_includes/nav.11ty.js +11 -0
- package/docs-src/_includes/page.11ty.js +32 -0
- package/docs-src/_includes/relative-path.cjs +9 -0
- package/docs-src/api.11ty.js +85 -0
- package/docs-src/bundle.ts +9 -0
- package/docs-src/docs.css +162 -0
- package/docs-src/examples/index.md +15 -0
- package/docs-src/index.md +39 -0
- package/docs-src/install.md +28 -0
- package/docs-src/package.json +3 -0
- package/index.html +19 -0
- package/karma.conf.cjs +24 -0
- package/main.css +210 -0
- package/main.ts +124 -0
- package/package.json +86 -0
- package/previews/casino.ts +12 -0
- package/previews/catalog.ts +94 -0
- package/previews/leaderboard-v1.ts +12 -0
- package/previews/leaderboard-v2.ts +17 -0
- package/previews/sample-data.ts +101 -0
- package/previews/sf-leaderboard.ts +100 -0
- package/previews/sf-live-feed.ts +15 -0
- package/previews/streaks.ts +40 -0
- package/previews/types.ts +18 -0
- package/src/components/README.md +16 -0
- package/src/components/casino-leaderboard/casino-leaderboard.html +80 -0
- package/src/components/casino-leaderboard/casino-leaderboard.scss +585 -0
- package/src/components/casino-leaderboard/casino-leaderboard.ts +136 -0
- package/src/components/casino-leaderboard/data.ts +111 -0
- package/src/components/casino-leaderboard/index.ts +5 -0
- package/src/components/casino-leaderboard/todo.txt +2 -0
- package/src/components/casino-leaderboard/types.ts +19 -0
- package/src/components/leaderboard/components/leaderboard.ts +373 -0
- package/src/components/leaderboard/components/player-card.ts +342 -0
- package/src/components/leaderboard/components/ui.ts +452 -0
- package/src/components/leaderboard/data.ts +152 -0
- package/src/components/leaderboard/index.ts +2 -0
- package/src/components/leaderboard/main.ts +42 -0
- package/src/components/leaderboard/styles.ts +67 -0
- package/src/components/leaderboard/types.ts +28 -0
- package/src/components/leaderboard-v2/components/sf-leaderboard-player.ts +451 -0
- package/src/components/leaderboard-v2/components/sf-leaderboard-ui.ts +512 -0
- package/src/components/leaderboard-v2/components/sf-leaderboard.ts +205 -0
- package/src/components/leaderboard-v2/constants.ts +16 -0
- package/src/components/leaderboard-v2/demo/sample-data.ts +152 -0
- package/src/components/leaderboard-v2/events.ts +13 -0
- package/src/components/leaderboard-v2/icons.ts +22 -0
- package/src/components/leaderboard-v2/index.ts +23 -0
- package/src/components/leaderboard-v2/sf-leaderboard.html +1 -0
- package/src/components/leaderboard-v2/sf-leaderboard.scss +382 -0
- package/src/components/leaderboard-v2/tokens.ts +35 -0
- package/src/components/leaderboard-v2/types.ts +30 -0
- package/src/components/sf-leaderboard/index.ts +77 -0
- package/src/components/sf-leaderboard/sections/footer-section/footer-section.host.ts +3 -0
- package/src/components/sf-leaderboard/sections/footer-section/footer-section.html +3 -0
- package/src/components/sf-leaderboard/sections/footer-section/footer-section.scss +18 -0
- package/src/components/sf-leaderboard/sections/footer-section/footer-section.ts +22 -0
- package/src/components/sf-leaderboard/sections/header-section/header-section.host.ts +14 -0
- package/src/components/sf-leaderboard/sections/header-section/header-section.html +27 -0
- package/src/components/sf-leaderboard/sections/header-section/header-section.scss +189 -0
- package/src/components/sf-leaderboard/sections/header-section/header-section.ts +70 -0
- package/src/components/sf-leaderboard/sections/ranking-section/ranking-section.host.ts +22 -0
- package/src/components/sf-leaderboard/sections/ranking-section/ranking-section.html +38 -0
- package/src/components/sf-leaderboard/sections/ranking-section/ranking-section.scss +99 -0
- package/src/components/sf-leaderboard/sections/ranking-section/ranking-section.ts +121 -0
- package/src/components/sf-leaderboard/sections/stats-section/stats-section.host.ts +8 -0
- package/src/components/sf-leaderboard/sections/stats-section/stats-section.html +6 -0
- package/src/components/sf-leaderboard/sections/stats-section/stats-section.scss +44 -0
- package/src/components/sf-leaderboard/sections/stats-section/stats-section.ts +41 -0
- package/src/components/sf-leaderboard/sections/table-section/table-section.host.ts +17 -0
- package/src/components/sf-leaderboard/sections/table-section/table-section.html +19 -0
- package/src/components/sf-leaderboard/sections/table-section/table-section.scss +37 -0
- package/src/components/sf-leaderboard/sections/table-section/table-section.ts +108 -0
- package/src/components/sf-leaderboard/services/index.ts +22 -0
- package/src/components/sf-leaderboard/services/sf-leaderboard-data.service.ts +54 -0
- package/src/components/sf-leaderboard/services/sf-leaderboard.state.ts +160 -0
- package/src/components/sf-leaderboard/shared/components/activity-feed/activity-feed.host.ts +7 -0
- package/src/components/sf-leaderboard/shared/components/activity-feed/activity-feed.html +10 -0
- package/src/components/sf-leaderboard/shared/components/activity-feed/activity-feed.scss +180 -0
- package/src/components/sf-leaderboard/shared/components/activity-feed/activity-feed.ts +88 -0
- package/src/components/sf-leaderboard/shared/components/filters/filters.host.ts +12 -0
- package/src/components/sf-leaderboard/shared/components/filters/filters.html +22 -0
- package/src/components/sf-leaderboard/shared/components/filters/filters.scss +122 -0
- package/src/components/sf-leaderboard/shared/components/filters/filters.ts +75 -0
- package/src/components/sf-leaderboard/shared/components/player-avatar/player-avatar.host.ts +9 -0
- package/src/components/sf-leaderboard/shared/components/player-avatar/player-avatar.html +5 -0
- package/src/components/sf-leaderboard/shared/components/player-avatar/player-avatar.scss +81 -0
- package/src/components/sf-leaderboard/shared/components/player-avatar/player-avatar.ts +34 -0
- package/src/components/sf-leaderboard/shared/components/podium/map-players.ts +24 -0
- package/src/components/sf-leaderboard/shared/components/podium/podium.host.ts +10 -0
- package/src/components/sf-leaderboard/shared/components/podium/podium.html +53 -0
- package/src/components/sf-leaderboard/shared/components/podium/podium.scss +580 -0
- package/src/components/sf-leaderboard/shared/components/podium/podium.ts +49 -0
- package/src/components/sf-leaderboard/shared/components/podium/podium.types.ts +9 -0
- package/src/components/sf-leaderboard/shared/components/rank-badge/rank-badge.host.ts +11 -0
- package/src/components/sf-leaderboard/shared/components/rank-badge/rank-badge.html +9 -0
- package/src/components/sf-leaderboard/shared/components/rank-badge/rank-badge.scss +98 -0
- package/src/components/sf-leaderboard/shared/components/rank-badge/rank-badge.ts +63 -0
- package/src/components/sf-leaderboard/shared/components/stat-card/stat-card.host.ts +9 -0
- package/src/components/sf-leaderboard/shared/components/stat-card/stat-card.html +15 -0
- package/src/components/sf-leaderboard/shared/components/stat-card/stat-card.scss +210 -0
- package/src/components/sf-leaderboard/shared/components/stat-card/stat-card.ts +36 -0
- package/src/components/sf-leaderboard/shared/components/table/table.host.ts +5 -0
- package/src/components/sf-leaderboard/shared/components/table/table.html +11 -0
- package/src/components/sf-leaderboard/shared/components/table/table.scss +212 -0
- package/src/components/sf-leaderboard/shared/components/table/table.ts +111 -0
- package/src/components/sf-leaderboard/shared/constants/defaults.ts +7 -0
- package/src/components/sf-leaderboard/shared/constants/filters.ts +16 -0
- package/src/components/sf-leaderboard/shared/constants/index.ts +5 -0
- package/src/components/sf-leaderboard/shared/constants/player-stats.ts +3 -0
- package/src/components/sf-leaderboard/shared/constants/stats-overview.ts +38 -0
- package/src/components/sf-leaderboard/shared/constants/tags.ts +16 -0
- package/src/components/sf-leaderboard/shared/styles/_section.scss +35 -0
- package/src/components/sf-leaderboard/shared/types/data.ts +29 -0
- package/src/components/sf-leaderboard/shared/types/events.ts +30 -0
- package/src/components/sf-leaderboard/shared/types/player-stats.ts +3 -0
- package/src/components/sf-leaderboard/shared/types/sections.ts +100 -0
- package/src/components/sf-leaderboard/shared/utils/utils.ts +17 -0
- package/src/components/sf-leaderboard/theme/THEMING.md +54 -0
- package/src/components/sf-leaderboard/theme/context.ts +16 -0
- package/src/components/sf-leaderboard/theme/default-theme.ts +4 -0
- package/src/components/sf-leaderboard/theme/hex-to-rgb.ts +25 -0
- package/src/components/sf-leaderboard/theme/index.ts +18 -0
- package/src/components/sf-leaderboard/theme/inject-theme.ts +39 -0
- package/src/components/sf-leaderboard/theme/load-theme.ts +26 -0
- package/src/components/sf-leaderboard/theme/merge-theme.ts +59 -0
- package/src/components/sf-leaderboard/theme/scss/_colors.scss +101 -0
- package/src/components/sf-leaderboard/theme/scss/shared.scss +123 -0
- package/src/components/sf-leaderboard/theme/styles.ts +6 -0
- package/src/components/sf-leaderboard/theme/theme-to-css-vars.ts +99 -0
- package/src/components/sf-leaderboard/theme/themes/fallback.json +62 -0
- package/src/components/sf-leaderboard/theme/themes/red.json +62 -0
- package/src/components/sf-leaderboard/theme/types.ts +71 -0
- package/src/components/sf-live-feed/components/avatar/avatar.host.ts +5 -0
- package/src/components/sf-live-feed/components/avatar/avatar.html +3 -0
- package/src/components/sf-live-feed/components/avatar/avatar.scss +24 -0
- package/src/components/sf-live-feed/components/avatar/avatar.ts +27 -0
- package/src/components/sf-live-feed/components/sf-live-feed/sf-live-feed.host.ts +8 -0
- package/src/components/sf-live-feed/components/sf-live-feed/sf-live-feed.html +10 -0
- package/src/components/sf-live-feed/components/sf-live-feed/sf-live-feed.scss +177 -0
- package/src/components/sf-live-feed/components/sf-live-feed/sf-live-feed.ts +65 -0
- package/src/components/sf-live-feed/constants.ts +4 -0
- package/src/components/sf-live-feed/demo/sample-data.ts +34 -0
- package/src/components/sf-live-feed/index.ts +19 -0
- package/src/components/sf-live-feed/styles/theme.scss +19 -0
- package/src/components/sf-live-feed/styles/theme.ts +5 -0
- package/src/components/sf-live-feed/types.ts +19 -0
- package/src/components/sf-live-feed/utils.ts +17 -0
- package/src/components/streaks/constants.ts +17 -0
- package/src/components/streaks/demo/sample-steps.ts +10 -0
- package/src/components/streaks/events.ts +8 -0
- package/src/components/streaks/index.ts +16 -0
- package/src/components/streaks/sf-streaks.html +26 -0
- package/src/components/streaks/sf-streaks.scss +351 -0
- package/src/components/streaks/sf-streaks.ts +235 -0
- package/src/components/streaks/types.ts +7 -0
- package/src/lib/lit/component.ts +10 -0
- package/src/lib/lit/safe-custom-element.ts +12 -0
- package/src/lib/lit/scss.ts +6 -0
- package/src/vite-env.d.ts +18 -0
- package/styles/global.css +125 -0
- package/todo.txt +54 -0
- package/tsconfig.json +31 -0
- package/vite.config.ts +56 -0
- package/vite.docs.config.ts +33 -0
- package/vite.lit-html-plugin.ts +43 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"components.bundle.js","sources":["../src/theme/default-theme.ts","../src/theme/hex-to-rgb.ts","../src/theme/theme-to-css-vars.ts","../src/theme/inject-theme.ts","../node_modules/@lit/reactive-element/css-tag.js","../node_modules/@lit/reactive-element/reactive-element.js","../node_modules/lit/node_modules/lit-html/lit-html.js","../node_modules/lit/node_modules/lit-element/lit-element.js","../node_modules/@lit/reactive-element/decorators/property.js","../src/lit/safe-custom-element.ts","../src/lit/scss.ts","../src/components/sf-leaderboard/shared/constants/tags.ts","../src/components/sf-leaderboard/shared/constants/defaults.ts","../src/components/sf-leaderboard/shared/constants/player-stats.ts","../src/components/sf-leaderboard/shared/constants/filters.ts","../src/components/sf-leaderboard/shared/constants/stats-overview.ts","../src/components/sf-leaderboard/shared/data/leaderboard-data.ts","../src/components/sf-leaderboard/shared/types/events.ts","../src/theme/styles.ts","../src/components/sf-leaderboard/sf-leaderboard.html?lit-html","../src/components/sf-leaderboard/sections/header-section/header-section.ts","../src/components/sf-leaderboard/shared/components/stat-card/stat-card.html?lit-html","../src/components/sf-leaderboard/shared/components/stat-card/stat-card.ts","../src/components/sf-leaderboard/sections/stats-section/stats-section.ts","../src/components/sf-leaderboard/shared/utils/utils.ts","../src/components/sf-leaderboard/shared/components/podium/map-players.ts","../src/components/sf-leaderboard/shared/components/podium/podium.html?lit-html","../src/components/sf-leaderboard/shared/components/podium/podium.ts","../src/components/sf-leaderboard/shared/components/player-stats-card/player-stats-card.html?lit-html","../src/components/sf-leaderboard/shared/components/player-stats-card/player-stats-card.ts","../src/components/sf-leaderboard/sections/ranking-section/ranking-section.ts","../src/components/sf-leaderboard/shared/components/filters/filters.html?lit-html","../src/components/sf-leaderboard/shared/components/filters/filters.ts","../src/components/sf-leaderboard/shared/components/rank-badge/rank-badge.html?lit-html","../src/components/sf-leaderboard/shared/components/rank-badge/rank-badge.ts","../src/components/sf-leaderboard/shared/components/player-avatar/player-avatar.html?lit-html","../src/components/sf-leaderboard/shared/components/player-avatar/player-avatar.ts","../src/components/sf-leaderboard/shared/components/table/table.html?lit-html","../src/components/sf-leaderboard/shared/components/table/table.ts","../src/components/sf-leaderboard/sections/table-section/table-section.ts","../src/components/sf-leaderboard/sections/footer-section/footer-section.ts","../src/components/sf-leaderboard/sf-leaderboard.ts","../docs-src/bundle.ts"],"sourcesContent":["import defaultThemeJson from './themes/fallback.json';\nimport type { SfLeaderboardTheme } from './types.js';\n\nexport const DEFAULT_SF_LEADERBOARD_THEME = defaultThemeJson as SfLeaderboardTheme;\n","/** `#RRGGBB` or `#RGB` → `r, g, b` for use in `rgba(var(--x-rgb), α)`. */\nexport function hexToRgbChannels(hex: string): string | null {\n const normalized = hex.trim().replace(/^#/, '');\n if (!/^[0-9a-fA-F]{3,8}$/.test(normalized)) {\n return null;\n }\n\n let r: number;\n let g: number;\n let b: number;\n\n if (normalized.length === 3) {\n r = parseInt(normalized[0] + normalized[0], 16);\n g = parseInt(normalized[1] + normalized[1], 16);\n b = parseInt(normalized[2] + normalized[2], 16);\n } else if (normalized.length === 6) {\n r = parseInt(normalized.slice(0, 2), 16);\n g = parseInt(normalized.slice(2, 4), 16);\n b = parseInt(normalized.slice(4, 6), 16);\n } else {\n return null;\n }\n\n return `${r}, ${g}, ${b}`;\n}\n","import { hexToRgbChannels } from './hex-to-rgb.js';\nimport type {\n SfLeaderboardTheme,\n TableColumnId,\n} from './types.js';\n\nconst TABLE_COLUMN_IDS: TableColumnId[] = [\n 'rank',\n 'player',\n 'games',\n 'winRate',\n 'streak',\n 'winnings',\n];\n\nfunction setRgbFromHex(\n vars: Record<string, string>,\n cssKey: string,\n hex: string | undefined,\n): void {\n if (!hex || hex.includes('gradient')) {\n return;\n }\n const channels = hexToRgbChannels(hex);\n if (channels) {\n vars[`${cssKey}-rgb`] = channels;\n }\n}\n\n/**\n * Flattens a theme object into CSS custom properties for the leaderboard host.\n * Keys match `styles/_colors.scss` (`--color-base-1`, `--place-first-table-icon`, …).\n */\nexport function themeToCssVars(theme: SfLeaderboardTheme): Record<string, string> {\n const { palette, typography, placement, table } = theme;\n const vars: Record<string, string> = {};\n\n for (const step of ['1', '2', '3', '4'] as const) {\n vars[`--color-base-${step}`] = palette.base[step];\n }\n\n for (const step of ['1', '2', '3'] as const) {\n vars[`--color-primary-${step}`] = palette.primary[step];\n }\n\n vars['--color-success'] = palette.semantic.success;\n vars['--color-warning'] = palette.semantic.warning;\n vars['--color-error'] = palette.semantic.error;\n if (palette.semantic.informative) {\n vars['--color-informative'] = palette.semantic.informative;\n }\n\n vars['--color-neutral'] = palette.neutral;\n vars['--color-surface-divider'] = palette.surface.divider;\n vars['--color-surface-muted'] = palette.surface.muted;\n if (palette.surface.successBright) {\n vars['--color-surface-success-bright'] = palette.surface.successBright;\n }\n\n vars['--font-primary'] = typography.primary;\n vars['--font-secondary'] = typography.secondary;\n if (typography.mono) {\n vars['--font-mono'] = typography.mono;\n }\n\n const placements = [\n ['first', placement.first],\n ['second', placement.second],\n ['third', placement.third],\n ] as const;\n\n for (const [key, p] of placements) {\n vars[`--place-${key}-table-icon`] = p.tableIcon;\n vars[`--place-${key}-podium-slot`] = p.podiumSlot;\n vars[`--place-${key}-podium-number`] = p.podiumNumber;\n setRgbFromHex(vars, `--place-${key}-table-icon`, p.tableIcon);\n }\n\n setRgbFromHex(vars, '--color-primary-1', palette.primary['1']);\n setRgbFromHex(vars, '--color-success', palette.semantic.success);\n setRgbFromHex(vars, '--color-warning', palette.semantic.warning);\n setRgbFromHex(vars, '--color-error', palette.semantic.error);\n\n for (const colId of TABLE_COLUMN_IDS) {\n const col = table.columns[colId];\n if (!col?.enabled) {\n continue;\n }\n const kebab = colId.replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`);\n if (col.color) {\n vars[`--table-col-${kebab}-color`] = col.color;\n }\n if (col.fontSize) {\n vars[`--table-col-${kebab}-font-size`] = col.fontSize;\n }\n }\n\n return vars;\n}\n","import { setActiveTheme } from './context.js';\nimport { themeToCssVars } from './theme-to-css-vars.js';\nimport type { SfLeaderboardTheme } from './types.js';\n\nconst THEME_ATTR = 'data-sf-theme';\n\n/**\n * Injects theme CSS variables into the DOM so every component shadow root inherits them.\n * Default target is `document.documentElement` (:root).\n */\nexport function injectTheme(\n theme: SfLeaderboardTheme,\n root: HTMLElement = document.documentElement,\n): void {\n const vars = themeToCssVars(theme);\n root.setAttribute(THEME_ATTR, theme.id);\n setActiveTheme(theme);\n\n for (const [key, value] of Object.entries(vars)) {\n root.style.setProperty(key, value);\n }\n}\n\n/** Removes theme variables injected on a DOM node. */\nexport function clearTheme(\n root: HTMLElement = document.documentElement,\n): void {\n root.removeAttribute(THEME_ATTR);\n const toRemove: string[] = [];\n for (let i = 0; i < root.style.length; i++) {\n const name = root.style.item(i);\n if (name.startsWith('--color-') || name.startsWith('--place-') || name.startsWith('--table-col-') || name.startsWith('--font-')) {\n toRemove.push(name);\n }\n }\n for (const name of toRemove) {\n root.style.removeProperty(name);\n }\n}\n","/**\n * @license\n * Copyright 2019 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=globalThis,e=t.ShadowRoot&&(void 0===t.ShadyCSS||t.ShadyCSS.nativeShadow)&&\"adoptedStyleSheets\"in Document.prototype&&\"replace\"in CSSStyleSheet.prototype,s=Symbol(),o=new WeakMap;class n{constructor(t,e,o){if(this._$cssResult$=!0,o!==s)throw Error(\"CSSResult is not constructable. Use `unsafeCSS` or `css` instead.\");this.cssText=t,this.t=e}get styleSheet(){let t=this.o;const s=this.t;if(e&&void 0===t){const e=void 0!==s&&1===s.length;e&&(t=o.get(s)),void 0===t&&((this.o=t=new CSSStyleSheet).replaceSync(this.cssText),e&&o.set(s,t))}return t}toString(){return this.cssText}}const r=t=>new n(\"string\"==typeof t?t:t+\"\",void 0,s),i=(t,...e)=>{const o=1===t.length?t[0]:e.reduce((e,s,o)=>e+(t=>{if(!0===t._$cssResult$)return t.cssText;if(\"number\"==typeof t)return t;throw Error(\"Value passed to 'css' function must be a 'css' function result: \"+t+\". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.\")})(s)+t[o+1],t[0]);return new n(o,t,s)},S=(s,o)=>{if(e)s.adoptedStyleSheets=o.map(t=>t instanceof CSSStyleSheet?t:t.styleSheet);else for(const e of o){const o=document.createElement(\"style\"),n=t.litNonce;void 0!==n&&o.setAttribute(\"nonce\",n),o.textContent=e.cssText,s.appendChild(o)}},c=e?t=>t:t=>t instanceof CSSStyleSheet?(t=>{let e=\"\";for(const s of t.cssRules)e+=s.cssText;return r(e)})(t):t;export{n as CSSResult,S as adoptStyles,i as css,c as getCompatibleStyle,e as supportsAdoptingStyleSheets,r as unsafeCSS};\n//# sourceMappingURL=css-tag.js.map\n","import{getCompatibleStyle as t,adoptStyles as s}from\"./css-tag.js\";export{CSSResult,css,supportsAdoptingStyleSheets,unsafeCSS}from\"./css-tag.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const{is:i,defineProperty:e,getOwnPropertyDescriptor:h,getOwnPropertyNames:r,getOwnPropertySymbols:o,getPrototypeOf:n}=Object,a=globalThis,c=a.trustedTypes,l=c?c.emptyScript:\"\",p=a.reactiveElementPolyfillSupport,d=(t,s)=>t,u={toAttribute(t,s){switch(s){case Boolean:t=t?l:null;break;case Object:case Array:t=null==t?t:JSON.stringify(t)}return t},fromAttribute(t,s){let i=t;switch(s){case Boolean:i=null!==t;break;case Number:i=null===t?null:Number(t);break;case Object:case Array:try{i=JSON.parse(t)}catch(t){i=null}}return i}},f=(t,s)=>!i(t,s),b={attribute:!0,type:String,converter:u,reflect:!1,useDefault:!1,hasChanged:f};Symbol.metadata??=Symbol(\"metadata\"),a.litPropertyMetadata??=new WeakMap;class y extends HTMLElement{static addInitializer(t){this._$Ei(),(this.l??=[]).push(t)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(t,s=b){if(s.state&&(s.attribute=!1),this._$Ei(),this.prototype.hasOwnProperty(t)&&((s=Object.create(s)).wrapped=!0),this.elementProperties.set(t,s),!s.noAccessor){const i=Symbol(),h=this.getPropertyDescriptor(t,i,s);void 0!==h&&e(this.prototype,t,h)}}static getPropertyDescriptor(t,s,i){const{get:e,set:r}=h(this.prototype,t)??{get(){return this[s]},set(t){this[s]=t}};return{get:e,set(s){const h=e?.call(this);r?.call(this,s),this.requestUpdate(t,h,i)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)??b}static _$Ei(){if(this.hasOwnProperty(d(\"elementProperties\")))return;const t=n(this);t.finalize(),void 0!==t.l&&(this.l=[...t.l]),this.elementProperties=new Map(t.elementProperties)}static finalize(){if(this.hasOwnProperty(d(\"finalized\")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(d(\"properties\"))){const t=this.properties,s=[...r(t),...o(t)];for(const i of s)this.createProperty(i,t[i])}const t=this[Symbol.metadata];if(null!==t){const s=litPropertyMetadata.get(t);if(void 0!==s)for(const[t,i]of s)this.elementProperties.set(t,i)}this._$Eh=new Map;for(const[t,s]of this.elementProperties){const i=this._$Eu(t,s);void 0!==i&&this._$Eh.set(i,t)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(s){const i=[];if(Array.isArray(s)){const e=new Set(s.flat(1/0).reverse());for(const s of e)i.unshift(t(s))}else void 0!==s&&i.push(t(s));return i}static _$Eu(t,s){const i=s.attribute;return!1===i?void 0:\"string\"==typeof i?i:\"string\"==typeof t?t.toLowerCase():void 0}constructor(){super(),this._$Ep=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Em=null,this._$Ev()}_$Ev(){this._$ES=new Promise(t=>this.enableUpdating=t),this._$AL=new Map,this._$E_(),this.requestUpdate(),this.constructor.l?.forEach(t=>t(this))}addController(t){(this._$EO??=new Set).add(t),void 0!==this.renderRoot&&this.isConnected&&t.hostConnected?.()}removeController(t){this._$EO?.delete(t)}_$E_(){const t=new Map,s=this.constructor.elementProperties;for(const i of s.keys())this.hasOwnProperty(i)&&(t.set(i,this[i]),delete this[i]);t.size>0&&(this._$Ep=t)}createRenderRoot(){const t=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return s(t,this.constructor.elementStyles),t}connectedCallback(){this.renderRoot??=this.createRenderRoot(),this.enableUpdating(!0),this._$EO?.forEach(t=>t.hostConnected?.())}enableUpdating(t){}disconnectedCallback(){this._$EO?.forEach(t=>t.hostDisconnected?.())}attributeChangedCallback(t,s,i){this._$AK(t,i)}_$ET(t,s){const i=this.constructor.elementProperties.get(t),e=this.constructor._$Eu(t,i);if(void 0!==e&&!0===i.reflect){const h=(void 0!==i.converter?.toAttribute?i.converter:u).toAttribute(s,i.type);this._$Em=t,null==h?this.removeAttribute(e):this.setAttribute(e,h),this._$Em=null}}_$AK(t,s){const i=this.constructor,e=i._$Eh.get(t);if(void 0!==e&&this._$Em!==e){const t=i.getPropertyOptions(e),h=\"function\"==typeof t.converter?{fromAttribute:t.converter}:void 0!==t.converter?.fromAttribute?t.converter:u;this._$Em=e;const r=h.fromAttribute(s,t.type);this[e]=r??this._$Ej?.get(e)??r,this._$Em=null}}requestUpdate(t,s,i,e=!1,h){if(void 0!==t){const r=this.constructor;if(!1===e&&(h=this[t]),i??=r.getPropertyOptions(t),!((i.hasChanged??f)(h,s)||i.useDefault&&i.reflect&&h===this._$Ej?.get(t)&&!this.hasAttribute(r._$Eu(t,i))))return;this.C(t,s,i)}!1===this.isUpdatePending&&(this._$ES=this._$EP())}C(t,s,{useDefault:i,reflect:e,wrapped:h},r){i&&!(this._$Ej??=new Map).has(t)&&(this._$Ej.set(t,r??s??this[t]),!0!==h||void 0!==r)||(this._$AL.has(t)||(this.hasUpdated||i||(s=void 0),this._$AL.set(t,s)),!0===e&&this._$Em!==t&&(this._$Eq??=new Set).add(t))}async _$EP(){this.isUpdatePending=!0;try{await this._$ES}catch(t){Promise.reject(t)}const t=this.scheduleUpdate();return null!=t&&await t,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??=this.createRenderRoot(),this._$Ep){for(const[t,s]of this._$Ep)this[t]=s;this._$Ep=void 0}const t=this.constructor.elementProperties;if(t.size>0)for(const[s,i]of t){const{wrapped:t}=i,e=this[s];!0!==t||this._$AL.has(s)||void 0===e||this.C(s,void 0,i,e)}}let t=!1;const s=this._$AL;try{t=this.shouldUpdate(s),t?(this.willUpdate(s),this._$EO?.forEach(t=>t.hostUpdate?.()),this.update(s)):this._$EM()}catch(s){throw t=!1,this._$EM(),s}t&&this._$AE(s)}willUpdate(t){}_$AE(t){this._$EO?.forEach(t=>t.hostUpdated?.()),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t)}_$EM(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(t){return!0}update(t){this._$Eq&&=this._$Eq.forEach(t=>this._$ET(t,this[t])),this._$EM()}updated(t){}firstUpdated(t){}}y.elementStyles=[],y.shadowRootOptions={mode:\"open\"},y[d(\"elementProperties\")]=new Map,y[d(\"finalized\")]=new Map,p?.({ReactiveElement:y}),(a.reactiveElementVersions??=[]).push(\"2.1.2\");export{y as ReactiveElement,s as adoptStyles,u as defaultConverter,t as getCompatibleStyle,f as notEqual};\n//# sourceMappingURL=reactive-element.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=globalThis,i=t=>t,s=t.trustedTypes,e=s?s.createPolicy(\"lit-html\",{createHTML:t=>t}):void 0,h=\"$lit$\",o=`lit$${Math.random().toFixed(9).slice(2)}$`,n=\"?\"+o,r=`<${n}>`,l=document,c=()=>l.createComment(\"\"),a=t=>null===t||\"object\"!=typeof t&&\"function\"!=typeof t,u=Array.isArray,d=t=>u(t)||\"function\"==typeof t?.[Symbol.iterator],f=\"[ \\t\\n\\f\\r]\",v=/<(?:(!--|\\/[^a-zA-Z])|(\\/?[a-zA-Z][^>\\s]*)|(\\/?$))/g,_=/-->/g,m=/>/g,p=RegExp(`>|${f}(?:([^\\\\s\"'>=/]+)(${f}*=${f}*(?:[^ \\t\\n\\f\\r\"'\\`<>=]|(\"|')|))|$)`,\"g\"),g=/'/g,$=/\"/g,y=/^(?:script|style|textarea|title)$/i,x=t=>(i,...s)=>({_$litType$:t,strings:i,values:s}),b=x(1),w=x(2),T=x(3),E=Symbol.for(\"lit-noChange\"),A=Symbol.for(\"lit-nothing\"),C=new WeakMap,P=l.createTreeWalker(l,129);function V(t,i){if(!u(t)||!t.hasOwnProperty(\"raw\"))throw Error(\"invalid template strings array\");return void 0!==e?e.createHTML(i):i}const N=(t,i)=>{const s=t.length-1,e=[];let n,l=2===i?\"<svg>\":3===i?\"<math>\":\"\",c=v;for(let i=0;i<s;i++){const s=t[i];let a,u,d=-1,f=0;for(;f<s.length&&(c.lastIndex=f,u=c.exec(s),null!==u);)f=c.lastIndex,c===v?\"!--\"===u[1]?c=_:void 0!==u[1]?c=m:void 0!==u[2]?(y.test(u[2])&&(n=RegExp(\"</\"+u[2],\"g\")),c=p):void 0!==u[3]&&(c=p):c===p?\">\"===u[0]?(c=n??v,d=-1):void 0===u[1]?d=-2:(d=c.lastIndex-u[2].length,a=u[1],c=void 0===u[3]?p:'\"'===u[3]?$:g):c===$||c===g?c=p:c===_||c===m?c=v:(c=p,n=void 0);const x=c===p&&t[i+1].startsWith(\"/>\")?\" \":\"\";l+=c===v?s+r:d>=0?(e.push(a),s.slice(0,d)+h+s.slice(d)+o+x):s+o+(-2===d?i:x)}return[V(t,l+(t[s]||\"<?>\")+(2===i?\"</svg>\":3===i?\"</math>\":\"\")),e]};class S{constructor({strings:t,_$litType$:i},e){let r;this.parts=[];let l=0,a=0;const u=t.length-1,d=this.parts,[f,v]=N(t,i);if(this.el=S.createElement(f,e),P.currentNode=this.el.content,2===i||3===i){const t=this.el.content.firstChild;t.replaceWith(...t.childNodes)}for(;null!==(r=P.nextNode())&&d.length<u;){if(1===r.nodeType){if(r.hasAttributes())for(const t of r.getAttributeNames())if(t.endsWith(h)){const i=v[a++],s=r.getAttribute(t).split(o),e=/([.?@])?(.*)/.exec(i);d.push({type:1,index:l,name:e[2],strings:s,ctor:\".\"===e[1]?I:\"?\"===e[1]?L:\"@\"===e[1]?z:H}),r.removeAttribute(t)}else t.startsWith(o)&&(d.push({type:6,index:l}),r.removeAttribute(t));if(y.test(r.tagName)){const t=r.textContent.split(o),i=t.length-1;if(i>0){r.textContent=s?s.emptyScript:\"\";for(let s=0;s<i;s++)r.append(t[s],c()),P.nextNode(),d.push({type:2,index:++l});r.append(t[i],c())}}}else if(8===r.nodeType)if(r.data===n)d.push({type:2,index:l});else{let t=-1;for(;-1!==(t=r.data.indexOf(o,t+1));)d.push({type:7,index:l}),t+=o.length-1}l++}}static createElement(t,i){const s=l.createElement(\"template\");return s.innerHTML=t,s}}function M(t,i,s=t,e){if(i===E)return i;let h=void 0!==e?s._$Co?.[e]:s._$Cl;const o=a(i)?void 0:i._$litDirective$;return h?.constructor!==o&&(h?._$AO?.(!1),void 0===o?h=void 0:(h=new o(t),h._$AT(t,s,e)),void 0!==e?(s._$Co??=[])[e]=h:s._$Cl=h),void 0!==h&&(i=M(t,h._$AS(t,i.values),h,e)),i}class R{constructor(t,i){this._$AV=[],this._$AN=void 0,this._$AD=t,this._$AM=i}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}u(t){const{el:{content:i},parts:s}=this._$AD,e=(t?.creationScope??l).importNode(i,!0);P.currentNode=e;let h=P.nextNode(),o=0,n=0,r=s[0];for(;void 0!==r;){if(o===r.index){let i;2===r.type?i=new k(h,h.nextSibling,this,t):1===r.type?i=new r.ctor(h,r.name,r.strings,this,t):6===r.type&&(i=new Z(h,this,t)),this._$AV.push(i),r=s[++n]}o!==r?.index&&(h=P.nextNode(),o++)}return P.currentNode=l,e}p(t){let i=0;for(const s of this._$AV)void 0!==s&&(void 0!==s.strings?(s._$AI(t,s,i),i+=s.strings.length-2):s._$AI(t[i])),i++}}class k{get _$AU(){return this._$AM?._$AU??this._$Cv}constructor(t,i,s,e){this.type=2,this._$AH=A,this._$AN=void 0,this._$AA=t,this._$AB=i,this._$AM=s,this.options=e,this._$Cv=e?.isConnected??!0}get parentNode(){let t=this._$AA.parentNode;const i=this._$AM;return void 0!==i&&11===t?.nodeType&&(t=i.parentNode),t}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(t,i=this){t=M(this,t,i),a(t)?t===A||null==t||\"\"===t?(this._$AH!==A&&this._$AR(),this._$AH=A):t!==this._$AH&&t!==E&&this._(t):void 0!==t._$litType$?this.$(t):void 0!==t.nodeType?this.T(t):d(t)?this.k(t):this._(t)}O(t){return this._$AA.parentNode.insertBefore(t,this._$AB)}T(t){this._$AH!==t&&(this._$AR(),this._$AH=this.O(t))}_(t){this._$AH!==A&&a(this._$AH)?this._$AA.nextSibling.data=t:this.T(l.createTextNode(t)),this._$AH=t}$(t){const{values:i,_$litType$:s}=t,e=\"number\"==typeof s?this._$AC(t):(void 0===s.el&&(s.el=S.createElement(V(s.h,s.h[0]),this.options)),s);if(this._$AH?._$AD===e)this._$AH.p(i);else{const t=new R(e,this),s=t.u(this.options);t.p(i),this.T(s),this._$AH=t}}_$AC(t){let i=C.get(t.strings);return void 0===i&&C.set(t.strings,i=new S(t)),i}k(t){u(this._$AH)||(this._$AH=[],this._$AR());const i=this._$AH;let s,e=0;for(const h of t)e===i.length?i.push(s=new k(this.O(c()),this.O(c()),this,this.options)):s=i[e],s._$AI(h),e++;e<i.length&&(this._$AR(s&&s._$AB.nextSibling,e),i.length=e)}_$AR(t=this._$AA.nextSibling,s){for(this._$AP?.(!1,!0,s);t!==this._$AB;){const s=i(t).nextSibling;i(t).remove(),t=s}}setConnected(t){void 0===this._$AM&&(this._$Cv=t,this._$AP?.(t))}}class H{get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}constructor(t,i,s,e,h){this.type=1,this._$AH=A,this._$AN=void 0,this.element=t,this.name=i,this._$AM=e,this.options=h,s.length>2||\"\"!==s[0]||\"\"!==s[1]?(this._$AH=Array(s.length-1).fill(new String),this.strings=s):this._$AH=A}_$AI(t,i=this,s,e){const h=this.strings;let o=!1;if(void 0===h)t=M(this,t,i,0),o=!a(t)||t!==this._$AH&&t!==E,o&&(this._$AH=t);else{const e=t;let n,r;for(t=h[0],n=0;n<h.length-1;n++)r=M(this,e[s+n],i,n),r===E&&(r=this._$AH[n]),o||=!a(r)||r!==this._$AH[n],r===A?t=A:t!==A&&(t+=(r??\"\")+h[n+1]),this._$AH[n]=r}o&&!e&&this.j(t)}j(t){t===A?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,t??\"\")}}class I extends H{constructor(){super(...arguments),this.type=3}j(t){this.element[this.name]=t===A?void 0:t}}class L extends H{constructor(){super(...arguments),this.type=4}j(t){this.element.toggleAttribute(this.name,!!t&&t!==A)}}class z extends H{constructor(t,i,s,e,h){super(t,i,s,e,h),this.type=5}_$AI(t,i=this){if((t=M(this,t,i,0)??A)===E)return;const s=this._$AH,e=t===A&&s!==A||t.capture!==s.capture||t.once!==s.once||t.passive!==s.passive,h=t!==A&&(s===A||e);e&&this.element.removeEventListener(this.name,this,s),h&&this.element.addEventListener(this.name,this,t),this._$AH=t}handleEvent(t){\"function\"==typeof this._$AH?this._$AH.call(this.options?.host??this.element,t):this._$AH.handleEvent(t)}}class Z{constructor(t,i,s){this.element=t,this.type=6,this._$AN=void 0,this._$AM=i,this.options=s}get _$AU(){return this._$AM._$AU}_$AI(t){M(this,t)}}const j={M:h,P:o,A:n,C:1,L:N,R,D:d,V:M,I:k,H,N:L,U:z,B:I,F:Z},B=t.litHtmlPolyfillSupport;B?.(S,k),(t.litHtmlVersions??=[]).push(\"3.3.3\");const D=(t,i,s)=>{const e=s?.renderBefore??i;let h=e._$litPart$;if(void 0===h){const t=s?.renderBefore??null;e._$litPart$=h=new k(i.insertBefore(c(),t),t,void 0,s??{})}return h._$AI(t),h};export{j as _$LH,b as html,T as mathml,E as noChange,A as nothing,D as render,w as svg};\n//# sourceMappingURL=lit-html.js.map\n","import{ReactiveElement as t}from\"@lit/reactive-element\";export*from\"@lit/reactive-element\";import{render as e,noChange as r}from\"lit-html\";export*from\"lit-html\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const s=globalThis;class i extends t{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){const t=super.createRenderRoot();return this.renderOptions.renderBefore??=t.firstChild,t}update(t){const r=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(t),this._$Do=e(r,this.renderRoot,this.renderOptions)}connectedCallback(){super.connectedCallback(),this._$Do?.setConnected(!0)}disconnectedCallback(){super.disconnectedCallback(),this._$Do?.setConnected(!1)}render(){return r}}i._$litElement$=!0,i[\"finalized\"]=!0,s.litElementHydrateSupport?.({LitElement:i});const o=s.litElementPolyfillSupport;o?.({LitElement:i});const n={_$AK:(t,e,r)=>{t._$AK(e,r)},_$AL:t=>t._$AL};(s.litElementVersions??=[]).push(\"4.2.2\");export{i as LitElement,n as _$LE};\n//# sourceMappingURL=lit-element.js.map\n","import{notEqual as t,defaultConverter as e}from\"../reactive-element.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const o={attribute:!0,type:String,converter:e,reflect:!1,hasChanged:t},r=(t=o,e,r)=>{const{kind:n,metadata:i}=r;let s=globalThis.litPropertyMetadata.get(i);if(void 0===s&&globalThis.litPropertyMetadata.set(i,s=new Map),\"setter\"===n&&((t=Object.create(t)).wrapped=!0),s.set(r.name,t),\"accessor\"===n){const{name:o}=r;return{set(r){const n=e.get.call(this);e.set.call(this,r),this.requestUpdate(o,n,t,!0,r)},init(e){return void 0!==e&&this.C(o,void 0,t,e),e}}}if(\"setter\"===n){const{name:o}=r;return function(r){const n=this[o];e.call(this,r),this.requestUpdate(o,n,t,!0,r)}}throw Error(\"Unsupported decorator location: \"+n)};function n(t){return(e,o)=>\"object\"==typeof o?r(t,e,o):((t,e,o)=>{const r=e.hasOwnProperty(o);return e.constructor.createProperty(o,t),r?Object.getOwnPropertyDescriptor(e,o):void 0})(t,e,o)}export{n as property,r as standardProperty};\n//# sourceMappingURL=property.js.map\n","/**\n * Registers a custom element only if the tag is not already in the registry.\n * Use instead of Lit's `@customElement` when HMR or duplicate bundles are possible.\n */\nexport function customElement(tag: string) {\n return <T extends CustomElementConstructor>(cls: T): T => {\n if (!customElements.get(tag)) {\n customElements.define(tag, cls);\n }\n return cls;\n };\n}\n","import { unsafeCSS, type CSSResult } from 'lit';\n\n/** Compiled SCSS string → adoptable shadow-root stylesheet. */\nexport function scss(stylesheet: string): CSSResult {\n return unsafeCSS(stylesheet);\n}\n","/** Custom element tag names for the sf-leaderboard package. */\nexport const SF_LEADERBOARD_TAG = 'sf-leaderboard';\nexport const SF_LEADERBOARD_STAT_CARD = 'sf-leaderboard-stat-card';\nexport const SF_LEADERBOARD_FILTERS = 'sf-leaderboard-filters';\nexport const SF_LEADERBOARD_TABLE = 'sf-leaderboard-table';\nexport const SF_LEADERBOARD_PODIUM = 'sf-leaderboard-podium';\nexport const SF_LEADERBOARD_ACTIVITY_FEED = 'sf-leaderboard-activity-feed';\nexport const SF_LEADERBOARD_RANK_BADGE = 'sf-leaderboard-rank-badge';\nexport const SF_LEADERBOARD_PLAYER_AVATAR = 'sf-leaderboard-player-avatar';\nexport const SF_LEADERBOARD_PLAYER_STATS_CARD =\n 'sf-leaderboard-player-stats-card';\nexport const SF_LEADERBOARD_HEADER_SECTION = 'sf-leaderboard-header-section';\nexport const SF_LEADERBOARD_STATS_SECTION = 'sf-leaderboard-stats-section';\nexport const SF_LEADERBOARD_RANKING_SECTION = 'sf-leaderboard-ranking-section';\nexport const SF_LEADERBOARD_TABLE_SECTION = 'sf-leaderboard-table-section';\nexport const SF_LEADERBOARD_FOOTER_SECTION = 'sf-leaderboard-footer-section';\n","import type { Category, TimeFrame } from '../types/data.js';\n\nexport const DEFAULT_LB_TITLE = 'Leaderboard';\nexport const DEFAULT_LB_SUBTITLE = 'Real-time rankings';\n\nexport const DEFAULT_TIMEFRAME: TimeFrame = 'week';\nexport const DEFAULT_CATEGORY: Category = 'all';\n","export const DEFAULT_PLAYER_STATS_TITLE = 'Your Position';\nexport const DEFAULT_PLAYER_STATS_MESSAGE = \"You're in the top 5% of players!\";\nexport const DEFAULT_PLAYER_STATS_RANK = 42;\n","import type { Category, TimeFrame } from '../types/data.js';\n\nexport const TIMEFRAME_OPTIONS: { label: string; value: TimeFrame }[] = [\n { label: 'Today', value: 'today' },\n { label: 'This Week', value: 'week' },\n { label: 'This Month', value: 'month' },\n { label: 'All Time', value: 'all' },\n];\n\nexport const CATEGORY_OPTIONS: { label: string; value: Category }[] = [\n { label: 'All Games', value: 'all' },\n { label: 'Poker', value: 'poker' },\n { label: 'Blackjack', value: 'blackjack' },\n { label: 'Roulette', value: 'roulette' },\n { label: 'Slots', value: 'slots' },\n];\n","export interface SfLeaderboardOverviewStat {\n label: string;\n value: string;\n icon: string;\n trendValue: number;\n trendPositive: boolean;\n}\n\nexport const DEFAULT_OVERVIEW_STATS: SfLeaderboardOverviewStat[] = [\n {\n label: 'Total Players',\n value: '12,847',\n icon: '👥',\n trendValue: 12.5,\n trendPositive: true,\n },\n {\n label: 'Total Wagered',\n value: '$84.2M',\n icon: '💰',\n trendValue: 8.3,\n trendPositive: true,\n },\n {\n label: 'Active Games',\n value: '1,247',\n icon: '🎮',\n trendValue: 3.2,\n trendPositive: true,\n },\n {\n label: 'Biggest Win',\n value: '$125K',\n icon: '⚡',\n trendValue: 45.8,\n trendPositive: true,\n },\n];\n","import {\n DEFAULT_CATEGORY,\n DEFAULT_LB_SUBTITLE,\n DEFAULT_LB_TITLE,\n DEFAULT_TIMEFRAME,\n} from '../constants/defaults.js';\nimport { DEFAULT_OVERVIEW_STATS } from '../constants/stats-overview.js';\nimport {\n DEFAULT_PLAYER_STATS_MESSAGE,\n DEFAULT_PLAYER_STATS_RANK,\n DEFAULT_PLAYER_STATS_TITLE,\n} from '../constants/player-stats.js';\nimport type { Player } from '../types/data.js';\nimport type { SfLeaderboardLayout } from '../types/sections.js';\n\nexport type SfLeaderboardData = SfLeaderboardLayout;\n\nconst DEFAULTS: SfLeaderboardLayout = {\n header: {\n title: DEFAULT_LB_TITLE,\n subtitle: DEFAULT_LB_SUBTITLE,\n icon: '🏆',\n showLive: true,\n backButton: { label: 'Back' },\n isRefreshing: false,\n },\n stats: { items: DEFAULT_OVERVIEW_STATS },\n ranking: {\n podium: { title: 'Top Champions', badge: 'Elite', players: [] },\n playerStats: {\n title: DEFAULT_PLAYER_STATS_TITLE,\n rank: DEFAULT_PLAYER_STATS_RANK,\n message: DEFAULT_PLAYER_STATS_MESSAGE,\n },\n },\n table: {\n title: 'All Rankings',\n subtitle: 'Showing 0 players',\n players: [],\n filters: {\n searchQuery: '',\n timeframe: DEFAULT_TIMEFRAME,\n category: DEFAULT_CATEGORY,\n },\n },\n footer: {\n text: 'Rankings update every 30 seconds • Last updated: Just now',\n },\n};\n\nexport function createDefaultLeaderboardData(\n overrides: Partial<SfLeaderboardData> = {},\n): SfLeaderboardData {\n return {\n ...DEFAULTS,\n ...overrides,\n header: 'header' in overrides ? overrides.header : DEFAULTS.header,\n stats: overrides.stats ?? DEFAULTS.stats,\n ranking: overrides.ranking ?? DEFAULTS.ranking,\n table: overrides.table ?? DEFAULTS.table,\n footer: overrides.footer ?? DEFAULTS.footer,\n };\n}\n\nexport function filterPlayersBySearch(\n players: Player[],\n searchQuery: string,\n): Player[] {\n const q = searchQuery.trim().toLowerCase();\n if (!q) return players;\n return players.filter((p) => p.username.toLowerCase().includes(q));\n}\n\nexport function hasRankingContent(\n ranking: SfLeaderboardLayout['ranking'],\n): boolean {\n return Boolean(ranking?.podium ?? ranking?.playerStats);\n}\n","import type { Category, Player, TimeFrame } from './data.js';\n\nexport const SF_LEADERBOARD_TIMEFRAME_CHANGE = 'timeframe-change';\nexport const SF_LEADERBOARD_CATEGORY_CHANGE = 'category-change';\nexport const SF_LEADERBOARD_SEARCH_CHANGE = 'search-change';\nexport const SF_LEADERBOARD_PLAYER_SELECT = 'player-select';\nexport const SF_LEADERBOARD_REFRESH = 'refresh';\nexport const SF_LEADERBOARD_VIEW_STATS = 'view-stats';\n\nexport interface SfLeaderboardRefreshDetail {\n /** Optional hook for clients that batch refresh with timeframe/category. */\n timeframe: TimeFrame;\n category: Category;\n}\n\nexport interface SfLeaderboardTimeframeChangeDetail {\n timeframe: TimeFrame;\n}\n\nexport interface SfLeaderboardCategoryChangeDetail {\n category: Category;\n}\n\nexport interface SfLeaderboardSearchChangeDetail {\n query: string;\n}\n\nexport interface SfLeaderboardPlayerSelectDetail {\n player: Player;\n}\n","import { scss } from '../lit/scss.js';\nimport type { CSSResult } from 'lit';\nimport sharedStyles from './scss/shared.scss?inline';\n\n/** Shared stylesheet for leaderboard components (semantic aliases + .card). */\nexport const sfLeaderboardTheme: CSSResult = scss(sharedStyles);\n","\nimport { html } from 'lit';\n\nexport default function render(host) {\n return html`<div class=\"app\">\n ${host.renderHeader()}\n <main class=\"main\">\n ${host.renderStats()}\n ${host.renderRanking()}\n ${host.renderTable()}\n ${host.renderFooter()}\n </main>\n</div>\n`;\n}\n","import { html, LitElement, nothing } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { customElement } from '../../../../lit/safe-custom-element.js';\nimport { scss } from '../../../../lit/scss.js';\nimport {\n DEFAULT_CATEGORY,\n DEFAULT_TIMEFRAME,\n SF_LEADERBOARD_HEADER_SECTION,\n} from '../../shared/constants/index.js';\nimport { sfLeaderboardTheme } from '../../../../theme/styles.js';\nimport { SF_LEADERBOARD_REFRESH } from '../../shared/types/events.js';\nimport type { SfLeaderboardRefreshDetail } from '../../shared/types/events.js';\nimport type { SfLeaderboardHeaderSection as HeaderSectionData } from '../../shared/types/sections.js';\nimport styles from './header-section.scss?inline';\n\n@customElement(SF_LEADERBOARD_HEADER_SECTION)\nexport class SfLeaderboardHeaderBlock extends LitElement {\n static styles = [sfLeaderboardTheme, scss(styles)];\n\n @property({ attribute: false })\n section!: HeaderSectionData;\n\n @property({ attribute: false })\n refreshContext?: SfLeaderboardRefreshDetail;\n\n private onBackClick() {\n const ctx = this.refreshContext;\n this.dispatchEvent(\n new CustomEvent(SF_LEADERBOARD_REFRESH, {\n detail: {\n timeframe: ctx?.timeframe ?? DEFAULT_TIMEFRAME,\n category: ctx?.category ?? DEFAULT_CATEGORY,\n },\n bubbles: true,\n composed: true,\n }),\n );\n }\n\n render() {\n if (!this.section) return nothing;\n\n const showBack = this.section.backButton != null;\n const backLabel = this.section.backButton?.label ?? 'Back';\n\n return html`\n <header class=\"header\">\n <div class=\"header-content\">\n <div class=\"logo-section\">\n ${this.section.icon\n ? html`<div class=\"logo-icon\">${this.section.icon}</div>`\n : nothing}\n <div class=\"logo-text\">\n <h1>${this.section.title}</h1>\n ${this.section.subtitle\n ? html`<p>${this.section.subtitle}</p>`\n : nothing}\n </div>\n </div>\n\n <div class=\"header-actions\">\n ${this.section.showLive\n ? html`\n <div class=\"live-badge\">\n <span class=\"live-dot\"></span>\n Live\n </div>\n `\n : nothing}\n ${showBack\n ? html`\n <button\n type=\"button\"\n class=\"back-btn ${this.section.isRefreshing ? 'refreshing' : ''}\"\n @click=${this.onBackClick}\n >\n <span class=\"icon\" aria-hidden=\"true\">←</span>\n ${backLabel}\n </button>\n `\n : nothing}\n </div>\n </div>\n </header>\n `;\n }\n}\n","\nimport { html } from 'lit';\n\nexport default function render(host) {\n return html`<div class=\"card\">\n <div class=\"glow\"></div>\n <div class=\"content\">\n <div class=\"header\">\n <span class=\"label\">${host.label}</span>\n <div class=\"icon-wrapper\">${host.icon}</div>\n </div>\n <div class=\"body\">\n <p class=\"value\">${host.value}</p>\n ${host.renderTrend()}\n </div>\n </div>\n</div>\n`;\n}\n","import { html, LitElement } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { customElement } from '../../../../../lit/safe-custom-element.js';\nimport { scss } from '../../../../../lit/scss.js';\nimport { SF_LEADERBOARD_STAT_CARD } from '../../constants/tags.js';\nimport { sfLeaderboardTheme } from '../../../../../theme/styles.js';\nimport type { StatCardHost } from './stat-card.host.js';\nimport renderTemplate from './stat-card.html?lit-html';\nimport styles from './stat-card.scss?inline';\n\n@customElement(SF_LEADERBOARD_STAT_CARD)\nexport class SfLeaderboardStatCard extends LitElement implements StatCardHost {\n static styles = [sfLeaderboardTheme, scss(styles)];\n\n @property({ type: String }) label = '';\n @property({ type: String }) value = '';\n @property({ type: String }) icon = '';\n @property({ type: Number }) trendValue?: number;\n @property({ type: Boolean }) trendPositive = true;\n\n renderTrend() {\n if (this.trendValue === undefined) return html``;\n return html`\n <p class=\"trend ${this.trendPositive ? 'positive' : 'negative'}\">\n ${this.trendPositive ? '+' : ''}${this.trendValue}% from last week\n </p>\n `;\n }\n\n render() {\n return renderTemplate(this);\n }\n}\n","import { html, LitElement, nothing } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { customElement } from '../../../../lit/safe-custom-element.js';\nimport { scss } from '../../../../lit/scss.js';\nimport { SF_LEADERBOARD_STATS_SECTION } from '../../shared/constants/tags.js';\nimport { sfLeaderboardTheme } from '../../../../theme/styles.js';\nimport type { SfLeaderboardStatsSection as StatsSectionData } from '../../shared/types/sections.js';\nimport '../../shared/components/stat-card/stat-card.js';\nimport styles from './stats-section.scss?inline';\n\n@customElement(SF_LEADERBOARD_STATS_SECTION)\nexport class SfLeaderboardStatsBlock extends LitElement {\n static styles = [sfLeaderboardTheme, scss(styles)];\n\n @property({ attribute: false })\n section!: StatsSectionData;\n\n render() {\n if (!this.section?.items?.length) return nothing;\n\n return html`\n <section class=\"section stats-section\">\n ${this.section.title\n ? html`\n <div class=\"section-header\">\n <h2 class=\"section-title\">${this.section.title}</h2>\n </div>\n `\n : nothing}\n <div class=\"stats-grid\">\n ${this.section.items.map(\n (stat) => html`\n <sf-leaderboard-stat-card\n label=${stat.label}\n value=${stat.value}\n icon=${stat.icon}\n .trendValue=${stat.trendValue}\n ?trendPositive=${stat.trendPositive ?? true}\n ></sf-leaderboard-stat-card>\n `,\n )}\n </div>\n </section>\n `;\n }\n}\n","export function formatCurrency(amount: number): string {\n if (amount >= 1000000) return `$${(amount / 1000000).toFixed(2)}M`;\n if (amount >= 1000) return `$${(amount / 1000).toFixed(1)}K`;\n return `$${amount.toFixed(2)}`;\n}\n\nexport function formatTime(date: Date): string {\n const now = new Date();\n const diff = Math.floor((now.getTime() - date.getTime()) / 1000);\n if (diff < 60) return `${diff}s ago`;\n if (diff < 3600) return `${Math.floor(diff / 60)}m ago`;\n return `${Math.floor(diff / 3600)}h ago`;\n}\n\nexport function getInitials(name: string): string {\n return name.slice(0, 2).toUpperCase();\n}\n","import type { Player } from '../../types/data.js';\nimport { formatCurrency, getInitials } from '../../utils/utils.js';\nimport type { PodiumEntry } from './podium.types.js';\n\nfunction badgeFor(player: Player): string {\n if (player.streak >= 5) return '🔥';\n if (player.rank === 1) return '👑';\n return '✌️';\n}\n\nexport function mapPlayerToPodiumEntry(player: Player): PodiumEntry {\n return {\n rank: player.rank,\n initials: getInitials(player.username),\n username: player.username,\n earnings: formatCurrency(player.totalWinnings),\n winRate: `${player.winRate}% WR`,\n badgeEmoji: badgeFor(player),\n };\n}\n\nexport function mapPlayersToPodiumEntries(players: Player[]): PodiumEntry[] {\n return players.map(mapPlayerToPodiumEntry);\n}\n","\nimport { html } from 'lit';\n\nexport default function render(host) {\n return html`<div class=\"card\">\n <div class=\"ambient-glow glow-gold\"></div>\n <div class=\"card-content\">\n <div class=\"podium-container\">\n <div class=\"player-column second\">\n <div class=\"avatar-wrapper\">\n <div class=\"avatar-ring silver\"></div>\n <div class=\"avatar silver\">${host.second.initials}</div>\n <span class=\"badge-emoji\">${host.second.badgeEmoji}</span>\n </div>\n <div class=\"player-name\">${host.second.username}</div>\n <div class=\"player-earnings silver\">${host.second.earnings}</div>\n <div class=\"player-winrate\">${host.second.winRate}</div>\n <div class=\"podium-block second\">\n <span class=\"podium-number silver\">2</span>\n </div>\n </div>\n\n <div class=\"player-column first\">\n <div class=\"sparkles\">\n <span class=\"sparkle\">✦</span>\n <span class=\"sparkle\">✦</span>\n <span class=\"sparkle\">✦</span>\n </div>\n <div class=\"avatar-wrapper\">\n <div class=\"avatar-ring gold\"></div>\n <div class=\"avatar gold\">${host.first.initials}</div>\n <span class=\"badge-emoji fire\">${host.first.badgeEmoji}</span>\n </div>\n <div class=\"player-name\">${host.first.username}</div>\n <div class=\"player-earnings gold\">${host.first.earnings}</div>\n <div class=\"player-winrate\">${host.first.winRate}</div>\n <div class=\"podium-block first\">\n <span class=\"podium-number gold\">1</span>\n </div>\n </div>\n\n <div class=\"player-column third\">\n <div class=\"avatar-wrapper\">\n <div class=\"avatar-ring bronze\"></div>\n <div class=\"avatar bronze\">${host.third.initials}</div>\n <span class=\"badge-emoji\">${host.third.badgeEmoji}</span>\n </div>\n <div class=\"player-name\">${host.third.username}</div>\n <div class=\"player-earnings bronze\">${host.third.earnings}</div>\n <div class=\"player-winrate\">${host.third.winRate}</div>\n <div class=\"podium-block third\">\n <span class=\"podium-number bronze\">3</span>\n </div>\n </div>\n </div>\n </div>\n</div>\n`;\n}\n","import { html, LitElement } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { customElement } from '../../../../../lit/safe-custom-element.js';\nimport { scss } from '../../../../../lit/scss.js';\nimport { SF_LEADERBOARD_PODIUM } from '../../constants/tags.js';\nimport { sfLeaderboardTheme } from '../../../../../theme/styles.js';\nimport type { Player } from '../../types/data.js';\nimport { mapPlayersToPodiumEntries } from './map-players.js';\nimport type { PodiumEntry } from './podium.types.js';\nimport type { PodiumHost } from './podium.host.js';\nimport renderTemplate from './podium.html?lit-html';\nimport styles from './podium.scss?inline';\n\n@customElement(SF_LEADERBOARD_PODIUM)\nexport class SfLeaderboardPodium extends LitElement implements PodiumHost {\n static styles = [sfLeaderboardTheme, scss(styles)];\n\n @property({ type: Array }) players: Player[] = [];\n\n private entryByRank(rank: number): PodiumEntry | undefined {\n return mapPlayersToPodiumEntries(this.players).find((p) => p.rank === rank);\n }\n\n get first(): PodiumEntry {\n return this.entryByRank(1)!;\n }\n\n get second(): PodiumEntry {\n return this.entryByRank(2)!;\n }\n\n get third(): PodiumEntry {\n return this.entryByRank(3)!;\n }\n\n get hasPodium(): boolean {\n return (\n this.players.length >= 3 &&\n this.entryByRank(1) !== undefined &&\n this.entryByRank(2) !== undefined &&\n this.entryByRank(3) !== undefined\n );\n }\n\n render() {\n if (!this.hasPodium) {\n return html``;\n }\n return renderTemplate(this);\n }\n}\n","\nimport { html } from 'lit';\n\nexport default function render(host) {\n return html`<div class=\"card\">\n <div class=\"card-content\">\n <div class=\"card-top\">\n <div class=\"rank-section\">\n <div class=\"rank-container\">\n <div class=\"rank-glow\"></div>\n <div class=\"rank-ring\"></div>\n <div class=\"rank-ring rank-ring-2\"></div>\n <span class=\"rank-number\">#${host.rank}</span>\n </div>\n <p class=\"percentile-badge\">\n <span class=\"percentile-icon\" aria-hidden=\"true\">🏆</span>\n <span class=\"percentile-text\"\n >Top ${host.percentile}% of players</span\n >\n </p>\n </div>\n\n <div class=\"avatar-section\">\n <div class=\"avatar\">${host.initials}</div>\n <div class=\"avatar-info\">\n <div class=\"avatar-name\">${host.username}</div>\n <div class=\"avatar-earnings\">${host.earnings}</div>\n </div>\n <div class=\"level-badge\">LVL ${host.level}</div>\n </div>\n </div>\n\n <div class=\"stats-grid\">\n <div class=\"stat-item\">\n <div class=\"stat-main\">\n <span class=\"stat-value highlight\">${host.winRate}%</span>\n <span class=\"stat-label\">Win Rate</span>\n </div>\n </div>\n <div class=\"stat-item\">\n <div class=\"stat-main\">\n <span class=\"stat-value\">${host.gamesPlayed.toLocaleString()}</span>\n <span class=\"stat-label\">Games Played</span>\n </div>\n </div>\n <div class=\"stat-item\">\n <div class=\"stat-main\">\n <span class=\"stat-value streak\">\n <span class=\"fire-icon\">🔥</span> ${host.winStreak}\n </span>\n <span class=\"stat-label\">Win Streak</span>\n </div>\n </div>\n <div class=\"stat-item\">\n <div class=\"stat-main\">\n <span class=\"stat-value\">⭐ 4.8</span>\n <span class=\"stat-label\">Rating</span>\n </div>\n </div>\n </div>\n </div>\n</div>\n`;\n}\n","import { LitElement } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { customElement } from '../../../../../lit/safe-custom-element.js';\nimport { scss } from '../../../../../lit/scss.js';\nimport { SF_LEADERBOARD_PLAYER_STATS_CARD } from '../../constants/tags.js';\nimport { sfLeaderboardTheme } from '../../../../../theme/styles.js';\nimport type { PlayerStatsCardHost } from './player-stats-card.host.js';\nimport renderTemplate from './player-stats-card.html?lit-html';\nimport styles from './player-stats-card.scss?inline';\n\n@customElement(SF_LEADERBOARD_PLAYER_STATS_CARD)\nexport class SfLeaderboardPlayerStatsCard extends LitElement\n implements PlayerStatsCardHost {\n static styles = [sfLeaderboardTheme, scss(styles)];\n\n @property({ type: Number }) rank = 42;\n @property({ type: Number }) percentile = 5;\n @property({ type: String }) username = 'CyberNinja';\n @property({ type: String }) earnings = '$847.2K';\n @property({ type: Number }) winRate = 71;\n @property({ type: Number }) gamesPlayed = 1284;\n @property({ type: Number }) winStreak = 7;\n @property({ type: Number }) level = 47;\n\n get initials(): string {\n return this.username.slice(0, 2).toUpperCase();\n }\n\n render() {\n return renderTemplate(this);\n }\n}\n","import { html, LitElement, nothing } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { customElement } from '../../../../lit/safe-custom-element.js';\nimport { scss } from '../../../../lit/scss.js';\nimport { SF_LEADERBOARD_RANKING_SECTION } from '../../shared/constants/tags.js';\nimport { hasRankingContent } from '../../shared/data/index.js';\nimport { sfLeaderboardTheme } from '../../../../theme/styles.js';\nimport type { Player } from '../../shared/types/data.js';\nimport type {\n SfLeaderboardPlayerStatsSection,\n SfLeaderboardRankingSection as RankingSectionData,\n} from '../../shared/types/sections.js';\nimport { formatCurrency } from '../../shared/utils/utils.js';\nimport '../../shared/components/podium/podium.js';\nimport '../../shared/components/player-stats-card/player-stats-card.js';\nimport styles from './ranking-section.scss?inline';\n\n@customElement(SF_LEADERBOARD_RANKING_SECTION)\nexport class SfLeaderboardRankingBlock extends LitElement {\n static styles = [sfLeaderboardTheme, scss(styles)];\n\n @property({ attribute: false })\n ranking!: RankingSectionData;\n\n @property({ attribute: false })\n lookupPlayers: Player[] = [];\n\n private get hasPair() {\n return this.ranking?.podium != null && this.ranking?.playerStats != null;\n }\n\n private resolvePlayer(block: SfLeaderboardPlayerStatsSection) {\n return this.lookupPlayers.find((p) => p.rank === block.rank);\n }\n\n private renderPlayerStatsCard(block: SfLeaderboardPlayerStatsSection) {\n const player = this.resolvePlayer(block);\n const percentileMatch = block.message?.match(/(\\d+)\\s*%/);\n const percentile =\n block.percentile ??\n (percentileMatch ? Number(percentileMatch[1]) : 5);\n\n return html`\n <sf-leaderboard-player-stats-card\n rank=\"${block.rank}\"\n percentile=\"${percentile}\"\n username=\"${block.username ?? player?.username ?? 'You'}\"\n earnings=\"${block.earnings ?? (player ? formatCurrency(player.totalWinnings) : '$0')}\"\n winRate=\"${block.winRate ?? player?.winRate ?? 0}\"\n gamesPlayed=\"${block.gamesPlayed ?? player?.gamesPlayed ?? 0}\"\n winStreak=\"${block.winStreak ?? player?.streak ?? 0}\"\n level=\"${block.level ?? player?.level ?? 0}\"\n ></sf-leaderboard-player-stats-card>\n `;\n }\n\n render() {\n if (!hasRankingContent(this.ranking)) return nothing;\n\n const { podium, playerStats } = this.ranking;\n\n return html`\n <section class=\"section ranking-section\">\n <div class=\"ranking-grid ${this.hasPair ? 'has-pair' : 'single'}\">\n ${podium\n ? html`\n <div class=\"ranking-column ranking-column--podium\">\n <div class=\"section-header\">\n <h2 class=\"section-title\">\n ${podium.title ?? 'Top Champions'}\n </h2>\n ${podium.badge\n ? html`<span class=\"elite-badge\">${podium.badge}</span>`\n : nothing}\n </div>\n <div class=\"podium-slot\">\n <sf-leaderboard-podium\n .players=${podium.players}\n ></sf-leaderboard-podium>\n </div>\n </div>\n `\n : nothing}\n ${playerStats\n ? html`\n <div class=\"ranking-column ranking-column--player-stats\">\n <div class=\"section-header\">\n <h2 class=\"section-title\">\n ${playerStats.title ?? 'Your Position'}\n </h2>\n </div>\n ${this.renderPlayerStatsCard(playerStats)}\n </div>\n `\n : nothing}\n </div>\n </section>\n `;\n }\n}\n","\nimport { html } from 'lit';\n\nexport default function render(host) {\n return html`<div class=\"filters\">\n <div class=\"search-wrapper\">\n <span class=\"search-icon\">🔍</span>\n <input\n type=\"text\"\n class=\"search-input\"\n placeholder=\"Search players...\"\n .value=\"${host.searchQuery}\"\n @input=\"${host.handleSearchInput}\"\n />\n </div>\n\n <div class=\"timeframe-tabs\">${host.renderTimeframeTabs()}</div>\n\n <select\n class=\"category-select\"\n .value=\"${host.activeCategory}\"\n @change=\"${host.handleCategoryChange}\"\n >\n ${host.renderCategoryOptions()}\n </select>\n</div>\n`;\n}\n","import { html, LitElement } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { customElement } from '../../../../../lit/safe-custom-element.js';\nimport { scss } from '../../../../../lit/scss.js';\nimport {\n CATEGORY_OPTIONS,\n DEFAULT_CATEGORY,\n DEFAULT_TIMEFRAME,\n SF_LEADERBOARD_FILTERS,\n TIMEFRAME_OPTIONS,\n} from '../../constants/index.js';\nimport {\n SF_LEADERBOARD_CATEGORY_CHANGE,\n SF_LEADERBOARD_SEARCH_CHANGE,\n SF_LEADERBOARD_TIMEFRAME_CHANGE,\n} from '../../types/events.js';\nimport { sfLeaderboardTheme } from '../../../../../theme/styles.js';\nimport type { Category, TimeFrame } from '../../types/data.js';\nimport type { FiltersHost } from './filters.host.js';\nimport renderTemplate from './filters.html?lit-html';\nimport styles from './filters.scss?inline';\n\n@customElement(SF_LEADERBOARD_FILTERS)\nexport class SfLeaderboardFilters extends LitElement implements FiltersHost {\n static styles = [sfLeaderboardTheme, scss(styles)];\n\n @property({ type: String }) activeTimeframe: TimeFrame = DEFAULT_TIMEFRAME;\n @property({ type: String }) activeCategory: Category = DEFAULT_CATEGORY;\n @property({ type: String }) searchQuery = '';\n\n private emit<T>(name: string, detail: T) {\n this.dispatchEvent(\n new CustomEvent(name, { detail, bubbles: true, composed: true }),\n );\n }\n\n handleSearchInput(e: Event) {\n const input = e.target as HTMLInputElement;\n this.emit(SF_LEADERBOARD_SEARCH_CHANGE, input.value);\n }\n\n handleTimeframeClick(value: TimeFrame) {\n this.emit(SF_LEADERBOARD_TIMEFRAME_CHANGE, value);\n }\n\n handleCategoryChange(e: Event) {\n const select = e.target as HTMLSelectElement;\n this.emit(SF_LEADERBOARD_CATEGORY_CHANGE, select.value as Category);\n }\n\n renderTimeframeTabs() {\n return html`${TIMEFRAME_OPTIONS.map(\n (tf) => html`\n <button\n class=\"tab-btn ${this.activeTimeframe === tf.value ? 'active' : ''}\"\n @click=\"${() => this.handleTimeframeClick(tf.value as TimeFrame)}\"\n >\n ${tf.label}\n </button>\n `,\n )}`;\n }\n\n renderCategoryOptions() {\n return html`${CATEGORY_OPTIONS.map(\n (cat) => html`<option value=\"${cat.value}\">${cat.label}</option>`,\n )}`;\n }\n\n render() {\n return renderTemplate(this);\n }\n}\n","\nimport { html } from 'lit';\n\nexport default function render(host) {\n return html`<div class=\"badge ${host.size} ${host.rankClass}\">\n ${host.renderRankContent()}\n</div>\n${host.renderTrend()}\n`;\n}\n","import { html, LitElement } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { customElement } from '../../../../../lit/safe-custom-element.js';\nimport { scss } from '../../../../../lit/scss.js';\nimport { SF_LEADERBOARD_RANK_BADGE } from '../../constants/tags.js';\nimport { sfLeaderboardTheme } from '../../../../../theme/styles.js';\nimport type { RankBadgeHost } from './rank-badge.host.js';\nimport renderTemplate from './rank-badge.html?lit-html';\nimport styles from './rank-badge.scss?inline';\n\n@customElement(SF_LEADERBOARD_RANK_BADGE)\nexport class SfLeaderboardRankBadge extends LitElement\n implements RankBadgeHost {\n static styles = [sfLeaderboardTheme, scss(styles)];\n\n @property({ type: Number }) rank = 1;\n @property({ type: Number }) previousRank?: number;\n @property({ type: String }) size: 'sm' | 'md' | 'lg' = 'md';\n @property({ type: Boolean }) showTrend = true;\n\n get rankClass(): string {\n return this.rank <= 3 ? `rank-${this.rank}` : 'rank-other';\n }\n\n private getIcon(): string {\n if (this.rank === 1) return '👑';\n if (this.rank === 2) return '🥈';\n if (this.rank === 3) return '🥉';\n return '';\n }\n\n private getTrend() {\n if (!this.previousRank || !this.showTrend) return null;\n const diff = this.previousRank - this.rank;\n if (diff > 0) return { icon: '↑', class: 'up', diff: `+${diff}` };\n if (diff < 0) return { icon: '↓', class: 'down', diff: `${diff}` };\n return { icon: '–', class: 'same', diff: '0' };\n }\n\n renderRankContent() {\n if (this.rank <= 3) {\n return html`\n <span class=\"icon\">${this.getIcon()}</span>\n <span class=\"rank-number\">${this.rank}</span>\n `;\n }\n return html`<span>#${this.rank}</span>`;\n }\n\n renderTrend() {\n const trend = this.getTrend();\n if (!trend) return html``;\n return html`\n <div class=\"trend ${trend.class}\">\n <span class=\"trend-icon\">${trend.icon}</span>\n <span>${trend.diff}</span>\n </div>\n `;\n }\n\n render() {\n return renderTemplate(this);\n }\n}\n","\nimport { html } from 'lit';\n\nexport default function render(host) {\n return html`<div class=\"avatar ${host.size} ${host.highlight ? 'highlight' : ''}\">\n ${host.renderAvatarContent()}\n</div>\n${host.renderOnlineIndicator()}\n`;\n}\n","import { html, LitElement } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { customElement } from '../../../../../lit/safe-custom-element.js';\nimport { scss } from '../../../../../lit/scss.js';\nimport { SF_LEADERBOARD_PLAYER_AVATAR } from '../../constants/tags.js';\nimport { sfLeaderboardTheme } from '../../../../../theme/styles.js';\nimport { getInitials } from '../../utils/utils.js';\nimport type { PlayerAvatarHost } from './player-avatar.host.js';\nimport renderTemplate from './player-avatar.html?lit-html';\nimport styles from './player-avatar.scss?inline';\n\n@customElement(SF_LEADERBOARD_PLAYER_AVATAR)\nexport class SfLeaderboardPlayerAvatar extends LitElement\n implements PlayerAvatarHost {\n static styles = [sfLeaderboardTheme, scss(styles)];\n\n @property({ type: String }) username = '';\n @property({ type: String }) avatar = '';\n @property({ type: String }) size: 'sm' | 'md' | 'lg' | 'xl' = 'md';\n @property({ type: Boolean }) isOnline = false;\n @property({ type: Boolean }) highlight = false;\n\n renderAvatarContent() {\n return this.avatar\n ? html`<img src=\"${this.avatar}\" alt=\"${this.username}\" />`\n : html`<span>${getInitials(this.username)}</span>`;\n }\n\n renderOnlineIndicator() {\n return this.isOnline\n ? html`<span class=\"online-indicator\"></span>`\n : html``;\n }\n\n render() {\n return renderTemplate(this);\n }\n}\n","\nimport { html } from 'lit';\n\nexport default function render(host) {\n return html`<div class=\"table-container\">\n <div class=\"table-header\">\n <div class=\"col-rank\">Rank</div>\n <div class=\"col-player\">Player</div>\n <div class=\"col-games text-center hide-mobile\">Games</div>\n <div class=\"col-win-rate text-center hide-mobile\">Win Rate</div>\n <div class=\"col-streak text-center hide-mobile\">Streak</div>\n <div class=\"col-winnings text-right\">Winnings</div>\n </div>\n <div class=\"table-body\">${host.renderRows()}</div>\n</div>\n`;\n}\n","import { html, LitElement } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { customElement } from '../../../../../lit/safe-custom-element.js';\nimport { scss } from '../../../../../lit/scss.js';\nimport { SF_LEADERBOARD_TABLE } from '../../constants/tags.js';\nimport { SF_LEADERBOARD_PLAYER_SELECT } from '../../types/events.js';\nimport { sfLeaderboardTheme } from '../../../../../theme/styles.js';\nimport type { Player } from '../../types/data.js';\nimport { formatCurrency } from '../../utils/utils.js';\nimport '../rank-badge/rank-badge.js';\nimport '../player-avatar/player-avatar.js';\nimport type { TableHost } from './table.host.js';\nimport renderTemplate from './table.html?lit-html';\nimport styles from './table.scss?inline';\n\n@customElement(SF_LEADERBOARD_TABLE)\nexport class SfLeaderboardTable extends LitElement implements TableHost {\n static styles = [sfLeaderboardTheme, scss(styles)];\n\n @property({ type: Array }) players: Player[] = [];\n\n private handlePlayerClick(player: Player) {\n this.dispatchEvent(\n new CustomEvent(SF_LEADERBOARD_PLAYER_SELECT, {\n detail: player,\n bubbles: true,\n composed: true,\n }),\n );\n }\n\n renderStreak(player: Player) {\n return player.streak > 0\n ? html`<span class=\"icon\">🔥</span>${player.streak}`\n : html`<span>-</span>`;\n }\n\n renderRows() {\n return html`${this.players.map(\n (player, index) => html`\n <div\n class=\"table-row ${player.rank <= 3 ? 'top-3' : ''}\"\n style=\"animation-delay: ${index * 50}ms\"\n @click=\"${() => this.handlePlayerClick(player)}\"\n >\n <div class=\"col-rank\">\n <sf-leaderboard-rank-badge\n rank=\"${player.rank}\"\n previousRank=\"${player.previousRank || player.rank}\"\n size=\"sm\"\n ></sf-leaderboard-rank-badge>\n </div>\n <div class=\"col-player player-cell\">\n <sf-leaderboard-player-avatar\n username=\"${player.username}\"\n avatar=\"${player.avatar || ''}\"\n size=\"sm\"\n ?isOnline=\"${player.isOnline}\"\n ?highlight=\"${player.rank <= 3}\"\n ></sf-leaderboard-player-avatar>\n <div class=\"player-details\">\n <div class=\"player-name ${player.rank <= 3 ? 'highlight' : ''}\">\n ${player.username}\n </div>\n <span class=\"player-level\">LVL ${player.level}</span>\n </div>\n </div>\n <div class=\"col-games stat-cell hide-mobile\">\n <span class=\"icon\">🏆</span>\n ${player.gamesPlayed.toLocaleString()}\n </div>\n <div\n class=\"col-win-rate stat-cell win-rate ${player.winRate >= 60\n ? 'high'\n : ''} hide-mobile\"\n >\n <span class=\"icon\">🎯</span>\n ${player.winRate}%\n </div>\n <div class=\"col-streak stat-cell streak hide-mobile\">\n ${this.renderStreak(player)}\n </div>\n <div class=\"col-winnings winnings-cell\">\n <span class=\"winnings ${player.rank <= 3 ? 'highlight' : ''}\">\n ${formatCurrency(player.totalWinnings)}\n </span>\n <span class=\"chevron\">→</span>\n </div>\n </div>\n `,\n )}`;\n }\n\n render() {\n return renderTemplate(this);\n }\n}\n","import { html, LitElement, nothing } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { customElement } from '../../../../lit/safe-custom-element.js';\nimport { scss } from '../../../../lit/scss.js';\nimport {\n DEFAULT_CATEGORY,\n DEFAULT_TIMEFRAME,\n SF_LEADERBOARD_TABLE_SECTION,\n} from '../../shared/constants/index.js';\nimport { sfLeaderboardTheme } from '../../../../theme/styles.js';\nimport type { Category, Player, TimeFrame } from '../../shared/types/data.js';\nimport {\n SF_LEADERBOARD_CATEGORY_CHANGE,\n SF_LEADERBOARD_PLAYER_SELECT,\n SF_LEADERBOARD_SEARCH_CHANGE,\n SF_LEADERBOARD_TIMEFRAME_CHANGE,\n} from '../../shared/types/events.js';\nimport type { SfLeaderboardTableSection as TableSectionData } from '../../shared/types/sections.js';\nimport '../../shared/components/filters/filters.js';\nimport '../../shared/components/table/table.js';\nimport styles from './table-section.scss?inline';\n\n@customElement(SF_LEADERBOARD_TABLE_SECTION)\nexport class SfLeaderboardTableBlock extends LitElement {\n static styles = [sfLeaderboardTheme, scss(styles)];\n\n @property({ attribute: false })\n section!: TableSectionData;\n\n private get timeframe() {\n return this.section.filters?.timeframe ?? DEFAULT_TIMEFRAME;\n }\n\n private get category() {\n return this.section.filters?.category ?? DEFAULT_CATEGORY;\n }\n\n private get searchQuery() {\n return this.section.filters?.searchQuery ?? '';\n }\n\n private onTimeframeChange(e: CustomEvent<TimeFrame>) {\n e.stopPropagation();\n this.dispatchEvent(\n new CustomEvent(SF_LEADERBOARD_TIMEFRAME_CHANGE, {\n detail: e.detail,\n bubbles: true,\n composed: true,\n }),\n );\n }\n\n private onCategoryChange(e: CustomEvent<Category>) {\n e.stopPropagation();\n this.dispatchEvent(\n new CustomEvent(SF_LEADERBOARD_CATEGORY_CHANGE, {\n detail: e.detail,\n bubbles: true,\n composed: true,\n }),\n );\n }\n\n private onSearchChange(e: CustomEvent<string>) {\n e.stopPropagation();\n this.dispatchEvent(\n new CustomEvent(SF_LEADERBOARD_SEARCH_CHANGE, {\n detail: e.detail,\n bubbles: true,\n composed: true,\n }),\n );\n }\n\n private onPlayerSelect(e: CustomEvent<Player>) {\n e.stopPropagation();\n this.dispatchEvent(\n new CustomEvent(SF_LEADERBOARD_PLAYER_SELECT, {\n detail: e.detail,\n bubbles: true,\n composed: true,\n }),\n );\n }\n\n render() {\n if (!this.section) return nothing;\n\n return html`\n <section class=\"section table-section\">\n ${this.section.title || this.section.subtitle\n ? html`\n <div class=\"table-section-header\">\n ${this.section.title\n ? html`<h2 class=\"section-title\">${this.section.title}</h2>`\n : nothing}\n ${this.section.subtitle\n ? html`<span class=\"table-subtitle\">${this.section.subtitle}</span>`\n : nothing}\n </div>\n `\n : nothing}\n ${this.section.filters\n ? html`\n <sf-leaderboard-filters\n activeTimeframe=${this.timeframe}\n activeCategory=${this.category}\n searchQuery=${this.searchQuery}\n @timeframe-change=${this.onTimeframeChange}\n @category-change=${this.onCategoryChange}\n @search-change=${this.onSearchChange}\n ></sf-leaderboard-filters>\n `\n : nothing}\n <sf-leaderboard-table\n .players=${this.section.players}\n @player-select=${this.onPlayerSelect}\n ></sf-leaderboard-table>\n </section>\n `;\n }\n}\n","import { html, LitElement, nothing } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { customElement } from '../../../../lit/safe-custom-element.js';\nimport { scss } from '../../../../lit/scss.js';\nimport { SF_LEADERBOARD_FOOTER_SECTION } from '../../shared/constants/tags.js';\nimport { sfLeaderboardTheme } from '../../../../theme/styles.js';\nimport styles from './footer-section.scss?inline';\n\n@customElement(SF_LEADERBOARD_FOOTER_SECTION)\nexport class SfLeaderboardFooterBlock extends LitElement {\n static styles = [sfLeaderboardTheme, scss(styles)];\n\n @property({ type: String })\n text = '';\n\n render() {\n if (!this.text) return nothing;\n return html`\n <footer class=\"page-footer\">\n <p>${this.text}</p>\n </footer>\n `;\n }\n}\n","import { html, LitElement, nothing } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { customElement } from '../../lit/safe-custom-element.js';\nimport { scss } from '../../lit/scss.js';\nimport { SF_LEADERBOARD_TAG } from './shared/constants/index.js';\nimport {\n createDefaultLeaderboardData,\n type SfLeaderboardData,\n} from './shared/data/index.js';\nimport {\n DEFAULT_CATEGORY,\n DEFAULT_TIMEFRAME,\n} from './shared/constants/defaults.js';\nimport {\n SF_LEADERBOARD_CATEGORY_CHANGE,\n SF_LEADERBOARD_PLAYER_SELECT,\n SF_LEADERBOARD_SEARCH_CHANGE,\n SF_LEADERBOARD_TIMEFRAME_CHANGE,\n} from './shared/types/events.js';\nimport { sfLeaderboardTheme } from '../../theme/styles.js';\nimport type { Category, Player, TimeFrame } from './shared/types/data.js';\nimport type { SfLeaderboardHost } from './sf-leaderboard.host.js';\nimport renderTemplate from './sf-leaderboard.html?lit-html';\nimport componentStyles from './sf-leaderboard.scss?inline';\nimport './sections/header-section/header-section.js';\nimport './sections/stats-section/stats-section.js';\nimport './sections/ranking-section/ranking-section.js';\nimport './sections/table-section/table-section.js';\nimport './sections/footer-section/footer-section.js';\n\n@customElement(SF_LEADERBOARD_TAG)\nexport class SfLeaderboard extends LitElement implements SfLeaderboardHost {\n static styles = [sfLeaderboardTheme, scss(componentStyles)];\n\n @property({ attribute: false })\n data: SfLeaderboardData = createDefaultLeaderboardData();\n\n get refreshContext() {\n const filters = this.data.table?.filters;\n return {\n timeframe: filters?.timeframe ?? DEFAULT_TIMEFRAME,\n category: filters?.category ?? DEFAULT_CATEGORY,\n };\n }\n\n get footerText() {\n return this.data.footer?.text ?? this.data.table?.footer?.text ?? '';\n }\n\n get rankingLookupPlayers(): Player[] {\n const table = this.data.table?.players ?? [];\n const podium = this.data.ranking?.podium?.players ?? [];\n return [...table, ...podium];\n }\n\n renderHeader() {\n if (!this.data.header) return nothing;\n return html`\n <sf-leaderboard-header-section\n .section=${this.data.header}\n .refreshContext=${this.refreshContext}\n ></sf-leaderboard-header-section>\n `;\n }\n\n renderStats() {\n if (!this.data.stats?.items?.length) return nothing;\n return html`\n <sf-leaderboard-stats-section\n .section=${this.data.stats}\n ></sf-leaderboard-stats-section>\n `;\n }\n\n renderRanking() {\n if (!this.data.ranking) return nothing;\n return html`\n <sf-leaderboard-ranking-section\n .ranking=${this.data.ranking}\n .lookupPlayers=${this.rankingLookupPlayers}\n ></sf-leaderboard-ranking-section>\n `;\n }\n\n renderTable() {\n if (!this.data.table) return nothing;\n return html`\n <sf-leaderboard-table-section\n .section=${this.data.table}\n @timeframe-change=${this.onTimeframeChange}\n @category-change=${this.onCategoryChange}\n @search-change=${this.onSearchChange}\n @player-select=${this.onPlayerSelect}\n ></sf-leaderboard-table-section>\n `;\n }\n\n renderFooter() {\n if (!this.footerText) return nothing;\n return html`\n <sf-leaderboard-footer-section\n text=${this.footerText}\n ></sf-leaderboard-footer-section>\n `;\n }\n\n onTimeframeChange(e: CustomEvent<TimeFrame>) {\n e.stopPropagation();\n this.dispatchEvent(\n new CustomEvent(SF_LEADERBOARD_TIMEFRAME_CHANGE, {\n detail: { timeframe: e.detail },\n bubbles: true,\n composed: true,\n }),\n );\n }\n\n onCategoryChange(e: CustomEvent<Category>) {\n e.stopPropagation();\n this.dispatchEvent(\n new CustomEvent(SF_LEADERBOARD_CATEGORY_CHANGE, {\n detail: { category: e.detail },\n bubbles: true,\n composed: true,\n }),\n );\n }\n\n onSearchChange(e: CustomEvent<string>) {\n e.stopPropagation();\n this.dispatchEvent(\n new CustomEvent(SF_LEADERBOARD_SEARCH_CHANGE, {\n detail: { query: e.detail },\n bubbles: true,\n composed: true,\n }),\n );\n }\n\n onPlayerSelect(e: CustomEvent<Player>) {\n e.stopPropagation();\n this.dispatchEvent(\n new CustomEvent(SF_LEADERBOARD_PLAYER_SELECT, {\n detail: { player: e.detail },\n bubbles: true,\n composed: true,\n }),\n );\n }\n\n render() {\n return renderTemplate(this);\n }\n}\n","/**\n * Registers components for the static docs site.\n * Bundled to docs/components.bundle.js by vite.docs.config.ts.\n */\nimport { DEFAULT_SF_LEADERBOARD_THEME } from '../src/theme/default-theme.js';\nimport { injectTheme } from '../src/theme/inject-theme.js';\nimport '../src/components/sf-leaderboard/sf-leaderboard.js';\n\ninjectTheme(DEFAULT_SF_LEADERBOARD_THEME);\n"],"names":["DEFAULT_SF_LEADERBOARD_THEME","defaultThemeJson","hexToRgbChannels","hex","normalized","g","b","TABLE_COLUMN_IDS","setRgbFromHex","vars","cssKey","channels","themeToCssVars","theme","palette","typography","placement","table","step","placements","key","p","colId","col","kebab","m","THEME_ATTR","injectTheme","root","value","t","e","s","o","n$3","r","n","S","c","i","h","a","l","d","u","f","y$1","y","v","_","$","x","E","A","C","V","N","I","L","z","H","M","R","k","Z","B","D","_a","customElement","tag","cls","scss","stylesheet","unsafeCSS","SF_LEADERBOARD_TAG","SF_LEADERBOARD_STAT_CARD","SF_LEADERBOARD_FILTERS","SF_LEADERBOARD_TABLE","SF_LEADERBOARD_PODIUM","SF_LEADERBOARD_RANK_BADGE","SF_LEADERBOARD_PLAYER_AVATAR","SF_LEADERBOARD_PLAYER_STATS_CARD","SF_LEADERBOARD_HEADER_SECTION","SF_LEADERBOARD_STATS_SECTION","SF_LEADERBOARD_RANKING_SECTION","SF_LEADERBOARD_TABLE_SECTION","SF_LEADERBOARD_FOOTER_SECTION","DEFAULT_LB_TITLE","DEFAULT_LB_SUBTITLE","DEFAULT_TIMEFRAME","DEFAULT_CATEGORY","DEFAULT_PLAYER_STATS_TITLE","DEFAULT_PLAYER_STATS_MESSAGE","DEFAULT_PLAYER_STATS_RANK","TIMEFRAME_OPTIONS","CATEGORY_OPTIONS","DEFAULT_OVERVIEW_STATS","DEFAULTS","createDefaultLeaderboardData","overrides","hasRankingContent","ranking","SF_LEADERBOARD_TIMEFRAME_CHANGE","SF_LEADERBOARD_CATEGORY_CHANGE","SF_LEADERBOARD_SEARCH_CHANGE","SF_LEADERBOARD_PLAYER_SELECT","SF_LEADERBOARD_REFRESH","sfLeaderboardTheme","sharedStyles","render","host","html","SfLeaderboardHeaderBlock","LitElement","ctx","nothing","showBack","backLabel","styles","__decorateClass","property","SfLeaderboardStatCard","renderTemplate","SfLeaderboardStatsBlock","stat","formatCurrency","amount","getInitials","name","badgeFor","player","mapPlayerToPodiumEntry","mapPlayersToPodiumEntries","players","SfLeaderboardPodium","rank","SfLeaderboardPlayerStatsCard","SfLeaderboardRankingBlock","block","percentileMatch","percentile","podium","playerStats","SfLeaderboardFilters","detail","input","select","tf","cat","SfLeaderboardRankBadge","diff","trend","SfLeaderboardPlayerAvatar","SfLeaderboardTable","index","SfLeaderboardTableBlock","SfLeaderboardFooterBlock","SfLeaderboard","filters","componentStyles"],"mappings":"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","x_google_ignoreList":[4,5,6,7,8]}
|
package/docs/docs.css
ADDED
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
* {
|
|
2
|
+
box-sizing: border-box;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
body {
|
|
6
|
+
margin: 0;
|
|
7
|
+
color: #333;
|
|
8
|
+
font-family: 'Open Sans', arial, sans-serif;
|
|
9
|
+
min-width: min-content;
|
|
10
|
+
min-height: 100vh;
|
|
11
|
+
font-size: 18px;
|
|
12
|
+
display: flex;
|
|
13
|
+
flex-direction: column;
|
|
14
|
+
align-items: stretch;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
#main-wrapper {
|
|
18
|
+
flex-grow: 1;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
main {
|
|
22
|
+
max-width: 1024px;
|
|
23
|
+
margin: 0 auto;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
a:visited {
|
|
27
|
+
color: inherit;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
header {
|
|
31
|
+
width: 100%;
|
|
32
|
+
display: flex;
|
|
33
|
+
flex-direction: column;
|
|
34
|
+
align-items: center;
|
|
35
|
+
justify-content: center;
|
|
36
|
+
height: 360px;
|
|
37
|
+
margin: 0;
|
|
38
|
+
background: linear-gradient(0deg, rgba(9,9,121,1) 0%, rgba(0,212,255,1) 100%);
|
|
39
|
+
color: white;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
footer {
|
|
43
|
+
width: 100%;
|
|
44
|
+
min-height: 120px;
|
|
45
|
+
background: gray;
|
|
46
|
+
color: white;
|
|
47
|
+
display: flex;
|
|
48
|
+
flex-direction: column;
|
|
49
|
+
justify-content: center;
|
|
50
|
+
padding: 12px;
|
|
51
|
+
margin-top: 64px;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
h1 {
|
|
55
|
+
font-size: 2.5em;
|
|
56
|
+
font-weight: 400;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
h2 {
|
|
60
|
+
font-size: 1.6em;
|
|
61
|
+
font-weight: 300;
|
|
62
|
+
margin: 64px 0 12px;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
h3 {
|
|
66
|
+
font-weight: 300;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
header h1 {
|
|
70
|
+
width: auto;
|
|
71
|
+
font-size: 2.8em;
|
|
72
|
+
margin: 0;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
header h2 {
|
|
76
|
+
width: auto;
|
|
77
|
+
margin: 0;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
nav {
|
|
81
|
+
display: grid;
|
|
82
|
+
width: 100%;
|
|
83
|
+
max-width: 100%;
|
|
84
|
+
grid-template-columns: repeat(auto-fit, 240px);
|
|
85
|
+
justify-content: center;
|
|
86
|
+
border-bottom: 1px solid #efefef;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
nav > a {
|
|
90
|
+
color: #444;
|
|
91
|
+
display: block;
|
|
92
|
+
flex: 1;
|
|
93
|
+
font-size: 18px;
|
|
94
|
+
padding: 20px 0;
|
|
95
|
+
text-align: center;
|
|
96
|
+
text-decoration: none;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
nav > a:hover {
|
|
100
|
+
text-decoration: underline;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
nav.collection {
|
|
104
|
+
border: none;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
nav.collection > ul {
|
|
108
|
+
padding: 0;
|
|
109
|
+
list-style: none;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
nav.collection > ul > li {
|
|
113
|
+
padding: 4px 0;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
nav.collection > ul > li.selected {
|
|
117
|
+
font-weight: 600;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
nav.collection a {
|
|
121
|
+
text-decoration: none;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
nav.collection a:hover {
|
|
125
|
+
text-decoration: underline;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
section.columns {
|
|
129
|
+
display: grid;
|
|
130
|
+
grid-template-columns: repeat(auto-fit, minmax(400px, 488px));
|
|
131
|
+
grid-gap: 48px;
|
|
132
|
+
justify-content: center;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
section.columns > div {
|
|
136
|
+
flex: 1;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
section.examples {
|
|
140
|
+
display: grid;
|
|
141
|
+
grid-template-columns: 240px minmax(400px, 784px);
|
|
142
|
+
grid-gap: 48px;
|
|
143
|
+
justify-content: center;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
section.examples h2:first-of-type {
|
|
147
|
+
margin-top: 0;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
table {
|
|
151
|
+
width: 100%;
|
|
152
|
+
border-collapse: collapse;
|
|
153
|
+
}
|
|
154
|
+
th {
|
|
155
|
+
font-weight: 600;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
td, th {
|
|
159
|
+
border: solid 1px #aaa;
|
|
160
|
+
padding: 4px;
|
|
161
|
+
text-align: left;
|
|
162
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
|
|
2
|
+
<!doctype html>
|
|
3
|
+
|
|
4
|
+
<html lang="en">
|
|
5
|
+
<head>
|
|
6
|
+
<meta charset="utf-8">
|
|
7
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
8
|
+
<title><sf-leaderboard> ⌲ Examples ⌲ Basic</title>
|
|
9
|
+
<link rel="stylesheet" href="../docs.css">
|
|
10
|
+
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:300,400,600|Roboto+Mono">
|
|
11
|
+
<link href="../prism-okaidia.css" rel="stylesheet" />
|
|
12
|
+
<script type="module" src="../components.bundle.js"></script>
|
|
13
|
+
</head>
|
|
14
|
+
<body>
|
|
15
|
+
|
|
16
|
+
<header>
|
|
17
|
+
<h1><sf-leaderboard></h1>
|
|
18
|
+
<h2>Oddsmith web components</h2>
|
|
19
|
+
</header>
|
|
20
|
+
|
|
21
|
+
<nav>
|
|
22
|
+
<a href="../">Home</a>
|
|
23
|
+
<a href="">Examples</a>
|
|
24
|
+
<a href="../api/">API</a>
|
|
25
|
+
<a href="../install/">Install</a>
|
|
26
|
+
</nav>
|
|
27
|
+
<div id="main-wrapper">
|
|
28
|
+
<main>
|
|
29
|
+
|
|
30
|
+
<h1>Example: Basic</h1>
|
|
31
|
+
<section class="examples">
|
|
32
|
+
<nav class="collection">
|
|
33
|
+
<ul>
|
|
34
|
+
|
|
35
|
+
<li class=selected>
|
|
36
|
+
<a href="">Default leaderboard</a>
|
|
37
|
+
</li>
|
|
38
|
+
|
|
39
|
+
</ul>
|
|
40
|
+
</nav>
|
|
41
|
+
<div>
|
|
42
|
+
<p><sf-leaderboard></sf-leaderboard></p>
|
|
43
|
+
<h3>HTML</h3>
|
|
44
|
+
<pre class="language-html"><code class="language-html"><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>sf-leaderboard</span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>sf-leaderboard</span><span class="token punctuation">></span></span></code></pre>
|
|
45
|
+
|
|
46
|
+
</div>
|
|
47
|
+
</section>
|
|
48
|
+
|
|
49
|
+
</main>
|
|
50
|
+
</div>
|
|
51
|
+
|
|
52
|
+
<footer>
|
|
53
|
+
<p>Oddsmith — brandable web components for gaming</p>
|
|
54
|
+
</footer>
|
|
55
|
+
</body>
|
|
56
|
+
</html>
|
package/docs/index.html
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
|
|
2
|
+
<!doctype html>
|
|
3
|
+
|
|
4
|
+
<html lang="en">
|
|
5
|
+
<head>
|
|
6
|
+
<meta charset="utf-8">
|
|
7
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
8
|
+
<title><sf-leaderboard> ⌲ Home</title>
|
|
9
|
+
<link rel="stylesheet" href="docs.css">
|
|
10
|
+
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:300,400,600|Roboto+Mono">
|
|
11
|
+
<link href="prism-okaidia.css" rel="stylesheet" />
|
|
12
|
+
<script type="module" src="components.bundle.js"></script>
|
|
13
|
+
</head>
|
|
14
|
+
<body>
|
|
15
|
+
|
|
16
|
+
<header>
|
|
17
|
+
<h1><sf-leaderboard></h1>
|
|
18
|
+
<h2>Oddsmith web components</h2>
|
|
19
|
+
</header>
|
|
20
|
+
|
|
21
|
+
<nav>
|
|
22
|
+
<a href="">Home</a>
|
|
23
|
+
<a href="examples/">Examples</a>
|
|
24
|
+
<a href="api/">API</a>
|
|
25
|
+
<a href="install/">Install</a>
|
|
26
|
+
</nav>
|
|
27
|
+
<div id="main-wrapper">
|
|
28
|
+
<main>
|
|
29
|
+
<h1><sf-leaderboard></h1>
|
|
30
|
+
<p><code><sf-leaderboard></code> is a themeable leaderboard web component built with Lit. Use it in any app that supports custom elements.</p>
|
|
31
|
+
<h2>As easy as HTML</h2>
|
|
32
|
+
<section class="columns">
|
|
33
|
+
<div>
|
|
34
|
+
<p><code><sf-leaderboard></code> is a custom element. Drop it anywhere you use HTML.</p>
|
|
35
|
+
<pre class="language-html"><code class="language-html"><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>sf-leaderboard</span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>sf-leaderboard</span><span class="token punctuation">></span></span></code></pre>
|
|
36
|
+
</div>
|
|
37
|
+
<div>
|
|
38
|
+
<p><sf-leaderboard></sf-leaderboard></p>
|
|
39
|
+
</div>
|
|
40
|
+
</section>
|
|
41
|
+
<h2>With npm</h2>
|
|
42
|
+
<p>Install the package and import the component entry so it registers itself:</p>
|
|
43
|
+
<pre class="language-js"><code class="language-js"><span class="token keyword">import</span> <span class="token string">'@oddsmith/core/sf-leaderboard'</span><span class="token punctuation">;</span></code></pre>
|
|
44
|
+
<pre class="language-html"><code class="language-html"><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>sf-leaderboard</span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>sf-leaderboard</span><span class="token punctuation">></span></span></code></pre>
|
|
45
|
+
|
|
46
|
+
</main>
|
|
47
|
+
</div>
|
|
48
|
+
|
|
49
|
+
<footer>
|
|
50
|
+
<p>Oddsmith — brandable web components for gaming</p>
|
|
51
|
+
</footer>
|
|
52
|
+
</body>
|
|
53
|
+
</html>
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
|
|
2
|
+
<!doctype html>
|
|
3
|
+
|
|
4
|
+
<html lang="en">
|
|
5
|
+
<head>
|
|
6
|
+
<meta charset="utf-8">
|
|
7
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
8
|
+
<title><sf-leaderboard> ⌲ Install</title>
|
|
9
|
+
<link rel="stylesheet" href="../docs.css">
|
|
10
|
+
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:300,400,600|Roboto+Mono">
|
|
11
|
+
<link href="../prism-okaidia.css" rel="stylesheet" />
|
|
12
|
+
<script type="module" src="../components.bundle.js"></script>
|
|
13
|
+
</head>
|
|
14
|
+
<body>
|
|
15
|
+
|
|
16
|
+
<header>
|
|
17
|
+
<h1><sf-leaderboard></h1>
|
|
18
|
+
<h2>Oddsmith web components</h2>
|
|
19
|
+
</header>
|
|
20
|
+
|
|
21
|
+
<nav>
|
|
22
|
+
<a href="../">Home</a>
|
|
23
|
+
<a href="../examples/">Examples</a>
|
|
24
|
+
<a href="../api/">API</a>
|
|
25
|
+
<a href="">Install</a>
|
|
26
|
+
</nav>
|
|
27
|
+
<div id="main-wrapper">
|
|
28
|
+
<main>
|
|
29
|
+
<h1>Install</h1>
|
|
30
|
+
<p>Components are published as ES modules from the <code>@oddsmith/core</code> package.</p>
|
|
31
|
+
<h2>Local installation</h2>
|
|
32
|
+
<pre class="language-bash"><code class="language-bash"><span class="token function">npm</span> i @oddsmith/core</code></pre>
|
|
33
|
+
<pre class="language-js"><code class="language-js"><span class="token keyword">import</span> <span class="token string">'@oddsmith/core/sf-leaderboard'</span><span class="token punctuation">;</span></code></pre>
|
|
34
|
+
<h2>From <code>dist/</code> after building this repo</h2>
|
|
35
|
+
<pre class="language-js"><code class="language-js"><span class="token keyword">import</span> <span class="token string">'../dist/sf-leaderboard/index.js'</span><span class="token punctuation">;</span></code></pre>
|
|
36
|
+
<pre class="language-html"><code class="language-html"><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>sf-leaderboard</span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>sf-leaderboard</span><span class="token punctuation">></span></span></code></pre>
|
|
37
|
+
|
|
38
|
+
</main>
|
|
39
|
+
</div>
|
|
40
|
+
|
|
41
|
+
<footer>
|
|
42
|
+
<p>Oddsmith — brandable web components for gaming</p>
|
|
43
|
+
</footer>
|
|
44
|
+
</body>
|
|
45
|
+
</html>
|