@freegamestore/games 0.16.0 → 0.19.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 (114) hide show
  1. package/README.md +106 -8
  2. package/TOKENS.md +132 -0
  3. package/dist/Confetti.d.ts +18 -0
  4. package/dist/Confetti.d.ts.map +1 -0
  5. package/dist/Confetti.js +43 -0
  6. package/dist/Confetti.js.map +1 -0
  7. package/dist/GameAuth.d.ts.map +1 -1
  8. package/dist/GameAuth.js +5 -87
  9. package/dist/GameAuth.js.map +1 -1
  10. package/dist/GameButton.d.ts +2 -1
  11. package/dist/GameButton.d.ts.map +1 -1
  12. package/dist/GameButton.js +16 -67
  13. package/dist/GameButton.js.map +1 -1
  14. package/dist/GameConfirm.d.ts +1 -1
  15. package/dist/GameConfirm.d.ts.map +1 -1
  16. package/dist/GameConfirm.js +1 -7
  17. package/dist/GameConfirm.js.map +1 -1
  18. package/dist/GameModal.d.ts +3 -2
  19. package/dist/GameModal.d.ts.map +1 -1
  20. package/dist/GameModal.js +3 -40
  21. package/dist/GameModal.js.map +1 -1
  22. package/dist/GameOverScreen.d.ts +3 -2
  23. package/dist/GameOverScreen.d.ts.map +1 -1
  24. package/dist/GameOverScreen.js +3 -37
  25. package/dist/GameOverScreen.js.map +1 -1
  26. package/dist/GameResultScreen.d.ts +41 -0
  27. package/dist/GameResultScreen.d.ts.map +1 -0
  28. package/dist/GameResultScreen.js +25 -0
  29. package/dist/GameResultScreen.js.map +1 -0
  30. package/dist/GameShell.d.ts +3 -0
  31. package/dist/GameShell.d.ts.map +1 -1
  32. package/dist/GameShell.js +4 -43
  33. package/dist/GameShell.js.map +1 -1
  34. package/dist/GameTextSizeToggle.d.ts +1 -1
  35. package/dist/GameTextSizeToggle.d.ts.map +1 -1
  36. package/dist/GameTextSizeToggle.js +1 -16
  37. package/dist/GameTextSizeToggle.js.map +1 -1
  38. package/dist/GameThemeToggle.d.ts +1 -1
  39. package/dist/GameThemeToggle.d.ts.map +1 -1
  40. package/dist/GameThemeToggle.js +44 -21
  41. package/dist/GameThemeToggle.js.map +1 -1
  42. package/dist/GameTopbar.d.ts +12 -7
  43. package/dist/GameTopbar.d.ts.map +1 -1
  44. package/dist/GameTopbar.js +54 -188
  45. package/dist/GameTopbar.js.map +1 -1
  46. package/dist/GameTopbar.module.css +201 -0
  47. package/dist/Leaderboard.d.ts.map +1 -1
  48. package/dist/Leaderboard.js +2 -5
  49. package/dist/Leaderboard.js.map +1 -1
  50. package/dist/StartScreen.d.ts +41 -0
  51. package/dist/StartScreen.d.ts.map +1 -0
  52. package/dist/StartScreen.js +30 -0
  53. package/dist/StartScreen.js.map +1 -0
  54. package/dist/feel/ScorePopup.d.ts +20 -0
  55. package/dist/feel/ScorePopup.d.ts.map +1 -0
  56. package/dist/feel/ScorePopup.js +51 -0
  57. package/dist/feel/ScorePopup.js.map +1 -0
  58. package/dist/feel/easing.d.ts +14 -0
  59. package/dist/feel/easing.d.ts.map +1 -0
  60. package/dist/feel/easing.js +12 -0
  61. package/dist/feel/easing.js.map +1 -0
  62. package/dist/feel/haptics.d.ts +19 -0
  63. package/dist/feel/haptics.d.ts.map +1 -0
  64. package/dist/feel/haptics.js +24 -0
  65. package/dist/feel/haptics.js.map +1 -0
  66. package/dist/feel/index.d.ts +17 -0
  67. package/dist/feel/index.d.ts.map +1 -0
  68. package/dist/feel/index.js +17 -0
  69. package/dist/feel/index.js.map +1 -0
  70. package/dist/feel/particles.d.ts +46 -0
  71. package/dist/feel/particles.d.ts.map +1 -0
  72. package/dist/feel/particles.js +61 -0
  73. package/dist/feel/particles.js.map +1 -0
  74. package/dist/feel/reducedMotion.d.ts +6 -0
  75. package/dist/feel/reducedMotion.d.ts.map +1 -0
  76. package/dist/feel/reducedMotion.js +10 -0
  77. package/dist/feel/reducedMotion.js.map +1 -0
  78. package/dist/feel/shake.d.ts +6 -0
  79. package/dist/feel/shake.d.ts.map +1 -0
  80. package/dist/feel/shake.js +17 -0
  81. package/dist/feel/shake.js.map +1 -0
  82. package/dist/feel/tween.d.ts +9 -0
  83. package/dist/feel/tween.d.ts.map +1 -0
  84. package/dist/feel/tween.js +15 -0
  85. package/dist/feel/tween.js.map +1 -0
  86. package/dist/feel/useHaptics.d.ts +12 -0
  87. package/dist/feel/useHaptics.d.ts.map +1 -0
  88. package/dist/feel/useHaptics.js +16 -0
  89. package/dist/feel/useHaptics.js.map +1 -0
  90. package/dist/feel/useParticles.d.ts +18 -0
  91. package/dist/feel/useParticles.d.ts.map +1 -0
  92. package/dist/feel/useParticles.js +79 -0
  93. package/dist/feel/useParticles.js.map +1 -0
  94. package/dist/feel/useShake.d.ts +14 -0
  95. package/dist/feel/useShake.d.ts.map +1 -0
  96. package/dist/feel/useShake.js +17 -0
  97. package/dist/feel/useShake.js.map +1 -0
  98. package/dist/index.d.ts +5 -2
  99. package/dist/index.d.ts.map +1 -1
  100. package/dist/index.js +14 -2
  101. package/dist/index.js.map +1 -1
  102. package/dist/theme.css +93 -0
  103. package/dist/tokens.d.ts +112 -0
  104. package/dist/tokens.d.ts.map +1 -0
  105. package/dist/tokens.js +106 -0
  106. package/dist/tokens.js.map +1 -0
  107. package/dist/useGameSounds.d.ts.map +1 -1
  108. package/dist/useGameSounds.js +37 -15
  109. package/dist/useGameSounds.js.map +1 -1
  110. package/dist/useLeaderboard.d.ts +8 -1
  111. package/dist/useLeaderboard.d.ts.map +1 -1
  112. package/dist/useLeaderboard.js +21 -11
  113. package/dist/useLeaderboard.js.map +1 -1
  114. package/package.json +23 -7
