ccstatusline 2.1.5 → 2.1.6
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 -3
- package/dist/ccstatusline.js +527 -346
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
|
|
47
47
|
## 🆕 Recent Updates
|
|
48
48
|
|
|
49
|
-
### v2.1.0 - v2.1.
|
|
49
|
+
### v2.1.0 - v2.1.6 - Usage widgets, links, new git insertions / deletions widgets, and reliability fixes
|
|
50
50
|
|
|
51
51
|
- **🧩 New Usage widgets (v2.1.0)** - Added **Session Usage**, **Weekly Usage**, **Reset Timer**, and **Context Bar** widgets.
|
|
52
52
|
- **📊 More accurate counts (v2.1.0)** - Usage/context widgets now use new statusline JSON metrics when available for more accurate token and context counts.
|
|
@@ -54,6 +54,7 @@
|
|
|
54
54
|
- **🔗 New Link widget (v2.1.3)** - Added a new **Link** widget with clickable OSC8 rendering, preview parity, and raw mode support.
|
|
55
55
|
- **➕ New Git Insertions widget (v2.1.4)** - Added a dedicated Git widget that shows only uncommitted insertions (e.g., `+42`).
|
|
56
56
|
- **➖ New Git Deletions widget (v2.1.4)** - Added a dedicated Git widget that shows only uncommitted deletions (e.g., `-10`).
|
|
57
|
+
- **🧠 Context format fallback fix (v2.1.6)** - When `context_window_size` is missing, context widgets now infer 1M models from long-context labels such as `[1m]` and `1M context` in model identifiers.
|
|
57
58
|
|
|
58
59
|
### v2.0.26 - v2.0.29 - Performance, git internals, and workflow improvements
|
|
59
60
|
|
|
@@ -434,8 +435,8 @@ bun run example
|
|
|
434
435
|
- **Tokens Cached** - Shows cached tokens used
|
|
435
436
|
- **Tokens Total** - Shows total tokens used
|
|
436
437
|
- **Context Length** - Shows current context length in tokens
|
|
437
|
-
- **Context Percentage** - Shows percentage of context limit used (dynamic: 1M for model IDs with `[1m]`
|
|
438
|
-
- **Context Percentage (usable)** - Shows percentage of usable context (dynamic: 800k for model IDs with `[1m]`
|
|
438
|
+
- **Context Percentage** - Shows percentage of context limit used (dynamic: 1M for model IDs with long-context labels like `[1m]` or `1M context`, 200k otherwise)
|
|
439
|
+
- **Context Percentage (usable)** - Shows percentage of usable context (dynamic: 800k for model IDs with long-context labels like `[1m]` or `1M context`, 160k otherwise, accounting for auto-compact at 80%)
|
|
439
440
|
- **Context Bar** - Shows context usage as a progress bar with short/full display modes
|
|
440
441
|
- **Terminal Width** - Shows detected terminal width (for debugging)
|
|
441
442
|
- **Memory Usage** - Shows system memory usage (used/total, e.g., "Mem: 12.4G/16.0G")
|
package/dist/ccstatusline.js
CHANGED
|
@@ -51478,7 +51478,7 @@ import { execSync as execSync3 } from "child_process";
|
|
|
51478
51478
|
import * as fs5 from "fs";
|
|
51479
51479
|
import * as path4 from "path";
|
|
51480
51480
|
var __dirname = "/Users/sirmalloc/Projects/Personal/ccstatusline/src/utils";
|
|
51481
|
-
var PACKAGE_VERSION = "2.1.
|
|
51481
|
+
var PACKAGE_VERSION = "2.1.6";
|
|
51482
51482
|
function getPackageVersion() {
|
|
51483
51483
|
if (/^\d+\.\d+\.\d+/.test(PACKAGE_VERSION)) {
|
|
51484
51484
|
return PACKAGE_VERSION;
|
|
@@ -53032,30 +53032,77 @@ function truncateStyledText(text, maxWidth, options = {}) {
|
|
|
53032
53032
|
}
|
|
53033
53033
|
|
|
53034
53034
|
// src/utils/model-context.ts
|
|
53035
|
+
var DEFAULT_CONTEXT_WINDOW_SIZE = 200000;
|
|
53036
|
+
var USABLE_CONTEXT_RATIO = 0.8;
|
|
53035
53037
|
function toValidWindowSize(value) {
|
|
53036
53038
|
if (typeof value !== "number" || !Number.isFinite(value) || value <= 0) {
|
|
53037
53039
|
return null;
|
|
53038
53040
|
}
|
|
53039
53041
|
return value;
|
|
53040
53042
|
}
|
|
53041
|
-
function
|
|
53043
|
+
function parseContextWindowSize(modelIdentifier) {
|
|
53044
|
+
const delimitedMatch = /(?:\(|\[)\s*(\d+(?:[,_]\d+)*(?:\.\d+)?)\s*([km])\s*(?:\)|\])/i.exec(modelIdentifier);
|
|
53045
|
+
if (delimitedMatch) {
|
|
53046
|
+
const delimitedValue = delimitedMatch[1];
|
|
53047
|
+
const delimitedUnit = delimitedMatch[2];
|
|
53048
|
+
if (!delimitedValue || !delimitedUnit) {
|
|
53049
|
+
return null;
|
|
53050
|
+
}
|
|
53051
|
+
const parsed2 = Number.parseFloat(delimitedValue.replace(/[,_]/g, ""));
|
|
53052
|
+
if (Number.isFinite(parsed2) && parsed2 > 0) {
|
|
53053
|
+
return Math.round(parsed2 * (delimitedUnit.toLowerCase() === "m" ? 1e6 : 1000));
|
|
53054
|
+
}
|
|
53055
|
+
}
|
|
53056
|
+
const contextMatch = /\b(\d+(?:[,_]\d+)*(?:\.\d+)?)\s*([km])(?:\s*(?:token\s*)?context)?\b/i.exec(modelIdentifier);
|
|
53057
|
+
if (!contextMatch) {
|
|
53058
|
+
return null;
|
|
53059
|
+
}
|
|
53060
|
+
const contextValue = contextMatch[1];
|
|
53061
|
+
const contextUnit = contextMatch[2];
|
|
53062
|
+
if (!contextValue || !contextUnit) {
|
|
53063
|
+
return null;
|
|
53064
|
+
}
|
|
53065
|
+
const parsed = Number.parseFloat(contextValue.replace(/[,_]/g, ""));
|
|
53066
|
+
if (!Number.isFinite(parsed) || parsed <= 0) {
|
|
53067
|
+
return null;
|
|
53068
|
+
}
|
|
53069
|
+
return Math.round(parsed * (contextUnit.toLowerCase() === "m" ? 1e6 : 1000));
|
|
53070
|
+
}
|
|
53071
|
+
function getModelContextIdentifier(model) {
|
|
53072
|
+
if (typeof model === "string") {
|
|
53073
|
+
const trimmed = model.trim();
|
|
53074
|
+
return trimmed.length > 0 ? trimmed : undefined;
|
|
53075
|
+
}
|
|
53076
|
+
if (!model) {
|
|
53077
|
+
return;
|
|
53078
|
+
}
|
|
53079
|
+
const id = model.id?.trim();
|
|
53080
|
+
const displayName = model.display_name?.trim();
|
|
53081
|
+
if (id && displayName) {
|
|
53082
|
+
return `${id} ${displayName}`;
|
|
53083
|
+
}
|
|
53084
|
+
return id ?? displayName;
|
|
53085
|
+
}
|
|
53086
|
+
function getContextConfig(modelIdentifier, contextWindowSize) {
|
|
53042
53087
|
const statusWindowSize = toValidWindowSize(contextWindowSize);
|
|
53043
53088
|
if (statusWindowSize !== null) {
|
|
53044
53089
|
return {
|
|
53045
53090
|
maxTokens: statusWindowSize,
|
|
53046
|
-
usableTokens: Math.floor(statusWindowSize *
|
|
53091
|
+
usableTokens: Math.floor(statusWindowSize * USABLE_CONTEXT_RATIO)
|
|
53047
53092
|
};
|
|
53048
53093
|
}
|
|
53049
53094
|
const defaultConfig = {
|
|
53050
|
-
maxTokens:
|
|
53051
|
-
usableTokens:
|
|
53095
|
+
maxTokens: DEFAULT_CONTEXT_WINDOW_SIZE,
|
|
53096
|
+
usableTokens: Math.floor(DEFAULT_CONTEXT_WINDOW_SIZE * USABLE_CONTEXT_RATIO)
|
|
53052
53097
|
};
|
|
53053
|
-
if (!
|
|
53098
|
+
if (!modelIdentifier) {
|
|
53054
53099
|
return defaultConfig;
|
|
53055
|
-
|
|
53100
|
+
}
|
|
53101
|
+
const inferredWindowSize = parseContextWindowSize(modelIdentifier);
|
|
53102
|
+
if (inferredWindowSize !== null) {
|
|
53056
53103
|
return {
|
|
53057
|
-
maxTokens:
|
|
53058
|
-
usableTokens:
|
|
53104
|
+
maxTokens: inferredWindowSize,
|
|
53105
|
+
usableTokens: Math.floor(inferredWindowSize * USABLE_CONTEXT_RATIO)
|
|
53059
53106
|
};
|
|
53060
53107
|
}
|
|
53061
53108
|
return defaultConfig;
|
|
@@ -53070,9 +53117,8 @@ function calculateContextPercentage(context) {
|
|
|
53070
53117
|
if (!context.tokenMetrics) {
|
|
53071
53118
|
return 0;
|
|
53072
53119
|
}
|
|
53073
|
-
const
|
|
53074
|
-
const
|
|
53075
|
-
const contextConfig = getContextConfig(modelId, contextWindowMetrics.windowSize);
|
|
53120
|
+
const modelIdentifier = getModelContextIdentifier(context.data?.model);
|
|
53121
|
+
const contextConfig = getContextConfig(modelIdentifier, contextWindowMetrics.windowSize);
|
|
53076
53122
|
return Math.min(100, context.tokenMetrics.contextLength / contextConfig.maxTokens * 100);
|
|
53077
53123
|
}
|
|
53078
53124
|
|
|
@@ -53880,9 +53926,8 @@ class ContextPercentageWidget {
|
|
|
53880
53926
|
return formatRawOrLabeledValue(item, "Ctx: ", `${displayPercentage.toFixed(1)}%`);
|
|
53881
53927
|
}
|
|
53882
53928
|
if (context.tokenMetrics) {
|
|
53883
|
-
const
|
|
53884
|
-
const
|
|
53885
|
-
const contextConfig = getContextConfig(modelId, contextWindowMetrics.windowSize);
|
|
53929
|
+
const modelIdentifier = getModelContextIdentifier(context.data?.model);
|
|
53930
|
+
const contextConfig = getContextConfig(modelIdentifier, contextWindowMetrics.windowSize);
|
|
53886
53931
|
const usedPercentage = Math.min(100, context.tokenMetrics.contextLength / contextConfig.maxTokens * 100);
|
|
53887
53932
|
const displayPercentage = isInverse ? 100 - usedPercentage : usedPercentage;
|
|
53888
53933
|
return formatRawOrLabeledValue(item, "Ctx: ", `${displayPercentage.toFixed(1)}%`);
|
|
@@ -53926,10 +53971,9 @@ class ContextPercentageUsableWidget {
|
|
|
53926
53971
|
}
|
|
53927
53972
|
render(item, context, settings) {
|
|
53928
53973
|
const isInverse = isContextInverse(item);
|
|
53929
|
-
const
|
|
53930
|
-
const modelId = typeof model === "string" ? model : model?.id;
|
|
53974
|
+
const modelIdentifier = getModelContextIdentifier(context.data?.model);
|
|
53931
53975
|
const contextWindowMetrics = getContextWindowMetrics(context.data);
|
|
53932
|
-
const contextConfig = getContextConfig(
|
|
53976
|
+
const contextConfig = getContextConfig(modelIdentifier, contextWindowMetrics.windowSize);
|
|
53933
53977
|
if (context.isPreview) {
|
|
53934
53978
|
const previewValue = isInverse ? "88.4%" : "11.6%";
|
|
53935
53979
|
return formatRawOrLabeledValue(item, "Ctx(u): ", previewValue);
|
|
@@ -56784,9 +56828,8 @@ class ContextBarWidget {
|
|
|
56784
56828
|
used = context.tokenMetrics.contextLength;
|
|
56785
56829
|
}
|
|
56786
56830
|
if (total === null && context.tokenMetrics) {
|
|
56787
|
-
const
|
|
56788
|
-
|
|
56789
|
-
total = getContextConfig(modelId).maxTokens;
|
|
56831
|
+
const modelIdentifier = getModelContextIdentifier(context.data?.model);
|
|
56832
|
+
total = getContextConfig(modelIdentifier).maxTokens;
|
|
56790
56833
|
}
|
|
56791
56834
|
if (used === null || total === null || total <= 0) {
|
|
56792
56835
|
return null;
|
|
@@ -57204,6 +57247,111 @@ var ConfirmDialog = ({ message, onConfirm, onCancel, inline = false }) => {
|
|
|
57204
57247
|
}, undefined, true, undefined, this);
|
|
57205
57248
|
};
|
|
57206
57249
|
|
|
57250
|
+
// src/tui/components/color-menu/mutations.ts
|
|
57251
|
+
function updateWidgetById(widgets, widgetId, updater) {
|
|
57252
|
+
return widgets.map((widget) => widget.id === widgetId ? updater(widget) : widget);
|
|
57253
|
+
}
|
|
57254
|
+
function setWidgetColor(widgets, widgetId, color, editingBackground) {
|
|
57255
|
+
return updateWidgetById(widgets, widgetId, (widget) => {
|
|
57256
|
+
if (editingBackground) {
|
|
57257
|
+
return {
|
|
57258
|
+
...widget,
|
|
57259
|
+
backgroundColor: color
|
|
57260
|
+
};
|
|
57261
|
+
}
|
|
57262
|
+
return {
|
|
57263
|
+
...widget,
|
|
57264
|
+
color
|
|
57265
|
+
};
|
|
57266
|
+
});
|
|
57267
|
+
}
|
|
57268
|
+
function toggleWidgetBold(widgets, widgetId) {
|
|
57269
|
+
return updateWidgetById(widgets, widgetId, (widget) => ({
|
|
57270
|
+
...widget,
|
|
57271
|
+
bold: !widget.bold
|
|
57272
|
+
}));
|
|
57273
|
+
}
|
|
57274
|
+
function resetWidgetStyling(widgets, widgetId) {
|
|
57275
|
+
return updateWidgetById(widgets, widgetId, (widget) => {
|
|
57276
|
+
const {
|
|
57277
|
+
color,
|
|
57278
|
+
backgroundColor,
|
|
57279
|
+
bold,
|
|
57280
|
+
...restWidget
|
|
57281
|
+
} = widget;
|
|
57282
|
+
return restWidget;
|
|
57283
|
+
});
|
|
57284
|
+
}
|
|
57285
|
+
function clearAllWidgetStyling(widgets) {
|
|
57286
|
+
return widgets.map((widget) => {
|
|
57287
|
+
const {
|
|
57288
|
+
color,
|
|
57289
|
+
backgroundColor,
|
|
57290
|
+
bold,
|
|
57291
|
+
...restWidget
|
|
57292
|
+
} = widget;
|
|
57293
|
+
return restWidget;
|
|
57294
|
+
});
|
|
57295
|
+
}
|
|
57296
|
+
function getDefaultForegroundColor(widget) {
|
|
57297
|
+
if (widget.type === "separator" || widget.type === "flex-separator") {
|
|
57298
|
+
return "white";
|
|
57299
|
+
}
|
|
57300
|
+
const widgetImpl = getWidget(widget.type);
|
|
57301
|
+
return widgetImpl ? widgetImpl.getDefaultColor() : "white";
|
|
57302
|
+
}
|
|
57303
|
+
function getNextIndex(currentIndex, length, direction) {
|
|
57304
|
+
if (direction === "right") {
|
|
57305
|
+
return (currentIndex + 1) % length;
|
|
57306
|
+
}
|
|
57307
|
+
return currentIndex === 0 ? length - 1 : currentIndex - 1;
|
|
57308
|
+
}
|
|
57309
|
+
function cycleWidgetColor({
|
|
57310
|
+
widgets,
|
|
57311
|
+
widgetId,
|
|
57312
|
+
direction,
|
|
57313
|
+
editingBackground,
|
|
57314
|
+
colors,
|
|
57315
|
+
backgroundColors
|
|
57316
|
+
}) {
|
|
57317
|
+
return updateWidgetById(widgets, widgetId, (widget) => {
|
|
57318
|
+
if (editingBackground) {
|
|
57319
|
+
if (backgroundColors.length === 0) {
|
|
57320
|
+
return widget;
|
|
57321
|
+
}
|
|
57322
|
+
const currentBgColor = widget.backgroundColor ?? "";
|
|
57323
|
+
let currentBgColorIndex = backgroundColors.indexOf(currentBgColor);
|
|
57324
|
+
if (currentBgColorIndex === -1) {
|
|
57325
|
+
currentBgColorIndex = 0;
|
|
57326
|
+
}
|
|
57327
|
+
const nextBgColorIndex = getNextIndex(currentBgColorIndex, backgroundColors.length, direction);
|
|
57328
|
+
const nextBgColor = backgroundColors[nextBgColorIndex];
|
|
57329
|
+
return {
|
|
57330
|
+
...widget,
|
|
57331
|
+
backgroundColor: nextBgColor === "" ? undefined : nextBgColor
|
|
57332
|
+
};
|
|
57333
|
+
}
|
|
57334
|
+
if (colors.length === 0) {
|
|
57335
|
+
return widget;
|
|
57336
|
+
}
|
|
57337
|
+
const defaultColor = getDefaultForegroundColor(widget);
|
|
57338
|
+
let currentColor = widget.color ?? defaultColor;
|
|
57339
|
+
if (currentColor === "dim") {
|
|
57340
|
+
currentColor = defaultColor;
|
|
57341
|
+
}
|
|
57342
|
+
let currentColorIndex = colors.indexOf(currentColor);
|
|
57343
|
+
if (currentColorIndex === -1) {
|
|
57344
|
+
currentColorIndex = 0;
|
|
57345
|
+
}
|
|
57346
|
+
const nextColorIndex = getNextIndex(currentColorIndex, colors.length, direction);
|
|
57347
|
+
const nextColor = colors[nextColorIndex];
|
|
57348
|
+
return {
|
|
57349
|
+
...widget,
|
|
57350
|
+
color: nextColor
|
|
57351
|
+
};
|
|
57352
|
+
});
|
|
57353
|
+
}
|
|
57354
|
+
|
|
57207
57355
|
// src/tui/components/ColorMenu.tsx
|
|
57208
57356
|
var jsx_dev_runtime6 = __toESM(require_jsx_dev_runtime(), 1);
|
|
57209
57357
|
var ColorMenu = ({ widgets, lineIndex, settings, onUpdate, onBack }) => {
|
|
@@ -57244,16 +57392,7 @@ var ColorMenu = ({ widgets, lineIndex, settings, onUpdate, onBack }) => {
|
|
|
57244
57392
|
const hexColor = `hex:${hexInput}`;
|
|
57245
57393
|
const selectedWidget2 = colorableWidgets.find((widget) => widget.id === highlightedItemId);
|
|
57246
57394
|
if (selectedWidget2) {
|
|
57247
|
-
const newItems = widgets.
|
|
57248
|
-
if (widget.id === highlightedItemId) {
|
|
57249
|
-
if (editingBackground) {
|
|
57250
|
-
return { ...widget, backgroundColor: hexColor };
|
|
57251
|
-
} else {
|
|
57252
|
-
return { ...widget, color: hexColor };
|
|
57253
|
-
}
|
|
57254
|
-
}
|
|
57255
|
-
return widget;
|
|
57256
|
-
});
|
|
57395
|
+
const newItems = setWidgetColor(widgets, selectedWidget2.id, hexColor, editingBackground);
|
|
57257
57396
|
onUpdate(newItems);
|
|
57258
57397
|
}
|
|
57259
57398
|
setHexInputMode(false);
|
|
@@ -57282,16 +57421,7 @@ var ColorMenu = ({ widgets, lineIndex, settings, onUpdate, onBack }) => {
|
|
|
57282
57421
|
const ansiColor = `ansi256:${code}`;
|
|
57283
57422
|
const selectedWidget2 = colorableWidgets.find((widget) => widget.id === highlightedItemId);
|
|
57284
57423
|
if (selectedWidget2) {
|
|
57285
|
-
const newItems = widgets.
|
|
57286
|
-
if (widget.id === highlightedItemId) {
|
|
57287
|
-
if (editingBackground) {
|
|
57288
|
-
return { ...widget, backgroundColor: ansiColor };
|
|
57289
|
-
} else {
|
|
57290
|
-
return { ...widget, color: ansiColor };
|
|
57291
|
-
}
|
|
57292
|
-
}
|
|
57293
|
-
return widget;
|
|
57294
|
-
});
|
|
57424
|
+
const newItems = setWidgetColor(widgets, selectedWidget2.id, ansiColor, editingBackground);
|
|
57295
57425
|
onUpdate(newItems);
|
|
57296
57426
|
setAnsi256InputMode(false);
|
|
57297
57427
|
setAnsi256Input("");
|
|
@@ -57341,12 +57471,7 @@ var ColorMenu = ({ widgets, lineIndex, settings, onUpdate, onBack }) => {
|
|
|
57341
57471
|
if (highlightedItemId && highlightedItemId !== "back") {
|
|
57342
57472
|
const selectedWidget2 = colorableWidgets.find((widget) => widget.id === highlightedItemId);
|
|
57343
57473
|
if (selectedWidget2) {
|
|
57344
|
-
const newItems = widgets.
|
|
57345
|
-
if (widget.id === selectedWidget2.id) {
|
|
57346
|
-
return { ...widget, bold: !widget.bold };
|
|
57347
|
-
}
|
|
57348
|
-
return widget;
|
|
57349
|
-
});
|
|
57474
|
+
const newItems = toggleWidgetBold(widgets, selectedWidget2.id);
|
|
57350
57475
|
onUpdate(newItems);
|
|
57351
57476
|
}
|
|
57352
57477
|
}
|
|
@@ -57354,13 +57479,7 @@ var ColorMenu = ({ widgets, lineIndex, settings, onUpdate, onBack }) => {
|
|
|
57354
57479
|
if (highlightedItemId && highlightedItemId !== "back") {
|
|
57355
57480
|
const selectedWidget2 = colorableWidgets.find((widget) => widget.id === highlightedItemId);
|
|
57356
57481
|
if (selectedWidget2) {
|
|
57357
|
-
const newItems = widgets.
|
|
57358
|
-
if (widget.id === selectedWidget2.id) {
|
|
57359
|
-
const { color, backgroundColor, bold, ...restWidget } = widget;
|
|
57360
|
-
return restWidget;
|
|
57361
|
-
}
|
|
57362
|
-
return widget;
|
|
57363
|
-
});
|
|
57482
|
+
const newItems = resetWidgetStyling(widgets, selectedWidget2.id);
|
|
57364
57483
|
onUpdate(newItems);
|
|
57365
57484
|
}
|
|
57366
57485
|
}
|
|
@@ -57370,47 +57489,13 @@ var ColorMenu = ({ widgets, lineIndex, settings, onUpdate, onBack }) => {
|
|
|
57370
57489
|
if (highlightedItemId && highlightedItemId !== "back") {
|
|
57371
57490
|
const selectedWidget2 = colorableWidgets.find((widget) => widget.id === highlightedItemId);
|
|
57372
57491
|
if (selectedWidget2) {
|
|
57373
|
-
const newItems =
|
|
57374
|
-
|
|
57375
|
-
|
|
57376
|
-
|
|
57377
|
-
|
|
57378
|
-
|
|
57379
|
-
|
|
57380
|
-
let nextBgColorIndex;
|
|
57381
|
-
if (key.rightArrow) {
|
|
57382
|
-
nextBgColorIndex = (currentBgColorIndex + 1) % bgColors.length;
|
|
57383
|
-
} else {
|
|
57384
|
-
nextBgColorIndex = currentBgColorIndex === 0 ? bgColors.length - 1 : currentBgColorIndex - 1;
|
|
57385
|
-
}
|
|
57386
|
-
const nextBgColor = bgColors[nextBgColorIndex];
|
|
57387
|
-
return { ...widget, backgroundColor: nextBgColor === "" ? undefined : nextBgColor };
|
|
57388
|
-
} else {
|
|
57389
|
-
let defaultColor = "white";
|
|
57390
|
-
if (widget.type !== "separator" && widget.type !== "flex-separator") {
|
|
57391
|
-
const widgetImpl = getWidget(widget.type);
|
|
57392
|
-
if (widgetImpl) {
|
|
57393
|
-
defaultColor = widgetImpl.getDefaultColor();
|
|
57394
|
-
}
|
|
57395
|
-
}
|
|
57396
|
-
let currentColor2 = widget.color ?? defaultColor;
|
|
57397
|
-
if (currentColor2 === "dim") {
|
|
57398
|
-
currentColor2 = defaultColor;
|
|
57399
|
-
}
|
|
57400
|
-
let currentColorIndex = colors.indexOf(currentColor2);
|
|
57401
|
-
if (currentColorIndex === -1)
|
|
57402
|
-
currentColorIndex = 0;
|
|
57403
|
-
let nextColorIndex;
|
|
57404
|
-
if (key.rightArrow) {
|
|
57405
|
-
nextColorIndex = (currentColorIndex + 1) % colors.length;
|
|
57406
|
-
} else {
|
|
57407
|
-
nextColorIndex = currentColorIndex === 0 ? colors.length - 1 : currentColorIndex - 1;
|
|
57408
|
-
}
|
|
57409
|
-
const nextColor = colors[nextColorIndex];
|
|
57410
|
-
return { ...widget, color: nextColor };
|
|
57411
|
-
}
|
|
57412
|
-
}
|
|
57413
|
-
return widget;
|
|
57492
|
+
const newItems = cycleWidgetColor({
|
|
57493
|
+
widgets,
|
|
57494
|
+
widgetId: selectedWidget2.id,
|
|
57495
|
+
direction: key.rightArrow ? "right" : "left",
|
|
57496
|
+
editingBackground,
|
|
57497
|
+
colors,
|
|
57498
|
+
backgroundColors: bgColors
|
|
57414
57499
|
});
|
|
57415
57500
|
onUpdate(newItems);
|
|
57416
57501
|
}
|
|
@@ -57566,10 +57651,7 @@ var ColorMenu = ({ widgets, lineIndex, settings, onUpdate, onBack }) => {
|
|
|
57566
57651
|
children: /* @__PURE__ */ jsx_dev_runtime6.jsxDEV(ConfirmDialog, {
|
|
57567
57652
|
inline: true,
|
|
57568
57653
|
onConfirm: () => {
|
|
57569
|
-
const newItems = widgets
|
|
57570
|
-
const { color, backgroundColor, bold, ...restWidget } = widget;
|
|
57571
|
-
return restWidget;
|
|
57572
|
-
});
|
|
57654
|
+
const newItems = clearAllWidgetStyling(widgets);
|
|
57573
57655
|
onUpdate(newItems);
|
|
57574
57656
|
setShowClearConfirm(false);
|
|
57575
57657
|
},
|
|
@@ -58257,6 +58339,317 @@ var InstallMenu = ({
|
|
|
58257
58339
|
};
|
|
58258
58340
|
// src/tui/components/ItemsEditor.tsx
|
|
58259
58341
|
var import_react37 = __toESM(require_react(), 1);
|
|
58342
|
+
|
|
58343
|
+
// src/tui/components/items-editor/input-handlers.ts
|
|
58344
|
+
function setPickerState(setWidgetPicker, normalizeState, updater) {
|
|
58345
|
+
setWidgetPicker((prev) => {
|
|
58346
|
+
if (!prev) {
|
|
58347
|
+
return prev;
|
|
58348
|
+
}
|
|
58349
|
+
return normalizeState(updater(prev));
|
|
58350
|
+
});
|
|
58351
|
+
}
|
|
58352
|
+
function getPickerCategories(widgetCategories) {
|
|
58353
|
+
return [...widgetCategories];
|
|
58354
|
+
}
|
|
58355
|
+
function normalizePickerState(state, widgetCatalog, widgetCategories) {
|
|
58356
|
+
const filteredCategories = getPickerCategories(widgetCategories);
|
|
58357
|
+
const selectedCategory = state.selectedCategory && filteredCategories.includes(state.selectedCategory) ? state.selectedCategory : filteredCategories[0] ?? null;
|
|
58358
|
+
const hasTopLevelSearch = state.level === "category" && state.categoryQuery.trim().length > 0;
|
|
58359
|
+
const effectiveCategory = hasTopLevelSearch ? "All" : selectedCategory ?? "All";
|
|
58360
|
+
const effectiveQuery = hasTopLevelSearch ? state.categoryQuery : state.widgetQuery;
|
|
58361
|
+
const filteredWidgets = filterWidgetCatalog(widgetCatalog, effectiveCategory, effectiveQuery);
|
|
58362
|
+
const hasSelectedType = state.selectedType ? filteredWidgets.some((entry) => entry.type === state.selectedType) : false;
|
|
58363
|
+
return {
|
|
58364
|
+
...state,
|
|
58365
|
+
selectedCategory,
|
|
58366
|
+
selectedType: hasSelectedType ? state.selectedType : filteredWidgets[0]?.type ?? null
|
|
58367
|
+
};
|
|
58368
|
+
}
|
|
58369
|
+
function getPickerViewState(widgetPicker, widgetCatalog, widgetCategories) {
|
|
58370
|
+
const filteredCategories = getPickerCategories(widgetCategories);
|
|
58371
|
+
const selectedCategory = widgetPicker.selectedCategory && filteredCategories.includes(widgetPicker.selectedCategory) ? widgetPicker.selectedCategory : filteredCategories[0] ?? null;
|
|
58372
|
+
const hasTopLevelSearch = widgetPicker.level === "category" && widgetPicker.categoryQuery.trim().length > 0;
|
|
58373
|
+
const topLevelSearchEntries = hasTopLevelSearch ? filterWidgetCatalog(widgetCatalog, "All", widgetPicker.categoryQuery) : [];
|
|
58374
|
+
const topLevelSelectedEntry = topLevelSearchEntries.find((entry) => entry.type === widgetPicker.selectedType) ?? topLevelSearchEntries[0];
|
|
58375
|
+
const filteredWidgets = filterWidgetCatalog(widgetCatalog, selectedCategory ?? "All", widgetPicker.widgetQuery);
|
|
58376
|
+
const selectedEntry = filteredWidgets.find((entry) => entry.type === widgetPicker.selectedType) ?? filteredWidgets[0];
|
|
58377
|
+
return {
|
|
58378
|
+
filteredCategories,
|
|
58379
|
+
selectedCategory,
|
|
58380
|
+
hasTopLevelSearch,
|
|
58381
|
+
topLevelSearchEntries,
|
|
58382
|
+
topLevelSelectedEntry,
|
|
58383
|
+
filteredWidgets,
|
|
58384
|
+
selectedEntry
|
|
58385
|
+
};
|
|
58386
|
+
}
|
|
58387
|
+
function handlePickerInputMode({
|
|
58388
|
+
input,
|
|
58389
|
+
key,
|
|
58390
|
+
widgetPicker,
|
|
58391
|
+
widgetCatalog,
|
|
58392
|
+
widgetCategories,
|
|
58393
|
+
setWidgetPicker,
|
|
58394
|
+
applyWidgetPickerSelection
|
|
58395
|
+
}) {
|
|
58396
|
+
const normalizeState = (state) => normalizePickerState(state, widgetCatalog, widgetCategories);
|
|
58397
|
+
const {
|
|
58398
|
+
filteredCategories,
|
|
58399
|
+
selectedCategory,
|
|
58400
|
+
hasTopLevelSearch,
|
|
58401
|
+
topLevelSearchEntries,
|
|
58402
|
+
topLevelSelectedEntry,
|
|
58403
|
+
filteredWidgets,
|
|
58404
|
+
selectedEntry
|
|
58405
|
+
} = getPickerViewState(widgetPicker, widgetCatalog, widgetCategories);
|
|
58406
|
+
if (widgetPicker.level === "category") {
|
|
58407
|
+
if (key.escape) {
|
|
58408
|
+
if (widgetPicker.categoryQuery.length > 0) {
|
|
58409
|
+
setPickerState(setWidgetPicker, normalizeState, (prev) => ({
|
|
58410
|
+
...prev,
|
|
58411
|
+
categoryQuery: ""
|
|
58412
|
+
}));
|
|
58413
|
+
} else {
|
|
58414
|
+
setWidgetPicker(null);
|
|
58415
|
+
}
|
|
58416
|
+
} else if (key.return) {
|
|
58417
|
+
if (hasTopLevelSearch) {
|
|
58418
|
+
if (topLevelSelectedEntry) {
|
|
58419
|
+
applyWidgetPickerSelection(topLevelSelectedEntry.type);
|
|
58420
|
+
}
|
|
58421
|
+
} else if (selectedCategory) {
|
|
58422
|
+
setPickerState(setWidgetPicker, normalizeState, (prev) => ({
|
|
58423
|
+
...prev,
|
|
58424
|
+
level: "widget",
|
|
58425
|
+
selectedCategory
|
|
58426
|
+
}));
|
|
58427
|
+
}
|
|
58428
|
+
} else if (key.upArrow || key.downArrow) {
|
|
58429
|
+
if (hasTopLevelSearch) {
|
|
58430
|
+
if (topLevelSearchEntries.length === 0) {
|
|
58431
|
+
return;
|
|
58432
|
+
}
|
|
58433
|
+
let currentIndex = topLevelSearchEntries.findIndex((entry) => entry.type === widgetPicker.selectedType);
|
|
58434
|
+
if (currentIndex === -1) {
|
|
58435
|
+
currentIndex = 0;
|
|
58436
|
+
}
|
|
58437
|
+
const nextIndex = key.downArrow ? Math.min(topLevelSearchEntries.length - 1, currentIndex + 1) : Math.max(0, currentIndex - 1);
|
|
58438
|
+
const nextType = topLevelSearchEntries[nextIndex]?.type ?? null;
|
|
58439
|
+
setPickerState(setWidgetPicker, normalizeState, (prev) => ({
|
|
58440
|
+
...prev,
|
|
58441
|
+
selectedType: nextType
|
|
58442
|
+
}));
|
|
58443
|
+
} else {
|
|
58444
|
+
if (filteredCategories.length === 0) {
|
|
58445
|
+
return;
|
|
58446
|
+
}
|
|
58447
|
+
let currentIndex = filteredCategories.findIndex((category) => category === selectedCategory);
|
|
58448
|
+
if (currentIndex === -1) {
|
|
58449
|
+
currentIndex = 0;
|
|
58450
|
+
}
|
|
58451
|
+
const nextIndex = key.downArrow ? Math.min(filteredCategories.length - 1, currentIndex + 1) : Math.max(0, currentIndex - 1);
|
|
58452
|
+
const nextCategory = filteredCategories[nextIndex] ?? null;
|
|
58453
|
+
setPickerState(setWidgetPicker, normalizeState, (prev) => ({
|
|
58454
|
+
...prev,
|
|
58455
|
+
selectedCategory: nextCategory
|
|
58456
|
+
}));
|
|
58457
|
+
}
|
|
58458
|
+
} else if (key.backspace || key.delete) {
|
|
58459
|
+
setPickerState(setWidgetPicker, normalizeState, (prev) => ({
|
|
58460
|
+
...prev,
|
|
58461
|
+
categoryQuery: prev.categoryQuery.slice(0, -1)
|
|
58462
|
+
}));
|
|
58463
|
+
} else if (input && !key.ctrl && !key.meta && !key.tab) {
|
|
58464
|
+
setPickerState(setWidgetPicker, normalizeState, (prev) => ({
|
|
58465
|
+
...prev,
|
|
58466
|
+
categoryQuery: prev.categoryQuery + input
|
|
58467
|
+
}));
|
|
58468
|
+
}
|
|
58469
|
+
} else {
|
|
58470
|
+
if (key.escape) {
|
|
58471
|
+
if (widgetPicker.widgetQuery.length > 0) {
|
|
58472
|
+
setPickerState(setWidgetPicker, normalizeState, (prev) => ({
|
|
58473
|
+
...prev,
|
|
58474
|
+
widgetQuery: ""
|
|
58475
|
+
}));
|
|
58476
|
+
} else {
|
|
58477
|
+
setPickerState(setWidgetPicker, normalizeState, (prev) => ({
|
|
58478
|
+
...prev,
|
|
58479
|
+
level: "category"
|
|
58480
|
+
}));
|
|
58481
|
+
}
|
|
58482
|
+
} else if (key.return) {
|
|
58483
|
+
if (selectedEntry) {
|
|
58484
|
+
applyWidgetPickerSelection(selectedEntry.type);
|
|
58485
|
+
}
|
|
58486
|
+
} else if (key.upArrow || key.downArrow) {
|
|
58487
|
+
if (filteredWidgets.length === 0) {
|
|
58488
|
+
return;
|
|
58489
|
+
}
|
|
58490
|
+
let currentIndex = filteredWidgets.findIndex((entry) => entry.type === widgetPicker.selectedType);
|
|
58491
|
+
if (currentIndex === -1) {
|
|
58492
|
+
currentIndex = 0;
|
|
58493
|
+
}
|
|
58494
|
+
const nextIndex = key.downArrow ? Math.min(filteredWidgets.length - 1, currentIndex + 1) : Math.max(0, currentIndex - 1);
|
|
58495
|
+
const nextType = filteredWidgets[nextIndex]?.type ?? null;
|
|
58496
|
+
setPickerState(setWidgetPicker, normalizeState, (prev) => ({
|
|
58497
|
+
...prev,
|
|
58498
|
+
selectedType: nextType
|
|
58499
|
+
}));
|
|
58500
|
+
} else if (key.backspace || key.delete) {
|
|
58501
|
+
setPickerState(setWidgetPicker, normalizeState, (prev) => ({
|
|
58502
|
+
...prev,
|
|
58503
|
+
widgetQuery: prev.widgetQuery.slice(0, -1)
|
|
58504
|
+
}));
|
|
58505
|
+
} else if (input && !key.ctrl && !key.meta && !key.tab) {
|
|
58506
|
+
setPickerState(setWidgetPicker, normalizeState, (prev) => ({
|
|
58507
|
+
...prev,
|
|
58508
|
+
widgetQuery: prev.widgetQuery + input
|
|
58509
|
+
}));
|
|
58510
|
+
}
|
|
58511
|
+
}
|
|
58512
|
+
}
|
|
58513
|
+
function handleMoveInputMode({
|
|
58514
|
+
key,
|
|
58515
|
+
widgets,
|
|
58516
|
+
selectedIndex,
|
|
58517
|
+
onUpdate,
|
|
58518
|
+
setSelectedIndex,
|
|
58519
|
+
setMoveMode
|
|
58520
|
+
}) {
|
|
58521
|
+
if (key.upArrow && selectedIndex > 0) {
|
|
58522
|
+
const newWidgets = [...widgets];
|
|
58523
|
+
const temp = newWidgets[selectedIndex];
|
|
58524
|
+
const prev = newWidgets[selectedIndex - 1];
|
|
58525
|
+
if (temp && prev) {
|
|
58526
|
+
[newWidgets[selectedIndex], newWidgets[selectedIndex - 1]] = [prev, temp];
|
|
58527
|
+
}
|
|
58528
|
+
onUpdate(newWidgets);
|
|
58529
|
+
setSelectedIndex(selectedIndex - 1);
|
|
58530
|
+
} else if (key.downArrow && selectedIndex < widgets.length - 1) {
|
|
58531
|
+
const newWidgets = [...widgets];
|
|
58532
|
+
const temp = newWidgets[selectedIndex];
|
|
58533
|
+
const next = newWidgets[selectedIndex + 1];
|
|
58534
|
+
if (temp && next) {
|
|
58535
|
+
[newWidgets[selectedIndex], newWidgets[selectedIndex + 1]] = [next, temp];
|
|
58536
|
+
}
|
|
58537
|
+
onUpdate(newWidgets);
|
|
58538
|
+
setSelectedIndex(selectedIndex + 1);
|
|
58539
|
+
} else if (key.escape || key.return) {
|
|
58540
|
+
setMoveMode(false);
|
|
58541
|
+
}
|
|
58542
|
+
}
|
|
58543
|
+
function handleNormalInputMode({
|
|
58544
|
+
input,
|
|
58545
|
+
key,
|
|
58546
|
+
widgets,
|
|
58547
|
+
selectedIndex,
|
|
58548
|
+
separatorChars,
|
|
58549
|
+
onBack,
|
|
58550
|
+
onUpdate,
|
|
58551
|
+
setSelectedIndex,
|
|
58552
|
+
setMoveMode,
|
|
58553
|
+
setShowClearConfirm,
|
|
58554
|
+
openWidgetPicker,
|
|
58555
|
+
getVisibleCustomKeybinds,
|
|
58556
|
+
setCustomEditorWidget
|
|
58557
|
+
}) {
|
|
58558
|
+
if (key.upArrow && widgets.length > 0) {
|
|
58559
|
+
setSelectedIndex(Math.max(0, selectedIndex - 1));
|
|
58560
|
+
} else if (key.downArrow && widgets.length > 0) {
|
|
58561
|
+
setSelectedIndex(Math.min(widgets.length - 1, selectedIndex + 1));
|
|
58562
|
+
} else if (key.leftArrow && widgets.length > 0) {
|
|
58563
|
+
openWidgetPicker("change");
|
|
58564
|
+
} else if (key.rightArrow && widgets.length > 0) {
|
|
58565
|
+
openWidgetPicker("change");
|
|
58566
|
+
} else if (key.return && widgets.length > 0) {
|
|
58567
|
+
setMoveMode(true);
|
|
58568
|
+
} else if (input === "a") {
|
|
58569
|
+
openWidgetPicker("add");
|
|
58570
|
+
} else if (input === "i") {
|
|
58571
|
+
openWidgetPicker("insert");
|
|
58572
|
+
} else if (input === "d" && widgets.length > 0) {
|
|
58573
|
+
const newWidgets = widgets.filter((_, i) => i !== selectedIndex);
|
|
58574
|
+
onUpdate(newWidgets);
|
|
58575
|
+
if (selectedIndex >= newWidgets.length && selectedIndex > 0) {
|
|
58576
|
+
setSelectedIndex(selectedIndex - 1);
|
|
58577
|
+
}
|
|
58578
|
+
} else if (input === "c") {
|
|
58579
|
+
if (widgets.length > 0) {
|
|
58580
|
+
setShowClearConfirm(true);
|
|
58581
|
+
}
|
|
58582
|
+
} else if (input === " " && widgets.length > 0) {
|
|
58583
|
+
const currentWidget = widgets[selectedIndex];
|
|
58584
|
+
if (currentWidget && currentWidget.type === "separator") {
|
|
58585
|
+
const currentChar = currentWidget.character ?? "|";
|
|
58586
|
+
const currentCharIndex = separatorChars.indexOf(currentChar);
|
|
58587
|
+
const nextChar = separatorChars[(currentCharIndex + 1) % separatorChars.length];
|
|
58588
|
+
const newWidgets = [...widgets];
|
|
58589
|
+
newWidgets[selectedIndex] = { ...currentWidget, character: nextChar };
|
|
58590
|
+
onUpdate(newWidgets);
|
|
58591
|
+
}
|
|
58592
|
+
} else if (input === "r" && widgets.length > 0) {
|
|
58593
|
+
const currentWidget = widgets[selectedIndex];
|
|
58594
|
+
if (currentWidget && currentWidget.type !== "separator" && currentWidget.type !== "flex-separator") {
|
|
58595
|
+
const widgetImpl = getWidget(currentWidget.type);
|
|
58596
|
+
if (!widgetImpl?.supportsRawValue()) {
|
|
58597
|
+
return;
|
|
58598
|
+
}
|
|
58599
|
+
const newWidgets = [...widgets];
|
|
58600
|
+
newWidgets[selectedIndex] = { ...currentWidget, rawValue: !currentWidget.rawValue };
|
|
58601
|
+
onUpdate(newWidgets);
|
|
58602
|
+
}
|
|
58603
|
+
} else if (input === "m" && widgets.length > 0) {
|
|
58604
|
+
const currentWidget = widgets[selectedIndex];
|
|
58605
|
+
if (currentWidget && selectedIndex < widgets.length - 1 && currentWidget.type !== "separator" && currentWidget.type !== "flex-separator") {
|
|
58606
|
+
const newWidgets = [...widgets];
|
|
58607
|
+
let nextMergeState;
|
|
58608
|
+
if (currentWidget.merge === undefined) {
|
|
58609
|
+
nextMergeState = true;
|
|
58610
|
+
} else if (currentWidget.merge === true) {
|
|
58611
|
+
nextMergeState = "no-padding";
|
|
58612
|
+
} else {
|
|
58613
|
+
nextMergeState = undefined;
|
|
58614
|
+
}
|
|
58615
|
+
if (nextMergeState === undefined) {
|
|
58616
|
+
const { merge: merge2, ...rest } = currentWidget;
|
|
58617
|
+
newWidgets[selectedIndex] = rest;
|
|
58618
|
+
} else {
|
|
58619
|
+
newWidgets[selectedIndex] = { ...currentWidget, merge: nextMergeState };
|
|
58620
|
+
}
|
|
58621
|
+
onUpdate(newWidgets);
|
|
58622
|
+
}
|
|
58623
|
+
} else if (key.escape) {
|
|
58624
|
+
onBack();
|
|
58625
|
+
} else if (widgets.length > 0) {
|
|
58626
|
+
const currentWidget = widgets[selectedIndex];
|
|
58627
|
+
if (currentWidget && currentWidget.type !== "separator" && currentWidget.type !== "flex-separator") {
|
|
58628
|
+
const widgetImpl = getWidget(currentWidget.type);
|
|
58629
|
+
if (!widgetImpl?.getCustomKeybinds) {
|
|
58630
|
+
return;
|
|
58631
|
+
}
|
|
58632
|
+
const customKeybinds = getVisibleCustomKeybinds(widgetImpl, currentWidget);
|
|
58633
|
+
const matchedKeybind = customKeybinds.find((kb) => kb.key === input);
|
|
58634
|
+
if (matchedKeybind && !key.ctrl) {
|
|
58635
|
+
if (widgetImpl.handleEditorAction) {
|
|
58636
|
+
const updatedWidget = widgetImpl.handleEditorAction(matchedKeybind.action, currentWidget);
|
|
58637
|
+
if (updatedWidget) {
|
|
58638
|
+
const newWidgets = [...widgets];
|
|
58639
|
+
newWidgets[selectedIndex] = updatedWidget;
|
|
58640
|
+
onUpdate(newWidgets);
|
|
58641
|
+
} else if (widgetImpl.renderEditor) {
|
|
58642
|
+
setCustomEditorWidget({ widget: currentWidget, impl: widgetImpl, action: matchedKeybind.action });
|
|
58643
|
+
}
|
|
58644
|
+
} else if (widgetImpl.renderEditor) {
|
|
58645
|
+
setCustomEditorWidget({ widget: currentWidget, impl: widgetImpl, action: matchedKeybind.action });
|
|
58646
|
+
}
|
|
58647
|
+
}
|
|
58648
|
+
}
|
|
58649
|
+
}
|
|
58650
|
+
}
|
|
58651
|
+
|
|
58652
|
+
// src/tui/components/ItemsEditor.tsx
|
|
58260
58653
|
var jsx_dev_runtime9 = __toESM(require_jsx_dev_runtime(), 1);
|
|
58261
58654
|
var ItemsEditor = ({ widgets, onUpdate, onBack, lineNumber, settings }) => {
|
|
58262
58655
|
const [selectedIndex, setSelectedIndex] = import_react37.useState(0);
|
|
@@ -58292,23 +58685,6 @@ var ItemsEditor = ({ widgets, onUpdate, onBack, lineNumber, settings }) => {
|
|
|
58292
58685
|
const handleEditorCancel = () => {
|
|
58293
58686
|
setCustomEditorWidget(null);
|
|
58294
58687
|
};
|
|
58295
|
-
const getFilteredCategories = (query) => {
|
|
58296
|
-
return [...widgetCategories];
|
|
58297
|
-
};
|
|
58298
|
-
const normalizePickerState = (state) => {
|
|
58299
|
-
const filteredCategories = getFilteredCategories(state.categoryQuery);
|
|
58300
|
-
const selectedCategory = state.selectedCategory && filteredCategories.includes(state.selectedCategory) ? state.selectedCategory : filteredCategories[0] ?? null;
|
|
58301
|
-
const hasTopLevelSearch = state.level === "category" && state.categoryQuery.trim().length > 0;
|
|
58302
|
-
const effectiveCategory = hasTopLevelSearch ? "All" : selectedCategory ?? "All";
|
|
58303
|
-
const effectiveQuery = hasTopLevelSearch ? state.categoryQuery : state.widgetQuery;
|
|
58304
|
-
const filteredWidgets = filterWidgetCatalog(widgetCatalog, effectiveCategory, effectiveQuery);
|
|
58305
|
-
const hasSelectedType = state.selectedType ? filteredWidgets.some((entry) => entry.type === state.selectedType) : false;
|
|
58306
|
-
return {
|
|
58307
|
-
...state,
|
|
58308
|
-
selectedCategory,
|
|
58309
|
-
selectedType: hasSelectedType ? state.selectedType : filteredWidgets[0]?.type ?? null
|
|
58310
|
-
};
|
|
58311
|
-
};
|
|
58312
58688
|
const shouldShowCustomKeybind = (widget, keybind) => {
|
|
58313
58689
|
if (keybind.action !== "toggle-invert") {
|
|
58314
58690
|
return true;
|
|
@@ -58335,7 +58711,7 @@ var ItemsEditor = ({ widgets, onUpdate, onBack, lineNumber, settings }) => {
|
|
|
58335
58711
|
categoryQuery: "",
|
|
58336
58712
|
widgetQuery: "",
|
|
58337
58713
|
selectedType
|
|
58338
|
-
}));
|
|
58714
|
+
}, widgetCatalog, widgetCategories));
|
|
58339
58715
|
};
|
|
58340
58716
|
const applyWidgetPickerSelection = (selectedType) => {
|
|
58341
58717
|
if (!widgetPicker) {
|
|
@@ -58371,238 +58747,43 @@ var ItemsEditor = ({ widgets, onUpdate, onBack, lineNumber, settings }) => {
|
|
|
58371
58747
|
return;
|
|
58372
58748
|
}
|
|
58373
58749
|
if (widgetPicker) {
|
|
58374
|
-
|
|
58375
|
-
|
|
58376
|
-
|
|
58377
|
-
|
|
58378
|
-
|
|
58379
|
-
|
|
58380
|
-
|
|
58381
|
-
|
|
58382
|
-
|
|
58383
|
-
if (widgetPicker.categoryQuery.length > 0) {
|
|
58384
|
-
setWidgetPicker((prev) => prev ? normalizePickerState({
|
|
58385
|
-
...prev,
|
|
58386
|
-
categoryQuery: ""
|
|
58387
|
-
}) : prev);
|
|
58388
|
-
} else {
|
|
58389
|
-
setWidgetPicker(null);
|
|
58390
|
-
}
|
|
58391
|
-
} else if (key.return) {
|
|
58392
|
-
if (hasTopLevelSearch) {
|
|
58393
|
-
if (topLevelSelectedEntry) {
|
|
58394
|
-
applyWidgetPickerSelection(topLevelSelectedEntry.type);
|
|
58395
|
-
}
|
|
58396
|
-
} else if (selectedCategory) {
|
|
58397
|
-
setWidgetPicker((prev) => prev ? normalizePickerState({
|
|
58398
|
-
...prev,
|
|
58399
|
-
level: "widget",
|
|
58400
|
-
selectedCategory
|
|
58401
|
-
}) : prev);
|
|
58402
|
-
}
|
|
58403
|
-
} else if (key.upArrow || key.downArrow) {
|
|
58404
|
-
if (hasTopLevelSearch) {
|
|
58405
|
-
if (topLevelSearchEntries2.length === 0) {
|
|
58406
|
-
return;
|
|
58407
|
-
}
|
|
58408
|
-
let currentIndex = topLevelSearchEntries2.findIndex((entry) => entry.type === widgetPicker.selectedType);
|
|
58409
|
-
if (currentIndex === -1) {
|
|
58410
|
-
currentIndex = 0;
|
|
58411
|
-
}
|
|
58412
|
-
const nextIndex = key.downArrow ? Math.min(topLevelSearchEntries2.length - 1, currentIndex + 1) : Math.max(0, currentIndex - 1);
|
|
58413
|
-
const nextType = topLevelSearchEntries2[nextIndex]?.type ?? null;
|
|
58414
|
-
setWidgetPicker((prev) => prev ? normalizePickerState({
|
|
58415
|
-
...prev,
|
|
58416
|
-
selectedType: nextType
|
|
58417
|
-
}) : prev);
|
|
58418
|
-
} else {
|
|
58419
|
-
if (filteredCategories.length === 0) {
|
|
58420
|
-
return;
|
|
58421
|
-
}
|
|
58422
|
-
let currentIndex = filteredCategories.findIndex((category) => category === selectedCategory);
|
|
58423
|
-
if (currentIndex === -1) {
|
|
58424
|
-
currentIndex = 0;
|
|
58425
|
-
}
|
|
58426
|
-
const nextIndex = key.downArrow ? Math.min(filteredCategories.length - 1, currentIndex + 1) : Math.max(0, currentIndex - 1);
|
|
58427
|
-
const nextCategory = filteredCategories[nextIndex] ?? null;
|
|
58428
|
-
setWidgetPicker((prev) => prev ? normalizePickerState({
|
|
58429
|
-
...prev,
|
|
58430
|
-
selectedCategory: nextCategory
|
|
58431
|
-
}) : prev);
|
|
58432
|
-
}
|
|
58433
|
-
} else if (key.backspace || key.delete) {
|
|
58434
|
-
setWidgetPicker((prev) => prev ? normalizePickerState({
|
|
58435
|
-
...prev,
|
|
58436
|
-
categoryQuery: prev.categoryQuery.slice(0, -1)
|
|
58437
|
-
}) : prev);
|
|
58438
|
-
} else if (input && !key.ctrl && !key.meta && !key.tab) {
|
|
58439
|
-
setWidgetPicker((prev) => prev ? normalizePickerState({
|
|
58440
|
-
...prev,
|
|
58441
|
-
categoryQuery: prev.categoryQuery + input
|
|
58442
|
-
}) : prev);
|
|
58443
|
-
}
|
|
58444
|
-
} else {
|
|
58445
|
-
if (key.escape) {
|
|
58446
|
-
if (widgetPicker.widgetQuery.length > 0) {
|
|
58447
|
-
setWidgetPicker((prev) => prev ? normalizePickerState({
|
|
58448
|
-
...prev,
|
|
58449
|
-
widgetQuery: ""
|
|
58450
|
-
}) : prev);
|
|
58451
|
-
} else {
|
|
58452
|
-
setWidgetPicker((prev) => prev ? normalizePickerState({
|
|
58453
|
-
...prev,
|
|
58454
|
-
level: "category"
|
|
58455
|
-
}) : prev);
|
|
58456
|
-
}
|
|
58457
|
-
} else if (key.return) {
|
|
58458
|
-
if (selectedEntry) {
|
|
58459
|
-
applyWidgetPickerSelection(selectedEntry.type);
|
|
58460
|
-
}
|
|
58461
|
-
} else if (key.upArrow || key.downArrow) {
|
|
58462
|
-
if (filteredWidgets.length === 0) {
|
|
58463
|
-
return;
|
|
58464
|
-
}
|
|
58465
|
-
let currentIndex = filteredWidgets.findIndex((entry) => entry.type === widgetPicker.selectedType);
|
|
58466
|
-
if (currentIndex === -1) {
|
|
58467
|
-
currentIndex = 0;
|
|
58468
|
-
}
|
|
58469
|
-
const nextIndex = key.downArrow ? Math.min(filteredWidgets.length - 1, currentIndex + 1) : Math.max(0, currentIndex - 1);
|
|
58470
|
-
const nextType = filteredWidgets[nextIndex]?.type ?? null;
|
|
58471
|
-
setWidgetPicker((prev) => prev ? normalizePickerState({
|
|
58472
|
-
...prev,
|
|
58473
|
-
selectedType: nextType
|
|
58474
|
-
}) : prev);
|
|
58475
|
-
} else if (key.backspace || key.delete) {
|
|
58476
|
-
setWidgetPicker((prev) => prev ? normalizePickerState({
|
|
58477
|
-
...prev,
|
|
58478
|
-
widgetQuery: prev.widgetQuery.slice(0, -1)
|
|
58479
|
-
}) : prev);
|
|
58480
|
-
} else if (input && !key.ctrl && !key.meta && !key.tab) {
|
|
58481
|
-
setWidgetPicker((prev) => prev ? normalizePickerState({
|
|
58482
|
-
...prev,
|
|
58483
|
-
widgetQuery: prev.widgetQuery + input
|
|
58484
|
-
}) : prev);
|
|
58485
|
-
}
|
|
58486
|
-
}
|
|
58750
|
+
handlePickerInputMode({
|
|
58751
|
+
input,
|
|
58752
|
+
key,
|
|
58753
|
+
widgetPicker,
|
|
58754
|
+
widgetCatalog,
|
|
58755
|
+
widgetCategories,
|
|
58756
|
+
setWidgetPicker,
|
|
58757
|
+
applyWidgetPickerSelection
|
|
58758
|
+
});
|
|
58487
58759
|
return;
|
|
58488
58760
|
}
|
|
58489
58761
|
if (moveMode) {
|
|
58490
|
-
|
|
58491
|
-
|
|
58492
|
-
|
|
58493
|
-
|
|
58494
|
-
|
|
58495
|
-
|
|
58496
|
-
|
|
58497
|
-
|
|
58498
|
-
|
|
58499
|
-
} else if (key.downArrow && selectedIndex < widgets.length - 1) {
|
|
58500
|
-
const newWidgets = [...widgets];
|
|
58501
|
-
const temp = newWidgets[selectedIndex];
|
|
58502
|
-
const next = newWidgets[selectedIndex + 1];
|
|
58503
|
-
if (temp && next) {
|
|
58504
|
-
[newWidgets[selectedIndex], newWidgets[selectedIndex + 1]] = [next, temp];
|
|
58505
|
-
}
|
|
58506
|
-
onUpdate(newWidgets);
|
|
58507
|
-
setSelectedIndex(selectedIndex + 1);
|
|
58508
|
-
} else if (key.escape || key.return) {
|
|
58509
|
-
setMoveMode(false);
|
|
58510
|
-
}
|
|
58511
|
-
} else {
|
|
58512
|
-
if (key.upArrow && widgets.length > 0) {
|
|
58513
|
-
setSelectedIndex(Math.max(0, selectedIndex - 1));
|
|
58514
|
-
} else if (key.downArrow && widgets.length > 0) {
|
|
58515
|
-
setSelectedIndex(Math.min(widgets.length - 1, selectedIndex + 1));
|
|
58516
|
-
} else if (key.leftArrow && widgets.length > 0) {
|
|
58517
|
-
openWidgetPicker("change");
|
|
58518
|
-
} else if (key.rightArrow && widgets.length > 0) {
|
|
58519
|
-
openWidgetPicker("change");
|
|
58520
|
-
} else if (key.return && widgets.length > 0) {
|
|
58521
|
-
setMoveMode(true);
|
|
58522
|
-
} else if (input === "a") {
|
|
58523
|
-
openWidgetPicker("add");
|
|
58524
|
-
} else if (input === "i") {
|
|
58525
|
-
openWidgetPicker("insert");
|
|
58526
|
-
} else if (input === "d" && widgets.length > 0) {
|
|
58527
|
-
const newWidgets = widgets.filter((_, i) => i !== selectedIndex);
|
|
58528
|
-
onUpdate(newWidgets);
|
|
58529
|
-
if (selectedIndex >= newWidgets.length && selectedIndex > 0) {
|
|
58530
|
-
setSelectedIndex(selectedIndex - 1);
|
|
58531
|
-
}
|
|
58532
|
-
} else if (input === "c") {
|
|
58533
|
-
if (widgets.length > 0) {
|
|
58534
|
-
setShowClearConfirm(true);
|
|
58535
|
-
}
|
|
58536
|
-
} else if (input === " " && widgets.length > 0) {
|
|
58537
|
-
const currentWidget2 = widgets[selectedIndex];
|
|
58538
|
-
if (currentWidget2 && currentWidget2.type === "separator") {
|
|
58539
|
-
const currentChar = currentWidget2.character ?? "|";
|
|
58540
|
-
const currentCharIndex = separatorChars.indexOf(currentChar);
|
|
58541
|
-
const nextChar = separatorChars[(currentCharIndex + 1) % separatorChars.length];
|
|
58542
|
-
const newWidgets = [...widgets];
|
|
58543
|
-
newWidgets[selectedIndex] = { ...currentWidget2, character: nextChar };
|
|
58544
|
-
onUpdate(newWidgets);
|
|
58545
|
-
}
|
|
58546
|
-
} else if (input === "r" && widgets.length > 0) {
|
|
58547
|
-
const currentWidget2 = widgets[selectedIndex];
|
|
58548
|
-
if (currentWidget2 && currentWidget2.type !== "separator" && currentWidget2.type !== "flex-separator") {
|
|
58549
|
-
const widgetImpl = getWidget(currentWidget2.type);
|
|
58550
|
-
if (!widgetImpl?.supportsRawValue()) {
|
|
58551
|
-
return;
|
|
58552
|
-
}
|
|
58553
|
-
const newWidgets = [...widgets];
|
|
58554
|
-
newWidgets[selectedIndex] = { ...currentWidget2, rawValue: !currentWidget2.rawValue };
|
|
58555
|
-
onUpdate(newWidgets);
|
|
58556
|
-
}
|
|
58557
|
-
} else if (input === "m" && widgets.length > 0) {
|
|
58558
|
-
const currentWidget2 = widgets[selectedIndex];
|
|
58559
|
-
if (currentWidget2 && selectedIndex < widgets.length - 1 && currentWidget2.type !== "separator" && currentWidget2.type !== "flex-separator") {
|
|
58560
|
-
const newWidgets = [...widgets];
|
|
58561
|
-
let nextMergeState;
|
|
58562
|
-
if (currentWidget2.merge === undefined) {
|
|
58563
|
-
nextMergeState = true;
|
|
58564
|
-
} else if (currentWidget2.merge === true) {
|
|
58565
|
-
nextMergeState = "no-padding";
|
|
58566
|
-
} else {
|
|
58567
|
-
nextMergeState = undefined;
|
|
58568
|
-
}
|
|
58569
|
-
if (nextMergeState === undefined) {
|
|
58570
|
-
const { merge: merge2, ...rest } = currentWidget2;
|
|
58571
|
-
newWidgets[selectedIndex] = rest;
|
|
58572
|
-
} else {
|
|
58573
|
-
newWidgets[selectedIndex] = { ...currentWidget2, merge: nextMergeState };
|
|
58574
|
-
}
|
|
58575
|
-
onUpdate(newWidgets);
|
|
58576
|
-
}
|
|
58577
|
-
} else if (key.escape) {
|
|
58578
|
-
onBack();
|
|
58579
|
-
} else if (widgets.length > 0) {
|
|
58580
|
-
const currentWidget2 = widgets[selectedIndex];
|
|
58581
|
-
if (currentWidget2 && currentWidget2.type !== "separator" && currentWidget2.type !== "flex-separator") {
|
|
58582
|
-
const widgetImpl = getWidget(currentWidget2.type);
|
|
58583
|
-
if (widgetImpl) {
|
|
58584
|
-
if (widgetImpl.getCustomKeybinds) {
|
|
58585
|
-
const customKeybinds2 = getVisibleCustomKeybinds(widgetImpl, currentWidget2);
|
|
58586
|
-
const matchedKeybind = customKeybinds2.find((kb) => kb.key === input);
|
|
58587
|
-
if (matchedKeybind && !key.ctrl) {
|
|
58588
|
-
if (widgetImpl.handleEditorAction) {
|
|
58589
|
-
const updatedWidget = widgetImpl.handleEditorAction(matchedKeybind.action, currentWidget2);
|
|
58590
|
-
if (updatedWidget) {
|
|
58591
|
-
const newWidgets = [...widgets];
|
|
58592
|
-
newWidgets[selectedIndex] = updatedWidget;
|
|
58593
|
-
onUpdate(newWidgets);
|
|
58594
|
-
} else if (widgetImpl.renderEditor) {
|
|
58595
|
-
setCustomEditorWidget({ widget: currentWidget2, impl: widgetImpl, action: matchedKeybind.action });
|
|
58596
|
-
}
|
|
58597
|
-
} else if (widgetImpl.renderEditor) {
|
|
58598
|
-
setCustomEditorWidget({ widget: currentWidget2, impl: widgetImpl, action: matchedKeybind.action });
|
|
58599
|
-
}
|
|
58600
|
-
}
|
|
58601
|
-
}
|
|
58602
|
-
}
|
|
58603
|
-
}
|
|
58604
|
-
}
|
|
58762
|
+
handleMoveInputMode({
|
|
58763
|
+
key,
|
|
58764
|
+
widgets,
|
|
58765
|
+
selectedIndex,
|
|
58766
|
+
onUpdate,
|
|
58767
|
+
setSelectedIndex,
|
|
58768
|
+
setMoveMode
|
|
58769
|
+
});
|
|
58770
|
+
return;
|
|
58605
58771
|
}
|
|
58772
|
+
handleNormalInputMode({
|
|
58773
|
+
input,
|
|
58774
|
+
key,
|
|
58775
|
+
widgets,
|
|
58776
|
+
selectedIndex,
|
|
58777
|
+
separatorChars,
|
|
58778
|
+
onBack,
|
|
58779
|
+
onUpdate,
|
|
58780
|
+
setSelectedIndex,
|
|
58781
|
+
setMoveMode,
|
|
58782
|
+
setShowClearConfirm,
|
|
58783
|
+
openWidgetPicker,
|
|
58784
|
+
getVisibleCustomKeybinds,
|
|
58785
|
+
setCustomEditorWidget
|
|
58786
|
+
});
|
|
58606
58787
|
});
|
|
58607
58788
|
const getWidgetDisplay = (widget) => {
|
|
58608
58789
|
if (widget.type === "separator") {
|
|
@@ -58622,7 +58803,7 @@ var ItemsEditor = ({ widgets, onUpdate, onBack, lineNumber, settings }) => {
|
|
|
58622
58803
|
};
|
|
58623
58804
|
const hasFlexSeparator = widgets.some((widget) => widget.type === "flex-separator");
|
|
58624
58805
|
const widthDetectionAvailable = canDetectTerminalWidth();
|
|
58625
|
-
const pickerCategories = widgetPicker ?
|
|
58806
|
+
const pickerCategories = widgetPicker ? [...widgetCategories] : [];
|
|
58626
58807
|
const selectedPickerCategory = widgetPicker ? widgetPicker.selectedCategory && pickerCategories.includes(widgetPicker.selectedCategory) ? widgetPicker.selectedCategory : pickerCategories[0] ?? null : null;
|
|
58627
58808
|
const topLevelSearchEntries = widgetPicker && widgetPicker.level === "category" && widgetPicker.categoryQuery.trim().length > 0 ? filterWidgetCatalog(widgetCatalog, "All", widgetPicker.categoryQuery) : [];
|
|
58628
58809
|
const selectedTopLevelSearchEntry = widgetPicker ? topLevelSearchEntries.find((entry) => entry.type === widgetPicker.selectedType) ?? topLevelSearchEntries[0] : null;
|