@freegamestore/games 0.20.1 → 0.20.2
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/dist/GameTopbar.d.ts.map +1 -1
- package/dist/GameTopbar.js +6 -55
- package/dist/GameTopbar.js.map +1 -1
- package/dist/GameTopbar.styles.d.ts +15 -0
- package/dist/GameTopbar.styles.d.ts.map +1 -0
- package/dist/GameTopbar.styles.js +306 -0
- package/dist/GameTopbar.styles.js.map +1 -0
- package/package.json +1 -1
package/dist/GameTopbar.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GameTopbar.d.ts","sourceRoot":"","sources":["../src/GameTopbar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AACpC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"GameTopbar.d.ts","sourceRoot":"","sources":["../src/GameTopbar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AACpC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAKvC,MAAM,WAAW,cAAc;IAC7B,6DAA6D;IAC7D,KAAK,EAAE,MAAM,CAAC;IACd,mDAAmD;IACnD,KAAK,EAAE,SAAS,CAAC;IACjB;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,6DAA6D;IAC7D,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;;OAGG;IACH,KAAK,CAAC,EAAE,cAAc,EAAE,CAAC;IAEzB;;;OAGG;IACH,OAAO,CAAC,EAAE,SAAS,CAAC;IAEpB;;;OAGG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;IAElB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;IAElB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IAEzB;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;CACxB;AAkED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,KAAK,EACL,SAAiB,EACjB,KAAK,EACL,OAAO,EACP,KAAK,EACL,KAAK,EACL,WAAW,EACX,MAAM,EACN,SAAS,GACV,EAAE,eAAe,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAiLrC"}
|
package/dist/GameTopbar.js
CHANGED
|
@@ -1,56 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
import { forwardRef, useEffect, useRef, useState } from 'react';
|
|
3
|
+
import { styles, TOPBAR_CSS } from './GameTopbar.styles.js';
|
|
3
4
|
import { useSound } from './SoundContext.js';
|
|
4
|
-
/**
|
|
5
|
-
* The topbar's Tailwind utilities, one entry per element. They used to live in a CSS module,
|
|
6
|
-
* which the published dist imported bare (`import './GameTopbar.module.css'`); Node cannot load
|
|
7
|
-
* that, so vitest suites in games that render SDK components failed (#512). Utilities are
|
|
8
|
-
* compiled by the game's Tailwind from `@source ".../dist"` (README), like every other SDK
|
|
9
|
-
* component (ADR-001). Colours and the motion timing read the design tokens (TOKENS.md), each
|
|
10
|
-
* with a fallback, so the bar still renders when a game does not load GAME_TOKENS_CSS.
|
|
11
|
-
* Phones (max-[480px]): tighter spacing, icon buttons 1.75rem wide (still 44px tall), and stats
|
|
12
|
-
* show only their value; the label stays for screen readers (#414).
|
|
13
|
-
*/
|
|
14
|
-
const BODY_FONT = '[font-family:var(--font-body,"Manrope",system-ui,sans-serif)]';
|
|
15
|
-
const styles = {
|
|
16
|
-
bar: 'flex h-8 items-center justify-between gap-3 px-3 py-1 max-[480px]:gap-1 max-[480px]:p-1',
|
|
17
|
-
// The title side takes the room the right side leaves, but never less than its buttons plus
|
|
18
|
-
// the title's minimum width, so the right side cannot slide over it.
|
|
19
|
-
groupStart: 'flex flex-[1_1_auto] items-center gap-1',
|
|
20
|
-
groupEnd: 'flex min-w-0 items-center gap-3 max-[480px]:gap-0',
|
|
21
|
-
actions: 'flex shrink-0 items-center gap-[0.4rem]',
|
|
22
|
-
// The stats are the only part of the right side that may give way, so a narrow screen never
|
|
23
|
-
// pushes a control (Sign in, sound) off the bar. Each stat is one 2rem row: a stat that does
|
|
24
|
-
// not fit wraps onto the hidden next row whole, instead of being cut through its digits.
|
|
25
|
-
stats: 'flex h-8 min-w-0 flex-wrap content-start justify-end gap-x-3 overflow-hidden max-[480px]:mr-1 max-[480px]:gap-x-2',
|
|
26
|
-
// Truncate, never vanish. inline-size containment drops the text's own width from the layout,
|
|
27
|
-
// so the title fills the room that is left instead of claiming its full length.
|
|
28
|
-
title: `min-w-10 flex-[1_1_auto] overflow-hidden text-ellipsis whitespace-nowrap text-[0.8rem] font-semibold tracking-[-0.01em] [contain:inline-size] ${BODY_FONT}`,
|
|
29
|
-
// Icon buttons and the catalog link. Every control in the topbar uses this. A tap dips the
|
|
30
|
-
// control slightly, so it feels anchored on touch screens.
|
|
31
|
-
button: 'flex min-h-11 min-w-11 shrink-0 cursor-pointer items-center justify-center border-0 bg-transparent p-0 [-webkit-tap-highlight-color:transparent] [transition:opacity_var(--motion-duration,80ms)_var(--motion-easing,ease-out)] motion-reduce:transition-none active:opacity-[0.55] focus-visible:rounded-[0.4rem] focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-[color:var(--accent,#10b981)] max-[480px]:min-w-7',
|
|
32
|
-
link: 'no-underline',
|
|
33
|
-
toneMuted: 'text-[color:var(--muted,#999)]',
|
|
34
|
-
toneInk: 'text-[color:var(--ink,#f0f0f0)]',
|
|
35
|
-
toneAccent: 'text-[color:var(--accent,#10b981)]',
|
|
36
|
-
stat: 'flex h-8 shrink-0 flex-col justify-center whitespace-nowrap text-right leading-[1.05]',
|
|
37
|
-
statValue: `text-[0.85rem] font-extrabold leading-none tabular-nums ${BODY_FONT}`,
|
|
38
|
-
statInk: 'text-[color:var(--ink)]',
|
|
39
|
-
statAccent: 'text-[color:var(--accent)]',
|
|
40
|
-
// 0.65rem keeps the label legible in sunlight and for low vision.
|
|
41
|
-
statLabel: 'text-[0.65rem] font-bold uppercase leading-none tracking-[0.06em] text-[color:var(--muted)] max-[480px]:absolute max-[480px]:size-px max-[480px]:overflow-hidden max-[480px]:whitespace-nowrap max-[480px]:[clip-path:inset(50%)]',
|
|
42
|
-
// Rules and About overlays: a full-screen panel with a header and a scrolling body.
|
|
43
|
-
overlay: 'fixed inset-0 z-[9999] flex flex-col overflow-hidden bg-[color:var(--paper,#0f0f0f)] text-[color:var(--ink,#f0f0f0)]',
|
|
44
|
-
overlayHeader: 'flex shrink-0 items-center justify-between border-b border-solid border-[color:var(--line,#2a2a2a)] px-3 py-2',
|
|
45
|
-
overlayTitle: `text-[0.9rem] font-bold ${BODY_FONT}`,
|
|
46
|
-
overlayBody: `flex-1 overflow-y-auto p-4 text-[0.9rem] leading-[1.6] ${BODY_FONT}`,
|
|
47
|
-
aboutHeading: 'mx-0 mt-0 mb-3 text-[1.5rem] font-bold [font-family:var(--font-display,"Fraunces",Georgia,serif)]',
|
|
48
|
-
aboutExtra: 'mb-4',
|
|
49
|
-
aboutGrid: 'm-0 grid grid-cols-[auto_1fr] gap-x-4 gap-y-[0.35rem] text-[0.85rem] [&_dd]:m-0 [&_dd]:tabular-nums [&_dt]:text-[color:var(--muted,#999)]',
|
|
50
|
-
code: '[font-family:monospace]',
|
|
51
|
-
aboutNote: 'mt-5 text-[0.8rem] text-[color:var(--muted,#999)]',
|
|
52
|
-
aboutLink: 'text-[color:var(--accent,#10b981)] no-underline',
|
|
53
|
-
};
|
|
54
5
|
/**
|
|
55
6
|
* Shared icon button for topbar controls. All buttons in the topbar (catalog,
|
|
56
7
|
* rules, play/pause, restart, about, sound, close) use this consistent sizing
|
|
@@ -66,10 +17,10 @@ const TopbarIconButton = forwardRef(function TopbarIconButton({ onClick, href, t
|
|
|
66
17
|
});
|
|
67
18
|
function toneClass(tone) {
|
|
68
19
|
if (tone === 'ink')
|
|
69
|
-
return styles.toneInk;
|
|
20
|
+
return styles.toneInk ?? '';
|
|
70
21
|
if (tone === 'accent')
|
|
71
|
-
return styles.toneAccent;
|
|
72
|
-
return styles.toneMuted;
|
|
22
|
+
return styles.toneAccent ?? '';
|
|
23
|
+
return styles.toneMuted ?? '';
|
|
73
24
|
}
|
|
74
25
|
/**
|
|
75
26
|
* The single allowed topbar shape for FreeGameStore games. Brand
|
|
@@ -84,7 +35,7 @@ export function GameTopbar({ title, score, showScore = false, stats, actions, ru
|
|
|
84
35
|
const sound = useSound();
|
|
85
36
|
const scorePill = showScore && score !== undefined ? [{ label: 'Score', value: score, accent: true }] : [];
|
|
86
37
|
const resolvedStats = [...scorePill, ...(stats ?? [])];
|
|
87
|
-
return (_jsxs(_Fragment, { children: [_jsxs("div", { className: styles.bar, children: [_jsxs("div", { className: styles.groupStart
|
|
38
|
+
return (_jsxs(_Fragment, { children: [_jsx("style", { href: "fgs-topbar", precedence: "fgs", children: TOPBAR_CSS }), _jsxs("div", { className: styles.bar, children: [_jsxs("div", { className: `${styles.group} ${styles.groupStart}`, 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.length > 0 && (_jsx("div", { className: styles.stats, 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) }))] }));
|
|
88
39
|
}
|
|
89
40
|
/** Compact "3 hours ago" style relative time — no dependency, no locale data. */
|
|
90
41
|
function relativeTime(iso) {
|
|
@@ -173,6 +124,6 @@ function RulesOverlay({ children, title = 'How to Play', onClose, }) {
|
|
|
173
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 })] }));
|
|
174
125
|
}
|
|
175
126
|
function Stat({ stat }) {
|
|
176
|
-
return (_jsxs("div", { className: styles.stat, children: [_jsx("div", { className: `${styles.statValue} ${stat.accent === true ? styles.statAccent :
|
|
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 })] }));
|
|
177
128
|
}
|
|
178
129
|
//# sourceMappingURL=GameTopbar.js.map
|
package/dist/GameTopbar.js.map
CHANGED
|
@@ -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,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GameTopbar styles, as a string the component renders in a <style> tag.
|
|
3
|
+
*
|
|
4
|
+
* They were a CSS module imported by GameTopbar.tsx (0.18.0 to 0.20.0). The published dist kept
|
|
5
|
+
* that bare `import './GameTopbar.module.css'`, which Node cannot load, so vitest suites in
|
|
6
|
+
* games that render SDK components failed (#512). Utilities are not an option here: most games
|
|
7
|
+
* do not `@source` the SDK's dist, so the bar would lose its styling. The rules are unchanged;
|
|
8
|
+
* the class names are fixed and prefixed `fgs-tb-` instead of hashed. Colours and the motion
|
|
9
|
+
* timing read the design tokens (TOKENS.md), each with a fallback, so the bar still renders when
|
|
10
|
+
* a game does not load GAME_TOKENS_CSS.
|
|
11
|
+
*/
|
|
12
|
+
export declare const TOPBAR_CSS = "\n.fgs-tb-bar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 0.75rem;\n padding: 0.25rem 0.75rem;\n height: 2rem;\n}\n\n.fgs-tb-group {\n display: flex;\n align-items: center;\n gap: 0.25rem;\n min-width: 0;\n}\n\n.fgs-tb-groupEnd {\n gap: 0.75rem;\n}\n\n.fgs-tb-actions {\n display: flex;\n flex-shrink: 0;\n gap: 0.4rem;\n align-items: center;\n}\n\n/* The title side takes whatever room the right side leaves, but never less\n than its buttons plus the title's minimum width, so the right side cannot\n slide over it. */\n.fgs-tb-groupStart {\n flex: 1 1 auto;\n min-width: auto;\n}\n\n/* The stats are the only part of the right side that may give way, so a narrow\n screen never pushes a control (Sign in, sound) off the bar (#414). Each stat\n is one 2rem row: a stat that does not fit wraps onto the hidden next row\n whole, instead of being cut through its digits. */\n.fgs-tb-stats {\n display: flex;\n flex-wrap: wrap;\n align-content: flex-start;\n justify-content: flex-end;\n column-gap: 0.75rem;\n height: 2rem;\n min-width: 0;\n overflow: hidden;\n}\n\n.fgs-tb-title {\n font-family: var(--font-body, \"Manrope\", system-ui, sans-serif);\n font-weight: 600;\n font-size: 0.8rem;\n letter-spacing: -0.01em;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n /* Truncate, never vanish: a few letters stay visible on a 320px screen (#414).\n inline-size containment drops the text's own width from the layout, so the\n title fills the room that is left (flex-grow) instead of claiming its full\n length, and the stats keep priority over the end of a long title. */\n flex: 1 1 auto;\n min-width: 2.5rem;\n contain: inline-size;\n}\n\n/* Icon buttons and the catalog link. Every control in the topbar uses this. */\n.fgs-tb-button {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n min-width: 2.75rem;\n min-height: 2.75rem;\n padding: 0;\n background: none;\n border: none;\n cursor: pointer;\n color: var(--muted, #999);\n -webkit-tap-highlight-color: transparent;\n transition: opacity var(--motion-duration, 80ms) var(--motion-easing, ease-out);\n}\n\n.fgs-tb-link {\n text-decoration: none;\n}\n\n/* Tones: the play/pause icon is ink, the sound icon is accent when sound is on */\n.fgs-tb-toneMuted {\n color: var(--muted, #999);\n}\n\n.fgs-tb-toneInk {\n color: var(--ink, #f0f0f0);\n}\n\n.fgs-tb-toneAccent {\n color: var(--accent, #10b981);\n}\n\n/* A tap dips the control slightly, so it feels anchored on touch screens */\n.fgs-tb-button:active {\n opacity: 0.55;\n}\n\n.fgs-tb-button:focus-visible {\n outline: 2px solid var(--accent, #10b981);\n outline-offset: -2px;\n border-radius: 0.4rem;\n}\n\n/* Score and stat values */\n.fgs-tb-stat {\n display: flex;\n flex-direction: column;\n justify-content: center;\n flex-shrink: 0;\n height: 2rem;\n text-align: right;\n line-height: 1.05;\n white-space: nowrap;\n}\n\n.fgs-tb-statValue {\n font-family: var(--font-body, \"Manrope\", system-ui, sans-serif);\n font-weight: 800;\n font-size: 0.85rem;\n color: var(--ink);\n font-variant-numeric: tabular-nums;\n line-height: 1;\n}\n\n.fgs-tb-statAccent {\n color: var(--accent);\n}\n\n/* Label under a stat. 0.65rem keeps it legible in sunlight and for low vision. */\n.fgs-tb-statLabel {\n font-size: 0.65rem;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.06em;\n color: var(--muted);\n line-height: 1;\n}\n\n/* Rules and About overlays: a full-screen panel with a header and a scrolling body */\n.fgs-tb-overlay {\n position: fixed;\n inset: 0;\n z-index: 9999;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n background: var(--paper, #0f0f0f);\n color: var(--ink, #f0f0f0);\n}\n\n.fgs-tb-overlayHeader {\n display: flex;\n align-items: center;\n justify-content: space-between;\n flex-shrink: 0;\n padding: 0.5rem 0.75rem;\n border-bottom: 1px solid var(--line, #2a2a2a);\n}\n\n.fgs-tb-overlayTitle {\n font-family: var(--font-body, \"Manrope\", system-ui, sans-serif);\n font-weight: 700;\n font-size: 0.9rem;\n}\n\n.fgs-tb-overlayBody {\n flex: 1;\n overflow-y: auto;\n padding: 1rem;\n font-family: var(--font-body, \"Manrope\", system-ui, sans-serif);\n font-size: 0.9rem;\n line-height: 1.6;\n}\n\n/* About panel */\n.fgs-tb-aboutHeading {\n margin: 0 0 0.75rem;\n font-family: var(--font-display, \"Fraunces\", Georgia, serif);\n font-weight: 700;\n font-size: 1.5rem;\n}\n\n.fgs-tb-aboutExtra {\n margin-bottom: 1rem;\n}\n\n.fgs-tb-aboutGrid {\n display: grid;\n grid-template-columns: auto 1fr;\n gap: 0.35rem 1rem;\n margin: 0;\n font-size: 0.85rem;\n}\n\n.fgs-tb-aboutGrid dt {\n color: var(--muted, #999);\n}\n\n.fgs-tb-aboutGrid dd {\n margin: 0;\n font-variant-numeric: tabular-nums;\n}\n\n.fgs-tb-code {\n font-family: monospace;\n}\n\n.fgs-tb-aboutNote {\n margin-top: 1.25rem;\n font-size: 0.8rem;\n color: var(--muted, #999);\n}\n\n.fgs-tb-aboutLink {\n color: var(--accent, #10b981);\n text-decoration: none;\n}\n\n/* Phones (\u2264480px): tighter spacing, narrower icon buttons (still 44px tall),\n and stats show only their value. The label stays for screen readers. */\n@media (max-width: 480px) {\n .fgs-tb-bar {\n gap: 0.25rem;\n padding: 0.25rem;\n }\n\n .fgs-tb-groupEnd {\n gap: 0;\n }\n\n .fgs-tb-stats {\n column-gap: 0.5rem;\n margin-right: 0.25rem;\n }\n\n .fgs-tb-button {\n min-width: 1.75rem;\n }\n\n .fgs-tb-statLabel {\n position: absolute;\n width: 1px;\n height: 1px;\n overflow: hidden;\n clip-path: inset(50%);\n white-space: nowrap;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .fgs-tb-button {\n transition: none;\n }\n}\n";
|
|
13
|
+
/** Class names used by GameTopbar. Each key maps to the `fgs-tb-` class in TOPBAR_CSS. */
|
|
14
|
+
export declare const styles: Record<string, string>;
|
|
15
|
+
//# sourceMappingURL=GameTopbar.styles.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GameTopbar.styles.d.ts","sourceRoot":"","sources":["../src/GameTopbar.styles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,eAAO,MAAM,UAAU,usLAwQtB,CAAC;AAEF,0FAA0F;AAC1F,eAAO,MAAM,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA6BzC,CAAC"}
|
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GameTopbar styles, as a string the component renders in a <style> tag.
|
|
3
|
+
*
|
|
4
|
+
* They were a CSS module imported by GameTopbar.tsx (0.18.0 to 0.20.0). The published dist kept
|
|
5
|
+
* that bare `import './GameTopbar.module.css'`, which Node cannot load, so vitest suites in
|
|
6
|
+
* games that render SDK components failed (#512). Utilities are not an option here: most games
|
|
7
|
+
* do not `@source` the SDK's dist, so the bar would lose its styling. The rules are unchanged;
|
|
8
|
+
* the class names are fixed and prefixed `fgs-tb-` instead of hashed. Colours and the motion
|
|
9
|
+
* timing read the design tokens (TOKENS.md), each with a fallback, so the bar still renders when
|
|
10
|
+
* a game does not load GAME_TOKENS_CSS.
|
|
11
|
+
*/
|
|
12
|
+
export const TOPBAR_CSS = `
|
|
13
|
+
.fgs-tb-bar {
|
|
14
|
+
display: flex;
|
|
15
|
+
align-items: center;
|
|
16
|
+
justify-content: space-between;
|
|
17
|
+
gap: 0.75rem;
|
|
18
|
+
padding: 0.25rem 0.75rem;
|
|
19
|
+
height: 2rem;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.fgs-tb-group {
|
|
23
|
+
display: flex;
|
|
24
|
+
align-items: center;
|
|
25
|
+
gap: 0.25rem;
|
|
26
|
+
min-width: 0;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.fgs-tb-groupEnd {
|
|
30
|
+
gap: 0.75rem;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.fgs-tb-actions {
|
|
34
|
+
display: flex;
|
|
35
|
+
flex-shrink: 0;
|
|
36
|
+
gap: 0.4rem;
|
|
37
|
+
align-items: center;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/* The title side takes whatever room the right side leaves, but never less
|
|
41
|
+
than its buttons plus the title's minimum width, so the right side cannot
|
|
42
|
+
slide over it. */
|
|
43
|
+
.fgs-tb-groupStart {
|
|
44
|
+
flex: 1 1 auto;
|
|
45
|
+
min-width: auto;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/* The stats are the only part of the right side that may give way, so a narrow
|
|
49
|
+
screen never pushes a control (Sign in, sound) off the bar (#414). Each stat
|
|
50
|
+
is one 2rem row: a stat that does not fit wraps onto the hidden next row
|
|
51
|
+
whole, instead of being cut through its digits. */
|
|
52
|
+
.fgs-tb-stats {
|
|
53
|
+
display: flex;
|
|
54
|
+
flex-wrap: wrap;
|
|
55
|
+
align-content: flex-start;
|
|
56
|
+
justify-content: flex-end;
|
|
57
|
+
column-gap: 0.75rem;
|
|
58
|
+
height: 2rem;
|
|
59
|
+
min-width: 0;
|
|
60
|
+
overflow: hidden;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
.fgs-tb-title {
|
|
64
|
+
font-family: var(--font-body, "Manrope", system-ui, sans-serif);
|
|
65
|
+
font-weight: 600;
|
|
66
|
+
font-size: 0.8rem;
|
|
67
|
+
letter-spacing: -0.01em;
|
|
68
|
+
white-space: nowrap;
|
|
69
|
+
overflow: hidden;
|
|
70
|
+
text-overflow: ellipsis;
|
|
71
|
+
/* Truncate, never vanish: a few letters stay visible on a 320px screen (#414).
|
|
72
|
+
inline-size containment drops the text's own width from the layout, so the
|
|
73
|
+
title fills the room that is left (flex-grow) instead of claiming its full
|
|
74
|
+
length, and the stats keep priority over the end of a long title. */
|
|
75
|
+
flex: 1 1 auto;
|
|
76
|
+
min-width: 2.5rem;
|
|
77
|
+
contain: inline-size;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/* Icon buttons and the catalog link. Every control in the topbar uses this. */
|
|
81
|
+
.fgs-tb-button {
|
|
82
|
+
display: flex;
|
|
83
|
+
align-items: center;
|
|
84
|
+
justify-content: center;
|
|
85
|
+
flex-shrink: 0;
|
|
86
|
+
min-width: 2.75rem;
|
|
87
|
+
min-height: 2.75rem;
|
|
88
|
+
padding: 0;
|
|
89
|
+
background: none;
|
|
90
|
+
border: none;
|
|
91
|
+
cursor: pointer;
|
|
92
|
+
color: var(--muted, #999);
|
|
93
|
+
-webkit-tap-highlight-color: transparent;
|
|
94
|
+
transition: opacity var(--motion-duration, 80ms) var(--motion-easing, ease-out);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
.fgs-tb-link {
|
|
98
|
+
text-decoration: none;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/* Tones: the play/pause icon is ink, the sound icon is accent when sound is on */
|
|
102
|
+
.fgs-tb-toneMuted {
|
|
103
|
+
color: var(--muted, #999);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
.fgs-tb-toneInk {
|
|
107
|
+
color: var(--ink, #f0f0f0);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
.fgs-tb-toneAccent {
|
|
111
|
+
color: var(--accent, #10b981);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/* A tap dips the control slightly, so it feels anchored on touch screens */
|
|
115
|
+
.fgs-tb-button:active {
|
|
116
|
+
opacity: 0.55;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
.fgs-tb-button:focus-visible {
|
|
120
|
+
outline: 2px solid var(--accent, #10b981);
|
|
121
|
+
outline-offset: -2px;
|
|
122
|
+
border-radius: 0.4rem;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/* Score and stat values */
|
|
126
|
+
.fgs-tb-stat {
|
|
127
|
+
display: flex;
|
|
128
|
+
flex-direction: column;
|
|
129
|
+
justify-content: center;
|
|
130
|
+
flex-shrink: 0;
|
|
131
|
+
height: 2rem;
|
|
132
|
+
text-align: right;
|
|
133
|
+
line-height: 1.05;
|
|
134
|
+
white-space: nowrap;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
.fgs-tb-statValue {
|
|
138
|
+
font-family: var(--font-body, "Manrope", system-ui, sans-serif);
|
|
139
|
+
font-weight: 800;
|
|
140
|
+
font-size: 0.85rem;
|
|
141
|
+
color: var(--ink);
|
|
142
|
+
font-variant-numeric: tabular-nums;
|
|
143
|
+
line-height: 1;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
.fgs-tb-statAccent {
|
|
147
|
+
color: var(--accent);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/* Label under a stat. 0.65rem keeps it legible in sunlight and for low vision. */
|
|
151
|
+
.fgs-tb-statLabel {
|
|
152
|
+
font-size: 0.65rem;
|
|
153
|
+
font-weight: 700;
|
|
154
|
+
text-transform: uppercase;
|
|
155
|
+
letter-spacing: 0.06em;
|
|
156
|
+
color: var(--muted);
|
|
157
|
+
line-height: 1;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/* Rules and About overlays: a full-screen panel with a header and a scrolling body */
|
|
161
|
+
.fgs-tb-overlay {
|
|
162
|
+
position: fixed;
|
|
163
|
+
inset: 0;
|
|
164
|
+
z-index: 9999;
|
|
165
|
+
display: flex;
|
|
166
|
+
flex-direction: column;
|
|
167
|
+
overflow: hidden;
|
|
168
|
+
background: var(--paper, #0f0f0f);
|
|
169
|
+
color: var(--ink, #f0f0f0);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
.fgs-tb-overlayHeader {
|
|
173
|
+
display: flex;
|
|
174
|
+
align-items: center;
|
|
175
|
+
justify-content: space-between;
|
|
176
|
+
flex-shrink: 0;
|
|
177
|
+
padding: 0.5rem 0.75rem;
|
|
178
|
+
border-bottom: 1px solid var(--line, #2a2a2a);
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
.fgs-tb-overlayTitle {
|
|
182
|
+
font-family: var(--font-body, "Manrope", system-ui, sans-serif);
|
|
183
|
+
font-weight: 700;
|
|
184
|
+
font-size: 0.9rem;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
.fgs-tb-overlayBody {
|
|
188
|
+
flex: 1;
|
|
189
|
+
overflow-y: auto;
|
|
190
|
+
padding: 1rem;
|
|
191
|
+
font-family: var(--font-body, "Manrope", system-ui, sans-serif);
|
|
192
|
+
font-size: 0.9rem;
|
|
193
|
+
line-height: 1.6;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
/* About panel */
|
|
197
|
+
.fgs-tb-aboutHeading {
|
|
198
|
+
margin: 0 0 0.75rem;
|
|
199
|
+
font-family: var(--font-display, "Fraunces", Georgia, serif);
|
|
200
|
+
font-weight: 700;
|
|
201
|
+
font-size: 1.5rem;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
.fgs-tb-aboutExtra {
|
|
205
|
+
margin-bottom: 1rem;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
.fgs-tb-aboutGrid {
|
|
209
|
+
display: grid;
|
|
210
|
+
grid-template-columns: auto 1fr;
|
|
211
|
+
gap: 0.35rem 1rem;
|
|
212
|
+
margin: 0;
|
|
213
|
+
font-size: 0.85rem;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
.fgs-tb-aboutGrid dt {
|
|
217
|
+
color: var(--muted, #999);
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
.fgs-tb-aboutGrid dd {
|
|
221
|
+
margin: 0;
|
|
222
|
+
font-variant-numeric: tabular-nums;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
.fgs-tb-code {
|
|
226
|
+
font-family: monospace;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
.fgs-tb-aboutNote {
|
|
230
|
+
margin-top: 1.25rem;
|
|
231
|
+
font-size: 0.8rem;
|
|
232
|
+
color: var(--muted, #999);
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
.fgs-tb-aboutLink {
|
|
236
|
+
color: var(--accent, #10b981);
|
|
237
|
+
text-decoration: none;
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
/* Phones (≤480px): tighter spacing, narrower icon buttons (still 44px tall),
|
|
241
|
+
and stats show only their value. The label stays for screen readers. */
|
|
242
|
+
@media (max-width: 480px) {
|
|
243
|
+
.fgs-tb-bar {
|
|
244
|
+
gap: 0.25rem;
|
|
245
|
+
padding: 0.25rem;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
.fgs-tb-groupEnd {
|
|
249
|
+
gap: 0;
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
.fgs-tb-stats {
|
|
253
|
+
column-gap: 0.5rem;
|
|
254
|
+
margin-right: 0.25rem;
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
.fgs-tb-button {
|
|
258
|
+
min-width: 1.75rem;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
.fgs-tb-statLabel {
|
|
262
|
+
position: absolute;
|
|
263
|
+
width: 1px;
|
|
264
|
+
height: 1px;
|
|
265
|
+
overflow: hidden;
|
|
266
|
+
clip-path: inset(50%);
|
|
267
|
+
white-space: nowrap;
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
@media (prefers-reduced-motion: reduce) {
|
|
272
|
+
.fgs-tb-button {
|
|
273
|
+
transition: none;
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
`;
|
|
277
|
+
/** Class names used by GameTopbar. Each key maps to the `fgs-tb-` class in TOPBAR_CSS. */
|
|
278
|
+
export const styles = Object.fromEntries([
|
|
279
|
+
'aboutExtra',
|
|
280
|
+
'aboutGrid',
|
|
281
|
+
'aboutHeading',
|
|
282
|
+
'aboutLink',
|
|
283
|
+
'aboutNote',
|
|
284
|
+
'actions',
|
|
285
|
+
'bar',
|
|
286
|
+
'button',
|
|
287
|
+
'code',
|
|
288
|
+
'group',
|
|
289
|
+
'groupEnd',
|
|
290
|
+
'groupStart',
|
|
291
|
+
'link',
|
|
292
|
+
'overlay',
|
|
293
|
+
'overlayBody',
|
|
294
|
+
'overlayHeader',
|
|
295
|
+
'overlayTitle',
|
|
296
|
+
'stat',
|
|
297
|
+
'statAccent',
|
|
298
|
+
'statLabel',
|
|
299
|
+
'statValue',
|
|
300
|
+
'stats',
|
|
301
|
+
'title',
|
|
302
|
+
'toneAccent',
|
|
303
|
+
'toneInk',
|
|
304
|
+
'toneMuted',
|
|
305
|
+
].map((name) => [name, `fgs-tb-${name}`]));
|
|
306
|
+
//# sourceMappingURL=GameTopbar.styles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GameTopbar.styles.js","sourceRoot":"","sources":["../src/GameTopbar.styles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,CAAC,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwQzB,CAAC;AAEF,0FAA0F;AAC1F,MAAM,CAAC,MAAM,MAAM,GAA2B,MAAM,CAAC,WAAW,CAC9D;IACE,YAAY;IACZ,WAAW;IACX,cAAc;IACd,WAAW;IACX,WAAW;IACX,SAAS;IACT,KAAK;IACL,QAAQ;IACR,MAAM;IACN,OAAO;IACP,UAAU;IACV,YAAY;IACZ,MAAM;IACN,SAAS;IACT,aAAa;IACb,eAAe;IACf,cAAc;IACd,MAAM;IACN,YAAY;IACZ,WAAW;IACX,WAAW;IACX,OAAO;IACP,OAAO;IACP,YAAY;IACZ,SAAS;IACT,WAAW;CACZ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,UAAU,IAAI,EAAE,CAAC,CAAC,CAC1C,CAAC"}
|
package/package.json
CHANGED