@@ -1,113 +1,41 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- import { useEffect, useState } from 'react';
2
+ import { forwardRef, useEffect, useRef, useState } from 'react';
3
+ import styles from './GameTopbar.module.css';
3
4
  import { useSound } from './SoundContext.js';
5
+ /**
6
+ * Shared icon button for topbar controls. All buttons in the topbar (catalog,
7
+ * rules, play/pause, restart, about, sound, close) use this consistent sizing
8
+ * and behaviour. The `data-fgs-tb-btn` attribute is kept on every control so
9
+ * games that already target it keep working.
10
+ */
11
+ const TopbarIconButton = forwardRef(function TopbarIconButton({ onClick, href, target, rel, tone = 'muted', ariaLabel, ariaPressed, children }, ref) {
12
+ const className = `${styles.button} ${toneClass(tone)}`;
13
+ if (href) {
14
+ return (_jsx("a", { "data-fgs-tb-btn": true, href: href, target: target, rel: rel, className: `${className} ${styles.link}`, "aria-label": ariaLabel, children: children }));
15
+ }
16
+ return (_jsx("button", { ref: ref, "data-fgs-tb-btn": true, onClick: onClick, className: className, "aria-label": ariaLabel, "aria-pressed": ariaPressed, children: children }));
17
+ });
18
+ function toneClass(tone) {
19
+ if (tone === 'ink')
20
+ return styles.toneInk ?? '';
21
+ if (tone === 'accent')
22
+ return styles.toneAccent ?? '';
23
+ return styles.toneMuted ?? '';
24
+ }
4
25
  /**
5
26
  * The single allowed topbar shape for FreeGameStore games. Brand
6
- * consistency: same font, same paddings, same color tokens, same stat
27
+ * consistency: same font, same paddings, same colour tokens, same stat
7
28
  * layout across every game on the storefront.
8
29
  *
9
30
  * Use inside <GameShell topbar={<GameTopbar … />}>.
10
31
  */
