@freegamestore/games 0.13.3 → 0.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/GameButton.d.ts +1 -1
- package/dist/GameButton.d.ts.map +1 -1
- package/dist/GameButton.js +4 -0
- package/dist/GameButton.js.map +1 -1
- package/dist/GameConfirm.d.ts +16 -0
- package/dist/GameConfirm.d.ts.map +1 -0
- package/dist/GameConfirm.js +17 -0
- package/dist/GameConfirm.js.map +1 -0
- package/dist/GameModal.d.ts +14 -0
- package/dist/GameModal.d.ts.map +1 -0
- package/dist/GameModal.js +49 -0
- package/dist/GameModal.js.map +1 -0
- package/dist/GameOverScreen.d.ts +18 -0
- package/dist/GameOverScreen.d.ts.map +1 -0
- package/dist/GameOverScreen.js +47 -0
- package/dist/GameOverScreen.js.map +1 -0
- package/dist/GameTextSizeToggle.d.ts +6 -0
- package/dist/GameTextSizeToggle.d.ts.map +1 -0
- package/dist/GameTextSizeToggle.js +53 -0
- package/dist/GameTextSizeToggle.js.map +1 -0
- package/dist/GameThemeToggle.d.ts +6 -0
- package/dist/GameThemeToggle.d.ts.map +1 -0
- package/dist/GameThemeToggle.js +57 -0
- package/dist/GameThemeToggle.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/GameButton.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type * as React from 'react';
|
|
2
2
|
import type { ReactNode } from 'react';
|
|
3
|
-
export type GameButtonVariant = 'primary' | 'secondary' | 'ghost';
|
|
3
|
+
export type GameButtonVariant = 'primary' | 'secondary' | 'ghost' | 'danger';
|
|
4
4
|
export type GameButtonSize = 'sm' | 'md' | 'lg';
|
|
5
5
|
export interface GameButtonProps {
|
|
6
6
|
children: ReactNode;
|
package/dist/GameButton.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GameButton.d.ts","sourceRoot":"","sources":["../src/GameButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AACpC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,WAAW,GAAG,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"GameButton.d.ts","sourceRoot":"","sources":["../src/GameButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AACpC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,WAAW,GAAG,OAAO,GAAG,QAAQ,CAAC;AAC7E,MAAM,MAAM,cAAc,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAEhD,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,SAAS,CAAC;IACpB,wCAAwC;IACxC,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B,yEAAyE;IACzE,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,kBAAkB;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AA0BD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,EACzB,QAAQ,EACR,OAAmB,EACnB,IAAW,EACX,OAAO,EACP,QAAgB,EAChB,KAAa,GACd,EAAE,eAAe,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CA8DrC"}
|
package/dist/GameButton.js
CHANGED
|
@@ -59,6 +59,10 @@ export function GameButton({ children, variant = 'primary', size = 'md', onClick
|
|
|
59
59
|
background: 'transparent',
|
|
60
60
|
color: 'var(--muted, #6b7280)',
|
|
61
61
|
},
|
|
62
|
+
danger: {
|
|
63
|
+
background: '#dc2626',
|
|
64
|
+
color: '#ffffff',
|
|
65
|
+
},
|
|
62
66
|
};
|
|
63
67
|
return (_jsx("button", { style: { ...base, ...variantStyles[variant] }, onClick: disabled ? undefined : onClick, disabled: disabled, onPointerDown: (e) => {
|
|
64
68
|
if (!disabled)
|
package/dist/GameButton.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GameButton.js","sourceRoot":"","sources":["../src/GameButton.tsx"],"names":[],"mappings":";AAkBA,MAAM,IAAI,GAGN;IACF,EAAE,EAAE;QACF,SAAS,EAAE,SAAS;QACpB,OAAO,EAAE,aAAa;QACtB,QAAQ,EAAE,SAAS;QACnB,YAAY,EAAE,UAAU;KACzB;IACD,EAAE,EAAE;QACF,SAAS,EAAE,MAAM;QACjB,OAAO,EAAE,kBAAkB;QAC3B,QAAQ,EAAE,QAAQ;QAClB,YAAY,EAAE,SAAS;KACxB;IACD,EAAE,EAAE;QACF,SAAS,EAAE,QAAQ;QACnB,OAAO,EAAE,iBAAiB;QAC1B,QAAQ,EAAE,MAAM;QAChB,YAAY,EAAE,UAAU;KACzB;CACF,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,EACzB,QAAQ,EACR,OAAO,GAAG,SAAS,EACnB,IAAI,GAAG,IAAI,EACX,OAAO,EACP,QAAQ,GAAG,KAAK,EAChB,KAAK,GAAG,KAAK,GACG;IAChB,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;IAErB,MAAM,IAAI,GAAwB;QAChC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa;QACvC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;QACjC,UAAU,EAAE,QAAQ;QACpB,cAAc,EAAE,QAAQ;QACxB,GAAG,EAAE,QAAQ;QACb,SAAS,EAAE,CAAC,CAAC,SAAS;QACtB,OAAO,EAAE,CAAC,CAAC,OAAO;QAClB,QAAQ,EAAE,CAAC,CAAC,QAAQ;QACpB,UAAU,EAAE,kCAAkC;QAC9C,UAAU,EAAE,GAAG;QACf,UAAU,EAAE,CAAC;QACb,YAAY,EAAE,CAAC,CAAC,YAAY;QAC5B,MAAM,EAAE,MAAM;QACd,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;QACxC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC3B,UAAU,EAAE,0CAA0C;QACtD,uBAAuB,EAAE,aAAa;QACtC,WAAW,EAAE,cAAc;KAC5B,CAAC;IAEF,MAAM,aAAa,GAAmD;QACpE,OAAO,EAAE;YACP,UAAU,EAAE,wBAAwB;YACpC,KAAK,EAAE,MAAM;SACd;QACD,SAAS,EAAE;YACT,UAAU,EAAE,uBAAuB;YACnC,KAAK,EAAE,qBAAqB;YAC5B,SAAS,EAAE,sCAAsC;SAClD;QACD,KAAK,EAAE;YACL,UAAU,EAAE,aAAa;YACzB,KAAK,EAAE,uBAAuB;SAC/B;KACF,CAAC;IAEF,OAAO,CACL,iBACE,KAAK,EAAE,EAAE,GAAG,IAAI,EAAE,GAAG,aAAa,CAAC,OAAO,CAAC,EAAE,EAC7C,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,EACvC,QAAQ,EAAE,QAAQ,EAClB,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE;YACnB,IAAI,CAAC,QAAQ;gBAAG,CAAC,CAAC,aAA6B,CAAC,KAAK,CAAC,SAAS,GAAG,aAAa,CAAC;QAClF,CAAC,EACD,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE;YAChB,CAAC,CAAC,aAA6B,CAAC,KAAK,CAAC,SAAS,GAAG,EAAE,CAAC;QACxD,CAAC,EACD,cAAc,EAAE,CAAC,CAAC,EAAE,EAAE;YACnB,CAAC,CAAC,aAA6B,CAAC,KAAK,CAAC,SAAS,GAAG,EAAE,CAAC;QACxD,CAAC,YAEA,QAAQ,GACF,CACV,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"GameButton.js","sourceRoot":"","sources":["../src/GameButton.tsx"],"names":[],"mappings":";AAkBA,MAAM,IAAI,GAGN;IACF,EAAE,EAAE;QACF,SAAS,EAAE,SAAS;QACpB,OAAO,EAAE,aAAa;QACtB,QAAQ,EAAE,SAAS;QACnB,YAAY,EAAE,UAAU;KACzB;IACD,EAAE,EAAE;QACF,SAAS,EAAE,MAAM;QACjB,OAAO,EAAE,kBAAkB;QAC3B,QAAQ,EAAE,QAAQ;QAClB,YAAY,EAAE,SAAS;KACxB;IACD,EAAE,EAAE;QACF,SAAS,EAAE,QAAQ;QACnB,OAAO,EAAE,iBAAiB;QAC1B,QAAQ,EAAE,MAAM;QAChB,YAAY,EAAE,UAAU;KACzB;CACF,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,EACzB,QAAQ,EACR,OAAO,GAAG,SAAS,EACnB,IAAI,GAAG,IAAI,EACX,OAAO,EACP,QAAQ,GAAG,KAAK,EAChB,KAAK,GAAG,KAAK,GACG;IAChB,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;IAErB,MAAM,IAAI,GAAwB;QAChC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa;QACvC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;QACjC,UAAU,EAAE,QAAQ;QACpB,cAAc,EAAE,QAAQ;QACxB,GAAG,EAAE,QAAQ;QACb,SAAS,EAAE,CAAC,CAAC,SAAS;QACtB,OAAO,EAAE,CAAC,CAAC,OAAO;QAClB,QAAQ,EAAE,CAAC,CAAC,QAAQ;QACpB,UAAU,EAAE,kCAAkC;QAC9C,UAAU,EAAE,GAAG;QACf,UAAU,EAAE,CAAC;QACb,YAAY,EAAE,CAAC,CAAC,YAAY;QAC5B,MAAM,EAAE,MAAM;QACd,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;QACxC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC3B,UAAU,EAAE,0CAA0C;QACtD,uBAAuB,EAAE,aAAa;QACtC,WAAW,EAAE,cAAc;KAC5B,CAAC;IAEF,MAAM,aAAa,GAAmD;QACpE,OAAO,EAAE;YACP,UAAU,EAAE,wBAAwB;YACpC,KAAK,EAAE,MAAM;SACd;QACD,SAAS,EAAE;YACT,UAAU,EAAE,uBAAuB;YACnC,KAAK,EAAE,qBAAqB;YAC5B,SAAS,EAAE,sCAAsC;SAClD;QACD,KAAK,EAAE;YACL,UAAU,EAAE,aAAa;YACzB,KAAK,EAAE,uBAAuB;SAC/B;QACD,MAAM,EAAE;YACN,UAAU,EAAE,SAAS;YACrB,KAAK,EAAE,SAAS;SACjB;KACF,CAAC;IAEF,OAAO,CACL,iBACE,KAAK,EAAE,EAAE,GAAG,IAAI,EAAE,GAAG,aAAa,CAAC,OAAO,CAAC,EAAE,EAC7C,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,EACvC,QAAQ,EAAE,QAAQ,EAClB,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE;YACnB,IAAI,CAAC,QAAQ;gBAAG,CAAC,CAAC,aAA6B,CAAC,KAAK,CAAC,SAAS,GAAG,aAAa,CAAC;QAClF,CAAC,EACD,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE;YAChB,CAAC,CAAC,aAA6B,CAAC,KAAK,CAAC,SAAS,GAAG,EAAE,CAAC;QACxD,CAAC,EACD,cAAc,EAAE,CAAC,CAAC,EAAE,EAAE;YACnB,CAAC,CAAC,aAA6B,CAAC,KAAK,CAAC,SAAS,GAAG,EAAE,CAAC;QACxD,CAAC,YAEA,QAAQ,GACF,CACV,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface GameConfirmProps {
|
|
2
|
+
open: boolean;
|
|
3
|
+
title: string;
|
|
4
|
+
message: string;
|
|
5
|
+
confirmLabel?: string;
|
|
6
|
+
cancelLabel?: string;
|
|
7
|
+
onConfirm: () => void;
|
|
8
|
+
onCancel: () => void;
|
|
9
|
+
variant?: 'default' | 'danger';
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Confirm/cancel dialog for games. Built on GameModal.
|
|
13
|
+
* Use for: quit game, restart, delete save, etc.
|
|
14
|
+
*/
|
|
15
|
+
export declare function GameConfirm({ open, title, message, confirmLabel, cancelLabel, onConfirm, onCancel, variant, }: GameConfirmProps): import("react/jsx-runtime").JSX.Element;
|
|
16
|
+
//# sourceMappingURL=GameConfirm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GameConfirm.d.ts","sourceRoot":"","sources":["../src/GameConfirm.tsx"],"names":[],"mappings":"AAGA,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;CAChC;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,EAC1B,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,YAAwB,EAAE,WAAsB,EACtE,SAAS,EAAE,QAAQ,EAAE,OAAmB,GACzC,EAAE,gBAAgB,2CA0BlB"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { GameModal } from './GameModal.js';
|
|
3
|
+
import { GameButton } from './GameButton.js';
|
|
4
|
+
/**
|
|
5
|
+
* Confirm/cancel dialog for games. Built on GameModal.
|
|
6
|
+
* Use for: quit game, restart, delete save, etc.
|
|
7
|
+
*/
|
|
8
|
+
export function GameConfirm({ open, title, message, confirmLabel = 'Confirm', cancelLabel = 'Cancel', onConfirm, onCancel, variant = 'default', }) {
|
|
9
|
+
return (_jsxs(GameModal, { open: open, onClose: onCancel, title: title, children: [_jsx("p", { style: {
|
|
10
|
+
fontSize: '0.9rem',
|
|
11
|
+
color: 'var(--muted, #64748b)',
|
|
12
|
+
margin: '0 0 1.25rem',
|
|
13
|
+
lineHeight: 1.5,
|
|
14
|
+
fontFamily: '"Manrope", system-ui, sans-serif',
|
|
15
|
+
}, children: message }), _jsxs("div", { style: { display: 'flex', gap: '0.5rem', justifyContent: 'flex-end' }, children: [_jsx(GameButton, { onClick: onCancel, variant: "secondary", size: "md", children: cancelLabel }), _jsx(GameButton, { onClick: onConfirm, variant: variant === 'danger' ? 'danger' : 'primary', size: "md", children: confirmLabel })] })] }));
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=GameConfirm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GameConfirm.js","sourceRoot":"","sources":["../src/GameConfirm.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAa7C;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,EAC1B,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,YAAY,GAAG,SAAS,EAAE,WAAW,GAAG,QAAQ,EACtE,SAAS,EAAE,QAAQ,EAAE,OAAO,GAAG,SAAS,GACvB;IACjB,OAAO,CACL,MAAC,SAAS,IAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,aACpD,YAAG,KAAK,EAAE;oBACR,QAAQ,EAAE,QAAQ;oBAClB,KAAK,EAAE,uBAAuB;oBAC9B,MAAM,EAAE,aAAa;oBACrB,UAAU,EAAE,GAAG;oBACf,UAAU,EAAE,kCAAkC;iBAC/C,YACE,OAAO,GACN,EACJ,eAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,cAAc,EAAE,UAAU,EAAE,aACxE,KAAC,UAAU,IAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,IAAI,YACzD,WAAW,GACD,EACb,KAAC,UAAU,IACT,OAAO,EAAE,SAAS,EAClB,OAAO,EAAE,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,EACpD,IAAI,EAAC,IAAI,YAER,YAAY,GACF,IACT,IACI,CACb,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
export interface GameModalProps {
|
|
3
|
+
open: boolean;
|
|
4
|
+
onClose: () => void;
|
|
5
|
+
title?: string;
|
|
6
|
+
children: ReactNode;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Fullscreen modal overlay for games. Used for rules, settings, confirmations.
|
|
10
|
+
* Closes on backdrop click or Escape key.
|
|
11
|
+
* Styled with platform design tokens for consistency across all games.
|
|
12
|
+
*/
|
|
13
|
+
export declare function GameModal({ open, onClose, title, children }: GameModalProps): import("react/jsx-runtime").JSX.Element | null;
|
|
14
|
+
//# sourceMappingURL=GameModal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GameModal.d.ts","sourceRoot":"","sources":["../src/GameModal.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAElD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,cAAc,kDAiE3E"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect } from 'react';
|
|
3
|
+
/**
|
|
4
|
+
* Fullscreen modal overlay for games. Used for rules, settings, confirmations.
|
|
5
|
+
* Closes on backdrop click or Escape key.
|
|
6
|
+
* Styled with platform design tokens for consistency across all games.
|
|
7
|
+
*/
|
|
8
|
+
export function GameModal({ open, onClose, title, children }) {
|
|
9
|
+
useEffect(() => {
|
|
10
|
+
if (!open)
|
|
11
|
+
return;
|
|
12
|
+
const handler = (e) => { if (e.key === 'Escape')
|
|
13
|
+
onClose(); };
|
|
14
|
+
document.addEventListener('keydown', handler);
|
|
15
|
+
return () => document.removeEventListener('keydown', handler);
|
|
16
|
+
}, [open, onClose]);
|
|
17
|
+
if (!open)
|
|
18
|
+
return null;
|
|
19
|
+
return (_jsx("div", { onClick: onClose, style: {
|
|
20
|
+
position: 'fixed',
|
|
21
|
+
inset: 0,
|
|
22
|
+
zIndex: 900,
|
|
23
|
+
background: 'rgba(0,0,0,0.6)',
|
|
24
|
+
backdropFilter: 'blur(4px)',
|
|
25
|
+
display: 'flex',
|
|
26
|
+
alignItems: 'center',
|
|
27
|
+
justifyContent: 'center',
|
|
28
|
+
padding: '1rem',
|
|
29
|
+
}, children: _jsxs("div", { onClick: (e) => e.stopPropagation(), style: {
|
|
30
|
+
background: 'var(--panel, #ffffff)',
|
|
31
|
+
border: '1px solid var(--line, #e2e8f0)',
|
|
32
|
+
borderRadius: '1rem',
|
|
33
|
+
maxWidth: 400,
|
|
34
|
+
width: '100%',
|
|
35
|
+
maxHeight: '80dvh',
|
|
36
|
+
overflow: 'auto',
|
|
37
|
+
}, children: [title && (_jsxs("div", { style: {
|
|
38
|
+
display: 'flex',
|
|
39
|
+
alignItems: 'center',
|
|
40
|
+
justifyContent: 'space-between',
|
|
41
|
+
padding: '0.85rem 1rem',
|
|
42
|
+
borderBottom: '1px solid var(--line, #e2e8f0)',
|
|
43
|
+
}, children: [_jsx("span", { style: { fontWeight: 700, fontSize: '1rem', color: 'var(--ink, #1e293b)', fontFamily: '"Manrope", system-ui, sans-serif' }, children: title }), _jsx("button", { onClick: onClose, "aria-label": "Close", style: {
|
|
44
|
+
background: 'none', border: 'none', cursor: 'pointer',
|
|
45
|
+
fontSize: '1.25rem', lineHeight: 1, color: 'var(--muted, #64748b)',
|
|
46
|
+
padding: '0.25rem', fontFamily: 'inherit',
|
|
47
|
+
}, children: "\u00D7" })] })), _jsx("div", { style: { padding: '1rem' }, children: children })] }) }));
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=GameModal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GameModal.js","sourceRoot":"","sources":["../src/GameModal.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAkB,MAAM,OAAO,CAAC;AASlD;;;;GAIG;AACH,MAAM,UAAU,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAkB;IAC1E,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,IAAI;YAAE,OAAO;QAClB,MAAM,OAAO,GAAG,CAAC,CAAgB,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ;YAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7E,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC9C,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAChE,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IAEpB,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IAEvB,OAAO,CACL,cACE,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE;YACL,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,CAAC;YACR,MAAM,EAAE,GAAG;YACX,UAAU,EAAE,iBAAiB;YAC7B,cAAc,EAAE,WAAW;YAC3B,OAAO,EAAE,MAAM;YACf,UAAU,EAAE,QAAQ;YACpB,cAAc,EAAE,QAAQ;YACxB,OAAO,EAAE,MAAM;SAChB,YAED,eACE,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,EACnC,KAAK,EAAE;gBACL,UAAU,EAAE,uBAAuB;gBACnC,MAAM,EAAE,gCAAgC;gBACxC,YAAY,EAAE,MAAM;gBACpB,QAAQ,EAAE,GAAG;gBACb,KAAK,EAAE,MAAM;gBACb,SAAS,EAAE,OAAO;gBAClB,QAAQ,EAAE,MAAM;aACjB,aAEA,KAAK,IAAI,CACR,eAAK,KAAK,EAAE;wBACV,OAAO,EAAE,MAAM;wBACf,UAAU,EAAE,QAAQ;wBACpB,cAAc,EAAE,eAAe;wBAC/B,OAAO,EAAE,cAAc;wBACvB,YAAY,EAAE,gCAAgC;qBAC/C,aACC,eAAM,KAAK,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,qBAAqB,EAAE,UAAU,EAAE,kCAAkC,EAAE,YAC7H,KAAK,GACD,EACP,iBACE,OAAO,EAAE,OAAO,gBACL,OAAO,EAClB,KAAK,EAAE;gCACL,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS;gCACrD,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,uBAAuB;gCAClE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS;6BAC1C,uBAGM,IACL,CACP,EACD,cAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,YAAG,QAAQ,GAAO,IAC7C,GACF,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
export interface GameOverScreenProps {
|
|
3
|
+
/** Final score to display. */
|
|
4
|
+
score: number;
|
|
5
|
+
/** Personal best (if available). */
|
|
6
|
+
highScore?: number;
|
|
7
|
+
/** Called when user taps "Play Again". */
|
|
8
|
+
onPlayAgain: () => void;
|
|
9
|
+
/** Optional extra content below the score (leaderboard link, stats, etc.). */
|
|
10
|
+
children?: ReactNode;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Standard game-over overlay. Shows score, optional high score,
|
|
14
|
+
* play again button, and optional extra content.
|
|
15
|
+
* Renders as a centered overlay on top of the game board.
|
|
16
|
+
*/
|
|
17
|
+
export declare function GameOverScreen({ score, highScore, onPlayAgain, children }: GameOverScreenProps): import("react/jsx-runtime").JSX.Element;
|
|
18
|
+
//# sourceMappingURL=GameOverScreen.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GameOverScreen.d.ts","sourceRoot":"","sources":["../src/GameOverScreen.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,MAAM,WAAW,mBAAmB;IAClC,8BAA8B;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,oCAAoC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0CAA0C;IAC1C,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE,mBAAmB,2CAqE9F"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { GameButton } from './GameButton.js';
|
|
3
|
+
/**
|
|
4
|
+
* Standard game-over overlay. Shows score, optional high score,
|
|
5
|
+
* play again button, and optional extra content.
|
|
6
|
+
* Renders as a centered overlay on top of the game board.
|
|
7
|
+
*/
|
|
8
|
+
export function GameOverScreen({ score, highScore, onPlayAgain, children }) {
|
|
9
|
+
const isNewHigh = highScore !== undefined && score >= highScore && score > 0;
|
|
10
|
+
return (_jsx("div", { style: {
|
|
11
|
+
position: 'absolute',
|
|
12
|
+
inset: 0,
|
|
13
|
+
zIndex: 800,
|
|
14
|
+
background: 'rgba(0,0,0,0.65)',
|
|
15
|
+
backdropFilter: 'blur(6px)',
|
|
16
|
+
display: 'flex',
|
|
17
|
+
alignItems: 'center',
|
|
18
|
+
justifyContent: 'center',
|
|
19
|
+
padding: '1.5rem',
|
|
20
|
+
}, children: _jsxs("div", { style: {
|
|
21
|
+
textAlign: 'center',
|
|
22
|
+
maxWidth: 320,
|
|
23
|
+
width: '100%',
|
|
24
|
+
}, children: [_jsx("div", { style: {
|
|
25
|
+
fontSize: '0.75rem',
|
|
26
|
+
fontWeight: 700,
|
|
27
|
+
textTransform: 'uppercase',
|
|
28
|
+
letterSpacing: '0.1em',
|
|
29
|
+
color: 'rgba(255,255,255,0.6)',
|
|
30
|
+
marginBottom: '0.5rem',
|
|
31
|
+
fontFamily: '"Manrope", system-ui, sans-serif',
|
|
32
|
+
}, children: "Game Over" }), _jsx("div", { style: {
|
|
33
|
+
fontSize: '3rem',
|
|
34
|
+
fontWeight: 800,
|
|
35
|
+
color: '#ffffff',
|
|
36
|
+
lineHeight: 1,
|
|
37
|
+
marginBottom: '0.25rem',
|
|
38
|
+
fontFamily: '"Fraunces", serif',
|
|
39
|
+
}, children: score.toLocaleString() }), highScore !== undefined && (_jsx("div", { style: {
|
|
40
|
+
fontSize: '0.8rem',
|
|
41
|
+
fontWeight: 600,
|
|
42
|
+
color: isNewHigh ? 'var(--accent, #10b981)' : 'rgba(255,255,255,0.5)',
|
|
43
|
+
marginBottom: '1rem',
|
|
44
|
+
fontFamily: '"Manrope", system-ui, sans-serif',
|
|
45
|
+
}, children: isNewHigh ? 'New high score!' : `Best: ${highScore.toLocaleString()}` })), !highScore && _jsx("div", { style: { marginBottom: '1rem' } }), _jsx(GameButton, { onClick: onPlayAgain, variant: "primary", size: "lg", children: "Play Again" }), children && (_jsx("div", { style: { marginTop: '1rem', color: 'rgba(255,255,255,0.7)', fontSize: '0.85rem' }, children: children }))] }) }));
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=GameOverScreen.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GameOverScreen.js","sourceRoot":"","sources":["../src/GameOverScreen.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAa7C;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAuB;IAC7F,MAAM,SAAS,GAAG,SAAS,KAAK,SAAS,IAAI,KAAK,IAAI,SAAS,IAAI,KAAK,GAAG,CAAC,CAAC;IAE7E,OAAO,CACL,cAAK,KAAK,EAAE;YACV,QAAQ,EAAE,UAAU;YACpB,KAAK,EAAE,CAAC;YACR,MAAM,EAAE,GAAG;YACX,UAAU,EAAE,kBAAkB;YAC9B,cAAc,EAAE,WAAW;YAC3B,OAAO,EAAE,MAAM;YACf,UAAU,EAAE,QAAQ;YACpB,cAAc,EAAE,QAAQ;YACxB,OAAO,EAAE,QAAQ;SAClB,YACC,eAAK,KAAK,EAAE;gBACV,SAAS,EAAE,QAAQ;gBACnB,QAAQ,EAAE,GAAG;gBACb,KAAK,EAAE,MAAM;aACd,aACC,cAAK,KAAK,EAAE;wBACV,QAAQ,EAAE,SAAS;wBACnB,UAAU,EAAE,GAAG;wBACf,aAAa,EAAE,WAAW;wBAC1B,aAAa,EAAE,OAAO;wBACtB,KAAK,EAAE,uBAAuB;wBAC9B,YAAY,EAAE,QAAQ;wBACtB,UAAU,EAAE,kCAAkC;qBAC/C,0BAEK,EAEN,cAAK,KAAK,EAAE;wBACV,QAAQ,EAAE,MAAM;wBAChB,UAAU,EAAE,GAAG;wBACf,KAAK,EAAE,SAAS;wBAChB,UAAU,EAAE,CAAC;wBACb,YAAY,EAAE,SAAS;wBACvB,UAAU,EAAE,mBAAmB;qBAChC,YACE,KAAK,CAAC,cAAc,EAAE,GACnB,EAEL,SAAS,KAAK,SAAS,IAAI,CAC1B,cAAK,KAAK,EAAE;wBACV,QAAQ,EAAE,QAAQ;wBAClB,UAAU,EAAE,GAAG;wBACf,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,uBAAuB;wBACrE,YAAY,EAAE,MAAM;wBACpB,UAAU,EAAE,kCAAkC;qBAC/C,YACE,SAAS,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS,SAAS,CAAC,cAAc,EAAE,EAAE,GAClE,CACP,EAEA,CAAC,SAAS,IAAI,cAAK,KAAK,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,GAAI,EAEvD,KAAC,UAAU,IAAC,OAAO,EAAE,WAAW,EAAE,OAAO,EAAC,SAAS,EAAC,IAAI,EAAC,IAAI,2BAEhD,EAEZ,QAAQ,IAAI,CACX,cAAK,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,uBAAuB,EAAE,QAAQ,EAAE,SAAS,EAAE,YACnF,QAAQ,GACL,CACP,IACG,GACF,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compact text-size toggle for game topbars. 28px square, shows A/A+/A-.
|
|
3
|
+
* Designed to fit in GameTopbar's `actions` slot alongside GameThemeToggle.
|
|
4
|
+
*/
|
|
5
|
+
export declare function GameTextSizeToggle(): import("react/jsx-runtime").JSX.Element;
|
|
6
|
+
//# sourceMappingURL=GameTextSizeToggle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GameTextSizeToggle.d.ts","sourceRoot":"","sources":["../src/GameTextSizeToggle.tsx"],"names":[],"mappings":"AAsBA;;;GAGG;AACH,wBAAgB,kBAAkB,4CAqCjC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useState, useCallback } from 'react';
|
|
3
|
+
const KEY = 'stores-text-size';
|
|
4
|
+
function getSize() {
|
|
5
|
+
if (typeof window === 'undefined')
|
|
6
|
+
return 'default';
|
|
7
|
+
const s = window.localStorage.getItem(KEY);
|
|
8
|
+
if (s === 'lg' || s === 'sm')
|
|
9
|
+
return s;
|
|
10
|
+
return 'default';
|
|
11
|
+
}
|
|
12
|
+
function apply(size) {
|
|
13
|
+
if (typeof document === 'undefined')
|
|
14
|
+
return;
|
|
15
|
+
if (size === 'default') {
|
|
16
|
+
delete document.documentElement.dataset.text;
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
document.documentElement.dataset.text = size;
|
|
20
|
+
}
|
|
21
|
+
window.localStorage.setItem(KEY, size);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Compact text-size toggle for game topbars. 28px square, shows A/A+/A-.
|
|
25
|
+
* Designed to fit in GameTopbar's `actions` slot alongside GameThemeToggle.
|
|
26
|
+
*/
|
|
27
|
+
export function GameTextSizeToggle() {
|
|
28
|
+
const [size, setSize] = useState(getSize);
|
|
29
|
+
const cycle = useCallback(() => {
|
|
30
|
+
const order = ['default', 'lg', 'sm'];
|
|
31
|
+
const next = order[(order.indexOf(size) + 1) % order.length];
|
|
32
|
+
setSize(next);
|
|
33
|
+
apply(next);
|
|
34
|
+
}, [size]);
|
|
35
|
+
const label = size === 'lg' ? 'A+' : size === 'sm' ? 'A\u2212' : 'A';
|
|
36
|
+
return (_jsx("button", { onClick: cycle, "aria-label": `Text: ${size}`, title: `Text: ${size}`, style: {
|
|
37
|
+
width: 28,
|
|
38
|
+
height: 28,
|
|
39
|
+
borderRadius: 8,
|
|
40
|
+
border: '1px solid var(--line, #e2e8f0)',
|
|
41
|
+
background: 'var(--panel, #ffffff)',
|
|
42
|
+
color: 'var(--ink, #1e293b)',
|
|
43
|
+
display: 'inline-flex',
|
|
44
|
+
alignItems: 'center',
|
|
45
|
+
justifyContent: 'center',
|
|
46
|
+
cursor: 'pointer',
|
|
47
|
+
padding: 0,
|
|
48
|
+
fontFamily: '"Manrope", system-ui, sans-serif',
|
|
49
|
+
fontSize: '0.7rem',
|
|
50
|
+
fontWeight: 700,
|
|
51
|
+
}, children: label }));
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=GameTextSizeToggle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GameTextSizeToggle.js","sourceRoot":"","sources":["../src/GameTextSizeToggle.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAE9C,MAAM,GAAG,GAAG,kBAAkB,CAAC;AAG/B,SAAS,OAAO;IACd,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAO,SAAS,CAAC;IACpD,MAAM,CAAC,GAAG,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC3C,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI;QAAE,OAAO,CAAC,CAAC;IACvC,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,KAAK,CAAC,IAAU;IACvB,IAAI,OAAO,QAAQ,KAAK,WAAW;QAAE,OAAO;IAC5C,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,QAAQ,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC;IAC/C,CAAC;SAAM,CAAC;QACN,QAAQ,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAC/C,CAAC;IACD,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AACzC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB;IAChC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAO,OAAO,CAAC,CAAC;IAEhD,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;QAC7B,MAAM,KAAK,GAAW,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAC9C,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAE,CAAC;QAC9D,OAAO,CAAC,IAAI,CAAC,CAAC;QACd,KAAK,CAAC,IAAI,CAAC,CAAC;IACd,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAEX,MAAM,KAAK,GAAG,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC;IAErE,OAAO,CACL,iBACE,OAAO,EAAE,KAAK,gBACF,SAAS,IAAI,EAAE,EAC3B,KAAK,EAAE,SAAS,IAAI,EAAE,EACtB,KAAK,EAAE;YACL,KAAK,EAAE,EAAE;YACT,MAAM,EAAE,EAAE;YACV,YAAY,EAAE,CAAC;YACf,MAAM,EAAE,gCAAgC;YACxC,UAAU,EAAE,uBAAuB;YACnC,KAAK,EAAE,qBAAqB;YAC5B,OAAO,EAAE,aAAa;YACtB,UAAU,EAAE,QAAQ;YACpB,cAAc,EAAE,QAAQ;YACxB,MAAM,EAAE,SAAS;YACjB,OAAO,EAAE,CAAC;YACV,UAAU,EAAE,kCAAkC;YAC9C,QAAQ,EAAE,QAAQ;YAClB,UAAU,EAAE,GAAG;SAChB,YAEA,KAAK,GACC,CACV,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GameThemeToggle.d.ts","sourceRoot":"","sources":["../src/GameThemeToggle.tsx"],"names":[],"mappings":"AA4BA;;;GAGG;AACH,wBAAgB,eAAe,4CA6C9B"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState, useCallback } from 'react';
|
|
3
|
+
const THEME_KEY = 'stores-theme';
|
|
4
|
+
function getStoredPref() {
|
|
5
|
+
if (typeof window === 'undefined')
|
|
6
|
+
return 'system';
|
|
7
|
+
const s = window.localStorage.getItem(THEME_KEY);
|
|
8
|
+
if (s === 'light' || s === 'dark' || s === 'system')
|
|
9
|
+
return s;
|
|
10
|
+
return 'system';
|
|
11
|
+
}
|
|
12
|
+
function resolve(pref) {
|
|
13
|
+
if (pref !== 'system')
|
|
14
|
+
return pref;
|
|
15
|
+
return typeof window !== 'undefined' && window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';
|
|
16
|
+
}
|
|
17
|
+
function apply(pref) {
|
|
18
|
+
if (typeof document === 'undefined')
|
|
19
|
+
return;
|
|
20
|
+
const theme = resolve(pref);
|
|
21
|
+
if (theme === 'dark') {
|
|
22
|
+
document.documentElement.dataset.theme = 'dark';
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
delete document.documentElement.dataset.theme;
|
|
26
|
+
}
|
|
27
|
+
window.localStorage.setItem(THEME_KEY, pref);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Compact theme toggle for game topbars. Sun/moon icon, 28px square.
|
|
31
|
+
* Designed to fit in GameTopbar's `actions` slot.
|
|
32
|
+
*/
|
|
33
|
+
export function GameThemeToggle() {
|
|
34
|
+
const [pref, setPref] = useState(getStoredPref);
|
|
35
|
+
const theme = resolve(pref);
|
|
36
|
+
const cycle = useCallback(() => {
|
|
37
|
+
const order = ['system', 'light', 'dark'];
|
|
38
|
+
const next = order[(order.indexOf(pref) + 1) % order.length];
|
|
39
|
+
setPref(next);
|
|
40
|
+
apply(next);
|
|
41
|
+
}, [pref]);
|
|
42
|
+
return (_jsx("button", { onClick: cycle, "aria-label": `Theme: ${pref}`, title: `Theme: ${pref}`, style: {
|
|
43
|
+
width: 28,
|
|
44
|
+
height: 28,
|
|
45
|
+
borderRadius: 8,
|
|
46
|
+
border: '1px solid var(--line, #e2e8f0)',
|
|
47
|
+
background: 'var(--panel, #ffffff)',
|
|
48
|
+
color: 'var(--ink, #1e293b)',
|
|
49
|
+
display: 'inline-flex',
|
|
50
|
+
alignItems: 'center',
|
|
51
|
+
justifyContent: 'center',
|
|
52
|
+
cursor: 'pointer',
|
|
53
|
+
padding: 0,
|
|
54
|
+
fontFamily: 'inherit',
|
|
55
|
+
}, children: theme === 'dark' ? (_jsxs("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [_jsx("circle", { cx: "12", cy: "12", r: "5" }), _jsx("line", { x1: "12", y1: "1", x2: "12", y2: "3" }), _jsx("line", { x1: "12", y1: "21", x2: "12", y2: "23" }), _jsx("line", { x1: "4.22", y1: "4.22", x2: "5.64", y2: "5.64" }), _jsx("line", { x1: "18.36", y1: "18.36", x2: "19.78", y2: "19.78" }), _jsx("line", { x1: "1", y1: "12", x2: "3", y2: "12" }), _jsx("line", { x1: "21", y1: "12", x2: "23", y2: "12" }), _jsx("line", { x1: "4.22", y1: "19.78", x2: "5.64", y2: "18.36" }), _jsx("line", { x1: "18.36", y1: "5.64", x2: "19.78", y2: "4.22" })] })) : (_jsx("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: _jsx("path", { d: "M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z" }) })) }));
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=GameThemeToggle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GameThemeToggle.js","sourceRoot":"","sources":["../src/GameThemeToggle.tsx"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -14,7 +14,12 @@
|
|
|
14
14
|
*/
|
|
15
15
|
export { GameAuth } from './GameAuth.js';
|
|
16
16
|
export { GameButton, type GameButtonProps, type GameButtonSize, type GameButtonVariant, } from './GameButton.js';
|
|
17
|
+
export { GameConfirm, type GameConfirmProps } from './GameConfirm.js';
|
|
18
|
+
export { GameModal, type GameModalProps } from './GameModal.js';
|
|
19
|
+
export { GameOverScreen, type GameOverScreenProps } from './GameOverScreen.js';
|
|
17
20
|
export { GameShell, type GameShellProps } from './GameShell.js';
|
|
21
|
+
export { GameTextSizeToggle } from './GameTextSizeToggle.js';
|
|
22
|
+
export { GameThemeToggle } from './GameThemeToggle.js';
|
|
18
23
|
export { GameTopbar, type GameTopbarProps, type GameTopbarStat, } from './GameTopbar.js';
|
|
19
24
|
export { Leaderboard, type LeaderboardProps } from './Leaderboard.js';
|
|
20
25
|
export { useSound } from './SoundContext.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EACL,UAAU,EACV,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,iBAAiB,GACvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,EACL,UAAU,EACV,KAAK,eAAe,EACpB,KAAK,cAAc,GACpB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,KAAK,IAAI,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EACL,KAAK,gBAAgB,EACrB,cAAc,GACf,MAAM,qBAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EACL,UAAU,EACV,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,iBAAiB,GACvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,KAAK,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC/E,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EACL,UAAU,EACV,KAAK,eAAe,EACpB,KAAK,cAAc,GACpB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,KAAK,IAAI,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EACL,KAAK,gBAAgB,EACrB,cAAc,GACf,MAAM,qBAAqB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -14,7 +14,12 @@
|
|
|
14
14
|
*/
|
|
15
15
|
export { GameAuth } from './GameAuth.js';
|
|
16
16
|
export { GameButton, } from './GameButton.js';
|
|
17
|
+
export { GameConfirm } from './GameConfirm.js';
|
|
18
|
+
export { GameModal } from './GameModal.js';
|
|
19
|
+
export { GameOverScreen } from './GameOverScreen.js';
|
|
17
20
|
export { GameShell } from './GameShell.js';
|
|
21
|
+
export { GameTextSizeToggle } from './GameTextSizeToggle.js';
|
|
22
|
+
export { GameThemeToggle } from './GameThemeToggle.js';
|
|
18
23
|
export { GameTopbar, } from './GameTopbar.js';
|
|
19
24
|
export { Leaderboard } from './Leaderboard.js';
|
|
20
25
|
export { useSound } from './SoundContext.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EACL,UAAU,GAIX,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,SAAS,EAAuB,MAAM,gBAAgB,CAAC;AAChE,OAAO,EACL,UAAU,GAGX,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,WAAW,EAAyB,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAa,OAAO,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAEL,cAAc,GACf,MAAM,qBAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EACL,UAAU,GAIX,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,WAAW,EAAyB,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,SAAS,EAAuB,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,cAAc,EAA4B,MAAM,qBAAqB,CAAC;AAC/E,OAAO,EAAE,SAAS,EAAuB,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EACL,UAAU,GAGX,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,WAAW,EAAyB,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAa,OAAO,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAEL,cAAc,GACf,MAAM,qBAAqB,CAAC"}
|
package/package.json
CHANGED