@creem_io/cli 0.2.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.
Files changed (98) hide show
  1. package/README.md +155 -0
  2. package/dist/commands/checkouts.d.ts +3 -0
  3. package/dist/commands/checkouts.d.ts.map +1 -0
  4. package/dist/commands/checkouts.js +175 -0
  5. package/dist/commands/checkouts.js.map +1 -0
  6. package/dist/commands/config.d.ts +3 -0
  7. package/dist/commands/config.d.ts.map +1 -0
  8. package/dist/commands/config.js +184 -0
  9. package/dist/commands/config.js.map +1 -0
  10. package/dist/commands/customers.d.ts +3 -0
  11. package/dist/commands/customers.d.ts.map +1 -0
  12. package/dist/commands/customers.js +246 -0
  13. package/dist/commands/customers.js.map +1 -0
  14. package/dist/commands/discounts.d.ts +3 -0
  15. package/dist/commands/discounts.d.ts.map +1 -0
  16. package/dist/commands/discounts.js +419 -0
  17. package/dist/commands/discounts.js.map +1 -0
  18. package/dist/commands/index.d.ts +12 -0
  19. package/dist/commands/index.d.ts.map +1 -0
  20. package/dist/commands/index.js +26 -0
  21. package/dist/commands/index.js.map +1 -0
  22. package/dist/commands/login.d.ts +3 -0
  23. package/dist/commands/login.d.ts.map +1 -0
  24. package/dist/commands/login.js +115 -0
  25. package/dist/commands/login.js.map +1 -0
  26. package/dist/commands/logout.d.ts +3 -0
  27. package/dist/commands/logout.d.ts.map +1 -0
  28. package/dist/commands/logout.js +61 -0
  29. package/dist/commands/logout.js.map +1 -0
  30. package/dist/commands/migrate.d.ts +3 -0
  31. package/dist/commands/migrate.d.ts.map +1 -0
  32. package/dist/commands/migrate.js +1073 -0
  33. package/dist/commands/migrate.js.map +1 -0
  34. package/dist/commands/products.d.ts +3 -0
  35. package/dist/commands/products.d.ts.map +1 -0
  36. package/dist/commands/products.js +400 -0
  37. package/dist/commands/products.js.map +1 -0
  38. package/dist/commands/subscriptions.d.ts +3 -0
  39. package/dist/commands/subscriptions.d.ts.map +1 -0
  40. package/dist/commands/subscriptions.js +476 -0
  41. package/dist/commands/subscriptions.js.map +1 -0
  42. package/dist/commands/transactions.d.ts +3 -0
  43. package/dist/commands/transactions.d.ts.map +1 -0
  44. package/dist/commands/transactions.js +326 -0
  45. package/dist/commands/transactions.js.map +1 -0
  46. package/dist/commands/whoami.d.ts +3 -0
  47. package/dist/commands/whoami.d.ts.map +1 -0
  48. package/dist/commands/whoami.js +76 -0
  49. package/dist/commands/whoami.js.map +1 -0
  50. package/dist/index.d.ts +3 -0
  51. package/dist/index.d.ts.map +1 -0
  52. package/dist/index.js +109 -0
  53. package/dist/index.js.map +1 -0
  54. package/dist/lib/api.d.ts +25 -0
  55. package/dist/lib/api.d.ts.map +1 -0
  56. package/dist/lib/api.js +77 -0
  57. package/dist/lib/api.js.map +1 -0
  58. package/dist/lib/auth.d.ts +28 -0
  59. package/dist/lib/auth.d.ts.map +1 -0
  60. package/dist/lib/auth.js +113 -0
  61. package/dist/lib/auth.js.map +1 -0
  62. package/dist/lib/config.d.ts +34 -0
  63. package/dist/lib/config.d.ts.map +1 -0
  64. package/dist/lib/config.js +144 -0
  65. package/dist/lib/config.js.map +1 -0
  66. package/dist/lib/env-cache.d.ts +10 -0
  67. package/dist/lib/env-cache.d.ts.map +1 -0
  68. package/dist/lib/env-cache.js +27 -0
  69. package/dist/lib/env-cache.js.map +1 -0
  70. package/dist/tui/command-bar.d.ts +10 -0
  71. package/dist/tui/command-bar.d.ts.map +1 -0
  72. package/dist/tui/command-bar.js +35 -0
  73. package/dist/tui/command-bar.js.map +1 -0
  74. package/dist/tui/engine.d.ts +3 -0
  75. package/dist/tui/engine.d.ts.map +1 -0
  76. package/dist/tui/engine.js +454 -0
  77. package/dist/tui/engine.js.map +1 -0
  78. package/dist/tui/index.d.ts +3 -0
  79. package/dist/tui/index.d.ts.map +1 -0
  80. package/dist/tui/index.js +6 -0
  81. package/dist/tui/index.js.map +1 -0
  82. package/dist/tui/keymap.d.ts +29 -0
  83. package/dist/tui/keymap.d.ts.map +1 -0
  84. package/dist/tui/keymap.js +143 -0
  85. package/dist/tui/keymap.js.map +1 -0
  86. package/dist/tui/renderer.d.ts +12 -0
  87. package/dist/tui/renderer.d.ts.map +1 -0
  88. package/dist/tui/renderer.js +379 -0
  89. package/dist/tui/renderer.js.map +1 -0
  90. package/dist/tui/types.d.ts +53 -0
  91. package/dist/tui/types.d.ts.map +1 -0
  92. package/dist/tui/types.js +24 -0
  93. package/dist/tui/types.js.map +1 -0
  94. package/dist/utils/output.d.ts +67 -0
  95. package/dist/utils/output.d.ts.map +1 -0
  96. package/dist/utils/output.js +245 -0
  97. package/dist/utils/output.js.map +1 -0
  98. package/package.json +56 -0
