This commit is contained in:
Chris 2024-11-30 23:50:59 +00:00 committed by GitHub
commit b6f017590d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
118 changed files with 295 additions and 312 deletions

12
components.d.ts vendored
View file

@ -89,18 +89,6 @@ declare module '@vue/runtime-core' {
HtmlWysiwygEditor: typeof import('./src/tools/html-wysiwyg-editor/html-wysiwyg-editor.vue')['default'] HtmlWysiwygEditor: typeof import('./src/tools/html-wysiwyg-editor/html-wysiwyg-editor.vue')['default']
HttpStatusCodes: typeof import('./src/tools/http-status-codes/http-status-codes.vue')['default'] HttpStatusCodes: typeof import('./src/tools/http-status-codes/http-status-codes.vue')['default']
IbanValidatorAndParser: typeof import('./src/tools/iban-validator-and-parser/iban-validator-and-parser.vue')['default'] 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']
IconMdiChevronDown: typeof import('~icons/mdi/chevron-down')['default']
IconMdiChevronRight: typeof import('~icons/mdi/chevron-right')['default']
IconMdiClose: typeof import('~icons/mdi/close')['default']
IconMdiContentCopy: typeof import('~icons/mdi/content-copy')['default']
IconMdiEye: typeof import('~icons/mdi/eye')['default']
IconMdiEyeOff: typeof import('~icons/mdi/eye-off')['default']
IconMdiHeart: typeof import('~icons/mdi/heart')['default']
IconMdiSearch: typeof import('~icons/mdi/search')['default']
IconMdiTranslate: typeof import('~icons/mdi/translate')['default']
IconMdiTriangleDown: typeof import('~icons/mdi/triangle-down')['default']
InputCopyable: typeof import('./src/components/InputCopyable.vue')['default'] InputCopyable: typeof import('./src/components/InputCopyable.vue')['default']
IntegerBaseConverter: typeof import('./src/tools/integer-base-converter/integer-base-converter.vue')['default'] IntegerBaseConverter: typeof import('./src/tools/integer-base-converter/integer-base-converter.vue')['default']
Ipv4AddressConverter: typeof import('./src/tools/ipv4-address-converter/ipv4-address-converter.vue')['default'] Ipv4AddressConverter: typeof import('./src/tools/ipv4-address-converter/ipv4-address-converter.vue')['default']

View file

@ -47,7 +47,6 @@
"@types/figlet": "^1.5.8", "@types/figlet": "^1.5.8",
"@types/markdown-it": "^13.0.7", "@types/markdown-it": "^13.0.7",
"@vicons/material": "^0.12.0", "@vicons/material": "^0.12.0",
"@vicons/tabler": "^0.12.0",
"@vueuse/core": "^10.3.0", "@vueuse/core": "^10.3.0",
"@vueuse/head": "^1.0.0", "@vueuse/head": "^1.0.0",
"@vueuse/router": "^10.0.0", "@vueuse/router": "^10.0.0",

7
pnpm-lock.yaml generated
View file

@ -38,9 +38,6 @@ dependencies:
'@vicons/material': '@vicons/material':
specifier: ^0.12.0 specifier: ^0.12.0
version: 0.12.0 version: 0.12.0
'@vicons/tabler':
specifier: ^0.12.0
version: 0.12.0
'@vueuse/core': '@vueuse/core':
specifier: ^10.3.0 specifier: ^10.3.0
version: 10.3.0(vue@3.3.4) version: 10.3.0(vue@3.3.4)
@ -3667,10 +3664,6 @@ packages:
resolution: {integrity: sha512-chv1CYAl8P32P3Ycwgd5+vw/OFNc2mtkKdb1Rw4T5IJmKy6GVDsoUKV3N2l208HATn7CCQphZtuPDdsm7K2kmA==} resolution: {integrity: sha512-chv1CYAl8P32P3Ycwgd5+vw/OFNc2mtkKdb1Rw4T5IJmKy6GVDsoUKV3N2l208HATn7CCQphZtuPDdsm7K2kmA==}
dev: false dev: false
/@vicons/tabler@0.12.0:
resolution: {integrity: sha512-3+wUFuxb7e8OzZ8Wryct1pzfA2vyoF4lwW98O9s27ZrfCGaJGNmqG+q8A7vQ92Mf+COCgxpK+rhNPTtTvaU6qw==}
dev: false
/@vitejs/plugin-vue-jsx@3.0.2(vite@4.4.9)(vue@3.3.4): /@vitejs/plugin-vue-jsx@3.0.2(vite@4.4.9)(vue@3.3.4):
resolution: {integrity: sha512-obF26P2Z4Ogy3cPp07B4VaW6rpiu0ue4OT2Y15UxT5BZZ76haUY9guOsZV3uWh/I6xc+VeiW+ZVabRE82FyzWw==} resolution: {integrity: sha512-obF26P2Z4Ogy3cPp07B4VaW6rpiu0ue4OT2Y15UxT5BZZ76haUY9guOsZV3uWh/I6xc+VeiW+ZVabRE82FyzWw==}
engines: {node: ^14.18.0 || >=16.0.0} engines: {node: ^14.18.0 || >=16.0.0}

View file

@ -46,7 +46,7 @@ createToolFile(
createToolFile( createToolFile(
`index.ts`, `index.ts`,
` `
import { ArrowsShuffle } from '@vicons/tabler'; import { IconArrowsShuffle } from '@tabler/icons-vue';
import { defineTool } from '../tool'; import { defineTool } from '../tool';
export const tool = defineTool({ export const tool = defineTool({
@ -55,7 +55,7 @@ export const tool = defineTool({
description: '', description: '',
keywords: ['${toolName.split('-').join("', '")}'], keywords: ['${toolName.split('-').join("', '")}'],
component: () => import('./${toolName}.vue'), component: () => import('./${toolName}.vue'),
icon: ArrowsShuffle, icon: IconArrowsShuffle,
createdAt: new Date('${new Date().toISOString().split('T')[0]}'), createdAt: new Date('${new Date().toISOString().split('T')[0]}'),
}); });
`, `,

View file

@ -2,6 +2,7 @@
import { useStorage } from '@vueuse/core'; import { useStorage } from '@vueuse/core';
import { useThemeVars } from 'naive-ui'; import { useThemeVars } from 'naive-ui';
import { RouterLink, useRoute } from 'vue-router'; import { RouterLink, useRoute } from 'vue-router';
import { IconChevronRight } from '@tabler/icons-vue';
import MenuIconItem from './MenuIconItem.vue'; import MenuIconItem from './MenuIconItem.vue';
import type { Tool, ToolCategory } from '@/tools/tools.types'; import type { Tool, ToolCategory } from '@/tools/tools.types';
@ -48,7 +49,7 @@ const themeVars = useThemeVars();
<div v-for="{ name, tools, isCollapsed } of menuOptions" :key="name"> <div v-for="{ name, tools, isCollapsed } of menuOptions" :key="name">
<div ml-6px mt-12px flex cursor-pointer items-center op-60 @click="toggleCategoryCollapse({ name })"> <div ml-6px mt-12px flex cursor-pointer items-center op-60 @click="toggleCategoryCollapse({ name })">
<span :class="{ 'rotate-0': isCollapsed, 'rotate-90': !isCollapsed }" text-16px lh-1 op-50 transition-transform> <span :class="{ 'rotate-0': isCollapsed, 'rotate-90': !isCollapsed }" text-16px lh-1 op-50 transition-transform>
<icon-mdi-chevron-right /> <IconChevronRight size="17" />
</span> </span>
<span ml-8px text-13px> <span ml-8px text-13px>

View file

@ -1,4 +1,5 @@
<script setup lang="ts"> <script setup lang="ts">
import { IconHeartFilled } from '@tabler/icons-vue';
import { useToolStore } from '@/tools/tools.store'; import { useToolStore } from '@/tools/tools.store';
import type { Tool } from '@/tools/tools.types'; import type { Tool } from '@/tools/tools.types';
@ -32,7 +33,7 @@ function toggleFavorite(event: MouseEvent) {
:style="{ opacity: isFavorite ? 1 : 0.2 }" :style="{ opacity: isFavorite ? 1 : 0.2 }"
@click="toggleFavorite" @click="toggleFavorite"
> >
<icon-mdi-heart /> <IconHeartFilled size="18" />
</c-button> </c-button>
</c-tooltip> </c-tooltip>
</template> </template>

View file

@ -1,5 +1,6 @@
<script setup lang="ts"> <script setup lang="ts">
import { useVModel } from '@vueuse/core'; import { useVModel } from '@vueuse/core';
import { IconCopy } from '@tabler/icons-vue';
import { useCopy } from '@/composable/copy'; import { useCopy } from '@/composable/copy';
const props = defineProps<{ value: string }>(); const props = defineProps<{ value: string }>();
@ -15,7 +16,7 @@ const tooltipText = computed(() => isJustCopied.value ? 'Copied!' : 'Copy to cli
<template #suffix> <template #suffix>
<c-tooltip :tooltip="tooltipText"> <c-tooltip :tooltip="tooltipText">
<c-button circle variant="text" size="small" @click="copy()"> <c-button circle variant="text" size="small" @click="copy()">
<icon-mdi-content-copy /> <IconCopy size="15" />
</c-button> </c-button>
</c-tooltip> </c-tooltip>
</template> </template>

View file

@ -16,7 +16,7 @@ const { isDarkTheme } = toRefs(styleStore);
rel="noopener noreferrer" rel="noopener noreferrer"
:aria-label="$t('home.nav.githubRepository')" :aria-label="$t('home.nav.githubRepository')"
> >
<n-icon size="25" :component="IconBrandGithub" /> <IconBrandGithub size="25" />
</c-button> </c-button>
</c-tooltip> </c-tooltip>
@ -29,19 +29,19 @@ const { isDarkTheme } = toRefs(styleStore);
target="_blank" target="_blank"
:aria-label="$t('home.nav.twitterXAccount')" :aria-label="$t('home.nav.twitterXAccount')"
> >
<n-icon size="25" :component="IconBrandX" /> <IconBrandX size="25" />
</c-button> </c-button>
</c-tooltip> </c-tooltip>
<c-tooltip :tooltip="$t('home.nav.about')" position="bottom"> <c-tooltip :tooltip="$t('home.nav.about')" position="bottom">
<c-button circle variant="text" to="/about" :aria-label="$t('home.nav.aboutLabel')"> <c-button circle variant="text" to="/about" :aria-label="$t('home.nav.aboutLabel')">
<n-icon size="25" :component="IconInfoCircle" /> <IconInfoCircle size="25" />
</c-button> </c-button>
</c-tooltip> </c-tooltip>
<c-tooltip :tooltip="isDarkTheme ? $t('home.nav.lightMode') : $t('home.nav.darkMode')" position="bottom"> <c-tooltip :tooltip="isDarkTheme ? $t('home.nav.lightMode') : $t('home.nav.darkMode')" position="bottom">
<c-button circle variant="text" :aria-label="$t('home.nav.mode')" @click="() => styleStore.toggleDark()"> <c-button circle variant="text" :aria-label="$t('home.nav.mode')" @click="() => styleStore.toggleDark()">
<n-icon v-if="isDarkTheme" size="25" :component="IconSun" /> <IconSun v-if="isDarkTheme" size="25" />
<n-icon v-else size="25" :component="IconMoon" /> <IconMoon v-else size="25" />
</c-button> </c-button>
</c-tooltip> </c-tooltip>
</template> </template>

View file

@ -1,5 +1,5 @@
<script setup lang="ts"> <script setup lang="ts">
import { Copy } from '@vicons/tabler'; import { IconCopy } from '@tabler/icons-vue';
import { useElementSize } from '@vueuse/core'; import { useElementSize } from '@vueuse/core';
import hljs from 'highlight.js/lib/core'; import hljs from 'highlight.js/lib/core';
import jsonHljs from 'highlight.js/lib/languages/json'; import jsonHljs from 'highlight.js/lib/languages/json';
@ -55,7 +55,7 @@ const tooltipText = computed(() => isJustCopied.value ? 'Copied!' : copyMessage.
<div absolute right-10px top-10px> <div absolute right-10px top-10px>
<c-tooltip v-if="value" :tooltip="tooltipText" position="left"> <c-tooltip v-if="value" :tooltip="tooltipText" position="left">
<c-button circle important:h-10 important:w-10 @click="copy()"> <c-button circle important:h-10 important:w-10 @click="copy()">
<n-icon size="22" :component="Copy" /> <IconCopy size="20" />
</c-button> </c-button>
</c-tooltip> </c-tooltip>
</div> </div>

View file

@ -1,8 +1,8 @@
<script lang="ts" setup> <script lang="ts" setup>
import { NIcon, useThemeVars } from 'naive-ui'; import { useThemeVars } from 'naive-ui';
import { RouterLink } from 'vue-router'; import { RouterLink } from 'vue-router';
import { Heart, Home2, Menu2 } from '@vicons/tabler'; import { IconBrush, IconHeart, IconHome2, IconMenu2 } from '@tabler/icons-vue';
import { storeToRefs } from 'pinia'; import { storeToRefs } from 'pinia';
import HeroGradient from '../assets/hero-gradient.svg?component'; import HeroGradient from '../assets/hero-gradient.svg?component';
@ -97,18 +97,18 @@ const tools = computed<ToolCategory[]>(() => [
:aria-label="$t('home.toggleMenu')" :aria-label="$t('home.toggleMenu')"
@click="styleStore.isMenuCollapsed = !styleStore.isMenuCollapsed" @click="styleStore.isMenuCollapsed = !styleStore.isMenuCollapsed"
> >
<NIcon size="25" :component="Menu2" /> <IconMenu2 size="25" />
</c-button> </c-button>
<c-tooltip :tooltip="$t('home.home')" position="bottom"> <c-tooltip :tooltip="$t('home.home')" position="bottom">
<c-button to="/" circle variant="text" :aria-label="$t('home.home')"> <c-button to="/" circle variant="text" :aria-label="$t('home.home')">
<NIcon size="25" :component="Home2" /> <IconHome2 size="25" />
</c-button> </c-button>
</c-tooltip> </c-tooltip>
<c-tooltip :tooltip="$t('home.uiLib')" position="bottom"> <c-tooltip :tooltip="$t('home.uiLib')" position="bottom">
<c-button v-if="config.app.env === 'development'" to="/c-lib" circle variant="text" :aria-label="$t('home.uiLib')"> <c-button v-if="config.app.env === 'development'" to="/c-lib" circle variant="text" :aria-label="$t('home.uiLib')">
<icon-mdi:brush-variant text-20px /> <IconBrush />
</c-button> </c-button>
</c-tooltip> </c-tooltip>
@ -131,7 +131,7 @@ const tools = computed<ToolCategory[]>(() => [
@click="() => tracker.trackEvent({ eventName: 'Support button clicked' })" @click="() => tracker.trackEvent({ eventName: 'Support button clicked' })"
> >
{{ $t('home.buyMeACoffee') }} {{ $t('home.buyMeACoffee') }}
<NIcon v-if="!styleStore.isSmallScreen" :component="Heart" ml-2 /> <n-icon v-if="!styleStore.isSmallScreen" :component="IconHeart" ml-2 size="14" />
</c-button> </c-button>
</c-tooltip> </c-tooltip>
</div> </div>

View file

@ -1,16 +1,11 @@
import { defineStore } from 'pinia'; import { defineStore } from 'pinia';
import _ from 'lodash'; import _ from 'lodash';
import { IconBrandGithub, IconBug, IconDice5Filled, IconInfoCircle, IconSun } from '@tabler/icons-vue';
import type { PaletteOption } from './command-palette.types'; import type { PaletteOption } from './command-palette.types';
import { useToolStore } from '@/tools/tools.store'; import { useToolStore } from '@/tools/tools.store';
import { useFuzzySearch } from '@/composable/fuzzySearch'; import { useFuzzySearch } from '@/composable/fuzzySearch';
import { useStyleStore } from '@/stores/style.store'; import { useStyleStore } from '@/stores/style.store';
import SunIcon from '~icons/mdi/white-balance-sunny';
import GithubIcon from '~icons/mdi/github';
import BugIcon from '~icons/mdi/bug-outline';
import DiceIcon from '~icons/mdi/dice-5';
import InfoIcon from '~icons/mdi/information-outline';
export const useCommandPaletteStore = defineStore('command-palette', () => { export const useCommandPaletteStore = defineStore('command-palette', () => {
const toolStore = useToolStore(); const toolStore = useToolStore();
const styleStore = useStyleStore(); const styleStore = useStyleStore();
@ -33,7 +28,7 @@ export const useCommandPaletteStore = defineStore('command-palette', () => {
const { path } = _.sample(toolStore.tools)!; const { path } = _.sample(toolStore.tools)!;
router.push(path); router.push(path);
}, },
icon: DiceIcon, icon: IconDice5Filled,
category: 'Tools', category: 'Tools',
keywords: ['random', 'tool', 'pick', 'choose', 'select'], keywords: ['random', 'tool', 'pick', 'choose', 'select'],
closeOnSelect: true, closeOnSelect: true,
@ -42,7 +37,7 @@ export const useCommandPaletteStore = defineStore('command-palette', () => {
name: 'Toggle dark mode', name: 'Toggle dark mode',
description: 'Toggle dark mode on or off.', description: 'Toggle dark mode on or off.',
action: () => styleStore.toggleDark(), action: () => styleStore.toggleDark(),
icon: SunIcon, icon: IconSun,
category: 'Actions', category: 'Actions',
keywords: ['dark', 'theme', 'toggle', 'mode', 'light', 'system'], keywords: ['dark', 'theme', 'toggle', 'mode', 'light', 'system'],
}, },
@ -52,7 +47,7 @@ export const useCommandPaletteStore = defineStore('command-palette', () => {
category: 'External', category: 'External',
description: 'View the source code of it-tools on Github.', description: 'View the source code of it-tools on Github.',
keywords: ['github', 'repo', 'repository', 'source', 'code'], keywords: ['github', 'repo', 'repository', 'source', 'code'],
icon: GithubIcon, icon: IconBrandGithub,
}, },
{ {
name: 'Report a bug or an issue', name: 'Report a bug or an issue',
@ -60,7 +55,7 @@ export const useCommandPaletteStore = defineStore('command-palette', () => {
href: 'https://github.com/CorentinTh/it-tools/issues/new/choose', href: 'https://github.com/CorentinTh/it-tools/issues/new/choose',
category: 'Actions', category: 'Actions',
keywords: ['report', 'issue', 'bug', 'problem', 'error'], keywords: ['report', 'issue', 'bug', 'problem', 'error'],
icon: BugIcon, icon: IconBug,
}, },
{ {
name: 'About', name: 'About',
@ -68,7 +63,7 @@ export const useCommandPaletteStore = defineStore('command-palette', () => {
to: '/about', to: '/about',
category: 'Pages', category: 'Pages',
keywords: ['about', 'learn', 'more', 'info', 'information'], keywords: ['about', 'learn', 'more', 'info', 'information'],
icon: InfoIcon, icon: IconInfoCircle,
}, },
]; ];

View file

@ -1,6 +1,7 @@
<script setup lang="ts"> <script setup lang="ts">
import { storeToRefs } from 'pinia'; import { storeToRefs } from 'pinia';
import _ from 'lodash'; import _ from 'lodash';
import { IconSearch } from '@tabler/icons-vue';
import { useCommandPaletteStore } from './command-palette.store'; import { useCommandPaletteStore } from './command-palette.store';
import type { PaletteOption } from './command-palette.types'; import type { PaletteOption } from './command-palette.types';
@ -114,8 +115,7 @@ function activateOption(option: PaletteOption) {
<div flex-1> <div flex-1>
<c-button w-full important:justify-start @click="isModalOpen = true"> <c-button w-full important:justify-start @click="isModalOpen = true">
<span flex items-center gap-3 op-40> <span flex items-center gap-3 op-40>
<IconSearch size="15px" />
<icon-mdi-search />
{{ $t('search.label') }} {{ $t('search.label') }}
<span hidden flex-1 border border-current border-op-40 rounded border-solid px-5px py-3px sm:inline> <span hidden flex-1 border border-current border-op-40 rounded border-solid px-5px py-3px sm:inline>

View file

@ -1,14 +1,13 @@
<script setup lang="ts"> <script setup lang="ts">
import { useHead } from '@vueuse/head'; import { useHead } from '@vueuse/head';
import { IconFileUnknown } from '@tabler/icons-vue';
useHead({ title: 'Page not found - IT Tools' }); useHead({ title: 'Page not found - IT Tools' });
</script> </script>
<template> <template>
<div mt-20 flex flex-col items-center> <div mt-20 flex flex-col items-center>
<span text-90px lh-1 op-50> <n-icon :component="IconFileUnknown" size="95" lh-1 op50 transition />
<icon-mdi:kettle-steam-outline />
</span>
<h1 m-0 mt-3> <h1 m-0 mt-3>
{{ $t('404.notFound') }} {{ $t('404.notFound') }}

View file

@ -41,7 +41,7 @@ function onUpdateFavoriteTools() {
:aria-label="$t('home.follow.twitterXAccount')" :aria-label="$t('home.follow.twitterXAccount')"
>X</a>. >X</a>.
{{ $t('home.follow.thankYou') }} {{ $t('home.follow.thankYou') }}
<n-icon :component="IconHeart" /> <IconHeart size="15" />
</ColoredCard> </ColoredCard>
</div> </div>
@ -50,7 +50,7 @@ function onUpdateFavoriteTools() {
<h3 class="mb-5px mt-25px font-500 text-neutral-400"> <h3 class="mb-5px mt-25px font-500 text-neutral-400">
{{ $t('home.categories.favoriteTools') }} {{ $t('home.categories.favoriteTools') }}
<c-tooltip :tooltip="$t('home.categories.favoritesDndToolTip')"> <c-tooltip :tooltip="$t('home.categories.favoritesDndToolTip')">
<n-icon :component="IconDragDrop" size="18" /> <IconDragDrop size="18" />
</c-tooltip> </c-tooltip>
</h3> </h3>
<Draggable <Draggable

View file

@ -1,4 +1,4 @@
import { Artboard } from '@vicons/tabler'; import { IconArtboard } from '@tabler/icons-vue';
import { defineTool } from '../tool'; import { defineTool } from '../tool';
export const tool = defineTool({ export const tool = defineTool({
@ -7,6 +7,6 @@ export const tool = defineTool({
description: 'Create ASCII art text with many fonts and styles.', description: 'Create ASCII art text with many fonts and styles.',
keywords: ['ascii', 'asciiart', 'text', 'drawer'], keywords: ['ascii', 'asciiart', 'text', 'drawer'],
component: () => import('./ascii-text-drawer.vue'), component: () => import('./ascii-text-drawer.vue'),
icon: Artboard, icon: IconArtboard,
createdAt: new Date('2024-03-03'), createdAt: new Date('2024-03-03'),
}); });

View file

@ -1,4 +1,4 @@
import { FileDigit } from '@vicons/tabler'; import { IconFileDigit } from '@tabler/icons-vue';
import { defineTool } from '../tool'; import { defineTool } from '../tool';
import { translate } from '@/plugins/i18n.plugin'; import { translate } from '@/plugins/i18n.plugin';
@ -8,5 +8,5 @@ export const tool = defineTool({
description: translate('tools.base64-file-converter.description'), description: translate('tools.base64-file-converter.description'),
keywords: ['base64', 'converter', 'upload', 'image', 'file', 'conversion', 'web', 'data', 'format'], keywords: ['base64', 'converter', 'upload', 'image', 'file', 'conversion', 'web', 'data', 'format'],
component: () => import('./base64-file-converter.vue'), component: () => import('./base64-file-converter.vue'),
icon: FileDigit, icon: IconFileDigit,
}); });

View file

@ -1,4 +1,4 @@
import { FileDigit } from '@vicons/tabler'; import { IconFileDigit } from '@tabler/icons-vue';
import { defineTool } from '../tool'; import { defineTool } from '../tool';
import { translate } from '@/plugins/i18n.plugin'; import { translate } from '@/plugins/i18n.plugin';
@ -8,6 +8,6 @@ export const tool = defineTool({
description: translate('tools.base64-string-converter.description'), description: translate('tools.base64-string-converter.description'),
keywords: ['base64', 'converter', 'conversion', 'web', 'data', 'format', 'atob', 'btoa'], keywords: ['base64', 'converter', 'conversion', 'web', 'data', 'format', 'atob', 'btoa'],
component: () => import('./base64-string-converter.vue'), component: () => import('./base64-string-converter.vue'),
icon: FileDigit, icon: IconFileDigit,
redirectFrom: ['/file-to-base64', '/base64-converter'], redirectFrom: ['/file-to-base64', '/base64-converter'],
}); });

View file

@ -1,4 +1,4 @@
import { PasswordRound } from '@vicons/material'; import { IconPassword } from '@tabler/icons-vue';
import { defineTool } from '../tool'; import { defineTool } from '../tool';
import { translate } from '@/plugins/i18n.plugin'; import { translate } from '@/plugins/i18n.plugin';
@ -18,5 +18,5 @@ export const tool = defineTool({
'authorization', 'authorization',
], ],
component: () => import('./basic-auth-generator.vue'), component: () => import('./basic-auth-generator.vue'),
icon: PasswordRound, icon: IconPassword,
}); });

View file

@ -1,4 +1,4 @@
import { LockSquare } from '@vicons/tabler'; import { IconLockSquare } from '@tabler/icons-vue';
import { defineTool } from '../tool'; import { defineTool } from '../tool';
import { translate } from '@/plugins/i18n.plugin'; import { translate } from '@/plugins/i18n.plugin';
@ -8,5 +8,5 @@ export const tool = defineTool({
description: translate('tools.bcrypt.description'), description: translate('tools.bcrypt.description'),
keywords: ['bcrypt', 'hash', 'compare', 'password', 'salt', 'round', 'storage', 'crypto'], keywords: ['bcrypt', 'hash', 'compare', 'password', 'salt', 'round', 'storage', 'crypto'],
component: () => import('./bcrypt.vue'), component: () => import('./bcrypt.vue'),
icon: LockSquare, icon: IconLockSquare,
}); });

View file

@ -1,5 +1,5 @@
<script setup lang="ts"> <script setup lang="ts">
import { Plus, Trash } from '@vicons/tabler'; import { IconPlus, IconTrash } from '@tabler/icons-vue';
import { useStorage } from '@vueuse/core'; import { useStorage } from '@vueuse/core';
import _ from 'lodash'; import _ from 'lodash';
@ -99,14 +99,14 @@ function copyAsBulletList() {
<div flex justify-center> <div flex justify-center>
<c-button v-if="suites.length > 1" variant="text" @click="suites.splice(index, 1)"> <c-button v-if="suites.length > 1" variant="text" @click="suites.splice(index, 1)">
<n-icon :component="Trash" depth="3" mr-2 size="18" /> <n-icon :component="IconTrash" depth="3" mr-2 size="18" />
Delete suite Delete suite
</c-button> </c-button>
<c-button <c-button
variant="text" variant="text"
@click="suites.splice(index + 1, 0, { data: [0], title: `Suite ${suites.length + 1}` })" @click="suites.splice(index + 1, 0, { data: [0], title: `Suite ${suites.length + 1}` })"
> >
<n-icon :component="Plus" depth="3" mr-2 size="18" /> <n-icon :component="IconPlus" depth="3" mr-2 size="18" />
Add suite Add suite
</c-button> </c-button>
</div> </div>

View file

@ -1,5 +1,5 @@
<script setup lang="ts"> <script setup lang="ts">
import { Plus, Trash } from '@vicons/tabler'; import { IconPlus, IconTrash } from '@tabler/icons-vue';
import { useTemplateRefsList, useVModel } from '@vueuse/core'; import { useTemplateRefsList, useVModel } from '@vueuse/core';
import { NInputNumber } from 'naive-ui'; import { NInputNumber } from 'naive-ui';
import { nextTick } from 'vue'; import { nextTick } from 'vue';
@ -41,13 +41,13 @@ function onInputEnter(index: number) {
/> />
<c-tooltip tooltip="Delete this value"> <c-tooltip tooltip="Delete this value">
<c-button circle variant="text" @click="values.splice(index, 1)"> <c-button circle variant="text" @click="values.splice(index, 1)">
<n-icon :component="Trash" depth="3" size="18" /> <n-icon :component="IconTrash" depth="3" size="18" />
</c-button> </c-button>
</c-tooltip> </c-tooltip>
</div> </div>
<c-button @click="addValue"> <c-button @click="addValue">
<n-icon :component="Plus" depth="3" mr-2 size="18" /> <n-icon :component="IconPlus" depth="3" mr-2 size="18" />
Add a measure Add a measure
</c-button> </c-button>
</div> </div>

View file

@ -1,4 +1,4 @@
import { SpeedFilled } from '@vicons/material'; import { IconBrandSpeedtest } from '@tabler/icons-vue';
import { defineTool } from '../tool'; import { defineTool } from '../tool';
import { translate } from '@/plugins/i18n.plugin'; import { translate } from '@/plugins/i18n.plugin';
@ -8,6 +8,6 @@ export const tool = defineTool({
description: translate('tools.benchmark-builder.description'), description: translate('tools.benchmark-builder.description'),
keywords: ['benchmark', 'builder', 'execution', 'duration', 'mean', 'variance'], keywords: ['benchmark', 'builder', 'execution', 'duration', 'mean', 'variance'],
component: () => import('./benchmark-builder.vue'), component: () => import('./benchmark-builder.vue'),
icon: SpeedFilled, icon: IconBrandSpeedtest,
createdAt: new Date('2023-04-05'), createdAt: new Date('2023-04-05'),
}); });

View file

@ -14,7 +14,7 @@ import {
portugueseWordList, portugueseWordList,
spanishWordList, spanishWordList,
} from '@it-tools/bip39'; } from '@it-tools/bip39';
import { Copy, Refresh } from '@vicons/tabler'; import { IconCopy, IconRefresh } from '@tabler/icons-vue';
import { useCopy } from '@/composable/copy'; import { useCopy } from '@/composable/copy';
import { useValidation } from '@/composable/validation'; import { useValidation } from '@/composable/validation';
@ -101,14 +101,10 @@ const { copy: copyPassphrase } = useCopy({ source: passphrase, text: 'Passphrase
<c-input-text v-model:value="entropy" placeholder="Your string..." /> <c-input-text v-model:value="entropy" placeholder="Your string..." />
<c-button @click="refreshEntropy()"> <c-button @click="refreshEntropy()">
<n-icon size="22"> <IconRefresh size="22" />
<Refresh />
</n-icon>
</c-button> </c-button>
<c-button @click="copyEntropy()"> <c-button @click="copyEntropy()">
<n-icon size="22"> <IconCopy size="22" />
<Copy />
</n-icon>
</c-button> </c-button>
</n-input-group> </n-input-group>
</n-form-item> </n-form-item>
@ -123,7 +119,7 @@ const { copy: copyPassphrase } = useCopy({ source: passphrase, text: 'Passphrase
<c-input-text v-model:value="passphrase" placeholder="Your mnemonic..." raw-text /> <c-input-text v-model:value="passphrase" placeholder="Your mnemonic..." raw-text />
<c-button @click="copyPassphrase()"> <c-button @click="copyPassphrase()">
<n-icon size="22" :component="Copy" /> <IconCopy size="22" />
</c-button> </c-button>
</n-input-group> </n-input-group>
</n-form-item> </n-form-item>

View file

@ -1,4 +1,4 @@
import { AlignJustified } from '@vicons/tabler'; import { IconAlignJustified } from '@tabler/icons-vue';
import { defineTool } from '../tool'; import { defineTool } from '../tool';
import { translate } from '@/plugins/i18n.plugin'; import { translate } from '@/plugins/i18n.plugin';
@ -8,5 +8,5 @@ export const tool = defineTool({
description: translate('tools.bip39-generator.description'), description: translate('tools.bip39-generator.description'),
keywords: ['BIP39', 'passphrase', 'generator', 'mnemonic', 'entropy'], keywords: ['BIP39', 'passphrase', 'generator', 'mnemonic', 'entropy'],
component: () => import('./bip39-generator.vue'), component: () => import('./bip39-generator.vue'),
icon: AlignJustified, icon: IconAlignJustified,
}); });

View file

@ -1,6 +1,6 @@
<script setup lang="ts"> <script setup lang="ts">
import _ from 'lodash'; import _ from 'lodash';
import { IconCamera, IconDownload, IconPlayerPauseFilled, IconPlayerPlayFilled, IconPlayerRecordFilled, IconTrash, IconVideo } from '@tabler/icons-vue';
import { useMediaRecorder } from './useMediaRecorder'; import { useMediaRecorder } from './useMediaRecorder';
interface Media { type: 'image' | 'video'; value: string; createdAt: Date } interface Media { type: 'image' | 'video'; value: string; createdAt: Date }
@ -158,28 +158,28 @@ function downloadMedia({ type, value, createdAt }: Media) {
<div flex items-center justify-between gap-2> <div flex items-center justify-between gap-2>
<c-button :disabled="!isMediaStreamAvailable" @click="takeScreenshot"> <c-button :disabled="!isMediaStreamAvailable" @click="takeScreenshot">
<span mr-2> <icon-mdi-camera /></span> <span mr-2><IconCamera size="18" /></span>
Take screenshot Take screenshot
</c-button> </c-button>
<div v-if="isRecordingSupported" flex justify-center gap-2> <div v-if="isRecordingSupported" flex justify-center gap-2>
<c-button v-if="recordingState === 'stopped'" @click="startRecording"> <c-button v-if="recordingState === 'stopped'" @click="startRecording">
<span mr-2> <icon-mdi-video /></span> <span mr-2><IconVideo size="18" /></span>
Start recording Start recording
</c-button> </c-button>
<c-button v-if="recordingState === 'recording'" @click="pauseRecording"> <c-button v-if="recordingState === 'recording'" @click="pauseRecording">
<span mr-2> <icon-mdi-pause /></span> <span mr-2><IconPlayerPauseFilled size="17" /></span>
Pause Pause
</c-button> </c-button>
<c-button v-if="recordingState === 'paused'" @click="resumeRecording"> <c-button v-if="recordingState === 'paused'" @click="resumeRecording">
<span mr-2> <icon-mdi-play /></span> <span mr-2><IconPlayerPlayFilled size="15" /></span>
Resume Resume
</c-button> </c-button>
<c-button v-if="recordingState !== 'stopped'" type="error" @click="stopRecording"> <c-button v-if="recordingState !== 'stopped'" type="error" @click="stopRecording">
<span mr-2> <icon-mdi-record /></span> <span mr-2><IconPlayerRecordFilled size="15" /></span>
Stop Stop
</c-button> </c-button>
</div> </div>
@ -203,11 +203,11 @@ function downloadMedia({ type, value, createdAt }: Media) {
<div flex gap-2> <div flex gap-2>
<c-button @click="downloadMedia({ type, value, createdAt })"> <c-button @click="downloadMedia({ type, value, createdAt })">
<icon-mdi-download /> <IconDownload size="15" />
</c-button> </c-button>
<c-button @click="medias = medias.filter((_ignored, i) => i !== index)"> <c-button @click="medias = medias.filter((_ignored, i) => i !== index)">
<icon-mdi-delete-outline /> <IconTrash size="15" />
</c-button> </c-button>
</div> </div>
</div> </div>

View file

@ -1,4 +1,4 @@
import { Camera } from '@vicons/tabler'; import { IconCamera } from '@tabler/icons-vue';
import { defineTool } from '../tool'; import { defineTool } from '../tool';
import { translate } from '@/plugins/i18n.plugin'; import { translate } from '@/plugins/i18n.plugin';
@ -8,6 +8,6 @@ export const tool = defineTool({
description: translate('tools.camera-recorder.description'), description: translate('tools.camera-recorder.description'),
keywords: ['camera', 'recoder'], keywords: ['camera', 'recoder'],
component: () => import('./camera-recorder.vue'), component: () => import('./camera-recorder.vue'),
icon: Camera, icon: IconCamera,
createdAt: new Date('2023-05-15'), createdAt: new Date('2023-05-15'),
}); });

View file

@ -1,4 +1,4 @@
import { LetterCaseToggle } from '@vicons/tabler'; import { IconLetterCaseToggle } from '@tabler/icons-vue';
import { defineTool } from '../tool'; import { defineTool } from '../tool';
import { translate } from '@/plugins/i18n.plugin'; import { translate } from '@/plugins/i18n.plugin';
@ -22,5 +22,5 @@ export const tool = defineTool({
'snakeCase', 'snakeCase',
], ],
component: () => import('./case-converter.vue'), component: () => import('./case-converter.vue'),
icon: LetterCaseToggle, icon: IconLetterCaseToggle,
}); });

View file

@ -1,4 +1,4 @@
import { FileInvoice } from '@vicons/tabler'; import { IconFileInvoice } from '@tabler/icons-vue';
import { defineTool } from '../tool'; import { defineTool } from '../tool';
import { translate } from '@/plugins/i18n.plugin'; import { translate } from '@/plugins/i18n.plugin';
@ -19,5 +19,5 @@ export const tool = defineTool({
'octal', 'octal',
], ],
component: () => import('./chmod-calculator.vue'), component: () => import('./chmod-calculator.vue'),
icon: FileInvoice, icon: IconFileInvoice,
}); });

View file

@ -1,4 +1,4 @@
import { TimerOutlined } from '@vicons/material'; import { IconStopwatch } from '@tabler/icons-vue';
import { defineTool } from '../tool'; import { defineTool } from '../tool';
import { translate } from '@/plugins/i18n.plugin'; import { translate } from '@/plugins/i18n.plugin';
@ -8,5 +8,5 @@ export const tool = defineTool({
description: translate('tools.chronometer.description'), description: translate('tools.chronometer.description'),
keywords: ['chronometer', 'time', 'lap', 'duration', 'measure', 'pause', 'resume', 'stopwatch'], keywords: ['chronometer', 'time', 'lap', 'duration', 'measure', 'pause', 'resume', 'stopwatch'],
component: () => import('./chronometer.vue'), component: () => import('./chronometer.vue'),
icon: TimerOutlined, icon: IconStopwatch,
}); });

View file

@ -1,4 +1,4 @@
import { Palette } from '@vicons/tabler'; import { IconPalette } from '@tabler/icons-vue';
import { defineTool } from '../tool'; import { defineTool } from '../tool';
import { translate } from '@/plugins/i18n.plugin'; import { translate } from '@/plugins/i18n.plugin';
@ -8,6 +8,6 @@ export const tool = defineTool({
description: translate('tools.color-converter.description'), description: translate('tools.color-converter.description'),
keywords: ['color', 'converter'], keywords: ['color', 'converter'],
component: () => import('./color-converter.vue'), component: () => import('./color-converter.vue'),
icon: Palette, icon: IconPalette,
redirectFrom: ['/color-picker-converter'], redirectFrom: ['/color-picker-converter'],
}); });

View file

@ -1,4 +1,4 @@
import { Alarm } from '@vicons/tabler'; import { IconAlarm } from '@tabler/icons-vue';
import { defineTool } from '../tool'; import { defineTool } from '../tool';
import { translate } from '@/plugins/i18n.plugin'; import { translate } from '@/plugins/i18n.plugin';
@ -22,5 +22,5 @@ export const tool = defineTool({
'second', 'second',
], ],
component: () => import('./crontab-generator.vue'), component: () => import('./crontab-generator.vue'),
icon: Alarm, icon: IconAlarm,
}); });

