mirror of
https://github.com/iib0011/omni-tools.git
synced 2025-12-06 11:54:04 +01:00
fix: misc
This commit is contained in:
@@ -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'
|
||||
}
|
||||
});
|
||||
|
||||
@@ -19,7 +19,7 @@ const exampleCards: CardExampleType<InitialValuesType>[] = [
|
||||
title: 'Full Days to Hours',
|
||||
description:
|
||||
'This example calculates how many hours there are in 1 day, in one week (7 days), in one month (30 days), and in even longer time periods. To see all the results at once, we enter each individual day value on a new line. We also use the "days" suffix in the input and add the "hours" suffix to the output.',
|
||||
sampleText: `1 day
|
||||
sampleText: `1 day
|
||||
7 days
|
||||
30 days
|
||||
90 days
|
||||
@@ -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}
|
||||
|
||||
@@ -11,8 +11,8 @@ export const tool = defineTool('time', {
|
||||
keywords: ['time', 'truncate', 'clock', 'round', 'precision'],
|
||||
component: lazy(() => import('./index')),
|
||||
i18n: {
|
||||
name: 'time.truncateClockTime.name',
|
||||
description: 'time.truncateClockTime.description',
|
||||
shortDescription: 'time.truncateClockTime.shortDescription'
|
||||
name: 'time:truncateClockTime.title',
|
||||
description: 'time:truncateClockTime.description',
|
||||
shortDescription: 'time:truncateClockTime.shortDescription'
|
||||
}
|
||||
});
|
||||
|
||||
@@ -130,13 +130,13 @@ export default function ChangeSpeed({
|
||||
updateField
|
||||
}) => [
|
||||
{
|
||||
title: t('video.changeSpeed.newVideoSpeed'),
|
||||
title: t('video:changeSpeed.newVideoSpeed'),
|
||||
component: (
|
||||
<Box>
|
||||
<TextFieldWithDesc
|
||||
value={values.newSpeed.toString()}
|
||||
onOwnChange={(val) => updateField('newSpeed', Number(val))}
|
||||
description={t('video.changeSpeed.defaultMultiplier')}
|
||||
description={t('video:changeSpeed.defaultMultiplier')}
|
||||
type="number"
|
||||
/>
|
||||
</Box>
|
||||
@@ -151,19 +151,19 @@ export default function ChangeSpeed({
|
||||
<ToolVideoInput
|
||||
value={input}
|
||||
onChange={setInput}
|
||||
title={t('video.changeSpeed.inputTitle')}
|
||||
title={t('video:changeSpeed.inputTitle')}
|
||||
/>
|
||||
}
|
||||
resultComponent={
|
||||
loading ? (
|
||||
<ToolFileResult
|
||||
title={t('video.changeSpeed.settingSpeed')}
|
||||
title={t('video:changeSpeed.settingSpeed')}
|
||||
value={null}
|
||||
loading={true}
|
||||
/>
|
||||
) : (
|
||||
<ToolFileResult
|
||||
title={t('video.changeSpeed.resultTitle')}
|
||||
title={t('video:changeSpeed.resultTitle')}
|
||||
value={result}
|
||||
extension="mp4"
|
||||
/>
|
||||
@@ -174,7 +174,7 @@ export default function ChangeSpeed({
|
||||
setInput={setInput}
|
||||
compute={compute}
|
||||
toolInfo={{
|
||||
title: t('video.changeSpeed.toolInfo.title', { title }),
|
||||
title: t('video:changeSpeed.toolInfo.title', { title }),
|
||||
description: longDescription
|
||||
}}
|
||||
/>
|
||||
|
||||
@@ -11,8 +11,8 @@ export const tool = defineTool('video', {
|
||||
keywords: ['video', 'speed', 'playback', 'fast', 'slow'],
|
||||
component: lazy(() => import('./index')),
|
||||
i18n: {
|
||||
name: 'video.changeSpeed.name',
|
||||
description: 'video.changeSpeed.description',
|
||||
shortDescription: 'video.changeSpeed.shortDescription'
|
||||
name: 'video:changeSpeed.title',
|
||||
description: 'video:changeSpeed.description',
|
||||
shortDescription: 'video:changeSpeed.shortDescription'
|
||||
}
|
||||
});
|
||||
|
||||
@@ -102,7 +102,7 @@ export default function CompressVideo({ title }: ToolComponentProps) {
|
||||
updateField
|
||||
}) => [
|
||||
{
|
||||
title: t('video.compress.resolution'),
|
||||
title: t('video:compress.resolution'),
|
||||
component: (
|
||||
<Box>
|
||||
{resolutionOptions.map((option) => (
|
||||
@@ -119,7 +119,7 @@ export default function CompressVideo({ title }: ToolComponentProps) {
|
||||
)
|
||||
},
|
||||
{
|
||||
title: t('video.compress.quality'),
|
||||
title: t('video:compress.quality'),
|
||||
component: (
|
||||
<Box sx={{ mb: 2 }}>
|
||||
<Slider
|
||||
@@ -131,9 +131,9 @@ export default function CompressVideo({ title }: ToolComponentProps) {
|
||||
updateField('crf', typeof value === 'number' ? value : value[0]);
|
||||
}}
|
||||
marks={{
|
||||
0: t('video.compress.lossless'),
|
||||
23: t('video.compress.default'),
|
||||
51: t('video.compress.worst')
|
||||
0: t('video:compress.lossless'),
|
||||
23: t('video:compress.default'),
|
||||
51: t('video:compress.worst')
|
||||
}}
|
||||
/>
|
||||
</Box>
|
||||
@@ -162,16 +162,16 @@ export default function CompressVideo({ title }: ToolComponentProps) {
|
||||
<ToolVideoInput
|
||||
value={input}
|
||||
onChange={setInput}
|
||||
title={t('video.compress.inputTitle')}
|
||||
title={t('video:compress.inputTitle')}
|
||||
/>
|
||||
}
|
||||
resultComponent={
|
||||
<ToolFileResult
|
||||
title={t('video.compress.resultTitle')}
|
||||
title={t('video:compress.resultTitle')}
|
||||
value={result}
|
||||
extension={'mp4'}
|
||||
loading={loading}
|
||||
loadingText={t('video.compress.loadingText')}
|
||||
loadingText={t('video:compress.loadingText')}
|
||||
/>
|
||||
}
|
||||
initialValues={initialValues}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user