alimberdi 0.4.1 → 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
@@ -38,7 +43,23 @@ The interactive Settings screen includes four runtime presets:
38
43
  - Metallist
39
44
  - Cyberpunk
40
45
 
41
- A selected theme applies immediately and lasts for the current CLI session.
46
+ Move through the presets to preview each theme across the full interface. Press
47
+ Enter to apply the preview, or Escape to cancel it. The applied theme lasts for
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.
42
63
 
43
64
  ## Local development
44
65
 
@@ -1,14 +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
- private themeNotice;
11
+ private appliedThemeId;
12
+ private notice;
9
13
  private exiting;
10
14
  private resolve;
11
- 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);
12
16
  run(): Promise<void>;
13
17
  private readonly onKeypress;
14
18
  private readonly render;
@@ -16,6 +20,16 @@ export declare class InteractiveApp {
16
20
  private actions;
17
21
  private goTo;
18
22
  private applyTheme;
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;
19
33
  private exit;
20
34
  }
21
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;IASvB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAV5B,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,OAAO,CAA4B;IAC3C,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,CA0BzB;IAEF,OAAO,CAAC,QAAQ,CAAC,MAAM,CAgBrB;IAEF,OAAO,CAAC,OAAO;IAmEf,OAAO,CAAC,OAAO;IA8Ef,OAAO,CAAC,IAAI;IASZ,OAAO,CAAC,UAAU;IAKlB,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,16 +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
- themeNotice;
27
+ preferences;
28
+ themeId;
29
+ appliedThemeId;
30
+ notice;
27
31
  exiting = false;
28
32
  resolve;
