feat: Add HTML to Plain Text transformation and improve text processing

- Added `html-to-text` package for converting HTML to plain text.
- Implemented `stripHtmlTags` function to normalize whitespace and strip HTML tags.
- Introduced new transformation option for converting HTML to plain text in the format converter.
- Updated localization files for German, Spanish, French, Italian, Russian, Turkish, Ukrainian, and Chinese to include new transformation options.
- Enhanced UI text in Clipboard History Settings for better user guidance on drag-and-drop functionality.
This commit is contained in:
Sergey Kurdin 2025-06-22 20:55:38 -04:00
parent a3c82b714b
commit e2731f97c0
14 changed files with 837 additions and 262 deletions

423
package-lock.json generated
View File

@ -141,6 +141,7 @@
"@types/codemirror": "^5.60.15",
"@types/dompurify": "^3.0.5",
"@types/events": "^3.0.3",
"@types/html-to-text": "^9.0.4",
"@types/js-yaml": "^4.0.9",
"@types/linkify-it": "^3.0.5",
"@types/lodash-es": "^4.17.12",
@ -168,7 +169,6 @@
"tailwind-merge": "^2.0.0",
"tailwindcss": "^3.3.5",
"taze": "^0.12.2",
"ts-node": "^10.9.2",
"typescript": "^5.8.3",
"vite": "^6.0.6",
"vite-plugin-tauri": "^4.0.0"
@ -2658,28 +2658,6 @@
"node": ">=0.1.90"
}
},
"node_modules/@cspotcode/source-map-support": {
"version": "0.8.1",
"resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz",
"integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==",
"dev": true,
"dependencies": {
"@jridgewell/trace-mapping": "0.3.9"
},
"engines": {
"node": ">=12"
}
},
"node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": {
"version": "0.3.9",
"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz",
"integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==",
"dev": true,
"dependencies": {
"@jridgewell/resolve-uri": "^3.0.3",
"@jridgewell/sourcemap-codec": "^1.4.10"
}
},
"node_modules/@dnd-kit/accessibility": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/@dnd-kit/accessibility/-/accessibility-3.1.0.tgz",
@ -6328,6 +6306,19 @@
"win32"
]
},
"node_modules/@selderee/plugin-htmlparser2": {
"version": "0.11.0",
"resolved": "https://registry.npmjs.org/@selderee/plugin-htmlparser2/-/plugin-htmlparser2-0.11.0.tgz",
"integrity": "sha512-P33hHGdldxGabLFjPPpaTxVolMrzrcegejx+0GxjrIb9Zv48D8yAIA/QTDR2dFl7Uz7urX8aX6+5bCZslr+gWQ==",
"license": "MIT",
"dependencies": {
"domhandler": "^5.0.3",
"selderee": "^0.11.0"
},
"funding": {
"url": "https://ko-fi.com/killymxi"
}
},
"node_modules/@sigstore/bundle": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-2.1.0.tgz",
@ -7304,30 +7295,6 @@
"node": ">=10.13.0"
}
},
"node_modules/@tsconfig/node10": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz",
"integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==",
"dev": true
},
"node_modules/@tsconfig/node12": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz",
"integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==",
"dev": true
},
"node_modules/@tsconfig/node14": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz",
"integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==",
"dev": true
},
"node_modules/@tsconfig/node16": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz",
"integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==",
"dev": true
},
"node_modules/@tufjs/canonical-json": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz",
@ -7515,6 +7482,13 @@
"integrity": "sha512-trOc4AAUThEz9hapPtSd7wf5tiQKvTtu5b371UxXdTuqzIh0ArcRspRP0i0Viu+LXstIQ1z96t1nsPxT9ol01g==",
"dev": true
},
"node_modules/@types/html-to-text": {
"version": "9.0.4",
"resolved": "https://registry.npmjs.org/@types/html-to-text/-/html-to-text-9.0.4.tgz",
"integrity": "sha512-pUY3cKH/Nm2yYrEmDlPR1mR7yszjGx4DrwPjQ702C4/D5CwHuZTgZdIdwPkRbcuhs7BAh2L5rg3CL5cbRiGTCQ==",
"dev": true,
"license": "MIT"
},
"node_modules/@types/istanbul-lib-coverage": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz",
@ -7839,18 +7813,6 @@
"node": ">=0.4.0"
}
},
"node_modules/acorn-walk": {
"version": "8.3.4",
"resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz",
"integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==",
"dev": true,
"dependencies": {
"acorn": "^8.11.0"
},
"engines": {
"node": ">=0.4.0"
}
},
"node_modules/agent-base": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
@ -9246,12 +9208,6 @@
"node": ">=10"
}
},
"node_modules/create-require": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
"integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
"dev": true
},
"node_modules/crelt": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/crelt/-/crelt-1.0.6.tgz",
@ -9744,15 +9700,6 @@
"integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==",
"dev": true
},
"node_modules/diff": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
"integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
"dev": true,
"engines": {
"node": ">=0.3.1"
}
},
"node_modules/dir-glob": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
@ -11205,6 +11152,41 @@
"void-elements": "3.1.0"
}
},
"node_modules/html-to-text": {
"version": "9.0.5",
"resolved": "https://registry.npmjs.org/html-to-text/-/html-to-text-9.0.5.tgz",
"integrity": "sha512-qY60FjREgVZL03vJU6IfMV4GDjGBIoOyvuFdpBDIX9yTlDw0TjxVBQp+P8NvpdIXNJvfWBTNul7fsAQJq2FNpg==",
"license": "MIT",
"dependencies": {
"@selderee/plugin-htmlparser2": "^0.11.0",
"deepmerge": "^4.3.1",
"dom-serializer": "^2.0.0",
"htmlparser2": "^8.0.2",
"selderee": "^0.11.0"
},
"engines": {
"node": ">=14"
}
},
"node_modules/htmlparser2": {
"version": "8.0.2",
"resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz",
"integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==",
"funding": [
"https://github.com/fb55/htmlparser2?sponsor=1",
{
"type": "github",
"url": "https://github.com/sponsors/fb55"
}
],
"license": "MIT",
"dependencies": {
"domelementtype": "^2.3.0",
"domhandler": "^5.0.3",
"domutils": "^3.0.1",
"entities": "^4.4.0"
}
},
"node_modules/http-cache-semantics": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz",
@ -12071,6 +12053,15 @@
"node": ">=6"
}
},
"node_modules/leac": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/leac/-/leac-0.6.0.tgz",
"integrity": "sha512-y+SqErxb8h7nE/fiEX07jsbuhrpO9lL8eca7/Y1nuWV2moNlXhyd59iDGcRf6moVyDMbmTNzL40SUyrFU/yDpg==",
"license": "MIT",
"funding": {
"url": "https://ko-fi.com/killymxi"
}
},
"node_modules/lilconfig": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
@ -12194,12 +12185,6 @@
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
"integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ=="
},
"node_modules/make-error": {
"version": "1.3.6",
"resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
"integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
"dev": true
},
"node_modules/make-fetch-happen": {
"version": "11.1.1",
"resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz",
@ -13468,6 +13453,19 @@
"resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz",
"integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw=="
},
"node_modules/parseley": {
"version": "0.12.1",
"resolved": "https://registry.npmjs.org/parseley/-/parseley-0.12.1.tgz",
"integrity": "sha512-e6qHKe3a9HWr0oMRVDTRhKce+bRO8VGQR3NyVwcjwrbhMmFCX9KszEV35+rn4AdilFAq9VPxP/Fe1wC9Qjd2lw==",
"license": "MIT",
"dependencies": {
"leac": "^0.6.0",
"peberminta": "^0.9.0"
},
"funding": {
"url": "https://ko-fi.com/killymxi"
}
},
"node_modules/pastebar-app-ui": {
"resolved": "packages/pastebar-app-ui",
"link": true
@ -13538,6 +13536,15 @@
"integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==",
"dev": true
},
"node_modules/peberminta": {
"version": "0.9.0",
"resolved": "https://registry.npmjs.org/peberminta/-/peberminta-0.9.0.tgz",
"integrity": "sha512-XIxfHpEuSJbITd1H3EeQwpcZbTLHc+VVr8ANI9t5sit565tsI4/xK3KWTUFE2e6QiangUkh3B0jihzmGnNrRsQ==",
"license": "MIT",
"funding": {
"url": "https://ko-fi.com/killymxi"
}
},
"node_modules/performance-now": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
@ -15117,6 +15124,18 @@
"resolved": "https://registry.npmjs.org/scriptjs/-/scriptjs-2.5.9.tgz",
"integrity": "sha512-qGVDoreyYiP1pkQnbnFAUIS5AjenNwwQBdl7zeos9etl+hYKWahjRTfzAZZYBv5xNHx7vNKCmaLDQZ6Fr2AEXg=="
},
"node_modules/selderee": {
"version": "0.11.0",
"resolved": "https://registry.npmjs.org/selderee/-/selderee-0.11.0.tgz",
"integrity": "sha512-5TF+l7p4+OsnP8BCCvSyZiSPc4x4//p5uPwK8TCnVPJYRmU2aYKMpOXvw8zM5a5JvuuCGN1jmsMwuU2W02ukfA==",
"license": "MIT",
"dependencies": {
"parseley": "^0.12.0"
},
"funding": {
"url": "https://ko-fi.com/killymxi"
}
},
"node_modules/semver": {
"version": "6.3.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
@ -16179,55 +16198,6 @@
"integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==",
"dev": true
},
"node_modules/ts-node": {
"version": "10.9.2",
"resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz",
"integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==",
"dev": true,
"dependencies": {
"@cspotcode/source-map-support": "^0.8.0",
"@tsconfig/node10": "^1.0.7",
"@tsconfig/node12": "^1.0.7",
"@tsconfig/node14": "^1.0.0",
"@tsconfig/node16": "^1.0.2",
"acorn": "^8.4.1",
"acorn-walk": "^8.1.1",
"arg": "^4.1.0",
"create-require": "^1.1.0",
"diff": "^4.0.1",
"make-error": "^1.1.1",
"v8-compile-cache-lib": "^3.0.1",
"yn": "3.1.1"
},
"bin": {
"ts-node": "dist/bin.js",
"ts-node-cwd": "dist/bin-cwd.js",
"ts-node-esm": "dist/bin-esm.js",
"ts-node-script": "dist/bin-script.js",
"ts-node-transpile-only": "dist/bin-transpile.js",
"ts-script": "dist/bin-script-deprecated.js"
},
"peerDependencies": {
"@swc/core": ">=1.2.50",
"@swc/wasm": ">=1.2.50",
"@types/node": "*",
"typescript": ">=2.7"
},
"peerDependenciesMeta": {
"@swc/core": {
"optional": true
},
"@swc/wasm": {
"optional": true
}
}
},
"node_modules/ts-node/node_modules/arg": {
"version": "4.1.3",
"resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
"integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==",
"dev": true
},
"node_modules/tsconfig-paths": {
"version": "3.14.2",
"resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz",
@ -16662,12 +16632,6 @@
"uuid": "dist/bin/uuid"
}
},
"node_modules/v8-compile-cache-lib": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz",
"integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==",
"dev": true
},
"node_modules/validate-npm-package-license": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
@ -17150,15 +17114,6 @@
"node": ">=12"
}
},
"node_modules/yn": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
"integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
"dev": true,
"engines": {
"node": ">=6"
}
},
"node_modules/youtube-player": {
"version": "5.5.2",
"resolved": "https://registry.npmjs.org/youtube-player/-/youtube-player-5.5.2.tgz",
@ -17307,6 +17262,7 @@
"framer-motion": "^10.16.5",
"garbados-crypt": "^3.0.0-beta",
"glob-all": "^3.3.1",
"html-to-text": "^9.0.5",
"i18next": "^23.10.0",
"i18next-browser-languagedetector": "^7.2.0",
"idb-keyval": "^6.2.1",
@ -19906,27 +19862,6 @@
"integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==",
"optional": true
},
"@cspotcode/source-map-support": {
"version": "0.8.1",
"resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz",
"integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==",
"dev": true,
"requires": {
"@jridgewell/trace-mapping": "0.3.9"
},
"dependencies": {
"@jridgewell/trace-mapping": {
"version": "0.3.9",
"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz",
"integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==",
"dev": true,
"requires": {
"@jridgewell/resolve-uri": "^3.0.3",
"@jridgewell/sourcemap-codec": "^1.4.10"
}
}
}
},
"@dnd-kit/accessibility": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/@dnd-kit/accessibility/-/accessibility-3.1.0.tgz",
@ -22193,6 +22128,15 @@
"integrity": "sha512-+10CMg9vt1MoHj6x1pxyjPSMjHTIlqs8/tBztXvPAx24SKs9jwVnKqHJumlH/IzhaPUaj3T6T6wfZr8okdXaIg==",
"optional": true
},
"@selderee/plugin-htmlparser2": {
"version": "0.11.0",
"resolved": "https://registry.npmjs.org/@selderee/plugin-htmlparser2/-/plugin-htmlparser2-0.11.0.tgz",
"integrity": "sha512-P33hHGdldxGabLFjPPpaTxVolMrzrcegejx+0GxjrIb9Zv48D8yAIA/QTDR2dFl7Uz7urX8aX6+5bCZslr+gWQ==",
"requires": {
"domhandler": "^5.0.3",
"selderee": "^0.11.0"
}
},
"@sigstore/bundle": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-2.1.0.tgz",
@ -22697,30 +22641,6 @@
"resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz",
"integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA=="
},
"@tsconfig/node10": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz",
"integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==",
"dev": true
},
"@tsconfig/node12": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz",
"integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==",
"dev": true
},
"@tsconfig/node14": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz",
"integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==",
"dev": true
},
"@tsconfig/node16": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz",
"integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==",
"dev": true
},
"@tufjs/canonical-json": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz",
@ -22898,6 +22818,12 @@
"integrity": "sha512-trOc4AAUThEz9hapPtSd7wf5tiQKvTtu5b371UxXdTuqzIh0ArcRspRP0i0Viu+LXstIQ1z96t1nsPxT9ol01g==",
"dev": true
},
"@types/html-to-text": {
"version": "9.0.4",
"resolved": "https://registry.npmjs.org/@types/html-to-text/-/html-to-text-9.0.4.tgz",
"integrity": "sha512-pUY3cKH/Nm2yYrEmDlPR1mR7yszjGx4DrwPjQ702C4/D5CwHuZTgZdIdwPkRbcuhs7BAh2L5rg3CL5cbRiGTCQ==",
"dev": true
},
"@types/istanbul-lib-coverage": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz",
@ -23173,15 +23099,6 @@
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz",
"integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA=="
},
"acorn-walk": {
"version": "8.3.4",
"resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz",
"integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==",
"dev": true,
"requires": {
"acorn": "^8.11.0"
}
},
"agent-base": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
@ -24199,12 +24116,6 @@
"yaml": "^1.10.0"
}
},
"create-require": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
"integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
"dev": true
},
"crelt": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/crelt/-/crelt-1.0.6.tgz",
@ -24540,12 +24451,6 @@
"integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==",
"dev": true
},
"diff": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
"integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
"dev": true
},
"dir-glob": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
@ -25638,6 +25543,29 @@
"void-elements": "3.1.0"
}
},
"html-to-text": {
"version": "9.0.5",
"resolved": "https://registry.npmjs.org/html-to-text/-/html-to-text-9.0.5.tgz",
"integrity": "sha512-qY60FjREgVZL03vJU6IfMV4GDjGBIoOyvuFdpBDIX9yTlDw0TjxVBQp+P8NvpdIXNJvfWBTNul7fsAQJq2FNpg==",
"requires": {
"@selderee/plugin-htmlparser2": "^0.11.0",
"deepmerge": "^4.3.1",
"dom-serializer": "^2.0.0",
"htmlparser2": "^8.0.2",
"selderee": "^0.11.0"
}
},
"htmlparser2": {
"version": "8.0.2",
"resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz",
"integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==",
"requires": {
"domelementtype": "^2.3.0",
"domhandler": "^5.0.3",
"domutils": "^3.0.1",
"entities": "^4.4.0"
}
},
"http-cache-semantics": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz",
@ -26246,6 +26174,11 @@
"integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
"dev": true
},
"leac": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/leac/-/leac-0.6.0.tgz",
"integrity": "sha512-y+SqErxb8h7nE/fiEX07jsbuhrpO9lL8eca7/Y1nuWV2moNlXhyd59iDGcRf6moVyDMbmTNzL40SUyrFU/yDpg=="
},
"lilconfig": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
@ -26353,12 +26286,6 @@
}
}
},
"make-error": {
"version": "1.3.6",
"resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
"integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
"dev": true
},
"make-fetch-happen": {
"version": "11.1.1",
"resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz",
@ -27335,6 +27262,15 @@
}
}
},
"parseley": {
"version": "0.12.1",
"resolved": "https://registry.npmjs.org/parseley/-/parseley-0.12.1.tgz",
"integrity": "sha512-e6qHKe3a9HWr0oMRVDTRhKce+bRO8VGQR3NyVwcjwrbhMmFCX9KszEV35+rn4AdilFAq9VPxP/Fe1wC9Qjd2lw==",
"requires": {
"leac": "^0.6.0",
"peberminta": "^0.9.0"
}
},
"pastebar-app-ui": {
"version": "file:packages/pastebar-app-ui",
"requires": {
@ -27435,6 +27371,7 @@
"framer-motion": "^10.16.5",
"garbados-crypt": "^3.0.0-beta",
"glob-all": "^3.3.1",
"html-to-text": "^9.0.5",
"i18next": "^23.10.0",
"i18next-browser-languagedetector": "^7.2.0",
"idb-keyval": "^6.2.1",
@ -27883,6 +27820,11 @@
"integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==",
"dev": true
},
"peberminta": {
"version": "0.9.0",
"resolved": "https://registry.npmjs.org/peberminta/-/peberminta-0.9.0.tgz",
"integrity": "sha512-XIxfHpEuSJbITd1H3EeQwpcZbTLHc+VVr8ANI9t5sit565tsI4/xK3KWTUFE2e6QiangUkh3B0jihzmGnNrRsQ=="
},
"performance-now": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
@ -28896,6 +28838,14 @@
"resolved": "https://registry.npmjs.org/scriptjs/-/scriptjs-2.5.9.tgz",
"integrity": "sha512-qGVDoreyYiP1pkQnbnFAUIS5AjenNwwQBdl7zeos9etl+hYKWahjRTfzAZZYBv5xNHx7vNKCmaLDQZ6Fr2AEXg=="
},
"selderee": {
"version": "0.11.0",
"resolved": "https://registry.npmjs.org/selderee/-/selderee-0.11.0.tgz",
"integrity": "sha512-5TF+l7p4+OsnP8BCCvSyZiSPc4x4//p5uPwK8TCnVPJYRmU2aYKMpOXvw8zM5a5JvuuCGN1jmsMwuU2W02ukfA==",
"requires": {
"parseley": "^0.12.0"
}
},
"semver": {
"version": "6.3.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
@ -29686,35 +29636,6 @@
"integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==",
"dev": true
},
"ts-node": {
"version": "10.9.2",
"resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz",
"integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==",
"dev": true,
"requires": {
"@cspotcode/source-map-support": "^0.8.0",
"@tsconfig/node10": "^1.0.7",
"@tsconfig/node12": "^1.0.7",
"@tsconfig/node14": "^1.0.0",
"@tsconfig/node16": "^1.0.2",
"acorn": "^8.4.1",
"acorn-walk": "^8.1.1",
"arg": "^4.1.0",
"create-require": "^1.1.0",
"diff": "^4.0.1",
"make-error": "^1.1.1",
"v8-compile-cache-lib": "^3.0.1",
"yn": "3.1.1"
},
"dependencies": {
"arg": {
"version": "4.1.3",
"resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
"integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==",
"dev": true
}
}
},
"tsconfig-paths": {
"version": "3.14.2",
"resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz",
@ -30009,12 +29930,6 @@
"resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz",
"integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ=="
},
"v8-compile-cache-lib": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz",
"integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==",
"dev": true
},
"validate-npm-package-license": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
@ -30343,12 +30258,6 @@
"integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
"dev": true
},
"yn": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
"integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
"dev": true
},
"youtube-player": {
"version": "5.5.2",
"resolved": "https://registry.npmjs.org/youtube-player/-/youtube-player-5.5.2.tgz",

View File

@ -156,6 +156,7 @@
"@types/codemirror": "^5.60.15",
"@types/dompurify": "^3.0.5",
"@types/events": "^3.0.3",
"@types/html-to-text": "^9.0.4",
"@types/js-yaml": "^4.0.9",
"@types/linkify-it": "^3.0.5",
"@types/lodash-es": "^4.17.12",

View File

@ -82,6 +82,7 @@
"framer-motion": "^10.16.5",
"garbados-crypt": "^3.0.0-beta",
"glob-all": "^3.3.1",
"html-to-text": "^9.0.5",
"i18next": "^23.10.0",
"i18next-browser-languagedetector": "^7.2.0",
"idb-keyval": "^6.2.1",

View File

@ -171,6 +171,60 @@ const toJsonStringify = (text: string): string => {
}
}
// Helper function to strip HTML tags and return plain text with normalized whitespace
const stripHtmlTags = (html: string): string => {
// First, add line breaks before block-level elements to preserve structure
const blockElements = [
'p',
'div',
'h1',
'h2',
'h3',
'h4',
'h5',
'h6',
'ul',
'ol',
'li',
'blockquote',
'pre',
'address',
'article',
'aside',
'footer',
'header',
'nav',
'section',
'table',
'tr',
'br',
]
// Create regex pattern for block elements
const blockRegex = new RegExp(`<(${blockElements.join('|')})[^>]*>`, 'gi')
// Add newlines before block elements to preserve structure
let processedHtml = html.replace(blockRegex, '\n<$1>')
// Create a temporary div element
const div = document.createElement('div')
div.innerHTML = processedHtml
// Get text content, which automatically strips all HTML tags
const text = div.textContent || div.innerText || ''
// Normalize whitespace while preserving structure
return text
.replace(/\r\n/g, '\n') // Normalize Windows line endings to Unix
.replace(/\r/g, '\n') // Normalize old Mac line endings to Unix
.replace(/\n{3,}/g, '\n\n') // Replace 3+ newlines with double newline
.replace(/\t+/g, '\t') // Replace multiple tabs with single tab
.replace(/[ \t]+/g, ' ') // Replace multiple spaces/tabs with single space
.replace(/\n[ \t]+/g, '\n') // Remove spaces/tabs at the beginning of lines
.replace(/[ \t]+\n/g, '\n') // Remove spaces/tabs at the end of lines
.replace(/\n{2,}/g, '\n') // Replace multiple newlines with single newline
.trim() // Remove leading and trailing whitespace
}
// Format Converter subcategories - organized by source format
const formatConverterSubcategories = [
{
@ -197,6 +251,26 @@ const formatConverterSubcategories = [
label: 'HTML to Text',
transform: (text: string) => convertFormat(text, 'html_to_text'),
},
{
id: 'htmlToPlainText',
label: 'HTML to Plain Text',
transform: async (text: string) => {
// dynamic import for html-to-text
const { convert } = await import('html-to-text')
return convert(text, {
wordwrap: 130,
preserveNewlines: false,
// selectors: [{ selector: 'a', format: }],
})
.replace(/\n{3,}/g, '\n\n') // Replace 3+ newlines with double newline
.trim() // Remove leading and trailing whitespace
},
},
// {
// id: 'htmlToPlainText',
// label: 'HTML to Plain Text',
// transform: (text: string) => stripHtmlTags(text),
// },
],
},
{

View File

@ -0,0 +1,73 @@
Add Current Date/Time: Aktuelles Datum/Uhrzeit hinzufügen
Add Line Numbers: Zeilennummern hinzufügen
Add One Line Feed: Einen Zeilenvorschub hinzufügen
Add Two Line Feeds: Zwei Zeilenvorschübe hinzufügen
Base64 Decode: Base64 dekodieren
Base64 Encode: Base64 kodieren
CSV: CSV
CSV to JSON: CSV zu JSON
CSV to Markdown Table: CSV zu Markdown-Tabelle
Capitalize Case: Erster Buchstabe groß
Code Formatting: Code-Formatierung
Count Characters: Zeichen zählen
Count Lines: Zeilen zählen
Count Sentences: Sätze zählen
Count Words: Wörter zählen
Data Conversion: Datenkonvertierung
Drag and drop category to prioritize its order in the special copy/paste menu.: Ziehe eine Kategorie per Drag & Drop, um ihre Reihenfolge im speziellen Kopieren/Einfügen-Menü zu priorisieren.
Enable All: Alle aktivieren
Enable special text transformation options for clipboard history items: Spezielle Textumwandlungsoptionen für Zwischenablage-Verlaufselemente aktivieren
Enabled Operations: Aktivierte Operationen
Encode/Decode: Kodieren/Dekodieren
Format Converter: Formatkonverter
HTML: HTML
HTML Decode: HTML dekodieren
HTML Encode: HTML kodieren
HTML to Markdown: HTML zu Markdown
HTML to Plain Text: HTML zu reinem Text
HTML to React Component: HTML zu React-Komponente
HTML to React JSX: HTML zu React JSX
HTML to Text: HTML zu Text
JSON: JSON
JSON Stringify: JSON Stringify
JSON to CSV: JSON zu CSV
JSON to Markdown Table: JSON zu Markdown-Tabelle
JSON to TOML: JSON zu TOML
JSON to XML: JSON zu XML
JSON to YAML: JSON zu YAML
Markdown: Markdown
Markdown to HTML: Markdown zu HTML
Markdown to Text: Markdown zu Text
Operations: Operationen
PascalCase: PascalCase
Prioritize Category Order: Kategorie-Reihenfolge priorisieren
Remove Duplicate Lines: Doppelte Zeilen entfernen
Remove Extra Spaces: Zusätzliche Leerzeichen entfernen
Remove Line Feeds: Zeilenvorschübe entfernen
Reverse Text: Text umkehren
Select Operations: Operationen auswählen
Sentence case: Satzbau
Sort Lines Alphabetically: Zeilen alphabetisch sortieren
Special Copy: Spezielles Kopieren
Special Copy/Paste Operations: Spezielle Kopier-/Einfüge-Operationen
Special Paste: Spezielles Einfügen
Special Settings: Spezielle Einstellungen
TOML: TOML
TOML to JSON: TOML zu JSON
Text Case: Groß-/Kleinschreibung
Text Tools: Textwerkzeuge
Title Case: Titel-Fall
Trim White Space: Leerzeichen entfernen
UPPER CASE: GROSSBUCHSTABEN
URL Decode: URL dekodieren
URL Encode: URL kodieren
Whitespace & Lines: Leerraum & Zeilen
XML: XML
XML to JSON: XML zu JSON
YAML: YAML
YAML to JSON: YAML zu JSON
camelCase: camelCase
iNVERT cASE: gROSS/kLEIN uMKEHREN
kebab-case: kebab-case
lower case: kleinbuchstaben
snake_case: snake_case

View File

@ -14,8 +14,7 @@ Count Lines: Count Lines
Count Sentences: Count Sentences
Count Words: Count Words
Data Conversion: Data Conversion
? Drag and drop to prioritize categories in the special copy/paste menu. The higher a category is in the list, the higher its menu priority.
: Drag and drop to prioritize categories in the special copy/paste menu. The higher a category is in the list, the higher its menu priority.
Drag and drop category to prioritize its order in the special copy/paste menu.: Drag and drop category to prioritize its order in the special copy/paste menu.
Enable All: Enable All
Enable special text transformation options for clipboard history items: Enable special text transformation options for clipboard history items
Enabled Operations: Enabled Operations
@ -25,6 +24,7 @@ HTML: HTML
HTML Decode: HTML Decode
HTML Encode: HTML Encode
HTML to Markdown: HTML to Markdown
HTML to Plain Text: HTML to Plain Text
HTML to React Component: HTML to React Component
HTML to React JSX: HTML to React JSX
HTML to Text: HTML to Text
@ -41,6 +41,7 @@ Markdown to Text: Markdown to Text
Operations: Operations
PascalCase: PascalCase
Prioritize Category Order: Prioritize Category Order
PrioritizeCategoryOrderNote: PrioritizeCategoryOrderNote
Remove Duplicate Lines: Remove Duplicate Lines
Remove Extra Spaces: Remove Extra Spaces
Remove Line Feeds: Remove Line Feeds

View File

@ -0,0 +1,73 @@
Add Current Date/Time: Agregar Fecha/Hora Actual
Add Line Numbers: Agregar Números de Línea
Add One Line Feed: Agregar un Salto de Línea
Add Two Line Feeds: Agregar dos Saltos de Línea
Base64 Decode: Decodificar Base64
Base64 Encode: Codificar Base64
CSV: CSV
CSV to JSON: CSV a JSON
CSV to Markdown Table: CSV a Tabla Markdown
Capitalize Case: Poner en Mayúscula
Code Formatting: Formateo de Código
Count Characters: Contar Caracteres
Count Lines: Contar Líneas
Count Sentences: Contar Oraciones
Count Words: Contar Palabras
Data Conversion: Conversión de Datos
Drag and drop category to prioritize its order in the special copy/paste menu.: Arrastra y suelta la categoría para priorizar su orden en el menú especial de copiar/pegar.
Enable All: Habilitar Todo
Enable special text transformation options for clipboard history items: Habilitar opciones especiales de transformación de texto para elementos del historial del portapapeles
Enabled Operations: Operaciones Habilitadas
Encode/Decode: Codificar/Decodificar
Format Converter: Convertidor de Formato
HTML: HTML
HTML Decode: Decodificar HTML
HTML Encode: Codificar HTML
HTML to Markdown: HTML a Markdown
HTML to Plain Text: HTML a Texto Plano
HTML to React Component: HTML a Componente React
HTML to React JSX: HTML a React JSX
HTML to Text: HTML a Texto
JSON: JSON
JSON Stringify: JSON a Cadena
JSON to CSV: JSON a CSV
JSON to Markdown Table: JSON a Tabla Markdown
JSON to TOML: JSON a TOML
JSON to XML: JSON a XML
JSON to YAML: JSON a YAML
Markdown: Markdown
Markdown to HTML: Markdown a HTML
Markdown to Text: Markdown a Texto
Operations: Operaciones
PascalCase: PascalCase
Prioritize Category Order: Priorizar Orden de Categorías
Remove Duplicate Lines: Eliminar Líneas Duplicadas
Remove Extra Spaces: Eliminar Espacios Extra
Remove Line Feeds: Eliminar Saltos de Línea
Reverse Text: Invertir Texto
Select Operations: Seleccionar Operaciones
Sentence case: Tipo oración
Sort Lines Alphabetically: Ordenar Líneas Alfabéticamente
Special Copy: Copia Especial
Special Copy/Paste Operations: Operaciones Especiales de Copiar/Pegar
Special Paste: Pegado Especial
Special Settings: Ajustes Especiales
TOML: TOML
TOML to JSON: TOML a JSON
Text Case: Mayúsculas/Minúsculas
Text Tools: Herramientas de Texto
Title Case: Tipo Título
Trim White Space: Recortar Espacios en Blanco
UPPER CASE: MAYÚSCULAS
URL Decode: Decodificar URL
URL Encode: Codificar URL
Whitespace & Lines: Espacios y Líneas
XML: XML
XML to JSON: XML a JSON
YAML: YAML
YAML to JSON: YAML a JSON
camelCase: camelCase
iNVERT cASE: iNVERTIR cASO
kebab-case: kebab-case
lower case: minúsculas
snake_case: snake_case

View File

@ -0,0 +1,73 @@
Add Current Date/Time: Ajouter Date/Heure Actuelle
Add Line Numbers: Ajouter Numéros de Ligne
Add One Line Feed: Ajouter un Saut de Ligne
Add Two Line Feeds: Ajouter deux Sauts de Ligne
Base64 Decode: Décoder Base64
Base64 Encode: Encoder Base64
CSV: CSV
CSV to JSON: CSV vers JSON
CSV to Markdown Table: CSV vers Tableau Markdown
Capitalize Case: Mettre en Capitale
Code Formatting: Formatage de Code
Count Characters: Compter les Caractères
Count Lines: Compter les Lignes
Count Sentences: Compter les Phrases
Count Words: Compter les Mots
Data Conversion: Conversion de Données
Drag and drop category to prioritize its order in the special copy/paste menu.: Glissez-déposez la catégorie pour prioriser son ordre dans le menu spécial copier/coller.
Enable All: Activer Tout
Enable special text transformation options for clipboard history items: Activer les options de transformation de texte spéciales pour les éléments de l'historique du presse-papiers
Enabled Operations: Opérations Activées
Encode/Decode: Encoder/Décoder
Format Converter: Convertisseur de Format
HTML: HTML
HTML Decode: Décoder HTML
HTML Encode: Encoder HTML
HTML to Markdown: HTML vers Markdown
HTML to Plain Text: HTML vers Texte Brut
HTML to React Component: HTML vers Composant React
HTML to React JSX: HTML vers React JSX
HTML to Text: HTML vers Texte
JSON: JSON
JSON Stringify: JSON Stringify
JSON to CSV: JSON vers CSV
JSON to Markdown Table: JSON vers Tableau Markdown
JSON to TOML: JSON vers TOML
JSON to XML: JSON vers XML
JSON to YAML: JSON vers YAML
Markdown: Markdown
Markdown to HTML: Markdown vers HTML
Markdown to Text: Markdown vers Texte
Operations: Opérations
PascalCase: PascalCase
Prioritize Category Order: Prioriser l'Ordre des Catégories
Remove Duplicate Lines: Supprimer Lignes Doubles
Remove Extra Spaces: Supprimer Espaces Superflus
Remove Line Feeds: Supprimer Sauts de Ligne
Reverse Text: Inverser le Texte
Select Operations: Sélectionner Opérations
Sentence case: Cas de la phrase
Sort Lines Alphabetically: Trier Lignes par Ordre Alphabétique
Special Copy: Copie Spéciale
Special Copy/Paste Operations: Opérations Spéciales Copier/Coller
Special Paste: Collage Spécial
Special Settings: Paramètres Spéciaux
TOML: TOML
TOML to JSON: TOML vers JSON
Text Case: Casse du Texte
Text Tools: Outils Texte
Title Case: Cas du Titre
Trim White Space: Supprimer Espaces Blancs
UPPER CASE: MAJUSCULES
URL Decode: Décoder URL
URL Encode: Encoder URL
Whitespace & Lines: Espaces & Lignes
XML: XML
XML to JSON: XML vers JSON
YAML: YAML
YAML to JSON: YAML vers JSON
camelCase: camelCase
iNVERT cASE: iNVERSER cASSE
kebab-case: kebab-case
lower case: minuscules
snake_case: snake_case

View File

@ -0,0 +1,73 @@
Add Current Date/Time: Aggiungi Data/Ora Attuale
Add Line Numbers: Aggiungi Numeri di Riga
Add One Line Feed: Aggiungi un a Capo
Add Two Line Feeds: Aggiungi due a Capo
Base64 Decode: Decodifica Base64
Base64 Encode: Codifica Base64
CSV: CSV
CSV to JSON: CSV in JSON
CSV to Markdown Table: CSV in Tabella Markdown
Capitalize Case: Maiuscolo Iniziale
Code Formatting: Formattazione Codice
Count Characters: Conta Caratteri
Count Lines: Conta Righe
Count Sentences: Conta Frasi
Count Words: Conta Parole
Data Conversion: Conversione Dati
Drag and drop category to prioritize its order in the special copy/paste menu.: Trascina e rilascia la categoria per dare priorità al suo ordine nel menu speciale di copia/incolla.
Enable All: Abilita Tutto
Enable special text transformation options for clipboard history items: Abilita opzioni speciali di trasformazione del testo per gli elementi della cronologia degli appunti
Enabled Operations: Operazioni Abilitate
Encode/Decode: Codifica/Decodifica
Format Converter: Convertitore di Formato
HTML: HTML
HTML Decode: Decodifica HTML
HTML Encode: Codifica HTML
HTML to Markdown: HTML in Markdown
HTML to Plain Text: HTML in Testo Semplice
HTML to React Component: HTML in Componente React
HTML to React JSX: HTML in React JSX
HTML to Text: HTML in Testo
JSON: JSON
JSON Stringify: JSON Stringify
JSON to CSV: JSON in CSV
JSON to Markdown Table: JSON in Tabella Markdown
JSON to TOML: JSON in TOML
JSON to XML: JSON in XML
JSON to YAML: JSON in YAML
Markdown: Markdown
Markdown to HTML: Markdown in HTML
Markdown to Text: Markdown in Testo
Operations: Operazioni
PascalCase: PascalCase
Prioritize Category Order: Priorità Ordine Categorie
Remove Duplicate Lines: Rimuovi Righe Duplicate
Remove Extra Spaces: Rimuovi Spazi Extra
Remove Line Feeds: Rimuovi a Capo
Reverse Text: Inverti Testo
Select Operations: Seleziona Operazioni
Sentence case: Maiuscolo a inizio frase
Sort Lines Alphabetically: Ordina Righe Alfabeticamente
Special Copy: Copia Speciale
Special Copy/Paste Operations: Operazioni Speciali di Copia/Incolla
Special Paste: Incolla Speciale
Special Settings: Impostazioni Speciali
TOML: TOML
TOML to JSON: TOML in JSON
Text Case: Maiuscole/Minuscole
Text Tools: Strumenti Testo
Title Case: Maiuscolo a Inizio Parola
Trim White Space: Taglia Spazi Bianchi
UPPER CASE: MAIUSCOLO
URL Decode: Decodifica URL
URL Encode: Codifica URL
Whitespace & Lines: Spazi & Righe
XML: XML
XML to JSON: XML in JSON
YAML: YAML
YAML to JSON: YAML in JSON
camelCase: camelCase
iNVERT cASE: iNVERTI cASO
kebab-case: kebab-case
lower case: minuscolo
snake_case: snake_case

View File

@ -0,0 +1,73 @@
Add Current Date/Time: Добавить текущие дату/время
Add Line Numbers: Добавить номера строк
Add One Line Feed: Добавить один перевод строки
Add Two Line Feeds: Добавить два перевода строки
Base64 Decode: Декодировать Base64
Base64 Encode: Кодировать Base64
CSV: CSV
CSV to JSON: CSV в JSON
CSV to Markdown Table: CSV в таблицу Markdown
Capitalize Case: С большой буквы
Code Formatting: Форматирование кода
Count Characters: Подсчет символов
Count Lines: Подсчет строк
Count Sentences: Подсчет предложений
Count Words: Подсчет слов
Data Conversion: Преобразование данных
Drag and drop category to prioritize its order in the special copy/paste menu.: Перетащите категорию, чтобы задать ей приоритет в специальном меню копирования/вставки.
Enable All: Включить все
Enable special text transformation options for clipboard history items: Включить специальные параметры преобразования текста для элементов истории буфера обмена
Enabled Operations: Включенные операции
Encode/Decode: Кодировать/Декодировать
Format Converter: Конвертер форматов
HTML: HTML
HTML Decode: Декодировать HTML
HTML Encode: Кодировать HTML
HTML to Markdown: HTML в Markdown
HTML to Plain Text: HTML в обычный текст
HTML to React Component: HTML в компонент React
HTML to React JSX: HTML в React JSX
HTML to Text: HTML в текст
JSON: JSON
JSON Stringify: JSON в строку
JSON to CSV: JSON в CSV
JSON to Markdown Table: JSON в таблицу Markdown
JSON to TOML: JSON в TOML
JSON to XML: JSON в XML
JSON to YAML: JSON в YAML
Markdown: Markdown
Markdown to HTML: Markdown в HTML
Markdown to Text: Markdown в текст
Operations: Операции
PascalCase: PascalCase
Prioritize Category Order: Приоритет порядка категорий
Remove Duplicate Lines: Удалить дублирующиеся строки
Remove Extra Spaces: Удалить лишние пробелы
Remove Line Feeds: Удалить переводы строк
Reverse Text: Обратный текст
Select Operations: Выбрать операции
Sentence case: Регистр предложений
Sort Lines Alphabetically: Сортировать строки по алфавиту
Special Copy: Специальное копирование
Special Copy/Paste Operations: Специальные операции копирования/вставки
Special Paste: Специальная вставка
Special Settings: Специальные настройки
TOML: TOML
TOML to JSON: TOML в JSON
Text Case: Регистр текста
Text Tools: Инструменты для текста
Title Case: Регистр заголовков
Trim White Space: Обрезать пробелы
UPPER CASE: ВЕРХНИЙ РЕГИСТР
URL Decode: Декодировать URL
URL Encode: Кодировать URL
Whitespace & Lines: Пробелы и строки
XML: XML
XML to JSON: XML в JSON
YAML: YAML
YAML to JSON: YAML в JSON
camelCase: camelCase
iNVERT cASE: иНВЕРТИРОВАТЬ рЕГИСТР
kebab-case: kebab-case
lower case: нижний регистр
snake_case: snake_case

View File

@ -0,0 +1,73 @@
Add Current Date/Time: Geçerli Tarih/Saati Ekle
Add Line Numbers: Satır Numaraları Ekle
Add One Line Feed: Bir Satır Başı Ekle
Add Two Line Feeds: İki Satır Başı Ekle
Base64 Decode: Base64 Kodunu Çöz
Base64 Encode: Base64 Kodla
CSV: CSV
CSV to JSON: CSV'yi JSON'a Dönüştür
CSV to Markdown Table: CSV'yi Markdown Tablosuna Dönüştür
Capitalize Case: Baş Harfleri Büyüt
Code Formatting: Kod Formatlama
Count Characters: Karakter Sayısı
Count Lines: Satır Sayısı
Count Sentences: Cümle Sayısı
Count Words: Kelime Sayısı
Data Conversion: Veri Dönüştürme
Drag and drop category to prioritize its order in the special copy/paste menu.: Özel kopyala/yapıştır menüsünde kategorinin sırasını önceliklendirmek için sürükleyip bırakın.
Enable All: Tümünü Etkinleştir
Enable special text transformation options for clipboard history items: Pano geçmişi öğeleri için özel metin dönüştürme seçeneklerini etkinleştirin
Enabled Operations: Etkin İşlemler
Encode/Decode: Kodla/Kodu Çöz
Format Converter: Format Dönüştürücü
HTML: HTML
HTML Decode: HTML Kodunu Çöz
HTML Encode: HTML Kodla
HTML to Markdown: HTML'yi Markdown'a Dönüştür
HTML to Plain Text: HTML'yi Düz Metne Dönüştür
HTML to React Component: HTML'yi React Bileşenine Dönüştür
HTML to React JSX: HTML'yi React JSX'e Dönüştür
HTML to Text: HTML'yi Metne Dönüştür
JSON: JSON
JSON Stringify: JSON Stringify
JSON to CSV: JSON'u CSV'ye Dönüştür
JSON to Markdown Table: JSON'u Markdown Tablosuna Dönüştür
JSON to TOML: JSON'u TOML'a Dönüştür
JSON to XML: JSON'u XML'e Dönüştür
JSON to YAML: JSON'u YAML'a Dönüştür
Markdown: Markdown
Markdown to HTML: Markdown'u HTML'ye Dönüştür
Markdown to Text: Markdown'u Metne Dönüştür
Operations: İşlemler
PascalCase: PascalCase
Prioritize Category Order: Kategori Sırasını Önceliklendir
Remove Duplicate Lines: Yinelenen Satırları Kaldır
Remove Extra Spaces: Fazla Boşlukları Kaldır
Remove Line Feeds: Satır Başlarını Kaldır
Reverse Text: Metni Ters Çevir
Select Operations: İşlemleri Seç
Sentence case: Cümle düzeni
Sort Lines Alphabetically: Satırları Alfabetik Olarak Sırala
Special Copy: Özel Kopyala
Special Copy/Paste Operations: Özel Kopyala/Yapıştır İşlemleri
Special Paste: Özel Yapıştır
Special Settings: Özel Ayarlar
TOML: TOML
TOML to JSON: TOML'u JSON'a Dönüştür
Text Case: Metin Kılıfı
Text Tools: Metin Araçları
Title Case: Başlık Düzeni
Trim White Space: Beyaz Boşlukları Kırp
UPPER CASE: BÜYÜK HARF
URL Decode: URL Kodunu Çöz
URL Encode: URL Kodla
Whitespace & Lines: Boşluk & Satırlar
XML: XML
XML to JSON: XML'i JSON'a Dönüştür
YAML: YAML
YAML to JSON: YAML'ı JSON'a Dönüştür
camelCase: camelCase
iNVERT cASE: dURUMU tERSINE cEVIR
kebab-case: kebab-case
lower case: küçük harf
snake_case: snake_case

View File

@ -0,0 +1,73 @@
Add Current Date/Time: Додати поточну дату/час
Add Line Numbers: Додати номери рядків
Add One Line Feed: Додати один розрив рядка
Add Two Line Feeds: Додати два розриви рядка
Base64 Decode: Декодувати Base64
Base64 Encode: Кодувати Base64
CSV: CSV
CSV to JSON: CSV у JSON
CSV to Markdown Table: CSV у таблицю Markdown
Capitalize Case: З великої літери
Code Formatting: Форматування коду
Count Characters: Підрахунок символів
Count Lines: Підрахунок рядків
Count Sentences: Підрахунок речень
Count Words: Підрахунок слів
Data Conversion: Перетворення даних
Drag and drop category to prioritize its order in the special copy/paste menu.: Перетягніть категорію, щоб задати їй пріоритет у спеціальному меню копіювання/вставки.
Enable All: Увімкнути все
Enable special text transformation options for clipboard history items: Увімкнути спеціальні параметри перетворення тексту для елементів історії буфера обміну
Enabled Operations: Увімкнені операції
Encode/Decode: Кодувати/Декодувати
Format Converter: Конвертер форматів
HTML: HTML
HTML Decode: Декодувати HTML
HTML Encode: Кодувати HTML
HTML to Markdown: HTML у Markdown
HTML to Plain Text: HTML у звичайний текст
HTML to React Component: HTML у компонент React
HTML to React JSX: HTML у React JSX
HTML to Text: HTML у текст
JSON: JSON
JSON Stringify: JSON у рядок
JSON to CSV: JSON у CSV
JSON to Markdown Table: JSON у таблицю Markdown
JSON to TOML: JSON у TOML
JSON to XML: JSON у XML
JSON to YAML: JSON у YAML
Markdown: Markdown
Markdown to HTML: Markdown у HTML
Markdown to Text: Markdown у текст
Operations: Операції
PascalCase: PascalCase
Prioritize Category Order: Пріоритет порядку категорій
Remove Duplicate Lines: Видалити дублікати рядків
Remove Extra Spaces: Видалити зайві пробіли
Remove Line Feeds: Видалити розриви рядків
Reverse Text: Зворотний текст
Select Operations: Вибрати операції
Sentence case: Регістр речень
Sort Lines Alphabetically: Сортувати рядки за алфавітом
Special Copy: Спеціальне копіювання
Special Copy/Paste Operations: Спеціальні операції копіювання/вставки
Special Paste: Спеціальна вставка
Special Settings: Спеціальні налаштування
TOML: TOML
TOML to JSON: TOML у JSON
Text Case: Регістр тексту
Text Tools: Інструменти для тексту
Title Case: Регістр заголовків
Trim White Space: Обрізати пробіли
UPPER CASE: ВЕРХНІЙ РЕГІСТР
URL Decode: Декодувати URL
URL Encode: Кодувати URL
Whitespace & Lines: Пробіли та рядки
XML: XML
XML to JSON: XML у JSON
YAML: YAML
YAML to JSON: YAML у JSON
camelCase: camelCase
iNVERT cASE: іНВЕРТУВАТИ рЕГІСТР
kebab-case: kebab-case
lower case: нижній регістр
snake_case: snake_case

View File

@ -0,0 +1,73 @@
Add Current Date/Time: 添加当前日期/时间
Add Line Numbers: 添加行号
Add One Line Feed: 添加一个换行符
Add Two Line Feeds: 添加两个换行符
Base64 Decode: Base64 解码
Base64 Encode: Base64 编码
CSV: CSV
CSV to JSON: CSV 转 JSON
CSV to Markdown Table: CSV 转 Markdown 表格
Capitalize Case: 首字母大写
Code Formatting: 代码格式化
Count Characters: 计算字符数
Count Lines: 计算行数
Count Sentences: 计算句子数
Count Words: 计算单词数
Data Conversion: 数据转换
Drag and drop category to prioritize its order in the special copy/paste menu.: 拖放类别以在特殊复制/粘贴菜单中优先排列其顺序。
Enable All: 全部启用
Enable special text transformation options for clipboard history items: 为剪贴板历史记录项启用特殊文本转换选项
Enabled Operations: 已启用的操作
Encode/Decode: 编码/解码
Format Converter: 格式转换器
HTML: HTML
HTML Decode: HTML 解码
HTML Encode: HTML 编码
HTML to Markdown: HTML 转 Markdown
HTML to Plain Text: HTML 转纯文本
HTML to React Component: HTML 转 React 组件
HTML to React JSX: HTML 转 React JSX
HTML to Text: HTML 转文本
JSON: JSON
JSON Stringify: JSON 字符串化
JSON to CSV: JSON 转 CSV
JSON to Markdown Table: JSON 转 Markdown 表格
JSON to TOML: JSON 转 TOML
JSON to XML: JSON 转 XML
JSON to YAML: JSON 转 YAML
Markdown: Markdown
Markdown to HTML: Markdown 转 HTML
Markdown to Text: Markdown 转文本
Operations: 操作
PascalCase: PascalCase
Prioritize Category Order: 确定类别顺序优先级
Remove Duplicate Lines: 删除重复行
Remove Extra Spaces: 删除多余空格
Remove Line Feeds: 删除换行符
Reverse Text: 反转文本
Select Operations: 选择操作
Sentence case: 句子大小写
Sort Lines Alphabetically: 按字母顺序对行排序
Special Copy: 特殊复制
Special Copy/Paste Operations: 特殊复制/粘贴操作
Special Paste: 特殊粘贴
Special Settings: 特殊设置
TOML: TOML
TOML to JSON: TOML 转 JSON
Text Case: 文本大小写
Text Tools: 文本工具
Title Case: 标题大小写
Trim White Space: 修剪空白
UPPER CASE: 大写
URL Decode: URL 解码
URL Encode: URL 编码
Whitespace & Lines: 空白和行
XML: XML
XML to JSON: XML 转 JSON
YAML: YAML
YAML to JSON: YAML 转 JSON
camelCase: camelCase
iNVERT cASE: 反转大小写
kebab-case: kebab-case
lower case: 小写
snake_case: snake_case

View File

@ -917,7 +917,7 @@ export default function ClipboardHistorySettings() {
</Card>
</Box>
<Box className="max-w-xl animate-in fade-in mt-4">
<Box className="mt-4 max-w-xl animate-in fade-in">
<Card
className={`${
!isExclusionAppListEnabled &&
@ -1444,16 +1444,21 @@ export default function ClipboardHistorySettings() {
/>
</CardHeader>
<CardContent>
<Text className="text-sm text-muted-foreground mb-4">
<Text className="text-sm text-muted-foreground mb-2">
{t(
'Enable special text transformation options for clipboard history items',
{ ns: 'specailCopyPaste' }
)}
</Text>
{/* Category Controls - only show when enabled */}
{isSpecialCopyPasteHistoryEnabled && (
<>
<Text className="text-sm text-muted-foreground mb-4">
{t(
'Drag and drop category to prioritize its order in the special copy/paste menu.',
{ ns: 'specailCopyPaste' }
)}
</Text>
<DndContext
collisionDetection={closestCenter}
onDragEnd={event => {