View file

@ -1,4 +1,4 @@
import { Calendar } from '@vicons/tabler'; import { IconCalendar } from '@tabler/icons-vue';
import { defineTool } from '../tool'; import { defineTool } from '../tool';
import { translate } from '@/plugins/i18n.plugin'; import { translate } from '@/plugins/i18n.plugin';
@ -8,5 +8,5 @@ export const tool = defineTool({
description: translate('tools.date-converter.description'), description: translate('tools.date-converter.description'),
keywords: ['date', 'time', 'converter', 'iso', 'utc', 'timezone', 'year', 'month', 'day', 'minute', 'seconde'], keywords: ['date', 'time', 'converter', 'iso', 'utc', 'timezone', 'year', 'month', 'day', 'minute', 'seconde'],
component: () => import('./date-time-converter.vue'), component: () => import('./date-time-converter.vue'),
icon: Calendar, icon: IconCalendar,
}); });

View file

@ -1,4 +1,4 @@
import { DeviceDesktop } from '@vicons/tabler'; import { IconDeviceDesktop } from '@tabler/icons-vue';
import { defineTool } from '../tool'; import { defineTool } from '../tool';
import { translate } from '@/plugins/i18n.plugin'; import { translate } from '@/plugins/i18n.plugin';
@ -20,5 +20,5 @@ export const tool = defineTool({
'agent', 'agent',
], ],
component: () => import('./device-information.vue'), component: () => import('./device-information.vue'),
icon: DeviceDesktop, icon: IconDeviceDesktop,
}); });

