@flyingrobots/bijou 1.1.0 → 1.2.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.
Files changed (43) hide show
  1. package/dist/core/components/dag-edges.d.ts +78 -0
  2. package/dist/core/components/dag-edges.d.ts.map +1 -0
  3. package/dist/core/components/dag-edges.js +127 -0
  4. package/dist/core/components/dag-edges.js.map +1 -0
  5. package/dist/core/components/dag-layout.d.ts +37 -0
  6. package/dist/core/components/dag-layout.d.ts.map +1 -0
  7. package/dist/core/components/dag-layout.js +172 -0
  8. package/dist/core/components/dag-layout.js.map +1 -0
  9. package/dist/core/components/dag-render.d.ts +51 -0
  10. package/dist/core/components/dag-render.d.ts.map +1 -0
  11. package/dist/core/components/dag-render.js +440 -0
  12. package/dist/core/components/dag-render.js.map +1 -0
  13. package/dist/core/components/dag.d.ts.map +1 -1
  14. package/dist/core/components/dag.js +3 -648
  15. package/dist/core/components/dag.js.map +1 -1
  16. package/dist/core/components/markdown-parse.d.ts +69 -0
  17. package/dist/core/components/markdown-parse.d.ts.map +1 -0
  18. package/dist/core/components/markdown-parse.js +272 -0
  19. package/dist/core/components/markdown-parse.js.map +1 -0
  20. package/dist/core/components/markdown-render.d.ts +20 -0
  21. package/dist/core/components/markdown-render.d.ts.map +1 -0
  22. package/dist/core/components/markdown-render.js +135 -0
  23. package/dist/core/components/markdown-render.js.map +1 -0
  24. package/dist/core/components/markdown.d.ts.map +1 -1
  25. package/dist/core/components/markdown.js +6 -371
  26. package/dist/core/components/markdown.js.map +1 -1
  27. package/dist/core/forms/filter-interactive.d.ts +66 -0
  28. package/dist/core/forms/filter-interactive.d.ts.map +1 -0
  29. package/dist/core/forms/filter-interactive.js +241 -0
  30. package/dist/core/forms/filter-interactive.js.map +1 -0
  31. package/dist/core/forms/filter.d.ts +2 -32
  32. package/dist/core/forms/filter.d.ts.map +1 -1
  33. package/dist/core/forms/filter.js +2 -167
  34. package/dist/core/forms/filter.js.map +1 -1
  35. package/dist/core/forms/textarea-editor.d.ts +39 -0
  36. package/dist/core/forms/textarea-editor.d.ts.map +1 -0
  37. package/dist/core/forms/textarea-editor.js +210 -0
  38. package/dist/core/forms/textarea-editor.js.map +1 -0
  39. package/dist/core/forms/textarea.d.ts +2 -19
  40. package/dist/core/forms/textarea.d.ts.map +1 -1
  41. package/dist/core/forms/textarea.js +2 -195
  42. package/dist/core/forms/textarea.js.map +1 -1
  43. package/package.json +1 -1
