brainrot-cli 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (162) hide show
  1. package/README.md +372 -0
  2. package/dist/AchievementNotification.d.ts +28 -0
  3. package/dist/AchievementNotification.d.ts.map +1 -0
  4. package/dist/AchievementNotification.js +74 -0
  5. package/dist/AchievementNotification.js.map +1 -0
  6. package/dist/GameSelector.d.ts +25 -0
  7. package/dist/GameSelector.d.ts.map +1 -0
  8. package/dist/GameSelector.js +105 -0
  9. package/dist/GameSelector.js.map +1 -0
  10. package/dist/HelpOverlay.d.ts +15 -0
  11. package/dist/HelpOverlay.d.ts.map +1 -0
  12. package/dist/HelpOverlay.js +134 -0
  13. package/dist/HelpOverlay.js.map +1 -0
  14. package/dist/Layout.d.ts +49 -0
  15. package/dist/Layout.d.ts.map +1 -0
  16. package/dist/Layout.js +83 -0
  17. package/dist/Layout.js.map +1 -0
  18. package/dist/Leaderboard.d.ts +46 -0
  19. package/dist/Leaderboard.d.ts.map +1 -0
  20. package/dist/Leaderboard.js +68 -0
  21. package/dist/Leaderboard.js.map +1 -0
  22. package/dist/LogViewer.d.ts +33 -0
  23. package/dist/LogViewer.d.ts.map +1 -0
  24. package/dist/LogViewer.js +179 -0
  25. package/dist/LogViewer.js.map +1 -0
  26. package/dist/LoopAlertOverlay.d.ts +15 -0
  27. package/dist/LoopAlertOverlay.d.ts.map +1 -0
  28. package/dist/LoopAlertOverlay.js +17 -0
  29. package/dist/LoopAlertOverlay.js.map +1 -0
  30. package/dist/LoopManagementPanel.d.ts +44 -0
  31. package/dist/LoopManagementPanel.d.ts.map +1 -0
  32. package/dist/LoopManagementPanel.js +220 -0
  33. package/dist/LoopManagementPanel.js.map +1 -0
  34. package/dist/SettingsMenu.d.ts +22 -0
  35. package/dist/SettingsMenu.d.ts.map +1 -0
  36. package/dist/SettingsMenu.js +367 -0
  37. package/dist/SettingsMenu.js.map +1 -0
  38. package/dist/SplitPane.d.ts +63 -0
  39. package/dist/SplitPane.d.ts.map +1 -0
  40. package/dist/SplitPane.js +104 -0
  41. package/dist/SplitPane.js.map +1 -0
  42. package/dist/StatsMenu.d.ts +15 -0
  43. package/dist/StatsMenu.d.ts.map +1 -0
  44. package/dist/StatsMenu.js +230 -0
  45. package/dist/StatsMenu.js.map +1 -0
  46. package/dist/StatusBar.d.ts +58 -0
  47. package/dist/StatusBar.d.ts.map +1 -0
  48. package/dist/StatusBar.js +106 -0
  49. package/dist/StatusBar.js.map +1 -0
  50. package/dist/__tests__/ralph-loop-parser.test.d.ts +2 -0
  51. package/dist/__tests__/ralph-loop-parser.test.d.ts.map +1 -0
  52. package/dist/__tests__/ralph-loop-parser.test.js +143 -0
  53. package/dist/__tests__/ralph-loop-parser.test.js.map +1 -0
  54. package/dist/claude-code-process.d.ts +76 -0
  55. package/dist/claude-code-process.d.ts.map +1 -0
  56. package/dist/claude-code-process.js +221 -0
  57. package/dist/claude-code-process.js.map +1 -0
  58. package/dist/cli.d.ts +42 -0
  59. package/dist/cli.d.ts.map +1 -0
  60. package/dist/cli.js +265 -0
  61. package/dist/cli.js.map +1 -0
  62. package/dist/config.d.ts +206 -0
  63. package/dist/config.d.ts.map +1 -0
  64. package/dist/config.js +270 -0
  65. package/dist/config.js.map +1 -0
  66. package/dist/game-types.d.ts +177 -0
  67. package/dist/game-types.d.ts.map +1 -0
  68. package/dist/game-types.js +55 -0
  69. package/dist/game-types.js.map +1 -0
  70. package/dist/games/MinesweeperGame.d.ts +15 -0
  71. package/dist/games/MinesweeperGame.d.ts.map +1 -0
  72. package/dist/games/MinesweeperGame.js +555 -0
  73. package/dist/games/MinesweeperGame.js.map +1 -0
  74. package/dist/games/PongGame.d.ts +15 -0
  75. package/dist/games/PongGame.d.ts.map +1 -0
  76. package/dist/games/PongGame.js +379 -0
  77. package/dist/games/PongGame.js.map +1 -0
  78. package/dist/games/SnakeGame.d.ts +15 -0
  79. package/dist/games/SnakeGame.d.ts.map +1 -0
  80. package/dist/games/SnakeGame.js +333 -0
  81. package/dist/games/SnakeGame.js.map +1 -0
  82. package/dist/games/TetrisGame.d.ts +15 -0
  83. package/dist/games/TetrisGame.d.ts.map +1 -0
  84. package/dist/games/TetrisGame.js +654 -0
  85. package/dist/games/TetrisGame.js.map +1 -0
  86. package/dist/games/index.d.ts +23 -0
  87. package/dist/games/index.d.ts.map +1 -0
  88. package/dist/games/index.js +47 -0
  89. package/dist/games/index.js.map +1 -0
  90. package/dist/high-scores.d.ts +57 -0
  91. package/dist/high-scores.d.ts.map +1 -0
  92. package/dist/high-scores.js +230 -0
  93. package/dist/high-scores.js.map +1 -0
  94. package/dist/index.d.ts +3 -0
  95. package/dist/index.d.ts.map +1 -0
  96. package/dist/index.js +264 -0
  97. package/dist/index.js.map +1 -0
  98. package/dist/ralph-loop-parser.d.ts +58 -0
  99. package/dist/ralph-loop-parser.d.ts.map +1 -0
  100. package/dist/ralph-loop-parser.js +315 -0
  101. package/dist/ralph-loop-parser.js.map +1 -0
  102. package/dist/stats.d.ts +142 -0
  103. package/dist/stats.d.ts.map +1 -0
  104. package/dist/stats.js +521 -0
  105. package/dist/stats.js.map +1 -0
  106. package/dist/styled-components.d.ts +231 -0
  107. package/dist/styled-components.d.ts.map +1 -0
  108. package/dist/styled-components.js +192 -0
  109. package/dist/styled-components.js.map +1 -0
  110. package/dist/theme.d.ts +301 -0
  111. package/dist/theme.d.ts.map +1 -0
  112. package/dist/theme.js +372 -0
  113. package/dist/theme.js.map +1 -0
  114. package/dist/themes.d.ts +117 -0
  115. package/dist/themes.d.ts.map +1 -0
  116. package/dist/themes.js +296 -0
  117. package/dist/themes.js.map +1 -0
  118. package/dist/ui/index.d.ts +13 -0
  119. package/dist/ui/index.d.ts.map +1 -0
  120. package/dist/ui/index.js +29 -0
  121. package/dist/ui/index.js.map +1 -0
  122. package/dist/use-claude-code.d.ts +30 -0
  123. package/dist/use-claude-code.d.ts.map +1 -0
  124. package/dist/use-claude-code.js +84 -0
  125. package/dist/use-claude-code.js.map +1 -0
  126. package/dist/use-config.d.ts +58 -0
  127. package/dist/use-config.d.ts.map +1 -0
  128. package/dist/use-config.js +113 -0
  129. package/dist/use-config.js.map +1 -0
  130. package/dist/use-game-loop.d.ts +47 -0
  131. package/dist/use-game-loop.d.ts.map +1 -0
  132. package/dist/use-game-loop.js +136 -0
  133. package/dist/use-game-loop.js.map +1 -0
  134. package/dist/use-high-scores.d.ts +41 -0
  135. package/dist/use-high-scores.d.ts.map +1 -0
  136. package/dist/use-high-scores.js +94 -0
  137. package/dist/use-high-scores.js.map +1 -0
  138. package/dist/use-layout-state.d.ts +77 -0
  139. package/dist/use-layout-state.d.ts.map +1 -0
  140. package/dist/use-layout-state.js +160 -0
  141. package/dist/use-layout-state.js.map +1 -0
  142. package/dist/use-ralph-loop.d.ts +41 -0
  143. package/dist/use-ralph-loop.d.ts.map +1 -0
  144. package/dist/use-ralph-loop.js +106 -0
  145. package/dist/use-ralph-loop.js.map +1 -0
  146. package/dist/use-spinner.d.ts +46 -0
  147. package/dist/use-spinner.d.ts.map +1 -0
  148. package/dist/use-spinner.js +71 -0
  149. package/dist/use-spinner.js.map +1 -0
  150. package/dist/use-stats.d.ts +59 -0
  151. package/dist/use-stats.d.ts.map +1 -0
  152. package/dist/use-stats.js +150 -0
  153. package/dist/use-stats.js.map +1 -0
  154. package/dist/use-terminal-size.d.ts +29 -0
  155. package/dist/use-terminal-size.d.ts.map +1 -0
  156. package/dist/use-terminal-size.js +48 -0
  157. package/dist/use-terminal-size.js.map +1 -0
  158. package/dist/useTheme.d.ts +76 -0
  159. package/dist/useTheme.d.ts.map +1 -0
  160. package/dist/useTheme.js +136 -0
  161. package/dist/useTheme.js.map +1 -0
  162. package/package.json +58 -0
