157 lines
5.6 KiB
JavaScript
157 lines
5.6 KiB
JavaScript
import React, { useState } from 'react';
|
|
import { Search, Code, Link2, FileText, Hash, RefreshCw, GitCompare, Type, Edit3, Table } from 'lucide-react';
|
|
import ToolCard from '../components/ToolCard';
|
|
|
|
const Home = () => {
|
|
console.log('🏠 NEW Home component loaded - Object Editor should be visible!');
|
|
const [searchTerm, setSearchTerm] = useState('');
|
|
|
|
const tools = [
|
|
{
|
|
icon: Edit3,
|
|
title: 'Object Editor',
|
|
description: 'Visual editor for JSON and PHP serialized objects with mindmap visualization',
|
|
path: '/object-editor',
|
|
tags: ['Visual', 'JSON', 'PHP', 'Objects', 'Editor']
|
|
},
|
|
{
|
|
icon: Table,
|
|
title: 'Table Editor',
|
|
description: 'Import, edit, and export tabular data from URLs, files, or paste CSV/JSON',
|
|
path: '/table-editor',
|
|
tags: ['Table', 'CSV', 'JSON', 'Data', 'Editor']
|
|
},
|
|
{
|
|
icon: Link2,
|
|
title: 'URL Encoder/Decoder',
|
|
description: 'Encode and decode URLs and query parameters',
|
|
path: '/url',
|
|
tags: ['URL', 'Encode', 'Decode']
|
|
},
|
|
{
|
|
icon: Hash,
|
|
title: 'Base64 Encoder/Decoder',
|
|
description: 'Convert text to Base64 and back with support for files',
|
|
path: '/base64',
|
|
tags: ['Base64', 'Encode', 'Binary']
|
|
},
|
|
{
|
|
icon: FileText,
|
|
title: 'Code Beautifier/Minifier',
|
|
description: 'Format and minify JSON, XML, SQL, CSS, and HTML code',
|
|
path: '/beautifier',
|
|
tags: ['Format', 'Minify', 'Beautify']
|
|
},
|
|
{
|
|
icon: GitCompare,
|
|
title: 'Text Diff Checker',
|
|
description: 'Compare two texts and highlight differences line by line',
|
|
path: '/diff',
|
|
tags: ['Diff', 'Compare', 'Text']
|
|
},
|
|
{
|
|
icon: Type,
|
|
title: 'Text Length Checker',
|
|
description: 'Analyze text length, word count, and other text statistics',
|
|
path: '/text-length',
|
|
tags: ['Text', 'Length', 'Statistics']
|
|
}
|
|
];
|
|
|
|
const filteredTools = tools.filter(tool =>
|
|
tool.title.toLowerCase().includes(searchTerm.toLowerCase()) ||
|
|
tool.description.toLowerCase().includes(searchTerm.toLowerCase()) ||
|
|
tool.tags.some(tag => tag.toLowerCase().includes(searchTerm.toLowerCase()))
|
|
);
|
|
|
|
return (
|
|
<div className="max-w-6xl mx-auto">
|
|
{/* Hero Section */}
|
|
<div className="text-center mb-12">
|
|
<h1 className="text-4xl font-bold text-gray-900 dark:text-white mb-4">
|
|
Developer Tools
|
|
</h1>
|
|
<p className="text-xl text-gray-600 dark:text-gray-300 mb-8">
|
|
Essential utilities for web developers - fast, local, and easy to use
|
|
</p>
|
|
|
|
{/* Search */}
|
|
<div className="relative max-w-md mx-auto">
|
|
<Search className="absolute left-3 top-1/2 transform -translate-y-1/2 h-5 w-5 text-gray-400" />
|
|
<input
|
|
type="text"
|
|
placeholder="Search tools..."
|
|
value={searchTerm}
|
|
onChange={(e) => setSearchTerm(e.target.value)}
|
|
className="w-full pl-10 pr-4 py-3 border border-gray-300 dark:border-gray-600 rounded-lg bg-white dark:bg-gray-700 text-gray-900 dark:text-gray-100 focus:ring-2 focus:ring-primary-500 focus:border-transparent"
|
|
/>
|
|
</div>
|
|
</div>
|
|
|
|
{/* Tools Grid */}
|
|
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
|
|
{filteredTools.map((tool, index) => (
|
|
<ToolCard
|
|
key={index}
|
|
icon={tool.icon}
|
|
title={tool.title}
|
|
description={tool.description}
|
|
path={tool.path}
|
|
tags={tool.tags}
|
|
/>
|
|
))}
|
|
</div>
|
|
|
|
{/* No Results */}
|
|
{filteredTools.length === 0 && (
|
|
<div className="text-center py-12">
|
|
<p className="text-gray-500 dark:text-gray-400 text-lg">
|
|
No tools found matching "{searchTerm}"
|
|
</p>
|
|
</div>
|
|
)}
|
|
|
|
{/* Features */}
|
|
<div className="mt-16 grid grid-cols-1 md:grid-cols-3 gap-8">
|
|
<div className="text-center">
|
|
<div className="bg-primary-100 dark:bg-primary-900 rounded-full w-16 h-16 flex items-center justify-center mx-auto mb-4">
|
|
<RefreshCw className="h-8 w-8 text-primary-600" />
|
|
</div>
|
|
<h3 className="text-lg font-semibold text-gray-900 dark:text-white mb-2">
|
|
Lightning Fast
|
|
</h3>
|
|
<p className="text-gray-600 dark:text-gray-300">
|
|
All processing happens locally in your browser for maximum speed and privacy
|
|
</p>
|
|
</div>
|
|
|
|
<div className="text-center">
|
|
<div className="bg-primary-100 dark:bg-primary-900 rounded-full w-16 h-16 flex items-center justify-center mx-auto mb-4">
|
|
<FileText className="h-8 w-8 text-primary-600" />
|
|
</div>
|
|
<h3 className="text-lg font-semibold text-gray-900 dark:text-white mb-2">
|
|
Handle Large Files
|
|
</h3>
|
|
<p className="text-gray-600 dark:text-gray-300">
|
|
Process large text files and data with ease, no size limitations
|
|
</p>
|
|
</div>
|
|
|
|
<div className="text-center">
|
|
<div className="bg-primary-100 dark:bg-primary-900 rounded-full w-16 h-16 flex items-center justify-center mx-auto mb-4">
|
|
<Code className="h-8 w-8 text-primary-600" />
|
|
</div>
|
|
<h3 className="text-lg font-semibold text-gray-900 dark:text-white mb-2">
|
|
Developer Friendly
|
|
</h3>
|
|
<p className="text-gray-600 dark:text-gray-300">
|
|
Clean interface with syntax highlighting and easy copy-paste functionality
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
);
|
|
};
|
|
|
|
export default Home;
|