@gamepark/react-game 7.7.25 → 7.7.27
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/ResultDialog/RematchDisplay.js +0 -1
- package/dist/components/dialogs/ResultDialog/RematchDisplay.js.map +1 -1
- package/dist/components/dialogs/ResultDialog/ResultDialog.js +25 -23
- package/dist/components/dialogs/ResultDialog/ResultDialog.js.map +1 -1
- 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/components/material/animations/ItemAnimations.js +75 -17
- package/dist/components/material/animations/ItemAnimations.js.map +1 -1
- package/dist/components/material/animations/Trajectory.d.ts +18 -2
- package/dist/components/material/animations/Trajectory.js +34 -4
- package/dist/components/material/animations/Trajectory.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":"RematchDisplay.js","sourceRoot":"","sources":["../../../../src/components/dialogs/ResultDialog/RematchDisplay.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"RematchDisplay.js","sourceRoot":"","sources":["../../../../src/components/dialogs/ResultDialog/RematchDisplay.tsx"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,6 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "@emotion/reac
|
|
|
2
2
|
import { css, useTheme } from '@emotion/react';
|
|
3
3
|
import { faChessPawn } from '@fortawesome/free-solid-svg-icons/faChessPawn';
|
|
4
4
|
import { faTrophy } from '@fortawesome/free-solid-svg-icons/faTrophy';
|
|
5
|
-
import { faXmark } from '@fortawesome/free-solid-svg-icons/faXmark';
|
|
6
5
|
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
|
7
6
|
import { GameMode, PLATFORM_URI, useGameSelector } from '@gamepark/react-client';
|
|
8
7
|
import { isCompetitive } from '@gamepark/rules-api';
|
|
@@ -15,7 +14,8 @@ import { gameContext } from '../../GameProvider';
|
|
|
15
14
|
import { Medal } from '../../menus';
|
|
16
15
|
import { NavButton } from '../../menus/Menu/NavButton';
|
|
17
16
|
import { RestartTutorialButton } from '../../menus/RestartTutorialButton';
|
|
18
|
-
import {
|
|
17
|
+
import { RulesDialog } from '../RulesDialog';
|
|
18
|
+
import { helpDialogContentCss } from '../RulesDialog/RulesHelpDialogContent';
|
|
19
19
|
import { RematchSection } from './RematchSection';
|
|
20
20
|
import { usePlayerScoring, useScoringHeader } from './useScoringTable';
|
|
21
21
|
const query = new URLSearchParams(window.location.search);
|
|
@@ -32,14 +32,18 @@ export const ResultDialog = ({ openDialog, close, ...props }) => {
|
|
|
32
32
|
const scoringCells = useScoringHeader();
|
|
33
33
|
let row = (gameMode === GameMode.TOURNAMENT ? 3 : gameMode === GameMode.COMPETITIVE ? 2 : 1) + (scoringCells?.length ?? 0);
|
|
34
34
|
const resultText = useResultText();
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
35
|
+
return (
|
|
36
|
+
// RulesDialog wraps Dialog with the standard close button slot (theme.dialog.closeButton)
|
|
37
|
+
// so the result popup shares the same chrome — and the same font-size context — as
|
|
38
|
+
// the rules / extension dialogs. No more font-size: calc(3.2em * var(--gp-scale))
|
|
39
|
+
// override here; the inherited theme.dialog.container handles sizing.
|
|
40
|
+
_jsx(RulesDialog, { close: close, css: [style, theme.result?.container], ...props, children: _jsxs("div", { css: [helpDialogContentCss, scrollableContent, theme.dialog.content], children: [_jsx("h2", { children: context.scoring?.ResultHeader ? _jsx(context.scoring.ResultHeader, {}) : resultText }), _jsxs("div", { css: buttonLine, children: [gameMode === GameMode.TOURNAMENT && tournament ?
|
|
41
|
+
_jsx(NavButton, { url: `${PLATFORM_URI}/${locale}/board-games/${context.game}/tournaments/${tournament.number}`, children: t('result.tournament.link') })
|
|
42
|
+
:
|
|
43
|
+
_jsx(NavButton, { url: `${PLATFORM_URI}/${locale}/board-games/${context.game}`, children: t('Back to Game Park') }), gameMode === GameMode.COMPETITIVE &&
|
|
44
|
+
_jsx(NavButton, { url: `${PLATFORM_URI}/${locale}/board-games/${context.game}/play/competitive?auto=true`, children: t('Play again') }), gameMode === GameMode.COMPETITIVE &&
|
|
45
|
+
_jsx(NavButton, { url: `${PLATFORM_URI}/${locale}/board-games/${context.game}/ranking`, children: t('See overall ranking') })] }), _jsxs("div", { css: [gridCss, row > 1 ? multiRows(rankedPlayers.length, row) : singleRow(rankedPlayers.length)], children: [row > 1 && _jsx("div", { css: stickyHeader }), gameMode === GameMode.TOURNAMENT && _jsx("div", { css: [borderTopCss, left], children: t('Tournament') }), (gameMode === GameMode.TOURNAMENT || gameMode === GameMode.COMPETITIVE) && _jsx("div", { css: [borderTopCss, left], children: t('Ranking') }), scoringCells.map((cell, index) => (_jsx("div", { css: [borderTopCss, left], children: cell }, index))), rankedPlayers.map((player, index) => _jsx(PlayerDisplay, { playerId: player.id, gameMode: gameMode, rank: isCompetitive(rules) && player.rank <= 3 ? player.rank : undefined, border: row > 1 }, index))] }), gameMode === GameMode.TUTORIAL &&
|
|
46
|
+
_jsxs("div", { children: [_jsx("p", { css: css `white-space: break-spaces;`, children: t('tuto.over') }), _jsxs("p", { css: buttonsLine, children: [_jsx(RestartTutorialButton, {}), _jsxs(NavButton, { url: `${PLATFORM_URI}/${locale}/board-games/${context.game}/play`, css: css `margin-left: 1em;`, children: [_jsx(FontAwesomeIcon, { icon: faChessPawn }), t('Play')] })] })] }), gameId !== null && _jsx(RematchSection, { openDialog: openDialog })] }) }));
|
|
43
47
|
};
|
|
44
48
|
const PlayerDisplay = ({ gameMode, playerId, rank, border }) => {
|
|
45
49
|
const playerName = usePlayerName(playerId);
|
|
@@ -55,29 +59,27 @@ const centered = css `
|
|
|
55
59
|
}
|
|
56
60
|
`;
|
|
57
61
|
const style = css `
|
|
58
|
-
font-size: calc(3.2em * var(--gp-scale));
|
|
59
62
|
text-align: center;
|
|
60
63
|
max-height: 90vh;
|
|
61
64
|
max-height: 90dvh;
|
|
62
65
|
display: flex;
|
|
63
66
|
flex-direction: column;
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
67
|
+
/* Match the RulesDialog vertical padding: helpDialogCss in
|
|
68
|
+
RulesHelpDialogContent wraps its content in a 3em-padding box,
|
|
69
|
+
which is what gives every rules popup its consistent top breathing
|
|
70
|
+
room. Mirroring it here keeps the ResultDialog visually aligned
|
|
71
|
+
with the rest of the dialog family. */
|
|
72
|
+
padding: 3em;
|
|
68
73
|
`;
|
|
69
74
|
const scrollableContent = css `
|
|
70
75
|
overflow-y: auto;
|
|
71
76
|
flex: 1;
|
|
72
77
|
min-height: 0;
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
font-size: 1.3em;
|
|
79
|
-
cursor: pointer;
|
|
80
|
-
z-index: 2;
|
|
78
|
+
|
|
79
|
+
> h2 {
|
|
80
|
+
margin: 0 1em 0.5em;
|
|
81
|
+
text-align: center;
|
|
82
|
+
}
|
|
81
83
|
`;
|
|
82
84
|
const stickyHeader = css `
|
|
83
85
|
position: sticky;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ResultDialog.js","sourceRoot":"","sources":["../../../../src/components/dialogs/ResultDialog/ResultDialog.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,+CAA+C,CAAA;AAC3E,OAAO,EAAE,QAAQ,EAAE,MAAM,4CAA4C,CAAA;AACrE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"ResultDialog.js","sourceRoot":"","sources":["../../../../src/components/dialogs/ResultDialog/ResultDialog.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,+CAA+C,CAAA;AAC3E,OAAO,EAAE,QAAQ,EAAE,MAAM,4CAA4C,CAAA;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAA;AAChE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAChF,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAClC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzF,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AACnC,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAA;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAA;AAEzE,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAA;AAC5E,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAOtE,MAAM,KAAK,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;AACzD,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAA;AAC1C,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;AAGhC,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,KAAK,EAAS,EAAE,EAAE;IACrE,MAAM,EAAE,CAAC,EAAE,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAA;IACtC,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAA;IACxB,MAAM,aAAa,GAAG,gBAAgB,EAAE,CAAA;IACxC,MAAM,OAAO,GAAG,UAAU,CAAC,WAAW,CAAC,CAAA;IACvC,MAAM,KAAK,GAAG,QAAQ,EAAG,CAAA;IACzB,MAAM,QAAQ,GAAG,eAAe,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;IAC3D,MAAM,UAAU,GAAG,eAAe,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;IAC/D,MAAM,YAAY,GAAG,gBAAgB,EAAE,CAAA;IACvC,IAAI,GAAG,GAAG,CAAC,QAAQ,KAAK,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,EAAE,MAAM,IAAI,CAAC,CAAC,CAAA;IAE1H,MAAM,UAAU,GAAG,aAAa,EAAE,CAAA;IAClC,OAAO;IACL,0FAA0F;IAC1F,mFAAmF;IACnF,kFAAkF;IAClF,sEAAsE;IACtE,KAAC,WAAW,IAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC,KAAM,KAAK,YACzE,eAAK,GAAG,EAAE,CAAC,oBAAoB,EAAE,iBAAiB,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,aACvE,uBAAK,OAAO,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,KAAC,OAAO,CAAC,OAAO,CAAC,YAAY,KAAE,CAAC,CAAC,CAAC,UAAU,GAAM,EACvF,eAAK,GAAG,EAAE,UAAU,aACjB,QAAQ,KAAK,QAAQ,CAAC,UAAU,IAAI,UAAU,CAAC,CAAC;4BAC/C,KAAC,SAAS,IAAC,GAAG,EAAE,GAAG,YAAY,IAAI,MAAM,gBAAgB,OAAO,CAAC,IAAI,gBAAgB,UAAU,CAAC,MAAM,EAAE,YACrG,CAAC,CAAC,wBAAwB,CAAC,GAClB;4BACZ,CAAC;gCACD,KAAC,SAAS,IAAC,GAAG,EAAE,GAAG,YAAY,IAAI,MAAM,gBAAgB,OAAO,CAAC,IAAI,EAAE,YAAG,CAAC,CAAC,mBAAmB,CAAC,GAAa,EAE9G,QAAQ,KAAK,QAAQ,CAAC,WAAW;4BAChC,KAAC,SAAS,IAAC,GAAG,EAAE,GAAG,YAAY,IAAI,MAAM,gBAAgB,OAAO,CAAC,IAAI,6BAA6B,YAC/F,CAAC,CAAC,YAAY,CAAC,GACN,EAEb,QAAQ,KAAK,QAAQ,CAAC,WAAW;4BAChC,KAAC,SAAS,IAAC,GAAG,EAAE,GAAG,YAAY,IAAI,MAAM,gBAAgB,OAAO,CAAC,IAAI,UAAU,YAC5E,CAAC,CAAC,qBAAqB,CAAC,GACf,IAEV,EACN,eAAK,GAAG,EAAE,CAAC,OAAO,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,aAClG,GAAG,GAAG,CAAC,IAAI,cAAK,GAAG,EAAE,YAAY,GAAG,EACpC,QAAQ,KAAK,QAAQ,CAAC,UAAU,IAAI,cAAK,GAAG,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC,YAAG,CAAC,CAAC,YAAY,CAAC,GAAO,EAC3F,CAAC,QAAQ,KAAK,QAAQ,CAAC,UAAU,IAAI,QAAQ,KAAK,QAAQ,CAAC,WAAW,CAAC,IAAI,cAAK,GAAG,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC,YAAG,CAAC,CAAC,SAAS,CAAC,GAAO,EAC/H,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CACjC,cAAK,GAAG,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC,YAC3B,IAAI,IAD8B,KAAK,CAEpC,CACP,CAAC,EACD,aAAa,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CACnC,KAAC,aAAa,IACC,QAAQ,EAAE,MAAM,CAAC,EAAE,EACnB,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,aAAa,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,EACxE,MAAM,EAAE,GAAG,GAAG,CAAC,IAJV,KAAK,CAKvB,CAAC,IAED,EACL,QAAQ,KAAK,QAAQ,CAAC,QAAQ;oBAC7B,0BACE,YAAG,GAAG,EAAE,GAAG,CAAA,4BAA4B,YAAG,CAAC,CAAC,WAAW,CAAC,GAAK,EAC7D,aAAG,GAAG,EAAE,WAAW,aACjB,KAAC,qBAAqB,KAAE,EACxB,MAAC,SAAS,IAAC,GAAG,EAAE,GAAG,YAAY,IAAI,MAAM,gBAAgB,OAAO,CAAC,IAAI,OAAO,EAAE,GAAG,EAAE,GAAG,CAAA,mBAAmB,aACvG,KAAC,eAAe,IAAC,IAAI,EAAE,WAAW,GAAG,EAAC,CAAC,CAAC,MAAM,CAAC,IACrC,IACV,IACA,EAEP,MAAM,KAAK,IAAI,IAAI,KAAC,cAAc,IAAC,UAAU,EAAE,UAAU,GAAG,IACzD,GACM,CACf,CAAA;AACH,CAAC,CAAA;AAED,MAAM,aAAa,GAAG,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAKxD,EAAE,EAAE;IACH,MAAM,UAAU,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAA;IAC1C,MAAM,gBAAgB,GAAG,eAAe,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,EAAE,gBAAgB,IAAI,SAAS,CAAC,CAAA;IAC9H,MAAM,UAAU,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAA;IAC7C,OAAO,8BACL,eAAK,GAAG,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,aAAa,EAAE,YAAY,CAAC,aACzD,eAAK,GAAG,EAAE,eAAe,aACvB,KAAC,MAAM,IAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,SAAS,GAAG,EAC5C,IAAI,KAAK,SAAS,IAAI,KAAC,KAAK,IAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,GAAG,IACtD,EACN,yBAAO,UAAU,GAAQ,IACrB,EACL,QAAQ,KAAK,QAAQ,CAAC,UAAU;gBAC/B,cAAK,GAAG,EAAE,CAAC,aAAa,EAAE,YAAY,EAAE,QAAQ,CAAC,YAC9C,gBAAgB,KAAK,SAAS,IAAI,8BAAE,KAAC,eAAe,IAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,aAAa,GAAG,EAAA,gCAAQ,gBAAgB,IAAQ,IAAG,GAC1H,EAEP,CAAC,QAAQ,KAAK,QAAQ,CAAC,UAAU,IAAI,QAAQ,KAAK,QAAQ,CAAC,WAAW,CAAC;gBACtE,cAAK,GAAG,EAAE,CAAC,aAAa,EAAE,YAAY,EAAE,QAAQ,CAAC,YAC/C,KAAC,UAAU,IAAC,QAAQ,EAAE,QAAQ,GAAG,GAC7B,EAEP,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAC/B,cAAK,GAAG,EAAE,CAAC,aAAa,EAAE,YAAY,CAAC,YACpC,IAAI,IADuC,KAAK,CAE7C,CACP,CAAC,IACD,CAAA;AACL,CAAC,CAAA;AAED,MAAM,QAAQ,GAAG,GAAG,CAAA;;;;CAInB,CAAA;AAED,MAAM,KAAK,GAAG,GAAG,CAAA;;;;;;;;;;;;CAYhB,CAAA;AAED,MAAM,iBAAiB,GAAG,GAAG,CAAA;;;;;;;;;CAS5B,CAAA;AAED,MAAM,YAAY,GAAG,GAAG,CAAA;;;;;;;CAOvB,CAAA;AAED,MAAM,UAAU,GAAG,GAAG,CAAA;;;CAGrB,CAAA;AAED,MAAM,OAAO,GAAG,GAAG,CAAA;;;;;;;;CAQlB,CAAA;AAED,MAAM,SAAS,GAAG,CAAC,OAAe,EAAE,IAAY,EAAE,EAAE,CAAC,GAAG,CAAA;uCACjB,OAAO;+BACf,IAAI;CAClC,CAAA;AAED,MAAM,SAAS,GAAG,CAAC,OAAe,EAAE,EAAE,CAAC,GAAG,CAAA;kCACR,OAAO;;CAExC,CAAA;AAED,MAAM,eAAe,GAAG,GAAG,CAAA;;;;;CAK1B,CAAA;AAED,MAAM,SAAS,GAAG,GAAG,CAAA;;;;CAIpB,CAAA;AAED,MAAM,QAAQ,GAAG,GAAG,CAAA;;;;;;;CAOnB,CAAA;AAED,MAAM,QAAQ,GAAG,GAAG,CAAA;;CAEnB,CAAA;AAED,MAAM,aAAa,GAAG,GAAG,CAAA;;CAExB,CAAA;AAED,MAAM,YAAY,GAAG,GAAG,CAAA;;CAEvB,CAAA;AAED,MAAM,aAAa,GAAG,GAAG,CAAA;;CAExB,CAAA;AAED,MAAM,IAAI,GAAG,GAAG,CAAA;;CAEf,CAAA;AAED,MAAM,WAAW,GAAG,GAAG,CAAA;;;;CAItB,CAAA"}
|
|
@@ -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"}
|
|
@@ -57,8 +57,21 @@ export class ItemAnimations extends Animations {
|
|
|
57
57
|
* @param context The item context (may include trajectory configuration)
|
|
58
58
|
*/
|
|
59
59
|
getTrajectoryKeyframes(originTransforms, targetTransforms, animation, context) {
|
|
60
|
-
|
|
61
|
-
//
|
|
60
|
+
// Waypoints that only carry elevation (no locator, no coordinates, no
|
|
61
|
+
// offset, no rotation, no easing) don't constrain the X/Y motion — they
|
|
62
|
+
// live on the parent div's elevation arc only. Filter them out here so
|
|
63
|
+
// the child div keeps its native simple keyframes path: a single CSS
|
|
64
|
+
// transition from origin to target with browser-tweened rotateY for
|
|
65
|
+
// free. Mixing in a midway keyframe with only elevation info forces the
|
|
66
|
+
// path through getTrajectoryKeyframes' interpolation routine and turns
|
|
67
|
+
// the smooth tween into a multi-step keyframes sequence (visible as a
|
|
68
|
+
// pause/saccade in browsers that snap between transform formats).
|
|
69
|
+
const waypoints = (context.trajectory?.waypoints ?? []).filter(w => w.locator !== undefined
|
|
70
|
+
|| w.coordinates !== undefined
|
|
71
|
+
|| w.offset !== undefined
|
|
72
|
+
|| w.rotation !== undefined
|
|
73
|
+
|| w.easing !== undefined);
|
|
74
|
+
// If no waypoints constrain motion, use simple keyframes
|
|
62
75
|
if (waypoints.length === 0) {
|
|
63
76
|
return this.getTransformKeyframes(originTransforms.join(' '), targetTransforms.join(' '), animation, context);
|
|
64
77
|
}
|
|
@@ -106,23 +119,31 @@ export class ItemAnimations extends Animations {
|
|
|
106
119
|
transforms.push('translate(-50%, -50%)');
|
|
107
120
|
transforms.push(...locatorTransforms);
|
|
108
121
|
}
|
|
109
|
-
else if (t === 0 && !waypoint) {
|
|
110
|
-
transforms.push(...originTransforms);
|
|
111
|
-
}
|
|
112
|
-
else if (t === 1 && !waypoint) {
|
|
113
|
-
transforms.push(...targetTransforms);
|
|
114
|
-
}
|
|
115
122
|
else {
|
|
116
|
-
// Build interpolated transforms
|
|
123
|
+
// Build interpolated transforms — used for every non-locator keyframe
|
|
124
|
+
// INCLUDING the implicit t=0 and t=1 frames. Using the same transform
|
|
125
|
+
// shape everywhere ("translate(-50%, -50%) translate3d() rotateZ()
|
|
126
|
+
// rotateY()") avoids the CSS matrix-lerp glitch we'd hit if some
|
|
127
|
+
// keyframes were originTransforms verbatim (which may omit rotateY
|
|
128
|
+
// when the card is face-up) and others were the interpolated build:
|
|
129
|
+
// browsers cannot lerp between an N-transform string and a different
|
|
130
|
+
// N+1-transform string without snapping. Keep the format stable.
|
|
117
131
|
transforms.push('translate(-50%, -50%)');
|
|
118
132
|
transforms.push(`translate3d(${x}em, ${y}em, ${z}em)`);
|
|
119
|
-
|
|
120
|
-
const
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
133
|
+
const originRotateZ = extractRotation(originTransforms);
|
|
134
|
+
const targetRotateZ = extractRotation(targetTransforms);
|
|
135
|
+
if (originRotateZ !== undefined || targetRotateZ !== undefined) {
|
|
136
|
+
const rotateZ = interpolateCoordinate(originRotateZ ?? 0, targetRotateZ ?? 0, t);
|
|
137
|
+
if (rotateZ !== 0) {
|
|
138
|
+
transforms.push(`rotateZ(${rotateZ}deg)`);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
const originRotateY = extractRotateY(originTransforms);
|
|
142
|
+
const targetRotateY = extractRotateY(targetTransforms);
|
|
143
|
+
if (originRotateY !== undefined || targetRotateY !== undefined) {
|
|
144
|
+
const rotateY = interpolateCoordinate(originRotateY ?? 0, targetRotateY ?? 0, t);
|
|
145
|
+
if (rotateY !== 0) {
|
|
146
|
+
transforms.push(`rotateY(${rotateY}deg)`);
|
|
126
147
|
}
|
|
127
148
|
}
|
|
128
149
|
}
|
|
@@ -162,8 +183,22 @@ export class ItemAnimations extends Animations {
|
|
|
162
183
|
if (elevationConfig !== false) {
|
|
163
184
|
const resolvedElevation = elevationConfig ?? defaultElevation;
|
|
164
185
|
const elevationArc = getElevationKeyframes(resolvedElevation);
|
|
186
|
+
// `infinite` is the legacy default — keeps two same-duration animations
|
|
187
|
+
// chained back to back from sharing a frozen frame (cf. Romain's
|
|
188
|
+
// 2026-03-16 fix). It's harmless for the classic arc since its 0% and
|
|
189
|
+
// 100% keyframes are identical, so cycle 2 begins right where cycle 1
|
|
190
|
+
// ended (translateZ(0)) — no visible discontinuity.
|
|
191
|
+
//
|
|
192
|
+
// When `landAt` is set, the arc holds 0 from landAt to 100% but cycle 2
|
|
193
|
+
// restarts the rise to peak — visible as a rebound at the very tail of
|
|
194
|
+
// the trajectory if the component lingers past `duration`. Switching to
|
|
195
|
+
// `forwards` for those cases freezes the final 0 keyframe and removes
|
|
196
|
+
// the rebound. The trade-off (potential chained-animation glitch) is
|
|
197
|
+
// worth it because callers opt into `landAt` precisely to control how
|
|
198
|
+
// the card lands — they don't want the lift to come back.
|
|
199
|
+
const fillMode = resolvedElevation.landAt === undefined ? 'infinite' : 'forwards';
|
|
165
200
|
return css `
|
|
166
|
-
animation: ${elevationArc} ${duration}s linear
|
|
201
|
+
animation: ${elevationArc} ${duration}s linear ${fillMode};
|
|
167
202
|
> * {
|
|
168
203
|
animation: ${animationKeyframes} ${duration}s ${easing} forwards;
|
|
169
204
|
}
|
|
@@ -254,4 +289,27 @@ function extractRotation(transforms) {
|
|
|
254
289
|
}
|
|
255
290
|
return undefined;
|
|
256
291
|
}
|
|
292
|
+
/**
|
|
293
|
+
* Parse a transform string array and extract the rotateY angle in degrees.
|
|
294
|
+
* Mirrors {@link extractRotation} for the face-flip axis — used so that
|
|
295
|
+
* intermediate waypoints in a trajectory preserve a card's face-up /
|
|
296
|
+
* face-down state via linear interpolation instead of dropping the
|
|
297
|
+
* rotateY transform entirely (which would snap the card back to face-up
|
|
298
|
+
* at every waypoint).
|
|
299
|
+
*/
|
|
300
|
+
function extractRotateY(transforms) {
|
|
301
|
+
for (const transform of transforms) {
|
|
302
|
+
const rotateYMatch = transform.match(/rotateY\(\s*([-\d.]+)(deg|rad|turn)?\s*\)/);
|
|
303
|
+
if (rotateYMatch) {
|
|
304
|
+
const value = parseFloat(rotateYMatch[1]);
|
|
305
|
+
const unit = rotateYMatch[2] || 'deg';
|
|
306
|
+
if (unit === 'rad')
|
|
307
|
+
return value * (180 / Math.PI);
|
|
308
|
+
if (unit === 'turn')
|
|
309
|
+
return value * 360;
|
|
310
|
+
return value;
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
return undefined;
|
|
314
|
+
}
|
|
257
315
|
//# sourceMappingURL=ItemAnimations.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ItemAnimations.js","sourceRoot":"","sources":["../../../../src/components/material/animations/ItemAnimations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAiB,SAAS,EAAS,MAAM,gBAAgB,CAAA;AACrE,OAAO,EAAa,UAAU,EAAE,MAAM,wBAAwB,CAAA;AAE9D,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AACpC,OAAO,EAAE,kBAAkB,EAAgC,MAAM,mBAAmB,CAAA;AAEpF,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACxE,OAAO,EAAE,gBAAgB,EAAmB,kBAAkB,EAAE,qBAAqB,EAAE,6BAA6B,EAAE,qBAAqB,EAAwB,MAAM,cAAc,CAAA;AACvL,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAEpD;;;;GAIG;AACH,8DAA8D;AAC9D,MAAM,iBAAiB,GAAG,IAAI,OAAO,EAAe,CAAA;AAQpD,MAAM,OAAO,cACX,SAAQ,UAAuE;IAE/E,gBAAgB,CAAC,QAAoC,EAAE,UAAkD,EAAE,WAA2B;QACpI,OAAM;IACR,CAAC;IAED,kBAAkB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAA+C;QAC3G,OAAO,EAAE,KAAK,EAAE,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAiC,EAAE,QAAQ,EAAE,QAAS,EAAE,QAAQ,EAAE,QAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAA;IACrJ,CAAC;IAED,cAAc,CAAC,OAAoD,EAAE,IAA4C;QAC/G,OAAO,EAAE,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,EAAE,CAAA;IACzD,CAAC;IAED;;OAEG;IACO,qBAAqB,CAAC,MAAc,EAAE,WAAmB,EAAE,UAAwC,EAAE,QAAoC;QACjJ,OAAO,SAAS,CAAA;;qBAEC,MAAM;;;qBAGN,WAAW;;KAE3B,CAAA;IACH,CAAC;IAED;;;;OAIG;IACO,yBAAyB,CAAC,WAAmB,EAAE,UAAwC,EAAE,QAAoC;QACrI,OAAO,SAAS,CAAA;;qBAEC,WAAW;;KAE3B,CAAA;IACH,CAAC;IAED;;;;;;;;OAQG;IACO,sBAAsB,CAC9B,gBAA0B,EAC1B,gBAA0B,EAC1B,SAAuC,EACvC,OAAiD;QAEjD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,EAAE,SAAS,IAAI,EAAE,CAAA;
|
|
1
|
+
{"version":3,"file":"ItemAnimations.js","sourceRoot":"","sources":["../../../../src/components/material/animations/ItemAnimations.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,7 +10,7 @@ export interface ElevationConfig {
|
|
|
10
10
|
* Maximum height of the arc in em units.
|
|
11
11
|
* @default 10
|
|
12
12
|
*/
|
|
13
|
-
height
|
|
13
|
+
height?: number;
|
|
14
14
|
/**
|
|
15
15
|
* Position of the peak in the animation (0-1).
|
|
16
16
|
* @default 0.5
|
|
@@ -23,6 +23,14 @@ export interface ElevationConfig {
|
|
|
23
23
|
* - 'ease': uses CSS ease timing for smoother feel
|
|
24
24
|
*/
|
|
25
25
|
curve?: 'parabolic' | 'linear' | 'ease';
|
|
26
|
+
/**
|
|
27
|
+
* Position at which the arc returns to 0 (0-1). After this point the
|
|
28
|
+
* elevation stays at 0 for the rest of the animation — useful when the
|
|
29
|
+
* card needs to slide flat for its final approach (e.g. landing under a
|
|
30
|
+
* deck stack instead of dropping from above).
|
|
31
|
+
* @default 1
|
|
32
|
+
*/
|
|
33
|
+
landAt?: number;
|
|
26
34
|
}
|
|
27
35
|
/**
|
|
28
36
|
* A waypoint defines an intermediate position during an animation.
|
|
@@ -124,7 +132,15 @@ export declare function calculateElevation(t: number, config: ElevationConfig |
|
|
|
124
132
|
export declare function extractTranslation(transforms: string[]): Coordinates;
|
|
125
133
|
/**
|
|
126
134
|
* Generate simple elevation keyframes for the parent div.
|
|
127
|
-
*
|
|
135
|
+
*
|
|
136
|
+
* Default behaviour (when `landAt` is omitted): a 3-keyframe arc — `from, to`
|
|
137
|
+
* at translateZ(0) with a single `peak%` at `translateZ(height em)`. This is
|
|
138
|
+
* the legacy shape; not touching it keeps every existing animation pixel-
|
|
139
|
+
* perfect identical.
|
|
140
|
+
*
|
|
141
|
+
* When `landAt` is provided (must be in (0, 1)): a 4-keyframe arc — rises to
|
|
142
|
+
* peak, descends back to 0 at `landAt`, then holds 0 until the end. Lets the
|
|
143
|
+
* card slide flat for its final approach (e.g. landing under a deck stack).
|
|
128
144
|
*/
|
|
129
145
|
export declare function getElevationKeyframes(config: ElevationConfig): ReturnType<typeof keyframes>;
|
|
130
146
|
/**
|
|
@@ -16,7 +16,7 @@ export const defaultElevation = {
|
|
|
16
16
|
export function calculateElevation(t, config) {
|
|
17
17
|
if (config === false)
|
|
18
18
|
return 0;
|
|
19
|
-
const { height, peak = 0.5, curve = 'parabolic' } = config ?? defaultElevation;
|
|
19
|
+
const { height = 10, peak = 0.5, curve = 'parabolic' } = config ?? defaultElevation;
|
|
20
20
|
if (curve === 'linear') {
|
|
21
21
|
// Triangular arc
|
|
22
22
|
if (t <= peak) {
|
|
@@ -70,12 +70,42 @@ export function extractTranslation(transforms) {
|
|
|
70
70
|
}
|
|
71
71
|
/**
|
|
72
72
|
* Generate simple elevation keyframes for the parent div.
|
|
73
|
-
*
|
|
73
|
+
*
|
|
74
|
+
* Default behaviour (when `landAt` is omitted): a 3-keyframe arc — `from, to`
|
|
75
|
+
* at translateZ(0) with a single `peak%` at `translateZ(height em)`. This is
|
|
76
|
+
* the legacy shape; not touching it keeps every existing animation pixel-
|
|
77
|
+
* perfect identical.
|
|
78
|
+
*
|
|
79
|
+
* When `landAt` is provided (must be in (0, 1)): a 4-keyframe arc — rises to
|
|
80
|
+
* peak, descends back to 0 at `landAt`, then holds 0 until the end. Lets the
|
|
81
|
+
* card slide flat for its final approach (e.g. landing under a deck stack).
|
|
74
82
|
*/
|
|
75
83
|
export function getElevationKeyframes(config) {
|
|
76
|
-
const { height
|
|
84
|
+
const { height = 10, landAt } = config;
|
|
85
|
+
if (landAt === undefined) {
|
|
86
|
+
const peak = config.peak ?? 0.5;
|
|
87
|
+
const peakPercent = Math.round(peak * 100);
|
|
88
|
+
const frames = `from, to { transform: translateZ(0); } ${peakPercent}% { transform: translateZ(${height}em); }`;
|
|
89
|
+
return keyframes `${frames}`;
|
|
90
|
+
}
|
|
91
|
+
// landAt mode: peak must sit strictly between 0 and landAt so the arc has
|
|
92
|
+
// room to rise AND descend before the flat-landing plateau. When the caller
|
|
93
|
+
// doesn't supply a peak we centre it inside [0, landAt]; if they pass a
|
|
94
|
+
// peak >= landAt (legacy default 0.5 with landAt = 0.4 would land here),
|
|
95
|
+
// we recentre too — otherwise the keyframe percentages collide and the
|
|
96
|
+
// arc culminates AFTER landAt, defeating the flat plateau.
|
|
97
|
+
const peak = config.peak !== undefined && config.peak < landAt ? config.peak : landAt / 2;
|
|
77
98
|
const peakPercent = Math.round(peak * 100);
|
|
78
|
-
const
|
|
99
|
+
const landPercent = Math.round(landAt * 100);
|
|
100
|
+
// Spell out the 100% keyframe explicitly. Combining `${landPercent}%, to`
|
|
101
|
+
// in a single selector ought to apply translateZ(0) at both points, but
|
|
102
|
+
// some CSS parsers in the @emotion stack treat the comma-joined selector
|
|
103
|
+
// as overriding only the first point (landPercent) and leave 100% to be
|
|
104
|
+
// interpolated back to the peak via the looping `infinite` we run the
|
|
105
|
+
// arc on — visible as a tiny rebound at the very end of the trajectory.
|
|
106
|
+
// Two separate keyframes at landPercent% and 100% pin both points and
|
|
107
|
+
// avoid the rebound.
|
|
108
|
+
const frames = `from { transform: translateZ(0); } ${peakPercent}% { transform: translateZ(${height}em); } ${landPercent}% { transform: translateZ(0); } to { transform: translateZ(0); }`;
|
|
79
109
|
return keyframes `${frames}`;
|
|
80
110
|
}
|
|
81
111
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Trajectory.js","sourceRoot":"","sources":["../../../../src/components/material/animations/Trajectory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"Trajectory.js","sourceRoot":"","sources":["../../../../src/components/material/animations/Trajectory.ts"],"names":[],"mappings":"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"}
|
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.27",
|
|
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/)",
|