From 377dbc3685c19c406fc0b27a1736132be66a6fff Mon Sep 17 00:00:00 2001 From: C043 Date: Mon, 9 Jun 2025 15:25:14 +0200 Subject: [PATCH] Initial commit for new tool video to gif --- src/pages/tools/video/index.ts | 5 +- src/pages/tools/video/video-to-gif/index.tsx | 69 +++++++++++++++++++ src/pages/tools/video/video-to-gif/meta.ts | 12 ++++ src/pages/tools/video/video-to-gif/service.ts | 5 ++ src/pages/tools/video/video-to-gif/types.ts | 3 + .../video-to-gif/video-to-gif.service.test.ts | 6 ++ 6 files changed, 99 insertions(+), 1 deletion(-) create mode 100644 src/pages/tools/video/video-to-gif/index.tsx create mode 100644 src/pages/tools/video/video-to-gif/meta.ts create mode 100644 src/pages/tools/video/video-to-gif/service.ts create mode 100644 src/pages/tools/video/video-to-gif/types.ts create mode 100644 src/pages/tools/video/video-to-gif/video-to-gif.service.test.ts diff --git a/src/pages/tools/video/index.ts b/src/pages/tools/video/index.ts index 99bb8e7..4a7c3b8 100644 --- a/src/pages/tools/video/index.ts +++ b/src/pages/tools/video/index.ts @@ -1,3 +1,4 @@ +import { tool as videoVideoToGif } from './video-to-gif/meta'; import { tool as videoChangeSpeed } from './change-speed/meta'; import { tool as videoFlip } from './flip/meta'; import { rotate } from '../string/rotate/service'; @@ -9,6 +10,7 @@ import { tool as loopVideo } from './loop/meta'; import { tool as flipVideo } from './flip/meta'; import { tool as cropVideo } from './crop-video/meta'; import { tool as changeSpeed } from './change-speed/meta'; +import { tool as videoToGif } from './video-to-gif/meta'; export const videoTools = [ ...gifTools, @@ -18,5 +20,6 @@ export const videoTools = [ loopVideo, flipVideo, cropVideo, - changeSpeed + changeSpeed, + videoToGif ]; diff --git a/src/pages/tools/video/video-to-gif/index.tsx b/src/pages/tools/video/video-to-gif/index.tsx new file mode 100644 index 0000000..86c066b --- /dev/null +++ b/src/pages/tools/video/video-to-gif/index.tsx @@ -0,0 +1,69 @@ +import { Box } from '@mui/material'; +import React, { useState } from 'react'; +import ToolContent from '@components/ToolContent'; +import { ToolComponentProps } from '@tools/defineTool'; +import ToolTextInput from '@components/input/ToolTextInput'; +import ToolTextResult from '@components/result/ToolTextResult'; +import { GetGroupsType } from '@components/options/ToolOptions'; +import { CardExampleType } from '@components/examples/ToolExamples'; +import { main } from './service'; +import { InitialValuesType } from './types'; +import ToolVideoInput from '@components/input/ToolVideoInput'; +import ToolFileResult from '@components/result/ToolFileResult'; + +const initialValues: InitialValuesType = { + // splitSeparator: '\n' +}; + +export default function VideoToGif({ + title, + longDescription +}: ToolComponentProps) { + const [input, setInput] = useState(null); + const [result, setResult] = useState(null); + const [loading, setIsLoading] = useState(false); + + const compute = (values: InitialValuesType, input: File | null) => { + setResult(main(input, values)); + }; + + const getGroups: GetGroupsType | null = ({ + values, + updateField + }) => [ + { + title: 'Example Settings', + component: + } + ]; + + return ( + + } + resultComponent={ + loading ? ( + + ) : ( + + ) + } + initialValues={initialValues} + getGroups={getGroups} + setInput={setInput} + compute={compute} + toolInfo={{ title: `What is a ${title}?`, description: longDescription }} + /> + ); +} diff --git a/src/pages/tools/video/video-to-gif/meta.ts b/src/pages/tools/video/video-to-gif/meta.ts new file mode 100644 index 0000000..06f1f3f --- /dev/null +++ b/src/pages/tools/video/video-to-gif/meta.ts @@ -0,0 +1,12 @@ +import { defineTool } from '@tools/defineTool'; +import { lazy } from 'react'; + +export const tool = defineTool('video', { + name: 'Video to Gif', + path: 'video-to-gif', + icon: 'fluent:gif-16-regular', + description: 'This online utility lets you convert a short video to gif.', + shortDescription: 'Quickly convert a short video to gif', + keywords: ['video', 'to', 'gif', 'convert'], + component: lazy(() => import('./index')) +}); diff --git a/src/pages/tools/video/video-to-gif/service.ts b/src/pages/tools/video/video-to-gif/service.ts new file mode 100644 index 0000000..dabc369 --- /dev/null +++ b/src/pages/tools/video/video-to-gif/service.ts @@ -0,0 +1,5 @@ +import { InitialValuesType } from './types'; + +export function main(input: File, options: InitialValuesType): File { + return input; +} diff --git a/src/pages/tools/video/video-to-gif/types.ts b/src/pages/tools/video/video-to-gif/types.ts new file mode 100644 index 0000000..d4135c9 --- /dev/null +++ b/src/pages/tools/video/video-to-gif/types.ts @@ -0,0 +1,3 @@ +export type InitialValuesType = { + // splitSeparator: string; +}; diff --git a/src/pages/tools/video/video-to-gif/video-to-gif.service.test.ts b/src/pages/tools/video/video-to-gif/video-to-gif.service.test.ts new file mode 100644 index 0000000..50e3c16 --- /dev/null +++ b/src/pages/tools/video/video-to-gif/video-to-gif.service.test.ts @@ -0,0 +1,6 @@ +import { expect, describe, it } from 'vitest'; +// import { main } from './service'; +// +// describe('video-to-gif', () => { +// +// })