@@ -0,0 +1,210 @@
1
+ /**
2
+ * Interactive textarea editor state machine.
3
+ *
4
+ * Renders a scrollable multi-line editor with cursor navigation,
5
+ * optional line numbers, placeholder text, and max-length guard.
6
+ * Ctrl+D submits; Ctrl+C or Escape cancels.
7
+ */
8
+ import { formatFormTitle, terminalRenderer, createStyledFn } from './form-utils.js';
9
+ /**
10
+ * Render a full interactive textarea editor using raw terminal input.
11
+ *
12
+ * Supports arrow-key cursor movement, scrolling, line wrapping,
13
+ * optional line numbers, placeholder text, and a max-length guard.
14
+ * Ctrl+D submits; Ctrl+C or Escape cancels.
15
+ *
16
+ * @param options - Textarea field configuration.
17
+ * @param ctx - Bijou context.
18
+ * @returns The entered text (newline-joined), or the default value on cancel.
19
+ */
20
+ export async function interactiveTextarea(options, ctx) {
21
+ const t = ctx.theme;
22
+ const styledFn = createStyledFn(ctx);
23
+ const height = options.height ?? 6;
24
+ const renderWidth = options.width ?? 80;
25
+ const showLineNumbers = options.showLineNumbers ?? false;
26
+ const term = terminalRenderer(ctx);
27
+ let lines = [''];
28
+ let cursorRow = 0;
29
+ let cursorCol = 0;
30
+ let scrollY = 0;
31
+ let totalLength = 0; // running counter for lines.join('\n').length
32
+ function visibleLines() {
33
+ return lines.slice(scrollY, scrollY + height);
34
+ }
35
+ function ensureCursorVisible() {
36
+ if (cursorRow < scrollY)
37
+ scrollY = cursorRow;
38
+ if (cursorRow >= scrollY + height)
39
+ scrollY = cursorRow - height + 1;
40
+ }
41
+ function render() {
42
+ const label = formatFormTitle(options.title, ctx);
43
+ const hint = styledFn(t.theme.semantic.muted, ' (Ctrl+D to submit, Ctrl+C/Esc to cancel)');
44
+ term.writeLine(`${label}${hint}`);
45
+ const vis = visibleLines();
46
+ const numWidth = showLineNumbers ? String(lines.length).length : 0;
47
+ const prefixWidth = showLineNumbers ? numWidth + 3 : 2; // " N │ " or " "
48
+ const contentWidth = Math.max(1, renderWidth - prefixWidth);
49
+ for (let i = 0; i < height; i++) {
50
+ const lineIdx = scrollY + i;
51
+ const rawLine = vis[i] ?? '';
52
+ const line = rawLine.length > contentWidth ? rawLine.slice(0, contentWidth) : rawLine;
53
+ const prefix = showLineNumbers
54
+ ? styledFn(t.theme.semantic.muted, `${String(lineIdx + 1).padStart(numWidth)} │ `)
55
+ : ' ';
56
+ if (lineIdx === 0 && options.placeholder && lines.length === 1 && lines[0] === '') {
57
+ ctx.io.write(`\x1b[K${prefix}${styledFn(t.theme.semantic.muted, options.placeholder)}\n`);
58
+ }
59
+ else {
60
+ ctx.io.write(`\x1b[K${prefix}${line}\n`);
61
+ }
62
+ }
63
+ // Status line
64
+ const pos = `Ln ${cursorRow + 1}, Col ${cursorCol + 1}`;
65
+ const lenInfo = options.maxLength != null ? ` | ${totalLength}/${options.maxLength}` : '';
66
+ ctx.io.write(`\x1b[K${styledFn(t.theme.semantic.muted, pos + lenInfo)}\n`);
67
+ }
68
+ function clearRender() {
69
+ const totalLines = height + 2; // header + visible lines + status
70
+ term.moveUp(totalLines);
71
+ }
72
+ function cleanup(value, cancelled) {
73
+ clearRender();
74
+ const totalLines = height + 2;
75
+ term.clearBlock(totalLines);
76
+ const summary = cancelled
77
+ ? '(cancelled)'
78
+ : (value
79
+ ? (value.includes('\n') ? `${value.split('\n').length} lines` : value)
80
+ : '(empty)');
81
+ const label = formatFormTitle(options.title, ctx) + ' ' + styledFn(t.theme.semantic.info, summary);
82
+ ctx.io.write(`\x1b[K${label}\n`);
83
+ term.showCursor();
84
+ }
85
+ term.hideCursor();
86
+ render();
87
+ return new Promise((resolve) => {
88
+ const handle = ctx.io.rawInput((key) => {
89
+ if (key === '\x04') {
90
+ // Ctrl+D — submit
91
+ handle.dispose();
92
+ const text = lines.join('\n');
93
+ const value = text || (options.defaultValue ?? '');
94
+ cleanup(value, false);
95
+ resolve(value);
96
+ return;
97
+ }
98
+ if (key === '\x03' || key === '\x1b') {
99
+ // Ctrl+C or Escape — cancel
100
+ // TODO: bare \x1b may false-trigger on slow connections where escape
101
+ // sequences arrive as separate bytes. Timer-based disambiguation is a
102
+ // shared debt with filter-interactive.ts — unify in a future PR.
103
+ handle.dispose();
104
+ const value = options.defaultValue ?? '';
105
+ cleanup(value, true);
106
+ resolve(value);
107
+ return;
108
+ }
109
+ if (key === '\r' || key === '\n') {
110
+ // Enter — newline (counts as 1 character for maxLength)
111
+ if (options.maxLength != null && totalLength >= options.maxLength)
112
+ return;
113
+ const currentLine = lines[cursorRow];
114
+ const before = currentLine.slice(0, cursorCol);
115
+ const after = currentLine.slice(cursorCol);
116
+ lines[cursorRow] = before;
117
+ lines.splice(cursorRow + 1, 0, after);
118
+ totalLength++; // newline character
119
+ cursorRow++;
120
+ cursorCol = 0;
121
+ ensureCursorVisible();
122
+ clearRender();
123
+ render();
124
+ return;
125
+ }
126
+ if (key === '\x7f' || key === '\b') {
127
+ // Backspace
128
+ if (cursorCol > 0) {
129
+ const line = lines[cursorRow];
130
+ lines[cursorRow] = line.slice(0, cursorCol - 1) + line.slice(cursorCol);
131
+ cursorCol--;
132
+ totalLength--; // removed one character
133
+ }
134
+ else if (cursorRow > 0) {
135
+ // Merge with previous line
136
+ const prevLine = lines[cursorRow - 1];
137
+ const currentLine = lines[cursorRow];
138
+ cursorCol = prevLine.length;
139
+ lines[cursorRow - 1] = prevLine + currentLine;
140
+ lines.splice(cursorRow, 1);
141
+ cursorRow--;
142
+ totalLength--; // removed newline character
143
+ ensureCursorVisible();
144
+ }
145
+ clearRender();
146
+ render();
147
+ return;
148
+ }
149
+ // Arrow keys
150
+ if (key === '\x1b[A') { // Up
151
+ if (cursorRow > 0) {
152
+ cursorRow--;
153
+ cursorCol = Math.min(cursorCol, lines[cursorRow].length);
154
+ ensureCursorVisible();
155
+ }
156
+ clearRender();
157
+ render();
158
+ return;
159
+ }
160
+ if (key === '\x1b[B') { // Down
161
+ if (cursorRow < lines.length - 1) {
162
+ cursorRow++;
163
+ cursorCol = Math.min(cursorCol, lines[cursorRow].length);
164
+ ensureCursorVisible();
165
+ }
166
+ clearRender();
167
+ render();
168
+ return;
169
+ }
170
+ if (key === '\x1b[C') { // Right
171
+ if (cursorCol < lines[cursorRow].length) {
172
+ cursorCol++;
173
+ }
174
+ else if (cursorRow < lines.length - 1) {
175
+ cursorRow++;
176
+ cursorCol = 0;
177
+ ensureCursorVisible();
178
+ }
179
+ clearRender();
180
+ render();
181
+ return;
182
+ }
183
+ if (key === '\x1b[D') { // Left
184
+ if (cursorCol > 0) {
185
+ cursorCol--;
186
+ }
187
+ else if (cursorRow > 0) {
188
+ cursorRow--;
189
+ cursorCol = lines[cursorRow].length;
190
+ ensureCursorVisible();
191
+ }
192
+ clearRender();
193
+ render();
194
+ return;
195
+ }
196
+ // Printable character
197
+ if (key.length === 1 && key >= ' ') {
198
+ if (options.maxLength != null && totalLength >= options.maxLength)
199
+ return;
200
+ const line = lines[cursorRow];
201
+ lines[cursorRow] = line.slice(0, cursorCol) + key + line.slice(cursorCol);
202
+ cursorCol++;
203
+ totalLength++; // added one character
204
+ clearRender();
205
+ render();
206
+ }
207
+ });
208
+ });
209
+ }
210
+ //# sourceMappingURL=textarea-editor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"textarea-editor.js","sourceRoot":"","sources":["../../../src/core/forms/textarea-editor.ts"],"names":[],"mappings":"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"}
@@ -1,22 +1,5 @@
1
- import type { FieldOptions } from './types.js';
2
- import type { BijouContext } from '../../ports/context.js';
3
- /**
4
- * Options for the multi-line textarea field.
5
- */
6
- export interface TextareaOptions extends FieldOptions<string> {
7
- /** Placeholder text shown when the textarea is empty. */
8
- placeholder?: string;
9
- /** Maximum character count (including newlines). */
10
- maxLength?: number;
11
- /** Display line numbers in the gutter. Default: false. */
12
- showLineNumbers?: boolean;
13
- /** Visible editor height in lines. Default: 6. */
14
- height?: number;
15
- /** Render width in columns. Default: 80. */
16
- width?: number;
17
- /** Bijou context for IO, styling, and mode detection. */
18
- ctx?: BijouContext;
19
- }
1
+ export type { TextareaOptions } from './textarea-editor.js';
2
+ import type { TextareaOptions } from './textarea-editor.js';
20
3
  /**
21
4
  * Prompt the user for multi-line text input.
22
5
  *
@@ -1 +1 @@
1
- {"version":3,"file":"textarea.d.ts","sourceRoot":"","sources":["../../../src/core/forms/textarea.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAI3D;;GAEG;AACH,MAAM,WAAW,eAAgB,SAAQ,YAAY,CAAC,MAAM,CAAC;IAC3D,yDAAyD;IACzD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0DAA0D;IAC1D,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,kDAAkD;IAClD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4CAA4C;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yDAAyD;IACzD,GAAG,CAAC,EAAE,YAAY,CAAC;CACpB;AAED;;;;;;;;;GASG;AACH,wBAAsB,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAQxE"}
1
+ {"version":3,"file":"textarea.d.ts","sourceRoot":"","sources":["../../../src/core/forms/textarea.ts"],"names":[],"mappings":"AAIA,YAAY,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE5D;;;;;;;;;GASG;AACH,wBAAsB,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAQxE"}
@@ -1,5 +1,6 @@
1
1
  import { resolveCtx } from '../resolve-ctx.js';
2
- import { formatFormTitle, writeValidationError, terminalRenderer, formDispatch, createStyledFn } from './form-utils.js';
2
+ import { formatFormTitle, writeValidationError, formDispatch } from './form-utils.js';
3
+ import { interactiveTextarea } from './textarea-editor.js';
3
4
  /**
4
5
  * Prompt the user for multi-line text input.
5
6
  *
@@ -42,198 +43,4 @@ async function fallbackTextarea(options, ctx) {
42
43
  }
43
44
  return value;
44
45
  }
45
- /**
46
- * Render a full interactive textarea editor using raw terminal input.
47
- *
48
- * Supports arrow-key cursor movement, scrolling, line wrapping,
49
- * optional line numbers, placeholder text, and a max-length guard.
50
- * Ctrl+D submits; Ctrl+C or Escape cancels.
51
- *
52
- * @param options - Textarea field configuration.
53
- * @param ctx - Bijou context.
54
- * @returns The entered text (newline-joined), or the default value on cancel.
55
- */
56
- async function interactiveTextarea(options, ctx) {
57
- const t = ctx.theme;
58
- const styledFn = createStyledFn(ctx);
59
- const height = options.height ?? 6;
60
- const renderWidth = options.width ?? 80;
61
- const showLineNumbers = options.showLineNumbers ?? false;
62
- const term = terminalRenderer(ctx);
63
- let lines = [''];
64
- let cursorRow = 0;
65
- let cursorCol = 0;
66
- let scrollY = 0;
67
- function visibleLines() {
68
- return lines.slice(scrollY, scrollY + height);
69
- }
70
- function ensureCursorVisible() {
71
- if (cursorRow < scrollY)
72
- scrollY = cursorRow;
73
- if (cursorRow >= scrollY + height)
74
- scrollY = cursorRow - height + 1;
75
- }
76
- function render() {
77
- const label = formatFormTitle(options.title, ctx);
78
- const hint = styledFn(t.theme.semantic.muted, ' (Ctrl+D to submit, Ctrl+C/Esc to cancel)');
79
- term.hideCursor();
80
- term.writeLine(`${label}${hint}`);
81
- const vis = visibleLines();
82
- const prefixWidth = showLineNumbers ? 6 : 2; // " 1 │ " or " "
83
- const contentWidth = Math.max(1, renderWidth - prefixWidth);
84
- for (let i = 0; i < height; i++) {
85
- const lineIdx = scrollY + i;
86
- const rawLine = vis[i] ?? '';
87
- const line = rawLine.length > contentWidth ? rawLine.slice(0, contentWidth) : rawLine;
88
- const prefix = showLineNumbers
89
- ? styledFn(t.theme.semantic.muted, `${String(lineIdx + 1).padStart(3)} │ `)
90
- : ' ';
91
- if (lineIdx === 0 && options.placeholder && lines.length === 1 && lines[0] === '') {
92
- ctx.io.write(`\x1b[K${prefix}${styledFn(t.theme.semantic.muted, options.placeholder)}\n`);
93
- }
94
- else {
95
- ctx.io.write(`\x1b[K${prefix}${line}\n`);
96
- }
97
- }
98
- // Status line
99
- const pos = `Ln ${cursorRow + 1}, Col ${cursorCol + 1}`;
100
- const lenInfo = options.maxLength ? ` | ${currentLength()}/${options.maxLength}` : '';
101
- ctx.io.write(`\x1b[K${styledFn(t.theme.semantic.muted, pos + lenInfo)}\n`);
102
- }
103
- function currentLength() {
104
- return lines.join('\n').length;
105
- }
106
- function clearRender() {
107
- const totalLines = height + 2; // header + visible lines + status
108
- term.moveUp(totalLines);
109
- }
110
- function cleanup(submitted) {
111
- clearRender();
112
- const totalLines = height + 2;
113
- term.clearBlock(totalLines);
114
- const value = submitted ? lines.join('\n') : '';
115
- const summary = value
116
- ? (value.includes('\n') ? `${value.split('\n').length} lines` : value)
117
- : '(cancelled)';
118
- const label = formatFormTitle(options.title, ctx) + ' ' + styledFn(t.theme.semantic.info, summary);
119
- ctx.io.write(`\x1b[K${label}\n`);
120
- term.showCursor();
121
- }
122
- render();
123
- return new Promise((resolve) => {
124
- const handle = ctx.io.rawInput((key) => {
125
- if (key === '\x04') {
126
- // Ctrl+D — submit
127
- handle.dispose();
128
- cleanup(true);
129
- resolve(lines.join('\n'));
130
- return;
131
- }
132
- if (key === '\x03' || key === '\x1b') {
133
- // Ctrl+C or Escape — cancel
134
- // Note: bare \x1b may false-trigger on slow connections where escape
135
- // sequences arrive as separate bytes. Timer-based disambiguation is a
136
- // separate future improvement.
137
- handle.dispose();
138
- cleanup(false);
139
- resolve(options.defaultValue ?? '');
140
- return;
141
- }
142
- if (key === '\r' || key === '\n') {
143
- // Enter — newline (counts as 1 character for maxLength)
144
- if (options.maxLength && currentLength() >= options.maxLength)
145
- return;
146
- const currentLine = lines[cursorRow];
147
- const before = currentLine.slice(0, cursorCol);
148
- const after = currentLine.slice(cursorCol);
149
- lines[cursorRow] = before;
150
- lines.splice(cursorRow + 1, 0, after);
151
- cursorRow++;
152
- cursorCol = 0;
153
- ensureCursorVisible();
154
- clearRender();
155
- render();
156
- return;
157
- }
158
- if (key === '\x7f' || key === '\b') {
159
- // Backspace
160
- if (cursorCol > 0) {
161
- const line = lines[cursorRow];
162
- lines[cursorRow] = line.slice(0, cursorCol - 1) + line.slice(cursorCol);
163
- cursorCol--;
164
- }
165
- else if (cursorRow > 0) {
166
- // Merge with previous line
167
- const prevLine = lines[cursorRow - 1];
168
- const currentLine = lines[cursorRow];
169
- cursorCol = prevLine.length;
170
- lines[cursorRow - 1] = prevLine + currentLine;
171
- lines.splice(cursorRow, 1);
172
- cursorRow--;
173
- ensureCursorVisible();
174
- }
175
- clearRender();
176
- render();
177
- return;
178
- }
179
- // Arrow keys
180
- if (key === '\x1b[A') { // Up
181
- if (cursorRow > 0) {
182
- cursorRow--;
183
- cursorCol = Math.min(cursorCol, lines[cursorRow].length);
184
- ensureCursorVisible();
185
- }
186
- clearRender();
187
- render();
188
- return;
189
- }
190
- if (key === '\x1b[B') { // Down
191
- if (cursorRow < lines.length - 1) {
192
- cursorRow++;
193
- cursorCol = Math.min(cursorCol, lines[cursorRow].length);
194
- ensureCursorVisible();
195
- }
196
- clearRender();
197
- render();
198
- return;
199
- }
200
- if (key === '\x1b[C') { // Right
201
- if (cursorCol < lines[cursorRow].length) {
202
- cursorCol++;
203
- }
204
- else if (cursorRow < lines.length - 1) {
205
- cursorRow++;
206
- cursorCol = 0;
207
- ensureCursorVisible();
208
- }
209
- clearRender();
210
- render();
211
- return;
212
- }
213
- if (key === '\x1b[D') { // Left
214
- if (cursorCol > 0) {
215
- cursorCol--;
216
- }
217
- else if (cursorRow > 0) {
218
- cursorRow--;
219
- cursorCol = lines[cursorRow].length;
220
- ensureCursorVisible();
221
- }
222
- clearRender();
223
- render();
224
- return;
225
- }
226
- // Printable character
227
- if (key.length === 1 && key >= ' ') {
228
- if (options.maxLength && currentLength() >= options.maxLength)
229
- return;
230
- const line = lines[cursorRow];
231
- lines[cursorRow] = line.slice(0, cursorCol) + key + line.slice(cursorCol);
232
- cursorCol++;
233
- clearRender();
234
- render();
235
- }
236
- });
237
- });
238
- }
239
46
  //# sourceMappingURL=textarea.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"textarea.js","sourceRoot":"","sources":["../../../src/core/forms/textarea.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"textarea.js","sourceRoot":"","sources":["../../../src/core/forms/textarea.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACtF,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAI3D;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,OAAwB;IACrD,MAAM,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAEpC,OAAO,YAAY,CACjB,GAAG,EACH,CAAC,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,OAAO,EAAE,CAAC,CAAC,EACtC,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC,CACpC,CAAC;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,KAAK,UAAU,gBAAgB,CAAC,OAAwB,EAAE,GAAiB;IACzE,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;IAEzD,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,KAAK,YAAY;QACtC,CAAC,CAAC,cAAc;QAChB,CAAC,CAAC,IAAI,CAAC;IACT,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC7C,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,EAAE,IAAI,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC;IAE1D,IAAI,OAAO,CAAC,QAAQ,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;QACrC,oBAAoB,CAAC,yBAAyB,EAAE,GAAG,CAAC,CAAC;IACvD,CAAC;IAED,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACrB,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACvC,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACpC,oBAAoB,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flyingrobots/bijou",
3
- "version": "1.1.0",
3
+ "version": "1.2.0",
4
4
  "description": "Themed terminal components for CLIs, loggers, and scripts — graceful degradation included.",
5
5
  "type": "module",
6
6
  "sideEffects": false,