Files
dewedev/node_modules/.cache/babel-loader/0549a1b6caa0976072b0d5cb7656cd0bf83849451e7fc1153894d7fcd491c116.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
34 KiB
JSON

{"ast":null,"code":"var _jsxFileName = \"/Users/dwindown/CascadeProjects/developer-tools/src/components/Layout.js\",\n _s = $RefreshSig$();\nimport React, { useState, useEffect, useRef } from 'react';\nimport { Link, useLocation } from 'react-router-dom';\nimport { Code2, Home, ChevronDown, Menu, X, Database, FileText, Link as LinkIcon, Hash, FileSpreadsheet, Wand2, GitCompare } from 'lucide-react';\nimport ThemeToggle from './ThemeToggle';\nimport { jsxDEV as _jsxDEV } from \"react/jsx-dev-runtime\";\nconst Layout = ({\n children\n}) => {\n _s();\n const location = useLocation();\n const [isDropdownOpen, setIsDropdownOpen] = useState(false);\n const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false);\n const dropdownRef = useRef(null);\n const isActive = path => {\n return location.pathname === path;\n };\n\n // Close dropdown when clicking outside\n useEffect(() => {\n const handleClickOutside = event => {\n if (dropdownRef.current && !dropdownRef.current.contains(event.target)) {\n setIsDropdownOpen(false);\n }\n };\n document.addEventListener('mousedown', handleClickOutside);\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n };\n }, []);\n\n // Close mobile menu when route changes\n useEffect(() => {\n setIsMobileMenuOpen(false);\n setIsDropdownOpen(false);\n }, [location.pathname]);\n const tools = [{\n path: '/json',\n name: 'JSON Tool',\n icon: FileText,\n description: 'Format & validate JSON'\n }, {\n path: '/serialize',\n name: 'Serialize Tool',\n icon: Database,\n description: 'PHP serialize/unserialize'\n }, {\n path: '/url',\n name: 'URL Tool',\n icon: LinkIcon,\n description: 'URL encode/decode'\n }, {\n path: '/base64',\n name: 'Base64 Tool',\n icon: Hash,\n description: 'Base64 encode/decode'\n }, {\n path: '/csv-json',\n name: 'CSV/JSON Tool',\n icon: FileSpreadsheet,\n description: 'Convert CSV ↔ JSON'\n }, {\n path: '/beautifier',\n name: 'Beautifier Tool',\n icon: Wand2,\n description: 'Beautify/minify code'\n }, {\n path: '/diff',\n name: 'Diff Tool',\n icon: GitCompare,\n description: 'Compare text differences'\n }];\n return /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"min-h-screen bg-gray-50 dark:bg-gray-900\",\n children: [/*#__PURE__*/_jsxDEV(\"header\", {\n className: \"bg-white dark:bg-gray-800 shadow-sm border-b border-gray-200 dark:border-gray-700\",\n children: /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8\",\n children: /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"flex justify-between items-center h-16\",\n children: [/*#__PURE__*/_jsxDEV(Link, {\n to: \"/\",\n className: \"flex items-center space-x-2\",\n children: [/*#__PURE__*/_jsxDEV(Code2, {\n className: \"h-8 w-8 text-primary-600\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 53,\n columnNumber: 15\n }, this), /*#__PURE__*/_jsxDEV(\"span\", {\n className: \"text-xl font-bold text-gray-900 dark:text-white\",\n children: \"DevTools\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 54,\n columnNumber: 15\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 52,\n columnNumber: 13\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"flex items-center space-x-4\",\n children: [/*#__PURE__*/_jsxDEV(\"nav\", {\n className: \"hidden md:flex items-center space-x-6\",\n children: [/*#__PURE__*/_jsxDEV(Link, {\n to: \"/\",\n className: `flex items-center space-x-1 px-3 py-2 rounded-md text-sm font-medium transition-colors ${isActive('/') ? 'bg-primary-100 text-primary-700 dark:bg-primary-900 dark:text-primary-300' : 'text-gray-600 hover:text-gray-900 dark:text-gray-300 dark:hover:text-white'}`,\n children: [/*#__PURE__*/_jsxDEV(Home, {\n className: \"h-4 w-4\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 70,\n columnNumber: 19\n }, this), /*#__PURE__*/_jsxDEV(\"span\", {\n children: \"Home\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 71,\n columnNumber: 19\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 62,\n columnNumber: 17\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"relative\",\n children: [/*#__PURE__*/_jsxDEV(\"button\", {\n onClick: () => setIsDropdownOpen(!isDropdownOpen),\n className: \"flex items-center space-x-1 px-3 py-2 rounded-md text-sm font-medium text-gray-600 hover:text-gray-900 dark:text-gray-300 dark:hover:text-white transition-colors\",\n children: [/*#__PURE__*/_jsxDEV(\"span\", {\n children: \"Tools\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 80,\n columnNumber: 21\n }, this), /*#__PURE__*/_jsxDEV(ChevronDown, {\n className: `h-4 w-4 transition-transform ${isDropdownOpen ? 'rotate-180' : ''}`\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 81,\n columnNumber: 21\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 76,\n columnNumber: 19\n }, this), isDropdownOpen && /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"absolute top-full left-0 mt-2 w-64 bg-white dark:bg-gray-800 rounded-lg shadow-lg border border-gray-200 dark:border-gray-700 py-2 z-50\",\n children: tools.map(tool => {\n const IconComponent = tool.icon;\n return /*#__PURE__*/_jsxDEV(Link, {\n to: tool.path,\n onClick: () => setIsDropdownOpen(false),\n className: `flex items-center space-x-3 px-4 py-3 text-sm hover:bg-gray-50 dark:hover:bg-gray-700 transition-colors ${isActive(tool.path) ? 'bg-primary-50 text-primary-700 dark:bg-primary-900 dark:text-primary-300' : 'text-gray-700 dark:text-gray-300'}`,\n children: [/*#__PURE__*/_jsxDEV(IconComponent, {\n className: \"h-4 w-4\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 102,\n columnNumber: 29\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n className: \"font-medium\",\n children: tool.name\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 104,\n columnNumber: 31\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"text-xs text-gray-500 dark:text-gray-400\",\n children: tool.description\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 105,\n columnNumber: 31\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 103,\n columnNumber: 29\n }, this)]\n }, tool.path, true, {\n fileName: _jsxFileName,\n lineNumber: 92,\n columnNumber: 27\n }, this);\n })\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 88,\n columnNumber: 21\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 75,\n columnNumber: 17\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 61,\n columnNumber: 15\n }, this), /*#__PURE__*/_jsxDEV(ThemeToggle, {}, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 115,\n columnNumber: 15\n }, this), /*#__PURE__*/_jsxDEV(\"button\", {\n onClick: () => setIsMobileMenuOpen(!isMobileMenuOpen),\n className: \"md:hidden p-2 rounded-md text-gray-600 hover:text-gray-900 dark:text-gray-300 dark:hover:text-white transition-colors\",\n children: isMobileMenuOpen ? /*#__PURE__*/_jsxDEV(X, {\n className: \"h-6 w-6\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 122,\n columnNumber: 37\n }, this) : /*#__PURE__*/_jsxDEV(Menu, {\n className: \"h-6 w-6\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 122,\n columnNumber: 65\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 118,\n columnNumber: 15\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 59,\n columnNumber: 13\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 51,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 50,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 49,\n columnNumber: 7\n }, this), isMobileMenuOpen && /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"md:hidden bg-white dark:bg-gray-800 border-b border-gray-200 dark:border-gray-700\",\n children: /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-4\",\n children: /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"space-y-2\",\n children: [/*#__PURE__*/_jsxDEV(Link, {\n to: \"/\",\n onClick: () => setIsMobileMenuOpen(false),\n className: `flex items-center space-x-3 px-3 py-2 rounded-md text-sm font-medium transition-colors ${isActive('/') ? 'bg-primary-100 text-primary-700 dark:bg-primary-900 dark:text-primary-300' : 'text-gray-600 hover:text-gray-900 dark:text-gray-300 dark:hover:text-white'}`,\n children: [/*#__PURE__*/_jsxDEV(Home, {\n className: \"h-5 w-5\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 143,\n columnNumber: 17\n }, this), /*#__PURE__*/_jsxDEV(\"span\", {\n children: \"Home\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 144,\n columnNumber: 17\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 134,\n columnNumber: 15\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"border-t border-gray-200 dark:border-gray-700 pt-2 mt-2\",\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n className: \"text-xs font-semibold text-gray-500 dark:text-gray-400 uppercase tracking-wider px-3 py-1\",\n children: \"Tools\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 148,\n columnNumber: 17\n }, this), tools.map(tool => {\n const IconComponent = tool.icon;\n return /*#__PURE__*/_jsxDEV(Link, {\n to: tool.path,\n onClick: () => setIsMobileMenuOpen(false),\n className: `flex items-center space-x-3 px-3 py-2 rounded-md text-sm font-medium transition-colors ${isActive(tool.path) ? 'bg-primary-100 text-primary-700 dark:bg-primary-900 dark:text-primary-300' : 'text-gray-600 hover:text-gray-900 dark:text-gray-300 dark:hover:text-white'}`,\n children: [/*#__PURE__*/_jsxDEV(IconComponent, {\n className: \"h-5 w-5\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 164,\n columnNumber: 23\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n className: \"font-medium\",\n children: tool.name\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 166,\n columnNumber: 25\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"text-xs text-gray-500 dark:text-gray-400\",\n children: tool.description\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 167,\n columnNumber: 25\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 165,\n columnNumber: 23\n }, this)]\n }, tool.path, true, {\n fileName: _jsxFileName,\n lineNumber: 154,\n columnNumber: 21\n }, this);\n })]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 147,\n columnNumber: 15\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 133,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 132,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 131,\n columnNumber: 9\n }, this), /*#__PURE__*/_jsxDEV(\"main\", {\n className: \"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8\",\n children: children\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 179,\n columnNumber: 7\n }, this), /*#__PURE__*/_jsxDEV(\"footer\", {\n className: \"bg-white dark:bg-gray-800 border-t border-gray-200 dark:border-gray-700 mt-16\",\n children: /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8\",\n children: /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"text-center text-gray-600 dark:text-gray-400\",\n children: /*#__PURE__*/_jsxDEV(\"p\", {\n children: [\"\\xA9 \", new Date().getFullYear(), \" Dewe Toolsites - Developer Tools.\"]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 187,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 186,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 185,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 184,\n columnNumber: 7\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 47,\n columnNumber: 5\n }, this);\n};\n_s(Layout, \"UuGVBSioUY9Dm7/zhJaEgul4HKY=\", false, function () {\n return [useLocation];\n});\n_c = Layout;\nexport default Layout;\nvar _c;\n$RefreshReg$(_c, \"Layout\");","map":{"version":3,"names":["React","useState","useEffect","useRef","Link","useLocation","Code2","Home","ChevronDown","Menu","X","Database","FileText","LinkIcon","Hash","FileSpreadsheet","Wand2","GitCompare","ThemeToggle","jsxDEV","_jsxDEV","Layout","children","_s","location","isDropdownOpen","setIsDropdownOpen","isMobileMenuOpen","setIsMobileMenuOpen","dropdownRef","isActive","path","pathname","handleClickOutside","event","current","contains","target","document","addEventListener","removeEventListener","tools","name","icon","description","className","to","fileName","_jsxFileName","lineNumber","columnNumber","onClick","map","tool","IconComponent","Date","getFullYear","_c","$RefreshReg$"],"sources":["/Users/dwindown/CascadeProjects/developer-tools/src/components/Layout.js"],"sourcesContent":["import React, { useState, useEffect, useRef } from 'react';\nimport { Link, useLocation } from 'react-router-dom';\nimport { Code2, Home, ChevronDown, Menu, X, Database, FileText, Link as LinkIcon, Hash, FileSpreadsheet, Wand2, GitCompare } from 'lucide-react';\nimport ThemeToggle from './ThemeToggle';\n\nconst Layout = ({ children }) => {\n const location = useLocation();\n const [isDropdownOpen, setIsDropdownOpen] = useState(false);\n const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false);\n const dropdownRef = useRef(null);\n \n const isActive = (path) => {\n return location.pathname === path;\n };\n\n // Close dropdown when clicking outside\n useEffect(() => {\n const handleClickOutside = (event) => {\n if (dropdownRef.current && !dropdownRef.current.contains(event.target)) {\n setIsDropdownOpen(false);\n }\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n };\n }, []);\n\n // Close mobile menu when route changes\n useEffect(() => {\n setIsMobileMenuOpen(false);\n setIsDropdownOpen(false);\n }, [location.pathname]);\n\n const tools = [\n { path: '/json', name: 'JSON Tool', icon: FileText, description: 'Format & validate JSON' },\n { path: '/serialize', name: 'Serialize Tool', icon: Database, description: 'PHP serialize/unserialize' },\n { path: '/url', name: 'URL Tool', icon: LinkIcon, description: 'URL encode/decode' },\n { path: '/base64', name: 'Base64 Tool', icon: Hash, description: 'Base64 encode/decode' },\n { path: '/csv-json', name: 'CSV/JSON Tool', icon: FileSpreadsheet, description: 'Convert CSV ↔ JSON' },\n { path: '/beautifier', name: 'Beautifier Tool', icon: Wand2, description: 'Beautify/minify code' },\n { path: '/diff', name: 'Diff Tool', icon: GitCompare, description: 'Compare text differences' }\n ];\n\n return (\n <div className=\"min-h-screen bg-gray-50 dark:bg-gray-900\">\n {/* Header */}\n <header className=\"bg-white dark:bg-gray-800 shadow-sm border-b border-gray-200 dark:border-gray-700\">\n <div className=\"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8\">\n <div className=\"flex justify-between items-center h-16\">\n <Link to=\"/\" className=\"flex items-center space-x-2\">\n <Code2 className=\"h-8 w-8 text-primary-600\" />\n <span className=\"text-xl font-bold text-gray-900 dark:text-white\">\n DevTools\n </span>\n </Link>\n \n <div className=\"flex items-center space-x-4\">\n {/* Desktop Navigation */}\n <nav className=\"hidden md:flex items-center space-x-6\">\n <Link\n to=\"/\"\n className={`flex items-center space-x-1 px-3 py-2 rounded-md text-sm font-medium transition-colors ${\n isActive('/') \n ? 'bg-primary-100 text-primary-700 dark:bg-primary-900 dark:text-primary-300' \n : 'text-gray-600 hover:text-gray-900 dark:text-gray-300 dark:hover:text-white'\n }`}\n >\n <Home className=\"h-4 w-4\" />\n <span>Home</span>\n </Link>\n \n {/* Tools Dropdown */}\n <div className=\"relative\">\n <button\n onClick={() => setIsDropdownOpen(!isDropdownOpen)}\n className=\"flex items-center space-x-1 px-3 py-2 rounded-md text-sm font-medium text-gray-600 hover:text-gray-900 dark:text-gray-300 dark:hover:text-white transition-colors\"\n >\n <span>Tools</span>\n <ChevronDown className={`h-4 w-4 transition-transform ${\n isDropdownOpen ? 'rotate-180' : ''\n }`} />\n </button>\n \n {/* Dropdown Menu */}\n {isDropdownOpen && (\n <div className=\"absolute top-full left-0 mt-2 w-64 bg-white dark:bg-gray-800 rounded-lg shadow-lg border border-gray-200 dark:border-gray-700 py-2 z-50\">\n {tools.map((tool) => {\n const IconComponent = tool.icon;\n return (\n <Link\n key={tool.path}\n to={tool.path}\n onClick={() => setIsDropdownOpen(false)}\n className={`flex items-center space-x-3 px-4 py-3 text-sm hover:bg-gray-50 dark:hover:bg-gray-700 transition-colors ${\n isActive(tool.path)\n ? 'bg-primary-50 text-primary-700 dark:bg-primary-900 dark:text-primary-300'\n : 'text-gray-700 dark:text-gray-300'\n }`}\n >\n <IconComponent className=\"h-4 w-4\" />\n <div>\n <div className=\"font-medium\">{tool.name}</div>\n <div className=\"text-xs text-gray-500 dark:text-gray-400\">{tool.description}</div>\n </div>\n </Link>\n );\n })}\n </div>\n )}\n </div>\n </nav>\n \n <ThemeToggle />\n \n {/* Mobile Menu Button */}\n <button\n onClick={() => setIsMobileMenuOpen(!isMobileMenuOpen)}\n className=\"md:hidden p-2 rounded-md text-gray-600 hover:text-gray-900 dark:text-gray-300 dark:hover:text-white transition-colors\"\n >\n {isMobileMenuOpen ? <X className=\"h-6 w-6\" /> : <Menu className=\"h-6 w-6\" />}\n </button>\n </div>\n </div>\n </div>\n </header>\n\n {/* Mobile Navigation Menu */}\n {isMobileMenuOpen && (\n <div className=\"md:hidden bg-white dark:bg-gray-800 border-b border-gray-200 dark:border-gray-700\">\n <div className=\"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-4\">\n <div className=\"space-y-2\">\n <Link\n to=\"/\"\n onClick={() => setIsMobileMenuOpen(false)}\n className={`flex items-center space-x-3 px-3 py-2 rounded-md text-sm font-medium transition-colors ${\n isActive('/') \n ? 'bg-primary-100 text-primary-700 dark:bg-primary-900 dark:text-primary-300' \n : 'text-gray-600 hover:text-gray-900 dark:text-gray-300 dark:hover:text-white'\n }`}\n >\n <Home className=\"h-5 w-5\" />\n <span>Home</span>\n </Link>\n \n <div className=\"border-t border-gray-200 dark:border-gray-700 pt-2 mt-2\">\n <div className=\"text-xs font-semibold text-gray-500 dark:text-gray-400 uppercase tracking-wider px-3 py-1\">\n Tools\n </div>\n {tools.map((tool) => {\n const IconComponent = tool.icon;\n return (\n <Link\n key={tool.path}\n to={tool.path}\n onClick={() => setIsMobileMenuOpen(false)}\n className={`flex items-center space-x-3 px-3 py-2 rounded-md text-sm font-medium transition-colors ${\n isActive(tool.path)\n ? 'bg-primary-100 text-primary-700 dark:bg-primary-900 dark:text-primary-300'\n : 'text-gray-600 hover:text-gray-900 dark:text-gray-300 dark:hover:text-white'\n }`}\n >\n <IconComponent className=\"h-5 w-5\" />\n <div>\n <div className=\"font-medium\">{tool.name}</div>\n <div className=\"text-xs text-gray-500 dark:text-gray-400\">{tool.description}</div>\n </div>\n </Link>\n );\n })}\n </div>\n </div>\n </div>\n </div>\n )}\n\n {/* Main Content */}\n <main className=\"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8\">\n {children}\n </main>\n\n {/* Footer */}\n <footer className=\"bg-white dark:bg-gray-800 border-t border-gray-200 dark:border-gray-700 mt-16\">\n <div className=\"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8\">\n <div className=\"text-center text-gray-600 dark:text-gray-400\">\n <p>© {new Date().getFullYear()} Dewe Toolsites - Developer Tools.</p>\n </div>\n </div>\n </footer>\n </div>\n );\n};\n\nexport default Layout;\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}