View file

@ -1,4 +1,4 @@
import { BrandDocker } from '@vicons/tabler'; import { IconBrandDocker } from '@tabler/icons-vue';
import { defineTool } from '../tool'; import { defineTool } from '../tool';
import { translate } from '@/plugins/i18n.plugin'; import { translate } from '@/plugins/i18n.plugin';
@ -8,5 +8,5 @@ export const tool = defineTool({
description: translate('tools.docker-run-to-docker-compose-converter.description'), description: translate('tools.docker-run-to-docker-compose-converter.description'),
keywords: ['docker', 'run', 'compose', 'yaml', 'yml', 'convert', 'deamon'], keywords: ['docker', 'run', 'compose', 'yaml', 'yml', 'convert', 'deamon'],
component: () => import('./docker-run-to-docker-compose-converter.vue'), component: () => import('./docker-run-to-docker-compose-converter.vue'),
icon: BrandDocker, icon: IconBrandDocker,
}); });

View file

@ -1,4 +1,4 @@
import { Mail } from '@vicons/tabler'; import { IconMail } from '@tabler/icons-vue';
import { defineTool } from '../tool'; import { defineTool } from '../tool';
export const tool = defineTool({ export const tool = defineTool({
@ -7,6 +7,6 @@ export const tool = defineTool({
description: 'Normalize email addresses to a standard format for easier comparison. Useful for deduplication and data cleaning.', description: 'Normalize email addresses to a standard format for easier comparison. Useful for deduplication and data cleaning.',
keywords: ['email', 'normalizer'], keywords: ['email', 'normalizer'],
component: () => import('./email-normalizer.vue'), component: () => import('./email-normalizer.vue'),
icon: Mail, icon: IconMail,
createdAt: new Date('2024-08-15'), createdAt: new Date('2024-08-15'),
}); });

View file

@ -2,6 +2,7 @@
import emojiUnicodeData from 'unicode-emoji-json'; import emojiUnicodeData from 'unicode-emoji-json';
import emojiKeywords from 'emojilib'; import emojiKeywords from 'emojilib';
import _ from 'lodash'; import _ from 'lodash';
import { IconSearch } from '@tabler/icons-vue';
import type { EmojiInfo } from './emoji.types'; import type { EmojiInfo } from './emoji.types';
import { useFuzzySearch } from '@/composable/fuzzySearch'; import { useFuzzySearch } from '@/composable/fuzzySearch';
import useDebouncedRef from '@/composable/debouncedref'; import useDebouncedRef from '@/composable/debouncedref';
@ -47,7 +48,7 @@ const { searchResult } = useFuzzySearch({
mx-auto max-w-600px mx-auto max-w-600px
> >
<template #prefix> <template #prefix>
<icon-mdi-search mr-6px color-black op-70 dark:color-white /> <n-icon :component="IconSearch" mr-6px color-black op-70 dark:color-white />
</template> </template>
</c-input-text> </c-input-text>
</div> </div>

View file

@ -1,4 +1,4 @@
import { MoodSmile } from '@vicons/tabler'; import { IconMoodSmile } from '@tabler/icons-vue';
import { defineTool } from '../tool'; import { defineTool } from '../tool';
import { translate } from '@/plugins/i18n.plugin'; import { translate } from '@/plugins/i18n.plugin';
@ -8,6 +8,6 @@ export const tool = defineTool({
description: translate('tools.emoji-picker.description'), description: translate('tools.emoji-picker.description'),
keywords: ['emoji', 'picker', 'unicode', 'copy', 'paste'], keywords: ['emoji', 'picker', 'unicode', 'copy', 'paste'],
component: () => import('./emoji-picker.vue'), component: () => import('./emoji-picker.vue'),
icon: MoodSmile, icon: IconMoodSmile,
createdAt: new Date('2023-08-07'), createdAt: new Date('2023-08-07'),
}); });

View file

@ -1,4 +1,4 @@
import { Lock } from '@vicons/tabler'; import { IconLock } from '@tabler/icons-vue';
import { defineTool } from '../tool'; import { defineTool } from '../tool';
import { translate } from '@/plugins/i18n.plugin'; import { translate } from '@/plugins/i18n.plugin';
@ -8,6 +8,6 @@ export const tool = defineTool({
description: translate('tools.encryption.description'), description: translate('tools.encryption.description'),
keywords: ['cypher', 'encipher', 'text', 'AES', 'TripleDES', 'Rabbit', 'RC4'], keywords: ['cypher', 'encipher', 'text', 'AES', 'TripleDES', 'Rabbit', 'RC4'],
component: () => import('./encryption.vue'), component: () => import('./encryption.vue'),
icon: Lock, icon: IconLock,
redirectFrom: ['/cypher'], redirectFrom: ['/cypher'],
}); });

