@flyingrobots/bijou 4.1.0 → 4.4.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 +6 -1
- package/dist/core/components/alert-v3.js +4 -4
- package/dist/core/components/alert-v3.js.map +1 -1
- package/dist/core/components/alert.d.ts.map +1 -1
- package/dist/core/components/alert.js +12 -5
- package/dist/core/components/alert.js.map +1 -1
- package/dist/core/components/badge.d.ts.map +1 -1
- package/dist/core/components/badge.js +38 -7
- package/dist/core/components/badge.js.map +1 -1
- package/dist/core/components/box-v3.d.ts.map +1 -1
- package/dist/core/components/box-v3.js +101 -26
- package/dist/core/components/box-v3.js.map +1 -1
- package/dist/core/components/braille-chart.d.ts +45 -0
- package/dist/core/components/braille-chart.d.ts.map +1 -0
- package/dist/core/components/braille-chart.js +94 -0
- package/dist/core/components/braille-chart.js.map +1 -0
- package/dist/core/components/data-viz-utils.d.ts +25 -0
- package/dist/core/components/data-viz-utils.d.ts.map +1 -0
- package/dist/core/components/data-viz-utils.js +72 -0
- package/dist/core/components/data-viz-utils.js.map +1 -0
- package/dist/core/components/index.d.ts +8 -0
- package/dist/core/components/index.d.ts.map +1 -1
- package/dist/core/components/index.js +4 -0
- package/dist/core/components/index.js.map +1 -1
- package/dist/core/components/inspector.d.ts.map +1 -1
- package/dist/core/components/inspector.js +2 -1
- package/dist/core/components/inspector.js.map +1 -1
- package/dist/core/components/perf-overlay.d.ts +63 -0
- package/dist/core/components/perf-overlay.d.ts.map +1 -0
- package/dist/core/components/perf-overlay.js +84 -0
- package/dist/core/components/perf-overlay.js.map +1 -0
- package/dist/core/components/preference-list.d.ts.map +1 -1
- package/dist/core/components/preference-list.js +63 -11
- package/dist/core/components/preference-list.js.map +1 -1
- package/dist/core/components/separator-v3.d.ts.map +1 -1
- package/dist/core/components/separator-v3.js +55 -15
- package/dist/core/components/separator-v3.js.map +1 -1
- package/dist/core/components/sparkline.d.ts +33 -0
- package/dist/core/components/sparkline.d.ts.map +1 -0
- package/dist/core/components/sparkline.js +45 -0
- package/dist/core/components/sparkline.js.map +1 -0
- package/dist/core/components/stats-panel.d.ts +50 -0
- package/dist/core/components/stats-panel.d.ts.map +1 -0
- package/dist/core/components/stats-panel.js +83 -0
- package/dist/core/components/stats-panel.js.map +1 -0
- package/dist/core/components/surface-text.d.ts +1 -1
- package/dist/core/components/surface-text.d.ts.map +1 -1
- package/dist/core/components/surface-text.js +80 -9
- package/dist/core/components/surface-text.js.map +1 -1
- package/dist/core/components/table-v3.d.ts.map +1 -1
- package/dist/core/components/table-v3.js +34 -2
- package/dist/core/components/table-v3.js.map +1 -1
- package/dist/core/components/types.d.ts +4 -4
- package/dist/core/components/types.d.ts.map +1 -1
- package/dist/core/render/differ.d.ts +12 -1
- package/dist/core/render/differ.d.ts.map +1 -1
- package/dist/core/render/differ.js +502 -11
- package/dist/core/render/differ.js.map +1 -1
- package/dist/core/render/packed-cell.d.ts +110 -0
- package/dist/core/render/packed-cell.d.ts.map +1 -0
- package/dist/core/render/packed-cell.js +301 -0
- package/dist/core/render/packed-cell.js.map +1 -0
- package/dist/core/text/grapheme.d.ts.map +1 -1
- package/dist/core/text/grapheme.js +17 -5
- package/dist/core/text/grapheme.js.map +1 -1
- package/dist/core/theme/presets.d.ts +9 -1
- package/dist/core/theme/presets.d.ts.map +1 -1
- package/dist/core/theme/presets.js +44 -2
- package/dist/core/theme/presets.js.map +1 -1
- package/dist/core/theme/resolve.d.ts.map +1 -1
- package/dist/core/theme/resolve.js +21 -1
- package/dist/core/theme/resolve.js.map +1 -1
- package/dist/core/theme/tokens.d.ts +12 -0
- package/dist/core/theme/tokens.d.ts.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/ports/io.d.ts +17 -0
- package/dist/ports/io.d.ts.map +1 -1
- package/dist/ports/surface.d.ts +83 -2
- package/dist/ports/surface.d.ts.map +1 -1
- package/dist/ports/surface.js +319 -37
- package/dist/ports/surface.js.map +1 -1
- package/package.json +5 -1
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sparkline — compact inline trend graph using Unicode block characters.
|
|
3
|
+
*
|
|
4
|
+
* Renders a sequence of numeric values as a string of block chars (▁▂▃▄▅▆▇█).
|
|
5
|
+
* Values are normalized between min and max (auto-detected or caller-supplied).
|
|
6
|
+
* Non-finite values (NaN, Infinity) are treated as 0.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* sparkline([1, 5, 3, 8, 2, 7])
|
|
11
|
+
* // → '▁▅▃█▂▆'
|
|
12
|
+
*
|
|
13
|
+
* sparkline([10, 20, 30, 40], { width: 8 })
|
|
14
|
+
* // → '▁▁▃▃▅▅▇▇' (values interpolated to fit width)
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
import { safeMax, safeMin, sampleToWidth, sanitizeValues } from './data-viz-utils.js';
|
|
18
|
+
const BLOCKS = ['▁', '▂', '▃', '▄', '▅', '▆', '▇', '█'];
|
|
19
|
+
/**
|
|
20
|
+
* Render an array of numbers as a compact sparkline string.
|
|
21
|
+
*
|
|
22
|
+
* Uses Unicode block elements ▁▂▃▄▅▆▇█ with auto-scaled
|
|
23
|
+
* min/max normalization. Empty input returns an empty string.
|
|
24
|
+
*/
|
|
25
|
+
export function sparkline(values, options = {}) {
|
|
26
|
+
if (values.length === 0)
|
|
27
|
+
return '';
|
|
28
|
+
const rawWidth = options.width ?? values.length;
|
|
29
|
+
const width = Math.max(0, Math.floor(rawWidth));
|
|
30
|
+
if (width <= 0 || !Number.isFinite(rawWidth))
|
|
31
|
+
return '';
|
|
32
|
+
const sampled = sampleToWidth(sanitizeValues(values), width);
|
|
33
|
+
const min = Number.isFinite(options.min) ? options.min : safeMin(sampled);
|
|
34
|
+
const max = Number.isFinite(options.max) ? options.max : safeMax(sampled);
|
|
35
|
+
const range = max - min;
|
|
36
|
+
let result = '';
|
|
37
|
+
for (let i = 0; i < sampled.length; i++) {
|
|
38
|
+
const v = sampled[i];
|
|
39
|
+
const normalized = range === 0 ? 0.5 : (v - min) / range;
|
|
40
|
+
const index = Math.round(normalized * (BLOCKS.length - 1));
|
|
41
|
+
result += BLOCKS[Math.max(0, Math.min(BLOCKS.length - 1, index))];
|
|
42
|
+
}
|
|
43
|
+
return result;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=sparkline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sparkline.js","sourceRoot":"","sources":["../../../src/core/components/sparkline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAEtF,MAAM,MAAM,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAWxD;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAC,MAAyB,EAAE,UAA4B,EAAE;IACjF,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEnC,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC;IAChD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;IAChD,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,OAAO,EAAE,CAAC;IAExD,MAAM,OAAO,GAAG,aAAa,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC;IAC7D,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAI,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3E,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAI,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3E,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC;IAExB,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAE,CAAC;QACtB,MAAM,UAAU,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC;QACzD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QAC3D,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,CAAE,CAAC;IACrE,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stats panel — labeled box with aligned key-value rows.
|
|
3
|
+
*
|
|
4
|
+
* Renders a titled bordered panel with left-aligned labels and
|
|
5
|
+
* right-aligned values. Each row can optionally include an inline
|
|
6
|
+
* sparkline after the value.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* const panel = statsPanelSurface([
|
|
11
|
+
* { label: 'FPS', value: '30' },
|
|
12
|
+
* { label: 'frame', value: '148', sparkline: fpsHistory },
|
|
13
|
+
* { label: 'heap', value: '42.1 MB' },
|
|
14
|
+
* ], { title: 'Perf', width: 30, ctx });
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
import { type Surface } from '../../ports/surface.js';
|
|
18
|
+
import type { BijouNodeOptions } from './types.js';
|
|
19
|
+
import type { TokenValue } from '../theme/tokens.js';
|
|
20
|
+
export interface StatsPanelEntry {
|
|
21
|
+
/** Left-aligned label. */
|
|
22
|
+
readonly label: string;
|
|
23
|
+
/** Right-aligned value. */
|
|
24
|
+
readonly value: string;
|
|
25
|
+
/** Optional time-series data rendered as an inline sparkline after the value. */
|
|
26
|
+
readonly sparkline?: readonly number[];
|
|
27
|
+
/** Optional label color override. */
|
|
28
|
+
readonly labelToken?: TokenValue;
|
|
29
|
+
/** Optional value color override. */
|
|
30
|
+
readonly valueToken?: TokenValue;
|
|
31
|
+
}
|
|
32
|
+
export interface StatsPanelOptions extends BijouNodeOptions {
|
|
33
|
+
/** Panel title shown in the top border. */
|
|
34
|
+
readonly title?: string;
|
|
35
|
+
/** Total width of the panel including borders. Required. */
|
|
36
|
+
readonly width: number;
|
|
37
|
+
/** Border color token. */
|
|
38
|
+
readonly borderToken?: TokenValue;
|
|
39
|
+
/** Background color token. */
|
|
40
|
+
readonly bgToken?: TokenValue;
|
|
41
|
+
/** Token applied to labels by default. */
|
|
42
|
+
readonly labelToken?: TokenValue;
|
|
43
|
+
/** Token applied to values by default. */
|
|
44
|
+
readonly valueToken?: TokenValue;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Render a stats panel as a bordered box with aligned key-value rows.
|
|
48
|
+
*/
|
|
49
|
+
export declare function statsPanelSurface(entries: readonly StatsPanelEntry[], options: StatsPanelOptions): Surface;
|
|
50
|
+
//# sourceMappingURL=stats-panel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stats-panel.d.ts","sourceRoot":"","sources":["../../../src/core/components/stats-panel.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAKH,OAAO,EAAiB,KAAK,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAErE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,MAAM,WAAW,eAAe;IAC9B,0BAA0B;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,2BAA2B;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,iFAAiF;IACjF,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,qCAAqC;IACrC,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC;IACjC,qCAAqC;IACrC,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC;CAClC;AAED,MAAM,WAAW,iBAAkB,SAAQ,gBAAgB;IACzD,2CAA2C;IAC3C,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,4DAA4D;IAC5D,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,0BAA0B;IAC1B,QAAQ,CAAC,WAAW,CAAC,EAAE,UAAU,CAAC;IAClC,8BAA8B;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC;IAC9B,0CAA0C;IAC1C,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC;IACjC,0CAA0C;IAC1C,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC;CAClC;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,SAAS,eAAe,EAAE,EACnC,OAAO,EAAE,iBAAiB,GACzB,OAAO,CA6DT"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stats panel — labeled box with aligned key-value rows.
|
|
3
|
+
*
|
|
4
|
+
* Renders a titled bordered panel with left-aligned labels and
|
|
5
|
+
* right-aligned values. Each row can optionally include an inline
|
|
6
|
+
* sparkline after the value.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* const panel = statsPanelSurface([
|
|
11
|
+
* { label: 'FPS', value: '30' },
|
|
12
|
+
* { label: 'frame', value: '148', sparkline: fpsHistory },
|
|
13
|
+
* { label: 'heap', value: '42.1 MB' },
|
|
14
|
+
* ], { title: 'Perf', width: 30, ctx });
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
import { boxSurface } from './box-v3.js';
|
|
18
|
+
import { sparkline } from './sparkline.js';
|
|
19
|
+
import { tokenToCellStyle, createSegmentSurface } from './surface-text.js';
|
|
20
|
+
import { createSurface } from '../../ports/surface.js';
|
|
21
|
+
import { resolveSafeCtx as resolveCtx } from '../resolve-ctx.js';
|
|
22
|
+
/**
|
|
23
|
+
* Render a stats panel as a bordered box with aligned key-value rows.
|
|
24
|
+
*/
|
|
25
|
+
export function statsPanelSurface(entries, options) {
|
|
26
|
+
const ctx = resolveCtx(options.ctx);
|
|
27
|
+
const width = Math.max(4, options.width);
|
|
28
|
+
// Inner width = total - 2 borders - 2 padding chars.
|
|
29
|
+
const innerWidth = width - 4;
|
|
30
|
+
if (entries.length === 0 || innerWidth <= 0) {
|
|
31
|
+
return boxSurface('', { width, title: options.title, borderToken: options.borderToken, bgToken: options.bgToken, ctx });
|
|
32
|
+
}
|
|
33
|
+
// Compute column widths.
|
|
34
|
+
let maxLabelLen = 0;
|
|
35
|
+
for (const e of entries) {
|
|
36
|
+
if (e.label.length > maxLabelLen)
|
|
37
|
+
maxLabelLen = e.label.length;
|
|
38
|
+
}
|
|
39
|
+
const gap = 1;
|
|
40
|
+
// Build each row as a surface with styled segments.
|
|
41
|
+
const rowSurfaces = [];
|
|
42
|
+
for (const entry of entries) {
|
|
43
|
+
const labelTok = entry.labelToken ?? options.labelToken;
|
|
44
|
+
const valueTok = entry.valueToken ?? options.valueToken;
|
|
45
|
+
const labelStyle = tokenToCellStyle(labelTok);
|
|
46
|
+
const valueStyle = tokenToCellStyle(valueTok);
|
|
47
|
+
const paddedLabel = entry.label.padEnd(maxLabelLen);
|
|
48
|
+
const segments = [
|
|
49
|
+
{ text: paddedLabel, style: labelStyle },
|
|
50
|
+
{ text: ' '.repeat(gap), style: {} },
|
|
51
|
+
];
|
|
52
|
+
// Value + optional sparkline (only if it fits within the inner width).
|
|
53
|
+
const sparkData = entry.sparkline;
|
|
54
|
+
const sparkFits = sparkData && sparkData.length > 0
|
|
55
|
+
&& innerWidth - maxLabelLen - gap - entry.value.length - 1 > 0;
|
|
56
|
+
if (sparkFits) {
|
|
57
|
+
const sparkWidth = innerWidth - maxLabelLen - gap - entry.value.length - 1;
|
|
58
|
+
const sparkStr = sparkline(sparkData, { width: sparkWidth });
|
|
59
|
+
segments.push({ text: entry.value, style: valueStyle });
|
|
60
|
+
segments.push({ text: ' ', style: {} });
|
|
61
|
+
segments.push({ text: sparkStr, style: valueStyle });
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
segments.push({ text: entry.value, style: valueStyle });
|
|
65
|
+
}
|
|
66
|
+
rowSurfaces.push(createSegmentSurface(segments));
|
|
67
|
+
}
|
|
68
|
+
// Compose rows into a single content surface.
|
|
69
|
+
const contentHeight = rowSurfaces.length;
|
|
70
|
+
const contentWidth = innerWidth;
|
|
71
|
+
const content = createSurface(contentWidth, contentHeight);
|
|
72
|
+
for (let i = 0; i < rowSurfaces.length; i++) {
|
|
73
|
+
content.blit(rowSurfaces[i], 0, i);
|
|
74
|
+
}
|
|
75
|
+
return boxSurface(content, {
|
|
76
|
+
width,
|
|
77
|
+
title: options.title,
|
|
78
|
+
borderToken: options.borderToken,
|
|
79
|
+
bgToken: options.bgToken,
|
|
80
|
+
ctx,
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=stats-panel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stats-panel.js","sourceRoot":"","sources":["../../../src/core/components/stats-panel.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type Cell, type Surface } from '../../ports/surface.js';
|
|
2
2
|
import type { TokenValue } from '../theme/tokens.js';
|
|
3
|
-
export type CellTextStyle = Pick<Cell, 'fg' | 'bg' | 'modifiers'>;
|
|
3
|
+
export type CellTextStyle = Pick<Cell, 'fg' | 'bg' | 'fgRGB' | 'bgRGB' | 'modifiers'>;
|
|
4
4
|
export interface SurfaceTextSegment {
|
|
5
5
|
readonly text: string;
|
|
6
6
|
readonly style?: CellTextStyle;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"surface-text.d.ts","sourceRoot":"","sources":["../../../src/core/components/surface-text.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,IAAI,EAAE,KAAK,OAAO,
|
|
1
|
+
{"version":3,"file":"surface-text.d.ts","sourceRoot":"","sources":["../../../src/core/components/surface-text.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,IAAI,EAAE,KAAK,OAAO,EAAsB,MAAM,wBAAwB,CAAC;AACpG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAIrD,MAAM,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,OAAO,GAAG,OAAO,GAAG,WAAW,CAAC,CAAC;AAiCtF,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC;CAChC;AAOD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,MAAuB,GAAG,MAAM,EAAE,CAS3F;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,UAAU,GAAG,SAAS,GAAG,aAAa,CAa7E;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,GAAE,aAAkB,GAAG,OAAO,CA+BlF;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,SAAS,kBAAkB,EAAE,GAAG,OAAO,CA+BrF;AAED,wBAAgB,UAAU,CACxB,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,aAAa,GACnB,OAAO,CAMT;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAqC3E"}
|
|
@@ -1,6 +1,40 @@
|
|
|
1
1
|
import { createSurface } from '../../ports/surface.js';
|
|
2
2
|
import { graphemeClusterWidth, segmentGraphemes } from '../text/grapheme.js';
|
|
3
|
-
|
|
3
|
+
import { encodeModifiers, parseHex } from '../render/packed-cell.js';
|
|
4
|
+
function parseNumericStyle(style) {
|
|
5
|
+
let fgR = 0, fgG = 0, fgB = 0, fgSet = false;
|
|
6
|
+
let bgR = 0, bgG = 0, bgB = 0, bgSet = false;
|
|
7
|
+
if (style.fg) {
|
|
8
|
+
const rgb = parseHex(style.fg);
|
|
9
|
+
if (!rgb)
|
|
10
|
+
return undefined;
|
|
11
|
+
fgR = rgb[0];
|
|
12
|
+
fgG = rgb[1];
|
|
13
|
+
fgB = rgb[2];
|
|
14
|
+
fgSet = true;
|
|
15
|
+
}
|
|
16
|
+
if (style.bg) {
|
|
17
|
+
const rgb = parseHex(style.bg);
|
|
18
|
+
if (!rgb)
|
|
19
|
+
return undefined;
|
|
20
|
+
bgR = rgb[0];
|
|
21
|
+
bgG = rgb[1];
|
|
22
|
+
bgB = rgb[2];
|
|
23
|
+
bgSet = true;
|
|
24
|
+
}
|
|
25
|
+
return {
|
|
26
|
+
fgR, fgG, fgB, fgSet,
|
|
27
|
+
bgR, bgG, bgB, bgSet,
|
|
28
|
+
flags: encodeModifiers(style.modifiers),
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
function isPackedSurface(s) {
|
|
32
|
+
return 'buffer' in s && s.buffer instanceof Uint8Array;
|
|
33
|
+
}
|
|
34
|
+
// Previously overrode ✓/✗ as narrow when the Dingbats range was
|
|
35
|
+
// blanket-classified as wide. Now isWideChar correctly excludes
|
|
36
|
+
// Dingbats (they're Narrow per Unicode East Asian Width).
|
|
37
|
+
const SURFACE_NARROW_OVERRIDES = new Set();
|
|
4
38
|
export function segmentSurfaceText(text, purpose = 'Surface text') {
|
|
5
39
|
const graphemes = segmentGraphemes(text ?? '');
|
|
6
40
|
const wide = graphemes.find((grapheme) => graphemeClusterWidth(grapheme) !== 1 && !SURFACE_NARROW_OVERRIDES.has(grapheme));
|
|
@@ -12,11 +46,19 @@ export function segmentSurfaceText(text, purpose = 'Surface text') {
|
|
|
12
46
|
export function tokenToCellStyle(token) {
|
|
13
47
|
if (token == null)
|
|
14
48
|
return {};
|
|
15
|
-
|
|
49
|
+
// Pass both hex string and pre-parsed RGB bytes. encodeCellIntoBuf
|
|
50
|
+
// in the packed surface path will prefer fgRGB/bgRGB when present,
|
|
51
|
+
// skipping inlineHexRGB entirely. See docs/perf/RE-017-byte-pipeline.md.
|
|
52
|
+
const style = {
|
|
16
53
|
fg: token.hex,
|
|
17
54
|
bg: token.bg,
|
|
18
55
|
modifiers: token.modifiers,
|
|
19
56
|
};
|
|
57
|
+
if (token.fgRGB)
|
|
58
|
+
style.fgRGB = token.fgRGB;
|
|
59
|
+
if (token.bgRGB)
|
|
60
|
+
style.bgRGB = token.bgRGB;
|
|
61
|
+
return style;
|
|
20
62
|
}
|
|
21
63
|
export function createTextSurface(text, style = {}) {
|
|
22
64
|
const safeText = text ?? '';
|
|
@@ -25,10 +67,26 @@ export function createTextSurface(text, style = {}) {
|
|
|
25
67
|
const width = lineGraphemes.reduce((max, graphemes) => Math.max(max, graphemes.length), 0);
|
|
26
68
|
const height = Math.max(1, lines.length);
|
|
27
69
|
const surface = createSurface(width, height);
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
70
|
+
// Fast path: use setRGB when surface is packed and style has valid hex colors
|
|
71
|
+
const numStyle = isPackedSurface(surface) ? parseNumericStyle(style) : undefined;
|
|
72
|
+
if (numStyle && isPackedSurface(surface)) {
|
|
73
|
+
const { fgR, fgG, fgB, bgR, bgG, bgB, flags } = numStyle;
|
|
74
|
+
// -1 signals "terminal default" to setRGB; fgG/fgB and bgG/bgB are ignored when fR/bR === -1
|
|
75
|
+
const fR = numStyle.fgSet ? fgR : -1;
|
|
76
|
+
const bR = numStyle.bgSet ? bgR : -1;
|
|
77
|
+
for (let y = 0; y < lines.length; y++) {
|
|
78
|
+
const graphemes = lineGraphemes[y];
|
|
79
|
+
for (let x = 0; x < graphemes.length; x++) {
|
|
80
|
+
surface.setRGB(x, y, graphemes[x], fR, fgG, fgB, bR, bgG, bgB, flags);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
for (let y = 0; y < lines.length; y++) {
|
|
86
|
+
const graphemes = lineGraphemes[y];
|
|
87
|
+
for (let x = 0; x < graphemes.length; x++) {
|
|
88
|
+
surface.set(x, y, { char: graphemes[x], ...style, empty: false });
|
|
89
|
+
}
|
|
32
90
|
}
|
|
33
91
|
}
|
|
34
92
|
return surface;
|
|
@@ -38,15 +96,28 @@ export function createSegmentSurface(segments) {
|
|
|
38
96
|
return createTextSurface('');
|
|
39
97
|
const segmented = segments.map((segment) => ({
|
|
40
98
|
style: segment.style,
|
|
99
|
+
numStyle: segment.style ? parseNumericStyle(segment.style) : undefined,
|
|
41
100
|
graphemes: segmentSurfaceText(segment.text ?? '', 'createSegmentSurface'),
|
|
42
101
|
}));
|
|
43
102
|
const width = segmented.reduce((sum, segment) => sum + segment.graphemes.length, 0);
|
|
44
103
|
const surface = createSurface(width, 1);
|
|
104
|
+
const packed = isPackedSurface(surface);
|
|
45
105
|
let x = 0;
|
|
46
106
|
for (const segment of segmented) {
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
107
|
+
const ns = packed ? segment.numStyle : undefined;
|
|
108
|
+
if (ns && isPackedSurface(surface)) {
|
|
109
|
+
const fR = ns.fgSet ? ns.fgR : -1;
|
|
110
|
+
const bR = ns.bgSet ? ns.bgR : -1;
|
|
111
|
+
for (const char of segment.graphemes) {
|
|
112
|
+
surface.setRGB(x, 0, char, fR, ns.fgG, ns.fgB, bR, ns.bgG, ns.bgB, ns.flags);
|
|
113
|
+
x++;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
for (const char of segment.graphemes) {
|
|
118
|
+
surface.set(x, 0, { char, ...segment.style, empty: false });
|
|
119
|
+
x++;
|
|
120
|
+
}
|
|
50
121
|
}
|
|
51
122
|
}
|
|
52
123
|
return surface;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"surface-text.js","sourceRoot":"","sources":["../../../src/core/components/surface-text.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"surface-text.js","sourceRoot":"","sources":["../../../src/core/components/surface-text.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAA+C,MAAM,wBAAwB,CAAC;AAEpG,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAWrE,SAAS,iBAAiB,CAAC,KAAoB;IAC7C,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;IAC7C,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;IAC7C,IAAI,KAAK,CAAC,EAAE,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC/B,IAAI,CAAC,GAAG;YAAE,OAAO,SAAS,CAAC;QAC3B,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QAAC,KAAK,GAAG,IAAI,CAAC;IACzD,CAAC;IACD,IAAI,KAAK,CAAC,EAAE,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC/B,IAAI,CAAC,GAAG;YAAE,OAAO,SAAS,CAAC;QAC3B,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QAAC,KAAK,GAAG,IAAI,CAAC;IACzD,CAAC;IACD,OAAO;QACL,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;QACpB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK;QACpB,KAAK,EAAE,eAAe,CAAC,KAAK,CAAC,SAAS,CAAC;KACxC,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,CAAU;IACjC,OAAO,QAAQ,IAAI,CAAC,IAAK,CAAS,CAAC,MAAM,YAAY,UAAU,CAAC;AAClE,CAAC;AAOD,gEAAgE;AAChE,gEAAgE;AAChE,0DAA0D;AAC1D,MAAM,wBAAwB,GAAG,IAAI,GAAG,EAAU,CAAC;AAEnD,MAAM,UAAU,kBAAkB,CAAC,IAAY,EAAE,UAAkB,cAAc;IAC/E,MAAM,SAAS,GAAG,gBAAgB,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CACzB,CAAC,QAAQ,EAAE,EAAE,CAAC,oBAAoB,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAC9F,CAAC;IACF,IAAI,IAAI,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CAAC,GAAG,OAAO,8CAA8C,IAAI,yBAAyB,CAAC,CAAC;IACzG,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAA6B;IAC5D,IAAI,KAAK,IAAI,IAAI;QAAE,OAAO,EAAE,CAAC;IAC7B,mEAAmE;IACnE,mEAAmE;IACnE,yEAAyE;IACzE,MAAM,KAAK,GAAkB;QAC3B,EAAE,EAAE,KAAK,CAAC,GAAG;QACb,EAAE,EAAE,KAAK,CAAC,EAAE;QACZ,SAAS,EAAE,KAAK,CAAC,SAAS;KAC3B,CAAC;IACF,IAAI,KAAK,CAAC,KAAK;QAAE,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IAC3C,IAAI,KAAK,CAAC,KAAK;QAAE,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IAC3C,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAY,EAAE,QAAuB,EAAE;IACvE,MAAM,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC;IAC5B,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACtC,MAAM,aAAa,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,kBAAkB,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC,CAAC;IACzF,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3F,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACzC,MAAM,OAAO,GAAG,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAE7C,8EAA8E;IAC9E,MAAM,QAAQ,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACjF,IAAI,QAAQ,IAAI,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC;QACzC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,QAAQ,CAAC;QACzD,6FAA6F;QAC7F,MAAM,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrC,MAAM,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,SAAS,GAAG,aAAa,CAAC,CAAC,CAAE,CAAC;YACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC1C,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,CAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;YACzE,CAAC;QACH,CAAC;IACH,CAAC;SAAM,CAAC;QACN,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,SAAS,GAAG,aAAa,CAAC,CAAC,CAAE,CAAC;YACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC1C,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC,CAAE,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;YACrE,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,QAAuC;IAC1E,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,iBAAiB,CAAC,EAAE,CAAC,CAAC;IAExD,MAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAC3C,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,iBAAiB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;QACtE,SAAS,EAAE,kBAAkB,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,EAAE,sBAAsB,CAAC;KAC1E,CAAC,CAAC,CAAC;IACJ,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACpF,MAAM,OAAO,GAAG,aAAa,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACxC,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IACxC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEV,KAAK,MAAM,OAAO,IAAI,SAAS,EAAE,CAAC;QAChC,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;QACjD,IAAI,EAAE,IAAI,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC;YACnC,MAAM,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAClC,MAAM,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAClC,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;gBACrC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;gBAC7E,CAAC,EAAE,CAAC;YACN,CAAC;QACH,CAAC;aAAM,CAAC;YACN,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;gBACrC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;gBAC5D,CAAC,EAAE,CAAC;YACN,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,UAAU,CACxB,OAAgB,EAChB,KAAa,EACb,MAAc,EACd,IAAoB;IAEpB,MAAM,MAAM,GAAG,IAAI,IAAI,IAAI;QACzB,CAAC,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC;QAC9B,CAAC,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IACvE,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3B,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,OAAgB,EAAE,KAAa;IAChE,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,aAAa,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IACrE,IAAI,OAAO,CAAC,KAAK,IAAI,KAAK;QAAE,OAAO,OAAO,CAAC;IAE3C,MAAM,IAAI,GAAa,EAAE,CAAC;IAE1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,IAAI,cAAc,GAAG,CAAC,CAAC;QACvB,KAAK,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;gBAC7B,cAAc,GAAG,CAAC,GAAG,CAAC,CAAC;gBACvB,MAAM;YACR,CAAC;QACH,CAAC;QAED,IAAI,cAAc,KAAK,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACd,SAAS;QACX,CAAC;QAED,MAAM,KAAK,GAAW,EAAE,CAAC;QACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QACvC,CAAC;QAED,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,MAAM,IAAI,KAAK,EAAE,CAAC;YAC5D,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9D,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;QACtB,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;YACtB,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table-v3.d.ts","sourceRoot":"","sources":["../../../src/core/components/table-v3.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,OAAO,
|
|
1
|
+
{"version":3,"file":"table-v3.d.ts","sourceRoot":"","sources":["../../../src/core/components/table-v3.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,OAAO,EAAsB,MAAM,wBAAwB,CAAC;AAEzF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAK/C,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,OAAO,CAAC;AAEhD,MAAM,WAAW,mBAAoB,SAAQ,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC;IACrE,QAAQ,CAAC,IAAI,EAAE,gBAAgB,EAAE,EAAE,CAAC;CACrC;AAkBD;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAuJlE"}
|
|
@@ -2,6 +2,7 @@ import { createSurface } from '../../ports/surface.js';
|
|
|
2
2
|
import { resolveSafeCtx as resolveCtx } from '../resolve-ctx.js';
|
|
3
3
|
import { createTextSurface, tokenToCellStyle, wrapSurfaceToWidth } from './surface-text.js';
|
|
4
4
|
import { resolveOverflowBehavior } from './overflow.js';
|
|
5
|
+
import { parseHex, encodeModifiers } from '../render/packed-cell.js';
|
|
5
6
|
function normalizeColumnWidth(width) {
|
|
6
7
|
if (width == null)
|
|
7
8
|
return undefined;
|
|
@@ -67,8 +68,36 @@ export function tableSurface(options) {
|
|
|
67
68
|
: colWidths.reduce((sum, width) => sum + width + 2, 0) + columns.length + 1;
|
|
68
69
|
const totalHeight = 1 + headerHeight + 1 + rowHeights.reduce((sum, height) => sum + height, 0) + 1;
|
|
69
70
|
const surface = createSurface(totalWidth, totalHeight, { char: ' ', empty: false });
|
|
71
|
+
const packed = 'buffer' in surface;
|
|
72
|
+
// Pre-parse border style for setRGB fast path
|
|
73
|
+
let bfR = -1, bfG = 0, bfB = 0, bbR = -1, bbG = 0, bbB = 0, bflags = 0;
|
|
74
|
+
if (packed && borderStyle.fg) {
|
|
75
|
+
const rgb = parseHex(borderStyle.fg);
|
|
76
|
+
if (rgb) {
|
|
77
|
+
const [r, g, b] = rgb;
|
|
78
|
+
bfR = r;
|
|
79
|
+
bfG = g;
|
|
80
|
+
bfB = b;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
if (packed && borderStyle.bg) {
|
|
84
|
+
const rgb = parseHex(borderStyle.bg);
|
|
85
|
+
if (rgb) {
|
|
86
|
+
const [r, g, b] = rgb;
|
|
87
|
+
bbR = r;
|
|
88
|
+
bbG = g;
|
|
89
|
+
bbB = b;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
if (packed)
|
|
93
|
+
bflags = encodeModifiers(borderStyle.modifiers);
|
|
70
94
|
const setBorder = (x, y, char, bg) => {
|
|
71
|
-
|
|
95
|
+
if (packed && !bg) {
|
|
96
|
+
surface.setRGB(x, y, char, bfR, bfG, bfB, bbR, bbG, bbB, bflags);
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
surface.set(x, y, { char, ...borderStyle, bg: bg ?? borderStyle.bg, empty: false });
|
|
100
|
+
}
|
|
72
101
|
};
|
|
73
102
|
const setSpace = (x, y, bg, fg) => {
|
|
74
103
|
surface.set(x, y, {
|
|
@@ -127,7 +156,10 @@ export function tableSurface(options) {
|
|
|
127
156
|
const cellWidth = colWidths[colIndex];
|
|
128
157
|
setBorder(x - 1, y + line, '\u2502');
|
|
129
158
|
for (let fillX = x; fillX < x + cellWidth + 2; fillX++) {
|
|
130
|
-
|
|
159
|
+
if (packed)
|
|
160
|
+
surface.setRGB(fillX, y + line, 0x20, -1, 0, 0, -1, 0, 0);
|
|
161
|
+
else
|
|
162
|
+
surface.set(fillX, y + line, { char: ' ', empty: false });
|
|
131
163
|
}
|
|
132
164
|
x += cellWidth + 3;
|
|
133
165
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table-v3.js","sourceRoot":"","sources":["../../../src/core/components/table-v3.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"table-v3.js","sourceRoot":"","sources":["../../../src/core/components/table-v3.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,12 +8,12 @@ export type OverflowBehavior = 'wrap' | 'truncate';
|
|
|
8
8
|
*/
|
|
9
9
|
export interface BijouNodeOptions {
|
|
10
10
|
/** Unique identifier for the component. Used for CSS styling (#id) and layout tracking. */
|
|
11
|
-
id?: string;
|
|
11
|
+
readonly id?: string;
|
|
12
12
|
/** CSS class name(s) for the component. Space-separated. */
|
|
13
|
-
class?: string;
|
|
13
|
+
readonly class?: string;
|
|
14
14
|
/** Optional Bijou context. If omitted, the global default context is used. */
|
|
15
|
-
ctx?: BijouContext;
|
|
15
|
+
readonly ctx?: BijouContext;
|
|
16
16
|
/** Horizontal overflow behavior for constrained text content. Defaults to `'wrap'`. */
|
|
17
|
-
overflow?: OverflowBehavior;
|
|
17
|
+
readonly overflow?: OverflowBehavior;
|
|
18
18
|
}
|
|
19
19
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/components/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAE3D,0DAA0D;AAC1D,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,UAAU,CAAC;AAEnD;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,2FAA2F;IAC3F,EAAE,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/components/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAE3D,0DAA0D;AAC1D,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,UAAU,CAAC;AAEnD;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,2FAA2F;IAC3F,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IACrB,4DAA4D;IAC5D,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,8EAA8E;IAC9E,QAAQ,CAAC,GAAG,CAAC,EAAE,YAAY,CAAC;IAC5B,uFAAuF;IACvF,QAAQ,CAAC,QAAQ,CAAC,EAAE,gBAAgB,CAAC;CACtC"}
|
|
@@ -40,10 +40,21 @@ export declare function isSameCell(a: Cell, b: Cell): boolean;
|
|
|
40
40
|
* 2. Minimizes CUP (move cursor) commands by detecting contiguous changes.
|
|
41
41
|
* 3. Batches cells with identical styles to minimize SGR codes and keep strings contiguous.
|
|
42
42
|
*
|
|
43
|
+
* When both surfaces are {@link PackedSurface}, the caller owns a pooled
|
|
44
|
+
* `outBuf`, and the IO port implements {@link WritePort.writeBytes}, the
|
|
45
|
+
* composed frame is UTF-8 encoded into the supplied buffer once and
|
|
46
|
+
* handed off via `writeBytes` instead of `write(string)`. This lets the
|
|
47
|
+
* TUI runtime own the output allocation and bypass the implicit
|
|
48
|
+
* string→UTF-8 conversion inside the underlying stream.
|
|
49
|
+
*
|
|
50
|
+
* Callers without an `outBuf` (tests, bench scenarios, simple drivers)
|
|
51
|
+
* fall through to the legacy `io.write(string)` path with no overhead.
|
|
52
|
+
*
|
|
43
53
|
* @param current - The surface currently on the terminal.
|
|
44
54
|
* @param target - The desired surface state.
|
|
45
55
|
* @param io - The port to write ANSI codes to.
|
|
46
56
|
* @param style - The port to resolve cell styling.
|
|
57
|
+
* @param outBuf - Optional pooled byte buffer for the packed byte path.
|
|
47
58
|
*/
|
|
48
|
-
export declare function renderDiff(current: Surface, target: Surface, io: WritePort, style: StylePort): void;
|
|
59
|
+
export declare function renderDiff(current: Surface, target: Surface, io: WritePort, style: StylePort, outBuf?: Uint8Array): void;
|
|
49
60
|
//# sourceMappingURL=differ.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"differ.d.ts","sourceRoot":"","sources":["../../../src/core/render/differ.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,OAAO,
|
|
1
|
+
{"version":3,"file":"differ.d.ts","sourceRoot":"","sources":["../../../src/core/render/differ.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,OAAO,EAAsB,KAAK,IAAI,EAAE,KAAK,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACrH,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AA0BjE;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAgBpF;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAqFvF;AAkCD;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,GAAG,MAAM,CAgB1E;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,GAAG,IAAI,CAQvE;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,GAAG,OAAO,CAkBpD;AAUD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,UAAU,CACxB,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,OAAO,EACf,EAAE,EAAE,SAAS,EACb,KAAK,EAAE,SAAS,EAChB,MAAM,CAAC,EAAE,UAAU,GAClB,IAAI,CAON"}
|