@oddsmith/ui 1.0.0 → 1.0.1
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/README.md +1 -1
- package/dist/components/os-leaderboard-casino/assets/fallback/config.json +1 -1
- package/dist/components/os-leaderboard-casino/assets/fallback/defaults/glam-sections.json +3 -3
- package/dist/components/os-leaderboard-casino/assets/fallback/labels.json +1 -1
- package/dist/components/os-leaderboard-casino/assets/fallback/labels.json.js +7 -7
- package/dist/components/os-leaderboard-casino/assets/fallback/manifest.json +1 -1
- package/dist/components/os-leaderboard-casino/assets/fallback/presets.json +1 -1
- package/dist/components/os-leaderboard-casino/assets/fallback/presets.json.js +1 -1
- package/dist/components/os-leaderboard-casino/assets/fallback/resolved-presets.json +4 -4
- package/dist/components/os-leaderboard-casino/assets/fallback/resolved-presets.json.js +1 -1
- package/dist/components/os-leaderboard-casino/constants/defaults.d.ts +8 -0
- package/dist/components/os-leaderboard-casino/constants/index.d.ts +2 -0
- package/dist/components/os-leaderboard-casino/constants/tags.d.ts +22 -0
- package/dist/components/os-leaderboard-casino/constants/tags.js +6 -4
- package/dist/components/os-leaderboard-casino/constants/tags.js.map +1 -1
- package/dist/components/os-leaderboard-casino/container/os-leaderboard-casino.d.ts +35 -0
- package/dist/components/os-leaderboard-casino/container/os-leaderboard-casino.host.d.ts +13 -0
- package/dist/components/os-leaderboard-casino/container/os-leaderboard-casino.js +5 -5
- package/dist/components/os-leaderboard-casino/index.d.ts +36 -0
- package/dist/components/os-leaderboard-casino/index.js +23 -23
- package/dist/components/os-leaderboard-casino/integration/assemble-assets.d.ts +21 -0
- package/dist/components/os-leaderboard-casino/integration/assets-context.d.ts +26 -0
- package/dist/components/os-leaderboard-casino/integration/defaults-glam.d.ts +14 -0
- package/dist/components/os-leaderboard-casino/integration/defaults-new-money.d.ts +3 -0
- package/dist/components/os-leaderboard-casino/integration/index.d.ts +5 -0
- package/dist/components/os-leaderboard-casino/integration/labels.d.ts +1 -0
- package/dist/components/os-leaderboard-casino/integration/load-assets.d.ts +9 -0
- package/dist/components/os-leaderboard-casino/integration/presets.d.ts +1 -0
- package/dist/components/os-leaderboard-casino/integration/resolve-input.d.ts +20 -0
- package/dist/components/os-leaderboard-casino/integration/resolve-input.js +3 -3
- package/dist/components/os-leaderboard-casino/integration/themes.d.ts +1 -0
- package/dist/components/os-leaderboard-casino/sections/climb-section/climb-section.d.ts +19 -0
- package/dist/components/os-leaderboard-casino/sections/climb-section/climb-section.host.d.ts +15 -0
- package/dist/components/os-leaderboard-casino/sections/events-banner/components/event-icons.d.ts +5 -0
- package/dist/components/os-leaderboard-casino/sections/events-banner/events-banner.d.ts +16 -0
- package/dist/components/os-leaderboard-casino/sections/events-banner/events-banner.host.d.ts +8 -0
- package/dist/components/os-leaderboard-casino/sections/events-banner/events-banner.js +1 -0
- package/dist/components/os-leaderboard-casino/sections/events-banner/events-banner.js.map +1 -1
- package/dist/components/os-leaderboard-casino/sections/footer-section/footer-section.d.ts +10 -0
- package/dist/components/os-leaderboard-casino/sections/footer-section/footer-section.host.d.ts +3 -0
- package/dist/components/os-leaderboard-casino/sections/footer-section/footer-section.js +1 -0
- package/dist/components/os-leaderboard-casino/sections/footer-section/footer-section.js.map +1 -1
- package/dist/components/os-leaderboard-casino/sections/games-section/components/game-images.d.ts +1 -0
- package/dist/components/os-leaderboard-casino/sections/games-section/games-section.d.ts +20 -0
- package/dist/components/os-leaderboard-casino/sections/games-section/games-section.host.d.ts +7 -0
- package/dist/components/os-leaderboard-casino/sections/header-section/header-section.d.ts +12 -0
- package/dist/components/os-leaderboard-casino/sections/header-section/header-section.host.d.ts +8 -0
- package/dist/components/os-leaderboard-casino/sections/hero-section/hero-section.d.ts +37 -0
- package/dist/components/os-leaderboard-casino/sections/hero-section/hero-section.host.d.ts +20 -0
- package/dist/components/os-leaderboard-casino/sections/hero-section/hero-section.js +1 -0
- package/dist/components/os-leaderboard-casino/sections/hero-section/hero-section.js.map +1 -1
- package/dist/components/os-leaderboard-casino/sections/legals-section/legals-section.d.ts +18 -0
- package/dist/components/os-leaderboard-casino/sections/legals-section/legals-section.host.d.ts +8 -0
- package/dist/components/os-leaderboard-casino/sections/legals-section/legals-section.js +1 -0
- package/dist/components/os-leaderboard-casino/sections/legals-section/legals-section.js.map +1 -1
- package/dist/components/os-leaderboard-casino/sections/live-feed-section/live-feed-section.d.ts +13 -0
- package/dist/components/os-leaderboard-casino/sections/live-feed-section/live-feed-section.host.d.ts +8 -0
- package/dist/components/os-leaderboard-casino/sections/marquee-section/components/win-icons.d.ts +3 -0
- package/dist/components/os-leaderboard-casino/sections/marquee-section/marquee-item.d.ts +14 -0
- package/dist/components/os-leaderboard-casino/sections/marquee-section/marquee-section.d.ts +42 -0
- package/dist/components/os-leaderboard-casino/sections/marquee-section/marquee-section.host.d.ts +8 -0
- package/dist/components/os-leaderboard-casino/sections/marquee-section/marquee-variants.d.ts +6 -0
- package/dist/components/os-leaderboard-casino/sections/prize-section/components/medal-coin/medal-coin.d.ts +16 -0
- package/dist/components/os-leaderboard-casino/sections/prize-section/components/medal-coin/medal-coin.js +71 -0
- package/dist/components/os-leaderboard-casino/sections/prize-section/components/medal-coin/medal-coin.js.map +1 -0
- package/dist/components/os-leaderboard-casino/sections/prize-section/components/medal-coin/medal-coin.scss.js +5 -0
- package/dist/components/os-leaderboard-casino/sections/prize-section/components/medal-coin/medal-coin.scss.js.map +1 -0
- package/dist/components/os-leaderboard-casino/sections/prize-section/prize-section.d.ts +23 -0
- package/dist/components/os-leaderboard-casino/sections/prize-section/prize-section.host.d.ts +11 -0
- package/dist/components/os-leaderboard-casino/sections/prize-section/prize-section.js +15 -14
- package/dist/components/os-leaderboard-casino/sections/prize-section/prize-section.js.map +1 -1
- package/dist/components/os-leaderboard-casino/sections/stats-section/components/stat-band/stat-band.d.ts +17 -0
- package/dist/components/os-leaderboard-casino/sections/stats-section/components/stat-card/stat-card.d.ts +15 -0
- package/dist/components/os-leaderboard-casino/sections/stats-section/components/stat-chip/stat-chip.d.ts +17 -0
- package/dist/components/os-leaderboard-casino/sections/stats-section/components/stat-gauge/stat-gauge.d.ts +14 -0
- package/dist/components/os-leaderboard-casino/sections/stats-section/components/stat-icons.d.ts +5 -0
- package/dist/components/os-leaderboard-casino/sections/stats-section/components/stat-icons.js +11 -0
- package/dist/components/os-leaderboard-casino/sections/stats-section/components/stat-icons.js.map +1 -0
- package/dist/components/os-leaderboard-casino/sections/stats-section/components/stat-meter/stat-meter.d.ts +17 -0
- package/dist/components/os-leaderboard-casino/sections/stats-section/components/stat-rail/stat-rail.d.ts +17 -0
- package/dist/components/os-leaderboard-casino/sections/stats-section/components/stat-rail/stat-rail.js +61 -0
- package/dist/components/os-leaderboard-casino/sections/stats-section/components/stat-rail/stat-rail.js.map +1 -0
- package/dist/components/os-leaderboard-casino/sections/stats-section/components/stat-rail/stat-rail.scss.js +5 -0
- package/dist/components/os-leaderboard-casino/sections/stats-section/components/stat-rail/stat-rail.scss.js.map +1 -0
- package/dist/components/os-leaderboard-casino/sections/stats-section/stats-section.d.ts +16 -0
- package/dist/components/os-leaderboard-casino/sections/stats-section/stats-section.host.d.ts +13 -0
- package/dist/components/os-leaderboard-casino/sections/stats-section/stats-section.js +14 -12
- package/dist/components/os-leaderboard-casino/sections/stats-section/stats-section.js.map +1 -1
- package/dist/components/os-leaderboard-casino/sections/table-section/table-section.d.ts +31 -0
- package/dist/components/os-leaderboard-casino/sections/table-section/table-section.host.d.ts +15 -0
- package/dist/components/os-leaderboard-casino/sections/table-section/table-section.js +1 -0
- package/dist/components/os-leaderboard-casino/sections/table-section/table-section.js.map +1 -1
- package/dist/components/os-leaderboard-casino/services/adapter.service.d.ts +11 -0
- package/dist/components/os-leaderboard-casino/services/icon.service.d.ts +28 -0
- package/dist/components/os-leaderboard-casino/services/index.d.ts +2 -0
- package/dist/components/os-leaderboard-casino/theme/index.d.ts +3 -0
- package/dist/components/os-leaderboard-casino/theme/prize-icons.d.ts +1 -0
- package/dist/components/os-leaderboard-casino/theme/prize-resolve.d.ts +5 -0
- package/dist/components/os-leaderboard-casino/theme/styles.d.ts +9 -0
- package/dist/components/os-leaderboard-casino/theme/vip-icons.d.ts +2 -0
- package/dist/components/os-leaderboard-casino/theme/vip-mark.d.ts +7 -0
- package/dist/components/os-leaderboard-casino/types/assets.d.ts +40 -0
- package/dist/components/os-leaderboard-casino/types/data.d.ts +106 -0
- package/dist/components/os-leaderboard-casino/types/events.d.ts +18 -0
- package/dist/components/os-leaderboard-casino/types/icons.d.ts +18 -0
- package/dist/components/os-leaderboard-casino/types/input.d.ts +73 -0
- package/dist/components/os-leaderboard-casino/types/ledger.d.ts +67 -0
- package/dist/components/os-leaderboard-casino/types/sections.d.ts +200 -0
- package/dist/components/os-leaderboard-casino/types/state.d.ts +69 -0
- package/dist/shared/lib/lit/component.d.ts +5 -0
- package/dist/shared/lib/lit/safe-custom-element.d.ts +5 -0
- package/dist/shared/lib/lit/scss.d.ts +3 -0
- package/dist/shared/lib/lit/template.d.ts +3 -0
- package/package.json +3 -2
- package/dist/index.d.ts +0 -734
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { LabelKey } from '../types/data.js';
|
|
2
|
+
import { GameIconName, IconHandle, IconRenderOptions, PrizeIconName, StatIconName, WinIconName } from '../types/icons.js';
|
|
3
|
+
import { TemplateResult } from 'lit';
|
|
4
|
+
export type { GameIconName, IconHandle, IconName, IconRenderOptions, PrizeIconName, StatIconName, WinIconName, } from '../types/icons.js';
|
|
5
|
+
/** Registry-backed icon loader for os-leaderboard-casino. */
|
|
6
|
+
export declare class IconService {
|
|
7
|
+
private readonly registry;
|
|
8
|
+
private loadPromise;
|
|
9
|
+
private loaded;
|
|
10
|
+
/** Load all bundled SVG and game image icons. Call once on app start. */
|
|
11
|
+
load(): Promise<void>;
|
|
12
|
+
/** Pick a loaded icon by registry name, e.g. `prize.free-spins`. */
|
|
13
|
+
get(name: string): IconHandle;
|
|
14
|
+
has(name: string): boolean;
|
|
15
|
+
resolvePrizeIconName(label: LabelKey | string | undefined): PrizeIconName;
|
|
16
|
+
resolveGameIconName(id: string, index: number): GameIconName;
|
|
17
|
+
resolveWinIconName(name: string, index: number): WinIconName;
|
|
18
|
+
resolveStatIconName(name: string): StatIconName;
|
|
19
|
+
render(name: string, options?: IconRenderOptions): TemplateResult;
|
|
20
|
+
svg(name: string): TemplateResult;
|
|
21
|
+
url(name: string): string;
|
|
22
|
+
private assertLoaded;
|
|
23
|
+
}
|
|
24
|
+
export declare const iconService: IconService;
|
|
25
|
+
export declare function prizeIconSvg(label: LabelKey | string | undefined): TemplateResult;
|
|
26
|
+
export declare function renderPrizeIcon(label: LabelKey | string | undefined, className?: string): TemplateResult;
|
|
27
|
+
export declare function resolveGameImage(id: string, index: number): string;
|
|
28
|
+
export declare function winIcon(name: string): TemplateResult;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export { AdapterService, adapterService } from './adapter.service.js';
|
|
2
|
+
export { IconService, iconService, type GameIconName, type IconHandle, type IconName, type IconRenderOptions, type PrizeIconName, type StatIconName, type WinIconName, prizeIconSvg, renderPrizeIcon, resolveGameImage, winIcon, } from './icon.service.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { prizeIconSvg, renderPrizeIcon, } from '../services/icon.service.js';
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { QuizPrize } from '../types/data.js';
|
|
2
|
+
/** Prize tier that covers `rank` (inclusive range). */
|
|
3
|
+
export declare function prizeForRank(prizes: QuizPrize[], rank: number): QuizPrize | undefined;
|
|
4
|
+
export declare function isPodiumPrize(prize: QuizPrize): boolean;
|
|
5
|
+
export declare function podiumVariantForRank(rank: 1 | 2 | 3): 'gold' | 'silver' | 'bronze';
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Design tokens — "casino noir" glam.
|
|
3
|
+
* Champagne gold on deep noir, glassy surfaces, soft neon accents.
|
|
4
|
+
* Each color token reads an external `--os-casino-*` override first so
|
|
5
|
+
* consumers can theme the component from outside the shadow DOM.
|
|
6
|
+
*/
|
|
7
|
+
export declare const osLeaderboardCasinoTheme: import('lit').CSSResult;
|
|
8
|
+
/** Shared glass-card recipe used across sections. */
|
|
9
|
+
export declare const glassCard: import('lit').CSSResult;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { nothing, TemplateResult } from 'lit';
|
|
2
|
+
/** v0 vip badge — slim outline tag with crown + VIP label. */
|
|
3
|
+
export declare function vipBadge(vip?: boolean): TemplateResult | typeof nothing;
|
|
4
|
+
export declare function renderPlayerName(username: string, options?: {
|
|
5
|
+
vip?: boolean;
|
|
6
|
+
suffix?: TemplateResult | typeof nothing;
|
|
7
|
+
}): TemplateResult;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { LeaderboardCasinoLabels, LeaderboardCasinoPresetId, LeaderboardCasinoPresetMeta } from './input.js';
|
|
2
|
+
import { OsLeaderboardCasinoConfig, OsLeaderboardCasinoMainSectionId, OsLeaderboardCasinoSectionId, OsLeaderboardCasinoState } from './state.js';
|
|
3
|
+
export interface LeaderboardCasinoAssetsTheme {
|
|
4
|
+
id: string;
|
|
5
|
+
label: string;
|
|
6
|
+
description?: string;
|
|
7
|
+
appearance: OsLeaderboardCasinoConfig['appearance'];
|
|
8
|
+
vars?: Record<string, string>;
|
|
9
|
+
}
|
|
10
|
+
export interface LeaderboardCasinoAssetsPreset {
|
|
11
|
+
id: LeaderboardCasinoPresetId;
|
|
12
|
+
label: string;
|
|
13
|
+
description: string;
|
|
14
|
+
appearance: OsLeaderboardCasinoConfig['appearance'];
|
|
15
|
+
themeId: string;
|
|
16
|
+
config: {
|
|
17
|
+
labels?: LeaderboardCasinoLabels;
|
|
18
|
+
enabled: readonly OsLeaderboardCasinoSectionId[];
|
|
19
|
+
mainOrder?: readonly OsLeaderboardCasinoMainSectionId[];
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
/** Static JSON bundle the parent app provides (or ships under `/assets/...`). */
|
|
23
|
+
export interface LeaderboardCasinoAssetsBundle {
|
|
24
|
+
version: 1;
|
|
25
|
+
labels: LeaderboardCasinoLabels;
|
|
26
|
+
themes: readonly LeaderboardCasinoAssetsTheme[];
|
|
27
|
+
presets: {
|
|
28
|
+
defaultPresetId: LeaderboardCasinoPresetId;
|
|
29
|
+
presets: readonly LeaderboardCasinoAssetsPreset[];
|
|
30
|
+
};
|
|
31
|
+
catalog: readonly LeaderboardCasinoPresetMeta[];
|
|
32
|
+
resolvedPresets: Record<string, OsLeaderboardCasinoState>;
|
|
33
|
+
}
|
|
34
|
+
/** Parent passes inline JSON and/or a base URL to static files under `assets/`. */
|
|
35
|
+
export interface LeaderboardCasinoAssetsInput {
|
|
36
|
+
/** Full bundle — preferred when parent already loaded JSON. */
|
|
37
|
+
bundle?: LeaderboardCasinoAssetsBundle | null;
|
|
38
|
+
/** e.g. `/assets/producer_output/os-leaderboard-casino/free` — loads `bundle.json`. */
|
|
39
|
+
baseUrl?: string;
|
|
40
|
+
}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Domain types for the casino leaderboard splash.
|
|
3
|
+
* Source: ai-context/casino-leaderboard-real/domain.md
|
|
4
|
+
*/
|
|
5
|
+
export type LabelType = 'CORE_GAME' | 'ON_DEMAND' | 'COMPETITOR';
|
|
6
|
+
export interface LabelValue {
|
|
7
|
+
value: string;
|
|
8
|
+
language: string;
|
|
9
|
+
}
|
|
10
|
+
/** Localized content container. */
|
|
11
|
+
export interface LabelKey {
|
|
12
|
+
uuid?: string;
|
|
13
|
+
key?: string;
|
|
14
|
+
description?: string;
|
|
15
|
+
hint?: string;
|
|
16
|
+
values: LabelValue[];
|
|
17
|
+
labelType: LabelType;
|
|
18
|
+
enValue?: string;
|
|
19
|
+
}
|
|
20
|
+
/** Resolve display text from a LabelKey (or pass plain strings through). */
|
|
21
|
+
export declare function labelText(label: LabelKey | string | undefined): string;
|
|
22
|
+
export type AssetType = 'GAME' | 'REPORT' | 'FONT' | 'CLIENT' | 'AUDIO';
|
|
23
|
+
export type SportType = string;
|
|
24
|
+
/** Campaign visual asset. */
|
|
25
|
+
export interface Asset {
|
|
26
|
+
uuid: string;
|
|
27
|
+
createdTs: string;
|
|
28
|
+
name: string;
|
|
29
|
+
label: string;
|
|
30
|
+
comment: string;
|
|
31
|
+
url: string;
|
|
32
|
+
tags: string[];
|
|
33
|
+
type: AssetType;
|
|
34
|
+
sportType: SportType;
|
|
35
|
+
}
|
|
36
|
+
export type PointsStrategy = 'DEFAULT';
|
|
37
|
+
export type PrizeAllocationStrategy = 'BEST_PRIZE' | 'SPLIT_PRIZE';
|
|
38
|
+
export interface QuizPrize {
|
|
39
|
+
uuid: string;
|
|
40
|
+
/** Display label; may be transformed client-side. */
|
|
41
|
+
label: LabelKey | string;
|
|
42
|
+
/** Monetary value when applicable. */
|
|
43
|
+
value?: number;
|
|
44
|
+
currency?: string;
|
|
45
|
+
/** Inclusive rank range this prize covers. */
|
|
46
|
+
rankFrom: number;
|
|
47
|
+
rankTo: number;
|
|
48
|
+
iconUrl?: string;
|
|
49
|
+
}
|
|
50
|
+
export interface QuizPrizePackage {
|
|
51
|
+
uuid: string;
|
|
52
|
+
name?: string;
|
|
53
|
+
prizes: QuizPrize[];
|
|
54
|
+
}
|
|
55
|
+
/** Shared metadata for all leaderboard campaigns. */
|
|
56
|
+
export interface LeaderboardBase {
|
|
57
|
+
uuid: string;
|
|
58
|
+
name: LabelKey;
|
|
59
|
+
infoText: LabelKey;
|
|
60
|
+
createdTs: string;
|
|
61
|
+
updatedTs: string;
|
|
62
|
+
endTs: string;
|
|
63
|
+
pointsStrategyType: PointsStrategy;
|
|
64
|
+
prizeAllocationStrategy: PrizeAllocationStrategy;
|
|
65
|
+
bannerAsset: Asset;
|
|
66
|
+
finished: boolean;
|
|
67
|
+
deleted: boolean;
|
|
68
|
+
}
|
|
69
|
+
/** Leaderboard campaign entity. */
|
|
70
|
+
export interface QuizLeaderboard extends LeaderboardBase {
|
|
71
|
+
prizePackage: QuizPrizePackage;
|
|
72
|
+
}
|
|
73
|
+
/** Represents a leaderboard position. */
|
|
74
|
+
export interface UserRank {
|
|
75
|
+
username: string;
|
|
76
|
+
rank: number;
|
|
77
|
+
points: number;
|
|
78
|
+
/** Total wager volume in the active window (money spent). */
|
|
79
|
+
totalBet?: number;
|
|
80
|
+
prize: QuizPrize | null;
|
|
81
|
+
splitCount: number;
|
|
82
|
+
/** Current user flag. */
|
|
83
|
+
you: boolean;
|
|
84
|
+
/** VIP player — shows gold badge across the layout. */
|
|
85
|
+
vip?: boolean;
|
|
86
|
+
showBorder?: boolean;
|
|
87
|
+
/** Rank at the previous snapshot — used to render ▲/▼ trend. */
|
|
88
|
+
previousRank?: number;
|
|
89
|
+
/** Win rate as an integer percentage, e.g. 68 = 68%. */
|
|
90
|
+
winRate?: number;
|
|
91
|
+
/** Number of qualifying games played in the active window. */
|
|
92
|
+
gamesPlayed?: number;
|
|
93
|
+
}
|
|
94
|
+
export type LeaderboardStatus = 'upcoming' | 'active' | 'completed' | 'cancelled';
|
|
95
|
+
export interface LeaderboardStatistics {
|
|
96
|
+
totalParticipants: number;
|
|
97
|
+
totalPoints?: number;
|
|
98
|
+
averagePoints?: number;
|
|
99
|
+
highestScore?: number;
|
|
100
|
+
prizesAwarded?: number;
|
|
101
|
+
}
|
|
102
|
+
export interface LeaderboardCountdown {
|
|
103
|
+
endTs: string;
|
|
104
|
+
remainingSeconds: number;
|
|
105
|
+
expired: boolean;
|
|
106
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { QuizPrize } from './data.js';
|
|
2
|
+
/** Client events emitted by `<os-leaderboard-casino>` (bubbling, composed). */
|
|
3
|
+
export declare const OS_LEADERBOARD_CASINO_OPEN = "leaderboard-open";
|
|
4
|
+
export declare const OS_LEADERBOARD_CASINO_SEARCH_CHANGE = "search-change";
|
|
5
|
+
export declare const OS_LEADERBOARD_CASINO_REFRESH = "refresh";
|
|
6
|
+
export declare const OS_LEADERBOARD_CASINO_PRIZE_CLICK = "prize-click";
|
|
7
|
+
export interface OsLeaderboardCasinoOpenDetail {
|
|
8
|
+
uuid: string;
|
|
9
|
+
}
|
|
10
|
+
export interface OsLeaderboardCasinoSearchChangeDetail {
|
|
11
|
+
query: string;
|
|
12
|
+
}
|
|
13
|
+
export interface OsLeaderboardCasinoRefreshDetail {
|
|
14
|
+
uuid: string;
|
|
15
|
+
}
|
|
16
|
+
export interface OsLeaderboardCasinoPrizeClickDetail {
|
|
17
|
+
prize: QuizPrize;
|
|
18
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { TemplateResult } from 'lit';
|
|
2
|
+
export type PrizeIconName = 'prize.grand-jackpot' | 'prize.elite-bonus' | 'prize.high-roller' | 'prize.free-spins' | 'prize.casino-credits' | 'prize.mystery-bonus' | 'prize.default';
|
|
3
|
+
export type GameIconName = 'game.cards' | 'game.chips' | 'game.dice' | 'game.gates-of-olympus' | 'game.roulette' | 'game.slot-machine';
|
|
4
|
+
export type WinIconName = 'win.bag' | 'win.coin' | 'win.trophy' | 'win.fire' | 'win.gem' | 'win.bolt';
|
|
5
|
+
export type StatIconName = 'stat.users' | 'stat.gift' | 'stat.clock';
|
|
6
|
+
export type VipIconName = 'vip.crown';
|
|
7
|
+
export type IconName = PrizeIconName | GameIconName | WinIconName | StatIconName | VipIconName;
|
|
8
|
+
export interface IconRenderOptions {
|
|
9
|
+
className?: string;
|
|
10
|
+
alt?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface IconHandle {
|
|
13
|
+
name: IconName;
|
|
14
|
+
kind: 'svg' | 'image';
|
|
15
|
+
url?: string;
|
|
16
|
+
svg(): TemplateResult;
|
|
17
|
+
render(options?: IconRenderOptions): TemplateResult;
|
|
18
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Free-tier public integration API.
|
|
3
|
+
* Layout is fixed on the golden preset — customize theme colors, copy, and data only.
|
|
4
|
+
*/
|
|
5
|
+
/** Built-in full glam layout shipped with @oddsmith/ui. */
|
|
6
|
+
export type LeaderboardCasinoPresetId = 'golden';
|
|
7
|
+
/** Copy + palette overrides (theme + labels only on free tier). */
|
|
8
|
+
export interface LeaderboardCasinoBranding {
|
|
9
|
+
themeId?: string;
|
|
10
|
+
labels?: Partial<LeaderboardCasinoLabels>;
|
|
11
|
+
/** CSS custom properties applied on the host element. */
|
|
12
|
+
themeVars?: Record<string, string>;
|
|
13
|
+
}
|
|
14
|
+
export interface LeaderboardCasinoLabels {
|
|
15
|
+
back?: string;
|
|
16
|
+
live?: string;
|
|
17
|
+
cta?: string;
|
|
18
|
+
}
|
|
19
|
+
/** Live campaign fields your backend already has. Everything else is optional. */
|
|
20
|
+
export interface LeaderboardCasinoCampaign {
|
|
21
|
+
uuid?: string;
|
|
22
|
+
title?: string;
|
|
23
|
+
description?: string;
|
|
24
|
+
/** ISO string or epoch ms */
|
|
25
|
+
endAt?: string | number;
|
|
26
|
+
finished?: boolean;
|
|
27
|
+
prizePool?: {
|
|
28
|
+
value: number;
|
|
29
|
+
currency?: string;
|
|
30
|
+
};
|
|
31
|
+
participantCount?: number;
|
|
32
|
+
footerText?: string;
|
|
33
|
+
}
|
|
34
|
+
/** Normalized player row — maps to glam preview table internally. */
|
|
35
|
+
export interface LeaderboardCasinoPlayer {
|
|
36
|
+
id?: string;
|
|
37
|
+
username: string;
|
|
38
|
+
rank: number;
|
|
39
|
+
points?: number;
|
|
40
|
+
winnings?: number;
|
|
41
|
+
isCurrentUser?: boolean;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Primary integration shape for the free npm package.
|
|
45
|
+
*
|
|
46
|
+
* @example
|
|
47
|
+
* ```ts
|
|
48
|
+
* board.input = {
|
|
49
|
+
* branding: { themeId: 'glam-emerald', labels: { cta: 'Play now' } },
|
|
50
|
+
* campaign: {
|
|
51
|
+
* uuid: api.id,
|
|
52
|
+
* title: api.name,
|
|
53
|
+
* endAt: api.endsAt,
|
|
54
|
+
* prizePool: { value: api.pool, currency: 'USD' },
|
|
55
|
+
* },
|
|
56
|
+
* players: api.leaderboard,
|
|
57
|
+
* };
|
|
58
|
+
* ```
|
|
59
|
+
*/
|
|
60
|
+
export interface LeaderboardCasinoInput {
|
|
61
|
+
/** Defaults to `golden` — the only free-tier layout. */
|
|
62
|
+
preset?: LeaderboardCasinoPresetId;
|
|
63
|
+
branding?: LeaderboardCasinoBranding;
|
|
64
|
+
campaign?: LeaderboardCasinoCampaign;
|
|
65
|
+
players?: LeaderboardCasinoPlayer[];
|
|
66
|
+
}
|
|
67
|
+
export interface LeaderboardCasinoPresetMeta {
|
|
68
|
+
id: LeaderboardCasinoPresetId;
|
|
69
|
+
label: string;
|
|
70
|
+
description: string;
|
|
71
|
+
appearance: 'glam' | 'new-money';
|
|
72
|
+
defaultThemeId: string;
|
|
73
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/** Ledger/table player shape used by integration input mapping. */
|
|
2
|
+
export type AccentTone = 'mint' | 'gold' | 'violet' | 'rose' | 'cyan';
|
|
3
|
+
export interface Player {
|
|
4
|
+
id: string;
|
|
5
|
+
username: string;
|
|
6
|
+
avatar?: string;
|
|
7
|
+
rank: number;
|
|
8
|
+
previousRank?: number;
|
|
9
|
+
totalWinnings: number;
|
|
10
|
+
scoreLabel?: string;
|
|
11
|
+
prize?: number;
|
|
12
|
+
mostPlayed?: string;
|
|
13
|
+
points?: number;
|
|
14
|
+
totalBet?: number;
|
|
15
|
+
winRate: number;
|
|
16
|
+
gamesPlayed: number;
|
|
17
|
+
streak: number;
|
|
18
|
+
level: number;
|
|
19
|
+
badges: string[];
|
|
20
|
+
isOnline?: boolean;
|
|
21
|
+
favoriteGame?: string;
|
|
22
|
+
biggestWin?: number;
|
|
23
|
+
/** Legacy mock field — not used by glam integration input. */
|
|
24
|
+
vipTier?: string;
|
|
25
|
+
}
|
|
26
|
+
export interface PreviewPlayer {
|
|
27
|
+
username: string;
|
|
28
|
+
rank: number;
|
|
29
|
+
points: number;
|
|
30
|
+
prizeLabel?: string;
|
|
31
|
+
prizeValue?: number;
|
|
32
|
+
isYou?: boolean;
|
|
33
|
+
}
|
|
34
|
+
export type FeedType = 'win' | 'join' | 'rank-up' | 'prize-drop';
|
|
35
|
+
export interface FeedItem {
|
|
36
|
+
id: string;
|
|
37
|
+
type: FeedType;
|
|
38
|
+
username: string;
|
|
39
|
+
message: string;
|
|
40
|
+
amount?: number;
|
|
41
|
+
currency?: string;
|
|
42
|
+
timestamp: string;
|
|
43
|
+
}
|
|
44
|
+
export interface MarqueeItem {
|
|
45
|
+
id: string;
|
|
46
|
+
icon?: string;
|
|
47
|
+
text: string;
|
|
48
|
+
amount?: number;
|
|
49
|
+
currency?: string;
|
|
50
|
+
}
|
|
51
|
+
export interface EventItem {
|
|
52
|
+
id: string;
|
|
53
|
+
icon?: string;
|
|
54
|
+
title: string;
|
|
55
|
+
subtitle?: string;
|
|
56
|
+
accent?: AccentTone;
|
|
57
|
+
}
|
|
58
|
+
export interface PrizeTier {
|
|
59
|
+
id: string;
|
|
60
|
+
label: string;
|
|
61
|
+
value: number;
|
|
62
|
+
currency?: string;
|
|
63
|
+
rankFrom: number;
|
|
64
|
+
rankTo: number;
|
|
65
|
+
}
|
|
66
|
+
export type TimeFrame = 'today' | 'week' | 'month' | 'all';
|
|
67
|
+
export type Category = 'all' | 'slots' | 'hybrid' | 'tables' | 'video-poker' | 'keno' | 'arcade' | 'blackjack' | 'roulette' | 'poker' | 'baccarat' | 'live';
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
import { Player } from './ledger.js';
|
|
2
|
+
import { Asset, LeaderboardStatus, PrizeAllocationStrategy, QuizPrize, QuizPrizePackage, UserRank } from './data.js';
|
|
3
|
+
/** Section ids, in render order. */
|
|
4
|
+
export type OsLeaderboardCasinoSectionId = 'marquee' | 'header' | 'events-banner' | 'hero' | 'prize' | 'stats' | 'games' | 'live-feed' | 'climb' | 'table' | 'footer' | 'legals';
|
|
5
|
+
/** Top bar: campaign branding. Omit `header` to hide. */
|
|
6
|
+
export interface OsLeaderboardCasinoHeaderSection {
|
|
7
|
+
title: string;
|
|
8
|
+
subtitle?: string;
|
|
9
|
+
backButton?: {
|
|
10
|
+
label?: string;
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
/** Accent palette for promotional event cards. */
|
|
14
|
+
export type OsLeaderboardCasinoEventAccent = 'gold' | 'violet' | 'green' | 'red';
|
|
15
|
+
/** One rotating promotional event. */
|
|
16
|
+
export interface OsLeaderboardCasinoEventItem {
|
|
17
|
+
id: string;
|
|
18
|
+
icon?: string;
|
|
19
|
+
title: string;
|
|
20
|
+
subtitle?: string;
|
|
21
|
+
accent?: OsLeaderboardCasinoEventAccent;
|
|
22
|
+
}
|
|
23
|
+
/** Auto-rotating events banner. Omit to hide. */
|
|
24
|
+
export interface OsLeaderboardCasinoEventsSection {
|
|
25
|
+
events: OsLeaderboardCasinoEventItem[];
|
|
26
|
+
/** Rotation interval; defaults to 4500ms. */
|
|
27
|
+
rotateMs?: number;
|
|
28
|
+
}
|
|
29
|
+
/** Live activity feed entry. */
|
|
30
|
+
export type OsLeaderboardCasinoFeedType = 'win' | 'join' | 'rank-up' | 'prize-drop';
|
|
31
|
+
export interface OsLeaderboardCasinoFeedItem {
|
|
32
|
+
id: string;
|
|
33
|
+
type: OsLeaderboardCasinoFeedType;
|
|
34
|
+
username: string;
|
|
35
|
+
message: string;
|
|
36
|
+
amount?: number;
|
|
37
|
+
currency?: string;
|
|
38
|
+
timestamp: string;
|
|
39
|
+
vip?: boolean;
|
|
40
|
+
}
|
|
41
|
+
/** Live activity rail. Omit to hide. */
|
|
42
|
+
export interface OsLeaderboardCasinoLiveFeedSection {
|
|
43
|
+
title?: string;
|
|
44
|
+
items: OsLeaderboardCasinoFeedItem[];
|
|
45
|
+
/** Max entries rendered; defaults to 8. */
|
|
46
|
+
maxVisible?: number;
|
|
47
|
+
}
|
|
48
|
+
/** One entry in the scrolling winners marquee. */
|
|
49
|
+
export interface OsLeaderboardCasinoMarqueeItem {
|
|
50
|
+
id: string;
|
|
51
|
+
/** Game ID matching the games section — resolves the same PNG icon. */
|
|
52
|
+
gameId?: string;
|
|
53
|
+
icon?: string;
|
|
54
|
+
text: string;
|
|
55
|
+
amount?: number;
|
|
56
|
+
currency?: string;
|
|
57
|
+
vip?: boolean;
|
|
58
|
+
}
|
|
59
|
+
/** Infinitely-scrolling winners ticker at the very top. Omit to hide. */
|
|
60
|
+
export interface OsLeaderboardCasinoMarqueeSection {
|
|
61
|
+
items: OsLeaderboardCasinoMarqueeItem[];
|
|
62
|
+
/** Seconds for one full loop; defaults to 30. */
|
|
63
|
+
speedSec?: number;
|
|
64
|
+
}
|
|
65
|
+
/** Current user's progress towards the next prize tier. Omit to hide. */
|
|
66
|
+
export interface OsLeaderboardCasinoClimbSection {
|
|
67
|
+
title?: string;
|
|
68
|
+
username: string;
|
|
69
|
+
rank: number;
|
|
70
|
+
points: number;
|
|
71
|
+
vip?: boolean;
|
|
72
|
+
/** Rank that unlocks the next prize tier, e.g. 10. */
|
|
73
|
+
nextTierRank: number;
|
|
74
|
+
/** Prize label of the next tier, e.g. "Free Spins ×10". */
|
|
75
|
+
nextTierLabel: string;
|
|
76
|
+
/** Points still needed to reach the next tier. */
|
|
77
|
+
pointsToNextTier: number;
|
|
78
|
+
/** Progress towards the next tier, 0–1. */
|
|
79
|
+
progress: number;
|
|
80
|
+
/** Rank places gained (+) or lost (−) today. */
|
|
81
|
+
trend?: number;
|
|
82
|
+
}
|
|
83
|
+
/** One qualifying game tile. */
|
|
84
|
+
export interface OsLeaderboardCasinoGameItem {
|
|
85
|
+
id: string;
|
|
86
|
+
title: string;
|
|
87
|
+
emoji?: string;
|
|
88
|
+
imageUrl?: string;
|
|
89
|
+
provider?: string;
|
|
90
|
+
/** Boost badge, e.g. "2× points". */
|
|
91
|
+
boost?: string;
|
|
92
|
+
accent?: OsLeaderboardCasinoEventAccent;
|
|
93
|
+
/** Display heat score, e.g. "100.0". Derived when omitted. */
|
|
94
|
+
heatScore?: number | string;
|
|
95
|
+
/** Players tracked, e.g. "25K". Derived when omitted. */
|
|
96
|
+
tracked?: string;
|
|
97
|
+
/** Largest win multiplier, e.g. "80,085x". Derived when omitted. */
|
|
98
|
+
maxHit?: string;
|
|
99
|
+
}
|
|
100
|
+
/** Horizontal strip of games that earn leaderboard points. Omit to hide. */
|
|
101
|
+
export interface OsLeaderboardCasinoGamesSection {
|
|
102
|
+
title?: string;
|
|
103
|
+
games: OsLeaderboardCasinoGameItem[];
|
|
104
|
+
}
|
|
105
|
+
/** Banner, contest name/description, end date, status. */
|
|
106
|
+
export interface OsLeaderboardCasinoHeroSection {
|
|
107
|
+
bannerAsset?: Asset;
|
|
108
|
+
title: string;
|
|
109
|
+
description?: string;
|
|
110
|
+
endTs?: string;
|
|
111
|
+
status?: LeaderboardStatus;
|
|
112
|
+
/** Headline figure, e.g. total prize pool ("$18,100"). */
|
|
113
|
+
prizePool?: string;
|
|
114
|
+
prizePoolLabel?: string;
|
|
115
|
+
/**
|
|
116
|
+
* Numeric prize pool. When set, takes precedence over `prizePool` and
|
|
117
|
+
* value changes animate with a rolling odometer count-up.
|
|
118
|
+
*/
|
|
119
|
+
prizePoolValue?: number;
|
|
120
|
+
prizePoolCurrency?: string;
|
|
121
|
+
}
|
|
122
|
+
/** Prize package + allocation strategy. */
|
|
123
|
+
export interface OsLeaderboardCasinoPrizeSection {
|
|
124
|
+
title?: string;
|
|
125
|
+
prizePackage?: QuizPrizePackage;
|
|
126
|
+
allocationStrategy?: PrizeAllocationStrategy;
|
|
127
|
+
}
|
|
128
|
+
/** Participation statistics. */
|
|
129
|
+
export interface OsLeaderboardCasinoStatsSection {
|
|
130
|
+
totalParticipants: number;
|
|
131
|
+
totalPrizes?: number;
|
|
132
|
+
biggestWin?: number;
|
|
133
|
+
biggestWinCurrency?: string;
|
|
134
|
+
}
|
|
135
|
+
/** Top players preview + optional pinned current user. */
|
|
136
|
+
export interface OsLeaderboardCasinoTableView {
|
|
137
|
+
topPlayers: UserRank[];
|
|
138
|
+
currentUser?: UserRank | Player;
|
|
139
|
+
/** CTA into the rankings view; defaults provided. */
|
|
140
|
+
ctaLabel?: string;
|
|
141
|
+
/** Prize tiers — used to resolve row prizes by rank (matches prize section). */
|
|
142
|
+
prizes?: QuizPrize[];
|
|
143
|
+
}
|
|
144
|
+
export type OsLeaderboardCasinoLegalLinkType = 'external' | 'internal';
|
|
145
|
+
export interface OsLeaderboardCasinoLegalLink {
|
|
146
|
+
label: string;
|
|
147
|
+
type: OsLeaderboardCasinoLegalLinkType;
|
|
148
|
+
/** URL for external links. Defaults to https://www.google.com. */
|
|
149
|
+
href?: string;
|
|
150
|
+
/** Body text for the popup dialog when type is 'internal'. Falls back to a default notice. */
|
|
151
|
+
content?: string;
|
|
152
|
+
}
|
|
153
|
+
/** Legal links strip — rules, FAQ, T&Cs. External links open in a new tab; internal links show a popup. */
|
|
154
|
+
export interface OsLeaderboardCasinoLegalsSection {
|
|
155
|
+
links: OsLeaderboardCasinoLegalLink[];
|
|
156
|
+
}
|
|
157
|
+
/** Page footer — plain text attribution only. */
|
|
158
|
+
export interface OsLeaderboardCasinoFooterSection {
|
|
159
|
+
text?: string;
|
|
160
|
+
}
|
|
161
|
+
/** Sections rendered inside the main column (orderable via `mainOrder`). */
|
|
162
|
+
export type OsLeaderboardCasinoMainSectionId = 'prize' | 'stats' | 'games' | 'climb' | 'table';
|
|
163
|
+
/**
|
|
164
|
+
* Layout config for `<os-leaderboard-casino>`.
|
|
165
|
+
* Only keys you pass are rendered, in order:
|
|
166
|
+
* marquee → events-banner → hero → main column (+ live-feed rail) →
|
|
167
|
+
* footer. The main column renders prize → stats → games → climb →
|
|
168
|
+
* table by default; pass `mainOrder` to rearrange it.
|
|
169
|
+
*/
|
|
170
|
+
export interface OsLeaderboardCasinoLayout {
|
|
171
|
+
marquee?: OsLeaderboardCasinoMarqueeSection;
|
|
172
|
+
header?: OsLeaderboardCasinoHeaderSection;
|
|
173
|
+
eventsBanner?: OsLeaderboardCasinoEventsSection;
|
|
174
|
+
hero?: OsLeaderboardCasinoHeroSection;
|
|
175
|
+
prize?: OsLeaderboardCasinoPrizeSection;
|
|
176
|
+
stats?: OsLeaderboardCasinoStatsSection;
|
|
177
|
+
games?: OsLeaderboardCasinoGamesSection;
|
|
178
|
+
liveFeed?: OsLeaderboardCasinoLiveFeedSection;
|
|
179
|
+
climb?: OsLeaderboardCasinoClimbSection;
|
|
180
|
+
table?: OsLeaderboardCasinoTableView;
|
|
181
|
+
footer?: OsLeaderboardCasinoFooterSection;
|
|
182
|
+
legals?: OsLeaderboardCasinoLegalsSection;
|
|
183
|
+
/** Custom order for the main-column sections. */
|
|
184
|
+
mainOrder?: OsLeaderboardCasinoMainSectionId[];
|
|
185
|
+
}
|
|
186
|
+
/** Theme contract (subset honored by the component). */
|
|
187
|
+
export interface OsLeaderboardCasinoTheme {
|
|
188
|
+
id: string;
|
|
189
|
+
name: string;
|
|
190
|
+
labels?: Record<string, string>;
|
|
191
|
+
hero?: {
|
|
192
|
+
bannerHeight?: string;
|
|
193
|
+
};
|
|
194
|
+
prize?: {
|
|
195
|
+
highlightStyle?: string;
|
|
196
|
+
};
|
|
197
|
+
leaderboard?: {
|
|
198
|
+
highlightCurrentUser?: boolean;
|
|
199
|
+
};
|
|
200
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { Category, Player, PrizeTier, TimeFrame } from './ledger.js';
|
|
2
|
+
import { PrizeAllocationStrategy, QuizPrizePackage, UserRank } from './data.js';
|
|
3
|
+
import { OsLeaderboardCasinoClimbSection, OsLeaderboardCasinoEventsSection, OsLeaderboardCasinoFooterSection, OsLeaderboardCasinoGameItem, OsLeaderboardCasinoGamesSection, OsLeaderboardCasinoHeroSection as OsLeaderboardCasinoGlamHeroSection, OsLeaderboardCasinoLegalsSection, OsLeaderboardCasinoMarqueeSection, OsLeaderboardCasinoStatsSection } from './sections.js';
|
|
4
|
+
export type OsLeaderboardCasinoAppearance = 'glam';
|
|
5
|
+
export type OsLeaderboardCasinoMainSectionId = 'prize' | 'stats' | 'games' | 'climb' | 'table';
|
|
6
|
+
export type OsLeaderboardCasinoSectionId = 'marquee' | 'events' | 'hero' | OsLeaderboardCasinoMainSectionId | 'footer' | 'legals';
|
|
7
|
+
export interface OsLeaderboardCasinoLabels {
|
|
8
|
+
back?: string;
|
|
9
|
+
live?: string;
|
|
10
|
+
cta?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface OsLeaderboardCasinoHeroSection extends Omit<OsLeaderboardCasinoGlamHeroSection, 'endTs'> {
|
|
13
|
+
endTs?: string | number;
|
|
14
|
+
showCta?: boolean;
|
|
15
|
+
ctaLabel?: string;
|
|
16
|
+
isRefreshing?: boolean;
|
|
17
|
+
}
|
|
18
|
+
export interface OsLeaderboardCasinoPrizeSection {
|
|
19
|
+
title?: string;
|
|
20
|
+
strategyLabel?: string;
|
|
21
|
+
prizePackage?: QuizPrizePackage;
|
|
22
|
+
allocationStrategy?: PrizeAllocationStrategy;
|
|
23
|
+
tiers?: PrizeTier[];
|
|
24
|
+
}
|
|
25
|
+
export interface OsLeaderboardCasinoTableSection {
|
|
26
|
+
mode: 'preview' | 'ledger';
|
|
27
|
+
title?: string;
|
|
28
|
+
topPlayers?: UserRank[];
|
|
29
|
+
currentUser?: UserRank | Player;
|
|
30
|
+
ctaLabel?: string;
|
|
31
|
+
players?: Player[];
|
|
32
|
+
searchPlaceholder?: string;
|
|
33
|
+
filters?: {
|
|
34
|
+
searchQuery?: string;
|
|
35
|
+
timeframe?: TimeFrame;
|
|
36
|
+
category?: Category;
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
export interface OsLeaderboardCasinoSectionData {
|
|
40
|
+
marquee?: OsLeaderboardCasinoMarqueeSection;
|
|
41
|
+
events?: OsLeaderboardCasinoEventsSection;
|
|
42
|
+
hero?: OsLeaderboardCasinoHeroSection;
|
|
43
|
+
prize?: OsLeaderboardCasinoPrizeSection;
|
|
44
|
+
stats?: OsLeaderboardCasinoStatsSection;
|
|
45
|
+
games?: OsLeaderboardCasinoGamesSection & {
|
|
46
|
+
items?: OsLeaderboardCasinoGameItem[];
|
|
47
|
+
};
|
|
48
|
+
climb?: OsLeaderboardCasinoClimbSection;
|
|
49
|
+
table?: OsLeaderboardCasinoTableSection;
|
|
50
|
+
footer?: OsLeaderboardCasinoFooterSection;
|
|
51
|
+
legals?: OsLeaderboardCasinoLegalsSection;
|
|
52
|
+
}
|
|
53
|
+
export interface OsLeaderboardCasinoConfig {
|
|
54
|
+
appearance: OsLeaderboardCasinoAppearance;
|
|
55
|
+
themeId: string;
|
|
56
|
+
labels?: OsLeaderboardCasinoLabels;
|
|
57
|
+
enabled: readonly OsLeaderboardCasinoSectionId[];
|
|
58
|
+
mainOrder?: readonly OsLeaderboardCasinoMainSectionId[];
|
|
59
|
+
/** Palette overrides — CSS custom properties on the host. */
|
|
60
|
+
themeVars?: Record<string, string>;
|
|
61
|
+
}
|
|
62
|
+
export interface OsLeaderboardCasinoState {
|
|
63
|
+
config: OsLeaderboardCasinoConfig;
|
|
64
|
+
sections: OsLeaderboardCasinoSectionData;
|
|
65
|
+
}
|
|
66
|
+
export declare const EMPTY_OS_LEADERBOARD_CASINO_STATE: OsLeaderboardCasinoState;
|
|
67
|
+
export type OsLeaderboardCasinoSectionPatch = {
|
|
68
|
+
[K in keyof OsLeaderboardCasinoSectionData]?: Partial<NonNullable<OsLeaderboardCasinoSectionData[K]>>;
|
|
69
|
+
};
|