@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.
@@ -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,4 +1,5 @@
1
1
  export * from './RulesDialog';
2
2
  export * from './Dialog';
3
+ export * from './ExtensionInfoDialog';
3
4
  export * from './FailuresDialog';
4
5
  export * from './ResultDialog';
@@ -1,5 +1,6 @@
1
1
  export * from './RulesDialog';
2
2
  export * from './Dialog';
3
+ export * from './ExtensionInfoDialog';
3
4
  export * from './FailuresDialog';
4
5
  export * from './ResultDialog';
5
6
  //# sourceMappingURL=index.js.map
@@ -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"}
@@ -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;AAuH1I,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"}
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.25",
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/)",