View file

@ -1,4 +1,4 @@
import { Hourglass } from '@vicons/tabler'; import { IconHourglass } from '@tabler/icons-vue';
import { defineTool } from '../tool'; import { defineTool } from '../tool';
import { translate } from '@/plugins/i18n.plugin'; import { translate } from '@/plugins/i18n.plugin';
@ -8,5 +8,5 @@ export const tool = defineTool({
description: translate('tools.eta-calculator.description'), description: translate('tools.eta-calculator.description'),
keywords: ['eta', 'calculator', 'estimated', 'time', 'arrival', 'average'], keywords: ['eta', 'calculator', 'estimated', 'time', 'arrival', 'average'],
component: () => import('./eta-calculator.vue'), component: () => import('./eta-calculator.vue'),
icon: Hourglass, icon: IconHourglass,
}); });

View file

@ -1,4 +1,4 @@
import { BrandGit } from '@vicons/tabler'; import { IconBrandGit } from '@tabler/icons-vue';
import { defineTool } from '../tool'; import { defineTool } from '../tool';
import { translate } from '@/plugins/i18n.plugin'; import { translate } from '@/plugins/i18n.plugin';
@ -8,5 +8,5 @@ export const tool = defineTool({
description: translate('tools.git-memo.description'), description: translate('tools.git-memo.description'),
keywords: ['git', 'push', 'force', 'pull', 'commit', 'amend', 'rebase', 'merge', 'reset', 'soft', 'hard', 'lease'], keywords: ['git', 'push', 'force', 'pull', 'commit', 'amend', 'rebase', 'merge', 'reset', 'soft', 'hard', 'lease'],
component: () => import('./git-memo.vue'), component: () => import('./git-memo.vue'),
icon: BrandGit, icon: IconBrandGit,
}); });

View file

@ -1,4 +1,4 @@
import { EyeOff } from '@vicons/tabler'; import { IconEyeOff } from '@tabler/icons-vue';
import { defineTool } from '../tool'; import { defineTool } from '../tool';
import { translate } from '@/plugins/i18n.plugin'; import { translate } from '@/plugins/i18n.plugin';
@ -22,6 +22,6 @@ export const tool = defineTool({
'RIPEMD160', 'RIPEMD160',
], ],
component: () => import('./hash-text.vue'), component: () => import('./hash-text.vue'),
icon: EyeOff, icon: IconEyeOff,
redirectFrom: ['/hash'], redirectFrom: ['/hash'],
}); });

View file

@ -1,4 +1,4 @@
import { ShortTextRound } from '@vicons/material'; import { IconSquareKey } from '@tabler/icons-vue';
import { defineTool } from '../tool'; import { defineTool } from '../tool';
import { translate } from '@/plugins/i18n.plugin'; import { translate } from '@/plugins/i18n.plugin';
@ -8,5 +8,5 @@ export const tool = defineTool({
description: translate('tools.hmac-generator.description'), description: translate('tools.hmac-generator.description'),
keywords: ['hmac', 'generator', 'MD5', 'SHA1', 'SHA256', 'SHA224', 'SHA512', 'SHA384', 'SHA3', 'RIPEMD160'], keywords: ['hmac', 'generator', 'MD5', 'SHA1', 'SHA256', 'SHA224', 'SHA512', 'SHA384', 'SHA3', 'RIPEMD160'],
component: () => import('./hmac-generator.vue'), component: () => import('./hmac-generator.vue'),
icon: ShortTextRound, icon: IconSquareKey,
}); });

View file

@ -1,4 +1,4 @@
import { Code } from '@vicons/tabler'; import { IconCode } from '@tabler/icons-vue';
import { defineTool } from '../tool'; import { defineTool } from '../tool';
import { translate } from '@/plugins/i18n.plugin'; import { translate } from '@/plugins/i18n.plugin';
@ -8,5 +8,5 @@ export const tool = defineTool({
description: translate('tools.html-entities.description'), description: translate('tools.html-entities.description'),
keywords: ['html', 'entities', 'escape', 'unescape', 'special', 'characters', 'tags'], keywords: ['html', 'entities', 'escape', 'unescape', 'special', 'characters', 'tags'],
component: () => import('./html-entities.vue'), component: () => import('./html-entities.vue'),
icon: Code, icon: IconCode,
}); });

View file

