@itcase/config 1.6.76 → 1.6.77

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.
@@ -1,265 +1,380 @@
1
- // Extracted from the classic dancing banana GIF (Trym Stene, 1999).
2
- // 8 frames, 24×25px — fixed canvas, solid 2-space blocks.
1
+ // Native pixels from the classic dancing banana GIF (Trym Stene, 1999).
2
+ // 33×35px, 8 frames — 2-space cells, integer scale to the terminal.
3
3
 
4
4
  const RESET = '\x1b[0m'
5
- const FRAME_WIDTH = 24
6
- const FRAME_HEIGHT = 25
5
+ const FRAME_WIDTH = 33
6
+ const FRAME_HEIGHT = 35
7
7
 
8
8
  const COLORS = {
9
9
  B: 236,
10
- d: 136,
11
- E: 255,
10
+ d: 142,
12
11
  R: 196,
13
- W: 255,
12
+ W: 231,
14
13
  Y: 226,
15
- y: 214,
14
+ y: 184,
16
15
  }
17
16
 
18
17
  const FRAMES = [
19
18
  [
20
- '........................',
21
- '........................',
22
- '........................',
23
- '........................',
24
- '............BB..........',
25
- '............BBB.........',
26
- '............dYB.........',
27
- '............YYYB........',
28
- '............YYYBB.......',
29
- '..........BBBBYyB.......',
30
- '.........BEBEEByy.......',
31
- '.........BEBEEByy.......',
32
- '..........BBBBYBy.......',
33
- '...........BYYBBy.......',
34
- '............RRRyy.......',
35
- '............RBByy.......',
36
- '.......BB..BYYYyB.BB....',
37
- '......BEB.BBYYYyBBBEB...',
38
- '......BEE.BYYYyBBBEEB...',
39
- '.......BBBBYyyyBWBBB....',
40
- '........BBYYyyBBWB......',
41
- '.......BBBBBBBBBB.......',
42
- '.......BB......BB.......',
43
- '......BWWBB..BBWWB......',
44
- '.......BBBB..BBBB.......',
19
+ '.................................',
20
+ '.................................',
21
+ '.................................',
22
+ '.................................',
23
+ '.................................',
24
+ '.................................',
25
+ '.................BB..............',
26
+ '................BBBB.............',
27
+ '................BddB.............',
28
+ '................BdYBB............',
29
+ '................BYYYBB...........',
30
+ '................BYYYyBB..........',
31
+ '................BYYYyyB..........',
32
+ '..............BBBBBYYyBB.........',
33
+ '.............BWBWWWBYyyB.........',
34
+ '.............BBBBWWBYyyB.........',
35
+ '.............BWBWWWBYyyB.........',
36
+ '..............BBBBBYYByB.........',
37
+ '...............BYYYBBByB.........',
38
+ '...............BBBBRRByB.........',
39
+ '................BRRRByyB.........',
40
+ '................BRBBYyyB.........',
41
+ '...............BBBYYYyyB.........',
42
+ '.........BBB...BYYYYyyBB.BBB.....',
43
+ '........BWWBB.BBYYYYyyBWBBWWB....',
44
+ '........BWWWB.BYYYYyyBBWBWWWB....',
45
+ '........BWWBB.BYYYyyyBWWBBWWB....',
46
+ '.........BBBWBBYYyyyBBWWBBBB.....',
47
+ '...........BWBYYyyyBBBWBB........',
48
+ '...........BBBByyBBBWBBB.........',
49
+ '..........BBBBBBBBBBBBB..........',
50
+ '.........BBB........BBBB.........',
51
+ '........BWWWBBB...BBBWWWB........',
52
+ '........BWWWWWB...BWWWWWB........',
53
+ '.........BBBBBB...BBBBBB.........',
45
54
  ],
46
55
  [
47
- '........................',
48
- '........................',
49
- '........................',
50
- '............BB..........',
51
- '............ddB.........',
52
- '............dYB.........',
53
- '............YYYBB.......',
54
- '............YYYyB.......',
55
- '..........BBBBYyB.......',
56
- '.........BBBWWByy.......',
57
- '.........BEBEEByy.......',
58
- '...........BYYBBy.......',
59
- '...........BBBRBy.......',
60
- '............RRRyy.......',
61
- '...........BBYYyy.......',
62
- '.....BB....BYYYyy...BB..',
63
- '....BEEB..BBYYYyB..BEEB.',
64
- '....BEEB..BYYYyBB..BEEB.',
65
- '.....BBBBBBYYyyBB.BBBB..',
66
- '.........BYYyyB.........',
67
- '.........BByBBB.........',
68
- '........B...............',
69
- '.......BB......BB.......',
70
- '......BWWBB..BBWWB......',
71
- '.......BBB....BBB.......',
56
+ '.................................',
57
+ '.................................',
58
+ '.................................',
59
+ '.................................',
60
+ '.................BB..............',
61
+ '................BBBB.............',
62
+ '................BddB.............',
63
+ '................BdYBB............',
64
+ '................BYYYBB...........',
65
+ '................BYYYyBB..........',
66
+ '................BYYYyyB..........',
67
+ '..............BBBBBYYyBB.........',
68
+ '.............BWBWWWBYyyB.........',
69
+ '.............BBBBWWBYyyB.........',
70
+ '.............BWBWWWBYyyB.........',
71
+ '..............BBBBBYYByB.........',
72
+ '...............BYYYBBByB.........',
73
+ '...............BBBBRRByB.........',
74
+ '................BRRRByyB.........',
75
+ '................BRBBYyyB.........',
76
+ '...............BBBYYYyyB.........',
77
+ '.......BBB.....BYYYYYyyB...BBB...',
78
+ '......BWWBB....BYYYYyyBB..BBWWB..',
79
+ '......BWWWB...BBYYYYyyB...BWWWB..',
80
+ '......BWWBB...BYYYYyyBB...BBWWB..',
81
+ '.......BBBBB.BBYYYyyyBBB.BBBBB...',
82
+ '...........BBBBYYyyyBB.BBB.......',
83
+ '.............BYYyyyBB............',
84
+ '............BBByyBBB.............',
85
+ '...........BBBBBBB.BB............',
86
+ '...........B........B............',
87
+ '.........BBBB.......BBBB.........',
88
+ '........BWWWWBB...BBWWWWB........',
89
+ '........BWWWWWB...BWWWWWB........',
90
+ '.........BBBBB.....BBBBB.........',
72
91
  ],
73
92
  [
74
- '............B...........',
75
- '...........BdB..........',
76
- '...........BdBB.........',
77
- '..........BBYyB.........',
78
- '..........BYYYy.........',
79
- '.BBB.....BBBBBB......BB.',
80
- '.WWW.....WBWWBWB....BWWB',
81
- '.WWB.....WWWWWWB....BBWB',
82
- '.BBB.....BBBBBBB....BBB.',
83
- '.....BB..BBBBBRB.BBB....',
84
- '.......BBBRRRRBB.B......',
85
- '.........BYBBYYB........',
86
- '.........BYYYYyB........',
87
- '.........BYYYYyB........',
88
- '.........BYYYYy.........',
89
- '.........BYYYyy.........',
90
- '.........BYYyyB.........',
91
- '.........BYYyBB.........',
92
- '.........BBBBB..........',
93
- '..........B..B..........',
94
- '.........BB..BB.........',
95
- '.........B....B.........',
96
- '.......BBBB..BBBB.......',
97
- '......BWWWB..BWWWB......',
98
- '......BBB......BBB......',
93
+ '................BB...............',
94
+ '...............BddB..............',
95
+ '...............BddB..............',
96
+ '...............BydBB.............',
97
+ '..............BBYYyB.............',
98
+ '..............BYYYyBB............',
99
+ '..............BYYYYyB............',
100
+ '..BBB........BBBYBBBB........BBB.',
101
+ '.BWWBB......BWWWBWWWBB......BBWWB',
102
+ '.BWWWB......BWBWBWBWBB......BWWWB',
103
+ '.BWWBB......BWWWBWWWBB......BBWWB',
104
+ '..BBBB.......BBBYBBByB......BBBB.',
105
+ '.....BBB.....BYYYYYdBB....BBB....',
106
+ '.......BBB...BBBBBBRBB..BBB......',
107
+ '.........BBB.BRRRRRByB.BB........',
108
+ '...........BBBBRRRBYyBBB.........',
109
+ '.............BYBBBYYyB...........',
110
+ '.............BYYYYYyyB...........',
111
+ '.............BYYYYYyyB...........',
112
+ '.............BYYYYYyBB...........',
113
+ '.............BYYYYYyB............',
114
+ '.............BYYYYyyB............',
115
+ '.............BYYYYyBB............',
116
+ '.............BYYYyyB.............',
117
+ '.............BYYyyBB.............',
118
+ '.............BBByBB..............',
119
+ '..............BBBBB..............',
120
+ '..............B...B..............',
121
+ '.............BB...BB.............',
122
+ '.............B.....B.............',
123
+ '.............B.....B.............',
124
+ '..........BBBBB...BBBBB..........',
125
+ '........BBWWWWB...BWWWWBB........',
126
+ '........BWWWWBB...BBWWWWB........',
127
+ '........BBBBB.......BBBBB........',
99
128
  ],
100
129
  [
101
- '........................',
102
- '..........BB............',
103
- '.........Bdd............',
104
- '.........Bdd............',
105
- '.........yYYB...........',
106
- '........ByYYB...........',
107
- '........BBBYBB..........',
108
- '.......BBWWBWWB.........',
109
- '.......BBBWBBWB.........',
110
- '.WWB...ByBBYBB...BWW....',
111
- '.EEE...BBYYYYB...EEE....',
112
- '.BBB...ByRRRRB...BBB....',
113
- '....B..ByBRRBB..B.......',
114
- '....BB.ByYBBYB.BB.......',
115
- '.......BBYYYYB..........',
116
- '........BYYYYB..........',
117
- '........ByYYYB..........',
118
- '.........yyYYB..........',
119
- '.........ByyYB..........',
120
- '.........BBBBB..........',
121
- '.........B...B..........',
122
- '..............B.........',
123
- '.......BB.....BBB.......',
124
- '......BWWBB..BBWWB......',
125
- '......BBBB....BBBB......',
130
+ '.................................',
131
+ '.................................',
132
+ '..............BB.................',
133
+ '.............BddB................',
134
+ '.............BddB................',
135
+ '............BBdyB................',
136
+ '............ByYYBB...............',
137
+ '...........BByYYYB...............',
138
+ '...........ByYYYYB...............',
139
+ '...........BBBBYBBB..............',
140
+ '..........BBWWWBWWWB.............',
141
+ '..........BBWBWBWBWB.............',
142
+ '..BB......BBWWWBWWWB....BBB......',
143
+ '.BWWBB....ByBBBYBBB....BBWWB.....',
144
+ '.BWWWB....BBdYYYYYB....BWWWB.....',
145
+ '.BWWBB....BBRBBBBBB....BBWWB.....',
146
+ '..BBBB....ByBRRRRRB....BBBB......',
147
+ '.....BB...ByYBRRRBB...BB.........',
148
+ '......BB..ByYYBBBYB..BB..........',
149
+ '.......BBBByyYYYYYBBBB...........',
150
+ '..........BByYYYYYB..............',
151
+ '...........ByYYYYYB..............',
152
+ '...........ByyYYYYB..............',
153
+ '...........BByYYYYB..............',
154
+ '............ByyYYYB..............',
155
+ '............BByyYYB..............',
156
+ '.............BByBBB..............',
157
+ '.............BBBBBB..............',
158
+ '.............B....B..............',
159
+ '............BB....BB.............',
160
+ '............B......B.............',
161
+ '..........BBB......BBBB..........',
162
+ '........BBWWWBB...BBWWWBB........',
163
+ '........BWWWWWB...BWWWWWB........',
164
+ '........BBBBBB.....BBBBBB........',
126
165
  ],
127
166
  [
128
- '........................',
129
- '........................',
130
- '........................',
131
- '........................',
132
- '..........BB............',
133
- '.........BBB............',
134
- '.........BYd............',
135
- '........BYYY............',
136
- '.......BBYYY............',
137
- '.......ByYBBBB..........',
138
- '.......yyBEEBEB.........',
139
- '.......yyBEEBEB.........',
140
- '.......yBYBBBB..........',
141
- '.......yBBYYB...........',
142
- '.......yyRRR............',
143
- '.......yyBBR............',
144
- '....BB.ByYYYB..BB.......',
145
- '...BEBBByYYYBB.BEB......',
146
- '...BEEBBByYYYB.EEB......',
147
- '....BBBWByyyYBBBB.......',
148
- '......BWBByyYYBB........',
149
- '.......BBBBBBBBBB.......',
150
- '.......BB......BB.......',
151
- '......BWWBB..BBWWB......',
152
- '.......BBBB..BBBB.......',
167
+ '.................................',
168
+ '.................................',
169
+ '.................................',
170
+ '.................................',
171
+ '.................................',
172
+ '.................................',
173
+ '..............BB.................',
174
+ '.............BBBB................',
175
+ '.............BddB................',
176
+ '............BBYdB................',
177
+ '...........BBYYYB................',
178
+ '..........BByYYYB................',
179
+ '..........ByyYYYB................',
180
+ '.........BByYYBBBBB..............',
181
+ '.........ByyYBWWWBWB.............',
182
+ '.........ByyYBWWBBBB.............',
183
+ '.........ByyYBWWWBWB.............',
184
+ '.........ByBYYBBBBB..............',
185
+ '.........ByBBBYYYB...............',
186
+ '.........ByBRRBBBB...............',
187
+ '.........ByyBRRRB................',
188
+ '.........ByyYBBRB................',
189
+ '.........ByyYYYBBB...............',
190
+ '.....BBB.BByyYYYYB...BBB.........',
191
+ '....BWWBBWByyYYYYBB.BBWWB........',
192
+ '....BWWWBWBByyYYYYB.BWWWB........',
193
+ '....BWWBBWWByyyYYYB.BBWWB........',
194
+ '.....BBBBWWBByyyYYBB.BBB.........',
195
+ '........BBWBBByyyYYB.B...........',
196
+ '.........BBBWBBByyBBBB...........',
197
+ '..........BBBBBBBBBBBBB..........',
198
+ '.........BBBB........BBB.........',
199
+ '........BWWWBBB...BBBWWWB........',
200
+ '........BWWWWWB...BWWWWWB........',
201
+ '.........BBBBBB...BBBBBB.........',
153
202
  ],
154
203
  [
155
- '........................',
156
- '........................',
157
- '........................',
158
- '..........BB............',
159
- '.........Bdd............',
160
- '.........BYd............',
161
- '.......BBYYY............',
162
- '.......ByYYY............',
163
- '.......ByYBBBB..........',
164
- '.......yyBWWBBB.........',
165
- '.......yyBEEBEB.........',
166
- '.......yBBYYB...........',
167
- '.......yBRBBB...........',
168
- '.......yyRRR............',
169
- '.......yyYYBB...........',
170
- '..BB...yyYYYB....BB.....',
171
- '.BEEB..ByYYYBB..BEEB....',
172
- '.BEEB..BByYYYB..BEEB....',
173
- '..BBBB.BByyYYBBBBBB.....',
174
- '.........ByyYYB.........',
175
- '.........BBByBB.........',
176
- '...............B........',
177
- '.......BB......BB.......',
178
- '......BWWBB..BBWWB......',
179
- '.......BBB....BBB.......',
204
+ '.................................',
205
+ '.................................',
206
+ '.................................',
207
+ '.................................',
208
+ '..............BB.................',
209
+ '.............BBBB................',
210
+ '.............BddB................',
211
+ '............BBYdB................',
212
+ '...........BBYYYB................',
213
+ '..........BByYYYB................',
214
+ '..........ByyYYYB................',
215
+ '.........BByYYBBBBB..............',
216
+ '.........ByyYBWWWBWB.............',
217
+ '.........ByyYBWWBBBB.............',
218
+ '.........ByyYBWWWBWB.............',
219
+ '.........ByBYYBBBBB..............',
220
+ '.........ByBBBYYYB...............',
221
+ '.........ByBRRBBBB...............',
222
+ '.........ByyBRRRB................',
223
+ '.........ByyYBBRB................',
224
+ '.........ByyYYYBBB...............',
225
+ '...BBB...ByyYYYYYB.....BBB.......',
226
+ '..BWWBB..BByyYYYYB....BBWWB......',
227
+ '..BWWWB...ByyYYYYBB...BWWWB......',
228
+ '..BWWBB...BByyYYYYB...BBWWB......',
229
+ '...BBBBB.BBByyyYYYBB.BBBBB.......',
230
+ '.......BBB.BByyyYYBBBB...........',
231
+ '............BByyyYYB.............',
232
+ '.............BBByyBBB............',
233
+ '............BB.BBBBBBB...........',
234
+ '............B........B...........',
235
+ '.........BBBB.......BBBB.........',
236
+ '........BWWWWBB...BBWWWWB........',
237
+ '........BWWWWWB...BWWWWWB........',
238
+ '.........BBBBB.....BBBBB.........',
180
239
  ],
181
240
  [
182
- '...........B............',
183
- '..........BdB...........',
184
- '.........BBdB...........',
185
- '.........ByYBB..........',
186
- '.........yYYYB..........',
187
- '.BB......BBBBBB.....BBB.',
188
- 'BWWB....BWBWWBW.....WWW.',
189
- 'BWBB....BWWWWWW.....BWW.',
190
- '.BBB....BBBBBBB.....BBB.',
191
- '....BBB.BRBBBBB..BB.....',
192
- '......B.BBRRRRBBB.......',
193
- '........BYYBBYB.........',
194
- '........ByYYYYB.........',
195
- '........ByYYYYB.........',
196
- '.........yYYYYB.........',
197
- '.........yyYYYB.........',
198
- '.........ByyYYB.........',
199
- '.........BByYYB.........',
200
- '..........BBBBB.........',
201
- '..........B..B..........',
202
- '.........BB..BB.........',
203
- '.........B....B.........',
204
- '.......BBBB..BBBB.......',
205
- '......BWWWB..BWWWB......',
206
- '......BBB......BBB......',
241
+ '...............BB................',
242
+ '..............BddB...............',
243
+ '..............BddB...............',
244
+ '.............BBdyB...............',
245
+ '.............ByYYBB..............',
246
+ '............BByYYYB..............',
247
+ '............ByYYYYB..............',
248
+ '.BBB........BBBBYBBB........BBB..',
249
+ 'BWWBB......BBWWWBWWWB......BBWWB.',
250
+ 'BWWWB......BBWBWBWBWB......BWWWB.',
251
+ 'BWWBB......BBWWWBWWWB......BBWWB.',
252
+ '.BBBB......ByBBBYBBB.......BBBB..',
253
+ '....BBB....BBdYYYYYB.....BBB.....',
254
+ '......BBB..BBRBBBBBB...BBB.......',
255
+ '........BB.ByBRRRRRB.BBB.........',
256
+ '.........BBByYBRRRBBBB...........',
257
+ '...........ByYYBBBYB.............',
258
+ '...........ByyYYYYYB.............',
259
+ '...........ByyYYYYYB.............',
260
+ '...........BByYYYYYB.............',
261
+ '............ByYYYYYB.............',
262
+ '............ByyYYYYB.............',
263
+ '............BByYYYYB.............',
264
+ '.............ByyYYYB.............',
265
+ '.............BByyYYB.............',
266
+ '..............BByBBB.............',
267
+ '..............BBBBB..............',
268
+ '..............B...B..............',
269
+ '.............BB...BB.............',
270
+ '.............B.....B.............',
271
+ '.............B.....B.............',
272
+ '..........BBBBB...BBBBB..........',
273
+ '........BBWWWWB...BWWWWBB........',
274
+ '........BWWWWBB...BBWWWWB........',
275
+ '........BBBBB.......BBBBB........',
207
276
  ],
208
277
  [
209
- '........................',
210
- '............BB..........',
211
- '............ddB.........',
212
- '............ddB.........',
213
- '...........BYYy.........',
214
- '...........BYYyB........',
215
- '..........BBYBBB........',
216
- '.........BWWBWWBB.......',
217
- '.........BWBBWBBB.......',
218
- '....WWB...BBYBByB...BWW.',
219
- '....EEE...BYYYYBB...EEE.',
220
- '....BBB...BRRRRyB...BBB.',
221
- '.......B..BBRRByB..B....',
222
- '.......BB.BYBBYyB.BB....',
223
- '..........BYYYYBB.......',
224
- '..........BYYYYB........',
225
- '..........BYYYyB........',
226
- '..........BYYyy.........',
227
- '..........BYyyB.........',
228
- '..........BBBBB.........',
229
- '..........B...B.........',
230
- '.........B..............',
231
- '.......BBB.....BB.......',
232
- '......BWWBB..BBWWB......',
233
- '......BBBB....BBBB......',
278
+ '.................................',
279
+ '.................................',
280
+ '.................BB..............',
281
+ '................BddB.............',
282
+ '................BddB.............',
283
+ '................BydBB............',
284
+ '...............BBYYyB............',
285
+ '...............BYYYyBB...........',
286
+ '...............BYYYYyB...........',
287
+ '..............BBBYBBBB...........',
288
+ '.............BWWWBWWWBB..........',
289
+ '.............BWBWBWBWBB..........',
290
+ '......BBB....BWWWBWWWBB.....BBB..',
291
+ '.....BWWBB....BBBYBBByB....BBWWB.',
292
+ '.....BWWWB....BYYYYYdBB....BWWWB.',
293
+ '.....BWWBB....BBBBBBRBB....BBWWB.',
294
+ '......BBBB....BRRRRRByB....BBBB..',
295
+ '.........BB...BBRRRBYyB...BB.....',
296
+ '..........BB..BYBBBYYyB..BB......',
297
+ '...........BBBBYYYYYyyBBBB.......',
298
+ '..............BYYYYYyBB..........',
299
+ '..............BYYYYYyB...........',
300
+ '..............BYYYYyyB...........',
301
+ '..............BYYYYyBB...........',
302
+ '..............BYYYyyB............',
303
+ '..............BYYyyBB............',
304
+ '..............BBByBB.............',
305
+ '..............BBBBBB.............',
306
+ '..............B....B.............',
307
+ '.............BB....BB............',
308
+ '.............B......B............',
309
+ '..........BBBB......BBB..........',
310
+ '........BBWWWBB...BBWWWBB........',
311
+ '........BWWWWWB...BWWWWWB........',
312
+ '........BBBBBB.....BBBBBB........',
234
313
  ],
235
314
  ]
