@gamepark/react-game 7.5.12 → 7.5.13
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/GameProvider/GameProvider.js +10 -2
- package/dist/components/GameProvider/GameProvider.js.map +1 -1
- package/dist/components/PlayerPanel/StyledPlayerPanel.js.map +1 -1
- package/dist/components/material/DraggableMaterial.js +3 -4
- package/dist/components/material/DraggableMaterial.js.map +1 -1
- package/dist/components/material/GameTable/DevTools/DevToolEntry.d.ts +20 -0
- package/dist/components/material/GameTable/DevTools/DevToolEntry.js +53 -0
- package/dist/components/material/GameTable/DevTools/DevToolEntry.js.map +1 -0
- package/dist/components/material/GameTable/DevTools/DevToolsHub.d.ts +12 -0
- package/dist/components/material/GameTable/DevTools/DevToolsHub.js +200 -0
- package/dist/components/material/GameTable/DevTools/DevToolsHub.js.map +1 -0
- package/dist/components/material/GameTable/DevTools/ExportPanel.d.ts +7 -0
- package/dist/components/material/GameTable/DevTools/ExportPanel.js +80 -0
- package/dist/components/material/GameTable/DevTools/ExportPanel.js.map +1 -0
- package/dist/components/material/GameTable/DevTools/GamePanel.d.ts +9 -0
- package/dist/components/material/GameTable/DevTools/GamePanel.js +183 -0
- package/dist/components/material/GameTable/DevTools/GamePanel.js.map +1 -0
- package/dist/components/material/GameTable/DevTools/SaveLoadPanel.d.ts +7 -0
- package/dist/components/material/GameTable/DevTools/SaveLoadPanel.js +334 -0
- package/dist/components/material/GameTable/DevTools/SaveLoadPanel.js.map +1 -0
- package/dist/components/material/GameTable/DevTools/index.d.ts +3 -0
- package/dist/components/material/GameTable/DevTools/index.js +3 -0
- package/dist/components/material/GameTable/DevTools/index.js.map +1 -0
- package/dist/components/material/GameTable/index.d.ts +1 -1
- package/dist/components/material/GameTable/index.js +1 -1
- package/dist/components/material/GameTable/index.js.map +1 -1
- package/dist/components/material/animations/AnimationBuilder.d.ts +2 -2
- package/dist/components/material/animations/AnimationBuilder.js +1 -1
- package/dist/components/material/animations/AnimationBuilder.js.map +1 -1
- package/dist/components/tutorial/MaterialTutorial.d.ts +1 -1
- package/dist/hooks/useLegalMoves.d.ts +1 -6
- package/dist/hooks/useLegalMoves.js +2 -7
- package/dist/hooks/useLegalMoves.js.map +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "@emotion/react/jsx-runtime";
|
|
2
|
+
/** @jsxImportSource @emotion/react */
|
|
3
|
+
import { css, keyframes } from '@emotion/react';
|
|
4
|
+
import { useState } from 'react';
|
|
5
|
+
import { usePlayerId, usePlayerIds } from '../../../../hooks/usePlayerId';
|
|
6
|
+
const GP_PRIMARY = '#28B8CE';
|
|
7
|
+
const toolReveal = keyframes `
|
|
8
|
+
from { opacity: 0; transform: translateX(-6px); }
|
|
9
|
+
to { opacity: 1; transform: translateX(0); }
|
|
10
|
+
`;
|
|
11
|
+
export const GamePanel = ({ exec, g, gameOptions }) => {
|
|
12
|
+
const [newGamePlayers, setNewGamePlayers] = useState(2);
|
|
13
|
+
const [options, setOptions] = useState({});
|
|
14
|
+
const [undoCount, setUndoCount] = useState(1);
|
|
15
|
+
const [botActive, setBotActive] = useState(false);
|
|
16
|
+
const currentPlayer = usePlayerId();
|
|
17
|
+
const players = usePlayerIds();
|
|
18
|
+
return (_jsxs(_Fragment, { children: [_jsxs("div", { css: toolBtnCss, children: [_jsx("span", { css: toolIconCss, children: '\u21BB' }), _jsx("span", { css: toolLabelCss, children: "New Game" }), _jsx("span", { css: toolDescCss, children: "Reset with N players" }), _jsxs("div", { css: inlineRowCss, onClick: e => e.stopPropagation(), children: [_jsx("button", { css: stepBtnCss, onClick: () => setNewGamePlayers(c => Math.max(1, c - 1)), children: "-" }), _jsx("input", { type: "number", min: 1, max: 10, value: newGamePlayers, onChange: e => setNewGamePlayers(Math.max(1, parseInt(e.target.value) || 2)), css: numberInputCss }), _jsx("button", { css: stepBtnCss, onClick: () => setNewGamePlayers(c => Math.min(10, c + 1)), children: "+" }), _jsx("button", { css: goBtnCss, onClick: () => exec(() => {
|
|
19
|
+
const hasOptions = gameOptions?.length && Object.values(options).some(Boolean);
|
|
20
|
+
g.new(hasOptions ? { players: newGamePlayers, ...options } : newGamePlayers);
|
|
21
|
+
}, `New game ${newGamePlayers}p`), children: "Go" })] }), gameOptions?.map(opt => (_jsxs("label", { css: toggleRowCss, onClick: e => e.stopPropagation(), children: [_jsx("input", { type: "checkbox", checked: options[opt.key] ?? false, onChange: e => setOptions(prev => ({ ...prev, [opt.key]: e.target.checked })), css: checkboxCss }), _jsx("span", { css: toggleLabelCss, children: opt.label })] }, opt.key)))] }), _jsxs("div", { css: toolBtnCss, children: [_jsx("span", { css: toolIconCss, children: '\u238C' }), _jsx("span", { css: toolLabelCss, children: "Undo" }), _jsx("span", { css: toolDescCss, children: "Revert N moves" }), _jsxs("div", { css: inlineRowCss, onClick: e => e.stopPropagation(), children: [_jsx("button", { css: stepBtnCss, onClick: () => setUndoCount(c => Math.max(1, c - 1)), children: "-" }), _jsx("input", { type: "number", min: 1, max: 999, value: undoCount, onChange: e => setUndoCount(Math.max(1, parseInt(e.target.value) || 1)), css: numberInputCss }), _jsx("button", { css: stepBtnCss, onClick: () => setUndoCount(c => c + 1), children: "+" }), _jsx("button", { css: goBtnCss, onClick: () => exec(() => g.undo(undoCount), `Undo ${undoCount} move${undoCount > 1 ? 's' : ''}`), children: "Go" })] })] }), _jsxs("div", { css: toolBtnCss, children: [_jsx("span", { css: toolIconCss, children: '\u2194' }), _jsx("span", { css: toolLabelCss, children: "Switch Player" }), _jsx("span", { css: toolDescCss, children: "View as another player" }), _jsxs("div", { css: inlineRowCss, onClick: e => e.stopPropagation(), children: [players.map(pid => (_jsxs("button", { css: [playerBtnCss, pid === currentPlayer && playerBtnActiveCss], onClick: () => exec(() => g.changePlayer(pid), `Switched to P${pid}`), children: ["P", String(pid)] }, String(pid)))), _jsx("button", { css: [playerBtnCss, currentPlayer === undefined && playerBtnActiveCss], onClick: () => exec(() => g.changePlayer(), 'Spectator mode'), children: "Spect" })] })] }), _jsxs("button", { css: [toolBtnCss, botActive && toolBtnActiveCss], onClick: () => {
|
|
22
|
+
const next = !botActive;
|
|
23
|
+
exec(() => g.bot(next), next ? 'Bots enabled' : 'Bots disabled');
|
|
24
|
+
setBotActive(next);
|
|
25
|
+
}, children: [_jsx("span", { css: toolIconCss, children: '\u2699' }), _jsx("span", { css: toolLabelCss, children: botActive ? 'Disable Bots' : 'Enable Bots' }), _jsx("span", { css: toolDescCss, children: botActive ? 'Stop auto-play' : 'Auto-play all moves' }), botActive && _jsx("span", { css: activeIndicatorCss })] }), _jsxs("button", { css: toolBtnCss, onClick: () => exec(() => g.tutorial(), 'Tutorial started'), children: [_jsx("span", { css: toolIconCss, children: "?" }), _jsx("span", { css: toolLabelCss, children: "Tutorial" }), _jsx("span", { css: toolDescCss, children: "Start tutorial mode" })] })] }));
|
|
26
|
+
};
|
|
27
|
+
// ── Styles ──
|
|
28
|
+
const toolBtnCss = css `
|
|
29
|
+
position: relative;
|
|
30
|
+
display: grid;
|
|
31
|
+
grid-template-columns: 28px 1fr;
|
|
32
|
+
grid-template-rows: auto auto;
|
|
33
|
+
align-items: center;
|
|
34
|
+
gap: 0 10px;
|
|
35
|
+
padding: 10px 12px;
|
|
36
|
+
border: none;
|
|
37
|
+
border-radius: 8px;
|
|
38
|
+
background: transparent;
|
|
39
|
+
cursor: pointer;
|
|
40
|
+
text-align: left;
|
|
41
|
+
transition: background 0.15s;
|
|
42
|
+
animation: ${toolReveal} 0.25s ease-out backwards;
|
|
43
|
+
font-family: inherit;
|
|
44
|
+
&:hover { background: rgba(40, 184, 206, 0.08); }
|
|
45
|
+
&:active { background: rgba(40, 184, 206, 0.14); }
|
|
46
|
+
`;
|
|
47
|
+
const toolBtnActiveCss = css `
|
|
48
|
+
background: rgba(40, 184, 206, 0.1);
|
|
49
|
+
&::after {
|
|
50
|
+
content: '';
|
|
51
|
+
position: absolute;
|
|
52
|
+
left: 0; top: 8px; bottom: 8px;
|
|
53
|
+
width: 3px;
|
|
54
|
+
border-radius: 0 3px 3px 0;
|
|
55
|
+
background: ${GP_PRIMARY};
|
|
56
|
+
}
|
|
57
|
+
`;
|
|
58
|
+
const toolIconCss = css `
|
|
59
|
+
grid-row: 1 / -1;
|
|
60
|
+
font-size: 15px;
|
|
61
|
+
color: ${GP_PRIMARY};
|
|
62
|
+
display: flex;
|
|
63
|
+
align-items: center;
|
|
64
|
+
justify-content: center;
|
|
65
|
+
width: 28px; height: 28px;
|
|
66
|
+
border-radius: 6px;
|
|
67
|
+
background: rgba(40, 184, 206, 0.08);
|
|
68
|
+
`;
|
|
69
|
+
const toolLabelCss = css `
|
|
70
|
+
font-size: 14px;
|
|
71
|
+
font-weight: 700;
|
|
72
|
+
color: #e0f0f4;
|
|
73
|
+
line-height: 1.2;
|
|
74
|
+
`;
|
|
75
|
+
const toolDescCss = css `
|
|
76
|
+
font-size: 12px;
|
|
77
|
+
color: #5a8a98;
|
|
78
|
+
line-height: 1.2;
|
|
79
|
+
`;
|
|
80
|
+
const activeIndicatorCss = css `
|
|
81
|
+
position: absolute;
|
|
82
|
+
top: 10px; right: 12px;
|
|
83
|
+
width: 7px; height: 7px;
|
|
84
|
+
border-radius: 50%;
|
|
85
|
+
background: ${GP_PRIMARY};
|
|
86
|
+
box-shadow: 0 0 6px rgba(40, 184, 206, 0.5);
|
|
87
|
+
`;
|
|
88
|
+
const inlineRowCss = css `
|
|
89
|
+
grid-column: 1 / -1;
|
|
90
|
+
display: flex;
|
|
91
|
+
align-items: center;
|
|
92
|
+
gap: 4px;
|
|
93
|
+
margin-top: 6px;
|
|
94
|
+
`;
|
|
95
|
+
const stepBtnCss = css `
|
|
96
|
+
width: 26px; height: 26px;
|
|
97
|
+
border-radius: 5px;
|
|
98
|
+
border: 1px solid rgba(40, 184, 206, 0.25);
|
|
99
|
+
background: rgba(40, 184, 206, 0.06);
|
|
100
|
+
color: ${GP_PRIMARY};
|
|
101
|
+
font-size: 14px; font-weight: 700;
|
|
102
|
+
cursor: pointer;
|
|
103
|
+
display: flex; align-items: center; justify-content: center;
|
|
104
|
+
font-family: inherit;
|
|
105
|
+
transition: all 0.15s;
|
|
106
|
+
&:hover { background: rgba(40, 184, 206, 0.14); border-color: rgba(40, 184, 206, 0.4); }
|
|
107
|
+
`;
|
|
108
|
+
const numberInputCss = css `
|
|
109
|
+
width: 48px; height: 26px;
|
|
110
|
+
border-radius: 5px;
|
|
111
|
+
border: 1px solid rgba(40, 184, 206, 0.25);
|
|
112
|
+
background: rgba(0, 0, 0, 0.3);
|
|
113
|
+
color: #e0f0f4;
|
|
114
|
+
font-size: 13px; font-weight: 700;
|
|
115
|
+
text-align: center;
|
|
116
|
+
font-family: inherit;
|
|
117
|
+
font-variant-numeric: tabular-nums;
|
|
118
|
+
&:focus { outline: none; border-color: ${GP_PRIMARY}; box-shadow: 0 0 0 2px rgba(40, 184, 206, 0.15); }
|
|
119
|
+
&::-webkit-inner-spin-button, &::-webkit-outer-spin-button { -webkit-appearance: none; margin: 0; }
|
|
120
|
+
`;
|
|
121
|
+
const goBtnCss = css `
|
|
122
|
+
height: 26px;
|
|
123
|
+
padding: 0 12px;
|
|
124
|
+
border-radius: 5px;
|
|
125
|
+
border: 1px solid rgba(40, 184, 206, 0.35);
|
|
126
|
+
background: rgba(40, 184, 206, 0.15);
|
|
127
|
+
color: ${GP_PRIMARY};
|
|
128
|
+
font-size: 12px; font-weight: 800;
|
|
129
|
+
text-transform: uppercase;
|
|
130
|
+
letter-spacing: 0.05em;
|
|
131
|
+
cursor: pointer;
|
|
132
|
+
margin-left: auto;
|
|
133
|
+
font-family: inherit;
|
|
134
|
+
transition: all 0.15s;
|
|
135
|
+
flex-shrink: 0;
|
|
136
|
+
&:hover { background: rgba(40, 184, 206, 0.25); border-color: rgba(40, 184, 206, 0.5); }
|
|
137
|
+
`;
|
|
138
|
+
const playerBtnCss = css `
|
|
139
|
+
height: 26px;
|
|
140
|
+
padding: 0 10px;
|
|
141
|
+
border-radius: 5px;
|
|
142
|
+
border: 1px solid rgba(40, 184, 206, 0.25);
|
|
143
|
+
background: rgba(40, 184, 206, 0.06);
|
|
144
|
+
color: #5a8a98;
|
|
145
|
+
font-size: 12px; font-weight: 700;
|
|
146
|
+
cursor: pointer;
|
|
147
|
+
font-family: inherit;
|
|
148
|
+
transition: all 0.15s;
|
|
149
|
+
&:hover { background: rgba(40, 184, 206, 0.14); border-color: rgba(40, 184, 206, 0.4); color: #e0f0f4; }
|
|
150
|
+
`;
|
|
151
|
+
const playerBtnActiveCss = css `
|
|
152
|
+
background: rgba(40, 184, 206, 0.2);
|
|
153
|
+
border-color: ${GP_PRIMARY};
|
|
154
|
+
color: ${GP_PRIMARY};
|
|
155
|
+
`;
|
|
156
|
+
const toggleRowCss = css `
|
|
157
|
+
grid-column: 1 / -1;
|
|
158
|
+
display: flex; align-items: center; gap: 8px;
|
|
159
|
+
margin-top: 4px; padding: 4px 0;
|
|
160
|
+
cursor: pointer;
|
|
161
|
+
`;
|
|
162
|
+
const checkboxCss = css `
|
|
163
|
+
appearance: none;
|
|
164
|
+
width: 16px; height: 16px;
|
|
165
|
+
border-radius: 4px;
|
|
166
|
+
border: 1px solid rgba(40, 184, 206, 0.35);
|
|
167
|
+
background: rgba(0, 0, 0, 0.3);
|
|
168
|
+
cursor: pointer; flex-shrink: 0;
|
|
169
|
+
position: relative;
|
|
170
|
+
transition: all 0.15s;
|
|
171
|
+
&:checked { background: rgba(40, 184, 206, 0.2); border-color: ${GP_PRIMARY}; }
|
|
172
|
+
&:checked::after {
|
|
173
|
+
content: '\u2713';
|
|
174
|
+
position: absolute; top: 50%; left: 50%;
|
|
175
|
+
transform: translate(-50%, -50%);
|
|
176
|
+
font-size: 11px; color: ${GP_PRIMARY}; font-weight: 700;
|
|
177
|
+
}
|
|
178
|
+
&:hover { border-color: rgba(40, 184, 206, 0.5); }
|
|
179
|
+
`;
|
|
180
|
+
const toggleLabelCss = css `
|
|
181
|
+
font-size: 12px; font-weight: 600; color: #5a8a98;
|
|
182
|
+
`;
|
|
183
|
+
//# sourceMappingURL=GamePanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GamePanel.js","sourceRoot":"","sources":["../../../../../src/components/material/GameTable/DevTools/GamePanel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,334 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "@emotion/react/jsx-runtime";
|
|
2
|
+
/** @jsxImportSource @emotion/react */
|
|
3
|
+
import { css, keyframes } from '@emotion/react';
|
|
4
|
+
import { useCallback, useRef, useState } from 'react';
|
|
5
|
+
const GP_PRIMARY = '#28B8CE';
|
|
6
|
+
const GP_SURFACE = '#0a1929';
|
|
7
|
+
const SAVE_PREFIX = ':save:';
|
|
8
|
+
const getSaveKeys = (gameName) => {
|
|
9
|
+
const prefix = gameName + SAVE_PREFIX;
|
|
10
|
+
const keys = [];
|
|
11
|
+
for (let i = 0; i < localStorage.length; i++) {
|
|
12
|
+
const key = localStorage.key(i);
|
|
13
|
+
if (key?.startsWith(prefix))
|
|
14
|
+
keys.push(key);
|
|
15
|
+
}
|
|
16
|
+
return keys.sort();
|
|
17
|
+
};
|
|
18
|
+
const getSaveLabel = (key, gameName) => {
|
|
19
|
+
return key.slice((gameName + SAVE_PREFIX).length);
|
|
20
|
+
};
|
|
21
|
+
export const SaveLoadPanel = ({ gameName, doFlash }) => {
|
|
22
|
+
const [saveLabel, setSaveLabel] = useState('');
|
|
23
|
+
const [saveRefresh, setSaveRefresh] = useState(0);
|
|
24
|
+
const [importText, setImportText] = useState('');
|
|
25
|
+
const [pasteError, setPasteError] = useState(null);
|
|
26
|
+
const [showPasteModal, setShowPasteModal] = useState(false);
|
|
27
|
+
const fileInputRef = useRef(null);
|
|
28
|
+
const saveKeys = getSaveKeys(gameName);
|
|
29
|
+
void saveRefresh;
|
|
30
|
+
const handleSave = useCallback(() => {
|
|
31
|
+
const raw = localStorage.getItem(gameName);
|
|
32
|
+
if (!raw) {
|
|
33
|
+
doFlash('No game state in localStorage');
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
const label = saveLabel.trim() || new Date().toLocaleTimeString();
|
|
37
|
+
const key = gameName + SAVE_PREFIX + label;
|
|
38
|
+
localStorage.setItem(key, raw);
|
|
39
|
+
setSaveLabel('');
|
|
40
|
+
setSaveRefresh(n => n + 1);
|
|
41
|
+
doFlash(`Saved: ${label}`);
|
|
42
|
+
}, [saveLabel, gameName, doFlash]);
|
|
43
|
+
const handleLoad = useCallback((key) => {
|
|
44
|
+
const raw = localStorage.getItem(key);
|
|
45
|
+
if (!raw) {
|
|
46
|
+
doFlash('Save not found');
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
try {
|
|
50
|
+
JSON.parse(raw);
|
|
51
|
+
localStorage.setItem(gameName, raw);
|
|
52
|
+
doFlash(`Loaded: ${getSaveLabel(key, gameName)}`);
|
|
53
|
+
window.location.reload();
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
doFlash('Invalid save data');
|
|
57
|
+
}
|
|
58
|
+
}, [gameName, doFlash]);
|
|
59
|
+
const handleDownloadSave = useCallback((key) => {
|
|
60
|
+
const raw = localStorage.getItem(key);
|
|
61
|
+
if (!raw) {
|
|
62
|
+
doFlash('Save not found');
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
const label = getSaveLabel(key, gameName);
|
|
66
|
+
const blob = new Blob([raw], { type: 'application/json' });
|
|
67
|
+
const url = URL.createObjectURL(blob);
|
|
68
|
+
const a = document.createElement('a');
|
|
69
|
+
a.href = url;
|
|
70
|
+
a.download = `${gameName}-${label.replace(/[^a-zA-Z0-9_-]/g, '_')}.json`;
|
|
71
|
+
a.click();
|
|
72
|
+
URL.revokeObjectURL(url);
|
|
73
|
+
doFlash(`Downloaded: ${label}`);
|
|
74
|
+
}, [gameName, doFlash]);
|
|
75
|
+
const handleDelete = useCallback((key) => {
|
|
76
|
+
localStorage.removeItem(key);
|
|
77
|
+
setSaveRefresh(n => n + 1);
|
|
78
|
+
doFlash(`Deleted: ${getSaveLabel(key, gameName)}`);
|
|
79
|
+
}, [gameName, doFlash]);
|
|
80
|
+
const handleImportFile = useCallback((e) => {
|
|
81
|
+
const file = e.target.files?.[0];
|
|
82
|
+
if (!file)
|
|
83
|
+
return;
|
|
84
|
+
const reader = new FileReader();
|
|
85
|
+
reader.onload = () => {
|
|
86
|
+
try {
|
|
87
|
+
const raw = reader.result;
|
|
88
|
+
JSON.parse(raw);
|
|
89
|
+
localStorage.setItem(gameName, raw);
|
|
90
|
+
doFlash(`Imported: ${file.name}`);
|
|
91
|
+
window.location.reload();
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
doFlash('Invalid JSON file');
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
reader.readAsText(file);
|
|
98
|
+
e.target.value = '';
|
|
99
|
+
}, [gameName, doFlash]);
|
|
100
|
+
const handleImportPaste = useCallback(() => {
|
|
101
|
+
if (!importText.trim()) {
|
|
102
|
+
setPasteError('Paste a JSON state first');
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
try {
|
|
106
|
+
JSON.parse(importText);
|
|
107
|
+
localStorage.setItem(gameName, importText);
|
|
108
|
+
setImportText('');
|
|
109
|
+
setPasteError(null);
|
|
110
|
+
setShowPasteModal(false);
|
|
111
|
+
doFlash('State imported!');
|
|
112
|
+
window.location.reload();
|
|
113
|
+
}
|
|
114
|
+
catch {
|
|
115
|
+
setPasteError('Invalid JSON — check syntax');
|
|
116
|
+
}
|
|
117
|
+
}, [gameName, importText, doFlash]);
|
|
118
|
+
const handlePasteChange = useCallback((value) => {
|
|
119
|
+
setImportText(value);
|
|
120
|
+
setPasteError(null);
|
|
121
|
+
try {
|
|
122
|
+
const parsed = JSON.parse(value);
|
|
123
|
+
setImportText(JSON.stringify(parsed, null, 2));
|
|
124
|
+
}
|
|
125
|
+
catch {
|
|
126
|
+
// Keep raw text if invalid
|
|
127
|
+
}
|
|
128
|
+
}, []);
|
|
129
|
+
return (_jsxs(_Fragment, { children: [_jsxs("div", { css: toolBtnCss, children: [_jsx("span", { css: toolIconCss, children: '\u2B73' }), _jsx("span", { css: toolLabelCss, children: "Save State" }), _jsx("span", { css: toolDescCss, children: "Save current game state" }), _jsxs("div", { css: inlineRowCss, onClick: e => e.stopPropagation(), children: [_jsx("input", { type: "text", placeholder: "label (optional)", value: saveLabel, onChange: e => setSaveLabel(e.target.value), onKeyDown: e => { if (e.key === 'Enter')
|
|
130
|
+
handleSave(); }, css: textInputCss }), _jsx("button", { css: goBtnCss, onClick: handleSave, children: "Save" })] })] }), saveKeys.length > 0 && (_jsx("div", { css: savedListCss, children: saveKeys.map(key => (_jsxs("div", { css: savedEntryCss, children: [_jsx("span", { css: savedLabelTextCss, children: getSaveLabel(key, gameName) }), _jsxs("div", { css: savedActionsCss, children: [_jsx("button", { css: smallBtnCss, onClick: () => handleLoad(key), title: "Load", children: '\u25B6' }), _jsx("button", { css: smallBtnCss, onClick: () => handleDownloadSave(key), title: "Download", children: '\u2913' }), _jsx("button", { css: [smallBtnCss, smallBtnDangerCss], onClick: () => handleDelete(key), title: "Delete", children: '\u2715' })] })] }, key))) })), _jsx("div", { css: dividerCss }), _jsxs("button", { css: toolBtnCss, onClick: () => fileInputRef.current?.click(), children: [_jsx("span", { css: toolIconCss, children: '\u2912' }), _jsx("span", { css: toolLabelCss, children: "Import File" }), _jsx("span", { css: toolDescCss, children: "Load state from JSON file" })] }), _jsx("input", { ref: fileInputRef, type: "file", accept: ".json,application/json", onChange: handleImportFile, style: { display: 'none' } }), _jsxs("button", { css: toolBtnCss, onClick: () => { setShowPasteModal(true); setPasteError(null); }, children: [_jsx("span", { css: toolIconCss, children: '\u2398' }), _jsx("span", { css: toolLabelCss, children: "Paste State" }), _jsx("span", { css: toolDescCss, children: "Open editor to paste JSON" })] }), showPasteModal && (_jsxs(_Fragment, { children: [_jsx("div", { css: modalBackdropCss, onClick: () => { setShowPasteModal(false); setPasteError(null); } }), _jsxs("div", { css: modalCss, children: [_jsxs("div", { css: modalHeaderCss, children: [_jsx("span", { css: modalTitleCss, children: "Paste Game State" }), _jsx("button", { css: modalCloseBtnCss, onClick: () => { setShowPasteModal(false); setPasteError(null); }, children: '\u2715' })] }), _jsxs("div", { css: modalBodyCss, children: [_jsx("textarea", { css: modalTextareaCss, placeholder: 'Paste your JSON game state here...', value: importText, onChange: e => handlePasteChange(e.target.value), spellCheck: false }), pasteError && _jsx("div", { css: pasteErrorCss, children: pasteError })] }), _jsxs("div", { css: modalFooterCss, children: [_jsx("button", { css: modalCancelBtnCss, onClick: () => { setShowPasteModal(false); setPasteError(null); }, children: "Cancel" }), _jsx("button", { css: modalLoadBtnCss, onClick: handleImportPaste, children: "Load State" })] })] })] }))] }));
|
|
131
|
+
};
|
|
132
|
+
// ── Styles ──
|
|
133
|
+
const toolReveal = keyframes `
|
|
134
|
+
from { opacity: 0; transform: translateX(-6px); }
|
|
135
|
+
to { opacity: 1; transform: translateX(0); }
|
|
136
|
+
`;
|
|
137
|
+
const toolBtnCss = css `
|
|
138
|
+
position: relative;
|
|
139
|
+
display: grid;
|
|
140
|
+
grid-template-columns: 28px 1fr;
|
|
141
|
+
grid-template-rows: auto auto;
|
|
142
|
+
align-items: center;
|
|
143
|
+
gap: 0 10px;
|
|
144
|
+
padding: 10px 12px;
|
|
145
|
+
border: none;
|
|
146
|
+
border-radius: 8px;
|
|
147
|
+
background: transparent;
|
|
148
|
+
cursor: pointer;
|
|
149
|
+
text-align: left;
|
|
150
|
+
transition: background 0.15s;
|
|
151
|
+
animation: ${toolReveal} 0.25s ease-out backwards;
|
|
152
|
+
font-family: inherit;
|
|
153
|
+
&:hover { background: rgba(40, 184, 206, 0.08); }
|
|
154
|
+
&:active { background: rgba(40, 184, 206, 0.14); }
|
|
155
|
+
`;
|
|
156
|
+
const toolIconCss = css `
|
|
157
|
+
grid-row: 1 / -1;
|
|
158
|
+
font-size: 15px;
|
|
159
|
+
color: ${GP_PRIMARY};
|
|
160
|
+
display: flex; align-items: center; justify-content: center;
|
|
161
|
+
width: 28px; height: 28px;
|
|
162
|
+
border-radius: 6px;
|
|
163
|
+
background: rgba(40, 184, 206, 0.08);
|
|
164
|
+
`;
|
|
165
|
+
const toolLabelCss = css `
|
|
166
|
+
font-size: 14px; font-weight: 700; color: #e0f0f4; line-height: 1.2;
|
|
167
|
+
`;
|
|
168
|
+
const toolDescCss = css `
|
|
169
|
+
font-size: 12px; color: #5a8a98; line-height: 1.2;
|
|
170
|
+
`;
|
|
171
|
+
const inlineRowCss = css `
|
|
172
|
+
grid-column: 1 / -1;
|
|
173
|
+
display: flex; align-items: center; gap: 4px; margin-top: 6px;
|
|
174
|
+
`;
|
|
175
|
+
const textInputCss = css `
|
|
176
|
+
flex: 1; height: 26px;
|
|
177
|
+
border-radius: 5px;
|
|
178
|
+
border: 1px solid rgba(40, 184, 206, 0.25);
|
|
179
|
+
background: rgba(0, 0, 0, 0.3);
|
|
180
|
+
color: #e0f0f4;
|
|
181
|
+
font-size: 12px; font-weight: 600;
|
|
182
|
+
padding: 0 8px;
|
|
183
|
+
font-family: inherit;
|
|
184
|
+
&::placeholder { color: #3a6070; }
|
|
185
|
+
&:focus { outline: none; border-color: ${GP_PRIMARY}; box-shadow: 0 0 0 2px rgba(40, 184, 206, 0.15); }
|
|
186
|
+
`;
|
|
187
|
+
const goBtnCss = css `
|
|
188
|
+
height: 26px; padding: 0 12px;
|
|
189
|
+
border-radius: 5px;
|
|
190
|
+
border: 1px solid rgba(40, 184, 206, 0.35);
|
|
191
|
+
background: rgba(40, 184, 206, 0.15);
|
|
192
|
+
color: ${GP_PRIMARY};
|
|
193
|
+
font-size: 12px; font-weight: 800;
|
|
194
|
+
text-transform: uppercase; letter-spacing: 0.05em;
|
|
195
|
+
cursor: pointer; margin-left: auto;
|
|
196
|
+
font-family: inherit;
|
|
197
|
+
transition: all 0.15s; flex-shrink: 0;
|
|
198
|
+
&:hover { background: rgba(40, 184, 206, 0.25); border-color: rgba(40, 184, 206, 0.5); }
|
|
199
|
+
`;
|
|
200
|
+
const dividerCss = css `
|
|
201
|
+
height: 1px; margin: 4px 12px;
|
|
202
|
+
background: rgba(40, 184, 206, 0.1);
|
|
203
|
+
`;
|
|
204
|
+
const savedListCss = css `
|
|
205
|
+
display: flex; flex-direction: column; gap: 2px; padding: 0 8px;
|
|
206
|
+
`;
|
|
207
|
+
const savedEntryCss = css `
|
|
208
|
+
display: flex; align-items: center; justify-content: space-between;
|
|
209
|
+
padding: 5px 8px; border-radius: 5px;
|
|
210
|
+
background: rgba(40, 184, 206, 0.04);
|
|
211
|
+
border: 1px solid rgba(40, 184, 206, 0.08);
|
|
212
|
+
`;
|
|
213
|
+
const savedLabelTextCss = css `
|
|
214
|
+
font-size: 12px; font-weight: 600; color: #8ab8c8;
|
|
215
|
+
overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
|
|
216
|
+
flex: 1; margin-right: 8px;
|
|
217
|
+
`;
|
|
218
|
+
const savedActionsCss = css `
|
|
219
|
+
display: flex; gap: 4px; flex-shrink: 0;
|
|
220
|
+
`;
|
|
221
|
+
const smallBtnCss = css `
|
|
222
|
+
width: 22px; height: 22px;
|
|
223
|
+
border-radius: 4px;
|
|
224
|
+
border: 1px solid rgba(40, 184, 206, 0.25);
|
|
225
|
+
background: rgba(40, 184, 206, 0.08);
|
|
226
|
+
color: ${GP_PRIMARY};
|
|
227
|
+
font-size: 10px; cursor: pointer;
|
|
228
|
+
display: flex; align-items: center; justify-content: center;
|
|
229
|
+
font-family: inherit;
|
|
230
|
+
transition: all 0.15s;
|
|
231
|
+
&:hover { background: rgba(40, 184, 206, 0.2); border-color: rgba(40, 184, 206, 0.4); }
|
|
232
|
+
`;
|
|
233
|
+
const smallBtnDangerCss = css `
|
|
234
|
+
&:hover { background: rgba(220, 60, 60, 0.2); border-color: rgba(220, 60, 60, 0.4); color: #dc3c3c; }
|
|
235
|
+
`;
|
|
236
|
+
// ── Modal ──
|
|
237
|
+
const modalFadeIn = keyframes `
|
|
238
|
+
from { opacity: 0; transform: translate(-50%, -50%) scale(0.95); }
|
|
239
|
+
to { opacity: 1; transform: translate(-50%, -50%) scale(1); }
|
|
240
|
+
`;
|
|
241
|
+
const modalBackdropCss = css `
|
|
242
|
+
position: fixed; inset: 0; z-index: 1000;
|
|
243
|
+
background: rgba(0, 0, 0, 0.6);
|
|
244
|
+
backdrop-filter: blur(2px);
|
|
245
|
+
`;
|
|
246
|
+
const modalCss = css `
|
|
247
|
+
position: fixed; top: 50%; left: 50%;
|
|
248
|
+
transform: translate(-50%, -50%);
|
|
249
|
+
z-index: 1001;
|
|
250
|
+
width: min(700px, 90vw);
|
|
251
|
+
max-height: 80vh;
|
|
252
|
+
display: flex; flex-direction: column;
|
|
253
|
+
background: linear-gradient(170deg, #0f2035 0%, ${GP_SURFACE} 100%);
|
|
254
|
+
border: 1px solid rgba(40, 184, 206, 0.3);
|
|
255
|
+
border-radius: 12px;
|
|
256
|
+
box-shadow: 0 24px 60px rgba(0, 0, 0, 0.7);
|
|
257
|
+
font-family: 'Mulish', sans-serif;
|
|
258
|
+
animation: ${modalFadeIn} 0.2s ease-out;
|
|
259
|
+
`;
|
|
260
|
+
const modalHeaderCss = css `
|
|
261
|
+
display: flex; align-items: center; justify-content: space-between;
|
|
262
|
+
padding: 14px 20px;
|
|
263
|
+
border-bottom: 1px solid rgba(40, 184, 206, 0.15);
|
|
264
|
+
background: rgba(40, 184, 206, 0.04);
|
|
265
|
+
border-radius: 12px 12px 0 0;
|
|
266
|
+
`;
|
|
267
|
+
const modalTitleCss = css `
|
|
268
|
+
font-size: 14px; font-weight: 800; color: #e0f0f4;
|
|
269
|
+
text-transform: uppercase; letter-spacing: 0.08em;
|
|
270
|
+
`;
|
|
271
|
+
const modalCloseBtnCss = css `
|
|
272
|
+
width: 28px; height: 28px;
|
|
273
|
+
border: none; border-radius: 6px;
|
|
274
|
+
background: rgba(40, 184, 206, 0.08);
|
|
275
|
+
color: #5a8a98; font-size: 12px;
|
|
276
|
+
cursor: pointer;
|
|
277
|
+
display: flex; align-items: center; justify-content: center;
|
|
278
|
+
transition: all 0.15s;
|
|
279
|
+
&:hover { background: rgba(220, 60, 60, 0.2); color: #dc3c3c; }
|
|
280
|
+
`;
|
|
281
|
+
const modalBodyCss = css `
|
|
282
|
+
flex: 1; overflow-y: auto;
|
|
283
|
+
padding: 16px 20px;
|
|
284
|
+
display: flex; flex-direction: column; gap: 12px;
|
|
285
|
+
min-height: 0;
|
|
286
|
+
`;
|
|
287
|
+
const modalTextareaCss = css `
|
|
288
|
+
width: 100%; min-height: 100px;
|
|
289
|
+
border-radius: 8px;
|
|
290
|
+
border: 1px solid rgba(40, 184, 206, 0.25);
|
|
291
|
+
background: rgba(0, 0, 0, 0.4);
|
|
292
|
+
color: #e0f0f4;
|
|
293
|
+
font-size: 13px; font-weight: 500;
|
|
294
|
+
padding: 12px;
|
|
295
|
+
font-family: 'Consolas', 'Monaco', 'Courier New', monospace;
|
|
296
|
+
resize: vertical; line-height: 1.5;
|
|
297
|
+
&::placeholder { color: #3a6070; }
|
|
298
|
+
&:focus { outline: none; border-color: ${GP_PRIMARY}; box-shadow: 0 0 0 2px rgba(40, 184, 206, 0.15); }
|
|
299
|
+
`;
|
|
300
|
+
const pasteErrorCss = css `
|
|
301
|
+
font-size: 12px; font-weight: 700; color: #dc3c3c;
|
|
302
|
+
padding: 6px 10px; border-radius: 6px;
|
|
303
|
+
background: rgba(220, 60, 60, 0.1);
|
|
304
|
+
border: 1px solid rgba(220, 60, 60, 0.2);
|
|
305
|
+
`;
|
|
306
|
+
const modalFooterCss = css `
|
|
307
|
+
display: flex; justify-content: flex-end; gap: 8px;
|
|
308
|
+
padding: 12px 20px;
|
|
309
|
+
border-top: 1px solid rgba(40, 184, 206, 0.15);
|
|
310
|
+
`;
|
|
311
|
+
const modalCancelBtnCss = css `
|
|
312
|
+
height: 32px; padding: 0 16px;
|
|
313
|
+
border-radius: 6px;
|
|
314
|
+
border: 1px solid rgba(40, 184, 206, 0.25);
|
|
315
|
+
background: transparent;
|
|
316
|
+
color: #5a8a98;
|
|
317
|
+
font-size: 13px; font-weight: 700;
|
|
318
|
+
cursor: pointer; font-family: inherit;
|
|
319
|
+
transition: all 0.15s;
|
|
320
|
+
&:hover { background: rgba(40, 184, 206, 0.08); color: #e0f0f4; }
|
|
321
|
+
`;
|
|
322
|
+
const modalLoadBtnCss = css `
|
|
323
|
+
height: 32px; padding: 0 20px;
|
|
324
|
+
border-radius: 6px;
|
|
325
|
+
border: 1px solid rgba(40, 184, 206, 0.4);
|
|
326
|
+
background: rgba(40, 184, 206, 0.2);
|
|
327
|
+
color: ${GP_PRIMARY};
|
|
328
|
+
font-size: 13px; font-weight: 800;
|
|
329
|
+
text-transform: uppercase; letter-spacing: 0.05em;
|
|
330
|
+
cursor: pointer; font-family: inherit;
|
|
331
|
+
transition: all 0.15s;
|
|
332
|
+
&:hover { background: rgba(40, 184, 206, 0.35); border-color: ${GP_PRIMARY}; }
|
|
333
|
+
`;
|
|
334
|
+
//# sourceMappingURL=SaveLoadPanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SaveLoadPanel.js","sourceRoot":"","sources":["../../../../../src/components/material/GameTable/DevTools/SaveLoadPanel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/components/material/GameTable/DevTools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC7G,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/material/GameTable/index.ts"],"names":[],"mappings":"AAAA,cAAc,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/material/GameTable/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,SAAS,CAAA;AACvB,cAAc,aAAa,CAAA;AAC3B,cAAc,oBAAoB,CAAA;AAClC,cAAc,uBAAuB,CAAA;AACrC,cAAc,gBAAgB,CAAA"}
|
|
@@ -70,11 +70,11 @@ export declare class AnimationBuilder<P extends number = number, M extends numbe
|
|
|
70
70
|
* Configure a complete trajectory with elevation and waypoints.
|
|
71
71
|
* @param config Trajectory configuration
|
|
72
72
|
*/
|
|
73
|
-
trajectory(config: Trajectory<P, M, L> | ((context: ItemContext<P, M, L>) => Trajectory<P, M, L>)): this;
|
|
73
|
+
trajectory(config: Trajectory<P, M, L> | ((context: ItemContext<P, M, L>, move: MaterialMove<P, M, L>) => Trajectory<P, M, L>)): this;
|
|
74
74
|
/**
|
|
75
75
|
* Get the trajectory configuration.
|
|
76
76
|
*/
|
|
77
|
-
get trajectoryConfig(): Trajectory<P, M, L> | ((context: ItemContext<P, M, L>) => Trajectory<P, M, L>);
|
|
77
|
+
get trajectoryConfig(): Trajectory<P, M, L> | ((context: ItemContext<P, M, L>, move: MaterialMove<P, M, L>) => Trajectory<P, M, L>);
|
|
78
78
|
/**
|
|
79
79
|
* Configure the elevation arc.
|
|
80
80
|
* @param heightOrConfig Height in em, or full configuration object
|
|
@@ -196,7 +196,7 @@ export class AnimationBuilder extends ItemAnimations {
|
|
|
196
196
|
if (this._itemAnimation) {
|
|
197
197
|
return this._itemAnimation(context, animation, boundaries);
|
|
198
198
|
}
|
|
199
|
-
const trajectory = typeof this._trajectory === 'function' ? this._trajectory(context) : this._trajectory;
|
|
199
|
+
const trajectory = typeof this._trajectory === 'function' ? this._trajectory(context, animation.move) : this._trajectory;
|
|
200
200
|
return new MaterialAnimationsWithTrajectory(this._duration, trajectory).getItemAnimation(context, animation, boundaries);
|
|
201
201
|
}
|
|
202
202
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AnimationBuilder.js","sourceRoot":"","sources":["../../../../src/components/material/animations/AnimationBuilder.ts"],"names":[],"mappings":"AACA,OAAO,EAAa,aAAa,EAAE,MAAM,wBAAwB,CAAA;AACjE,OAAO,EAAuD,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAGnG,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,EAAE,gBAAgB,EAAyC,MAAM,cAAc,CAAA;AAQtF;;;GAGG;AACH,MAAM,OAAO,gBACX,SAAQ,cAAuB;IAE/B,0CAA0C;IACjC,UAAU,GAAkC,EAAE,CAAA;IAEvD,oCAAoC;IAC5B,SAAS,CAAS;IAE1B,oCAAoC;IAC5B,MAAM,CAAuC;IAErD,yCAAyC;IACjC,WAAW,
|
|
1
|
+
{"version":3,"file":"AnimationBuilder.js","sourceRoot":"","sources":["../../../../src/components/material/animations/AnimationBuilder.ts"],"names":[],"mappings":"AACA,OAAO,EAAa,aAAa,EAAE,MAAM,wBAAwB,CAAA;AACjE,OAAO,EAAuD,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAGnG,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,EAAE,gBAAgB,EAAyC,MAAM,cAAc,CAAA;AAQtF;;;GAGG;AACH,MAAM,OAAO,gBACX,SAAQ,cAAuB;IAE/B,0CAA0C;IACjC,UAAU,GAAkC,EAAE,CAAA;IAEvD,oCAAoC;IAC5B,SAAS,CAAS;IAE1B,oCAAoC;IAC5B,MAAM,CAAuC;IAErD,yCAAyC;IACjC,WAAW,GAAgH,EAAE,CAAA;IAErI,uEAAuE;IAC/D,SAAS,GAAG,KAAK,CAAA;IAEzB,+CAA+C;IACvC,cAAc,CAAmI;IAEzJ;;;OAGG;IACH,MAAM,CAAC,SAAsC;QAC3C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAC/B,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;OAGG;IACH,QAAQ,CAAC,EAAU;QACjB,IAAI,CAAC,SAAS,GAAG,EAAE,GAAG,IAAI,CAAA;QAC1B,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;OAEG;IACH,IAAI,eAAe;QACjB,OAAO,IAAI,CAAC,SAAS,CAAA;IACvB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,KAA2C;QAC/C,IAAI,CAAC,MAAM,GAAG,KAAK,CAAA;QACnB,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;OAEG;IACH,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,MAAM,CAAA;IACpB,CAAC;IAED;;;;OAIG;IACH,aAAa,CAAC,EAAoI;QAChJ,IAAI,CAAC,cAAc,GAAG,EAAE,CAAA;QACxB,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;OAEG;IACH,IAAI;QACF,IAAI,CAAC,SAAS,GAAG,CAAC,CAAA;QAClB,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;;OAIG;IACH,QAAQ;QACN,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;QACrB,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;OAGG;IACH,UAAU,CAAC,MAAmH;QAC5H,IAAI,CAAC,WAAW,GAAG,MAAM,CAAA;QACzB,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;OAEG;IACH,IAAI,gBAAgB;QAClB,OAAO,IAAI,CAAC,WAAW,CAAA;IACzB,CAAC;IAED;;;OAGG;IACH,GAAG,CAAC,cAAyC;QAC3C,IAAI,OAAO,IAAI,CAAC,WAAW,KAAK,UAAU;YAAE,IAAI,CAAC,WAAW,GAAG,EAAE,CAAA;QACjE,IAAI,OAAO,cAAc,KAAK,QAAQ,EAAE,CAAC;YACvC,IAAI,CAAC,WAAW,CAAC,SAAS,GAAG,EAAE,GAAG,gBAAgB,EAAE,MAAM,EAAE,cAAc,EAAE,CAAA;QAC9E,CAAC;aAAM,IAAI,cAAc,EAAE,CAAC;YAC1B,IAAI,CAAC,WAAW,CAAC,SAAS,GAAG,cAAc,CAAA;QAC7C,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,WAAW,CAAC,SAAS,GAAG,gBAAgB,CAAA;QAC/C,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;OAEG;IACH,IAAI;QACF,IAAI,OAAO,IAAI,CAAC,WAAW,KAAK,UAAU;YAAE,IAAI,CAAC,WAAW,GAAG,EAAE,CAAA;QACjE,IAAI,CAAC,WAAW,CAAC,SAAS,GAAG,KAAK,CAAA;QAClC,OAAO,IAAI,CAAA;IACb,CAAC;IASD,GAAG,CAAC,IAAwD,EAAE,KAAa,GAAG;QAC5E,IAAI,OAAO,IAAI,CAAC,WAAW,KAAK,UAAU;YAAE,IAAI,CAAC,WAAW,GAAG,EAAE,CAAA;QACjE,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC;YAChC,IAAI,CAAC,WAAW,CAAC,SAAS,GAAG,EAAE,CAAA;QACjC,CAAC;QAED,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;YAC7C,uBAAuB;YACvB,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACvC,CAAC;aAAM,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,WAAW,IAAI,IAAI,EAAE,CAAC;YAC3D,mBAAmB;YACnB,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,IAAwB,EAAE,CAAC,CAAA;QAC5E,CAAC;aAAM,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YACpC,cAAc;YACd,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,IAAmB,EAAE,CAAC,CAAA;QAC3E,CAAC;QAED,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;OAGG;IACH,OAAO,CAAC,GAAG,SAA8B;QACvC,IAAI,OAAO,IAAI,CAAC,WAAW,KAAK,UAAU;YAAE,IAAI,CAAC,WAAW,GAAG,EAAE,CAAA;QACjE,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC;YAChC,IAAI,CAAC,WAAW,CAAC,SAAS,GAAG,EAAE,CAAA;QACjC,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAA;QAC7C,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,MAAc;QACnB,IAAI,OAAO,IAAI,CAAC,WAAW,KAAK,UAAU;YAAE,IAAI,CAAC,WAAW,GAAG,EAAE,CAAA;QACjE,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,MAAM,CAAA;QAChC,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;OAGG;IACH,OAAO,CAAC,IAA2B,EAAE,OAA0C;QAC7E,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAA;IACrE,CAAC;IAED;;;OAGG;IACH,WAAW,CAAC,IAA2B,EAAE,OAA8C;QACrF,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,mEAAmE;YACnE,IAAI,OAAO,CAAC,IAAI,KAAK,aAAa,CAAC,UAAU;gBAAE,OAAO,CAAC,CAAA;YACvD,OAAO,IAAI,CAAC,SAAS,IAAI,CAAC,CAAA;QAC5B,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC,SAAS,IAAI,CAAC,CAAA;QAC/D,MAAM,UAAU,GAAG,OAAO,IAAI,CAAC,WAAW,KAAK,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAA;QACjF,OAAO,IAAI,gCAAgC,CAAU,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IAC7G,CAAC;IAED;;;OAGG;IACH,gBAAgB,CAAC,OAA6B,EAAE,SAA2C,EAAE,UAA0B;QACrH,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,SAAS,EAAE,UAAU,CAAC,CAAA;QAC5D,CAAC;QACD,MAAM,UAAU,GAAG,OAAO,IAAI,CAAC,WAAW,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAA;QACxH,OAAO,IAAI,gCAAgC,CAAU,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,gBAAgB,CAAC,OAAO,EAAE,SAAS,EAAE,UAAU,CAAC,CAAA;IACnI,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,gCACJ,SAAQ,kBAA2B;IAEnC,YACE,QAA4B,EAC5B,UAA+B;QAE/B,qDAAqD;QACrD,KAAK,CAAC,QAAQ,EAAE,GAAG,EAAE,UAAU,CAAC,CAAA;IAClC,CAAC;CACF;AAED,6CAA6C;AAC7C,oBAAoB;AACpB,6CAA6C;AAE7C;;GAEG;AACH,MAAM,UAAU,QAAQ;IACtB,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAA;AACnE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,MAAM,CAAkF,MAAc;IACpH,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,MAAM,CAAA;AAC/D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAkF,YAAe;IACzH,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,KAAK,YAAY,CAAA;AACpF,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CACxB,QAAmC;IAEnC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAA;AAC5E,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAkF,YAAe;IAC7H,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE;QACvB,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,QAAQ;YAAE,OAAO,KAAK,CAAA;QACjD,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QACpG,OAAO,IAAI,EAAE,QAAQ,EAAE,IAAI,KAAK,YAAY,CAAA;IAC9C,CAAC,CAAA;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAkF,YAAe;IAC3H,OAAO,CAAC,IAAI,EAAE,EAAE;QACd,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,QAAQ;YAAE,OAAO,KAAK,CAAA;QACjD,OAAO,UAAU,IAAI,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,KAAK,YAAY,CAAA;IACnE,CAAC,CAAA;AACH,CAAC;AAED,6CAA6C;AAC7C,wBAAwB;AACxB,6CAA6C;AAE7C;;GAEG;AACH,MAAM,UAAU,GAAG,CACjB,GAAG,UAAyC;IAE5C,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAA;AACnE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,EAAE,CAChB,GAAG,UAAyC;IAE5C,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAA;AAClE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,GAAG,CACjB,SAAsC;IAEtC,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;AACrD,CAAC"}
|