@ -1,23 +1,23 @@
<script setup lang="ts"> <script setup lang="ts">
import type { Editor } from '@tiptap/vue-3'; import type { Editor } from '@tiptap/vue-3';
import { import {
ArrowBack, IconArrowBack,
ArrowForwardUp, IconArrowForwardUp,
Blockquote, IconBlockquote,
Bold, IconBold,
ClearFormatting, IconClearFormatting,
Code, IconCode,
CodePlus, IconCodePlus,
H1, IconH1,
H2, IconH2,
H3, IconH3,
H4, IconH4,
Italic, IconItalic,
List, IconList,
ListNumbers, IconListNumbers,
Strikethrough, IconStrikethrough,
TextWrap, IconTextWrap,
} from '@vicons/tabler'; } from '@tabler/icons-vue';
import type { Component } from 'vue'; import type { Component } from 'vue';
import MenuBarItem from './menu-bar-item.vue'; import MenuBarItem from './menu-bar-item.vue';
@ -37,28 +37,28 @@ type MenuItem =
const items: MenuItem[] = [ const items: MenuItem[] = [
{ {
type: 'button', type: 'button',
icon: Bold, icon: IconBold,
title: 'Bold', title: 'Bold',
action: () => editor.value.chain().focus().toggleBold().run(), action: () => editor.value.chain().focus().toggleBold().run(),
isActive: () => editor.value.isActive('bold'), isActive: () => editor.value.isActive('bold'),
}, },
{ {
type: 'button', type: 'button',
icon: Italic, icon: IconItalic,
title: 'Italic', title: 'Italic',
action: () => editor.value.chain().focus().toggleItalic().run(), action: () => editor.value.chain().focus().toggleItalic().run(),
isActive: () => editor.value.isActive('italic'), isActive: () => editor.value.isActive('italic'),
}, },
{ {
type: 'button', type: 'button',
icon: Strikethrough, icon: IconStrikethrough,
title: 'Strike', title: 'Strike',
action: () => editor.value.chain().focus().toggleStrike().run(), action: () => editor.value.chain().focus().toggleStrike().run(),
isActive: () => editor.value.isActive('strike'), isActive: () => editor.value.isActive('strike'),
}, },
{ {
type: 'button', type: 'button',
icon: Code, icon: IconCode,
title: 'Inline code', title: 'Inline code',
action: () => editor.value.chain().focus().toggleCode().run(), action: () => editor.value.chain().focus().toggleCode().run(),
isActive: () => editor.value.isActive('code'), isActive: () => editor.value.isActive('code'),
@ -68,28 +68,28 @@ const items: MenuItem[] = [
}, },
{ {
type: 'button', type: 'button',
icon: H1, icon: IconH1,
title: 'Heading 1', title: 'Heading 1',
action: () => editor.value.chain().focus().toggleHeading({ level: 1 }).run(), action: () => editor.value.chain().focus().toggleHeading({ level: 1 }).run(),
isActive: () => editor.value.isActive('heading', { level: 1 }), isActive: () => editor.value.isActive('heading', { level: 1 }),
}, },
{ {
type: 'button', type: 'button',
icon: H2, icon: IconH2,
title: 'Heading 2', title: 'Heading 2',
action: () => editor.value.chain().focus().toggleHeading({ level: 2 }).run(), action: () => editor.value.chain().focus().toggleHeading({ level: 2 }).run(),
isActive: () => editor.value.isActive('heading', { level: 2 }), isActive: () => editor.value.isActive('heading', { level: 2 }),
}, },
{ {
type: 'button', type: 'button',
icon: H3, icon: IconH3,
title: 'Heading 3', title: 'Heading 3',
action: () => editor.value.chain().focus().toggleHeading({ level: 3 }).run(), action: () => editor.value.chain().focus().toggleHeading({ level: 3 }).run(),
isActive: () => editor.value.isActive('heading', { level: 3 }), isActive: () => editor.value.isActive('heading', { level: 3 }),
}, },
{ {
type: 'button', type: 'button',
icon: H4, icon: IconH4,
title: 'Heading 4', title: 'Heading 4',
action: () => editor.value.chain().focus().toggleHeading({ level: 4 }).run(), action: () => editor.value.chain().focus().toggleHeading({ level: 4 }).run(),
isActive: () => editor.value.isActive('heading', { level: 4 }), isActive: () => editor.value.isActive('heading', { level: 4 }),
@ -99,21 +99,21 @@ const items: MenuItem[] = [
}, },
{ {
type: 'button', type: 'button',
icon: List, icon: IconList,
title: 'Bullet list', title: 'Bullet list',
action: () => editor.value.chain().focus().toggleBulletList().run(), action: () => editor.value.chain().focus().toggleBulletList().run(),
isActive: () => editor.value.isActive('bulletList'), isActive: () => editor.value.isActive('bulletList'),
}, },
{ {
type: 'button', type: 'button',
icon: ListNumbers, icon: IconListNumbers,
title: 'Ordered list', title: 'Ordered list',
action: () => editor.value.chain().focus().toggleOrderedList().run(), action: () => editor.value.chain().focus().toggleOrderedList().run(),
isActive: () => editor.value.isActive('orderedList'), isActive: () => editor.value.isActive('orderedList'),
}, },
{ {
type: 'button', type: 'button',
icon: CodePlus, icon: IconCodePlus,
title: 'Code block', title: 'Code block',
action: () => editor.value.chain().focus().toggleCodeBlock().run(), action: () => editor.value.chain().focus().toggleCodeBlock().run(),
isActive: () => editor.value.isActive('codeBlock'), isActive: () => editor.value.isActive('codeBlock'),
@ -121,7 +121,7 @@ const items: MenuItem[] = [
{ {
type: 'button', type: 'button',
icon: Blockquote, icon: IconBlockquote,
title: 'Blockquote', title: 'Blockquote',
action: () => editor.value.chain().focus().toggleBlockquote().run(), action: () => editor.value.chain().focus().toggleBlockquote().run(),
isActive: () => editor.value.isActive('blockquote'), isActive: () => editor.value.isActive('blockquote'),
@ -131,26 +131,26 @@ const items: MenuItem[] = [
}, },
{ {
type: 'button', type: 'button',
icon: TextWrap, icon: IconTextWrap,
title: 'Hard break', title: 'Hard break',
action: () => editor.value.chain().focus().setHardBreak().run(), action: () => editor.value.chain().focus().setHardBreak().run(),
}, },
{ {
type: 'button', type: 'button',
icon: ClearFormatting, icon: IconClearFormatting,
title: 'Clear format', title: 'Clear format',
action: () => editor.value.chain().focus().clearNodes().unsetAllMarks().run(), action: () => editor.value.chain().focus().clearNodes().unsetAllMarks().run(),
}, },
{ {
type: 'button', type: 'button',
icon: ArrowBack, icon: IconArrowBack,
title: 'Undo', title: 'Undo',
action: () => editor.value.chain().focus().undo().run(), action: () => editor.value.chain().focus().undo().run(),
}, },
{ {
type: 'button', type: 'button',
icon: ArrowForwardUp, icon: IconArrowForwardUp,
title: 'Redo', title: 'Redo',
action: () => editor.value.chain().focus().redo().run(), action: () => editor.value.chain().focus().redo().run(),
}, },

View file

@ -1,4 +1,4 @@
import { Edit } from '@vicons/tabler'; import { IconEdit } from '@tabler/icons-vue';
import { defineTool } from '../tool'; import { defineTool } from '../tool';
import { translate } from '@/plugins/i18n.plugin'; import { translate } from '@/plugins/i18n.plugin';
@ -8,5 +8,5 @@ export const tool = defineTool({
description: translate('tools.html-wysiwyg-editor.description'), description: translate('tools.html-wysiwyg-editor.description'),
keywords: ['html', 'wysiwyg', 'editor', 'p', 'ul', 'ol', 'converter', 'live'], keywords: ['html', 'wysiwyg', 'editor', 'p', 'ul', 'ol', 'converter', 'live'],
component: () => import('./html-wysiwyg-editor.vue'), component: () => import('./html-wysiwyg-editor.vue'),
icon: Edit, icon: IconEdit,
}); });

View file

@ -1,6 +1,6 @@
import { IconBuildingBank } from '@tabler/icons-vue';
import { defineTool } from '../tool'; import { defineTool } from '../tool';
import { translate } from '@/plugins/i18n.plugin'; import { translate } from '@/plugins/i18n.plugin';
import Bank from '~icons/mdi/bank';
export const tool = defineTool({ export const tool = defineTool({
name: translate('tools.iban-validator-and-parser.title'), name: translate('tools.iban-validator-and-parser.title'),
@ -8,6 +8,6 @@ export const tool = defineTool({
description: translate('tools.iban-validator-and-parser.description'), description: translate('tools.iban-validator-and-parser.description'),
keywords: ['iban', 'validator', 'and', 'parser', 'bic', 'bank'], keywords: ['iban', 'validator', 'and', 'parser', 'bic', 'bank'],
component: () => import('./iban-validator-and-parser.vue'), component: () => import('./iban-validator-and-parser.vue'),
icon: Bank, icon: IconBuildingBank,
createdAt: new Date('2023-08-26'), createdAt: new Date('2023-08-26'),
}); });

View file

@ -1,4 +1,4 @@
import { ArrowsLeftRight } from '@vicons/tabler'; import { IconArrowsLeftRight } from '@tabler/icons-vue';
import { defineTool } from '../tool'; import { defineTool } from '../tool';
import { translate } from '@/plugins/i18n.plugin'; import { translate } from '@/plugins/i18n.plugin';
@ -8,5 +8,5 @@ export const tool = defineTool({
description: translate('tools.base-converter.description'), description: translate('tools.base-converter.description'),
keywords: ['integer', 'number', 'base', 'conversion', 'decimal', 'hexadecimal', 'binary', 'octal', 'base64'], keywords: ['integer', 'number', 'base', 'conversion', 'decimal', 'hexadecimal', 'binary', 'octal', 'base64'],
component: () => import('./integer-base-converter.vue'), component: () => import('./integer-base-converter.vue'),
icon: ArrowsLeftRight, icon: IconArrowsLeftRight,
}); });

View file

@ -1,4 +1,4 @@
import { Binary } from '@vicons/tabler'; import { IconBinary } from '@tabler/icons-vue';
import { defineTool } from '../tool'; import { defineTool } from '../tool';
import { translate } from '@/plugins/i18n.plugin'; import { translate } from '@/plugins/i18n.plugin';
@ -8,6 +8,6 @@ export const tool = defineTool({
description: translate('tools.ipv4-address-converter.description'), description: translate('tools.ipv4-address-converter.description'),
keywords: ['ipv4', 'address', 'converter', 'decimal', 'hexadecimal', 'binary', 'ipv6'], keywords: ['ipv4', 'address', 'converter', 'decimal', 'hexadecimal', 'binary', 'ipv6'],
component: () => import('./ipv4-address-converter.vue'), component: () => import('./ipv4-address-converter.vue'),
icon: Binary, icon: IconBinary,
createdAt: new Date('2023-04-08'), createdAt: new Date('2023-04-08'),
}); });

View file

@ -1,4 +1,4 @@
import { UnfoldMoreOutlined } from '@vicons/material'; import { IconArrowsMoveVertical } from '@tabler/icons-vue';
import { defineTool } from '../tool'; import { defineTool } from '../tool';
import { translate } from '@/plugins/i18n.plugin'; import { translate } from '@/plugins/i18n.plugin';
@ -8,6 +8,6 @@ export const tool = defineTool({
description: translate('tools.ipv4-range-expander.description'), description: translate('tools.ipv4-range-expander.description'),
keywords: ['ipv4', 'range', 'expander', 'subnet', 'creator', 'cidr'], keywords: ['ipv4', 'range', 'expander', 'subnet', 'creator', 'cidr'],
component: () => import('./ipv4-range-expander.vue'), component: () => import('./ipv4-range-expander.vue'),
icon: UnfoldMoreOutlined, icon: IconArrowsMoveVertical,
createdAt: new Date('2023-04-19'), createdAt: new Date('2023-04-19'),
}); });

View file

@ -1,5 +1,5 @@
<script setup lang="ts"> <script setup lang="ts">
import { Exchange } from '@vicons/tabler'; import { IconExchange } from '@tabler/icons-vue';
import { isValidIpv4 } from '../ipv4-address-converter/ipv4-address-converter.service'; import { isValidIpv4 } from '../ipv4-address-converter/ipv4-address-converter.service';
import type { Ipv4RangeExpanderResult } from './ipv4-range-expander.types'; import type { Ipv4RangeExpanderResult } from './ipv4-range-expander.types';
import { calculateCidr } from './ipv4-range-expander.service'; import { calculateCidr } from './ipv4-range-expander.service';
@ -111,7 +111,7 @@ function onSwitchStartEndClicked() {
</div> </div>
<c-button @click="onSwitchStartEndClicked"> <c-button @click="onSwitchStartEndClicked">
<n-icon mr-2 :component="Exchange" depth="3" size="22" /> <n-icon mr-2 :component="IconExchange" depth="3" size="22" />
Switch start and end IPv4 address Switch start and end IPv4 address
</c-button> </c-button>
</n-alert> </n-alert>

View file

@ -1,4 +1,4 @@
import { RouterOutlined } from '@vicons/material'; import { IconRouter } from '@tabler/icons-vue';
import { defineTool } from '../tool'; import { defineTool } from '../tool';
import { translate } from '@/plugins/i18n.plugin'; import { translate } from '@/plugins/i18n.plugin';
@ -8,5 +8,5 @@ export const tool = defineTool({
description: translate('tools.ipv4-subnet-calculator.description'), description: translate('tools.ipv4-subnet-calculator.description'),
keywords: ['ipv4', 'subnet', 'calculator', 'mask', 'network', 'cidr', 'netmask', 'bitmask', 'broadcast', 'address'], keywords: ['ipv4', 'subnet', 'calculator', 'mask', 'network', 'cidr', 'netmask', 'bitmask', 'broadcast', 'address'],
component: () => import('./ipv4-subnet-calculator.vue'), component: () => import('./ipv4-subnet-calculator.vue'),
icon: RouterOutlined, icon: IconRouter,
}); });

View file

@ -1,7 +1,7 @@
<script setup lang="ts"> <script setup lang="ts">
import { Netmask } from 'netmask'; import { Netmask } from 'netmask';
import { useStorage } from '@vueuse/core'; import { useStorage } from '@vueuse/core';
import { ArrowLeft, ArrowRight } from '@vicons/tabler'; import { IconArrowLeft, IconArrowRight } from '@tabler/icons-vue';
import { getIPClass } from './ipv4-subnet-calculator.models'; import { getIPClass } from './ipv4-subnet-calculator.models';
import { withDefaultOnError } from '@/utils/defaults'; import { withDefaultOnError } from '@/utils/defaults';
import { isNotThrowing } from '@/utils/boolean'; import { isNotThrowing } from '@/utils/boolean';
@ -111,12 +111,12 @@ function switchToBlock({ count = 1 }: { count?: number }) {
<div mt-3 flex items-center justify-between> <div mt-3 flex items-center justify-between>
<c-button @click="switchToBlock({ count: -1 })"> <c-button @click="switchToBlock({ count: -1 })">
<n-icon :component="ArrowLeft" /> <IconArrowLeft size="15" />
Previous block Previous block
</c-button> </c-button>
<c-button @click="switchToBlock({ count: 1 })"> <c-button @click="switchToBlock({ count: 1 })">
Next block Next block
<n-icon :component="ArrowRight" /> <IconArrowRight size="15" />
</c-button> </c-button>
</div> </div>
</div> </div>

View file

@ -1,4 +1,4 @@
import { BuildingFactory } from '@vicons/tabler'; import { IconBuildingFactory } from '@tabler/icons-vue';
import { defineTool } from '../tool'; import { defineTool } from '../tool';
import { translate } from '@/plugins/i18n.plugin'; import { translate } from '@/plugins/i18n.plugin';
@ -8,6 +8,6 @@ export const tool = defineTool({
description: translate('tools.ipv6-ula-generator.description'), description: translate('tools.ipv6-ula-generator.description'),
keywords: ['ipv6', 'ula', 'generator', 'rfc4193', 'network', 'private'], keywords: ['ipv6', 'ula', 'generator', 'rfc4193', 'network', 'private'],
component: () => import('./ipv6-ula-generator.vue'), component: () => import('./ipv6-ula-generator.vue'),
icon: BuildingFactory, icon: IconBuildingFactory,
createdAt: new Date('2023-04-09'), createdAt: new Date('2023-04-09'),
}); });

View file

