Commit 17b0985c authored by fisherdaddy's avatar fisherdaddy

feature: 新增urlencode

parent d47d7d2a
......@@ -8,6 +8,7 @@ import NotFound from './pages/NotFound';
const JsonFormatter = lazy(() => import('./components/JsonFormatter'));
const TextToImage = lazy(() => import('./components/TextToImage'));
const UrlDecode = lazy(() => import('./components/UrlDecode'));
const UrlEncode = lazy(() => import('./components/UrlEncode'));
const About = lazy(() => import('./pages/About'));
const OpenAITimeline = lazy(() => import('./components/OpenAITimeline'));
const PricingCharts = lazy(() => import('./components/PricingCharts'));
......@@ -25,6 +26,7 @@ function App() {
<Route path="/text2image" element={<TextToImage />} />
<Route path="/json-formatter" element={<JsonFormatter />} />
<Route path="/url-decode" element={<UrlDecode />} />
<Route path="/url-encode" element={<UrlEncode />} />
<Route path="/about" element={<About />} />
<Route path="/openai-timeline" element={<OpenAITimeline />} />
<Route path="/llm-model-price" element={<PricingCharts />} />
......
import React, { useState, useCallback } from 'react';
import { Title, Wrapper, Container, InputText, Preview } from '../js/SharedStyles';
import styled from 'styled-components';
import { useTranslation } from '../js/i18n';
import SEO from './SEO';
const EncoderContainer = styled(Container)`
flex-direction: column;
`;
const StyledInputText = styled(InputText)`
height: 100px;
margin-bottom: 20px;
@media (min-width: 768px) {
height: 100px;
width: 100%;
}
`;
const PreviewWrapper = styled.div`
width: 100%;
`;
const Label = styled.label`
font-weight: 500;
font-size: 14px;
color: #5f6368;
margin-bottom: 8px;
display: block;
letter-spacing: 0.1px;
`;
const StyledPreview = styled(Preview)`
background-color: #f8f9fa;
padding: 12px 40px 12px 12px; // 增加右侧 padding 为按钮留出空间
border-radius: 8px;
border: 1px solid #dadce0;
font-size: 14px;
color: #202124;
min-height: 24px; // 确保即使内容为空,也有足够的高度容纳按钮
`;
const ResultContainer = styled.div`
position: relative;
width: 100%;
`;
const CopyButton = styled.button`
position: absolute;
top: 8px;
right: 8px;
background-color: transparent;
border: none;
cursor: pointer;
padding: 4px;
display: flex;
align-items: center;
justify-content: center;
opacity: 0.6;
transition: opacity 0.3s, color 0.3s;
&:hover {
opacity: 1;
}
svg {
width: 16px;
height: 16px;
}
&.copied {
color: #34a853; // 成功复制后的绿色反馈
}
`;
function UrlEncoder() {
const { t } = useTranslation();
const [input, setInput] = useState('');
const [encodedText, setEncodedText] = useState('');
const [isCopied, setIsCopied] = useState(false);
const handleInputChange = (e) => {
const inputValue = e.target.value;
setInput(inputValue);
try {
const encoded = encodeURIComponent(inputValue);
setEncodedText(encoded);
} catch (error) {
setEncodedText('编码出错');
}
};
const handleCopy = useCallback(() => {
navigator.clipboard.writeText(encodedText).then(() => {
setIsCopied(true);
setTimeout(() => setIsCopied(false), 2000);
});
}, [encodedText]);
return (
<>
<SEO
title={t('tools.urlEncode.title')}
description={t('tools.urlEncode.description')}
/>
<Wrapper>
<Title>{t('tools.urlEncode.title')}</Title>
<EncoderContainer>
<StyledInputText
id="urlInput"
placeholder={t('tools.urlEncode.inputLabel')}
value={input}
onChange={handleInputChange}
/>
<PreviewWrapper>
<Label>{t('tools.urlEncode.resultLabel')}</Label>
<ResultContainer>
<StyledPreview>{encodedText}</StyledPreview>
<CopyButton onClick={handleCopy} className={isCopied ? 'copied' : ''}>
{isCopied ? (
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor">
<path d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z"/>
</svg>
) : (
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor">
<path d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z"/>
</svg>
)}
</CopyButton>
</ResultContainer>
</PreviewWrapper>
</EncoderContainer>
</Wrapper>
</>
);
}
export default UrlEncoder;
{
"en": {
"title": "AI Toolbox",
"description": "AI Toolbox - A collection of AI tools including text cards, JSON formatter, URL decoder, OpenAI product releases summary, and global model price comparisons to help you accomplish various tasks effortlessly.",
"slogan": "Your collection of intelligent assistants, solving various AI needs in one place.",
"keywords": "AI Toolbox, AI tools, text cards, JSON formatter, URL decoder, OpenAI products, model price comparison, online tools, free tools",
"tools": {
"text2image": {
"title": "Text to Image Card",
"description": "Convert text to image card",
"inputPlaceholder": "Enter text (can include titles, e.g. # Title 1)",
"downloadButton": "Export as Image"
},
"jsonFormatter": {
"title": "JSON Formatter",
"description": "Beautify and validate JSON data",
"inputPlaceholder": "Enter JSON data",
"invalidJson": "Invalid JSON",
"copyButton": "Copy",
"copiedMessage": "Copied"
},
"urlDecode": {
"title": "URL Decoder",
"description": "Decode URL-encoded strings",
"inputLabel": "Enter URL to decode",
"resultLabel": "Decoded result",
"copyButton": "Copy",
"copiedMessage": "Copied"
},
"urlEncode": {
"title": "URL Encoder",
"description": "Encode URL strings",
"inputLabel": "Enter URL to encode",
"resultLabel": "Encoded result",
"copyButton": "Copy",
"copiedMessage": "Copied"
},
"openAITimeline": {
"title": "OpenAI Product Release",
"description": "Overview of OpenAI product release dates"
},
"modelPrice": {
"title": "Global Large Model Price Comparison",
"description": "Arena for comparing prices of various models worldwide"
}
},
"notFound": {
"title": "404 - Page Not Found",
"description": "Sorry, the page you are looking for does not exist.",
"back_home": "Back to Home"
},
"footer": {
"copyRight": "AI Toolbox. All rights reserved."
},
"about": {
"title": "About Us",
"description": "AI Toolbox is a comprehensive web application that integrates various AI tools to provide users with a one-stop AI solution.",
"mission": "Our Mission",
"missionDescription": "To empower users with easy access to powerful AI tools, enhancing productivity and creativity.",
"team": "Our Team",
"teamDescription": "We are a dedicated team of AI enthusiasts and developers committed to building innovative solutions.",
"contact": "Contact Us"
},
"navigation": {
"about": "About Us"
}
},
"zh": {
"title": "AI 工具箱",
"description": "AI工具箱 - 集合了多种 AI 工具,如文字卡片、JSON 格式化、URL 解码器、OpenAI 产品发布汇总、全球各大模型价格对比,帮助您轻松完成各类任务。",
"slogan": "您的智能助手集合,一站式解决各种 AI 需求。",
"keywords": "AI工具箱,AI 工具,文字卡片,JSON 格式化,URL 解码器,OpenAI 产品,模型价格对比,在线工具,免费工具",
"tools": {
"text2image": {
"title": "文字卡片",
"description": "将文字转换为图片卡",
"inputPlaceholder": "输入文本(可包含标题,如# 标题1)",
"downloadButton": "导出为图片"
},
"jsonFormatter": {
"title": "JSON 格式化",
"description": "美化和验证 JSON 数据",
"inputPlaceholder": "输入 JSON 数据",
"invalidJson": "无效的 JSON",
"copyButton": "复制",
"copiedMessage": "已复制"
},
"urlDecode": {
"title": "URL 解码器",
"description": "解码 URL 编码的字符串",
"inputLabel": "输入需要解码的 URL",
"resultLabel": "解码结果",
"copyButton": "复制",
"copiedMessage": "已复制"
},
"urlEncode": {
"title": "URL 编码器",
"description": "编码 URL 字符串",
"inputLabel": "输入需要编码的 URL",
"resultLabel": "编码结果",
"copyButton": "复制",
"copiedMessage": "已复制"
},
"openAITimeline": {
"title": "OpenAI 产品发布",
"description": "OpenAI 产品发布时间一览"
},
"modelPrice": {
"title": "全球大模型价格对比",
"description": "全球各模型价格对比竞技场"
}
},
"notFound": {
"title": "404 - 页面未找到",
"description": "抱歉,您访问的页面不存在。",
"back_home": "返回首页"
},
"footer": {
"copyRight": "AI 工具箱. 保留所有权利。"
},
"about": {
"title": "关于我们",
"description": "AI 工具箱是一个集成多种人工智能工具的综合Web应用程序,旨在为用户提供一站式AI解决方案。",
"mission": "我们的使命",
"missionDescription": "通过提供强大的AI工具,赋能用户,提高生产力和创造力。",
"team": "我们的团队",
"teamDescription": "我们是一支由AI爱好者和开发人员组成的专注团队,致力于构建创新的解决方案。",
"contact": "联系我们"
},
"navigation": {
"about": "关于我们"
}
},
"ja": {
"title": "AIツールボックス",
"description": "AIツールボックス - テキストカード、JSONフォーマッター、URLデコーダー、OpenAI製品のリリースまとめ、世界のモデル価格比較など、多様なAIツールを集めたサイトです。さまざまなタスクを簡単にこなせます。",
"slogan": "あなたのインテリジェントアシスタントコレクション、様々なAIニーズを一箇所で解決します。",
"keywords": "AIツールボックス、AIツール、テキストカード、JSONフォーマッター、URLデコーダー、OpenAI製品、モデル価格比較、オンラインツール、無料ツール",
"tools": {
"text2image": {
"title": "テキストから画像",
"description": "テキストを画像カードに変換",
"inputPlaceholder": "テキストを入力(タイトルを含めることができます、例:# タイトル1)",
"downloadButton": "画像としてエクスポート"
},
"jsonFormatter": {
"title": "JSONフォーマッター",
"description": "JSONデータを整形し検証する",
"inputPlaceholder": "JSONデータを入力",
"invalidJson": "無効なJSON",
"copyButton": "コピー",
"copiedMessage": "コピーしました"
},
"urlDecode": {
"title": "URLデコーダー",
"description": "URLエンコードされた文字列をデコード",
"inputLabel": "デコードするURLを入力",
"resultLabel": "デコード結果",
"copyButton": "コピー",
"copiedMessage": "コピーしました"
},
"urlEncode": {
"title": "URLエンコーダー",
"description": "URL文字列をエンコード",
"inputLabel": "エンコードするURLを入力",
"resultLabel": "エンコード結果",
"copyButton": "コピー",
"copiedMessage": "コピーしました"
},
"openAITimeline": {
"title": "OpenAI 製品リリース",
"description": "OpenAI 製品リリース時刻表"
},
"modelPrice": {
"title": "世界の大規模モデル価格比較",
"description": "世界各国のモデル価格比較アリーナ"
}
},
"notFound": {
"title": "404 - ページが見つかりません",
"description": "申し訳ありませんが、お探しのページは存在しません。",
"back_home": "ホームに戻る"
},
"footer": {
"copyRight": "AIツールボックス. すべての権利を保有します。"
},
"about": {
"title": "私たちについて",
"description": "AIツールボックスは、さまざまなAIツールを統合した包括的なWebアプリケーションであり、ユーザーにワンストップのAIソリューションを提供します。",
"mission": "私たちの使命",
"missionDescription": "強力なAIツールへの簡単なアクセスを提供し、ユーザーの生産性と創造性を高めること。",
"team": "私たちのチーム",
"teamDescription": "私たちは革新的なソリューションの構築に専念するAI愛好家と開発者の献身的なチームです。",
"contact": "お問い合わせ"
},
"navigation": {
"about": "私たちについて"
}
},
"ko": {
"title": "AI 도구 상자",
"description": "AI 도구상자 - 텍스트 카드, JSON 포매터, URL 디코더, OpenAI 제품 출시 요약, 글로벌 모델 가격 비교 등 다양한 AI 도구를 모아 다양한 작업을 손쉽게 수행할 수 있도록 도와드립니다.",
"slogan": "당신의 지능형 어시스턴트 컬렉션, 다양한 AI 요구 사항을 한 곳에서 해결합니다.",
"keywords": "AI 도구상자, AI 도구, 텍스트 카드, JSON 포매터, URL 디코더, OpenAI 제품, 모델 가격 비교, 온라인 도구, 무료 도구",
"tools": {
"text2image": {
"title": "텍스트를 이미지로",
"description": "텍스트를 이미지 카드로 변환",
"inputPlaceholder": "텍스트 입력 (제목 포함 가능, 예: # 제목 1)",
"downloadButton": "이미지로 내보내기"
},
"jsonFormatter": {
"title": "JSON 포맷터",
"description": "JSON 데이터 정리 및 검증",
"inputPlaceholder": "JSON 데이터 입력",
"invalidJson": "유효하지 않은 JSON",
"copyButton": "복사",
"copiedMessage": "복사됨"
},
"urlDecode": {
"title": "URL 디코더",
"description": "URL 인코딩된 문자열 디코딩",
"inputLabel": "디코딩할 URL 입력",
"resultLabel": "디코딩 결과",
"copyButton": "복사",
"copiedMessage": "복사됨"
},
"urlEncode": {
"title": "URL 인코더",
"description": "URL 문자열 인코딩",
"inputLabel": "인코딩할 URL을 입력",
"resultLabel": "인코딩 결과",
"copyButton": "복사",
"copiedMessage": "복사됨"
},
"openAITimeline": {
"title": "OpenAI 제품 출시",
"description": "OpenAI 제품 출시 일정"
},
"modelPrice": {
"title": "전세계 대형 모델 가격 비교",
"description": "전 세계 각 모델 가격 비교 아레나"
}
},
"notFound": {
"title": "404 - 페이지를 찾을 수 없습니다",
"description": "죄송합니다. 찾고 있는 페이지가 존재하지 않습니다.",
"back_home": "홈으로 돌아가기"
},
"footer": {
"copyRight": "AI 도구 상자. 모든 권리 보유."
},
"about": {
"title": "회사 소개",
"description": "AI 도구 상자는 다양한 AI 도구를 통합한 종합 웹 애플리케이션으로, 사용자에게 원스톱 AI 솔루션을 제공합니다.",
"mission": "우리의 사명",
"missionDescription": "강력한 AI 도구에 쉽게 접근할 수 있도록 하여 생산성과 창의성을 향상시키는 것.",
"team": "우리 팀",
"teamDescription": "우리는 혁신적인 솔루션을 구축하는 데 전념하는 AI 애호가 및 개발자 팀입니다.",
"contact": "문의하기"
},
"navigation": {
"about": "회사 소개"
}
}
}
\ No newline at end of file
import { useState, useEffect } from 'react';
const i18n = {
en: {
title: 'AI Toolbox',
description: 'AI Toolbox - A collection of AI tools including text cards, JSON formatter, URL decoder, OpenAI product releases summary, and global model price comparisons to help you accomplish various tasks effortlessly.',
slogan: 'Your collection of intelligent assistants, solving various AI needs in one place.',
keywords: 'AI Toolbox, AI tools, text cards, JSON formatter, URL decoder, OpenAI products, model price comparison, online tools, free tools',
tools: {
text2image: {
title: 'Text to Image Card',
description: 'Convert text to image card',
inputPlaceholder: 'Enter text (can include titles, e.g. # Title 1)',
downloadButton: 'Export as Image'
},
jsonFormatter: {
title: 'JSON Formatter',
description: 'Beautify and validate JSON data',
inputPlaceholder: 'Enter JSON data',
invalidJson: 'Invalid JSON',
copyButton: 'Copy',
copiedMessage: 'Copied'
},
urlDecode: {
title: 'URL Decoder',
description: 'Decode URL-encoded strings',
inputLabel: 'Enter URL to decode',
resultLabel: 'Decoded result',
copyButton: 'Copy',
copiedMessage: 'Copied'
},
openAITimeline: {
title: "OpenAI Product Release",
description: 'Overview of OpenAI product release dates',
},
modelPrice: {
title: "Global Large Model Price Comparison",
description: "Arena for comparing prices of various models worldwide"
}
},
notFound: {
title: '404 - Page Not Found',
description: 'Sorry, the page you are looking for does not exist.',
back_home: 'Back to Home'
},
footer: {
copyRight: 'AI Toolbox. All rights reserved.'
},
about: {
title: 'About Us',
description: 'AI Toolbox is a comprehensive web application that integrates various AI tools to provide users with a one-stop AI solution.',
mission: 'Our Mission',
missionDescription: 'To empower users with easy access to powerful AI tools, enhancing productivity and creativity.',
team: 'Our Team',
teamDescription: 'We are a dedicated team of AI enthusiasts and developers committed to building innovative solutions.',
contact: 'Contact Us',
},
navigation: {
about: 'About Us'
},
},
zh: {
title: 'AI 工具箱',
description: 'AI工具箱 - 集合了多种 AI 工具,如文字卡片、JSON 格式化、URL 解码器、OpenAI 产品发布汇总、全球各大模型价格对比,帮助您轻松完成各类任务。',
slogan: '您的智能助手集合,一站式解决各种 AI 需求。',
keywords: 'AI工具箱,AI 工具,文字卡片,JSON 格式化,URL 解码器,OpenAI 产品,模型价格对比,在线工具,免费工具',
tools: {
text2image: {
title: '文字卡片',
description: '将文字转换为图片卡',
inputPlaceholder: '输入文本(可包含标题,如# 标题1)',
downloadButton: '导出为图片'
},
jsonFormatter: {
title: 'JSON 格式化',
description: '美化和验证 JSON 数据',
inputPlaceholder: '输入 JSON 数据',
invalidJson: '无效的 JSON',
copyButton: '复制',
copiedMessage: '已复制'
},
urlDecode: {
title: 'URL 解码器',
description: '解码 URL 编码的字符串',
inputLabel: '输入需要解码的 URL',
resultLabel: '解码结果',
copyButton: '复制',
copiedMessage: '已复制'
},
openAITimeline: {
title: "OpenAI 产品发布",
description: 'OpenAI 产品发布时间一览',
},
modelPrice: {
title: "全球大模型价格对比",
description: "全球各模型价格对比竞技场"
}
},
notFound: {
title: '404 - 页面未找到',
description: '抱歉,您访问的页面不存在。',
back_home: '返回首页'
},
footer: {
copyRight: 'AI 工具箱. 保留所有权利。'
},
about: {
title: '关于我们',
description: 'AI 工具箱是一个集成多种人工智能工具的综合Web应用程序,旨在为用户提供一站式AI解决方案。',
mission: '我们的使命',
missionDescription: '通过提供强大的AI工具,赋能用户,提高生产力和创造力。',
team: '我们的团队',
teamDescription: '我们是一支由AI爱好者和开发人员组成的专注团队,致力于构建创新的解决方案。',
contact: '联系我们',
},
navigation: {
about: '关于我们'
},
},
ja: {
title: 'AIツールボックス',
description: 'AIツールボックス - テキストカード、JSONフォーマッター、URLデコーダー、OpenAI製品のリリースまとめ、世界のモデル価格比較など、多様なAIツールを集めたサイトです。さまざまなタスクを簡単にこなせます。',
slogan: 'あなたのインテリジェントアシスタントコレクション、様々なAIニーズを一箇所で解決します。',
keywords: 'AIツールボックス、AIツール、テキストカード、JSONフォーマッター、URLデコーダー、OpenAI製品、モデル価格比較、オンラインツール、無料ツール',
tools: {
text2image: {
title: 'テキストから画像',
description: 'テキストを画像カードに変換',
inputPlaceholder: 'テキストを入力(タイトルを含めることができます、例:# タイトル1)',
downloadButton: '画像としてエクスポート'
},
jsonFormatter: {
title: 'JSONフォーマッター',
description: 'JSONデータを整形し検証する',
inputPlaceholder: 'JSONデータを入力',
invalidJson: '無効なJSON',
copyButton: 'コピー',
copiedMessage: 'コピーしました'
},
urlDecode: {
title: 'URLデコーダー',
description: 'URLエンコードされた文字列をデコード',
inputLabel: 'デコードするURLを入力',
resultLabel: 'デコード結果',
copyButton: 'コピー',
copiedMessage: 'コピーしました'
},
openAITimeline: {
title: "OpenAI 製品リリース",
description: 'OpenAI 製品リリース時刻表',
},
modelPrice: {
title: "世界の大規模モデル価格比較",
description: "世界各国のモデル価格比較アリーナ"
}
},
notFound: {
title: '404 - ページが見つかりません',
description: '申し訳ありませんが、お探しのページは存在しません。',
back_home: 'ホームに戻る'
},
footer: {
copyRight: 'AIツールボックス. すべての権利を保有します。'
},
about: {
title: '私たちについて',
description: 'AIツールボックスは、さまざまなAIツールを統合した包括的なWebアプリケーションであり、ユーザーにワンストップのAIソリューションを提供します。',
mission: '私たちの使命',
missionDescription: '強力なAIツールへの簡単なアクセスを提供し、ユーザーの生産性と創造性を高めること。',
team: '私たちのチーム',
teamDescription: '私たちは革新的なソリューションの構築に専念するAI愛好家と開発者の献身的なチームです。',
contact: 'お問い合わせ',
},
navigation: {
about: '私たちについて'
},
},
ko: {
title: 'AI 도구 상자',
description: 'AI 도구상자 - 텍스트 카드, JSON 포매터, URL 디코더, OpenAI 제품 출시 요약, 글로벌 모델 가격 비교 등 다양한 AI 도구를 모아 다양한 작업을 손쉽게 수행할 수 있도록 도와드립니다.',
slogan: '당신의 지능형 어시스턴트 컬렉션, 다양한 AI 요구 사항을 한 곳에서 해결합니다.',
keywords: 'AI 도구상자, AI 도구, 텍스트 카드, JSON 포매터, URL 디코더, OpenAI 제품, 모델 가격 비교, 온라인 도구, 무료 도구',
tools: {
text2image: {
title: '텍스트를 이미지로',
description: '텍스트를 이미지 카드로 변환',
inputPlaceholder: '텍스트 입력 (제목 포함 가능, 예: # 제목 1)',
downloadButton: '이미지로 내보내기'
},
jsonFormatter: {
title: 'JSON 포맷터',
description: 'JSON 데이터 정리 및 검증',
inputPlaceholder: 'JSON 데이터 입력',
invalidJson: '유효하지 않은 JSON',
copyButton: '복사',
copiedMessage: '복사됨'
},
urlDecode: {
title: 'URL 디코더',
description: 'URL 인코딩된 문자열 디코딩',
inputLabel: '디코딩할 URL 입력',
resultLabel: '디코딩 결과',
copyButton: '복사',
copiedMessage: '복사됨'
},
openAITimeline: {
title: "OpenAI 제품 출시",
description: 'OpenAI 제품 출시 일정',
},
modelPrice: {
title: "전세계 대형 모델 가격 비교",
description: "전 세계 각 모델 가격 비교 아레나"
}
},
notFound: {
title: '404 - 페이지를 찾을 수 없습니다',
description: '죄송합니다. 찾고 있는 페이지가 존재하지 않습니다.',
back_home: '홈으로 돌아가기'
},
footer: {
copyRight: 'AI 도구 상자. 모든 권리 보유.'
},
about: {
title: '회사 소개',
description: 'AI 도구 상자는 다양한 AI 도구를 통합한 종합 웹 애플리케이션으로, 사용자에게 원스톱 AI 솔루션을 제공합니다.',
mission: '우리의 사명',
missionDescription: '강력한 AI 도구에 쉽게 접근할 수 있도록 하여 생산성과 창의성을 향상시키는 것.',
team: '우리 팀',
teamDescription: '우리는 혁신적인 솔루션을 구축하는 데 전념하는 AI 애호가 및 개발자 팀입니다.',
contact: '문의하기',
},
navigation: {
about: '회사 소개'
},
},
};
import i18n from '../data/i18n.json';
let currentLanguage = localStorage.getItem('language') || 'en';
let listeners = [];
......
......@@ -5,10 +5,11 @@ import SEO from '../components/SEO';
const tools = [
{ id: 'text2image', icon: 'fa-image', path: '/text2image' },
{ id: 'jsonFormatter', icon: 'fa-code', path: '/json-formatter' },
{ id: 'jsonFormatter', icon: 'fa-jsonformat', path: '/json-formatter' },
{ id: 'urlDecode', icon: 'fa-decode', path: '/url-decode' },
{ id: 'openAITimeline', icon: 'fa-decode', path: '/openai-timeline' },
{ id: 'modelPrice', icon: 'fa-decode', path: '/llm-model-price' },
{ id: 'urlEncode', icon: 'fa-encode', path: '/url-encode' },
{ id: 'openAITimeline', icon: 'fa-openai-timeline', path: '/openai-timeline' },
{ id: 'modelPrice', icon: 'fa-model-price', path: '/llm-model-price' },
];
const Home = () => {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment