commitshow 0.3.7 → 0.3.9
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/lib/render.js +99 -98
- package/package.json +1 -1
package/dist/lib/render.js
CHANGED
|
@@ -23,136 +23,137 @@ function scoreBar(value, max) {
|
|
|
23
23
|
const tone = scoreTone(Math.round((value / max) * 100));
|
|
24
24
|
return tone('▰'.repeat(filled)) + c.muted('▱'.repeat(empty));
|
|
25
25
|
}
|
|
26
|
-
// ANSI Shadow figlet font · transcribed via oh-my-logo --filled. CEO
|
|
27
|
-
// referenced the Claude Code style; Claude Code itself doesn't embed a
|
|
28
|
-
// text-as-ASCII logo (only the Clawd mascot lives in its bundle), but
|
|
29
|
-
// oh-my-logo is the open-source library that imitates the look and ANSI
|
|
30
|
-
// Shadow is the free figlet font it uses. 6 rows tall, variable width per
|
|
31
|
-
// glyph (4 to 10 cols), pre-padded so bigText concats cleanly.
|
|
32
26
|
const BIG_DIGITS = {
|
|
33
27
|
"0": [
|
|
34
|
-
"
|
|
35
|
-
"
|
|
36
|
-
"
|
|
37
|
-
"
|
|
38
|
-
"
|
|
39
|
-
"
|
|
28
|
+
"11111",
|
|
29
|
+
"10001",
|
|
30
|
+
"10001",
|
|
31
|
+
"10001",
|
|
32
|
+
"10001",
|
|
33
|
+
"10001",
|
|
34
|
+
"11111",
|
|
40
35
|
],
|
|
41
36
|
"1": [
|
|
42
|
-
"
|
|
43
|
-
"
|
|
44
|
-
"
|
|
45
|
-
"
|
|
46
|
-
"
|
|
47
|
-
"
|
|
37
|
+
"00100",
|
|
38
|
+
"01100",
|
|
39
|
+
"00100",
|
|
40
|
+
"00100",
|
|
41
|
+
"00100",
|
|
42
|
+
"00100",
|
|
43
|
+
"01110",
|
|
48
44
|
],
|
|
49
45
|
"2": [
|
|
50
|
-
"
|
|
51
|
-
"
|
|
52
|
-
"
|
|
53
|
-
"
|
|
54
|
-
"
|
|
55
|
-
"
|
|
46
|
+
"11111",
|
|
47
|
+
"00001",
|
|
48
|
+
"00001",
|
|
49
|
+
"11111",
|
|
50
|
+
"10000",
|
|
51
|
+
"10000",
|
|
52
|
+
"11111",
|
|
56
53
|
],
|
|
57
54
|
"3": [
|
|
58
|
-
"
|
|
59
|
-
"
|
|
60
|
-
"
|
|
61
|
-
"
|
|
62
|
-
"
|
|
63
|
-
"
|
|
55
|
+
"11111",
|
|
56
|
+
"00001",
|
|
57
|
+
"00001",
|
|
58
|
+
"11111",
|
|
59
|
+
"00001",
|
|
60
|
+
"00001",
|
|
61
|
+
"11111",
|
|
64
62
|
],
|
|
65
63
|
"4": [
|
|
66
|
-
"
|
|
67
|
-
"
|
|
68
|
-
"
|
|
69
|
-
"
|
|
70
|
-
"
|
|
71
|
-
"
|
|
64
|
+
"10001",
|
|
65
|
+
"10001",
|
|
66
|
+
"10001",
|
|
67
|
+
"11111",
|
|
68
|
+
"00001",
|
|
69
|
+
"00001",
|
|
70
|
+
"00001",
|
|
72
71
|
],
|
|
73
72
|
"5": [
|
|
74
|
-
"
|
|
75
|
-
"
|
|
76
|
-
"
|
|
77
|
-
"
|
|
78
|
-
"
|
|
79
|
-
"
|
|
73
|
+
"11111",
|
|
74
|
+
"10000",
|
|
75
|
+
"10000",
|
|
76
|
+
"11111",
|
|
77
|
+
"00001",
|
|
78
|
+
"00001",
|
|
79
|
+
"11111",
|
|
80
80
|
],
|
|
81
81
|
"6": [
|
|
82
|
-
"
|
|
83
|
-
"
|
|
84
|
-
"
|
|
85
|
-
"
|
|
86
|
-
"
|
|
87
|
-
"
|
|
82
|
+
"11111",
|
|
83
|
+
"10000",
|
|
84
|
+
"10000",
|
|
85
|
+
"11111",
|
|
86
|
+
"10001",
|
|
87
|
+
"10001",
|
|
88
|
+
"11111",
|
|
88
89
|
],
|
|
89
90
|
"7": [
|
|
90
|
-
"
|
|
91
|
-
"
|
|
92
|
-
"
|
|
93
|
-
"
|
|
94
|
-
"
|
|
95
|
-
"
|
|
91
|
+
"11111",
|
|
92
|
+
"00001",
|
|
93
|
+
"00001",
|
|
94
|
+
"00001",
|
|
95
|
+
"00001",
|
|
96
|
+
"00001",
|
|
97
|
+
"00001",
|
|
96
98
|
],
|
|
97
99
|
"8": [
|
|
98
|
-
"
|
|
99
|
-
"
|
|
100
|
-
"
|
|
101
|
-
"
|
|
102
|
-
"
|
|
103
|
-
"
|
|
100
|
+
"11111",
|
|
101
|
+
"10001",
|
|
102
|
+
"10001",
|
|
103
|
+
"11111",
|
|
104
|
+
"10001",
|
|
105
|
+
"10001",
|
|
106
|
+
"11111",
|
|
104
107
|
],
|
|
105
108
|
"9": [
|
|
106
|
-
"
|
|
107
|
-
"
|
|
108
|
-
"
|
|
109
|
-
"
|
|
110
|
-
"
|
|
111
|
-
"
|
|
109
|
+
"11111",
|
|
110
|
+
"10001",
|
|
111
|
+
"10001",
|
|
112
|
+
"11111",
|
|
113
|
+
"00001",
|
|
114
|
+
"00001",
|
|
115
|
+
"11111",
|
|
112
116
|
],
|
|
113
117
|
"/": [
|
|
114
|
-
"
|
|
115
|
-
"
|
|
116
|
-
"
|
|
117
|
-
"
|
|
118
|
-
"
|
|
119
|
-
"
|
|
118
|
+
"00001",
|
|
119
|
+
"00001",
|
|
120
|
+
"00010",
|
|
121
|
+
"00100",
|
|
122
|
+
"01000",
|
|
123
|
+
"10000",
|
|
124
|
+
"10000",
|
|
120
125
|
],
|
|
121
126
|
" ": [
|
|
122
|
-
"
|
|
123
|
-
"
|
|
124
|
-
"
|
|
125
|
-
"
|
|
126
|
-
"
|
|
127
|
-
"
|
|
127
|
+
"00000",
|
|
128
|
+
"00000",
|
|
129
|
+
"00000",
|
|
130
|
+
"00000",
|
|
131
|
+
"00000",
|
|
132
|
+
"00000",
|
|
133
|
+
"00000",
|
|
128
134
|
],
|
|
129
135
|
};
|
|
130
|
-
const BIG_ROWS =
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
136
|
+
const BIG_ROWS = 7;
|
|
137
|
+
const PIXEL_FILL = "█"; // 1 char per pixel · halves width vs ██ so 3-digit scores stay inside narrow PC grid columns
|
|
138
|
+
const PIXEL_BLANK = " ";
|
|
139
|
+
const PIXEL_GAP = " "; // visible seam between pixels — the "block" feel
|
|
140
|
+
const DIGIT_GAP = " "; // wider gap between digits so they read as separate numerals
|
|
141
|
+
function digitToRows(d) {
|
|
142
|
+
const m = BIG_DIGITS[d] ?? BIG_DIGITS[" "];
|
|
143
|
+
return m.map(row => row.split("").map(c => c === "1" ? PIXEL_FILL : PIXEL_BLANK).join(PIXEL_GAP));
|
|
144
|
+
}
|
|
145
|
+
/** Render a string ("68", "100", "82/100") as a pixel-grid block numeral. */
|
|
137
146
|
function bigText(text) {
|
|
138
|
-
const rows = Array.from({ length: BIG_ROWS }, () =>
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
// (was reading too far apart at hero size).
|
|
143
|
-
const GAP = '';
|
|
144
|
-
for (let i = 0; i < text.length; i++) {
|
|
145
|
-
const ch = text[i];
|
|
146
|
-
const glyph = BIG_DIGITS[ch] ?? BIG_DIGITS[' '];
|
|
147
|
+
const rows = Array.from({ length: BIG_ROWS }, () => "");
|
|
148
|
+
const chars = text.split("");
|
|
149
|
+
for (let i = 0; i < chars.length; i++) {
|
|
150
|
+
const glyph = digitToRows(chars[i]);
|
|
147
151
|
for (let r = 0; r < BIG_ROWS; r++) {
|
|
148
|
-
rows[r] += glyph[r] + (i <
|
|
152
|
+
rows[r] += glyph[r] + (i < chars.length - 1 ? DIGIT_GAP : "");
|
|
149
153
|
}
|
|
150
154
|
}
|
|
151
155
|
return rows;
|
|
152
156
|
}
|
|
153
|
-
/** Visible (rune) length — counts Unicode code points so the centering math
|
|
154
|
-
* treats `█` and `╔` as one column each, matching how monospace terminals
|
|
155
|
-
* render the ANSI Shadow font. */
|
|
156
157
|
function bigTextWidth(text) {
|
|
157
158
|
if (text.length === 0)
|
|
158
159
|
return 0;
|