Files
dewedev/node_modules/.cache/babel-loader/09ed4f7cb9841539f1e0a6c5ca3a3f0870c716fc2d32d5c4546cbd7922b64340.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
38 KiB
JSON

{"ast":null,"code":"var _jsxFileName = \"/Users/dwindown/CascadeProjects/developer-tools/src/pages/DiffTool.js\",\n _s = $RefreshSig$();\nimport React, { useState } from 'react';\nimport { GitCompare, Upload } from 'lucide-react';\nimport ToolLayout from '../components/ToolLayout';\nimport CopyButton from '../components/CopyButton';\nimport { jsxDEV as _jsxDEV } from \"react/jsx-dev-runtime\";\nconst DiffTool = () => {\n _s();\n const [leftText, setLeftText] = useState('');\n const [rightText, setRightText] = useState('');\n const [diffResult, setDiffResult] = useState('');\n const [diffMode, setDiffMode] = useState('unified'); // 'unified' or 'side-by-side'\n\n // Simple diff implementation\n const computeDiff = () => {\n const leftLines = leftText.split('\\n');\n const rightLines = rightText.split('\\n');\n const maxLines = Math.max(leftLines.length, rightLines.length);\n let result = '';\n let diffCount = 0;\n if (diffMode === 'unified') {\n result += `--- Text A\\n+++ Text B\\n`;\n for (let i = 0; i < maxLines; i++) {\n const leftLine = leftLines[i] || '';\n const rightLine = rightLines[i] || '';\n if (leftLine !== rightLine) {\n diffCount++;\n if (leftLine && !rightLine) {\n result += `- ${leftLine}\\n`;\n } else if (!leftLine && rightLine) {\n result += `+ ${rightLine}\\n`;\n } else {\n result += `- ${leftLine}\\n+ ${rightLine}\\n`;\n }\n } else {\n result += ` ${leftLine}\\n`;\n }\n }\n } else {\n // Side by side format\n result += `${'Text A'.padEnd(50)} | Text B\\n`;\n result += `${'-'.repeat(50)} | ${'-'.repeat(50)}\\n`;\n for (let i = 0; i < maxLines; i++) {\n const leftLine = leftLines[i] || '';\n const rightLine = rightLines[i] || '';\n if (leftLine !== rightLine) {\n diffCount++;\n const leftDisplay = leftLine.padEnd(50);\n result += `${leftDisplay} | ${rightLine}\\n`;\n } else {\n const leftDisplay = leftLine.padEnd(50);\n result += `${leftDisplay} | ${rightLine}\\n`;\n }\n }\n }\n if (diffCount === 0) {\n result = '✅ No differences found - texts are identical!';\n } else {\n result = `Found ${diffCount} difference(s):\\n\\n${result}`;\n }\n setDiffResult(result);\n };\n const handleFileUpload = (side, event) => {\n const file = event.target.files[0];\n if (file) {\n const reader = new FileReader();\n reader.onload = e => {\n if (side === 'left') {\n setLeftText(e.target.result);\n } else {\n setRightText(e.target.result);\n }\n };\n reader.readAsText(file);\n }\n };\n const clearAll = () => {\n setLeftText('');\n setRightText('');\n setDiffResult('');\n };\n const loadSample = () => {\n setLeftText(`function calculateTotal(items) {\n let total = 0;\n for (let i = 0; i < items.length; i++) {\n total += items[i].price;\n }\n return total;\n}\n\nconst user = {\n name: \"John Doe\",\n age: 30,\n email: \"john@example.com\"\n};`);\n setRightText(`function calculateTotal(items) {\n let total = 0;\n for (const item of items) {\n total += item.price * item.quantity;\n }\n return total;\n}\n\nconst user = {\n name: \"John Smith\",\n age: 30,\n email: \"john.smith@example.com\",\n active: true\n};`);\n };\n const swapTexts = () => {\n const temp = leftText;\n setLeftText(rightText);\n setRightText(temp);\n };\n return /*#__PURE__*/_jsxDEV(ToolLayout, {\n title: \"Text Diff Checker\",\n description: \"Compare two texts and highlight differences line by line\",\n icon: GitCompare,\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n className: \"flex bg-gray-100 dark:bg-gray-800 rounded-lg p-1 mb-6 w-fit\",\n children: [/*#__PURE__*/_jsxDEV(\"button\", {\n onClick: () => setDiffMode('unified'),\n className: `px-4 py-2 rounded-md font-medium transition-colors ${diffMode === 'unified' ? 'bg-white dark:bg-gray-700 text-primary-600 shadow-sm' : 'text-gray-600 dark:text-gray-400'}`,\n children: \"Unified Diff\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 136,\n columnNumber: 9\n }, this), /*#__PURE__*/_jsxDEV(\"button\", {\n onClick: () => setDiffMode('side-by-side'),\n className: `px-4 py-2 rounded-md font-medium transition-colors ${diffMode === 'side-by-side' ? 'bg-white dark:bg-gray-700 text-primary-600 shadow-sm' : 'text-gray-600 dark:text-gray-400'}`,\n children: \"Side by Side\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 146,\n columnNumber: 9\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 135,\n columnNumber: 7\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"flex flex-wrap gap-3 mb-6\",\n children: [/*#__PURE__*/_jsxDEV(\"button\", {\n onClick: computeDiff,\n className: \"tool-button\",\n children: \"Compare Texts\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 160,\n columnNumber: 9\n }, this), /*#__PURE__*/_jsxDEV(\"button\", {\n onClick: swapTexts,\n className: \"tool-button-secondary\",\n children: \"Swap A \\u2194 B\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 163,\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: 166,\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: 169,\n columnNumber: 9\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 159,\n columnNumber: 7\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"grid grid-cols-1 lg:grid-cols-2 gap-6 mb-6\",\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n className: \"space-y-2\",\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n className: \"flex items-center justify-between\",\n children: [/*#__PURE__*/_jsxDEV(\"label\", {\n className: \"block text-sm font-medium text-gray-700 dark:text-gray-300\",\n children: \"Text A (Original)\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 179,\n columnNumber: 13\n }, this), /*#__PURE__*/_jsxDEV(\"label\", {\n className: \"tool-button-secondary cursor-pointer flex items-center space-x-2 text-xs px-2 py-1\",\n children: [/*#__PURE__*/_jsxDEV(Upload, {\n className: \"h-3 w-3\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 183,\n columnNumber: 15\n }, this), /*#__PURE__*/_jsxDEV(\"span\", {\n children: \"Upload\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 184,\n columnNumber: 15\n }, this), /*#__PURE__*/_jsxDEV(\"input\", {\n type: \"file\",\n onChange: e => handleFileUpload('left', e),\n className: \"hidden\",\n accept: \".txt,.js,.json,.xml,.csv,.html,.css,.md\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 185,\n columnNumber: 15\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 182,\n columnNumber: 13\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 178,\n columnNumber: 11\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"relative\",\n children: /*#__PURE__*/_jsxDEV(\"textarea\", {\n value: leftText,\n onChange: e => setLeftText(e.target.value),\n placeholder: \"Paste your first text here...\",\n className: \"tool-input h-64\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 194,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 193,\n columnNumber: 11\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 177,\n columnNumber: 9\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"space-y-2\",\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n className: \"flex items-center justify-between\",\n children: [/*#__PURE__*/_jsxDEV(\"label\", {\n className: \"block text-sm font-medium text-gray-700 dark:text-gray-300\",\n children: \"Text B (Modified)\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 206,\n columnNumber: 13\n }, this), /*#__PURE__*/_jsxDEV(\"label\", {\n className: \"tool-button-secondary cursor-pointer flex items-center space-x-2 text-xs px-2 py-1\",\n children: [/*#__PURE__*/_jsxDEV(Upload, {\n className: \"h-3 w-3\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 210,\n columnNumber: 15\n }, this), /*#__PURE__*/_jsxDEV(\"span\", {\n children: \"Upload\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 211,\n columnNumber: 15\n }, this), /*#__PURE__*/_jsxDEV(\"input\", {\n type: \"file\",\n onChange: e => handleFileUpload('right', e),\n className: \"hidden\",\n accept: \".txt,.js,.json,.xml,.csv,.html,.css,.md\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 212,\n columnNumber: 15\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 209,\n columnNumber: 13\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 205,\n columnNumber: 11\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"relative\",\n children: /*#__PURE__*/_jsxDEV(\"textarea\", {\n value: rightText,\n onChange: e => setRightText(e.target.value),\n placeholder: \"Paste your second text here...\",\n className: \"tool-input h-64\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 221,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 220,\n columnNumber: 11\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 204,\n columnNumber: 9\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 175,\n columnNumber: 7\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: \"Comparison Result\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 233,\n columnNumber: 9\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"relative\",\n children: [/*#__PURE__*/_jsxDEV(\"textarea\", {\n value: diffResult,\n readOnly: true,\n placeholder: \"Comparison result 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: 237,\n columnNumber: 11\n }, this), diffResult && /*#__PURE__*/_jsxDEV(CopyButton, {\n text: diffResult\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 243,\n columnNumber: 26\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 236,\n columnNumber: 9\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 232,\n columnNumber: 7\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"bg-gray-50 dark:bg-gray-800 rounded-md p-4 mt-6\",\n children: [/*#__PURE__*/_jsxDEV(\"h4\", {\n className: \"text-gray-800 dark:text-gray-200 font-medium mb-3\",\n children: \"Diff Legend\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 249,\n columnNumber: 9\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"grid grid-cols-1 md:grid-cols-3 gap-4 text-sm\",\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n className: \"flex items-center space-x-2\",\n children: [/*#__PURE__*/_jsxDEV(\"span\", {\n className: \"font-mono text-red-600\",\n children: \"- line\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 252,\n columnNumber: 13\n }, this), /*#__PURE__*/_jsxDEV(\"span\", {\n className: \"text-gray-600 dark:text-gray-400\",\n children: \"Removed from Text A\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 253,\n columnNumber: 13\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 251,\n columnNumber: 11\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"flex items-center space-x-2\",\n children: [/*#__PURE__*/_jsxDEV(\"span\", {\n className: \"font-mono text-green-600\",\n children: \"+ line\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 256,\n columnNumber: 13\n }, this), /*#__PURE__*/_jsxDEV(\"span\", {\n className: \"text-gray-600 dark:text-gray-400\",\n children: \"Added in Text B\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 257,\n columnNumber: 13\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 255,\n columnNumber: 11\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"flex items-center space-x-2\",\n children: [/*#__PURE__*/_jsxDEV(\"span\", {\n className: \"font-mono text-gray-600\",\n children: \" line\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 260,\n columnNumber: 13\n }, this), /*#__PURE__*/_jsxDEV(\"span\", {\n className: \"text-gray-600 dark:text-gray-400\",\n children: \"Unchanged\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 261,\n columnNumber: 13\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 259,\n columnNumber: 11\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 250,\n columnNumber: 9\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 248,\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: 268,\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 Upload files or paste text directly to compare\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 270,\n columnNumber: 11\n }, this), /*#__PURE__*/_jsxDEV(\"li\", {\n children: \"\\u2022 Use \\\"Unified Diff\\\" for traditional diff format with +/- indicators\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 271,\n columnNumber: 11\n }, this), /*#__PURE__*/_jsxDEV(\"li\", {\n children: \"\\u2022 Use \\\"Side by Side\\\" for parallel comparison view\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 272,\n columnNumber: 11\n }, this), /*#__PURE__*/_jsxDEV(\"li\", {\n children: \"\\u2022 Perfect for comparing code versions, configurations, or any text files\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 273,\n columnNumber: 11\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 269,\n columnNumber: 9\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 267,\n columnNumber: 7\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 129,\n columnNumber: 5\n }, this);\n};\n_s(DiffTool, \"RH0+Ih+U8wQyRwHX2FoTX6bOXaE=\");\n_c = DiffTool;\nexport default DiffTool;\nvar _c;\n$RefreshReg$(_c, \"DiffTool\");","map":{"version":3,"names":["React","useState","GitCompare","Upload","ToolLayout","CopyButton","jsxDEV","_jsxDEV","DiffTool","_s","leftText","setLeftText","rightText","setRightText","diffResult","setDiffResult","diffMode","setDiffMode","computeDiff","leftLines","split","rightLines","maxLines","Math","max","length","result","diffCount","i","leftLine","rightLine","padEnd","repeat","leftDisplay","handleFileUpload","side","event","file","target","files","reader","FileReader","onload","e","readAsText","clearAll","loadSample","swapTexts","temp","title","description","icon","children","className","onClick","fileName","_jsxFileName","lineNumber","columnNumber","type","onChange","accept","value","placeholder","readOnly","text","_c","$RefreshReg$"],"sources":["/Users/dwindown/CascadeProjects/developer-tools/src/pages/DiffTool.js"],"sourcesContent":["import React, { useState } from 'react';\nimport { GitCompare, Upload } from 'lucide-react';\nimport ToolLayout from '../components/ToolLayout';\nimport CopyButton from '../components/CopyButton';\n\nconst DiffTool = () => {\n const [leftText, setLeftText] = useState('');\n const [rightText, setRightText] = useState('');\n const [diffResult, setDiffResult] = useState('');\n const [diffMode, setDiffMode] = useState('unified'); // 'unified' or 'side-by-side'\n\n // Simple diff implementation\n const computeDiff = () => {\n const leftLines = leftText.split('\\n');\n const rightLines = rightText.split('\\n');\n \n const maxLines = Math.max(leftLines.length, rightLines.length);\n let result = '';\n let diffCount = 0;\n \n if (diffMode === 'unified') {\n result += `--- Text A\\n+++ Text B\\n`;\n \n for (let i = 0; i < maxLines; i++) {\n const leftLine = leftLines[i] || '';\n const rightLine = rightLines[i] || '';\n \n if (leftLine !== rightLine) {\n diffCount++;\n if (leftLine && !rightLine) {\n result += `- ${leftLine}\\n`;\n } else if (!leftLine && rightLine) {\n result += `+ ${rightLine}\\n`;\n } else {\n result += `- ${leftLine}\\n+ ${rightLine}\\n`;\n }\n } else {\n result += ` ${leftLine}\\n`;\n }\n }\n } else {\n // Side by side format\n result += `${'Text A'.padEnd(50)} | Text B\\n`;\n result += `${'-'.repeat(50)} | ${'-'.repeat(50)}\\n`;\n \n for (let i = 0; i < maxLines; i++) {\n const leftLine = leftLines[i] || '';\n const rightLine = rightLines[i] || '';\n \n if (leftLine !== rightLine) {\n diffCount++;\n const leftDisplay = leftLine.padEnd(50);\n result += `${leftDisplay} | ${rightLine}\\n`;\n } else {\n const leftDisplay = leftLine.padEnd(50);\n result += `${leftDisplay} | ${rightLine}\\n`;\n }\n }\n }\n \n if (diffCount === 0) {\n result = '✅ No differences found - texts are identical!';\n } else {\n result = `Found ${diffCount} difference(s):\\n\\n${result}`;\n }\n \n setDiffResult(result);\n };\n\n const handleFileUpload = (side, event) => {\n const file = event.target.files[0];\n if (file) {\n const reader = new FileReader();\n reader.onload = (e) => {\n if (side === 'left') {\n setLeftText(e.target.result);\n } else {\n setRightText(e.target.result);\n }\n };\n reader.readAsText(file);\n }\n };\n\n const clearAll = () => {\n setLeftText('');\n setRightText('');\n setDiffResult('');\n };\n\n const loadSample = () => {\n setLeftText(`function calculateTotal(items) {\n let total = 0;\n for (let i = 0; i < items.length; i++) {\n total += items[i].price;\n }\n return total;\n}\n\nconst user = {\n name: \"John Doe\",\n age: 30,\n email: \"john@example.com\"\n};`);\n\n setRightText(`function calculateTotal(items) {\n let total = 0;\n for (const item of items) {\n total += item.price * item.quantity;\n }\n return total;\n}\n\nconst user = {\n name: \"John Smith\",\n age: 30,\n email: \"john.smith@example.com\",\n active: true\n};`);\n };\n\n const swapTexts = () => {\n const temp = leftText;\n setLeftText(rightText);\n setRightText(temp);\n };\n\n return (\n <ToolLayout\n title=\"Text Diff Checker\"\n description=\"Compare two texts and highlight differences line by line\"\n icon={GitCompare}\n >\n {/* Mode Toggle */}\n <div className=\"flex bg-gray-100 dark:bg-gray-800 rounded-lg p-1 mb-6 w-fit\">\n <button\n onClick={() => setDiffMode('unified')}\n className={`px-4 py-2 rounded-md font-medium transition-colors ${\n diffMode === 'unified'\n ? 'bg-white dark:bg-gray-700 text-primary-600 shadow-sm'\n : 'text-gray-600 dark:text-gray-400'\n }`}\n >\n Unified Diff\n </button>\n <button\n onClick={() => setDiffMode('side-by-side')}\n className={`px-4 py-2 rounded-md font-medium transition-colors ${\n diffMode === 'side-by-side'\n ? 'bg-white dark:bg-gray-700 text-primary-600 shadow-sm'\n : 'text-gray-600 dark:text-gray-400'\n }`}\n >\n Side by Side\n </button>\n </div>\n\n {/* Controls */}\n <div className=\"flex flex-wrap gap-3 mb-6\">\n <button onClick={computeDiff} className=\"tool-button\">\n Compare Texts\n </button>\n <button onClick={swapTexts} className=\"tool-button-secondary\">\n Swap A ↔ B\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 Texts Grid */}\n <div className=\"grid grid-cols-1 lg:grid-cols-2 gap-6 mb-6\">\n {/* Left Text */}\n <div className=\"space-y-2\">\n <div className=\"flex items-center justify-between\">\n <label className=\"block text-sm font-medium text-gray-700 dark:text-gray-300\">\n Text A (Original)\n </label>\n <label className=\"tool-button-secondary cursor-pointer flex items-center space-x-2 text-xs px-2 py-1\">\n <Upload className=\"h-3 w-3\" />\n <span>Upload</span>\n <input\n type=\"file\"\n onChange={(e) => handleFileUpload('left', e)}\n className=\"hidden\"\n accept=\".txt,.js,.json,.xml,.csv,.html,.css,.md\"\n />\n </label>\n </div>\n <div className=\"relative\">\n <textarea\n value={leftText}\n onChange={(e) => setLeftText(e.target.value)}\n placeholder=\"Paste your first text here...\"\n className=\"tool-input h-64\"\n />\n </div>\n </div>\n\n {/* Right Text */}\n <div className=\"space-y-2\">\n <div className=\"flex items-center justify-between\">\n <label className=\"block text-sm font-medium text-gray-700 dark:text-gray-300\">\n Text B (Modified)\n </label>\n <label className=\"tool-button-secondary cursor-pointer flex items-center space-x-2 text-xs px-2 py-1\">\n <Upload className=\"h-3 w-3\" />\n <span>Upload</span>\n <input\n type=\"file\"\n onChange={(e) => handleFileUpload('right', e)}\n className=\"hidden\"\n accept=\".txt,.js,.json,.xml,.csv,.html,.css,.md\"\n />\n </label>\n </div>\n <div className=\"relative\">\n <textarea\n value={rightText}\n onChange={(e) => setRightText(e.target.value)}\n placeholder=\"Paste your second text here...\"\n className=\"tool-input h-64\"\n />\n </div>\n </div>\n </div>\n\n {/* Diff Result */}\n <div className=\"space-y-2\">\n <label className=\"block text-sm font-medium text-gray-700 dark:text-gray-300\">\n Comparison Result\n </label>\n <div className=\"relative\">\n <textarea\n value={diffResult}\n readOnly\n placeholder=\"Comparison result will appear here...\"\n className=\"tool-input h-96 bg-gray-50 dark:bg-gray-800\"\n />\n {diffResult && <CopyButton text={diffResult} />}\n </div>\n </div>\n\n {/* Legend */}\n <div className=\"bg-gray-50 dark:bg-gray-800 rounded-md p-4 mt-6\">\n <h4 className=\"text-gray-800 dark:text-gray-200 font-medium mb-3\">Diff Legend</h4>\n <div className=\"grid grid-cols-1 md:grid-cols-3 gap-4 text-sm\">\n <div className=\"flex items-center space-x-2\">\n <span className=\"font-mono text-red-600\">- line</span>\n <span className=\"text-gray-600 dark:text-gray-400\">Removed from Text A</span>\n </div>\n <div className=\"flex items-center space-x-2\">\n <span className=\"font-mono text-green-600\">+ line</span>\n <span className=\"text-gray-600 dark:text-gray-400\">Added in Text B</span>\n </div>\n <div className=\"flex items-center space-x-2\">\n <span className=\"font-mono text-gray-600\"> line</span>\n <span className=\"text-gray-600 dark:text-gray-400\">Unchanged</span>\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>• Upload files or paste text directly to compare</li>\n <li>• Use \"Unified Diff\" for traditional diff format with +/- indicators</li>\n <li>• Use \"Side by Side\" for parallel comparison view</li>\n <li>• Perfect for comparing code versions, configurations, or any text files</li>\n </ul>\n </div>\n </ToolLayout>\n );\n};\n\nexport default DiffTool;\n"],"mappings":";;AAAA,OAAOA,KAAK,IAAIC,QAAQ,QAAQ,OAAO;AACvC,SAASC,UAAU,EAAEC,MAAM,QAAQ,cAAc;AACjD,OAAOC,UAAU,MAAM,0BAA0B;AACjD,OAAOC,UAAU,MAAM,0BAA0B;AAAC,SAAAC,MAAA,IAAAC,OAAA;AAElD,MAAMC,QAAQ,GAAGA,CAAA,KAAM;EAAAC,EAAA;EACrB,MAAM,CAACC,QAAQ,EAAEC,WAAW,CAAC,GAAGV,QAAQ,CAAC,EAAE,CAAC;EAC5C,MAAM,CAACW,SAAS,EAAEC,YAAY,CAAC,GAAGZ,QAAQ,CAAC,EAAE,CAAC;EAC9C,MAAM,CAACa,UAAU,EAAEC,aAAa,CAAC,GAAGd,QAAQ,CAAC,EAAE,CAAC;EAChD,MAAM,CAACe,QAAQ,EAAEC,WAAW,CAAC,GAAGhB,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;;EAErD;EACA,MAAMiB,WAAW,GAAGA,CAAA,KAAM;IACxB,MAAMC,SAAS,GAAGT,QAAQ,CAACU,KAAK,CAAC,IAAI,CAAC;IACtC,MAAMC,UAAU,GAAGT,SAAS,CAACQ,KAAK,CAAC,IAAI,CAAC;IAExC,MAAME,QAAQ,GAAGC,IAAI,CAACC,GAAG,CAACL,SAAS,CAACM,MAAM,EAAEJ,UAAU,CAACI,MAAM,CAAC;IAC9D,IAAIC,MAAM,GAAG,EAAE;IACf,IAAIC,SAAS,GAAG,CAAC;IAEjB,IAAIX,QAAQ,KAAK,SAAS,EAAE;MAC1BU,MAAM,IAAI,0BAA0B;MAEpC,KAAK,IAAIE,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGN,QAAQ,EAAEM,CAAC,EAAE,EAAE;QACjC,MAAMC,QAAQ,GAAGV,SAAS,CAACS,CAAC,CAAC,IAAI,EAAE;QACnC,MAAME,SAAS,GAAGT,UAAU,CAACO,CAAC,CAAC,IAAI,EAAE;QAErC,IAAIC,QAAQ,KAAKC,SAAS,EAAE;UAC1BH,SAAS,EAAE;UACX,IAAIE,QAAQ,IAAI,CAACC,SAAS,EAAE;YAC1BJ,MAAM,IAAI,KAAKG,QAAQ,IAAI;UAC7B,CAAC,MAAM,IAAI,CAACA,QAAQ,IAAIC,SAAS,EAAE;YACjCJ,MAAM,IAAI,KAAKI,SAAS,IAAI;UAC9B,CAAC,MAAM;YACLJ,MAAM,IAAI,KAAKG,QAAQ,OAAOC,SAAS,IAAI;UAC7C;QACF,CAAC,MAAM;UACLJ,MAAM,IAAI,KAAKG,QAAQ,IAAI;QAC7B;MACF;IACF,CAAC,MAAM;MACL;MACAH,MAAM,IAAI,GAAG,QAAQ,CAACK,MAAM,CAAC,EAAE,CAAC,aAAa;MAC7CL,MAAM,IAAI,GAAG,GAAG,CAACM,MAAM,CAAC,EAAE,CAAC,MAAM,GAAG,CAACA,MAAM,CAAC,EAAE,CAAC,IAAI;MAEnD,KAAK,IAAIJ,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGN,QAAQ,EAAEM,CAAC,EAAE,EAAE;QACjC,MAAMC,QAAQ,GAAGV,SAAS,CAACS,CAAC,CAAC,IAAI,EAAE;QACnC,MAAME,SAAS,GAAGT,UAAU,CAACO,CAAC,CAAC,IAAI,EAAE;QAErC,IAAIC,QAAQ,KAAKC,SAAS,EAAE;UAC1BH,SAAS,EAAE;UACX,MAAMM,WAAW,GAAGJ,QAAQ,CAACE,MAAM,CAAC,EAAE,CAAC;UACvCL,MAAM,IAAI,GAAGO,WAAW,MAAMH,SAAS,IAAI;QAC7C,CAAC,MAAM;UACL,MAAMG,WAAW,GAAGJ,QAAQ,CAACE,MAAM,CAAC,EAAE,CAAC;UACvCL,MAAM,IAAI,GAAGO,WAAW,MAAMH,SAAS,IAAI;QAC7C;MACF;IACF;IAEA,IAAIH,SAAS,KAAK,CAAC,EAAE;MACnBD,MAAM,GAAG,+CAA+C;IAC1D,CAAC,MAAM;MACLA,MAAM,GAAG,SAASC,SAAS,sBAAsBD,MAAM,EAAE;IAC3D;IAEAX,aAAa,CAACW,MAAM,CAAC;EACvB,CAAC;EAED,MAAMQ,gBAAgB,GAAGA,CAACC,IAAI,EAAEC,KAAK,KAAK;IACxC,MAAMC,IAAI,GAAGD,KAAK,CAACE,MAAM,CAACC,KAAK,CAAC,CAAC,CAAC;IAClC,IAAIF,IAAI,EAAE;MACR,MAAMG,MAAM,GAAG,IAAIC,UAAU,CAAC,CAAC;MAC/BD,MAAM,CAACE,MAAM,GAAIC,CAAC,IAAK;QACrB,IAAIR,IAAI,KAAK,MAAM,EAAE;UACnBxB,WAAW,CAACgC,CAAC,CAACL,MAAM,CAACZ,MAAM,CAAC;QAC9B,CAAC,MAAM;UACLb,YAAY,CAAC8B,CAAC,CAACL,MAAM,CAACZ,MAAM,CAAC;QAC/B;MACF,CAAC;MACDc,MAAM,CAACI,UAAU,CAACP,IAAI,CAAC;IACzB;EACF,CAAC;EAED,MAAMQ,QAAQ,GAAGA,CAAA,KAAM;IACrBlC,WAAW,CAAC,EAAE,CAAC;IACfE,YAAY,CAAC,EAAE,CAAC;IAChBE,aAAa,CAAC,EAAE,CAAC;EACnB,CAAC;EAED,MAAM+B,UAAU,GAAGA,CAAA,KAAM;IACvBnC,WAAW,CAAC;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG,CAAC;IAEAE,YAAY,CAAC;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG,CAAC;EACF,CAAC;EAED,MAAMkC,SAAS,GAAGA,CAAA,KAAM;IACtB,MAAMC,IAAI,GAAGtC,QAAQ;IACrBC,WAAW,CAACC,SAAS,CAAC;IACtBC,YAAY,CAACmC,IAAI,CAAC;EACpB,CAAC;EAED,oBACEzC,OAAA,CAACH,UAAU;IACT6C,KAAK,EAAC,mBAAmB;IACzBC,WAAW,EAAC,0DAA0D;IACtEC,IAAI,EAAEjD,UAAW;IAAAkD,QAAA,gBAGjB7C,OAAA;MAAK8C,SAAS,EAAC,6DAA6D;MAAAD,QAAA,gBAC1E7C,OAAA;QACE+C,OAAO,EAAEA,CAAA,KAAMrC,WAAW,CAAC,SAAS,CAAE;QACtCoC,SAAS,EAAE,sDACTrC,QAAQ,KAAK,SAAS,GAClB,sDAAsD,GACtD,kCAAkC,EACrC;QAAAoC,QAAA,EACJ;MAED;QAAAG,QAAA,EAAAC,YAAA;QAAAC,UAAA;QAAAC,YAAA;MAAA,OAAQ,CAAC,eACTnD,OAAA;QACE+C,OAAO,EAAEA,CAAA,KAAMrC,WAAW,CAAC,cAAc,CAAE;QAC3CoC,SAAS,EAAE,sDACTrC,QAAQ,KAAK,cAAc,GACvB,sDAAsD,GACtD,kCAAkC,EACrC;QAAAoC,QAAA,EACJ;MAED;QAAAG,QAAA,EAAAC,YAAA;QAAAC,UAAA;QAAAC,YAAA;MAAA,OAAQ,CAAC;IAAA;MAAAH,QAAA,EAAAC,YAAA;MAAAC,UAAA;MAAAC,YAAA;IAAA,OACN,CAAC,eAGNnD,OAAA;MAAK8C,SAAS,EAAC,2BAA2B;MAAAD,QAAA,gBACxC7C,OAAA;QAAQ+C,OAAO,EAAEpC,WAAY;QAACmC,SAAS,EAAC,aAAa;QAAAD,QAAA,EAAC;MAEtD;QAAAG,QAAA,EAAAC,YAAA;QAAAC,UAAA;QAAAC,YAAA;MAAA,OAAQ,CAAC,eACTnD,OAAA;QAAQ+C,OAAO,EAAEP,SAAU;QAACM,SAAS,EAAC,uBAAuB;QAAAD,QAAA,EAAC;MAE9D;QAAAG,QAAA,EAAAC,YAAA;QAAAC,UAAA;QAAAC,YAAA;MAAA,OAAQ,CAAC,eACTnD,OAAA;QAAQ+C,OAAO,EAAER,UAAW;QAACO,SAAS,EAAC,uBAAuB;QAAAD,QAAA,EAAC;MAE/D;QAAAG,QAAA,EAAAC,YAAA;QAAAC,UAAA;QAAAC,YAAA;MAAA,OAAQ,CAAC,eACTnD,OAAA;QAAQ+C,OAAO,EAAET,QAAS;QAACQ,SAAS,EAAC,uBAAuB;QAAAD,QAAA,EAAC;MAE7D;QAAAG,QAAA,EAAAC,YAAA;QAAAC,UAAA;QAAAC,YAAA;MAAA,OAAQ,CAAC;IAAA;MAAAH,QAAA,EAAAC,YAAA;MAAAC,UAAA;MAAAC,YAAA;IAAA,OACN,CAAC,eAGNnD,OAAA;MAAK8C,SAAS,EAAC,4CAA4C;MAAAD,QAAA,gBAEzD7C,OAAA;QAAK8C,SAAS,EAAC,WAAW;QAAAD,QAAA,gBACxB7C,OAAA;UAAK8C,SAAS,EAAC,mCAAmC;UAAAD,QAAA,gBAChD7C,OAAA;YAAO8C,SAAS,EAAC,4DAA4D;YAAAD,QAAA,EAAC;UAE9E;YAAAG,QAAA,EAAAC,YAAA;YAAAC,UAAA;YAAAC,YAAA;UAAA,OAAO,CAAC,eACRnD,OAAA;YAAO8C,SAAS,EAAC,oFAAoF;YAAAD,QAAA,gBACnG7C,OAAA,CAACJ,MAAM;cAACkD,SAAS,EAAC;YAAS;cAAAE,QAAA,EAAAC,YAAA;cAAAC,UAAA;cAAAC,YAAA;YAAA,OAAE,CAAC,eAC9BnD,OAAA;cAAA6C,QAAA,EAAM;YAAM;cAAAG,QAAA,EAAAC,YAAA;cAAAC,UAAA;cAAAC,YAAA;YAAA,OAAM,CAAC,eACnBnD,OAAA;cACEoD,IAAI,EAAC,MAAM;cACXC,QAAQ,EAAGjB,CAAC,IAAKT,gBAAgB,CAAC,MAAM,EAAES,CAAC,CAAE;cAC7CU,SAAS,EAAC,QAAQ;cAClBQ,MAAM,EAAC;YAAyC;cAAAN,QAAA,EAAAC,YAAA;cAAAC,UAAA;cAAAC,YAAA;YAAA,OACjD,CAAC;UAAA;YAAAH,QAAA,EAAAC,YAAA;YAAAC,UAAA;YAAAC,YAAA;UAAA,OACG,CAAC;QAAA;UAAAH,QAAA,EAAAC,YAAA;UAAAC,UAAA;UAAAC,YAAA;QAAA,OACL,CAAC,eACNnD,OAAA;UAAK8C,SAAS,EAAC,UAAU;UAAAD,QAAA,eACvB7C,OAAA;YACEuD,KAAK,EAAEpD,QAAS;YAChBkD,QAAQ,EAAGjB,CAAC,IAAKhC,WAAW,CAACgC,CAAC,CAACL,MAAM,CAACwB,KAAK,CAAE;YAC7CC,WAAW,EAAC,+BAA+B;YAC3CV,SAAS,EAAC;UAAiB;YAAAE,QAAA,EAAAC,YAAA;YAAAC,UAAA;YAAAC,YAAA;UAAA,OAC5B;QAAC;UAAAH,QAAA,EAAAC,YAAA;UAAAC,UAAA;UAAAC,YAAA;QAAA,OACC,CAAC;MAAA;QAAAH,QAAA,EAAAC,YAAA;QAAAC,UAAA;QAAAC,YAAA;MAAA,OACH,CAAC,eAGNnD,OAAA;QAAK8C,SAAS,EAAC,WAAW;QAAAD,QAAA,gBACxB7C,OAAA;UAAK8C,SAAS,EAAC,mCAAmC;UAAAD,QAAA,gBAChD7C,OAAA;YAAO8C,SAAS,EAAC,4DAA4D;YAAAD,QAAA,EAAC;UAE9E;YAAAG,QAAA,EAAAC,YAAA;YAAAC,UAAA;YAAAC,YAAA;UAAA,OAAO,CAAC,eACRnD,OAAA;YAAO8C,SAAS,EAAC,oFAAoF;YAAAD,QAAA,gBACnG7C,OAAA,CAACJ,MAAM;cAACkD,SAAS,EAAC;YAAS;cAAAE,QAAA,EAAAC,YAAA;cAAAC,UAAA;cAAAC,YAAA;YAAA,OAAE,CAAC,eAC9BnD,OAAA;cAAA6C,QAAA,EAAM;YAAM;cAAAG,QAAA,EAAAC,YAAA;cAAAC,UAAA;cAAAC,YAAA;YAAA,OAAM,CAAC,eACnBnD,OAAA;cACEoD,IAAI,EAAC,MAAM;cACXC,QAAQ,EAAGjB,CAAC,IAAKT,gBAAgB,CAAC,OAAO,EAAES,CAAC,CAAE;cAC9CU,SAAS,EAAC,QAAQ;cAClBQ,MAAM,EAAC;YAAyC;cAAAN,QAAA,EAAAC,YAAA;cAAAC,UAAA;cAAAC,YAAA;YAAA,OACjD,CAAC;UAAA;YAAAH,QAAA,EAAAC,YAAA;YAAAC,UAAA;YAAAC,YAAA;UAAA,OACG,CAAC;QAAA;UAAAH,QAAA,EAAAC,YAAA;UAAAC,UAAA;UAAAC,YAAA;QAAA,OACL,CAAC,eACNnD,OAAA;UAAK8C,SAAS,EAAC,UAAU;UAAAD,QAAA,eACvB7C,OAAA;YACEuD,KAAK,EAAElD,SAAU;YACjBgD,QAAQ,EAAGjB,CAAC,IAAK9B,YAAY,CAAC8B,CAAC,CAACL,MAAM,CAACwB,KAAK,CAAE;YAC9CC,WAAW,EAAC,gCAAgC;YAC5CV,SAAS,EAAC;UAAiB;YAAAE,QAAA,EAAAC,YAAA;YAAAC,UAAA;YAAAC,YAAA;UAAA,OAC5B;QAAC;UAAAH,QAAA,EAAAC,YAAA;UAAAC,UAAA;UAAAC,YAAA;QAAA,OACC,CAAC;MAAA;QAAAH,QAAA,EAAAC,YAAA;QAAAC,UAAA;QAAAC,YAAA;MAAA,OACH,CAAC;IAAA;MAAAH,QAAA,EAAAC,YAAA;MAAAC,UAAA;MAAAC,YAAA;IAAA,OACH,CAAC,eAGNnD,OAAA;MAAK8C,SAAS,EAAC,WAAW;MAAAD,QAAA,gBACxB7C,OAAA;QAAO8C,SAAS,EAAC,4DAA4D;QAAAD,QAAA,EAAC;MAE9E;QAAAG,QAAA,EAAAC,YAAA;QAAAC,UAAA;QAAAC,YAAA;MAAA,OAAO,CAAC,eACRnD,OAAA;QAAK8C,SAAS,EAAC,UAAU;QAAAD,QAAA,gBACvB7C,OAAA;UACEuD,KAAK,EAAEhD,UAAW;UAClBkD,QAAQ;UACRD,WAAW,EAAC,uCAAuC;UACnDV,SAAS,EAAC;QAA6C;UAAAE,QAAA,EAAAC,YAAA;UAAAC,UAAA;UAAAC,YAAA;QAAA,OACxD,CAAC,EACD5C,UAAU,iBAAIP,OAAA,CAACF,UAAU;UAAC4D,IAAI,EAAEnD;QAAW;UAAAyC,QAAA,EAAAC,YAAA;UAAAC,UAAA;UAAAC,YAAA;QAAA,OAAE,CAAC;MAAA;QAAAH,QAAA,EAAAC,YAAA;QAAAC,UAAA;QAAAC,YAAA;MAAA,OAC5C,CAAC;IAAA;MAAAH,QAAA,EAAAC,YAAA;MAAAC,UAAA;MAAAC,YAAA;IAAA,OACH,CAAC,eAGNnD,OAAA;MAAK8C,SAAS,EAAC,iDAAiD;MAAAD,QAAA,gBAC9D7C,OAAA;QAAI8C,SAAS,EAAC,mDAAmD;QAAAD,QAAA,EAAC;MAAW;QAAAG,QAAA,EAAAC,YAAA;QAAAC,UAAA;QAAAC,YAAA;MAAA,OAAI,CAAC,eAClFnD,OAAA;QAAK8C,SAAS,EAAC,+CAA+C;QAAAD,QAAA,gBAC5D7C,OAAA;UAAK8C,SAAS,EAAC,6BAA6B;UAAAD,QAAA,gBAC1C7C,OAAA;YAAM8C,SAAS,EAAC,wBAAwB;YAAAD,QAAA,EAAC;UAAM;YAAAG,QAAA,EAAAC,YAAA;YAAAC,UAAA;YAAAC,YAAA;UAAA,OAAM,CAAC,eACtDnD,OAAA;YAAM8C,SAAS,EAAC,kCAAkC;YAAAD,QAAA,EAAC;UAAmB;YAAAG,QAAA,EAAAC,YAAA;YAAAC,UAAA;YAAAC,YAAA;UAAA,OAAM,CAAC;QAAA;UAAAH,QAAA,EAAAC,YAAA;UAAAC,UAAA;UAAAC,YAAA;QAAA,OAC1E,CAAC,eACNnD,OAAA;UAAK8C,SAAS,EAAC,6BAA6B;UAAAD,QAAA,gBAC1C7C,OAAA;YAAM8C,SAAS,EAAC,0BAA0B;YAAAD,QAAA,EAAC;UAAM;YAAAG,QAAA,EAAAC,YAAA;YAAAC,UAAA;YAAAC,YAAA;UAAA,OAAM,CAAC,eACxDnD,OAAA;YAAM8C,SAAS,EAAC,kCAAkC;YAAAD,QAAA,EAAC;UAAe;YAAAG,QAAA,EAAAC,YAAA;YAAAC,UAAA;YAAAC,YAAA;UAAA,OAAM,CAAC;QAAA;UAAAH,QAAA,EAAAC,YAAA;UAAAC,UAAA;UAAAC,YAAA;QAAA,OACtE,CAAC,eACNnD,OAAA;UAAK8C,SAAS,EAAC,6BAA6B;UAAAD,QAAA,gBAC1C7C,OAAA;YAAM8C,SAAS,EAAC,yBAAyB;YAAAD,QAAA,EAAC;UAAM;YAAAG,QAAA,EAAAC,YAAA;YAAAC,UAAA;YAAAC,YAAA;UAAA,OAAM,CAAC,eACvDnD,OAAA;YAAM8C,SAAS,EAAC,kCAAkC;YAAAD,QAAA,EAAC;UAAS;YAAAG,QAAA,EAAAC,YAAA;YAAAC,UAAA;YAAAC,YAAA;UAAA,OAAM,CAAC;QAAA;UAAAH,QAAA,EAAAC,YAAA;UAAAC,UAAA;UAAAC,YAAA;QAAA,OAChE,CAAC;MAAA;QAAAH,QAAA,EAAAC,YAAA;QAAAC,UAAA;QAAAC,YAAA;MAAA,OACH,CAAC;IAAA;MAAAH,QAAA,EAAAC,YAAA;MAAAC,UAAA;MAAAC,YAAA;IAAA,OACH,CAAC,eAGNnD,OAAA;MAAK8C,SAAS,EAAC,gGAAgG;MAAAD,QAAA,gBAC7G7C,OAAA;QAAI8C,SAAS,EAAC,mDAAmD;QAAAD,QAAA,EAAC;MAAU;QAAAG,QAAA,EAAAC,YAAA;QAAAC,UAAA;QAAAC,YAAA;MAAA,OAAI,CAAC,eACjFnD,OAAA;QAAI8C,SAAS,EAAC,oDAAoD;QAAAD,QAAA,gBAChE7C,OAAA;UAAA6C,QAAA,EAAI;QAAgD;UAAAG,QAAA,EAAAC,YAAA;UAAAC,UAAA;UAAAC,YAAA;QAAA,OAAI,CAAC,eACzDnD,OAAA;UAAA6C,QAAA,EAAI;QAAoE;UAAAG,QAAA,EAAAC,YAAA;UAAAC,UAAA;UAAAC,YAAA;QAAA,OAAI,CAAC,eAC7EnD,OAAA;UAAA6C,QAAA,EAAI;QAAiD;UAAAG,QAAA,EAAAC,YAAA;UAAAC,UAAA;UAAAC,YAAA;QAAA,OAAI,CAAC,eAC1DnD,OAAA;UAAA6C,QAAA,EAAI;QAAwE;UAAAG,QAAA,EAAAC,YAAA;UAAAC,UAAA;UAAAC,YAAA;QAAA,OAAI,CAAC;MAAA;QAAAH,QAAA,EAAAC,YAAA;QAAAC,UAAA;QAAAC,YAAA;MAAA,OAC/E,CAAC;IAAA;MAAAH,QAAA,EAAAC,YAAA;MAAAC,UAAA;MAAAC,YAAA;IAAA,OACF,CAAC;EAAA;IAAAH,QAAA,EAAAC,YAAA;IAAAC,UAAA;IAAAC,YAAA;EAAA,OACI,CAAC;AAEjB,CAAC;AAACjD,EAAA,CAhRID,QAAQ;AAAA0D,EAAA,GAAR1D,QAAQ;AAkRd,eAAeA,QAAQ;AAAC,IAAA0D,EAAA;AAAAC,YAAA,CAAAD,EAAA","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}