@flyingrobots/bijou 0.9.0 → 0.10.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.
@@ -8,6 +8,8 @@ export interface BoxOptions {
8
8
  left?: number;
9
9
  right?: number;
10
10
  };
11
+ /** Lock outer width (including borders). Content is clipped/padded to fit. */
12
+ width?: number;
11
13
  ctx?: BijouContext;
12
14
  }
13
15
  export declare function box(content: string, options?: BoxOptions): string;
@@ -1 +1 @@
1
- {"version":3,"file":"box.d.ts","sourceRoot":"","sources":["../../../src/core/components/box.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGrD,MAAM,WAAW,UAAU;IACzB,WAAW,CAAC,EAAE,UAAU,CAAC;IACzB,OAAO,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3E,GAAG,CAAC,EAAE,YAAY,CAAC;CACpB;AAgDD,wBAAgB,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,UAAe,GAAG,MAAM,CAmBrE;AAED,MAAM,WAAW,gBAAiB,SAAQ,UAAU;IAClD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,gBAAqB,GAAG,MAAM,CAkB/E"}
1
+ {"version":3,"file":"box.d.ts","sourceRoot":"","sources":["../../../src/core/components/box.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAKrD,MAAM,WAAW,UAAU;IACzB,WAAW,CAAC,EAAE,UAAU,CAAC;IACzB,OAAO,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3E,8EAA8E;IAC9E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,YAAY,CAAC;CACpB;AA8DD,wBAAgB,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,UAAe,GAAG,MAAM,CAmBrE;AAED,MAAM,WAAW,gBAAiB,SAAQ,UAAU;IAClD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,gBAAqB,GAAG,MAAM,CAkB/E"}
@@ -1,21 +1,35 @@
1
1
  import { getDefaultContext } from '../../context.js';
2
+ import { graphemeWidth } from '../text/grapheme.js';
3
+ import { clipToWidth } from '../text/clip.js';
2
4
  const BORDER = { tl: '\u250c', tr: '\u2510', bl: '\u2514', br: '\u2518', h: '\u2500', v: '\u2502' };
3
- function stripAnsi(str) {
4
- // eslint-disable-next-line no-control-regex
5
- return str.replace(/\x1b\[[0-9;]*m/g, '');
6
- }
7
- function visibleLength(str) {
8
- return stripAnsi(str).length;
9
- }
10
- function drawBox(content, borderColor, padding) {
5
+ function drawBox(content, borderColor, padding, fixedWidth) {
11
6
  const contentLines = content.split('\n');
12
- const maxWidth = contentLines.reduce((max, line) => Math.max(max, visibleLength(line)), 0);
13
- const innerWidth = maxWidth + padding.left + padding.right;
7
+ let innerWidth;
8
+ let contentWidth;
9
+ if (fixedWidth !== undefined) {
10
+ // Fixed outer width: outer = border(1) + inner + border(1)
11
+ innerWidth = Math.max(0, fixedWidth - 2);
12
+ contentWidth = Math.max(0, innerWidth - padding.left - padding.right);
13
+ }
14
+ else {
15
+ // Auto width: measure content
16
+ const maxWidth = contentLines.reduce((max, line) => Math.max(max, graphemeWidth(line)), 0);
17
+ contentWidth = maxWidth;
18
+ innerWidth = maxWidth + padding.left + padding.right;
19
+ }
20
+ // When fixed width, padding may exceed innerWidth — clamp to fit
21
+ const effectiveLeft = fixedWidth !== undefined ? Math.min(padding.left, innerWidth) : padding.left;
22
+ const effectiveRight = fixedWidth !== undefined ? Math.min(padding.right, Math.max(0, innerWidth - effectiveLeft)) : padding.right;
14
23
  const pad = (line) => {
15
- const visible = visibleLength(line);
16
- const leftPad = ' '.repeat(padding.left);
17
- const rightPad = ' '.repeat(padding.right + (maxWidth - visible));
18
- return leftPad + line + rightPad;
24
+ const visible = graphemeWidth(line);
25
+ let processed = line;
26
+ if (visible > contentWidth) {
27
+ processed = clipToWidth(line, contentWidth);
28
+ }
29
+ const processedVisible = graphemeWidth(processed);
30
+ const leftPad = ' '.repeat(effectiveLeft);
31
+ const rightPad = ' '.repeat(effectiveRight + Math.max(0, contentWidth - processedVisible));
32
+ return leftPad + processed + rightPad;
19
33
  };
20
34
  const top = borderColor(BORDER.tl + BORDER.h.repeat(innerWidth) + BORDER.tr);
21
35
  const bottom = borderColor(BORDER.bl + BORDER.h.repeat(innerWidth) + BORDER.br);
@@ -50,7 +64,7 @@ export function box(content, options = {}) {
50
64
  right: options.padding?.right ?? 1,
51
65
  };
52
66
  const colorize = (s) => ctx.style.styled(borderToken, s);
53
- return drawBox(content, colorize, padding);
67
+ return drawBox(content, colorize, padding, options.width);
54
68
  }
55
69
  export function headerBox(label, options = {}) {
56
70
  const ctx = resolveCtx(options.ctx);
@@ -1 +1 @@
1
- {"version":3,"file":"box.js","sourceRoot":"","sources":["../../../src/core/components/box.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"box.js","sourceRoot":"","sources":["../../../src/core/components/box.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAU9C,MAAM,MAAM,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC;AAEpG,SAAS,OAAO,CACd,OAAe,EACf,WAAkC,EAClC,OAAqE,EACrE,UAAmB;IAEnB,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAEzC,IAAI,UAAkB,CAAC;IACvB,IAAI,YAAoB,CAAC;IAEzB,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC7B,2DAA2D;QAC3D,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,CAAC,CAAC,CAAC;QACzC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IACxE,CAAC;SAAM,CAAC;QACN,8BAA8B;QAC9B,MAAM,QAAQ,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3F,YAAY,GAAG,QAAQ,CAAC;QACxB,UAAU,GAAG,QAAQ,GAAG,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC;IACvD,CAAC;IAED,iEAAiE;IACjE,MAAM,aAAa,GAAG,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;IACnG,MAAM,cAAc,GAAG,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;IAEnI,MAAM,GAAG,GAAG,CAAC,IAAY,EAAU,EAAE;QACnC,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,SAAS,GAAG,IAAI,CAAC;QACrB,IAAI,OAAO,GAAG,YAAY,EAAE,CAAC;YAC3B,SAAS,GAAG,WAAW,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QAC9C,CAAC;QACD,MAAM,gBAAgB,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;QAClD,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QAC1C,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,GAAG,gBAAgB,CAAC,CAAC,CAAC;QAC3F,OAAO,OAAO,GAAG,SAAS,GAAG,QAAQ,CAAC;IACxC,CAAC,CAAC;IAEF,MAAM,GAAG,GAAG,WAAW,CAAC,MAAM,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;IAC7E,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;IAChF,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAEzF,MAAM,KAAK,GAAa,CAAC,GAAG,CAAC,CAAC;IAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE;QAAE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC5D,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACxE,CAAC;IACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE;QAAE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC/D,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAEnB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,UAAU,CAAC,GAAkB;IACpC,IAAI,GAAG;QAAE,OAAO,GAAG,CAAC;IACpB,OAAO,iBAAiB,EAAE,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,GAAG,CAAC,OAAe,EAAE,UAAsB,EAAE;IAC3D,MAAM,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACpC,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;IAEtB,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC;QAC7C,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC;IAC1E,MAAM,OAAO,GAAG;QACd,GAAG,EAAE,OAAO,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC;QAC9B,MAAM,EAAE,OAAO,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC;QACpC,IAAI,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC;QAChC,KAAK,EAAE,OAAO,CAAC,OAAO,EAAE,KAAK,IAAI,CAAC;KACnC,CAAC;IAEF,MAAM,QAAQ,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IAEzE,OAAO,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;AAC5D,CAAC;AAOD,MAAM,UAAU,SAAS,CAAC,KAAa,EAAE,UAA4B,EAAE;IACrE,MAAM,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACpC,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;IACtB,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC;IAEpC,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QACpB,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;IAChD,CAAC;IACD,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC;QAC1B,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;IAChD,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;IAC1E,MAAM,OAAO,GAAG,MAAM;QACpB,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,MAAM,EAAE,CAAC;QACvG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IAExC,OAAO,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAC/B,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Grapheme-aware text clipping for terminal display.
3
+ *
4
+ * Clips a string to a maximum visible width, preserving ANSI escapes.
5
+ * Won't split multi-codepoint grapheme clusters (emoji, CJK, ZWJ sequences).
6
+ */
7
+ /**
8
+ * Clip a string to a maximum visible width, preserving ANSI escapes.
9
+ * Grapheme-cluster aware: won't split multi-codepoint sequences.
10
+ * Appends a reset sequence if the string was clipped mid-style.
11
+ *
12
+ * O(n): pre-segments stripped text once, then walks the original string
13
+ * with a grapheme pointer instead of re-segmenting per character.
14
+ */
15
+ export declare function clipToWidth(str: string, maxWidth: number): string;
16
+ //# sourceMappingURL=clip.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clip.d.ts","sourceRoot":"","sources":["../../../src/core/text/clip.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAsDjE"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Grapheme-aware text clipping for terminal display.
3
+ *
4
+ * Clips a string to a maximum visible width, preserving ANSI escapes.
5
+ * Won't split multi-codepoint grapheme clusters (emoji, CJK, ZWJ sequences).
6
+ */
7
+ import { segmentGraphemes, graphemeClusterWidth } from './grapheme.js';
8
+ // eslint-disable-next-line no-control-regex
9
+ const ANSI_RE = /\x1b\[[0-9;]*m/g;
10
+ /**
11
+ * Clip a string to a maximum visible width, preserving ANSI escapes.
12
+ * Grapheme-cluster aware: won't split multi-codepoint sequences.
13
+ * Appends a reset sequence if the string was clipped mid-style.
14
+ *
15
+ * O(n): pre-segments stripped text once, then walks the original string
16
+ * with a grapheme pointer instead of re-segmenting per character.
17
+ */
18
+ export function clipToWidth(str, maxWidth) {
19
+ if (maxWidth <= 0)
20
+ return '';
21
+ const stripped = str.replace(ANSI_RE, '');
22
+ const graphemes = segmentGraphemes(stripped);
23
+ let result = '';
24
+ let visible = 0;
25
+ let inEscape = false;
26
+ let escBuf = '';
27
+ let hasStyle = false;
28
+ let gi = 0;
29
+ let i = 0;
30
+ while (i < str.length) {
31
+ const ch = str[i];
32
+ if (ch === '\x1b') {
33
+ inEscape = true;
34
+ escBuf = ch;
35
+ i++;
36
+ continue;
37
+ }
38
+ if (inEscape) {
39
+ escBuf += ch;
40
+ if (ch === 'm') {
41
+ inEscape = false;
42
+ result += escBuf;
43
+ escBuf = '';
44
+ hasStyle = true;
45
+ }
46
+ i++;
47
+ continue;
48
+ }
49
+ // Visible character — consume next pre-segmented grapheme
50
+ if (gi >= graphemes.length)
51
+ break;
52
+ const grapheme = graphemes[gi];
53
+ const gWidth = graphemeClusterWidth(grapheme);
54
+ if (visible + gWidth > maxWidth) {
55
+ if (hasStyle)
56
+ result += '\x1b[0m';
57
+ break;
58
+ }
59
+ result += grapheme;
60
+ visible += gWidth;
61
+ gi++;
62
+ i += grapheme.length;
63
+ }
64
+ return result;
65
+ }
66
+ //# sourceMappingURL=clip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clip.js","sourceRoot":"","sources":["../../../src/core/text/clip.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAEvE,4CAA4C;AAC5C,MAAM,OAAO,GAAG,iBAAiB,CAAC;AAElC;;;;;;;GAOG;AACH,MAAM,UAAU,WAAW,CAAC,GAAW,EAAE,QAAgB;IACvD,IAAI,QAAQ,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IAE7B,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC1C,MAAM,SAAS,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAE7C,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,IAAI,CAAC,GAAG,CAAC,CAAC;IAEV,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;QACtB,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAE,CAAC;QAEnB,IAAI,EAAE,KAAK,MAAM,EAAE,CAAC;YAClB,QAAQ,GAAG,IAAI,CAAC;YAChB,MAAM,GAAG,EAAE,CAAC;YACZ,CAAC,EAAE,CAAC;YACJ,SAAS;QACX,CAAC;QAED,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,IAAI,EAAE,CAAC;YACb,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;gBACf,QAAQ,GAAG,KAAK,CAAC;gBACjB,MAAM,IAAI,MAAM,CAAC;gBACjB,MAAM,GAAG,EAAE,CAAC;gBACZ,QAAQ,GAAG,IAAI,CAAC;YAClB,CAAC;YACD,CAAC,EAAE,CAAC;YACJ,SAAS;QACX,CAAC;QAED,0DAA0D;QAC1D,IAAI,EAAE,IAAI,SAAS,CAAC,MAAM;YAAE,MAAM;QAElC,MAAM,QAAQ,GAAG,SAAS,CAAC,EAAE,CAAE,CAAC;QAChC,MAAM,MAAM,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QAE9C,IAAI,OAAO,GAAG,MAAM,GAAG,QAAQ,EAAE,CAAC;YAChC,IAAI,QAAQ;gBAAE,MAAM,IAAI,SAAS,CAAC;YAClC,MAAM;QACR,CAAC;QAED,MAAM,IAAI,QAAQ,CAAC;QACnB,OAAO,IAAI,MAAM,CAAC;QAClB,EAAE,EAAE,CAAC;QACL,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC;IACvB,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -1,2 +1,3 @@
1
1
  export { isWideChar, segmentGraphemes, graphemeClusterWidth, graphemeWidth, } from './grapheme.js';
2
+ export { clipToWidth } from './clip.js';
2
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/text/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,oBAAoB,EACpB,aAAa,GACd,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/text/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,oBAAoB,EACpB,aAAa,GACd,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC"}
@@ -1,2 +1,3 @@
1
1
  export { isWideChar, segmentGraphemes, graphemeClusterWidth, graphemeWidth, } from './grapheme.js';
2
+ export { clipToWidth } from './clip.js';
2
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/text/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,oBAAoB,EACpB,aAAa,GACd,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/text/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,oBAAoB,EACpB,aAAa,GACd,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC"}
package/dist/index.d.ts CHANGED
@@ -2,7 +2,7 @@ export type { RuntimePort, IOPort, RawInputHandle, TimerHandle, StylePort, Bijou
2
2
  export { getDefaultContext, setDefaultContext, _resetDefaultContextForTesting, } from './context.js';
3
3
  export { createBijou, type CreateBijouOptions } from './factory.js';
4
4
  export { type RGB, type GradientStop, type TextModifier, type TokenValue, type InkColor, type BaseStatusKey, type BaseUiKey, type BaseGradientKey, type Theme, CYAN_MAGENTA, TEAL_ORANGE_PINK, PRESETS, tv, styled, styledStatus, extendTheme, lerp3, gradientText, type GradientTextOptions, isNoColor, getTheme, resolveTheme, _resetThemeForTesting, createThemeResolver, createResolved, type ResolvedTheme, type ThemeResolver, type ThemeResolverOptions, fromDTCG, toDTCG, type DTCGDocument, type DTCGToken, type DTCGGroup, rgbToAnsi256, nearestAnsi256, rgbToAnsi16, ansi256ToAnsi16, type ColorLevel, hexToRgb, rgbToHex, lighten, darken, mix, complementary, saturate, desaturate, } from './core/theme/index.js';
5
- export { isWideChar, segmentGraphemes, graphemeClusterWidth, graphemeWidth, } from './core/text/index.js';
5
+ export { isWideChar, segmentGraphemes, graphemeClusterWidth, graphemeWidth, clipToWidth, } from './core/text/index.js';
6
6
  export { detectOutputMode, type OutputMode } from './core/detect/index.js';
7
7
  export { spinnerFrame, createSpinner, type SpinnerOptions, type SpinnerController, progressBar, createProgressBar, createAnimatedProgressBar, type ProgressBarOptions, type LiveProgressBarOptions, type AnimatedProgressBarOptions, type ProgressBarController, table, type TableColumn, type TableOptions, box, headerBox, type BoxOptions, type HeaderBoxOptions, selectLogoSize, loadRandomLogo, type LogoSize, type LogoResult, type LogoConstraints, type LogoOptions, separator, type SeparatorOptions, badge, type BadgeVariant, type BadgeOptions, alert, type AlertVariant, type AlertOptions, skeleton, type SkeletonOptions, kbd, type KbdOptions, tree, type TreeNode, type TreeOptions, accordion, type AccordionSection, type AccordionOptions, timeline, type TimelineEvent, type TimelineOptions, tabs, type TabItem, type TabsOptions, breadcrumb, type BreadcrumbOptions, paginator, type PaginatorOptions, stepper, type StepperStep, type StepperOptions, dag, dagSlice, dagLayout, type DagNode, type DagOptions, type DagNodePosition, type DagLayout, arraySource, isDagSource, isSlicedDagSource, type DagSource, type SlicedDagSource, type DagSliceOptions, dagStats, type DagStats, enumeratedList, type BulletStyle, type EnumeratedListOptions, hyperlink, type HyperlinkOptions, log, type LogLevel, type LogOptions, markdown, type MarkdownOptions, } from './core/components/index.js';
8
8
  export { type ValidationResult, type Validator, type FieldOptions, type SelectOption, type SelectFieldOptions, type ConfirmFieldOptions, type GroupFieldResult, type InputOptions, input, select, multiselect, confirm, group, textarea, type TextareaOptions, filter, type FilterOption, type FilterOptions, wizard, type WizardStep, type WizardOptions, } from './core/forms/index.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -21,7 +21,7 @@ rgbToAnsi256, nearestAnsi256, rgbToAnsi16, ansi256ToAnsi16,
21
21
  // Color manipulation
22
22
  hexToRgb, rgbToHex, lighten, darken, mix, complementary, saturate, desaturate, } from './core/theme/index.js';
23
23
  // Text / grapheme utilities
24
- export { isWideChar, segmentGraphemes, graphemeClusterWidth, graphemeWidth, } from './core/text/index.js';
24
+ export { isWideChar, segmentGraphemes, graphemeClusterWidth, graphemeWidth, clipToWidth, } from './core/text/index.js';
25
25
  // Detection
26
26
  export { detectOutputMode } from './core/detect/index.js';
27
27
  // Components
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAUA,UAAU;AACV,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,8BAA8B,GAC/B,MAAM,cAAc,CAAC;AAEtB,UAAU;AACV,OAAO,EAAE,WAAW,EAA2B,MAAM,cAAc,CAAC;AAEpE,eAAe;AACf,OAAO;AAWL,UAAU;AACV,YAAY,EACZ,gBAAgB,EAChB,OAAO,EACP,EAAE;AACF,8BAA8B;AAC9B,MAAM,EACN,YAAY;AACZ,kBAAkB;AAClB,WAAW;AACX,WAAW;AACX,KAAK,EACL,YAAY;AAGZ,WAAW;AACX,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,qBAAqB,EACrB,mBAAmB,EACnB,cAAc;AAId,eAAe;AACf,QAAQ,EACR,MAAM;AAIN,qBAAqB;AACrB,YAAY,EACZ,cAAc,EACd,WAAW,EACX,eAAe;AAEf,qBAAqB;AACrB,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,MAAM,EACN,GAAG,EACH,aAAa,EACb,QAAQ,EACR,UAAU,GACX,MAAM,uBAAuB,CAAC;AAE/B,4BAA4B;AAC5B,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,oBAAoB,EACpB,aAAa,GACd,MAAM,sBAAsB,CAAC;AAE9B,YAAY;AACZ,OAAO,EAAE,gBAAgB,EAAmB,MAAM,wBAAwB,CAAC;AAE3E,aAAa;AACb,OAAO,EACL,YAAY,EACZ,aAAa,EAGb,WAAW,EACX,iBAAiB,EACjB,yBAAyB,EAKzB,KAAK,EAGL,GAAG,EACH,SAAS,EAGT,cAAc,EACd,cAAc,EAKd,SAAS,EAET,KAAK,EAGL,KAAK,EAGL,QAAQ,EAER,GAAG,EAEH,IAAI,EAGJ,SAAS,EAGT,QAAQ,EAGR,IAAI,EAGJ,UAAU,EAEV,SAAS,EAET,OAAO,EAGP,GAAG,EACH,QAAQ,EACR,SAAS,EAKT,WAAW,EACX,WAAW,EACX,iBAAiB,EAIjB,QAAQ,EAER,cAAc,EAGd,SAAS,EAET,GAAG,EAGH,QAAQ,GAET,MAAM,4BAA4B,CAAC;AAEpC,QAAQ;AACR,OAAO,EASL,KAAK,EACL,MAAM,EACN,WAAW,EACX,OAAO,EACP,KAAK,EACL,QAAQ,EAER,MAAM,EAGN,MAAM,GAGP,MAAM,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAUA,UAAU;AACV,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,8BAA8B,GAC/B,MAAM,cAAc,CAAC;AAEtB,UAAU;AACV,OAAO,EAAE,WAAW,EAA2B,MAAM,cAAc,CAAC;AAEpE,eAAe;AACf,OAAO;AAWL,UAAU;AACV,YAAY,EACZ,gBAAgB,EAChB,OAAO,EACP,EAAE;AACF,8BAA8B;AAC9B,MAAM,EACN,YAAY;AACZ,kBAAkB;AAClB,WAAW;AACX,WAAW;AACX,KAAK,EACL,YAAY;AAGZ,WAAW;AACX,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,qBAAqB,EACrB,mBAAmB,EACnB,cAAc;AAId,eAAe;AACf,QAAQ,EACR,MAAM;AAIN,qBAAqB;AACrB,YAAY,EACZ,cAAc,EACd,WAAW,EACX,eAAe;AAEf,qBAAqB;AACrB,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,MAAM,EACN,GAAG,EACH,aAAa,EACb,QAAQ,EACR,UAAU,GACX,MAAM,uBAAuB,CAAC;AAE/B,4BAA4B;AAC5B,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,oBAAoB,EACpB,aAAa,EACb,WAAW,GACZ,MAAM,sBAAsB,CAAC;AAE9B,YAAY;AACZ,OAAO,EAAE,gBAAgB,EAAmB,MAAM,wBAAwB,CAAC;AAE3E,aAAa;AACb,OAAO,EACL,YAAY,EACZ,aAAa,EAGb,WAAW,EACX,iBAAiB,EACjB,yBAAyB,EAKzB,KAAK,EAGL,GAAG,EACH,SAAS,EAGT,cAAc,EACd,cAAc,EAKd,SAAS,EAET,KAAK,EAGL,KAAK,EAGL,QAAQ,EAER,GAAG,EAEH,IAAI,EAGJ,SAAS,EAGT,QAAQ,EAGR,IAAI,EAGJ,UAAU,EAEV,SAAS,EAET,OAAO,EAGP,GAAG,EACH,QAAQ,EACR,SAAS,EAKT,WAAW,EACX,WAAW,EACX,iBAAiB,EAIjB,QAAQ,EAER,cAAc,EAGd,SAAS,EAET,GAAG,EAGH,QAAQ,GAET,MAAM,4BAA4B,CAAC;AAEpC,QAAQ;AACR,OAAO,EASL,KAAK,EACL,MAAM,EACN,WAAW,EACX,OAAO,EACP,KAAK,EACL,QAAQ,EAER,MAAM,EAGN,MAAM,GAGP,MAAM,uBAAuB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flyingrobots/bijou",
3
- "version": "0.9.0",
3
+ "version": "0.10.0",
4
4
  "description": "Themed terminal components for CLIs, loggers, and scripts — graceful degradation included.",
5
5
  "type": "module",
6
6
  "sideEffects": false,