@@ -0,0 +1,143 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.VimKeymap = void 0;
4
+ const PENDING_TIMEOUT_MS = 300;
5
+ class VimKeymap {
6
+ pendingKey = null;
7
+ pendingTimer = null;
8
+ onPendingExpired = null;
9
+ setPendingExpiredHandler(handler) {
10
+ this.onPendingExpired = handler;
11
+ }
12
+ resolve(str, key, mode) {
13
+ if (mode === "confirm") {
14
+ return this.resolveConfirmMode(str, key);
15
+ }
16
+ if (mode === "command" || mode === "search") {
17
+ return this.resolveInputMode(str, key);
18
+ }
19
+ if (mode === "detail") {
20
+ return this.resolveDetailMode(str, key);
21
+ }
22
+ return this.resolveListMode(str, key);
23
+ }
24
+ destroy() {
25
+ if (this.pendingTimer) {
26
+ clearTimeout(this.pendingTimer);
27
+ this.pendingTimer = null;
28
+ }
29
+ this.pendingKey = null;
30
+ }
31
+ resolveConfirmMode(str, key) {
32
+ // Ctrl+C should quit (consistent with other modes)
33
+ if (key?.ctrl && key?.name === "c")
34
+ return "quit";
35
+ if (str === "y" || str === "Y")
36
+ return "confirm_yes";
37
+ if (str === "n" || str === "N" || key?.name === "escape")
38
+ return "confirm_no";
39
+ return "none";
40
+ }
41
+ resolveInputMode(str, key) {
42
+ if (key?.name === "escape")
43
+ return "cancel_input";
44
+ if (key?.name === "return")
45
+ return "confirm_input";
46
+ if (key?.name === "backspace")
47
+ return "backspace_input";
48
+ // Ctrl-c should quit
49
+ if (key?.ctrl && key?.name === "c")
50
+ return "quit";
51
+ // Printable character
52
+ if (str && str.length === 1 && !key?.ctrl && !key?.meta) {
53
+ return { type: "char_input", char: str };
54
+ }
55
+ return "none";
56
+ }
57
+ resolveDetailMode(str, key) {
58
+ if (key?.ctrl && key?.name === "c")
59
+ return this.clearPending("quit");
60
+ if (str === "q" || key?.name === "escape")
61
+ return this.clearPending("back");
62
+ if (str === "j" || key?.name === "down")
63
+ return this.clearPending("move_down");
64
+ if (str === "k" || key?.name === "up")
65
+ return this.clearPending("move_up");
66
+ if (key?.ctrl && key?.name === "d")
67
+ return this.clearPending("half_page_down");
68
+ if (key?.ctrl && key?.name === "u")
69
+ return this.clearPending("half_page_up");
70
+ if (str === ":")
71
+ return this.clearPending("enter_command");
72
+ // gg / G
73
+ if (str === "G" && !key?.ctrl)
74
+ return this.clearPending("goto_bottom");
75
+ if (str === "g")
76
+ return this.handlePendingG();
77
+ this.clearPendingState();
78
+ return "none";
79
+ }
80
+ resolveListMode(str, key) {
81
+ // Ctrl-c always quits
82
+ if (key?.ctrl && key?.name === "c")
83
+ return "quit";
84
+ // Navigation
85
+ if (str === "j" || key?.name === "down")
86
+ return this.clearPending("move_down");
87
+ if (str === "k" || key?.name === "up")
88
+ return this.clearPending("move_up");
89
+ if (key?.ctrl && key?.name === "d")
90
+ return this.clearPending("half_page_down");
91
+ if (key?.ctrl && key?.name === "u")
92
+ return this.clearPending("half_page_up");
93
+ // G goes to bottom
94
+ if (str === "G" && !key?.ctrl)
95
+ return this.clearPending("goto_bottom");
96
+ // gg goes to top (multi-key sequence)
97
+ if (str === "g")
98
+ return this.handlePendingG();
99
+ // Actions
100
+ if (key?.name === "return")
101
+ return this.clearPending("select");
102
+ if (str === "q")
103
+ return this.clearPending("quit");
104
+ if (key?.name === "escape")
105
+ return this.clearPending("cancel_input");
106
+ if (str === ":")
107
+ return this.clearPending("enter_command");
108
+ if (str === "/")
109
+ return this.clearPending("enter_search");
110
+ // Any other key clears pending
111
+ this.clearPendingState();
112
+ return "none";
113
+ }
114
+ handlePendingG() {
115
+ if (this.pendingKey === "g") {
116
+ this.clearPendingState();
117
+ return "goto_top";
118
+ }
119
+ this.pendingKey = "g";
120
+ if (this.pendingTimer)
121
+ clearTimeout(this.pendingTimer);
122
+ this.pendingTimer = setTimeout(() => {
123
+ this.pendingKey = null;
124
+ this.pendingTimer = null;
125
+ if (this.onPendingExpired)
126
+ this.onPendingExpired();
127
+ }, PENDING_TIMEOUT_MS);
128
+ return "none";
129
+ }
130
+ clearPending(action) {
131
+ this.clearPendingState();
132
+ return action;
133
+ }
134
+ clearPendingState() {
135
+ if (this.pendingTimer) {
136
+ clearTimeout(this.pendingTimer);
137
+ this.pendingTimer = null;
138
+ }
139
+ this.pendingKey = null;
140
+ }
141
+ }
142
+ exports.VimKeymap = VimKeymap;
143
+ //# sourceMappingURL=keymap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keymap.js","sourceRoot":"","sources":["../../src/tui/keymap.ts"],"names":[],"mappings":";;;AA8BA,MAAM,kBAAkB,GAAG,GAAG,CAAC;AAE/B,MAAa,SAAS;IACZ,UAAU,GAAkB,IAAI,CAAC;IACjC,YAAY,GAAyC,IAAI,CAAC;IAC1D,gBAAgB,GAAwB,IAAI,CAAC;IAErD,wBAAwB,CAAC,OAAmB;QAC1C,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC;IAClC,CAAC;IAED,OAAO,CAAC,GAAuB,EAAE,GAA4B,EAAE,IAAa;QAC1E,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC3C,CAAC;QACD,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC5C,OAAO,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACzC,CAAC;QACD,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC1C,CAAC;QACD,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACxC,CAAC;IAED,OAAO;QACL,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAChC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAC3B,CAAC;QACD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;IACzB,CAAC;IAEO,kBAAkB,CAAC,GAAuB,EAAE,GAA4B;QAC9E,mDAAmD;QACnD,IAAI,GAAG,EAAE,IAAI,IAAI,GAAG,EAAE,IAAI,KAAK,GAAG;YAAE,OAAO,MAAM,CAAC;QAClD,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG;YAAE,OAAO,aAAa,CAAC;QACrD,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,EAAE,IAAI,KAAK,QAAQ;YAAE,OAAO,YAAY,CAAC;QAC9E,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,gBAAgB,CAAC,GAAuB,EAAE,GAA4B;QAC5E,IAAI,GAAG,EAAE,IAAI,KAAK,QAAQ;YAAE,OAAO,cAAc,CAAC;QAClD,IAAI,GAAG,EAAE,IAAI,KAAK,QAAQ;YAAE,OAAO,eAAe,CAAC;QACnD,IAAI,GAAG,EAAE,IAAI,KAAK,WAAW;YAAE,OAAO,iBAAiB,CAAC;QAExD,qBAAqB;QACrB,IAAI,GAAG,EAAE,IAAI,IAAI,GAAG,EAAE,IAAI,KAAK,GAAG;YAAE,OAAO,MAAM,CAAC;QAElD,sBAAsB;QACtB,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;YACxD,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;QAC3C,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,iBAAiB,CAAC,GAAuB,EAAE,GAA4B;QAC7E,IAAI,GAAG,EAAE,IAAI,IAAI,GAAG,EAAE,IAAI,KAAK,GAAG;YAAE,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QACrE,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,EAAE,IAAI,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAC5E,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,EAAE,IAAI,KAAK,MAAM;YAAE,OAAO,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;QAC/E,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,EAAE,IAAI,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QAC3E,IAAI,GAAG,EAAE,IAAI,IAAI,GAAG,EAAE,IAAI,KAAK,GAAG;YAAE,OAAO,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC;QAC/E,IAAI,GAAG,EAAE,IAAI,IAAI,GAAG,EAAE,IAAI,KAAK,GAAG;YAAE,OAAO,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC;QAC7E,IAAI,GAAG,KAAK,GAAG;YAAE,OAAO,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC;QAE3D,SAAS;QACT,IAAI,GAAG,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI;YAAE,OAAO,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;QACvE,IAAI,GAAG,KAAK,GAAG;YAAE,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC;QAE9C,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,eAAe,CAAC,GAAuB,EAAE,GAA4B;QAC3E,sBAAsB;QACtB,IAAI,GAAG,EAAE,IAAI,IAAI,GAAG,EAAE,IAAI,KAAK,GAAG;YAAE,OAAO,MAAM,CAAC;QAElD,aAAa;QACb,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,EAAE,IAAI,KAAK,MAAM;YAAE,OAAO,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;QAC/E,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,EAAE,IAAI,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QAC3E,IAAI,GAAG,EAAE,IAAI,IAAI,GAAG,EAAE,IAAI,KAAK,GAAG;YAAE,OAAO,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC;QAC/E,IAAI,GAAG,EAAE,IAAI,IAAI,GAAG,EAAE,IAAI,KAAK,GAAG;YAAE,OAAO,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC;QAE7E,mBAAmB;QACnB,IAAI,GAAG,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI;YAAE,OAAO,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;QAEvE,sCAAsC;QACtC,IAAI,GAAG,KAAK,GAAG;YAAE,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC;QAE9C,UAAU;QACV,IAAI,GAAG,EAAE,IAAI,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QAC/D,IAAI,GAAG,KAAK,GAAG;YAAE,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAClD,IAAI,GAAG,EAAE,IAAI,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC;QACrE,IAAI,GAAG,KAAK,GAAG;YAAE,OAAO,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC;QAC3D,IAAI,GAAG,KAAK,GAAG;YAAE,OAAO,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC;QAE1D,+BAA+B;QAC/B,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,cAAc;QACpB,IAAI,IAAI,CAAC,UAAU,KAAK,GAAG,EAAE,CAAC;YAC5B,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACzB,OAAO,UAAU,CAAC;QACpB,CAAC;QAED,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC;QACtB,IAAI,IAAI,CAAC,YAAY;YAAE,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACvD,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,GAAG,EAAE;YAClC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;YACvB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YACzB,IAAI,IAAI,CAAC,gBAAgB;gBAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACrD,CAAC,EAAE,kBAAkB,CAAC,CAAC;QAEvB,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,YAAY,CAAC,MAAiB;QACpC,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,iBAAiB;QACvB,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAChC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAC3B,CAAC;QACD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;IACzB,CAAC;CACF;AAhID,8BAgIC"}
@@ -0,0 +1,12 @@
1
+ import type { TuiModuleDescriptor, TuiState } from "./types";
2
+ import { resetEnvCache } from "../lib/env-cache";
3
+ export { resetEnvCache };
4
+ export declare function getVisibleRows(): number;
5
+ export declare function render<T>(descriptor: TuiModuleDescriptor<T>, state: TuiState<T>): void;
6
+ /**
7
+ * Word-wraps detail lines to fit within maxWidth.
8
+ * Handles lines with ANSI codes by stripping for measurement.
9
+ * Long values in key-value lines wrap with indentation to align under the value.
10
+ */
11
+ export declare function wrapDetailLines(lines: string[], maxWidth: number): string[];
12
+ //# sourceMappingURL=renderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../src/tui/renderer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAgB,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAM/D,OAAO,EAAE,aAAa,EAAE,CAAC;AAqDzB,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,wBAAgB,MAAM,CAAC,CAAC,EAAE,UAAU,EAAE,mBAAmB,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAgBtF;AA4HD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAmF3E"}
@@ -0,0 +1,379 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.resetEnvCache = void 0;
7
+ exports.getVisibleRows = getVisibleRows;
8
+ exports.render = render;
9
+ exports.wrapDetailLines = wrapDetailLines;
10
+ const chalk_1 = __importDefault(require("chalk"));
11
+ const env_cache_1 = require("../lib/env-cache");
12
+ Object.defineProperty(exports, "resetEnvCache", { enumerable: true, get: function () { return env_cache_1.resetEnvCache; } });
13
+ // Regex matching all ANSI escape sequences (colors, cursor, etc.)
14
+ const ANSI_RE = /\x1b\[[0-9;]*m/g;
15
+ function stripAnsi(str) {
16
+ return str.replace(ANSI_RE, "");
17
+ }
18
+ function displayWidth(str) {
19
+ return stripAnsi(str).length;
20
+ }
21
+ /**
22
+ * Truncate a string that may contain ANSI codes to a given display width.
23
+ * Preserves escape sequences and appends ellipsis when truncated.
24
+ */
25
+ function truncateAnsi(str, maxWidth) {
26
+ if (maxWidth <= 0)
27
+ return "";
28
+ const stripped = stripAnsi(str);
29
+ if (stripped.length <= maxWidth)
30
+ return str;
31
+ // Walk the original string, tracking visible character count
32
+ let visible = 0;
33
+ let result = "";
34
+ const ellipsis = maxWidth > 1 ? "\u2026" : "";
35
+ const limit = maxWidth - (ellipsis ? 1 : 0);
36
+ let i = 0;
37
+ while (i < str.length && visible < limit) {
38
+ // Check if current position starts an ANSI escape
39
+ if (str[i] === "\x1b" && str[i + 1] === "[") {
40
+ const end = str.indexOf("m", i);
41
+ if (end !== -1) {
42
+ result += str.slice(i, end + 1);
43
+ i = end + 1;
44
+ continue;
45
+ }
46
+ }
47
+ result += str[i];
48
+ visible++;
49
+ i++;
50
+ }
51
+ // Close any open ANSI sequences with a reset
52
+ result += ellipsis + "\x1b[0m";
53
+ return result;
54
+ }
55
+ const HEADER_LINES = 3; // title + columns + separator
56
+ const FOOTER_LINES = 1; // bottom bar
57
+ const brandColor = chalk_1.default.hex("#ffbe98");
58
+ const BRAND_TEXT = "CREEM"; // fullwidth Unicode for robotic feel
59
+ const BRAND_TEXT_WIDTH = 10; // each fullwidth char is 2 cells wide
60
+ function getVisibleRows() {
61
+ return Math.max(1, (process.stdout.rows || 24) - HEADER_LINES - FOOTER_LINES);
62
+ }
63
+ function render(descriptor, state) {
64
+ const cols = process.stdout.columns || 80;
65
+ const rows = process.stdout.rows || 24;
66
+ let buffer = "";
67
+ // Move cursor to top-left and clear screen
68
+ buffer += "\x1b[H\x1b[2J";
69
+ if (state.mode === "detail" && state.selectedItem) {
70
+ buffer += renderDetailView(descriptor, state, cols, rows);
71
+ }
72
+ else {
73
+ buffer += renderListView(descriptor, state, cols, rows);
74
+ }
75
+ process.stdout.write(buffer);
76
+ }
77
+ function renderListView(descriptor, state, cols, rows) {
78
+ let buffer = "";
79
+ const visibleRows = Math.max(1, rows - HEADER_LINES - FOOTER_LINES);
80
+ const items = state.searchQuery ? state.filteredItems : state.items;
81
+ // Header line
82
+ const env = (0, env_cache_1.getCachedEnv)();
83
+ const itemCount = state.totalItems !== null ? state.totalItems : items.length;
84
+ const countSuffix = state.hasMorePages ? "+" : "";
85
+ let title = `${chalk_1.default.bold(descriptor.name)} ${chalk_1.default.dim(`(${env})`)} ${chalk_1.default.dim(`- ${itemCount}${countSuffix} items`)}`;
86
+ if (state.isLoading) {
87
+ title += chalk_1.default.yellow(" loading...");
88
+ }
89
+ if (state.searchQuery) {
90
+ title += chalk_1.default.cyan(` [/${state.searchQuery}]`);
91
+ }
92
+ buffer += truncateAnsi(` ${title}`, cols) + "\n";
93
+ // Column headers - compute widths that fit the terminal
94
+ const columnWidths = computeColumnWidths(descriptor.columns, cols);
95
+ let headerLine = " ";
96
+ for (let i = 0; i < descriptor.columns.length; i++) {
97
+ const col = descriptor.columns[i];
98
+ headerLine += chalk_1.default.cyan(padCell(col.header, columnWidths[i], col.align || "left"));
99
+ if (i < descriptor.columns.length - 1)
100
+ headerLine += " ";
101
+ }
102
+ buffer += truncateAnsi(headerLine, cols) + "\n";
103
+ // Separator - use terminal width, not headerLine length (which includes ANSI)
104
+ buffer += chalk_1.default.dim(" " + "\u2500".repeat(Math.max(0, cols - 2))) + "\n";
105
+ // Rows
106
+ if (items.length === 0) {
107
+ const emptyMsg = state.searchQuery
108
+ ? "No matching items"
109
+ : state.isLoading
110
+ ? "Loading..."
111
+ : "No items found";
112
+ const padTop = Math.floor(visibleRows / 2);
113
+ for (let i = 0; i < padTop; i++)
114
+ buffer += "\n";
115
+ buffer += chalk_1.default.dim(` ${emptyMsg}`) + "\n";
116
+ for (let i = padTop + 1; i < visibleRows; i++)
117
+ buffer += "\n";
118
+ }
119
+ else {
120
+ for (let i = 0; i < visibleRows; i++) {
121
+ const itemIndex = state.scrollOffset + i;
122
+ if (itemIndex >= items.length) {
123
+ buffer += "\n";
124
+ continue;
125
+ }
126
+ const item = items[itemIndex];
127
+ const isSelected = itemIndex === state.cursorIndex;
128
+ let rowStr = " ";
129
+ for (let c = 0; c < descriptor.columns.length; c++) {
130
+ const col = descriptor.columns[c];
131
+ const raw = col.value(item);
132
+ const cellVal = padCell(raw, columnWidths[c], col.align || "left");
133
+ rowStr += cellVal;
134
+ if (c < descriptor.columns.length - 1)
135
+ rowStr += " ";
136
+ }
137
+ // Truncate to terminal width to prevent wrapping
138
+ const truncatedRow = truncateAnsi(rowStr, cols);
139
+ if (isSelected) {
140
+ // Pad to full width for inverse highlight
141
+ const rowWidth = displayWidth(truncatedRow);
142
+ const padRight = Math.max(0, cols - rowWidth);
143
+ buffer += chalk_1.default.inverse(truncatedRow + " ".repeat(padRight)) + "\n";
144
+ }
145
+ else {
146
+ buffer += truncatedRow + "\n";
147
+ }
148
+ }
149
+ }
150
+ // Bottom bar
151
+ buffer += renderBottomBar(descriptor, state, cols);
152
+ return buffer;
153
+ }
154
+ function renderDetailView(descriptor, state, cols, rows) {
155
+ let buffer = "";
156
+ const visibleRows = Math.max(1, rows - 2 - FOOTER_LINES); // title + separator + footer
157
+ // Render detail lines, then word-wrap them to fit the terminal
158
+ const rawLines = descriptor.renderDetail(state.selectedItem);
159
+ const detailLines = wrapDetailLines(rawLines, cols - 2); // -2 for leading space + margin
160
+ // Header
161
+ buffer += truncateAnsi(` ${chalk_1.default.bold(descriptor.name + " Details")}`, cols) + "\n";
162
+ buffer += chalk_1.default.dim(" " + "\u2500".repeat(Math.max(0, cols - 2))) + "\n";
163
+ // Detail content with scroll
164
+ const maxScroll = Math.max(0, detailLines.length - visibleRows);
165
+ const scrollOff = Math.min(state.detailScrollOffset, maxScroll);
166
+ for (let i = 0; i < visibleRows; i++) {
167
+ const lineIdx = scrollOff + i;
168
+ if (lineIdx < detailLines.length) {
169
+ buffer += " " + truncateAnsi(detailLines[lineIdx], cols - 2) + "\n";
170
+ }
171
+ else {
172
+ buffer += "\n";
173
+ }
174
+ }
175
+ // Bottom bar
176
+ buffer += renderBottomBar(descriptor, state, cols);
177
+ return buffer;
178
+ }
179
+ /**
180
+ * Word-wraps detail lines to fit within maxWidth.
181
+ * Handles lines with ANSI codes by stripping for measurement.
182
+ * Long values in key-value lines wrap with indentation to align under the value.
183
+ */
184
+ function wrapDetailLines(lines, maxWidth) {
185
+ if (maxWidth <= 0)
186
+ return lines;
187
+ const wrapped = [];
188
+ for (const line of lines) {
189
+ const visLen = displayWidth(line);
190
+ if (visLen <= maxWidth) {
191
+ wrapped.push(line);
192
+ continue;
193
+ }
194
+ // For empty/short lines, just truncate
195
+ if (maxWidth < 10) {
196
+ wrapped.push(truncateAnsi(line, maxWidth));
197
+ continue;
198
+ }
199
+ // Try to detect key-value format: "Key Value..."
200
+ // Look for double-space separator between label and value
201
+ const plain = stripAnsi(line);
202
+ const kvMatch = plain.match(/^(\S[^]*?\S)\s{2,}(.+)$/);
203
+ if (kvMatch) {
204
+ // Key-value line: wrap the value portion, indent continuation lines
205
+ const labelEnd = plain.indexOf(kvMatch[2]);
206
+ if (labelEnd >= maxWidth) {
207
+ // Label itself fills the line — treat as plain text wrap
208
+ let remaining = stripAnsi(line);
209
+ while (remaining.length > maxWidth) {
210
+ wrapped.push(remaining.slice(0, maxWidth));
211
+ remaining = remaining.slice(maxWidth);
212
+ }
213
+ if (remaining.length > 0)
214
+ wrapped.push(remaining);
215
+ }
216
+ else {
217
+ const indentWidth = Math.min(labelEnd, Math.floor(maxWidth * 0.4));
218
+ // First line: preserve ANSI colors (truncateAnsi keeps escape sequences intact)
219
+ wrapped.push(truncateAnsi(line, maxWidth));
220
+ // Wrap remaining value text with indentation (plain text for continuations is fine)
221
+ const valueText = kvMatch[2];
222
+ const firstValueWidth = maxWidth - labelEnd;
223
+ if (firstValueWidth < valueText.length && firstValueWidth > 1) {
224
+ // Account for ellipsis taking one character position on truncated first line
225
+ // (need at least 2 chars of space to show 1 char + ellipsis)
226
+ const firstLineValueChars = Math.max(0, firstValueWidth - 1);
227
+ let remaining = valueText.slice(firstLineValueChars);
228
+ const wrapWidth = Math.max(1, maxWidth - indentWidth);
229
+ while (remaining.length > 0) {
230
+ const chunk = remaining.slice(0, wrapWidth);
231
+ wrapped.push(" ".repeat(indentWidth) + chunk);
232
+ remaining = remaining.slice(wrapWidth);
233
+ }
234
+ }
235
+ }
236
+ }
237
+ else {
238
+ // Plain text line: first chunk preserves ANSI colors, rest is plain
239
+ let remaining = stripAnsi(line);
240
+ let isFirst = true;
241
+ while (remaining.length > maxWidth) {
242
+ if (isFirst) {
243
+ wrapped.push(truncateAnsi(line, maxWidth));
244
+ isFirst = false;
245
+ // Account for ellipsis taking one character position in truncateAnsi
246
+ remaining = remaining.slice(maxWidth - 1);
247
+ }
248
+ else {
249
+ // Continuation lines also need ellipsis when more content follows
250
+ wrapped.push(remaining.slice(0, maxWidth - 1) + "\u2026");
251
+ remaining = remaining.slice(maxWidth - 1);
252
+ }
253
+ }
254
+ if (remaining.length > 0) {
255
+ if (isFirst) {
256
+ wrapped.push(line); // Short enough after strip — keep original with ANSI
257
+ }
258
+ else {
259
+ wrapped.push(remaining);
260
+ }
261
+ }
262
+ }
263
+ }
264
+ return wrapped;
265
+ }
266
+ function buildBar(controls, cols) {
267
+ const brand = " " + brandColor.bold(BRAND_TEXT) + " ";
268
+ const brandWidth = BRAND_TEXT_WIDTH + 3; // space + text + 2 spaces
269
+ const controlsWidth = displayWidth(controls);
270
+ // Show brand on the left if there's room
271
+ if (cols >= brandWidth + controlsWidth) {
272
+ const padRight = Math.max(0, cols - brandWidth - controlsWidth);
273
+ return chalk_1.default.inverse(brand + controls + " ".repeat(padRight));
274
+ }
275
+ const padRight = Math.max(0, cols - controlsWidth);
276
+ return chalk_1.default.inverse(controls + " ".repeat(padRight));
277
+ }
278
+ function renderBottomBar(descriptor, state, cols) {
279
+ // Status message takes priority if present
280
+ if (state.statusMessage) {
281
+ const colorFn = state.statusType === "error"
282
+ ? chalk_1.default.red
283
+ : state.statusType === "success"
284
+ ? chalk_1.default.green
285
+ : chalk_1.default.blue;
286
+ const msg = truncateAnsi(` ${state.statusMessage}`, cols);
287
+ const padRight = Math.max(0, cols - displayWidth(msg));
288
+ return colorFn(msg + " ".repeat(padRight));
289
+ }
290
+ if (state.mode === "command") {
291
+ const msg = ` :${state.commandInput}`;
292
+ return chalk_1.default.inverse(msg.padEnd(cols));
293
+ }
294
+ if (state.mode === "search") {
295
+ const msg = ` /${state.searchQuery}`;
296
+ return chalk_1.default.inverse(msg.padEnd(cols));
297
+ }
298
+ if (state.mode === "confirm" && state.pendingCommand) {
299
+ const msg = ` ${state.pendingCommand.name} selected item? (y/n)`;
300
+ return chalk_1.default.yellow.inverse(msg.padEnd(cols));
301
+ }
302
+ if (state.mode === "detail") {
303
+ const cmdParts = [chalk_1.default.dim("q") + ":back"];
304
+ for (const cmd of descriptor.commands) {
305
+ cmdParts.push(chalk_1.default.dim(":" + cmd.name));
306
+ }
307
+ const bar = " " + cmdParts.join(" ");
308
+ return buildBar(bar, cols);
309
+ }
310
+ // List mode - adapt help hints to available width
311
+ let parts;
312
+ if (cols < 50) {
313
+ parts = [chalk_1.default.dim("j/k") + ":nav", chalk_1.default.dim("q") + ":quit"];
314
+ }
315
+ else if (cols < 70) {
316
+ parts = [
317
+ chalk_1.default.dim("j/k") + ":nav",
318
+ chalk_1.default.dim("Enter") + ":open",
319
+ chalk_1.default.dim("/") + ":search",
320
+ chalk_1.default.dim("q") + ":quit",
321
+ ];
322
+ }
323
+ else {
324
+ parts = [
325
+ chalk_1.default.dim("j/k") + ":nav",
326
+ chalk_1.default.dim("Enter") + ":details",
327
+ chalk_1.default.dim("/") + ":search",
328
+ chalk_1.default.dim(":") + ":command",
329
+ chalk_1.default.dim("q") + ":quit",
330
+ ];
331
+ }
332
+ const bar = " " + parts.join(" ");
333
+ return buildBar(bar, cols);
334
+ }
335
+ function computeColumnWidths(columns, totalCols) {
336
+ const gap = 2;
337
+ const gapSpace = (columns.length - 1) * gap + 1; // +1 for leading space
338
+ const autoCount = columns.filter((c) => c.width === "auto").length;
339
+ // Calculate the total fixed width requested
340
+ const requestedFixed = columns.reduce((sum, col) => {
341
+ return sum + (typeof col.width === "number" ? col.width : 0);
342
+ }, 0);
343
+ const availableForContent = totalCols - gapSpace;
344
+ // If fixed columns alone exceed available space, shrink them proportionally
345
+ if (requestedFixed > availableForContent && requestedFixed > 0) {
346
+ const scale = Math.max(0.2, availableForContent / requestedFixed);
347
+ return columns.map((col) => {
348
+ if (typeof col.width === "number") {
349
+ return Math.max(col.header.length, Math.floor(col.width * scale));
350
+ }
351
+ // Auto columns get minimum header width when space is tight
352
+ return col.header.length;
353
+ });
354
+ }
355
+ const remaining = Math.max(0, availableForContent - requestedFixed);
356
+ const autoWidth = autoCount > 0 ? Math.floor(remaining / autoCount) : 0;
357
+ return columns.map((col) => {
358
+ if (typeof col.width === "number")
359
+ return col.width;
360
+ return Math.max(col.header.length, autoWidth);
361
+ });
362
+ }
363
+ function padCell(text, width, align) {
364
+ const visLen = displayWidth(text);
365
+ // Need to truncate — use truncateAnsi to preserve ANSI color codes
366
+ if (visLen > width) {
367
+ return truncateAnsi(text, width);
368
+ }
369
+ // Pad to desired width
370
+ const pad = Math.max(0, width - visLen);
371
+ if (align === "right")
372
+ return " ".repeat(pad) + text;
373
+ if (align === "center") {
374
+ const left = Math.floor(pad / 2);
375
+ return " ".repeat(left) + text + " ".repeat(pad - left);
376
+ }
377
+ return text + " ".repeat(pad);
378
+ }
379
+ //# sourceMappingURL=renderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderer.js","sourceRoot":"","sources":["../../src/tui/renderer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ export interface TuiColumnDef<T> {
2
+ header: string;
3
+ width: number | "auto";
4
+ value: (item: T) => string;
5
+ align?: "left" | "right" | "center";
6
+ }
7
+ export interface TuiFetchResult<T> {
8
+ items: T[];
9
+ hasMore: boolean;
10
+ total?: number;
11
+ }
12
+ export interface TuiCommandResult {
13
+ success: boolean;
14
+ message: string;
15
+ refreshList?: boolean;
16
+ }
17
+ export interface TuiCommandDef<T> {
18
+ name: string;
19
+ description: string;
20
+ requiresSelection: boolean;
21
+ destructive?: boolean;
22
+ execute: (selectedItem: T | null, args: string) => Promise<TuiCommandResult>;
23
+ }
24
+ export interface TuiModuleDescriptor<T> {
25
+ name: string;
26
+ columns: TuiColumnDef<T>[];
27
+ fetchPage: (page: number, pageSize: number) => Promise<TuiFetchResult<T>>;
28
+ getId: (item: T) => string;
29
+ renderDetail: (item: T) => string[];
30
+ commands: TuiCommandDef<T>[];
31
+ searchFilter?: (item: T, query: string) => boolean;
32
+ }
33
+ export type TuiMode = "list" | "detail" | "command" | "search" | "confirm";
34
+ export interface TuiState<T> {
35
+ mode: TuiMode;
36
+ items: T[];
37
+ cursorIndex: number;
38
+ scrollOffset: number;
39
+ selectedItem: T | null;
40
+ detailScrollOffset: number;
41
+ commandInput: string;
42
+ searchQuery: string;
43
+ filteredItems: T[];
44
+ currentPage: number;
45
+ hasMorePages: boolean;
46
+ totalItems: number | null;
47
+ isLoading: boolean;
48
+ statusMessage: string | null;
49
+ statusType: "info" | "success" | "error";
50
+ pendingCommand: TuiCommandDef<T> | null;
51
+ }
52
+ export declare function createInitialState<T>(): TuiState<T>;
53
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/tui/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;CACrC;AAED,MAAM,WAAW,cAAc,CAAC,CAAC;IAC/B,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,aAAa,CAAC,CAAC;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,EAAE,CAAC,YAAY,EAAE,CAAC,GAAG,IAAI,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAC;CAC9E;AAED,MAAM,WAAW,mBAAmB,CAAC,CAAC;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3B,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1E,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,CAAC;IAC3B,YAAY,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,EAAE,CAAC;IACpC,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7B,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;CACpD;AAED,MAAM,MAAM,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE3E,MAAM,WAAW,QAAQ,CAAC,CAAC;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,CAAC,GAAG,IAAI,CAAC;IACvB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,CAAC,EAAE,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,OAAO,CAAC;IACtB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;IACzC,cAAc,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;CACzC;AAED,wBAAgB,kBAAkB,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAmBnD"}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createInitialState = createInitialState;
4
+ function createInitialState() {
5
+ return {
6
+ mode: "list",
7
+ items: [],
8
+ cursorIndex: 0,
9
+ scrollOffset: 0,
10
+ selectedItem: null,
11
+ detailScrollOffset: 0,
12
+ commandInput: "",
13
+ searchQuery: "",
14
+ filteredItems: [],
15
+ currentPage: 0,
16
+ hasMorePages: true,
17
+ totalItems: null,
18
+ isLoading: false,
19
+ statusMessage: null,
20
+ statusType: "info",
21
+ pendingCommand: null,
22
+ };
23
+ }
24
+ //# sourceMappingURL=types.js.map