diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index 7ff8002..9db58b9 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -4,12 +4,234 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -37,12 +259,12 @@
"assignee": "iib0011"
}
}
- {
+ "selectedUrlAndAccountId": {
+ "url": "https://github.com/iib0011/omni-tools.git",
+ "accountId": "45f8cd51-000f-4ba4-a4c6-c4d96ac9b1e5"
}
-}]]>
+}
{
"isMigrated": true
}
@@ -61,47 +283,47 @@
- {
+ "keyToString": {
+ "ASKED_ADD_EXTERNAL_FILES": "true",
+ "ASKED_SHARE_PROJECT_CONFIGURATION_FILES": "true",
+ "Docker.Dockerfile build.executor": "Run",
+ "Docker.Dockerfile.executor": "Run",
+ "Playwright.JoinText Component.executor": "Run",
+ "Playwright.JoinText Component.should merge text pieces with specified join character.executor": "Run",
+ "RunOnceActivity.OpenProjectViewOnStart": "true",
+ "RunOnceActivity.ShowReadmeOnStart": "true",
+ "RunOnceActivity.git.unshallow": "true",
+ "Vitest.compute function (1).executor": "Run",
+ "Vitest.compute function.executor": "Run",
+ "Vitest.mergeText.executor": "Run",
+ "Vitest.mergeText.should merge lines and preserve blank lines when deleteBlankLines is false.executor": "Run",
+ "Vitest.mergeText.should merge lines, preserve blank lines and trailing spaces when both deleteBlankLines and deleteTrailingSpaces are false.executor": "Run",
+ "git-widget-placeholder": "main",
+ "ignore.virus.scanning.warn.message": "true",
+ "kotlin-language-version-configured": "true",
+ "last_opened_file_path": "C:/Users/HP/IdeaProjects/omni-tools/src/components/options",
+ "node.js.detected.package.eslint": "true",
+ "node.js.detected.package.tslint": "true",
+ "node.js.selected.package.eslint": "(autodetect)",
+ "node.js.selected.package.tslint": "(autodetect)",
+ "nodejs_package_manager_path": "npm",
+ "npm.dev.executor": "Run",
+ "npm.lint.executor": "Run",
+ "npm.prebuild.executor": "Run",
+ "npm.script:create:tool.executor": "Run",
+ "npm.test.executor": "Run",
+ "npm.test:e2e.executor": "Run",
+ "npm.test:e2e:run.executor": "Run",
+ "prettierjs.PrettierConfiguration.Package": "C:\\Users\\Ibrahima\\IdeaProjects\\omni-tools\\node_modules\\prettier",
+ "project.structure.last.edited": "Problems",
+ "project.structure.proportion": "0.0",
+ "project.structure.side.proportion": "0.2",
+ "settings.editor.selected.configurable": "settings.typescriptcompiler",
+ "ts.external.directory.path": "C:\\Users\\Ibrahima\\IdeaProjects\\omni-tools\\node_modules\\typescript\\lib",
+ "vue.rearranger.settings.migration": "true"
}
-}]]>
+}
@@ -249,15 +472,8 @@
-
-
-
-
- 1719282009150
-
-
-
- 1719282009150
+
+
@@ -643,7 +859,15 @@
1720914810713
-
+
+
+ 1740267666455
+
+
+
+ 1740267666455
+
+
@@ -687,7 +911,6 @@
-
@@ -712,7 +935,8 @@
-
+
+
diff --git a/package-lock.json b/package-lock.json
index 1247a0e..6fe2eef 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -28,6 +28,7 @@
"react-dom": "^18.3.1",
"react-helmet": "^6.1.0",
"react-router-dom": "^6.23.1",
+ "type-fest": "^4.35.0",
"yup": "^1.4.0"
},
"devDependencies": {
@@ -5728,6 +5729,19 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/globals/node_modules/type-fest": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+ "dev": true,
+ "license": "(MIT OR CC0-1.0)",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/globalthis": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz",
@@ -9351,12 +9365,12 @@
}
},
"node_modules/type-fest": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
- "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
- "dev": true,
+ "version": "4.35.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.35.0.tgz",
+ "integrity": "sha512-2/AwEFQDFEy30iOLjrvHDIH7e4HEWH+f1Yl1bI5XMqzuoCUqwYCdxachgsgv0og/JdVZUhbfjcJAoHj5L1753A==",
+ "license": "(MIT OR CC0-1.0)",
"engines": {
- "node": ">=10"
+ "node": ">=16"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
diff --git a/package.json b/package.json
index 05f56b7..37e3a8b 100644
--- a/package.json
+++ b/package.json
@@ -45,6 +45,7 @@
"react-dom": "^18.3.1",
"react-helmet": "^6.1.0",
"react-router-dom": "^6.23.1",
+ "type-fest": "^4.35.0",
"yup": "^1.4.0"
},
"devDependencies": {
diff --git a/src/components/Hero.tsx b/src/components/Hero.tsx
index c8d5b51..fb74b41 100644
--- a/src/components/Hero.tsx
+++ b/src/components/Hero.tsx
@@ -15,12 +15,12 @@ const exampleTools: { label: string; url: string }[] = [
},
{ label: 'Convert text to morse code', url: '/string/to-morse' },
{ label: 'Change GIF speed', url: '/gif/change-speed' },
- { label: 'Pick a random item', url: '' },
- { label: 'Find and replace text', url: '' },
- { label: 'Convert emoji to image', url: '' },
- { label: 'Split a string', url: '/string/split' },
+ { label: 'Sort a list', url: 'list/sort' },
+ { label: 'Repeat text', url: 'string/repeat' },
+ { label: 'Split a text', url: '/string/split' },
{ label: 'Calculate number sum', url: '/number/sum' },
- { label: 'Pixelate an image', url: '' }
+ { label: 'Shuffle a list', url: 'list/shuffle' },
+ { label: 'Change colors in image', url: 'png/change-colors-in-png' }
];
export default function Hero() {
const [inputValue, setInputValue] = useState('');
diff --git a/src/pages/image/index.ts b/src/pages/tools/image/index.ts
similarity index 100%
rename from src/pages/image/index.ts
rename to src/pages/tools/image/index.ts
diff --git a/src/pages/image/png/change-colors-in-png/change-colors-in-png.e2e.spec.ts b/src/pages/tools/image/png/change-colors-in-png/change-colors-in-png.e2e.spec.ts
similarity index 95%
rename from src/pages/image/png/change-colors-in-png/change-colors-in-png.e2e.spec.ts
rename to src/pages/tools/image/png/change-colors-in-png/change-colors-in-png.e2e.spec.ts
index 38fa772..dcaebc0 100644
--- a/src/pages/image/png/change-colors-in-png/change-colors-in-png.e2e.spec.ts
+++ b/src/pages/tools/image/png/change-colors-in-png/change-colors-in-png.e2e.spec.ts
@@ -2,7 +2,7 @@ import { expect, test } from '@playwright/test';
import { Buffer } from 'buffer';
import path from 'path';
import Jimp from 'jimp';
-import { convertHexToRGBA } from '../../../../utils/color';
+import { convertHexToRGBA } from '../../../../../utils/color';
test.describe('Change colors in png', () => {
test.beforeEach(async ({ page }) => {
diff --git a/src/pages/image/png/change-colors-in-png/index.tsx b/src/pages/tools/image/png/change-colors-in-png/index.tsx
similarity index 91%
rename from src/pages/image/png/change-colors-in-png/index.tsx
rename to src/pages/tools/image/png/change-colors-in-png/index.tsx
index 74bd91a..816bdc9 100644
--- a/src/pages/image/png/change-colors-in-png/index.tsx
+++ b/src/pages/tools/image/png/change-colors-in-png/index.tsx
@@ -1,13 +1,13 @@
import { Box } from '@mui/material';
import React, { useState } from 'react';
import * as Yup from 'yup';
-import ToolFileInput from '../../../../components/input/ToolFileInput';
-import ToolFileResult from '../../../../components/result/ToolFileResult';
-import ToolOptions from '../../../../components/options/ToolOptions';
-import ColorSelector from '../../../../components/options/ColorSelector';
+import ToolFileInput from '@components/input/ToolFileInput';
+import ToolFileResult from '@components/result/ToolFileResult';
+import ToolOptions from '@components/options/ToolOptions';
+import ColorSelector from '@components/options/ColorSelector';
import Color from 'color';
import TextFieldWithDesc from 'components/options/TextFieldWithDesc';
-import ToolInputAndResult from '../../../../components/ToolInputAndResult';
+import ToolInputAndResult from '@components/ToolInputAndResult';
import { areColorsSimilar } from 'utils/color';
const initialValues = {
diff --git a/src/pages/image/png/change-colors-in-png/meta.ts b/src/pages/tools/image/png/change-colors-in-png/meta.ts
similarity index 100%
rename from src/pages/image/png/change-colors-in-png/meta.ts
rename to src/pages/tools/image/png/change-colors-in-png/meta.ts
diff --git a/src/pages/image/png/change-colors-in-png/test.png b/src/pages/tools/image/png/change-colors-in-png/test.png
similarity index 100%
rename from src/pages/image/png/change-colors-in-png/test.png
rename to src/pages/tools/image/png/change-colors-in-png/test.png
diff --git a/src/pages/image/png/convert-jgp-to-png/convert-jgp-to-png.e2e.spec.ts b/src/pages/tools/image/png/convert-jgp-to-png/convert-jgp-to-png.e2e.spec.ts
similarity index 100%
rename from src/pages/image/png/convert-jgp-to-png/convert-jgp-to-png.e2e.spec.ts
rename to src/pages/tools/image/png/convert-jgp-to-png/convert-jgp-to-png.e2e.spec.ts
diff --git a/src/pages/image/png/convert-jgp-to-png/index.tsx b/src/pages/tools/image/png/convert-jgp-to-png/index.tsx
similarity index 100%
rename from src/pages/image/png/convert-jgp-to-png/index.tsx
rename to src/pages/tools/image/png/convert-jgp-to-png/index.tsx
diff --git a/src/pages/image/png/convert-jgp-to-png/meta.ts b/src/pages/tools/image/png/convert-jgp-to-png/meta.ts
similarity index 100%
rename from src/pages/image/png/convert-jgp-to-png/meta.ts
rename to src/pages/tools/image/png/convert-jgp-to-png/meta.ts
diff --git a/src/pages/image/png/convert-jgp-to-png/test.jpg b/src/pages/tools/image/png/convert-jgp-to-png/test.jpg
similarity index 100%
rename from src/pages/image/png/convert-jgp-to-png/test.jpg
rename to src/pages/tools/image/png/convert-jgp-to-png/test.jpg
diff --git a/src/pages/image/png/create-transparent/create-transparent.e2e.spec.ts b/src/pages/tools/image/png/create-transparent/create-transparent.e2e.spec.ts
similarity index 100%
rename from src/pages/image/png/create-transparent/create-transparent.e2e.spec.ts
rename to src/pages/tools/image/png/create-transparent/create-transparent.e2e.spec.ts
diff --git a/src/pages/image/png/create-transparent/index.tsx b/src/pages/tools/image/png/create-transparent/index.tsx
similarity index 90%
rename from src/pages/image/png/create-transparent/index.tsx
rename to src/pages/tools/image/png/create-transparent/index.tsx
index 098260b..9021c58 100644
--- a/src/pages/image/png/create-transparent/index.tsx
+++ b/src/pages/tools/image/png/create-transparent/index.tsx
@@ -1,13 +1,13 @@
import { Box } from '@mui/material';
import React, { useState } from 'react';
import * as Yup from 'yup';
-import ToolFileInput from '../../../../components/input/ToolFileInput';
-import ToolFileResult from '../../../../components/result/ToolFileResult';
-import ToolOptions from '../../../../components/options/ToolOptions';
-import ColorSelector from '../../../../components/options/ColorSelector';
+import ToolFileInput from '@components/input/ToolFileInput';
+import ToolFileResult from '@components/result/ToolFileResult';
+import ToolOptions from '@components/options/ToolOptions';
+import ColorSelector from '@components/options/ColorSelector';
import Color from 'color';
import TextFieldWithDesc from 'components/options/TextFieldWithDesc';
-import ToolInputAndResult from '../../../../components/ToolInputAndResult';
+import ToolInputAndResult from '@components/ToolInputAndResult';
import { areColorsSimilar } from 'utils/color';
const initialValues = {
diff --git a/src/pages/image/png/create-transparent/meta.ts b/src/pages/tools/image/png/create-transparent/meta.ts
similarity index 100%
rename from src/pages/image/png/create-transparent/meta.ts
rename to src/pages/tools/image/png/create-transparent/meta.ts
diff --git a/src/pages/image/png/create-transparent/test.png b/src/pages/tools/image/png/create-transparent/test.png
similarity index 100%
rename from src/pages/image/png/create-transparent/test.png
rename to src/pages/tools/image/png/create-transparent/test.png
diff --git a/src/pages/image/png/index.ts b/src/pages/tools/image/png/index.ts
similarity index 100%
rename from src/pages/image/png/index.ts
rename to src/pages/tools/image/png/index.ts
diff --git a/src/pages/list/duplicate/duplicate.service.test.ts b/src/pages/tools/list/duplicate/duplicate.service.test.ts
similarity index 100%
rename from src/pages/list/duplicate/duplicate.service.test.ts
rename to src/pages/tools/list/duplicate/duplicate.service.test.ts
diff --git a/src/pages/list/duplicate/index.tsx b/src/pages/tools/list/duplicate/index.tsx
similarity index 100%
rename from src/pages/list/duplicate/index.tsx
rename to src/pages/tools/list/duplicate/index.tsx
diff --git a/src/pages/list/duplicate/meta.ts b/src/pages/tools/list/duplicate/meta.ts
similarity index 100%
rename from src/pages/list/duplicate/meta.ts
rename to src/pages/tools/list/duplicate/meta.ts
diff --git a/src/pages/list/duplicate/service.ts b/src/pages/tools/list/duplicate/service.ts
similarity index 100%
rename from src/pages/list/duplicate/service.ts
rename to src/pages/tools/list/duplicate/service.ts
diff --git a/src/pages/list/find-most-popular/find-most-popular.service.test.ts b/src/pages/tools/list/find-most-popular/find-most-popular.service.test.ts
similarity index 100%
rename from src/pages/list/find-most-popular/find-most-popular.service.test.ts
rename to src/pages/tools/list/find-most-popular/find-most-popular.service.test.ts
diff --git a/src/pages/list/find-most-popular/index.tsx b/src/pages/tools/list/find-most-popular/index.tsx
similarity index 89%
rename from src/pages/list/find-most-popular/index.tsx
rename to src/pages/tools/list/find-most-popular/index.tsx
index 7c84847..c3a746d 100644
--- a/src/pages/list/find-most-popular/index.tsx
+++ b/src/pages/tools/list/find-most-popular/index.tsx
@@ -1,19 +1,19 @@
import { Box } from '@mui/material';
import React, { useState } from 'react';
-import ToolTextInput from '../../../components/input/ToolTextInput';
-import ToolTextResult from '../../../components/result/ToolTextResult';
-import ToolOptions from '../../../components/options/ToolOptions';
+import ToolTextInput from '@components/input/ToolTextInput';
+import ToolTextResult from '@components/result/ToolTextResult';
+import ToolOptions from '@components/options/ToolOptions';
import {
DisplayFormat,
SortingMethod,
SplitOperatorType,
TopItemsList
} from './service';
-import ToolInputAndResult from '../../../components/ToolInputAndResult';
-import SimpleRadio from '../../../components/options/SimpleRadio';
-import TextFieldWithDesc from '../../../components/options/TextFieldWithDesc';
-import CheckboxWithDesc from '../../../components/options/CheckboxWithDesc';
-import SelectWithDesc from '../../../components/options/SelectWithDesc';
+import ToolInputAndResult from '@components/ToolInputAndResult';
+import SimpleRadio from '@components/options/SimpleRadio';
+import TextFieldWithDesc from '@components/options/TextFieldWithDesc';
+import CheckboxWithDesc from '@components/options/CheckboxWithDesc';
+import SelectWithDesc from '@components/options/SelectWithDesc';
const initialValues = {
splitSeparatorType: 'symbol' as SplitOperatorType,
diff --git a/src/pages/list/find-most-popular/meta.ts b/src/pages/tools/list/find-most-popular/meta.ts
similarity index 100%
rename from src/pages/list/find-most-popular/meta.ts
rename to src/pages/tools/list/find-most-popular/meta.ts
diff --git a/src/pages/list/find-most-popular/service.ts b/src/pages/tools/list/find-most-popular/service.ts
similarity index 100%
rename from src/pages/list/find-most-popular/service.ts
rename to src/pages/tools/list/find-most-popular/service.ts
diff --git a/src/pages/list/find-unique/find-unique.service.test.ts b/src/pages/tools/list/find-unique/find-unique.service.test.ts
similarity index 100%
rename from src/pages/list/find-unique/find-unique.service.test.ts
rename to src/pages/tools/list/find-unique/find-unique.service.test.ts
diff --git a/src/pages/list/find-unique/index.tsx b/src/pages/tools/list/find-unique/index.tsx
similarity index 90%
rename from src/pages/list/find-unique/index.tsx
rename to src/pages/tools/list/find-unique/index.tsx
index c5a65dd..d18259d 100644
--- a/src/pages/list/find-unique/index.tsx
+++ b/src/pages/tools/list/find-unique/index.tsx
@@ -1,13 +1,13 @@
import { Box } from '@mui/material';
import React, { useState } from 'react';
-import ToolTextInput from '../../../components/input/ToolTextInput';
-import ToolTextResult from '../../../components/result/ToolTextResult';
-import ToolOptions from '../../../components/options/ToolOptions';
+import ToolTextInput from '@components/input/ToolTextInput';
+import ToolTextResult from '@components/result/ToolTextResult';
+import ToolOptions from '@components/options/ToolOptions';
import { findUniqueCompute, SplitOperatorType } from './service';
-import ToolInputAndResult from '../../../components/ToolInputAndResult';
-import SimpleRadio from '../../../components/options/SimpleRadio';
-import TextFieldWithDesc from '../../../components/options/TextFieldWithDesc';
-import CheckboxWithDesc from '../../../components/options/CheckboxWithDesc';
+import ToolInputAndResult from '@components/ToolInputAndResult';
+import SimpleRadio from '@components/options/SimpleRadio';
+import TextFieldWithDesc from '@components/options/TextFieldWithDesc';
+import CheckboxWithDesc from '@components/options/CheckboxWithDesc';
const initialValues = {
splitOperatorType: 'symbol' as SplitOperatorType,
diff --git a/src/pages/list/find-unique/meta.ts b/src/pages/tools/list/find-unique/meta.ts
similarity index 100%
rename from src/pages/list/find-unique/meta.ts
rename to src/pages/tools/list/find-unique/meta.ts
diff --git a/src/pages/list/find-unique/service.ts b/src/pages/tools/list/find-unique/service.ts
similarity index 100%
rename from src/pages/list/find-unique/service.ts
rename to src/pages/tools/list/find-unique/service.ts
diff --git a/src/pages/list/group/group.service.test.ts b/src/pages/tools/list/group/group.service.test.ts
similarity index 100%
rename from src/pages/list/group/group.service.test.ts
rename to src/pages/tools/list/group/group.service.test.ts
diff --git a/src/pages/list/group/index.tsx b/src/pages/tools/list/group/index.tsx
similarity index 90%
rename from src/pages/list/group/index.tsx
rename to src/pages/tools/list/group/index.tsx
index b64875f..23c9576 100644
--- a/src/pages/list/group/index.tsx
+++ b/src/pages/tools/list/group/index.tsx
@@ -1,14 +1,14 @@
import { Box } from '@mui/material';
import React, { useState } from 'react';
-import ToolTextInput from '../../../components/input/ToolTextInput';
-import ToolTextResult from '../../../components/result/ToolTextResult';
-import ToolOptions from '../../../components/options/ToolOptions';
+import ToolTextInput from '@components/input/ToolTextInput';
+import ToolTextResult from '@components/result/ToolTextResult';
+import ToolOptions from '@components/options/ToolOptions';
import { groupList, SplitOperatorType } from './service';
-import ToolInputAndResult from '../../../components/ToolInputAndResult';
-import SimpleRadio from '../../../components/options/SimpleRadio';
-import TextFieldWithDesc from '../../../components/options/TextFieldWithDesc';
-import CheckboxWithDesc from '../../../components/options/CheckboxWithDesc';
-import { formatNumber } from '../../../utils/number';
+import ToolInputAndResult from '@components/ToolInputAndResult';
+import SimpleRadio from '@components/options/SimpleRadio';
+import TextFieldWithDesc from '@components/options/TextFieldWithDesc';
+import CheckboxWithDesc from '@components/options/CheckboxWithDesc';
+import { formatNumber } from '../../../../utils/number';
const initialValues = {
splitOperatorType: 'symbol' as SplitOperatorType,
diff --git a/src/pages/list/group/meta.ts b/src/pages/tools/list/group/meta.ts
similarity index 100%
rename from src/pages/list/group/meta.ts
rename to src/pages/tools/list/group/meta.ts
diff --git a/src/pages/list/group/service.ts b/src/pages/tools/list/group/service.ts
similarity index 100%
rename from src/pages/list/group/service.ts
rename to src/pages/tools/list/group/service.ts
diff --git a/src/pages/list/index.ts b/src/pages/tools/list/index.ts
similarity index 100%
rename from src/pages/list/index.ts
rename to src/pages/tools/list/index.ts
diff --git a/src/pages/list/reverse/index.tsx b/src/pages/tools/list/reverse/index.tsx
similarity index 86%
rename from src/pages/list/reverse/index.tsx
rename to src/pages/tools/list/reverse/index.tsx
index 7a0dcd4..ba1ea79 100644
--- a/src/pages/list/reverse/index.tsx
+++ b/src/pages/tools/list/reverse/index.tsx
@@ -1,12 +1,12 @@
import { Box } from '@mui/material';
import React, { useState } from 'react';
-import ToolTextInput from '../../../components/input/ToolTextInput';
-import ToolTextResult from '../../../components/result/ToolTextResult';
-import ToolOptions from '../../../components/options/ToolOptions';
+import ToolTextInput from '@components/input/ToolTextInput';
+import ToolTextResult from '@components/result/ToolTextResult';
+import ToolOptions from '@components/options/ToolOptions';
import { reverseList, SplitOperatorType } from './service';
-import ToolInputAndResult from '../../../components/ToolInputAndResult';
-import SimpleRadio from '../../../components/options/SimpleRadio';
-import TextFieldWithDesc from '../../../components/options/TextFieldWithDesc';
+import ToolInputAndResult from '@components/ToolInputAndResult';
+import SimpleRadio from '@components/options/SimpleRadio';
+import TextFieldWithDesc from '@components/options/TextFieldWithDesc';
const initialValues = {
splitOperatorType: 'symbol' as SplitOperatorType,
diff --git a/src/pages/list/reverse/meta.ts b/src/pages/tools/list/reverse/meta.ts
similarity index 100%
rename from src/pages/list/reverse/meta.ts
rename to src/pages/tools/list/reverse/meta.ts
diff --git a/src/pages/list/reverse/reverse.service.test.ts b/src/pages/tools/list/reverse/reverse.service.test.ts
similarity index 100%
rename from src/pages/list/reverse/reverse.service.test.ts
rename to src/pages/tools/list/reverse/reverse.service.test.ts
diff --git a/src/pages/list/reverse/service.ts b/src/pages/tools/list/reverse/service.ts
similarity index 100%
rename from src/pages/list/reverse/service.ts
rename to src/pages/tools/list/reverse/service.ts
diff --git a/src/pages/list/rotate/index.tsx b/src/pages/tools/list/rotate/index.tsx
similarity index 89%
rename from src/pages/list/rotate/index.tsx
rename to src/pages/tools/list/rotate/index.tsx
index 875b7f4..bca71d6 100644
--- a/src/pages/list/rotate/index.tsx
+++ b/src/pages/tools/list/rotate/index.tsx
@@ -1,13 +1,13 @@
import { Box } from '@mui/material';
import React, { useState } from 'react';
-import ToolTextInput from '../../../components/input/ToolTextInput';
-import ToolTextResult from '../../../components/result/ToolTextResult';
-import ToolOptions from '../../../components/options/ToolOptions';
+import ToolTextInput from '@components/input/ToolTextInput';
+import ToolTextResult from '@components/result/ToolTextResult';
+import ToolOptions from '@components/options/ToolOptions';
import { rotateList, SplitOperatorType } from './service';
-import ToolInputAndResult from '../../../components/ToolInputAndResult';
-import SimpleRadio from '../../../components/options/SimpleRadio';
-import TextFieldWithDesc from '../../../components/options/TextFieldWithDesc';
-import { formatNumber } from '../../../utils/number';
+import ToolInputAndResult from '@components/ToolInputAndResult';
+import SimpleRadio from '@components/options/SimpleRadio';
+import TextFieldWithDesc from '@components/options/TextFieldWithDesc';
+import { formatNumber } from '../../../../utils/number';
const initialValues = {
splitOperatorType: 'symbol' as SplitOperatorType,
diff --git a/src/pages/list/rotate/meta.ts b/src/pages/tools/list/rotate/meta.ts
similarity index 100%
rename from src/pages/list/rotate/meta.ts
rename to src/pages/tools/list/rotate/meta.ts
diff --git a/src/pages/list/rotate/rotate.service.test.ts b/src/pages/tools/list/rotate/rotate.service.test.ts
similarity index 100%
rename from src/pages/list/rotate/rotate.service.test.ts
rename to src/pages/tools/list/rotate/rotate.service.test.ts
diff --git a/src/pages/list/rotate/service.ts b/src/pages/tools/list/rotate/service.ts
similarity index 100%
rename from src/pages/list/rotate/service.ts
rename to src/pages/tools/list/rotate/service.ts
diff --git a/src/pages/list/shuffle/index.tsx b/src/pages/tools/list/shuffle/index.tsx
similarity index 87%
rename from src/pages/list/shuffle/index.tsx
rename to src/pages/tools/list/shuffle/index.tsx
index 7869bdd..9c07d22 100644
--- a/src/pages/list/shuffle/index.tsx
+++ b/src/pages/tools/list/shuffle/index.tsx
@@ -1,13 +1,13 @@
import { Box } from '@mui/material';
import React, { useState } from 'react';
-import ToolTextInput from '../../../components/input/ToolTextInput';
-import ToolTextResult from '../../../components/result/ToolTextResult';
-import ToolOptions from '../../../components/options/ToolOptions';
+import ToolTextInput from '@components/input/ToolTextInput';
+import ToolTextResult from '@components/result/ToolTextResult';
+import ToolOptions from '@components/options/ToolOptions';
import { shuffleList, SplitOperatorType } from './service';
-import ToolInputAndResult from '../../../components/ToolInputAndResult';
-import SimpleRadio from '../../../components/options/SimpleRadio';
-import TextFieldWithDesc from '../../../components/options/TextFieldWithDesc';
-import { isNumber } from '../../../utils/string';
+import ToolInputAndResult from '@components/ToolInputAndResult';
+import SimpleRadio from '@components/options/SimpleRadio';
+import TextFieldWithDesc from '@components/options/TextFieldWithDesc';
+import { isNumber } from '../../../../utils/string';
const initialValues = {
splitOperatorType: 'symbol' as SplitOperatorType,
diff --git a/src/pages/list/shuffle/meta.ts b/src/pages/tools/list/shuffle/meta.ts
similarity index 100%
rename from src/pages/list/shuffle/meta.ts
rename to src/pages/tools/list/shuffle/meta.ts
diff --git a/src/pages/list/shuffle/service.ts b/src/pages/tools/list/shuffle/service.ts
similarity index 100%
rename from src/pages/list/shuffle/service.ts
rename to src/pages/tools/list/shuffle/service.ts
diff --git a/src/pages/list/shuffle/shuffle.service.test.ts b/src/pages/tools/list/shuffle/shuffle.service.test.ts
similarity index 100%
rename from src/pages/list/shuffle/shuffle.service.test.ts
rename to src/pages/tools/list/shuffle/shuffle.service.test.ts
diff --git a/src/pages/list/sort/index.tsx b/src/pages/tools/list/sort/index.tsx
similarity index 89%
rename from src/pages/list/sort/index.tsx
rename to src/pages/tools/list/sort/index.tsx
index 8d18237..46b7df4 100644
--- a/src/pages/list/sort/index.tsx
+++ b/src/pages/tools/list/sort/index.tsx
@@ -1,14 +1,14 @@
import { Box } from '@mui/material';
import React, { useState } from 'react';
-import ToolTextInput from '../../../components/input/ToolTextInput';
-import ToolTextResult from '../../../components/result/ToolTextResult';
-import ToolOptions from '../../../components/options/ToolOptions';
+import ToolTextInput from '@components/input/ToolTextInput';
+import ToolTextResult from '@components/result/ToolTextResult';
+import ToolOptions from '@components/options/ToolOptions';
import { Sort, SortingMethod, SplitOperatorType } from './service';
-import ToolInputAndResult from '../../../components/ToolInputAndResult';
-import SimpleRadio from '../../../components/options/SimpleRadio';
-import TextFieldWithDesc from '../../../components/options/TextFieldWithDesc';
-import CheckboxWithDesc from '../../../components/options/CheckboxWithDesc';
-import SelectWithDesc from '../../../components/options/SelectWithDesc';
+import ToolInputAndResult from '@components/ToolInputAndResult';
+import SimpleRadio from '@components/options/SimpleRadio';
+import TextFieldWithDesc from '@components/options/TextFieldWithDesc';
+import CheckboxWithDesc from '@components/options/CheckboxWithDesc';
+import SelectWithDesc from '@components/options/SelectWithDesc';
const initialValues = {
splitSeparatorType: 'symbol' as SplitOperatorType,
diff --git a/src/pages/list/sort/meta.ts b/src/pages/tools/list/sort/meta.ts
similarity index 100%
rename from src/pages/list/sort/meta.ts
rename to src/pages/tools/list/sort/meta.ts
diff --git a/src/pages/list/sort/service.ts b/src/pages/tools/list/sort/service.ts
similarity index 100%
rename from src/pages/list/sort/service.ts
rename to src/pages/tools/list/sort/service.ts
diff --git a/src/pages/list/sort/sort.service.test.ts b/src/pages/tools/list/sort/sort.service.test.ts
similarity index 100%
rename from src/pages/list/sort/sort.service.test.ts
rename to src/pages/tools/list/sort/sort.service.test.ts
diff --git a/src/pages/list/truncate/index.tsx b/src/pages/tools/list/truncate/index.tsx
similarity index 100%
rename from src/pages/list/truncate/index.tsx
rename to src/pages/tools/list/truncate/index.tsx
diff --git a/src/pages/list/truncate/meta.ts b/src/pages/tools/list/truncate/meta.ts
similarity index 100%
rename from src/pages/list/truncate/meta.ts
rename to src/pages/tools/list/truncate/meta.ts
diff --git a/src/pages/list/truncate/service.ts b/src/pages/tools/list/truncate/service.ts
similarity index 100%
rename from src/pages/list/truncate/service.ts
rename to src/pages/tools/list/truncate/service.ts
diff --git a/src/pages/list/truncate/truncate.service.test.ts b/src/pages/tools/list/truncate/truncate.service.test.ts
similarity index 100%
rename from src/pages/list/truncate/truncate.service.test.ts
rename to src/pages/tools/list/truncate/truncate.service.test.ts
diff --git a/src/pages/list/unwrap/index.tsx b/src/pages/tools/list/unwrap/index.tsx
similarity index 100%
rename from src/pages/list/unwrap/index.tsx
rename to src/pages/tools/list/unwrap/index.tsx
diff --git a/src/pages/list/unwrap/meta.ts b/src/pages/tools/list/unwrap/meta.ts
similarity index 100%
rename from src/pages/list/unwrap/meta.ts
rename to src/pages/tools/list/unwrap/meta.ts
diff --git a/src/pages/list/unwrap/service.ts b/src/pages/tools/list/unwrap/service.ts
similarity index 100%
rename from src/pages/list/unwrap/service.ts
rename to src/pages/tools/list/unwrap/service.ts
diff --git a/src/pages/list/unwrap/unwrap.service.test.ts b/src/pages/tools/list/unwrap/unwrap.service.test.ts
similarity index 100%
rename from src/pages/list/unwrap/unwrap.service.test.ts
rename to src/pages/tools/list/unwrap/unwrap.service.test.ts
diff --git a/src/pages/list/wrap/index.tsx b/src/pages/tools/list/wrap/index.tsx
similarity index 100%
rename from src/pages/list/wrap/index.tsx
rename to src/pages/tools/list/wrap/index.tsx
diff --git a/src/pages/list/wrap/meta.ts b/src/pages/tools/list/wrap/meta.ts
similarity index 100%
rename from src/pages/list/wrap/meta.ts
rename to src/pages/tools/list/wrap/meta.ts
diff --git a/src/pages/list/wrap/service.ts b/src/pages/tools/list/wrap/service.ts
similarity index 100%
rename from src/pages/list/wrap/service.ts
rename to src/pages/tools/list/wrap/service.ts
diff --git a/src/pages/list/wrap/wrap.service.test.ts b/src/pages/tools/list/wrap/wrap.service.test.ts
similarity index 100%
rename from src/pages/list/wrap/wrap.service.test.ts
rename to src/pages/tools/list/wrap/wrap.service.test.ts
diff --git a/src/pages/number/generate/generate.service.test.ts b/src/pages/tools/number/generate/generate.service.test.ts
similarity index 100%
rename from src/pages/number/generate/generate.service.test.ts
rename to src/pages/tools/number/generate/generate.service.test.ts
diff --git a/src/pages/number/generate/index.tsx b/src/pages/tools/number/generate/index.tsx
similarity index 88%
rename from src/pages/number/generate/index.tsx
rename to src/pages/tools/number/generate/index.tsx
index 596008e..e643764 100644
--- a/src/pages/number/generate/index.tsx
+++ b/src/pages/tools/number/generate/index.tsx
@@ -1,10 +1,10 @@
import { Box } from '@mui/material';
import React, { useState } from 'react';
-import ToolTextResult from '../../../components/result/ToolTextResult';
-import ToolOptions from '../../../components/options/ToolOptions';
+import ToolTextResult from '@components/result/ToolTextResult';
+import ToolOptions from '@components/options/ToolOptions';
import { listOfIntegers } from './service';
-import ToolInputAndResult from '../../../components/ToolInputAndResult';
-import TextFieldWithDesc from '../../../components/options/TextFieldWithDesc';
+import ToolInputAndResult from '@components/ToolInputAndResult';
+import TextFieldWithDesc from '@components/options/TextFieldWithDesc';
const initialValues = {
firstValue: '1',
diff --git a/src/pages/number/generate/meta.ts b/src/pages/tools/number/generate/meta.ts
similarity index 100%
rename from src/pages/number/generate/meta.ts
rename to src/pages/tools/number/generate/meta.ts
diff --git a/src/pages/number/generate/service.ts b/src/pages/tools/number/generate/service.ts
similarity index 100%
rename from src/pages/number/generate/service.ts
rename to src/pages/tools/number/generate/service.ts
diff --git a/src/pages/number/index.ts b/src/pages/tools/number/index.ts
similarity index 100%
rename from src/pages/number/index.ts
rename to src/pages/tools/number/index.ts
diff --git a/src/pages/number/sum/index.tsx b/src/pages/tools/number/sum/index.tsx
similarity index 86%
rename from src/pages/number/sum/index.tsx
rename to src/pages/tools/number/sum/index.tsx
index 2f2230d..d50dbe1 100644
--- a/src/pages/number/sum/index.tsx
+++ b/src/pages/tools/number/sum/index.tsx
@@ -1,13 +1,13 @@
import { Box } from '@mui/material';
import React, { useState } from 'react';
-import ToolTextInput from '../../../components/input/ToolTextInput';
-import ToolTextResult from '../../../components/result/ToolTextResult';
-import ToolOptions from '../../../components/options/ToolOptions';
+import ToolTextInput from '@components/input/ToolTextInput';
+import ToolTextResult from '@components/result/ToolTextResult';
+import ToolOptions from '@components/options/ToolOptions';
import { compute, NumberExtractionType } from './service';
-import RadioWithTextField from '../../../components/options/RadioWithTextField';
-import SimpleRadio from '../../../components/options/SimpleRadio';
-import CheckboxWithDesc from '../../../components/options/CheckboxWithDesc';
-import ToolInputAndResult from '../../../components/ToolInputAndResult';
+import RadioWithTextField from '@components/options/RadioWithTextField';
+import SimpleRadio from '@components/options/SimpleRadio';
+import CheckboxWithDesc from '@components/options/CheckboxWithDesc';
+import ToolInputAndResult from '@components/ToolInputAndResult';
const initialValues = {
extractionType: 'smart' as NumberExtractionType,
diff --git a/src/pages/number/sum/meta.ts b/src/pages/tools/number/sum/meta.ts
similarity index 100%
rename from src/pages/number/sum/meta.ts
rename to src/pages/tools/number/sum/meta.ts
diff --git a/src/pages/number/sum/service.ts b/src/pages/tools/number/sum/service.ts
similarity index 100%
rename from src/pages/number/sum/service.ts
rename to src/pages/tools/number/sum/service.ts
diff --git a/src/pages/number/sum/sum.service.test.ts b/src/pages/tools/number/sum/sum.service.test.ts
similarity index 100%
rename from src/pages/number/sum/sum.service.test.ts
rename to src/pages/tools/number/sum/sum.service.test.ts
diff --git a/src/pages/string/create-palindrome/create-palindrome.service.test.ts b/src/pages/tools/string/create-palindrome/create-palindrome.service.test.ts
similarity index 100%
rename from src/pages/string/create-palindrome/create-palindrome.service.test.ts
rename to src/pages/tools/string/create-palindrome/create-palindrome.service.test.ts
diff --git a/src/pages/string/create-palindrome/index.tsx b/src/pages/tools/string/create-palindrome/index.tsx
similarity index 100%
rename from src/pages/string/create-palindrome/index.tsx
rename to src/pages/tools/string/create-palindrome/index.tsx
diff --git a/src/pages/string/create-palindrome/meta.ts b/src/pages/tools/string/create-palindrome/meta.ts
similarity index 100%
rename from src/pages/string/create-palindrome/meta.ts
rename to src/pages/tools/string/create-palindrome/meta.ts
diff --git a/src/pages/string/create-palindrome/service.ts b/src/pages/tools/string/create-palindrome/service.ts
similarity index 100%
rename from src/pages/string/create-palindrome/service.ts
rename to src/pages/tools/string/create-palindrome/service.ts
diff --git a/src/pages/string/extract-substring/extract-substring.service.test.ts b/src/pages/tools/string/extract-substring/extract-substring.service.test.ts
similarity index 100%
rename from src/pages/string/extract-substring/extract-substring.service.test.ts
rename to src/pages/tools/string/extract-substring/extract-substring.service.test.ts
diff --git a/src/pages/string/extract-substring/index.tsx b/src/pages/tools/string/extract-substring/index.tsx
similarity index 100%
rename from src/pages/string/extract-substring/index.tsx
rename to src/pages/tools/string/extract-substring/index.tsx
diff --git a/src/pages/string/extract-substring/meta.ts b/src/pages/tools/string/extract-substring/meta.ts
similarity index 100%
rename from src/pages/string/extract-substring/meta.ts
rename to src/pages/tools/string/extract-substring/meta.ts
diff --git a/src/pages/string/extract-substring/service.ts b/src/pages/tools/string/extract-substring/service.ts
similarity index 100%
rename from src/pages/string/extract-substring/service.ts
rename to src/pages/tools/string/extract-substring/service.ts
diff --git a/src/pages/string/index.ts b/src/pages/tools/string/index.ts
similarity index 100%
rename from src/pages/string/index.ts
rename to src/pages/tools/string/index.ts
diff --git a/src/pages/string/join/index.tsx b/src/pages/tools/string/join/index.tsx
similarity index 89%
rename from src/pages/string/join/index.tsx
rename to src/pages/tools/string/join/index.tsx
index 8051a81..f2d6e6f 100644
--- a/src/pages/string/join/index.tsx
+++ b/src/pages/tools/string/join/index.tsx
@@ -1,17 +1,17 @@
import { Box } from '@mui/material';
import React, { useState } from 'react';
import * as Yup from 'yup';
-import ToolTextInput from '../../../components/input/ToolTextInput';
-import ToolTextResult from '../../../components/result/ToolTextResult';
-import ToolOptions from '../../../components/options/ToolOptions';
+import ToolTextInput from '@components/input/ToolTextInput';
+import ToolTextResult from '@components/result/ToolTextResult';
+import ToolOptions from '@components/options/ToolOptions';
import { mergeText } from './service';
-import TextFieldWithDesc from '../../../components/options/TextFieldWithDesc';
-import CheckboxWithDesc from '../../../components/options/CheckboxWithDesc';
-import ToolInputAndResult from '../../../components/ToolInputAndResult';
+import TextFieldWithDesc from '@components/options/TextFieldWithDesc';
+import CheckboxWithDesc from '@components/options/CheckboxWithDesc';
+import ToolInputAndResult from '@components/ToolInputAndResult';
-import ToolInfo from '../../../components/ToolInfo';
-import Separator from '../../../components/Separator';
-import Examples from '../../../components/examples/Examples';
+import ToolInfo from '@components/ToolInfo';
+import Separator from '@components/Separator';
+import Examples from '@components/examples/Examples';
const initialValues = {
joinCharacter: '',
diff --git a/src/pages/string/join/meta.ts b/src/pages/tools/string/join/meta.ts
similarity index 100%
rename from src/pages/string/join/meta.ts
rename to src/pages/tools/string/join/meta.ts
diff --git a/src/pages/string/join/service.ts b/src/pages/tools/string/join/service.ts
similarity index 100%
rename from src/pages/string/join/service.ts
rename to src/pages/tools/string/join/service.ts
diff --git a/src/pages/string/join/string-join.e2e.spec.ts b/src/pages/tools/string/join/string-join.e2e.spec.ts
similarity index 100%
rename from src/pages/string/join/string-join.e2e.spec.ts
rename to src/pages/tools/string/join/string-join.e2e.spec.ts
diff --git a/src/pages/string/join/string-join.service.test.ts b/src/pages/tools/string/join/string-join.service.test.ts
similarity index 100%
rename from src/pages/string/join/string-join.service.test.ts
rename to src/pages/tools/string/join/string-join.service.test.ts
diff --git a/src/pages/string/palindrome/index.tsx b/src/pages/tools/string/palindrome/index.tsx
similarity index 100%
rename from src/pages/string/palindrome/index.tsx
rename to src/pages/tools/string/palindrome/index.tsx
diff --git a/src/pages/string/palindrome/meta.ts b/src/pages/tools/string/palindrome/meta.ts
similarity index 100%
rename from src/pages/string/palindrome/meta.ts
rename to src/pages/tools/string/palindrome/meta.ts
diff --git a/src/pages/string/palindrome/palindrome.service.test.ts b/src/pages/tools/string/palindrome/palindrome.service.test.ts
similarity index 100%
rename from src/pages/string/palindrome/palindrome.service.test.ts
rename to src/pages/tools/string/palindrome/palindrome.service.test.ts
diff --git a/src/pages/string/palindrome/service.ts b/src/pages/tools/string/palindrome/service.ts
similarity index 100%
rename from src/pages/string/palindrome/service.ts
rename to src/pages/tools/string/palindrome/service.ts
diff --git a/src/pages/string/randomize-case/index.tsx b/src/pages/tools/string/randomize-case/index.tsx
similarity index 100%
rename from src/pages/string/randomize-case/index.tsx
rename to src/pages/tools/string/randomize-case/index.tsx
diff --git a/src/pages/string/randomize-case/meta.ts b/src/pages/tools/string/randomize-case/meta.ts
similarity index 100%
rename from src/pages/string/randomize-case/meta.ts
rename to src/pages/tools/string/randomize-case/meta.ts
diff --git a/src/pages/string/randomize-case/randomize-case.service.test.ts b/src/pages/tools/string/randomize-case/randomize-case.service.test.ts
similarity index 100%
rename from src/pages/string/randomize-case/randomize-case.service.test.ts
rename to src/pages/tools/string/randomize-case/randomize-case.service.test.ts
diff --git a/src/pages/string/randomize-case/service.ts b/src/pages/tools/string/randomize-case/service.ts
similarity index 100%
rename from src/pages/string/randomize-case/service.ts
rename to src/pages/tools/string/randomize-case/service.ts
diff --git a/src/pages/string/reverse/index.tsx b/src/pages/tools/string/reverse/index.tsx
similarity index 100%
rename from src/pages/string/reverse/index.tsx
rename to src/pages/tools/string/reverse/index.tsx
diff --git a/src/pages/string/reverse/meta.ts b/src/pages/tools/string/reverse/meta.ts
similarity index 100%
rename from src/pages/string/reverse/meta.ts
rename to src/pages/tools/string/reverse/meta.ts
diff --git a/src/pages/string/reverse/reverse.service.test.ts b/src/pages/tools/string/reverse/reverse.service.test.ts
similarity index 100%
rename from src/pages/string/reverse/reverse.service.test.ts
rename to src/pages/tools/string/reverse/reverse.service.test.ts
diff --git a/src/pages/string/reverse/service.ts b/src/pages/tools/string/reverse/service.ts
similarity index 100%
rename from src/pages/string/reverse/service.ts
rename to src/pages/tools/string/reverse/service.ts
diff --git a/src/pages/string/split/index.tsx b/src/pages/tools/string/split/index.tsx
similarity index 89%
rename from src/pages/string/split/index.tsx
rename to src/pages/tools/string/split/index.tsx
index 2b0951a..1ec62e8 100644
--- a/src/pages/string/split/index.tsx
+++ b/src/pages/tools/string/split/index.tsx
@@ -1,12 +1,12 @@
import { Box } from '@mui/material';
import React, { useState } from 'react';
-import ToolTextInput from '../../../components/input/ToolTextInput';
-import ToolTextResult from '../../../components/result/ToolTextResult';
-import ToolOptions from '../../../components/options/ToolOptions';
+import ToolTextInput from '@components/input/ToolTextInput';
+import ToolTextResult from '@components/result/ToolTextResult';
+import ToolOptions from '@components/options/ToolOptions';
import { compute, SplitOperatorType } from './service';
-import RadioWithTextField from '../../../components/options/RadioWithTextField';
-import TextFieldWithDesc from '../../../components/options/TextFieldWithDesc';
-import ToolInputAndResult from '../../../components/ToolInputAndResult';
+import RadioWithTextField from '@components/options/RadioWithTextField';
+import TextFieldWithDesc from '@components/options/TextFieldWithDesc';
+import ToolInputAndResult from '@components/ToolInputAndResult';
const initialValues = {
splitSeparatorType: 'symbol' as SplitOperatorType,
diff --git a/src/pages/string/split/meta.ts b/src/pages/tools/string/split/meta.ts
similarity index 100%
rename from src/pages/string/split/meta.ts
rename to src/pages/tools/string/split/meta.ts
diff --git a/src/pages/string/split/service.ts b/src/pages/tools/string/split/service.ts
similarity index 100%
rename from src/pages/string/split/service.ts
rename to src/pages/tools/string/split/service.ts
diff --git a/src/pages/string/split/string-split.service.test.ts b/src/pages/tools/string/split/string-split.service.test.ts
similarity index 100%
rename from src/pages/string/split/string-split.service.test.ts
rename to src/pages/tools/string/split/string-split.service.test.ts
diff --git a/src/pages/string/to-morse/index.tsx b/src/pages/tools/string/to-morse/index.tsx
similarity index 82%
rename from src/pages/string/to-morse/index.tsx
rename to src/pages/tools/string/to-morse/index.tsx
index 44c9786..3225da9 100644
--- a/src/pages/string/to-morse/index.tsx
+++ b/src/pages/tools/string/to-morse/index.tsx
@@ -1,11 +1,11 @@
import { Box } from '@mui/material';
import React, { useState } from 'react';
-import ToolTextInput from '../../../components/input/ToolTextInput';
-import ToolTextResult from '../../../components/result/ToolTextResult';
-import ToolOptions from '../../../components/options/ToolOptions';
+import ToolTextInput from '@components/input/ToolTextInput';
+import ToolTextResult from '@components/result/ToolTextResult';
+import ToolOptions from '@components/options/ToolOptions';
import { compute } from './service';
-import TextFieldWithDesc from '../../../components/options/TextFieldWithDesc';
-import ToolInputAndResult from '../../../components/ToolInputAndResult';
+import TextFieldWithDesc from '@components/options/TextFieldWithDesc';
+import ToolInputAndResult from '@components/ToolInputAndResult';
const initialValues = {
dotSymbol: '.',
diff --git a/src/pages/string/to-morse/meta.ts b/src/pages/tools/string/to-morse/meta.ts
similarity index 100%
rename from src/pages/string/to-morse/meta.ts
rename to src/pages/tools/string/to-morse/meta.ts
diff --git a/src/pages/string/to-morse/service.ts b/src/pages/tools/string/to-morse/service.ts
similarity index 100%
rename from src/pages/string/to-morse/service.ts
rename to src/pages/tools/string/to-morse/service.ts
diff --git a/src/pages/string/to-morse/to-morse.service.test.ts b/src/pages/tools/string/to-morse/to-morse.service.test.ts
similarity index 100%
rename from src/pages/string/to-morse/to-morse.service.test.ts
rename to src/pages/tools/string/to-morse/to-morse.service.test.ts
diff --git a/src/pages/string/uppercase/index.tsx b/src/pages/tools/string/uppercase/index.tsx
similarity index 100%
rename from src/pages/string/uppercase/index.tsx
rename to src/pages/tools/string/uppercase/index.tsx
diff --git a/src/pages/string/uppercase/meta.ts b/src/pages/tools/string/uppercase/meta.ts
similarity index 100%
rename from src/pages/string/uppercase/meta.ts
rename to src/pages/tools/string/uppercase/meta.ts
diff --git a/src/pages/string/uppercase/service.ts b/src/pages/tools/string/uppercase/service.ts
similarity index 100%
rename from src/pages/string/uppercase/service.ts
rename to src/pages/tools/string/uppercase/service.ts
diff --git a/src/pages/string/uppercase/uppercase.service.test.ts b/src/pages/tools/string/uppercase/uppercase.service.test.ts
similarity index 100%
rename from src/pages/string/uppercase/uppercase.service.test.ts
rename to src/pages/tools/string/uppercase/uppercase.service.test.ts
diff --git a/src/pages/video/gif/change-speed/index.tsx b/src/pages/tools/video/gif/change-speed/index.tsx
similarity index 92%
rename from src/pages/video/gif/change-speed/index.tsx
rename to src/pages/tools/video/gif/change-speed/index.tsx
index c60600c..7600960 100644
--- a/src/pages/video/gif/change-speed/index.tsx
+++ b/src/pages/tools/video/gif/change-speed/index.tsx
@@ -1,14 +1,14 @@
import { Box } from '@mui/material';
import React, { useState } from 'react';
import * as Yup from 'yup';
-import ToolFileInput from '../../../../components/input/ToolFileInput';
-import ToolFileResult from '../../../../components/result/ToolFileResult';
-import ToolOptions from '../../../../components/options/ToolOptions';
+import ToolFileInput from '@components/input/ToolFileInput';
+import ToolFileResult from '@components/result/ToolFileResult';
+import ToolOptions from '@components/options/ToolOptions';
import TextFieldWithDesc from 'components/options/TextFieldWithDesc';
-import ToolInputAndResult from '../../../../components/ToolInputAndResult';
+import ToolInputAndResult from '@components/ToolInputAndResult';
import Typography from '@mui/material/Typography';
import { FrameOptions, GifReader, GifWriter } from 'omggif';
-import { gifBinaryToFile } from '../../../../utils/gif';
+import { gifBinaryToFile } from '../../../../../utils/gif';
const initialValues = {
newSpeed: 200
diff --git a/src/pages/video/gif/change-speed/meta.ts b/src/pages/tools/video/gif/change-speed/meta.ts
similarity index 100%
rename from src/pages/video/gif/change-speed/meta.ts
rename to src/pages/tools/video/gif/change-speed/meta.ts
diff --git a/src/pages/video/gif/index.ts b/src/pages/tools/video/gif/index.ts
similarity index 100%
rename from src/pages/video/gif/index.ts
rename to src/pages/tools/video/gif/index.ts
diff --git a/src/pages/video/index.ts b/src/pages/tools/video/index.ts
similarity index 100%
rename from src/pages/video/index.ts
rename to src/pages/tools/video/index.ts
diff --git a/src/tools/defineTool.tsx b/src/tools/defineTool.tsx
index 2eb86ca..360a5c7 100644
--- a/src/tools/defineTool.tsx
+++ b/src/tools/defineTool.tsx
@@ -11,8 +11,10 @@ interface ToolOptions {
shortDescription: string;
}
+export type ToolCategory = 'string' | 'png' | 'number' | 'gif' | 'list';
+
export interface DefinedTool {
- type: string;
+ type: ToolCategory;
path: string;
name: string;
description: string;
@@ -23,7 +25,7 @@ export interface DefinedTool {
}
export const defineTool = (
- basePath: string,
+ basePath: ToolCategory,
options: ToolOptions
): DefinedTool => {
const {
diff --git a/src/tools/index.ts b/src/tools/index.ts
index 594a721..1b5e144 100644
--- a/src/tools/index.ts
+++ b/src/tools/index.ts
@@ -1,10 +1,11 @@
-import { stringTools } from '../pages/string';
-import { imageTools } from '../pages/image';
-import { DefinedTool } from './defineTool';
+import { stringTools } from '../pages/tools/string';
+import { imageTools } from '../pages/tools/image';
+import { DefinedTool, ToolCategory } from './defineTool';
import { capitalizeFirstLetter } from '../utils/string';
-import { numberTools } from '../pages/number';
-import { videoTools } from '../pages/video';
-import { listTools } from '../pages/list';
+import { numberTools } from '../pages/tools/number';
+import { videoTools } from '../pages/tools/video';
+import { listTools } from '../pages/tools/list';
+import { Entries } from 'type-fest';
export const tools: DefinedTool[] = [
...imageTools,
@@ -13,9 +14,14 @@ export const tools: DefinedTool[] = [
...videoTools,
...listTools
];
-const categoriesDescriptions: { type: string; value: string }[] = [
+const categoriesConfig: {
+ type: ToolCategory;
+ value: string;
+ title?: string;
+}[] = [
{
type: 'string',
+ title: 'Text',
value:
'Tools for working with text – convert text to images, find and replace text, split text into fragments, join text lines, repeat text, and much more.'
},
@@ -66,20 +72,23 @@ export const getToolsByCategory = (): {
example: { title: string; path: string };
tools: DefinedTool[];
}[] => {
- const grouped: Partial> = Object.groupBy(
- tools,
- ({ type }) => type
+ const groupedByType: Partial> =
+ Object.groupBy(tools, ({ type }) => type);
+ return (Object.entries(groupedByType) as Entries).map(
+ ([type, tools]) => {
+ return {
+ title: `${
+ categoriesConfig.find((config) => config.type === type)?.title ??
+ capitalizeFirstLetter(type)
+ } Tools`,
+ description:
+ categoriesConfig.find((desc) => desc.type === type)?.value ?? '',
+ type,
+ tools: tools ?? [],
+ example: tools
+ ? { title: tools[0].name, path: tools[0].path }
+ : { title: '', path: '' }
+ };
+ }
);
- return Object.entries(grouped).map(([type, tls]) => {
- return {
- title: `${capitalizeFirstLetter(type)} Tools`,
- description:
- categoriesDescriptions.find((desc) => desc.type === type)?.value ?? '',
- type,
- tools: tls ?? [],
- example: tls
- ? { title: tls[0].name, path: tls[0].path }
- : { title: '', path: '' }
- };
- });
};
diff --git a/tsconfig.json b/tsconfig.json
index 9eca3e5..aa0f1e3 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -30,6 +30,9 @@
],
"@assets/*": [
"./assets/*"
+ ],
+ "@components/*": [
+ "./components/*"
]
}
},