@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.
- package/dist/core/components/dag-edges.d.ts +78 -0
- package/dist/core/components/dag-edges.d.ts.map +1 -0
- package/dist/core/components/dag-edges.js +127 -0
- package/dist/core/components/dag-edges.js.map +1 -0
- package/dist/core/components/dag-layout.d.ts +37 -0
- package/dist/core/components/dag-layout.d.ts.map +1 -0
- package/dist/core/components/dag-layout.js +172 -0
- package/dist/core/components/dag-layout.js.map +1 -0
- package/dist/core/components/dag-render.d.ts +51 -0
- package/dist/core/components/dag-render.d.ts.map +1 -0
- package/dist/core/components/dag-render.js +440 -0
- package/dist/core/components/dag-render.js.map +1 -0
- package/dist/core/components/dag.d.ts.map +1 -1
- package/dist/core/components/dag.js +3 -648
- package/dist/core/components/dag.js.map +1 -1
- package/dist/core/components/markdown-parse.d.ts +69 -0
- package/dist/core/components/markdown-parse.d.ts.map +1 -0
- package/dist/core/components/markdown-parse.js +272 -0
- package/dist/core/components/markdown-parse.js.map +1 -0
- package/dist/core/components/markdown-render.d.ts +20 -0
- package/dist/core/components/markdown-render.d.ts.map +1 -0
- package/dist/core/components/markdown-render.js +135 -0
- package/dist/core/components/markdown-render.js.map +1 -0
- package/dist/core/components/markdown.d.ts.map +1 -1
- package/dist/core/components/markdown.js +6 -371
- package/dist/core/components/markdown.js.map +1 -1
- package/dist/core/forms/filter-interactive.d.ts +66 -0
- package/dist/core/forms/filter-interactive.d.ts.map +1 -0
- package/dist/core/forms/filter-interactive.js +241 -0
- package/dist/core/forms/filter-interactive.js.map +1 -0
- package/dist/core/forms/filter.d.ts +2 -32
- package/dist/core/forms/filter.d.ts.map +1 -1
- package/dist/core/forms/filter.js +2 -167
- package/dist/core/forms/filter.js.map +1 -1
- package/dist/core/forms/textarea-editor.d.ts +39 -0
- package/dist/core/forms/textarea-editor.d.ts.map +1 -0
- package/dist/core/forms/textarea-editor.js +210 -0
- package/dist/core/forms/textarea-editor.js.map +1 -0
- package/dist/core/forms/textarea.d.ts +2 -19
- package/dist/core/forms/textarea.d.ts.map +1 -1
- package/dist/core/forms/textarea.js +2 -195
- package/dist/core/forms/textarea.js.map +1 -1
- package/package.json +1 -1
|
@@ -9,375 +9,9 @@
|
|
|
9
9
|
* blockquotes.
|
|
10
10
|
*/
|
|
11
11
|
import { getDefaultContext } from '../../context.js';
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
|
|
15
|
-
// ---------------------------------------------------------------------------
|
|
16
|
-
// Block-level parser
|
|
17
|
-
// ---------------------------------------------------------------------------
|
|
18
|
-
/**
|
|
19
|
-
* Parse a markdown source string into an array of block-level elements.
|
|
20
|
-
*
|
|
21
|
-
* Recognizes fenced code blocks, horizontal rules, headings, blockquotes,
|
|
22
|
-
* bullet lists, numbered lists, and paragraphs.
|
|
23
|
-
*
|
|
24
|
-
* @param source - Raw markdown source text.
|
|
25
|
-
* @returns Array of parsed block elements.
|
|
26
|
-
*/
|
|
27
|
-
function parseBlocks(source) {
|
|
28
|
-
const lines = source.split('\n');
|
|
29
|
-
const blocks = [];
|
|
30
|
-
let i = 0;
|
|
31
|
-
while (i < lines.length) {
|
|
32
|
-
const line = lines[i];
|
|
33
|
-
// Blank line
|
|
34
|
-
if (line.trim() === '') {
|
|
35
|
-
blocks.push({ type: 'blank' });
|
|
36
|
-
i++;
|
|
37
|
-
continue;
|
|
38
|
-
}
|
|
39
|
-
// Code block (fenced)
|
|
40
|
-
if (line.trimStart().startsWith('```')) {
|
|
41
|
-
const lang = line.trimStart().slice(3).trim();
|
|
42
|
-
const codeLines = [];
|
|
43
|
-
i++;
|
|
44
|
-
while (i < lines.length && !lines[i].trimStart().startsWith('```')) {
|
|
45
|
-
codeLines.push(lines[i]);
|
|
46
|
-
i++;
|
|
47
|
-
}
|
|
48
|
-
if (i < lines.length)
|
|
49
|
-
i++; // skip closing ```
|
|
50
|
-
blocks.push({ type: 'code-block', lang, lines: codeLines });
|
|
51
|
-
continue;
|
|
52
|
-
}
|
|
53
|
-
// Horizontal rule
|
|
54
|
-
if (/^(-{3,}|\*{3,}|_{3,})\s*$/.test(line.trim())) {
|
|
55
|
-
blocks.push({ type: 'hr' });
|
|
56
|
-
i++;
|
|
57
|
-
continue;
|
|
58
|
-
}
|
|
59
|
-
// Heading
|
|
60
|
-
const headingMatch = line.match(/^(#{1,4})\s+(.+)$/);
|
|
61
|
-
if (headingMatch) {
|
|
62
|
-
blocks.push({ type: 'heading', level: headingMatch[1].length, text: headingMatch[2] });
|
|
63
|
-
i++;
|
|
64
|
-
continue;
|
|
65
|
-
}
|
|
66
|
-
// Blockquote
|
|
67
|
-
if (line.trimStart().startsWith('>')) {
|
|
68
|
-
const quoteLines = [];
|
|
69
|
-
while (i < lines.length && lines[i].trimStart().startsWith('>')) {
|
|
70
|
-
const ql = lines[i];
|
|
71
|
-
quoteLines.push(ql.replace(/^\s*>\s?/, ''));
|
|
72
|
-
i++;
|
|
73
|
-
if (i < lines.length && lines[i].trim() === '')
|
|
74
|
-
break;
|
|
75
|
-
}
|
|
76
|
-
blocks.push({ type: 'blockquote', lines: quoteLines });
|
|
77
|
-
continue;
|
|
78
|
-
}
|
|
79
|
-
// Bullet list
|
|
80
|
-
if (/^\s*[-*]\s+/.test(line)) {
|
|
81
|
-
const items = [];
|
|
82
|
-
while (i < lines.length && /^\s*[-*]\s+/.test(lines[i])) {
|
|
83
|
-
items.push(lines[i].replace(/^\s*[-*]\s+/, ''));
|
|
84
|
-
i++;
|
|
85
|
-
}
|
|
86
|
-
blocks.push({ type: 'bullet-list', items });
|
|
87
|
-
continue;
|
|
88
|
-
}
|
|
89
|
-
// Numbered list
|
|
90
|
-
if (/^\s*\d+\.\s+/.test(line)) {
|
|
91
|
-
const items = [];
|
|
92
|
-
while (i < lines.length && /^\s*\d+\.\s+/.test(lines[i])) {
|
|
93
|
-
items.push(lines[i].replace(/^\s*\d+\.\s+/, ''));
|
|
94
|
-
i++;
|
|
95
|
-
}
|
|
96
|
-
blocks.push({ type: 'numbered-list', items });
|
|
97
|
-
continue;
|
|
98
|
-
}
|
|
99
|
-
// Paragraph: collect consecutive non-special lines
|
|
100
|
-
let text = line;
|
|
101
|
-
i++;
|
|
102
|
-
while (i < lines.length && lines[i].trim() !== '' && !isBlockStart(lines[i])) {
|
|
103
|
-
text += ' ' + lines[i];
|
|
104
|
-
i++;
|
|
105
|
-
}
|
|
106
|
-
blocks.push({ type: 'paragraph', text });
|
|
107
|
-
}
|
|
108
|
-
return blocks;
|
|
109
|
-
}
|
|
110
|
-
/**
|
|
111
|
-
* Test whether a line begins a new block-level element.
|
|
112
|
-
*
|
|
113
|
-
* Used by the paragraph collector to determine when to stop accumulating lines.
|
|
114
|
-
*
|
|
115
|
-
* @param line - The line to test.
|
|
116
|
-
* @returns `true` if the line starts a code fence, heading, HR, blockquote, or list.
|
|
117
|
-
*/
|
|
118
|
-
function isBlockStart(line) {
|
|
119
|
-
if (line.trimStart().startsWith('```'))
|
|
120
|
-
return true;
|
|
121
|
-
if (/^(#{1,4})\s+/.test(line))
|
|
122
|
-
return true;
|
|
123
|
-
if (/^(-{3,}|\*{3,}|_{3,})\s*$/.test(line.trim()))
|
|
124
|
-
return true;
|
|
125
|
-
if (line.trimStart().startsWith('>'))
|
|
126
|
-
return true;
|
|
127
|
-
if (/^\s*[-*]\s+/.test(line))
|
|
128
|
-
return true;
|
|
129
|
-
if (/^\s*\d+\.\s+/.test(line))
|
|
130
|
-
return true;
|
|
131
|
-
return false;
|
|
132
|
-
}
|
|
133
|
-
// ---------------------------------------------------------------------------
|
|
134
|
-
// Inline parser
|
|
135
|
-
// ---------------------------------------------------------------------------
|
|
136
|
-
/**
|
|
137
|
-
* Parse and render inline markdown syntax within a text fragment.
|
|
138
|
-
*
|
|
139
|
-
* Dispatches to mode-specific handlers for styled, plain, or accessible output.
|
|
140
|
-
*
|
|
141
|
-
* @param text - The inline text to parse.
|
|
142
|
-
* @param ctx - Bijou context for styling.
|
|
143
|
-
* @param mode - Current rendering mode.
|
|
144
|
-
* @returns The rendered inline text.
|
|
145
|
-
*/
|
|
146
|
-
function parseInline(text, ctx, mode) {
|
|
147
|
-
if (mode === 'accessible')
|
|
148
|
-
return parseInlineAccessible(text, ctx);
|
|
149
|
-
if (mode === 'pipe')
|
|
150
|
-
return parseInlinePlain(text);
|
|
151
|
-
return parseInlineStyled(text, ctx);
|
|
152
|
-
}
|
|
153
|
-
/**
|
|
154
|
-
* Render inline markdown with terminal styling (interactive/static mode).
|
|
155
|
-
*
|
|
156
|
-
* Processes links, code spans, bold, and italic with theme-based colors.
|
|
157
|
-
*
|
|
158
|
-
* @param text - The inline text to parse.
|
|
159
|
-
* @param ctx - Bijou context for styling.
|
|
160
|
-
* @returns The styled inline text.
|
|
161
|
-
*/
|
|
162
|
-
function parseInlineStyled(text, ctx) {
|
|
163
|
-
let result = text;
|
|
164
|
-
// Links: [text](url)
|
|
165
|
-
result = result.replace(/\[([^\]]+)\]\(([^)]+)\)/g, (_m, linkText, url) => {
|
|
166
|
-
return hyperlink(linkText, url, { ctx });
|
|
167
|
-
});
|
|
168
|
-
// Code spans: `text` (before bold/italic to prevent * inside backticks being parsed)
|
|
169
|
-
result = result.replace(/`([^`]+)`/g, (_m, code) => {
|
|
170
|
-
return ctx.style.styled(ctx.theme.theme.semantic.warning, code);
|
|
171
|
-
});
|
|
172
|
-
// Bold: **text**
|
|
173
|
-
result = result.replace(/\*\*(.+?)\*\*/g, (_m, bold) => {
|
|
174
|
-
return ctx.style.bold(bold);
|
|
175
|
-
});
|
|
176
|
-
// Italic: *text* (but not inside **)
|
|
177
|
-
result = result.replace(/(?<!\*)\*([^*]+)\*(?!\*)/g, (_m, italic) => {
|
|
178
|
-
return ctx.style.styled(ctx.theme.theme.semantic.muted, italic);
|
|
179
|
-
});
|
|
180
|
-
return result;
|
|
181
|
-
}
|
|
182
|
-
/**
|
|
183
|
-
* Strip inline markdown syntax to plain text (pipe mode).
|
|
184
|
-
*
|
|
185
|
-
* Converts links to `text (url)` format and removes formatting markers.
|
|
186
|
-
*
|
|
187
|
-
* @param text - The inline text to parse.
|
|
188
|
-
* @returns The plain-text inline text.
|
|
189
|
-
*/
|
|
190
|
-
function parseInlinePlain(text) {
|
|
191
|
-
let result = text;
|
|
192
|
-
// Links: [text](url) → text (url)
|
|
193
|
-
result = result.replace(/\[([^\]]+)\]\(([^)]+)\)/g, '$1 ($2)');
|
|
194
|
-
// Code: `text` → text (before bold/italic to prevent * inside backticks being parsed)
|
|
195
|
-
result = result.replace(/`([^`]+)`/g, '$1');
|
|
196
|
-
// Bold: **text** → text
|
|
197
|
-
result = result.replace(/\*\*(.+?)\*\*/g, '$1');
|
|
198
|
-
// Italic: *text* → text
|
|
199
|
-
result = result.replace(/(?<!\*)\*([^*]+)\*(?!\*)/g, '$1');
|
|
200
|
-
return result;
|
|
201
|
-
}
|
|
202
|
-
/**
|
|
203
|
-
* Parse inline markdown for screen-reader-friendly output (accessible mode).
|
|
204
|
-
*
|
|
205
|
-
* Prefixes links with `Link:` and strips formatting markers.
|
|
206
|
-
*
|
|
207
|
-
* @param text - The inline text to parse.
|
|
208
|
-
* @param _ctx - Bijou context (unused, kept for signature consistency).
|
|
209
|
-
* @returns The accessible inline text.
|
|
210
|
-
*/
|
|
211
|
-
function parseInlineAccessible(text, _ctx) {
|
|
212
|
-
let result = text;
|
|
213
|
-
// Links: [text](url) → Link: text (url)
|
|
214
|
-
result = result.replace(/\[([^\]]+)\]\(([^)]+)\)/g, 'Link: $1 ($2)');
|
|
215
|
-
// Code: `text` → text (before bold/italic to prevent * inside backticks being parsed)
|
|
216
|
-
result = result.replace(/`([^`]+)`/g, '$1');
|
|
217
|
-
// Bold: **text** → text
|
|
218
|
-
result = result.replace(/\*\*(.+?)\*\*/g, '$1');
|
|
219
|
-
// Italic: *text* → text
|
|
220
|
-
result = result.replace(/(?<!\*)\*([^*]+)\*(?!\*)/g, '$1');
|
|
221
|
-
return result;
|
|
222
|
-
}
|
|
223
|
-
// ---------------------------------------------------------------------------
|
|
224
|
-
// Word wrapping
|
|
225
|
-
// ---------------------------------------------------------------------------
|
|
226
|
-
/**
|
|
227
|
-
* Wrap text to a maximum column width, breaking on word boundaries.
|
|
228
|
-
*
|
|
229
|
-
* Uses grapheme-aware width measurement to handle wide characters correctly.
|
|
230
|
-
*
|
|
231
|
-
* @param text - The text to wrap.
|
|
232
|
-
* @param width - Maximum line width in columns.
|
|
233
|
-
* @returns Array of wrapped lines.
|
|
234
|
-
*/
|
|
235
|
-
function wordWrap(text, width) {
|
|
236
|
-
if (width <= 0)
|
|
237
|
-
return [text];
|
|
238
|
-
const words = text.split(' ');
|
|
239
|
-
const lines = [];
|
|
240
|
-
let current = '';
|
|
241
|
-
let currentWidth = 0;
|
|
242
|
-
for (const word of words) {
|
|
243
|
-
const wordWidth = graphemeWidth(word);
|
|
244
|
-
if (currentWidth === 0) {
|
|
245
|
-
current = word;
|
|
246
|
-
currentWidth = wordWidth;
|
|
247
|
-
}
|
|
248
|
-
else if (currentWidth + 1 + wordWidth <= width) {
|
|
249
|
-
current += ' ' + word;
|
|
250
|
-
currentWidth += 1 + wordWidth;
|
|
251
|
-
}
|
|
252
|
-
else {
|
|
253
|
-
lines.push(current);
|
|
254
|
-
current = word;
|
|
255
|
-
currentWidth = wordWidth;
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
if (currentWidth > 0)
|
|
259
|
-
lines.push(current);
|
|
260
|
-
return lines.length > 0 ? lines : [''];
|
|
261
|
-
}
|
|
262
|
-
// ---------------------------------------------------------------------------
|
|
263
|
-
// Block renderer
|
|
264
|
-
// ---------------------------------------------------------------------------
|
|
265
|
-
/**
|
|
266
|
-
* Render an array of parsed block elements into a final terminal string.
|
|
267
|
-
*
|
|
268
|
-
* Handles mode-specific rendering for each block type and trims trailing blanks.
|
|
269
|
-
*
|
|
270
|
-
* @param blocks - Parsed block-level elements.
|
|
271
|
-
* @param ctx - Bijou context for styling and mode.
|
|
272
|
-
* @param width - Column width for word wrapping.
|
|
273
|
-
* @returns The fully rendered markdown string.
|
|
274
|
-
*/
|
|
275
|
-
function renderBlocks(blocks, ctx, width) {
|
|
276
|
-
const mode = ctx.mode;
|
|
277
|
-
const lines = [];
|
|
278
|
-
for (const block of blocks) {
|
|
279
|
-
switch (block.type) {
|
|
280
|
-
case 'blank':
|
|
281
|
-
lines.push('');
|
|
282
|
-
break;
|
|
283
|
-
case 'heading': {
|
|
284
|
-
const text = parseInline(block.text, ctx, mode);
|
|
285
|
-
if (mode === 'accessible') {
|
|
286
|
-
lines.push(`Heading level ${block.level}: ${text}`);
|
|
287
|
-
}
|
|
288
|
-
else if (mode === 'pipe') {
|
|
289
|
-
lines.push('#'.repeat(block.level) + ' ' + text);
|
|
290
|
-
}
|
|
291
|
-
else {
|
|
292
|
-
// Interactive: bold, h1 uses primary color
|
|
293
|
-
const styled = ctx.style.bold(text);
|
|
294
|
-
if (block.level === 1) {
|
|
295
|
-
lines.push(ctx.style.styled(ctx.theme.theme.border.primary, styled));
|
|
296
|
-
}
|
|
297
|
-
else {
|
|
298
|
-
lines.push(styled);
|
|
299
|
-
}
|
|
300
|
-
}
|
|
301
|
-
lines.push('');
|
|
302
|
-
break;
|
|
303
|
-
}
|
|
304
|
-
case 'paragraph': {
|
|
305
|
-
const wrapped = wordWrap(block.text, width);
|
|
306
|
-
lines.push(...wrapped.map(line => parseInline(line, ctx, mode)));
|
|
307
|
-
lines.push('');
|
|
308
|
-
break;
|
|
309
|
-
}
|
|
310
|
-
case 'bullet-list': {
|
|
311
|
-
for (const item of block.items) {
|
|
312
|
-
const bullet = mode === 'pipe' ? '- ' : ' \u2022 ';
|
|
313
|
-
const indentWidth = width - bullet.length;
|
|
314
|
-
const wrapped = wordWrap(item, indentWidth > 0 ? indentWidth : width);
|
|
315
|
-
lines.push(bullet + parseInline(wrapped[0], ctx, mode));
|
|
316
|
-
for (let i = 1; i < wrapped.length; i++) {
|
|
317
|
-
lines.push(' '.repeat(bullet.length) + parseInline(wrapped[i], ctx, mode));
|
|
318
|
-
}
|
|
319
|
-
}
|
|
320
|
-
lines.push('');
|
|
321
|
-
break;
|
|
322
|
-
}
|
|
323
|
-
case 'numbered-list': {
|
|
324
|
-
for (let n = 0; n < block.items.length; n++) {
|
|
325
|
-
const prefix = mode === 'pipe' ? `${n + 1}. ` : ` ${n + 1}. `;
|
|
326
|
-
const indentWidth = width - prefix.length;
|
|
327
|
-
const wrapped = wordWrap(block.items[n], indentWidth > 0 ? indentWidth : width);
|
|
328
|
-
lines.push(prefix + parseInline(wrapped[0], ctx, mode));
|
|
329
|
-
for (let i = 1; i < wrapped.length; i++) {
|
|
330
|
-
lines.push(' '.repeat(prefix.length) + parseInline(wrapped[i], ctx, mode));
|
|
331
|
-
}
|
|
332
|
-
}
|
|
333
|
-
lines.push('');
|
|
334
|
-
break;
|
|
335
|
-
}
|
|
336
|
-
case 'code-block': {
|
|
337
|
-
if (mode === 'pipe' || mode === 'accessible') {
|
|
338
|
-
lines.push('```' + block.lang);
|
|
339
|
-
lines.push(...block.lines);
|
|
340
|
-
lines.push('```');
|
|
341
|
-
}
|
|
342
|
-
else {
|
|
343
|
-
// Interactive: dim styling
|
|
344
|
-
for (const codeLine of block.lines) {
|
|
345
|
-
lines.push(ctx.style.styled(ctx.theme.theme.semantic.muted, ' ' + codeLine));
|
|
346
|
-
}
|
|
347
|
-
}
|
|
348
|
-
lines.push('');
|
|
349
|
-
break;
|
|
350
|
-
}
|
|
351
|
-
case 'blockquote': {
|
|
352
|
-
for (const ql of block.lines) {
|
|
353
|
-
const inlined = parseInline(ql, ctx, mode);
|
|
354
|
-
if (mode === 'pipe' || mode === 'accessible') {
|
|
355
|
-
lines.push('> ' + inlined);
|
|
356
|
-
}
|
|
357
|
-
else {
|
|
358
|
-
const prefix = ctx.style.styled(ctx.theme.theme.border.muted, '\u2502 ');
|
|
359
|
-
lines.push(prefix + ctx.style.styled(ctx.theme.theme.semantic.muted, inlined));
|
|
360
|
-
}
|
|
361
|
-
}
|
|
362
|
-
lines.push('');
|
|
363
|
-
break;
|
|
364
|
-
}
|
|
365
|
-
case 'hr': {
|
|
366
|
-
lines.push(separator({ width, ctx }));
|
|
367
|
-
lines.push('');
|
|
368
|
-
break;
|
|
369
|
-
}
|
|
370
|
-
}
|
|
371
|
-
}
|
|
372
|
-
// Trim trailing blank lines
|
|
373
|
-
while (lines.length > 0 && lines[lines.length - 1] === '') {
|
|
374
|
-
lines.pop();
|
|
375
|
-
}
|
|
376
|
-
return lines.join('\n');
|
|
377
|
-
}
|
|
378
|
-
// ---------------------------------------------------------------------------
|
|
379
|
-
// Public API
|
|
380
|
-
// ---------------------------------------------------------------------------
|
|
12
|
+
import { parseBlocks } from './markdown-parse.js';
|
|
13
|
+
import { renderBlocks } from './markdown-render.js';
|
|
14
|
+
// ── Public API ─────────────────────────────────────────────────────
|
|
381
15
|
/**
|
|
382
16
|
* Render a markdown string for terminal display.
|
|
383
17
|
*
|
|
@@ -394,10 +28,11 @@ function renderBlocks(blocks, ctx, width) {
|
|
|
394
28
|
* @returns The rendered terminal string.
|
|
395
29
|
*/
|
|
396
30
|
export function markdown(source, options) {
|
|
397
|
-
const ctx = options?.ctx ?? getDefaultContext();
|
|
398
|
-
const width = options?.width ?? ctx.runtime.columns;
|
|
399
31
|
if (source.trim() === '')
|
|
400
32
|
return '';
|
|
33
|
+
const ctx = options?.ctx ?? getDefaultContext();
|
|
34
|
+
const rawWidth = options?.width ?? ctx.runtime.columns;
|
|
35
|
+
const width = Math.max(1, Number.isFinite(rawWidth) ? rawWidth : ctx.runtime.columns);
|
|
401
36
|
const blocks = parseBlocks(source);
|
|
402
37
|
return renderBlocks(blocks, ctx, width);
|
|
403
38
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../../src/core/components/markdown.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../../src/core/components/markdown.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAYpD,sEAAsE;AAEtE;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,QAAQ,CAAC,MAAc,EAAE,OAAyB;IAChE,IAAI,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE;QAAE,OAAO,EAAE,CAAC;IAEpC,MAAM,GAAG,GAAG,OAAO,EAAE,GAAG,IAAI,iBAAiB,EAAE,CAAC;IAChD,MAAM,QAAQ,GAAG,OAAO,EAAE,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC;IACvD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAEtF,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IACnC,OAAO,YAAY,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AAC1C,CAAC"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Interactive filter select UI with real-time search and vim-style modes.
|
|
3
|
+
*
|
|
4
|
+
* Starts in **normal mode** where `j`/`k` navigate and any printable character
|
|
5
|
+
* (except `j`/`k`) switches to insert mode and types the character. Press `/`
|
|
6
|
+
* to enter insert mode without typing. In **insert mode**, all keys are
|
|
7
|
+
* printable (including `j`/`k`), arrow keys navigate, and Escape returns to
|
|
8
|
+
* normal mode. Ctrl+C cancels from either mode; Escape in normal mode cancels.
|
|
9
|
+
*/
|
|
10
|
+
import type { FieldOptions } from './types.js';
|
|
11
|
+
import type { BijouContext } from '../../ports/context.js';
|
|
12
|
+
/**
|
|
13
|
+
* Single option in a filterable select list.
|
|
14
|
+
*
|
|
15
|
+
* @typeParam T - Type of the option's value.
|
|
16
|
+
*/
|
|
17
|
+
export interface FilterOption<T> {
|
|
18
|
+
/** Display label shown in the option list. */
|
|
19
|
+
label: string;
|
|
20
|
+
/** Value returned when this option is selected. */
|
|
21
|
+
value: T;
|
|
22
|
+
/** Additional search keywords that match this option during filtering. */
|
|
23
|
+
keywords?: string[];
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Options for the filterable select field.
|
|
27
|
+
*
|
|
28
|
+
* @typeParam T - Type of each option's value.
|
|
29
|
+
*/
|
|
30
|
+
export interface FilterOptions<T> extends FieldOptions<T> {
|
|
31
|
+
/** List of filterable options. */
|
|
32
|
+
options: FilterOption<T>[];
|
|
33
|
+
/** Placeholder text shown in the filter input when empty. */
|
|
34
|
+
placeholder?: string;
|
|
35
|
+
/** Maximum number of options visible at once. Default: 7. */
|
|
36
|
+
maxVisible?: number;
|
|
37
|
+
/** Custom match function for filtering. Defaults to case-insensitive label/keyword substring match. */
|
|
38
|
+
match?: (query: string, option: FilterOption<T>) => boolean;
|
|
39
|
+
/** Bijou context for IO, styling, and mode detection. */
|
|
40
|
+
ctx?: BijouContext;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Default case-insensitive substring matcher for filter options.
|
|
44
|
+
*
|
|
45
|
+
* Check the option label first, then fall back to keyword matches.
|
|
46
|
+
*
|
|
47
|
+
* @param query - User's search input.
|
|
48
|
+
* @param option - Option to test against.
|
|
49
|
+
* @returns `true` if the query matches the label or any keyword.
|
|
50
|
+
*/
|
|
51
|
+
export declare function defaultMatch<T>(query: string, option: FilterOption<T>): boolean;
|
|
52
|
+
/**
|
|
53
|
+
* Render a keyboard-navigable filter select with vim-style normal/insert modes.
|
|
54
|
+
*
|
|
55
|
+
* Starts in normal mode: `j`/`k` navigate, `/` enters insert mode, any other
|
|
56
|
+
* printable enters insert mode and types the character. In insert mode, all keys
|
|
57
|
+
* are printable, arrow keys navigate, Escape returns to normal mode. Enter
|
|
58
|
+
* confirms from either mode, Ctrl+C cancels from either mode, Escape in normal
|
|
59
|
+
* mode cancels.
|
|
60
|
+
*
|
|
61
|
+
* @param options - Filter field configuration.
|
|
62
|
+
* @param ctx - Bijou context.
|
|
63
|
+
* @returns The value of the selected (or default/first) option.
|
|
64
|
+
*/
|
|
65
|
+
export declare function interactiveFilter<T>(options: FilterOptions<T>, ctx: BijouContext): Promise<T>;
|
|
66
|
+
//# sourceMappingURL=filter-interactive.d.ts.map
|
|
@@ -0,0 +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;AAG3D;;;;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,CAgOnG"}
|