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.
- package/dist/cli.js +0 -0
- package/dist/tui.js +56 -18
- 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: "{
|
|
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}` :
|
|
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
|
|
362
|
-
const suffix =
|
|
363
|
-
|
|
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
|
-
|
|
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(["
|
|
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
|
-
"
|
|
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
|
|
746
|
-
|
|
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
|
-
|
|
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 ?
|
|
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:
|
|
1216
|
-
bg:
|
|
1253
|
+
fg: THEME.foreground,
|
|
1254
|
+
bg: THEME.background
|
|
1217
1255
|
},
|
|
1218
1256
|
scrollbar: {
|
|
1219
1257
|
ch: " ",
|
|
1220
|
-
style: { bg:
|
|
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(`
|
|
1323
|
+
this.logBox.log(` ${muted(entry.details)}`);
|
|
1286
1324
|
}
|
|
1287
1325
|
}
|
|
1288
1326
|
filteredLogs() {
|