termkit 2.4.0 → 2.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -639,7 +639,7 @@ var Select = class {
639
639
  process.stdin.removeListener("data", onKey);
640
640
  process.stdout.write(ENABLE_WRAP + SHOW_CURSOR);
641
641
  });
642
- const cleanup = () => {
642
+ const cleanup = (selectedLabel) => {
643
643
  deregisterCleanup();
644
644
  if (timer) {
645
645
  clearInterval(timer);
@@ -648,7 +648,12 @@ var Select = class {
648
648
  process.stdin.setRawMode(false);
649
649
  process.stdin.pause();
650
650
  process.stdin.removeListener("data", onKey);
651
- process.stdout.write(ENABLE_WRAP + SHOW_CURSOR);
651
+ process.stdout.write(CURSOR_UP(lastDrawnLines + 1));
652
+ process.stdout.write("\r\x1B[0J");
653
+ process.stdout.write(ENABLE_WRAP);
654
+ process.stdout.write(`${glyph}${prompt}: ${selectedLabel ?? this.skipLabel}
655
+ `);
656
+ process.stdout.write(SHOW_CURSOR);
652
657
  };
653
658
  if (this._parsedColors.length >= 2) {
654
659
  timer = setInterval(() => {
@@ -670,10 +675,19 @@ var Select = class {
670
675
  selectedIndex = (selectedIndex + 1) % allItems.length;
671
676
  renderList(true);
672
677
  } else if (str === "\r" || str === "\n") {
673
- cleanup();
674
- resolve(selectedIndex === filtered.length ? null : filtered[selectedIndex] ?? null);
678
+ const result = selectedIndex === filtered.length ? null : filtered[selectedIndex] ?? null;
679
+ cleanup(result?.label ?? null);
680
+ resolve(result);
675
681
  } else if (str === "") {
676
- cleanup();
682
+ deregisterCleanup();
683
+ if (timer) {
684
+ clearInterval(timer);
685
+ timer = null;
686
+ }
687
+ process.stdin.setRawMode(false);
688
+ process.stdin.pause();
689
+ process.stdin.removeListener("data", onKey);
690
+ process.stdout.write(ENABLE_WRAP + SHOW_CURSOR);
677
691
  process.exit(130);
678
692
  } else if (this.searchEnabled) {
679
693
  if (str === "\x7F" || str === "\b") {
@@ -2302,7 +2316,6 @@ var MultiBar = class {
2302
2316
  };
2303
2317
 
2304
2318
  // src/models/MultiSelect.ts
2305
- var CLEAR_LINE2 = "\x1B[2K";
2306
2319
  var CURSOR_UP3 = (n) => `\x1B[${n}A`;
2307
2320
  var DIM2 = "\x1B[2m";
2308
2321
  var MultiSelect = class {
@@ -2425,21 +2438,17 @@ var MultiSelect = class {
2425
2438
  clearInterval(timer);
2426
2439
  timer = null;
2427
2440
  }
2428
- if (lastDrawnLines > 0) process.stdout.write(CURSOR_UP3(lastDrawnLines));
2429
- process.stdout.write("\x1B[0J");
2441
+ process.stdout.write(CURSOR_UP3(lastDrawnLines + 1));
2442
+ process.stdout.write("\r\x1B[0J");
2430
2443
  process.stdout.write(ENABLE_WRAP);
2431
- const bulletWidth = stringLength(this.checkedPrefix) + 1;
2432
- for (let i = 0; i < items.length; i++) {
2433
- const item = items[i];
2434
- const bullet = checked.has(i) ? `${colorText(this.promptColor, this.checkedPrefix)} ` : " ".repeat(bulletWidth);
2435
- process.stdout.write(`\r${indent}${bullet}${item.label}
2444
+ const selectedItems = items.filter((_, i) => checked.has(i));
2445
+ const display = result !== null && selectedItems.length > 0 ? selectedItems.map((i) => i.label).join(", ") : "\u2014";
2446
+ process.stdout.write(`${glyph}${prompt}: ${display}
2436
2447
  `);
2437
- }
2438
- process.stdout.write(`\r${CLEAR_LINE2}`);
2439
2448
  process.stdin.setRawMode(false);
2440
2449
  process.stdin.pause();
2441
2450
  process.stdin.removeListener("data", onKey);
2442
- process.stdout.write(ENABLE_WRAP + SHOW_CURSOR);
2451
+ process.stdout.write(SHOW_CURSOR);
2443
2452
  resolve(result);
2444
2453
  };
2445
2454
  if (this._parsedColors.length >= 2) {
package/dist/index.mjs CHANGED
@@ -578,7 +578,7 @@ var Select = class {
578
578
  process.stdin.removeListener("data", onKey);
579
579
  process.stdout.write(ENABLE_WRAP + SHOW_CURSOR);
580
580
  });
581
- const cleanup = () => {
581
+ const cleanup = (selectedLabel) => {
582
582
  deregisterCleanup();
583
583
  if (timer) {
584
584
  clearInterval(timer);
@@ -587,7 +587,12 @@ var Select = class {
587
587
  process.stdin.setRawMode(false);
588
588
  process.stdin.pause();
589
589
  process.stdin.removeListener("data", onKey);
590
- process.stdout.write(ENABLE_WRAP + SHOW_CURSOR);
590
+ process.stdout.write(CURSOR_UP(lastDrawnLines + 1));
591
+ process.stdout.write("\r\x1B[0J");
592
+ process.stdout.write(ENABLE_WRAP);
593
+ process.stdout.write(`${glyph}${prompt}: ${selectedLabel ?? this.skipLabel}
594
+ `);
595
+ process.stdout.write(SHOW_CURSOR);
591
596
  };
592
597
  if (this._parsedColors.length >= 2) {
593
598
  timer = setInterval(() => {
@@ -609,10 +614,19 @@ var Select = class {
609
614
  selectedIndex = (selectedIndex + 1) % allItems.length;
610
615
  renderList(true);
611
616
  } else if (str === "\r" || str === "\n") {
612
- cleanup();
613
- resolve(selectedIndex === filtered.length ? null : filtered[selectedIndex] ?? null);
617
+ const result = selectedIndex === filtered.length ? null : filtered[selectedIndex] ?? null;
618
+ cleanup(result?.label ?? null);
619
+ resolve(result);
614
620
  } else if (str === "") {
615
- cleanup();
621
+ deregisterCleanup();
622
+ if (timer) {
623
+ clearInterval(timer);
624
+ timer = null;
625
+ }
626
+ process.stdin.setRawMode(false);
627
+ process.stdin.pause();
628
+ process.stdin.removeListener("data", onKey);
629
+ process.stdout.write(ENABLE_WRAP + SHOW_CURSOR);
616
630
  process.exit(130);
617
631
  } else if (this.searchEnabled) {
618
632
  if (str === "\x7F" || str === "\b") {
@@ -2241,7 +2255,6 @@ var MultiBar = class {
2241
2255
  };
2242
2256
 
2243
2257
  // src/models/MultiSelect.ts
2244
- var CLEAR_LINE2 = "\x1B[2K";
2245
2258
  var CURSOR_UP3 = (n) => `\x1B[${n}A`;
2246
2259
  var DIM2 = "\x1B[2m";
2247
2260
  var MultiSelect = class {
@@ -2364,21 +2377,17 @@ var MultiSelect = class {
2364
2377
  clearInterval(timer);
2365
2378
  timer = null;
2366
2379
  }
2367
- if (lastDrawnLines > 0) process.stdout.write(CURSOR_UP3(lastDrawnLines));
2368
- process.stdout.write("\x1B[0J");
2380
+ process.stdout.write(CURSOR_UP3(lastDrawnLines + 1));
2381
+ process.stdout.write("\r\x1B[0J");
2369
2382
  process.stdout.write(ENABLE_WRAP);
2370
- const bulletWidth = stringLength(this.checkedPrefix) + 1;
2371
- for (let i = 0; i < items.length; i++) {
2372
- const item = items[i];
2373
- const bullet = checked.has(i) ? `${colorText(this.promptColor, this.checkedPrefix)} ` : " ".repeat(bulletWidth);
2374
- process.stdout.write(`\r${indent}${bullet}${item.label}
2383
+ const selectedItems = items.filter((_, i) => checked.has(i));
2384
+ const display = result !== null && selectedItems.length > 0 ? selectedItems.map((i) => i.label).join(", ") : "\u2014";
2385
+ process.stdout.write(`${glyph}${prompt}: ${display}
2375
2386
  `);
2376
- }
2377
- process.stdout.write(`\r${CLEAR_LINE2}`);
2378
2387
  process.stdin.setRawMode(false);
2379
2388
  process.stdin.pause();
2380
2389
  process.stdin.removeListener("data", onKey);
2381
- process.stdout.write(ENABLE_WRAP + SHOW_CURSOR);
2390
+ process.stdout.write(SHOW_CURSOR);
2382
2391
  resolve(result);
2383
2392
  };
2384
2393
  if (this._parsedColors.length >= 2) {
@@ -1 +1 @@
1
- {"version":3,"file":"MultiSelect.d.ts","sourceRoot":"","sources":["../../src/models/MultiSelect.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,kBAAkB;IACjC,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAMD,qBAAa,WAAW;IACtB,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,gBAAgB,CAAQ;IAChC,OAAO,CAAC,UAAU,CAAQ;IAC1B,OAAO,CAAC,aAAa,CAAQ;IAC7B,OAAO,CAAC,eAAe,CAAQ;IAC/B,OAAO,CAAC,UAAU,CAAQ;IAC1B,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,GAAG,CAAQ;IACnB,OAAO,CAAC,GAAG,CAAe;IAC1B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,SAAS,CAAoB;IACrC,OAAO,CAAC,aAAa,CAAY;IACjC,OAAO,CAAC,YAAY,CAAY;IAChC,OAAO,CAAC,aAAa,CAAY;gBAErB,OAAO,GAAE,kBAAuB;IAmB5C,OAAO,CAAC,UAAU;IAQZ,GAAG,CAAC,CAAC,SAAS,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC;CAwQtF;AAED,wBAAsB,WAAW,CAAC,CAAC,SAAS,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,CAE1I"}
1
+ {"version":3,"file":"MultiSelect.d.ts","sourceRoot":"","sources":["../../src/models/MultiSelect.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,kBAAkB;IACjC,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAKD,qBAAa,WAAW;IACtB,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,gBAAgB,CAAQ;IAChC,OAAO,CAAC,UAAU,CAAQ;IAC1B,OAAO,CAAC,aAAa,CAAQ;IAC7B,OAAO,CAAC,eAAe,CAAQ;IAC/B,OAAO,CAAC,UAAU,CAAQ;IAC1B,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,GAAG,CAAQ;IACnB,OAAO,CAAC,GAAG,CAAe;IAC1B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,SAAS,CAAoB;IACrC,OAAO,CAAC,aAAa,CAAY;IACjC,OAAO,CAAC,YAAY,CAAY;IAChC,OAAO,CAAC,aAAa,CAAY;gBAErB,OAAO,GAAE,kBAAuB;IAmB5C,OAAO,CAAC,UAAU;IAQZ,GAAG,CAAC,CAAC,SAAS,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC;CA+PtF;AAED,wBAAsB,WAAW,CAAC,CAAC,SAAS,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,CAE1I"}
@@ -1 +1 @@
1
- {"version":3,"file":"Select.d.ts","sourceRoot":"","sources":["../../src/models/Select.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAID,qBAAa,MAAM;IACjB,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,gBAAgB,CAAQ;IAChC,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,cAAc,CAAQ;IAC9B,OAAO,CAAC,cAAc,CAAQ;IAC9B,OAAO,CAAC,UAAU,CAAQ;IAC1B,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,SAAS,CAAoB;IACrC,OAAO,CAAC,aAAa,CAAY;IACjC,OAAO,CAAC,YAAY,CAAY;IAChC,OAAO,CAAC,aAAa,CAAY;gBAErB,OAAO,GAAE,aAAkB;IAgBvC,OAAO,CAAC,UAAU;IAQZ,GAAG,CAAC,CAAC,SAAS,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;CAmL/E;AAED,wBAAsB,MAAM,CAAC,CAAC,SAAS,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAEzH"}
1
+ {"version":3,"file":"Select.d.ts","sourceRoot":"","sources":["../../src/models/Select.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAID,qBAAa,MAAM;IACjB,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,gBAAgB,CAAQ;IAChC,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,cAAc,CAAQ;IAC9B,OAAO,CAAC,cAAc,CAAQ;IAC9B,OAAO,CAAC,UAAU,CAAQ;IAC1B,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,SAAS,CAAoB;IACrC,OAAO,CAAC,aAAa,CAAY;IACjC,OAAO,CAAC,YAAY,CAAY;IAChC,OAAO,CAAC,aAAa,CAAY;gBAErB,OAAO,GAAE,aAAkB;IAgBvC,OAAO,CAAC,UAAU;IAQZ,GAAG,CAAC,CAAC,SAAS,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;CAgM/E;AAED,wBAAsB,MAAM,CAAC,CAAC,SAAS,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAEzH"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "termkit",
3
- "version": "2.4.0",
3
+ "version": "2.4.1",
4
4
  "description": "Node.js terminal toolkit with CLI commands, progress bars, charts, tables, styled markup, prompts, and text utilities",
5
5
  "keywords": [
6
6
  "animation",