fix: misc

This commit is contained in:
Ibrahima G. Coulibaly
2025-07-13 11:25:05 +01:00
parent 035eb2edd1
commit 21c4f44d4e
121 changed files with 987 additions and 837 deletions

View File

@@ -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}

View File

@@ -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'
}
});

View File

@@ -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'
}
});

View File

@@ -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)}
/>

View File

@@ -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'
}
});

View File

@@ -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>

View File

@@ -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'
}
});

View File

@@ -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}
/>

View File

@@ -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'
}
});

View File

@@ -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'
}
});

View File

@@ -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>
)

View File

@@ -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'
}
});

View File

@@ -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)}
/>

View File

@@ -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'
}
});

View File

@@ -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'
}
});

View File

@@ -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'
}
});

View File

@@ -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}

View File

@@ -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'
}
});