11
- export function GameTopbar({ title, score, stats, actions, rules, about, onPlayPause, paused, onRestart, }) {
32
+ export function GameTopbar({ title, score, showScore = false, stats, actions, rules, about, onPlayPause, paused, onRestart, }) {
12
33
  const [showRules, setShowRules] = useState(false);
13
34
  const [showAbout, setShowAbout] = useState(false);
14
35
  const sound = useSound();
15
- const resolvedStats = stats && stats.length > 0
16
- ? stats
17
- : score !== undefined
18
- ? [{ label: 'Score', value: score, accent: true }]
19
- : [];
20
- return (_jsxs(_Fragment, { children: [_jsx("style", { children: TOPBAR_BUTTON_CSS }), _jsxs("div", { style: {
21
- display: 'flex',
22
- alignItems: 'center',
23
- justifyContent: 'space-between',
24
- gap: '0.75rem',
25
- padding: '0.25rem 0.75rem',
26
- height: '2rem',
27
- }, children: [_jsxs("div", { style: { display: 'flex', alignItems: 'center', gap: '0.25rem', minWidth: 0 }, children: [_jsx("a", { "data-fgs-tb-btn": true, href: "https://freegamestore.online", target: "_blank", rel: "noopener noreferrer", style: {
28
- background: 'none',
29
- border: 'none',
30
- cursor: 'pointer',
31
- padding: 0,
32
- minWidth: '2.75rem',
33
- minHeight: '2.75rem',
34
- display: 'flex',
35
- alignItems: 'center',
36
- justifyContent: 'center',
37
- color: 'var(--muted, #999)',
38
- WebkitTapHighlightColor: 'transparent',
39
- textDecoration: 'none',
40
- }, "aria-label": "Browse all games", children: _jsxs("svg", { width: "14", height: "14", viewBox: "0 0 16 16", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", children: [_jsx("rect", { x: "2", y: "2", width: "5", height: "5", rx: "1" }), _jsx("rect", { x: "9", y: "2", width: "5", height: "5", rx: "1" }), _jsx("rect", { x: "2", y: "9", width: "5", height: "5", rx: "1" }), _jsx("rect", { x: "9", y: "9", width: "5", height: "5", rx: "1" })] }) }), rules !== undefined && (_jsx("button", { "data-fgs-tb-btn": true, onClick: () => setShowRules(true), style: {
41
- background: 'none',
42
- border: 'none',
43
- cursor: 'pointer',
44
- padding: 0,
45
- minWidth: '2.75rem',
46
- minHeight: '2.75rem',
47
- display: 'flex',
48
- alignItems: 'center',
49
- justifyContent: 'center',
50
- color: 'var(--muted, #999)',
51
- lineHeight: 1,
52
- WebkitTapHighlightColor: 'transparent',
53
- }, "aria-label": "Game rules", children: _jsxs("svg", { width: "14", height: "14", viewBox: "0 0 16 16", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", children: [_jsx("circle", { cx: "8", cy: "8", r: "6.5" }), _jsx("path", { d: "M8 11.5v0M8 5v4" })] }) })), title !== undefined && (_jsx("span", { style: {
54
- fontFamily: '"Manrope", system-ui, sans-serif',
55
- fontWeight: 600,
56
- fontSize: '0.8rem',
57
- letterSpacing: '-0.01em',
58
- whiteSpace: 'nowrap',
59
- overflow: 'hidden',
60
- textOverflow: 'ellipsis',
61
- }, children: title }))] }), _jsxs("div", { style: { display: 'flex', alignItems: 'center', gap: '0.75rem' }, children: [resolvedStats.map((s) => (_jsx(Stat, { stat: s }, s.label))), onPlayPause !== undefined && (_jsx("button", { "data-fgs-tb-btn": true, onClick: onPlayPause, style: {
62
- background: 'none',
63
- border: 'none',
64
- cursor: 'pointer',
65
- padding: 0,
66
- minWidth: '2.75rem',
67
- minHeight: '2.75rem',
68
- display: 'flex',
69
- alignItems: 'center',
70
- justifyContent: 'center',
71
- color: 'var(--ink, #f0f0f0)',
72
- WebkitTapHighlightColor: 'transparent',
73
- }, "aria-label": "Pause", "aria-pressed": paused === true, children: paused ? (_jsx("svg", { width: "14", height: "14", viewBox: "0 0 16 16", fill: "currentColor", children: _jsx("path", { d: "M4 2l10 6-10 6V2z" }) })) : (_jsxs("svg", { width: "14", height: "14", viewBox: "0 0 16 16", fill: "currentColor", children: [_jsx("rect", { x: "2", y: "2", width: "4", height: "12", rx: "1" }), _jsx("rect", { x: "10", y: "2", width: "4", height: "12", rx: "1" })] })) })), onRestart !== undefined && (_jsx("button", { "data-fgs-tb-btn": true, onClick: onRestart, style: {
74
- background: 'none',
75
- border: 'none',
76
- cursor: 'pointer',
77
- padding: 0,
78
- minWidth: '2.75rem',
79
- minHeight: '2.75rem',
80
- display: 'flex',
81
- alignItems: 'center',
82
- justifyContent: 'center',
83
- color: 'var(--muted, #999)',
84
- WebkitTapHighlightColor: 'transparent',
85
- }, "aria-label": "Restart", children: _jsxs("svg", { width: "14", height: "14", viewBox: "0 0 16 16", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", children: [_jsx("path", { d: "M2 8a6 6 0 0111.5-2.5" }), _jsx("path", { d: "M14 8a6 6 0 01-11.5 2.5" }), _jsx("path", { d: "M14 2v3.5h-3.5" }), _jsx("path", { d: "M2 14v-3.5h3.5" })] }) })), _jsx("button", { "data-fgs-tb-btn": true, onClick: () => setShowAbout(true), style: {
86
- background: 'none',
87
- border: 'none',
88
- cursor: 'pointer',
89
- padding: 0,
90
- minWidth: '2.75rem',
91
- minHeight: '2.75rem',
92
- display: 'flex',
93
- alignItems: 'center',
94
- justifyContent: 'center',
95
- color: 'var(--muted, #999)',
96
- lineHeight: 1,
97
- WebkitTapHighlightColor: 'transparent',
98
- }, "aria-label": "About this game", children: _jsxs("svg", { width: "14", height: "14", viewBox: "0 0 16 16", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", children: [_jsx("circle", { cx: "8", cy: "8", r: "6.5" }), _jsx("path", { d: "M8 7.25v3.5" }), _jsx("path", { d: "M8 5.15v0" })] }) }), _jsx("button", { "data-fgs-tb-btn": true, onClick: sound.toggle, style: {
99
- background: 'none',
100
- border: 'none',
101
- cursor: 'pointer',
102
- padding: 0,
103
- minWidth: '2.75rem',
104
- minHeight: '2.75rem',
105
- display: 'flex',
106
- alignItems: 'center',
107
- justifyContent: 'center',
108
- color: sound.muted ? 'var(--muted, #999)' : 'var(--accent, #10b981)',
109
- WebkitTapHighlightColor: 'transparent',
110
- }, "aria-label": "Mute", "aria-pressed": sound.muted, children: sound.muted ? (_jsxs("svg", { width: "14", height: "14", viewBox: "0 0 16 16", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", children: [_jsx("path", { d: "M8 2L4 5.5H1.5v5H4L8 14V2z" }), _jsx("path", { d: "M12 5.5l4 5M16 5.5l-4 5" })] })) : (_jsxs("svg", { width: "14", height: "14", viewBox: "0 0 16 16", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", children: [_jsx("path", { d: "M8 2L4 5.5H1.5v5H4L8 14V2z" }), _jsx("path", { d: "M11.5 5a4.5 4.5 0 010 6" }), _jsx("path", { d: "M13.5 3a7.5 7.5 0 010 10" })] })) }), actions !== undefined && (_jsx("div", { style: { display: 'flex', gap: '0.4rem', alignItems: 'center' }, children: actions }))] })] }), showRules && rules !== undefined && (_jsx(RulesOverlay, { onClose: () => setShowRules(false), children: rules })), showAbout && (_jsx(AboutOverlay, { title: title, extra: about, onClose: () => setShowAbout(false) }))] }));
36
+ const scorePill = showScore && score !== undefined ? [{ label: 'Score', value: score, accent: true }] : [];
37
+ const resolvedStats = [...scorePill, ...(stats ?? [])];
38
+ return (_jsxs(_Fragment, { children: [_jsxs("div", { className: styles.bar, children: [_jsxs("div", { className: styles.group, children: [_jsx(TopbarIconButton, { href: "https://freegamestore.online", target: "_blank", rel: "noopener noreferrer", ariaLabel: "Browse all games", children: _jsxs("svg", { width: "14", height: "14", viewBox: "0 0 16 16", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", children: [_jsx("rect", { x: "2", y: "2", width: "5", height: "5", rx: "1" }), _jsx("rect", { x: "9", y: "2", width: "5", height: "5", rx: "1" }), _jsx("rect", { x: "2", y: "9", width: "5", height: "5", rx: "1" }), _jsx("rect", { x: "9", y: "9", width: "5", height: "5", rx: "1" })] }) }), rules !== undefined && (_jsx(TopbarIconButton, { onClick: () => setShowRules(true), ariaLabel: "Game rules", children: _jsxs("svg", { width: "14", height: "14", viewBox: "0 0 16 16", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", children: [_jsx("circle", { cx: "8", cy: "8", r: "6.5" }), _jsx("path", { d: "M8 11.5v0M8 5v4" })] }) })), title !== undefined && _jsx("span", { className: styles.title, children: title })] }), _jsxs("div", { className: `${styles.group} ${styles.groupEnd}`, children: [resolvedStats.map((s) => (_jsx(Stat, { stat: s }, s.label))), onPlayPause !== undefined && (_jsx(TopbarIconButton, { onClick: onPlayPause, tone: "ink", ariaLabel: "Pause", ariaPressed: paused === true, children: paused ? (_jsx("svg", { width: "14", height: "14", viewBox: "0 0 16 16", fill: "currentColor", children: _jsx("path", { d: "M4 2l10 6-10 6V2z" }) })) : (_jsxs("svg", { width: "14", height: "14", viewBox: "0 0 16 16", fill: "currentColor", children: [_jsx("rect", { x: "2", y: "2", width: "4", height: "12", rx: "1" }), _jsx("rect", { x: "10", y: "2", width: "4", height: "12", rx: "1" })] })) })), onRestart !== undefined && (_jsx(TopbarIconButton, { onClick: onRestart, ariaLabel: "Restart", children: _jsxs("svg", { width: "14", height: "14", viewBox: "0 0 16 16", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", children: [_jsx("path", { d: "M2 8a6 6 0 0111.5-2.5" }), _jsx("path", { d: "M14 8a6 6 0 01-11.5 2.5" }), _jsx("path", { d: "M14 2v3.5h-3.5" }), _jsx("path", { d: "M2 14v-3.5h3.5" })] }) })), _jsx(TopbarIconButton, { onClick: () => setShowAbout(true), ariaLabel: "About this game", children: _jsxs("svg", { width: "14", height: "14", viewBox: "0 0 16 16", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", children: [_jsx("circle", { cx: "8", cy: "8", r: "6.5" }), _jsx("path", { d: "M8 7.25v3.5" }), _jsx("path", { d: "M8 5.15v0" })] }) }), _jsx(TopbarIconButton, { onClick: sound.toggle, tone: sound.muted ? 'muted' : 'accent', ariaLabel: "Mute", ariaPressed: sound.muted, children: sound.muted ? (_jsxs("svg", { width: "14", height: "14", viewBox: "0 0 16 16", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", children: [_jsx("path", { d: "M8 2L4 5.5H1.5v5H4L8 14V2z" }), _jsx("path", { d: "M12 5.5l4 5M16 5.5l-4 5" })] })) : (_jsxs("svg", { width: "14", height: "14", viewBox: "0 0 16 16", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", children: [_jsx("path", { d: "M8 2L4 5.5H1.5v5H4L8 14V2z" }), _jsx("path", { d: "M11.5 5a4.5 4.5 0 010 6" }), _jsx("path", { d: "M13.5 3a7.5 7.5 0 010 10" })] })) }), actions !== undefined && _jsx("div", { className: styles.actions, children: actions })] })] }), showRules && rules !== undefined && (_jsx(RulesOverlay, { onClose: () => setShowRules(false), children: rules })), showAbout && (_jsx(AboutOverlay, { title: title, extra: about, onClose: () => setShowAbout(false) }))] }));
111
39
  }
112
40
  /** Compact "3 hours ago" style relative time — no dependency, no locale data. */
113
41
  function relativeTime(iso) {
@@ -149,7 +77,7 @@ function AboutOverlay({ title, extra, onClose, }) {
149
77
  useEffect(() => {
150
78
  let cancelled = false;
151
79
  fetch('/version.json', { cache: 'no-cache' })
152
- .then((r) => (r.ok ? r.json() : Promise.reject(new Error(String(r.status)))))
80
+ .then((r) => r.ok ? r.json() : Promise.reject(new Error(String(r.status))))
153
81
  .then((d) => {
154
82
  if (!cancelled)
155
83
  setInfo(d);
@@ -167,97 +95,35 @@ function AboutOverlay({ title, extra, onClose, }) {
167
95
  }, []);
168
96
  const version = (info?.version ?? '').slice(0, 7);
169
97
  const deployedAt = info?.deployedAt;
170
- return (_jsxs(RulesOverlay, { title: "About", onClose: onClose, children: [title !== undefined && (_jsx("h1", { style: {
171
- fontFamily: '"Fraunces", Georgia, serif',
172
- fontWeight: 700,
173
- fontSize: '1.5rem',
174
- margin: '0 0 0.75rem',
175
- }, children: title })), extra !== undefined && _jsx("div", { style: { marginBottom: '1rem' }, children: extra }), _jsxs("dl", { style: { margin: 0, display: 'grid', gridTemplateColumns: 'auto 1fr', gap: '0.35rem 1rem', fontSize: '0.85rem' }, children: [_jsx("dt", { style: { color: 'var(--muted, #999)' }, children: "Version" }), _jsx("dd", { style: { margin: 0, fontVariantNumeric: 'tabular-nums' }, children: version ? (_jsx("code", { style: { fontFamily: 'monospace' }, children: version })) : loaded ? ('development build') : ('…') }), deployedAt && (_jsxs(_Fragment, { children: [_jsx("dt", { style: { color: 'var(--muted, #999)' }, children: "Deployed" }), _jsx("dd", { style: { margin: 0 }, title: new Date(deployedAt).toLocaleString(), children: relativeTime(deployedAt) })] }))] }), _jsxs("p", { style: { marginTop: '1.25rem', fontSize: '0.8rem', color: 'var(--muted, #999)' }, children: ["A free game on", ' ', _jsx("a", { href: "https://freegamestore.online", target: "_blank", rel: "noopener noreferrer", style: { color: 'var(--accent, #10b981)', textDecoration: 'none' }, children: "FreeGameStore" }), "."] })] }));
98
+ return (_jsxs(RulesOverlay, { title: "About", onClose: onClose, children: [title !== undefined && _jsx("h1", { className: styles.aboutHeading, children: title }), extra !== undefined && _jsx("div", { className: styles.aboutExtra, children: extra }), _jsxs("dl", { className: styles.aboutGrid, children: [_jsx("dt", { children: "Version" }), _jsx("dd", { children: version ? (_jsx("code", { className: styles.code, children: version })) : loaded ? ('development build') : ('…') }), deployedAt && (_jsxs(_Fragment, { children: [_jsx("dt", { children: "Deployed" }), _jsx("dd", { title: new Date(deployedAt).toLocaleString(), children: relativeTime(deployedAt) })] }))] }), _jsxs("p", { className: styles.aboutNote, children: ["A free game on", ' ', _jsx("a", { href: "https://freegamestore.online", target: "_blank", rel: "noopener noreferrer", className: styles.aboutLink, children: "FreeGameStore" }), "."] })] }));
176
99
  }
177
100
  function RulesOverlay({ children, title = 'How to Play', onClose, }) {
178
- return (_jsxs("div", { style: {
179
- position: 'fixed',
180
- inset: 0,
181
- zIndex: 9999,
182
- background: 'var(--paper, #0f0f0f)',
183
- color: 'var(--ink, #f0f0f0)',
184
- display: 'flex',
185
- flexDirection: 'column',
186
- overflow: 'hidden',
187
- }, children: [_jsxs("div", { style: {
188
- display: 'flex',
189
- alignItems: 'center',
190
- justifyContent: 'space-between',
191
- padding: '0.5rem 0.75rem',
192
- borderBottom: '1px solid var(--line, #2a2a2a)',
193
- flexShrink: 0,
194
- }, children: [_jsx("span", { style: {
195
- fontFamily: '"Manrope", system-ui, sans-serif',
196
- fontWeight: 700,
197
- fontSize: '0.9rem',
198
- }, children: title }), _jsx("button", { "data-fgs-tb-btn": true, onClick: onClose, style: {
199
- background: 'none',
200
- border: 'none',
201
- cursor: 'pointer',
202
- color: 'var(--muted, #999)',
203
- fontSize: '1.2rem',
204
- minWidth: '2.75rem',
205
- minHeight: '2.75rem',
206
- display: 'flex',
207
- alignItems: 'center',
208
- justifyContent: 'center',
209
- WebkitTapHighlightColor: 'transparent',
210
- }, "aria-label": "Close", children: "\u00D7" })] }), _jsx("div", { style: {
211
- flex: 1,
212
- overflowY: 'auto',
213
- padding: '1rem',
214
- fontFamily: '"Manrope", system-ui, sans-serif',
215
- fontSize: '0.9rem',
216
- lineHeight: 1.6,
217
- }, children: children })] }));
101
+ const overlayRef = useRef(null);
102
+ const closeButtonRef = useRef(null);
103
+ useEffect(() => {
104
+ // Focus the close button when the overlay opens for keyboard accessibility
105
+ closeButtonRef.current?.focus();
106
+ // Handle Escape key to close the overlay, and prevent other keys from
107
+ // reaching game key handlers (which would continue game input while playing)
108
+ const handleKeyDown = (e) => {
109
+ if (e.key === 'Escape') {
110
+ e.preventDefault();
111
+ onClose();
112
+ }
113
+ else {
114
+ // Prevent any other key events from reaching the game
115
+ e.preventDefault();
116
+ e.stopPropagation();
117
+ }
118
+ };
119
+ document.addEventListener('keydown', handleKeyDown, true);
120
+ return () => {
121
+ document.removeEventListener('keydown', handleKeyDown, true);
122
+ };
123
+ }, [onClose]);
124
+ return (_jsxs("div", { ref: overlayRef, role: "dialog", "aria-modal": "true", "aria-label": title, className: styles.overlay, children: [_jsxs("div", { className: styles.overlayHeader, children: [_jsx("span", { className: styles.overlayTitle, children: title }), _jsx(TopbarIconButton, { ref: closeButtonRef, onClick: onClose, ariaLabel: "Close", children: "\u00D7" })] }), _jsx("div", { className: styles.overlayBody, children: children })] }));
218
125
  }
219
126
  function Stat({ stat }) {
220
- return (_jsxs("div", { style: { textAlign: 'right', lineHeight: 1.05 }, children: [_jsx("div", { style: {
221
- fontFamily: '"Manrope", system-ui, sans-serif',
222
- fontWeight: 800,
223
- fontSize: '0.85rem',
224
- color: stat.accent === true ? 'var(--accent)' : 'var(--ink)',
225
- fontVariantNumeric: 'tabular-nums',
226
- lineHeight: 1,
227
- }, children: stat.value }), _jsx("div", { style: {
228
- // Was 0.5rem (~8px) — too small to read in sunlight or for
229
- // anyone with even mild low vision. 0.65rem (~10.4px) keeps
230
- // the visual hierarchy (value still dominates at 0.85rem)
231
- // while staying legible.
232
- fontSize: '0.65rem',
233
- fontWeight: 700,
234
- textTransform: 'uppercase',
235
- letterSpacing: '0.06em',
236
- color: 'var(--muted)',
237
- lineHeight: 1,
238
- }, children: stat.label })] }));
239
- }
240
- /**
241
- * Pseudo-state styling for every topbar button + link. Tagged via
242
- * `data-fgs-tb-btn`. Keep this small and predictable — the topbar is
243
- * brand surface, not a creative palette.
244
- *
245
- * :active — opacity dip so taps feel anchored on touch devices that
246
- * otherwise give no feedback (we already disable the
247
- * default tap-highlight via WebkitTapHighlightColor).
248
- *
249
- * :focus-visible — accent outline so keyboard users see where focus
250
- * is. -2px outline-offset draws inside the button's
251
- * 2.75rem touch target so the ring doesn't bleed
252
- * into adjacent controls.
253
- */
254
- const TOPBAR_BUTTON_CSS = `
255
- [data-fgs-tb-btn] { transition: opacity 80ms ease; }
256
- [data-fgs-tb-btn]:active { opacity: 0.55; }
257
- [data-fgs-tb-btn]:focus-visible {
258
- outline: 2px solid var(--accent, #10b981);
259
- outline-offset: -2px;
260
- border-radius: 0.4rem;
127
+ return (_jsxs("div", { className: styles.stat, children: [_jsx("div", { className: `${styles.statValue} ${stat.accent === true ? styles.statAccent : ''}`, children: stat.value }), _jsx("div", { className: styles.statLabel, children: stat.label })] }));
261
128
  }
262
- `;
263
129
  //# sourceMappingURL=GameTopbar.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"GameTopbar.js","sourceRoot":"","sources":["../src/GameTopbar.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"GameTopbar.js","sourceRoot":"","sources":["../src/GameTopbar.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,201 @@
1
+ /*
2
+ * GameTopbar styles. Each rule that used to be an inline style now lives here,
3
+ * so the topbar is styled in one place. Colours and the motion timing read the
4
+ * design tokens (TOKENS.md), each with a fallback, so the bar still renders
5
+ * when a game does not load GAME_TOKENS_CSS.
6
+ */
7
+
8
+ .bar {
9
+ display: flex;
10
+ align-items: center;
11
+ justify-content: space-between;
12
+ gap: 0.75rem;
13
+ padding: 0.25rem 0.75rem;
14
+ height: 2rem;
15
+ }
16
+
17
+ .group {
18
+ display: flex;
19
+ align-items: center;
20
+ gap: 0.25rem;
21
+ min-width: 0;
22
+ }
23
+
24
+ .groupEnd {
25
+ gap: 0.75rem;
26
+ }
27
+
28
+ .actions {
29
+ display: flex;
30
+ gap: 0.4rem;
31
+ align-items: center;
32
+ }
33
+
34
+ .title {
35
+ font-family: var(--font-body, "Manrope", system-ui, sans-serif);
36
+ font-weight: 600;
37
+ font-size: 0.8rem;
38
+ letter-spacing: -0.01em;
39
+ white-space: nowrap;
40
+ overflow: hidden;
41
+ text-overflow: ellipsis;
42
+ }
43
+
44
+ /* Icon buttons and the catalog link. Every control in the topbar uses this. */
45
+ .button {
46
+ display: flex;
47
+ align-items: center;
48
+ justify-content: center;
49
+ min-width: 2.75rem;
50
+ min-height: 2.75rem;
51
+ padding: 0;
52
+ background: none;
53
+ border: none;
54
+ cursor: pointer;
55
+ color: var(--muted, #999);
56
+ -webkit-tap-highlight-color: transparent;
57
+ transition: opacity var(--motion-duration, 80ms) var(--motion-easing, ease-out);
58
+ }
59
+
60
+ .link {
61
+ text-decoration: none;
62
+ }
63
+
64
+ /* Tones: the play/pause icon is ink, the sound icon is accent when sound is on */
65
+ .toneMuted {
66
+ color: var(--muted, #999);
67
+ }
68
+
69
+ .toneInk {
70
+ color: var(--ink, #f0f0f0);
71
+ }
72
+
73
+ .toneAccent {
74
+ color: var(--accent, #10b981);
75
+ }
76
+
77
+ /* A tap dips the control slightly, so it feels anchored on touch screens */
78
+ .button:active {
79
+ opacity: 0.55;
80
+ }
81
+
82
+ .button:focus-visible {
83
+ outline: 2px solid var(--accent, #10b981);
84
+ outline-offset: -2px;
85
+ border-radius: 0.4rem;
86
+ }
87
+
88
+ /* Score and stat values */
89
+ .stat {
90
+ text-align: right;
91
+ line-height: 1.05;
92
+ }
93
+
94
+ .statValue {
95
+ font-family: var(--font-body, "Manrope", system-ui, sans-serif);
96
+ font-weight: 800;
97
+ font-size: 0.85rem;
98
+ color: var(--ink);
99
+ font-variant-numeric: tabular-nums;
100
+ line-height: 1;
101
+ }
102
+
103
+ .statAccent {
104
+ color: var(--accent);
105
+ }
106
+
107
+ /* Label under a stat. 0.65rem keeps it legible in sunlight and for low vision. */
108
+ .statLabel {
109
+ font-size: 0.65rem;
110
+ font-weight: 700;
111
+ text-transform: uppercase;
112
+ letter-spacing: 0.06em;
113
+ color: var(--muted);
114
+ line-height: 1;
115
+ }
116
+
117
+ /* Rules and About overlays: a full-screen panel with a header and a scrolling body */
118
+ .overlay {
119
+ position: fixed;
120
+ inset: 0;
121
+ z-index: 9999;
122
+ display: flex;
123
+ flex-direction: column;
124
+ overflow: hidden;
125
+ background: var(--paper, #0f0f0f);
126
+ color: var(--ink, #f0f0f0);
127
+ }
128
+
129
+ .overlayHeader {
130
+ display: flex;
131
+ align-items: center;
132
+ justify-content: space-between;
133
+ flex-shrink: 0;
134
+ padding: 0.5rem 0.75rem;
135
+ border-bottom: 1px solid var(--line, #2a2a2a);
136
+ }
137
+
138
+ .overlayTitle {
139
+ font-family: var(--font-body, "Manrope", system-ui, sans-serif);
140
+ font-weight: 700;
141
+ font-size: 0.9rem;
142
+ }
143
+
144
+ .overlayBody {
145
+ flex: 1;
146
+ overflow-y: auto;
147
+ padding: 1rem;
148
+ font-family: var(--font-body, "Manrope", system-ui, sans-serif);
149
+ font-size: 0.9rem;
150
+ line-height: 1.6;
151
+ }
152
+
153
+ /* About panel */
154
+ .aboutHeading {
155
+ margin: 0 0 0.75rem;
156
+ font-family: var(--font-display, "Fraunces", Georgia, serif);
157
+ font-weight: 700;
158
+ font-size: 1.5rem;
159
+ }
160
+
161
+ .aboutExtra {
162
+ margin-bottom: 1rem;
163
+ }
164
+
165
+ .aboutGrid {
166
+ display: grid;
167
+ grid-template-columns: auto 1fr;
168
+ gap: 0.35rem 1rem;
169
+ margin: 0;
170
+ font-size: 0.85rem;
171
+ }
172
+
173
+ .aboutGrid dt {
174
+ color: var(--muted, #999);
175
+ }
176
+
177
+ .aboutGrid dd {
178
+ margin: 0;
179
+ font-variant-numeric: tabular-nums;
180
+ }
181
+
182
+ .code {
183
+ font-family: monospace;
184
+ }
185
+
186
+ .aboutNote {
187
+ margin-top: 1.25rem;
188
+ font-size: 0.8rem;
189
+ color: var(--muted, #999);
190
+ }
191
+
192
+ .aboutLink {
193
+ color: var(--accent, #10b981);
194
+ text-decoration: none;
195
+ }
196
+
197
+ @media (prefers-reduced-motion: reduce) {
198
+ .button {
199
+ transition: none;
200
+ }
201
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"Leaderboard.d.ts","sourceRoot":"","sources":["../src/Leaderboard.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,gBAAgB,EAAE,CAAC;IAC9B,YAAY,EAAE,gBAAgB,EAAE,CAAC;IACjC,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,WAAW,CAAC,EAC1B,SAAS,EACT,YAAY,EACZ,OAAO,GACR,EAAE,gBAAgB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CA2DtC"}
1
+ {"version":3,"file":"Leaderboard.d.ts","sourceRoot":"","sources":["../src/Leaderboard.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,gBAAgB,EAAE,CAAC;IAC9B,YAAY,EAAE,gBAAgB,EAAE,CAAC;IACjC,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,WAAW,CAAC,EAC1B,SAAS,EACT,YAAY,EACZ,OAAO,GACR,EAAE,gBAAgB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CA+CtC"}
@@ -4,11 +4,8 @@ export function Leaderboard({ topScores, recentScores, loading, }) {
4
4
  const [tab, setTab] = useState('top');
5
5
  const scores = tab === 'top' ? topScores : recentScores;
6
6
  if (loading) {
7
- return (_jsx("div", { className: "px-4 py-3 text-xs", style: { color: 'var(--muted)' }, children: "Loading scores..." }));
7
+ return _jsx("div", { className: "px-4 py-3 text-xs text-muted", children: "Loading scores..." });
8
8
  }
9
- return (_jsxs("div", { className: "flex flex-col gap-2 px-4 py-3", children: [_jsx("div", { className: "flex gap-1", children: ['top', 'recent'].map((t) => (_jsx("button", { onClick: () => setTab(t), className: "px-3 py-1 text-xs font-semibold rounded-lg", style: {
10
- background: tab === t ? 'var(--accent)' : 'transparent',
11
- color: tab === t ? '#fff' : 'var(--muted)',
12
- }, children: t === 'top' ? 'Top' : 'Recent' }, t))) }), scores.length === 0 ? (_jsx("div", { className: "text-xs", style: { color: 'var(--muted)' }, children: "No scores yet. Be the first!" })) : (_jsx("div", { className: "flex flex-col gap-1", children: scores.map((entry, i) => (_jsxs("div", { className: "flex items-center justify-between text-xs py-1", style: { borderBottom: '1px solid var(--line)' }, children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { className: "w-5 text-right font-semibold", style: { color: i < 3 ? 'var(--accent)' : 'var(--muted)' }, children: i + 1 }), _jsx("span", { className: "truncate max-w-[8rem]", children: entry.player_name })] }), _jsx("span", { className: "font-bold", style: { fontFamily: 'Fraunces, serif' }, children: entry.score.toLocaleString() })] }, `${entry.player_name}-${entry.score}-${i}`))) }))] }));
9
+ return (_jsxs("div", { className: "flex flex-col gap-2 px-4 py-3", children: [_jsx("div", { className: "flex gap-1", children: ['top', 'recent'].map((t) => (_jsx("button", { onClick: () => setTab(t), className: `rounded-lg px-3 py-1 text-xs font-semibold ${tab === t ? 'bg-accent text-white' : 'bg-transparent text-muted'}`, children: t === 'top' ? 'Top' : 'Recent' }, t))) }), scores.length === 0 ? (_jsx("div", { className: "text-xs text-muted", children: "No scores yet. Be the first!" })) : (_jsx("div", { className: "flex flex-col gap-1", children: scores.map((entry, i) => (_jsxs("div", { className: "flex items-center justify-between border-b border-line py-1 text-xs", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { className: `w-5 text-right font-semibold ${i < 3 ? 'text-accent' : 'text-muted'}`, children: i + 1 }), _jsx("span", { className: "max-w-[8rem] truncate", children: entry.player_name })] }), _jsx("span", { className: "font-display font-bold", children: entry.score.toLocaleString() })] }, `${entry.player_name}-${entry.score}-${i}`))) }))] }));
13
10
  }
14
11
  //# sourceMappingURL=Leaderboard.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Leaderboard.js","sourceRoot":"","sources":["../src/Leaderboard.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AASjC,MAAM,UAAU,WAAW,CAAC,EAC1B,SAAS,EACT,YAAY,EACZ,OAAO,GACU;IACjB,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,QAAQ,CAAmB,KAAK,CAAC,CAAC;IACxD,MAAM,MAAM,GAAG,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC;IAExD,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CACL,cAAK,SAAS,EAAC,mBAAmB,EAAC,KAAK,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,kCAE7D,CACP,CAAC;IACJ,CAAC;IAED,OAAO,CACL,eAAK,SAAS,EAAC,+BAA+B,aAC5C,cAAK,SAAS,EAAC,YAAY,YACvB,CAAC,KAAK,EAAE,QAAQ,CAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CACvC,iBAEE,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EACxB,SAAS,EAAC,4CAA4C,EACtD,KAAK,EAAE;wBACL,UAAU,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,aAAa;wBACvD,KAAK,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc;qBAC3C,YAEA,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,IAR1B,CAAC,CASC,CACV,CAAC,GACE,EACL,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CACrB,cAAK,SAAS,EAAC,SAAS,EAAC,KAAK,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,6CAEnD,CACP,CAAC,CAAC,CAAC,CACF,cAAK,SAAS,EAAC,qBAAqB,YACjC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CACxB,eAEE,SAAS,EAAC,gDAAgD,EAC1D,KAAK,EAAE,EAAE,YAAY,EAAE,uBAAuB,EAAE,aAEhD,eAAK,SAAS,EAAC,yBAAyB,aACtC,eACE,SAAS,EAAC,8BAA8B,EACxC,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,cAAc,EAAE,YAEzD,CAAC,GAAG,CAAC,GACD,EACP,eAAM,SAAS,EAAC,uBAAuB,YAAE,KAAK,CAAC,WAAW,GAAQ,IAC9D,EACN,eAAM,SAAS,EAAC,WAAW,EAAC,KAAK,EAAE,EAAE,UAAU,EAAE,iBAAiB,EAAE,YACjE,KAAK,CAAC,KAAK,CAAC,cAAc,EAAE,GACxB,KAfF,GAAG,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,KAAK,IAAI,CAAC,EAAE,CAgB3C,CACP,CAAC,GACE,CACP,IACG,CACP,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"Leaderboard.js","sourceRoot":"","sources":["../src/Leaderboard.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AASjC,MAAM,UAAU,WAAW,CAAC,EAC1B,SAAS,EACT,YAAY,EACZ,OAAO,GACU;IACjB,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,QAAQ,CAAmB,KAAK,CAAC,CAAC;IACxD,MAAM,MAAM,GAAG,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC;IAExD,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,cAAK,SAAS,EAAC,8BAA8B,kCAAwB,CAAC;IAC/E,CAAC;IAED,OAAO,CACL,eAAK,SAAS,EAAC,+BAA+B,aAC5C,cAAK,SAAS,EAAC,YAAY,YACvB,CAAC,KAAK,EAAE,QAAQ,CAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CACvC,iBAEE,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EACxB,SAAS,EAAE,8CACT,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,2BACvC,EAAE,YAED,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,IAN1B,CAAC,CAOC,CACV,CAAC,GACE,EACL,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CACrB,cAAK,SAAS,EAAC,oBAAoB,6CAAmC,CACvE,CAAC,CAAC,CAAC,CACF,cAAK,SAAS,EAAC,qBAAqB,YACjC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CACxB,eAEE,SAAS,EAAC,qEAAqE,aAE/E,eAAK,SAAS,EAAC,yBAAyB,aACtC,eACE,SAAS,EAAE,gCAAgC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,YAAY,EAAE,YAEhF,CAAC,GAAG,CAAC,GACD,EACP,eAAM,SAAS,EAAC,uBAAuB,YAAE,KAAK,CAAC,WAAW,GAAQ,IAC9D,EACN,eAAM,SAAS,EAAC,wBAAwB,YAAE,KAAK,CAAC,KAAK,CAAC,cAAc,EAAE,GAAQ,KAXzE,GAAG,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,KAAK,IAAI,CAAC,EAAE,CAY3C,CACP,CAAC,GACE,CACP,IACG,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,41 @@
1
+ import type * as React from 'react';
2
+ export interface StartScreenStep {
3
+ /** Short name of the step, shown in bold. */
4
+ heading: string;
5
+ /** One or two sentences of explanation. */
6
+ text: string;
7
+ }
8
+ export interface StartScreenProps {
9
+ /** The game's display name, set large in the display face. */
10
+ title: string;
11
+ /** One line under the title. */
12
+ tagline?: string;
13
+ /**
14
+ * Decorative art above the title, such as a mosaic or a logo. It is hidden
15
+ * from assistive technology, because the title already names the game.
16
+ */
17
+ artwork?: React.ReactNode;
18
+ /** Label for the main button. Default "Play". */
19
+ playLabel?: string;
20
+ /** Called when the player taps Play. */
21
+ onPlay: () => void;
22
+ /**
23
+ * Called when the player taps How to play. Use this when the game shows its
24
+ * own rules screen. When it is omitted, `howToPlay` steps open the SDK's overlay.
25
+ */
26
+ onHowToPlay?: () => void;
27
+ /**
28
+ * Numbered steps for the built-in How to play overlay. Used only when
29
+ * `onHowToPlay` is not given. Omit both to hide the button.
30
+ */
31
+ howToPlay?: readonly StartScreenStep[];
32
+ }
33
+ /**
34
+ * A game's start screen: artwork, title, tagline, then Play and How to play.
35
+ * Motion is the `animate-fgs-*` utilities from the SDK's `theme.css`, and it
36
+ * stops under prefers-reduced-motion. The card sits on an opaque `bg-panel`.
37
+ *
38
+ * Colours come from the platform tokens through the game's `@theme` mapping.
39
+ */
40
+ export declare function StartScreen({ title, tagline, artwork, playLabel, onPlay, onHowToPlay, howToPlay, }: StartScreenProps): React.JSX.Element;
41
+ //# sourceMappingURL=StartScreen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StartScreen.d.ts","sourceRoot":"","sources":["../src/StartScreen.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AAKpC,MAAM,WAAW,eAAe;IAC9B,6CAA6C;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,8DAA8D;IAC9D,KAAK,EAAE,MAAM,CAAC;IACd,gCAAgC;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,iDAAiD;IACjD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wCAAwC;IACxC,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB;;;OAGG;IACH,SAAS,CAAC,EAAE,SAAS,eAAe,EAAE,CAAC;CACxC;AA6BD;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,OAAO,EACP,OAAO,EACP,SAAkB,EAClB,MAAM,EACN,WAAW,EACX,SAAS,GACV,EAAE,gBAAgB,qBAqDlB"}