Files
dewedev/node_modules/.cache/babel-loader/15a1d02160aea154194c1f49564e3c8dfdf368de8ed11cd2b41bbca289879075.json
dwindown 7f2dd5260f Initial commit: Developer Tools MVP with visual editor
- Complete React app with 7 developer tools
- JSON Tool with visual structured editor
- Serialize Tool with visual structured editor
- URL, Base64, CSV/JSON, Beautifier, Diff tools
- Responsive navigation with dropdown menu
- Dark/light mode toggle
- Mobile-responsive design with sticky header
- All tools working with copy/paste functionality
2025-08-02 09:31:26 +07:00

1 line
52 KiB
JSON

{"ast":null,"code":"var _jsxFileName = \"/Users/dwindown/CascadeProjects/developer-tools/src/pages/BeautifierTool.js\",\n _s = $RefreshSig$();\nimport React, { useState } from 'react';\nimport { FileText } from 'lucide-react';\nimport ToolLayout from '../components/ToolLayout';\nimport CopyButton from '../components/CopyButton';\nimport { jsxDEV as _jsxDEV } from \"react/jsx-dev-runtime\";\nconst BeautifierTool = () => {\n _s();\n const [input, setInput] = useState('');\n const [output, setOutput] = useState('');\n const [language, setLanguage] = useState('json');\n const [mode, setMode] = useState('beautify'); // 'beautify' or 'minify'\n\n const beautifyJson = text => {\n try {\n const parsed = JSON.parse(text);\n return JSON.stringify(parsed, null, 2);\n } catch (err) {\n throw new Error(`Invalid JSON: ${err.message}`);\n }\n };\n const minifyJson = text => {\n try {\n const parsed = JSON.parse(text);\n return JSON.stringify(parsed);\n } catch (err) {\n throw new Error(`Invalid JSON: ${err.message}`);\n }\n };\n const beautifyXml = text => {\n try {\n // Clean input text first\n let cleanText = text.trim();\n if (!cleanText) {\n throw new Error('Empty XML input');\n }\n\n // Parse and validate XML\n const parser = new DOMParser();\n const xmlDoc = parser.parseFromString(cleanText, 'text/xml');\n if (xmlDoc.getElementsByTagName('parsererror').length > 0) {\n throw new Error('Invalid XML syntax');\n }\n\n // Format XML properly\n const formatXmlNode = (node, depth = 0) => {\n const indent = ' '.repeat(depth);\n let result = '';\n if (node.nodeType === Node.ELEMENT_NODE) {\n const tagName = node.tagName;\n const attributes = Array.from(node.attributes).map(attr => `${attr.name}=\"${attr.value}\"`).join(' ');\n const openTag = `<${tagName}${attributes ? ' ' + attributes : ''}`;\n if (node.childNodes.length === 0) {\n result += `${indent}${openTag} />\\n`;\n } else {\n const hasTextContent = Array.from(node.childNodes).some(child => child.nodeType === Node.TEXT_NODE && child.textContent.trim());\n if (hasTextContent && node.childNodes.length === 1) {\n // Single text node - keep on same line\n result += `${indent}${openTag}>${node.textContent.trim()}</${tagName}>\\n`;\n } else {\n // Multiple children or mixed content\n result += `${indent}${openTag}>\\n`;\n Array.from(node.childNodes).forEach(child => {\n if (child.nodeType === Node.ELEMENT_NODE) {\n result += formatXmlNode(child, depth + 1);\n } else if (child.nodeType === Node.TEXT_NODE) {\n const text = child.textContent.trim();\n if (text) {\n result += `${' '.repeat(depth + 1)}${text}\\n`;\n }\n }\n });\n result += `${indent}</${tagName}>\\n`;\n }\n }\n }\n return result;\n };\n let formatted = '';\n if (xmlDoc.documentElement) {\n formatted = formatXmlNode(xmlDoc.documentElement);\n }\n return formatted.trim();\n } catch (err) {\n throw new Error(`XML formatting error: ${err.message}`);\n }\n };\n const minifyXml = text => {\n return text.replace(/>\\s+</g, '><').replace(/\\s+/g, ' ').trim();\n };\n const beautifyCss = text => {\n let formatted = text.replace(/\\{/g, ' {\\n ').replace(/\\}/g, '\\n}\\n').replace(/;/g, ';\\n ').replace(/,/g, ',\\n').replace(/\\n\\s*\\n/g, '\\n').trim();\n\n // Clean up extra spaces and indentation\n const lines = formatted.split('\\n');\n let result = '';\n let indent = 0;\n lines.forEach(line => {\n const trimmed = line.trim();\n if (trimmed) {\n if (trimmed === '}') {\n indent--;\n }\n result += ' '.repeat(Math.max(0, indent)) + trimmed + '\\n';\n if (trimmed.endsWith('{')) {\n indent++;\n }\n }\n });\n return result.trim();\n };\n const minifyCss = text => {\n return text.replace(/\\s+/g, ' ').replace(/;\\s*}/g, '}').replace(/\\s*{\\s*/g, '{').replace(/;\\s*/g, ';').replace(/,\\s*/g, ',').trim();\n };\n const beautifyHtml = text => {\n try {\n // Clean input text first\n let cleanText = text.trim();\n if (!cleanText) {\n throw new Error('Empty HTML input');\n }\n\n // Self-closing tags that don't need closing tags\n const selfClosingTags = ['area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input', 'link', 'meta', 'param', 'source', 'track', 'wbr'];\n\n // Inline tags that should stay on same line\n const inlineTags = ['a', 'abbr', 'acronym', 'b', 'bdo', 'big', 'br', 'button', 'cite', 'code', 'dfn', 'em', 'i', 'img', 'input', 'kbd', 'label', 'map', 'object', 'q', 'samp', 'script', 'select', 'small', 'span', 'strong', 'sub', 'sup', 'textarea', 'tt', 'var'];\n let formatted = '';\n let indent = 0;\n const tab = ' ';\n\n // Better HTML parsing\n const tokens = cleanText.match(/<\\/?[^>]+>|[^<]+/g) || [];\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i].trim();\n if (!token) continue;\n if (token.startsWith('<')) {\n // It's a tag\n if (token.startsWith('</')) {\n // Closing tag\n indent = Math.max(0, indent - 1);\n formatted += tab.repeat(indent) + token + '\\n';\n } else if (token.endsWith('/>')) {\n // Self-closing tag\n formatted += tab.repeat(indent) + token + '\\n';\n } else if (token.startsWith('<!')) {\n // Comment or doctype\n formatted += tab.repeat(indent) + token + '\\n';\n } else {\n // Opening tag\n const tagMatch = token.match(/<([^\\s>]+)/);\n const tagName = tagMatch ? tagMatch[1].toLowerCase() : '';\n formatted += tab.repeat(indent) + token + '\\n';\n if (!selfClosingTags.includes(tagName)) {\n indent++;\n }\n }\n } else {\n // It's text content\n const textContent = token.trim();\n if (textContent) {\n formatted += tab.repeat(indent) + textContent + '\\n';\n }\n }\n }\n return formatted.trim();\n } catch (err) {\n // Fallback to simple formatting if advanced parsing fails\n let formatted = '';\n let indent = 0;\n const tab = ' ';\n text = text.replace(/></g, '>\\n<');\n const lines = text.split('\\n');\n lines.forEach(line => {\n const trimmed = line.trim();\n if (trimmed) {\n if (trimmed.startsWith('</')) {\n indent = Math.max(0, indent - 1);\n }\n formatted += tab.repeat(indent) + trimmed + '\\n';\n if (trimmed.startsWith('<') && !trimmed.startsWith('</') && !trimmed.endsWith('/>') && !trimmed.includes('<!')) {\n indent++;\n }\n }\n });\n return formatted.trim();\n }\n };\n const minifyHtml = text => {\n return text.replace(/>\\s+</g, '><').replace(/\\s+/g, ' ').trim();\n };\n const beautifySql = text => {\n const keywords = ['SELECT', 'FROM', 'WHERE', 'JOIN', 'INNER JOIN', 'LEFT JOIN', 'RIGHT JOIN', 'ORDER BY', 'GROUP BY', 'HAVING', 'INSERT', 'UPDATE', 'DELETE', 'CREATE', 'ALTER', 'DROP'];\n let formatted = text.toUpperCase();\n keywords.forEach(keyword => {\n const regex = new RegExp(`\\\\b${keyword}\\\\b`, 'gi');\n formatted = formatted.replace(regex, `\\n${keyword}`);\n });\n return formatted.split('\\n').map(line => line.trim()).filter(line => line).join('\\n').trim();\n };\n const minifySql = text => {\n return text.replace(/\\s+/g, ' ').trim();\n };\n const handleProcess = () => {\n try {\n let result = '';\n if (mode === 'beautify') {\n switch (language) {\n case 'json':\n result = beautifyJson(input);\n break;\n case 'xml':\n result = beautifyXml(input);\n break;\n case 'css':\n result = beautifyCss(input);\n break;\n case 'html':\n result = beautifyHtml(input);\n break;\n case 'sql':\n result = beautifySql(input);\n break;\n default:\n result = input;\n }\n } else {\n switch (language) {\n case 'json':\n result = minifyJson(input);\n break;\n case 'xml':\n result = minifyXml(input);\n break;\n case 'css':\n result = minifyCss(input);\n break;\n case 'html':\n result = minifyHtml(input);\n break;\n case 'sql':\n result = minifySql(input);\n break;\n default:\n result = input;\n }\n }\n setOutput(result);\n } catch (err) {\n setOutput(`Error: ${err.message}`);\n }\n };\n const clearAll = () => {\n setInput('');\n setOutput('');\n // Force re-render to ensure clean state\n setTimeout(() => {\n setInput('');\n setOutput('');\n }, 10);\n };\n const loadSample = () => {\n // Clear first to ensure clean state\n setInput('');\n setOutput('');\n const samples = {\n json: '{\"name\":\"John Doe\",\"age\":30,\"city\":\"New York\",\"address\":{\"street\":\"123 Main St\",\"zipCode\":\"10001\"},\"hobbies\":[\"reading\",\"coding\",\"traveling\"],\"isActive\":true}',\n xml: '<?xml version=\"1.0\" encoding=\"UTF-8\"?><root><person id=\"1\"><name>John Doe</name><age>30</age><email>john@example.com</email><address><street>123 Main St</street><city>New York</city><zipCode>10001</zipCode></address></person><person id=\"2\"><name>Jane Smith</name><age>25</age><email>jane@example.com</email></person></root>',\n css: 'body{margin:0;padding:0;font-family:Arial,sans-serif;}h1{color:#333;font-size:24px;margin-bottom:10px;}.container{max-width:1200px;margin:0 auto;padding:20px;}.button{background-color:#007bff;color:white;padding:10px 20px;border:none;border-radius:4px;cursor:pointer;}.button:hover{background-color:#0056b3;}',\n html: '<!DOCTYPE html><html lang=\"en\"><head><meta charset=\"UTF-8\"><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"><title>Sample Page</title></head><body><div class=\"container\"><header><h1>Welcome to Our Website</h1><nav><ul><li><a href=\"#home\">Home</a></li><li><a href=\"#about\">About</a></li><li><a href=\"#contact\">Contact</a></li></ul></nav></header><main><section><h2>About Us</h2><p>This is a sample paragraph with <strong>bold text</strong> and <em>italic text</em>.</p><img src=\"image.jpg\" alt=\"Sample Image\" width=\"300\" height=\"200\"></section></main><footer><p>&copy; 2024 Sample Website. All rights reserved.</p></footer></div></body></html>',\n sql: 'SELECT u.id, u.name, u.email, p.title, p.created_at FROM users u INNER JOIN posts p ON u.id = p.user_id WHERE u.age > 18 AND p.status = \"published\" ORDER BY p.created_at DESC, u.name ASC LIMIT 10;'\n };\n\n // Set sample with slight delay to ensure clean state\n setTimeout(() => {\n setInput(samples[language] || '');\n }, 50);\n };\n return /*#__PURE__*/_jsxDEV(ToolLayout, {\n title: \"Code Beautifier/Minifier\",\n description: \"Format and minify JSON, XML, SQL, CSS, and HTML code\",\n icon: FileText,\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n className: \"flex flex-wrap gap-4 mb-6\",\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n className: \"flex items-center space-x-2\",\n children: [/*#__PURE__*/_jsxDEV(\"label\", {\n className: \"text-sm font-medium text-gray-700 dark:text-gray-300\",\n children: \"Language:\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 349,\n columnNumber: 11\n }, this), /*#__PURE__*/_jsxDEV(\"select\", {\n value: language,\n onChange: e => setLanguage(e.target.value),\n className: \"px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md bg-white dark:bg-gray-700 text-gray-900 dark:text-gray-100\",\n children: [/*#__PURE__*/_jsxDEV(\"option\", {\n value: \"json\",\n children: \"JSON\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 357,\n columnNumber: 13\n }, this), /*#__PURE__*/_jsxDEV(\"option\", {\n value: \"xml\",\n children: \"XML\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 358,\n columnNumber: 13\n }, this), /*#__PURE__*/_jsxDEV(\"option\", {\n value: \"css\",\n children: \"CSS\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 359,\n columnNumber: 13\n }, this), /*#__PURE__*/_jsxDEV(\"option\", {\n value: \"html\",\n children: \"HTML\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 360,\n columnNumber: 13\n }, this), /*#__PURE__*/_jsxDEV(\"option\", {\n value: \"sql\",\n children: \"SQL\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 361,\n columnNumber: 13\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 352,\n columnNumber: 11\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 348,\n columnNumber: 9\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"flex bg-gray-100 dark:bg-gray-800 rounded-lg p-1\",\n children: [/*#__PURE__*/_jsxDEV(\"button\", {\n onClick: () => setMode('beautify'),\n className: `px-4 py-2 rounded-md font-medium transition-colors ${mode === 'beautify' ? 'bg-white dark:bg-gray-700 text-primary-600 shadow-sm' : 'text-gray-600 dark:text-gray-400'}`,\n children: \"Beautify\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 366,\n columnNumber: 11\n }, this), /*#__PURE__*/_jsxDEV(\"button\", {\n onClick: () => setMode('minify'),\n className: `px-4 py-2 rounded-md font-medium transition-colors ${mode === 'minify' ? 'bg-white dark:bg-gray-700 text-primary-600 shadow-sm' : 'text-gray-600 dark:text-gray-400'}`,\n children: \"Minify\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 376,\n columnNumber: 11\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 365,\n columnNumber: 9\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 347,\n columnNumber: 7\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"flex flex-wrap gap-3 mb-6\",\n children: [/*#__PURE__*/_jsxDEV(\"button\", {\n onClick: handleProcess,\n className: \"tool-button\",\n children: mode === 'beautify' ? `Beautify ${language.toUpperCase()}` : `Minify ${language.toUpperCase()}`\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 391,\n columnNumber: 9\n }, this), /*#__PURE__*/_jsxDEV(\"button\", {\n onClick: loadSample,\n className: \"tool-button-secondary\",\n children: \"Load Sample\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 394,\n columnNumber: 9\n }, this), /*#__PURE__*/_jsxDEV(\"button\", {\n onClick: clearAll,\n className: \"tool-button-secondary\",\n children: \"Clear All\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 397,\n columnNumber: 9\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 390,\n columnNumber: 7\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"grid grid-cols-1 lg:grid-cols-2 gap-6\",\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n className: \"space-y-2\",\n children: [/*#__PURE__*/_jsxDEV(\"label\", {\n className: \"block text-sm font-medium text-gray-700 dark:text-gray-300\",\n children: [language.toUpperCase(), \" Input\"]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 406,\n columnNumber: 11\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"relative\",\n children: /*#__PURE__*/_jsxDEV(\"textarea\", {\n value: input,\n onChange: e => setInput(e.target.value),\n placeholder: `Paste your ${language.toUpperCase()} code here...`,\n className: \"tool-input h-96\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 410,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 409,\n columnNumber: 11\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 405,\n columnNumber: 9\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"space-y-2\",\n children: [/*#__PURE__*/_jsxDEV(\"label\", {\n className: \"block text-sm font-medium text-gray-700 dark:text-gray-300\",\n children: [mode === 'beautify' ? 'Beautified' : 'Minified', \" Output\"]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 421,\n columnNumber: 11\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"relative\",\n children: [/*#__PURE__*/_jsxDEV(\"textarea\", {\n value: output,\n readOnly: true,\n placeholder: `${mode === 'beautify' ? 'Beautified' : 'Minified'} code will appear here...`,\n className: \"tool-input h-96 bg-gray-50 dark:bg-gray-800\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 425,\n columnNumber: 13\n }, this), output && /*#__PURE__*/_jsxDEV(CopyButton, {\n text: output\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 431,\n columnNumber: 24\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 424,\n columnNumber: 11\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 420,\n columnNumber: 9\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 403,\n columnNumber: 7\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"bg-blue-50 dark:bg-blue-900/20 border border-blue-200 dark:border-blue-800 rounded-md p-4 mt-6\",\n children: [/*#__PURE__*/_jsxDEV(\"h4\", {\n className: \"text-blue-800 dark:text-blue-200 font-medium mb-2\",\n children: \"Usage Tips\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 438,\n columnNumber: 9\n }, this), /*#__PURE__*/_jsxDEV(\"ul\", {\n className: \"text-blue-700 dark:text-blue-300 text-sm space-y-1\",\n children: [/*#__PURE__*/_jsxDEV(\"li\", {\n children: \"\\u2022 Beautify adds proper indentation and formatting for readability\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 440,\n columnNumber: 11\n }, this), /*#__PURE__*/_jsxDEV(\"li\", {\n children: \"\\u2022 Minify removes unnecessary whitespace to reduce file size\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 441,\n columnNumber: 11\n }, this), /*#__PURE__*/_jsxDEV(\"li\", {\n children: \"\\u2022 Select the appropriate language for optimal formatting\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 442,\n columnNumber: 11\n }, this), /*#__PURE__*/_jsxDEV(\"li\", {\n children: \"\\u2022 Use beautified code for development and minified for production\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 443,\n columnNumber: 11\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 439,\n columnNumber: 9\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 437,\n columnNumber: 7\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 341,\n columnNumber: 5\n }, this);\n};\n_s(BeautifierTool, \"GM2YTSqXBPWxkA/BHZubYSKc1UI=\");\n_c = BeautifierTool;\nexport default BeautifierTool;\nvar _c;\n$RefreshReg$(_c, \"BeautifierTool\");","map":{"version":3,"names":["React","useState","FileText","ToolLayout","CopyButton","jsxDEV","_jsxDEV","BeautifierTool","_s","input","setInput","output","setOutput","language","setLanguage","mode","setMode","beautifyJson","text","parsed","JSON","parse","stringify","err","Error","message","minifyJson","beautifyXml","cleanText","trim","parser","DOMParser","xmlDoc","parseFromString","getElementsByTagName","length","formatXmlNode","node","depth","indent","repeat","result","nodeType","Node","ELEMENT_NODE","tagName","attributes","Array","from","map","attr","name","value","join","openTag","childNodes","hasTextContent","some","child","TEXT_NODE","textContent","forEach","formatted","documentElement","minifyXml","replace","beautifyCss","lines","split","line","trimmed","Math","max","endsWith","minifyCss","beautifyHtml","selfClosingTags","inlineTags","tab","tokens","match","i","token","startsWith","tagMatch","toLowerCase","includes","minifyHtml","beautifySql","keywords","toUpperCase","keyword","regex","RegExp","filter","minifySql","handleProcess","clearAll","setTimeout","loadSample","samples","json","xml","css","html","sql","title","description","icon","children","className","fileName","_jsxFileName","lineNumber","columnNumber","onChange","e","target","onClick","placeholder","readOnly","_c","$RefreshReg$"],"sources":["/Users/dwindown/CascadeProjects/developer-tools/src/pages/BeautifierTool.js"],"sourcesContent":["import React, { useState } from 'react';\nimport { FileText } from 'lucide-react';\nimport ToolLayout from '../components/ToolLayout';\nimport CopyButton from '../components/CopyButton';\n\nconst BeautifierTool = () => {\n const [input, setInput] = useState('');\n const [output, setOutput] = useState('');\n const [language, setLanguage] = useState('json');\n const [mode, setMode] = useState('beautify'); // 'beautify' or 'minify'\n\n const beautifyJson = (text) => {\n try {\n const parsed = JSON.parse(text);\n return JSON.stringify(parsed, null, 2);\n } catch (err) {\n throw new Error(`Invalid JSON: ${err.message}`);\n }\n };\n\n const minifyJson = (text) => {\n try {\n const parsed = JSON.parse(text);\n return JSON.stringify(parsed);\n } catch (err) {\n throw new Error(`Invalid JSON: ${err.message}`);\n }\n };\n\n const beautifyXml = (text) => {\n try {\n // Clean input text first\n let cleanText = text.trim();\n if (!cleanText) {\n throw new Error('Empty XML input');\n }\n\n // Parse and validate XML\n const parser = new DOMParser();\n const xmlDoc = parser.parseFromString(cleanText, 'text/xml');\n \n if (xmlDoc.getElementsByTagName('parsererror').length > 0) {\n throw new Error('Invalid XML syntax');\n }\n\n // Format XML properly\n const formatXmlNode = (node, depth = 0) => {\n const indent = ' '.repeat(depth);\n let result = '';\n \n if (node.nodeType === Node.ELEMENT_NODE) {\n const tagName = node.tagName;\n const attributes = Array.from(node.attributes)\n .map(attr => `${attr.name}=\"${attr.value}\"`)\n .join(' ');\n \n const openTag = `<${tagName}${attributes ? ' ' + attributes : ''}`;\n \n if (node.childNodes.length === 0) {\n result += `${indent}${openTag} />\\n`;\n } else {\n const hasTextContent = Array.from(node.childNodes)\n .some(child => child.nodeType === Node.TEXT_NODE && child.textContent.trim());\n \n if (hasTextContent && node.childNodes.length === 1) {\n // Single text node - keep on same line\n result += `${indent}${openTag}>${node.textContent.trim()}</${tagName}>\\n`;\n } else {\n // Multiple children or mixed content\n result += `${indent}${openTag}>\\n`;\n \n Array.from(node.childNodes).forEach(child => {\n if (child.nodeType === Node.ELEMENT_NODE) {\n result += formatXmlNode(child, depth + 1);\n } else if (child.nodeType === Node.TEXT_NODE) {\n const text = child.textContent.trim();\n if (text) {\n result += `${' '.repeat(depth + 1)}${text}\\n`;\n }\n }\n });\n \n result += `${indent}</${tagName}>\\n`;\n }\n }\n }\n \n return result;\n };\n \n let formatted = '';\n if (xmlDoc.documentElement) {\n formatted = formatXmlNode(xmlDoc.documentElement);\n }\n \n return formatted.trim();\n } catch (err) {\n throw new Error(`XML formatting error: ${err.message}`);\n }\n };\n\n const minifyXml = (text) => {\n return text.replace(/>\\s+</g, '><').replace(/\\s+/g, ' ').trim();\n };\n\n const beautifyCss = (text) => {\n let formatted = text\n .replace(/\\{/g, ' {\\n ')\n .replace(/\\}/g, '\\n}\\n')\n .replace(/;/g, ';\\n ')\n .replace(/,/g, ',\\n')\n .replace(/\\n\\s*\\n/g, '\\n')\n .trim();\n \n // Clean up extra spaces and indentation\n const lines = formatted.split('\\n');\n let result = '';\n let indent = 0;\n \n lines.forEach(line => {\n const trimmed = line.trim();\n if (trimmed) {\n if (trimmed === '}') {\n indent--;\n }\n result += ' '.repeat(Math.max(0, indent)) + trimmed + '\\n';\n if (trimmed.endsWith('{')) {\n indent++;\n }\n }\n });\n \n return result.trim();\n };\n\n const minifyCss = (text) => {\n return text\n .replace(/\\s+/g, ' ')\n .replace(/;\\s*}/g, '}')\n .replace(/\\s*{\\s*/g, '{')\n .replace(/;\\s*/g, ';')\n .replace(/,\\s*/g, ',')\n .trim();\n };\n\n const beautifyHtml = (text) => {\n try {\n // Clean input text first\n let cleanText = text.trim();\n if (!cleanText) {\n throw new Error('Empty HTML input');\n }\n\n // Self-closing tags that don't need closing tags\n const selfClosingTags = ['area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input', 'link', 'meta', 'param', 'source', 'track', 'wbr'];\n \n // Inline tags that should stay on same line\n const inlineTags = ['a', 'abbr', 'acronym', 'b', 'bdo', 'big', 'br', 'button', 'cite', 'code', 'dfn', 'em', 'i', 'img', 'input', 'kbd', 'label', 'map', 'object', 'q', 'samp', 'script', 'select', 'small', 'span', 'strong', 'sub', 'sup', 'textarea', 'tt', 'var'];\n \n let formatted = '';\n let indent = 0;\n const tab = ' ';\n \n // Better HTML parsing\n const tokens = cleanText.match(/<\\/?[^>]+>|[^<]+/g) || [];\n \n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i].trim();\n if (!token) continue;\n \n if (token.startsWith('<')) {\n // It's a tag\n if (token.startsWith('</')) {\n // Closing tag\n indent = Math.max(0, indent - 1);\n formatted += tab.repeat(indent) + token + '\\n';\n } else if (token.endsWith('/>')) {\n // Self-closing tag\n formatted += tab.repeat(indent) + token + '\\n';\n } else if (token.startsWith('<!')) {\n // Comment or doctype\n formatted += tab.repeat(indent) + token + '\\n';\n } else {\n // Opening tag\n const tagMatch = token.match(/<([^\\s>]+)/);\n const tagName = tagMatch ? tagMatch[1].toLowerCase() : '';\n \n formatted += tab.repeat(indent) + token + '\\n';\n \n if (!selfClosingTags.includes(tagName)) {\n indent++;\n }\n }\n } else {\n // It's text content\n const textContent = token.trim();\n if (textContent) {\n formatted += tab.repeat(indent) + textContent + '\\n';\n }\n }\n }\n \n return formatted.trim();\n } catch (err) {\n // Fallback to simple formatting if advanced parsing fails\n let formatted = '';\n let indent = 0;\n const tab = ' ';\n \n text = text.replace(/></g, '>\\n<');\n const lines = text.split('\\n');\n \n lines.forEach(line => {\n const trimmed = line.trim();\n if (trimmed) {\n if (trimmed.startsWith('</')) {\n indent = Math.max(0, indent - 1);\n }\n formatted += tab.repeat(indent) + trimmed + '\\n';\n if (trimmed.startsWith('<') && !trimmed.startsWith('</') && !trimmed.endsWith('/>') && !trimmed.includes('<!')) {\n indent++;\n }\n }\n });\n \n return formatted.trim();\n }\n };\n\n const minifyHtml = (text) => {\n return text\n .replace(/>\\s+</g, '><')\n .replace(/\\s+/g, ' ')\n .trim();\n };\n\n const beautifySql = (text) => {\n const keywords = ['SELECT', 'FROM', 'WHERE', 'JOIN', 'INNER JOIN', 'LEFT JOIN', 'RIGHT JOIN', 'ORDER BY', 'GROUP BY', 'HAVING', 'INSERT', 'UPDATE', 'DELETE', 'CREATE', 'ALTER', 'DROP'];\n \n let formatted = text.toUpperCase();\n \n keywords.forEach(keyword => {\n const regex = new RegExp(`\\\\b${keyword}\\\\b`, 'gi');\n formatted = formatted.replace(regex, `\\n${keyword}`);\n });\n \n return formatted\n .split('\\n')\n .map(line => line.trim())\n .filter(line => line)\n .join('\\n')\n .trim();\n };\n\n const minifySql = (text) => {\n return text.replace(/\\s+/g, ' ').trim();\n };\n\n const handleProcess = () => {\n try {\n let result = '';\n \n if (mode === 'beautify') {\n switch (language) {\n case 'json':\n result = beautifyJson(input);\n break;\n case 'xml':\n result = beautifyXml(input);\n break;\n case 'css':\n result = beautifyCss(input);\n break;\n case 'html':\n result = beautifyHtml(input);\n break;\n case 'sql':\n result = beautifySql(input);\n break;\n default:\n result = input;\n }\n } else {\n switch (language) {\n case 'json':\n result = minifyJson(input);\n break;\n case 'xml':\n result = minifyXml(input);\n break;\n case 'css':\n result = minifyCss(input);\n break;\n case 'html':\n result = minifyHtml(input);\n break;\n case 'sql':\n result = minifySql(input);\n break;\n default:\n result = input;\n }\n }\n \n setOutput(result);\n } catch (err) {\n setOutput(`Error: ${err.message}`);\n }\n };\n\n const clearAll = () => {\n setInput('');\n setOutput('');\n // Force re-render to ensure clean state\n setTimeout(() => {\n setInput('');\n setOutput('');\n }, 10);\n };\n\n const loadSample = () => {\n // Clear first to ensure clean state\n setInput('');\n setOutput('');\n \n const samples = {\n json: '{\"name\":\"John Doe\",\"age\":30,\"city\":\"New York\",\"address\":{\"street\":\"123 Main St\",\"zipCode\":\"10001\"},\"hobbies\":[\"reading\",\"coding\",\"traveling\"],\"isActive\":true}',\n xml: '<?xml version=\"1.0\" encoding=\"UTF-8\"?><root><person id=\"1\"><name>John Doe</name><age>30</age><email>john@example.com</email><address><street>123 Main St</street><city>New York</city><zipCode>10001</zipCode></address></person><person id=\"2\"><name>Jane Smith</name><age>25</age><email>jane@example.com</email></person></root>',\n css: 'body{margin:0;padding:0;font-family:Arial,sans-serif;}h1{color:#333;font-size:24px;margin-bottom:10px;}.container{max-width:1200px;margin:0 auto;padding:20px;}.button{background-color:#007bff;color:white;padding:10px 20px;border:none;border-radius:4px;cursor:pointer;}.button:hover{background-color:#0056b3;}',\n html: '<!DOCTYPE html><html lang=\"en\"><head><meta charset=\"UTF-8\"><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"><title>Sample Page</title></head><body><div class=\"container\"><header><h1>Welcome to Our Website</h1><nav><ul><li><a href=\"#home\">Home</a></li><li><a href=\"#about\">About</a></li><li><a href=\"#contact\">Contact</a></li></ul></nav></header><main><section><h2>About Us</h2><p>This is a sample paragraph with <strong>bold text</strong> and <em>italic text</em>.</p><img src=\"image.jpg\" alt=\"Sample Image\" width=\"300\" height=\"200\"></section></main><footer><p>&copy; 2024 Sample Website. All rights reserved.</p></footer></div></body></html>',\n sql: 'SELECT u.id, u.name, u.email, p.title, p.created_at FROM users u INNER JOIN posts p ON u.id = p.user_id WHERE u.age > 18 AND p.status = \"published\" ORDER BY p.created_at DESC, u.name ASC LIMIT 10;'\n };\n \n // Set sample with slight delay to ensure clean state\n setTimeout(() => {\n setInput(samples[language] || '');\n }, 50);\n };\n\n return (\n <ToolLayout\n title=\"Code Beautifier/Minifier\"\n description=\"Format and minify JSON, XML, SQL, CSS, and HTML code\"\n icon={FileText}\n >\n {/* Language and Mode Selection */}\n <div className=\"flex flex-wrap gap-4 mb-6\">\n <div className=\"flex items-center space-x-2\">\n <label className=\"text-sm font-medium text-gray-700 dark:text-gray-300\">\n Language:\n </label>\n <select\n value={language}\n onChange={(e) => setLanguage(e.target.value)}\n className=\"px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md bg-white dark:bg-gray-700 text-gray-900 dark:text-gray-100\"\n >\n <option value=\"json\">JSON</option>\n <option value=\"xml\">XML</option>\n <option value=\"css\">CSS</option>\n <option value=\"html\">HTML</option>\n <option value=\"sql\">SQL</option>\n </select>\n </div>\n \n <div className=\"flex bg-gray-100 dark:bg-gray-800 rounded-lg p-1\">\n <button\n onClick={() => setMode('beautify')}\n className={`px-4 py-2 rounded-md font-medium transition-colors ${\n mode === 'beautify'\n ? 'bg-white dark:bg-gray-700 text-primary-600 shadow-sm'\n : 'text-gray-600 dark:text-gray-400'\n }`}\n >\n Beautify\n </button>\n <button\n onClick={() => setMode('minify')}\n className={`px-4 py-2 rounded-md font-medium transition-colors ${\n mode === 'minify'\n ? 'bg-white dark:bg-gray-700 text-primary-600 shadow-sm'\n : 'text-gray-600 dark:text-gray-400'\n }`}\n >\n Minify\n </button>\n </div>\n </div>\n\n {/* Controls */}\n <div className=\"flex flex-wrap gap-3 mb-6\">\n <button onClick={handleProcess} className=\"tool-button\">\n {mode === 'beautify' ? `Beautify ${language.toUpperCase()}` : `Minify ${language.toUpperCase()}`}\n </button>\n <button onClick={loadSample} className=\"tool-button-secondary\">\n Load Sample\n </button>\n <button onClick={clearAll} className=\"tool-button-secondary\">\n Clear All\n </button>\n </div>\n\n {/* Input/Output Grid */}\n <div className=\"grid grid-cols-1 lg:grid-cols-2 gap-6\">\n {/* Input */}\n <div className=\"space-y-2\">\n <label className=\"block text-sm font-medium text-gray-700 dark:text-gray-300\">\n {language.toUpperCase()} Input\n </label>\n <div className=\"relative\">\n <textarea\n value={input}\n onChange={(e) => setInput(e.target.value)}\n placeholder={`Paste your ${language.toUpperCase()} code here...`}\n className=\"tool-input h-96\"\n />\n </div>\n </div>\n\n {/* Output */}\n <div className=\"space-y-2\">\n <label className=\"block text-sm font-medium text-gray-700 dark:text-gray-300\">\n {mode === 'beautify' ? 'Beautified' : 'Minified'} Output\n </label>\n <div className=\"relative\">\n <textarea\n value={output}\n readOnly\n placeholder={`${mode === 'beautify' ? 'Beautified' : 'Minified'} code will appear here...`}\n className=\"tool-input h-96 bg-gray-50 dark:bg-gray-800\"\n />\n {output && <CopyButton text={output} />}\n </div>\n </div>\n </div>\n\n {/* Usage Tips */}\n <div className=\"bg-blue-50 dark:bg-blue-900/20 border border-blue-200 dark:border-blue-800 rounded-md p-4 mt-6\">\n <h4 className=\"text-blue-800 dark:text-blue-200 font-medium mb-2\">Usage Tips</h4>\n <ul className=\"text-blue-700 dark:text-blue-300 text-sm space-y-1\">\n <li>• Beautify adds proper indentation and formatting for readability</li>\n <li>• Minify removes unnecessary whitespace to reduce file size</li>\n <li>• Select the appropriate language for optimal formatting</li>\n <li>• Use beautified code for development and minified for production</li>\n </ul>\n </div>\n </ToolLayout>\n );\n};\n\nexport default BeautifierTool;\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}