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,301 @@
1
+ /**
2
+ * Theme System
3
+ *
4
+ * Centralized visual styling for a modern terminal aesthetic.
5
+ * Provides consistent colors, typography, spacing, and visual constants.
6
+ */
7
+ /**
8
+ * Primary color palette - semantic colors for consistent UI
9
+ */
10
+ export declare const colors: {
11
+ readonly primary: "cyan";
12
+ readonly secondary: "magenta";
13
+ readonly accent: "yellow";
14
+ readonly success: "green";
15
+ readonly warning: "yellow";
16
+ readonly error: "red";
17
+ readonly info: "cyan";
18
+ readonly text: "white";
19
+ readonly textMuted: "gray";
20
+ readonly textDim: "gray";
21
+ readonly border: "gray";
22
+ readonly borderFocus: "cyan";
23
+ readonly borderActive: "yellow";
24
+ readonly bgHighlight: "cyan";
25
+ readonly bgWarning: "yellow";
26
+ readonly bgError: "red";
27
+ readonly bgSuccess: "green";
28
+ };
29
+ /**
30
+ * Status colors for loop/process states
31
+ */
32
+ export declare const statusColors: {
33
+ readonly idle: "gray";
34
+ readonly running: "green";
35
+ readonly paused: "yellow";
36
+ readonly completed: "cyan";
37
+ readonly errored: "red";
38
+ readonly waiting_for_input: "magenta";
39
+ readonly starting: "yellow";
40
+ readonly stopping: "yellow";
41
+ readonly stopped: "gray";
42
+ readonly crashed: "red";
43
+ };
44
+ /**
45
+ * Alert type colors
46
+ */
47
+ export declare const alertColors: {
48
+ readonly question: "cyan";
49
+ readonly confirmation: "yellow";
50
+ readonly error: "red";
51
+ readonly permission: "magenta";
52
+ readonly info: "cyan";
53
+ readonly success: "green";
54
+ };
55
+ /**
56
+ * Game-specific colors
57
+ */
58
+ export declare const gameColors: {
59
+ readonly player: "cyan";
60
+ readonly opponent: "magenta";
61
+ readonly item: "yellow";
62
+ readonly obstacle: "red";
63
+ readonly bonus: "green";
64
+ readonly neutral: "gray";
65
+ };
66
+ /**
67
+ * Position ranking colors (for leaderboards)
68
+ */
69
+ export declare const rankColors: {
70
+ readonly first: "yellow";
71
+ readonly second: "white";
72
+ readonly third: "white";
73
+ readonly top3: "yellow";
74
+ readonly highlighted: "green";
75
+ readonly normal: undefined;
76
+ };
77
+ /**
78
+ * Box drawing characters for borders and frames
79
+ */
80
+ export declare const boxChars: {
81
+ readonly light: {
82
+ readonly topLeft: "┌";
83
+ readonly topRight: "┐";
84
+ readonly bottomLeft: "└";
85
+ readonly bottomRight: "┘";
86
+ readonly horizontal: "─";
87
+ readonly vertical: "│";
88
+ readonly teeDown: "┬";
89
+ readonly teeUp: "┴";
90
+ readonly teeRight: "├";
91
+ readonly teeLeft: "┤";
92
+ readonly cross: "┼";
93
+ };
94
+ readonly heavy: {
95
+ readonly topLeft: "┏";
96
+ readonly topRight: "┓";
97
+ readonly bottomLeft: "┗";
98
+ readonly bottomRight: "┛";
99
+ readonly horizontal: "━";
100
+ readonly vertical: "┃";
101
+ readonly teeDown: "┳";
102
+ readonly teeUp: "┻";
103
+ readonly teeRight: "┣";
104
+ readonly teeLeft: "┫";
105
+ readonly cross: "╋";
106
+ };
107
+ readonly double: {
108
+ readonly topLeft: "╔";
109
+ readonly topRight: "╗";
110
+ readonly bottomLeft: "╚";
111
+ readonly bottomRight: "╝";
112
+ readonly horizontal: "═";
113
+ readonly vertical: "║";
114
+ readonly teeDown: "╦";
115
+ readonly teeUp: "╩";
116
+ readonly teeRight: "╠";
117
+ readonly teeLeft: "╣";
118
+ readonly cross: "╬";
119
+ };
120
+ readonly rounded: {
121
+ readonly topLeft: "╭";
122
+ readonly topRight: "╮";
123
+ readonly bottomLeft: "╰";
124
+ readonly bottomRight: "╯";
125
+ readonly horizontal: "─";
126
+ readonly vertical: "│";
127
+ readonly teeDown: "┬";
128
+ readonly teeUp: "┴";
129
+ readonly teeRight: "├";
130
+ readonly teeLeft: "┤";
131
+ readonly cross: "┼";
132
+ };
133
+ };
134
+ /**
135
+ * Status indicator icons
136
+ */
137
+ export declare const statusIcons: {
138
+ readonly idle: "○";
139
+ readonly running: "●";
140
+ readonly paused: "◐";
141
+ readonly completed: "✓";
142
+ readonly errored: "✗";
143
+ readonly waiting_for_input: "?";
144
+ readonly starting: "◔";
145
+ readonly stopping: "◔";
146
+ readonly stopped: "○";
147
+ readonly crashed: "✗";
148
+ };
149
+ /**
150
+ * Alert/notification icons
151
+ */
152
+ export declare const alertIcons: {
153
+ readonly question: "?";
154
+ readonly confirmation: "!";
155
+ readonly error: "✗";
156
+ readonly permission: "⚿";
157
+ readonly info: "ℹ";
158
+ readonly success: "✓";
159
+ readonly warning: "⚠";
160
+ };
161
+ /**
162
+ * Navigation and action icons
163
+ */
164
+ export declare const navIcons: {
165
+ readonly arrowRight: "▸";
166
+ readonly arrowLeft: "◂";
167
+ readonly arrowUp: "▴";
168
+ readonly arrowDown: "▾";
169
+ readonly bullet: "•";
170
+ readonly checkbox: "☐";
171
+ readonly checkboxChecked: "☑";
172
+ readonly radio: "○";
173
+ readonly radioSelected: "●";
174
+ readonly pointer: "›";
175
+ readonly chevronRight: "»";
176
+ readonly chevronLeft: "«";
177
+ };
178
+ /**
179
+ * Progress and loading indicators
180
+ */
181
+ export declare const progressChars: {
182
+ readonly filled: "█";
183
+ readonly empty: "░";
184
+ readonly half: "▓";
185
+ readonly light: "▒";
186
+ readonly spinner: readonly ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"];
187
+ readonly dots: readonly ["⠁", "⠂", "⠄", "⡀", "⢀", "⠠", "⠐", "⠈"];
188
+ readonly braille: readonly ["⣾", "⣽", "⣻", "⢿", "⡿", "⣟", "⣯", "⣷"];
189
+ readonly clock: readonly ["🕐", "🕑", "🕒", "🕓", "🕔", "🕕", "🕖", "🕗", "🕘", "🕙", "🕚", "🕛"];
190
+ };
191
+ /**
192
+ * Game-specific characters
193
+ */
194
+ export declare const gameChars: {
195
+ readonly ball: "●";
196
+ readonly paddle: "█";
197
+ readonly block: "█";
198
+ readonly empty: " ";
199
+ readonly wall: "▓";
200
+ readonly snakeHead: "●";
201
+ readonly snakeBody: "○";
202
+ readonly food: "◆";
203
+ readonly tetrominoFilled: "█";
204
+ readonly tetrominoGhost: "▒";
205
+ readonly tetrominoEmpty: "·";
206
+ readonly mine: "✱";
207
+ readonly flag: "⚑";
208
+ readonly unknown: "■";
209
+ readonly revealed: "□";
210
+ };
211
+ /**
212
+ * Decorative elements
213
+ */
214
+ export declare const decorChars: {
215
+ readonly sparkle: "✦";
216
+ readonly star: "★";
217
+ readonly starEmpty: "☆";
218
+ readonly heart: "♥";
219
+ readonly diamond: "◆";
220
+ readonly club: "♣";
221
+ readonly spade: "♠";
222
+ readonly music: "♪";
223
+ readonly sun: "☀";
224
+ readonly moon: "☽";
225
+ readonly lightning: "⚡";
226
+ readonly fire: "🔥";
227
+ readonly trophy: "🏆";
228
+ };
229
+ /**
230
+ * Pre-configured border styles for Ink components
231
+ */
232
+ export declare const borderStyles: {
233
+ readonly default: "single";
234
+ readonly focused: "round";
235
+ readonly active: "double";
236
+ readonly alert: "round";
237
+ readonly panel: "single";
238
+ readonly card: "round";
239
+ readonly modal: "double";
240
+ };
241
+ /**
242
+ * Consistent spacing values
243
+ */
244
+ export declare const spacing: {
245
+ readonly none: 0;
246
+ readonly xs: 1;
247
+ readonly sm: 1;
248
+ readonly md: 2;
249
+ readonly lg: 3;
250
+ readonly xl: 4;
251
+ };
252
+ /**
253
+ * Get a spinner frame based on elapsed time
254
+ */
255
+ export declare function getSpinnerFrame(elapsedMs: number, type?: keyof typeof progressChars): string;
256
+ /**
257
+ * Create a progress bar string
258
+ */
259
+ export declare function createProgressBar(percentage: number, width?: number, filled?: string, empty?: string): string;
260
+ /**
261
+ * Create a horizontal divider line
262
+ */
263
+ export declare function createDivider(width: number, style?: keyof typeof boxChars): string;
264
+ /**
265
+ * Create a box frame (top or bottom line with corners)
266
+ */
267
+ export declare function createBoxLine(width: number, position: "top" | "bottom", style?: keyof typeof boxChars): string;
268
+ /**
269
+ * Get color for a status value
270
+ */
271
+ export declare function getStatusColor(status: string): string;
272
+ /**
273
+ * Get icon for a status value
274
+ */
275
+ export declare function getStatusIcon(status: string): string;
276
+ /**
277
+ * Get color for an alert type
278
+ */
279
+ export declare function getAlertColor(type: string): string;
280
+ /**
281
+ * Get icon for an alert type
282
+ */
283
+ export declare function getAlertIcon(type: string): string;
284
+ /**
285
+ * Get color for a rank position
286
+ */
287
+ export declare function getRankColor(position: number, isHighlighted?: boolean): string | undefined;
288
+ /**
289
+ * Truncate text with ellipsis
290
+ */
291
+ export declare function truncate(text: string, maxLength: number): string;
292
+ /**
293
+ * Pad text to center within a width
294
+ */
295
+ export declare function centerText(text: string, width: number): string;
296
+ export type ColorKey = keyof typeof colors;
297
+ export type StatusColorKey = keyof typeof statusColors;
298
+ export type AlertColorKey = keyof typeof alertColors;
299
+ export type BoxStyle = keyof typeof boxChars;
300
+ export type BorderStyle = keyof typeof borderStyles;
301
+ //# sourceMappingURL=theme.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../src/theme.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH;;GAEG;AACH,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;CAyBT,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;;CAWf,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,WAAW;;;;;;;CAOd,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,UAAU;;;;;;;CAOb,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,UAAU;;;;;;;CAOb,CAAC;AAMX;;GAEG;AACH,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyDX,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,WAAW;;;;;;;;;;;CAWd,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,UAAU;;;;;;;;CAQb,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,QAAQ;;;;;;;;;;;;;CAaX,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,aAAa;;;;;;;;;CAShB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;CAuBZ,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,UAAU;;;;;;;;;;;;;;CAcb,CAAC;AAMX;;GAEG;AACH,eAAO,MAAM,YAAY;;;;;;;;CAQf,CAAC;AAMX;;GAEG;AACH,eAAO,MAAM,OAAO;;;;;;;CAOV,CAAC;AAMX;;GAEG;AACH,wBAAgB,eAAe,CAC7B,SAAS,EAAE,MAAM,EACjB,IAAI,GAAE,MAAM,OAAO,aAAyB,GAC3C,MAAM,CAOR;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,MAAM,EAClB,KAAK,GAAE,MAAW,EAClB,MAAM,GAAE,MAA6B,EACrC,KAAK,GAAE,MAA4B,GAClC,MAAM,CAKR;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,MAAM,EACb,KAAK,GAAE,MAAM,OAAO,QAAkB,GACrC,MAAM,CAER;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,KAAK,GAAG,QAAQ,EAC1B,KAAK,GAAE,MAAM,OAAO,QAAkB,GACrC,MAAM,CAOR;AAMD;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAErD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAElD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,GAAE,OAAe,GAAG,MAAM,GAAG,SAAS,CAKjG;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAGhE;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAI9D;AAMD,MAAM,MAAM,QAAQ,GAAG,MAAM,OAAO,MAAM,CAAC;AAC3C,MAAM,MAAM,cAAc,GAAG,MAAM,OAAO,YAAY,CAAC;AACvD,MAAM,MAAM,aAAa,GAAG,MAAM,OAAO,WAAW,CAAC;AACrD,MAAM,MAAM,QAAQ,GAAG,MAAM,OAAO,QAAQ,CAAC;AAC7C,MAAM,MAAM,WAAW,GAAG,MAAM,OAAO,YAAY,CAAC"}
package/dist/theme.js ADDED
@@ -0,0 +1,372 @@
1
+ /**
2
+ * Theme System
3
+ *
4
+ * Centralized visual styling for a modern terminal aesthetic.
5
+ * Provides consistent colors, typography, spacing, and visual constants.
6
+ */
7
+ // ============================================================================
8
+ // COLOR PALETTE
9
+ // ============================================================================
10
+ /**
11
+ * Primary color palette - semantic colors for consistent UI
12
+ */
13
+ export const colors = {
14
+ // Brand colors
15
+ primary: "cyan",
16
+ secondary: "magenta",
17
+ accent: "yellow",
18
+ // Semantic colors
19
+ success: "green",
20
+ warning: "yellow",
21
+ error: "red",
22
+ info: "cyan",
23
+ // Neutrals
24
+ text: "white",
25
+ textMuted: "gray",
26
+ textDim: "gray",
27
+ border: "gray",
28
+ borderFocus: "cyan",
29
+ borderActive: "yellow",
30
+ // Background indicators (used with dim/inverse text)
31
+ bgHighlight: "cyan",
32
+ bgWarning: "yellow",
33
+ bgError: "red",
34
+ bgSuccess: "green",
35
+ };
36
+ /**
37
+ * Status colors for loop/process states
38
+ */
39
+ export const statusColors = {
40
+ idle: "gray",
41
+ running: "green",
42
+ paused: "yellow",
43
+ completed: "cyan",
44
+ errored: "red",
45
+ waiting_for_input: "magenta",
46
+ starting: "yellow",
47
+ stopping: "yellow",
48
+ stopped: "gray",
49
+ crashed: "red",
50
+ };
51
+ /**
52
+ * Alert type colors
53
+ */
54
+ export const alertColors = {
55
+ question: "cyan",
56
+ confirmation: "yellow",
57
+ error: "red",
58
+ permission: "magenta",
59
+ info: "cyan",
60
+ success: "green",
61
+ };
62
+ /**
63
+ * Game-specific colors
64
+ */
65
+ export const gameColors = {
66
+ player: "cyan",
67
+ opponent: "magenta",
68
+ item: "yellow",
69
+ obstacle: "red",
70
+ bonus: "green",
71
+ neutral: "gray",
72
+ };
73
+ /**
74
+ * Position ranking colors (for leaderboards)
75
+ */
76
+ export const rankColors = {
77
+ first: "yellow",
78
+ second: "white",
79
+ third: "white",
80
+ top3: "yellow",
81
+ highlighted: "green",
82
+ normal: undefined,
83
+ };
84
+ // ============================================================================
85
+ // UNICODE CHARACTERS
86
+ // ============================================================================
87
+ /**
88
+ * Box drawing characters for borders and frames
89
+ */
90
+ export const boxChars = {
91
+ // Light box drawing
92
+ light: {
93
+ topLeft: "┌",
94
+ topRight: "┐",
95
+ bottomLeft: "└",
96
+ bottomRight: "┘",
97
+ horizontal: "─",
98
+ vertical: "│",
99
+ teeDown: "┬",
100
+ teeUp: "┴",
101
+ teeRight: "├",
102
+ teeLeft: "┤",
103
+ cross: "┼",
104
+ },
105
+ // Heavy box drawing
106
+ heavy: {
107
+ topLeft: "┏",
108
+ topRight: "┓",
109
+ bottomLeft: "┗",
110
+ bottomRight: "┛",
111
+ horizontal: "━",
112
+ vertical: "┃",
113
+ teeDown: "┳",
114
+ teeUp: "┻",
115
+ teeRight: "┣",
116
+ teeLeft: "┫",
117
+ cross: "╋",
118
+ },
119
+ // Double line box drawing
120
+ double: {
121
+ topLeft: "╔",
122
+ topRight: "╗",
123
+ bottomLeft: "╚",
124
+ bottomRight: "╝",
125
+ horizontal: "═",
126
+ vertical: "║",
127
+ teeDown: "╦",
128
+ teeUp: "╩",
129
+ teeRight: "╠",
130
+ teeLeft: "╣",
131
+ cross: "╬",
132
+ },
133
+ // Rounded box drawing
134
+ rounded: {
135
+ topLeft: "╭",
136
+ topRight: "╮",
137
+ bottomLeft: "╰",
138
+ bottomRight: "╯",
139
+ horizontal: "─",
140
+ vertical: "│",
141
+ teeDown: "┬",
142
+ teeUp: "┴",
143
+ teeRight: "├",
144
+ teeLeft: "┤",
145
+ cross: "┼",
146
+ },
147
+ };
148
+ /**
149
+ * Status indicator icons
150
+ */
151
+ export const statusIcons = {
152
+ idle: "○",
153
+ running: "●",
154
+ paused: "◐",
155
+ completed: "✓",
156
+ errored: "✗",
157
+ waiting_for_input: "?",
158
+ starting: "◔",
159
+ stopping: "◔",
160
+ stopped: "○",
161
+ crashed: "✗",
162
+ };
163
+ /**
164
+ * Alert/notification icons
165
+ */
166
+ export const alertIcons = {
167
+ question: "?",
168
+ confirmation: "!",
169
+ error: "✗",
170
+ permission: "⚿",
171
+ info: "ℹ",
172
+ success: "✓",
173
+ warning: "⚠",
174
+ };
175
+ /**
176
+ * Navigation and action icons
177
+ */
178
+ export const navIcons = {
179
+ arrowRight: "▸",
180
+ arrowLeft: "◂",
181
+ arrowUp: "▴",
182
+ arrowDown: "▾",
183
+ bullet: "•",
184
+ checkbox: "☐",
185
+ checkboxChecked: "☑",
186
+ radio: "○",
187
+ radioSelected: "●",
188
+ pointer: "›",
189
+ chevronRight: "»",
190
+ chevronLeft: "«",
191
+ };
192
+ /**
193
+ * Progress and loading indicators
194
+ */
195
+ export const progressChars = {
196
+ filled: "█",
197
+ empty: "░",
198
+ half: "▓",
199
+ light: "▒",
200
+ spinner: ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"],
201
+ dots: ["⠁", "⠂", "⠄", "⡀", "⢀", "⠠", "⠐", "⠈"],
202
+ braille: ["⣾", "⣽", "⣻", "⢿", "⡿", "⣟", "⣯", "⣷"],
203
+ clock: ["🕐", "🕑", "🕒", "🕓", "🕔", "🕕", "🕖", "🕗", "🕘", "🕙", "🕚", "🕛"],
204
+ };
205
+ /**
206
+ * Game-specific characters
207
+ */
208
+ export const gameChars = {
209
+ // General
210
+ ball: "●",
211
+ paddle: "█",
212
+ block: "█",
213
+ empty: " ",
214
+ wall: "▓",
215
+ // Snake
216
+ snakeHead: "●",
217
+ snakeBody: "○",
218
+ food: "◆",
219
+ // Tetris
220
+ tetrominoFilled: "█",
221
+ tetrominoGhost: "▒",
222
+ tetrominoEmpty: "·",
223
+ // Minesweeper
224
+ mine: "✱",
225
+ flag: "⚑",
226
+ unknown: "■",
227
+ revealed: "□",
228
+ };
229
+ /**
230
+ * Decorative elements
231
+ */
232
+ export const decorChars = {
233
+ sparkle: "✦",
234
+ star: "★",
235
+ starEmpty: "☆",
236
+ heart: "♥",
237
+ diamond: "◆",
238
+ club: "♣",
239
+ spade: "♠",
240
+ music: "♪",
241
+ sun: "☀",
242
+ moon: "☽",
243
+ lightning: "⚡",
244
+ fire: "🔥",
245
+ trophy: "🏆",
246
+ };
247
+ // ============================================================================
248
+ // BORDER STYLES
249
+ // ============================================================================
250
+ /**
251
+ * Pre-configured border styles for Ink components
252
+ */
253
+ export const borderStyles = {
254
+ default: "single",
255
+ focused: "round",
256
+ active: "double",
257
+ alert: "round",
258
+ panel: "single",
259
+ card: "round",
260
+ modal: "double",
261
+ };
262
+ // ============================================================================
263
+ // SPACING
264
+ // ============================================================================
265
+ /**
266
+ * Consistent spacing values
267
+ */
268
+ export const spacing = {
269
+ none: 0,
270
+ xs: 1,
271
+ sm: 1,
272
+ md: 2,
273
+ lg: 3,
274
+ xl: 4,
275
+ };
276
+ // ============================================================================
277
+ // ANIMATION / VISUAL FEEDBACK
278
+ // ============================================================================
279
+ /**
280
+ * Get a spinner frame based on elapsed time
281
+ */
282
+ export function getSpinnerFrame(elapsedMs, type = "spinner") {
283
+ const chars = progressChars[type];
284
+ if (Array.isArray(chars)) {
285
+ const frameIndex = Math.floor(elapsedMs / 80) % chars.length;
286
+ return chars[frameIndex];
287
+ }
288
+ return chars;
289
+ }
290
+ /**
291
+ * Create a progress bar string
292
+ */
293
+ export function createProgressBar(percentage, width = 20, filled = progressChars.filled, empty = progressChars.empty) {
294
+ const clampedPct = Math.max(0, Math.min(100, percentage));
295
+ const filledCount = Math.round((clampedPct / 100) * width);
296
+ const emptyCount = width - filledCount;
297
+ return filled.repeat(filledCount) + empty.repeat(emptyCount);
298
+ }
299
+ /**
300
+ * Create a horizontal divider line
301
+ */
302
+ export function createDivider(width, style = "light") {
303
+ return boxChars[style].horizontal.repeat(width);
304
+ }
305
+ /**
306
+ * Create a box frame (top or bottom line with corners)
307
+ */
308
+ export function createBoxLine(width, position, style = "light") {
309
+ const chars = boxChars[style];
310
+ const innerWidth = Math.max(0, width - 2);
311
+ if (position === "top") {
312
+ return chars.topLeft + chars.horizontal.repeat(innerWidth) + chars.topRight;
313
+ }
314
+ return chars.bottomLeft + chars.horizontal.repeat(innerWidth) + chars.bottomRight;
315
+ }
316
+ // ============================================================================
317
+ // UTILITIES
318
+ // ============================================================================
319
+ /**
320
+ * Get color for a status value
321
+ */
322
+ export function getStatusColor(status) {
323
+ return statusColors[status] ?? colors.textMuted;
324
+ }
325
+ /**
326
+ * Get icon for a status value
327
+ */
328
+ export function getStatusIcon(status) {
329
+ return statusIcons[status] ?? "?";
330
+ }
331
+ /**
332
+ * Get color for an alert type
333
+ */
334
+ export function getAlertColor(type) {
335
+ return alertColors[type] ?? colors.info;
336
+ }
337
+ /**
338
+ * Get icon for an alert type
339
+ */
340
+ export function getAlertIcon(type) {
341
+ return alertIcons[type] ?? alertIcons.info;
342
+ }
343
+ /**
344
+ * Get color for a rank position
345
+ */
346
+ export function getRankColor(position, isHighlighted = false) {
347
+ if (isHighlighted)
348
+ return rankColors.highlighted;
349
+ if (position === 1)
350
+ return rankColors.first;
351
+ if (position <= 3)
352
+ return rankColors.top3;
353
+ return rankColors.normal;
354
+ }
355
+ /**
356
+ * Truncate text with ellipsis
357
+ */
358
+ export function truncate(text, maxLength) {
359
+ if (text.length <= maxLength)
360
+ return text;
361
+ return text.slice(0, maxLength - 1) + "…";
362
+ }
363
+ /**
364
+ * Pad text to center within a width
365
+ */
366
+ export function centerText(text, width) {
367
+ if (text.length >= width)
368
+ return text;
369
+ const padding = Math.floor((width - text.length) / 2);
370
+ return " ".repeat(padding) + text + " ".repeat(width - text.length - padding);
371
+ }
372
+ //# sourceMappingURL=theme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme.js","sourceRoot":"","sources":["../src/theme.ts"],"names":[],"mappings":"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"}