@ -1,4 +1,4 @@
import { CompareArrowsRound } from '@vicons/material'; import { IconArrowsDiff } from '@tabler/icons-vue';
import { defineTool } from '../tool'; import { defineTool } from '../tool';
import { translate } from '@/plugins/i18n.plugin'; import { translate } from '@/plugins/i18n.plugin';
@ -8,6 +8,6 @@ export const tool = defineTool({
description: translate('tools.json-diff.description'), description: translate('tools.json-diff.description'),
keywords: ['json', 'diff', 'compare', 'difference', 'object', 'data'], keywords: ['json', 'diff', 'compare', 'difference', 'object', 'data'],
component: () => import('./json-diff.vue'), component: () => import('./json-diff.vue'),
icon: CompareArrowsRound, icon: IconArrowsDiff,
createdAt: new Date('2023-04-20'), createdAt: new Date('2023-04-20'),
}); });

View file

@ -1,4 +1,4 @@
import { Braces } from '@vicons/tabler'; import { IconBraces } from '@tabler/icons-vue';
import { defineTool } from '../tool'; import { defineTool } from '../tool';
import { translate } from '@/plugins/i18n.plugin'; import { translate } from '@/plugins/i18n.plugin';
@ -8,5 +8,5 @@ export const tool = defineTool({
description: translate('tools.json-minify.description'), description: translate('tools.json-minify.description'),
keywords: ['json', 'minify', 'format'], keywords: ['json', 'minify', 'format'],
component: () => import('./json-minify.vue'), component: () => import('./json-minify.vue'),
icon: Braces, icon: IconBraces,
}); });

View file

@ -1,4 +1,4 @@
import { List } from '@vicons/tabler'; import { IconList } from '@tabler/icons-vue';
import { defineTool } from '../tool'; import { defineTool } from '../tool';
import { translate } from '@/plugins/i18n.plugin'; import { translate } from '@/plugins/i18n.plugin';
@ -8,6 +8,6 @@ export const tool = defineTool({
description: translate('tools.json-to-csv.description'), description: translate('tools.json-to-csv.description'),
keywords: ['json', 'to', 'csv', 'convert'], keywords: ['json', 'to', 'csv', 'convert'],
component: () => import('./json-to-csv.vue'), component: () => import('./json-to-csv.vue'),
icon: List, icon: IconList,
createdAt: new Date('2023-06-18'), createdAt: new Date('2023-06-18'),
}); });

View file

@ -1,4 +1,4 @@
import { Braces } from '@vicons/tabler'; import { IconBraces } from '@tabler/icons-vue';
import { defineTool } from '../tool'; import { defineTool } from '../tool';
import { translate } from '@/plugins/i18n.plugin'; import { translate } from '@/plugins/i18n.plugin';
@ -8,6 +8,6 @@ export const tool = defineTool({
description: translate('tools.json-to-toml.description'), description: translate('tools.json-to-toml.description'),
keywords: ['json', 'parse', 'toml', 'convert', 'transform'], keywords: ['json', 'parse', 'toml', 'convert', 'transform'],
component: () => import('./json-to-toml.vue'), component: () => import('./json-to-toml.vue'),
icon: Braces, icon: IconBraces,
createdAt: new Date('2023-06-23'), createdAt: new Date('2023-06-23'),
}); });

View file

@ -1,4 +1,4 @@
import { Braces } from '@vicons/tabler'; import { IconBraces } from '@tabler/icons-vue';
import { defineTool } from '../tool'; import { defineTool } from '../tool';
export const tool = defineTool({ export const tool = defineTool({
@ -7,6 +7,6 @@ export const tool = defineTool({
description: 'Convert JSON to XML', description: 'Convert JSON to XML',
keywords: ['json', 'xml'], keywords: ['json', 'xml'],
component: () => import('./json-to-xml.vue'), component: () => import('./json-to-xml.vue'),
icon: Braces, icon: IconBraces,
createdAt: new Date('2024-08-09'), createdAt: new Date('2024-08-09'),
}); });

View file

@ -1,4 +1,4 @@
import { Braces } from '@vicons/tabler'; import { IconBraces } from '@tabler/icons-vue';
import { defineTool } from '../tool'; import { defineTool } from '../tool';
import { translate } from '@/plugins/i18n.plugin'; import { translate } from '@/plugins/i18n.plugin';
@ -8,6 +8,6 @@ export const tool = defineTool({
description: translate('tools.json-to-yaml-converter.description'), description: translate('tools.json-to-yaml-converter.description'),
keywords: ['yaml', 'to', 'json'], keywords: ['yaml', 'to', 'json'],
component: () => import('./json-to-yaml.vue'), component: () => import('./json-to-yaml.vue'),
icon: Braces, icon: IconBraces,
createdAt: new Date('2023-04-10'), createdAt: new Date('2023-04-10'),
}); });

View file

@ -1,4 +1,4 @@
import { Braces } from '@vicons/tabler'; import { IconBraces } from '@tabler/icons-vue';
import { defineTool } from '../tool'; import { defineTool } from '../tool';
import { translate } from '@/plugins/i18n.plugin'; import { translate } from '@/plugins/i18n.plugin';
@ -8,6 +8,6 @@ export const tool = defineTool({
description: translate('tools.json-prettify.description'), description: translate('tools.json-prettify.description'),
keywords: ['json', 'viewer', 'prettify', 'format'], keywords: ['json', 'viewer', 'prettify', 'format'],
component: () => import('./json-viewer.vue'), component: () => import('./json-viewer.vue'),
icon: Braces, icon: IconBraces,
redirectFrom: ['/json-viewer'], redirectFrom: ['/json-viewer'],
}); });

View file

@ -1,4 +1,4 @@
import { Key } from '@vicons/tabler'; import { IconKey } from '@tabler/icons-vue';
import { defineTool } from '../tool'; import { defineTool } from '../tool';
import { translate } from '@/plugins/i18n.plugin'; import { translate } from '@/plugins/i18n.plugin';
@ -24,5 +24,5 @@ export const tool = defineTool({
'token', 'token',
], ],
component: () => import('./jwt-parser.vue'), component: () => import('./jwt-parser.vue'),
icon: Key, icon: IconKey,
}); });

View file

@ -1,4 +1,4 @@
import { Keyboard } from '@vicons/tabler'; import { IconKeyboard } from '@tabler/icons-vue';
import { defineTool } from '../tool'; import { defineTool } from '../tool';
import { translate } from '@/plugins/i18n.plugin'; import { translate } from '@/plugins/i18n.plugin';
@ -23,5 +23,5 @@ export const tool = defineTool({
'shift', 'shift',
], ],
component: () => import('./keycode-info.vue'), component: () => import('./keycode-info.vue'),
icon: Keyboard, icon: IconKeyboard,
}); });

View file

@ -1,4 +1,4 @@
import { List } from '@vicons/tabler'; import { IconList } from '@tabler/icons-vue';
import { defineTool } from '../tool'; import { defineTool } from '../tool';
import { translate } from '@/plugins/i18n.plugin'; import { translate } from '@/plugins/i18n.plugin';
@ -8,6 +8,6 @@ export const tool = defineTool({
description: translate('tools.list-converter.description'), description: translate('tools.list-converter.description'),
keywords: ['list', 'converter', 'sort', 'reverse', 'prefix', 'suffix', 'lowercase', 'truncate'], keywords: ['list', 'converter', 'sort', 'reverse', 'prefix', 'suffix', 'lowercase', 'truncate'],
component: () => import('./list-converter.vue'), component: () => import('./list-converter.vue'),
icon: List, icon: IconList,
createdAt: new Date('2023-05-07'), createdAt: new Date('2023-05-07'),
}); });

View file

@ -1,4 +1,4 @@
import { AlignJustified } from '@vicons/tabler'; import { IconAlignJustified } from '@tabler/icons-vue';
import { defineTool } from '../tool'; import { defineTool } from '../tool';
import { translate } from '@/plugins/i18n.plugin'; import { translate } from '@/plugins/i18n.plugin';
@ -8,5 +8,5 @@ export const tool = defineTool({
description: translate('tools.lorem-ipsum-generator.description'), description: translate('tools.lorem-ipsum-generator.description'),
keywords: ['lorem', 'ipsum', 'dolor', 'sit', 'amet', 'placeholder', 'text', 'filler', 'random', 'generator'], keywords: ['lorem', 'ipsum', 'dolor', 'sit', 'amet', 'placeholder', 'text', 'filler', 'random', 'generator'],
component: () => import('./lorem-ipsum-generator.vue'), component: () => import('./lorem-ipsum-generator.vue'),
icon: AlignJustified, icon: IconAlignJustified,
}); });

View file

@ -1,4 +1,4 @@
import { Devices } from '@vicons/tabler'; import { IconDevices } from '@tabler/icons-vue';
import { defineTool } from '../tool'; import { defineTool } from '../tool';
import { translate } from '@/plugins/i18n.plugin'; import { translate } from '@/plugins/i18n.plugin';
@ -8,6 +8,6 @@ export const tool = defineTool({
description: translate('tools.mac-address-generator.description'), description: translate('tools.mac-address-generator.description'),
keywords: ['mac', 'address', 'generator', 'random', 'prefix'], keywords: ['mac', 'address', 'generator', 'random', 'prefix'],
component: () => import('./mac-address-generator.vue'), component: () => import('./mac-address-generator.vue'),
icon: Devices, icon: IconDevices,
createdAt: new Date('2023-11-31'), createdAt: new Date('2023-11-31'),
}); });

View file

@ -1,4 +1,4 @@
import { Devices } from '@vicons/tabler'; import { IconDevices } from '@tabler/icons-vue';
import { defineTool } from '../tool'; import { defineTool } from '../tool';
import { translate } from '@/plugins/i18n.plugin'; import { translate } from '@/plugins/i18n.plugin';
@ -8,6 +8,6 @@ export const tool = defineTool({
description: translate('tools.mac-address-lookup.description'), description: translate('tools.mac-address-lookup.description'),
keywords: ['mac', 'address', 'lookup', 'vendor', 'parser', 'manufacturer'], keywords: ['mac', 'address', 'lookup', 'vendor', 'parser', 'manufacturer'],
component: () => import('./mac-address-lookup.vue'), component: () => import('./mac-address-lookup.vue'),
icon: Devices, icon: IconDevices,
createdAt: new Date('2023-04-06'), createdAt: new Date('2023-04-06'),
}); });

View file

@ -1,4 +1,4 @@
import { Markdown } from '@vicons/tabler'; import { IconMarkdown } from '@tabler/icons-vue';
import { defineTool } from '../tool'; import { defineTool } from '../tool';
export const tool = defineTool({ export const tool = defineTool({
@ -7,6 +7,6 @@ export const tool = defineTool({
description: 'Convert Markdown to Html and allow to print (as PDF)', description: 'Convert Markdown to Html and allow to print (as PDF)',
keywords: ['markdown', 'html', 'converter', 'pdf'], keywords: ['markdown', 'html', 'converter', 'pdf'],
component: () => import('./markdown-to-html.vue'), component: () => import('./markdown-to-html.vue'),
icon: Markdown, icon: IconMarkdown,
createdAt: new Date('2024-08-25'), createdAt: new Date('2024-08-25'),
}); });

View file

@ -1,4 +1,4 @@
import { Math } from '@vicons/tabler'; import { IconMath } from '@tabler/icons-vue';
import { defineTool } from '../tool'; import { defineTool } from '../tool';
import { translate } from '@/plugins/i18n.plugin'; import { translate } from '@/plugins/i18n.plugin';
@ -40,5 +40,5 @@ export const tool = defineTool({
'tanh', 'tanh',
], ],
component: () => import('./math-evaluator.vue'), component: () => import('./math-evaluator.vue'),
icon: Math, icon: IconMath,
}); });

View file

@ -1,4 +1,4 @@
import { Tags } from '@vicons/tabler'; import { IconTags } from '@tabler/icons-vue';
import { defineTool } from '../tool'; import { defineTool } from '../tool';
import { translate } from '@/plugins/i18n.plugin'; import { translate } from '@/plugins/i18n.plugin';
@ -22,5 +22,5 @@ export const tool = defineTool({
'og', 'og',
], ],
component: () => import('./meta-tag-generator.vue'), component: () => import('./meta-tag-generator.vue'),
icon: Tags, icon: IconTags,
}); });

View file

@ -1,4 +1,4 @@
import { World } from '@vicons/tabler'; import { IconWorld } from '@tabler/icons-vue';
import { defineTool } from '../tool'; import { defineTool } from '../tool';
import { translate } from '@/plugins/i18n.plugin'; import { translate } from '@/plugins/i18n.plugin';
@ -8,5 +8,5 @@ export const tool = defineTool({
description: translate('tools.mime-types.description'), description: translate('tools.mime-types.description'),
keywords: ['mime', 'types', 'extension', 'content', 'type'], keywords: ['mime', 'types', 'extension', 'content', 'type'],
component: () => import('./mime-types.vue'), component: () => import('./mime-types.vue'),
icon: World, icon: IconWorld,
}); });

View file

