@flyingrobots/bijou 4.0.0 → 4.1.0
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 +8 -8
- package/dist/adapters/test/io.d.ts +3 -1
- package/dist/adapters/test/io.d.ts.map +1 -1
- package/dist/adapters/test/io.js +27 -0
- package/dist/adapters/test/io.js.map +1 -1
- package/dist/core/bg-fill.d.ts.map +1 -1
- package/dist/core/bg-fill.js +24 -1
- package/dist/core/bg-fill.js.map +1 -1
- package/dist/core/components/explainability.d.ts +51 -0
- package/dist/core/components/explainability.d.ts.map +1 -0
- package/dist/core/components/explainability.js +134 -0
- package/dist/core/components/explainability.js.map +1 -0
- package/dist/core/components/index.d.ts +6 -0
- package/dist/core/components/index.d.ts.map +1 -1
- package/dist/core/components/index.js +3 -0
- package/dist/core/components/index.js.map +1 -1
- package/dist/core/components/inspector.d.ts +49 -0
- package/dist/core/components/inspector.d.ts.map +1 -0
- package/dist/core/components/inspector.js +107 -0
- package/dist/core/components/inspector.js.map +1 -0
- package/dist/core/components/preference-list.d.ts +61 -0
- package/dist/core/components/preference-list.d.ts.map +1 -0
- package/dist/core/components/preference-list.js +215 -0
- package/dist/core/components/preference-list.js.map +1 -0
- package/dist/core/components/progress.d.ts +9 -1
- package/dist/core/components/progress.d.ts.map +1 -1
- package/dist/core/components/progress.js +20 -6
- package/dist/core/components/progress.js.map +1 -1
- package/dist/core/forms/filter-interactive.d.ts.map +1 -1
- package/dist/core/forms/filter-interactive.js +16 -16
- package/dist/core/forms/filter-interactive.js.map +1 -1
- package/dist/core/forms/form-utils.d.ts +33 -2
- package/dist/core/forms/form-utils.d.ts.map +1 -1
- package/dist/core/forms/form-utils.js +53 -3
- package/dist/core/forms/form-utils.js.map +1 -1
- package/dist/core/forms/multiselect.d.ts.map +1 -1
- package/dist/core/forms/multiselect.js +5 -5
- package/dist/core/forms/multiselect.js.map +1 -1
- package/dist/core/forms/select.d.ts.map +1 -1
- package/dist/core/forms/select.js +4 -4
- package/dist/core/forms/select.js.map +1 -1
- package/dist/core/forms/textarea-editor.d.ts.map +1 -1
- package/dist/core/forms/textarea-editor.js +12 -12
- package/dist/core/forms/textarea-editor.js.map +1 -1
- package/dist/core/key-input.d.ts +17 -0
- package/dist/core/key-input.d.ts.map +1 -0
- package/dist/core/key-input.js +92 -0
- package/dist/core/key-input.js.map +1 -0
- package/dist/core/render/differ.d.ts.map +1 -1
- package/dist/core/render/differ.js +89 -39
- package/dist/core/render/differ.js.map +1 -1
- package/dist/core/text/grapheme.d.ts +7 -0
- package/dist/core/text/grapheme.d.ts.map +1 -1
- package/dist/core/text/grapheme.js +11 -1
- package/dist/core/text/grapheme.js.map +1 -1
- package/dist/core/text/index.d.ts +3 -2
- package/dist/core/text/index.d.ts.map +1 -1
- package/dist/core/text/index.js +2 -2
- package/dist/core/text/index.js.map +1 -1
- package/dist/core/text/wrap.d.ts +18 -0
- package/dist/core/text/wrap.d.ts.map +1 -1
- package/dist/core/text/wrap.js +92 -23
- package/dist/core/text/wrap.js.map +1 -1
- package/dist/index.d.ts +7 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/ports/index.d.ts +1 -1
- package/dist/ports/index.d.ts.map +1 -1
- package/dist/ports/io.d.ts +30 -0
- package/dist/ports/io.d.ts.map +1 -1
- package/dist/ports/surface.d.ts.map +1 -1
- package/dist/ports/surface.js +40 -18
- package/dist/ports/surface.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { type Surface } from '../../ports/surface.js';
|
|
2
|
+
import type { TokenValue } from '../theme/tokens.js';
|
|
3
|
+
import { type PreparedWrappedText } from '../text/wrap.js';
|
|
4
|
+
import type { BijouNodeOptions } from './types.js';
|
|
5
|
+
export type PreferenceRowKind = 'toggle' | 'choice' | 'info' | 'action';
|
|
6
|
+
export interface PreferenceRow {
|
|
7
|
+
readonly id: string;
|
|
8
|
+
readonly label: string;
|
|
9
|
+
readonly description?: string;
|
|
10
|
+
readonly valueLabel?: string;
|
|
11
|
+
readonly kind?: PreferenceRowKind;
|
|
12
|
+
readonly checked?: boolean;
|
|
13
|
+
readonly enabled?: boolean;
|
|
14
|
+
}
|
|
15
|
+
export interface PreferenceSection {
|
|
16
|
+
readonly id: string;
|
|
17
|
+
readonly title: string;
|
|
18
|
+
readonly rows: readonly PreferenceRow[];
|
|
19
|
+
}
|
|
20
|
+
export interface PreferenceRowLayout {
|
|
21
|
+
readonly valueLabel: string;
|
|
22
|
+
readonly stackValue: boolean;
|
|
23
|
+
readonly descriptionLines: readonly string[];
|
|
24
|
+
readonly height: number;
|
|
25
|
+
}
|
|
26
|
+
export interface PreparedPreferenceRow {
|
|
27
|
+
readonly row: PreferenceRow;
|
|
28
|
+
readonly valueLabel: string;
|
|
29
|
+
readonly baseLeftText: string;
|
|
30
|
+
readonly preparedDescription?: PreparedWrappedText;
|
|
31
|
+
}
|
|
32
|
+
export interface PreparedPreferenceSection {
|
|
33
|
+
readonly id: string;
|
|
34
|
+
readonly title: string;
|
|
35
|
+
readonly rows: readonly PreparedPreferenceRow[];
|
|
36
|
+
}
|
|
37
|
+
export interface PreferenceListTheme {
|
|
38
|
+
readonly sectionTitleToken?: TokenValue;
|
|
39
|
+
readonly selectedRowBgToken?: TokenValue;
|
|
40
|
+
readonly toggleOnToken?: TokenValue;
|
|
41
|
+
readonly toggleOffToken?: TokenValue;
|
|
42
|
+
readonly choiceToken?: TokenValue;
|
|
43
|
+
readonly infoToken?: TokenValue;
|
|
44
|
+
readonly descriptionToken?: TokenValue;
|
|
45
|
+
}
|
|
46
|
+
export interface PreferenceRowSurfaceOptions extends BijouNodeOptions {
|
|
47
|
+
readonly width: number;
|
|
48
|
+
readonly selected?: boolean;
|
|
49
|
+
readonly theme?: PreferenceListTheme;
|
|
50
|
+
}
|
|
51
|
+
export interface PreferenceListSurfaceOptions extends BijouNodeOptions {
|
|
52
|
+
readonly width: number;
|
|
53
|
+
readonly selectedRowId?: string;
|
|
54
|
+
readonly theme?: PreferenceListTheme;
|
|
55
|
+
}
|
|
56
|
+
export declare function preparePreferenceRow(row: PreferenceRow): PreparedPreferenceRow;
|
|
57
|
+
export declare function preparePreferenceSections(sections: readonly PreferenceSection[]): readonly PreparedPreferenceSection[];
|
|
58
|
+
export declare function preferenceRowSurface(row: PreferenceRow | PreparedPreferenceRow, options: PreferenceRowSurfaceOptions): Surface;
|
|
59
|
+
export declare function preferenceListSurface(sections: readonly PreferenceSection[] | readonly PreparedPreferenceSection[], options: PreferenceListSurfaceOptions): Surface;
|
|
60
|
+
export declare function resolvePreferenceRowLayout(row: PreferenceRow | PreparedPreferenceRow, width: number): PreferenceRowLayout;
|
|
61
|
+
//# sourceMappingURL=preference-list.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preference-list.d.ts","sourceRoot":"","sources":["../../../src/core/components/preference-list.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
import { createSurface } from '../../ports/surface.js';
|
|
2
|
+
import { resolveSafeCtx as resolveCtx } from '../resolve-ctx.js';
|
|
3
|
+
import { graphemeWidth } from '../text/grapheme.js';
|
|
4
|
+
import { prepareWrappedText, wrapPreparedTextToWidth, } from '../text/wrap.js';
|
|
5
|
+
function isPreparedPreferenceRow(row) {
|
|
6
|
+
return 'row' in row && 'baseLeftText' in row;
|
|
7
|
+
}
|
|
8
|
+
function isPreparedPreferenceSection(section) {
|
|
9
|
+
return section.rows.length === 0 || isPreparedPreferenceRow(section.rows[0]);
|
|
10
|
+
}
|
|
11
|
+
export function preparePreferenceRow(row) {
|
|
12
|
+
return {
|
|
13
|
+
row,
|
|
14
|
+
valueLabel: formatPreferenceValueLabel(row),
|
|
15
|
+
baseLeftText: ` ${preferenceRowGlyph(row)} ${row.label}`,
|
|
16
|
+
preparedDescription: row.description == null ? undefined : prepareWrappedText(row.description),
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
export function preparePreferenceSections(sections) {
|
|
20
|
+
return sections.map((section) => ({
|
|
21
|
+
id: section.id,
|
|
22
|
+
title: section.title,
|
|
23
|
+
rows: section.rows.map((row) => preparePreferenceRow(row)),
|
|
24
|
+
}));
|
|
25
|
+
}
|
|
26
|
+
export function preferenceRowSurface(row, options) {
|
|
27
|
+
const ctx = resolveCtx(options.ctx);
|
|
28
|
+
const width = Math.max(1, Math.floor(options.width));
|
|
29
|
+
const prepared = isPreparedPreferenceRow(row) ? row : preparePreferenceRow(row);
|
|
30
|
+
const layout = resolvePreferenceRowLayout(prepared, width);
|
|
31
|
+
const surface = createSurface(width, layout.height);
|
|
32
|
+
const bg = options.selected ? resolvePreferenceRowBg(ctx, options.theme) : undefined;
|
|
33
|
+
fillPreferenceRow(surface, bg);
|
|
34
|
+
writePreferenceLine(surface, 0, buildPreferenceLeftText(prepared.row, options.selected === true), {
|
|
35
|
+
strong: options.selected === true,
|
|
36
|
+
bg,
|
|
37
|
+
});
|
|
38
|
+
if (layout.valueLabel.length > 0) {
|
|
39
|
+
if (layout.stackValue) {
|
|
40
|
+
writePreferenceLine(surface, 1, ` ${layout.valueLabel}`, {
|
|
41
|
+
strong: true,
|
|
42
|
+
fg: resolvePreferenceValueFg(prepared.row, ctx, options.theme),
|
|
43
|
+
bg,
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
const valueChars = Array.from(layout.valueLabel);
|
|
48
|
+
const startX = width >= 3 ? 1 : 0;
|
|
49
|
+
const innerWidth = Math.max(0, width - (startX * 2));
|
|
50
|
+
const valueStart = Math.max(0, innerWidth - valueChars.length);
|
|
51
|
+
for (let offset = 0; offset < valueChars.length && startX + valueStart + offset < width; offset++) {
|
|
52
|
+
const char = valueChars[offset];
|
|
53
|
+
if (char === ' ')
|
|
54
|
+
continue;
|
|
55
|
+
surface.set(startX + valueStart + offset, 0, {
|
|
56
|
+
char,
|
|
57
|
+
fg: resolvePreferenceValueFg(prepared.row, ctx, options.theme),
|
|
58
|
+
bg,
|
|
59
|
+
modifiers: ['bold'],
|
|
60
|
+
empty: false,
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
for (let index = 0; index < layout.descriptionLines.length; index++) {
|
|
66
|
+
writePreferenceLine(surface, (layout.stackValue ? 2 : 1) + index, ` ${layout.descriptionLines[index]}`, {
|
|
67
|
+
dim: options.theme?.descriptionToken == null,
|
|
68
|
+
fg: options.theme?.descriptionToken?.hex,
|
|
69
|
+
bg,
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
return surface;
|
|
73
|
+
}
|
|
74
|
+
export function preferenceListSurface(sections, options) {
|
|
75
|
+
const ctx = resolveCtx(options.ctx);
|
|
76
|
+
const width = Math.max(1, Math.floor(options.width));
|
|
77
|
+
const preparedSections = sections.map((section) => isPreparedPreferenceSection(section)
|
|
78
|
+
? section
|
|
79
|
+
: {
|
|
80
|
+
id: section.id,
|
|
81
|
+
title: section.title,
|
|
82
|
+
rows: section.rows.map((row) => preparePreferenceRow(row)),
|
|
83
|
+
});
|
|
84
|
+
const visibleSections = preparedSections.filter((section) => section.rows.length > 0);
|
|
85
|
+
let totalHeight = 1;
|
|
86
|
+
let y = 0;
|
|
87
|
+
for (let sectionIndex = 0; sectionIndex < visibleSections.length; sectionIndex++) {
|
|
88
|
+
const section = visibleSections[sectionIndex];
|
|
89
|
+
if (sectionIndex > 0)
|
|
90
|
+
y += 1;
|
|
91
|
+
y += 1;
|
|
92
|
+
y += 1;
|
|
93
|
+
for (let rowIndex = 0; rowIndex < section.rows.length; rowIndex++) {
|
|
94
|
+
const row = section.rows[rowIndex];
|
|
95
|
+
const rowLayout = resolvePreferenceRowLayout(row, width);
|
|
96
|
+
y += rowLayout.height;
|
|
97
|
+
if (rowIndex < section.rows.length - 1)
|
|
98
|
+
y += 1;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
totalHeight = Math.max(1, y);
|
|
102
|
+
const surface = createSurface(width, totalHeight);
|
|
103
|
+
y = 0;
|
|
104
|
+
for (let sectionIndex = 0; sectionIndex < visibleSections.length; sectionIndex++) {
|
|
105
|
+
const section = visibleSections[sectionIndex];
|
|
106
|
+
if (sectionIndex > 0)
|
|
107
|
+
y += 1;
|
|
108
|
+
writePreferenceLine(surface, y, section.title, {
|
|
109
|
+
strong: options.theme?.sectionTitleToken == null,
|
|
110
|
+
fg: options.theme?.sectionTitleToken?.hex,
|
|
111
|
+
bg: options.theme?.sectionTitleToken?.bg,
|
|
112
|
+
});
|
|
113
|
+
y += 2;
|
|
114
|
+
for (let rowIndex = 0; rowIndex < section.rows.length; rowIndex++) {
|
|
115
|
+
const row = section.rows[rowIndex];
|
|
116
|
+
const rowLayout = resolvePreferenceRowLayout(row, width);
|
|
117
|
+
const rowSurface = preferenceRowSurface(row, {
|
|
118
|
+
width,
|
|
119
|
+
selected: options.selectedRowId === row.row.id,
|
|
120
|
+
ctx,
|
|
121
|
+
theme: options.theme,
|
|
122
|
+
});
|
|
123
|
+
surface.blit(rowSurface, 0, y);
|
|
124
|
+
y += rowLayout.height;
|
|
125
|
+
if (rowIndex < section.rows.length - 1)
|
|
126
|
+
y += 1;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
return surface;
|
|
130
|
+
}
|
|
131
|
+
export function resolvePreferenceRowLayout(row, width) {
|
|
132
|
+
const prepared = isPreparedPreferenceRow(row) ? row : preparePreferenceRow(row);
|
|
133
|
+
const boundedWidth = Math.max(1, Math.floor(width));
|
|
134
|
+
const valueLabel = prepared.valueLabel;
|
|
135
|
+
const leftText = prepared.baseLeftText;
|
|
136
|
+
const startX = boundedWidth >= 3 ? 1 : 0;
|
|
137
|
+
const innerWidth = Math.max(0, boundedWidth - (startX * 2));
|
|
138
|
+
const stackValue = valueLabel.length > 0
|
|
139
|
+
&& (graphemeWidth(leftText) + 3 + graphemeWidth(valueLabel) > innerWidth);
|
|
140
|
+
const descriptionLines = prepared.preparedDescription == null
|
|
141
|
+
? []
|
|
142
|
+
: wrapPreparedTextToWidth(prepared.preparedDescription, Math.max(1, Math.max(14, boundedWidth - 4)));
|
|
143
|
+
return {
|
|
144
|
+
valueLabel,
|
|
145
|
+
stackValue,
|
|
146
|
+
descriptionLines,
|
|
147
|
+
height: 1 + (stackValue ? 1 : 0) + descriptionLines.length,
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
function preferenceRowGlyph(row) {
|
|
151
|
+
if (row.kind === 'toggle')
|
|
152
|
+
return row.checked === true ? '☑' : '☐';
|
|
153
|
+
if (row.kind === 'choice')
|
|
154
|
+
return '↻';
|
|
155
|
+
return ' ';
|
|
156
|
+
}
|
|
157
|
+
function buildPreferenceLeftText(row, selected) {
|
|
158
|
+
const prefix = selected ? '›' : ' ';
|
|
159
|
+
return `${prefix} ${preferenceRowGlyph(row)} ${row.label}`;
|
|
160
|
+
}
|
|
161
|
+
function formatPreferenceValueLabel(row) {
|
|
162
|
+
if (row.kind === 'toggle' && row.checked != null) {
|
|
163
|
+
return row.checked ? '☑ On' : '☐ Off';
|
|
164
|
+
}
|
|
165
|
+
if (row.kind === 'choice') {
|
|
166
|
+
return row.valueLabel ?? 'Choose';
|
|
167
|
+
}
|
|
168
|
+
return row.valueLabel ?? '';
|
|
169
|
+
}
|
|
170
|
+
function fillPreferenceRow(surface, bg) {
|
|
171
|
+
if (bg == null)
|
|
172
|
+
return;
|
|
173
|
+
surface.fill({ char: ' ', bg, empty: false });
|
|
174
|
+
}
|
|
175
|
+
function resolvePreferenceRowBg(ctx, theme) {
|
|
176
|
+
if (theme?.selectedRowBgToken != null) {
|
|
177
|
+
return theme.selectedRowBgToken.bg ?? theme.selectedRowBgToken.hex;
|
|
178
|
+
}
|
|
179
|
+
return ctx?.surface('elevated').bg
|
|
180
|
+
?? ctx?.surface('secondary').bg
|
|
181
|
+
?? ctx?.surface('muted').bg;
|
|
182
|
+
}
|
|
183
|
+
function resolvePreferenceValueFg(row, ctx, theme) {
|
|
184
|
+
if (row.kind === 'toggle' && row.checked === true) {
|
|
185
|
+
return theme?.toggleOnToken?.hex ?? ctx?.semantic('accent').hex;
|
|
186
|
+
}
|
|
187
|
+
if (row.kind === 'toggle' && row.checked === false) {
|
|
188
|
+
return theme?.toggleOffToken?.hex ?? ctx?.semantic('muted').hex;
|
|
189
|
+
}
|
|
190
|
+
if (row.kind === 'choice') {
|
|
191
|
+
return theme?.choiceToken?.hex ?? ctx?.semantic('accent').hex;
|
|
192
|
+
}
|
|
193
|
+
if (row.kind === 'info' || row.kind === 'action') {
|
|
194
|
+
return theme?.infoToken?.hex ?? ctx?.semantic('primary').hex;
|
|
195
|
+
}
|
|
196
|
+
if (ctx == null)
|
|
197
|
+
return undefined;
|
|
198
|
+
return ctx.semantic('primary').hex;
|
|
199
|
+
}
|
|
200
|
+
function writePreferenceLine(surface, y, text, options = {}) {
|
|
201
|
+
const chars = Array.from(text);
|
|
202
|
+
for (let x = 0; x < chars.length && x < surface.width; x++) {
|
|
203
|
+
const char = chars[x];
|
|
204
|
+
if (char === ' ')
|
|
205
|
+
continue;
|
|
206
|
+
surface.set(x, y, {
|
|
207
|
+
char,
|
|
208
|
+
fg: options.fg,
|
|
209
|
+
bg: options.bg,
|
|
210
|
+
modifiers: options.strong ? ['bold'] : options.dim ? ['dim'] : undefined,
|
|
211
|
+
empty: false,
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
//# sourceMappingURL=preference-list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preference-list.js","sourceRoot":"","sources":["../../../src/core/components/preference-list.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { BijouContext } from '../../ports/context.js';
|
|
2
|
-
import type { GradientStop } from '../theme/tokens.js';
|
|
2
|
+
import type { GradientStop, TokenValue } from '../theme/tokens.js';
|
|
3
3
|
/** Configuration for rendering a progress bar. */
|
|
4
4
|
export interface ProgressBarOptions {
|
|
5
5
|
/** Character-width of the bar (defaults to 20). */
|
|
@@ -10,6 +10,14 @@ export interface ProgressBarOptions {
|
|
|
10
10
|
empty?: string;
|
|
11
11
|
/** Gradient color stops applied across filled segments. */
|
|
12
12
|
gradient?: GradientStop[];
|
|
13
|
+
/** Theme token for the leading edge of the filled range. Defaults to `semantic.info`. */
|
|
14
|
+
filledToken?: TokenValue;
|
|
15
|
+
/** Theme token for the trailing edge of the filled range. Defaults to `semantic.accent`. */
|
|
16
|
+
filledEndToken?: TokenValue;
|
|
17
|
+
/** Theme token applied to the empty range. Defaults to `ui.trackEmpty`. */
|
|
18
|
+
emptyToken?: TokenValue;
|
|
19
|
+
/** Theme token applied to the percentage label. Defaults to `semantic.primary`. */
|
|
20
|
+
labelToken?: TokenValue;
|
|
13
21
|
/** Whether to prepend a percentage label (defaults to `true`). */
|
|
14
22
|
showPercent?: boolean;
|
|
15
23
|
/** Bijou context for I/O, styling, and mode detection. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../../../src/core/components/progress.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAE3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../../../src/core/components/progress.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAE3D,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AASnE,kDAAkD;AAClD,MAAM,WAAW,kBAAkB;IACjC,mDAAmD;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4EAA4E;IAC5E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4EAA4E;IAC5E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC;IAC1B,yFAAyF;IACzF,WAAW,CAAC,EAAE,UAAU,CAAC;IACzB,4FAA4F;IAC5F,cAAc,CAAC,EAAE,UAAU,CAAC;IAC5B,2EAA2E;IAC3E,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,mFAAmF;IACnF,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,kEAAkE;IAClE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,0DAA0D;IAC1D,GAAG,CAAC,EAAE,YAAY,CAAC;CACpB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,kBAAuB,GAAG,MAAM,CA8CrF;AAMD,+DAA+D;AAC/D,MAAM,WAAW,qBAAqB;IACpC,2EAA2E;IAC3E,KAAK,IAAI,IAAI,CAAC;IACd;;;OAGG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B;;;OAGG;IACH,IAAI,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC;AAED,gGAAgG;AAChG,MAAM,WAAW,sBAAuB,SAAQ,kBAAkB;CAEjE;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,sBAA2B,GAAG,qBAAqB,CAyC7F;AAMD,qDAAqD;AACrD,MAAM,WAAW,0BAA2B,SAAQ,kBAAkB;IACpE,iFAAiF;IACjF,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,8FAA8F;IAC9F,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;GASG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,GAAE,0BAA+B,GAAG,qBAAqB,CAmFzG"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { lerp3 } from '../theme/gradient.js';
|
|
2
|
+
import { mix } from '../theme/color.js';
|
|
2
3
|
import { resolveClock } from '../clock.js';
|
|
3
4
|
import { resolveCtx } from '../resolve-ctx.js';
|
|
4
5
|
import { renderByMode } from '../mode-render.js';
|
|
@@ -32,22 +33,35 @@ export function progressBar(percent, options = {}) {
|
|
|
32
33
|
const showPercent = options.showPercent ?? true;
|
|
33
34
|
const filledCount = Math.min(width, Math.max(0, Math.round((pct / 100) * width)));
|
|
34
35
|
const noColor = ctx.theme.noColor;
|
|
35
|
-
const stops = options.gradient
|
|
36
|
+
const stops = options.gradient;
|
|
37
|
+
const filledToken = options.filledToken ?? ctx.semantic('info');
|
|
38
|
+
const filledEndToken = options.filledEndToken ?? ctx.semantic('accent');
|
|
39
|
+
const emptyToken = options.emptyToken ?? ctx.ui('trackEmpty');
|
|
40
|
+
const labelToken = options.labelToken ?? ctx.semantic('primary');
|
|
36
41
|
let bar = '';
|
|
37
|
-
if (noColor
|
|
42
|
+
if (noColor) {
|
|
38
43
|
bar = filledChar.repeat(filledCount) + emptyChar.repeat(width - filledCount);
|
|
39
44
|
}
|
|
40
|
-
else {
|
|
45
|
+
else if (stops != null && stops.length > 0) {
|
|
41
46
|
for (let i = 0; i < filledCount; i++) {
|
|
42
47
|
const t_val = filledCount <= 1 ? 0 : i / (filledCount - 1);
|
|
43
48
|
const [r, g, b] = lerp3(stops, t_val * (pct / 100));
|
|
44
49
|
bar += ctx.style.rgb(r, g, b, filledChar);
|
|
45
50
|
}
|
|
46
|
-
|
|
47
|
-
|
|
51
|
+
bar += ctx.style.styled(emptyToken, emptyChar.repeat(width - filledCount));
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
for (let i = 0; i < filledCount; i++) {
|
|
55
|
+
const t_val = filledCount <= 1 ? 0 : i / (filledCount - 1);
|
|
56
|
+
const token = mix(filledToken, filledEndToken, t_val);
|
|
57
|
+
bar += ctx.style.styled(token, filledChar);
|
|
58
|
+
}
|
|
59
|
+
bar += ctx.style.styled(emptyToken, emptyChar.repeat(width - filledCount));
|
|
48
60
|
}
|
|
49
61
|
const label = showPercent ? `${Math.round(pct)}%` : '';
|
|
50
|
-
return label
|
|
62
|
+
return label
|
|
63
|
+
? `${noColor ? label.padStart(4) : ctx.style.styled(labelToken, label.padStart(4))} ${bar}`
|
|
64
|
+
: bar;
|
|
51
65
|
},
|
|
52
66
|
}, options);
|
|
53
67
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"progress.js","sourceRoot":"","sources":["../../../src/core/components/progress.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAyB,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"progress.js","sourceRoot":"","sources":["../../../src/core/components/progress.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter-interactive.d.ts","sourceRoot":"","sources":["../../../src/core/forms/filter-interactive.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"filter-interactive.d.ts","sourceRoot":"","sources":["../../../src/core/forms/filter-interactive.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAW3D;;;;GAIG;AACH,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B,8CAA8C;IAC9C,KAAK,EAAE,MAAM,CAAC;IACd,mDAAmD;IACnD,KAAK,EAAE,CAAC,CAAC;IACT,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED;;;;GAIG;AACH,MAAM,WAAW,aAAa,CAAC,CAAC,CAAE,SAAQ,YAAY,CAAC,CAAC,CAAC;IACvD,kCAAkC;IAClC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3B,6DAA6D;IAC7D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6DAA6D;IAC7D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uGAAuG;IACvG,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC;IAC5D,yDAAyD;IACzD,GAAG,CAAC,EAAE,YAAY,CAAC;CACpB;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,OAAO,CAO/E;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,iBAAiB,CAAC,CAAC,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,CAAC,CAAC,CAkPnG"}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* printable (including `j`/`k`), arrow keys navigate, and Escape returns to
|
|
8
8
|
* normal mode. Ctrl+C cancels from either mode; Escape in normal mode cancels.
|
|
9
9
|
*/
|
|
10
|
-
import { formatFormTitle, terminalRenderer, createStyledFn, createBoldFn } from './form-utils.js';
|
|
10
|
+
import { formatFormTitle, terminalRenderer, createStyledFn, createBoldFn, isKey, isPrintableKey, subscribeFormKeyInput, } from './form-utils.js';
|
|
11
11
|
/**
|
|
12
12
|
* Default case-insensitive substring matcher for filter options.
|
|
13
13
|
*
|
|
@@ -172,9 +172,9 @@ export async function interactiveFilter(options, ctx) {
|
|
|
172
172
|
render();
|
|
173
173
|
}
|
|
174
174
|
return new Promise((resolve) => {
|
|
175
|
-
const handle = ctx
|
|
175
|
+
const handle = subscribeFormKeyInput(ctx, (key) => {
|
|
176
176
|
// ── Mode-independent ───────────────────────────────────
|
|
177
|
-
if (key
|
|
177
|
+
if (isKey(key, 'enter')) {
|
|
178
178
|
handle.dispose();
|
|
179
179
|
const selected = filtered[cursor];
|
|
180
180
|
const resolvedLabel = selected ? selected.label : '(none)';
|
|
@@ -182,7 +182,7 @@ export async function interactiveFilter(options, ctx) {
|
|
|
182
182
|
resolve(filtered[cursor]?.value ?? options.defaultValue ?? options.options[0].value);
|
|
183
183
|
return;
|
|
184
184
|
}
|
|
185
|
-
if (key
|
|
185
|
+
if (isKey(key, 'c', { ctrl: true })) {
|
|
186
186
|
// Ctrl+C — cancel from either mode
|
|
187
187
|
const fallbackValue = options.defaultValue ?? options.options[0].value;
|
|
188
188
|
const fallbackOption = options.options.find((opt) => Object.is(opt.value, fallbackValue));
|
|
@@ -193,7 +193,7 @@ export async function interactiveFilter(options, ctx) {
|
|
|
193
193
|
}
|
|
194
194
|
// ── Normal mode ────────────────────────────────────────
|
|
195
195
|
if (mode === 'normal') {
|
|
196
|
-
if (key
|
|
196
|
+
if (isKey(key, 'escape')) {
|
|
197
197
|
// Escape in normal mode — cancel
|
|
198
198
|
// TODO: bare \x1b may false-trigger on slow connections where escape
|
|
199
199
|
// sequences arrive as separate bytes. Timer-based disambiguation is a
|
|
@@ -205,42 +205,42 @@ export async function interactiveFilter(options, ctx) {
|
|
|
205
205
|
resolve(fallbackValue);
|
|
206
206
|
return;
|
|
207
207
|
}
|
|
208
|
-
if (key === 'j' || key
|
|
208
|
+
if (key.text === 'j' || isKey(key, 'down')) {
|
|
209
209
|
navigateDown();
|
|
210
210
|
return;
|
|
211
211
|
}
|
|
212
|
-
if (key === 'k' || key
|
|
212
|
+
if (key.text === 'k' || isKey(key, 'up')) {
|
|
213
213
|
navigateUp();
|
|
214
214
|
return;
|
|
215
215
|
}
|
|
216
|
-
if (key === '/') {
|
|
216
|
+
if (key.text === '/') {
|
|
217
217
|
// Enter insert mode without typing
|
|
218
218
|
switchMode('insert');
|
|
219
219
|
return;
|
|
220
220
|
}
|
|
221
221
|
// Any other printable — enter insert mode and type the char
|
|
222
|
-
if (key
|
|
222
|
+
if (isPrintableKey(key)) {
|
|
223
223
|
mode = 'insert';
|
|
224
|
-
typeChar(key);
|
|
224
|
+
typeChar(key.text);
|
|
225
225
|
return;
|
|
226
226
|
}
|
|
227
227
|
return;
|
|
228
228
|
}
|
|
229
229
|
// ── Insert mode ────────────────────────────────────────
|
|
230
|
-
if (key
|
|
230
|
+
if (isKey(key, 'escape')) {
|
|
231
231
|
// Escape in insert mode — return to normal
|
|
232
232
|
switchMode('normal');
|
|
233
233
|
return;
|
|
234
234
|
}
|
|
235
|
-
if (key
|
|
235
|
+
if (isKey(key, 'up')) {
|
|
236
236
|
navigateUp();
|
|
237
237
|
return;
|
|
238
238
|
}
|
|
239
|
-
if (key
|
|
239
|
+
if (isKey(key, 'down')) {
|
|
240
240
|
navigateDown();
|
|
241
241
|
return;
|
|
242
242
|
}
|
|
243
|
-
if (key
|
|
243
|
+
if (isKey(key, 'backspace')) {
|
|
244
244
|
if (query.length > 0) {
|
|
245
245
|
const prevLineCount = renderLineCount();
|
|
246
246
|
query = query.slice(0, -1);
|
|
@@ -250,8 +250,8 @@ export async function interactiveFilter(options, ctx) {
|
|
|
250
250
|
return;
|
|
251
251
|
}
|
|
252
252
|
// Printable character (all printable keys including j/k)
|
|
253
|
-
if (key
|
|
254
|
-
typeChar(key);
|
|
253
|
+
if (isPrintableKey(key)) {
|
|
254
|
+
typeChar(key.text);
|
|
255
255
|
}
|
|
256
256
|
});
|
|
257
257
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter-interactive.js","sourceRoot":"","sources":["../../../src/core/forms/filter-interactive.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,
|
|
1
|
+
{"version":3,"file":"filter-interactive.js","sourceRoot":"","sources":["../../../src/core/forms/filter-interactive.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
* @module core/forms/form-utils
|
|
8
8
|
*/
|
|
9
9
|
import type { BijouContext } from '../../ports/context.js';
|
|
10
|
+
import type { KeyInputMsg, RawInputHandle } from '../../ports/io.js';
|
|
10
11
|
import type { TokenValue } from '../theme/tokens.js';
|
|
11
12
|
/**
|
|
12
13
|
* Format a form title with the `?` prefix and theme-aware styling.
|
|
@@ -103,15 +104,45 @@ export declare function createBoldFn(ctx: BijouContext): (text: string) => strin
|
|
|
103
104
|
* @returns The updated scroll offset.
|
|
104
105
|
*/
|
|
105
106
|
export declare function clampScroll(cursor: number, scrollOffset: number, maxVisible: number, itemCount: number): number;
|
|
107
|
+
/**
|
|
108
|
+
* Subscribe to semantic form key input, preferring `ctx.io.keyInput()` when
|
|
109
|
+
* available and falling back to decoding `rawInput()` sequences otherwise.
|
|
110
|
+
*
|
|
111
|
+
* This keeps interactive forms deterministic in tests without forcing
|
|
112
|
+
* production adapters away from the lower-level raw-input contract.
|
|
113
|
+
*
|
|
114
|
+
* @param ctx - Bijou context providing the input port.
|
|
115
|
+
* @param onKey - Callback invoked for each semantic key.
|
|
116
|
+
* @returns A disposable handle that stops further key delivery.
|
|
117
|
+
*/
|
|
118
|
+
export declare function subscribeFormKeyInput(ctx: BijouContext, onKey: (key: KeyInputMsg) => void): RawInputHandle;
|
|
119
|
+
/**
|
|
120
|
+
* Whether a semantic key carries printable text.
|
|
121
|
+
*
|
|
122
|
+
* @param key - The semantic key to test.
|
|
123
|
+
* @returns `true` when the key represents typed text.
|
|
124
|
+
*/
|
|
125
|
+
export declare function isPrintableKey(key: KeyInputMsg): key is KeyInputMsg & {
|
|
126
|
+
text: string;
|
|
127
|
+
};
|
|
128
|
+
/**
|
|
129
|
+
* Match a semantic key by logical key name and optional modifier flags.
|
|
130
|
+
*
|
|
131
|
+
* @param msg - The key message to test.
|
|
132
|
+
* @param key - Expected logical key name.
|
|
133
|
+
* @param mods - Optional modifier constraints.
|
|
134
|
+
* @returns `true` when the key matches.
|
|
135
|
+
*/
|
|
136
|
+
export declare function isKey(msg: KeyInputMsg, key: string, mods?: Partial<Pick<KeyInputMsg, 'ctrl' | 'alt' | 'shift'>>): boolean;
|
|
106
137
|
/**
|
|
107
138
|
* Handle up/down (arrow key or j/k) navigation in a wrapping list.
|
|
108
139
|
*
|
|
109
|
-
* @param key - The keypress
|
|
140
|
+
* @param key - The semantic keypress.
|
|
110
141
|
* @param cursor - Current cursor index.
|
|
111
142
|
* @param length - Total number of items.
|
|
112
143
|
* @returns The new cursor index, or `null` if the key was not a vertical nav key.
|
|
113
144
|
*/
|
|
114
|
-
export declare function handleVerticalNav(key:
|
|
145
|
+
export declare function handleVerticalNav(key: KeyInputMsg, cursor: number, length: number): number | null;
|
|
115
146
|
/**
|
|
116
147
|
* Route a form to its interactive or fallback handler based on
|
|
117
148
|
* output mode and TTY state.
|