@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.
@@ -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 (![alt text](url))\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, \"&amp;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\")\n .replace(/\"/g, \"&quot;\")\n .replace(/{/g, \"&#123;\")\n .replace(/}/g, \"&#125;\");\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":"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"}
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 (![alt text](url))\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, \"&amp;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\")\n .replace(/\"/g, \"&quot;\")\n .replace(/{/g, \"&#123;\")\n .replace(/}/g, \"&#125;\");\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(/^(\[\(?[^\[\]|]+\)?\]\s*)+$/);
461
+ const multiButtonMatch = line.match(/^(\[\(?[^\[\]]+\)?\]\s*)+$/);
361
462
  if (multiButtonMatch) {
362
- const buttons = line.match(/\[(\(?)[^\[\]|]+?(\)?)\]/g);
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
- return `${imports}
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
- return `${this.indent()}<Button key={${index}} variant="${variant}"${className}>${this.escapeJSX(node.content || "")}</Button>`;
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;