@ -1,4 +1,5 @@
<script setup lang="ts"> <script setup lang="ts">
import { IconArrowDown } from '@tabler/icons-vue';
import { generateNumeronym } from './numeronym-generator.service'; import { generateNumeronym } from './numeronym-generator.service';
const word = ref(''); const word = ref('');
@ -10,7 +11,7 @@ const numeronym = computed(() => generateNumeronym(word.value));
<div flex flex-col items-center gap-4> <div flex flex-col items-center gap-4>
<c-input-text v-model:value="word" placeholder="Enter a word, e.g. 'internationalization'" size="large" clearable test-id="word-input" /> <c-input-text v-model:value="word" placeholder="Enter a word, e.g. 'internationalization'" size="large" clearable test-id="word-input" />
<icon-mdi-arrow-down text-30px /> <IconArrowDown size="35" />
<input-copyable :value="numeronym" size="large" readonly placeholder="Your numeronym will be here, e.g. 'i18n'" test-id="numeronym" /> <input-copyable :value="numeronym" size="large" readonly placeholder="Your numeronym will be here, e.g. 'i18n'" test-id="numeronym" />
</div> </div>

View file

@ -1,4 +1,4 @@
import { DeviceMobile } from '@vicons/tabler'; import { IconDeviceMobile } from '@tabler/icons-vue';
import { defineTool } from '../tool'; import { defineTool } from '../tool';
import { translate } from '@/plugins/i18n.plugin'; import { translate } from '@/plugins/i18n.plugin';
@ -24,5 +24,5 @@ export const tool = defineTool({
'HMAC', 'HMAC',
], ],
component: () => import('./otp-code-generator-and-validator.vue'), component: () => import('./otp-code-generator-and-validator.vue'),
icon: DeviceMobile, icon: IconDeviceMobile,
}); });

View file

@ -1,6 +1,7 @@
<script setup lang="ts"> <script setup lang="ts">
import { useTimestamp } from '@vueuse/core'; import { useTimestamp } from '@vueuse/core';
import { useThemeVars } from 'naive-ui'; import { useThemeVars } from 'naive-ui';
import { IconReload } from '@tabler/icons-vue';
import { useQRCode } from '../qr-code-generator/useQRCode'; import { useQRCode } from '../qr-code-generator/useQRCode';
import { base32toHex, buildKeyUri, generateSecret, generateTOTP, getCounterFromTime } from './otp.service'; import { base32toHex, buildKeyUri, generateSecret, generateTOTP, getCounterFromTime } from './otp.service';
import TokenDisplay from './token-display.vue'; import TokenDisplay from './token-display.vue';
@ -63,7 +64,7 @@ const secretValidationRules = [
<template #suffix> <template #suffix>
<c-tooltip tooltip="Generate a new random secret"> <c-tooltip tooltip="Generate a new random secret">
<c-button circle variant="text" size="small" @click="refreshSecret"> <c-button circle variant="text" size="small" @click="refreshSecret">
<icon-mdi-refresh /> <IconReload size="15" />
</c-button> </c-button>
</c-tooltip> </c-tooltip>
</template> </template>

View file

@ -1,6 +1,6 @@
import { IconForms } from '@tabler/icons-vue';
import { defineTool } from '../tool'; import { defineTool } from '../tool';
import { translate } from '@/plugins/i18n.plugin'; import { translate } from '@/plugins/i18n.plugin';
import PasswordIcon from '~icons/mdi/form-textbox-password';
export const tool = defineTool({ export const tool = defineTool({
name: translate('tools.password-strength-analyser.title'), name: translate('tools.password-strength-analyser.title'),
@ -8,6 +8,6 @@ export const tool = defineTool({
description: translate('tools.password-strength-analyser.description'), description: translate('tools.password-strength-analyser.description'),
keywords: ['password', 'strength', 'analyser', 'and', 'crack', 'time', 'estimation', 'brute', 'force', 'attack', 'entropy', 'cracking', 'hash', 'hashing', 'algorithm', 'algorithms', 'md5', 'sha1', 'sha256', 'sha512', 'bcrypt', 'scrypt', 'argon2', 'argon2id', 'argon2i', 'argon2d'], keywords: ['password', 'strength', 'analyser', 'and', 'crack', 'time', 'estimation', 'brute', 'force', 'attack', 'entropy', 'cracking', 'hash', 'hashing', 'algorithm', 'algorithms', 'md5', 'sha1', 'sha256', 'sha512', 'bcrypt', 'scrypt', 'argon2', 'argon2id', 'argon2i', 'argon2d'],
component: () => import('./password-strength-analyser.vue'), component: () => import('./password-strength-analyser.vue'),
icon: PasswordIcon, icon: IconForms,
createdAt: new Date('2023-06-24'), createdAt: new Date('2023-06-24'),
}); });

View file

@ -1,6 +1,6 @@
import { IconFileCertificate } from '@tabler/icons-vue';
import { defineTool } from '../tool'; import { defineTool } from '../tool';
import { translate } from '@/plugins/i18n.plugin'; import { translate } from '@/plugins/i18n.plugin';
import FileCertIcon from '~icons/mdi/file-certificate-outline';
export const tool = defineTool({ export const tool = defineTool({
name: translate('tools.pdf-signature-checker.title'), name: translate('tools.pdf-signature-checker.title'),
@ -8,6 +8,6 @@ export const tool = defineTool({
description: translate('tools.pdf-signature-checker.description'), description: translate('tools.pdf-signature-checker.description'),
keywords: ['pdf', 'signature', 'checker', 'verify', 'validate', 'sign'], keywords: ['pdf', 'signature', 'checker', 'verify', 'validate', 'sign'],
component: () => import('./pdf-signature-checker.vue'), component: () => import('./pdf-signature-checker.vue'),
icon: FileCertIcon, icon: IconFileCertificate,
createdAt: new Date('2023-12-09'), createdAt: new Date('2023-12-09'),
}); });

View file

@ -1,4 +1,4 @@
import { Percentage } from '@vicons/tabler'; import { IconPercentage } from '@tabler/icons-vue';
import { defineTool } from '../tool'; import { defineTool } from '../tool';
import { translate } from '@/plugins/i18n.plugin'; import { translate } from '@/plugins/i18n.plugin';
@ -8,6 +8,6 @@ export const tool = defineTool({
description: translate('tools.percentage-calculator.description'), description: translate('tools.percentage-calculator.description'),
keywords: ['percentage', 'calculator', 'calculate', 'value', 'number', '%'], keywords: ['percentage', 'calculator', 'calculate', 'value', 'number', '%'],
component: () => import('./percentage-calculator.vue'), component: () => import('./percentage-calculator.vue'),
icon: Percentage, icon: IconPercentage,
createdAt: new Date('2023-06-18'), createdAt: new Date('2023-06-18'),
}); });

View file

@ -1,4 +1,4 @@
import { Phone } from '@vicons/tabler'; import { IconPhone } from '@tabler/icons-vue';
import { defineTool } from '../tool'; import { defineTool } from '../tool';
import { translate } from '@/plugins/i18n.plugin'; import { translate } from '@/plugins/i18n.plugin';
@ -20,6 +20,6 @@ export const tool = defineTool({
'national', 'national',
], ],
component: () => import('./phone-parser-and-formatter.vue'), component: () => import('./phone-parser-and-formatter.vue'),
icon: Phone, icon: IconPhone,
createdAt: new Date('2023-05-01'), createdAt: new Date('2023-05-01'),
}); });

View file

@ -1,4 +1,4 @@
import { Qrcode } from '@vicons/tabler'; import { IconQrcode } from '@tabler/icons-vue';
import { defineTool } from '../tool'; import { defineTool } from '../tool';
import { translate } from '@/plugins/i18n.plugin'; import { translate } from '@/plugins/i18n.plugin';
@ -8,5 +8,5 @@ export const tool = defineTool({
description: translate('tools.qrcode-generator.description'), description: translate('tools.qrcode-generator.description'),
keywords: ['qr', 'code', 'generator', 'square', 'color', 'link', 'low', 'medium', 'quartile', 'high', 'transparent'], keywords: ['qr', 'code', 'generator', 'square', 'color', 'link', 'low', 'medium', 'quartile', 'high', 'transparent'],
component: () => import('./qr-code-generator.vue'), component: () => import('./qr-code-generator.vue'),
icon: Qrcode, icon: IconQrcode,
}); });

View file

@ -1,4 +1,4 @@
import { Server } from '@vicons/tabler'; import { IconServer } from '@tabler/icons-vue';
import { defineTool } from '../tool'; import { defineTool } from '../tool';
import { translate } from '@/plugins/i18n.plugin'; import { translate } from '@/plugins/i18n.plugin';
@ -8,5 +8,5 @@ export const tool = defineTool({
description: translate('tools.random-port-generator.description'), description: translate('tools.random-port-generator.description'),
keywords: ['system', 'port', 'lan', 'generator', 'random', 'development', 'computer'], keywords: ['system', 'port', 'lan', 'generator', 'random', 'development', 'computer'],
component: () => import('./random-port-generator.vue'), component: () => import('./random-port-generator.vue'),
icon: Server, icon: IconServer,
}); });

View file

@ -1,4 +1,4 @@
import { BrandJavascript } from '@vicons/tabler'; import { IconBrandJavascript } from '@tabler/icons-vue';
import { defineTool } from '../tool'; import { defineTool } from '../tool';
export const tool = defineTool({ export const tool = defineTool({
@ -7,6 +7,6 @@ export const tool = defineTool({
description: 'Javascript Regex/Regular Expression cheatsheet', description: 'Javascript Regex/Regular Expression cheatsheet',
keywords: ['regex', 'regular', 'expression', 'javascript', 'memo', 'cheatsheet'], keywords: ['regex', 'regular', 'expression', 'javascript', 'memo', 'cheatsheet'],
component: () => import('./regex-memo.vue'), component: () => import('./regex-memo.vue'),
icon: BrandJavascript, icon: IconBrandJavascript,
createdAt: new Date('2024-09-20'), createdAt: new Date('2024-09-20'),
}); });

View file

@ -1,4 +1,4 @@
import { Language } from '@vicons/tabler'; import { IconLanguage } from '@tabler/icons-vue';
import { defineTool } from '../tool'; import { defineTool } from '../tool';
export const tool = defineTool({ export const tool = defineTool({
@ -7,6 +7,6 @@ export const tool = defineTool({
description: 'Test your regular expressions with sample text.', description: 'Test your regular expressions with sample text.',
keywords: ['regex', 'tester', 'sample', 'expression'], keywords: ['regex', 'tester', 'sample', 'expression'],
component: () => import('./regex-tester.vue'), component: () => import('./regex-tester.vue'),
icon: Language, icon: IconLanguage,
createdAt: new Date('2024-09-20'), createdAt: new Date('2024-09-20'),
}); });

View file

@ -1,4 +1,4 @@
import { LetterX } from '@vicons/tabler'; import { IconLetterX } from '@tabler/icons-vue';
import { defineTool } from '../tool'; import { defineTool } from '../tool';
import { translate } from '@/plugins/i18n.plugin'; import { translate } from '@/plugins/i18n.plugin';
@ -8,5 +8,5 @@ export const tool = defineTool({
description: translate('tools.roman-numeral-converter.description'), description: translate('tools.roman-numeral-converter.description'),
keywords: ['roman', 'arabic', 'converter', 'X', 'I', 'V', 'L', 'C', 'D', 'M'], keywords: ['roman', 'arabic', 'converter', 'X', 'I', 'V', 'L', 'C', 'D', 'M'],
component: () => import('./roman-numeral-converter.vue'), component: () => import('./roman-numeral-converter.vue'),
icon: LetterX, icon: IconLetterX,
}); });

View file

@ -1,4 +1,4 @@
import { Certificate } from '@vicons/tabler'; import { IconCertificate } from '@tabler/icons-vue';
import { defineTool } from '../tool'; import { defineTool } from '../tool';
import { translate } from '@/plugins/i18n.plugin'; import { translate } from '@/plugins/i18n.plugin';
@ -8,5 +8,5 @@ export const tool = defineTool({
description: translate('tools.rsa-key-pair-generator.description'), description: translate('tools.rsa-key-pair-generator.description'),
keywords: ['rsa', 'key', 'pair', 'generator', 'public', 'private', 'secret', 'ssh', 'pem'], keywords: ['rsa', 'key', 'pair', 'generator', 'public', 'private', 'secret', 'ssh', 'pem'],
component: () => import('./rsa-key-pair-generator.vue'), component: () => import('./rsa-key-pair-generator.vue'),
icon: Certificate, icon: IconCertificate,
}); });

View file

@ -1,4 +1,4 @@
import { Mailbox } from '@vicons/tabler'; import { IconMailbox } from '@tabler/icons-vue';
import { defineTool } from '../tool'; import { defineTool } from '../tool';
export const tool = defineTool({ export const tool = defineTool({
@ -7,6 +7,6 @@ export const tool = defineTool({
description: 'Decode Outlook SafeLink links', description: 'Decode Outlook SafeLink links',
keywords: ['outlook', 'safelink', 'decoder'], keywords: ['outlook', 'safelink', 'decoder'],
component: () => import('./safelink-decoder.vue'), component: () => import('./safelink-decoder.vue'),
icon: Mailbox, icon: IconMailbox,
createdAt: new Date('2024-03-11'), createdAt: new Date('2024-03-11'),
}); });

View file

@ -1,4 +1,4 @@
import { AbcRound } from '@vicons/material'; import { IconAbc } from '@tabler/icons-vue';
import { defineTool } from '../tool'; import { defineTool } from '../tool';
import { translate } from '@/plugins/i18n.plugin'; import { translate } from '@/plugins/i18n.plugin';
@ -8,5 +8,5 @@ export const tool = defineTool({
description: translate('tools.slugify-string.description'), description: translate('tools.slugify-string.description'),
keywords: ['slugify', 'string', 'escape', 'emoji', 'special', 'character', 'space', 'trim'], keywords: ['slugify', 'string', 'escape', 'emoji', 'special', 'character', 'space', 'trim'],
component: () => import('./slugify-string.vue'), component: () => import('./slugify-string.vue'),
icon: AbcRound, icon: IconAbc,
}); });

