kirby-ocpp 0.1.1 → 0.1.2

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 (3) hide show
  1. package/dist/cli.js +0 -0
  2. package/dist/tui.js +56 -18
  3. package/package.json +1 -1
package/dist/cli.js CHANGED
File without changes
package/dist/tui.js CHANGED
@@ -11,7 +11,7 @@ const TABS = [
11
11
  { id: "scenarios", label: "Scenarios" }
12
12
  ];
13
13
  const LEVEL_STYLE = {
14
- info: "{blue-fg}info{/blue-fg}",
14
+ info: "{white-fg}info{/white-fg}",
15
15
  success: "{green-fg}ok{/green-fg}",
16
16
  warn: "{yellow-fg}warn{/yellow-fg}",
17
17
  error: "{red-fg}err{/red-fg}",
@@ -20,14 +20,27 @@ const LEVEL_STYLE = {
20
20
  };
21
21
  const DEFAULT_MEASURANDS = "Energy.Active.Import.Register,Power.Active.Import,Current.Import,Voltage,Temperature,SoC";
22
22
  const THEME = {
23
+ background: "black",
24
+ foreground: "white",
23
25
  panelBorder: "cyan",
24
26
  headerBg: "black",
25
27
  headerFg: "white",
26
28
  footerBg: "black",
27
29
  footerFg: "white",
30
+ mutedFg: "cyan",
28
31
  selectedBg: "white",
29
- selectedFg: "black"
32
+ selectedFg: "black",
33
+ focusBorder: "yellow"
30
34
  };
35
+ function fgTag(color, content) {
36
+ return `{${color}-fg}${content}{/${color}-fg}`;
37
+ }
38
+ function muted(content) {
39
+ return fgTag(THEME.mutedFg, content);
40
+ }
41
+ function disabledLine(content) {
42
+ return muted(`${content} (disabled)`);
43
+ }
31
44
  export class Tui {
32
45
  station;
33
46
  screen;
@@ -72,6 +85,8 @@ export class Tui {
72
85
  border: "line",
73
86
  padding: { left: 1, right: 1 },
74
87
  style: {
88
+ fg: THEME.foreground,
89
+ bg: THEME.background,
75
90
  selected: { bg: THEME.selectedBg, fg: THEME.selectedFg },
76
91
  border: { fg: THEME.panelBorder }
77
92
  }
@@ -86,6 +101,8 @@ export class Tui {
86
101
  border: "line",
87
102
  padding: { left: 1, right: 1 },
88
103
  style: {
104
+ fg: THEME.foreground,
105
+ bg: THEME.background,
89
106
  border: { fg: THEME.panelBorder }
90
107
  }
91
108
  });
@@ -101,6 +118,8 @@ export class Tui {
101
118
  border: "line",
102
119
  padding: { left: 1, right: 1 },
103
120
  style: {
121
+ fg: THEME.foreground,
122
+ bg: THEME.background,
104
123
  selected: { bg: THEME.selectedBg, fg: THEME.selectedFg },
105
124
  border: { fg: THEME.panelBorder }
106
125
  }
@@ -124,6 +143,8 @@ export class Tui {
124
143
  style: { bg: THEME.panelBorder }
125
144
  },
126
145
  style: {
146
+ fg: THEME.foreground,
147
+ bg: THEME.background,
127
148
  border: { fg: THEME.panelBorder }
128
149
  }
129
150
  });
@@ -282,7 +303,7 @@ export class Tui {
282
303
  const compact = this.screenColumns() < 110;
283
304
  const tabLine = TABS.map((tab, index) => {
284
305
  const label = compact ? `${index + 1}:${tab.label.slice(0, 4)}` : `${index + 1}:${tab.label}`;
285
- return tab.id === this.activeTab ? `{black-fg}{white-bg}${label}{/white-bg}{/black-fg}` : `{gray-fg}${label}{/gray-fg}`;
306
+ return tab.id === this.activeTab ? `{black-fg}{white-bg}${label}{/white-bg}{/black-fg}` : muted(label);
286
307
  }).join(" ");
287
308
  this.header.setContent([
288
309
  ` {bold}kirby-ocpp{/bold} ${this.station.config.chargePointId} -> ${this.station.config.centralSystemUrl}`,
@@ -358,9 +379,11 @@ export class Tui {
358
379
  this.actions = this.actionsForTab();
359
380
  const width = this.centerContentWidth();
360
381
  const items = this.actions.map((action) => {
361
- const prefix = action.disabled?.() ? "{gray-fg}" : "";
362
- const suffix = action.disabled?.() ? "{/gray-fg}" : "";
363
- return `${prefix}${action.key.padEnd(2)} ${truncateText(action.label, Math.max(12, width - 6))}${suffix}`;
382
+ const disabled = action.disabled?.() ?? false;
383
+ const suffix = disabled ? " (disabled)" : "";
384
+ const labelWidth = Math.max(12, width - 6 - suffix.length);
385
+ const line = `${action.key.padEnd(2)} ${truncateText(action.label, labelWidth)}`;
386
+ return disabled ? disabledLine(line) : line;
364
387
  });
365
388
  this.actionList.setLabel(` ${this.tabLabel(this.activeTab)} actions `);
366
389
  this.actionList.setItems(items);
@@ -546,6 +569,8 @@ export class Tui {
546
569
  tags: true,
547
570
  keys: true,
548
571
  style: {
572
+ fg: THEME.foreground,
573
+ bg: THEME.background,
549
574
  border: { fg: THEME.panelBorder }
550
575
  }
551
576
  });
@@ -559,6 +584,8 @@ export class Tui {
559
584
  keys: true,
560
585
  tags: true,
561
586
  style: {
587
+ fg: THEME.foreground,
588
+ bg: THEME.background,
562
589
  border: { fg: THEME.panelBorder }
563
590
  }
564
591
  });
@@ -574,6 +601,8 @@ export class Tui {
574
601
  vi: false,
575
602
  items: [],
576
603
  style: {
604
+ fg: THEME.foreground,
605
+ bg: THEME.background,
577
606
  selected: { bg: THEME.selectedBg, fg: THEME.selectedFg },
578
607
  border: { fg: THEME.panelBorder }
579
608
  }
@@ -585,7 +614,8 @@ export class Tui {
585
614
  right: 2,
586
615
  height: 1,
587
616
  tags: true,
588
- content: "{gray-fg}Type to filter Up/Down select Enter run Esc cancel{/gray-fg}"
617
+ style: { fg: THEME.foreground, bg: THEME.background },
618
+ content: muted("Type to filter Up/Down select Enter run Esc cancel")
589
619
  });
590
620
  let entries = [];
591
621
  let selectedIndex = 0;
@@ -612,7 +642,7 @@ export class Tui {
612
642
  selectedIndex = clamp(selectedIndex, 0, Math.max(0, entries.length - 1));
613
643
  box.setLabel(` Commands${trimmedQuery ? `: ${truncateText(trimmedQuery, 28)}` : ""} `);
614
644
  if (entries.length === 0) {
615
- list.setItems(["{gray-fg}No matching commands{/gray-fg}"]);
645
+ list.setItems([muted("No matching commands")]);
616
646
  list.select(0);
617
647
  this.screen.render();
618
648
  return;
@@ -701,6 +731,8 @@ export class Tui {
701
731
  alwaysScroll: false,
702
732
  padding: { left: 2, right: 2 },
703
733
  style: {
734
+ fg: THEME.foreground,
735
+ bg: THEME.background,
704
736
  border: { fg: THEME.panelBorder }
705
737
  },
706
738
  scrollbar: {
@@ -724,7 +756,7 @@ export class Tui {
724
756
  ` id=${this.station.config.chargePointId}`,
725
757
  ` url=${this.station.config.centralSystemUrl}`,
726
758
  "",
727
- "{gray-fg}Esc or q closes this help.{/gray-fg}"
759
+ muted("Esc or q closes this help.")
728
760
  ].join("\n"));
729
761
  const close = () => {
730
762
  box.destroy();
@@ -742,9 +774,8 @@ export class Tui {
742
774
  paletteEntryLine(entry) {
743
775
  const tab = this.tabLabel(entry.tab).padEnd(11);
744
776
  const key = entry.action.key.padEnd(2);
745
- const state = entry.action.disabled?.() ? "{gray-fg}" : "";
746
- const endState = entry.action.disabled?.() ? "{/gray-fg}" : "";
747
- return `${state}${tab} ${key} ${entry.action.label}${endState}`;
777
+ const line = `${tab} ${key} ${entry.action.label}`;
778
+ return entry.action.disabled?.() ? disabledLine(line) : line;
748
779
  }
749
780
  paletteEntries(query) {
750
781
  const terms = query.toLowerCase().split(/\s+/).filter(Boolean);
@@ -963,6 +994,8 @@ export class Tui {
963
994
  tags: true,
964
995
  keys: true,
965
996
  style: {
997
+ fg: THEME.foreground,
998
+ bg: THEME.background,
966
999
  border: { fg: THEME.panelBorder }
967
1000
  }
968
1001
  });
@@ -979,6 +1012,8 @@ export class Tui {
979
1012
  keys: true,
980
1013
  tags: true,
981
1014
  style: {
1015
+ fg: THEME.foreground,
1016
+ bg: THEME.background,
982
1017
  border: { fg: THEME.panelBorder }
983
1018
  }
984
1019
  }));
@@ -989,7 +1024,8 @@ export class Tui {
989
1024
  right: 2,
990
1025
  height: 1,
991
1026
  tags: true,
992
- content: "{gray-fg}Tab/Up/Down field Left/Right cursor C-u clear Enter submit Esc cancel{/gray-fg}"
1027
+ style: { fg: THEME.foreground, bg: THEME.background },
1028
+ content: muted("Tab/Up/Down field Left/Right cursor C-u clear Enter submit Esc cancel")
993
1029
  });
994
1030
  let focusedIndex = 0;
995
1031
  let closed = false;
@@ -1002,7 +1038,7 @@ export class Tui {
1002
1038
  const value = values[index] ?? "";
1003
1039
  const cursor = clamp(cursors[index] ?? value.length, 0, value.length);
1004
1040
  input.setContent(renderFieldValue(value, cursor, width, focusedIndex === index));
1005
- input.style.border = { fg: focusedIndex === index ? "yellow" : THEME.panelBorder };
1041
+ input.style.border = { fg: focusedIndex === index ? THEME.focusBorder : THEME.panelBorder };
1006
1042
  };
1007
1043
  const renderInputs = () => {
1008
1044
  inputBoxes.forEach((_input, index) => renderInput(index));
@@ -1135,6 +1171,8 @@ export class Tui {
1135
1171
  vi: true,
1136
1172
  items: choices.map((choice) => ` ${choice}`),
1137
1173
  style: {
1174
+ fg: THEME.foreground,
1175
+ bg: THEME.background,
1138
1176
  selected: { bg: THEME.selectedBg, fg: THEME.selectedFg },
1139
1177
  border: { fg: THEME.panelBorder }
1140
1178
  }
@@ -1212,12 +1250,12 @@ export class Tui {
1212
1250
  alwaysScroll: false,
1213
1251
  content: this.plainLogContent(),
1214
1252
  style: {
1215
- fg: "white",
1216
- bg: "black"
1253
+ fg: THEME.foreground,
1254
+ bg: THEME.background
1217
1255
  },
1218
1256
  scrollbar: {
1219
1257
  ch: " ",
1220
- style: { bg: "cyan" }
1258
+ style: { bg: THEME.panelBorder }
1221
1259
  }
1222
1260
  });
1223
1261
  this.bindLogNavigationKeys(this.plainLogView);
@@ -1282,7 +1320,7 @@ export class Tui {
1282
1320
  appendLogEntry(entry) {
1283
1321
  this.logBox.log(this.formatLogEntryForTui(entry));
1284
1322
  if (entry.details) {
1285
- this.logBox.log(` {gray-fg}${entry.details}{/gray-fg}`);
1323
+ this.logBox.log(` ${muted(entry.details)}`);
1286
1324
  }
1287
1325
  }
1288
1326
  filteredLogs() {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kirby-ocpp",
3
- "version": "0.1.1",
3
+ "version": "0.1.2",
4
4
  "description": "A terminal OCPP charge point emulator.",
5
5
  "type": "module",
6
6
  "author": "archhaze24",