@protomarkdown/parser 1.0.0 → 1.0.1
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 +216 -6
- package/dist/ShadcnCodeGenerator.d.ts +2 -0
- package/dist/ShadcnCodeGenerator.d.ts.map +1 -1
- package/dist/index.esm.js +191 -4
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +191 -4
- package/dist/index.js.map +1 -1
- package/dist/parser/MarkdownParser.d.ts +2 -0
- package/dist/parser/MarkdownParser.d.ts.map +1 -1
- package/dist/parser/types.d.ts +3 -1
- package/dist/parser/types.d.ts.map +1 -1
- package/package.json +4 -1
package/dist/index.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","sources":["../src/parser/MarkdownParser.ts","../src/ShadcnCodeGenerator.ts"],"sourcesContent":["import { MarkdownNode, ParserOptions, ParseResult } from \"./types\";\n\nexport class MarkdownParser {\n private options: ParserOptions;\n\n constructor(options: ParserOptions = {}) {\n this.options = {\n strict: false,\n preserveWhitespace: false,\n ...options,\n };\n }\n\n parse(markdown: string): ParseResult {\n const lines = markdown.split(\"\\n\");\n const nodes: MarkdownNode[] = [];\n const errors: string[] = [];\n let i = 0;\n\n while (i < lines.length) {\n const line = this.options.preserveWhitespace ? lines[i] : lines[i].trim();\n\n if (!line) {\n i++;\n continue;\n }\n\n // Check for table (line with pipes)\n if (line.includes(\"|\") && line.trim().startsWith(\"|\")) {\n const headers = line\n .split(\"|\")\n .map((h) => h.trim())\n .filter((h) => h.length > 0);\n\n i++;\n // Skip separator line (|---|---|)\n if (i < lines.length) {\n const separatorLine = this.options.preserveWhitespace\n ? lines[i]\n : lines[i].trim();\n if (separatorLine.includes(\"-\") && separatorLine.includes(\"|\")) {\n i++;\n }\n }\n\n // Parse table rows\n const rows: string[][] = [];\n while (i < lines.length) {\n const rowLine = this.options.preserveWhitespace\n ? lines[i]\n : lines[i].trim();\n\n if (!rowLine || !rowLine.includes(\"|\")) {\n break;\n }\n\n const cells = rowLine\n .split(\"|\")\n .map((c) => c.trim())\n .filter((c) => c.length > 0);\n rows.push(cells);\n i++;\n }\n\n nodes.push({\n type: \"table\",\n headers,\n rows,\n });\n continue;\n }\n\n // Check for card start\n const cardMatch = line.match(/^\\[--\\s*(.*)$/);\n if (cardMatch) {\n const result = this.parseCard(lines, i, cardMatch[1] || undefined);\n nodes.push(result.node);\n i = result.nextIndex;\n continue;\n }\n\n // Check for grid start ([grid cols-2 gap-4)\n const gridMatch = line.match(/^\\[grid\\s+(.*)$/);\n if (gridMatch) {\n const result = this.parseContainer(lines, i, 'grid', gridMatch[1]);\n nodes.push(result.node);\n i = result.nextIndex;\n continue;\n }\n\n // Check for plain div start ([ or [ class-name)\n const divMatch = line.match(/^\\[\\s*(.*)$/);\n if (divMatch && !line.includes(\"]\")) {\n const result = this.parseContainer(lines, i, 'div', divMatch[1] || '');\n nodes.push(result.node);\n i = result.nextIndex;\n continue;\n }\n\n const node = this.parseLine(line);\n if (node) {\n nodes.push(node);\n } else if (this.options.strict) {\n errors.push(`Line ${i + 1}: Unable to parse \"${line}\"`);\n }\n i++;\n }\n\n return { nodes, errors: errors.length > 0 ? errors : undefined };\n }\n\n private parseCard(\n lines: string[],\n startIndex: number,\n title: string | undefined\n ): { node: MarkdownNode; nextIndex: number } {\n const cardChildren: MarkdownNode[] = [];\n let i = startIndex + 1;\n let depth = 1;\n\n // Parse card content until we find the matching closing --]\n while (i < lines.length && depth > 0) {\n const cardLine = this.options.preserveWhitespace ? lines[i] : lines[i].trim();\n\n // Check for card closing\n if (cardLine === \"--]\") {\n depth--;\n if (depth === 0) {\n break;\n }\n }\n\n // Check for nested card opening (must be before div check)\n if (cardLine.match(/^\\[--\\s*(.*)$/)) {\n const nestedTitle = cardLine.match(/^\\[--\\s*(.*)$/)?.[1] || undefined;\n const result = this.parseCard(lines, i, nestedTitle);\n cardChildren.push(result.node);\n i = result.nextIndex;\n continue;\n }\n\n // Check for nested grid opening\n if (cardLine.match(/^\\[grid\\s+(.*)$/)) {\n const nestedConfig = cardLine.match(/^\\[grid\\s+(.*)$/)?.[1] || '';\n const result = this.parseContainer(lines, i, 'grid', nestedConfig);\n cardChildren.push(result.node);\n i = result.nextIndex;\n continue;\n }\n\n // Check for nested div opening\n if (cardLine.match(/^\\[\\s*(.*)$/) && !cardLine.includes(\"]\")) {\n const nestedConfig = cardLine.match(/^\\[\\s*(.*)$/)?.[1] || '';\n const result = this.parseContainer(lines, i, 'div', nestedConfig);\n cardChildren.push(result.node);\n i = result.nextIndex;\n continue;\n }\n\n if (cardLine) {\n const childNode = this.parseLine(cardLine);\n if (childNode) {\n cardChildren.push(childNode);\n }\n }\n i++;\n }\n\n return {\n node: {\n type: \"card\",\n titleChildren: title ? this.parseInlineEmphasis(title) : undefined,\n children: cardChildren,\n },\n nextIndex: i + 1,\n };\n }\n\n private parseContainer(\n lines: string[],\n startIndex: number,\n type: 'grid' | 'div',\n config: string\n ): { node: MarkdownNode; nextIndex: number } {\n const containerChildren: MarkdownNode[] = [];\n let i = startIndex + 1;\n let depth = 1;\n\n // Parse container content until we find the matching closing ]\n while (i < lines.length && depth > 0) {\n const containerLine = this.options.preserveWhitespace ? lines[i] : lines[i].trim();\n\n // Check for container closing\n if (containerLine === \"]\") {\n depth--;\n if (depth === 0) {\n break;\n }\n }\n\n // Check for nested card opening (must be before div check)\n if (containerLine.match(/^\\[--\\s*(.*)$/)) {\n const nestedTitle = containerLine.match(/^\\[--\\s*(.*)$/)?.[1] || undefined;\n const result = this.parseCard(lines, i, nestedTitle);\n containerChildren.push(result.node);\n i = result.nextIndex;\n continue;\n }\n\n // Check for nested grid opening\n if (containerLine.match(/^\\[grid\\s+(.*)$/)) {\n const nestedConfig = containerLine.match(/^\\[grid\\s+(.*)$/)?.[1] || '';\n const result = this.parseContainer(lines, i, 'grid', nestedConfig);\n containerChildren.push(result.node);\n i = result.nextIndex;\n continue;\n }\n\n // Check for nested div opening\n if (containerLine.match(/^\\[\\s*(.*)$/) && !containerLine.includes(\"]\")) {\n const nestedConfig = containerLine.match(/^\\[\\s*(.*)$/)?.[1] || '';\n const result = this.parseContainer(lines, i, 'div', nestedConfig);\n containerChildren.push(result.node);\n i = result.nextIndex;\n continue;\n }\n\n if (containerLine) {\n const childNode = this.parseLine(containerLine);\n if (childNode) {\n containerChildren.push(childNode);\n }\n }\n i++;\n }\n\n const node: MarkdownNode = {\n type,\n children: containerChildren,\n };\n\n if (type === 'grid') {\n node.gridConfig = config;\n } else if (type === 'div' && config) {\n node.className = config;\n }\n\n return {\n node,\n nextIndex: i + 1,\n };\n }\n\n private parseLine(line: string): MarkdownNode | null {\n // Parse headers (# H1, ## H2, etc.)\n const headerMatch = line.match(/^(#{1,6})\\s+(.+)$/);\n if (headerMatch) {\n return {\n type: \"header\",\n level: headerMatch[1].length,\n children: this.parseInlineEmphasis(headerMatch[2]),\n };\n }\n\n // Parse multiple form fields on one line (inputs, textareas, dropdowns, checkboxes)\n // This must be checked BEFORE single field patterns\n const fieldPattern = /(.+?)\\s+(___|\\|___\\||__\\*|__>(?:\\s*\\[[^\\]]+\\])?|__\\[\\])/g;\n const fieldMatches = [...line.matchAll(fieldPattern)];\n\n if (fieldMatches.length > 1) {\n return {\n type: \"container\",\n children: fieldMatches.map((match) => {\n const label = match[1].trim();\n const marker = match[2];\n\n if (marker === '__*') {\n return {\n type: \"input\",\n label,\n inputType: \"password\",\n } as MarkdownNode;\n } else if (marker === '|___|') {\n return {\n type: \"textarea\",\n label,\n } as MarkdownNode;\n } else if (marker === '__[]') {\n return {\n type: \"checkbox\",\n label,\n } as MarkdownNode;\n } else if (marker.startsWith('__>')) {\n // Handle dropdown with or without options\n const optionsMatch = marker.match(/\\[([^\\]]+)\\]/);\n if (optionsMatch) {\n const options = optionsMatch[1]\n .split(\",\")\n .map((opt) => opt.trim())\n .filter((opt) => opt.length > 0);\n return {\n type: \"dropdown\",\n label,\n options,\n } as MarkdownNode;\n } else {\n return {\n type: \"dropdown\",\n label,\n } as MarkdownNode;\n }\n } else { // ___\n return {\n type: \"input\",\n label,\n inputType: \"text\",\n } as MarkdownNode;\n }\n }),\n };\n }\n\n // Parse password inputs (Label __*)\n const passwordMatch = line.match(/^(.+?)\\s+__\\*$/);\n if (passwordMatch) {\n return {\n type: \"input\",\n label: passwordMatch[1],\n inputType: \"password\",\n };\n }\n\n // Parse textarea (Label |___|)\n const textareaMatch = line.match(/^(.+?)\\s+\\|___\\|$/);\n if (textareaMatch) {\n return {\n type: \"textarea\",\n label: textareaMatch[1],\n };\n }\n\n // Parse text inputs (Label ___)\n const inputMatch = line.match(/^(.+?)\\s+___$/);\n if (inputMatch) {\n return {\n type: \"input\",\n label: inputMatch[1],\n inputType: \"text\",\n };\n }\n\n // Parse checkbox (Label __[])\n const checkboxMatch = line.match(/^(.+?)\\s+__\\[\\]$/);\n if (checkboxMatch) {\n return {\n type: \"checkbox\",\n label: checkboxMatch[1],\n };\n }\n\n // Parse radio group (Label __() [option1, option2, option3])\n const radioGroupMatch = line.match(/^(.+?)\\s+__\\(\\)\\s+\\[(.+?)\\]$/);\n if (radioGroupMatch) {\n const options = radioGroupMatch[2]\n .split(\",\")\n .map((opt) => opt.trim())\n .filter((opt) => opt.length > 0);\n return {\n type: \"radiogroup\",\n label: radioGroupMatch[1],\n options,\n };\n }\n\n // Parse dropdowns with options (Label __> [option1, option2, option3])\n const dropdownWithOptionsMatch = line.match(/^(.+?)\\s+__>\\s+\\[(.+?)\\]$/);\n if (dropdownWithOptionsMatch) {\n const options = dropdownWithOptionsMatch[2]\n .split(\",\")\n .map((opt) => opt.trim())\n .filter((opt) => opt.length > 0);\n return {\n type: \"dropdown\",\n label: dropdownWithOptionsMatch[1],\n options,\n };\n }\n\n // Parse dropdowns without options (Label __>)\n const dropdownMatch = line.match(/^(.+?)\\s+__>$/);\n if (dropdownMatch) {\n return {\n type: \"dropdown\",\n label: dropdownMatch[1],\n };\n }\n\n // Parse image ()\n const imageMatch = line.match(/^!\\[([^\\]]*)\\]\\(([^)]+)\\)$/);\n if (imageMatch) {\n return {\n type: \"image\",\n alt: imageMatch[1],\n src: imageMatch[2],\n };\n }\n\n // Parse multiple buttons on one line ([btn1][(btn2)])\n const multiButtonMatch = line.match(/^(\\[\\(?[^\\[\\]|]+\\)?\\]\\s*)+$/);\n if (multiButtonMatch) {\n const buttons = line.match(/\\[(\\(?)[^\\[\\]|]+?(\\)?)\\]/g);\n if (buttons && buttons.length > 1) {\n return {\n type: \"container\",\n children: buttons.map((btn) => {\n const innerMatch = btn.match(/\\[(\\(?)(.+?)(\\)?)\\]/);\n if (innerMatch) {\n const isDefault = innerMatch[1] === \"(\" && innerMatch[3] === \")\";\n const content = innerMatch[2];\n\n return {\n type: \"button\",\n content,\n variant: isDefault ? \"default\" : \"outline\",\n };\n }\n return {\n type: \"button\",\n content: btn.slice(1, -1),\n variant: \"outline\",\n };\n }),\n };\n }\n }\n\n // Parse default button [(button text)] or [(button text) | classes]\n const defaultButtonMatch = line.match(/^\\[\\((.+?)\\)(?:\\s*\\|\\s*(.+))?\\]$/);\n if (defaultButtonMatch) {\n const content = defaultButtonMatch[1];\n const className = defaultButtonMatch[2]?.trim();\n\n return {\n type: \"button\",\n content,\n variant: \"default\",\n ...(className && { className }),\n };\n }\n\n // Parse outline button [button text] or [button text | classes]\n const buttonMatch = line.match(/^\\[([^|]+?)(?:\\s*\\|\\s*(.+))?\\]$/);\n if (buttonMatch) {\n const content = buttonMatch[1].trim();\n const className = buttonMatch[2]?.trim();\n\n return {\n type: \"button\",\n content,\n variant: \"outline\",\n ...(className && { className }),\n };\n }\n\n // Plain text\n return {\n type: \"text\",\n children: this.parseInlineEmphasis(line),\n };\n }\n\n private parseInlineEmphasis(text: string): MarkdownNode[] {\n const nodes: MarkdownNode[] = [];\n let remaining = text;\n let position = 0;\n\n while (position < remaining.length) {\n // Try to match bold-italic (_*text*_)\n const boldItalicMatch = remaining\n .slice(position)\n .match(/^_\\*(.+?)\\*_/);\n if (boldItalicMatch) {\n const content = boldItalicMatch[1];\n nodes.push({\n type: \"bold\",\n children: [{ type: \"italic\", content }],\n });\n position += boldItalicMatch[0].length;\n continue;\n }\n\n // Try to match bold (*text*)\n const boldMatch = remaining.slice(position).match(/^\\*(.+?)\\*/);\n if (boldMatch) {\n nodes.push({\n type: \"bold\",\n content: boldMatch[1],\n });\n position += boldMatch[0].length;\n continue;\n }\n\n // Try to match italic (_text_)\n const italicMatch = remaining.slice(position).match(/^_(.+?)_/);\n if (italicMatch) {\n nodes.push({\n type: \"italic\",\n content: italicMatch[1],\n });\n position += italicMatch[0].length;\n continue;\n }\n\n // No emphasis found, consume until next emphasis marker or end of string\n const nextAsterisk = remaining.slice(position).indexOf(\"*\");\n const nextUnderscore = remaining.slice(position).indexOf(\"_\");\n\n // Find the nearest marker\n let nextMarker = -1;\n if (nextAsterisk !== -1 && nextUnderscore !== -1) {\n nextMarker = Math.min(nextAsterisk, nextUnderscore);\n } else if (nextAsterisk !== -1) {\n nextMarker = nextAsterisk;\n } else if (nextUnderscore !== -1) {\n nextMarker = nextUnderscore;\n }\n\n const textEnd =\n nextMarker === -1\n ? remaining.length\n : position + nextMarker;\n\n if (textEnd > position) {\n nodes.push({\n type: \"text\",\n content: remaining.slice(position, textEnd),\n });\n position = textEnd;\n } else {\n // Edge case: marker that doesn't form emphasis\n nodes.push({\n type: \"text\",\n content: remaining.slice(position, position + 1),\n });\n position++;\n }\n }\n\n return nodes;\n }\n}\n","import { MarkdownNode } from \"./parser/types\";\n\n/**\n * Generates React component code from a Proto Markdown AST using Shadcn UI components\n */\nexport class ShadcnCodeGenerator {\n private indentLevel = 0;\n private readonly indentSize = 2;\n private requiredImports = new Set<string>();\n\n /**\n * Generate complete React component code from markdown AST\n */\n generate(nodes: MarkdownNode[]): string {\n this.indentLevel = 0;\n this.requiredImports.clear();\n\n // Generate component body\n const componentBody = this.generateNodes(nodes);\n\n // Add base indentation (6 spaces = 3 levels for proper JSX nesting)\n const indentedBody = componentBody\n .split('\\n')\n .map(line => line ? ` ${line}` : line)\n .join('\\n');\n\n // Collect imports\n const imports = this.generateImports();\n\n return `${imports}\n\nexport function GeneratedComponent() {\n return (\n <div className=\"space-y-2\">\n${indentedBody}\n </div>\n );\n}\n`;\n }\n\n /**\n * Generate imports based on used components\n */\n private generateImports(): string {\n const imports: string[] = [];\n\n if (this.requiredImports.has(\"Button\")) {\n imports.push('import { Button } from \"@/components/ui/button\";');\n }\n if (this.requiredImports.has(\"Input\")) {\n imports.push('import { Input } from \"@/components/ui/input\";');\n }\n if (this.requiredImports.has(\"Textarea\")) {\n imports.push('import { Textarea } from \"@/components/ui/textarea\";');\n }\n if (this.requiredImports.has(\"Card\")) {\n imports.push('import { Card, CardHeader, CardTitle, CardContent } from \"@/components/ui/card\";');\n }\n if (this.requiredImports.has(\"Checkbox\")) {\n imports.push('import { Checkbox } from \"@/components/ui/checkbox\";');\n }\n if (this.requiredImports.has(\"RadioGroup\")) {\n imports.push('import { RadioGroup, RadioGroupItem } from \"@/components/ui/radio-group\";');\n }\n if (this.requiredImports.has(\"Select\")) {\n imports.push('import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from \"@/components/ui/select\";');\n }\n if (this.requiredImports.has(\"Table\")) {\n imports.push('import { Table, TableHeader, TableBody, TableRow, TableHead, TableCell } from \"@/components/ui/table\";');\n }\n if (this.requiredImports.has(\"Label\")) {\n imports.push('import { Label } from \"@/components/ui/label\";');\n }\n\n return imports.join(\"\\n\");\n }\n\n /**\n * Generate code for multiple nodes\n */\n private generateNodes(nodes: MarkdownNode[]): string {\n return nodes.map((node, index) => this.generateNode(node, index)).join(\"\\n\");\n }\n\n /**\n * Generate code for a single node\n */\n private generateNode(node: MarkdownNode, index: number): string {\n switch (node.type) {\n case \"header\":\n return this.generateHeader(node, index);\n case \"input\":\n return this.generateInput(node, index);\n case \"textarea\":\n return this.generateTextarea(node, index);\n case \"dropdown\":\n return this.generateDropdown(node, index);\n case \"checkbox\":\n return this.generateCheckbox(node, index);\n case \"radiogroup\":\n return this.generateRadioGroup(node, index);\n case \"button\":\n return this.generateButton(node, index);\n case \"container\":\n return this.generateContainer(node, index);\n case \"card\":\n return this.generateCard(node, index);\n case \"table\":\n return this.generateTable(node, index);\n case \"grid\":\n return this.generateGrid(node, index);\n case \"div\":\n return this.generateDiv(node, index);\n case \"text\":\n return this.generateText(node, index);\n case \"bold\":\n return this.generateBold(node, index);\n case \"italic\":\n return this.generateItalic(node, index);\n case \"image\":\n return this.generateImage(node, index);\n default:\n return \"\";\n }\n }\n\n private indent(): string {\n return \" \".repeat(this.indentLevel * this.indentSize);\n }\n\n private escapeJSX(text: string): string {\n return text\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/\"/g, \""\")\n .replace(/{/g, \"{\")\n .replace(/}/g, \"}\");\n }\n\n private generateHeader(node: MarkdownNode, index: number): string {\n const Tag = `h${node.level}`;\n const className = `text-${node.level === 1 ? \"4xl\" : node.level === 2 ? \"3xl\" : node.level === 3 ? \"2xl\" : node.level === 4 ? \"xl\" : node.level === 5 ? \"lg\" : \"base\"} font-bold`;\n\n let content: string;\n if (node.children && node.children.length > 0) {\n // Inline children (emphasis)\n content = node.children.map((child, i) => this.generateInlineNode(child, i)).join(\"\");\n } else {\n content = this.escapeJSX(node.content || \"\");\n }\n\n return `${this.indent()}<${Tag} key={${index}} className=\"${className}\">${content}</${Tag}>`;\n }\n\n private generateInlineNode(node: MarkdownNode, index: number): string {\n switch (node.type) {\n case \"bold\":\n const boldContent = node.children?.map((child, i) => this.generateInlineNode(child, i)).join(\"\") || this.escapeJSX(node.content || \"\");\n return `<strong key={${index}}>${boldContent}</strong>`;\n case \"italic\":\n const italicContent = node.children?.map((child, i) => this.generateInlineNode(child, i)).join(\"\") || this.escapeJSX(node.content || \"\");\n return `<em key={${index}}>${italicContent}</em>`;\n case \"text\":\n if (node.children && node.children.length > 0) {\n return node.children.map((child, i) => this.generateInlineNode(child, i)).join(\"\");\n }\n return this.escapeJSX(node.content || \"\");\n default:\n return this.escapeJSX(node.content || \"\");\n }\n }\n\n private generateInput(node: MarkdownNode, index: number): string {\n this.requiredImports.add(\"Input\");\n this.requiredImports.add(\"Label\");\n const id = node.id || `input-${index}`;\n const type = node.inputType || \"text\";\n\n return `${this.indent()}<div key={${index}} className=\"space-y-2\">\n${this.indent()} <Label htmlFor=\"${id}\">${this.escapeJSX(node.label || \"\")}</Label>\n${this.indent()} <Input id=\"${id}\" type=\"${type}\" />\n${this.indent()}</div>`;\n }\n\n private generateTextarea(node: MarkdownNode, index: number): string {\n this.requiredImports.add(\"Textarea\");\n this.requiredImports.add(\"Label\");\n const id = node.id || `textarea-${index}`;\n\n return `${this.indent()}<div key={${index}} className=\"space-y-2\">\n${this.indent()} <Label htmlFor=\"${id}\">${this.escapeJSX(node.label || \"\")}</Label>\n${this.indent()} <Textarea id=\"${id}\" />\n${this.indent()}</div>`;\n }\n\n private generateDropdown(node: MarkdownNode, index: number): string {\n this.requiredImports.add(\"Select\");\n this.requiredImports.add(\"Label\");\n const id = node.id || `select-${index}`;\n const options = node.options || [];\n\n return `${this.indent()}<div key={${index}} className=\"space-y-2\">\n${this.indent()} <Label htmlFor=\"${id}\">${this.escapeJSX(node.label || \"\")}</Label>\n${this.indent()} <Select>\n${this.indent()} <SelectTrigger id=\"${id}\">\n${this.indent()} <SelectValue placeholder=\"Select an option\" />\n${this.indent()} </SelectTrigger>\n${this.indent()} <SelectContent>\n${options.map((opt, i) => `${this.indent()} <SelectItem key={${i}} value=\"${opt.toLowerCase().replace(/\\s+/g, \"-\")}\">${this.escapeJSX(opt)}</SelectItem>`).join(\"\\n\")}\n${this.indent()} </SelectContent>\n${this.indent()} </Select>\n${this.indent()}</div>`;\n }\n\n private generateCheckbox(node: MarkdownNode, index: number): string {\n this.requiredImports.add(\"Checkbox\");\n this.requiredImports.add(\"Label\");\n const id = node.id || `checkbox-${index}`;\n\n return `${this.indent()}<div key={${index}} className=\"flex items-center space-x-2\">\n${this.indent()} <Checkbox id=\"${id}\" />\n${this.indent()} <Label htmlFor=\"${id}\" className=\"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\">\n${this.indent()} ${this.escapeJSX(node.label || \"\")}\n${this.indent()} </Label>\n${this.indent()}</div>`;\n }\n\n private generateRadioGroup(node: MarkdownNode, index: number): string {\n this.requiredImports.add(\"RadioGroup\");\n this.requiredImports.add(\"Label\");\n const options = node.options || [];\n\n return `${this.indent()}<div key={${index}} className=\"space-y-2\">\n${this.indent()} <Label>${this.escapeJSX(node.label || \"\")}</Label>\n${this.indent()} <RadioGroup>\n${options.map((opt, i) => {\n const optId = `radio-${index}-${i}`;\n const value = opt.toLowerCase().replace(/\\s+/g, \"-\");\n return `${this.indent()} <div className=\"flex items-center space-x-2\">\n${this.indent()} <RadioGroupItem id=\"${optId}\" value=\"${value}\" />\n${this.indent()} <Label htmlFor=\"${optId}\">${this.escapeJSX(opt)}</Label>\n${this.indent()} </div>`;\n }).join(\"\\n\")}\n${this.indent()} </RadioGroup>\n${this.indent()}</div>`;\n }\n\n private generateButton(node: MarkdownNode, index: number): string {\n this.requiredImports.add(\"Button\");\n const variant = node.variant || \"default\";\n const className = node.className ? ` className=\"${node.className}\"` : \"\";\n\n return `${this.indent()}<Button key={${index}} variant=\"${variant}\"${className}>${this.escapeJSX(node.content || \"\")}</Button>`;\n }\n\n private generateContainer(node: MarkdownNode, index: number): string {\n this.indentLevel++;\n const children = node.children ? this.generateNodes(node.children) : \"\";\n this.indentLevel--;\n\n return `${this.indent()}<div key={${index}} className=\"flex gap-2\">\n${children}\n${this.indent()}</div>`;\n }\n\n private generateCard(node: MarkdownNode, index: number): string {\n this.requiredImports.add(\"Card\");\n\n let titleContent = \"\";\n if (node.titleChildren && node.titleChildren.length > 0) {\n titleContent = node.titleChildren.map((child, i) => this.generateInlineNode(child, i)).join(\"\");\n } else if (node.title) {\n titleContent = this.escapeJSX(node.title);\n }\n\n // Increment by 2 to account for Card wrapper + CardContent nesting\n this.indentLevel += 2;\n const children = node.children ? this.generateNodes(node.children) : \"\";\n this.indentLevel -= 2;\n\n const cardContent = titleContent\n ? `${this.indent()}<Card key={${index}}>\n${this.indent()} <CardHeader>\n${this.indent()} <CardTitle>${titleContent}</CardTitle>\n${this.indent()} </CardHeader>\n${this.indent()} <CardContent className=\"space-y-2\">\n${children}\n${this.indent()} </CardContent>\n${this.indent()}</Card>`\n : `${this.indent()}<Card key={${index}}>\n${this.indent()} <CardContent className=\"pt-6 space-y-2\">\n${children}\n${this.indent()} </CardContent>\n${this.indent()}</Card>`;\n\n return cardContent;\n }\n\n private generateTable(node: MarkdownNode, index: number): string {\n this.requiredImports.add(\"Table\");\n const headers = node.headers || [];\n const rows = node.rows || [];\n\n return `${this.indent()}<Table key={${index}}>\n${this.indent()} <TableHeader>\n${this.indent()} <TableRow>\n${headers.map((header, i) => `${this.indent()} <TableHead key={${i}}>${this.escapeJSX(header)}</TableHead>`).join(\"\\n\")}\n${this.indent()} </TableRow>\n${this.indent()} </TableHeader>\n${this.indent()} <TableBody>\n${rows.map((row, i) => `${this.indent()} <TableRow key={${i}}>\n${row.map((cell, j) => `${this.indent()} <TableCell key={${j}}>${this.escapeJSX(cell)}</TableCell>`).join(\"\\n\")}\n${this.indent()} </TableRow>`).join(\"\\n\")}\n${this.indent()} </TableBody>\n${this.indent()}</Table>`;\n }\n\n private generateGrid(node: MarkdownNode, index: number): string {\n const gridClasses = `grid ${node.gridConfig || \"\"}`;\n\n this.indentLevel++;\n const children = node.children ? this.generateNodes(node.children) : \"\";\n this.indentLevel--;\n\n return `${this.indent()}<div key={${index}} className=\"${gridClasses}\">\n${children}\n${this.indent()}</div>`;\n }\n\n private generateDiv(node: MarkdownNode, index: number): string {\n const className = node.className || \"\";\n\n this.indentLevel++;\n const children = node.children ? this.generateNodes(node.children) : \"\";\n this.indentLevel--;\n\n return `${this.indent()}<div key={${index}} className=\"${className}\">\n${children}\n${this.indent()}</div>`;\n }\n\n private generateText(node: MarkdownNode, index: number): string {\n if (node.children && node.children.length > 0) {\n // Text with inline emphasis\n const inlineContent = node.children.map((child, i) => this.generateInlineNode(child, i)).join(\"\");\n return `${this.indent()}<p key={${index}}>${inlineContent}</p>`;\n }\n return `${this.indent()}<p key={${index}}>${this.escapeJSX(node.content || \"\")}</p>`;\n }\n\n private generateBold(node: MarkdownNode, index: number): string {\n if (node.children && node.children.length > 0) {\n const content = node.children.map((child, i) => this.generateInlineNode(child, i)).join(\"\");\n return `${this.indent()}<strong key={${index}}>${content}</strong>`;\n }\n return `${this.indent()}<strong key={${index}}>${this.escapeJSX(node.content || \"\")}</strong>`;\n }\n\n private generateItalic(node: MarkdownNode, index: number): string {\n if (node.children && node.children.length > 0) {\n const content = node.children.map((child, i) => this.generateInlineNode(child, i)).join(\"\");\n return `${this.indent()}<em key={${index}}>${content}</em>`;\n }\n return `${this.indent()}<em key={${index}}>${this.escapeJSX(node.content || \"\")}</em>`;\n }\n\n private generateImage(node: MarkdownNode, index: number): string {\n const src = node.src || \"\";\n const alt = node.alt || \"\";\n\n return `${this.indent()}<img key={${index}} src=\"${src}\" alt=\"${this.escapeJSX(alt)}\" className=\"max-w-full h-auto\" />`;\n }\n}\n"],"names":[],"mappings":"MAEa,cAAc,CAAA;AAGzB,IAAA,WAAA,CAAY,UAAyB,EAAE,EAAA;QACrC,IAAI,CAAC,OAAO,GAAG;AACb,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,kBAAkB,EAAE,KAAK;AACzB,YAAA,GAAG,OAAO;SACX;IACH;AAEA,IAAA,KAAK,CAAC,QAAgB,EAAA;QACpB,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;QAClC,MAAM,KAAK,GAAmB,EAAE;QAChC,MAAM,MAAM,GAAa,EAAE;QAC3B,IAAI,CAAC,GAAG,CAAC;AAET,QAAA,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE;YACvB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;YAEzE,IAAI,CAAC,IAAI,EAAE;AACT,gBAAA,CAAC,EAAE;gBACH;YACF;;AAGA,YAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;gBACrD,MAAM,OAAO,GAAG;qBACb,KAAK,CAAC,GAAG;qBACT,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE;AACnB,qBAAA,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;AAE9B,gBAAA,CAAC,EAAE;;AAEH,gBAAA,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE;AACpB,oBAAA,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC;AACjC,0BAAE,KAAK,CAAC,CAAC;0BACP,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;AACnB,oBAAA,IAAI,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AAC9D,wBAAA,CAAC,EAAE;oBACL;gBACF;;gBAGA,MAAM,IAAI,GAAe,EAAE;AAC3B,gBAAA,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE;AACvB,oBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;AAC3B,0BAAE,KAAK,CAAC,CAAC;0BACP,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;oBAEnB,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;wBACtC;oBACF;oBAEA,MAAM,KAAK,GAAG;yBACX,KAAK,CAAC,GAAG;yBACT,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE;AACnB,yBAAA,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;AAC9B,oBAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;AAChB,oBAAA,CAAC,EAAE;gBACL;gBAEA,KAAK,CAAC,IAAI,CAAC;AACT,oBAAA,IAAI,EAAE,OAAO;oBACb,OAAO;oBACP,IAAI;AACL,iBAAA,CAAC;gBACF;YACF;;YAGA,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC;YAC7C,IAAI,SAAS,EAAE;AACb,gBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC;AAClE,gBAAA,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;AACvB,gBAAA,CAAC,GAAG,MAAM,CAAC,SAAS;gBACpB;YACF;;YAGA,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC;YAC/C,IAAI,SAAS,EAAE;AACb,gBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;AAClE,gBAAA,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;AACvB,gBAAA,CAAC,GAAG,MAAM,CAAC,SAAS;gBACpB;YACF;;YAGA,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;YAC1C,IAAI,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AACnC,gBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AACtE,gBAAA,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;AACvB,gBAAA,CAAC,GAAG,MAAM,CAAC,SAAS;gBACpB;YACF;YAEA,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YACjC,IAAI,IAAI,EAAE;AACR,gBAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;YAClB;AAAO,iBAAA,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;gBAC9B,MAAM,CAAC,IAAI,CAAC,CAAA,KAAA,EAAQ,CAAC,GAAG,CAAC,CAAA,mBAAA,EAAsB,IAAI,CAAA,CAAA,CAAG,CAAC;YACzD;AACA,YAAA,CAAC,EAAE;QACL;AAEA,QAAA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,MAAM,GAAG,SAAS,EAAE;IAClE;AAEQ,IAAA,SAAS,CACf,KAAe,EACf,UAAkB,EAClB,KAAyB,EAAA;QAEzB,MAAM,YAAY,GAAmB,EAAE;AACvC,QAAA,IAAI,CAAC,GAAG,UAAU,GAAG,CAAC;QACtB,IAAI,KAAK,GAAG,CAAC;;QAGb,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,GAAG,CAAC,EAAE;YACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;;AAG7E,YAAA,IAAI,QAAQ,KAAK,KAAK,EAAE;AACtB,gBAAA,KAAK,EAAE;AACP,gBAAA,IAAI,KAAK,KAAK,CAAC,EAAE;oBACf;gBACF;YACF;;AAGA,YAAA,IAAI,QAAQ,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE;AACnC,gBAAA,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,IAAI,SAAS;AACrE,gBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,WAAW,CAAC;AACpD,gBAAA,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;AAC9B,gBAAA,CAAC,GAAG,MAAM,CAAC,SAAS;gBACpB;YACF;;AAGA,YAAA,IAAI,QAAQ,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAE;AACrC,gBAAA,MAAM,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE;AACjE,gBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC;AAClE,gBAAA,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;AAC9B,gBAAA,CAAC,GAAG,MAAM,CAAC,SAAS;gBACpB;YACF;;AAGA,YAAA,IAAI,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AAC5D,gBAAA,MAAM,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE;AAC7D,gBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC;AACjE,gBAAA,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;AAC9B,gBAAA,CAAC,GAAG,MAAM,CAAC,SAAS;gBACpB;YACF;YAEA,IAAI,QAAQ,EAAE;gBACZ,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;gBAC1C,IAAI,SAAS,EAAE;AACb,oBAAA,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;gBAC9B;YACF;AACA,YAAA,CAAC,EAAE;QACL;QAEA,OAAO;AACL,YAAA,IAAI,EAAE;AACJ,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,aAAa,EAAE,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,GAAG,SAAS;AAClE,gBAAA,QAAQ,EAAE,YAAY;AACvB,aAAA;YACD,SAAS,EAAE,CAAC,GAAG,CAAC;SACjB;IACH;AAEQ,IAAA,cAAc,CACpB,KAAe,EACf,UAAkB,EAClB,IAAoB,EACpB,MAAc,EAAA;QAEd,MAAM,iBAAiB,GAAmB,EAAE;AAC5C,QAAA,IAAI,CAAC,GAAG,UAAU,GAAG,CAAC;QACtB,IAAI,KAAK,GAAG,CAAC;;QAGb,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,GAAG,CAAC,EAAE;YACpC,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;;AAGlF,YAAA,IAAI,aAAa,KAAK,GAAG,EAAE;AACzB,gBAAA,KAAK,EAAE;AACP,gBAAA,IAAI,KAAK,KAAK,CAAC,EAAE;oBACf;gBACF;YACF;;AAGA,YAAA,IAAI,aAAa,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE;AACxC,gBAAA,MAAM,WAAW,GAAG,aAAa,CAAC,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,IAAI,SAAS;AAC1E,gBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,WAAW,CAAC;AACpD,gBAAA,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;AACnC,gBAAA,CAAC,GAAG,MAAM,CAAC,SAAS;gBACpB;YACF;;AAGA,YAAA,IAAI,aAAa,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAE;AAC1C,gBAAA,MAAM,YAAY,GAAG,aAAa,CAAC,KAAK,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE;AACtE,gBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC;AAClE,gBAAA,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;AACnC,gBAAA,CAAC,GAAG,MAAM,CAAC,SAAS;gBACpB;YACF;;AAGA,YAAA,IAAI,aAAa,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AACtE,gBAAA,MAAM,YAAY,GAAG,aAAa,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE;AAClE,gBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC;AACjE,gBAAA,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;AACnC,gBAAA,CAAC,GAAG,MAAM,CAAC,SAAS;gBACpB;YACF;YAEA,IAAI,aAAa,EAAE;gBACjB,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC;gBAC/C,IAAI,SAAS,EAAE;AACb,oBAAA,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC;gBACnC;YACF;AACA,YAAA,CAAC,EAAE;QACL;AAEA,QAAA,MAAM,IAAI,GAAiB;YACzB,IAAI;AACJ,YAAA,QAAQ,EAAE,iBAAiB;SAC5B;AAED,QAAA,IAAI,IAAI,KAAK,MAAM,EAAE;AACnB,YAAA,IAAI,CAAC,UAAU,GAAG,MAAM;QAC1B;AAAO,aAAA,IAAI,IAAI,KAAK,KAAK,IAAI,MAAM,EAAE;AACnC,YAAA,IAAI,CAAC,SAAS,GAAG,MAAM;QACzB;QAEA,OAAO;YACL,IAAI;YACJ,SAAS,EAAE,CAAC,GAAG,CAAC;SACjB;IACH;AAEQ,IAAA,SAAS,CAAC,IAAY,EAAA;;QAE5B,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC;QACnD,IAAI,WAAW,EAAE;YACf,OAAO;AACL,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM;gBAC5B,QAAQ,EAAE,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;aACnD;QACH;;;QAIA,MAAM,YAAY,GAAG,0DAA0D;QAC/E,MAAM,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;AAErD,QAAA,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;YAC3B,OAAO;AACL,gBAAA,IAAI,EAAE,WAAW;gBACjB,QAAQ,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,KAAK,KAAI;oBACnC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;AAC7B,oBAAA,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC;AAEvB,oBAAA,IAAI,MAAM,KAAK,KAAK,EAAE;wBACpB,OAAO;AACL,4BAAA,IAAI,EAAE,OAAO;4BACb,KAAK;AACL,4BAAA,SAAS,EAAE,UAAU;yBACN;oBACnB;AAAO,yBAAA,IAAI,MAAM,KAAK,OAAO,EAAE;wBAC7B,OAAO;AACL,4BAAA,IAAI,EAAE,UAAU;4BAChB,KAAK;yBACU;oBACnB;AAAO,yBAAA,IAAI,MAAM,KAAK,MAAM,EAAE;wBAC5B,OAAO;AACL,4BAAA,IAAI,EAAE,UAAU;4BAChB,KAAK;yBACU;oBACnB;AAAO,yBAAA,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;;wBAEnC,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC;wBACjD,IAAI,YAAY,EAAE;AAChB,4BAAA,MAAM,OAAO,GAAG,YAAY,CAAC,CAAC;iCAC3B,KAAK,CAAC,GAAG;iCACT,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,IAAI,EAAE;AACvB,iCAAA,MAAM,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;4BAClC,OAAO;AACL,gCAAA,IAAI,EAAE,UAAU;gCAChB,KAAK;gCACL,OAAO;6BACQ;wBACnB;6BAAO;4BACL,OAAO;AACL,gCAAA,IAAI,EAAE,UAAU;gCAChB,KAAK;6BACU;wBACnB;oBACF;AAAO,yBAAA;wBACL,OAAO;AACL,4BAAA,IAAI,EAAE,OAAO;4BACb,KAAK;AACL,4BAAA,SAAS,EAAE,MAAM;yBACF;oBACnB;AACF,gBAAA,CAAC,CAAC;aACH;QACH;;QAGA,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC;QAClD,IAAI,aAAa,EAAE;YACjB,OAAO;AACL,gBAAA,IAAI,EAAE,OAAO;AACb,gBAAA,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC;AACvB,gBAAA,SAAS,EAAE,UAAU;aACtB;QACH;;QAGA,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC;QACrD,IAAI,aAAa,EAAE;YACjB,OAAO;AACL,gBAAA,IAAI,EAAE,UAAU;AAChB,gBAAA,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC;aACxB;QACH;;QAGA,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC;QAC9C,IAAI,UAAU,EAAE;YACd,OAAO;AACL,gBAAA,IAAI,EAAE,OAAO;AACb,gBAAA,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC;AACpB,gBAAA,SAAS,EAAE,MAAM;aAClB;QACH;;QAGA,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC;QACpD,IAAI,aAAa,EAAE;YACjB,OAAO;AACL,gBAAA,IAAI,EAAE,UAAU;AAChB,gBAAA,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC;aACxB;QACH;;QAGA,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,8BAA8B,CAAC;QAClE,IAAI,eAAe,EAAE;AACnB,YAAA,MAAM,OAAO,GAAG,eAAe,CAAC,CAAC;iBAC9B,KAAK,CAAC,GAAG;iBACT,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,IAAI,EAAE;AACvB,iBAAA,MAAM,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;YAClC,OAAO;AACL,gBAAA,IAAI,EAAE,YAAY;AAClB,gBAAA,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC;gBACzB,OAAO;aACR;QACH;;QAGA,MAAM,wBAAwB,GAAG,IAAI,CAAC,KAAK,CAAC,2BAA2B,CAAC;QACxE,IAAI,wBAAwB,EAAE;AAC5B,YAAA,MAAM,OAAO,GAAG,wBAAwB,CAAC,CAAC;iBACvC,KAAK,CAAC,GAAG;iBACT,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,IAAI,EAAE;AACvB,iBAAA,MAAM,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;YAClC,OAAO;AACL,gBAAA,IAAI,EAAE,UAAU;AAChB,gBAAA,KAAK,EAAE,wBAAwB,CAAC,CAAC,CAAC;gBAClC,OAAO;aACR;QACH;;QAGA,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC;QACjD,IAAI,aAAa,EAAE;YACjB,OAAO;AACL,gBAAA,IAAI,EAAE,UAAU;AAChB,gBAAA,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC;aACxB;QACH;;QAGA,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,4BAA4B,CAAC;QAC3D,IAAI,UAAU,EAAE;YACd,OAAO;AACL,gBAAA,IAAI,EAAE,OAAO;AACb,gBAAA,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC;AAClB,gBAAA,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC;aACnB;QACH;;QAGA,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,6BAA6B,CAAC;QAClE,IAAI,gBAAgB,EAAE;YACpB,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,2BAA2B,CAAC;YACvD,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;gBACjC,OAAO;AACL,oBAAA,IAAI,EAAE,WAAW;oBACjB,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;wBAC5B,MAAM,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,qBAAqB,CAAC;wBACnD,IAAI,UAAU,EAAE;AACd,4BAAA,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,KAAK,GAAG;AAChE,4BAAA,MAAM,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC;4BAE7B,OAAO;AACL,gCAAA,IAAI,EAAE,QAAQ;gCACd,OAAO;gCACP,OAAO,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS;6BAC3C;wBACH;wBACA,OAAO;AACL,4BAAA,IAAI,EAAE,QAAQ;4BACd,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;AACzB,4BAAA,OAAO,EAAE,SAAS;yBACnB;AACH,oBAAA,CAAC,CAAC;iBACH;YACH;QACF;;QAGA,MAAM,kBAAkB,GAAG,IAAI,CAAC,KAAK,CAAC,kCAAkC,CAAC;QACzE,IAAI,kBAAkB,EAAE;AACtB,YAAA,MAAM,OAAO,GAAG,kBAAkB,CAAC,CAAC,CAAC;YACrC,MAAM,SAAS,GAAG,kBAAkB,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE;YAE/C,OAAO;AACL,gBAAA,IAAI,EAAE,QAAQ;gBACd,OAAO;AACP,gBAAA,OAAO,EAAE,SAAS;AAClB,gBAAA,IAAI,SAAS,IAAI,EAAE,SAAS,EAAE,CAAC;aAChC;QACH;;QAGA,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,iCAAiC,CAAC;QACjE,IAAI,WAAW,EAAE;YACf,MAAM,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;YACrC,MAAM,SAAS,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE;YAExC,OAAO;AACL,gBAAA,IAAI,EAAE,QAAQ;gBACd,OAAO;AACP,gBAAA,OAAO,EAAE,SAAS;AAClB,gBAAA,IAAI,SAAS,IAAI,EAAE,SAAS,EAAE,CAAC;aAChC;QACH;;QAGA,OAAO;AACL,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,QAAQ,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;SACzC;IACH;AAEQ,IAAA,mBAAmB,CAAC,IAAY,EAAA;QACtC,MAAM,KAAK,GAAmB,EAAE;QAChC,IAAI,SAAS,GAAG,IAAI;QACpB,IAAI,QAAQ,GAAG,CAAC;AAEhB,QAAA,OAAO,QAAQ,GAAG,SAAS,CAAC,MAAM,EAAE;;YAElC,MAAM,eAAe,GAAG;iBACrB,KAAK,CAAC,QAAQ;iBACd,KAAK,CAAC,cAAc,CAAC;YACxB,IAAI,eAAe,EAAE;AACnB,gBAAA,MAAM,OAAO,GAAG,eAAe,CAAC,CAAC,CAAC;gBAClC,KAAK,CAAC,IAAI,CAAC;AACT,oBAAA,IAAI,EAAE,MAAM;oBACZ,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;AACxC,iBAAA,CAAC;AACF,gBAAA,QAAQ,IAAI,eAAe,CAAC,CAAC,CAAC,CAAC,MAAM;gBACrC;YACF;;AAGA,YAAA,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC;YAC/D,IAAI,SAAS,EAAE;gBACb,KAAK,CAAC,IAAI,CAAC;AACT,oBAAA,IAAI,EAAE,MAAM;AACZ,oBAAA,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC;AACtB,iBAAA,CAAC;AACF,gBAAA,QAAQ,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM;gBAC/B;YACF;;AAGA,YAAA,MAAM,WAAW,GAAG,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC;YAC/D,IAAI,WAAW,EAAE;gBACf,KAAK,CAAC,IAAI,CAAC;AACT,oBAAA,IAAI,EAAE,QAAQ;AACd,oBAAA,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;AACxB,iBAAA,CAAC;AACF,gBAAA,QAAQ,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM;gBACjC;YACF;;AAGA,YAAA,MAAM,YAAY,GAAG,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;AAC3D,YAAA,MAAM,cAAc,GAAG,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;;AAG7D,YAAA,IAAI,UAAU,GAAG,EAAE;YACnB,IAAI,YAAY,KAAK,EAAE,IAAI,cAAc,KAAK,EAAE,EAAE;gBAChD,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,cAAc,CAAC;YACrD;AAAO,iBAAA,IAAI,YAAY,KAAK,EAAE,EAAE;gBAC9B,UAAU,GAAG,YAAY;YAC3B;AAAO,iBAAA,IAAI,cAAc,KAAK,EAAE,EAAE;gBAChC,UAAU,GAAG,cAAc;YAC7B;AAEA,YAAA,MAAM,OAAO,GACX,UAAU,KAAK;kBACX,SAAS,CAAC;AACZ,kBAAE,QAAQ,GAAG,UAAU;AAE3B,YAAA,IAAI,OAAO,GAAG,QAAQ,EAAE;gBACtB,KAAK,CAAC,IAAI,CAAC;AACT,oBAAA,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE,SAAS,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC;AAC5C,iBAAA,CAAC;gBACF,QAAQ,GAAG,OAAO;YACpB;iBAAO;;gBAEL,KAAK,CAAC,IAAI,CAAC;AACT,oBAAA,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE,SAAS,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,GAAG,CAAC,CAAC;AACjD,iBAAA,CAAC;AACF,gBAAA,QAAQ,EAAE;YACZ;QACF;AAEA,QAAA,OAAO,KAAK;IACd;AACD;;ACpiBD;;AAEG;MACU,mBAAmB,CAAA;AAAhC,IAAA,WAAA,GAAA;QACU,IAAA,CAAA,WAAW,GAAG,CAAC;QACN,IAAA,CAAA,UAAU,GAAG,CAAC;AACvB,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,GAAG,EAAU;IA8W7C;AA5WE;;AAEG;AACH,IAAA,QAAQ,CAAC,KAAqB,EAAA;AAC5B,QAAA,IAAI,CAAC,WAAW,GAAG,CAAC;AACpB,QAAA,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE;;QAG5B,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;;QAG/C,MAAM,YAAY,GAAG;aAClB,KAAK,CAAC,IAAI;AACV,aAAA,GAAG,CAAC,IAAI,IAAI,IAAI,GAAG,CAAA,MAAA,EAAS,IAAI,CAAA,CAAE,GAAG,IAAI;aACzC,IAAI,CAAC,IAAI,CAAC;;AAGb,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,EAAE;AAEtC,QAAA,OAAO,GAAG,OAAO;;;;;EAKnB,YAAY;;;;CAIb;IACC;AAEA;;AAEG;IACK,eAAe,GAAA;QACrB,MAAM,OAAO,GAAa,EAAE;QAE5B,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;AACtC,YAAA,OAAO,CAAC,IAAI,CAAC,kDAAkD,CAAC;QAClE;QACA,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;AACrC,YAAA,OAAO,CAAC,IAAI,CAAC,gDAAgD,CAAC;QAChE;QACA,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;AACxC,YAAA,OAAO,CAAC,IAAI,CAAC,sDAAsD,CAAC;QACtE;QACA,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;AACpC,YAAA,OAAO,CAAC,IAAI,CAAC,kFAAkF,CAAC;QAClG;QACA,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;AACxC,YAAA,OAAO,CAAC,IAAI,CAAC,sDAAsD,CAAC;QACtE;QACA,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE;AAC1C,YAAA,OAAO,CAAC,IAAI,CAAC,2EAA2E,CAAC;QAC3F;QACA,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;AACtC,YAAA,OAAO,CAAC,IAAI,CAAC,yGAAyG,CAAC;QACzH;QACA,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;AACrC,YAAA,OAAO,CAAC,IAAI,CAAC,wGAAwG,CAAC;QACxH;QACA,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;AACrC,YAAA,OAAO,CAAC,IAAI,CAAC,gDAAgD,CAAC;QAChE;AAEA,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;IAC3B;AAEA;;AAEG;AACK,IAAA,aAAa,CAAC,KAAqB,EAAA;QACzC,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;IAC9E;AAEA;;AAEG;IACK,YAAY,CAAC,IAAkB,EAAE,KAAa,EAAA;AACpD,QAAA,QAAQ,IAAI,CAAC,IAAI;AACf,YAAA,KAAK,QAAQ;gBACX,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC;AACzC,YAAA,KAAK,OAAO;gBACV,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC;AACxC,YAAA,KAAK,UAAU;gBACb,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,KAAK,CAAC;AAC3C,YAAA,KAAK,UAAU;gBACb,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,KAAK,CAAC;AAC3C,YAAA,KAAK,UAAU;gBACb,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,KAAK,CAAC;AAC3C,YAAA,KAAK,YAAY;gBACf,OAAO,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,KAAK,CAAC;AAC7C,YAAA,KAAK,QAAQ;gBACX,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC;AACzC,YAAA,KAAK,WAAW;gBACd,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC;AAC5C,YAAA,KAAK,MAAM;gBACT,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC;AACvC,YAAA,KAAK,OAAO;gBACV,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC;AACxC,YAAA,KAAK,MAAM;gBACT,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC;AACvC,YAAA,KAAK,KAAK;gBACR,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC;AACtC,YAAA,KAAK,MAAM;gBACT,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC;AACvC,YAAA,KAAK,MAAM;gBACT,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC;AACvC,YAAA,KAAK,QAAQ;gBACX,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC;AACzC,YAAA,KAAK,OAAO;gBACV,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC;AACxC,YAAA;AACE,gBAAA,OAAO,EAAE;;IAEf;IAEQ,MAAM,GAAA;AACZ,QAAA,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC;IACvD;AAEQ,IAAA,SAAS,CAAC,IAAY,EAAA;AAC5B,QAAA,OAAO;AACJ,aAAA,OAAO,CAAC,IAAI,EAAE,OAAO;AACrB,aAAA,OAAO,CAAC,IAAI,EAAE,MAAM;AACpB,aAAA,OAAO,CAAC,IAAI,EAAE,MAAM;AACpB,aAAA,OAAO,CAAC,IAAI,EAAE,QAAQ;AACtB,aAAA,OAAO,CAAC,IAAI,EAAE,QAAQ;AACtB,aAAA,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;IAC5B;IAEQ,cAAc,CAAC,IAAkB,EAAE,KAAa,EAAA;AACtD,QAAA,MAAM,GAAG,GAAG,CAAA,CAAA,EAAI,IAAI,CAAC,KAAK,EAAE;AAC5B,QAAA,MAAM,SAAS,GAAG,CAAA,KAAA,EAAQ,IAAI,CAAC,KAAK,KAAK,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,KAAK,KAAK,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,KAAK,KAAK,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,KAAK,KAAK,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,KAAK,KAAK,CAAC,GAAG,IAAI,GAAG,MAAM,YAAY;AAEjL,QAAA,IAAI,OAAe;AACnB,QAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;;AAE7C,YAAA,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;QACvF;aAAO;YACL,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;QAC9C;AAEA,QAAA,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,GAAG,CAAA,MAAA,EAAS,KAAK,CAAA,aAAA,EAAgB,SAAS,CAAA,EAAA,EAAK,OAAO,CAAA,EAAA,EAAK,GAAG,GAAG;IAC9F;IAEQ,kBAAkB,CAAC,IAAkB,EAAE,KAAa,EAAA;AAC1D,QAAA,QAAQ,IAAI,CAAC,IAAI;AACf,YAAA,KAAK,MAAM;AACT,gBAAA,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;AACtI,gBAAA,OAAO,CAAA,aAAA,EAAgB,KAAK,CAAA,EAAA,EAAK,WAAW,WAAW;AACzD,YAAA,KAAK,QAAQ;AACX,gBAAA,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;AACxI,gBAAA,OAAO,CAAA,SAAA,EAAY,KAAK,CAAA,EAAA,EAAK,aAAa,OAAO;AACnD,YAAA,KAAK,MAAM;AACT,gBAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;oBAC7C,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;gBACpF;gBACA,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;AAC3C,YAAA;gBACE,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;;IAE/C;IAEQ,aAAa,CAAC,IAAkB,EAAE,KAAa,EAAA;AACrD,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC;AACjC,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC;QACjC,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,CAAA,MAAA,EAAS,KAAK,CAAA,CAAE;AACtC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,IAAI,MAAM;AAErC,QAAA,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,aAAa,KAAK,CAAA;AAC3C,EAAA,IAAI,CAAC,MAAM,EAAE,CAAA,kBAAA,EAAqB,EAAE,CAAA,EAAA,EAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAA;AACzE,EAAA,IAAI,CAAC,MAAM,EAAE,CAAA,aAAA,EAAgB,EAAE,WAAW,IAAI,CAAA;AAC9C,EAAA,IAAI,CAAC,MAAM,EAAE,CAAA,MAAA,CAAQ;IACrB;IAEQ,gBAAgB,CAAC,IAAkB,EAAE,KAAa,EAAA;AACxD,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC;AACpC,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC;QACjC,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,CAAA,SAAA,EAAY,KAAK,CAAA,CAAE;AAEzC,QAAA,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,aAAa,KAAK,CAAA;AAC3C,EAAA,IAAI,CAAC,MAAM,EAAE,CAAA,kBAAA,EAAqB,EAAE,CAAA,EAAA,EAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAA;AACzE,EAAA,IAAI,CAAC,MAAM,EAAE,CAAA,gBAAA,EAAmB,EAAE,CAAA;AAClC,EAAA,IAAI,CAAC,MAAM,EAAE,CAAA,MAAA,CAAQ;IACrB;IAEQ,gBAAgB,CAAC,IAAkB,EAAE,KAAa,EAAA;AACxD,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC;AAClC,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC;QACjC,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,CAAA,OAAA,EAAU,KAAK,CAAA,CAAE;AACvC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE;AAElC,QAAA,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,aAAa,KAAK,CAAA;AAC3C,EAAA,IAAI,CAAC,MAAM,EAAE,CAAA,kBAAA,EAAqB,EAAE,CAAA,EAAA,EAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAA;EACzE,IAAI,CAAC,MAAM,EAAE,CAAA;AACb,EAAA,IAAI,CAAC,MAAM,EAAE,CAAA,uBAAA,EAA0B,EAAE,CAAA;EACzC,IAAI,CAAC,MAAM,EAAE,CAAA;EACb,IAAI,CAAC,MAAM,EAAE,CAAA;EACb,IAAI,CAAC,MAAM,EAAE,CAAA;AACb,EAAA,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,CAAA,EAAG,IAAI,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAAA,SAAA,EAAY,GAAG,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA,aAAA,CAAe,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;EACxK,IAAI,CAAC,MAAM,EAAE,CAAA;EACb,IAAI,CAAC,MAAM,EAAE,CAAA;AACb,EAAA,IAAI,CAAC,MAAM,EAAE,CAAA,MAAA,CAAQ;IACrB;IAEQ,gBAAgB,CAAC,IAAkB,EAAE,KAAa,EAAA;AACxD,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC;AACpC,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC;QACjC,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,CAAA,SAAA,EAAY,KAAK,CAAA,CAAE;AAEzC,QAAA,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,aAAa,KAAK,CAAA;AAC3C,EAAA,IAAI,CAAC,MAAM,EAAE,CAAA,gBAAA,EAAmB,EAAE,CAAA;AAClC,EAAA,IAAI,CAAC,MAAM,EAAE,CAAA,kBAAA,EAAqB,EAAE,CAAA;AACpC,EAAA,IAAI,CAAC,MAAM,EAAE,CAAA,IAAA,EAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;EACpD,IAAI,CAAC,MAAM,EAAE,CAAA;AACb,EAAA,IAAI,CAAC,MAAM,EAAE,CAAA,MAAA,CAAQ;IACrB;IAEQ,kBAAkB,CAAC,IAAkB,EAAE,KAAa,EAAA;AAC1D,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,YAAY,CAAC;AACtC,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC;AACjC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE;AAElC,QAAA,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,aAAa,KAAK,CAAA;AAC3C,EAAA,IAAI,CAAC,MAAM,EAAE,CAAA,SAAA,EAAY,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAA;EACzD,IAAI,CAAC,MAAM,EAAE,CAAA;EACb,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,KAAI;AACnB,YAAA,MAAM,KAAK,GAAG,CAAA,MAAA,EAAS,KAAK,CAAA,CAAA,EAAI,CAAC,EAAE;AACnC,YAAA,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;AACpD,YAAA,OAAO,CAAA,EAAG,IAAI,CAAC,MAAM,EAAE,CAAA;AAC3B,EAAA,IAAI,CAAC,MAAM,EAAE,CAAA,0BAAA,EAA6B,KAAK,YAAY,KAAK,CAAA;EAChE,IAAI,CAAC,MAAM,EAAE,CAAA,sBAAA,EAAyB,KAAK,CAAA,EAAA,EAAK,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;AACnE,EAAA,IAAI,CAAC,MAAM,EAAE,CAAA,UAAA,CAAY;AACvB,QAAA,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;EACf,IAAI,CAAC,MAAM,EAAE,CAAA;AACb,EAAA,IAAI,CAAC,MAAM,EAAE,CAAA,MAAA,CAAQ;IACrB;IAEQ,cAAc,CAAC,IAAkB,EAAE,KAAa,EAAA;AACtD,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC;AAClC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,SAAS;AACzC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,GAAG,CAAA,YAAA,EAAe,IAAI,CAAC,SAAS,CAAA,CAAA,CAAG,GAAG,EAAE;QAExE,OAAO,CAAA,EAAG,IAAI,CAAC,MAAM,EAAE,CAAA,aAAA,EAAgB,KAAK,CAAA,WAAA,EAAc,OAAO,CAAA,CAAA,EAAI,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAA,SAAA,CAAW;IACjI;IAEQ,iBAAiB,CAAC,IAAkB,EAAE,KAAa,EAAA;QACzD,IAAI,CAAC,WAAW,EAAE;QAClB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;QACvE,IAAI,CAAC,WAAW,EAAE;AAElB,QAAA,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,aAAa,KAAK,CAAA;EAC3C,QAAQ;AACR,EAAA,IAAI,CAAC,MAAM,EAAE,CAAA,MAAA,CAAQ;IACrB;IAEQ,YAAY,CAAC,IAAkB,EAAE,KAAa,EAAA;AACpD,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC;QAEhC,IAAI,YAAY,GAAG,EAAE;AACrB,QAAA,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;AACvD,YAAA,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;QACjG;AAAO,aAAA,IAAI,IAAI,CAAC,KAAK,EAAE;YACrB,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;QAC3C;;AAGA,QAAA,IAAI,CAAC,WAAW,IAAI,CAAC;QACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;AACvE,QAAA,IAAI,CAAC,WAAW,IAAI,CAAC;QAErB,MAAM,WAAW,GAAG;AAClB,cAAE,CAAA,EAAG,IAAI,CAAC,MAAM,EAAE,cAAc,KAAK,CAAA;EACzC,IAAI,CAAC,MAAM,EAAE,CAAA;AACb,EAAA,IAAI,CAAC,MAAM,EAAE,CAAA,eAAA,EAAkB,YAAY,CAAA;EAC3C,IAAI,CAAC,MAAM,EAAE,CAAA;EACb,IAAI,CAAC,MAAM,EAAE,CAAA;EACb,QAAQ;EACR,IAAI,CAAC,MAAM,EAAE,CAAA;EACb,IAAI,CAAC,MAAM,EAAE,CAAA,OAAA;AACT,cAAE,CAAA,EAAG,IAAI,CAAC,MAAM,EAAE,cAAc,KAAK,CAAA;EACzC,IAAI,CAAC,MAAM,EAAE,CAAA;EACb,QAAQ;EACR,IAAI,CAAC,MAAM,EAAE,CAAA;AACb,EAAA,IAAI,CAAC,MAAM,EAAE,CAAA,OAAA,CAAS;AAEpB,QAAA,OAAO,WAAW;IACpB;IAEQ,aAAa,CAAC,IAAkB,EAAE,KAAa,EAAA;AACrD,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC;AACjC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE;AAClC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE;AAE5B,QAAA,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,eAAe,KAAK,CAAA;EAC7C,IAAI,CAAC,MAAM,EAAE,CAAA;EACb,IAAI,CAAC,MAAM,EAAE,CAAA;AACb,EAAA,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAA,EAAG,IAAI,CAAC,MAAM,EAAE,CAAA,sBAAA,EAAyB,CAAC,CAAA,EAAA,EAAK,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA,YAAA,CAAc,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;EAC1H,IAAI,CAAC,MAAM,EAAE,CAAA;EACb,IAAI,CAAC,MAAM,EAAE,CAAA;EACb,IAAI,CAAC,MAAM,EAAE,CAAA;AACb,EAAA,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAA;AAC5D,EAAA,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAA,EAAG,IAAI,CAAC,MAAM,EAAE,CAAA,sBAAA,EAAyB,CAAC,CAAA,EAAA,EAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA,YAAA,CAAc,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;EAClH,IAAI,CAAC,MAAM,EAAE,CAAA,eAAA,CAAiB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;EAC1C,IAAI,CAAC,MAAM,EAAE,CAAA;AACb,EAAA,IAAI,CAAC,MAAM,EAAE,CAAA,QAAA,CAAU;IACvB;IAEQ,YAAY,CAAC,IAAkB,EAAE,KAAa,EAAA;QACpD,MAAM,WAAW,GAAG,CAAA,KAAA,EAAQ,IAAI,CAAC,UAAU,IAAI,EAAE,CAAA,CAAE;QAEnD,IAAI,CAAC,WAAW,EAAE;QAClB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;QACvE,IAAI,CAAC,WAAW,EAAE;QAElB,OAAO,CAAA,EAAG,IAAI,CAAC,MAAM,EAAE,CAAA,UAAA,EAAa,KAAK,gBAAgB,WAAW,CAAA;EACtE,QAAQ;AACR,EAAA,IAAI,CAAC,MAAM,EAAE,CAAA,MAAA,CAAQ;IACrB;IAEQ,WAAW,CAAC,IAAkB,EAAE,KAAa,EAAA;AACnD,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,EAAE;QAEtC,IAAI,CAAC,WAAW,EAAE;QAClB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;QACvE,IAAI,CAAC,WAAW,EAAE;QAElB,OAAO,CAAA,EAAG,IAAI,CAAC,MAAM,EAAE,CAAA,UAAA,EAAa,KAAK,gBAAgB,SAAS,CAAA;EACpE,QAAQ;AACR,EAAA,IAAI,CAAC,MAAM,EAAE,CAAA,MAAA,CAAQ;IACrB;IAEQ,YAAY,CAAC,IAAkB,EAAE,KAAa,EAAA;AACpD,QAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;;AAE7C,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;YACjG,OAAO,CAAA,EAAG,IAAI,CAAC,MAAM,EAAE,WAAW,KAAK,CAAA,EAAA,EAAK,aAAa,CAAA,IAAA,CAAM;QACjE;AACA,QAAA,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,CAAA,QAAA,EAAW,KAAK,CAAA,EAAA,EAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,MAAM;IACtF;IAEQ,YAAY,CAAC,IAAkB,EAAE,KAAa,EAAA;AACpD,QAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7C,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3F,OAAO,CAAA,EAAG,IAAI,CAAC,MAAM,EAAE,gBAAgB,KAAK,CAAA,EAAA,EAAK,OAAO,CAAA,SAAA,CAAW;QACrE;AACA,QAAA,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,CAAA,aAAA,EAAgB,KAAK,CAAA,EAAA,EAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,WAAW;IAChG;IAEQ,cAAc,CAAC,IAAkB,EAAE,KAAa,EAAA;AACtD,QAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7C,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3F,OAAO,CAAA,EAAG,IAAI,CAAC,MAAM,EAAE,YAAY,KAAK,CAAA,EAAA,EAAK,OAAO,CAAA,KAAA,CAAO;QAC7D;AACA,QAAA,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,CAAA,SAAA,EAAY,KAAK,CAAA,EAAA,EAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO;IACxF;IAEQ,aAAa,CAAC,IAAkB,EAAE,KAAa,EAAA;AACrD,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,EAAE;AAC1B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,EAAE;AAE1B,QAAA,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,aAAa,KAAK,CAAA,OAAA,EAAU,GAAG,CAAA,OAAA,EAAU,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,oCAAoC;IACzH;AACD;;;;"}
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../src/parser/MarkdownParser.ts","../src/ShadcnCodeGenerator.ts"],"sourcesContent":["import { MarkdownNode, ParserOptions, ParseResult } from \"./types\";\n\nexport class MarkdownParser {\n private options: ParserOptions;\n\n constructor(options: ParserOptions = {}) {\n this.options = {\n strict: false,\n preserveWhitespace: false,\n ...options,\n };\n }\n\n parse(markdown: string): ParseResult {\n const lines = markdown.split(\"\\n\");\n const nodes: MarkdownNode[] = [];\n const errors: string[] = [];\n let i = 0;\n\n while (i < lines.length) {\n const line = this.options.preserveWhitespace ? lines[i] : lines[i].trim();\n\n if (!line) {\n i++;\n continue;\n }\n\n // Check for table (line with pipes)\n if (line.includes(\"|\") && line.trim().startsWith(\"|\")) {\n const headers = line\n .split(\"|\")\n .map((h) => h.trim())\n .filter((h) => h.length > 0);\n\n i++;\n // Skip separator line (|---|---|)\n if (i < lines.length) {\n const separatorLine = this.options.preserveWhitespace\n ? lines[i]\n : lines[i].trim();\n if (separatorLine.includes(\"-\") && separatorLine.includes(\"|\")) {\n i++;\n }\n }\n\n // Parse table rows\n const rows: string[][] = [];\n while (i < lines.length) {\n const rowLine = this.options.preserveWhitespace\n ? lines[i]\n : lines[i].trim();\n\n if (!rowLine || !rowLine.includes(\"|\")) {\n break;\n }\n\n const cells = rowLine\n .split(\"|\")\n .map((c) => c.trim())\n .filter((c) => c.length > 0);\n rows.push(cells);\n i++;\n }\n\n nodes.push({\n type: \"table\",\n headers,\n rows,\n });\n continue;\n }\n\n // Check for workflow start\n if (line === '[workflow' || line.startsWith('[workflow ')) {\n const result = this.parseWorkflow(lines, i);\n nodes.push(result.node);\n i = result.nextIndex;\n continue;\n }\n\n // Check for card start\n const cardMatch = line.match(/^\\[--\\s*(.*)$/);\n if (cardMatch) {\n const result = this.parseCard(lines, i, cardMatch[1] || undefined);\n nodes.push(result.node);\n i = result.nextIndex;\n continue;\n }\n\n // Check for grid start ([grid cols-2 gap-4)\n const gridMatch = line.match(/^\\[grid\\s+(.*)$/);\n if (gridMatch) {\n const result = this.parseContainer(lines, i, 'grid', gridMatch[1]);\n nodes.push(result.node);\n i = result.nextIndex;\n continue;\n }\n\n // Check for plain div start ([ or [ class-name)\n const divMatch = line.match(/^\\[\\s*(.*)$/);\n if (divMatch && !line.includes(\"]\")) {\n const result = this.parseContainer(lines, i, 'div', divMatch[1] || '');\n nodes.push(result.node);\n i = result.nextIndex;\n continue;\n }\n\n const node = this.parseLine(line);\n if (node) {\n nodes.push(node);\n } else if (this.options.strict) {\n errors.push(`Line ${i + 1}: Unable to parse \"${line}\"`);\n }\n i++;\n }\n\n return { nodes, errors: errors.length > 0 ? errors : undefined };\n }\n\n private parseWorkflow(\n lines: string[],\n startIndex: number\n ): { node: MarkdownNode; nextIndex: number } {\n const screens: MarkdownNode[] = [];\n let i = startIndex + 1;\n let depth = 1;\n let initialScreen: string | undefined;\n\n // Parse workflow content until we find the matching closing ]\n while (i < lines.length && depth > 0) {\n const workflowLine = this.options.preserveWhitespace ? lines[i] : lines[i].trim();\n\n // Check for workflow closing\n if (workflowLine === \"]\") {\n depth--;\n if (depth === 0) {\n break;\n }\n }\n\n // Check for screen opening ([screen id)\n const screenMatch = workflowLine.match(/^\\[screen\\s+(.+)$/);\n if (screenMatch) {\n const screenId = screenMatch[1].trim();\n const result = this.parseScreen(lines, i, screenId);\n screens.push(result.node);\n\n // First screen becomes the initial screen\n if (!initialScreen) {\n initialScreen = screenId;\n }\n\n i = result.nextIndex;\n continue;\n }\n\n i++;\n }\n\n return {\n node: {\n type: \"workflow\",\n children: screens,\n initialScreen: initialScreen || (screens[0]?.id),\n },\n nextIndex: i + 1,\n };\n }\n\n private parseScreen(\n lines: string[],\n startIndex: number,\n screenId: string\n ): { node: MarkdownNode; nextIndex: number } {\n const screenChildren: MarkdownNode[] = [];\n let i = startIndex + 1;\n let depth = 1;\n\n // Parse screen content until we find the matching closing ]\n while (i < lines.length && depth > 0) {\n const screenLine = this.options.preserveWhitespace ? lines[i] : lines[i].trim();\n\n // Check for screen closing\n if (screenLine === \"]\") {\n depth--;\n if (depth === 0) {\n break;\n }\n }\n\n // Check for nested card opening\n if (screenLine.match(/^\\[--\\s*(.*)$/)) {\n const nestedTitle = screenLine.match(/^\\[--\\s*(.*)$/)?.[1] || undefined;\n const result = this.parseCard(lines, i, nestedTitle);\n screenChildren.push(result.node);\n i = result.nextIndex;\n continue;\n }\n\n // Check for nested grid opening\n if (screenLine.match(/^\\[grid\\s+(.*)$/)) {\n const nestedConfig = screenLine.match(/^\\[grid\\s+(.*)$/)?.[1] || '';\n const result = this.parseContainer(lines, i, 'grid', nestedConfig);\n screenChildren.push(result.node);\n i = result.nextIndex;\n continue;\n }\n\n // Check for nested div opening\n if (screenLine.match(/^\\[\\s*(.*)$/) && !screenLine.includes(\"]\")) {\n const nestedConfig = screenLine.match(/^\\[\\s*(.*)$/)?.[1] || '';\n const result = this.parseContainer(lines, i, 'div', nestedConfig);\n screenChildren.push(result.node);\n i = result.nextIndex;\n continue;\n }\n\n if (screenLine) {\n const childNode = this.parseLine(screenLine);\n if (childNode) {\n screenChildren.push(childNode);\n }\n }\n i++;\n }\n\n return {\n node: {\n type: \"screen\",\n id: screenId,\n children: screenChildren,\n },\n nextIndex: i + 1,\n };\n }\n\n private parseCard(\n lines: string[],\n startIndex: number,\n title: string | undefined\n ): { node: MarkdownNode; nextIndex: number } {\n const cardChildren: MarkdownNode[] = [];\n let i = startIndex + 1;\n let depth = 1;\n\n // Parse card content until we find the matching closing --]\n while (i < lines.length && depth > 0) {\n const cardLine = this.options.preserveWhitespace ? lines[i] : lines[i].trim();\n\n // Check for card closing\n if (cardLine === \"--]\") {\n depth--;\n if (depth === 0) {\n break;\n }\n }\n\n // Check for nested card opening (must be before div check)\n if (cardLine.match(/^\\[--\\s*(.*)$/)) {\n const nestedTitle = cardLine.match(/^\\[--\\s*(.*)$/)?.[1] || undefined;\n const result = this.parseCard(lines, i, nestedTitle);\n cardChildren.push(result.node);\n i = result.nextIndex;\n continue;\n }\n\n // Check for nested grid opening\n if (cardLine.match(/^\\[grid\\s+(.*)$/)) {\n const nestedConfig = cardLine.match(/^\\[grid\\s+(.*)$/)?.[1] || '';\n const result = this.parseContainer(lines, i, 'grid', nestedConfig);\n cardChildren.push(result.node);\n i = result.nextIndex;\n continue;\n }\n\n // Check for nested div opening\n if (cardLine.match(/^\\[\\s*(.*)$/) && !cardLine.includes(\"]\")) {\n const nestedConfig = cardLine.match(/^\\[\\s*(.*)$/)?.[1] || '';\n const result = this.parseContainer(lines, i, 'div', nestedConfig);\n cardChildren.push(result.node);\n i = result.nextIndex;\n continue;\n }\n\n if (cardLine) {\n const childNode = this.parseLine(cardLine);\n if (childNode) {\n cardChildren.push(childNode);\n }\n }\n i++;\n }\n\n return {\n node: {\n type: \"card\",\n titleChildren: title ? this.parseInlineEmphasis(title) : undefined,\n children: cardChildren,\n },\n nextIndex: i + 1,\n };\n }\n\n private parseContainer(\n lines: string[],\n startIndex: number,\n type: 'grid' | 'div',\n config: string\n ): { node: MarkdownNode; nextIndex: number } {\n const containerChildren: MarkdownNode[] = [];\n let i = startIndex + 1;\n let depth = 1;\n\n // Parse container content until we find the matching closing ]\n while (i < lines.length && depth > 0) {\n const containerLine = this.options.preserveWhitespace ? lines[i] : lines[i].trim();\n\n // Check for container closing\n if (containerLine === \"]\") {\n depth--;\n if (depth === 0) {\n break;\n }\n }\n\n // Check for nested card opening (must be before div check)\n if (containerLine.match(/^\\[--\\s*(.*)$/)) {\n const nestedTitle = containerLine.match(/^\\[--\\s*(.*)$/)?.[1] || undefined;\n const result = this.parseCard(lines, i, nestedTitle);\n containerChildren.push(result.node);\n i = result.nextIndex;\n continue;\n }\n\n // Check for nested grid opening\n if (containerLine.match(/^\\[grid\\s+(.*)$/)) {\n const nestedConfig = containerLine.match(/^\\[grid\\s+(.*)$/)?.[1] || '';\n const result = this.parseContainer(lines, i, 'grid', nestedConfig);\n containerChildren.push(result.node);\n i = result.nextIndex;\n continue;\n }\n\n // Check for nested div opening\n if (containerLine.match(/^\\[\\s*(.*)$/) && !containerLine.includes(\"]\")) {\n const nestedConfig = containerLine.match(/^\\[\\s*(.*)$/)?.[1] || '';\n const result = this.parseContainer(lines, i, 'div', nestedConfig);\n containerChildren.push(result.node);\n i = result.nextIndex;\n continue;\n }\n\n if (containerLine) {\n const childNode = this.parseLine(containerLine);\n if (childNode) {\n containerChildren.push(childNode);\n }\n }\n i++;\n }\n\n const node: MarkdownNode = {\n type,\n children: containerChildren,\n };\n\n if (type === 'grid') {\n node.gridConfig = config;\n } else if (type === 'div' && config) {\n node.className = config;\n }\n\n return {\n node,\n nextIndex: i + 1,\n };\n }\n\n private parseLine(line: string): MarkdownNode | null {\n // Parse headers (# H1, ## H2, etc.)\n const headerMatch = line.match(/^(#{1,6})\\s+(.+)$/);\n if (headerMatch) {\n return {\n type: \"header\",\n level: headerMatch[1].length,\n children: this.parseInlineEmphasis(headerMatch[2]),\n };\n }\n\n // Parse multiple form fields on one line (inputs, textareas, dropdowns, checkboxes)\n // This must be checked BEFORE single field patterns\n const fieldPattern = /(.+?)\\s+(___|\\|___\\||__\\*|__>(?:\\s*\\[[^\\]]+\\])?|__\\[\\])/g;\n const fieldMatches = [...line.matchAll(fieldPattern)];\n\n if (fieldMatches.length > 1) {\n return {\n type: \"container\",\n children: fieldMatches.map((match) => {\n const label = match[1].trim();\n const marker = match[2];\n\n if (marker === '__*') {\n return {\n type: \"input\",\n label,\n inputType: \"password\",\n } as MarkdownNode;\n } else if (marker === '|___|') {\n return {\n type: \"textarea\",\n label,\n } as MarkdownNode;\n } else if (marker === '__[]') {\n return {\n type: \"checkbox\",\n label,\n } as MarkdownNode;\n } else if (marker.startsWith('__>')) {\n // Handle dropdown with or without options\n const optionsMatch = marker.match(/\\[([^\\]]+)\\]/);\n if (optionsMatch) {\n const options = optionsMatch[1]\n .split(\",\")\n .map((opt) => opt.trim())\n .filter((opt) => opt.length > 0);\n return {\n type: \"dropdown\",\n label,\n options,\n } as MarkdownNode;\n } else {\n return {\n type: \"dropdown\",\n label,\n } as MarkdownNode;\n }\n } else { // ___\n return {\n type: \"input\",\n label,\n inputType: \"text\",\n } as MarkdownNode;\n }\n }),\n };\n }\n\n // Parse password inputs (Label __*)\n const passwordMatch = line.match(/^(.+?)\\s+__\\*$/);\n if (passwordMatch) {\n return {\n type: \"input\",\n label: passwordMatch[1],\n inputType: \"password\",\n };\n }\n\n // Parse textarea (Label |___|)\n const textareaMatch = line.match(/^(.+?)\\s+\\|___\\|$/);\n if (textareaMatch) {\n return {\n type: \"textarea\",\n label: textareaMatch[1],\n };\n }\n\n // Parse text inputs (Label ___)\n const inputMatch = line.match(/^(.+?)\\s+___$/);\n if (inputMatch) {\n return {\n type: \"input\",\n label: inputMatch[1],\n inputType: \"text\",\n };\n }\n\n // Parse checkbox (Label __[])\n const checkboxMatch = line.match(/^(.+?)\\s+__\\[\\]$/);\n if (checkboxMatch) {\n return {\n type: \"checkbox\",\n label: checkboxMatch[1],\n };\n }\n\n // Parse radio group (Label __() [option1, option2, option3])\n const radioGroupMatch = line.match(/^(.+?)\\s+__\\(\\)\\s+\\[(.+?)\\]$/);\n if (radioGroupMatch) {\n const options = radioGroupMatch[2]\n .split(\",\")\n .map((opt) => opt.trim())\n .filter((opt) => opt.length > 0);\n return {\n type: \"radiogroup\",\n label: radioGroupMatch[1],\n options,\n };\n }\n\n // Parse dropdowns with options (Label __> [option1, option2, option3])\n const dropdownWithOptionsMatch = line.match(/^(.+?)\\s+__>\\s+\\[(.+?)\\]$/);\n if (dropdownWithOptionsMatch) {\n const options = dropdownWithOptionsMatch[2]\n .split(\",\")\n .map((opt) => opt.trim())\n .filter((opt) => opt.length > 0);\n return {\n type: \"dropdown\",\n label: dropdownWithOptionsMatch[1],\n options,\n };\n }\n\n // Parse dropdowns without options (Label __>)\n const dropdownMatch = line.match(/^(.+?)\\s+__>$/);\n if (dropdownMatch) {\n return {\n type: \"dropdown\",\n label: dropdownMatch[1],\n };\n }\n\n // Parse image ()\n const imageMatch = line.match(/^!\\[([^\\]]*)\\]\\(([^)]+)\\)$/);\n if (imageMatch) {\n return {\n type: \"image\",\n alt: imageMatch[1],\n src: imageMatch[2],\n };\n }\n\n // Parse multiple buttons on one line ([btn1][(btn2)])\n const multiButtonMatch = line.match(/^(\\[\\(?[^\\[\\]]+\\)?\\]\\s*)+$/);\n if (multiButtonMatch) {\n const buttons = line.match(/\\[(\\(?)[^\\[\\]]+?(\\)?)\\]/g);\n if (buttons && buttons.length > 1) {\n return {\n type: \"container\",\n children: buttons.map((btn) => {\n // Check for navigation syntax: [(text) -> target] or [text -> target]\n const navMatch = btn.match(/\\[(\\(?)(.+?)(\\)?)\\s*->\\s*([^\\]]+)\\]/);\n if (navMatch) {\n const isDefault = navMatch[1] === \"(\" && navMatch[3] === \")\";\n const content = navMatch[2].trim();\n const navigateTo = navMatch[4].trim();\n\n return {\n type: \"button\",\n content,\n variant: isDefault ? \"default\" : \"outline\",\n navigateTo,\n };\n }\n\n const innerMatch = btn.match(/\\[(\\(?)(.+?)(\\)?)\\]/);\n if (innerMatch) {\n const isDefault = innerMatch[1] === \"(\" && innerMatch[3] === \")\";\n const content = innerMatch[2];\n\n return {\n type: \"button\",\n content,\n variant: isDefault ? \"default\" : \"outline\",\n };\n }\n return {\n type: \"button\",\n content: btn.slice(1, -1),\n variant: \"outline\",\n };\n }),\n };\n }\n }\n\n // Parse default button with navigation [(button text) -> target]\n const defaultButtonNavMatch = line.match(/^\\[\\((.+?)\\)\\s*->\\s*([^\\]]+)\\]$/);\n if (defaultButtonNavMatch) {\n const content = defaultButtonNavMatch[1].trim();\n const navigateTo = defaultButtonNavMatch[2].trim();\n\n return {\n type: \"button\",\n content,\n variant: \"default\",\n navigateTo,\n };\n }\n\n // Parse default button [(button text)] or [(button text) | classes]\n const defaultButtonMatch = line.match(/^\\[\\((.+?)\\)(?:\\s*\\|\\s*(.+))?\\]$/);\n if (defaultButtonMatch) {\n const content = defaultButtonMatch[1];\n const className = defaultButtonMatch[2]?.trim();\n\n return {\n type: \"button\",\n content,\n variant: \"default\",\n ...(className && { className }),\n };\n }\n\n // Parse outline button with navigation [button text -> target]\n const buttonNavMatch = line.match(/^\\[([^|]+?)\\s*->\\s*([^\\]]+)\\]$/);\n if (buttonNavMatch) {\n const content = buttonNavMatch[1].trim();\n const navigateTo = buttonNavMatch[2].trim();\n\n return {\n type: \"button\",\n content,\n variant: \"outline\",\n navigateTo,\n };\n }\n\n // Parse outline button [button text] or [button text | classes]\n const buttonMatch = line.match(/^\\[([^|]+?)(?:\\s*\\|\\s*(.+))?\\]$/);\n if (buttonMatch) {\n const content = buttonMatch[1].trim();\n const className = buttonMatch[2]?.trim();\n\n return {\n type: \"button\",\n content,\n variant: \"outline\",\n ...(className && { className }),\n };\n }\n\n // Plain text\n return {\n type: \"text\",\n children: this.parseInlineEmphasis(line),\n };\n }\n\n private parseInlineEmphasis(text: string): MarkdownNode[] {\n const nodes: MarkdownNode[] = [];\n let remaining = text;\n let position = 0;\n\n while (position < remaining.length) {\n // Try to match bold-italic (_*text*_)\n const boldItalicMatch = remaining\n .slice(position)\n .match(/^_\\*(.+?)\\*_/);\n if (boldItalicMatch) {\n const content = boldItalicMatch[1];\n nodes.push({\n type: \"bold\",\n children: [{ type: \"italic\", content }],\n });\n position += boldItalicMatch[0].length;\n continue;\n }\n\n // Try to match bold (*text*)\n const boldMatch = remaining.slice(position).match(/^\\*(.+?)\\*/);\n if (boldMatch) {\n nodes.push({\n type: \"bold\",\n content: boldMatch[1],\n });\n position += boldMatch[0].length;\n continue;\n }\n\n // Try to match italic (_text_)\n const italicMatch = remaining.slice(position).match(/^_(.+?)_/);\n if (italicMatch) {\n nodes.push({\n type: \"italic\",\n content: italicMatch[1],\n });\n position += italicMatch[0].length;\n continue;\n }\n\n // No emphasis found, consume until next emphasis marker or end of string\n const nextAsterisk = remaining.slice(position).indexOf(\"*\");\n const nextUnderscore = remaining.slice(position).indexOf(\"_\");\n\n // Find the nearest marker\n let nextMarker = -1;\n if (nextAsterisk !== -1 && nextUnderscore !== -1) {\n nextMarker = Math.min(nextAsterisk, nextUnderscore);\n } else if (nextAsterisk !== -1) {\n nextMarker = nextAsterisk;\n } else if (nextUnderscore !== -1) {\n nextMarker = nextUnderscore;\n }\n\n const textEnd =\n nextMarker === -1\n ? remaining.length\n : position + nextMarker;\n\n if (textEnd > position) {\n nodes.push({\n type: \"text\",\n content: remaining.slice(position, textEnd),\n });\n position = textEnd;\n } else {\n // Edge case: marker that doesn't form emphasis\n nodes.push({\n type: \"text\",\n content: remaining.slice(position, position + 1),\n });\n position++;\n }\n }\n\n return nodes;\n }\n}\n","import { MarkdownNode } from \"./parser/types\";\n\n/**\n * Generates React component code from a Proto Markdown AST using Shadcn UI components\n */\nexport class ShadcnCodeGenerator {\n private indentLevel = 0;\n private readonly indentSize = 2;\n private requiredImports = new Set<string>();\n\n /**\n * Generate complete React component code from markdown AST\n */\n generate(nodes: MarkdownNode[]): string {\n this.indentLevel = 0;\n this.requiredImports.clear();\n\n // Check if the component contains a workflow\n const hasWorkflow = nodes.some(node => node.type === 'workflow');\n\n // Generate component body\n const componentBody = this.generateNodes(nodes);\n\n // Add base indentation (6 spaces = 3 levels for proper JSX nesting)\n const indentedBody = componentBody\n .split('\\n')\n .map(line => line ? ` ${line}` : line)\n .join('\\n');\n\n // Collect imports\n const imports = this.generateImports();\n const reactImport = hasWorkflow ? \"import { useState } from 'react';\\n\" : \"\";\n\n return `${reactImport}${imports}\n\nexport function GeneratedComponent() {\n return (\n <div className=\"space-y-2\">\n${indentedBody}\n </div>\n );\n}\n`;\n }\n\n /**\n * Generate imports based on used components\n */\n private generateImports(): string {\n const imports: string[] = [];\n\n if (this.requiredImports.has(\"Button\")) {\n imports.push('import { Button } from \"@/components/ui/button\";');\n }\n if (this.requiredImports.has(\"Input\")) {\n imports.push('import { Input } from \"@/components/ui/input\";');\n }\n if (this.requiredImports.has(\"Textarea\")) {\n imports.push('import { Textarea } from \"@/components/ui/textarea\";');\n }\n if (this.requiredImports.has(\"Card\")) {\n imports.push('import { Card, CardHeader, CardTitle, CardContent } from \"@/components/ui/card\";');\n }\n if (this.requiredImports.has(\"Checkbox\")) {\n imports.push('import { Checkbox } from \"@/components/ui/checkbox\";');\n }\n if (this.requiredImports.has(\"RadioGroup\")) {\n imports.push('import { RadioGroup, RadioGroupItem } from \"@/components/ui/radio-group\";');\n }\n if (this.requiredImports.has(\"Select\")) {\n imports.push('import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from \"@/components/ui/select\";');\n }\n if (this.requiredImports.has(\"Table\")) {\n imports.push('import { Table, TableHeader, TableBody, TableRow, TableHead, TableCell } from \"@/components/ui/table\";');\n }\n if (this.requiredImports.has(\"Label\")) {\n imports.push('import { Label } from \"@/components/ui/label\";');\n }\n\n return imports.join(\"\\n\");\n }\n\n /**\n * Generate code for multiple nodes\n */\n private generateNodes(nodes: MarkdownNode[]): string {\n return nodes.map((node, index) => this.generateNode(node, index)).join(\"\\n\");\n }\n\n /**\n * Generate code for a single node\n */\n private generateNode(node: MarkdownNode, index: number): string {\n switch (node.type) {\n case \"header\":\n return this.generateHeader(node, index);\n case \"input\":\n return this.generateInput(node, index);\n case \"textarea\":\n return this.generateTextarea(node, index);\n case \"dropdown\":\n return this.generateDropdown(node, index);\n case \"checkbox\":\n return this.generateCheckbox(node, index);\n case \"radiogroup\":\n return this.generateRadioGroup(node, index);\n case \"button\":\n return this.generateButton(node, index);\n case \"container\":\n return this.generateContainer(node, index);\n case \"card\":\n return this.generateCard(node, index);\n case \"table\":\n return this.generateTable(node, index);\n case \"grid\":\n return this.generateGrid(node, index);\n case \"div\":\n return this.generateDiv(node, index);\n case \"text\":\n return this.generateText(node, index);\n case \"bold\":\n return this.generateBold(node, index);\n case \"italic\":\n return this.generateItalic(node, index);\n case \"image\":\n return this.generateImage(node, index);\n case \"workflow\":\n return this.generateWorkflow(node, index);\n case \"screen\":\n return this.generateScreen(node, index);\n default:\n return \"\";\n }\n }\n\n private indent(): string {\n return \" \".repeat(this.indentLevel * this.indentSize);\n }\n\n private escapeJSX(text: string): string {\n return text\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/\"/g, \""\")\n .replace(/{/g, \"{\")\n .replace(/}/g, \"}\");\n }\n\n private generateHeader(node: MarkdownNode, index: number): string {\n const Tag = `h${node.level}`;\n const className = `text-${node.level === 1 ? \"4xl\" : node.level === 2 ? \"3xl\" : node.level === 3 ? \"2xl\" : node.level === 4 ? \"xl\" : node.level === 5 ? \"lg\" : \"base\"} font-bold`;\n\n let content: string;\n if (node.children && node.children.length > 0) {\n // Inline children (emphasis)\n content = node.children.map((child, i) => this.generateInlineNode(child, i)).join(\"\");\n } else {\n content = this.escapeJSX(node.content || \"\");\n }\n\n return `${this.indent()}<${Tag} key={${index}} className=\"${className}\">${content}</${Tag}>`;\n }\n\n private generateInlineNode(node: MarkdownNode, index: number): string {\n switch (node.type) {\n case \"bold\":\n const boldContent = node.children?.map((child, i) => this.generateInlineNode(child, i)).join(\"\") || this.escapeJSX(node.content || \"\");\n return `<strong key={${index}}>${boldContent}</strong>`;\n case \"italic\":\n const italicContent = node.children?.map((child, i) => this.generateInlineNode(child, i)).join(\"\") || this.escapeJSX(node.content || \"\");\n return `<em key={${index}}>${italicContent}</em>`;\n case \"text\":\n if (node.children && node.children.length > 0) {\n return node.children.map((child, i) => this.generateInlineNode(child, i)).join(\"\");\n }\n return this.escapeJSX(node.content || \"\");\n default:\n return this.escapeJSX(node.content || \"\");\n }\n }\n\n private generateInput(node: MarkdownNode, index: number): string {\n this.requiredImports.add(\"Input\");\n this.requiredImports.add(\"Label\");\n const id = node.id || `input-${index}`;\n const type = node.inputType || \"text\";\n\n return `${this.indent()}<div key={${index}} className=\"space-y-2\">\n${this.indent()} <Label htmlFor=\"${id}\">${this.escapeJSX(node.label || \"\")}</Label>\n${this.indent()} <Input id=\"${id}\" type=\"${type}\" />\n${this.indent()}</div>`;\n }\n\n private generateTextarea(node: MarkdownNode, index: number): string {\n this.requiredImports.add(\"Textarea\");\n this.requiredImports.add(\"Label\");\n const id = node.id || `textarea-${index}`;\n\n return `${this.indent()}<div key={${index}} className=\"space-y-2\">\n${this.indent()} <Label htmlFor=\"${id}\">${this.escapeJSX(node.label || \"\")}</Label>\n${this.indent()} <Textarea id=\"${id}\" />\n${this.indent()}</div>`;\n }\n\n private generateDropdown(node: MarkdownNode, index: number): string {\n this.requiredImports.add(\"Select\");\n this.requiredImports.add(\"Label\");\n const id = node.id || `select-${index}`;\n const options = node.options || [];\n\n return `${this.indent()}<div key={${index}} className=\"space-y-2\">\n${this.indent()} <Label htmlFor=\"${id}\">${this.escapeJSX(node.label || \"\")}</Label>\n${this.indent()} <Select>\n${this.indent()} <SelectTrigger id=\"${id}\">\n${this.indent()} <SelectValue placeholder=\"Select an option\" />\n${this.indent()} </SelectTrigger>\n${this.indent()} <SelectContent>\n${options.map((opt, i) => `${this.indent()} <SelectItem key={${i}} value=\"${opt.toLowerCase().replace(/\\s+/g, \"-\")}\">${this.escapeJSX(opt)}</SelectItem>`).join(\"\\n\")}\n${this.indent()} </SelectContent>\n${this.indent()} </Select>\n${this.indent()}</div>`;\n }\n\n private generateCheckbox(node: MarkdownNode, index: number): string {\n this.requiredImports.add(\"Checkbox\");\n this.requiredImports.add(\"Label\");\n const id = node.id || `checkbox-${index}`;\n\n return `${this.indent()}<div key={${index}} className=\"flex items-center space-x-2\">\n${this.indent()} <Checkbox id=\"${id}\" />\n${this.indent()} <Label htmlFor=\"${id}\" className=\"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\">\n${this.indent()} ${this.escapeJSX(node.label || \"\")}\n${this.indent()} </Label>\n${this.indent()}</div>`;\n }\n\n private generateRadioGroup(node: MarkdownNode, index: number): string {\n this.requiredImports.add(\"RadioGroup\");\n this.requiredImports.add(\"Label\");\n const options = node.options || [];\n\n return `${this.indent()}<div key={${index}} className=\"space-y-2\">\n${this.indent()} <Label>${this.escapeJSX(node.label || \"\")}</Label>\n${this.indent()} <RadioGroup>\n${options.map((opt, i) => {\n const optId = `radio-${index}-${i}`;\n const value = opt.toLowerCase().replace(/\\s+/g, \"-\");\n return `${this.indent()} <div className=\"flex items-center space-x-2\">\n${this.indent()} <RadioGroupItem id=\"${optId}\" value=\"${value}\" />\n${this.indent()} <Label htmlFor=\"${optId}\">${this.escapeJSX(opt)}</Label>\n${this.indent()} </div>`;\n }).join(\"\\n\")}\n${this.indent()} </RadioGroup>\n${this.indent()}</div>`;\n }\n\n private generateButton(node: MarkdownNode, index: number): string {\n this.requiredImports.add(\"Button\");\n const variant = node.variant || \"default\";\n const className = node.className ? ` className=\"${node.className}\"` : \"\";\n\n // Add onClick handler if button has navigation\n const onClick = node.navigateTo ? ` onClick={() => setCurrentScreen('${node.navigateTo}')}` : \"\";\n\n return `${this.indent()}<Button key={${index}} variant=\"${variant}\"${className}${onClick}>${this.escapeJSX(node.content || \"\")}</Button>`;\n }\n\n private generateContainer(node: MarkdownNode, index: number): string {\n this.indentLevel++;\n const children = node.children ? this.generateNodes(node.children) : \"\";\n this.indentLevel--;\n\n return `${this.indent()}<div key={${index}} className=\"flex gap-2\">\n${children}\n${this.indent()}</div>`;\n }\n\n private generateCard(node: MarkdownNode, index: number): string {\n this.requiredImports.add(\"Card\");\n\n let titleContent = \"\";\n if (node.titleChildren && node.titleChildren.length > 0) {\n titleContent = node.titleChildren.map((child, i) => this.generateInlineNode(child, i)).join(\"\");\n } else if (node.title) {\n titleContent = this.escapeJSX(node.title);\n }\n\n // Increment by 2 to account for Card wrapper + CardContent nesting\n this.indentLevel += 2;\n const children = node.children ? this.generateNodes(node.children) : \"\";\n this.indentLevel -= 2;\n\n const cardContent = titleContent\n ? `${this.indent()}<Card key={${index}}>\n${this.indent()} <CardHeader>\n${this.indent()} <CardTitle>${titleContent}</CardTitle>\n${this.indent()} </CardHeader>\n${this.indent()} <CardContent className=\"space-y-2\">\n${children}\n${this.indent()} </CardContent>\n${this.indent()}</Card>`\n : `${this.indent()}<Card key={${index}}>\n${this.indent()} <CardContent className=\"pt-6 space-y-2\">\n${children}\n${this.indent()} </CardContent>\n${this.indent()}</Card>`;\n\n return cardContent;\n }\n\n private generateTable(node: MarkdownNode, index: number): string {\n this.requiredImports.add(\"Table\");\n const headers = node.headers || [];\n const rows = node.rows || [];\n\n return `${this.indent()}<Table key={${index}}>\n${this.indent()} <TableHeader>\n${this.indent()} <TableRow>\n${headers.map((header, i) => `${this.indent()} <TableHead key={${i}}>${this.escapeJSX(header)}</TableHead>`).join(\"\\n\")}\n${this.indent()} </TableRow>\n${this.indent()} </TableHeader>\n${this.indent()} <TableBody>\n${rows.map((row, i) => `${this.indent()} <TableRow key={${i}}>\n${row.map((cell, j) => `${this.indent()} <TableCell key={${j}}>${this.escapeJSX(cell)}</TableCell>`).join(\"\\n\")}\n${this.indent()} </TableRow>`).join(\"\\n\")}\n${this.indent()} </TableBody>\n${this.indent()}</Table>`;\n }\n\n private generateGrid(node: MarkdownNode, index: number): string {\n const gridClasses = `grid ${node.gridConfig || \"\"}`;\n\n this.indentLevel++;\n const children = node.children ? this.generateNodes(node.children) : \"\";\n this.indentLevel--;\n\n return `${this.indent()}<div key={${index}} className=\"${gridClasses}\">\n${children}\n${this.indent()}</div>`;\n }\n\n private generateDiv(node: MarkdownNode, index: number): string {\n const className = node.className || \"\";\n\n this.indentLevel++;\n const children = node.children ? this.generateNodes(node.children) : \"\";\n this.indentLevel--;\n\n return `${this.indent()}<div key={${index}} className=\"${className}\">\n${children}\n${this.indent()}</div>`;\n }\n\n private generateText(node: MarkdownNode, index: number): string {\n if (node.children && node.children.length > 0) {\n // Text with inline emphasis\n const inlineContent = node.children.map((child, i) => this.generateInlineNode(child, i)).join(\"\");\n return `${this.indent()}<p key={${index}}>${inlineContent}</p>`;\n }\n return `${this.indent()}<p key={${index}}>${this.escapeJSX(node.content || \"\")}</p>`;\n }\n\n private generateBold(node: MarkdownNode, index: number): string {\n if (node.children && node.children.length > 0) {\n const content = node.children.map((child, i) => this.generateInlineNode(child, i)).join(\"\");\n return `${this.indent()}<strong key={${index}}>${content}</strong>`;\n }\n return `${this.indent()}<strong key={${index}}>${this.escapeJSX(node.content || \"\")}</strong>`;\n }\n\n private generateItalic(node: MarkdownNode, index: number): string {\n if (node.children && node.children.length > 0) {\n const content = node.children.map((child, i) => this.generateInlineNode(child, i)).join(\"\");\n return `${this.indent()}<em key={${index}}>${content}</em>`;\n }\n return `${this.indent()}<em key={${index}}>${this.escapeJSX(node.content || \"\")}</em>`;\n }\n\n private generateImage(node: MarkdownNode, index: number): string {\n const src = node.src || \"\";\n const alt = node.alt || \"\";\n\n return `${this.indent()}<img key={${index}} src=\"${src}\" alt=\"${this.escapeJSX(alt)}\" className=\"max-w-full h-auto\" />`;\n }\n\n private generateWorkflow(node: MarkdownNode, index: number): string {\n const screens = node.children || [];\n const initialScreen = node.initialScreen || screens[0]?.id || \"home\";\n\n // Generate state management\n const stateDeclaration = `${this.indent()}const [currentScreen, setCurrentScreen] = useState('${initialScreen}');`;\n\n // Generate screen rendering\n this.indentLevel++;\n const screenCases = screens.map((screen, i) => {\n const screenId = screen.id || `screen-${i}`;\n const screenContent = screen.children ? this.generateNodes(screen.children) : \"\";\n\n return `${this.indent()}${i === 0 ? '' : 'else '}if (currentScreen === '${screenId}') {\n${this.indent()} return (\n${this.indent()} <div className=\"space-y-2\">\n${screenContent}\n${this.indent()} </div>\n${this.indent()} );\n${this.indent()}}`;\n }).join('\\n');\n this.indentLevel--;\n\n // Return fallback if no screen matches\n const fallback = `${this.indent()}return <div>Screen not found</div>;`;\n\n return `${this.indent()}<div key={${index}}>\n${this.indent()} {(() => {\n${stateDeclaration}\n\n${screenCases}\n${fallback}\n${this.indent()} })()}\n${this.indent()}</div>`;\n }\n\n private generateScreen(node: MarkdownNode, index: number): string {\n // Screens are handled within workflow generation\n // This method is for standalone screen nodes (if used outside workflow)\n this.indentLevel++;\n const children = node.children ? this.generateNodes(node.children) : \"\";\n this.indentLevel--;\n\n return `${this.indent()}<div key={${index}} data-screen-id=\"${node.id || index}\" className=\"space-y-2\">\n${children}\n${this.indent()}</div>`;\n }\n}\n"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -58,6 +58,13 @@ class MarkdownParser {
|
|
|
58
58
|
});
|
|
59
59
|
continue;
|
|
60
60
|
}
|
|
61
|
+
// Check for workflow start
|
|
62
|
+
if (line === '[workflow' || line.startsWith('[workflow ')) {
|
|
63
|
+
const result = this.parseWorkflow(lines, i);
|
|
64
|
+
nodes.push(result.node);
|
|
65
|
+
i = result.nextIndex;
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
61
68
|
// Check for card start
|
|
62
69
|
const cardMatch = line.match(/^\[--\s*(.*)$/);
|
|
63
70
|
if (cardMatch) {
|
|
@@ -93,6 +100,100 @@ class MarkdownParser {
|
|
|
93
100
|
}
|
|
94
101
|
return { nodes, errors: errors.length > 0 ? errors : undefined };
|
|
95
102
|
}
|
|
103
|
+
parseWorkflow(lines, startIndex) {
|
|
104
|
+
const screens = [];
|
|
105
|
+
let i = startIndex + 1;
|
|
106
|
+
let depth = 1;
|
|
107
|
+
let initialScreen;
|
|
108
|
+
// Parse workflow content until we find the matching closing ]
|
|
109
|
+
while (i < lines.length && depth > 0) {
|
|
110
|
+
const workflowLine = this.options.preserveWhitespace ? lines[i] : lines[i].trim();
|
|
111
|
+
// Check for workflow closing
|
|
112
|
+
if (workflowLine === "]") {
|
|
113
|
+
depth--;
|
|
114
|
+
if (depth === 0) {
|
|
115
|
+
break;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
// Check for screen opening ([screen id)
|
|
119
|
+
const screenMatch = workflowLine.match(/^\[screen\s+(.+)$/);
|
|
120
|
+
if (screenMatch) {
|
|
121
|
+
const screenId = screenMatch[1].trim();
|
|
122
|
+
const result = this.parseScreen(lines, i, screenId);
|
|
123
|
+
screens.push(result.node);
|
|
124
|
+
// First screen becomes the initial screen
|
|
125
|
+
if (!initialScreen) {
|
|
126
|
+
initialScreen = screenId;
|
|
127
|
+
}
|
|
128
|
+
i = result.nextIndex;
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
131
|
+
i++;
|
|
132
|
+
}
|
|
133
|
+
return {
|
|
134
|
+
node: {
|
|
135
|
+
type: "workflow",
|
|
136
|
+
children: screens,
|
|
137
|
+
initialScreen: initialScreen || (screens[0]?.id),
|
|
138
|
+
},
|
|
139
|
+
nextIndex: i + 1,
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
parseScreen(lines, startIndex, screenId) {
|
|
143
|
+
const screenChildren = [];
|
|
144
|
+
let i = startIndex + 1;
|
|
145
|
+
let depth = 1;
|
|
146
|
+
// Parse screen content until we find the matching closing ]
|
|
147
|
+
while (i < lines.length && depth > 0) {
|
|
148
|
+
const screenLine = this.options.preserveWhitespace ? lines[i] : lines[i].trim();
|
|
149
|
+
// Check for screen closing
|
|
150
|
+
if (screenLine === "]") {
|
|
151
|
+
depth--;
|
|
152
|
+
if (depth === 0) {
|
|
153
|
+
break;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
// Check for nested card opening
|
|
157
|
+
if (screenLine.match(/^\[--\s*(.*)$/)) {
|
|
158
|
+
const nestedTitle = screenLine.match(/^\[--\s*(.*)$/)?.[1] || undefined;
|
|
159
|
+
const result = this.parseCard(lines, i, nestedTitle);
|
|
160
|
+
screenChildren.push(result.node);
|
|
161
|
+
i = result.nextIndex;
|
|
162
|
+
continue;
|
|
163
|
+
}
|
|
164
|
+
// Check for nested grid opening
|
|
165
|
+
if (screenLine.match(/^\[grid\s+(.*)$/)) {
|
|
166
|
+
const nestedConfig = screenLine.match(/^\[grid\s+(.*)$/)?.[1] || '';
|
|
167
|
+
const result = this.parseContainer(lines, i, 'grid', nestedConfig);
|
|
168
|
+
screenChildren.push(result.node);
|
|
169
|
+
i = result.nextIndex;
|
|
170
|
+
continue;
|
|
171
|
+
}
|
|
172
|
+
// Check for nested div opening
|
|
173
|
+
if (screenLine.match(/^\[\s*(.*)$/) && !screenLine.includes("]")) {
|
|
174
|
+
const nestedConfig = screenLine.match(/^\[\s*(.*)$/)?.[1] || '';
|
|
175
|
+
const result = this.parseContainer(lines, i, 'div', nestedConfig);
|
|
176
|
+
screenChildren.push(result.node);
|
|
177
|
+
i = result.nextIndex;
|
|
178
|
+
continue;
|
|
179
|
+
}
|
|
180
|
+
if (screenLine) {
|
|
181
|
+
const childNode = this.parseLine(screenLine);
|
|
182
|
+
if (childNode) {
|
|
183
|
+
screenChildren.push(childNode);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
i++;
|
|
187
|
+
}
|
|
188
|
+
return {
|
|
189
|
+
node: {
|
|
190
|
+
type: "screen",
|
|
191
|
+
id: screenId,
|
|
192
|
+
children: screenChildren,
|
|
193
|
+
},
|
|
194
|
+
nextIndex: i + 1,
|
|
195
|
+
};
|
|
196
|
+
}
|
|
96
197
|
parseCard(lines, startIndex, title) {
|
|
97
198
|
const cardChildren = [];
|
|
98
199
|
let i = startIndex + 1;
|
|
@@ -357,13 +458,26 @@ class MarkdownParser {
|
|
|
357
458
|
};
|
|
358
459
|
}
|
|
359
460
|
// Parse multiple buttons on one line ([btn1][(btn2)])
|
|
360
|
-
const multiButtonMatch = line.match(/^(\[\(?[^\[\]
|
|
461
|
+
const multiButtonMatch = line.match(/^(\[\(?[^\[\]]+\)?\]\s*)+$/);
|
|
361
462
|
if (multiButtonMatch) {
|
|
362
|
-
const buttons = line.match(/\[(\(?)[^\[\]
|
|
463
|
+
const buttons = line.match(/\[(\(?)[^\[\]]+?(\)?)\]/g);
|
|
363
464
|
if (buttons && buttons.length > 1) {
|
|
364
465
|
return {
|
|
365
466
|
type: "container",
|
|
366
467
|
children: buttons.map((btn) => {
|
|
468
|
+
// Check for navigation syntax: [(text) -> target] or [text -> target]
|
|
469
|
+
const navMatch = btn.match(/\[(\(?)(.+?)(\)?)\s*->\s*([^\]]+)\]/);
|
|
470
|
+
if (navMatch) {
|
|
471
|
+
const isDefault = navMatch[1] === "(" && navMatch[3] === ")";
|
|
472
|
+
const content = navMatch[2].trim();
|
|
473
|
+
const navigateTo = navMatch[4].trim();
|
|
474
|
+
return {
|
|
475
|
+
type: "button",
|
|
476
|
+
content,
|
|
477
|
+
variant: isDefault ? "default" : "outline",
|
|
478
|
+
navigateTo,
|
|
479
|
+
};
|
|
480
|
+
}
|
|
367
481
|
const innerMatch = btn.match(/\[(\(?)(.+?)(\)?)\]/);
|
|
368
482
|
if (innerMatch) {
|
|
369
483
|
const isDefault = innerMatch[1] === "(" && innerMatch[3] === ")";
|
|
@@ -383,6 +497,18 @@ class MarkdownParser {
|
|
|
383
497
|
};
|
|
384
498
|
}
|
|
385
499
|
}
|
|
500
|
+
// Parse default button with navigation [(button text) -> target]
|
|
501
|
+
const defaultButtonNavMatch = line.match(/^\[\((.+?)\)\s*->\s*([^\]]+)\]$/);
|
|
502
|
+
if (defaultButtonNavMatch) {
|
|
503
|
+
const content = defaultButtonNavMatch[1].trim();
|
|
504
|
+
const navigateTo = defaultButtonNavMatch[2].trim();
|
|
505
|
+
return {
|
|
506
|
+
type: "button",
|
|
507
|
+
content,
|
|
508
|
+
variant: "default",
|
|
509
|
+
navigateTo,
|
|
510
|
+
};
|
|
511
|
+
}
|
|
386
512
|
// Parse default button [(button text)] or [(button text) | classes]
|
|
387
513
|
const defaultButtonMatch = line.match(/^\[\((.+?)\)(?:\s*\|\s*(.+))?\]$/);
|
|
388
514
|
if (defaultButtonMatch) {
|
|
@@ -395,6 +521,18 @@ class MarkdownParser {
|
|
|
395
521
|
...(className && { className }),
|
|
396
522
|
};
|
|
397
523
|
}
|
|
524
|
+
// Parse outline button with navigation [button text -> target]
|
|
525
|
+
const buttonNavMatch = line.match(/^\[([^|]+?)\s*->\s*([^\]]+)\]$/);
|
|
526
|
+
if (buttonNavMatch) {
|
|
527
|
+
const content = buttonNavMatch[1].trim();
|
|
528
|
+
const navigateTo = buttonNavMatch[2].trim();
|
|
529
|
+
return {
|
|
530
|
+
type: "button",
|
|
531
|
+
content,
|
|
532
|
+
variant: "outline",
|
|
533
|
+
navigateTo,
|
|
534
|
+
};
|
|
535
|
+
}
|
|
398
536
|
// Parse outline button [button text] or [button text | classes]
|
|
399
537
|
const buttonMatch = line.match(/^\[([^|]+?)(?:\s*\|\s*(.+))?\]$/);
|
|
400
538
|
if (buttonMatch) {
|
|
@@ -503,6 +641,8 @@ class ShadcnCodeGenerator {
|
|
|
503
641
|
generate(nodes) {
|
|
504
642
|
this.indentLevel = 0;
|
|
505
643
|
this.requiredImports.clear();
|
|
644
|
+
// Check if the component contains a workflow
|
|
645
|
+
const hasWorkflow = nodes.some(node => node.type === 'workflow');
|
|
506
646
|
// Generate component body
|
|
507
647
|
const componentBody = this.generateNodes(nodes);
|
|
508
648
|
// Add base indentation (6 spaces = 3 levels for proper JSX nesting)
|
|
@@ -512,7 +652,8 @@ class ShadcnCodeGenerator {
|
|
|
512
652
|
.join('\n');
|
|
513
653
|
// Collect imports
|
|
514
654
|
const imports = this.generateImports();
|
|
515
|
-
|
|
655
|
+
const reactImport = hasWorkflow ? "import { useState } from 'react';\n" : "";
|
|
656
|
+
return `${reactImport}${imports}
|
|
516
657
|
|
|
517
658
|
export function GeneratedComponent() {
|
|
518
659
|
return (
|
|
@@ -600,6 +741,10 @@ ${indentedBody}
|
|
|
600
741
|
return this.generateItalic(node, index);
|
|
601
742
|
case "image":
|
|
602
743
|
return this.generateImage(node, index);
|
|
744
|
+
case "workflow":
|
|
745
|
+
return this.generateWorkflow(node, index);
|
|
746
|
+
case "screen":
|
|
747
|
+
return this.generateScreen(node, index);
|
|
603
748
|
default:
|
|
604
749
|
return "";
|
|
605
750
|
}
|
|
@@ -715,7 +860,9 @@ ${this.indent()}</div>`;
|
|
|
715
860
|
this.requiredImports.add("Button");
|
|
716
861
|
const variant = node.variant || "default";
|
|
717
862
|
const className = node.className ? ` className="${node.className}"` : "";
|
|
718
|
-
|
|
863
|
+
// Add onClick handler if button has navigation
|
|
864
|
+
const onClick = node.navigateTo ? ` onClick={() => setCurrentScreen('${node.navigateTo}')}` : "";
|
|
865
|
+
return `${this.indent()}<Button key={${index}} variant="${variant}"${className}${onClick}>${this.escapeJSX(node.content || "")}</Button>`;
|
|
719
866
|
}
|
|
720
867
|
generateContainer(node, index) {
|
|
721
868
|
this.indentLevel++;
|
|
@@ -816,6 +963,46 @@ ${this.indent()}</div>`;
|
|
|
816
963
|
const alt = node.alt || "";
|
|
817
964
|
return `${this.indent()}<img key={${index}} src="${src}" alt="${this.escapeJSX(alt)}" className="max-w-full h-auto" />`;
|
|
818
965
|
}
|
|
966
|
+
generateWorkflow(node, index) {
|
|
967
|
+
const screens = node.children || [];
|
|
968
|
+
const initialScreen = node.initialScreen || screens[0]?.id || "home";
|
|
969
|
+
// Generate state management
|
|
970
|
+
const stateDeclaration = `${this.indent()}const [currentScreen, setCurrentScreen] = useState('${initialScreen}');`;
|
|
971
|
+
// Generate screen rendering
|
|
972
|
+
this.indentLevel++;
|
|
973
|
+
const screenCases = screens.map((screen, i) => {
|
|
974
|
+
const screenId = screen.id || `screen-${i}`;
|
|
975
|
+
const screenContent = screen.children ? this.generateNodes(screen.children) : "";
|
|
976
|
+
return `${this.indent()}${i === 0 ? '' : 'else '}if (currentScreen === '${screenId}') {
|
|
977
|
+
${this.indent()} return (
|
|
978
|
+
${this.indent()} <div className="space-y-2">
|
|
979
|
+
${screenContent}
|
|
980
|
+
${this.indent()} </div>
|
|
981
|
+
${this.indent()} );
|
|
982
|
+
${this.indent()}}`;
|
|
983
|
+
}).join('\n');
|
|
984
|
+
this.indentLevel--;
|
|
985
|
+
// Return fallback if no screen matches
|
|
986
|
+
const fallback = `${this.indent()}return <div>Screen not found</div>;`;
|
|
987
|
+
return `${this.indent()}<div key={${index}}>
|
|
988
|
+
${this.indent()} {(() => {
|
|
989
|
+
${stateDeclaration}
|
|
990
|
+
|
|
991
|
+
${screenCases}
|
|
992
|
+
${fallback}
|
|
993
|
+
${this.indent()} })()}
|
|
994
|
+
${this.indent()}</div>`;
|
|
995
|
+
}
|
|
996
|
+
generateScreen(node, index) {
|
|
997
|
+
// Screens are handled within workflow generation
|
|
998
|
+
// This method is for standalone screen nodes (if used outside workflow)
|
|
999
|
+
this.indentLevel++;
|
|
1000
|
+
const children = node.children ? this.generateNodes(node.children) : "";
|
|
1001
|
+
this.indentLevel--;
|
|
1002
|
+
return `${this.indent()}<div key={${index}} data-screen-id="${node.id || index}" className="space-y-2">
|
|
1003
|
+
${children}
|
|
1004
|
+
${this.indent()}</div>`;
|
|
1005
|
+
}
|
|
819
1006
|
}
|
|
820
1007
|
|
|
821
1008
|
exports.MarkdownParser = MarkdownParser;
|