236
315
 
237
- function renderRow(row) {
316
+ function pickIndexes(srcSize, maxSize) {
317
+ if (srcSize <= maxSize) {
318
+ return Array.from({ length: srcSize }, (_, i) => i)
319
+ }
320
+ return Array.from({ length: maxSize }, (_, i) =>
321
+ Math.round((i * (srcSize - 1)) / (maxSize - 1)),
322
+ )
323
+ }
324
+
325
+ function cellScale(terminalColumns, terminalRows) {
326
+ const maxCols = Math.max(8, Math.floor((terminalColumns - 1) / 2))
327
+ const maxRows = Math.max(8, (terminalRows || 24) - 2)
328
+ return Math.max(
329
+ 1,
330
+ Math.min(
331
+ Math.floor(maxCols / FRAME_WIDTH),
332
+ Math.floor(maxRows / FRAME_HEIGHT),
333
+ ),
334
+ )
335
+ }
336
+
337
+ function renderRow(row, colIndexes, scale) {
238
338
  const padded = row.padEnd(FRAME_WIDTH, '.').slice(0, FRAME_WIDTH)
239
339
  let line = ''
240
- for (const cell of padded) {
241
- if (cell === '.') {
242
- line += ' '
243
- continue
244
- }
245
- const code = COLORS[cell]
246
- if (code === undefined) {
340
+ let last = -1
341
+ for (const x of colIndexes) {
342
+ const code = padded[x] === '.' ? undefined : COLORS[padded[x]]
343
+ for (let s = 0; s < scale; s += 1) {
344
+ if (code === undefined) {
345
+ if (last !== -1) {
346
+ line += RESET
347
+ last = -1
348
+ }
349
+ line += ' '
350
+ continue
351
+ }
352
+ if (code !== last) {
353
+ line += `\x1b[48;5;${code}m`
354
+ last = code
355
+ }
247
356
  line += ' '
248
- continue
249
357
  }
250
- const bold = cell === 'E' ? '\x1b[1m' : ''
251
- line += `${bold}\x1b[48;5;${code}m ${RESET}`
252
358
  }
359
+ if (last !== -1) line += RESET
253
360
  return line
254
361
  }
255
362
 
256
- export function getBananaFrame(index) {
363
+ export function getBananaFrame(index, terminalColumns = 80, terminalRows = 24) {
364
+ const scale = cellScale(terminalColumns, terminalRows)
365
+ const maxCols = Math.max(8, Math.floor((terminalColumns - 1) / (2 * scale)))
366
+ const maxRows = Math.max(8, Math.floor(((terminalRows || 24) - 2) / scale))
367
+ const colIndexes = pickIndexes(FRAME_WIDTH, maxCols)
368
+ const rowIndexes = pickIndexes(FRAME_HEIGHT, maxRows)
257
369
  const frame = FRAMES[index % FRAMES.length]
258
- const lines = frame.map(renderRow)
259
- while (lines.length < FRAME_HEIGHT) {
260
- lines.push(' '.repeat(FRAME_WIDTH * 2))
370
+ const lines = []
371
+ for (const y of rowIndexes) {
372
+ const rendered = renderRow(frame[y], colIndexes, scale)
373
+ for (let s = 0; s < scale; s += 1) {
374
+ lines.push(rendered)
375
+ }
261
376
  }
262
- return lines.slice(0, FRAME_HEIGHT).join('\n')
377
+ return lines.join('\n')
263
378
  }
264
379
 
265
380
  export function getBananaFrameCount() {