29
- constructor(input, output, terminate = (code) => process.exit(code)) {
33
+ constructor(input, output, terminate = (code) => process.exit(code), preferencesStore = new FilePreferencesStore()) {
30
34
  this.input = input;
31
35
  this.output = output;
32
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;
33
41
  }
34
42
  run() {
35
43
  return new Promise((resolve) => {
@@ -43,27 +51,48 @@ export class InteractiveApp {
43
51
  this.render();
44
52
  });
45
53
  }
46
- onKeypress = (_input, key) => {
54
+ onKeypress = (inputValue, key) => {
47
55
  if ((key.ctrl === true && key.name === "c") || key.name === "q") {
48
56
  this.exit();
49
57
  return;
50
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
+ }
51
69
  if (key.name === "escape" || key.name === "left" || key.name === "backspace") {
52
70
  if (this.screen === "home") {
53
71
  this.exit();
54
72
  }
55
73
  else {
56
- this.goTo("home");
74
+ this.goBack();
75
+ this.render();
57
76
  }
58
77
  return;
59
78
  }
60
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
+ }
61
88
  if (key.name === "up" || key.name === "k") {
62
89
  this.selectedIndex = (this.selectedIndex - 1 + actions.length) % actions.length;
90
+ this.previewSelectedTheme();
63
91
  this.render();
64
92
  }
65
93
  else if (key.name === "down" || key.name === "j") {
66
94
  this.selectedIndex = (this.selectedIndex + 1) % actions.length;
95
+ this.previewSelectedTheme();
67
96
  this.render();
68
97
  }
69
98
  else if (key.name === "return" || key.name === "enter" || key.name === "right") {
@@ -76,12 +105,18 @@ export class InteractiveApp {
76
105
  const rows = Math.max(20, this.output.rows ?? 24);
77
106
  const width = Math.min(76, columns - 4);
78
107
  const actions = this.actions();
108
+ const content = this.content();
79
109
  const frame = renderFrame({
80
- ...this.content(),
110
+ ...content,
111
+ ...(content.notice === undefined && this.notice !== undefined
112
+ ? { notice: this.notice }
113
+ : {}),
81
114
  menu: actions.map((action) => action.row),
82
115
  selectedIndex: this.selectedIndex,
116
+ density: this.preferences.density,
117
+ showFooter: this.preferences.showHints,
83
118
  }, width, getTheme(this.themeId));
84
- this.output.write(`${control.clear}${centerInTerminal(frame, columns, rows)}`);
119
+ this.output.write(`${control.clear}${centerInTerminal(frame, columns, rows, this.preferences.position)}`);
85
120
  };
86
121
  content() {
87
122
  const theme = getTheme(this.themeId);
@@ -98,17 +133,26 @@ export class InteractiveApp {
98
133
  `${theme.style.muted("PROOF")} 1,200+ problems · ICPC Kazakhstan 3rd place`,
99
134
  ],
100
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
+ };
101
149
  case "projects":
102
150
  return {
103
151
  title: "Projects",
104
- subtitle: "engineering beyond the happy path",
152
+ subtitle: "systems shaped by real constraints",
105
153
  body: [
106
- `${theme.style.primary("Cloud Storage")} S3 streams · events · Redis auth`,
107
- `${theme.style.primary("GoLancer")} race-safe wallets · 150+ tests`,
108
- `${theme.style.primary("Audio Analytics")} ASR + LLM · batch + real-time`,
109
- `${theme.style.primary("Personal Platform")} Spring Boot · React · PostgreSQL`,
110
- "",
111
- "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."),
112
156
  ],
113
157
  };
114
158
  case "contact":
@@ -116,88 +160,173 @@ export class InteractiveApp {
116
160
  title: "Let's connect",
117
161
  subtitle: "code, context, or just a good conversation",
118
162
  body: [
119
- `${theme.style.muted("LinkedIn")} linkedin.com/in/adilkhan-kerimshe`,
120
- `${theme.style.muted("GitHub")} github.com/adilkhanalimberdi`,
121
- `${theme.style.muted("Instagram")} instagram.com/adilkhanalimberdi`,
122
- `${theme.style.muted("Telegram")} t.me/adilkhanalimberdi`,
123
- "",
124
- theme.style.muted("Select a link and press Enter to open it."),
163
+ "Choose where you would like to continue.",
164
+ theme.style.muted("Each option opens directly in your browser."),
125
165
  ],
126
166
  };
127
167
  case "settings":
128
168
  return {
129
169
  title: "Settings",
130
- subtitle: "choose your terminal theme",
170
+ subtitle: "make the terminal feel like yours",
131
171
  body: [
132
- `${theme.style.muted("ACTIVE")} ${theme.style.title(theme.label)}`,
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")}`,
133
176
  "",
134
- "Select a preset to apply it instantly.",
135
- "The choice lasts for the current session.",
177
+ theme.style.muted("Changes are saved automatically on this device."),
178
+ ],
179
+ ...(this.notice === undefined ? {} : { notice: this.notice }),
180
+ };
181
+ case "themes": {
182
+ const appliedTheme = getTheme(this.appliedThemeId);
183
+ const isPreviewing = this.themeId !== this.appliedThemeId;
184
+ return {
185
+ title: "Themes",
186
+ subtitle: "theme switcher",
187
+ body: [
188
+ `${theme.style.muted("ACTIVE")} ${theme.style.title(appliedTheme.label)}`,
189
+ `${theme.style.muted("PREVIEW")} ${theme.style.title(theme.label)}`,
190
+ `${theme.style.muted("PALETTE")} ${theme.style.primary("████")} ${theme.style.secondary("████")} ${theme.style.title("Aa")}`,
191
+ "",
192
+ isPreviewing
193
+ ? "Press Enter to keep this theme, or Esc to cancel."
194
+ : "Use the arrows to preview another theme.",
195
+ ],
196
+ ...(this.notice === undefined ? {} : { notice: this.notice }),
197
+ footer: "↑↓ preview enter apply esc cancel q quit",
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`,
136
212
  ],
137
- ...(this.themeNotice === undefined ? {} : { notice: this.themeNotice }),
138
213
  };
139
214
  case "home":
140
215
  return {
141
216
  title: profile.displayName,
142
217
  subtitle: profile.tagline,
143
218
  body: [
144
- "I turn hard problems into systems that make sense.",
145
- "Built in Kazakhstan. Designed beyond the happy path.",
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`,
146
224
  ],
147
- footer: "↑↓ navigate enter select q quit",
225
+ footer: "↑↓ navigate enter select t themes ? keys q quit",
148
226
  };
149
227
  }
150
228
  }
151
229
  actions() {
152
- const back = {
230
+ const home = {
153
231
  row: { label: "Back", description: "Return to the main screen" },
154
232
  run: () => this.goTo("home"),
155
233
  };
156
234
  switch (this.screen) {
157
235
  case "about":
158
- return [back];
236
+ case "achievements":
237
+ case "shortcuts":
238
+ return [home];
159
239
  case "projects":
160
240
  return [
161
241
  {
162
- row: { label: "GitHub", description: "Open my repositories" },
163
- 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),
164
256
  },
165
- back,
257
+ home,
166
258
  ];
167
259
  case "contact":
168
260
  return [
169
261
  {
170
262
  row: { label: "LinkedIn", description: "See my professional journey" },
171
- run: () => openExternal(profile.links.linkedin),
263
+ run: () => this.openLink("LinkedIn", profile.links.linkedin),
172
264
  },
173
265
  {
174
266
  row: { label: "GitHub", description: "Open my profile" },
175
- run: () => openExternal(profile.links.github),
267
+ run: () => this.openLink("GitHub", profile.links.github),
176
268
  },
177
269
  {
178
- row: { label: "Instagram", description: "Find me beyond the code" },
179
- run: () => openExternal(profile.links.instagram),
270
+ row: { label: "Instagram", description: "See the person outside the code" },
271
+ run: () => this.openLink("Instagram", profile.links.instagram),
180
272
  },
181
273
  {
182
274
  row: { label: "Telegram", description: "Start a conversation" },
183
- run: () => openExternal(profile.links.telegram),
275
+ run: () => this.openLink("Telegram", profile.links.telegram),
184
276
  },
185
277
  {
186
278
  row: { label: "Resume", description: "Open my latest CV" },
187
- run: () => openExternal(profile.links.resume),
279
+ run: () => this.openLink("Resume", profile.links.resume),
188
280
  },
189
- back,
281
+ home,
190
282
  ];
191
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":
192
314
  return [
193
315
  ...themes.map((theme) => ({
194
316
  row: {
195
- label: `${theme.id === this.themeId ? "● " : ""}${theme.label}`,
196
- description: theme.description,
317
+ label: theme.label,
318
+ description: theme.id === this.appliedThemeId
319
+ ? `● ACTIVE · ${theme.description}`
320
+ : theme.id === this.themeId
321
+ ? `◉ PREVIEW · ${theme.description}`
322
+ : `○ ${theme.description}`,
197
323
  },
198
324
  run: () => this.applyTheme(theme.id),
199
325
  })),
200
- back,
326
+ {
327
+ row: { label: "Back", description: "Return to Settings" },
328
+ run: () => this.goTo("settings"),
329
+ },
201
330
  ];
202
331
  case "home":
203
332
  return [
@@ -206,7 +335,11 @@ export class InteractiveApp {
206
335
  run: () => this.goTo("about"),
207
336
  },
208
337
  {
209
- row: { label: "Projects", description: "Systems built beyond the demo" },
338
+ row: { label: "Highlights", description: "Milestones and competitive results" },
339
+ run: () => this.goTo("achievements"),
340
+ },
341
+ {
342
+ row: { label: "Projects", description: "Engineering under real constraints" },
210
343
  run: () => this.goTo("projects"),
211
344
  },
212
345
  {
@@ -214,7 +347,7 @@ export class InteractiveApp {
214
347
  run: () => this.goTo("contact"),
215
348
  },
216
349
  {
217
- row: { label: "Settings", description: "Switch terminal theme" },
350
+ row: { label: "Settings", description: "Customize the interface" },
218
351
  run: () => this.goTo("settings"),
219
352
  },
220
353
  {
@@ -225,16 +358,76 @@ export class InteractiveApp {
225
358
  }
226
359
  }
227
360
  goTo(screen) {
361
+ if (this.screen === "themes" && screen !== "themes") {
362
+ this.themeId = this.appliedThemeId;
363
+ }
228
364
  this.screen = screen;
229
365
  this.selectedIndex =
230
- screen === "settings"
231
- ? Math.max(0, themes.findIndex((theme) => theme.id === this.themeId))
366
+ screen === "themes"
367
+ ? Math.max(0, themes.findIndex((theme) => theme.id === this.appliedThemeId))
232
368
  : 0;
233
- this.themeNotice = undefined;
369
+ this.notice = undefined;
234
370
  }
235
371
  applyTheme(themeId) {
236
372
  this.themeId = themeId;
237
- this.themeNotice = `Theme applied: ${getTheme(themeId).label}`;
373
+ this.appliedThemeId = themeId;
374
+ this.preferences = { ...this.preferences, theme: themeId };
375
+ this.savePreferences();
376
+ this.notice = `Theme saved: ${getTheme(themeId).label}`;
377
+ }
378
+ previewSelectedTheme() {
379
+ if (this.screen !== "themes") {
380
+ return;
381
+ }
382
+ const selectedTheme = themes[this.selectedIndex];
383
+ if (selectedTheme === undefined) {
384
+ return;
385
+ }
386
+ this.themeId = selectedTheme.id;
387
+ this.notice =
388
+ selectedTheme.id === this.appliedThemeId
389
+ ? `Active theme: ${selectedTheme.label}`
390
+ : `Previewing: ${selectedTheme.label}`;
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`;
238
431
  }
239
432
  exit() {
240
433
  if (this.exiting) {
@@ -1 +1 @@
1
- {"version":3,"file":"interactive-app.js","sourceRoot":"","sources":["../../src/app/interactive-app.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,QAAQ,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAgB,MAAM,gBAAgB,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAgB,MAAM,gBAAgB,CAAC;AAc9E,SAAS,YAAY,CAAC,GAAW;IAC/B,MAAM,OAAO,GACX,OAAO,CAAC,QAAQ,KAAK,OAAO;QAC1B,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE;QACjE,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,QAAQ;YAC7B,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE;YAC/B,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;IAE1C,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE;QAChC,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,QAAQ;QACf,WAAW,EAAE,IAAI;KAClB,CAAC,CAAC,KAAK,EAAE,CAAC;AACb,CAAC;AAED,MAAM,OAAO,cAAc;IASN;IACA;IACA;IAVX,MAAM,GAAW,MAAM,CAAC;IACxB,aAAa,GAAG,CAAC,CAAC;IAClB,OAAO,GAAY,YAAY,CAAC,EAAE,CAAC;IACnC,WAAW,CAAqB;IAChC,OAAO,GAAG,KAAK,CAAC;IAChB,OAAO,CAA2B;IAE1C,YACmB,KAAwB,EACxB,MAA0B,EAC1B,YAAoC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;QAFhE,UAAK,GAAL,KAAK,CAAmB;QACxB,WAAM,GAAN,MAAM,CAAoB;QAC1B,cAAS,GAAT,SAAS,CAAuD;IAChF,CAAC;IAEG,GAAG;QACR,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;YACvB,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACxC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC;YAC9B,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YACpB,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YAC3C,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YACtC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,eAAe,GAAG,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;YACrF,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,CAAC,CAAC,CAAC;IACL,CAAC;IAEgB,UAAU,GAAG,CAAC,MAAc,EAAE,GAAQ,EAAQ,EAAE;QAC/D,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;YAChE,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,OAAO;QACT,CAAC;QAED,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC7E,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC3B,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACpB,CAAC;YACD,OAAO;QACT,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC/B,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;YAC1C,IAAI,CAAC,aAAa,GAAG,CAAC,IAAI,CAAC,aAAa,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;YAChF,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,CAAC;aAAM,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;YACnD,IAAI,CAAC,aAAa,GAAG,CAAC,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;YAC/D,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,CAAC;aAAM,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YACjF,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,GAAG,EAAE,CAAC;YACnC,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,CAAC;IACH,CAAC,CAAC;IAEe,MAAM,GAAG,GAAS,EAAE;QACnC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;QACxD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QAClD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC;QACxC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,WAAW,CACvB;YACE,GAAG,IAAI,CAAC,OAAO,EAAE;YACjB,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC;YACzC,aAAa,EAAE,IAAI,CAAC,aAAa;SAClC,EACD,KAAK,EACL,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CACvB,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,KAAK,GAAG,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;IACjF,CAAC,CAAC;IAEM,OAAO;QACb,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAErC,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;YACpB,KAAK,OAAO;gBACV,OAAO;oBACL,KAAK,EAAE,UAAU;oBACjB,QAAQ,EAAE,GAAG,OAAO,CAAC,QAAQ,OAAO,OAAO,CAAC,MAAM,EAAE;oBACpD,IAAI,EAAE;wBACJ,GAAG,OAAO,CAAC,GAAG;wBACd,EAAE;wBACF,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,2CAA2C;wBACxE,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,mDAAmD;wBAC9E,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,kDAAkD;qBAChF;iBACF,CAAC;YACJ,KAAK,UAAU;gBACb,OAAO;oBACL,KAAK,EAAE,UAAU;oBACjB,QAAQ,EAAE,mCAAmC;oBAC7C,IAAI,EAAE;wBACJ,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,sCAAsC;wBAC7E,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,yCAAyC;wBAC3E,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC,iCAAiC;wBAC1E,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,mBAAmB,CAAC,mCAAmC;wBAC9E,EAAE;wBACF,yDAAyD;qBAC1D;iBACF,CAAC;YACJ,KAAK,SAAS;gBACZ,OAAO;oBACL,KAAK,EAAE,eAAe;oBACtB,QAAQ,EAAE,4CAA4C;oBACtD,IAAI,EAAE;wBACJ,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,sCAAsC;wBACtE,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,mCAAmC;wBACjE,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,mCAAmC;wBACpE,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,2BAA2B;wBAC3D,EAAE;wBACF,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,2CAA2C,CAAC;qBAC/D;iBACF,CAAC;YACJ,KAAK,UAAU;gBACb,OAAO;oBACL,KAAK,EAAE,UAAU;oBACjB,QAAQ,EAAE,4BAA4B;oBACtC,IAAI,EAAE;wBACJ,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;wBACtE,EAAE;wBACF,wCAAwC;wBACxC,2CAA2C;qBAC5C;oBACD,GAAG,CAAC,IAAI,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;iBACxE,CAAC;YACJ,KAAK,MAAM;gBACT,OAAO;oBACL,KAAK,EAAE,OAAO,CAAC,WAAW;oBAC1B,QAAQ,EAAE,OAAO,CAAC,OAAO;oBACzB,IAAI,EAAE;wBACJ,oDAAoD;wBACpD,sDAAsD;qBACvD;oBACD,MAAM,EAAE,qCAAqC;iBAC9C,CAAC;QACN,CAAC;IACH,CAAC;IAEO,OAAO;QACb,MAAM,IAAI,GAAW;YACnB,GAAG,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,2BAA2B,EAAE;YAChE,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;SAC7B,CAAC;QAEF,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;YACpB,KAAK,OAAO;gBACV,OAAO,CAAC,IAAI,CAAC,CAAC;YAChB,KAAK,UAAU;gBACb,OAAO;oBACL;wBACE,GAAG,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,sBAAsB,EAAE;wBAC7D,GAAG,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC;qBAC9C;oBACD,IAAI;iBACL,CAAC;YACJ,KAAK,SAAS;gBACZ,OAAO;oBACL;wBACE,GAAG,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,6BAA6B,EAAE;wBACtE,GAAG,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC;qBAChD;oBACD;wBACE,GAAG,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,iBAAiB,EAAE;wBACxD,GAAG,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC;qBAC9C;oBACD;wBACE,GAAG,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,yBAAyB,EAAE;wBACnE,GAAG,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC;qBACjD;oBACD;wBACE,GAAG,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,sBAAsB,EAAE;wBAC/D,GAAG,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC;qBAChD;oBACD;wBACE,GAAG,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,mBAAmB,EAAE;wBAC1D,GAAG,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC;qBAC9C;oBACD,IAAI;iBACL,CAAC;YACJ,KAAK,UAAU;gBACb,OAAO;oBACL,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;wBACxB,GAAG,EAAE;4BACH,KAAK,EAAE,GAAG,KAAK,CAAC,EAAE,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,EAAE;4BAC/D,WAAW,EAAE,KAAK,CAAC,WAAW;yBAC/B;wBACD,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;qBACrC,CAAC,CAAC;oBACH,IAAI;iBACL,CAAC;YACJ,KAAK,MAAM;gBACT,OAAO;oBACL;wBACE,GAAG,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,gCAAgC,EAAE;wBACtE,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;qBAC9B;oBACD;wBACE,GAAG,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,+BAA+B,EAAE;wBACxE,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;qBACjC;oBACD;wBACE,GAAG,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,gBAAgB,EAAE;wBACxD,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;qBAChC;oBACD;wBACE,GAAG,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,uBAAuB,EAAE;wBAChE,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;qBACjC;oBACD;wBACE,GAAG,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,yBAAyB,EAAE;wBAC9D,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE;qBACvB;iBACF,CAAC;QACN,CAAC;IACH,CAAC;IAEO,IAAI,CAAC,MAAc;QACzB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,aAAa;YAChB,MAAM,KAAK,UAAU;gBACnB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC;gBACrE,CAAC,CAAC,CAAC,CAAC;QACR,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;IAC/B,CAAC;IAEO,UAAU,CAAC,OAAgB;QACjC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,WAAW,GAAG,kBAAkB,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC;IACjE,CAAC;IAEO,IAAI;QACV,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACvC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC;QAC/B,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACnB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC7B,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;QAEzB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;QAChE,OAAO,EAAE,EAAE,CAAC;QACZ,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;CACF;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,KAAwB,EACxB,MAA0B;IAE1B,MAAM,IAAI,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;AAChD,CAAC"}
1
+ {"version":3,"file":"interactive-app.js","sourceRoot":"","sources":["../../src/app/interactive-app.ts"],"names":[],"mappings":"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"}
@@ -6,7 +6,7 @@ export function renderHome() {
6
6
  accent(profile.displayName.toUpperCase()),
7
7
  dim(profile.tagline),
8
8
  "",
9
- "projects See systems built beyond the demo",
9
+ "projects See engineering under real constraints",
10
10
  "contact Find me across the internet",
11
11
  "help See every command",
12
12
  "",
@@ -1 +1 @@
1
- {"version":3,"file":"home.js","sourceRoot":"","sources":["../../src/commands/home.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAE9C,MAAM,UAAU,UAAU;IACxB,OAAO,GAAG,CAAC;QACT,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC;QACzC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC;QACpB,EAAE;QACF,8CAA8C;QAC9C,wCAAwC;QACxC,8BAA8B;QAC9B,EAAE;QACF,GAAG,CAAC,6BAA6B,CAAC;KACnC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"home.js","sourceRoot":"","sources":["../../src/commands/home.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAE9C,MAAM,UAAU,UAAU;IACxB,OAAO,GAAG,CAAC;QACT,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC;QACzC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC;QACpB,EAAE;QACF,mDAAmD;QACnD,wCAAwC;QACxC,8BAA8B;QAC9B,EAAE;QACF,GAAG,CAAC,6BAA6B,CAAC;KACnC,CAAC,CAAC;AACL,CAAC"}
@@ -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,45 +18,61 @@ 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) => {
42
51
  const label = item.label.padEnd(12);
43
- const content = ` ${index === options.selectedIndex ? "›" : " "} ${label} ${item.description}`;
52
+ const content = ` ${index === options.selectedIndex ? "▶" : " "} ${label} ${item.description}`;
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.4.1",
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
  },