redlinegate 0.0.2 → 0.0.3

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 (63) hide show
  1. package/README.md +2 -2
  2. package/dist/bin/redline.js +247 -42
  3. package/dist/bin/redline.js.map +1 -1
  4. package/dist/commands/init.js +274 -26
  5. package/dist/commands/init.js.map +1 -1
  6. package/dist/commands/remove.js +40 -0
  7. package/dist/commands/remove.js.map +1 -1
  8. package/dist/commands/status.js +94 -0
  9. package/dist/commands/status.js.map +1 -0
  10. package/dist/config/redline-json.js +18 -1
  11. package/dist/config/redline-json.js.map +1 -1
  12. package/dist/core/git.js +50 -3
  13. package/dist/core/git.js.map +1 -1
  14. package/dist/core/version.js +6 -0
  15. package/dist/core/version.js.map +1 -1
  16. package/dist/detect/setup.js +200 -0
  17. package/dist/detect/setup.js.map +1 -0
  18. package/dist/detect/stack.js +56 -17
  19. package/dist/detect/stack.js.map +1 -1
  20. package/dist/metrics/options.js +0 -9
  21. package/dist/metrics/options.js.map +1 -1
  22. package/dist/platforms/azure/install.js +1 -5
  23. package/dist/platforms/azure/install.js.map +1 -1
  24. package/dist/platforms/azure/verify.js +4 -2
  25. package/dist/platforms/azure/verify.js.map +1 -1
  26. package/dist/platforms/github/install.js +110 -22
  27. package/dist/platforms/github/install.js.map +1 -1
  28. package/dist/platforms/github/vendor.js +81 -0
  29. package/dist/platforms/github/vendor.js.map +1 -0
  30. package/dist/platforms/github/verify.js +17 -2
  31. package/dist/platforms/github/verify.js.map +1 -1
  32. package/dist/platforms/types.js +4 -0
  33. package/dist/platforms/types.js.map +1 -1
  34. package/dist/render/standards.js +8 -1
  35. package/dist/render/standards.js.map +1 -1
  36. package/dist/render/vendors.js +9 -52
  37. package/dist/render/vendors.js.map +1 -1
  38. package/dist/rules/catalogue.js +127 -0
  39. package/dist/rules/catalogue.js.map +1 -0
  40. package/dist/ui/facts.js +30 -1
  41. package/dist/ui/facts.js.map +1 -1
  42. package/dist/ui/prompt.js +137 -8
  43. package/dist/ui/prompt.js.map +1 -1
  44. package/dist/ui/report.js +214 -0
  45. package/dist/ui/report.js.map +1 -0
  46. package/dist/ui/tty.js +358 -25
  47. package/dist/ui/tty.js.map +1 -1
  48. package/dist/ui/wizard.js +133 -19
  49. package/dist/ui/wizard.js.map +1 -1
  50. package/dist/verify/remote.js +33 -0
  51. package/dist/verify/remote.js.map +1 -1
  52. package/package.json +4 -1
  53. package/scripts/fetch-stars.mjs +92 -0
  54. package/scripts/lib/rules.d.mts +18 -0
  55. package/scripts/publish-local.mjs +183 -0
  56. package/standards/manifest.json +79 -8
  57. package/standards/stacks/angular.md +57 -0
  58. package/standards/stacks/dom.md +61 -0
  59. package/standards/stacks/svelte.md +45 -0
  60. package/standards/stacks/vue.md +54 -0
  61. package/templates/redline.yml +4 -0
  62. package/workflows/redline-gate.yml +28 -4
  63. package/scripts/measure-context.mjs +0 -101
