mirror of
https://github.com/iib0011/omni-tools.git
synced 2025-11-12 02:52:40 +05:30
fix: misc
This commit is contained in:
parent
035eb2edd1
commit
21c4f44d4e
121 changed files with 987 additions and 837 deletions
316
.idea/workspace.xml
generated
316
.idea/workspace.xml
generated
|
|
@ -4,12 +4,128 @@
|
|||
<option name="autoReloadType" value="SELECTIVE" />
|
||||
</component>
|
||||
<component name="ChangeListManager">
|
||||
<list default="true" id="b30e2810-c4c1-4aad-b134-794e52cc1c7d" name="Changes" comment="docs: edit pdf meta">
|
||||
<list default="true" id="b30e2810-c4c1-4aad-b134-794e52cc1c7d" name="Changes" comment="docs: readme">
|
||||
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/components/ToolContent.tsx" beforeDir="false" afterPath="$PROJECT_DIR$/src/components/ToolContent.tsx" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/components/options/ToolOptions.tsx" beforeDir="false" afterPath="$PROJECT_DIR$/src/components/options/ToolOptions.tsx" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/number/generic-calc/index.tsx" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/number/generic-calc/index.tsx" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/package-lock.json" beforeDir="false" afterPath="$PROJECT_DIR$/package-lock.json" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/package.json" beforeDir="false" afterPath="$PROJECT_DIR$/package.json" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/i18n/index.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/i18n/index.ts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/audio/change-speed/index.tsx" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/audio/change-speed/index.tsx" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/audio/change-speed/meta.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/audio/change-speed/meta.ts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/audio/extract-audio/index.tsx" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/audio/extract-audio/index.tsx" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/audio/extract-audio/meta.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/audio/extract-audio/meta.ts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/csv/change-csv-separator/meta.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/csv/change-csv-separator/meta.ts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/csv/csv-to-json/index.tsx" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/csv/csv-to-json/index.tsx" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/csv/find-incomplete-csv-records/index.tsx" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/csv/find-incomplete-csv-records/index.tsx" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/csv/find-incomplete-csv-records/meta.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/csv/find-incomplete-csv-records/meta.ts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/csv/insert-csv-columns/index.tsx" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/csv/insert-csv-columns/index.tsx" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/image/generic/resize/index.tsx" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/image/generic/resize/index.tsx" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/image/i18n/hi.json" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/image/i18n/hi.json" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/json/escape-json/meta.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/json/escape-json/meta.ts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/json/json-to-xml/meta.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/json/json-to-xml/meta.ts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/json/minify/index.tsx" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/json/minify/index.tsx" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/json/minify/meta.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/json/minify/meta.ts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/json/prettify/index.tsx" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/json/prettify/index.tsx" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/json/prettify/meta.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/json/prettify/meta.ts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/json/stringify/meta.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/json/stringify/meta.ts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/json/tsv-to-json/meta.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/json/tsv-to-json/meta.ts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/json/validateJson/index.tsx" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/json/validateJson/index.tsx" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/json/validateJson/meta.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/json/validateJson/meta.ts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/list/duplicate/index.tsx" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/list/duplicate/index.tsx" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/list/duplicate/meta.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/list/duplicate/meta.ts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/list/find-most-popular/meta.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/list/find-most-popular/meta.ts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/list/find-unique/index.tsx" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/list/find-unique/index.tsx" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/list/find-unique/meta.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/list/find-unique/meta.ts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/list/group/index.tsx" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/list/group/index.tsx" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/list/group/meta.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/list/group/meta.ts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/list/reverse/index.tsx" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/list/reverse/index.tsx" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/list/reverse/meta.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/list/reverse/meta.ts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/list/rotate/meta.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/list/rotate/meta.ts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/list/shuffle/index.tsx" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/list/shuffle/index.tsx" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/list/shuffle/meta.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/list/shuffle/meta.ts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/list/sort/index.tsx" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/list/sort/index.tsx" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/list/sort/meta.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/list/sort/meta.ts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/list/truncate/meta.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/list/truncate/meta.ts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/list/unwrap/meta.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/list/unwrap/meta.ts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/list/wrap/index.tsx" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/list/wrap/index.tsx" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/list/wrap/meta.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/list/wrap/meta.ts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/number/arithmetic-sequence/index.tsx" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/number/arithmetic-sequence/index.tsx" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/number/arithmetic-sequence/meta.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/number/arithmetic-sequence/meta.ts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/number/generate/index.tsx" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/number/generate/index.tsx" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/number/generate/meta.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/number/generate/meta.ts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/number/sum/index.tsx" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/number/sum/index.tsx" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/number/sum/meta.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/number/sum/meta.ts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/pdf/compress-pdf/index.tsx" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/pdf/compress-pdf/index.tsx" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/pdf/compress-pdf/meta.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/pdf/compress-pdf/meta.ts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/pdf/merge-pdf/index.tsx" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/pdf/merge-pdf/index.tsx" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/pdf/merge-pdf/meta.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/pdf/merge-pdf/meta.ts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/pdf/pdf-to-epub/meta.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/pdf/pdf-to-epub/meta.ts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/pdf/protect-pdf/meta.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/pdf/protect-pdf/meta.ts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/pdf/rotate-pdf/index.tsx" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/pdf/rotate-pdf/index.tsx" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/pdf/split-pdf/index.tsx" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/pdf/split-pdf/index.tsx" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/pdf/split-pdf/meta.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/pdf/split-pdf/meta.ts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/string/base64/index.tsx" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/string/base64/index.tsx" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/string/base64/meta.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/string/base64/meta.ts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/string/censor/meta.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/string/censor/meta.ts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/string/create-palindrome/meta.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/string/create-palindrome/meta.ts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/string/extract-substring/meta.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/string/extract-substring/meta.ts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/string/join/index.tsx" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/string/join/index.tsx" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/string/join/meta.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/string/join/meta.ts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/string/palindrome/meta.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/string/palindrome/meta.ts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/string/quote/index.tsx" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/string/quote/index.tsx" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/string/quote/meta.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/string/quote/meta.ts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/string/randomize-case/meta.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/string/randomize-case/meta.ts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/string/remove-duplicate-lines/meta.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/string/remove-duplicate-lines/meta.ts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/string/repeat/index.tsx" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/string/repeat/index.tsx" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/string/repeat/meta.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/string/repeat/meta.ts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/string/reverse/index.tsx" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/string/reverse/index.tsx" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/string/reverse/meta.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/string/reverse/meta.ts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/string/rot13/index.tsx" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/string/rot13/index.tsx" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/string/rotate/index.tsx" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/string/rotate/index.tsx" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/string/split/index.tsx" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/string/split/index.tsx" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/string/split/meta.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/string/split/meta.ts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/string/statistic/index.tsx" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/string/statistic/index.tsx" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/string/statistic/meta.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/string/statistic/meta.ts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/string/text-replacer/index.tsx" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/string/text-replacer/index.tsx" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/string/to-morse/index.tsx" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/string/to-morse/index.tsx" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/string/to-morse/meta.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/string/to-morse/meta.ts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/string/truncate/index.tsx" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/string/truncate/index.tsx" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/string/truncate/meta.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/string/truncate/meta.ts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/string/uppercase/index.tsx" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/string/uppercase/index.tsx" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/string/uppercase/meta.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/string/uppercase/meta.ts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/time/check-leap-years/index.tsx" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/time/check-leap-years/index.tsx" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/time/check-leap-years/meta.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/time/check-leap-years/meta.ts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/time/convert-days-to-hours/index.tsx" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/time/convert-days-to-hours/index.tsx" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/time/convert-days-to-hours/meta.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/time/convert-days-to-hours/meta.ts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/time/convert-hours-to-days/meta.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/time/convert-hours-to-days/meta.ts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/time/convert-seconds-to-time/index.tsx" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/time/convert-seconds-to-time/index.tsx" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/time/convert-seconds-to-time/meta.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/time/convert-seconds-to-time/meta.ts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/time/convert-time-to-seconds/index.tsx" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/time/convert-time-to-seconds/index.tsx" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/time/convert-time-to-seconds/meta.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/time/convert-time-to-seconds/meta.ts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/time/crontab-guru/meta.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/time/crontab-guru/meta.ts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/time/time-between-dates/index.tsx" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/time/time-between-dates/index.tsx" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/time/time-between-dates/meta.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/time/time-between-dates/meta.ts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/time/truncate-clock-time/index.tsx" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/time/truncate-clock-time/index.tsx" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/time/truncate-clock-time/meta.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/time/truncate-clock-time/meta.ts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/video/change-speed/index.tsx" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/video/change-speed/index.tsx" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/video/change-speed/meta.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/video/change-speed/meta.ts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/video/compress/index.tsx" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/video/compress/index.tsx" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/video/compress/meta.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/video/compress/meta.ts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/video/crop-video/index.tsx" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/video/crop-video/index.tsx" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/video/crop-video/meta.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/video/crop-video/meta.ts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/video/flip/index.tsx" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/video/flip/index.tsx" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/video/flip/meta.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/video/flip/meta.ts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/video/gif/change-speed/meta.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/video/gif/change-speed/meta.ts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/video/loop/index.tsx" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/video/loop/index.tsx" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/video/loop/meta.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/video/loop/meta.ts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/video/rotate/index.tsx" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/video/rotate/index.tsx" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/video/rotate/meta.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/video/rotate/meta.ts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/video/trim/index.tsx" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/video/trim/index.tsx" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/video/trim/meta.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/video/trim/meta.ts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/video/video-to-gif/meta.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/video/video-to-gif/meta.ts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/xml/xml-beautifier/index.tsx" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/xml/xml-beautifier/index.tsx" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/xml/xml-beautifier/meta.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/xml/xml-beautifier/meta.ts" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/xml/xml-validator/index.tsx" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/xml/xml-validator/index.tsx" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/src/pages/tools/xml/xml-validator/meta.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/pages/tools/xml/xml-validator/meta.ts" afterDir="false" />
|
||||
</list>
|
||||
<option name="SHOW_DIALOG" value="false" />
|
||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||
|
|
@ -42,171 +158,171 @@
|
|||
"state": "OPEN"
|
||||
}
|
||||
}</component>
|
||||
<component name="GitHubPullRequestState"><![CDATA[{
|
||||
"prStates": [
|
||||
<component name="GitHubPullRequestState">{
|
||||
"prStates": [
|
||||
{
|
||||
"id": {
|
||||
"id": "PR_kwDOMJIfts51PkS9",
|
||||
"number": 22
|
||||
"id": {
|
||||
"id": "PR_kwDOMJIfts51PkS9",
|
||||
"number": 22
|
||||
},
|
||||
"lastSeen": 1741207144695
|
||||
"lastSeen": 1741207144695
|
||||
},
|
||||
{
|
||||
"id": {
|
||||
"id": "PR_kwDOMJIfts6NiNYl",
|
||||
"number": 32
|
||||
"id": {
|
||||
"id": "PR_kwDOMJIfts6NiNYl",
|
||||
"number": 32
|
||||
},
|
||||
"lastSeen": 1741209723869
|
||||
"lastSeen": 1741209723869
|
||||
},
|
||||
{
|
||||
"id": {
|
||||
"id": "PR_kwDOMJIfts6Nheyd",
|
||||
"number": 31
|
||||
"id": {
|
||||
"id": "PR_kwDOMJIfts6Nheyd",
|
||||
"number": 31
|
||||
},
|
||||
"lastSeen": 1741213371410
|
||||
"lastSeen": 1741213371410
|
||||
},
|
||||
{
|
||||
"id": {
|
||||
"id": "PR_kwDOMJIfts6NmRBs",
|
||||
"number": 33
|
||||
"id": {
|
||||
"id": "PR_kwDOMJIfts6NmRBs",
|
||||
"number": 33
|
||||
},
|
||||
"lastSeen": 1741282429036
|
||||
"lastSeen": 1741282429036
|
||||
},
|
||||
{
|
||||
"id": {
|
||||
"id": "PR_kwDOMJIfts5zyFTs",
|
||||
"number": 15
|
||||
"id": {
|
||||
"id": "PR_kwDOMJIfts5zyFTs",
|
||||
"number": 15
|
||||
},
|
||||
"lastSeen": 1741535540953
|
||||
"lastSeen": 1741535540953
|
||||
},
|
||||
{
|
||||
"id": {
|
||||
"id": "PR_kwDOMJIfts6QQB3c",
|
||||
"number": 59
|
||||
"id": {
|
||||
"id": "PR_kwDOMJIfts6QQB3c",
|
||||
"number": 59
|
||||
},
|
||||
"lastSeen": 1743018960900
|
||||
"lastSeen": 1743018960900
|
||||
},
|
||||
{
|
||||
"id": {
|
||||
"id": "PR_kwDOMJIfts6QMPEg",
|
||||
"number": 58
|
||||
"id": {
|
||||
"id": "PR_kwDOMJIfts6QMPEg",
|
||||
"number": 58
|
||||
},
|
||||
"lastSeen": 1743019452983
|
||||
"lastSeen": 1743019452983
|
||||
},
|
||||
{
|
||||
"id": {
|
||||
"id": "PR_kwDOMJIfts6QZvRI",
|
||||
"number": 61
|
||||
"id": {
|
||||
"id": "PR_kwDOMJIfts6QZvRI",
|
||||
"number": 61
|
||||
},
|
||||
"lastSeen": 1743103196866
|
||||
"lastSeen": 1743103196866
|
||||
},
|
||||
{
|
||||
"id": {
|
||||
"id": "PR_kwDOMJIfts6QqPrQ",
|
||||
"number": 73
|
||||
"id": {
|
||||
"id": "PR_kwDOMJIfts6QqPrQ",
|
||||
"number": 73
|
||||
},
|
||||
"lastSeen": 1743265865001
|
||||
"lastSeen": 1743265865001
|
||||
},
|
||||
{
|
||||
"id": {
|
||||
"id": "PR_kwDOMJIfts6Qp5nI",
|
||||
"number": 72
|
||||
"id": {
|
||||
"id": "PR_kwDOMJIfts6Qp5nI",
|
||||
"number": 72
|
||||
},
|
||||
"lastSeen": 1743338472110
|
||||
"lastSeen": 1743338472110
|
||||
},
|
||||
{
|
||||
"id": {
|
||||
"id": "PR_kwDOMJIfts6QsjlS",
|
||||
"number": 76
|
||||
"id": {
|
||||
"id": "PR_kwDOMJIfts6QsjlS",
|
||||
"number": 76
|
||||
},
|
||||
"lastSeen": 1743352150953
|
||||
"lastSeen": 1743352150953
|
||||
},
|
||||
{
|
||||
"id": {
|
||||
"id": "PR_kwDOMJIfts6Q0JBe",
|
||||
"number": 82
|
||||
"id": {
|
||||
"id": "PR_kwDOMJIfts6Q0JBe",
|
||||
"number": 82
|
||||
},
|
||||
"lastSeen": 1743470267269
|
||||
"lastSeen": 1743470267269
|
||||
},
|
||||
{
|
||||
"id": {
|
||||
"id": "PR_kwDOMJIfts6UE9-x",
|
||||
"number": 102
|
||||
"id": {
|
||||
"id": "PR_kwDOMJIfts6UE9-x",
|
||||
"number": 102
|
||||
},
|
||||
"lastSeen": 1747171977348
|
||||
"lastSeen": 1747171977348
|
||||
},
|
||||
{
|
||||
"id": {
|
||||
"id": "PR_kwDOMJIfts6XPua_",
|
||||
"number": 117
|
||||
"id": {
|
||||
"id": "PR_kwDOMJIfts6XPua_",
|
||||
"number": 117
|
||||
},
|
||||
"lastSeen": 1747929835864
|
||||
"lastSeen": 1747929835864
|
||||
},
|
||||
{
|
||||
"id": {
|
||||
"id": "PR_kwDOMJIfts6XY-mZ",
|
||||
"number": 119
|
||||
"id": {
|
||||
"id": "PR_kwDOMJIfts6XY-mZ",
|
||||
"number": 119
|
||||
},
|
||||
"lastSeen": 1748028108508
|
||||
"lastSeen": 1748028108508
|
||||
},
|
||||
{
|
||||
"id": {
|
||||
"id": "PR_kwDOMJIfts6Xdz4n",
|
||||
"number": 120
|
||||
"id": {
|
||||
"id": "PR_kwDOMJIfts6Xdz4n",
|
||||
"number": 120
|
||||
},
|
||||
"lastSeen": 1748282672214
|
||||
"lastSeen": 1748282672214
|
||||
},
|
||||
{
|
||||
"id": {
|
||||
"id": "PR_kwDOMJIfts6X_zxl",
|
||||
"number": 131
|
||||
"id": {
|
||||
"id": "PR_kwDOMJIfts6X_zxl",
|
||||
"number": 131
|
||||
},
|
||||
"lastSeen": 1748881279494
|
||||
"lastSeen": 1748881279494
|
||||
},
|
||||
{
|
||||
"id": {
|
||||
"id": "PR_kwDOMJIfts6bhieT",
|
||||
"number": 152
|
||||
"id": {
|
||||
"id": "PR_kwDOMJIfts6bhieT",
|
||||
"number": 152
|
||||
},
|
||||
"lastSeen": 1751848489082
|
||||
"lastSeen": 1751848489082
|
||||
},
|
||||
{
|
||||
"id": {
|
||||
"id": "PR_kwDOMJIfts6dOyRk",
|
||||
"number": 154
|
||||
"id": {
|
||||
"id": "PR_kwDOMJIfts6dOyRk",
|
||||
"number": 154
|
||||
},
|
||||
"lastSeen": 1751849436454
|
||||
"lastSeen": 1751849436454
|
||||
},
|
||||
{
|
||||
"id": {
|
||||
"id": "PR_kwDOMJIfts6cHjNi",
|
||||
"number": 153
|
||||
"id": {
|
||||
"id": "PR_kwDOMJIfts6cHjNi",
|
||||
"number": 153
|
||||
},
|
||||
"lastSeen": 1751849501498
|
||||
"lastSeen": 1751849501498
|
||||
},
|
||||
{
|
||||
"id": {
|
||||
"id": "PR_kwDOMJIfts6Zs1FN",
|
||||
"number": 145
|
||||
"id": {
|
||||
"id": "PR_kwDOMJIfts6Zs1FN",
|
||||
"number": 145
|
||||
},
|
||||
"lastSeen": 1751849770308
|
||||
"lastSeen": 1751849770308
|
||||
},
|
||||
{
|
||||
"id": {
|
||||
"id": "PR_kwDOMJIfts6bgKi9",
|
||||
"number": 150
|
||||
"id": {
|
||||
"id": "PR_kwDOMJIfts6bgKi9",
|
||||
"number": 150
|
||||
},
|
||||
"lastSeen": 1751850367300
|
||||
"lastSeen": 1751850367300
|
||||
},
|
||||
{
|
||||
"id": {
|
||||
"id": "PR_kwDOMJIfts6eUKC-",
|
||||
"number": 176
|
||||
"id": {
|
||||
"id": "PR_kwDOMJIfts6eUKC-",
|
||||
"number": 176
|
||||
},
|
||||
"lastSeen": 1752158748013
|
||||
"lastSeen": 1752158748013
|
||||
}
|
||||
]
|
||||
}]]></component>
|
||||
}</component>
|
||||
<component name="GithubPullRequestsUISettings">{
|
||||
"selectedUrlAndAccountId": {
|
||||
"url": "https://github.com/iib0011/omni-tools.git",
|
||||
|
|
@ -262,7 +378,7 @@
|
|||
"Vitest.replaceText function (regexp mode).should return the original text when passed an invalid regexp.executor": "Run",
|
||||
"Vitest.replaceText function.executor": "Run",
|
||||
"Vitest.timeBetweenDates.executor": "Run",
|
||||
"git-widget-placeholder": "main",
|
||||
"git-widget-placeholder": "#190 on fork/AshAnand34/en-hi-translation",
|
||||
"ignore.virus.scanning.warn.message": "true",
|
||||
"kotlin-language-version-configured": "true",
|
||||
"last_opened_file_path": "C:/Users/Ibrahima/IdeaProjects/omni-tools/public",
|
||||
|
|
|
|||
67
package-lock.json
generated
67
package-lock.json
generated
|
|
@ -34,10 +34,12 @@
|
|||
"fast-xml-parser": "^5.2.5",
|
||||
"formik": "^2.4.6",
|
||||
"i18next": "^25.3.2",
|
||||
"i18next-locize-backend": "^7.0.4",
|
||||
"jimp": "^0.22.12",
|
||||
"js-quantities": "^1.8.0",
|
||||
"jszip": "^3.10.1",
|
||||
"lint-staged": "^15.4.3",
|
||||
"locize": "^4.0.14",
|
||||
"lodash": "^4.17.21",
|
||||
"mime": "^4.0.6",
|
||||
"morsee": "^1.0.9",
|
||||
|
|
@ -1420,20 +1422,22 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@floating-ui/core": {
|
||||
"version": "1.6.2",
|
||||
"resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.2.tgz",
|
||||
"integrity": "sha512-+2XpQV9LLZeanU4ZevzRnGFg2neDeKHgFLjP6YLW+tly0IvrhqT4u8enLGjLH3qeh85g19xY5rsAusfwTdn5lg==",
|
||||
"version": "1.7.2",
|
||||
"resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.2.tgz",
|
||||
"integrity": "sha512-wNB5ooIKHQc+Kui96jE/n69rHFWAVoxn5CAzL1Xdd8FG03cgY3MLO+GF9U3W737fYDSgPWA6MReKhBQBop6Pcw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@floating-ui/utils": "^0.2.0"
|
||||
"@floating-ui/utils": "^0.2.10"
|
||||
}
|
||||
},
|
||||
"node_modules/@floating-ui/dom": {
|
||||
"version": "1.6.5",
|
||||
"resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.5.tgz",
|
||||
"integrity": "sha512-Nsdud2X65Dz+1RHjAIP0t8z5e2ff/IRbei6BqFrl1urT8sDVzM1HMQ+R0XcU5ceRfyO3I6ayeqIfh+6Wb8LGTw==",
|
||||
"version": "1.7.2",
|
||||
"resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.2.tgz",
|
||||
"integrity": "sha512-7cfaOQuCS27HD7DX+6ib2OrnW+b4ZBwDNnCcT0uTyidcmyWb03FnQqJybDBoCnpdxwBSfA94UAYlRCt7mV+TbA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@floating-ui/core": "^1.0.0",
|
||||
"@floating-ui/utils": "^0.2.0"
|
||||
"@floating-ui/core": "^1.7.2",
|
||||
"@floating-ui/utils": "^0.2.10"
|
||||
}
|
||||
},
|
||||
"node_modules/@floating-ui/react-dom": {
|
||||
|
|
@ -1449,9 +1453,10 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@floating-ui/utils": {
|
||||
"version": "0.2.2",
|
||||
"resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.2.tgz",
|
||||
"integrity": "sha512-J4yDIIthosAsRZ5CPYP/jQvUAQtlZTTD/4suA08/FEnlxqW3sKS9iAhgsa9VYLZ6vDHn/ixJgIqRQPotoBjxIw=="
|
||||
"version": "0.2.10",
|
||||
"resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.10.tgz",
|
||||
"integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@hapi/hoek": {
|
||||
"version": "9.3.0",
|
||||
|
|
@ -4953,6 +4958,15 @@
|
|||
"cronstrue": "bin/cli.js"
|
||||
}
|
||||
},
|
||||
"node_modules/cross-fetch": {
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.1.0.tgz",
|
||||
"integrity": "sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"node-fetch": "^2.7.0"
|
||||
}
|
||||
},
|
||||
"node_modules/cross-spawn": {
|
||||
"version": "7.0.3",
|
||||
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
|
||||
|
|
@ -6764,6 +6778,24 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"node_modules/i18next-locize-backend": {
|
||||
"version": "7.0.4",
|
||||
"resolved": "https://registry.npmjs.org/i18next-locize-backend/-/i18next-locize-backend-7.0.4.tgz",
|
||||
"integrity": "sha512-saRyIQAX0k+YA6XzirU6cyudWDj1W7bGDz/Szq+8OIs3JJnNuMZCADuNgCwmo+dQm9P69bbALymV+9t9ffywBA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"cross-fetch": "4.1.0"
|
||||
}
|
||||
},
|
||||
"node_modules/i18next-subliminal": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/i18next-subliminal/-/i18next-subliminal-1.0.1.tgz",
|
||||
"integrity": "sha512-h3m1oQ8lTaTNNgqmvBXAzFSGoJ0uobUcFW6TJMaWV4QDQ0+YGIih3ZcCX1XouGzK8yyFX13lP+2zAT/k7u4oiQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.27.0"
|
||||
}
|
||||
},
|
||||
"node_modules/iconv-lite": {
|
||||
"version": "0.6.3",
|
||||
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
|
||||
|
|
@ -7933,6 +7965,17 @@
|
|||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"node_modules/locize": {
|
||||
"version": "4.0.14",
|
||||
"resolved": "https://registry.npmjs.org/locize/-/locize-4.0.14.tgz",
|
||||
"integrity": "sha512-4AnM9Hoxm7tgE+LhkdX1cDp+PLnraSruNc/3O/AAFfbmqmqaGdf9TyLwgHd0C9ug6GPRS0RIzXH6wdg5tHMWWw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.23.6",
|
||||
"@floating-ui/dom": "^1.6.13",
|
||||
"i18next-subliminal": "^1.0.1"
|
||||
}
|
||||
},
|
||||
"node_modules/lodash": {
|
||||
"version": "4.17.21",
|
||||
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
|
||||
|
|
|
|||
|
|
@ -51,10 +51,12 @@
|
|||
"fast-xml-parser": "^5.2.5",
|
||||
"formik": "^2.4.6",
|
||||
"i18next": "^25.3.2",
|
||||
"i18next-locize-backend": "^7.0.4",
|
||||
"jimp": "^0.22.12",
|
||||
"js-quantities": "^1.8.0",
|
||||
"jszip": "^3.10.1",
|
||||
"lint-staged": "^15.4.3",
|
||||
"locize": "^4.0.14",
|
||||
"lodash": "^4.17.21",
|
||||
"mime": "^4.0.6",
|
||||
"morsee": "^1.0.9",
|
||||
|
|
|
|||
|
|
@ -24,50 +24,59 @@ import enTime from '../pages/tools/time/i18n/en.json';
|
|||
import hiTime from '../pages/tools/time/i18n/hi.json';
|
||||
import enXml from '../pages/tools/xml/i18n/en.json';
|
||||
import hiXml from '../pages/tools/xml/i18n/hi.json';
|
||||
import Backend from 'i18next-locize-backend';
|
||||
|
||||
const locizeOptions = {
|
||||
projectId: 'e7156a3e-66fb-4035-a0f0-cebf1c63a3ba', // Replace with your Locize project ID
|
||||
apiKey: import.meta.env.LOCIZE_API_KEY, // Replace with your Locize API key
|
||||
referenceLng: 'en',
|
||||
version: 'latest'
|
||||
};
|
||||
// Merge translations for demonstration; in a real app, use namespaces
|
||||
const resources = {
|
||||
en: {
|
||||
translation: {
|
||||
...enGlobal,
|
||||
list: enList,
|
||||
string: enString,
|
||||
csv: enCsv,
|
||||
json: enJson,
|
||||
pdf: enPdf,
|
||||
image: enImage,
|
||||
audio: enAudio,
|
||||
video: enVideo,
|
||||
number: enNumber,
|
||||
time: enTime,
|
||||
xml: enXml
|
||||
}
|
||||
translation: enGlobal,
|
||||
list: enList,
|
||||
string: enString,
|
||||
csv: enCsv,
|
||||
json: enJson,
|
||||
pdf: enPdf,
|
||||
image: enImage,
|
||||
audio: enAudio,
|
||||
video: enVideo,
|
||||
number: enNumber,
|
||||
time: enTime,
|
||||
xml: enXml
|
||||
},
|
||||
hi: {
|
||||
translation: {
|
||||
...hiGlobal,
|
||||
list: hiList,
|
||||
string: hiString,
|
||||
csv: hiCsv,
|
||||
json: hiJson,
|
||||
pdf: hiPdf,
|
||||
image: hiImage,
|
||||
audio: hiAudio,
|
||||
video: hiVideo,
|
||||
number: hiNumber,
|
||||
time: hiTime,
|
||||
xml: hiXml
|
||||
}
|
||||
translation: hiGlobal,
|
||||
list: hiList,
|
||||
string: hiString,
|
||||
csv: hiCsv,
|
||||
json: hiJson,
|
||||
pdf: hiPdf,
|
||||
image: hiImage,
|
||||
audio: hiAudio,
|
||||
video: hiVideo,
|
||||
number: hiNumber,
|
||||
time: hiTime,
|
||||
xml: hiXml
|
||||
}
|
||||
};
|
||||
|
||||
i18n.use(initReactI18next).init({
|
||||
resources,
|
||||
lng: 'en',
|
||||
fallbackLng: 'en',
|
||||
interpolation: {
|
||||
escapeValue: false
|
||||
}
|
||||
});
|
||||
i18n
|
||||
.use(Backend)
|
||||
.use(initReactI18next)
|
||||
.init({
|
||||
resources,
|
||||
lng: 'en',
|
||||
fallbackLng: 'en',
|
||||
interpolation: {
|
||||
escapeValue: false
|
||||
},
|
||||
backend: locizeOptions,
|
||||
saveMissing: true, // Send missing keys to Locize
|
||||
updateMissing: true // Update keys in Locize
|
||||
});
|
||||
|
||||
export default i18n;
|
||||
|
|
|
|||
|
|
@ -51,20 +51,20 @@ export default function ChangeSpeed({
|
|||
updateField
|
||||
}) => [
|
||||
{
|
||||
title: t('audio.changeSpeed.newAudioSpeed'),
|
||||
title: t('audio:changeSpeed.newAudioSpeed'),
|
||||
component: (
|
||||
<Box>
|
||||
<TextFieldWithDesc
|
||||
value={values.newSpeed.toString()}
|
||||
onOwnChange={(val) => updateField('newSpeed', Number(val))}
|
||||
description={t('audio.changeSpeed.speedDescription')}
|
||||
description={t('audio:changeSpeed.speedDescription')}
|
||||
type="number"
|
||||
/>
|
||||
</Box>
|
||||
)
|
||||
},
|
||||
{
|
||||
title: t('audio.changeSpeed.outputFormat'),
|
||||
title: t('audio:changeSpeed.outputFormat'),
|
||||
component: (
|
||||
<Box mt={2}>
|
||||
<RadioGroup
|
||||
|
|
@ -98,19 +98,19 @@ export default function ChangeSpeed({
|
|||
<ToolAudioInput
|
||||
value={input}
|
||||
onChange={setInput}
|
||||
title={t('audio.changeSpeed.inputTitle')}
|
||||
title={t('audio:changeSpeed.inputTitle')}
|
||||
/>
|
||||
}
|
||||
resultComponent={
|
||||
loading ? (
|
||||
<ToolFileResult
|
||||
title={t('audio.changeSpeed.settingSpeed')}
|
||||
title={t('audio:changeSpeed.settingSpeed')}
|
||||
value={null}
|
||||
loading={true}
|
||||
/>
|
||||
) : (
|
||||
<ToolFileResult
|
||||
title={t('audio.changeSpeed.resultTitle')}
|
||||
title={t('audio:changeSpeed.resultTitle')}
|
||||
value={result}
|
||||
extension={result ? result.name.split('.').pop() : undefined}
|
||||
/>
|
||||
|
|
@ -121,7 +121,7 @@ export default function ChangeSpeed({
|
|||
setInput={setInput}
|
||||
compute={compute}
|
||||
toolInfo={{
|
||||
title: t('audio.changeSpeed.toolInfo.title', { title }),
|
||||
title: t('audio:changeSpeed.toolInfo.title', { title }),
|
||||
description: longDescription
|
||||
}}
|
||||
/>
|
||||
|
|
|
|||
|
|
@ -22,8 +22,8 @@ export const tool = defineTool('audio', {
|
|||
'This tool allows you to change the playback speed of audio files. You can speed up or slow down audio while maintaining the original pitch. Useful for podcasts, music, or any audio content where you want to adjust the playback speed.',
|
||||
component: lazy(() => import('./index')),
|
||||
i18n: {
|
||||
name: 'audio.changeSpeed.name',
|
||||
description: 'audio.changeSpeed.description',
|
||||
shortDescription: 'audio.changeSpeed.shortDescription'
|
||||
name: 'audio:changeSpeed.title',
|
||||
description: 'audio:changeSpeed.description',
|
||||
shortDescription: 'audio:changeSpeed.shortDescription'
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ export default function ExtractAudio({
|
|||
}) => {
|
||||
return [
|
||||
{
|
||||
title: t('audio.extractAudio.outputFormat'),
|
||||
title: t('audio:extractAudio.outputFormat'),
|
||||
component: (
|
||||
<Box>
|
||||
<SelectWithDesc
|
||||
|
|
@ -42,7 +42,7 @@ export default function ExtractAudio({
|
|||
{ label: 'MP3', value: 'mp3' },
|
||||
{ label: 'WAV', value: 'wav' }
|
||||
]}
|
||||
description={t('audio.extractAudio.outputFormatDescription')}
|
||||
description={t('audio:extractAudio.outputFormatDescription')}
|
||||
/>
|
||||
</Box>
|
||||
)
|
||||
|
|
@ -71,19 +71,19 @@ export default function ExtractAudio({
|
|||
<ToolVideoInput
|
||||
value={file}
|
||||
onChange={setFile}
|
||||
title={t('audio.extractAudio.inputTitle')}
|
||||
title={t('audio:extractAudio.inputTitle')}
|
||||
/>
|
||||
}
|
||||
resultComponent={
|
||||
loading ? (
|
||||
<ToolFileResult
|
||||
title={t('audio.extractAudio.extractingAudio')}
|
||||
title={t('audio:extractAudio.extractingAudio')}
|
||||
value={null}
|
||||
loading={true}
|
||||
/>
|
||||
) : (
|
||||
<ToolFileResult
|
||||
title={t('audio.extractAudio.resultTitle')}
|
||||
title={t('audio:extractAudio.resultTitle')}
|
||||
value={audioFile}
|
||||
/>
|
||||
)
|
||||
|
|
@ -92,7 +92,7 @@ export default function ExtractAudio({
|
|||
getGroups={getGroups}
|
||||
compute={compute}
|
||||
toolInfo={{
|
||||
title: t('audio.extractAudio.toolInfo.title', { title }),
|
||||
title: t('audio:extractAudio.toolInfo.title', { title }),
|
||||
description: longDescription
|
||||
}}
|
||||
setInput={setFile}
|
||||
|
|
|
|||
|
|
@ -24,8 +24,8 @@ export const tool = defineTool('audio', {
|
|||
'This tool allows you to extract the audio track from a video file (such as MP4, MOV, AVI, etc.) and save it as a standalone audio file in your preferred format (AAC, MP3, or WAV). Useful for podcasts, music, or any scenario where you need just the audio from a video.',
|
||||
component: lazy(() => import('./index')),
|
||||
i18n: {
|
||||
name: 'audio.extractAudio.name',
|
||||
description: 'audio.extractAudio.description',
|
||||
shortDescription: 'audio.extractAudio.shortDescription'
|
||||
name: 'audio:extractAudio.title',
|
||||
description: 'audio:extractAudio.description',
|
||||
shortDescription: 'audio:extractAudio.shortDescription'
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -11,8 +11,8 @@ export const tool = defineTool('csv', {
|
|||
keywords: ['csv', 'separator', 'delimiter', 'change'],
|
||||
component: lazy(() => import('./index')),
|
||||
i18n: {
|
||||
name: 'csv.changeCsvSeparator.name',
|
||||
description: 'csv.changeCsvSeparator.description',
|
||||
shortDescription: 'csv.changeCsvSeparator.shortDescription'
|
||||
name: 'csv:changeCsvSeparator.title',
|
||||
description: 'csv:changeCsvSeparator.description',
|
||||
shortDescription: 'csv:changeCsvSeparator.shortDescription'
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -149,35 +149,35 @@ export default function CsvToJson({ title }: ToolComponentProps) {
|
|||
exampleCards={exampleCards}
|
||||
inputComponent={
|
||||
<ToolTextInput
|
||||
title={t('csv.csvToJson.inputTitle')}
|
||||
title={t('csv:csvToJson.inputTitle')}
|
||||
value={input}
|
||||
onChange={setInput}
|
||||
/>
|
||||
}
|
||||
resultComponent={
|
||||
<ToolTextResult
|
||||
title={t('csv.csvToJson.resultTitle')}
|
||||
title={t('csv:csvToJson.resultTitle')}
|
||||
value={result}
|
||||
extension={'json'}
|
||||
/>
|
||||
}
|
||||
getGroups={({ values, updateField }) => [
|
||||
{
|
||||
title: t('csv.csvToJson.inputCsvFormat'),
|
||||
title: t('csv:csvToJson.inputCsvFormat'),
|
||||
component: (
|
||||
<Box>
|
||||
<TextFieldWithDesc
|
||||
description={t('csv.csvToJson.columnSeparator')}
|
||||
description={t('csv:csvToJson.columnSeparator')}
|
||||
value={values.delimiter}
|
||||
onOwnChange={(val) => updateField('delimiter', val)}
|
||||
/>
|
||||
<TextFieldWithDesc
|
||||
description={t('csv.csvToJson.fieldQuote')}
|
||||
description={t('csv:csvToJson.fieldQuote')}
|
||||
onOwnChange={(val) => updateField('quote', val)}
|
||||
value={values.quote}
|
||||
/>
|
||||
<TextFieldWithDesc
|
||||
description={t('csv.csvToJson.commentSymbol')}
|
||||
description={t('csv:csvToJson.commentSymbol')}
|
||||
value={values.comment}
|
||||
onOwnChange={(val) => updateField('comment', val)}
|
||||
/>
|
||||
|
|
@ -185,26 +185,26 @@ export default function CsvToJson({ title }: ToolComponentProps) {
|
|||
)
|
||||
},
|
||||
{
|
||||
title: t('csv.csvToJson.conversionOptions'),
|
||||
title: t('csv:csvToJson.conversionOptions'),
|
||||
component: (
|
||||
<Box>
|
||||
<CheckboxWithDesc
|
||||
checked={values.useHeaders}
|
||||
onChange={(value) => updateField('useHeaders', value)}
|
||||
title={t('csv.csvToJson.useHeaders')}
|
||||
description={t('csv.csvToJson.useHeadersDescription')}
|
||||
title={t('csv:csvToJson.useHeaders')}
|
||||
description={t('csv:csvToJson.useHeadersDescription')}
|
||||
/>
|
||||
<CheckboxWithDesc
|
||||
checked={values.skipEmptyLines}
|
||||
onChange={(value) => updateField('skipEmptyLines', value)}
|
||||
title={t('csv.csvToJson.skipEmptyLines')}
|
||||
description={t('csv.csvToJson.skipEmptyLinesDescription')}
|
||||
title={t('csv:csvToJson.skipEmptyLines')}
|
||||
description={t('csv:csvToJson.skipEmptyLinesDescription')}
|
||||
/>
|
||||
<CheckboxWithDesc
|
||||
checked={values.dynamicTypes}
|
||||
onChange={(value) => updateField('dynamicTypes', value)}
|
||||
title={t('csv.csvToJson.dynamicTypes')}
|
||||
description={t('csv.csvToJson.dynamicTypesDescription')}
|
||||
title={t('csv:csvToJson.dynamicTypes')}
|
||||
description={t('csv:csvToJson.dynamicTypesDescription')}
|
||||
/>
|
||||
</Box>
|
||||
)
|
||||
|
|
|
|||
|
|
@ -117,59 +117,59 @@ export default function FindIncompleteCsvRecords({
|
|||
updateField
|
||||
}) => [
|
||||
{
|
||||
title: t('csv.findIncompleteCsvRecords.csvInputOptions'),
|
||||
title: t('csv:findIncompleteCsvRecords.csvInputOptions'),
|
||||
component: (
|
||||
<Box>
|
||||
<TextFieldWithDesc
|
||||
value={values.csvSeparator}
|
||||
onOwnChange={(val) => updateField('csvSeparator', val)}
|
||||
description={t(
|
||||
'csv.findIncompleteCsvRecords.csvSeparatorDescription'
|
||||
'csv:findIncompleteCsvRecords.csvSeparatorDescription'
|
||||
)}
|
||||
/>
|
||||
<TextFieldWithDesc
|
||||
value={values.quoteCharacter}
|
||||
onOwnChange={(val) => updateField('quoteCharacter', val)}
|
||||
description={t(
|
||||
'csv.findIncompleteCsvRecords.quoteCharacterDescription'
|
||||
'csv:findIncompleteCsvRecords.quoteCharacterDescription'
|
||||
)}
|
||||
/>
|
||||
<TextFieldWithDesc
|
||||
value={values.commentCharacter}
|
||||
onOwnChange={(val) => updateField('commentCharacter', val)}
|
||||
description={t(
|
||||
'csv.findIncompleteCsvRecords.commentCharacterDescription'
|
||||
'csv:findIncompleteCsvRecords.commentCharacterDescription'
|
||||
)}
|
||||
/>
|
||||
</Box>
|
||||
)
|
||||
},
|
||||
{
|
||||
title: t('csv.findIncompleteCsvRecords.checkingOptions'),
|
||||
title: t('csv:findIncompleteCsvRecords.checkingOptions'),
|
||||
component: (
|
||||
<Box>
|
||||
<CheckboxWithDesc
|
||||
checked={values.emptyLines}
|
||||
onChange={(value) => updateField('emptyLines', value)}
|
||||
title={t('csv.findIncompleteCsvRecords.deleteLinesWithNoData')}
|
||||
title={t('csv:findIncompleteCsvRecords.deleteLinesWithNoData')}
|
||||
description={t(
|
||||
'csv.findIncompleteCsvRecords.deleteLinesWithNoDataDescription'
|
||||
'csv:findIncompleteCsvRecords.deleteLinesWithNoDataDescription'
|
||||
)}
|
||||
/>
|
||||
|
||||
<CheckboxWithDesc
|
||||
checked={values.emptyValues}
|
||||
onChange={(value) => updateField('emptyValues', value)}
|
||||
title={t('csv.findIncompleteCsvRecords.findEmptyValues')}
|
||||
title={t('csv:findIncompleteCsvRecords.findEmptyValues')}
|
||||
description={t(
|
||||
'csv.findIncompleteCsvRecords.findEmptyValuesDescription'
|
||||
'csv:findIncompleteCsvRecords.findEmptyValuesDescription'
|
||||
)}
|
||||
/>
|
||||
|
||||
<CheckboxWithDesc
|
||||
checked={values.messageLimit}
|
||||
onChange={(value) => updateField('messageLimit', value)}
|
||||
title={t('csv.findIncompleteCsvRecords.limitNumberOfMessages')}
|
||||
title={t('csv:findIncompleteCsvRecords.limitNumberOfMessages')}
|
||||
/>
|
||||
|
||||
{values.messageLimit && (
|
||||
|
|
@ -179,7 +179,7 @@ export default function FindIncompleteCsvRecords({
|
|||
type="number"
|
||||
inputProps={{ min: 1 }}
|
||||
description={t(
|
||||
'csv.findIncompleteCsvRecords.messageLimitDescription'
|
||||
'csv:findIncompleteCsvRecords.messageLimitDescription'
|
||||
)}
|
||||
/>
|
||||
)}
|
||||
|
|
@ -193,14 +193,14 @@ export default function FindIncompleteCsvRecords({
|
|||
input={input}
|
||||
inputComponent={
|
||||
<ToolTextInput
|
||||
title={t('csv.findIncompleteCsvRecords.inputTitle')}
|
||||
title={t('csv:findIncompleteCsvRecords.inputTitle')}
|
||||
value={input}
|
||||
onChange={setInput}
|
||||
/>
|
||||
}
|
||||
resultComponent={
|
||||
<ToolTextResult
|
||||
title={t('csv.findIncompleteCsvRecords.resultTitle')}
|
||||
title={t('csv:findIncompleteCsvRecords.resultTitle')}
|
||||
value={result}
|
||||
/>
|
||||
}
|
||||
|
|
@ -210,7 +210,7 @@ export default function FindIncompleteCsvRecords({
|
|||
setInput={setInput}
|
||||
compute={compute}
|
||||
toolInfo={{
|
||||
title: t('csv.findIncompleteCsvRecords.toolInfo.title', { title }),
|
||||
title: t('csv:findIncompleteCsvRecords.toolInfo.title', { title }),
|
||||
description: longDescription
|
||||
}}
|
||||
/>
|
||||
|
|
|
|||
|
|
@ -14,8 +14,8 @@ export const tool = defineTool('csv', {
|
|||
'This tool allows you to find incomplete or missing records in CSV data. It can detect missing columns, empty values, and other data quality issues in your CSV files. You can customize the CSV parsing options and set limits on error reporting.',
|
||||
component: lazy(() => import('./index')),
|
||||
i18n: {
|
||||
name: 'csv.findIncompleteCsvRecords.name',
|
||||
description: 'csv.findIncompleteCsvRecords.description',
|
||||
shortDescription: 'csv.findIncompleteCsvRecords.shortDescription'
|
||||
name: 'csv:findIncompleteCsvRecords.title',
|
||||
description: 'csv:findIncompleteCsvRecords.description',
|
||||
shortDescription: 'csv:findIncompleteCsvRecords.shortDescription'
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -145,7 +145,7 @@ export default function InsertCsvColumns({
|
|||
updateField
|
||||
}) => [
|
||||
{
|
||||
title: t('csv.insertCsvColumns.csvToInsert'),
|
||||
title: t('csv:insertCsvColumns.csvToInsert'),
|
||||
component: (
|
||||
<Box>
|
||||
<TextFieldWithDesc
|
||||
|
|
@ -153,40 +153,40 @@ export default function InsertCsvColumns({
|
|||
rows={3}
|
||||
value={values.csvToInsert}
|
||||
onOwnChange={(val) => updateField('csvToInsert', val)}
|
||||
title={t('csv.insertCsvColumns.csvSeparator')}
|
||||
description={t('csv.insertCsvColumns.csvToInsertDescription')}
|
||||
title={t('csv:insertCsvColumns.csvSeparator')}
|
||||
description={t('csv:insertCsvColumns.csvToInsertDescription')}
|
||||
/>
|
||||
</Box>
|
||||
)
|
||||
},
|
||||
{
|
||||
title: t('csv.insertCsvColumns.csvOptions'),
|
||||
title: t('csv:insertCsvColumns.csvOptions'),
|
||||
component: (
|
||||
<Box>
|
||||
<TextFieldWithDesc
|
||||
value={values.separator}
|
||||
onOwnChange={(val) => updateField('separator', val)}
|
||||
description={t('csv.insertCsvColumns.separatorDescription')}
|
||||
description={t('csv:insertCsvColumns.separatorDescription')}
|
||||
/>
|
||||
<TextFieldWithDesc
|
||||
value={values.quoteChar}
|
||||
onOwnChange={(val) => updateField('quoteChar', val)}
|
||||
description={t('csv.insertCsvColumns.quoteCharDescription')}
|
||||
description={t('csv:insertCsvColumns.quoteCharDescription')}
|
||||
/>
|
||||
<TextFieldWithDesc
|
||||
value={values.commentCharacter}
|
||||
onOwnChange={(val) => updateField('commentCharacter', val)}
|
||||
description={t('csv.insertCsvColumns.commentCharacterDescription')}
|
||||
description={t('csv:insertCsvColumns.commentCharacterDescription')}
|
||||
/>
|
||||
<SelectWithDesc
|
||||
selected={values.customFill}
|
||||
options={[
|
||||
{
|
||||
label: t('csv.insertCsvColumns.fillWithEmptyValues'),
|
||||
label: t('csv:insertCsvColumns.fillWithEmptyValues'),
|
||||
value: false
|
||||
},
|
||||
{
|
||||
label: t('csv.insertCsvColumns.fillWithCustomValues'),
|
||||
label: t('csv:insertCsvColumns.fillWithCustomValues'),
|
||||
value: true
|
||||
}
|
||||
]}
|
||||
|
|
@ -196,40 +196,40 @@ export default function InsertCsvColumns({
|
|||
updateField('customFillValue', ''); // Reset custom fill value
|
||||
}
|
||||
}}
|
||||
description={t('csv.insertCsvColumns.customFillDescription')}
|
||||
description={t('csv:insertCsvColumns.customFillDescription')}
|
||||
/>
|
||||
{values.customFill && (
|
||||
<TextFieldWithDesc
|
||||
value={values.customFillValue}
|
||||
onOwnChange={(val) => updateField('customFillValue', val)}
|
||||
description={t('csv.insertCsvColumns.customFillValueDescription')}
|
||||
description={t('csv:insertCsvColumns.customFillValueDescription')}
|
||||
/>
|
||||
)}
|
||||
</Box>
|
||||
)
|
||||
},
|
||||
{
|
||||
title: t('csv.insertCsvColumns.positionOptions'),
|
||||
title: t('csv:insertCsvColumns.positionOptions'),
|
||||
component: (
|
||||
<Box>
|
||||
<SelectWithDesc
|
||||
selected={values.insertingPosition}
|
||||
options={[
|
||||
{
|
||||
label: t('csv.insertCsvColumns.prependColumns'),
|
||||
label: t('csv:insertCsvColumns.prependColumns'),
|
||||
value: 'prepend'
|
||||
},
|
||||
{
|
||||
label: t('csv.insertCsvColumns.appendColumns'),
|
||||
label: t('csv:insertCsvColumns.appendColumns'),
|
||||
value: 'append'
|
||||
},
|
||||
{
|
||||
label: t('csv.insertCsvColumns.customPosition'),
|
||||
label: t('csv:insertCsvColumns.customPosition'),
|
||||
value: 'custom'
|
||||
}
|
||||
]}
|
||||
onChange={(value) => updateField('insertingPosition', value)}
|
||||
description={t('csv.insertCsvColumns.insertingPositionDescription')}
|
||||
description={t('csv:insertCsvColumns.insertingPositionDescription')}
|
||||
/>
|
||||
|
||||
{values.insertingPosition === 'custom' && (
|
||||
|
|
@ -237,17 +237,17 @@ export default function InsertCsvColumns({
|
|||
selected={values.customPostionOptions}
|
||||
options={[
|
||||
{
|
||||
label: t('csv.insertCsvColumns.headerName'),
|
||||
label: t('csv:insertCsvColumns.headerName'),
|
||||
value: 'headerName'
|
||||
},
|
||||
{
|
||||
label: t('csv.insertCsvColumns.position'),
|
||||
label: t('csv:insertCsvColumns.position'),
|
||||
value: 'rowNumber'
|
||||
}
|
||||
]}
|
||||
onChange={(value) => updateField('customPostionOptions', value)}
|
||||
description={t(
|
||||
'csv.insertCsvColumns.customPositionOptionsDescription'
|
||||
'csv:insertCsvColumns.customPositionOptionsDescription'
|
||||
)}
|
||||
/>
|
||||
)}
|
||||
|
|
@ -258,7 +258,7 @@ export default function InsertCsvColumns({
|
|||
selected={values.headerName}
|
||||
options={headerOptions}
|
||||
onChange={(value) => updateField('headerName', value)}
|
||||
description={t('csv.insertCsvColumns.headerNameDescription')}
|
||||
description={t('csv:insertCsvColumns.headerNameDescription')}
|
||||
/>
|
||||
)}
|
||||
|
||||
|
|
@ -269,7 +269,7 @@ export default function InsertCsvColumns({
|
|||
onOwnChange={(val) =>
|
||||
updateField('rowNumber', parseInt(val) || 0)
|
||||
}
|
||||
description={t('csv.insertCsvColumns.rowNumberDescription')}
|
||||
description={t('csv:insertCsvColumns.rowNumberDescription')}
|
||||
type="number"
|
||||
/>
|
||||
)}
|
||||
|
|
@ -283,14 +283,14 @@ export default function InsertCsvColumns({
|
|||
title={title}
|
||||
inputComponent={
|
||||
<ToolTextInput
|
||||
title={t('csv.insertCsvColumns.inputTitle')}
|
||||
title={t('csv:insertCsvColumns.inputTitle')}
|
||||
value={input}
|
||||
onChange={setInput}
|
||||
/>
|
||||
}
|
||||
resultComponent={
|
||||
<ToolTextResult
|
||||
title={t('csv.insertCsvColumns.resultTitle')}
|
||||
title={t('csv:insertCsvColumns.resultTitle')}
|
||||
value={result}
|
||||
extension={'csv'}
|
||||
/>
|
||||
|
|
@ -301,8 +301,8 @@ export default function InsertCsvColumns({
|
|||
input={input}
|
||||
setInput={setInput}
|
||||
toolInfo={{
|
||||
title: t('csv.insertCsvColumns.toolInfo.title'),
|
||||
description: t('csv.insertCsvColumns.toolInfo.description')
|
||||
title: t('csv:insertCsvColumns.toolInfo.title'),
|
||||
description: t('csv:insertCsvColumns.toolInfo.description')
|
||||
}}
|
||||
exampleCards={exampleCards}
|
||||
/>
|
||||
|
|
|
|||
|
|
@ -60,20 +60,20 @@ export default function ResizeImage({ title }: ToolComponentProps) {
|
|||
updateField
|
||||
}) => [
|
||||
{
|
||||
title: t('image.resize.resizeMethod'),
|
||||
title: t('image:resize.resizeMethod'),
|
||||
component: (
|
||||
<Box>
|
||||
<SimpleRadio
|
||||
onClick={() => updateField('resizeMethod', 'pixels')}
|
||||
checked={values.resizeMethod === 'pixels'}
|
||||
description={t('image.resize.resizeByPixelsDescription')}
|
||||
title={t('image.resize.resizeByPixels')}
|
||||
description={t('image:resize.resizeByPixelsDescription')}
|
||||
title={t('image:resize.resizeByPixels')}
|
||||
/>
|
||||
<SimpleRadio
|
||||
onClick={() => updateField('resizeMethod', 'percentage')}
|
||||
checked={values.resizeMethod === 'percentage'}
|
||||
description={t('image.resize.resizeByPercentageDescription')}
|
||||
title={t('image.resize.resizeByPercentage')}
|
||||
description={t('image:resize.resizeByPercentageDescription')}
|
||||
title={t('image:resize.resizeByPercentage')}
|
||||
/>
|
||||
</Box>
|
||||
)
|
||||
|
|
@ -81,7 +81,7 @@ export default function ResizeImage({ title }: ToolComponentProps) {
|
|||
...(values.resizeMethod === 'pixels'
|
||||
? [
|
||||
{
|
||||
title: t('image.resize.dimensionType'),
|
||||
title: t('image:resize.dimensionType'),
|
||||
component: (
|
||||
<Box>
|
||||
<CheckboxWithDesc
|
||||
|
|
@ -89,29 +89,29 @@ export default function ResizeImage({ title }: ToolComponentProps) {
|
|||
onChange={(value) =>
|
||||
updateField('maintainAspectRatio', value)
|
||||
}
|
||||
description={t('image.resize.maintainAspectRatioDescription')}
|
||||
title={t('image.resize.maintainAspectRatio')}
|
||||
description={t('image:resize.maintainAspectRatioDescription')}
|
||||
title={t('image:resize.maintainAspectRatio')}
|
||||
/>
|
||||
{values.maintainAspectRatio && (
|
||||
<Box>
|
||||
<SimpleRadio
|
||||
onClick={() => updateField('dimensionType', 'width')}
|
||||
checked={values.dimensionType === 'width'}
|
||||
description={t('image.resize.setWidthDescription')}
|
||||
title={t('image.resize.setWidth')}
|
||||
description={t('image:resize.setWidthDescription')}
|
||||
title={t('image:resize.setWidth')}
|
||||
/>
|
||||
<SimpleRadio
|
||||
onClick={() => updateField('dimensionType', 'height')}
|
||||
checked={values.dimensionType === 'height'}
|
||||
description={t('image.resize.setHeightDescription')}
|
||||
title={t('image.resize.setHeight')}
|
||||
description={t('image:resize.setHeightDescription')}
|
||||
title={t('image:resize.setHeight')}
|
||||
/>
|
||||
</Box>
|
||||
)}
|
||||
<TextFieldWithDesc
|
||||
value={values.width}
|
||||
onOwnChange={(val) => updateField('width', val)}
|
||||
description={t('image.resize.widthDescription')}
|
||||
description={t('image:resize.widthDescription')}
|
||||
disabled={
|
||||
values.maintainAspectRatio &&
|
||||
values.dimensionType === 'height'
|
||||
|
|
@ -125,7 +125,7 @@ export default function ResizeImage({ title }: ToolComponentProps) {
|
|||
<TextFieldWithDesc
|
||||
value={values.height}
|
||||
onOwnChange={(val) => updateField('height', val)}
|
||||
description={t('image.resize.heightDescription')}
|
||||
description={t('image:resize.heightDescription')}
|
||||
disabled={
|
||||
values.maintainAspectRatio &&
|
||||
values.dimensionType === 'width'
|
||||
|
|
@ -142,13 +142,13 @@ export default function ResizeImage({ title }: ToolComponentProps) {
|
|||
]
|
||||
: [
|
||||
{
|
||||
title: t('image.resize.percentage'),
|
||||
title: t('image:resize.percentage'),
|
||||
component: (
|
||||
<Box>
|
||||
<TextFieldWithDesc
|
||||
value={values.percentage}
|
||||
onOwnChange={(val) => updateField('percentage', val)}
|
||||
description={t('image.resize.percentageDescription')}
|
||||
description={t('image:resize.percentageDescription')}
|
||||
inputProps={{
|
||||
'data-testid': 'percentage-input',
|
||||
type: 'number',
|
||||
|
|
@ -175,19 +175,19 @@ export default function ResizeImage({ title }: ToolComponentProps) {
|
|||
value={input}
|
||||
onChange={setInput}
|
||||
accept={['image/jpeg', 'image/png', 'image/svg+xml', 'image/gif']}
|
||||
title={t('image.resize.inputTitle')}
|
||||
title={t('image:resize.inputTitle')}
|
||||
/>
|
||||
}
|
||||
resultComponent={
|
||||
<ToolFileResult
|
||||
title={t('image.resize.resultTitle')}
|
||||
title={t('image:resize.resultTitle')}
|
||||
value={result}
|
||||
extension={input?.name.split('.').pop() || 'png'}
|
||||
/>
|
||||
}
|
||||
toolInfo={{
|
||||
title: t('image.resize.toolInfo.title'),
|
||||
description: t('image.resize.toolInfo.description')
|
||||
title: t('image:resize.toolInfo.title'),
|
||||
description: t('image:resize.toolInfo.description')
|
||||
}}
|
||||
/>
|
||||
);
|
||||
|
|
|
|||
|
|
@ -148,25 +148,5 @@
|
|||
"typeSaturation": "संतृप्ति",
|
||||
"filterIntensity": "फ़िल्टर तीव्रता",
|
||||
"intensityPlaceholder": "मान (0-100)"
|
||||
},
|
||||
"resize": {
|
||||
"title": "छवि आकार बदलें",
|
||||
"description": "छवि का आकार बदलें।",
|
||||
"inputTitle": "इनपुट छवि",
|
||||
"resultTitle": "आकार बदली गई छवि",
|
||||
"resizeOptions": "आकार बदलने के विकल्प",
|
||||
"resizeMethod": "आकार बदलने की विधि",
|
||||
"methodPercentage": "प्रतिशत",
|
||||
"methodPixels": "पिक्सेल",
|
||||
"methodAspectRatio": "आकार अनुपात",
|
||||
"width": "चौड़ाई",
|
||||
"widthPlaceholder": "मान",
|
||||
"height": "ऊंचाई",
|
||||
"heightPlaceholder": "मान",
|
||||
"maintainAspectRatio": "आकार अनुपात बनाए रखें",
|
||||
"interpolationMethod": "इंटरपोलेशन विधि",
|
||||
"methodNearest": "निकटतम",
|
||||
"methodBilinear": "द्विरेखीय",
|
||||
"methodBicubic": "द्विघन"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,8 +11,8 @@ export const tool = defineTool('json', {
|
|||
keywords: ['json', 'escape', 'characters', 'format'],
|
||||
component: lazy(() => import('./index')),
|
||||
i18n: {
|
||||
name: 'json.escapeJson.name',
|
||||
description: 'json.escapeJson.description',
|
||||
shortDescription: 'json.escapeJson.shortDescription'
|
||||
name: 'json:escapeJson.title',
|
||||
description: 'json:escapeJson.description',
|
||||
shortDescription: 'json:escapeJson.shortDescription'
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -11,8 +11,8 @@ export const tool = defineTool('json', {
|
|||
keywords: ['json', 'xml', 'convert', 'transform'],
|
||||
component: lazy(() => import('./index')),
|
||||
i18n: {
|
||||
name: 'json.jsonToXml.name',
|
||||
description: 'json.jsonToXml.description',
|
||||
shortDescription: 'json.jsonToXml.shortDescription'
|
||||
name: 'json:jsonToXml.title',
|
||||
description: 'json:jsonToXml.description',
|
||||
shortDescription: 'json:jsonToXml.shortDescription'
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -61,14 +61,14 @@ export default function MinifyJson({ title }: ToolComponentProps) {
|
|||
title={title}
|
||||
inputComponent={
|
||||
<ToolTextInput
|
||||
title={t('json.minify.inputTitle')}
|
||||
title={t('json:minify.inputTitle')}
|
||||
value={input}
|
||||
onChange={setInput}
|
||||
/>
|
||||
}
|
||||
resultComponent={
|
||||
<ToolTextResult
|
||||
title={t('json.minify.resultTitle')}
|
||||
title={t('json:minify.resultTitle')}
|
||||
value={result}
|
||||
extension={'json'}
|
||||
/>
|
||||
|
|
@ -76,8 +76,8 @@ export default function MinifyJson({ title }: ToolComponentProps) {
|
|||
initialValues={initialValues}
|
||||
getGroups={null}
|
||||
toolInfo={{
|
||||
title: t('json.minify.toolInfo.title'),
|
||||
description: t('json.minify.toolInfo.description')
|
||||
title: t('json:minify.toolInfo.title'),
|
||||
description: t('json:minify.toolInfo.description')
|
||||
}}
|
||||
exampleCards={exampleCards}
|
||||
input={input}
|
||||
|
|
|
|||
|
|
@ -11,8 +11,8 @@ export const tool = defineTool('json', {
|
|||
keywords: ['json', 'minify', 'compress', 'whitespace'],
|
||||
component: lazy(() => import('./index')),
|
||||
i18n: {
|
||||
name: 'json.minify.name',
|
||||
description: 'json.minify.description',
|
||||
shortDescription: 'json.minify.shortDescription'
|
||||
name: 'json:minify.title',
|
||||
description: 'json:minify.description',
|
||||
shortDescription: 'json:minify.shortDescription'
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -131,14 +131,14 @@ export default function PrettifyJson({ title }: ToolComponentProps) {
|
|||
input={input}
|
||||
inputComponent={
|
||||
<ToolTextInput
|
||||
title={t('json.prettify.inputTitle')}
|
||||
title={t('json:prettify.inputTitle')}
|
||||
value={input}
|
||||
onChange={setInput}
|
||||
/>
|
||||
}
|
||||
resultComponent={
|
||||
<ToolTextResult
|
||||
title={t('json.prettify.resultTitle')}
|
||||
title={t('json:prettify.resultTitle')}
|
||||
value={result}
|
||||
extension={'json'}
|
||||
/>
|
||||
|
|
@ -146,14 +146,14 @@ export default function PrettifyJson({ title }: ToolComponentProps) {
|
|||
initialValues={initialValues}
|
||||
getGroups={({ values, updateField }) => [
|
||||
{
|
||||
title: t('json.prettify.indentation'),
|
||||
title: t('json:prettify.indentation'),
|
||||
component: (
|
||||
<Box>
|
||||
<RadioWithTextField
|
||||
checked={values.indentationType === 'space'}
|
||||
title={t('json.prettify.useSpaces')}
|
||||
title={t('json:prettify.useSpaces')}
|
||||
fieldName={'indentationType'}
|
||||
description={t('json.prettify.useSpacesDescription')}
|
||||
description={t('json:prettify.useSpacesDescription')}
|
||||
value={values.spacesCount.toString()}
|
||||
onRadioClick={() => updateField('indentationType', 'space')}
|
||||
onTextChange={(val) =>
|
||||
|
|
@ -163,8 +163,8 @@ export default function PrettifyJson({ title }: ToolComponentProps) {
|
|||
<SimpleRadio
|
||||
onClick={() => updateField('indentationType', 'tab')}
|
||||
checked={values.indentationType === 'tab'}
|
||||
description={t('json.prettify.useTabsDescription')}
|
||||
title={t('json.prettify.useTabs')}
|
||||
description={t('json:prettify.useTabsDescription')}
|
||||
title={t('json:prettify.useTabs')}
|
||||
/>
|
||||
</Box>
|
||||
)
|
||||
|
|
@ -174,8 +174,8 @@ export default function PrettifyJson({ title }: ToolComponentProps) {
|
|||
setInput={setInput}
|
||||
exampleCards={exampleCards}
|
||||
toolInfo={{
|
||||
title: t('json.prettify.toolInfo.title'),
|
||||
description: t('json.prettify.toolInfo.description')
|
||||
title: t('json:prettify.toolInfo.title'),
|
||||
description: t('json:prettify.toolInfo.description')
|
||||
}}
|
||||
/>
|
||||
);
|
||||
|
|
|
|||
|
|
@ -11,8 +11,8 @@ export const tool = defineTool('json', {
|
|||
keywords: ['json', 'prettify', 'format', 'beautify'],
|
||||
component: lazy(() => import('./index')),
|
||||
i18n: {
|
||||
name: 'json.prettify.name',
|
||||
description: 'json.prettify.description',
|
||||
shortDescription: 'json.prettify.shortDescription'
|
||||
name: 'json:prettify.title',
|
||||
description: 'json:prettify.description',
|
||||
shortDescription: 'json:prettify.shortDescription'
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -11,8 +11,8 @@ export const tool = defineTool('json', {
|
|||
keywords: ['json', 'stringify', 'serialize', 'convert'],
|
||||
component: lazy(() => import('./index')),
|
||||
i18n: {
|
||||
name: 'json.stringify.name',
|
||||
description: 'json.stringify.description',
|
||||
shortDescription: 'json.stringify.shortDescription'
|
||||
name: 'json:stringify.title',
|
||||
description: 'json:stringify.description',
|
||||
shortDescription: 'json:stringify.shortDescription'
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -11,8 +11,8 @@ export const tool = defineTool('json', {
|
|||
keywords: ['tsv', 'json', 'convert', 'tabular'],
|
||||
component: lazy(() => import('./index')),
|
||||
i18n: {
|
||||
name: 'json.tsvToJson.name',
|
||||
description: 'json.tsvToJson.description',
|
||||
shortDescription: 'json.tsvToJson.shortDescription'
|
||||
name: 'json:tsvToJson.title',
|
||||
description: 'json:tsvToJson.description',
|
||||
shortDescription: 'json:tsvToJson.shortDescription'
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -55,9 +55,9 @@ export default function ValidateJson({ title }: ToolComponentProps) {
|
|||
const { valid, error } = validateJson(input);
|
||||
|
||||
if (valid) {
|
||||
setResult(t('json.validateJson.validJson'));
|
||||
setResult(t('json:validateJson.validJson'));
|
||||
} else {
|
||||
setResult(t('json.validateJson.invalidJson', { error }));
|
||||
setResult(t('json:validateJson.invalidJson', { error }));
|
||||
}
|
||||
};
|
||||
|
||||
|
|
@ -66,22 +66,22 @@ export default function ValidateJson({ title }: ToolComponentProps) {
|
|||
title={title}
|
||||
inputComponent={
|
||||
<ToolTextInput
|
||||
title={t('json.validateJson.inputTitle')}
|
||||
title={t('json:validateJson.inputTitle')}
|
||||
value={input}
|
||||
onChange={setInput}
|
||||
/>
|
||||
}
|
||||
resultComponent={
|
||||
<ToolTextResult
|
||||
title={t('json.validateJson.resultTitle')}
|
||||
title={t('json:validateJson.resultTitle')}
|
||||
value={result}
|
||||
/>
|
||||
}
|
||||
initialValues={{}}
|
||||
getGroups={null}
|
||||
toolInfo={{
|
||||
title: t('json.validateJson.toolInfo.title'),
|
||||
description: t('json.validateJson.toolInfo.description')
|
||||
title: t('json:validateJson.toolInfo.title'),
|
||||
description: t('json:validateJson.toolInfo.description')
|
||||
}}
|
||||
exampleCards={exampleCards}
|
||||
input={input}
|
||||
|
|
|
|||
|
|
@ -11,8 +11,8 @@ export const tool = defineTool('json', {
|
|||
keywords: ['json', 'validate', 'check', 'syntax', 'errors'],
|
||||
component: lazy(() => import('./index')),
|
||||
i18n: {
|
||||
name: 'json.validateJson.name',
|
||||
description: 'json.validateJson.description',
|
||||
shortDescription: 'json.validateJson.shortDescription'
|
||||
name: 'json:validateJson.title',
|
||||
description: 'json:validateJson.description',
|
||||
shortDescription: 'json:validateJson.shortDescription'
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -136,53 +136,53 @@ export default function Duplicate({ title }: ToolComponentProps) {
|
|||
updateField
|
||||
}) => [
|
||||
{
|
||||
title: t('list.duplicate.splitOptions'),
|
||||
title: t('list:duplicate.splitOptions'),
|
||||
component: (
|
||||
<Box>
|
||||
<SimpleRadio
|
||||
onClick={() => updateField('splitOperatorType', 'symbol')}
|
||||
checked={values.splitOperatorType === 'symbol'}
|
||||
title={t('list.duplicate.splitBySymbol')}
|
||||
title={t('list:duplicate.splitBySymbol')}
|
||||
/>
|
||||
<SimpleRadio
|
||||
onClick={() => updateField('splitOperatorType', 'regex')}
|
||||
checked={values.splitOperatorType === 'regex'}
|
||||
title={t('list.duplicate.splitByRegex')}
|
||||
title={t('list:duplicate.splitByRegex')}
|
||||
/>
|
||||
<TextFieldWithDesc
|
||||
value={values.splitSeparator}
|
||||
onOwnChange={(val) => updateField('splitSeparator', val)}
|
||||
description={t('list.duplicate.splitSeparatorDescription')}
|
||||
description={t('list:duplicate.splitSeparatorDescription')}
|
||||
/>
|
||||
<TextFieldWithDesc
|
||||
value={values.joinSeparator}
|
||||
onOwnChange={(val) => updateField('joinSeparator', val)}
|
||||
description={t('list.duplicate.joinSeparatorDescription')}
|
||||
description={t('list:duplicate.joinSeparatorDescription')}
|
||||
/>
|
||||
</Box>
|
||||
)
|
||||
},
|
||||
{
|
||||
title: t('list.duplicate.duplicationOptions'),
|
||||
title: t('list:duplicate.duplicationOptions'),
|
||||
component: (
|
||||
<Box>
|
||||
<TextFieldWithDesc
|
||||
value={values.copy}
|
||||
onOwnChange={(val) => updateField('copy', val)}
|
||||
description={t('list.duplicate.copyDescription')}
|
||||
description={t('list:duplicate.copyDescription')}
|
||||
type="number"
|
||||
/>
|
||||
<CheckboxWithDesc
|
||||
title={t('list.duplicate.concatenate')}
|
||||
title={t('list:duplicate.concatenate')}
|
||||
checked={values.concatenate}
|
||||
onChange={(checked) => updateField('concatenate', checked)}
|
||||
description={t('list.duplicate.concatenateDescription')}
|
||||
description={t('list:duplicate.concatenateDescription')}
|
||||
/>
|
||||
<CheckboxWithDesc
|
||||
title={t('list.duplicate.reverse')}
|
||||
title={t('list:duplicate.reverse')}
|
||||
checked={values.reverse}
|
||||
onChange={(checked) => updateField('reverse', checked)}
|
||||
description={t('list.duplicate.reverseDescription')}
|
||||
description={t('list:duplicate.reverseDescription')}
|
||||
/>
|
||||
</Box>
|
||||
)
|
||||
|
|
@ -194,14 +194,14 @@ export default function Duplicate({ title }: ToolComponentProps) {
|
|||
title={title}
|
||||
inputComponent={
|
||||
<ToolTextInput
|
||||
title={t('list.duplicate.inputTitle')}
|
||||
title={t('list:duplicate.inputTitle')}
|
||||
value={input}
|
||||
onChange={setInput}
|
||||
/>
|
||||
}
|
||||
resultComponent={
|
||||
<ToolTextResult
|
||||
title={t('list.duplicate.resultTitle')}
|
||||
title={t('list:duplicate.resultTitle')}
|
||||
value={result}
|
||||
/>
|
||||
}
|
||||
|
|
@ -209,8 +209,8 @@ export default function Duplicate({ title }: ToolComponentProps) {
|
|||
getGroups={getGroups}
|
||||
validationSchema={validationSchema}
|
||||
toolInfo={{
|
||||
title: t('list.duplicate.toolInfo.title'),
|
||||
description: t('list.duplicate.toolInfo.description')
|
||||
title: t('list:duplicate.toolInfo.title'),
|
||||
description: t('list:duplicate.toolInfo.description')
|
||||
}}
|
||||
exampleCards={exampleCards}
|
||||
input={input}
|
||||
|
|
|
|||
|
|
@ -12,8 +12,8 @@ export const tool = defineTool('list', {
|
|||
keywords: ['duplicate'],
|
||||
component: lazy(() => import('./index')),
|
||||
i18n: {
|
||||
name: 'list.duplicate.name',
|
||||
description: 'list.duplicate.description',
|
||||
shortDescription: 'list.duplicate.shortDescription'
|
||||
name: 'list:duplicate.title',
|
||||
description: 'list:duplicate.description',
|
||||
shortDescription: 'list:duplicate.shortDescription'
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -12,8 +12,8 @@ export const tool = defineTool('list', {
|
|||
keywords: ['find', 'most', 'popular'],
|
||||
component: lazy(() => import('./index')),
|
||||
i18n: {
|
||||
name: 'list.findMostPopular.name',
|
||||
description: 'list.findMostPopular.description',
|
||||
shortDescription: 'list.findMostPopular.shortDescription'
|
||||
name: 'list:findMostPopular.title',
|
||||
description: 'list:findMostPopular.description',
|
||||
shortDescription: 'list:findMostPopular.shortDescription'
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -66,27 +66,27 @@ export default function FindUnique() {
|
|||
|
||||
return (
|
||||
<ToolContent
|
||||
title={t('list.findUnique.title')}
|
||||
title={t('list:findUnique.title')}
|
||||
initialValues={initialValues}
|
||||
compute={compute}
|
||||
input={input}
|
||||
setInput={setInput}
|
||||
inputComponent={
|
||||
<ToolTextInput
|
||||
title={t('list.findUnique.inputTitle')}
|
||||
title={t('list:findUnique.inputTitle')}
|
||||
value={input}
|
||||
onChange={setInput}
|
||||
/>
|
||||
}
|
||||
resultComponent={
|
||||
<ToolTextResult
|
||||
title={t('list.findUnique.resultTitle')}
|
||||
title={t('list:findUnique.resultTitle')}
|
||||
value={result}
|
||||
/>
|
||||
}
|
||||
getGroups={({ values, updateField }) => [
|
||||
{
|
||||
title: t('list.findUnique.inputListDelimiter'),
|
||||
title: t('list:findUnique.inputListDelimiter'),
|
||||
component: (
|
||||
<Box>
|
||||
{splitOperators.map(({ title, description, type }) => (
|
||||
|
|
@ -99,7 +99,7 @@ export default function FindUnique() {
|
|||
/>
|
||||
))}
|
||||
<TextFieldWithDesc
|
||||
description={t('list.findUnique.delimiterDescription')}
|
||||
description={t('list:findUnique.delimiterDescription')}
|
||||
value={values.splitSeparator}
|
||||
onOwnChange={(val) => updateField('splitSeparator', val)}
|
||||
/>
|
||||
|
|
@ -107,7 +107,7 @@ export default function FindUnique() {
|
|||
)
|
||||
},
|
||||
{
|
||||
title: t('list.findUnique.outputListDelimiter'),
|
||||
title: t('list:findUnique.outputListDelimiter'),
|
||||
component: (
|
||||
<Box>
|
||||
<TextFieldWithDesc
|
||||
|
|
@ -115,14 +115,14 @@ export default function FindUnique() {
|
|||
onOwnChange={(value) => updateField('joinSeparator', value)}
|
||||
/>
|
||||
<CheckboxWithDesc
|
||||
title={t('list.findUnique.trimItems')}
|
||||
description={t('list.findUnique.trimItemsDescription')}
|
||||
title={t('list:findUnique.trimItems')}
|
||||
description={t('list:findUnique.trimItemsDescription')}
|
||||
checked={values.trimItems}
|
||||
onChange={(value) => updateField('trimItems', value)}
|
||||
/>
|
||||
<CheckboxWithDesc
|
||||
title={t('list.findUnique.skipEmptyItems')}
|
||||
description={t('list.findUnique.skipEmptyItemsDescription')}
|
||||
title={t('list:findUnique.skipEmptyItems')}
|
||||
description={t('list:findUnique.skipEmptyItemsDescription')}
|
||||
checked={values.deleteEmptyItems}
|
||||
onChange={(value) => updateField('deleteEmptyItems', value)}
|
||||
/>
|
||||
|
|
@ -130,20 +130,20 @@ export default function FindUnique() {
|
|||
)
|
||||
},
|
||||
{
|
||||
title: t('list.findUnique.uniqueItemOptions'),
|
||||
title: t('list:findUnique.uniqueItemOptions'),
|
||||
component: (
|
||||
<Box>
|
||||
<CheckboxWithDesc
|
||||
title={t('list.findUnique.findAbsolutelyUniqueItems')}
|
||||
title={t('list:findUnique.findAbsolutelyUniqueItems')}
|
||||
description={t(
|
||||
'list.findUnique.findAbsolutelyUniqueItemsDescription'
|
||||
'list:findUnique.findAbsolutelyUniqueItemsDescription'
|
||||
)}
|
||||
checked={values.absolutelyUnique}
|
||||
onChange={(value) => updateField('absolutelyUnique', value)}
|
||||
/>
|
||||
<CheckboxWithDesc
|
||||
title={t('list.findUnique.caseSensitiveItems')}
|
||||
description={t('list.findUnique.caseSensitiveItemsDescription')}
|
||||
title={t('list:findUnique.caseSensitiveItems')}
|
||||
description={t('list:findUnique.caseSensitiveItemsDescription')}
|
||||
checked={values.caseSensitive}
|
||||
onChange={(value) => updateField('caseSensitive', value)}
|
||||
/>
|
||||
|
|
|
|||
|
|
@ -11,8 +11,8 @@ export const tool = defineTool('list', {
|
|||
keywords: ['find', 'unique'],
|
||||
component: lazy(() => import('./index')),
|
||||
i18n: {
|
||||
name: 'list.findUnique.name',
|
||||
description: 'list.findUnique.description',
|
||||
shortDescription: 'list.findUnique.shortDescription'
|
||||
name: 'list:findUnique.title',
|
||||
description: 'list:findUnique.description',
|
||||
shortDescription: 'list:findUnique.shortDescription'
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -81,18 +81,18 @@ export default function FindUnique({ title }: ToolComponentProps) {
|
|||
input={input}
|
||||
inputComponent={
|
||||
<ToolTextInput
|
||||
title={t('list.group.inputTitle')}
|
||||
title={t('list:group.inputTitle')}
|
||||
value={input}
|
||||
onChange={setInput}
|
||||
/>
|
||||
}
|
||||
resultComponent={
|
||||
<ToolTextResult title={t('list.group.resultTitle')} value={result} />
|
||||
<ToolTextResult title={t('list:group.resultTitle')} value={result} />
|
||||
}
|
||||
initialValues={initialValues}
|
||||
getGroups={({ values, updateField }) => [
|
||||
{
|
||||
title: t('list.group.inputItemSeparator'),
|
||||
title: t('list:group.inputItemSeparator'),
|
||||
component: (
|
||||
<Box>
|
||||
{splitOperators.map(({ title, description, type }) => (
|
||||
|
|
@ -107,7 +107,7 @@ export default function FindUnique({ title }: ToolComponentProps) {
|
|||
/>
|
||||
))}
|
||||
<TextFieldWithDesc
|
||||
description={t('list.group.splitSeparatorDescription')}
|
||||
description={t('list:group.splitSeparatorDescription')}
|
||||
value={values.splitSeparator}
|
||||
onOwnChange={(val) => updateField('splitSeparator', val)}
|
||||
/>
|
||||
|
|
@ -115,12 +115,12 @@ export default function FindUnique({ title }: ToolComponentProps) {
|
|||
)
|
||||
},
|
||||
{
|
||||
title: t('list.group.groupSizeAndSeparators'),
|
||||
title: t('list:group.groupSizeAndSeparators'),
|
||||
component: (
|
||||
<Box>
|
||||
<TextFieldWithDesc
|
||||
value={values.groupNumber}
|
||||
description={t('list.group.groupNumberDescription')}
|
||||
description={t('list:group.groupNumberDescription')}
|
||||
type={'number'}
|
||||
onOwnChange={(value) =>
|
||||
updateField('groupNumber', formatNumber(value, 1))
|
||||
|
|
@ -128,46 +128,46 @@ export default function FindUnique({ title }: ToolComponentProps) {
|
|||
/>
|
||||
<TextFieldWithDesc
|
||||
value={values.itemSeparator}
|
||||
description={t('list.group.itemSeparatorDescription')}
|
||||
description={t('list:group.itemSeparatorDescription')}
|
||||
onOwnChange={(value) => updateField('itemSeparator', value)}
|
||||
/>
|
||||
<TextFieldWithDesc
|
||||
value={values.groupSeparator}
|
||||
description={t('list.group.groupSeparatorDescription')}
|
||||
description={t('list:group.groupSeparatorDescription')}
|
||||
onOwnChange={(value) => updateField('groupSeparator', value)}
|
||||
/>
|
||||
<TextFieldWithDesc
|
||||
value={values.leftWrap}
|
||||
description={t('list.group.leftWrapDescription')}
|
||||
description={t('list:group.leftWrapDescription')}
|
||||
onOwnChange={(value) => updateField('leftWrap', value)}
|
||||
/>
|
||||
<TextFieldWithDesc
|
||||
value={values.rightWrap}
|
||||
description={t('list.group.rightWrapDescription')}
|
||||
description={t('list:group.rightWrapDescription')}
|
||||
onOwnChange={(value) => updateField('rightWrap', value)}
|
||||
/>
|
||||
</Box>
|
||||
)
|
||||
},
|
||||
{
|
||||
title: t('list.group.emptyItemsAndPadding'),
|
||||
title: t('list:group.emptyItemsAndPadding'),
|
||||
component: (
|
||||
<Box>
|
||||
<CheckboxWithDesc
|
||||
title={t('list.group.deleteEmptyItems')}
|
||||
description={t('list.group.deleteEmptyItemsDescription')}
|
||||
title={t('list:group.deleteEmptyItems')}
|
||||
description={t('list:group.deleteEmptyItemsDescription')}
|
||||
checked={values.deleteEmptyItems}
|
||||
onChange={(value) => updateField('deleteEmptyItems', value)}
|
||||
/>
|
||||
<CheckboxWithDesc
|
||||
title={t('list.group.padNonFullGroups')}
|
||||
description={t('list.group.padNonFullGroupsDescription')}
|
||||
title={t('list:group.padNonFullGroups')}
|
||||
description={t('list:group.padNonFullGroupsDescription')}
|
||||
checked={values.padNonFullGroup}
|
||||
onChange={(value) => updateField('padNonFullGroup', value)}
|
||||
/>
|
||||
<TextFieldWithDesc
|
||||
value={values.paddingChar}
|
||||
description={t('list.group.paddingCharDescription')}
|
||||
description={t('list:group.paddingCharDescription')}
|
||||
onOwnChange={(value) => updateField('paddingChar', value)}
|
||||
/>
|
||||
</Box>
|
||||
|
|
|
|||
|
|
@ -11,8 +11,8 @@ export const tool = defineTool('list', {
|
|||
keywords: ['group'],
|
||||
component: lazy(() => import('./index')),
|
||||
i18n: {
|
||||
name: 'list.group.name',
|
||||
description: 'list.group.description',
|
||||
shortDescription: 'list.group.shortDescription'
|
||||
name: 'list:group.title',
|
||||
description: 'list:group.description',
|
||||
shortDescription: 'list:group.shortDescription'
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -121,7 +121,7 @@ export default function Reverse({ title }: ToolComponentProps) {
|
|||
updateField
|
||||
}) => [
|
||||
{
|
||||
title: t('list.reverse.splitterMode'),
|
||||
title: t('list:reverse.splitterMode'),
|
||||
component: (
|
||||
<Box>
|
||||
{splitOperators.map(({ title, description, type }) => (
|
||||
|
|
@ -137,11 +137,11 @@ export default function Reverse({ title }: ToolComponentProps) {
|
|||
)
|
||||
},
|
||||
{
|
||||
title: t('list.reverse.itemSeparator'),
|
||||
title: t('list:reverse.itemSeparator'),
|
||||
component: (
|
||||
<Box>
|
||||
<TextFieldWithDesc
|
||||
description={t('list.reverse.itemSeparatorDescription')}
|
||||
description={t('list:reverse.itemSeparatorDescription')}
|
||||
value={values.splitSeparator}
|
||||
onOwnChange={(val) => updateField('splitSeparator', val)}
|
||||
/>
|
||||
|
|
@ -149,11 +149,11 @@ export default function Reverse({ title }: ToolComponentProps) {
|
|||
)
|
||||
},
|
||||
{
|
||||
title: t('list.reverse.outputListOptions'),
|
||||
title: t('list:reverse.outputListOptions'),
|
||||
component: (
|
||||
<Box>
|
||||
<TextFieldWithDesc
|
||||
description={t('list.reverse.outputSeparatorDescription')}
|
||||
description={t('list:reverse.outputSeparatorDescription')}
|
||||
value={values.joinSeparator}
|
||||
onOwnChange={(val) => updateField('joinSeparator', val)}
|
||||
/>
|
||||
|
|
@ -179,17 +179,17 @@ export default function Reverse({ title }: ToolComponentProps) {
|
|||
setInput={setInput}
|
||||
inputComponent={
|
||||
<ToolTextInput
|
||||
title={t('list.reverse.inputTitle')}
|
||||
title={t('list:reverse.inputTitle')}
|
||||
value={input}
|
||||
onChange={setInput}
|
||||
/>
|
||||
}
|
||||
resultComponent={
|
||||
<ToolTextResult title={t('list.reverse.resultTitle')} value={result} />
|
||||
<ToolTextResult title={t('list:reverse.resultTitle')} value={result} />
|
||||
}
|
||||
toolInfo={{
|
||||
title: t('list.reverse.toolInfo.title'),
|
||||
description: t('list.reverse.toolInfo.description')
|
||||
title: t('list:reverse.toolInfo.title'),
|
||||
description: t('list:reverse.toolInfo.description')
|
||||
}}
|
||||
exampleCards={exampleCards}
|
||||
/>
|
||||
|
|
|
|||
|
|
@ -12,8 +12,8 @@ export const tool = defineTool('list', {
|
|||
keywords: ['reverse'],
|
||||
component: lazy(() => import('./index')),
|
||||
i18n: {
|
||||
name: 'list.reverse.name',
|
||||
description: 'list.reverse.description',
|
||||
shortDescription: 'list.reverse.shortDescription'
|
||||
name: 'list:reverse.title',
|
||||
description: 'list:reverse.description',
|
||||
shortDescription: 'list:reverse.shortDescription'
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -12,8 +12,8 @@ export const tool = defineTool('list', {
|
|||
keywords: ['rotate'],
|
||||
component: lazy(() => import('./index')),
|
||||
i18n: {
|
||||
name: 'list.rotate.name',
|
||||
description: 'list.rotate.description',
|
||||
shortDescription: 'list.rotate.shortDescription'
|
||||
name: 'list:rotate.title',
|
||||
description: 'list:rotate.description',
|
||||
shortDescription: 'list:rotate.shortDescription'
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -53,24 +53,24 @@ export default function Shuffle() {
|
|||
|
||||
return (
|
||||
<ToolContent
|
||||
title={t('list.shuffle.title')}
|
||||
title={t('list:shuffle.title')}
|
||||
initialValues={initialValues}
|
||||
compute={compute}
|
||||
input={input}
|
||||
setInput={setInput}
|
||||
inputComponent={
|
||||
<ToolTextInput
|
||||
title={t('list.shuffle.inputTitle')}
|
||||
title={t('list:shuffle.inputTitle')}
|
||||
value={input}
|
||||
onChange={setInput}
|
||||
/>
|
||||
}
|
||||
resultComponent={
|
||||
<ToolTextResult title={t('list.shuffle.resultTitle')} value={result} />
|
||||
<ToolTextResult title={t('list:shuffle.resultTitle')} value={result} />
|
||||
}
|
||||
getGroups={({ values, updateField }) => [
|
||||
{
|
||||
title: t('list.shuffle.inputListSeparator'),
|
||||
title: t('list:shuffle.inputListSeparator'),
|
||||
component: (
|
||||
<Box>
|
||||
{splitOperators.map(({ title, description, type }) => (
|
||||
|
|
@ -83,7 +83,7 @@ export default function Shuffle() {
|
|||
/>
|
||||
))}
|
||||
<TextFieldWithDesc
|
||||
description={t('list.shuffle.delimiterDescription')}
|
||||
description={t('list:shuffle.delimiterDescription')}
|
||||
value={values.splitSeparator}
|
||||
onOwnChange={(val) => updateField('splitSeparator', val)}
|
||||
/>
|
||||
|
|
@ -91,11 +91,11 @@ export default function Shuffle() {
|
|||
)
|
||||
},
|
||||
{
|
||||
title: t('list.shuffle.shuffledListLength'),
|
||||
title: t('list:shuffle.shuffledListLength'),
|
||||
component: (
|
||||
<Box>
|
||||
<TextFieldWithDesc
|
||||
description={t('list.shuffle.outputLengthDescription')}
|
||||
description={t('list:shuffle.outputLengthDescription')}
|
||||
value={values.length}
|
||||
onOwnChange={(val) => updateField('length', val)}
|
||||
/>
|
||||
|
|
@ -103,13 +103,13 @@ export default function Shuffle() {
|
|||
)
|
||||
},
|
||||
{
|
||||
title: t('list.shuffle.shuffledListSeparator'),
|
||||
title: t('list:shuffle.shuffledListSeparator'),
|
||||
component: (
|
||||
<Box>
|
||||
<TextFieldWithDesc
|
||||
value={values.joinSeparator}
|
||||
onOwnChange={(value) => updateField('joinSeparator', value)}
|
||||
description={t('list.shuffle.joinSeparatorDescription')}
|
||||
description={t('list:shuffle.joinSeparatorDescription')}
|
||||
/>
|
||||
</Box>
|
||||
)
|
||||
|
|
|
|||
|
|
@ -12,8 +12,8 @@ export const tool = defineTool('list', {
|
|||
keywords: ['shuffle'],
|
||||
component: lazy(() => import('./index')),
|
||||
i18n: {
|
||||
name: 'list.shuffle.name',
|
||||
description: 'list.shuffle.description',
|
||||
shortDescription: 'list.shuffle.shortDescription'
|
||||
name: 'list:shuffle.title',
|
||||
description: 'list:shuffle.description',
|
||||
shortDescription: 'list:shuffle.shortDescription'
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -72,18 +72,18 @@ export default function SplitText({ title }: ToolComponentProps) {
|
|||
input={input}
|
||||
inputComponent={
|
||||
<ToolTextInput
|
||||
title={t('list.sort.inputTitle')}
|
||||
title={t('list:sort.inputTitle')}
|
||||
value={input}
|
||||
onChange={setInput}
|
||||
/>
|
||||
}
|
||||
resultComponent={
|
||||
<ToolTextResult title={t('list.sort.resultTitle')} value={result} />
|
||||
<ToolTextResult title={t('list:sort.resultTitle')} value={result} />
|
||||
}
|
||||
initialValues={initialValues}
|
||||
getGroups={({ values, updateField }) => [
|
||||
{
|
||||
title: t('list.sort.inputItemSeparator'),
|
||||
title: t('list:sort.inputItemSeparator'),
|
||||
component: (
|
||||
<Box>
|
||||
{splitOperators.map(({ title, description, type }) => (
|
||||
|
|
@ -98,7 +98,7 @@ export default function SplitText({ title }: ToolComponentProps) {
|
|||
/>
|
||||
))}
|
||||
<TextFieldWithDesc
|
||||
description={t('list.sort.splitSeparatorDescription')}
|
||||
description={t('list:sort.splitSeparatorDescription')}
|
||||
value={values.splitSeparator}
|
||||
onOwnChange={(val) => updateField('splitSeparator', val)}
|
||||
/>
|
||||
|
|
@ -106,45 +106,45 @@ export default function SplitText({ title }: ToolComponentProps) {
|
|||
)
|
||||
},
|
||||
{
|
||||
title: t('list.sort.sortMethod'),
|
||||
title: t('list:sort.sortMethod'),
|
||||
component: (
|
||||
<Box>
|
||||
<SelectWithDesc
|
||||
selected={values.sortingMethod}
|
||||
options={[
|
||||
{
|
||||
label: t('list.sort.sortOptions.alphabetic'),
|
||||
label: t('list:sort.sortOptions.alphabetic'),
|
||||
value: 'alphabetic'
|
||||
},
|
||||
{
|
||||
label: t('list.sort.sortOptions.numeric'),
|
||||
label: t('list:sort.sortOptions.numeric'),
|
||||
value: 'numeric'
|
||||
},
|
||||
{ label: t('list.sort.sortOptions.length'), value: 'length' }
|
||||
{ label: t('list:sort.sortOptions.length'), value: 'length' }
|
||||
]}
|
||||
onChange={(value) => updateField('sortingMethod', value)}
|
||||
description={t('list.sort.sortMethodDescription')}
|
||||
description={t('list:sort.sortMethodDescription')}
|
||||
/>
|
||||
<SelectWithDesc
|
||||
selected={values.increasing}
|
||||
options={[
|
||||
{
|
||||
label: t('list.sort.orderOptions.increasing'),
|
||||
label: t('list:sort.orderOptions.increasing'),
|
||||
value: true
|
||||
},
|
||||
{
|
||||
label: t('list.sort.orderOptions.decreasing'),
|
||||
label: t('list:sort.orderOptions.decreasing'),
|
||||
value: false
|
||||
}
|
||||
]}
|
||||
onChange={(value) => {
|
||||
updateField('increasing', value);
|
||||
}}
|
||||
description={t('list.sort.orderDescription')}
|
||||
description={t('list:sort.orderDescription')}
|
||||
/>
|
||||
<CheckboxWithDesc
|
||||
title={t('list.sort.caseSensitive')}
|
||||
description={t('list.sort.caseSensitiveDescription')}
|
||||
title={t('list:sort.caseSensitive')}
|
||||
description={t('list:sort.caseSensitiveDescription')}
|
||||
checked={values.caseSensitive}
|
||||
onChange={(val) => updateField('caseSensitive', val)}
|
||||
/>
|
||||
|
|
@ -152,17 +152,17 @@ export default function SplitText({ title }: ToolComponentProps) {
|
|||
)
|
||||
},
|
||||
{
|
||||
title: t('list.sort.sortedItemProperties'),
|
||||
title: t('list:sort.sortedItemProperties'),
|
||||
component: (
|
||||
<Box>
|
||||
<TextFieldWithDesc
|
||||
description={t('list.sort.joinSeparatorDescription')}
|
||||
description={t('list:sort.joinSeparatorDescription')}
|
||||
value={values.joinSeparator}
|
||||
onOwnChange={(val) => updateField('joinSeparator', val)}
|
||||
/>
|
||||
<CheckboxWithDesc
|
||||
title={t('list.sort.removeDuplicates')}
|
||||
description={t('list.sort.removeDuplicatesDescription')}
|
||||
title={t('list:sort.removeDuplicates')}
|
||||
description={t('list:sort.removeDuplicatesDescription')}
|
||||
checked={values.removeDuplicated}
|
||||
onChange={(val) => updateField('removeDuplicated', val)}
|
||||
/>
|
||||
|
|
|
|||
|
|
@ -12,8 +12,8 @@ export const tool = defineTool('list', {
|
|||
keywords: ['sort'],
|
||||
component: lazy(() => import('./index')),
|
||||
i18n: {
|
||||
name: 'list.sort.name',
|
||||
description: 'list.sort.description',
|
||||
shortDescription: 'list.sort.shortDescription'
|
||||
name: 'list:sort.title',
|
||||
description: 'list:sort.description',
|
||||
shortDescription: 'list:sort.shortDescription'
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -11,8 +11,8 @@ export const tool = defineTool('list', {
|
|||
keywords: ['truncate'],
|
||||
component: lazy(() => import('./index')),
|
||||
i18n: {
|
||||
name: 'list.truncate.name',
|
||||
description: 'list.truncate.description',
|
||||
shortDescription: 'list.truncate.shortDescription'
|
||||
name: 'list:truncate.title',
|
||||
description: 'list:truncate.description',
|
||||
shortDescription: 'list:truncate.shortDescription'
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -12,8 +12,8 @@ export const tool = defineTool('list', {
|
|||
keywords: ['unwrap'],
|
||||
component: lazy(() => import('./index')),
|
||||
i18n: {
|
||||
name: 'list.unwrap.name',
|
||||
description: 'list.unwrap.description',
|
||||
shortDescription: 'list.unwrap.shortDescription'
|
||||
name: 'list:unwrap.title',
|
||||
description: 'list:unwrap.description',
|
||||
shortDescription: 'list:unwrap.shortDescription'
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -119,50 +119,50 @@ export default function Wrap({ title }: ToolComponentProps) {
|
|||
updateField
|
||||
}) => [
|
||||
{
|
||||
title: t('list.wrap.splitOptions'),
|
||||
title: t('list:wrap.splitOptions'),
|
||||
component: (
|
||||
<Box>
|
||||
<SimpleRadio
|
||||
onClick={() => updateField('splitOperatorType', 'symbol')}
|
||||
checked={values.splitOperatorType === 'symbol'}
|
||||
title={t('list.wrap.splitBySymbol')}
|
||||
title={t('list:wrap.splitBySymbol')}
|
||||
/>
|
||||
<SimpleRadio
|
||||
onClick={() => updateField('splitOperatorType', 'regex')}
|
||||
checked={values.splitOperatorType === 'regex'}
|
||||
title={t('list.wrap.splitByRegex')}
|
||||
title={t('list:wrap.splitByRegex')}
|
||||
/>
|
||||
<TextFieldWithDesc
|
||||
value={values.splitSeparator}
|
||||
onOwnChange={(val) => updateField('splitSeparator', val)}
|
||||
description={t('list.wrap.splitSeparatorDescription')}
|
||||
description={t('list:wrap.splitSeparatorDescription')}
|
||||
/>
|
||||
<TextFieldWithDesc
|
||||
value={values.joinSeparator}
|
||||
onOwnChange={(val) => updateField('joinSeparator', val)}
|
||||
description={t('list.wrap.joinSeparatorDescription')}
|
||||
description={t('list:wrap.joinSeparatorDescription')}
|
||||
/>
|
||||
<CheckboxWithDesc
|
||||
checked={values.deleteEmptyItems}
|
||||
onChange={(checked) => updateField('deleteEmptyItems', checked)}
|
||||
title={t('list.wrap.removeEmptyItems')}
|
||||
title={t('list:wrap.removeEmptyItems')}
|
||||
/>
|
||||
</Box>
|
||||
)
|
||||
},
|
||||
{
|
||||
title: t('list.wrap.wrapOptions'),
|
||||
title: t('list:wrap.wrapOptions'),
|
||||
component: (
|
||||
<Box>
|
||||
<TextFieldWithDesc
|
||||
value={values.left}
|
||||
onOwnChange={(val) => updateField('left', val)}
|
||||
description={t('list.wrap.leftTextDescription')}
|
||||
description={t('list:wrap.leftTextDescription')}
|
||||
/>
|
||||
<TextFieldWithDesc
|
||||
value={values.right}
|
||||
onOwnChange={(val) => updateField('right', val)}
|
||||
description={t('list.wrap.rightTextDescription')}
|
||||
description={t('list:wrap.rightTextDescription')}
|
||||
/>
|
||||
</Box>
|
||||
)
|
||||
|
|
@ -174,20 +174,20 @@ export default function Wrap({ title }: ToolComponentProps) {
|
|||
title={title}
|
||||
inputComponent={
|
||||
<ToolTextInput
|
||||
title={t('list.wrap.inputTitle')}
|
||||
title={t('list:wrap.inputTitle')}
|
||||
value={input}
|
||||
onChange={setInput}
|
||||
/>
|
||||
}
|
||||
resultComponent={
|
||||
<ToolTextResult title={t('list.wrap.resultTitle')} value={result} />
|
||||
<ToolTextResult title={t('list:wrap.resultTitle')} value={result} />
|
||||
}
|
||||
initialValues={initialValues}
|
||||
getGroups={getGroups}
|
||||
validationSchema={validationSchema}
|
||||
toolInfo={{
|
||||
title: t('list.wrap.toolInfo.title'),
|
||||
description: t('list.wrap.toolInfo.description')
|
||||
title: t('list:wrap.toolInfo.title'),
|
||||
description: t('list:wrap.toolInfo.description')
|
||||
}}
|
||||
exampleCards={exampleCards}
|
||||
input={input}
|
||||
|
|
|
|||
|
|
@ -12,8 +12,8 @@ export const tool = defineTool('list', {
|
|||
keywords: ['wrap'],
|
||||
component: lazy(() => import('./index')),
|
||||
i18n: {
|
||||
name: 'list.wrap.name',
|
||||
description: 'list.wrap.description',
|
||||
shortDescription: 'list.wrap.shortDescription'
|
||||
name: 'list:wrap.title',
|
||||
description: 'list:wrap.description',
|
||||
shortDescription: 'list:wrap.shortDescription'
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -80,7 +80,7 @@ export default function ArithmeticSequence({ title }: ToolComponentProps) {
|
|||
inputComponent={null}
|
||||
resultComponent={
|
||||
<ToolTextResult
|
||||
title={t('number.arithmeticSequence.resultTitle')}
|
||||
title={t('number:arithmeticSequence.resultTitle')}
|
||||
value={result}
|
||||
/>
|
||||
}
|
||||
|
|
@ -88,17 +88,17 @@ export default function ArithmeticSequence({ title }: ToolComponentProps) {
|
|||
validationSchema={validationSchema}
|
||||
exampleCards={exampleCards}
|
||||
toolInfo={{
|
||||
title: t('number.arithmeticSequence.toolInfo.title'),
|
||||
description: t('number.arithmeticSequence.toolInfo.description')
|
||||
title: t('number:arithmeticSequence.toolInfo.title'),
|
||||
description: t('number:arithmeticSequence.toolInfo.description')
|
||||
}}
|
||||
getGroups={({ values, updateField }) => [
|
||||
{
|
||||
title: t('number.arithmeticSequence.sequenceParameters'),
|
||||
title: t('number:arithmeticSequence.sequenceParameters'),
|
||||
component: (
|
||||
<Box>
|
||||
<TextFieldWithDesc
|
||||
description={t(
|
||||
'number.arithmeticSequence.firstTermDescription'
|
||||
'number:arithmeticSequence.firstTermDescription'
|
||||
)}
|
||||
value={values.firstTerm}
|
||||
onOwnChange={(val) => updateField('firstTerm', val)}
|
||||
|
|
@ -106,7 +106,7 @@ export default function ArithmeticSequence({ title }: ToolComponentProps) {
|
|||
/>
|
||||
<TextFieldWithDesc
|
||||
description={t(
|
||||
'number.arithmeticSequence.commonDifferenceDescription'
|
||||
'number:arithmeticSequence.commonDifferenceDescription'
|
||||
)}
|
||||
value={values.commonDifference}
|
||||
onOwnChange={(val) => updateField('commonDifference', val)}
|
||||
|
|
@ -114,7 +114,7 @@ export default function ArithmeticSequence({ title }: ToolComponentProps) {
|
|||
/>
|
||||
<TextFieldWithDesc
|
||||
description={t(
|
||||
'number.arithmeticSequence.numberOfTermsDescription'
|
||||
'number:arithmeticSequence.numberOfTermsDescription'
|
||||
)}
|
||||
value={values.numberOfTerms}
|
||||
onOwnChange={(val) => updateField('numberOfTerms', val)}
|
||||
|
|
@ -124,10 +124,10 @@ export default function ArithmeticSequence({ title }: ToolComponentProps) {
|
|||
)
|
||||
},
|
||||
{
|
||||
title: t('number.arithmeticSequence.outputFormat'),
|
||||
title: t('number:arithmeticSequence.outputFormat'),
|
||||
component: (
|
||||
<TextFieldWithDesc
|
||||
description={t('number.arithmeticSequence.separatorDescription')}
|
||||
description={t('number:arithmeticSequence.separatorDescription')}
|
||||
value={values.separator}
|
||||
onOwnChange={(val) => updateField('separator', val)}
|
||||
/>
|
||||
|
|
|
|||
|
|
@ -11,8 +11,8 @@ export const tool = defineTool('number', {
|
|||
keywords: ['arithmetic', 'sequence', 'math', 'progression'],
|
||||
component: lazy(() => import('./index')),
|
||||
i18n: {
|
||||
name: 'number.arithmeticSequence.name',
|
||||
description: 'number.arithmeticSequence.description',
|
||||
shortDescription: 'number.arithmeticSequence.shortDescription'
|
||||
name: 'number:arithmeticSequence.title',
|
||||
description: 'number:arithmeticSequence.description',
|
||||
shortDescription: 'number:arithmeticSequence.shortDescription'
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -36,23 +36,23 @@ export default function GenerateNumbers({ title }: ToolComponentProps) {
|
|||
initialValues={initialValues}
|
||||
getGroups={({ values, updateField }) => [
|
||||
{
|
||||
title: t('number.generate.arithmeticSequenceOption'),
|
||||
title: t('number:generate.arithmeticSequenceOption'),
|
||||
component: (
|
||||
<Box>
|
||||
<TextFieldWithDesc
|
||||
description={t('number.generate.startSequenceDescription')}
|
||||
description={t('number:generate.startSequenceDescription')}
|
||||
value={values.firstValue}
|
||||
onOwnChange={(val) => updateField('firstValue', val)}
|
||||
type={'number'}
|
||||
/>
|
||||
<TextFieldWithDesc
|
||||
description={t('number.generate.stepDescription')}
|
||||
description={t('number:generate.stepDescription')}
|
||||
value={values.step}
|
||||
onOwnChange={(val) => updateField('step', val)}
|
||||
type={'number'}
|
||||
/>
|
||||
<TextFieldWithDesc
|
||||
description={t('number.generate.numberOfElementsDescription')}
|
||||
description={t('number:generate.numberOfElementsDescription')}
|
||||
value={values.numberOfNumbers}
|
||||
onOwnChange={(val) => updateField('numberOfNumbers', val)}
|
||||
type={'number'}
|
||||
|
|
@ -61,10 +61,10 @@ export default function GenerateNumbers({ title }: ToolComponentProps) {
|
|||
)
|
||||
},
|
||||
{
|
||||
title: t('number.generate.separator'),
|
||||
title: t('number:generate.separator'),
|
||||
component: (
|
||||
<TextFieldWithDesc
|
||||
description={t('number.generate.separatorDescription')}
|
||||
description={t('number:generate.separatorDescription')}
|
||||
value={values.separator}
|
||||
onOwnChange={(val) => updateField('separator', val)}
|
||||
/>
|
||||
|
|
@ -74,7 +74,7 @@ export default function GenerateNumbers({ title }: ToolComponentProps) {
|
|||
compute={compute}
|
||||
resultComponent={
|
||||
<ToolTextResult
|
||||
title={t('number.generate.resultTitle')}
|
||||
title={t('number:generate.resultTitle')}
|
||||
value={result}
|
||||
/>
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,8 +12,8 @@ export const tool = defineTool('number', {
|
|||
keywords: ['generate', 'random', 'numbers'],
|
||||
component: lazy(() => import('./index')),
|
||||
i18n: {
|
||||
name: 'number.generate.name',
|
||||
description: 'number.generate.description',
|
||||
shortDescription: 'number.generate.shortDescription'
|
||||
name: 'number:generate.title',
|
||||
description: 'number:generate.description',
|
||||
shortDescription: 'number:generate.shortDescription'
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -128,7 +128,7 @@ export default function SumNumbers({ title }: ToolComponentProps) {
|
|||
updateField
|
||||
}) => [
|
||||
{
|
||||
title: t('number.sum.numberExtraction'),
|
||||
title: t('number:sum.numberExtraction'),
|
||||
component: extractionTypes.map(
|
||||
({ title, description, type, withTextField, textValueAccessor }) =>
|
||||
withTextField ? (
|
||||
|
|
@ -158,11 +158,11 @@ export default function SumNumbers({ title }: ToolComponentProps) {
|
|||
)
|
||||
},
|
||||
{
|
||||
title: t('number.sum.runningSum'),
|
||||
title: t('number:sum.runningSum'),
|
||||
component: (
|
||||
<CheckboxWithDesc
|
||||
title={t('number.sum.printRunningSum')}
|
||||
description={t('number.sum.printRunningSumDescription')}
|
||||
title={t('number:sum.printRunningSum')}
|
||||
description={t('number:sum.printRunningSumDescription')}
|
||||
checked={values.printRunningSum}
|
||||
onChange={(value) => updateField('printRunningSum', value)}
|
||||
/>
|
||||
|
|
@ -175,13 +175,13 @@ export default function SumNumbers({ title }: ToolComponentProps) {
|
|||
input={input}
|
||||
inputComponent={
|
||||
<ToolTextInput
|
||||
title={t('number.sum.inputTitle')}
|
||||
title={t('number:sum.inputTitle')}
|
||||
value={input}
|
||||
onChange={setInput}
|
||||
/>
|
||||
}
|
||||
resultComponent={
|
||||
<ToolTextResult title={t('number.sum.resultTitle')} value={result} />
|
||||
<ToolTextResult title={t('number:sum.resultTitle')} value={result} />
|
||||
}
|
||||
initialValues={initialValues}
|
||||
getGroups={getGroups}
|
||||
|
|
@ -191,8 +191,8 @@ export default function SumNumbers({ title }: ToolComponentProps) {
|
|||
}}
|
||||
setInput={setInput}
|
||||
toolInfo={{
|
||||
title: t('number.sum.toolInfo.title'),
|
||||
description: t('number.sum.toolInfo.description')
|
||||
title: t('number:sum.toolInfo.title'),
|
||||
description: t('number:sum.toolInfo.description')
|
||||
}}
|
||||
exampleCards={exampleCards}
|
||||
/>
|
||||
|
|
|
|||
|
|
@ -12,8 +12,8 @@ export const tool = defineTool('number', {
|
|||
keywords: ['sum', 'add', 'calculate', 'total'],
|
||||
component: lazy(() => import('./index')),
|
||||
i18n: {
|
||||
name: 'number.sum.name',
|
||||
description: 'number.sum.description',
|
||||
shortDescription: 'number.sum.shortDescription'
|
||||
name: 'number:sum.title',
|
||||
description: 'number:sum.description',
|
||||
shortDescription: 'number:sum.shortDescription'
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -80,7 +80,7 @@ export default function CompressPdf({
|
|||
} catch (error) {
|
||||
console.error('Error getting PDF info:', error);
|
||||
setFileInfo(null);
|
||||
showSnackBar(t('pdf.compressPdf.errorReadingPdf'), 'error');
|
||||
showSnackBar(t('pdf:compressPdf.errorReadingPdf'), 'error');
|
||||
}
|
||||
};
|
||||
|
||||
|
|
@ -112,7 +112,7 @@ export default function CompressPdf({
|
|||
} catch (error) {
|
||||
console.error('Error compressing PDF:', error);
|
||||
showSnackBar(
|
||||
t('pdf.compressPdf.errorCompressingPdf', {
|
||||
t('pdf:compressPdf.errorCompressingPdf', {
|
||||
error: error instanceof Error ? error.message : String(error)
|
||||
}),
|
||||
'error'
|
||||
|
|
@ -130,18 +130,18 @@ export default function CompressPdf({
|
|||
}[] = [
|
||||
{
|
||||
value: 'low',
|
||||
label: t('pdf.compressPdf.lowCompression'),
|
||||
description: t('pdf.compressPdf.lowCompressionDescription')
|
||||
label: t('pdf:compressPdf.lowCompression'),
|
||||
description: t('pdf:compressPdf.lowCompressionDescription')
|
||||
},
|
||||
{
|
||||
value: 'medium',
|
||||
label: t('pdf.compressPdf.mediumCompression'),
|
||||
description: t('pdf.compressPdf.mediumCompressionDescription')
|
||||
label: t('pdf:compressPdf.mediumCompression'),
|
||||
description: t('pdf:compressPdf.mediumCompressionDescription')
|
||||
},
|
||||
{
|
||||
value: 'high',
|
||||
label: t('pdf.compressPdf.highCompression'),
|
||||
description: t('pdf.compressPdf.highCompressionDescription')
|
||||
label: t('pdf:compressPdf.highCompression'),
|
||||
description: t('pdf:compressPdf.highCompressionDescription')
|
||||
}
|
||||
];
|
||||
|
||||
|
|
@ -157,26 +157,26 @@ export default function CompressPdf({
|
|||
value={input}
|
||||
onChange={setInput}
|
||||
accept={['application/pdf']}
|
||||
title={t('pdf.compressPdf.inputTitle')}
|
||||
title={t('pdf:compressPdf.inputTitle')}
|
||||
/>
|
||||
}
|
||||
resultComponent={
|
||||
<ToolFileResult
|
||||
title={t('pdf.compressPdf.resultTitle')}
|
||||
title={t('pdf:compressPdf.resultTitle')}
|
||||
value={result}
|
||||
extension={'pdf'}
|
||||
loading={isProcessing}
|
||||
loadingText={t('pdf.compressPdf.compressingPdf')}
|
||||
loadingText={t('pdf:compressPdf.compressingPdf')}
|
||||
/>
|
||||
}
|
||||
getGroups={({ values, updateField }) => [
|
||||
{
|
||||
title: t('pdf.compressPdf.compressionSettings'),
|
||||
title: t('pdf:compressPdf.compressionSettings'),
|
||||
component: (
|
||||
<Box>
|
||||
<Box>
|
||||
<Typography variant="subtitle2" sx={{ mb: 1 }}>
|
||||
{t('pdf.compressPdf.compressionLevel')}
|
||||
{t('pdf:compressPdf.compressionLevel')}
|
||||
</Typography>
|
||||
|
||||
{compressionOptions.map((option) => (
|
||||
|
|
@ -201,16 +201,16 @@ export default function CompressPdf({
|
|||
}}
|
||||
>
|
||||
<Typography variant="body2">
|
||||
{t('pdf.compressPdf.fileSize')}:{' '}
|
||||
{t('pdf:compressPdf.fileSize')}:{' '}
|
||||
<strong>{fileInfo.size}</strong>
|
||||
</Typography>
|
||||
<Typography variant="body2">
|
||||
{t('pdf.compressPdf.pages')}:{' '}
|
||||
{t('pdf:compressPdf.pages')}:{' '}
|
||||
<strong>{fileInfo.pages}</strong>
|
||||
</Typography>
|
||||
{resultSize && (
|
||||
<Typography variant="body2">
|
||||
{t('pdf.compressPdf.compressedFileSize')}:{' '}
|
||||
{t('pdf:compressPdf.compressedFileSize')}:{' '}
|
||||
<strong>{resultSize}</strong>
|
||||
</Typography>
|
||||
)}
|
||||
|
|
|
|||
|
|
@ -26,8 +26,8 @@ export const tool = defineTool('pdf', {
|
|||
'Compress PDF files securely in your browser using Ghostscript. Your files never leave your device, ensuring complete privacy while reducing file sizes for email sharing, uploading to websites, or saving storage space. Powered by WebAssembly technology.',
|
||||
component: lazy(() => import('./index')),
|
||||
i18n: {
|
||||
name: 'pdf.compressPdf.name',
|
||||
description: 'pdf.compressPdf.description',
|
||||
shortDescription: 'pdf.compressPdf.shortDescription'
|
||||
name: 'pdf:compressPdf.title',
|
||||
description: 'pdf:compressPdf.description',
|
||||
shortDescription: 'pdf:compressPdf.shortDescription'
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -44,23 +44,23 @@ export default function MergePdf({ title }: ToolComponentProps) {
|
|||
setInput(pdfInputs);
|
||||
}}
|
||||
accept={['application/pdf']}
|
||||
title={t('pdf.merge.inputTitle')}
|
||||
title={t('pdf:merge.inputTitle')}
|
||||
type="pdf"
|
||||
/>
|
||||
}
|
||||
getGroups={null}
|
||||
resultComponent={
|
||||
<ToolFileResult
|
||||
title={t('pdf.merge.resultTitle')}
|
||||
title={t('pdf:merge.resultTitle')}
|
||||
value={result}
|
||||
extension={'pdf'}
|
||||
loading={isProcessing}
|
||||
loadingText={t('pdf.merge.loadingText')}
|
||||
loadingText={t('pdf:merge.loadingText')}
|
||||
/>
|
||||
}
|
||||
toolInfo={{
|
||||
title: t('pdf.merge.toolInfo.title'),
|
||||
description: t('pdf.merge.toolInfo.description')
|
||||
title: t('pdf:merge.toolInfo.title'),
|
||||
description: t('pdf:merge.toolInfo.description')
|
||||
}}
|
||||
/>
|
||||
);
|
||||
|
|
|
|||
|
|
@ -10,8 +10,8 @@ export const meta = defineTool('pdf', {
|
|||
keywords: ['pdf', 'merge', 'extract', 'pages', 'combine', 'document'],
|
||||
path: 'merge-pdf',
|
||||
i18n: {
|
||||
name: 'pdf.mergePdf.name',
|
||||
description: 'pdf.mergePdf.description',
|
||||
shortDescription: 'pdf.mergePdf.shortDescription'
|
||||
name: 'pdf:mergePdf.title',
|
||||
description: 'pdf:mergePdf.description',
|
||||
shortDescription: 'pdf:mergePdf.shortDescription'
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -11,8 +11,8 @@ export const meta = defineTool('pdf', {
|
|||
keywords: ['pdf', 'epub', 'convert', 'ebook'],
|
||||
path: 'pdf-to-epub',
|
||||
i18n: {
|
||||
name: 'pdf.pdfToEpub.name',
|
||||
description: 'pdf.pdfToEpub.description',
|
||||
shortDescription: 'pdf.pdfToEpub.shortDescription'
|
||||
name: 'pdf:pdfToEpub.title',
|
||||
description: 'pdf:pdfToEpub.description',
|
||||
shortDescription: 'pdf:pdfToEpub.shortDescription'
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -25,8 +25,8 @@ export const tool = defineTool('pdf', {
|
|||
'Add password protection to your PDF files securely in your browser. Your files never leave your device, ensuring complete privacy while securing your documents with password encryption. Perfect for protecting sensitive information, confidential documents, or personal data.',
|
||||
component: lazy(() => import('./index')),
|
||||
i18n: {
|
||||
name: 'pdf.protectPdf.name',
|
||||
description: 'pdf.protectPdf.description',
|
||||
shortDescription: 'pdf.protectPdf.shortDescription'
|
||||
name: 'pdf:protectPdf.title',
|
||||
description: 'pdf:protectPdf.description',
|
||||
shortDescription: 'pdf:protectPdf.shortDescription'
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -92,7 +92,7 @@ export default function RotatePdf({
|
|||
if (applyToAllPages) {
|
||||
setPageRangePreview(
|
||||
totalPages > 0
|
||||
? t('pdf.rotatePdf.allPagesWillBeRotated', { count: totalPages })
|
||||
? t('pdf:rotatePdf.allPagesWillBeRotated', { count: totalPages })
|
||||
: ''
|
||||
);
|
||||
return;
|
||||
|
|
@ -105,7 +105,7 @@ export default function RotatePdf({
|
|||
|
||||
try {
|
||||
const count = parsePageRanges(pageRanges, totalPages).length;
|
||||
setPageRangePreview(t('pdf.rotatePdf.pagesWillBeRotated', { count }));
|
||||
setPageRangePreview(t('pdf:rotatePdf.pagesWillBeRotated', { count }));
|
||||
} catch (error) {
|
||||
setPageRangePreview('');
|
||||
}
|
||||
|
|
@ -125,9 +125,9 @@ export default function RotatePdf({
|
|||
}
|
||||
};
|
||||
const angleOptions: { value: RotationAngle; label: string }[] = [
|
||||
{ value: 90, label: t('pdf.rotatePdf.angleOptions.clockwise90') },
|
||||
{ value: 180, label: t('pdf.rotatePdf.angleOptions.upsideDown180') },
|
||||
{ value: 270, label: t('pdf.rotatePdf.angleOptions.counterClockwise270') }
|
||||
{ value: 90, label: t('pdf:rotatePdf.angleOptions.clockwise90') },
|
||||
{ value: 180, label: t('pdf:rotatePdf.angleOptions.upsideDown180') },
|
||||
{ value: 270, label: t('pdf:rotatePdf.angleOptions.counterClockwise270') }
|
||||
];
|
||||
return (
|
||||
<ToolContent
|
||||
|
|
@ -142,25 +142,25 @@ export default function RotatePdf({
|
|||
value={input}
|
||||
onChange={setInput}
|
||||
accept={['application/pdf']}
|
||||
title={t('pdf.rotatePdf.inputTitle')}
|
||||
title={t('pdf:rotatePdf.inputTitle')}
|
||||
/>
|
||||
}
|
||||
resultComponent={
|
||||
<ToolFileResult
|
||||
title={t('pdf.rotatePdf.resultTitle')}
|
||||
title={t('pdf:rotatePdf.resultTitle')}
|
||||
value={result}
|
||||
extension={'pdf'}
|
||||
loading={isProcessing}
|
||||
loadingText={t('pdf.rotatePdf.rotatingPages')}
|
||||
loadingText={t('pdf:rotatePdf.rotatingPages')}
|
||||
/>
|
||||
}
|
||||
getGroups={({ values, updateField }) => [
|
||||
{
|
||||
title: t('pdf.rotatePdf.rotationSettings'),
|
||||
title: t('pdf:rotatePdf.rotationSettings'),
|
||||
component: (
|
||||
<Box>
|
||||
<Typography variant="subtitle2" sx={{ mb: 1 }}>
|
||||
{t('pdf.rotatePdf.rotationAngle')}
|
||||
{t('pdf:rotatePdf.rotationAngle')}
|
||||
</Typography>
|
||||
{angleOptions.map((angleOption) => (
|
||||
<SimpleRadio
|
||||
|
|
@ -183,7 +183,7 @@ export default function RotatePdf({
|
|||
}}
|
||||
/>
|
||||
}
|
||||
label={t('pdf.rotatePdf.applyToAllPages')}
|
||||
label={t('pdf:rotatePdf.applyToAllPages')}
|
||||
/>
|
||||
</Box>
|
||||
|
||||
|
|
@ -191,7 +191,7 @@ export default function RotatePdf({
|
|||
<Box sx={{ mt: 2 }}>
|
||||
{totalPages > 0 && (
|
||||
<Typography variant="body2" sx={{ mb: 1 }}>
|
||||
{t('pdf.rotatePdf.pdfPageCount', { count: totalPages })}
|
||||
{t('pdf:rotatePdf.pdfPageCount', { count: totalPages })}
|
||||
</Typography>
|
||||
)}
|
||||
<TextFieldWithDesc
|
||||
|
|
@ -199,8 +199,8 @@ export default function RotatePdf({
|
|||
onOwnChange={(val) => {
|
||||
updateField('pageRanges', val);
|
||||
}}
|
||||
description={t('pdf.rotatePdf.pageRangesDescription')}
|
||||
placeholder={t('pdf.rotatePdf.pageRangesPlaceholder')}
|
||||
description={t('pdf:rotatePdf.pageRangesDescription')}
|
||||
placeholder={t('pdf:rotatePdf.pageRangesPlaceholder')}
|
||||
/>
|
||||
{pageRangePreview && (
|
||||
<Typography
|
||||
|
|
@ -218,8 +218,8 @@ export default function RotatePdf({
|
|||
]}
|
||||
onValuesChange={onValuesChange}
|
||||
toolInfo={{
|
||||
title: t('pdf.rotatePdf.toolInfo.title'),
|
||||
description: t('pdf.rotatePdf.toolInfo.description')
|
||||
title: t('pdf:rotatePdf.toolInfo.title'),
|
||||
description: t('pdf:rotatePdf.toolInfo.description')
|
||||
}}
|
||||
/>
|
||||
);
|
||||
|
|
|
|||
|
|
@ -85,7 +85,7 @@ export default function SplitPdf({ title }: ToolComponentProps) {
|
|||
}
|
||||
try {
|
||||
const count = parsePageRanges(pageRanges, totalPages).length;
|
||||
setPageRangePreview(t('pdf.splitPdf.pageExtractionPreview', { count }));
|
||||
setPageRangePreview(t('pdf:splitPdf.pageExtractionPreview', { count }));
|
||||
} catch (error) {
|
||||
setPageRangePreview('');
|
||||
}
|
||||
|
|
@ -118,26 +118,26 @@ export default function SplitPdf({ title }: ToolComponentProps) {
|
|||
value={input}
|
||||
onChange={setInput}
|
||||
accept={['application/pdf']}
|
||||
title={t('pdf.splitPdf.inputTitle')}
|
||||
title={t('pdf:splitPdf.inputTitle')}
|
||||
/>
|
||||
}
|
||||
resultComponent={
|
||||
<ToolFileResult
|
||||
title={t('pdf.splitPdf.resultTitle')}
|
||||
title={t('pdf:splitPdf.resultTitle')}
|
||||
value={result}
|
||||
extension={'pdf'}
|
||||
loading={isProcessing}
|
||||
loadingText={t('pdf.splitPdf.extractingPages')}
|
||||
loadingText={t('pdf:splitPdf.extractingPages')}
|
||||
/>
|
||||
}
|
||||
getGroups={({ values, updateField }) => [
|
||||
{
|
||||
title: t('pdf.splitPdf.pageSelection'),
|
||||
title: t('pdf:splitPdf.pageSelection'),
|
||||
component: (
|
||||
<Box>
|
||||
{totalPages > 0 && (
|
||||
<Typography variant="body2" sx={{ mb: 1 }}>
|
||||
{t('pdf.splitPdf.pdfPageCount', { count: totalPages })}
|
||||
{t('pdf:splitPdf.pdfPageCount', { count: totalPages })}
|
||||
</Typography>
|
||||
)}
|
||||
<TextFieldWithDesc
|
||||
|
|
@ -145,8 +145,8 @@ export default function SplitPdf({ title }: ToolComponentProps) {
|
|||
onOwnChange={(val) => {
|
||||
updateField('pageRanges', val);
|
||||
}}
|
||||
description={t('pdf.splitPdf.pageRangesDescription')}
|
||||
placeholder={t('pdf.splitPdf.pageRangesPlaceholder')}
|
||||
description={t('pdf:splitPdf.pageRangesDescription')}
|
||||
placeholder={t('pdf:splitPdf.pageRangesPlaceholder')}
|
||||
/>
|
||||
{pageRangePreview && (
|
||||
<Typography
|
||||
|
|
@ -162,8 +162,8 @@ export default function SplitPdf({ title }: ToolComponentProps) {
|
|||
]}
|
||||
onValuesChange={onValuesChange}
|
||||
toolInfo={{
|
||||
title: t('pdf.splitPdf.toolInfo.title'),
|
||||
description: t('pdf.splitPdf.toolInfo.description')
|
||||
title: t('pdf:splitPdf.toolInfo.title'),
|
||||
description: t('pdf:splitPdf.toolInfo.description')
|
||||
}}
|
||||
/>
|
||||
);
|
||||
|
|
|
|||
|
|
@ -11,8 +11,8 @@ export const meta = defineTool('pdf', {
|
|||
keywords: ['pdf', 'split', 'extract', 'pages', 'range', 'document'],
|
||||
path: 'split-pdf',
|
||||
i18n: {
|
||||
name: 'pdf.splitPdf.name',
|
||||
description: 'pdf.splitPdf.description',
|
||||
shortDescription: 'pdf.splitPdf.shortDescription'
|
||||
name: 'pdf:splitPdf.title',
|
||||
description: 'pdf:splitPdf.description',
|
||||
shortDescription: 'pdf:splitPdf.shortDescription'
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -47,18 +47,18 @@ export default function Base64({ title }: ToolComponentProps) {
|
|||
updateField
|
||||
}) => [
|
||||
{
|
||||
title: t('string.base64.optionsTitle'),
|
||||
title: t('string:base64.optionsTitle'),
|
||||
component: (
|
||||
<Box>
|
||||
<SimpleRadio
|
||||
onClick={() => updateField('mode', 'encode')}
|
||||
checked={values.mode === 'encode'}
|
||||
title={t('string.base64.encode')}
|
||||
title={t('string:base64.encode')}
|
||||
/>
|
||||
<SimpleRadio
|
||||
onClick={() => updateField('mode', 'decode')}
|
||||
checked={values.mode === 'decode'}
|
||||
title={t('string.base64.decode')}
|
||||
title={t('string:base64.decode')}
|
||||
/>
|
||||
</Box>
|
||||
)
|
||||
|
|
@ -70,19 +70,19 @@ export default function Base64({ title }: ToolComponentProps) {
|
|||
title={title}
|
||||
inputComponent={
|
||||
<ToolTextInput
|
||||
title={t('string.base64.inputTitle')}
|
||||
title={t('string:base64.inputTitle')}
|
||||
value={input}
|
||||
onChange={setInput}
|
||||
/>
|
||||
}
|
||||
resultComponent={
|
||||
<ToolTextResult title={t('string.base64.resultTitle')} value={result} />
|
||||
<ToolTextResult title={t('string:base64.resultTitle')} value={result} />
|
||||
}
|
||||
initialValues={initialValues}
|
||||
getGroups={getGroups}
|
||||
toolInfo={{
|
||||
title: t('string.base64.toolInfo.title'),
|
||||
description: t('string.base64.toolInfo.description')
|
||||
title: t('string:base64.toolInfo.title'),
|
||||
description: t('string:base64.toolInfo.description')
|
||||
}}
|
||||
exampleCards={exampleCards}
|
||||
input={input}
|
||||
|
|
|
|||
|
|
@ -11,8 +11,8 @@ export const tool = defineTool('string', {
|
|||
keywords: ['base64'],
|
||||
component: lazy(() => import('./index')),
|
||||
i18n: {
|
||||
name: 'string.base64.name',
|
||||
description: 'string.base64.description',
|
||||
shortDescription: 'string.base64.shortDescription'
|
||||
name: 'string:base64.title',
|
||||
description: 'string:base64.description',
|
||||
shortDescription: 'string:base64.shortDescription'
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -14,9 +14,9 @@ export const tool = defineTool('string', {
|
|||
keywords: ['text', 'censor', 'words', 'characters'],
|
||||
component: lazy(() => import('./index')),
|
||||
i18n: {
|
||||
name: 'string.censor.name',
|
||||
description: 'string.censor.description',
|
||||
shortDescription: 'string.censor.shortDescription',
|
||||
longDescription: 'string.censor.longDescription'
|
||||
name: 'string:censor.title',
|
||||
description: 'string:censor.description',
|
||||
shortDescription: 'string:censor.shortDescription',
|
||||
longDescription: 'string:censor.longDescription'
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -14,8 +14,8 @@ export const tool = defineTool('string', {
|
|||
keywords: ['create', 'palindrome'],
|
||||
component: lazy(() => import('./index')),
|
||||
i18n: {
|
||||
name: 'string.createPalindrome.name',
|
||||
description: 'string.createPalindrome.description',
|
||||
shortDescription: 'string.createPalindrome.shortDescription'
|
||||
name: 'string:createPalindrome.title',
|
||||
description: 'string:createPalindrome.description',
|
||||
shortDescription: 'string:createPalindrome.shortDescription'
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -12,8 +12,8 @@ export const tool = defineTool('string', {
|
|||
keywords: ['extract', 'substring'],
|
||||
component: lazy(() => import('./index')),
|
||||
i18n: {
|
||||
name: 'string.extractSubstring.name',
|
||||
description: 'string.extractSubstring.description',
|
||||
shortDescription: 'string.extractSubstring.shortDescription'
|
||||
name: 'string:extractSubstring.title',
|
||||
description: 'string:extractSubstring.description',
|
||||
shortDescription: 'string:extractSubstring.shortDescription'
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -121,18 +121,18 @@ export default function JoinText({ title }: ToolComponentProps) {
|
|||
updateField
|
||||
}) => [
|
||||
{
|
||||
title: t('string.join.textMergedOptions'),
|
||||
title: t('string:join.textMergedOptions'),
|
||||
component: (
|
||||
<TextFieldWithDesc
|
||||
placeholder={t('string.join.joinCharacterPlaceholder')}
|
||||
placeholder={t('string:join.joinCharacterPlaceholder')}
|
||||
value={values['joinCharacter']}
|
||||
onOwnChange={(value) => updateField(mergeOptions.accessor, value)}
|
||||
description={t('string.join.joinCharacterDescription')}
|
||||
description={t('string:join.joinCharacterDescription')}
|
||||
/>
|
||||
)
|
||||
},
|
||||
{
|
||||
title: t('string.join.blankLinesAndTrailingSpaces'),
|
||||
title: t('string:join.blankLinesAndTrailingSpaces'),
|
||||
component: blankTrailingOptions.map((option) => (
|
||||
<CheckboxWithDesc
|
||||
key={option.accessor}
|
||||
|
|
@ -153,18 +153,18 @@ export default function JoinText({ title }: ToolComponentProps) {
|
|||
setInput={setInput}
|
||||
inputComponent={
|
||||
<ToolTextInput
|
||||
title={t('string.join.inputTitle')}
|
||||
title={t('string:join.inputTitle')}
|
||||
value={input}
|
||||
onChange={setInput}
|
||||
/>
|
||||
}
|
||||
resultComponent={
|
||||
<ToolTextResult title={t('string.join.resultTitle')} value={result} />
|
||||
<ToolTextResult title={t('string:join.resultTitle')} value={result} />
|
||||
}
|
||||
getGroups={getGroups}
|
||||
toolInfo={{
|
||||
title: t('string.join.toolInfo.title'),
|
||||
description: t('string.join.toolInfo.description')
|
||||
title: t('string:join.toolInfo.title'),
|
||||
description: t('string:join.toolInfo.description')
|
||||
}}
|
||||
exampleCards={exampleCards}
|
||||
/>
|
||||
|
|
|
|||
|
|
@ -11,8 +11,8 @@ export const tool = defineTool('string', {
|
|||
keywords: ['join'],
|
||||
component: lazy(() => import('./index')),
|
||||
i18n: {
|
||||
name: 'string.join.name',
|
||||
description: 'string.join.description',
|
||||
shortDescription: 'string.join.shortDescription'
|
||||
name: 'string:join.title',
|
||||
description: 'string:join.description',
|
||||
shortDescription: 'string:join.shortDescription'
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -12,8 +12,8 @@ export const tool = defineTool('string', {
|
|||
keywords: ['palindrome'],
|
||||
component: lazy(() => import('./index')),
|
||||
i18n: {
|
||||
name: 'string.palindrome.name',
|
||||
description: 'string.palindrome.description',
|
||||
shortDescription: 'string.palindrome.shortDescription'
|
||||
name: 'string:palindrome.title',
|
||||
description: 'string:palindrome.description',
|
||||
shortDescription: 'string:palindrome.shortDescription'
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -95,33 +95,33 @@ export default function Quote({ title }: ToolComponentProps) {
|
|||
updateField
|
||||
}) => [
|
||||
{
|
||||
title: t('string.quote.quoteOptions'),
|
||||
title: t('string:quote.quoteOptions'),
|
||||
component: (
|
||||
<Box>
|
||||
<TextFieldWithDesc
|
||||
value={values.leftQuote}
|
||||
onOwnChange={(val) => updateField('leftQuote', val)}
|
||||
description={t('string.quote.leftQuoteDescription')}
|
||||
description={t('string:quote.leftQuoteDescription')}
|
||||
/>
|
||||
<TextFieldWithDesc
|
||||
value={values.rightQuote}
|
||||
onOwnChange={(val) => updateField('rightQuote', val)}
|
||||
description={t('string.quote.rightQuoteDescription')}
|
||||
description={t('string:quote.rightQuoteDescription')}
|
||||
/>
|
||||
<CheckboxWithDesc
|
||||
checked={values.doubleQuotation}
|
||||
onChange={(checked) => updateField('doubleQuotation', checked)}
|
||||
title={t('string.quote.allowDoubleQuotation')}
|
||||
title={t('string:quote.allowDoubleQuotation')}
|
||||
/>
|
||||
<CheckboxWithDesc
|
||||
checked={values.emptyQuoting}
|
||||
onChange={(checked) => updateField('emptyQuoting', checked)}
|
||||
title={t('string.quote.quoteEmptyLines')}
|
||||
title={t('string:quote.quoteEmptyLines')}
|
||||
/>
|
||||
<CheckboxWithDesc
|
||||
checked={values.multiLine}
|
||||
onChange={(checked) => updateField('multiLine', checked)}
|
||||
title={t('string.quote.processAsMultiLine')}
|
||||
title={t('string:quote.processAsMultiLine')}
|
||||
/>
|
||||
</Box>
|
||||
)
|
||||
|
|
@ -133,19 +133,19 @@ export default function Quote({ title }: ToolComponentProps) {
|
|||
title={title}
|
||||
inputComponent={
|
||||
<ToolTextInput
|
||||
title={t('string.quote.inputTitle')}
|
||||
title={t('string:quote.inputTitle')}
|
||||
value={input}
|
||||
onChange={setInput}
|
||||
/>
|
||||
}
|
||||
resultComponent={
|
||||
<ToolTextResult title={t('string.quote.resultTitle')} value={result} />
|
||||
<ToolTextResult title={t('string:quote.resultTitle')} value={result} />
|
||||
}
|
||||
initialValues={initialValues}
|
||||
getGroups={getGroups}
|
||||
toolInfo={{
|
||||
title: t('string.quote.toolInfo.title'),
|
||||
description: t('string.quote.toolInfo.description')
|
||||
title: t('string:quote.toolInfo.title'),
|
||||
description: t('string:quote.toolInfo.description')
|
||||
}}
|
||||
exampleCards={exampleCards}
|
||||
input={input}
|
||||
|
|
|
|||
|
|
@ -12,8 +12,8 @@ export const tool = defineTool('string', {
|
|||
keywords: ['quote'],
|
||||
component: lazy(() => import('./index')),
|
||||
i18n: {
|
||||
name: 'string.quote.name',
|
||||
description: 'string.quote.description',
|
||||
shortDescription: 'string.quote.shortDescription'
|
||||
name: 'string:quote.title',
|
||||
description: 'string:quote.description',
|
||||
shortDescription: 'string:quote.shortDescription'
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -12,8 +12,8 @@ export const tool = defineTool('string', {
|
|||
keywords: ['randomize', 'case'],
|
||||
component: lazy(() => import('./index')),
|
||||
i18n: {
|
||||
name: 'string.randomizeCase.name',
|
||||
description: 'string.randomizeCase.description',
|
||||
shortDescription: 'string.randomizeCase.shortDescription'
|
||||
name: 'string:randomizeCase.title',
|
||||
description: 'string:randomizeCase.description',
|
||||
shortDescription: 'string:randomizeCase.shortDescription'
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -11,8 +11,8 @@ export const tool = defineTool('string', {
|
|||
keywords: ['remove', 'duplicate', 'lines'],
|
||||
component: lazy(() => import('./index')),
|
||||
i18n: {
|
||||
name: 'string.removeDuplicateLines.name',
|
||||
description: 'string.removeDuplicateLines.description',
|
||||
shortDescription: 'string.removeDuplicateLines.shortDescription'
|
||||
name: 'string:removeDuplicateLines.title',
|
||||
description: 'string:removeDuplicateLines.description',
|
||||
shortDescription: 'string:removeDuplicateLines.shortDescription'
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -62,12 +62,12 @@ export default function Replacer({ title }: ToolComponentProps) {
|
|||
updateField
|
||||
}) => [
|
||||
{
|
||||
title: t('string.repeat.textRepetitions'),
|
||||
title: t('string:repeat.textRepetitions'),
|
||||
component: (
|
||||
<Box>
|
||||
<TextFieldWithDesc
|
||||
description={t('string.repeat.repeatAmountDescription')}
|
||||
placeholder={t('string.repeat.numberPlaceholder')}
|
||||
description={t('string:repeat.repeatAmountDescription')}
|
||||
placeholder={t('string:repeat.numberPlaceholder')}
|
||||
value={values.repeatAmount}
|
||||
onOwnChange={(val) => updateField('repeatAmount', val)}
|
||||
type={'number'}
|
||||
|
|
@ -76,12 +76,12 @@ export default function Replacer({ title }: ToolComponentProps) {
|
|||
)
|
||||
},
|
||||
{
|
||||
title: t('string.repeat.repetitionsDelimiter'),
|
||||
title: t('string:repeat.repetitionsDelimiter'),
|
||||
component: (
|
||||
<Box>
|
||||
<TextFieldWithDesc
|
||||
description={t('string.repeat.delimiterDescription')}
|
||||
placeholder={t('string.repeat.delimiterPlaceholder')}
|
||||
description={t('string:repeat.delimiterDescription')}
|
||||
placeholder={t('string:repeat.delimiterPlaceholder')}
|
||||
value={values.delimiter}
|
||||
onOwnChange={(val) => updateField('delimiter', val)}
|
||||
type={'text'}
|
||||
|
|
@ -101,17 +101,17 @@ export default function Replacer({ title }: ToolComponentProps) {
|
|||
setInput={setInput}
|
||||
inputComponent={
|
||||
<ToolTextInput
|
||||
title={t('string.repeat.inputTitle')}
|
||||
title={t('string:repeat.inputTitle')}
|
||||
value={input}
|
||||
onChange={setInput}
|
||||
/>
|
||||
}
|
||||
resultComponent={
|
||||
<ToolTextResult title={t('string.repeat.resultTitle')} value={result} />
|
||||
<ToolTextResult title={t('string:repeat.resultTitle')} value={result} />
|
||||
}
|
||||
toolInfo={{
|
||||
title: t('string.repeat.toolInfo.title'),
|
||||
description: t('string.repeat.toolInfo.description')
|
||||
title: t('string:repeat.toolInfo.title'),
|
||||
description: t('string:repeat.toolInfo.description')
|
||||
}}
|
||||
exampleCards={exampleCards}
|
||||
/>
|
||||
|
|
|
|||
|
|
@ -11,8 +11,8 @@ export const tool = defineTool('string', {
|
|||
keywords: ['text', 'repeat'],
|
||||
component: lazy(() => import('./index')),
|
||||
i18n: {
|
||||
name: 'string.repeat.name',
|
||||
description: 'string.repeat.description',
|
||||
shortDescription: 'string.repeat.shortDescription'
|
||||
name: 'string:repeat.title',
|
||||
description: 'string:repeat.description',
|
||||
shortDescription: 'string:repeat.shortDescription'
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -76,27 +76,27 @@ export default function Reverse({ title }: ToolComponentProps) {
|
|||
updateField
|
||||
}) => [
|
||||
{
|
||||
title: t('string.reverse.reversalOptions'),
|
||||
title: t('string:reverse.reversalOptions'),
|
||||
component: [
|
||||
<CheckboxWithDesc
|
||||
key="multiLine"
|
||||
checked={values.multiLine}
|
||||
title={t('string.reverse.processMultiLine')}
|
||||
description={t('string.reverse.processMultiLineDescription')}
|
||||
title={t('string:reverse.processMultiLine')}
|
||||
description={t('string:reverse.processMultiLineDescription')}
|
||||
onChange={(val) => updateField('multiLine', val)}
|
||||
/>,
|
||||
<CheckboxWithDesc
|
||||
key="emptyItems"
|
||||
checked={values.emptyItems}
|
||||
title={t('string.reverse.skipEmptyLines')}
|
||||
description={t('string.reverse.skipEmptyLinesDescription')}
|
||||
title={t('string:reverse.skipEmptyLines')}
|
||||
description={t('string:reverse.skipEmptyLinesDescription')}
|
||||
onChange={(val) => updateField('emptyItems', val)}
|
||||
/>,
|
||||
<CheckboxWithDesc
|
||||
key="trim"
|
||||
checked={values.trim}
|
||||
title={t('string.reverse.trimWhitespace')}
|
||||
description={t('string.reverse.trimWhitespaceDescription')}
|
||||
title={t('string:reverse.trimWhitespace')}
|
||||
description={t('string:reverse.trimWhitespaceDescription')}
|
||||
onChange={(val) => updateField('trim', val)}
|
||||
/>
|
||||
]
|
||||
|
|
@ -113,14 +113,14 @@ export default function Reverse({ title }: ToolComponentProps) {
|
|||
setInput={setInput}
|
||||
inputComponent={
|
||||
<ToolTextInput
|
||||
title={t('string.reverse.inputTitle')}
|
||||
title={t('string:reverse.inputTitle')}
|
||||
value={input}
|
||||
onChange={setInput}
|
||||
/>
|
||||
}
|
||||
resultComponent={
|
||||
<ToolTextResult
|
||||
title={t('string.reverse.resultTitle')}
|
||||
title={t('string:reverse.resultTitle')}
|
||||
value={result}
|
||||
/>
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,8 +11,8 @@ export const tool = defineTool('string', {
|
|||
keywords: ['reverse'],
|
||||
component: lazy(() => import('./index')),
|
||||
i18n: {
|
||||
name: 'string.reverse.name',
|
||||
description: 'string.reverse.description',
|
||||
shortDescription: 'string.reverse.shortDescription'
|
||||
name: 'string:reverse.title',
|
||||
description: 'string:reverse.description',
|
||||
shortDescription: 'string:reverse.shortDescription'
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -44,19 +44,19 @@ export default function Rot13({ title }: ToolComponentProps) {
|
|||
title={title}
|
||||
inputComponent={
|
||||
<ToolTextInput
|
||||
title={t('string.rot13.inputTitle')}
|
||||
title={t('string:rot13.inputTitle')}
|
||||
value={input}
|
||||
onChange={setInput}
|
||||
/>
|
||||
}
|
||||
resultComponent={
|
||||
<ToolTextResult title={t('string.rot13.resultTitle')} value={result} />
|
||||
<ToolTextResult title={t('string:rot13.resultTitle')} value={result} />
|
||||
}
|
||||
initialValues={initialValues}
|
||||
getGroups={null}
|
||||
toolInfo={{
|
||||
title: t('string.rot13.toolInfo.title'),
|
||||
description: t('string.rot13.toolInfo.description')
|
||||
title: t('string:rot13.toolInfo.title'),
|
||||
description: t('string:rot13.toolInfo.description')
|
||||
}}
|
||||
exampleCards={exampleCards}
|
||||
input={input}
|
||||
|
|
|
|||
|
|
@ -81,29 +81,29 @@ export default function Rotate({ title }: ToolComponentProps) {
|
|||
updateField
|
||||
}) => [
|
||||
{
|
||||
title: t('string.rotate.rotationOptions'),
|
||||
title: t('string:rotate.rotationOptions'),
|
||||
component: (
|
||||
<Box>
|
||||
<TextFieldWithDesc
|
||||
value={values.step}
|
||||
onOwnChange={(val) => updateField('step', val)}
|
||||
description={t('string.rotate.stepDescription')}
|
||||
description={t('string:rotate.stepDescription')}
|
||||
type="number"
|
||||
/>
|
||||
<SimpleRadio
|
||||
onClick={() => updateField('direction', 'right')}
|
||||
checked={values.direction === 'right'}
|
||||
title={t('string.rotate.rotateRight')}
|
||||
title={t('string:rotate.rotateRight')}
|
||||
/>
|
||||
<SimpleRadio
|
||||
onClick={() => updateField('direction', 'left')}
|
||||
checked={values.direction === 'left'}
|
||||
title={t('string.rotate.rotateLeft')}
|
||||
title={t('string:rotate.rotateLeft')}
|
||||
/>
|
||||
<CheckboxWithDesc
|
||||
checked={values.multiLine}
|
||||
onChange={(checked) => updateField('multiLine', checked)}
|
||||
title={t('string.rotate.processAsMultiLine')}
|
||||
title={t('string:rotate.processAsMultiLine')}
|
||||
/>
|
||||
</Box>
|
||||
)
|
||||
|
|
@ -115,19 +115,19 @@ export default function Rotate({ title }: ToolComponentProps) {
|
|||
title={title}
|
||||
inputComponent={
|
||||
<ToolTextInput
|
||||
title={t('string.rotate.inputTitle')}
|
||||
title={t('string:rotate.inputTitle')}
|
||||
value={input}
|
||||
onChange={setInput}
|
||||
/>
|
||||
}
|
||||
resultComponent={
|
||||
<ToolTextResult title={t('string.rotate.resultTitle')} value={result} />
|
||||
<ToolTextResult title={t('string:rotate.resultTitle')} value={result} />
|
||||
}
|
||||
initialValues={initialValues}
|
||||
getGroups={getGroups}
|
||||
toolInfo={{
|
||||
title: t('string.rotate.toolInfo.title'),
|
||||
description: t('string.rotate.toolInfo.description')
|
||||
title: t('string:rotate.toolInfo.title'),
|
||||
description: t('string:rotate.toolInfo.description')
|
||||
}}
|
||||
exampleCards={exampleCards}
|
||||
input={input}
|
||||
|
|
|
|||
|
|
@ -173,12 +173,12 @@ export default function SplitText({ title }: ToolComponentProps) {
|
|||
input={input}
|
||||
inputComponent={<ToolTextInput value={input} onChange={setInput} />}
|
||||
resultComponent={
|
||||
<ToolTextResult title={t('string.split.resultTitle')} value={result} />
|
||||
<ToolTextResult title={t('string:split.resultTitle')} value={result} />
|
||||
}
|
||||
initialValues={initialValues}
|
||||
getGroups={({ values, updateField }) => [
|
||||
{
|
||||
title: t('string.split.splitSeparatorOptions'),
|
||||
title: t('string:split.splitSeparatorOptions'),
|
||||
component: splitOperators.map(({ title, description, type }) => (
|
||||
<RadioWithTextField
|
||||
key={type}
|
||||
|
|
@ -193,7 +193,7 @@ export default function SplitText({ title }: ToolComponentProps) {
|
|||
))
|
||||
},
|
||||
{
|
||||
title: t('string.split.outputSeparatorOptions'),
|
||||
title: t('string:split.outputSeparatorOptions'),
|
||||
component: outputOptions.map((option) => (
|
||||
<TextFieldWithDesc
|
||||
key={option.accessor}
|
||||
|
|
|
|||
|
|
@ -11,8 +11,8 @@ export const tool = defineTool('string', {
|
|||
keywords: ['split'],
|
||||
component: lazy(() => import('./index')),
|
||||
i18n: {
|
||||
name: 'string.split.name',
|
||||
description: 'string.split.description',
|
||||
shortDescription: 'string.split.shortDescription'
|
||||
name: 'string:split.title',
|
||||
description: 'string:split.description',
|
||||
shortDescription: 'string:split.shortDescription'
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -230,47 +230,47 @@ export default function Truncate({
|
|||
updateField
|
||||
}) => [
|
||||
{
|
||||
title: t('string.statistic.delimitersOptions'),
|
||||
title: t('string:statistic.delimitersOptions'),
|
||||
component: (
|
||||
<Box>
|
||||
<TextFieldWithDesc
|
||||
value={values.sentenceDelimiters}
|
||||
onOwnChange={(val) => updateField('sentenceDelimiters', val)}
|
||||
placeholder={t('string.statistic.sentenceDelimitersPlaceholder')}
|
||||
description={t('string.statistic.sentenceDelimitersDescription')}
|
||||
placeholder={t('string:statistic.sentenceDelimitersPlaceholder')}
|
||||
description={t('string:statistic.sentenceDelimitersDescription')}
|
||||
/>
|
||||
<TextFieldWithDesc
|
||||
value={values.wordDelimiters}
|
||||
onOwnChange={(val) => updateField('wordDelimiters', val)}
|
||||
placeholder={t('string.statistic.wordDelimitersPlaceholder')}
|
||||
description={t('string.statistic.wordDelimitersDescription')}
|
||||
placeholder={t('string:statistic.wordDelimitersPlaceholder')}
|
||||
description={t('string:statistic.wordDelimitersDescription')}
|
||||
/>
|
||||
</Box>
|
||||
)
|
||||
},
|
||||
{
|
||||
title: t('string.statistic.statisticsOptions'),
|
||||
title: t('string:statistic.statisticsOptions'),
|
||||
component: (
|
||||
<Box>
|
||||
<CheckboxWithDesc
|
||||
checked={values.wordCount}
|
||||
onChange={(value) => updateField('wordCount', value)}
|
||||
title={t('string.statistic.wordFrequencyAnalysis')}
|
||||
description={t('string.statistic.wordFrequencyAnalysisDescription')}
|
||||
title={t('string:statistic.wordFrequencyAnalysis')}
|
||||
description={t('string:statistic.wordFrequencyAnalysisDescription')}
|
||||
/>
|
||||
<CheckboxWithDesc
|
||||
checked={values.characterCount}
|
||||
onChange={(value) => updateField('characterCount', value)}
|
||||
title={t('string.statistic.characterFrequencyAnalysis')}
|
||||
title={t('string:statistic.characterFrequencyAnalysis')}
|
||||
description={t(
|
||||
'string.statistic.characterFrequencyAnalysisDescription'
|
||||
'string:statistic.characterFrequencyAnalysisDescription'
|
||||
)}
|
||||
/>
|
||||
<CheckboxWithDesc
|
||||
checked={values.emptyLines}
|
||||
onChange={(value) => updateField('emptyLines', value)}
|
||||
title={t('string.statistic.includeEmptyLines')}
|
||||
description={t('string.statistic.includeEmptyLinesDescription')}
|
||||
title={t('string:statistic.includeEmptyLines')}
|
||||
description={t('string:statistic.includeEmptyLinesDescription')}
|
||||
/>
|
||||
</Box>
|
||||
)
|
||||
|
|
@ -287,19 +287,19 @@ export default function Truncate({
|
|||
setInput={setInput}
|
||||
inputComponent={
|
||||
<ToolTextInput
|
||||
title={t('string.statistic.inputTitle')}
|
||||
title={t('string:statistic.inputTitle')}
|
||||
value={input}
|
||||
onChange={setInput}
|
||||
/>
|
||||
}
|
||||
resultComponent={
|
||||
<ToolTextResult
|
||||
title={t('string.statistic.resultTitle')}
|
||||
title={t('string:statistic.resultTitle')}
|
||||
value={result}
|
||||
/>
|
||||
}
|
||||
toolInfo={{
|
||||
title: t('string.statistic.toolInfo.title', { title }),
|
||||
title: t('string:statistic.toolInfo.title', { title }),
|
||||
description: longDescription
|
||||
}}
|
||||
exampleCards={exampleCards}
|
||||
|
|
|
|||
|
|
@ -13,9 +13,9 @@ export const tool = defineTool('string', {
|
|||
keywords: ['text', 'statistics', 'count', 'lines', 'words', 'characters'],
|
||||
component: lazy(() => import('./index')),
|
||||
i18n: {
|
||||
name: 'string.statistic.name',
|
||||
description: 'string.statistic.description',
|
||||
shortDescription: 'string.statistic.shortDescription',
|
||||
longDescription: 'string.statistic.longDescription'
|
||||
name: 'string:statistic.title',
|
||||
description: 'string:statistic.description',
|
||||
shortDescription: 'string:statistic.shortDescription',
|
||||
longDescription: 'string:statistic.longDescription'
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -74,16 +74,16 @@ export default function Replacer({ title }: ToolComponentProps) {
|
|||
updateField
|
||||
}) => [
|
||||
{
|
||||
title: t('string.textReplacer.searchText'),
|
||||
title: t('string:textReplacer.searchText'),
|
||||
component: (
|
||||
<Box>
|
||||
<SimpleRadio
|
||||
onClick={() => updateField('mode', 'text')}
|
||||
checked={values.mode === 'text'}
|
||||
title={t('string.textReplacer.findPatternInText')}
|
||||
title={t('string:textReplacer.findPatternInText')}
|
||||
/>
|
||||
<TextFieldWithDesc
|
||||
description={t('string.textReplacer.searchPatternDescription')}
|
||||
description={t('string:textReplacer.searchPatternDescription')}
|
||||
value={values.searchValue}
|
||||
onOwnChange={(val) => updateField('searchValue', val)}
|
||||
type={'text'}
|
||||
|
|
@ -91,10 +91,10 @@ export default function Replacer({ title }: ToolComponentProps) {
|
|||
<SimpleRadio
|
||||
onClick={() => updateField('mode', 'regexp')}
|
||||
checked={values.mode === 'regexp'}
|
||||
title={t('string.textReplacer.findPatternUsingRegexp')}
|
||||
title={t('string:textReplacer.findPatternUsingRegexp')}
|
||||
/>
|
||||
<TextFieldWithDesc
|
||||
description={t('string.textReplacer.regexpDescription')}
|
||||
description={t('string:textReplacer.regexpDescription')}
|
||||
value={values.searchRegexp}
|
||||
onOwnChange={(val) => updateField('searchRegexp', val)}
|
||||
type={'text'}
|
||||
|
|
@ -103,12 +103,12 @@ export default function Replacer({ title }: ToolComponentProps) {
|
|||
)
|
||||
},
|
||||
{
|
||||
title: t('string.textReplacer.replaceText'),
|
||||
title: t('string:textReplacer.replaceText'),
|
||||
component: (
|
||||
<Box>
|
||||
<TextFieldWithDesc
|
||||
description={t('string.textReplacer.replacePatternDescription')}
|
||||
placeholder={t('string.textReplacer.newTextPlaceholder')}
|
||||
description={t('string:textReplacer.replacePatternDescription')}
|
||||
placeholder={t('string:textReplacer.newTextPlaceholder')}
|
||||
value={values.replaceValue}
|
||||
onOwnChange={(val) => updateField('replaceValue', val)}
|
||||
type={'text'}
|
||||
|
|
@ -128,20 +128,20 @@ export default function Replacer({ title }: ToolComponentProps) {
|
|||
setInput={setInput}
|
||||
inputComponent={
|
||||
<ToolTextInput
|
||||
title={t('string.textReplacer.inputTitle')}
|
||||
title={t('string:textReplacer.inputTitle')}
|
||||
value={input}
|
||||
onChange={setInput}
|
||||
/>
|
||||
}
|
||||
resultComponent={
|
||||
<ToolTextResult
|
||||
title={t('string.textReplacer.resultTitle')}
|
||||
title={t('string:textReplacer.resultTitle')}
|
||||
value={result}
|
||||
/>
|
||||
}
|
||||
toolInfo={{
|
||||
title: t('string.textReplacer.toolInfo.title'),
|
||||
description: t('string.textReplacer.toolInfo.description')
|
||||
title: t('string:textReplacer.toolInfo.title'),
|
||||
description: t('string:textReplacer.toolInfo.description')
|
||||
}}
|
||||
exampleCards={exampleCards}
|
||||
/>
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ export default function ToMorse() {
|
|||
|
||||
return (
|
||||
<ToolContent
|
||||
title={t('string.toMorse.title')}
|
||||
title={t('string:toMorse.title')}
|
||||
initialValues={initialValues}
|
||||
compute={computeOptions}
|
||||
input={input}
|
||||
|
|
@ -30,26 +30,26 @@ export default function ToMorse() {
|
|||
inputComponent={<ToolTextInput value={input} onChange={setInput} />}
|
||||
resultComponent={
|
||||
<ToolTextResult
|
||||
title={t('string.toMorse.resultTitle')}
|
||||
title={t('string:toMorse.resultTitle')}
|
||||
value={result}
|
||||
/>
|
||||
}
|
||||
getGroups={({ values, updateField }) => [
|
||||
{
|
||||
title: t('string.toMorse.shortSignal'),
|
||||
title: t('string:toMorse.shortSignal'),
|
||||
component: (
|
||||
<TextFieldWithDesc
|
||||
description={t('string.toMorse.dotSymbolDescription')}
|
||||
description={t('string:toMorse.dotSymbolDescription')}
|
||||
value={values.dotSymbol}
|
||||
onOwnChange={(val) => updateField('dotSymbol', val)}
|
||||
/>
|
||||
)
|
||||
},
|
||||
{
|
||||
title: t('string.toMorse.longSignal'),
|
||||
title: t('string:toMorse.longSignal'),
|
||||
component: (
|
||||
<TextFieldWithDesc
|
||||
description={t('string.toMorse.dashSymbolDescription')}
|
||||
description={t('string:toMorse.dashSymbolDescription')}
|
||||
value={values.dashSymbol}
|
||||
onOwnChange={(val) => updateField('dashSymbol', val)}
|
||||
/>
|
||||
|
|
|
|||
|
|
@ -12,8 +12,8 @@ export const tool = defineTool('string', {
|
|||
keywords: ['to', 'morse'],
|
||||
component: lazy(() => import('./index')),
|
||||
i18n: {
|
||||
name: 'string.toMorse.name',
|
||||
description: 'string.toMorse.description',
|
||||
shortDescription: 'string.toMorse.shortDescription'
|
||||
name: 'string:toMorse.title',
|
||||
description: 'string:toMorse.description',
|
||||
shortDescription: 'string:toMorse.shortDescription'
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -81,31 +81,31 @@ export default function Truncate({ title }: ToolComponentProps) {
|
|||
updateField
|
||||
}) => [
|
||||
{
|
||||
title: t('string.truncate.truncationSide'),
|
||||
title: t('string:truncate.truncationSide'),
|
||||
component: (
|
||||
<Box>
|
||||
<SimpleRadio
|
||||
onClick={() => updateField('truncationSide', 'right')}
|
||||
checked={values.truncationSide === 'right'}
|
||||
title={t('string.truncate.rightSideTruncation')}
|
||||
description={t('string.truncate.rightSideDescription')}
|
||||
title={t('string:truncate.rightSideTruncation')}
|
||||
description={t('string:truncate.rightSideDescription')}
|
||||
/>
|
||||
<SimpleRadio
|
||||
onClick={() => updateField('truncationSide', 'left')}
|
||||
checked={values.truncationSide === 'left'}
|
||||
title={t('string.truncate.leftSideTruncation')}
|
||||
description={t('string.truncate.leftSideDescription')}
|
||||
title={t('string:truncate.leftSideTruncation')}
|
||||
description={t('string:truncate.leftSideDescription')}
|
||||
/>
|
||||
</Box>
|
||||
)
|
||||
},
|
||||
{
|
||||
title: t('string.truncate.lengthAndLines'),
|
||||
title: t('string:truncate.lengthAndLines'),
|
||||
component: (
|
||||
<Box>
|
||||
<TextFieldWithDesc
|
||||
description={t('string.truncate.maxLengthDescription')}
|
||||
placeholder={t('string.truncate.numberPlaceholder')}
|
||||
description={t('string:truncate.maxLengthDescription')}
|
||||
placeholder={t('string:truncate.numberPlaceholder')}
|
||||
value={values.maxLength}
|
||||
onOwnChange={(val) => updateField('maxLength', val)}
|
||||
type={'number'}
|
||||
|
|
@ -113,25 +113,25 @@ export default function Truncate({ title }: ToolComponentProps) {
|
|||
<CheckboxWithDesc
|
||||
onChange={(val) => updateField('lineByLine', val)}
|
||||
checked={values.lineByLine}
|
||||
title={t('string.truncate.lineByLineTruncating')}
|
||||
description={t('string.truncate.lineByLineDescription')}
|
||||
title={t('string:truncate.lineByLineTruncating')}
|
||||
description={t('string:truncate.lineByLineDescription')}
|
||||
/>
|
||||
</Box>
|
||||
)
|
||||
},
|
||||
{
|
||||
title: t('string.truncate.suffixAndAffix'),
|
||||
title: t('string:truncate.suffixAndAffix'),
|
||||
component: (
|
||||
<Box>
|
||||
<CheckboxWithDesc
|
||||
onChange={(val) => updateField('addIndicator', val)}
|
||||
checked={values.addIndicator}
|
||||
title={t('string.truncate.addTruncationIndicator')}
|
||||
title={t('string:truncate.addTruncationIndicator')}
|
||||
description={''}
|
||||
/>
|
||||
<TextFieldWithDesc
|
||||
description={t('string.truncate.indicatorDescription')}
|
||||
placeholder={t('string.truncate.charactersPlaceholder')}
|
||||
description={t('string:truncate.indicatorDescription')}
|
||||
placeholder={t('string:truncate.charactersPlaceholder')}
|
||||
value={values.indicator}
|
||||
onOwnChange={(val) => updateField('indicator', val)}
|
||||
type={'text'}
|
||||
|
|
@ -151,20 +151,20 @@ export default function Truncate({ title }: ToolComponentProps) {
|
|||
setInput={setInput}
|
||||
inputComponent={
|
||||
<ToolTextInput
|
||||
title={t('string.truncate.inputTitle')}
|
||||
title={t('string:truncate.inputTitle')}
|
||||
value={input}
|
||||
onChange={setInput}
|
||||
/>
|
||||
}
|
||||
resultComponent={
|
||||
<ToolTextResult
|
||||
title={t('string.truncate.resultTitle')}
|
||||
title={t('string:truncate.resultTitle')}
|
||||
value={result}
|
||||
/>
|
||||
}
|
||||
toolInfo={{
|
||||
title: t('string.truncate.toolInfo.title'),
|
||||
description: t('string.truncate.toolInfo.description')
|
||||
title: t('string:truncate.toolInfo.title'),
|
||||
description: t('string:truncate.toolInfo.description')
|
||||
}}
|
||||
exampleCards={exampleCards}
|
||||
/>
|
||||
|
|
|
|||
|
|
@ -11,8 +11,8 @@ export const tool = defineTool('string', {
|
|||
keywords: ['truncate'],
|
||||
component: lazy(() => import('./index')),
|
||||
i18n: {
|
||||
name: 'string.truncate.name',
|
||||
description: 'string.truncate.description',
|
||||
shortDescription: 'string.truncate.shortDescription'
|
||||
name: 'string:truncate.title',
|
||||
description: 'string:truncate.description',
|
||||
shortDescription: 'string:truncate.shortDescription'
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -57,14 +57,14 @@ export default function Uppercase({ title }: ToolComponentProps) {
|
|||
setInput={setInput}
|
||||
inputComponent={
|
||||
<ToolTextInput
|
||||
title={t('string.uppercase.inputTitle')}
|
||||
title={t('string:uppercase.inputTitle')}
|
||||
value={input}
|
||||
onChange={setInput}
|
||||
/>
|
||||
}
|
||||
resultComponent={
|
||||
<ToolTextResult
|
||||
title={t('string.uppercase.resultTitle')}
|
||||
title={t('string:uppercase.resultTitle')}
|
||||
value={result}
|
||||
/>
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,8 +11,8 @@ export const tool = defineTool('string', {
|
|||
keywords: ['uppercase'],
|
||||
component: lazy(() => import('./index')),
|
||||
i18n: {
|
||||
name: 'string.uppercase.name',
|
||||
description: 'string.uppercase.description',
|
||||
shortDescription: 'string.uppercase.shortDescription'
|
||||
name: 'string:uppercase.title',
|
||||
description: 'string:uppercase.description',
|
||||
shortDescription: 'string:uppercase.shortDescription'
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -78,7 +78,7 @@ export default function ConvertDaysToHours({
|
|||
setInput={setInput}
|
||||
compute={compute}
|
||||
toolInfo={{
|
||||
title: t('time.checkLeapYears.toolInfo.title', { title }),
|
||||
title: t('time:checkLeapYears.toolInfo.title', { title }),
|
||||
description: longDescription
|
||||
}}
|
||||
exampleCards={exampleCards}
|
||||
|
|
|
|||
|
|
@ -11,8 +11,8 @@ export const tool = defineTool('time', {
|
|||
keywords: ['leap', 'year', 'calendar', 'date'],
|
||||
component: lazy(() => import('./index')),
|
||||
i18n: {
|
||||
name: 'time.checkLeapYears.name',
|
||||
description: 'time.checkLeapYears.description',
|
||||
shortDescription: 'time.checkLeapYears.shortDescription'
|
||||
name: 'time:checkLeapYears.title',
|
||||
description: 'time:checkLeapYears.description',
|
||||
shortDescription: 'time:checkLeapYears.shortDescription'
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -76,14 +76,14 @@ export default function ConvertDaysToHours({
|
|||
updateField
|
||||
}) => [
|
||||
{
|
||||
title: t('time.convertDaysToHours.hoursName'),
|
||||
title: t('time:convertDaysToHours.hoursName'),
|
||||
component: (
|
||||
<Box>
|
||||
<CheckboxWithDesc
|
||||
onChange={(val) => updateField('hoursFlag', val)}
|
||||
checked={values.hoursFlag}
|
||||
title={t('time.convertDaysToHours.addHoursName')}
|
||||
description={t('time.convertDaysToHours.addHoursNameDescription')}
|
||||
title={t('time:convertDaysToHours.addHoursName')}
|
||||
description={t('time:convertDaysToHours.addHoursNameDescription')}
|
||||
/>
|
||||
</Box>
|
||||
)
|
||||
|
|
@ -101,8 +101,8 @@ export default function ConvertDaysToHours({
|
|||
setInput={setInput}
|
||||
compute={compute}
|
||||
toolInfo={{
|
||||
title: t('time.convertDaysToHours.toolInfo.title'),
|
||||
description: t('time.convertDaysToHours.toolInfo.description')
|
||||
title: t('time:convertDaysToHours.toolInfo.title'),
|
||||
description: t('time:convertDaysToHours.toolInfo.description')
|
||||
}}
|
||||
exampleCards={exampleCards}
|
||||
/>
|
||||
|
|
|
|||
|
|
@ -11,8 +11,8 @@ export const tool = defineTool('time', {
|
|||
keywords: ['days', 'hours', 'convert', 'time'],
|
||||
component: lazy(() => import('./index')),
|
||||
i18n: {
|
||||
name: 'time.convertDaysToHours.name',
|
||||
description: 'time.convertDaysToHours.description',
|
||||
shortDescription: 'time.convertDaysToHours.shortDescription'
|
||||
name: 'time:convertDaysToHours.title',
|
||||
description: 'time:convertDaysToHours.description',
|
||||
shortDescription: 'time:convertDaysToHours.shortDescription'
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -11,8 +11,8 @@ export const tool = defineTool('time', {
|
|||
keywords: ['hours', 'days', 'convert', 'time'],
|
||||
component: lazy(() => import('./index')),
|
||||
i18n: {
|
||||
name: 'time.convertHoursToDays.name',
|
||||
description: 'time.convertHoursToDays.description',
|
||||
shortDescription: 'time.convertHoursToDays.shortDescription'
|
||||
name: 'time:convertHoursToDays.title',
|
||||
description: 'time:convertHoursToDays.description',
|
||||
shortDescription: 'time:convertHoursToDays.shortDescription'
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -82,14 +82,14 @@ export default function SecondsToTime({
|
|||
updateField
|
||||
}) => [
|
||||
{
|
||||
title: t('time.convertSecondsToTime.timePadding'),
|
||||
title: t('time:convertSecondsToTime.timePadding'),
|
||||
component: (
|
||||
<Box>
|
||||
<CheckboxWithDesc
|
||||
onChange={(val) => updateField('paddingFlag', val)}
|
||||
checked={values.paddingFlag}
|
||||
title={t('time.convertSecondsToTime.addPadding')}
|
||||
description={t('time.convertSecondsToTime.addPaddingDescription')}
|
||||
title={t('time:convertSecondsToTime.addPadding')}
|
||||
description={t('time:convertSecondsToTime.addPaddingDescription')}
|
||||
/>
|
||||
</Box>
|
||||
)
|
||||
|
|
@ -107,7 +107,7 @@ export default function SecondsToTime({
|
|||
setInput={setInput}
|
||||
compute={compute}
|
||||
toolInfo={{
|
||||
title: t('time.convertSecondsToTime.toolInfo.title', { title }),
|
||||
title: t('time:convertSecondsToTime.toolInfo.title', { title }),
|
||||
description: longDescription
|
||||
}}
|
||||
exampleCards={exampleCards}
|
||||
|
|
|
|||
|
|
@ -11,8 +11,8 @@ export const tool = defineTool('time', {
|
|||
keywords: ['seconds', 'time', 'convert', 'format'],
|
||||
component: lazy(() => import('./index')),
|
||||
i18n: {
|
||||
name: 'time.convertSecondsToTime.name',
|
||||
description: 'time.convertSecondsToTime.description',
|
||||
shortDescription: 'time.convertSecondsToTime.shortDescription'
|
||||
name: 'time:convertSecondsToTime.title',
|
||||
description: 'time:convertSecondsToTime.description',
|
||||
shortDescription: 'time:convertSecondsToTime.shortDescription'
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -95,7 +95,7 @@ export default function TimeToSeconds({
|
|||
setInput={setInput}
|
||||
compute={compute}
|
||||
toolInfo={{
|
||||
title: t('time.convertTimeToSeconds.toolInfo.title', { title }),
|
||||
title: t('time:convertTimeToSeconds.toolInfo.title', { title }),
|
||||
description: longDescription
|
||||
}}
|
||||
exampleCards={exampleCards}
|
||||
|
|
|
|||
|
|
@ -11,8 +11,8 @@ export const tool = defineTool('time', {
|
|||
keywords: ['time', 'seconds', 'convert', 'format'],
|
||||
component: lazy(() => import('./index')),
|
||||
i18n: {
|
||||
name: 'time.convertTimeToSeconds.name',
|
||||
description: 'time.convertTimeToSeconds.description',
|
||||
shortDescription: 'time.convertTimeToSeconds.shortDescription'
|
||||
name: 'time:convertTimeToSeconds.title',
|
||||
description: 'time:convertTimeToSeconds.description',
|
||||
shortDescription: 'time:convertTimeToSeconds.shortDescription'
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -11,8 +11,8 @@ export const tool = defineTool('time', {
|
|||
keywords: ['cron', 'schedule', 'automation', 'expression'],
|
||||
component: lazy(() => import('./index')),
|
||||
i18n: {
|
||||
name: 'time.crontabGuru.name',
|
||||
description: 'time.crontabGuru.description',
|
||||
shortDescription: 'time.crontabGuru.shortDescription'
|
||||
name: 'time:crontabGuru.title',
|
||||
description: 'time:crontabGuru.description',
|
||||
shortDescription: 'time:crontabGuru.shortDescription'
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -126,7 +126,7 @@ export default function TimeBetweenDates() {
|
|||
|
||||
return (
|
||||
<ToolContent
|
||||
title={t('time.timeBetweenDates.title')}
|
||||
title={t('time:timeBetweenDates.title')}
|
||||
inputComponent={null}
|
||||
resultComponent={
|
||||
result ? (
|
||||
|
|
@ -155,28 +155,28 @@ export default function TimeBetweenDates() {
|
|||
validationSchema={validationSchema}
|
||||
exampleCards={exampleCards}
|
||||
toolInfo={{
|
||||
title: t('time.timeBetweenDates.toolInfo.title'),
|
||||
description: t('time.timeBetweenDates.toolInfo.description')
|
||||
title: t('time:timeBetweenDates.toolInfo.title'),
|
||||
description: t('time:timeBetweenDates.toolInfo.description')
|
||||
}}
|
||||
getGroups={({ values, updateField }) => [
|
||||
{
|
||||
title: t('time.timeBetweenDates.startDateTime'),
|
||||
title: t('time:timeBetweenDates.startDateTime'),
|
||||
component: (
|
||||
<Box>
|
||||
<TextFieldWithDesc
|
||||
description={t('time.timeBetweenDates.startDate')}
|
||||
description={t('time:timeBetweenDates.startDate')}
|
||||
value={values.startDate}
|
||||
onOwnChange={(val) => updateField('startDate', val)}
|
||||
type="date"
|
||||
/>
|
||||
<TextFieldWithDesc
|
||||
description={t('time.timeBetweenDates.startTime')}
|
||||
description={t('time:timeBetweenDates.startTime')}
|
||||
value={values.startTime}
|
||||
onOwnChange={(val) => updateField('startTime', val)}
|
||||
type="time"
|
||||
/>
|
||||
<SelectWithDesc
|
||||
description={t('time.timeBetweenDates.startTimezone')}
|
||||
description={t('time:timeBetweenDates.startTimezone')}
|
||||
selected={values.startTimezone}
|
||||
onChange={(val: string) => updateField('startTimezone', val)}
|
||||
options={timezoneOptions}
|
||||
|
|
@ -185,23 +185,23 @@ export default function TimeBetweenDates() {
|
|||
)
|
||||
},
|
||||
{
|
||||
title: t('time.timeBetweenDates.endDateTime'),
|
||||
title: t('time:timeBetweenDates.endDateTime'),
|
||||
component: (
|
||||
<Box>
|
||||
<TextFieldWithDesc
|
||||
description={t('time.timeBetweenDates.endDate')}
|
||||
description={t('time:timeBetweenDates.endDate')}
|
||||
value={values.endDate}
|
||||
onOwnChange={(val) => updateField('endDate', val)}
|
||||
type="date"
|
||||
/>
|
||||
<TextFieldWithDesc
|
||||
description={t('time.timeBetweenDates.endTime')}
|
||||
description={t('time:timeBetweenDates.endTime')}
|
||||
value={values.endTime}
|
||||
onOwnChange={(val) => updateField('endTime', val)}
|
||||
type="time"
|
||||
/>
|
||||
<SelectWithDesc
|
||||
description={t('time.timeBetweenDates.endTimezone')}
|
||||
description={t('time:timeBetweenDates.endTimezone')}
|
||||
selected={values.endTimezone}
|
||||
onChange={(val: string) => updateField('endTimezone', val)}
|
||||
options={timezoneOptions}
|
||||
|
|
|
|||
|
|
@ -11,8 +11,8 @@ export const tool = defineTool('time', {
|
|||
keywords: ['dates', 'time', 'difference', 'duration', 'calculate'],
|
||||
component: lazy(() => import('./index')),
|
||||
i18n: {
|
||||
name: 'time.timeBetweenDates.name',
|
||||
description: 'time.timeBetweenDates.description',
|
||||
shortDescription: 'time.timeBetweenDates.shortDescription'
|
||||
name: 'time:timeBetweenDates.title',
|
||||
description: 'time:timeBetweenDates.description',
|
||||
shortDescription: 'time:timeBetweenDates.shortDescription'
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -88,50 +88,50 @@ export default function TruncateClockTime({
|
|||
updateField
|
||||
}) => [
|
||||
{
|
||||
title: t('time.truncateClockTime.truncationSide'),
|
||||
title: t('time:truncateClockTime.truncationSide'),
|
||||
component: (
|
||||
<Box>
|
||||
<SimpleRadio
|
||||
onClick={() => updateField('onlySecond', true)}
|
||||
checked={values.onlySecond}
|
||||
title={t('time.truncateClockTime.truncateOnlySeconds')}
|
||||
title={t('time:truncateClockTime.truncateOnlySeconds')}
|
||||
description={t(
|
||||
'time.truncateClockTime.truncateOnlySecondsDescription'
|
||||
'time:truncateClockTime.truncateOnlySecondsDescription'
|
||||
)}
|
||||
/>
|
||||
<SimpleRadio
|
||||
onClick={() => updateField('onlySecond', false)}
|
||||
checked={!values.onlySecond}
|
||||
title={t('time.truncateClockTime.truncateMinutesAndSeconds')}
|
||||
title={t('time:truncateClockTime.truncateMinutesAndSeconds')}
|
||||
description={t(
|
||||
'time.truncateClockTime.truncateMinutesAndSecondsDescription'
|
||||
'time:truncateClockTime.truncateMinutesAndSecondsDescription'
|
||||
)}
|
||||
/>
|
||||
</Box>
|
||||
)
|
||||
},
|
||||
{
|
||||
title: t('time.truncateClockTime.printDroppedComponents'),
|
||||
title: t('time:truncateClockTime.printDroppedComponents'),
|
||||
component: (
|
||||
<Box>
|
||||
<CheckboxWithDesc
|
||||
onChange={(val) => updateField('zeroPrint', val)}
|
||||
checked={values.zeroPrint}
|
||||
title={t('time.truncateClockTime.zeroPrintTruncatedParts')}
|
||||
description={t('time.truncateClockTime.zeroPrintDescription')}
|
||||
title={t('time:truncateClockTime.zeroPrintTruncatedParts')}
|
||||
description={t('time:truncateClockTime.zeroPrintDescription')}
|
||||
/>
|
||||
</Box>
|
||||
)
|
||||
},
|
||||
{
|
||||
title: t('time.truncateClockTime.timePadding'),
|
||||
title: t('time:truncateClockTime.timePadding'),
|
||||
component: (
|
||||
<Box>
|
||||
<CheckboxWithDesc
|
||||
onChange={(val) => updateField('zeroPadding', val)}
|
||||
checked={values.zeroPadding}
|
||||
title={t('time.truncateClockTime.useZeroPadding')}
|
||||
description={t('time.truncateClockTime.zeroPaddingDescription')}
|
||||
title={t('time:truncateClockTime.useZeroPadding')}
|
||||
description={t('time:truncateClockTime.zeroPaddingDescription')}
|
||||
/>
|
||||
</Box>
|
||||
)
|
||||
|
|
@ -149,7 +149,7 @@ export default function TruncateClockTime({
|
|||
setInput={setInput}
|
||||
compute={compute}
|
||||
toolInfo={{
|
||||
title: t('time.truncateClockTime.toolInfo.title', { title }),
|
||||
title: t('time:truncateClockTime.toolInfo.title', { title }),
|
||||
description: longDescription
|
||||
}}
|
||||
exampleCards={exampleCards}
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue