@adiakys/feeling-lucky 0.0.0-stage → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (121) hide show
  1. package/LICENSE +674 -0
  2. package/README.md +227 -2
  3. package/dist/config/resolve.d.ts +4 -0
  4. package/dist/config/types.d.ts +62 -0
  5. package/dist/de-B56NsnDF.js +458 -0
  6. package/dist/developer/panel.d.ts +61 -0
  7. package/dist/developer/rig.d.ts +2 -0
  8. package/dist/developer/settings.d.ts +30 -0
  9. package/dist/engine/awards.d.ts +12 -0
  10. package/dist/engine/cards.d.ts +44 -0
  11. package/dist/engine/cashout.d.ts +32 -0
  12. package/dist/engine/dealer.d.ts +21 -0
  13. package/dist/engine/outcome.d.ts +13 -0
  14. package/dist/engine/pachinko.d.ts +58 -0
  15. package/dist/engine/random.d.ts +6 -0
  16. package/dist/engine/rig.d.ts +28 -0
  17. package/dist/engine/roulette.d.ts +53 -0
  18. package/dist/engine/scratch.d.ts +40 -0
  19. package/dist/engine/slot.d.ts +19 -0
  20. package/dist/engine/themes.d.ts +30 -0
  21. package/dist/engine/tiers.d.ts +64 -0
  22. package/dist/engine/wheel.d.ts +47 -0
  23. package/dist/es-9iWwCe8s.js +458 -0
  24. package/dist/feeling-lucky.iife.js +1494 -0
  25. package/dist/feeling-lucky.js +65 -0
  26. package/dist/fr-Y2BcCS3U.js +458 -0
  27. package/dist/games/blackjack/blackjack.d.ts +48 -0
  28. package/dist/games/cards/card.d.ts +5 -0
  29. package/dist/games/cards/dealer.d.ts +9 -0
  30. package/dist/games/cards/table.d.ts +12 -0
  31. package/dist/games/holdem/holdem.d.ts +29 -0
  32. package/dist/games/index.d.ts +9 -0
  33. package/dist/games/pachinko/pachinko.d.ts +53 -0
  34. package/dist/games/roulette/roulette.d.ts +63 -0
  35. package/dist/games/roulette/table.d.ts +19 -0
  36. package/dist/games/roulette/track.d.ts +18 -0
  37. package/dist/games/roulette/wheel.d.ts +9 -0
  38. package/dist/games/scratch/covers.d.ts +3 -0
  39. package/dist/games/scratch/double.d.ts +3 -0
  40. package/dist/games/scratch/forever.d.ts +3 -0
  41. package/dist/games/scratch/scratch.d.ts +39 -0
  42. package/dist/games/slot/breakaway.d.ts +32 -0
  43. package/dist/games/slot/machine.d.ts +18 -0
  44. package/dist/games/slot/slot.d.ts +32 -0
  45. package/dist/games/slot/takeoff.d.ts +28 -0
  46. package/dist/games/wheel/coin.d.ts +19 -0
  47. package/dist/games/wheel/face.d.ts +18 -0
  48. package/dist/games/wheel/hunt.d.ts +15 -0
  49. package/dist/games/wheel/wheel.d.ts +64 -0
  50. package/dist/i18n-it2FlmVZ.js +490 -0
  51. package/dist/index.d.ts +4 -0
  52. package/dist/it-CNSOLgaT.js +458 -0
  53. package/dist/locales/de/cards.d.ts +68 -0
  54. package/dist/locales/de/developer.d.ts +71 -0
  55. package/dist/locales/de/index.d.ts +2 -0
  56. package/dist/locales/de/pachinko.d.ts +26 -0
  57. package/dist/locales/de/room.d.ts +86 -0
  58. package/dist/locales/de/roulette.d.ts +77 -0
  59. package/dist/locales/de/scratch.d.ts +56 -0
  60. package/dist/locales/de/slot.d.ts +61 -0
  61. package/dist/locales/de/wheel.d.ts +45 -0
  62. package/dist/locales/en/cards.d.ts +68 -0
  63. package/dist/locales/en/developer.d.ts +71 -0
  64. package/dist/locales/en/index.d.ts +2 -0
  65. package/dist/locales/en/pachinko.d.ts +26 -0
  66. package/dist/locales/en/room.d.ts +86 -0
  67. package/dist/locales/en/roulette.d.ts +77 -0
  68. package/dist/locales/en/scratch.d.ts +56 -0
  69. package/dist/locales/en/slot.d.ts +61 -0
  70. package/dist/locales/en/wheel.d.ts +45 -0
  71. package/dist/locales/es/cards.d.ts +68 -0
  72. package/dist/locales/es/developer.d.ts +71 -0
  73. package/dist/locales/es/index.d.ts +2 -0
  74. package/dist/locales/es/pachinko.d.ts +26 -0
  75. package/dist/locales/es/room.d.ts +86 -0
  76. package/dist/locales/es/roulette.d.ts +77 -0
  77. package/dist/locales/es/scratch.d.ts +56 -0
  78. package/dist/locales/es/slot.d.ts +61 -0
  79. package/dist/locales/es/wheel.d.ts +45 -0
  80. package/dist/locales/fr/cards.d.ts +68 -0
  81. package/dist/locales/fr/developer.d.ts +71 -0
  82. package/dist/locales/fr/index.d.ts +2 -0
  83. package/dist/locales/fr/pachinko.d.ts +26 -0
  84. package/dist/locales/fr/room.d.ts +86 -0
  85. package/dist/locales/fr/roulette.d.ts +77 -0
  86. package/dist/locales/fr/scratch.d.ts +56 -0
  87. package/dist/locales/fr/slot.d.ts +61 -0
  88. package/dist/locales/fr/wheel.d.ts +45 -0
  89. package/dist/locales/index.d.ts +7 -0
  90. package/dist/locales/it/cards.d.ts +68 -0
  91. package/dist/locales/it/developer.d.ts +71 -0
  92. package/dist/locales/it/index.d.ts +2 -0
  93. package/dist/locales/it/pachinko.d.ts +26 -0
  94. package/dist/locales/it/room.d.ts +86 -0
  95. package/dist/locales/it/roulette.d.ts +77 -0
  96. package/dist/locales/it/scratch.d.ts +56 -0
  97. package/dist/locales/it/slot.d.ts +61 -0
  98. package/dist/locales/it/wheel.d.ts +45 -0
  99. package/dist/locales/merge.d.ts +2 -0
  100. package/dist/merge-iGSNfZkz.js +10 -0
  101. package/dist/mount-CBUkAcVV.js +7109 -0
  102. package/dist/panel-tWJMt9kl.js +545 -0
  103. package/dist/room/boost.d.ts +2 -0
  104. package/dist/room/certificate.d.ts +22 -0
  105. package/dist/room/chips.d.ts +21 -0
  106. package/dist/room/lobby.d.ts +45 -0
  107. package/dist/room/mount.d.ts +6 -0
  108. package/dist/room/room.d.ts +74 -0
  109. package/dist/room/stage.d.ts +18 -0
  110. package/dist/room/theme.d.ts +15 -0
  111. package/dist/runtime/context.d.ts +34 -0
  112. package/dist/runtime/element.d.ts +15 -0
  113. package/dist/runtime/fx.d.ts +43 -0
  114. package/dist/runtime/i18n.d.ts +8 -0
  115. package/dist/runtime/icons.d.ts +2 -0
  116. package/dist/runtime/motion.d.ts +2 -0
  117. package/dist/runtime/signal.d.ts +6 -0
  118. package/dist/runtime/sound.d.ts +11 -0
  119. package/dist/signal-CAveEGrG.js +19 -0
  120. package/dist/styles/index.d.ts +1 -0
  121. package/package.json +56 -4
