@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
@@ -9,375 +9,9 @@
9
9
  * blockquotes.
10
10
  */
11
11
  import { getDefaultContext } from '../../context.js';
12
- import { separator } from './separator.js';
13
- import { hyperlink } from './hyperlink.js';
14
- import { graphemeWidth } from '../text/grapheme.js';
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"}