@@ -0,0 +1,367 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * SettingsMenu Component
4
+ *
5
+ * In-app settings menu for adjusting theme, layout, and game preferences.
6
+ * Changes can be previewed immediately and saved to the config file.
7
+ */
8
+ import { Box, Text, useInput } from "ink";
9
+ import { useState, useCallback, useMemo } from "react";
10
+ import { navIcons } from "./theme.js";
11
+ import { useThemeColors } from "./useTheme.js";
12
+ import { DEFAULT_CONFIG, } from "./config.js";
13
+ // ============================================================================
14
+ // SETTING DEFINITIONS
15
+ // ============================================================================
16
+ function getThemeSettings(theme) {
17
+ return [
18
+ {
19
+ label: "Color Scheme",
20
+ key: "colorScheme",
21
+ value: theme.colorScheme ?? "default",
22
+ options: [
23
+ { label: "Default (Cyan/Magenta)", value: "default" },
24
+ { label: "Dark (Blue/Purple)", value: "dark" },
25
+ { label: "Light (High Contrast)", value: "light" },
26
+ { label: "Retro (Green Terminal)", value: "retro" },
27
+ ],
28
+ type: "select",
29
+ },
30
+ {
31
+ label: "Border Style",
32
+ key: "borderStyle",
33
+ value: theme.borderStyle ?? "round",
34
+ options: [
35
+ { label: "Single", value: "single" },
36
+ { label: "Round", value: "round" },
37
+ { label: "Double", value: "double" },
38
+ { label: "Heavy", value: "heavy" },
39
+ ],
40
+ type: "select",
41
+ },
42
+ {
43
+ label: "Spinner Style",
44
+ key: "spinnerStyle",
45
+ value: theme.spinnerStyle ?? "spinner",
46
+ options: [
47
+ { label: "Spinner", value: "spinner" },
48
+ { label: "Dots", value: "dots" },
49
+ { label: "Braille", value: "braille" },
50
+ ],
51
+ type: "select",
52
+ },
53
+ {
54
+ label: "Enable Animations",
55
+ key: "enableAnimations",
56
+ value: theme.enableAnimations ?? true,
57
+ type: "toggle",
58
+ },
59
+ ];
60
+ }
61
+ function getLayoutSettings(layout) {
62
+ return [
63
+ {
64
+ label: "Split Direction",
65
+ key: "direction",
66
+ value: layout.direction ?? "horizontal",
67
+ options: [
68
+ { label: "Horizontal (Side by Side)", value: "horizontal" },
69
+ { label: "Vertical (Stacked)", value: "vertical" },
70
+ ],
71
+ type: "select",
72
+ },
73
+ {
74
+ label: "Split Ratio",
75
+ key: "splitRatio",
76
+ value: layout.splitRatio ?? 0.5,
77
+ min: 0.25,
78
+ max: 0.75,
79
+ step: 0.05,
80
+ type: "number",
81
+ },
82
+ {
83
+ label: "Show Secondary Pane",
84
+ key: "showSecondary",
85
+ value: layout.showSecondary ?? true,
86
+ type: "toggle",
87
+ },
88
+ {
89
+ label: "Default Focused Pane",
90
+ key: "defaultFocusedPane",
91
+ value: layout.defaultFocusedPane ?? 0,
92
+ options: [
93
+ { label: "Game Pane", value: 0 },
94
+ { label: "Management Pane", value: 1 },
95
+ ],
96
+ type: "select",
97
+ },
98
+ ];
99
+ }
100
+ function getGameSettings(games) {
101
+ return [
102
+ {
103
+ label: "Default Difficulty",
104
+ key: "defaultDifficulty",
105
+ value: games.defaultDifficulty ?? "medium",
106
+ options: [
107
+ { label: "Easy", value: "easy" },
108
+ { label: "Medium", value: "medium" },
109
+ { label: "Hard", value: "hard" },
110
+ ],
111
+ type: "select",
112
+ },
113
+ {
114
+ label: "Snake Initial Speed",
115
+ key: "snake.initialSpeed",
116
+ value: games.snake?.initialSpeed ?? 5,
117
+ min: 1,
118
+ max: 10,
119
+ step: 1,
120
+ type: "number",
121
+ },
122
+ {
123
+ label: "Tetris Starting Level",
124
+ key: "tetris.startingLevel",
125
+ value: games.tetris?.startingLevel ?? 1,
126
+ min: 1,
127
+ max: 10,
128
+ step: 1,
129
+ type: "number",
130
+ },
131
+ {
132
+ label: "Tetris Show Ghost Piece",
133
+ key: "tetris.showGhostPiece",
134
+ value: games.tetris?.showGhostPiece ?? true,
135
+ type: "toggle",
136
+ },
137
+ {
138
+ label: "Minesweeper Default Difficulty",
139
+ key: "minesweeper.defaultDifficulty",
140
+ value: games.minesweeper?.defaultDifficulty ?? "easy",
141
+ options: [
142
+ { label: "Easy (9x9, 10 mines)", value: "easy" },
143
+ { label: "Medium (16x16, 40 mines)", value: "medium" },
144
+ { label: "Hard (16x30, 99 mines)", value: "hard" },
145
+ ],
146
+ type: "select",
147
+ },
148
+ {
149
+ label: "Minesweeper Show Timer",
150
+ key: "minesweeper.showTimer",
151
+ value: games.minesweeper?.showTimer ?? true,
152
+ type: "toggle",
153
+ },
154
+ {
155
+ label: "Pong AI Difficulty",
156
+ key: "pong.aiDifficulty",
157
+ value: games.pong?.aiDifficulty ?? 5,
158
+ min: 1,
159
+ max: 10,
160
+ step: 1,
161
+ type: "number",
162
+ },
163
+ {
164
+ label: "Pong Ball Speed",
165
+ key: "pong.ballSpeedMultiplier",
166
+ value: games.pong?.ballSpeedMultiplier ?? 1.0,
167
+ min: 0.5,
168
+ max: 2.0,
169
+ step: 0.1,
170
+ type: "number",
171
+ },
172
+ ];
173
+ }
174
+ function TabHeader({ tabs, activeTab }) {
175
+ const colors = useThemeColors();
176
+ return (_jsx(Box, { marginBottom: 1, children: tabs.map((tab, index) => (_jsxs(Box, { children: [index > 0 && _jsx(Text, { dimColor: true, children: " | " }), _jsx(Text, { bold: activeTab === tab.id, color: activeTab === tab.id ? colors.primary : colors.textMuted, children: activeTab === tab.id ? `[${tab.label}]` : tab.label })] }, tab.id))) }));
177
+ }
178
+ function SettingRow({ setting, isSelected, isEditing }) {
179
+ const colors = useThemeColors();
180
+ const borderColor = isSelected ? colors.primary : colors.border;
181
+ const labelColor = isSelected ? colors.primary : colors.text;
182
+ // Format the displayed value
183
+ let displayValue;
184
+ if (setting.type === "toggle") {
185
+ displayValue = setting.value ? "ON" : "OFF";
186
+ }
187
+ else if (setting.type === "number" && typeof setting.value === "number") {
188
+ displayValue = setting.value.toFixed(setting.step && setting.step < 1 ? 1 : 0);
189
+ }
190
+ else if (setting.options) {
191
+ const opt = setting.options.find((o) => o.value === setting.value);
192
+ displayValue = opt?.label ?? String(setting.value);
193
+ }
194
+ else {
195
+ displayValue = String(setting.value);
196
+ }
197
+ return (_jsxs(Box, { children: [_jsxs(Text, { color: labelColor, children: [isSelected ? `${navIcons.arrowRight} ` : " ", setting.label, ":"] }), _jsx(Text, { children: " " }), _jsx(Box, { borderStyle: isEditing ? "round" : undefined, borderColor: borderColor, children: _jsx(Text, { bold: true, color: isSelected ? colors.accent : colors.textMuted, children: isEditing ? `< ${displayValue} >` : displayValue }) })] }));
198
+ }
199
+ function SettingsFooter({ hasChanges, isSaving }) {
200
+ const colors = useThemeColors();
201
+ return (_jsxs(Box, { flexDirection: "column", marginTop: 1, paddingTop: 1, borderStyle: "single", borderTop: true, borderBottom: false, borderLeft: false, borderRight: false, borderColor: colors.border, children: [_jsx(Box, { children: _jsxs(Text, { dimColor: true, children: [_jsx(Text, { color: colors.primary, children: "Tab" }), ": Switch sections |", " ", _jsx(Text, { color: colors.primary, children: "\u2191\u2193" }), ": Navigate |", " ", _jsx(Text, { color: colors.primary, children: "\u2190\u2192/Enter" }), ": Change value"] }) }), _jsxs(Box, { children: [_jsxs(Text, { dimColor: true, children: [_jsx(Text, { color: colors.primary, children: "Ctrl+S" }), ": Save to file |", " ", _jsx(Text, { color: colors.primary, children: "Esc/Q" }), ": Close"] }), hasChanges && (_jsx(Text, { color: colors.warning, children: " | Unsaved changes" })), isSaving && (_jsx(Text, { color: colors.success, children: " | Saving..." }))] })] }));
202
+ }
203
+ // ============================================================================
204
+ // MAIN COMPONENT
205
+ // ============================================================================
206
+ export function SettingsMenu({ config, hasFocus, onConfigChange, onSave, onClose, }) {
207
+ const [activeTab, setActiveTab] = useState("theme");
208
+ const [selectedIndex, setSelectedIndex] = useState(0);
209
+ const [isEditing, setIsEditing] = useState(false);
210
+ const [hasChanges, setHasChanges] = useState(false);
211
+ const [isSaving, setIsSaving] = useState(false);
212
+ const colors = useThemeColors();
213
+ const tabs = useMemo(() => [
214
+ { id: "theme", label: "Theme" },
215
+ { id: "layout", label: "Layout" },
216
+ { id: "games", label: "Games" },
217
+ ], []);
218
+ // Get current settings for active tab
219
+ const currentSettings = useMemo(() => {
220
+ switch (activeTab) {
221
+ case "theme":
222
+ return getThemeSettings(config.theme ?? DEFAULT_CONFIG.theme);
223
+ case "layout":
224
+ return getLayoutSettings(config.layout ?? DEFAULT_CONFIG.layout);
225
+ case "games":
226
+ return getGameSettings(config.games ?? DEFAULT_CONFIG.games);
227
+ }
228
+ }, [activeTab, config]);
229
+ // Handle setting value change
230
+ const handleValueChange = useCallback((setting, direction) => {
231
+ let newValue;
232
+ if (setting.type === "toggle") {
233
+ newValue = !setting.value;
234
+ }
235
+ else if (setting.type === "number" && typeof setting.value === "number") {
236
+ const step = setting.step ?? 1;
237
+ if (direction === "next") {
238
+ newValue = Math.min(setting.value + step, setting.max ?? 100);
239
+ }
240
+ else {
241
+ newValue = Math.max(setting.value - step, setting.min ?? 0);
242
+ }
243
+ // Round to avoid floating point issues
244
+ newValue = Math.round(newValue * 100) / 100;
245
+ }
246
+ else if (setting.options) {
247
+ const currentIdx = setting.options.findIndex((o) => o.value === setting.value);
248
+ if (direction === "next") {
249
+ const nextIdx = (currentIdx + 1) % setting.options.length;
250
+ newValue = setting.options[nextIdx].value;
251
+ }
252
+ else {
253
+ const prevIdx = currentIdx <= 0 ? setting.options.length - 1 : currentIdx - 1;
254
+ newValue = setting.options[prevIdx].value;
255
+ }
256
+ }
257
+ else {
258
+ return;
259
+ }
260
+ // Build the config update based on the key
261
+ const keyParts = setting.key.split(".");
262
+ let updates;
263
+ if (activeTab === "theme") {
264
+ updates = { theme: { [keyParts[0]]: newValue } };
265
+ }
266
+ else if (activeTab === "layout") {
267
+ updates = { layout: { [keyParts[0]]: newValue } };
268
+ }
269
+ else {
270
+ // Games have nested keys like "snake.initialSpeed"
271
+ if (keyParts.length === 2) {
272
+ updates = {
273
+ games: {
274
+ [keyParts[0]]: { [keyParts[1]]: newValue },
275
+ },
276
+ };
277
+ }
278
+ else {
279
+ updates = { games: { [keyParts[0]]: newValue } };
280
+ }
281
+ }
282
+ onConfigChange(updates);
283
+ setHasChanges(true);
284
+ }, [activeTab, onConfigChange]);
285
+ // Handle save
286
+ const handleSave = useCallback(async () => {
287
+ setIsSaving(true);
288
+ try {
289
+ await onSave();
290
+ setHasChanges(false);
291
+ }
292
+ finally {
293
+ setIsSaving(false);
294
+ }
295
+ }, [onSave]);
296
+ // Handle tab change
297
+ const handleTabChange = useCallback((direction) => {
298
+ const currentIdx = tabs.findIndex((t) => t.id === activeTab);
299
+ let newIdx;
300
+ if (direction === "next") {
301
+ newIdx = (currentIdx + 1) % tabs.length;
302
+ }
303
+ else {
304
+ newIdx = currentIdx <= 0 ? tabs.length - 1 : currentIdx - 1;
305
+ }
306
+ setActiveTab(tabs[newIdx].id);
307
+ setSelectedIndex(0);
308
+ setIsEditing(false);
309
+ }, [activeTab, tabs]);
310
+ // Keyboard input handling
311
+ useInput((input, key) => {
312
+ if (!hasFocus)
313
+ return;
314
+ // Close settings
315
+ if (key.escape || input === "q" || input === "Q") {
316
+ onClose();
317
+ return;
318
+ }
319
+ // Save settings
320
+ if (key.ctrl && input === "s") {
321
+ void handleSave();
322
+ return;
323
+ }
324
+ // Switch tabs
325
+ if (key.tab) {
326
+ handleTabChange(key.shift ? "prev" : "next");
327
+ return;
328
+ }
329
+ // Navigate up
330
+ if (key.upArrow || input === "k") {
331
+ setSelectedIndex((prev) => (prev > 0 ? prev - 1 : currentSettings.length - 1));
332
+ setIsEditing(false);
333
+ return;
334
+ }
335
+ // Navigate down
336
+ if (key.downArrow || input === "j") {
337
+ setSelectedIndex((prev) => (prev < currentSettings.length - 1 ? prev + 1 : 0));
338
+ setIsEditing(false);
339
+ return;
340
+ }
341
+ // Change value (left/right or enter for toggle)
342
+ const setting = currentSettings[selectedIndex];
343
+ if (setting) {
344
+ if (key.leftArrow || input === "h") {
345
+ handleValueChange(setting, "prev");
346
+ setIsEditing(true);
347
+ return;
348
+ }
349
+ if (key.rightArrow || input === "l") {
350
+ handleValueChange(setting, "next");
351
+ setIsEditing(true);
352
+ return;
353
+ }
354
+ if (key.return && setting.type === "toggle") {
355
+ handleValueChange(setting, "next");
356
+ return;
357
+ }
358
+ }
359
+ }, { isActive: hasFocus });
360
+ // Keep selected index in bounds
361
+ if (selectedIndex >= currentSettings.length && currentSettings.length > 0) {
362
+ setSelectedIndex(currentSettings.length - 1);
363
+ }
364
+ return (_jsxs(Box, { flexDirection: "column", padding: 1, children: [_jsx(Box, { marginBottom: 1, children: _jsxs(Text, { bold: true, color: colors.primary, children: [navIcons.arrowRight, " Settings"] }) }), _jsx(TabHeader, { tabs: tabs, activeTab: activeTab, onTabChange: setActiveTab }), _jsx(Box, { flexDirection: "column", borderStyle: "round", borderColor: colors.border, paddingX: 1, paddingY: 1, children: currentSettings.map((setting, index) => (_jsx(SettingRow, { setting: setting, isSelected: index === selectedIndex, isEditing: isEditing && index === selectedIndex }, setting.key))) }), _jsx(SettingsFooter, { hasChanges: hasChanges, isSaving: isSaving })] }));
365
+ }
366
+ export default SettingsMenu;
367
+ //# sourceMappingURL=SettingsMenu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SettingsMenu.js","sourceRoot":"","sources":["../src/SettingsMenu.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * SplitPane component for creating resizable split layouts in the terminal.
3
+ * Supports horizontal (left/right) and vertical (top/bottom) splits.
4
+ */
5
+ import type { ReactNode } from "react";
6
+ import type { SplitDirection } from "./use-layout-state.js";
7
+ export interface SplitPaneProps {
8
+ /** First pane content (left/top) */
9
+ first: ReactNode;
10
+ /** Second pane content (right/bottom) */
11
+ second: ReactNode;
12
+ /** Split direction */
13
+ direction: SplitDirection;
14
+ /** Split ratio (0.0 - 1.0) */
15
+ splitRatio: number;
16
+ /** Available width in columns */
17
+ width: number;
18
+ /** Available height in rows */
19
+ height: number;
20
+ /** Whether the split is currently being resized */
21
+ isResizing?: boolean;
22
+ /** Whether to show the secondary pane */
23
+ showSecondary?: boolean;
24
+ /** Which pane is focused (0 or 1) */
25
+ focusedPane?: 0 | 1;
26
+ /** Callback when resize keys are pressed */
27
+ onResize?: (delta: number) => void;
28
+ /** Callback when focus toggle is requested */
29
+ onToggleFocus?: () => void;
30
+ /** Whether this component handles input */
31
+ handleInput?: boolean;
32
+ /** Step size for resize operations */
33
+ resizeStep?: number;
34
+ }
35
+ /**
36
+ * SplitPane component that creates a resizable split layout.
37
+ *
38
+ * In horizontal mode: first pane on left, second on right
39
+ * In vertical mode: first pane on top, second on bottom
40
+ *
41
+ * Use keyboard shortcuts to resize:
42
+ * - Alt+Left/Alt+Up: Make first pane smaller
43
+ * - Alt+Right/Alt+Down: Make first pane larger
44
+ * - Tab: Toggle focus between panes
45
+ */
46
+ export declare function SplitPane({ first, second, direction, splitRatio, width, height, isResizing, showSecondary, focusedPane, onResize, onToggleFocus, handleInput, resizeStep, }: SplitPaneProps): import("react/jsx-runtime").JSX.Element;
47
+ /**
48
+ * Pane wrapper component with a title and optional border highlighting.
49
+ */
50
+ export interface PaneProps {
51
+ /** Pane title */
52
+ title?: string;
53
+ /** Pane content */
54
+ children: ReactNode;
55
+ /** Whether this pane is focused */
56
+ isFocused?: boolean;
57
+ /** Width in columns */
58
+ width?: number;
59
+ /** Height in rows */
60
+ height?: number;
61
+ }
62
+ export declare function Pane({ title, children, isFocused, width, height, }: PaneProps): import("react/jsx-runtime").JSX.Element;
63
+ //# sourceMappingURL=SplitPane.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SplitPane.d.ts","sourceRoot":"","sources":["../src/SplitPane.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAI5D,MAAM,WAAW,cAAc;IAC7B,oCAAoC;IACpC,KAAK,EAAE,SAAS,CAAC;IACjB,yCAAyC;IACzC,MAAM,EAAE,SAAS,CAAC;IAClB,sBAAsB;IACtB,SAAS,EAAE,cAAc,CAAC;IAC1B,8BAA8B;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,iCAAiC;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,+BAA+B;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,mDAAmD;IACnD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,yCAAyC;IACzC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,qCAAqC;IACrC,WAAW,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACpB,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,8CAA8C;IAC9C,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,2CAA2C;IAC3C,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,sCAAsC;IACtC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAoCD;;;;;;;;;;GAUG;AACH,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,MAAM,EACN,SAAS,EACT,UAAU,EACV,KAAK,EACL,MAAM,EACN,UAAkB,EAClB,aAAoB,EACpB,WAAe,EACf,QAAQ,EACR,aAAa,EACb,WAAkB,EAClB,UAAiB,GAClB,EAAE,cAAc,2CA+GhB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,iBAAiB;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mBAAmB;IACnB,QAAQ,EAAE,SAAS,CAAC;IACpB,mCAAmC;IACnC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,uBAAuB;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qBAAqB;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,IAAI,CAAC,EACnB,KAAK,EACL,QAAQ,EACR,SAAiB,EACjB,KAAK,EACL,MAAM,GACP,EAAE,SAAS,2CAmBX"}
@@ -0,0 +1,104 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * SplitPane component for creating resizable split layouts in the terminal.
4
+ * Supports horizontal (left/right) and vertical (top/bottom) splits.
5
+ */
6
+ import { Box, Text, useInput } from "ink";
7
+ import { boxChars, navIcons } from "./theme.js";
8
+ import { useThemeColors } from "./useTheme.js";
9
+ function Divider({ direction, width, height, isResizing }) {
10
+ const colors = useThemeColors();
11
+ const color = isResizing ? colors.primary : colors.border;
12
+ if (direction === "horizontal") {
13
+ // Vertical divider (one column wide, full height)
14
+ const dividerChar = isResizing ? boxChars.heavy.vertical : boxChars.light.vertical;
15
+ return (_jsx(Box, { flexDirection: "column", width: 1, height: height, children: Array.from({ length: height }).map((_, i) => (_jsx(Text, { color: color, children: dividerChar }, i))) }));
16
+ }
17
+ else {
18
+ // Horizontal divider (full width, one row)
19
+ const dividerChar = isResizing ? boxChars.heavy.horizontal : boxChars.light.horizontal;
20
+ return (_jsx(Box, { width: width, height: 1, children: _jsx(Text, { color: color, children: dividerChar.repeat(width) }) }));
21
+ }
22
+ }
23
+ /**
24
+ * SplitPane component that creates a resizable split layout.
25
+ *
26
+ * In horizontal mode: first pane on left, second on right
27
+ * In vertical mode: first pane on top, second on bottom
28
+ *
29
+ * Use keyboard shortcuts to resize:
30
+ * - Alt+Left/Alt+Up: Make first pane smaller
31
+ * - Alt+Right/Alt+Down: Make first pane larger
32
+ * - Tab: Toggle focus between panes
33
+ */
34
+ export function SplitPane({ first, second, direction, splitRatio, width, height, isResizing = false, showSecondary = true, focusedPane = 0, onResize, onToggleFocus, handleInput = true, resizeStep = 0.05, }) {
35
+ const colors = useThemeColors();
36
+ // Handle keyboard input for resizing
37
+ useInput((_input, key) => {
38
+ if (!handleInput)
39
+ return;
40
+ // Tab to toggle focus
41
+ if (key.tab && onToggleFocus) {
42
+ onToggleFocus();
43
+ return;
44
+ }
45
+ // Alt + arrow keys to resize
46
+ if (key.meta && onResize) {
47
+ if (direction === "horizontal") {
48
+ if (key.leftArrow) {
49
+ onResize(-resizeStep);
50
+ }
51
+ else if (key.rightArrow) {
52
+ onResize(resizeStep);
53
+ }
54
+ }
55
+ else {
56
+ if (key.upArrow) {
57
+ onResize(-resizeStep);
58
+ }
59
+ else if (key.downArrow) {
60
+ onResize(resizeStep);
61
+ }
62
+ }
63
+ }
64
+ }, { isActive: handleInput });
65
+ // If secondary is hidden, just render first pane
66
+ if (!showSecondary) {
67
+ return (_jsx(Box, { width: width, height: height, children: first }));
68
+ }
69
+ // Calculate pane dimensions
70
+ let firstWidth, firstHeight;
71
+ let secondWidth, secondHeight;
72
+ if (direction === "horizontal") {
73
+ // Horizontal split: left | right
74
+ // Reserve 1 column for divider
75
+ const usableWidth = Math.max(0, width - 1);
76
+ firstWidth = Math.floor(usableWidth * splitRatio);
77
+ secondWidth = usableWidth - firstWidth;
78
+ firstHeight = height;
79
+ secondHeight = height;
80
+ }
81
+ else {
82
+ // Vertical split: top / bottom
83
+ // Reserve 1 row for divider
84
+ const usableHeight = Math.max(0, height - 1);
85
+ firstHeight = Math.floor(usableHeight * splitRatio);
86
+ secondHeight = usableHeight - firstHeight;
87
+ firstWidth = width;
88
+ secondWidth = width;
89
+ }
90
+ // Ensure minimum dimensions
91
+ firstWidth = Math.max(0, firstWidth);
92
+ firstHeight = Math.max(0, firstHeight);
93
+ secondWidth = Math.max(0, secondWidth);
94
+ secondHeight = Math.max(0, secondHeight);
95
+ const firstPaneBorderColor = focusedPane === 0 ? colors.borderFocus : colors.border;
96
+ const secondPaneBorderColor = focusedPane === 1 ? colors.borderFocus : colors.border;
97
+ return (_jsxs(Box, { flexDirection: direction === "horizontal" ? "row" : "column", width: width, height: height, children: [_jsx(Box, { width: firstWidth, height: firstHeight, borderStyle: "single", borderColor: firstPaneBorderColor, overflow: "hidden", children: first }), _jsx(Divider, { direction: direction, width: direction === "horizontal" ? 1 : width, height: direction === "horizontal" ? height : 1, isResizing: isResizing }), _jsx(Box, { width: secondWidth, height: secondHeight, borderStyle: "single", borderColor: secondPaneBorderColor, overflow: "hidden", children: second })] }));
98
+ }
99
+ export function Pane({ title, children, isFocused = false, width, height, }) {
100
+ const colors = useThemeColors();
101
+ const titleColor = isFocused ? colors.primary : colors.textMuted;
102
+ return (_jsxs(Box, { flexDirection: "column", width: width, height: height, children: [title && (_jsx(Box, { children: _jsxs(Text, { color: titleColor, bold: isFocused, children: [isFocused ? `${navIcons.arrowRight} ` : " ", title] }) })), _jsx(Box, { flexGrow: 1, flexDirection: "column", children: children })] }));
103
+ }
104
+ //# sourceMappingURL=SplitPane.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SplitPane.js","sourceRoot":"","sources":["../src/SplitPane.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Stats & Achievements Menu Component
3
+ *
4
+ * Displays gameplay statistics and achievements in a tabbed interface.
5
+ * Accessible from the main game selector menu.
6
+ */
7
+ export interface StatsMenuProps {
8
+ /** Whether the menu has focus */
9
+ hasFocus: boolean;
10
+ /** Callback to close the menu */
11
+ onClose: () => void;
12
+ }
13
+ export declare function StatsMenu({ hasFocus, onClose }: StatsMenuProps): import("react/jsx-runtime").JSX.Element;
14
+ export default StatsMenu;
15
+ //# sourceMappingURL=StatsMenu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StatsMenu.d.ts","sourceRoot":"","sources":["../src/StatsMenu.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAuBH,MAAM,WAAW,cAAc;IAC7B,iCAAiC;IACjC,QAAQ,EAAE,OAAO,CAAC;IAClB,iCAAiC;IACjC,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAqXD,wBAAgB,SAAS,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,cAAc,2CAqL9D;AAED,eAAe,SAAS,CAAC"}