@@ -0,0 +1,74 @@
1
+ import { type PropertyValues } from 'lit';
2
+ import type { Dealer, Messages, Player, Prize, Win } from '../config/types';
3
+ import { type RoomContext } from '../runtime/context';
4
+ import { LuckyElement } from '../runtime/element';
5
+ import '../games';
6
+ import './certificate';
7
+ import './lobby';
8
+ import './theme';
9
+ declare module '../engine/rig' {
10
+ interface Decisions {
11
+ locale: {
12
+ context: Record<string, never>;
13
+ value: string;
14
+ };
15
+ }
16
+ }
17
+ export interface RoomConfig {
18
+ prizes: Prize[];
19
+ player: Player | null;
20
+ logo?: string;
21
+ dealers?: Dealer[];
22
+ locale?: string;
23
+ messages: Record<string, Messages>;
24
+ onWin?: (win: Win) => void;
25
+ onClaim?: (win: Win) => Promise<void>;
26
+ developer: {
27
+ passwordHash?: string;
28
+ } | null;
29
+ }
30
+ export declare class Room extends LuckyElement {
31
+ config: RoomConfig;
32
+ origin: {
33
+ x: number;
34
+ y: number;
35
+ };
36
+ protected room: RoomContext;
37
+ private phase;
38
+ private view;
39
+ private lobbyPage;
40
+ private options;
41
+ private round;
42
+ private certificate;
43
+ private banner;
44
+ private celebrating;
45
+ private soundOn;
46
+ private developerLoaded;
47
+ private section?;
48
+ private lightsCanvas?;
49
+ private fxCanvas?;
50
+ private lightsFrame;
51
+ private dutyCheck;
52
+ private dutyClock;
53
+ private ambient;
54
+ private boost;
55
+ constructor();
56
+ private get theme();
57
+ protected willUpdate(changed: PropertyValues<this>): void;
58
+ private get dealers();
59
+ private locale;
60
+ private context;
61
+ private go;
62
+ private finish;
63
+ private celebrate;
64
+ close(): void;
65
+ private toggleSound;
66
+ private onKey;
67
+ private startLights;
68
+ private stopLights;
69
+ private previousOverflow;
70
+ connectedCallback(): void;
71
+ firstUpdated(): void;
72
+ disconnectedCallback(): void;
73
+ render(): import("lit-html").TemplateResult<1>;
74
+ }
@@ -0,0 +1,18 @@
1
+ import { type TemplateResult } from 'lit';
2
+ import type { Translate } from '../runtime/i18n';
3
+ import { LuckyElement } from '../runtime/element';
4
+ export declare function stage(t: Translate, { state, rules, multiplier, dealer }: {
5
+ state: 'idle' | 'spinning' | 'won';
6
+ rules: string;
7
+ multiplier?: number;
8
+ dealer?: boolean;
9
+ }, game: TemplateResult, overlay?: TemplateResult): TemplateResult<1>;
10
+ export declare class Rules extends LuckyElement {
11
+ text: string;
12
+ private open;
13
+ private key;
14
+ private outside;
15
+ connectedCallback(): void;
16
+ disconnectedCallback(): void;
17
+ render(): TemplateResult<1>;
18
+ }
@@ -0,0 +1,15 @@
1
+ import { type Theme } from '../engine/themes';
2
+ import { LuckyElement } from '../runtime/element';
3
+ export declare class ThemeScene extends LuckyElement {
4
+ theme: Theme;
5
+ private canvas?;
6
+ private raf;
7
+ firstUpdated(): void;
8
+ disconnectedCallback(): void;
9
+ private start;
10
+ private ground;
11
+ private left;
12
+ private right;
13
+ private festoon;
14
+ render(): import("lit-html").TemplateResult<1>;
15
+ }
@@ -0,0 +1,34 @@
1
+ import type { TemplateResult } from 'lit';
2
+ import type { Dealer, GameId, Player, Prize, Tier } from '../config/types';
3
+ import type { Award, Board } from '../engine/awards';
4
+ import type { Outcome } from '../engine/outcome';
5
+ import type { Translate } from './i18n';
6
+ export interface GameOptions {
7
+ bonus?: {
8
+ prizeId: string;
9
+ tier: Tier;
10
+ award: Award;
11
+ };
12
+ }
13
+ export interface RoomContext {
14
+ prizes: Prize[];
15
+ prizeIds: string[];
16
+ board: Board;
17
+ player: Player | null;
18
+ dealers: Dealer[];
19
+ locale: string;
20
+ locales: string[];
21
+ t: Translate;
22
+ prize: (id: string) => Prize;
23
+ icon: (id: string) => string;
24
+ name: (id: string) => string;
25
+ color: (id: string) => string;
26
+ award: (tier: Tier, award: Award) => string;
27
+ logo: (className?: string) => TemplateResult;
28
+ finish: (outcome: Outcome) => void;
29
+ go: (view: GameId | 'lobby', options?: GameOptions) => void;
30
+ }
31
+ export declare const roomContext: {
32
+ __context__: RoomContext;
33
+ };
34
+ export declare const defaultColor: (index: number) => string;
@@ -0,0 +1,15 @@
1
+ import { LitElement } from 'lit';
2
+ import { type RoomContext } from './context';
3
+ import type { Signal } from './signal';
4
+ export declare class LuckyElement extends LitElement {
5
+ protected room: RoomContext;
6
+ private timers;
7
+ private unsubscribes;
8
+ private watched;
9
+ protected createRenderRoot(): this;
10
+ protected t(key: string, params?: Record<string, string | number>): string;
11
+ protected watch(...signals: Signal<unknown>[]): void;
12
+ protected later(callback: () => void, delay: number): number;
13
+ connectedCallback(): void;
14
+ disconnectedCallback(): void;
15
+ }
@@ -0,0 +1,43 @@
1
+ interface Particle {
2
+ x: number;
3
+ y: number;
4
+ vx: number;
5
+ vy: number;
6
+ type: 'strip' | 'spark' | 'flake';
7
+ gravity: number;
8
+ rotation: number;
9
+ spin: number;
10
+ flip: number;
11
+ flipSpeed: number;
12
+ width: number;
13
+ height: number;
14
+ color: string;
15
+ age: number;
16
+ life: number;
17
+ }
18
+ interface BurstOptions {
19
+ count?: number;
20
+ colors?: string[];
21
+ speed?: number;
22
+ spread?: number;
23
+ angle?: number;
24
+ type?: Particle['type'];
25
+ gravity?: number;
26
+ life?: number;
27
+ }
28
+ export declare const SPARKS: string[];
29
+ export declare const fx: {
30
+ canvas: HTMLCanvasElement | null;
31
+ particles: Particle[];
32
+ confetti: string[] | undefined;
33
+ running: boolean;
34
+ last: number;
35
+ attach(canvas: HTMLCanvasElement | null): void;
36
+ burst(x: number, y: number, { count, colors, speed, spread, angle, type, gravity, life }?: BurstOptions): void;
37
+ fountain(duration: number): void;
38
+ cannons(duration: number): void;
39
+ frame(time: number): void;
40
+ };
41
+ export declare function shake(element: Element, force?: number): void;
42
+ export declare function guilloche(cx: number, cy: number, scale?: number, layers?: number): string[];
43
+ export {};
@@ -0,0 +1,8 @@
1
+ import type { Messages } from '../config/types';
2
+ export declare const pageLocale: import("./signal").Signal<string>;
3
+ export declare function watchPageLocale(): void;
4
+ export declare const localeChain: (locale: string) => string[];
5
+ export declare const localeLoaded: (locale: string) => boolean;
6
+ export declare const loadLocale: (locale: string) => Promise<void>;
7
+ export type Translate = (key: string, params?: Record<string, string | number>) => string;
8
+ export declare function translator(locale: string, custom?: Record<string, Messages>): Translate;
@@ -0,0 +1,2 @@
1
+ import type { IconNode } from 'lucide';
2
+ export declare function icon(node: IconNode, className?: string): import("lit-html").TemplateResult<2>;
@@ -0,0 +1,2 @@
1
+ export declare const reducedMotion: () => boolean;
2
+ export declare const wait: (ms: number) => Promise<unknown>;
@@ -0,0 +1,6 @@
1
+ export interface Signal<T> {
2
+ value: T;
3
+ subscribe(listener: () => void): () => void;
4
+ notify(): void;
5
+ }
6
+ export declare function signal<T>(initial: T): Signal<T>;
@@ -0,0 +1,11 @@
1
+ export type SoundName = 'tick' | 'reel' | 'stop' | 'whoosh' | 'bounce' | 'chime' | 'win' | 'jackpot' | 'stamp' | 'scratch' | 'lever' | 'ambient' | 'thunder' | 'dealer';
2
+ export declare const sound: {
3
+ enabled: boolean;
4
+ context: AudioContext | null;
5
+ output: GainNode | null;
6
+ last: Partial<Record<SoundName, number>>;
7
+ enable(on: boolean): void;
8
+ partial(frequency: number, start: number, duration: number, amplitude: number): OscillatorNode;
9
+ noise(start: number, duration: number, amplitude: number, from: number, to?: number, q?: number): void;
10
+ play(name: SoundName, pitch?: number, volume?: number): void;
11
+ };
@@ -0,0 +1,19 @@
1
+ // src/runtime/signal.ts
2
+ function e(e) {
3
+ let t = e, n = /* @__PURE__ */ new Set();
4
+ return {
5
+ get value() {
6
+ return t;
7
+ },
8
+ set value(e) {
9
+ Object.is(e, t) || (t = e, this.notify());
10
+ },
11
+ subscribe(e) {
12
+ return n.add(e), () => n.delete(e);
13
+ },
14
+ notify() {
15
+ n.forEach((e) => e());
16
+ }
17
+ };
18
+ }
19
+ export { e as t };
@@ -0,0 +1 @@
1
+ export declare const ROOM_CSS: string;
package/package.json CHANGED
@@ -1,6 +1,58 @@
1
1
  {
2
2
  "name": "@adiakys/feeling-lucky",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
3
+ "version": "0.2.0",
4
+ "description": "A casino room for any web app: classic casino games that award the prizes you configure.",
5
+ "keywords": [
6
+ "casino",
7
+ "games",
8
+ "prizes",
9
+ "gamification",
10
+ "web-components",
11
+ "lit"
12
+ ],
13
+ "homepage": "https://github.com/Adiakys/feeling-lucky#readme",
14
+ "bugs": {
15
+ "url": "https://github.com/Adiakys/feeling-lucky/issues"
16
+ },
17
+ "repository": {
18
+ "type": "git",
19
+ "url": "git+https://github.com/Adiakys/feeling-lucky.git"
20
+ },
21
+ "license": "GPL-3.0-or-later",
22
+ "type": "module",
23
+ "files": [
24
+ "dist"
25
+ ],
26
+ "main": "./dist/feeling-lucky.js",
27
+ "module": "./dist/feeling-lucky.js",
28
+ "types": "./dist/index.d.ts",
29
+ "exports": {
30
+ ".": {
31
+ "types": "./dist/index.d.ts",
32
+ "import": "./dist/feeling-lucky.js"
33
+ }
34
+ },
35
+ "scripts": {
36
+ "dev": "vite playground",
37
+ "build": "vite build && tsc -p tsconfig.build.json",
38
+ "test": "vitest run",
39
+ "test:e2e": "playwright test",
40
+ "typecheck": "tsc --noEmit",
41
+ "prepare": "npm run build",
42
+ "build:demo": "vite build --config vite.demo.config.ts"
43
+ },
44
+ "devDependencies": {
45
+ "@lit/context": "^1.1.6",
46
+ "@playwright/test": "^1.49.1",
47
+ "happy-dom": "^21.0.4",
48
+ "lit": "^3.3.3",
49
+ "lucide": "^1.61.0",
50
+ "typescript": "^7.0.2",
51
+ "vite": "^8.3.5",
52
+ "vitest": "^5.0.5"
53
+ },
54
+ "publishConfig": {
55
+ "access": "public",
56
+ "provenance": true
57
+ }
58
+ }