ccstatusline 2.2.11 → 2.2.12
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 +4 -1
- package/dist/ccstatusline.js +106 -51
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -47,17 +47,20 @@
|
|
|
47
47
|
|
|
48
48
|
## 🆕 Recent Updates
|
|
49
49
|
|
|
50
|
-
### v2.2.9 - v2.2.
|
|
50
|
+
### v2.2.9 - v2.2.12 - GitLab support, reset timers, context, compaction, and git widgets
|
|
51
51
|
|
|
52
52
|
- **🦊 GitLab PR/MR support** - `Git Branch` and `Git PR/MR` now support GitHub, GitLab, and compatible self-hosted remotes, using `gh` or `glab` as appropriate.
|
|
53
53
|
- **🔄 Status line refresh interval** - Installed configs can set Claude Code's `statusLine.refreshInterval` from the TUI when Claude Code >=2.1.97 supports it.
|
|
54
54
|
- **🧭 Wrap-around TUI navigation** - Menu/list navigation and move/reorder modes now wrap at the first and last items.
|
|
55
55
|
- **📋 Clone widget shortcut** - Press `k` in the item editor to duplicate the selected widget, with fresh Powerline background color for cloned Powerline items.
|
|
56
56
|
- **📊 Short bar display modes** - Context percentage, Context Bar, Session Usage, Weekly Usage, Block Timer, and reset timer widgets can use compact bar variants.
|
|
57
|
+
- **⏱️ Usage time cursor** - Session Usage and Weekly Usage progress bars can show the elapsed time position within the current usage window.
|
|
57
58
|
- **🕒 Reset timer timestamps** - Block and Weekly Reset Timer widgets can show exact reset timestamps with compact formatting, 12/24-hour display, IANA time zones, and locale selection.
|
|
58
59
|
- **🪟 Context Window widget** - Added a `Context Window` widget for total model window size, keeping `Context Length` focused on current context usage.
|
|
59
60
|
- **🔁 Compaction Counter widget** - Added a `Compaction Counter` widget that tracks session context compactions, with icon/text/number formats, optional Nerd Font icon, and hide-when-zero behavior.
|
|
60
61
|
- **🧮 Git file status widgets** - Added `Git Staged Files`, `Git Unstaged Files`, `Git Untracked Files`, and `Git Clean Status` for file counts and clean/dirty state.
|
|
62
|
+
- **🏷️ Clear context percentage labels** - `Context %` and `Context % (usable)` now label rendered values as used or left when toggling used/remaining mode.
|
|
63
|
+
- **⚡ More Powerline caps** - The Powerline separator editor now supports more than three start/end caps.
|
|
61
64
|
- **🧠 Thinking Effort updates** - Added `xhigh`, show `default` when no effort is set, mark unknown future effort levels with `?`, and track live status JSON plus `/effort` command changes.
|
|
62
65
|
- **🧮 More accurate token counts** - Streaming duplicate JSONL entries are deduped so token widgets do not overcount live Claude Code output.
|
|
63
66
|
- **🏷️ Cleaner model display** - The Model widget strips trailing context suffixes like `(1M context)`; use `Context Window` when you want the total window size shown.
|
package/dist/ccstatusline.js
CHANGED
|
@@ -56136,7 +56136,7 @@ function getTerminalWidth() {
|
|
|
56136
56136
|
function canDetectTerminalWidth() {
|
|
56137
56137
|
return probeTerminalWidth() !== null;
|
|
56138
56138
|
}
|
|
56139
|
-
var __dirname = "/Users/sirmalloc/Projects/Personal/ccstatusline/src/utils", PACKAGE_VERSION = "2.2.
|
|
56139
|
+
var __dirname = "/Users/sirmalloc/Projects/Personal/ccstatusline/src/utils", PACKAGE_VERSION = "2.2.12";
|
|
56140
56140
|
var init_terminal = () => {};
|
|
56141
56141
|
|
|
56142
56142
|
// src/utils/renderer.ts
|
|
@@ -57127,11 +57127,21 @@ function isUsageProgressMode(mode) {
|
|
|
57127
57127
|
function isUsageSliderMode(mode) {
|
|
57128
57128
|
return mode === "slider" || mode === "slider-only";
|
|
57129
57129
|
}
|
|
57130
|
-
function makeSliderBar(percent, width = SLIDER_WIDTH) {
|
|
57130
|
+
function makeSliderBar(percent, width = SLIDER_WIDTH, options) {
|
|
57131
57131
|
const clamped = Math.max(0, Math.min(100, percent));
|
|
57132
57132
|
const filled = Math.round(clamped / 100 * width);
|
|
57133
|
-
const
|
|
57134
|
-
|
|
57133
|
+
const cursorPos = options?.cursorPercent !== undefined ? Math.min(Math.floor(Math.max(0, Math.min(100, options.cursorPercent)) / 100 * width), width - 1) : -1;
|
|
57134
|
+
let bar = "";
|
|
57135
|
+
for (let i = 0;i < width; i++) {
|
|
57136
|
+
if (i === cursorPos) {
|
|
57137
|
+
bar += "│";
|
|
57138
|
+
} else if (i < filled) {
|
|
57139
|
+
bar += "▓";
|
|
57140
|
+
} else {
|
|
57141
|
+
bar += "░";
|
|
57142
|
+
}
|
|
57143
|
+
}
|
|
57144
|
+
return bar;
|
|
57135
57145
|
}
|
|
57136
57146
|
function getUsageProgressBarWidth(mode) {
|
|
57137
57147
|
return mode === "progress" ? 32 : 16;
|
|
@@ -57142,6 +57152,12 @@ function isUsageInverted(item) {
|
|
|
57142
57152
|
function isUsageCompact(item) {
|
|
57143
57153
|
return isMetadataFlagEnabled(item, "compact");
|
|
57144
57154
|
}
|
|
57155
|
+
function isUsageCursorEnabled(item) {
|
|
57156
|
+
return isMetadataFlagEnabled(item, "cursor");
|
|
57157
|
+
}
|
|
57158
|
+
function toggleUsageCursor(item) {
|
|
57159
|
+
return toggleMetadataFlag(item, "cursor");
|
|
57160
|
+
}
|
|
57145
57161
|
function isUsageDateMode(item) {
|
|
57146
57162
|
return isMetadataFlagEnabled(item, "absolute");
|
|
57147
57163
|
}
|
|
@@ -57213,6 +57229,9 @@ function getUsageDisplayModifierText(item, options = {}) {
|
|
|
57213
57229
|
if (isUsageInverted(item)) {
|
|
57214
57230
|
modifiers.push("inverted");
|
|
57215
57231
|
}
|
|
57232
|
+
if (isUsageCursorEnabled(item) && (isUsageProgressMode(mode) || isUsageSliderMode(mode))) {
|
|
57233
|
+
modifiers.push("time cursor");
|
|
57234
|
+
}
|
|
57216
57235
|
if (options.includeCompact && !isUsageProgressMode(mode) && isUsageCompact(item)) {
|
|
57217
57236
|
modifiers.push("compact");
|
|
57218
57237
|
}
|
|
@@ -57240,7 +57259,8 @@ function cycleUsageDisplayMode(item, disabledInProgressKeys = [], includeSlider
|
|
|
57240
57259
|
} else {
|
|
57241
57260
|
nextMode = currentMode === "time" ? "progress" : currentMode === "progress" ? "progress-short" : "time";
|
|
57242
57261
|
}
|
|
57243
|
-
const
|
|
57262
|
+
const keysToRemove = nextMode === "time" ? ["invert", "cursor"] : disabledInProgressKeys;
|
|
57263
|
+
const nextItem = removeMetadataKeys(item, keysToRemove);
|
|
57244
57264
|
const nextMetadata = {
|
|
57245
57265
|
...nextItem.metadata ?? {},
|
|
57246
57266
|
display: nextMode
|
|
@@ -57260,6 +57280,9 @@ function getUsagePercentCustomKeybinds(item) {
|
|
|
57260
57280
|
if (isUsageProgressMode(mode) || isUsageSliderMode(mode)) {
|
|
57261
57281
|
keybinds.push(INVERT_TOGGLE_KEYBIND);
|
|
57262
57282
|
}
|
|
57283
|
+
if (isUsageProgressMode(mode) || isUsageSliderMode(mode)) {
|
|
57284
|
+
keybinds.push(CURSOR_TOGGLE_KEYBIND);
|
|
57285
|
+
}
|
|
57263
57286
|
}
|
|
57264
57287
|
return keybinds;
|
|
57265
57288
|
}
|
|
@@ -57286,12 +57309,13 @@ function getUsageTimerCustomKeybinds(item, options = {}) {
|
|
|
57286
57309
|
}
|
|
57287
57310
|
return keybinds;
|
|
57288
57311
|
}
|
|
57289
|
-
var SLIDER_WIDTH = 10, PROGRESS_TOGGLE_KEYBIND, INVERT_TOGGLE_KEYBIND, COMPACT_TOGGLE_KEYBIND, DATE_TOGGLE_KEYBIND, HOUR_FORMAT_TOGGLE_KEYBIND, TIMEZONE_KEYBIND, LOCALE_KEYBIND;
|
|
57312
|
+
var SLIDER_WIDTH = 10, PROGRESS_TOGGLE_KEYBIND, INVERT_TOGGLE_KEYBIND, COMPACT_TOGGLE_KEYBIND, CURSOR_TOGGLE_KEYBIND, DATE_TOGGLE_KEYBIND, HOUR_FORMAT_TOGGLE_KEYBIND, TIMEZONE_KEYBIND, LOCALE_KEYBIND;
|
|
57290
57313
|
var init_usage_display = __esm(() => {
|
|
57291
57314
|
init_locales2();
|
|
57292
57315
|
PROGRESS_TOGGLE_KEYBIND = { key: "p", label: "(p)rogress toggle", action: "toggle-progress" };
|
|
57293
57316
|
INVERT_TOGGLE_KEYBIND = { key: "v", label: "in(v)ert fill", action: "toggle-invert" };
|
|
57294
57317
|
COMPACT_TOGGLE_KEYBIND = { key: "s", label: "(s)hort time", action: "toggle-compact" };
|
|
57318
|
+
CURSOR_TOGGLE_KEYBIND = { key: "t", label: "(t)ime cursor", action: "toggle-cursor" };
|
|
57295
57319
|
DATE_TOGGLE_KEYBIND = { key: "t", label: "(t)imestamp", action: "toggle-date" };
|
|
57296
57320
|
HOUR_FORMAT_TOGGLE_KEYBIND = { key: "h", label: "12/24 (h)our", action: "toggle-hour-format" };
|
|
57297
57321
|
TIMEZONE_KEYBIND = { key: "z", label: "time(z)one", action: "edit-timezone" };
|
|
@@ -57386,23 +57410,19 @@ class ContextPercentageWidget {
|
|
|
57386
57410
|
}
|
|
57387
57411
|
render(item, context, settings) {
|
|
57388
57412
|
const isInverse = isContextInverse(item);
|
|
57413
|
+
const label = isInverse ? "Ctx Left: " : "Ctx Used: ";
|
|
57389
57414
|
const sliderMode = getContextSliderMode(item);
|
|
57390
57415
|
const contextPercentageMetrics = calculateContextPercentageMetrics(context);
|
|
57416
|
+
const formatContextPercentage = (displayPercentage) => {
|
|
57417
|
+
const sliderResult = renderContextSlider(sliderMode, displayPercentage);
|
|
57418
|
+
return formatRawOrLabeledValue(item, label, sliderResult ?? `${displayPercentage.toFixed(1)}%`);
|
|
57419
|
+
};
|
|
57391
57420
|
if (context.isPreview) {
|
|
57392
|
-
|
|
57393
|
-
const sliderResult = renderContextSlider(sliderMode, previewPercent);
|
|
57394
|
-
if (sliderResult !== null) {
|
|
57395
|
-
return formatRawOrLabeledValue(item, "Ctx: ", sliderResult);
|
|
57396
|
-
}
|
|
57397
|
-
return formatRawOrLabeledValue(item, "Ctx: ", `${previewPercent.toFixed(1)}%`);
|
|
57421
|
+
return formatContextPercentage(isInverse ? 90.7 : 9.3);
|
|
57398
57422
|
}
|
|
57399
57423
|
if (contextPercentageMetrics !== null) {
|
|
57400
57424
|
const displayPercentage = isInverse ? 100 - contextPercentageMetrics.usedPercentage : contextPercentageMetrics.usedPercentage;
|
|
57401
|
-
|
|
57402
|
-
if (sliderResult !== null) {
|
|
57403
|
-
return formatRawOrLabeledValue(item, "Ctx: ", sliderResult);
|
|
57404
|
-
}
|
|
57405
|
-
return formatRawOrLabeledValue(item, "Ctx: ", `${displayPercentage.toFixed(1)}%`);
|
|
57425
|
+
return formatContextPercentage(displayPercentage);
|
|
57406
57426
|
}
|
|
57407
57427
|
return null;
|
|
57408
57428
|
}
|
|
@@ -57457,35 +57477,27 @@ class ContextPercentageUsableWidget {
|
|
|
57457
57477
|
}
|
|
57458
57478
|
render(item, context, settings) {
|
|
57459
57479
|
const isInverse = isContextInverse(item);
|
|
57480
|
+
const label = isInverse ? "Ctx(u) Left: " : "Ctx(u) Used: ";
|
|
57460
57481
|
const sliderMode = getContextSliderMode(item);
|
|
57461
57482
|
const modelIdentifier = getModelContextIdentifier(context.data?.model);
|
|
57462
57483
|
const contextWindowMetrics = getContextWindowMetrics(context.data);
|
|
57463
57484
|
const contextConfig = getContextConfig(modelIdentifier, contextWindowMetrics.windowSize);
|
|
57485
|
+
const formatContextPercentage = (displayPercentage) => {
|
|
57486
|
+
const sliderResult = renderContextSlider(sliderMode, displayPercentage);
|
|
57487
|
+
return formatRawOrLabeledValue(item, label, sliderResult ?? `${displayPercentage.toFixed(1)}%`);
|
|
57488
|
+
};
|
|
57464
57489
|
if (context.isPreview) {
|
|
57465
|
-
|
|
57466
|
-
const sliderResult = renderContextSlider(sliderMode, previewPercent);
|
|
57467
|
-
if (sliderResult !== null) {
|
|
57468
|
-
return formatRawOrLabeledValue(item, "Ctx(u): ", sliderResult);
|
|
57469
|
-
}
|
|
57470
|
-
return formatRawOrLabeledValue(item, "Ctx(u): ", `${previewPercent.toFixed(1)}%`);
|
|
57490
|
+
return formatContextPercentage(isInverse ? 88.4 : 11.6);
|
|
57471
57491
|
}
|
|
57472
57492
|
if (contextWindowMetrics.contextLengthTokens !== null) {
|
|
57473
57493
|
const usedPercentage = Math.min(100, contextWindowMetrics.contextLengthTokens / contextConfig.usableTokens * 100);
|
|
57474
57494
|
const displayPercentage = isInverse ? 100 - usedPercentage : usedPercentage;
|
|
57475
|
-
|
|
57476
|
-
if (sliderResult !== null) {
|
|
57477
|
-
return formatRawOrLabeledValue(item, "Ctx(u): ", sliderResult);
|
|
57478
|
-
}
|
|
57479
|
-
return formatRawOrLabeledValue(item, "Ctx(u): ", `${displayPercentage.toFixed(1)}%`);
|
|
57495
|
+
return formatContextPercentage(displayPercentage);
|
|
57480
57496
|
}
|
|
57481
57497
|
if (context.tokenMetrics) {
|
|
57482
57498
|
const usedPercentage = Math.min(100, context.tokenMetrics.contextLength / contextConfig.usableTokens * 100);
|
|
57483
57499
|
const displayPercentage = isInverse ? 100 - usedPercentage : usedPercentage;
|
|
57484
|
-
|
|
57485
|
-
if (sliderResult !== null) {
|
|
57486
|
-
return formatRawOrLabeledValue(item, "Ctx(u): ", sliderResult);
|
|
57487
|
-
}
|
|
57488
|
-
return formatRawOrLabeledValue(item, "Ctx(u): ", `${displayPercentage.toFixed(1)}%`);
|
|
57500
|
+
return formatContextPercentage(displayPercentage);
|
|
57489
57501
|
}
|
|
57490
57502
|
return null;
|
|
57491
57503
|
}
|
|
@@ -64181,6 +64193,24 @@ class SessionNameWidget {
|
|
|
64181
64193
|
}
|
|
64182
64194
|
var init_SessionName = () => {};
|
|
64183
64195
|
|
|
64196
|
+
// src/widgets/shared/progress-bar.ts
|
|
64197
|
+
function makeTimerProgressBar2(percent, width, options) {
|
|
64198
|
+
const clampedPercent = Math.max(0, Math.min(100, percent));
|
|
64199
|
+
const filledWidth = Math.round(clampedPercent / 100 * width);
|
|
64200
|
+
const cursorPos = options?.cursorPercent !== undefined ? Math.min(Math.floor(Math.max(0, Math.min(100, options.cursorPercent)) / 100 * width), width - 1) : -1;
|
|
64201
|
+
let bar = "";
|
|
64202
|
+
for (let i = 0;i < width; i++) {
|
|
64203
|
+
if (i === cursorPos) {
|
|
64204
|
+
bar += "│";
|
|
64205
|
+
} else if (i < filledWidth) {
|
|
64206
|
+
bar += "█";
|
|
64207
|
+
} else {
|
|
64208
|
+
bar += "░";
|
|
64209
|
+
}
|
|
64210
|
+
}
|
|
64211
|
+
return bar;
|
|
64212
|
+
}
|
|
64213
|
+
|
|
64184
64214
|
// src/widgets/SessionUsage.ts
|
|
64185
64215
|
class SessionUsageWidget {
|
|
64186
64216
|
getDefaultColor() {
|
|
@@ -64208,21 +64238,26 @@ class SessionUsageWidget {
|
|
|
64208
64238
|
if (action === "toggle-invert") {
|
|
64209
64239
|
return toggleUsageInverted(item);
|
|
64210
64240
|
}
|
|
64241
|
+
if (action === "toggle-cursor") {
|
|
64242
|
+
return toggleUsageCursor(item);
|
|
64243
|
+
}
|
|
64211
64244
|
return null;
|
|
64212
64245
|
}
|
|
64213
64246
|
render(item, context, settings) {
|
|
64214
64247
|
const displayMode = getUsageDisplayMode(item);
|
|
64215
64248
|
const inverted = isUsageInverted(item);
|
|
64249
|
+
const showCursor = isUsageCursorEnabled(item);
|
|
64216
64250
|
if (context.isPreview) {
|
|
64217
64251
|
const previewPercent = 20;
|
|
64218
64252
|
const renderedPercent2 = inverted ? 100 - previewPercent : previewPercent;
|
|
64219
64253
|
if (isUsageProgressMode(displayMode)) {
|
|
64220
64254
|
const width = getUsageProgressBarWidth(displayMode);
|
|
64221
|
-
const
|
|
64255
|
+
const progressBar = makeTimerProgressBar2(renderedPercent2, width, showCursor ? { cursorPercent: 50 } : undefined);
|
|
64256
|
+
const progressDisplay = `[${progressBar}] ${renderedPercent2.toFixed(1)}%`;
|
|
64222
64257
|
return formatRawOrLabeledValue(item, "Session: ", progressDisplay);
|
|
64223
64258
|
}
|
|
64224
64259
|
if (isUsageSliderMode(displayMode)) {
|
|
64225
|
-
const slider = makeSliderBar(renderedPercent2);
|
|
64260
|
+
const slider = makeSliderBar(renderedPercent2, undefined, showCursor ? { cursorPercent: 50 } : undefined);
|
|
64226
64261
|
const sliderDisplay = displayMode === "slider" ? `${slider} ${renderedPercent2.toFixed(1)}%` : slider;
|
|
64227
64262
|
return formatRawOrLabeledValue(item, "Session: ", sliderDisplay);
|
|
64228
64263
|
}
|
|
@@ -64235,13 +64270,21 @@ class SessionUsageWidget {
|
|
|
64235
64270
|
return null;
|
|
64236
64271
|
const percent = Math.max(0, Math.min(100, data.sessionUsage));
|
|
64237
64272
|
const renderedPercent = inverted ? 100 - percent : percent;
|
|
64273
|
+
const getCursorOptions = () => {
|
|
64274
|
+
if (!showCursor) {
|
|
64275
|
+
return;
|
|
64276
|
+
}
|
|
64277
|
+
const window2 = resolveUsageWindowWithFallback(data, context.blockMetrics);
|
|
64278
|
+
return window2 ? { cursorPercent: window2.elapsedPercent } : undefined;
|
|
64279
|
+
};
|
|
64238
64280
|
if (isUsageProgressMode(displayMode)) {
|
|
64239
64281
|
const width = getUsageProgressBarWidth(displayMode);
|
|
64240
|
-
const
|
|
64282
|
+
const progressBar = makeTimerProgressBar2(renderedPercent, width, getCursorOptions());
|
|
64283
|
+
const progressDisplay = `[${progressBar}] ${renderedPercent.toFixed(1)}%`;
|
|
64241
64284
|
return formatRawOrLabeledValue(item, "Session: ", progressDisplay);
|
|
64242
64285
|
}
|
|
64243
64286
|
if (isUsageSliderMode(displayMode)) {
|
|
64244
|
-
const slider = makeSliderBar(renderedPercent);
|
|
64287
|
+
const slider = makeSliderBar(renderedPercent, undefined, getCursorOptions());
|
|
64245
64288
|
const sliderDisplay = displayMode === "slider" ? `${slider} ${renderedPercent.toFixed(1)}%` : slider;
|
|
64246
64289
|
return formatRawOrLabeledValue(item, "Session: ", sliderDisplay);
|
|
64247
64290
|
}
|
|
@@ -64289,21 +64332,26 @@ class WeeklyUsageWidget {
|
|
|
64289
64332
|
if (action === "toggle-invert") {
|
|
64290
64333
|
return toggleUsageInverted(item);
|
|
64291
64334
|
}
|
|
64335
|
+
if (action === "toggle-cursor") {
|
|
64336
|
+
return toggleUsageCursor(item);
|
|
64337
|
+
}
|
|
64292
64338
|
return null;
|
|
64293
64339
|
}
|
|
64294
64340
|
render(item, context, settings) {
|
|
64295
64341
|
const displayMode = getUsageDisplayMode(item);
|
|
64296
64342
|
const inverted = isUsageInverted(item);
|
|
64343
|
+
const showCursor = isUsageCursorEnabled(item);
|
|
64297
64344
|
if (context.isPreview) {
|
|
64298
64345
|
const previewPercent = 12;
|
|
64299
64346
|
const renderedPercent2 = inverted ? 100 - previewPercent : previewPercent;
|
|
64300
64347
|
if (isUsageProgressMode(displayMode)) {
|
|
64301
64348
|
const width = getUsageProgressBarWidth(displayMode);
|
|
64302
|
-
const
|
|
64349
|
+
const progressBar = makeTimerProgressBar2(renderedPercent2, width, showCursor ? { cursorPercent: 50 } : undefined);
|
|
64350
|
+
const progressDisplay = `[${progressBar}] ${renderedPercent2.toFixed(1)}%`;
|
|
64303
64351
|
return formatRawOrLabeledValue(item, "Weekly: ", progressDisplay);
|
|
64304
64352
|
}
|
|
64305
64353
|
if (isUsageSliderMode(displayMode)) {
|
|
64306
|
-
const slider = makeSliderBar(renderedPercent2);
|
|
64354
|
+
const slider = makeSliderBar(renderedPercent2, undefined, showCursor ? { cursorPercent: 50 } : undefined);
|
|
64307
64355
|
const sliderDisplay = displayMode === "slider" ? `${slider} ${renderedPercent2.toFixed(1)}%` : slider;
|
|
64308
64356
|
return formatRawOrLabeledValue(item, "Weekly: ", sliderDisplay);
|
|
64309
64357
|
}
|
|
@@ -64316,13 +64364,21 @@ class WeeklyUsageWidget {
|
|
|
64316
64364
|
return null;
|
|
64317
64365
|
const percent = Math.max(0, Math.min(100, data.weeklyUsage));
|
|
64318
64366
|
const renderedPercent = inverted ? 100 - percent : percent;
|
|
64367
|
+
const getCursorOptions = () => {
|
|
64368
|
+
if (!showCursor) {
|
|
64369
|
+
return;
|
|
64370
|
+
}
|
|
64371
|
+
const window2 = resolveWeeklyUsageWindow(data);
|
|
64372
|
+
return window2 ? { cursorPercent: window2.elapsedPercent } : undefined;
|
|
64373
|
+
};
|
|
64319
64374
|
if (isUsageProgressMode(displayMode)) {
|
|
64320
64375
|
const width = getUsageProgressBarWidth(displayMode);
|
|
64321
|
-
const
|
|
64376
|
+
const progressBar = makeTimerProgressBar2(renderedPercent, width, getCursorOptions());
|
|
64377
|
+
const progressDisplay = `[${progressBar}] ${renderedPercent.toFixed(1)}%`;
|
|
64322
64378
|
return formatRawOrLabeledValue(item, "Weekly: ", progressDisplay);
|
|
64323
64379
|
}
|
|
64324
64380
|
if (isUsageSliderMode(displayMode)) {
|
|
64325
|
-
const slider = makeSliderBar(renderedPercent);
|
|
64381
|
+
const slider = makeSliderBar(renderedPercent, undefined, getCursorOptions());
|
|
64326
64382
|
const sliderDisplay = displayMode === "slider" ? `${slider} ${renderedPercent.toFixed(1)}%` : slider;
|
|
64327
64383
|
return formatRawOrLabeledValue(item, "Weekly: ", sliderDisplay);
|
|
64328
64384
|
}
|
|
@@ -64795,7 +64851,7 @@ var init_timezone_editor = __esm(async () => {
|
|
|
64795
64851
|
});
|
|
64796
64852
|
|
|
64797
64853
|
// src/widgets/BlockResetTimer.ts
|
|
64798
|
-
function
|
|
64854
|
+
function makeTimerProgressBar3(percent, width) {
|
|
64799
64855
|
const clampedPercent = Math.max(0, Math.min(100, percent));
|
|
64800
64856
|
const filledWidth = Math.floor(clampedPercent / 100 * width);
|
|
64801
64857
|
const emptyWidth = width - filledWidth;
|
|
@@ -64848,7 +64904,7 @@ class BlockResetTimerWidget {
|
|
|
64848
64904
|
const previewPercent = inverted ? 90 : 10;
|
|
64849
64905
|
if (isUsageProgressMode(displayMode)) {
|
|
64850
64906
|
const barWidth = getUsageProgressBarWidth(displayMode);
|
|
64851
|
-
const progressBar =
|
|
64907
|
+
const progressBar = makeTimerProgressBar3(previewPercent, barWidth);
|
|
64852
64908
|
return formatRawOrLabeledValue(item, "Reset ", `[${progressBar}] ${previewPercent.toFixed(1)}%`);
|
|
64853
64909
|
}
|
|
64854
64910
|
if (dateMode) {
|
|
@@ -64868,7 +64924,7 @@ class BlockResetTimerWidget {
|
|
|
64868
64924
|
if (isUsageProgressMode(displayMode)) {
|
|
64869
64925
|
const barWidth = getUsageProgressBarWidth(displayMode);
|
|
64870
64926
|
const percent = inverted ? window2.remainingPercent : window2.elapsedPercent;
|
|
64871
|
-
const progressBar =
|
|
64927
|
+
const progressBar = makeTimerProgressBar3(percent, barWidth);
|
|
64872
64928
|
const percentage = percent.toFixed(1);
|
|
64873
64929
|
return formatRawOrLabeledValue(item, "Reset ", `[${progressBar}] ${percentage}%`);
|
|
64874
64930
|
}
|
|
@@ -64918,7 +64974,7 @@ var init_BlockResetTimer = __esm(async () => {
|
|
|
64918
64974
|
});
|
|
64919
64975
|
|
|
64920
64976
|
// src/widgets/WeeklyResetTimer.ts
|
|
64921
|
-
function
|
|
64977
|
+
function makeTimerProgressBar4(percent, width) {
|
|
64922
64978
|
const clampedPercent = Math.max(0, Math.min(100, percent));
|
|
64923
64979
|
const filledWidth = Math.floor(clampedPercent / 100 * width);
|
|
64924
64980
|
const emptyWidth = width - filledWidth;
|
|
@@ -65016,7 +65072,7 @@ class WeeklyResetTimerWidget {
|
|
|
65016
65072
|
const previewPercent = inverted ? 90 : 10;
|
|
65017
65073
|
if (isUsageProgressMode(displayMode)) {
|
|
65018
65074
|
const barWidth = getUsageProgressBarWidth(displayMode);
|
|
65019
|
-
const progressBar =
|
|
65075
|
+
const progressBar = makeTimerProgressBar4(previewPercent, barWidth);
|
|
65020
65076
|
return formatRawOrLabeledValue(item, "Weekly Reset ", `[${progressBar}] ${previewPercent.toFixed(1)}%`);
|
|
65021
65077
|
}
|
|
65022
65078
|
if (dateMode) {
|
|
@@ -65036,7 +65092,7 @@ class WeeklyResetTimerWidget {
|
|
|
65036
65092
|
if (isUsageProgressMode(displayMode)) {
|
|
65037
65093
|
const barWidth = getUsageProgressBarWidth(displayMode);
|
|
65038
65094
|
const percent = inverted ? window2.remainingPercent : window2.elapsedPercent;
|
|
65039
|
-
const progressBar =
|
|
65095
|
+
const progressBar = makeTimerProgressBar4(percent, barWidth);
|
|
65040
65096
|
const percentage = percent.toFixed(1);
|
|
65041
65097
|
return formatRawOrLabeledValue(item, "Weekly Reset ", `[${progressBar}] ${percentage}%`);
|
|
65042
65098
|
}
|
|
@@ -70855,7 +70911,7 @@ var PowerlineSeparatorEditor = ({
|
|
|
70855
70911
|
newInvertBgs[selectedIndex] = isLeftFacing;
|
|
70856
70912
|
}
|
|
70857
70913
|
updateSeparators(newSeparators, mode === "separator" ? newInvertBgs : undefined);
|
|
70858
|
-
} else if (
|
|
70914
|
+
} else if (input === "a" || input === "A") {
|
|
70859
70915
|
const newSeparators = [...separators];
|
|
70860
70916
|
const newInvertBgs = mode === "separator" ? [...invertBgs] : [];
|
|
70861
70917
|
const defaultChar = presetSeparators[0]?.char ?? "";
|
|
@@ -70875,7 +70931,7 @@ var PowerlineSeparatorEditor = ({
|
|
|
70875
70931
|
updateSeparators(newSeparators, newInvertBgs);
|
|
70876
70932
|
setSelectedIndex(selectedIndex + 1);
|
|
70877
70933
|
}
|
|
70878
|
-
} else if (
|
|
70934
|
+
} else if (input === "i" || input === "I") {
|
|
70879
70935
|
const newSeparators = [...separators];
|
|
70880
70936
|
const newInvertBgs = mode === "separator" ? [...invertBgs] : [];
|
|
70881
70937
|
const defaultChar = presetSeparators[0]?.char ?? "";
|
|
@@ -70927,7 +70983,6 @@ var PowerlineSeparatorEditor = ({
|
|
|
70927
70983
|
return "Powerline End Cap Configuration";
|
|
70928
70984
|
}
|
|
70929
70985
|
};
|
|
70930
|
-
const canAdd = mode === "separator" || separators.length < 3;
|
|
70931
70986
|
const canDelete = mode !== "separator" || separators.length > 1;
|
|
70932
70987
|
return /* @__PURE__ */ jsx_dev_runtime18.jsxDEV(Box_default, {
|
|
70933
70988
|
flexDirection: "column",
|
|
@@ -70979,7 +71034,7 @@ var PowerlineSeparatorEditor = ({
|
|
|
70979
71034
|
/* @__PURE__ */ jsx_dev_runtime18.jsxDEV(Box_default, {
|
|
70980
71035
|
children: /* @__PURE__ */ jsx_dev_runtime18.jsxDEV(Text, {
|
|
70981
71036
|
dimColor: true,
|
|
70982
|
-
children: `↑↓ select, ← → cycle
|
|
71037
|
+
children: `↑↓ select, ← → cycle, (a)dd, (i)nsert${canDelete ? ", (d)elete" : ""}, (c)lear, (h)ex${mode === "separator" ? ", (t)oggle invert" : ""}, ESC back`
|
|
70983
71038
|
}, undefined, false, undefined, this)
|
|
70984
71039
|
}, undefined, false, undefined, this),
|
|
70985
71040
|
/* @__PURE__ */ jsx_dev_runtime18.jsxDEV(Box_default, {
|