alimberdi 0.5.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -4,7 +4,9 @@ An interactive terminal profile for backend engineer Adilkhan Alimberdi.
4
4
 
5
5
  The default command opens a centered full-screen terminal interface. Navigate
6
6
  with the arrow keys, select with Enter, go back with Escape, and quit with Q.
7
- The Settings screen can switch the active runtime theme instantly.
7
+ The Settings screen can switch themes, change the interface density, move the
8
+ card toward the top of the terminal, and hide keyboard hints. Preferences are
9
+ saved between runs.
8
10
 
9
11
  ## Run
10
12
 
@@ -27,6 +29,9 @@ npx alimberdi help
27
29
  | `↑` / `↓` | Move between actions |
28
30
  | `Enter` | Select |
29
31
  | `Esc` / `←` | Go back |
32
+ | `1`—`9` | Select an action directly |
33
+ | `T` | Open the theme switcher |
34
+ | `?` | Show every keyboard shortcut |
30
35
  | `Q` | Exit and restore the terminal |
31
36
 
32
37
  ## Themes
@@ -40,7 +45,21 @@ The interactive Settings screen includes four runtime presets:
40
45
 
41
46
  Move through the presets to preview each theme across the full interface. Press
42
47
  Enter to apply the preview, or Escape to cancel it. The applied theme lasts for
43
- the current CLI session.
48
+ future CLI sessions until it is changed or reset.
49
+
50
+ ## Customization
51
+
52
+ Settings are stored in the operating system's standard configuration folder.
53
+ The interactive Settings screen supports:
54
+
55
+ - four live-preview themes;
56
+ - comfortable and compact interface density;
57
+ - centered and top-aligned card positions;
58
+ - visible or hidden keyboard hints;
59
+ - one-action reset to defaults.
60
+
61
+ The CLI continues with defaults if the settings file is missing, read-only, or
62
+ invalid.
44
63
 
45
64
  ## Local development
46
65
 
@@ -1,15 +1,18 @@
1
+ import { type PreferencesStore } from "../domain/preferences.js";
1
2
  export declare class InteractiveApp {
2
3
  private readonly input;
3
4
  private readonly output;
4
5
  private readonly terminate;
6
+ private readonly preferencesStore;
5
7
  private screen;
6
8
  private selectedIndex;
9
+ private preferences;
7
10
  private themeId;
8
11
  private appliedThemeId;
9
- private themeNotice;
12
+ private notice;
10
13
  private exiting;
11
14
  private resolve;
12
- constructor(input: NodeJS.ReadStream, output: NodeJS.WriteStream, terminate?: (code: number) => void);
15
+ constructor(input: NodeJS.ReadStream, output: NodeJS.WriteStream, terminate?: (code: number) => void, preferencesStore?: PreferencesStore);
13
16
  run(): Promise<void>;
14
17
  private readonly onKeypress;
15
18
  private readonly render;
@@ -18,6 +21,15 @@ export declare class InteractiveApp {
18
21
  private goTo;
19
22
  private applyTheme;
20
23
  private previewSelectedTheme;
24
+ private goBack;
25
+ private toggleDensity;
26
+ private togglePosition;
27
+ private toggleHints;
28
+ private resetPreferences;
29
+ private savePreferences;
30
+ private labelDensity;
31
+ private labelPosition;
32
+ private openLink;
21
33
  private exit;
22
34
  }
23
35
  export declare function runInteractiveApp(input: NodeJS.ReadStream, output: NodeJS.WriteStream): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"interactive-app.d.ts","sourceRoot":"","sources":["../../src/app/interactive-app.ts"],"names":[],"mappings":"AAkCA,qBAAa,cAAc;IAUvB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAX5B,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,OAAO,CAA4B;IAC3C,OAAO,CAAC,cAAc,CAA4B;IAClD,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAA2B;gBAGvB,KAAK,EAAE,MAAM,CAAC,UAAU,EACxB,MAAM,EAAE,MAAM,CAAC,WAAW,EAC1B,SAAS,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAmC;IAG5E,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IAa3B,OAAO,CAAC,QAAQ,CAAC,UAAU,CA6BzB;IAEF,OAAO,CAAC,QAAQ,CAAC,MAAM,CAgBrB;IAEF,OAAO,CAAC,OAAO;IAqEf,OAAO,CAAC,OAAO;IAmFf,OAAO,CAAC,IAAI;IAaZ,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,oBAAoB;IAiB5B,OAAO,CAAC,IAAI;CAiBb;AAED,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,MAAM,CAAC,UAAU,EACxB,MAAM,EAAE,MAAM,CAAC,WAAW,GACzB,OAAO,CAAC,IAAI,CAAC,CAEf"}
