@gamepark/react-game 7.7.25 → 7.7.26
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/components/dialogs/ExtensionInfoDialog.d.ts +29 -0
- package/dist/components/dialogs/ExtensionInfoDialog.js +182 -0
- package/dist/components/dialogs/ExtensionInfoDialog.js.map +1 -0
- package/dist/components/dialogs/index.d.ts +1 -0
- package/dist/components/dialogs/index.js +1 -0
- package/dist/components/dialogs/index.js.map +1 -1
- package/dist/css/GameTheme.d.ts +4 -0
- package/dist/css/GameTheme.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { FC, ReactNode } from 'react';
|
|
2
|
+
export type ExtensionInfoDialogProps = {
|
|
3
|
+
/** One node per extension. Each node renders its own popup content (title, text, cards…). */
|
|
4
|
+
popups: ReactNode[];
|
|
5
|
+
/** Optional override for the sessionStorage dismiss flag key. When omitted the
|
|
6
|
+
* framework derives a sensible default of `${gameId}-extensions` from the
|
|
7
|
+
* active GameProvider — sufficient for almost every game. Override only if
|
|
8
|
+
* you need to encode something extra (e.g. the active extension combo so a
|
|
9
|
+
* new configuration re-triggers the popup). */
|
|
10
|
+
storageKey?: string;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Generic carousel-style "you are playing with extension(s)" popup.
|
|
14
|
+
*
|
|
15
|
+
* The framework handles:
|
|
16
|
+
* - the dialog/modal wrapper (close button via `theme.dialog.closeButton`/`closeIcon`)
|
|
17
|
+
* - a dedicated navigation bar tailored to this dialog (see ExtensionNav below):
|
|
18
|
+
* * single popup → just a centered "Close" button (no useless Previous/Next)
|
|
19
|
+
* * multiple popups → Previous + dots + Next as long as we're not on the last page;
|
|
20
|
+
* on the last page Next becomes "Close" (still keeps Previous)
|
|
21
|
+
* - the `sessionStorage` gate ("show once per tab session", F5-safe)
|
|
22
|
+
*
|
|
23
|
+
* The game just passes:
|
|
24
|
+
* - `popups`: a ReactNode per extension, fully self-rendered (title, body, cards…)
|
|
25
|
+
* - `storageKey`: a stable identifier whose composition encodes the active extension combo
|
|
26
|
+
*
|
|
27
|
+
* Pass an empty `popups` array (or omit the component) when no extension is active.
|
|
28
|
+
*/
|
|
29
|
+
export declare const ExtensionInfoDialog: FC<ExtensionInfoDialogProps>;
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "@emotion/react/jsx-runtime";
|
|
2
|
+
/** @jsxImportSource @emotion/react */
|
|
3
|
+
import { css, useTheme } from '@emotion/react';
|
|
4
|
+
import { faChevronLeft } from '@fortawesome/free-solid-svg-icons/faChevronLeft';
|
|
5
|
+
import { faChevronRight } from '@fortawesome/free-solid-svg-icons/faChevronRight';
|
|
6
|
+
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
|
7
|
+
import { useCallback, useContext, useState } from 'react';
|
|
8
|
+
import { useTranslation } from 'react-i18next';
|
|
9
|
+
import { gameContext } from '../GameProvider';
|
|
10
|
+
import { RulesDialog } from './RulesDialog';
|
|
11
|
+
const isDismissed = (key) => {
|
|
12
|
+
try {
|
|
13
|
+
return sessionStorage.getItem(key) === 'true';
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
const markDismissed = (key) => {
|
|
20
|
+
try {
|
|
21
|
+
sessionStorage.setItem(key, 'true');
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
// ignore (private mode, quota, …)
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Generic carousel-style "you are playing with extension(s)" popup.
|
|
29
|
+
*
|
|
30
|
+
* The framework handles:
|
|
31
|
+
* - the dialog/modal wrapper (close button via `theme.dialog.closeButton`/`closeIcon`)
|
|
32
|
+
* - a dedicated navigation bar tailored to this dialog (see ExtensionNav below):
|
|
33
|
+
* * single popup → just a centered "Close" button (no useless Previous/Next)
|
|
34
|
+
* * multiple popups → Previous + dots + Next as long as we're not on the last page;
|
|
35
|
+
* on the last page Next becomes "Close" (still keeps Previous)
|
|
36
|
+
* - the `sessionStorage` gate ("show once per tab session", F5-safe)
|
|
37
|
+
*
|
|
38
|
+
* The game just passes:
|
|
39
|
+
* - `popups`: a ReactNode per extension, fully self-rendered (title, body, cards…)
|
|
40
|
+
* - `storageKey`: a stable identifier whose composition encodes the active extension combo
|
|
41
|
+
*
|
|
42
|
+
* Pass an empty `popups` array (or omit the component) when no extension is active.
|
|
43
|
+
*/
|
|
44
|
+
export const ExtensionInfoDialog = ({ popups, storageKey }) => {
|
|
45
|
+
const theme = useTheme();
|
|
46
|
+
// Default storage key derives from the active game id (e.g. "faraway-extensions").
|
|
47
|
+
// The GameProvider always sets `game` in its context, so this is safe to use as a
|
|
48
|
+
// fallback when the consumer doesn't pass an explicit storageKey.
|
|
49
|
+
const { game } = useContext(gameContext);
|
|
50
|
+
const effectiveStorageKey = storageKey ?? `${game}-extensions`;
|
|
51
|
+
const [open, setOpen] = useState(() => popups.length > 0 && !isDismissed(effectiveStorageKey));
|
|
52
|
+
const [index, setIndex] = useState(0);
|
|
53
|
+
const total = popups.length;
|
|
54
|
+
const safeIndex = Math.min(Math.max(0, index), Math.max(0, total - 1));
|
|
55
|
+
const close = useCallback(() => {
|
|
56
|
+
markDismissed(effectiveStorageKey);
|
|
57
|
+
setOpen(false);
|
|
58
|
+
}, [effectiveStorageKey]);
|
|
59
|
+
if (total === 0)
|
|
60
|
+
return null;
|
|
61
|
+
/* CSS cascade for the dialog container:
|
|
62
|
+
* 1. <Dialog> applies `theme.dialog.container` automatically — that's
|
|
63
|
+
* the game-wide chrome (background, padding, dotted outline, fonts…).
|
|
64
|
+
* It lands by default, we don't re-apply it here.
|
|
65
|
+
* 2. `containerCss` below adds the extension-flavour defaults (sane
|
|
66
|
+
* width / max-height for a card carousel).
|
|
67
|
+
* 3. `theme.extensionDialog.container` (if any) lands last and wins —
|
|
68
|
+
* games override width, max-height, etc. through the theme rather
|
|
69
|
+
* than props. Emotion's array stacking handles precedence, no flag
|
|
70
|
+
* needed.
|
|
71
|
+
*/
|
|
72
|
+
return (_jsx(RulesDialog, { open: open, close: close, css: [containerCss, theme.extensionDialog?.container], children: _jsxs("div", { css: layoutCss, children: [_jsx("div", { css: contentCss, children: popups[safeIndex] }), _jsx(ExtensionNav, { total: total, currentIndex: safeIndex, onPrevious: safeIndex > 0 ? () => setIndex(i => i - 1) : undefined, onNext: safeIndex < total - 1 ? () => setIndex(i => i + 1) : undefined, onClose: close })] }) }));
|
|
73
|
+
};
|
|
74
|
+
const ExtensionNav = ({ total, currentIndex, onPrevious, onNext, onClose }) => {
|
|
75
|
+
const { t } = useTranslation();
|
|
76
|
+
const theme = useTheme();
|
|
77
|
+
const primary = theme.palette.primary;
|
|
78
|
+
if (total === 1) {
|
|
79
|
+
return (_jsx("div", { css: [barCss(primary), singleSlideBarCss, theme.dialog.navigationCss], children: _jsx("button", { css: btnCss(primary), onClick: onClose, children: _jsx("span", { children: t('Close', { ns: 'common' }) }) }) }));
|
|
80
|
+
}
|
|
81
|
+
const isLast = currentIndex === total - 1;
|
|
82
|
+
return (_jsxs("div", { css: [barCss(primary), theme.dialog.navigationCss], children: [_jsxs("button", { css: btnCss(primary), onClick: onPrevious, disabled: !onPrevious, children: [_jsx(FontAwesomeIcon, { icon: faChevronLeft, css: iconCss }), _jsx("span", { children: t('Previous', { ns: 'common' }) })] }), _jsxs("div", { css: counterCss, children: [_jsx("div", { css: dotsCss, children: Array.from({ length: Math.min(total, 8) }, (_, i) => (_jsx("div", { css: [dotCss(primary), i === Math.min(currentIndex, 7) && activeDotCss(primary)] }, i))) }), _jsxs("span", { children: [currentIndex + 1, " / ", total] })] }), isLast ? (_jsx("button", { css: btnCss(primary), onClick: onClose, children: _jsx("span", { children: t('Close', { ns: 'common' }) }) })) : (_jsxs("button", { css: btnCss(primary), onClick: onNext, disabled: !onNext, children: [_jsx("span", { children: t('Next', { ns: 'common' }) }), _jsx(FontAwesomeIcon, { icon: faChevronRight, css: iconCss })] }))] }));
|
|
83
|
+
};
|
|
84
|
+
const containerCss = css `
|
|
85
|
+
/* Default sizing for the extension carousel — comfortably fits a 4-card
|
|
86
|
+
grid plus prose. Games widen / shrink / switch to width: auto via
|
|
87
|
+
theme.extensionDialog.container, which lands after this in the
|
|
88
|
+
Emotion cascade. */
|
|
89
|
+
width: min(90vw, 70em);
|
|
90
|
+
width: min(90dvw, 70em);
|
|
91
|
+
`;
|
|
92
|
+
const layoutCss = css `
|
|
93
|
+
display: flex;
|
|
94
|
+
flex-direction: column;
|
|
95
|
+
max-height: 90vh;
|
|
96
|
+
max-height: 90dvh;
|
|
97
|
+
`;
|
|
98
|
+
/* Same em base as the framework's help dialogs (helpDialogContentCss) so the popup body
|
|
99
|
+
reads at the same scale as the rest of the rules UI, and the navigation (its own 2.4em)
|
|
100
|
+
lands at the expected size right below. */
|
|
101
|
+
const contentCss = css `
|
|
102
|
+
font-size: 2.4em;
|
|
103
|
+
overflow-y: auto;
|
|
104
|
+
padding: 0.6em 0.7em 0.5em;
|
|
105
|
+
flex: 1;
|
|
106
|
+
min-height: 0;
|
|
107
|
+
`;
|
|
108
|
+
/* Visual recipe copied (intentionally) from BottomBarNavigation so the
|
|
109
|
+
ExtensionNav and the standard help-dialog bottom bar feel like
|
|
110
|
+
siblings. Keep them in sync if you tweak the look on one side. */
|
|
111
|
+
const barCss = (primary) => css `
|
|
112
|
+
display: flex;
|
|
113
|
+
align-items: center;
|
|
114
|
+
justify-content: space-between;
|
|
115
|
+
font-size: 2.4em;
|
|
116
|
+
padding: 0.3em 1em;
|
|
117
|
+
border-top: 1px solid color-mix(in srgb, ${primary} 8%, transparent);
|
|
118
|
+
background: linear-gradient(to top, color-mix(in srgb, ${primary} 4%, transparent), transparent);
|
|
119
|
+
`;
|
|
120
|
+
const singleSlideBarCss = css `
|
|
121
|
+
/* Single-slide variant: just a centered Close button, no Previous/Next
|
|
122
|
+
to surround. justify-content: center collapses the bar around it. */
|
|
123
|
+
justify-content: center;
|
|
124
|
+
`;
|
|
125
|
+
const btnCss = (primary) => css `
|
|
126
|
+
display: flex;
|
|
127
|
+
align-items: center;
|
|
128
|
+
gap: 0.4em;
|
|
129
|
+
padding: 0.4em 0.9em;
|
|
130
|
+
border-radius: 2em;
|
|
131
|
+
font-size: 0.78em;
|
|
132
|
+
font-weight: 600;
|
|
133
|
+
font-family: inherit;
|
|
134
|
+
color: ${primary};
|
|
135
|
+
background: transparent;
|
|
136
|
+
border: 1.5px solid color-mix(in srgb, ${primary} 25%, transparent);
|
|
137
|
+
cursor: pointer;
|
|
138
|
+
transition: all 0.15s;
|
|
139
|
+
|
|
140
|
+
&:hover:not(:disabled) {
|
|
141
|
+
background: color-mix(in srgb, ${primary} 10%, transparent);
|
|
142
|
+
border-color: ${primary};
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
&:active:not(:disabled) {
|
|
146
|
+
background: color-mix(in srgb, ${primary} 18%, transparent);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
&:disabled {
|
|
150
|
+
opacity: 0.25;
|
|
151
|
+
cursor: default;
|
|
152
|
+
}
|
|
153
|
+
`;
|
|
154
|
+
const iconCss = css `
|
|
155
|
+
font-size: 0.9em;
|
|
156
|
+
`;
|
|
157
|
+
const counterCss = css `
|
|
158
|
+
font-size: 0.75em;
|
|
159
|
+
color: inherit;
|
|
160
|
+
opacity: 0.7;
|
|
161
|
+
display: flex;
|
|
162
|
+
align-items: center;
|
|
163
|
+
gap: 0.5em;
|
|
164
|
+
font-weight: 600;
|
|
165
|
+
`;
|
|
166
|
+
const dotsCss = css `
|
|
167
|
+
display: flex;
|
|
168
|
+
gap: 0.3em;
|
|
169
|
+
`;
|
|
170
|
+
const dotCss = (primary) => css `
|
|
171
|
+
width: 0.35em;
|
|
172
|
+
height: 0.35em;
|
|
173
|
+
border-radius: 50%;
|
|
174
|
+
background: color-mix(in srgb, ${primary} 35%, transparent);
|
|
175
|
+
transition: all 0.2s;
|
|
176
|
+
`;
|
|
177
|
+
const activeDotCss = (primary) => css `
|
|
178
|
+
background: ${primary};
|
|
179
|
+
width: 1em;
|
|
180
|
+
border-radius: 0.2em;
|
|
181
|
+
`;
|
|
182
|
+
//# sourceMappingURL=ExtensionInfoDialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExtensionInfoDialog.js","sourceRoot":"","sources":["../../../src/components/dialogs/ExtensionInfoDialog.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/dialogs/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA;AAC7B,cAAc,UAAU,CAAA;AACxB,cAAc,kBAAkB,CAAA;AAChC,cAAc,gBAAgB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/dialogs/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA;AAC7B,cAAc,UAAU,CAAA;AACxB,cAAc,uBAAuB,CAAA;AACrC,cAAc,kBAAkB,CAAA;AAChC,cAAc,gBAAgB,CAAA"}
|
package/dist/css/GameTheme.d.ts
CHANGED
|
@@ -13,6 +13,7 @@ export interface GameTheme {
|
|
|
13
13
|
playerPanel?: PlayerPanelTheme;
|
|
14
14
|
tutorial?: TutorialTheme;
|
|
15
15
|
timeStats?: TimeStatsTheme;
|
|
16
|
+
extensionDialog?: ExtensionDialogTheme;
|
|
16
17
|
}
|
|
17
18
|
export interface DropAreaTheme {
|
|
18
19
|
backgroundColor: string;
|
|
@@ -105,5 +106,8 @@ export interface TimeStatsTheme {
|
|
|
105
106
|
thinkBackground?: string;
|
|
106
107
|
waitBackground?: string;
|
|
107
108
|
}
|
|
109
|
+
export interface ExtensionDialogTheme {
|
|
110
|
+
container?: Interpolation<GameTheme>;
|
|
111
|
+
}
|
|
108
112
|
export declare const defaultPalette: PaletteTheme;
|
|
109
113
|
export declare const defaultTheme: GameTheme;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GameTheme.js","sourceRoot":"","sources":["../../src/css/GameTheme.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAErD,gBAAgB,CAAC,wHAAwH,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"GameTheme.js","sourceRoot":"","sources":["../../src/css/GameTheme.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAErD,gBAAgB,CAAC,wHAAwH,CAAC,CAAA;AA4H1I,MAAM,CAAC,MAAM,cAAc,GAAiB;IAC1C,OAAO,EAAE,SAAS;IAClB,YAAY,EAAE,SAAS;IACvB,aAAa,EAAE,SAAS;IACxB,YAAY,EAAE,SAAS;IACvB,cAAc,EAAE,SAAS;IACzB,OAAO,EAAE,SAAS;IAClB,SAAS,EAAE,SAAS;IACpB,cAAc,EAAE,SAAS;IACzB,eAAe,EAAE,SAAS;IAC1B,MAAM,EAAE,SAAS;IACjB,WAAW,EAAE,SAAS;IACtB,YAAY,EAAE,SAAS;IACvB,QAAQ,EAAE,SAAS;CACpB,CAAA;AAED,MAAM,CAAC,MAAM,YAAY,GAAc;IACrC,IAAI,EAAE;QACJ,UAAU,EAAE,QAAQ;QACpB,UAAU,EAAE;YACV,KAAK,EAAE,iBAAiB;YACxB,OAAO,EAAE,oBAAoB;SAC9B;KACF;IACD,MAAM,EAAE;QACN,eAAe,EAAE,SAAS;QAC1B,KAAK,EAAE,SAAS;KACjB;IACD,QAAQ,EAAE;QACR,eAAe,EAAE,sBAAsB;KACxC;IACD,+DAA+D;IAC/D,iEAAiE;IACjE,kEAAkE;IAClE,6BAA6B;IAC7B,OAAO,EAAE,cAAc;CACxB,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gamepark/react-game",
|
|
3
|
-
"version": "7.7.
|
|
3
|
+
"version": "7.7.26",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "React components & tools to create a Board Game user interface for Game Park",
|
|
6
6
|
"author": "Romain Fromi <romain@game-park.com> (https://game-park.com/)",
|