package/dist/ui/tty.js CHANGED
@@ -29,10 +29,64 @@ export function colorEnabled(env, isTty) {
29
29
  const ESC = '\x1b[';
30
30
  const wrap = (open, close) => (text) => `${ESC}${open}m${text}${ESC}${close}m`;
31
31
  const plain = (text) => text;
32
- export function palette(on) {
32
+ /**
33
+ * How precisely this terminal can be asked for a colour.
34
+ *
35
+ * Only truecolor renders the brand red exactly. The 256-colour cube's nearest
36
+ * neighbour is #d70000, fifteen points of red away and indistinguishable in
37
+ * practice; the sixteen-colour fallback is whatever the terminal theme calls
38
+ * "red", which on a Solarized profile is not this red at all — and that is
39
+ * correct, because a theme the operator chose outranks ours.
40
+ */
41
+ export function colorDepth(env) {
42
+ const colorterm = env.COLORTERM ?? '';
43
+ if (/truecolor|24bit/i.test(colorterm))
44
+ return 'truecolor';
45
+ const term = env.TERM ?? '';
46
+ if (/-256(color)?$/.test(term))
47
+ return 'ansi256';
48
+ return 'basic';
49
+ }
50
+ // #e60000 — the same value web/app/globals.css calls --red. One brand red, and
51
+ // the CLI had been wearing the terminal's generic one.
52
+ const BRAND = { r: 230, g: 0, b: 0 };
53
+ const BRAND_256 = 160;
54
+ const redOpen = (depth) => {
55
+ switch (depth) {
56
+ case 'truecolor':
57
+ return `38;2;${BRAND.r};${BRAND.g};${BRAND.b}`;
58
+ case 'ansi256':
59
+ return `38;5;${BRAND_256}`;
60
+ default:
61
+ return '31';
62
+ }
63
+ };
64
+ // The wordmark is drawn in white, falling away to grey down the letterforms.
65
+ // Truecolor gets the real ramp; 256 colours get the greyscale cube, which has
66
+ // twenty-four greys and so loses nothing worth having; sixteen colours get the
67
+ // only three shades they have — bright white, white, and whatever the terminal
68
+ // calls "bright black".
69
+ const RAMP_RGB = [245, 214, 180, 148, 120];
70
+ const RAMP_256 = [255, 252, 249, 246, 243];
71
+ function shadeOf(depth) {
72
+ return (level) => {
73
+ const index = Math.max(0, Math.min(RAMP_RGB.length - 1, level));
74
+ if (depth === 'truecolor') {
75
+ const v = RAMP_RGB[index];
76
+ return wrap(`38;2;${v};${v};${v}`, '39');
77
+ }
78
+ if (depth === 'ansi256')
79
+ return wrap(`38;5;${RAMP_256[index]}`, '39');
80
+ if (index === 0)
81
+ return wrap('97', '39');
82
+ return index < 3 ? wrap('37', '39') : wrap('90', '39');
83
+ };
84
+ }
85
+ export function palette(on, depth = 'basic') {
33
86
  if (!on) {
34
87
  return {
35
88
  red: plain,
89
+ shade: () => plain,
36
90
  green: plain,
37
91
  yellow: plain,
38
92
  cyan: plain,
@@ -42,7 +96,8 @@ export function palette(on) {
42
96
  };
43
97
  }
44
98
  return {
45
- red: wrap('31', '39'),
99
+ red: wrap(redOpen(depth), '39'),
100
+ shade: shadeOf(depth),
46
101
  green: wrap('32', '39'),
47
102
  yellow: wrap('33', '39'),
48
103
  cyan: wrap('36', '39'),
@@ -62,6 +117,12 @@ const UNICODE = {
62
117
  radioOff: '○',
63
118
  checkOn: '◼',
64
119
  checkOff: '◻',
120
+ ok: '✓',
121
+ fail: '✗',
122
+ skip: '·',
123
+ write: '+',
124
+ remove: '-',
125
+ arrow: '→',
65
126
  };
66
127
  const ASCII = {
67
128
  top: '*',
@@ -74,6 +135,12 @@ const ASCII = {
74
135
  radioOff: '( )',
75
136
  checkOn: '[x]',
76
137
  checkOff: '[ ]',
138
+ ok: 'v',
139
+ fail: 'x',
140
+ skip: '.',
141
+ write: '+',
142
+ remove: '-',
143
+ arrow: '->',
77
144
  };
78
145
  export function glyphs(env, platform = process.platform) {
79
146
  // Windows Terminal and modern PowerShell set WT_SESSION; the legacy console
@@ -89,11 +156,9 @@ export function readKey(chunk) {
89
156
  switch (chunk) {
90
157
  case '\x1b[A':
91
158
  case '\x1b0A':
92
- case 'k':
93
159
  return 'up';
94
160
  case '\x1b[B':
95
161
  case '\x1b0B':
96
- case 'j':
97
162
  return 'down';
98
163
  case '\x1b[C':
99
164
  case 'l':
@@ -109,6 +174,13 @@ export function readKey(chunk) {
109
174
  return 'end';
110
175
  case ' ':
111
176
  return 'space';
177
+ // Ctrl-A, not 'a': on a list that filters, every letter belongs to the
178
+ // search term, so the bulk action needs a chord that can never be typed.
179
+ case '\x01':
180
+ return 'all';
181
+ case '\x7f':
182
+ case '\b':
183
+ return 'erase';
112
184
  case '\r':
113
185
  case '\n':
114
186
  return 'enter';
@@ -120,15 +192,32 @@ export function readKey(chunk) {
120
192
  case '\x1b':
121
193
  return 'cancel';
122
194
  default:
123
- return null;
195
+ // One printable character, and nothing else. A paste arrives as a single
196
+ // chunk of many, and an escape sequence this switch does not name starts
197
+ // with ESC — treating either as typing would scatter control bytes
198
+ // through a search term.
199
+ return chunk.length === 1 && chunk >= ' ' && chunk <= '~'
200
+ ? { kind: 'char', ch: chunk }
201
+ : null;
124
202
  }
125
203
  }
126
204
  const enabledIndexes = (choices) => choices.flatMap((choice, index) => (choice.disabled === undefined ? [index] : []));
205
+ /** Rows the current search term leaves on screen, in list order. */
206
+ export function matching(choices, query) {
207
+ const term = query.trim().toLowerCase();
208
+ if (term === '')
209
+ return choices.map((_, index) => index);
210
+ return choices.flatMap((choice, index) => `${choice.label} ${choice.hint ?? ''}`.toLowerCase().includes(term) ? [index] : []);
211
+ }
212
+ const reachable = (choices, query) => {
213
+ const shown = new Set(matching(choices, query));
214
+ return enabledIndexes(choices).filter((index) => shown.has(index));
215
+ };
127
216
  // Movement skips disabled rows and wraps. Wrapping is deliberate: with four
128
217
  // options on screen, "down" from the last one meaning nothing is a worse
129
218
  // surprise than returning to the top.
130
- export function move(choices, cursor, delta) {
131
- const usable = enabledIndexes(choices);
219
+ export function move(choices, cursor, delta, query = '') {
220
+ const usable = reachable(choices, query);
132
221
  if (usable.length === 0)
133
222
  return cursor;
134
223
  const at = usable.indexOf(cursor);
@@ -140,20 +229,51 @@ export function move(choices, cursor, delta) {
140
229
  export function firstEnabled(choices) {
141
230
  return enabledIndexes(choices)[0] ?? 0;
142
231
  }
143
- export function reduceList(choices, state, key, multi) {
144
- const usable = enabledIndexes(choices);
232
+ export function reduceList(choices, state, key, mode) {
233
+ const { multi, search } = mode;
234
+ const usable = reachable(choices, state.query);
235
+ // A search that hides the cursor's row has to put the cursor somewhere real,
236
+ // or the next space toggles a row nobody can see.
237
+ const settle = (next) => {
238
+ const shown = reachable(choices, next.query);
239
+ if (shown.includes(next.cursor) || shown.length === 0)
240
+ return { kind: 'state', state: next };
241
+ return { kind: 'state', state: { ...next, cursor: shown[0] } };
242
+ };
243
+ if (typeof key === 'object') {
244
+ if (!search) {
245
+ // Without a search field the letters are free, so the shortcuts a long
246
+ // list cannot afford are worth having here.
247
+ if (key.ch === 'j')
248
+ return { kind: 'state', state: { ...state, cursor: move(choices, state.cursor, 1) } };
249
+ if (key.ch === 'k')
250
+ return { kind: 'state', state: { ...state, cursor: move(choices, state.cursor, -1) } };
251
+ if (key.ch === 'a')
252
+ return toggleAll(state, usable, multi);
253
+ return { kind: 'state', state };
254
+ }
255
+ return settle({ ...state, query: state.query + key.ch });
256
+ }
145
257
  switch (key) {
146
258
  case 'up':
147
- return { kind: 'state', state: { ...state, cursor: move(choices, state.cursor, -1) } };
259
+ return { kind: 'state', state: { ...state, cursor: move(choices, state.cursor, -1, state.query) } };
148
260
  case 'down':
149
- return { kind: 'state', state: { ...state, cursor: move(choices, state.cursor, 1) } };
261
+ return { kind: 'state', state: { ...state, cursor: move(choices, state.cursor, 1, state.query) } };
150
262
  case 'home':
151
263
  return { kind: 'state', state: { ...state, cursor: usable[0] ?? state.cursor } };
152
264
  case 'end':
153
265
  return { kind: 'state', state: { ...state, cursor: usable.at(-1) ?? state.cursor } };
266
+ case 'erase':
267
+ return search && state.query !== ''
268
+ ? settle({ ...state, query: state.query.slice(0, -1) })
269
+ : { kind: 'state', state };
154
270
  case 'space': {
155
271
  if (!multi)
156
272
  return { kind: 'state', state };
273
+ // Nothing showing means nothing to toggle: the cursor is stale, left on
274
+ // whatever row the filter hid.
275
+ if (!usable.includes(state.cursor))
276
+ return { kind: 'state', state };
157
277
  const selected = new Set(state.selected);
158
278
  if (selected.has(state.cursor))
159
279
  selected.delete(state.cursor);
@@ -161,6 +281,8 @@ export function reduceList(choices, state, key, multi) {
161
281
  selected.add(state.cursor);
162
282
  return { kind: 'state', state: { ...state, selected } };
163
283
  }
284
+ case 'all':
285
+ return toggleAll(state, usable, multi);
164
286
  case 'enter':
165
287
  // A single-select submits whatever the cursor is on, so it can never
166
288
  // return nothing. A multi-select can, and that is a legitimate answer —
@@ -172,7 +294,40 @@ export function reduceList(choices, state, key, multi) {
172
294
  return { kind: 'state', state };
173
295
  }
174
296
  }
297
+ /**
298
+ * Select every row currently showing, or clear them if they are already all on.
299
+ *
300
+ * Scoped to what the filter leaves visible, which is the combination worth
301
+ * having: type `web`, take all five web profiles, and leave the rest alone.
302
+ * Rows hidden by the filter keep whatever state they had.
303
+ */
304
+ function toggleAll(state, usable, multi) {
305
+ if (!multi || usable.length === 0)
306
+ return { kind: 'state', state };
307
+ const every = usable.every((i) => state.selected.has(i));
308
+ const selected = new Set(state.selected);
309
+ for (const i of usable) {
310
+ if (every)
311
+ selected.delete(i);
312
+ else
313
+ selected.add(i);
314
+ }
315
+ return { kind: 'state', state: { ...state, selected } };
316
+ }
175
317
  const MIN_HINT = 12;
318
+ // Title, keys and footer are never dropped; the two blank separators are, on a
319
+ // terminal too short to spend rows on breathing space. The `+ 1` is the line the
320
+ // cursor sits on after the frame's own trailing newline: without it a frame
321
+ // exactly as tall as the terminal scrolls it by a row, and the rewind then
322
+ // erases whatever moved up into its place.
323
+ const FIXED_LINES = 3;
324
+ const CURSOR_LINE = 1;
325
+ const COMPACT_BELOW = 12;
326
+ // Under this the key hints go too. They are the last thing to drop and the first
327
+ // thing anyone new needs, so this is genuinely the floor: a terminal this short
328
+ // has room for the question, one option and the footer, and nothing else.
329
+ const TERSE_BELOW = 8;
330
+ const MIN_WINDOW = 3;
176
331
  function truncate(text, max) {
177
332
  if (max <= 1)
178
333
  return '';
@@ -188,7 +343,48 @@ function truncate(text, max) {
188
343
  export function frame(opts) {
189
344
  const { palette: c, glyphs: g, state, choices, multi, width } = opts;
190
345
  const bar = c.dim(g.bar);
191
- const lines = [`${c.red(g.active)} ${truncate(c.bold(opts.title), width - 3)}`];
346
+ // The count belongs on the title line and nowhere else. A multi-select whose
347
+ // answer is "three of twelve" gives the operator no way to check that without
348
+ // counting marks down the list, and the list is the part that scrolls.
349
+ const chosen = multi ? `${state.selected.size}/${choices.length} selected` : '';
350
+ const titleRoom = width - 3 - (chosen === '' ? 0 : chosen.length + 2);
351
+ const heading = `${c.red(g.active)} ${truncate(c.bold(opts.title), titleRoom)}`;
352
+ const lines = [chosen === '' ? heading : `${heading} ${c.dim(chosen)}`];
353
+ // Keys go directly under the question, not at the far end of the list. At the
354
+ // end they are below the fold on a long menu, which is exactly when an
355
+ // operator who has never seen this prompt needs to be told that space toggles.
356
+ const unicode = g.bar === UNICODE.bar;
357
+ const arrows = unicode ? '↑↓' : 'up/down';
358
+ const sep = unicode ? ' · ' : ' | ';
359
+ const all = multi ? (opts.search === true ? 'ctrl-a all' : 'a all') : '';
360
+ // A multi-select with nothing ticked already submits an empty answer, and
361
+ // "none" is a real answer to most of these questions — install no extra
362
+ // tooling, render for no vendor. But `enter confirm` over `0/2 selected`
363
+ // reads as a form refusing to be submitted until something is picked, so
364
+ // operators sat on a question they had already answered correctly. The key
365
+ // does not change; only the word for what it does when nothing is chosen.
366
+ const submit = multi && state.selected.size === 0 ? 'enter skip' : 'enter confirm';
367
+ const keys = [
368
+ `${arrows} move`,
369
+ ...(multi ? ['space select', all] : []),
370
+ ...(opts.search === true ? ['type to filter'] : []),
371
+ submit,
372
+ ].join(sep);
373
+ const height = opts.height ?? 24;
374
+ const compact = height < COMPACT_BELOW;
375
+ const terse = height < TERSE_BELOW;
376
+ if (!terse)
377
+ lines.push(c.dim(`${g.bar} ${truncate(keys, width - g.bar.length - 2)}`));
378
+ const field = opts.search === true && !terse;
379
+ if (field) {
380
+ // The cursor block is drawn, not left to the terminal: the real cursor is
381
+ // hidden for the whole prompt, because a prompt that moved it would have to
382
+ // put it back before every redraw.
383
+ const typed = state.query === '' ? c.dim('type to filter') : state.query;
384
+ lines.push(`${bar} ${c.dim('search')} ${truncate(typed, width - 12)}${c.inverse(' ')}`);
385
+ }
386
+ if (!compact)
387
+ lines.push(bar);
192
388
  // Every column below is measured in screen cells, on the RAW text: a painted
193
389
  // string carries escape sequences that have width on the wire and none on the
194
390
  // terminal, and padding computed from them misaligns every row.
@@ -205,38 +401,175 @@ export function frame(opts) {
205
401
  // of the prompt, not just for itself.
206
402
  const labelRoom = Math.max(1, width - prefixWidth);
207
403
  const labelWidth = Math.min(labelRoom, Math.max(...choices.map((ch) => ch.label.length)));
208
- for (const [index, choice] of choices.entries()) {
404
+ const shown = matching(choices, state.query);
405
+ if (shown.length === 0) {
406
+ lines.push(`${bar} ${c.dim(truncate(`no option matches "${state.query}"`, width - 4))}`);
407
+ }
408
+ // The window keeps the frame inside the terminal. `more above`/`more below`
409
+ // occupy a row each, so they are counted before the rows are, and the cursor
410
+ // is kept one row inside the edge where there is anything to see past it.
411
+ const chrome = FIXED_LINES -
412
+ (terse ? 1 : 0) +
413
+ CURSOR_LINE +
414
+ (field ? 1 : 0) +
415
+ (compact ? 0 : 2);
416
+ const room = Math.max(1, height - chrome);
417
+ const at = Math.max(0, shown.indexOf(state.cursor));
418
+ let start = 0;
419
+ if (shown.length > room) {
420
+ start = Math.min(Math.max(0, at - Math.floor(room / 2)), shown.length - room);
421
+ }
422
+ const end = Math.min(shown.length, start + room);
423
+ // The counters cost a row each, so they are only worth drawing when a row is
424
+ // left to draw under them. Below that the window is silent and simply shows
425
+ // what fits — a terminal this short has no space to explain itself in, and
426
+ // overflowing it would corrupt the redraw rather than merely inform nobody.
427
+ const markers = room >= MIN_WINDOW;
428
+ const above = markers && start > 0 ? start + 1 : 0;
429
+ const below = markers && end < shown.length ? shown.length - end + 1 : 0;
430
+ const window = shown.slice(above > 0 ? start + 1 : start, below > 0 ? end - 1 : end);
431
+ if (above > 0) {
432
+ lines.push(`${bar} ${c.dim(`${unicode ? '↑' : '^'} ${above} more`)}`);
433
+ }
434
+ for (const index of window) {
435
+ const choice = choices[index];
209
436
  const active = index === state.cursor;
210
437
  const on = multi ? state.selected.has(index) : active;
211
438
  const glyph = multi ? (on ? g.checkOn : g.checkOff) : on ? g.radioOn : g.radioOff;
212
- const mark = on ? c.green(glyph) : c.dim(glyph);
439
+ const mark = on ? c.red(glyph) : c.dim(glyph);
213
440
  // Pad the mark itself so a mixed-width glyph set still aligns the labels.
214
441
  const markPad = ' '.repeat(markWidth - glyph.length);
215
442
  const raw = truncate(choice.label, labelWidth);
216
443
  const disabled = choice.disabled !== undefined;
217
- const label = disabled ? c.dim(raw) : active ? c.cyan(raw) : raw;
444
+ const label = disabled ? c.dim(raw) : active ? c.bold(c.red(raw)) : raw;
218
445
  const pad = ' '.repeat(labelWidth - raw.length);
219
- const note = choice.disabled ?? choice.hint;
446
+ // Only a disabled row explains itself in place: the reason it cannot be
447
+ // picked has to be readable without moving the cursor onto it, which is the
448
+ // one thing the cursor cannot do. Every other row's hint goes to the panel
449
+ // below, where it gets the whole width instead of whatever is left after
450
+ // the longest label in the list.
220
451
  const room = width - prefixWidth - labelWidth - HINT_GAP;
221
- const tail = note !== undefined && room >= MIN_HINT ? ` ${c.dim(truncate(note, room))}` : '';
222
- lines.push(`${bar} ${mark}${markPad} ${label}${pad}${tail}`);
452
+ const tail = choice.disabled !== undefined && room >= MIN_HINT
453
+ ? ` ${c.dim(truncate(choice.disabled, room))}`
454
+ : '';
455
+ // Pad only when something follows: with the hints moved to the footer most
456
+ // rows end at their label, and padding them all would leave a column of
457
+ // trailing spaces that shows up the moment a terminal highlights a line.
458
+ lines.push(`${bar} ${mark}${markPad} ${label}${tail === '' ? '' : pad + tail}`);
459
+ }
460
+ if (below > 0) {
461
+ lines.push(`${bar} ${c.dim(`${unicode ? '↓' : 'v'} ${below} more`)}`);
223
462
  }
224
- const help = multi
225
- ? 'space to toggle, enter to confirm'
226
- : 'arrows to move, enter to confirm';
227
- lines.push(c.dim(`${g.end} ${truncate(help, width - g.end.length - 2)}`));
463
+ // The footer is the focused row's own text, full width. A hint squeezed into
464
+ // the tail of its row is the first thing to get truncated, and it is the part
465
+ // that explains a term the operator has never seen — which is the whole
466
+ // reason there is a menu here rather than a flag.
467
+ const focused = choices[state.cursor];
468
+ const detail = focused?.disabled ?? focused?.hint ?? '';
469
+ if (!compact)
470
+ lines.push(bar);
471
+ lines.push(c.dim(`${g.end} ${truncate(detail, width - g.end.length - 2)}`));
228
472
  return lines.join('\n');
229
473
  }
474
+ /**
475
+ * One line of typed input, rendered. Pure, like frame().
476
+ *
477
+ * Three lines and no list, because the only thing this asks for is a value the
478
+ * repository cannot supply itself — a team name, in practice. The placeholder is
479
+ * what happens on an empty answer, stated rather than implied: an operator who
480
+ * presses enter here has chosen the default, and should be able to see what they
481
+ * chose before they choose it.
482
+ */
483
+ export function field(opts) {
484
+ const { palette: c, glyphs: g, width } = opts;
485
+ const shown = opts.value === '' ? c.dim(truncate(opts.placeholder, width - 6)) : truncate(opts.value, width - 6);
486
+ return [
487
+ `${c.red(g.active)} ${truncate(c.bold(opts.title), width - 3)}`,
488
+ c.dim(`${g.bar} ${truncate(opts.hint, width - g.bar.length - 2)}`),
489
+ `${c.dim(g.bar)} ${shown}${c.inverse(' ')}`,
490
+ c.dim(`${g.end} enter to confirm`),
491
+ ].join('\n');
492
+ }
230
493
  /** The collapsed record of an answered prompt, kept above the next one. */
231
494
  export function answered(title, answer, c, g) {
232
- return `${c.green(g.done)} ${title} ${c.dim('·')} ${c.cyan(answer)}`;
495
+ return `${c.dim(g.done)} ${title} ${c.dim('·')} ${c.cyan(answer)}`;
233
496
  }
234
- export function intro(title, c, g) {
235
- return `${c.red(g.top)} ${c.bold(title)}\n${c.dim(g.bar)}`;
497
+ // A five-row block face, carrying only the letters REDLINE needs. A full font
498
+ // would be dead weight: this draws one word, once, and any other string falls
499
+ // back to the plain heading below.
500
+ const FACE = {
501
+ R: ['████', '█ █', '████', '█ █ ', '█ █'],
502
+ E: ['████', '█ ', '███ ', '█ ', '████'],
503
+ D: ['███ ', '█ █', '█ █', '█ █', '███ '],
504
+ L: ['█ ', '█ ', '█ ', '█ ', '████'],
505
+ I: ['███', ' █ ', ' █ ', ' █ ', '███'],
506
+ N: ['█ █', '██ █', '█ ██', '█ █', '█ █'],
507
+ };
508
+ const WORDMARK = 'REDLINE';
509
+ const FACE_ROWS = 5;
510
+ /**
511
+ * The wordmark, or nothing.
512
+ *
513
+ * Nothing is the right answer more often than it looks: the block face is drawn
514
+ * from U+2588, so the same non-UTF-8 console the ASCII glyph set exists for would
515
+ * render seven letters of replacement characters, and a terminal narrower than the
516
+ * word would wrap it into rubble. Both fall back to the plain heading, which is
517
+ * why this returns a list of lines the caller can simply not have.
518
+ */
519
+ export function wordmark(c, g, width) {
520
+ if (g.bar !== UNICODE.bar)
521
+ return [];
522
+ const letters = [...WORDMARK].map((ch) => FACE[ch]).filter((f) => f !== undefined);
523
+ if (letters.length !== WORDMARK.length)
524
+ return [];
525
+ const drawn = Array.from({ length: FACE_ROWS }, (_, row) => letters.map((face) => face[row]).join(' '));
526
+ if ((drawn[0]?.length ?? 0) > width)
527
+ return [];
528
+ // White at the top falling to grey at the base. Red is the accent this tool
529
+ // spends on the things that matter — the cursor, a selected row, a finding —
530
+ // and a wordmark five rows tall in it drowns all three.
531
+ return drawn.map((row, i) => c.shade(i)(row));
532
+ }
533
+ export function intro(title, c, g, width = 80) {
534
+ const art = wordmark(c, g, width);
535
+ // The chip's padding is drawn by the inverse background, so without colour it
536
+ // is just two stray spaces around the word. Ask the palette whether it paints
537
+ // rather than threading the answer down from the caller.
538
+ const painted = c.dim('') !== '';
539
+ const head = painted
540
+ ? `${c.red(g.top)} ${c.inverse(c.bold(` ${title} `))}`
541
+ : `${c.red(g.top)} ${c.bold(title)}`;
542
+ return art.length > 0
543
+ ? `${art.join('\n')}\n\n${head}\n${c.dim(g.bar)}`
544
+ : `${head}\n${c.dim(g.bar)}`;
236
545
  }
237
546
  export function outro(message, c, g) {
238
547
  return `${c.dim(g.bar)}\n${c.red(g.end)} ${message}`;
239
548
  }
549
+ // The spinner's frames. Braille dots because they are one cell wide in every
550
+ // font that has them at all, so the line does not jitter as it turns; the ASCII
551
+ // fallback is the same four positions a non-UTF-8 console can draw.
552
+ const SPIN_UNICODE = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];
553
+ const SPIN_ASCII = ['|', '/', '-', '\\'];
554
+ export function spinnerFrames(g) {
555
+ return g.bar === UNICODE.bar ? SPIN_UNICODE : SPIN_ASCII;
556
+ }
557
+ /**
558
+ * One line of a running task. Pure, like everything else here.
559
+ *
560
+ * `tick` selects the frame, so the caller owns the clock: a spinner that read
561
+ * the time itself could not be tested, and the thing worth testing about a
562
+ * spinner is that it says what the run is doing, not that it turns.
563
+ */
564
+ export function spinner(label, tick, c, g, width = 80) {
565
+ const frames = spinnerFrames(g);
566
+ const frame = frames[((tick % frames.length) + frames.length) % frames.length];
567
+ return `${c.dim(g.bar)} ${c.red(frame)} ${truncate(label, Math.max(1, width - 6))}`;
568
+ }
569
+ /** The same line, finished: a green tick and the last thing the task was doing. */
570
+ export function spinnerDone(label, c, g, width = 80) {
571
+ return `${c.dim(g.bar)} ${c.green(g.ok)} ${truncate(label, Math.max(1, width - 6))}`;
572
+ }
240
573
  export function note(message, c, g) {
241
574
  return `${c.dim(g.bar)} ${c.yellow(g.warn)} ${message}`;
242
575
  }
@@ -1 +1 @@
1
- {"version":3,"file":"tty.js","sourceRoot":"","sources":["../../cli/ui/tty.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tty.js","sourceRoot":"","sources":["../../cli/ui/tty.ts"],"names":[],"mappings":"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"}