diff --git a/components.d.ts b/components.d.ts index 3e65c3cc..3bd43bbd 100644 --- a/components.d.ts +++ b/components.d.ts @@ -91,6 +91,7 @@ declare module '@vue/runtime-core' { IbanValidatorAndParser: typeof import('./src/tools/iban-validator-and-parser/iban-validator-and-parser.vue')['default'] 'IconMdi:brushVariant': typeof import('~icons/mdi/brush-variant')['default'] 'IconMdi:kettleSteamOutline': typeof import('~icons/mdi/kettle-steam-outline')['default'] + IconMdiArrowDown: typeof import('~icons/mdi/arrow-down')['default'] IconMdiChevronDown: typeof import('~icons/mdi/chevron-down')['default'] IconMdiChevronRight: typeof import('~icons/mdi/chevron-right')['default'] IconMdiClose: typeof import('~icons/mdi/close')['default'] @@ -131,17 +132,27 @@ declare module '@vue/runtime-core' { MimeTypes: typeof import('./src/tools/mime-types/mime-types.vue')['default'] NavbarButtons: typeof import('./src/components/NavbarButtons.vue')['default'] NCheckbox: typeof import('naive-ui')['NCheckbox'] + NCode: typeof import('naive-ui')['NCode'] NCollapseTransition: typeof import('naive-ui')['NCollapseTransition'] NConfigProvider: typeof import('naive-ui')['NConfigProvider'] NDivider: typeof import('naive-ui')['NDivider'] NEllipsis: typeof import('naive-ui')['NEllipsis'] + NForm: typeof import('naive-ui')['NForm'] + NFormItem: typeof import('naive-ui')['NFormItem'] + NGi: typeof import('naive-ui')['NGi'] + NGrid: typeof import('naive-ui')['NGrid'] NH1: typeof import('naive-ui')['NH1'] NH3: typeof import('naive-ui')['NH3'] NIcon: typeof import('naive-ui')['NIcon'] + NInputNumber: typeof import('naive-ui')['NInputNumber'] NLayout: typeof import('naive-ui')['NLayout'] NLayoutSider: typeof import('naive-ui')['NLayoutSider'] NMenu: typeof import('naive-ui')['NMenu'] + NScrollbar: typeof import('naive-ui')['NScrollbar'] + NSlider: typeof import('naive-ui')['NSlider'] NSpace: typeof import('naive-ui')['NSpace'] + NSpin: typeof import('naive-ui')['NSpin'] + NSwitch: typeof import('naive-ui')['NSwitch'] NTable: typeof import('naive-ui')['NTable'] NumeronymGenerator: typeof import('./src/tools/numeronym-generator/numeronym-generator.vue')['default'] OtpCodeGeneratorAndValidator: typeof import('./src/tools/otp-code-generator-and-validator/otp-code-generator-and-validator.vue')['default'] @@ -155,6 +166,7 @@ declare module '@vue/runtime-core' { RegexMemo: typeof import('./src/tools/regex-memo/regex-memo.vue')['default'] 'RegexMemo.content': typeof import('./src/tools/regex-memo/regex-memo.content.md')['default'] RegexTester: typeof import('./src/tools/regex-tester/regex-tester.vue')['default'] + RemoveDuplicateTextRows: typeof import('./src/tools/remove-duplicate-text-rows/remove-duplicate-text-rows.vue')['default'] ResultRow: typeof import('./src/tools/ipv4-range-expander/result-row.vue')['default'] RomanNumeralConverter: typeof import('./src/tools/roman-numeral-converter/roman-numeral-converter.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] diff --git a/src/tools/index.ts b/src/tools/index.ts index 388cfaf4..2fdc78ec 100644 --- a/src/tools/index.ts +++ b/src/tools/index.ts @@ -1,6 +1,7 @@ import { tool as base64FileConverter } from './base64-file-converter'; import { tool as base64StringConverter } from './base64-string-converter'; import { tool as basicAuthGenerator } from './basic-auth-generator'; +import { tool as removeDuplicateTextRows } from './remove-duplicate-text-rows'; import { tool as emailNormalizer } from './email-normalizer'; import { tool as asciiTextDrawer } from './ascii-text-drawer'; @@ -184,6 +185,7 @@ export const toolsByCategory: ToolCategory[] = [ textDiff, numeronymGenerator, asciiTextDrawer, + removeDuplicateTextRows, ], }, { diff --git a/src/tools/remove-duplicate-text-rows/index.ts b/src/tools/remove-duplicate-text-rows/index.ts new file mode 100644 index 00000000..d3d522c8 --- /dev/null +++ b/src/tools/remove-duplicate-text-rows/index.ts @@ -0,0 +1,12 @@ +import { Copy } from '@vicons/tabler'; +import { defineTool } from '../tool'; + +export const tool = defineTool({ + name: 'Remove duplicate text', + path: '/remove-duplicate-text', + description: 'Remove duplicate rows from a list of text rows.', + keywords: ['remove', 'duplicate', 'text', 'rows', 'delete', 'unique', 'distinct'], + component: () => import('./remove-duplicate-text-rows.vue'), + icon: Copy, + createdAt: new Date('2024-10-01'), +}); diff --git a/src/tools/remove-duplicate-text-rows/remove-duplicate-text-rows.vue b/src/tools/remove-duplicate-text-rows/remove-duplicate-text-rows.vue new file mode 100644 index 00000000..2bb482e5 --- /dev/null +++ b/src/tools/remove-duplicate-text-rows/remove-duplicate-text-rows.vue @@ -0,0 +1,106 @@ + + +