View file

@ -1,4 +1,4 @@
import { Database } from '@vicons/tabler'; import { IconDatabase } from '@tabler/icons-vue';
import { defineTool } from '../tool'; import { defineTool } from '../tool';
import { translate } from '@/plugins/i18n.plugin'; import { translate } from '@/plugins/i18n.plugin';
@ -23,5 +23,5 @@ export const tool = defineTool({
'SQL Server Transact-SQL', 'SQL Server Transact-SQL',
], ],
component: () => import('./sql-prettify.vue'), component: () => import('./sql-prettify.vue'),
icon: Database, icon: IconDatabase,
}); });

View file

@ -1,4 +1,4 @@
import { EyeOff } from '@vicons/tabler'; import { IconEyeOff } from '@tabler/icons-vue';
import { defineTool } from '../tool'; import { defineTool } from '../tool';
import { translate } from '@/plugins/i18n.plugin'; import { translate } from '@/plugins/i18n.plugin';
@ -8,6 +8,6 @@ export const tool = defineTool({
description: translate('tools.string-obfuscator.description'), description: translate('tools.string-obfuscator.description'),
keywords: ['string', 'obfuscator', 'secret', 'token', 'hide', 'obscure', 'mask', 'masking'], keywords: ['string', 'obfuscator', 'secret', 'token', 'hide', 'obscure', 'mask', 'masking'],
component: () => import('./string-obfuscator.vue'), component: () => import('./string-obfuscator.vue'),
icon: EyeOff, icon: IconEyeOff,
createdAt: new Date('2023-08-16'), createdAt: new Date('2023-08-16'),
}); });

View file

@ -1,4 +1,5 @@
<script setup lang="ts"> <script setup lang="ts">
import { IconCopy } from '@tabler/icons-vue';
import { useObfuscateString } from './string-obfuscator.model'; import { useObfuscateString } from './string-obfuscator.model';
import { useCopy } from '@/composable/copy'; import { useCopy } from '@/composable/copy';
@ -40,7 +41,7 @@ const { copy } = useCopy({ source: obfuscatedString });
</div> </div>
<c-button @click="copy()"> <c-button @click="copy()">
<icon-mdi:content-copy /> <IconCopy size="18" />
</c-button> </c-button>
</c-card> </c-card>
</div> </div>

View file

@ -1,4 +1,4 @@
import { ImageOutlined } from '@vicons/material'; import { IconFileTypeSvg } from '@tabler/icons-vue';
import { defineTool } from '../tool'; import { defineTool } from '../tool';
import { translate } from '@/plugins/i18n.plugin'; import { translate } from '@/plugins/i18n.plugin';
@ -8,5 +8,5 @@ export const tool = defineTool({
description: translate('tools.svg-placeholder-generator.description'), description: translate('tools.svg-placeholder-generator.description'),
keywords: ['svg', 'placeholder', 'generator', 'image', 'size', 'mockup'], keywords: ['svg', 'placeholder', 'generator', 'image', 'size', 'mockup'],
component: () => import('./svg-placeholder-generator.vue'), component: () => import('./svg-placeholder-generator.vue'),
icon: ImageOutlined, icon: IconFileTypeSvg,
}); });

View file

@ -1,4 +1,4 @@
import { Temperature } from '@vicons/tabler'; import { IconTemperature } from '@tabler/icons-vue';
import { defineTool } from '../tool'; import { defineTool } from '../tool';
import { translate } from '@/plugins/i18n.plugin'; import { translate } from '@/plugins/i18n.plugin';
@ -20,5 +20,5 @@ export const tool = defineTool({
'Rømer', 'Rømer',
], ],
component: () => import('./temperature-converter.vue'), component: () => import('./temperature-converter.vue'),
icon: Temperature, icon: IconTemperature,
}); });

View file

@ -1,4 +1,4 @@
import { FileDiff } from '@vicons/tabler'; import { IconFileDiff } from '@tabler/icons-vue';
import { defineTool } from '../tool'; import { defineTool } from '../tool';
import { translate } from '@/plugins/i18n.plugin'; import { translate } from '@/plugins/i18n.plugin';
@ -8,6 +8,6 @@ export const tool = defineTool({
description: translate('tools.text-diff.description'), description: translate('tools.text-diff.description'),
keywords: ['text', 'diff', 'compare', 'string', 'text diff', 'code'], keywords: ['text', 'diff', 'compare', 'string', 'text diff', 'code'],
component: () => import('./text-diff.vue'), component: () => import('./text-diff.vue'),
icon: FileDiff, icon: IconFileDiff,
createdAt: new Date('2023-08-16'), createdAt: new Date('2023-08-16'),
}); });

View file

@ -1,4 +1,4 @@
import { FileText } from '@vicons/tabler'; import { IconFileText } from '@tabler/icons-vue';
import { defineTool } from '../tool'; import { defineTool } from '../tool';
import { translate } from '@/plugins/i18n.plugin'; import { translate } from '@/plugins/i18n.plugin';
@ -8,6 +8,6 @@ export const tool = defineTool({
description: translate('tools.text-statistics.description'), description: translate('tools.text-statistics.description'),
keywords: ['text', 'statistics', 'length', 'characters', 'count', 'size', 'bytes'], keywords: ['text', 'statistics', 'length', 'characters', 'count', 'size', 'bytes'],
component: () => import('./text-statistics.vue'), component: () => import('./text-statistics.vue'),
icon: FileText, icon: IconFileText,
redirectFrom: ['/text-stats'], redirectFrom: ['/text-stats'],
}); });

View file

@ -1,4 +1,4 @@
import { Binary } from '@vicons/tabler'; import { IconBinary } from '@tabler/icons-vue';
import { defineTool } from '../tool'; import { defineTool } from '../tool';
import { translate } from '@/plugins/i18n.plugin'; import { translate } from '@/plugins/i18n.plugin';
@ -8,6 +8,6 @@ export const tool = defineTool({
description: translate('tools.text-to-binary.description'), description: translate('tools.text-to-binary.description'),
keywords: ['text', 'to', 'binary', 'converter', 'encode', 'decode', 'ascii'], keywords: ['text', 'to', 'binary', 'converter', 'encode', 'decode', 'ascii'],
component: () => import('./text-to-binary.vue'), component: () => import('./text-to-binary.vue'),
icon: Binary, icon: IconBinary,
createdAt: new Date('2023-10-15'), createdAt: new Date('2023-10-15'),
}); });

View file

@ -1,4 +1,4 @@
import { Speakerphone } from '@vicons/tabler'; import { IconSpeakerphone } from '@tabler/icons-vue';
import { defineTool } from '../tool'; import { defineTool } from '../tool';
import { translate } from '@/plugins/i18n.plugin'; import { translate } from '@/plugins/i18n.plugin';
@ -8,5 +8,5 @@ export const tool = defineTool({
description: translate('tools.text-to-nato-alphabet.description'), description: translate('tools.text-to-nato-alphabet.description'),
keywords: ['string', 'nato', 'alphabet', 'phonetic', 'oral', 'transmission'], keywords: ['string', 'nato', 'alphabet', 'phonetic', 'oral', 'transmission'],
component: () => import('./text-to-nato-alphabet.vue'), component: () => import('./text-to-nato-alphabet.vue'),
icon: Speakerphone, icon: IconSpeakerphone,
}); });

View file

@ -1,4 +1,4 @@
import { TextWrap } from '@vicons/tabler'; import { IconTextWrap } from '@tabler/icons-vue';
import { defineTool } from '../tool'; import { defineTool } from '../tool';
import { translate } from '@/plugins/i18n.plugin'; import { translate } from '@/plugins/i18n.plugin';
@ -8,6 +8,6 @@ export const tool = defineTool({
description: translate('tools.text-to-unicode.description'), description: translate('tools.text-to-unicode.description'),
keywords: ['text', 'to', 'unicode'], keywords: ['text', 'to', 'unicode'],
component: () => import('./text-to-unicode.vue'), component: () => import('./text-to-unicode.vue'),
icon: TextWrap, icon: IconTextWrap,
createdAt: new Date('2024-01-31'), createdAt: new Date('2024-01-31'),
}); });

View file

@ -1,4 +1,4 @@
import { ArrowsShuffle } from '@vicons/tabler'; import { IconArrowsShuffle } from '@tabler/icons-vue';
import { defineTool } from '../tool'; import { defineTool } from '../tool';
import { translate } from '@/plugins/i18n.plugin'; import { translate } from '@/plugins/i18n.plugin';
@ -8,5 +8,5 @@ export const tool = defineTool({
description: translate('tools.token-generator.description'), description: translate('tools.token-generator.description'),
keywords: ['token', 'random', 'string', 'alphanumeric', 'symbols', 'number', 'letters', 'lowercase', 'uppercase', 'password'], keywords: ['token', 'random', 'string', 'alphanumeric', 'symbols', 'number', 'letters', 'lowercase', 'uppercase', 'password'],
component: () => import('./token-generator.tool.vue'), component: () => import('./token-generator.tool.vue'),
icon: ArrowsShuffle, icon: IconArrowsShuffle,
}); });

View file

@ -1,14 +1,13 @@
import { IconBrackets } from '@tabler/icons-vue';
import { defineTool } from '../tool'; import { defineTool } from '../tool';
import { translate } from '@/plugins/i18n.plugin'; import { translate } from '@/plugins/i18n.plugin';
import BracketIcon from '~icons/mdi/code-brackets';
export const tool = defineTool({ export const tool = defineTool({
name: translate('tools.toml-to-json.title'), name: translate('tools.toml-to-json.title'),
path: '/toml-to-json', path: '/toml-to-json',
description: translate('tools.toml-to-json.description'), description: translate('tools.toml-to-json.description'),
keywords: ['toml', 'json', 'convert', 'online', 'transform', 'parser'], keywords: ['toml', 'json', 'convert', 'online', 'transform', 'parser'],
component: () => import('./toml-to-json.vue'), component: () => import('./toml-to-json.vue'),
icon: BracketIcon, icon: IconBrackets,
createdAt: new Date('2023-06-23'), createdAt: new Date('2023-06-23'),
}); });

View file

@ -1,6 +1,6 @@
import { IconBrackets } from '@tabler/icons-vue';
import { defineTool } from '../tool'; import { defineTool } from '../tool';
import { translate } from '@/plugins/i18n.plugin'; import { translate } from '@/plugins/i18n.plugin';
import BracketIcon from '~icons/mdi/code-brackets';
export const tool = defineTool({ export const tool = defineTool({
name: translate('tools.toml-to-yaml.title'), name: translate('tools.toml-to-yaml.title'),
@ -8,6 +8,6 @@ export const tool = defineTool({
description: translate('tools.toml-to-yaml.description'), description: translate('tools.toml-to-yaml.description'),
keywords: ['toml', 'yaml', 'convert', 'online', 'transform', 'parse'], keywords: ['toml', 'yaml', 'convert', 'online', 'transform', 'parse'],
component: () => import('./toml-to-yaml.vue'), component: () => import('./toml-to-yaml.vue'),
icon: BracketIcon, icon: IconBrackets,
createdAt: new Date('2023-06-23'), createdAt: new Date('2023-06-23'),
}); });

View file

@ -1,4 +1,4 @@
import { SortDescendingNumbers } from '@vicons/tabler'; import { IconSortDescendingNumbers } from '@tabler/icons-vue';
import { defineTool } from '../tool'; import { defineTool } from '../tool';
import { translate } from '@/plugins/i18n.plugin'; import { translate } from '@/plugins/i18n.plugin';
@ -8,6 +8,6 @@ export const tool = defineTool({
description: translate('tools.ulid-generator.description'), description: translate('tools.ulid-generator.description'),
keywords: ['ulid', 'generator', 'random', 'id', 'alphanumeric', 'identity', 'token', 'string', 'identifier', 'unique'], keywords: ['ulid', 'generator', 'random', 'id', 'alphanumeric', 'identity', 'token', 'string', 'identifier', 'unique'],
component: () => import('./ulid-generator.vue'), component: () => import('./ulid-generator.vue'),
icon: SortDescendingNumbers, icon: IconSortDescendingNumbers,
createdAt: new Date('2023-09-11'), createdAt: new Date('2023-09-11'),
}); });

View file

@ -1,4 +1,4 @@
import { Link } from '@vicons/tabler'; import { IconLink } from '@tabler/icons-vue';
import { defineTool } from '../tool'; import { defineTool } from '../tool';
import { translate } from '@/plugins/i18n.plugin'; import { translate } from '@/plugins/i18n.plugin';
@ -8,5 +8,5 @@ export const tool = defineTool({
description: translate('tools.url-encoder.description'), description: translate('tools.url-encoder.description'),
keywords: ['url', 'encode', 'decode', 'percent', '%20', 'format'], keywords: ['url', 'encode', 'decode', 'percent', '%20', 'format'],
component: () => import('./url-encoder.vue'), component: () => import('./url-encoder.vue'),
icon: Link, icon: IconLink,
}); });

Some files were not shown because too many files have changed in this diff Show more