1
+ {"version":3,"file":"interactive-app.d.ts","sourceRoot":"","sources":["../../src/app/interactive-app.ts"],"names":[],"mappings":"AAEA,OAAO,EAIL,KAAK,gBAAgB,EACtB,MAAM,0BAA0B,CAAC;AAyClC,qBAAa,cAAc;IAWvB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IAbnC,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,cAAc,CAAU;IAChC,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAA2B;gBAGvB,KAAK,EAAE,MAAM,CAAC,UAAU,EACxB,MAAM,EAAE,MAAM,CAAC,WAAW,EAC1B,SAAS,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAmC,EAChE,gBAAgB,GAAE,gBAA6C;IAO3E,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IAa3B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAkDzB;IAEF,OAAO,CAAC,QAAQ,CAAC,MAAM,CAwBrB;IAEF,OAAO,CAAC,OAAO;IA8Gf,OAAO,CAAC,OAAO;IAsIf,OAAO,CAAC,IAAI;IAaZ,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,oBAAoB;IAiB5B,OAAO,CAAC,MAAM;IAId,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,QAAQ;IAKhB,OAAO,CAAC,IAAI;CAiBb;AAED,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,MAAM,CAAC,UAAU,EACxB,MAAM,EAAE,MAAM,CAAC,WAAW,GACzB,OAAO,CAAC,IAAI,CAAC,CAEf"}
@@ -1,9 +1,10 @@
1
1
  import { spawn } from "node:child_process";
2
2
  import readline from "node:readline";
3
+ import { defaultPreferences, FilePreferencesStore, } from "../domain/preferences.js";
3
4
  import { profile } from "../domain/profile.js";
4
5
  import { control } from "../ui/ansi.js";
5
6
  import { centerInTerminal, renderFrame } from "../ui/frame.js";
6
- import { defaultTheme, getTheme, themes } from "../ui/theme.js";
7
+ import { getTheme, themes } from "../ui/theme.js";
7
8
  function openExternal(url) {
8
9
  const command = process.platform === "win32"
9
10
  ? { file: "cmd.exe", args: ["/d", "/s", "/c", "start", "", url] }
@@ -20,17 +21,23 @@ export class InteractiveApp {
20
21
  input;
21
22
  output;
22
23
  terminate;
24
+ preferencesStore;
23
25
  screen = "home";
24
26
  selectedIndex = 0;
25
- themeId = defaultTheme.id;
26
- appliedThemeId = defaultTheme.id;
27
- themeNotice;
27
+ preferences;
28
+ themeId;
29
+ appliedThemeId;
30
+ notice;
28
31
  exiting = false;
29
32
  resolve;
30
- constructor(input, output, terminate = (code) => process.exit(code)) {
33
+ constructor(input, output, terminate = (code) => process.exit(code), preferencesStore = new FilePreferencesStore()) {
31
34
  this.input = input;
32
35
  this.output = output;
33
36
  this.terminate = terminate;
37
+ this.preferencesStore = preferencesStore;
38
+ this.preferences = this.preferencesStore.load();
39
+ this.themeId = this.preferences.theme;
40
+ this.appliedThemeId = this.preferences.theme;
34
41
  }
35
42
  run() {
36
43
  return new Promise((resolve) => {
@@ -44,22 +51,40 @@ export class InteractiveApp {
44
51
  this.render();
45
52
  });
46
53
  }
47
- onKeypress = (_input, key) => {
54
+ onKeypress = (inputValue, key) => {
48
55
  if ((key.ctrl === true && key.name === "c") || key.name === "q") {
49
56
  this.exit();
50
57
  return;
51
58
  }
59
+ if (inputValue === "?" || key.name === "?") {
60
+ this.goTo("shortcuts");
61
+ this.render();
62
+ return;
63
+ }
64
+ if (key.name === "t") {
65
+ this.goTo("themes");
66
+ this.render();
67
+ return;
68
+ }
52
69
  if (key.name === "escape" || key.name === "left" || key.name === "backspace") {
53
70
  if (this.screen === "home") {
54
71
  this.exit();
55
72
  }
56
73
  else {
57
- this.goTo("home");
74
+ this.goBack();
58
75
  this.render();
59
76
  }
60
77
  return;
61
78
  }
62
79
  const actions = this.actions();
80
+ const number = Number.parseInt(inputValue, 10);
81
+ if (/^[1-9]$/.test(inputValue) && number <= actions.length) {
82
+ this.selectedIndex = number - 1;
83
+ this.previewSelectedTheme();
84
+ actions[this.selectedIndex]?.run();
85
+ this.render();
86
+ return;
87
+ }
63
88
  if (key.name === "up" || key.name === "k") {
64
89
  this.selectedIndex = (this.selectedIndex - 1 + actions.length) % actions.length;
65
90
  this.previewSelectedTheme();
@@ -80,12 +105,18 @@ export class InteractiveApp {
80
105
  const rows = Math.max(20, this.output.rows ?? 24);
81
106
  const width = Math.min(76, columns - 4);
82
107
  const actions = this.actions();
108
+ const content = this.content();
83
109
  const frame = renderFrame({
84
- ...this.content(),
110
+ ...content,
111
+ ...(content.notice === undefined && this.notice !== undefined
112
+ ? { notice: this.notice }
113
+ : {}),
85
114
  menu: actions.map((action) => action.row),
86
115
  selectedIndex: this.selectedIndex,
116
+ density: this.preferences.density,
117
+ showFooter: this.preferences.showHints,
87
118
  }, width, getTheme(this.themeId));
88
- this.output.write(`${control.clear}${centerInTerminal(frame, columns, rows)}`);
119
+ this.output.write(`${control.clear}${centerInTerminal(frame, columns, rows, this.preferences.position)}`);
89
120
  };
90
121
  content() {
91
122
  const theme = getTheme(this.themeId);
@@ -102,17 +133,26 @@ export class InteractiveApp {
102
133
  `${theme.style.muted("PROOF")} 1,200+ problems · ICPC Kazakhstan 3rd place`,
103
134
  ],
104
135
  };
136
+ case "achievements":
137
+ return {
138
+ title: "Achievements",
139
+ subtitle: "proof of consistent problem solving",
140
+ body: [
141
+ `${theme.style.primary("03")} ICPC Kazakhstan Regional · 3rd place`,
142
+ `${theme.style.primary("01×2")} Regional Olympiad in Informatics · winner`,
143
+ `${theme.style.primary("1200+")} algorithmic problems solved`,
144
+ `${theme.style.primary("98/98")} GoLancer project defense`,
145
+ "",
146
+ theme.style.muted("The numbers matter less than the discipline behind them."),
147
+ ],
148
+ };
105
149
  case "projects":
106
150
  return {
107
151
  title: "Projects",
108
152
  subtitle: "systems shaped by real constraints",
109
153
  body: [
110
- `${theme.style.primary("Cloud Storage")} S3 streams · events · Redis auth`,
111
- `${theme.style.primary("GoLancer")} race-safe wallets · 150+ tests`,
112
- `${theme.style.primary("Audio Analytics")} ASR + LLM · batch + real-time`,
113
- `${theme.style.primary("Personal Platform")} Spring Boot · React · PostgreSQL`,
114
- "",
115
- "I like systems that stay understandable under pressure.",
154
+ "Select a project to inspect its source code.",
155
+ theme.style.muted("Each one explores a different engineering constraint."),
116
156
  ],
117
157
  };
118
158
  case "contact":
@@ -125,10 +165,24 @@ export class InteractiveApp {
125
165
  ],
126
166
  };
127
167
  case "settings":
168
+ return {
169
+ title: "Settings",
170
+ subtitle: "make the terminal feel like yours",
171
+ body: [
172
+ `${theme.style.muted("THEME")} ${theme.style.title(getTheme(this.appliedThemeId).label)}`,
173
+ `${theme.style.muted("DENSITY")} ${theme.style.title(this.labelDensity())}`,
174
+ `${theme.style.muted("POSITION")} ${theme.style.title(this.labelPosition())}`,
175
+ `${theme.style.muted("KEY HINTS")} ${theme.style.title(this.preferences.showHints ? "Visible" : "Hidden")}`,
176
+ "",
177
+ theme.style.muted("Changes are saved automatically on this device."),
178
+ ],
179
+ ...(this.notice === undefined ? {} : { notice: this.notice }),
180
+ };
181
+ case "themes": {
128
182
  const appliedTheme = getTheme(this.appliedThemeId);
129
183
  const isPreviewing = this.themeId !== this.appliedThemeId;
130
184
  return {
131
- title: "Settings",
185
+ title: "Themes",
132
186
  subtitle: "theme switcher",
133
187
  body: [
134
188
  `${theme.style.muted("ACTIVE")} ${theme.style.title(appliedTheme.label)}`,
@@ -139,62 +193,124 @@ export class InteractiveApp {
139
193
  ? "Press Enter to keep this theme, or Esc to cancel."
140
194
  : "Use the arrows to preview another theme.",
141
195
  ],
142
- ...(this.themeNotice === undefined ? {} : { notice: this.themeNotice }),
196
+ ...(this.notice === undefined ? {} : { notice: this.notice }),
143
197
  footer: "↑↓ preview enter apply esc cancel q quit",
144
198
  };
199
+ }
200
+ case "shortcuts":
201
+ return {
202
+ title: "Keyboard",
203
+ subtitle: "move quickly without reaching for the mouse",
204
+ body: [
205
+ `${theme.style.primary("↑ ↓ / J K")} move through actions`,
206
+ `${theme.style.primary("ENTER / →")} select an action`,
207
+ `${theme.style.primary("ESC / ←")} go back`,
208
+ `${theme.style.primary("1—9")} choose an action directly`,
209
+ `${theme.style.primary("T")} open the theme switcher`,
210
+ `${theme.style.primary("?")} show this screen`,
211
+ `${theme.style.primary("Q")} leave the application`,
212
+ ],
213
+ };
145
214
  case "home":
146
215
  return {
147
216
  title: profile.displayName,
148
217
  subtitle: profile.tagline,
149
218
  body: [
150
- "I turn hard problems into systems that make sense.",
151
- "Built in Kazakhstan. Ready for real-world pressure.",
219
+ `${theme.style.primary("[ JAVA 21 ]")} ${theme.style.secondary("[ SPRING ]")} ${theme.style.primary("[ POSTGRES ]")} ${theme.style.secondary("[ REDIS ]")}`,
220
+ "",
221
+ `${theme.style.muted("BUILD")} backend systems that stay understandable`,
222
+ `${theme.style.muted("THINK")} algorithms · invariants · edge cases`,
223
+ `${theme.style.muted("BASE")} Almaty, Kazakhstan`,
152
224
  ],
153
- footer: "↑↓ navigate enter select q quit",
225
+ footer: "↑↓ navigate enter select t themes ? keys q quit",
154
226
  };
155
227
  }
156
228
  }
157
229
  actions() {
158
- const back = {
230
+ const home = {
159
231
  row: { label: "Back", description: "Return to the main screen" },
160
232
  run: () => this.goTo("home"),
161
233
  };
162
234
  switch (this.screen) {
163
235
  case "about":
164
- return [back];
236
+ case "achievements":
237
+ case "shortcuts":
238
+ return [home];
165
239
  case "projects":
166
240
  return [
167
241
  {
168
- row: { label: "GitHub", description: "Open my repositories" },
169
- run: () => openExternal(profile.links.github),
242
+ row: { label: "Cloud", description: "S3 storage · events · Redis auth" },
243
+ run: () => this.openLink("Cloud Storage", profile.links.projects.cloudStorage),
244
+ },
245
+ {
246
+ row: { label: "GoLancer", description: "race-safe wallets · 150+ tests" },
247
+ run: () => this.openLink("GoLancer", profile.links.projects.goLancer),
248
+ },
249
+ {
250
+ row: { label: "Audio", description: "ASR + LLM · batch + real-time" },
251
+ run: () => this.openLink("Audio Analytics", profile.links.projects.audioAnalytics),
252
+ },
253
+ {
254
+ row: { label: "Platform", description: "Spring Boot · React · PostgreSQL" },
255
+ run: () => this.openLink("Personal Platform", profile.links.projects.platform),
170
256
  },
171
- back,
257
+ home,
172
258
  ];
173
259
  case "contact":
174
260
  return [
175
261
  {
176
262
  row: { label: "LinkedIn", description: "See my professional journey" },
177
- run: () => openExternal(profile.links.linkedin),
263
+ run: () => this.openLink("LinkedIn", profile.links.linkedin),
178
264
  },
179
265
  {
180
266
  row: { label: "GitHub", description: "Open my profile" },
181
- run: () => openExternal(profile.links.github),
267
+ run: () => this.openLink("GitHub", profile.links.github),
182
268
  },
183
269
  {
184
270
  row: { label: "Instagram", description: "See the person outside the code" },
185
- run: () => openExternal(profile.links.instagram),
271
+ run: () => this.openLink("Instagram", profile.links.instagram),
186
272
  },
187
273
  {
188
274
  row: { label: "Telegram", description: "Start a conversation" },
189
- run: () => openExternal(profile.links.telegram),
275
+ run: () => this.openLink("Telegram", profile.links.telegram),
190
276
  },
191
277
  {
192
278
  row: { label: "Resume", description: "Open my latest CV" },
193
- run: () => openExternal(profile.links.resume),
279
+ run: () => this.openLink("Resume", profile.links.resume),
194
280
  },
195
- back,
281
+ home,
196
282
  ];
197
283
  case "settings":
284
+ return [
285
+ {
286
+ row: {
287
+ label: "Theme",
288
+ description: getTheme(this.appliedThemeId).label,
289
+ },
290
+ run: () => this.goTo("themes"),
291
+ },
292
+ {
293
+ row: { label: "Density", description: `${this.labelDensity()} · press to switch` },
294
+ run: () => this.toggleDensity(),
295
+ },
296
+ {
297
+ row: { label: "Position", description: `${this.labelPosition()} · press to switch` },
298
+ run: () => this.togglePosition(),
299
+ },
300
+ {
301
+ row: {
302
+ label: "Key hints",
303
+ description: `${this.preferences.showHints ? "Visible" : "Hidden"} · press to switch`,
304
+ },
305
+ run: () => this.toggleHints(),
306
+ },
307
+ {
308
+ row: { label: "Reset", description: "Restore every default" },
309
+ run: () => this.resetPreferences(),
310
+ },
311
+ home,
312
+ ];
313
+ case "themes":
198
314
  return [
199
315
  ...themes.map((theme) => ({
200
316
  row: {
@@ -207,7 +323,10 @@ export class InteractiveApp {
207
323
  },
208
324
  run: () => this.applyTheme(theme.id),
209
325
  })),
210
- back,
326
+ {
327
+ row: { label: "Back", description: "Return to Settings" },
328
+ run: () => this.goTo("settings"),
329
+ },
211
330
  ];
212
331
  case "home":
213
332
  return [
@@ -215,6 +334,10 @@ export class InteractiveApp {
215
334
  row: { label: "About", description: "The person behind the terminal" },
216
335
  run: () => this.goTo("about"),
217
336
  },
337
+ {
338
+ row: { label: "Highlights", description: "Milestones and competitive results" },
339
+ run: () => this.goTo("achievements"),
340
+ },
218
341
  {
219
342
  row: { label: "Projects", description: "Engineering under real constraints" },
220
343
  run: () => this.goTo("projects"),
@@ -224,7 +347,7 @@ export class InteractiveApp {
224
347
  run: () => this.goTo("contact"),
225
348
  },
226
349
  {
227
- row: { label: "Settings", description: "Switch terminal theme" },
350
+ row: { label: "Settings", description: "Customize the interface" },
228
351
  run: () => this.goTo("settings"),
229
352
  },
230
353
  {
@@ -235,23 +358,25 @@ export class InteractiveApp {
235
358
  }
236
359
  }
237
360
  goTo(screen) {
238
- if (this.screen === "settings" && screen !== "settings") {
361
+ if (this.screen === "themes" && screen !== "themes") {
239
362
  this.themeId = this.appliedThemeId;
240
363
  }
241
364
  this.screen = screen;
242
365
  this.selectedIndex =
243
- screen === "settings"
366
+ screen === "themes"
244
367
  ? Math.max(0, themes.findIndex((theme) => theme.id === this.appliedThemeId))
245
368
  : 0;
246
- this.themeNotice = undefined;
369
+ this.notice = undefined;
247
370
  }
248
371
  applyTheme(themeId) {
249
372
  this.themeId = themeId;
250
373
  this.appliedThemeId = themeId;
251
- this.themeNotice = `Theme applied: ${getTheme(themeId).label}`;
374
+ this.preferences = { ...this.preferences, theme: themeId };
375
+ this.savePreferences();
376
+ this.notice = `Theme saved: ${getTheme(themeId).label}`;
252
377
  }
253
378
  previewSelectedTheme() {
254
- if (this.screen !== "settings") {
379
+ if (this.screen !== "themes") {
255
380
  return;
256
381
  }
257
382
  const selectedTheme = themes[this.selectedIndex];
@@ -259,11 +384,51 @@ export class InteractiveApp {
259
384
  return;
260
385
  }
261
386
  this.themeId = selectedTheme.id;
262
- this.themeNotice =
387
+ this.notice =
263
388
  selectedTheme.id === this.appliedThemeId
264
389
  ? `Active theme: ${selectedTheme.label}`
265
390
  : `Previewing: ${selectedTheme.label}`;
266
391
  }
392
+ goBack() {
393
+ this.goTo(this.screen === "themes" ? "settings" : "home");
394
+ }
395
+ toggleDensity() {
396
+ const density = this.preferences.density === "comfortable" ? "compact" : "comfortable";
397
+ this.preferences = { ...this.preferences, density };
398
+ this.savePreferences();
399
+ this.notice = `Density saved: ${this.labelDensity()}`;
400
+ }
401
+ togglePosition() {
402
+ const position = this.preferences.position === "center" ? "top" : "center";
403
+ this.preferences = { ...this.preferences, position };
404
+ this.savePreferences();
405
+ this.notice = `Position saved: ${this.labelPosition()}`;
406
+ }
407
+ toggleHints() {
408
+ this.preferences = { ...this.preferences, showHints: !this.preferences.showHints };
409
+ this.savePreferences();
410
+ this.notice = `Key hints ${this.preferences.showHints ? "shown" : "hidden"}`;
411
+ }
412
+ resetPreferences() {
413
+ this.preferencesStore.reset();
414
+ this.preferences = defaultPreferences;
415
+ this.themeId = defaultPreferences.theme;
416
+ this.appliedThemeId = defaultPreferences.theme;
417
+ this.notice = "Settings restored to defaults";
418
+ }
419
+ savePreferences() {
420
+ this.preferencesStore.save(this.preferences);
421
+ }
422
+ labelDensity() {
423
+ return this.preferences.density === "comfortable" ? "Comfortable" : "Compact";
424
+ }
425
+ labelPosition() {
426
+ return this.preferences.position === "center" ? "Centered" : "Top aligned";
427
+ }
428
+ openLink(label, url) {
429
+ openExternal(url);
430
+ this.notice = `Opening ${label} in your browser`;
431
+ }
267
432
  exit() {
268
433
  if (this.exiting) {
269
434
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"interactive-app.js","sourceRoot":"","sources":["../../src/app/interactive-app.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"interactive-app.js","sourceRoot":"","sources":["../../src/app/interactive-app.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import { type ThemeId } from "../ui/theme.js";
2
+ export type InterfaceDensity = "comfortable" | "compact";
3
+ export type VerticalPosition = "center" | "top";
4
+ export interface Preferences {
5
+ readonly theme: ThemeId;
6
+ readonly density: InterfaceDensity;
7
+ readonly position: VerticalPosition;
8
+ readonly showHints: boolean;
9
+ }
10
+ export interface PreferencesStore {
11
+ load(): Preferences;
12
+ save(preferences: Preferences): void;
13
+ reset(): void;
14
+ }
15
+ export declare const defaultPreferences: Preferences;
16
+ export declare function sanitizePreferences(value: unknown): Preferences;
17
+ export declare function preferencesPath(platform?: NodeJS.Platform, environment?: NodeJS.ProcessEnv, home?: string): string;
18
+ export declare class FilePreferencesStore implements PreferencesStore {
19
+ private readonly filePath;
20
+ constructor(filePath?: string);
21
+ load(): Preferences;
22
+ save(preferences: Preferences): void;
23
+ reset(): void;
24
+ }
25
+ //# sourceMappingURL=preferences.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preferences.d.ts","sourceRoot":"","sources":["../../src/domain/preferences.ts"],"names":[],"mappings":"AAGA,OAAO,EAA0B,KAAK,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAEtE,MAAM,MAAM,gBAAgB,GAAG,aAAa,GAAG,SAAS,CAAC;AACzD,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,KAAK,CAAC;AAEhD,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAC;IACnC,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;IACpC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC7B;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,IAAI,WAAW,CAAC;IACpB,IAAI,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;IACrC,KAAK,IAAI,IAAI,CAAC;CACf;AAED,eAAO,MAAM,kBAAkB,EAAE,WAKhC,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CA4B/D;AAED,wBAAgB,eAAe,CAC7B,QAAQ,GAAE,MAAM,CAAC,QAA2B,EAC5C,WAAW,GAAE,MAAM,CAAC,UAAwB,EAC5C,IAAI,GAAE,MAAkB,GACvB,MAAM,CA0BR;AAED,qBAAa,oBAAqB,YAAW,gBAAgB;IACxC,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAAR,QAAQ,GAAE,MAA0B;IAEjE,IAAI,IAAI,WAAW;IAQnB,IAAI,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;IASpC,KAAK,IAAI,IAAI;CAOrB"}
@@ -0,0 +1,75 @@
1
+ import { mkdirSync, readFileSync, rmSync, writeFileSync } from "node:fs";
2
+ import { homedir } from "node:os";
3
+ import { dirname, posix, win32 } from "node:path";
4
+ import { defaultTheme, getTheme } from "../ui/theme.js";
5
+ export const defaultPreferences = {
6
+ theme: defaultTheme.id,
7
+ density: "comfortable",
8
+ position: "center",
9
+ showHints: true,
10
+ };
11
+ export function sanitizePreferences(value) {
12
+ if (typeof value !== "object" || value === null) {
13
+ return defaultPreferences;
14
+ }
15
+ const candidate = value;
16
+ const theme = typeof candidate.theme === "string" && getTheme(candidate.theme).id === candidate.theme
17
+ ? candidate.theme
18
+ : defaultPreferences.theme;
19
+ const density = candidate.density === "compact" || candidate.density === "comfortable"
20
+ ? candidate.density
21
+ : defaultPreferences.density;
22
+ const position = candidate.position === "top" || candidate.position === "center"
23
+ ? candidate.position
24
+ : defaultPreferences.position;
25
+ return {
26
+ theme,
27
+ density,
28
+ position,
29
+ showHints: typeof candidate.showHints === "boolean"
30
+ ? candidate.showHints
31
+ : defaultPreferences.showHints,
32
+ };
33
+ }
34
+ export function preferencesPath(platform = process.platform, environment = process.env, home = homedir()) {
35
+ const platformPath = platform === "win32" ? win32 : posix;
36
+ if (platform === "win32") {
37
+ return platformPath.join(environment.APPDATA ?? platformPath.join(home, "AppData", "Roaming"), "alimberdi", "settings.json");
38
+ }
39
+ if (platform === "darwin") {
40
+ return platformPath.join(home, "Library", "Application Support", "alimberdi", "settings.json");
41
+ }
42
+ return platformPath.join(environment.XDG_CONFIG_HOME ?? platformPath.join(home, ".config"), "alimberdi", "settings.json");
43
+ }
44
+ export class FilePreferencesStore {
45
+ filePath;
46
+ constructor(filePath = preferencesPath()) {
47
+ this.filePath = filePath;
48
+ }
49
+ load() {
50
+ try {
51
+ return sanitizePreferences(JSON.parse(readFileSync(this.filePath, "utf8")));
52
+ }
53
+ catch {
54
+ return defaultPreferences;
55
+ }
56
+ }
57
+ save(preferences) {
58
+ try {
59
+ mkdirSync(dirname(this.filePath), { recursive: true });
60
+ writeFileSync(this.filePath, `${JSON.stringify(preferences, null, 2)}\n`, "utf8");
61
+ }
62
+ catch {
63
+ // The CLI remains usable when the host does not allow persistent settings.
64
+ }
65
+ }
66
+ reset() {
67
+ try {
68
+ rmSync(this.filePath, { force: true });
69
+ }
70
+ catch {
71
+ // Resetting an unavailable settings file is already the desired outcome.
72
+ }
73
+ }
74
+ }
75
+ //# sourceMappingURL=preferences.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preferences.js","sourceRoot":"","sources":["../../src/domain/preferences.ts"],"names":[],"mappings":"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"}
@@ -10,6 +10,12 @@ export interface Profile {
10
10
  readonly instagram: string;
11
11
  readonly telegram: string;
12
12
  readonly resume: string;
13
+ readonly projects: {
14
+ readonly cloudStorage: string;
15
+ readonly goLancer: string;
16
+ readonly audioAnalytics: string;
17
+ readonly platform: string;
18
+ };
13
19
  };
14
20
  }
15
21
  export declare const profile: Profile;
@@ -1 +1 @@
1
- {"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../src/domain/profile.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,GAAG,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE;QACd,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;KACzB,CAAC;CACH;AAED,eAAO,MAAM,OAAO,EAAE,OAmBrB,CAAC"}
1
+ {"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../src/domain/profile.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,GAAG,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE;QACd,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,QAAQ,EAAE;YACjB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;YAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;YAC1B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;YAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;SAC3B,CAAC;KACH,CAAC;CACH;AAED,eAAO,MAAM,OAAO,EAAE,OAyBrB,CAAC"}
@@ -15,6 +15,12 @@ export const profile = {
15
15
  instagram: "https://instagram.com/adilkhanalimberdi",
16
16
  telegram: "https://t.me/adilkhanalimberdi",
17
17
  resume: "https://drive.google.com/file/d/1MYsAdRWHnGG07IoOaVjm3o9QEplXHM7l/view?usp=drive_link",
18
+ projects: {
19
+ cloudStorage: "https://github.com/adilkhanalimberdi/cloud-storage-service",
20
+ goLancer: "https://github.com/adilkhanalimberdi/GoLancer",
21
+ audioAnalytics: "https://github.com/adilkhanalimberdi/AudioAnalyticsTask",
22
+ platform: "https://github.com/adilkhanalimberdi/adilkhanalimberdi.github.io",
23
+ },
18
24
  },
19
25
  };
20
26
  //# sourceMappingURL=profile.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"profile.js","sourceRoot":"","sources":["../../src/domain/profile.ts"],"names":[],"mappings":"AAeA,MAAM,CAAC,MAAM,OAAO,GAAY;IAC9B,WAAW,EAAE,oBAAoB;IACjC,QAAQ,EAAE,mBAAmB;IAC7B,MAAM,EAAE,WAAW;IACnB,OAAO,EAAE,oDAAoD;IAC7D,GAAG,EAAE;QACH,oDAAoD;QACpD,uDAAuD;QACvD,uDAAuD;QACvD,+CAA+C;KAChD;IACD,KAAK,EAAE;QACL,MAAM,EAAE,sCAAsC;QAC9C,QAAQ,EAAE,2CAA2C;QACrD,SAAS,EAAE,yCAAyC;QACpD,QAAQ,EAAE,gCAAgC;QAC1C,MAAM,EACJ,uFAAuF;KAC1F;CACF,CAAC"}
1
+ {"version":3,"file":"profile.js","sourceRoot":"","sources":["../../src/domain/profile.ts"],"names":[],"mappings":"AAqBA,MAAM,CAAC,MAAM,OAAO,GAAY;IAC9B,WAAW,EAAE,oBAAoB;IACjC,QAAQ,EAAE,mBAAmB;IAC7B,MAAM,EAAE,WAAW;IACnB,OAAO,EAAE,oDAAoD;IAC7D,GAAG,EAAE;QACH,oDAAoD;QACpD,uDAAuD;QACvD,uDAAuD;QACvD,+CAA+C;KAChD;IACD,KAAK,EAAE;QACL,MAAM,EAAE,sCAAsC;QAC9C,QAAQ,EAAE,2CAA2C;QACrD,SAAS,EAAE,yCAAyC;QACpD,QAAQ,EAAE,gCAAgC;QAC1C,MAAM,EACJ,uFAAuF;QACzF,QAAQ,EAAE;YACR,YAAY,EAAE,4DAA4D;YAC1E,QAAQ,EAAE,+CAA+C;YACzD,cAAc,EAAE,yDAAyD;YACzE,QAAQ,EAAE,kEAAkE;SAC7E;KACF;CACF,CAAC"}
@@ -12,7 +12,9 @@ export interface FrameOptions {
12
12
  readonly selectedIndex?: number;
13
13
  readonly notice?: string;
14
14
  readonly footer?: string;
15
+ readonly density?: "comfortable" | "compact";
16
+ readonly showFooter?: boolean;
15
17
  }
16
18
  export declare function renderFrame(options: FrameOptions, width: number, theme?: TerminalTheme): readonly string[];
17
- export declare function centerInTerminal(lines: readonly string[], columns: number, rows: number): string;
19
+ export declare function centerInTerminal(lines: readonly string[], columns: number, rows: number, position?: "center" | "top"): string;
18
20
  //# sourceMappingURL=frame.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"frame.d.ts","sourceRoot":"","sources":["../../src/ui/frame.ts"],"names":[],"mappings":"AACA,OAAO,EAAgB,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAE9D,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,OAAO,EAAE,CAAC;IACnC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAqBD,wBAAgB,WAAW,CACzB,OAAO,EAAE,YAAY,EACrB,KAAK,EAAE,MAAM,EACb,KAAK,GAAE,aAA4B,GAClC,SAAS,MAAM,EAAE,CAgEnB;AAED,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,GACX,MAAM,CAMR"}
1
+ {"version":3,"file":"frame.d.ts","sourceRoot":"","sources":["../../src/ui/frame.ts"],"names":[],"mappings":"AACA,OAAO,EAAgB,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAE9D,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,OAAO,EAAE,CAAC;IACnC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;IAC7C,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;CAC/B;AAqBD,wBAAgB,WAAW,CACzB,OAAO,EAAE,YAAY,EACrB,KAAK,EAAE,MAAM,EACb,KAAK,GAAE,aAA4B,GAClC,SAAS,MAAM,EAAE,CAiFnB;AAED,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,QAAQ,GAAE,QAAQ,GAAG,KAAgB,GACpC,MAAM,CAQR"}
package/dist/ui/frame.js CHANGED
@@ -18,24 +18,33 @@ function fit(value, width) {
18
18
  export function renderFrame(options, width, theme = defaultTheme) {
19
19
  const innerWidth = Math.max(42, width - 2);
20
20
  const { glyphs, style } = theme;
21
+ const comfortable = options.density !== "compact";
21
22
  const top = style.primary(`${glyphs.topLeft}${glyphs.horizontal.repeat(innerWidth)}${glyphs.topRight}`);
22
23
  const bottom = style.secondary(`${glyphs.bottomLeft}${glyphs.horizontal.repeat(innerWidth)}${glyphs.bottomRight}`);
23
24
  const border = (content = "") => `${style.primary(glyphs.vertical)}${pad(fit(content, innerWidth), innerWidth)}${style.secondary(glyphs.vertical)}`;
24
25
  const divider = border(style.muted(` ${glyphs.divider.repeat(Math.max(0, innerWidth - 4))} `));
25
26
  const lines = [top];
26
27
  lines.push(border(` ${style.brand(theme.mark)} ${style.brand(options.brand ?? "ALIMBERDI")} ${style.muted("/ terminal profile")}`));
27
- lines.push(border());
28
+ if (comfortable) {
29
+ lines.push(border());
30
+ }
28
31
  lines.push(border(center(style.title(options.title.toUpperCase()), innerWidth)));
29
32
  if (options.subtitle !== undefined) {
30
33
  lines.push(border(center(style.secondary(options.subtitle), innerWidth)));
31
34
  }
32
- lines.push(border());
35
+ if (comfortable) {
36
+ lines.push(border());
37
+ }
33
38
  lines.push(divider);
34
- lines.push(border());
39
+ if (comfortable) {
40
+ lines.push(border());
41
+ }
35
42
  for (const bodyLine of options.body ?? []) {
36
43
  lines.push(border(` ${bodyLine}`));
37
44
  }
38
- if ((options.body?.length ?? 0) > 0 && (options.menu?.length ?? 0) > 0) {
45
+ if (comfortable &&
46
+ (options.body?.length ?? 0) > 0 &&
47
+ (options.menu?.length ?? 0) > 0) {
39
48
  lines.push(border());
40
49
  }
41
50
  options.menu?.forEach((item, index) => {
@@ -44,19 +53,26 @@ export function renderFrame(options, width, theme = defaultTheme) {
44
53
  lines.push(border(index === options.selectedIndex ? style.selected(content) : content));
45
54
  });
46
55
  if (options.notice !== undefined) {
47
- lines.push(border());
56
+ if (comfortable) {
57
+ lines.push(border());
58
+ }
48
59
  lines.push(border(center(style.notice(options.notice), innerWidth)));
49
60
  }
50
- lines.push(border());
51
- lines.push(divider);
52
- lines.push(border(center(style.muted(options.footer ?? "↑↓ navigate enter select esc back q quit"), innerWidth)));
61
+ if (options.showFooter !== false) {
62
+ if (comfortable) {
63
+ lines.push(border());
64
+ }
65
+ lines.push(divider);
66
+ lines.push(border(center(style.muted(options.footer ?? "↑↓ navigate enter select esc back q quit"), innerWidth)));
67
+ }
53
68
  lines.push(bottom);
54
69
  return lines;
55
70
  }
56
- export function centerInTerminal(lines, columns, rows) {
71
+ export function centerInTerminal(lines, columns, rows, position = "center") {
57
72
  const contentWidth = Math.max(...lines.map(visibleLength));
58
73
  const left = " ".repeat(Math.max(0, Math.floor((columns - contentWidth) / 2)));
59
- const top = "\n".repeat(Math.max(0, Math.floor((rows - lines.length) / 2)));
74
+ const topPadding = position === "top" ? Math.min(1, Math.max(0, rows - lines.length)) : Math.max(0, Math.floor((rows - lines.length) / 2));
75
+ const top = "\n".repeat(topPadding);
60
76
  return `${top}${lines.map((line) => `${left}${line}`).join("\n")}`;
61
77
  }
62
78
  //# sourceMappingURL=frame.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"frame.js","sourceRoot":"","sources":["../../src/ui/frame.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"frame.js","sourceRoot":"","sources":["../../src/ui/frame.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "alimberdi",
3
- "version": "0.5.0",
3
+ "version": "0.6.0",
4
4
  "description": "An interactive terminal profile for backend engineer Adilkhan Alimberdi.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -10,10 +10,12 @@
10
10
  "dist"
11
11
  ],
12
12
  "scripts": {
13
+ "clean": "node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"",
14
+ "prebuild": "npm run clean",
13
15
  "build": "tsc -p tsconfig.build.json",
14
16
  "dev": "tsx src/cli.ts",
15
17
  "start": "node dist/cli.js",
16
- "test": "tsx --test src/app/interactive-app.test.ts src/app/run-cli.test.ts src/ui/frame.test.ts",
18
+ "test": "tsx --test src/app/interactive-app.test.ts src/app/run-cli.test.ts src/domain/preferences.test.ts src/ui/frame.test.ts",
17
19
  "check": "tsc -p tsconfig.json --noEmit",
18
20
  "prepack": "npm run build"
19
21
  },