Skip to content

Commit 5eaab0c

Browse files
authored
Merge branch 'main' into feat/html-to-md-converter
2 parents d724281 + cb5b462 commit 5eaab0c

17 files changed

+226
-39
lines changed

.github/workflows/ci.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ jobs:
1515
- run: corepack enable
1616
- uses: actions/setup-node@v3
1717
with:
18-
node-version: 16
18+
node-version: 20
1919
cache: 'pnpm'
2020

2121
- name: Install dependencies

.github/workflows/e2e-tests.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ jobs:
1818

1919
- uses: actions/setup-node@v3
2020
with:
21-
node-version: 16
21+
node-version: 20
2222
cache: 'pnpm'
2323

2424
- name: Get Playwright version

components.d.ts

Lines changed: 3 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ declare module '@vue/runtime-core' {
1212
'404.page': typeof import('./src/pages/404.page.vue')['default']
1313
About: typeof import('./src/pages/About.vue')['default']
1414
App: typeof import('./src/App.vue')['default']
15+
AsciiTextDrawer: typeof import('./src/tools/ascii-text-drawer/ascii-text-drawer.vue')['default']
1516
'Base.layout': typeof import('./src/layouts/base.layout.vue')['default']
1617
Base64FileConverter: typeof import('./src/tools/base64-file-converter/base64-file-converter.vue')['default']
1718
Base64StringConverter: typeof import('./src/tools/base64-string-converter/base64-string-converter.vue')['default']
@@ -88,28 +89,17 @@ declare module '@vue/runtime-core' {
8889
HttpStatusCodes: typeof import('./src/tools/http-status-codes/http-status-codes.vue')['default']
8990
IbanValidatorAndParser: typeof import('./src/tools/iban-validator-and-parser/iban-validator-and-parser.vue')['default']
9091
'IconMdi:brushVariant': typeof import('~icons/mdi/brush-variant')['default']
91-
'IconMdi:contentCopy': typeof import('~icons/mdi/content-copy')['default']
9292
'IconMdi:kettleSteamOutline': typeof import('~icons/mdi/kettle-steam-outline')['default']
93-
IconMdiArrowDown: typeof import('~icons/mdi/arrow-down')['default']
94-
IconMdiArrowRightBottom: typeof import('~icons/mdi/arrow-right-bottom')['default']
95-
IconMdiCamera: typeof import('~icons/mdi/camera')['default']
9693
IconMdiChevronDown: typeof import('~icons/mdi/chevron-down')['default']
9794
IconMdiChevronRight: typeof import('~icons/mdi/chevron-right')['default']
9895
IconMdiClose: typeof import('~icons/mdi/close')['default']
9996
IconMdiContentCopy: typeof import('~icons/mdi/content-copy')['default']
100-
IconMdiDeleteOutline: typeof import('~icons/mdi/delete-outline')['default']
101-
IconMdiDownload: typeof import('~icons/mdi/download')['default']
10297
IconMdiEye: typeof import('~icons/mdi/eye')['default']
10398
IconMdiEyeOff: typeof import('~icons/mdi/eye-off')['default']
10499
IconMdiHeart: typeof import('~icons/mdi/heart')['default']
105-
IconMdiPause: typeof import('~icons/mdi/pause')['default']
106-
IconMdiPlay: typeof import('~icons/mdi/play')['default']
107-
IconMdiRecord: typeof import('~icons/mdi/record')['default']
108-
IconMdiRefresh: typeof import('~icons/mdi/refresh')['default']
109100
IconMdiSearch: typeof import('~icons/mdi/search')['default']
110101
IconMdiTranslate: typeof import('~icons/mdi/translate')['default']
111102
IconMdiTriangleDown: typeof import('~icons/mdi/triangle-down')['default']
112-
IconMdiVideo: typeof import('~icons/mdi/video')['default']
113103
InputCopyable: typeof import('./src/components/InputCopyable.vue')['default']
114104
IntegerBaseConverter: typeof import('./src/tools/integer-base-converter/integer-base-converter.vue')['default']
115105
Ipv4AddressConverter: typeof import('./src/tools/ipv4-address-converter/ipv4-address-converter.vue')['default']
@@ -136,39 +126,25 @@ declare module '@vue/runtime-core' {
136126
MenuLayout: typeof import('./src/components/MenuLayout.vue')['default']
137127
MetaTagGenerator: typeof import('./src/tools/meta-tag-generator/meta-tag-generator.vue')['default']
138128
MimeTypes: typeof import('./src/tools/mime-types/mime-types.vue')['default']
139-
NAlert: typeof import('naive-ui')['NAlert']
140129
NavbarButtons: typeof import('./src/components/NavbarButtons.vue')['default']
141-
NCheckbox: typeof import('naive-ui')['NCheckbox']
142130
NCode: typeof import('naive-ui')['NCode']
143131
NCollapseTransition: typeof import('naive-ui')['NCollapseTransition']
144-
NColorPicker: typeof import('naive-ui')['NColorPicker']
145132
NConfigProvider: typeof import('naive-ui')['NConfigProvider']
146-
NDatePicker: typeof import('naive-ui')['NDatePicker']
147133
NDivider: typeof import('naive-ui')['NDivider']
148-
NDynamicInput: typeof import('naive-ui')['NDynamicInput']
149134
NEllipsis: typeof import('naive-ui')['NEllipsis']
150-
NForm: typeof import('naive-ui')['NForm']
151135
NFormItem: typeof import('naive-ui')['NFormItem']
152136
NGi: typeof import('naive-ui')['NGi']
153137
NGrid: typeof import('naive-ui')['NGrid']
154138
NH1: typeof import('naive-ui')['NH1']
155-
NH2: typeof import('naive-ui')['NH2']
156139
NH3: typeof import('naive-ui')['NH3']
157140
NIcon: typeof import('naive-ui')['NIcon']
158-
NImage: typeof import('naive-ui')['NImage']
159-
NInputGroup: typeof import('naive-ui')['NInputGroup']
160-
NInputGroupLabel: typeof import('naive-ui')['NInputGroupLabel']
161141
NInputNumber: typeof import('naive-ui')['NInputNumber']
142+
NLabel: typeof import('naive-ui')['NLabel']
162143
NLayout: typeof import('naive-ui')['NLayout']
163144
NLayoutSider: typeof import('naive-ui')['NLayoutSider']
164145
NMenu: typeof import('naive-ui')['NMenu']
165-
NProgress: typeof import('naive-ui')['NProgress']
166146
NScrollbar: typeof import('naive-ui')['NScrollbar']
167-
NSlider: typeof import('naive-ui')['NSlider']
168-
NStatistic: typeof import('naive-ui')['NStatistic']
169-
NSwitch: typeof import('naive-ui')['NSwitch']
170-
NTable: typeof import('naive-ui')['NTable']
171-
NTag: typeof import('naive-ui')['NTag']
147+
NSpin: typeof import('naive-ui')['NSpin']
172148
NumeronymGenerator: typeof import('./src/tools/numeronym-generator/numeronym-generator.vue')['default']
173149
OtpCodeGeneratorAndValidator: typeof import('./src/tools/otp-code-generator-and-validator/otp-code-generator-and-validator.vue')['default']
174150
PasswordStrengthAnalyser: typeof import('./src/tools/password-strength-analyser/password-strength-analyser.vue')['default']

package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
"@tiptap/starter-kit": "2.1.6",
4343
"@tiptap/vue-3": "2.0.3",
4444
"@types/turndown": "^5.0.4",
45+
"@types/figlet": "^1.5.8",
4546
"@vicons/material": "^0.12.0",
4647
"@vicons/tabler": "^0.12.0",
4748
"@vueuse/core": "^10.3.0",
@@ -58,6 +59,7 @@
5859
"date-fns": "^2.29.3",
5960
"dompurify": "^3.0.6",
6061
"emojilib": "^3.0.10",
62+
"figlet": "^1.7.0",
6163
"figue": "^1.2.0",
6264
"fuse.js": "^6.6.2",
6365
"highlight.js": "^11.7.0",

playwright.config.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ const useWebServer = process.env.NO_WEB_SERVER !== 'true';
99
*/
1010
export default defineConfig({
1111
testDir: './src',
12-
testMatch: /.*\.e2e\.(spec\.)?ts/,
12+
testMatch: /\.e2e\.(spec\.)?ts$/,
1313
/* Run tests in files in parallel */
1414
fullyParallel: true,
1515
/* Fail the build on CI if you accidentally left test.only in the source code. */
@@ -57,7 +57,7 @@ export default defineConfig({
5757
&& {
5858
webServer: {
5959
command: 'npm run preview',
60-
url: 'http://127.0.0.1:5050',
60+
url: 'http://localhost:5050',
6161
reuseExistingServer: !isCI,
6262
},
6363
}

pnpm-lock.yaml

Lines changed: 16 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
<script setup lang="ts">
2+
import figlet from 'figlet';
3+
import TextareaCopyable from '@/components/TextareaCopyable.vue';
4+
5+
const input = ref('Ascii ART');
6+
const font = useStorage('ascii-text-drawer:font', 'Standard');
7+
const width = useStorage('ascii-text-drawer:width', 80);
8+
const output = ref('');
9+
const errored = ref(false);
10+
const processing = ref(false);
11+
12+
figlet.defaults({ fontPath: '//unpkg.com/[email protected]/fonts/' });
13+
14+
watchEffect(async () => {
15+
processing.value = true;
16+
try {
17+
const options: figlet.Options = {
18+
font: font.value as figlet.Fonts,
19+
width: width.value,
20+
whitespaceBreak: true,
21+
};
22+
output.value = await (new Promise<string>((resolve, reject) =>
23+
figlet.text(input.value, options,
24+
(err, text) => {
25+
if (err) {
26+
reject(err);
27+
return;
28+
}
29+
30+
resolve(text ?? '');
31+
})));
32+
errored.value = false;
33+
}
34+
catch (e: any) {
35+
errored.value = true;
36+
}
37+
processing.value = false;
38+
});
39+
40+
const fonts = ['1Row', '3-D', '3D Diagonal', '3D-ASCII', '3x5', '4Max', '5 Line Oblique', 'AMC 3 Line', 'AMC 3 Liv1', 'AMC AAA01', 'AMC Neko', 'AMC Razor', 'AMC Razor2', 'AMC Slash', 'AMC Slider', 'AMC Thin', 'AMC Tubes', 'AMC Untitled', 'ANSI Shadow', 'ASCII New Roman', 'Acrobatic', 'Alligator', 'Alligator2', 'Alpha', 'Alphabet', 'Arrows', 'Avatar', 'B1FF', 'B1FF', 'Banner', 'Banner3-D', 'Banner3', 'Banner4', 'Barbwire', 'Basic', 'Bear', 'Bell', 'Benjamin', 'Big Chief', 'Big Money-ne', 'Big Money-nw', 'Big Money-se', 'Big Money-sw', 'Big', 'Bigfig', 'Binary', 'Block', 'Blocks', 'Bloody', 'Bolger', 'Braced', 'Bright', 'Broadway KB', 'Broadway', 'Bubble', 'Bulbhead', 'Caligraphy', 'Caligraphy2', 'Calvin S', 'Cards', 'Catwalk', 'Chiseled', 'Chunky', 'Coinstak', 'Cola', 'Colossal', 'Computer', 'Contessa', 'Contrast', 'Cosmike', 'Crawford', 'Crawford2', 'Crazy', 'Cricket', 'Cursive', 'Cyberlarge', 'Cybermedium', 'Cybersmall', 'Cygnet', 'DANC4', 'DOS Rebel', 'DWhistled', 'Dancing Font', 'Decimal', 'Def Leppard', 'Delta Corps Priest 1', 'Diamond', 'Diet Cola', 'Digital', 'Doh', 'Doom', 'Dot Matrix', 'Double Shorts', 'Double', 'Dr Pepper', 'Efti Chess', 'Efti Font', 'Efti Italic', 'Efti Piti', 'Efti Robot', 'Efti Wall', 'Efti Water', 'Electronic', 'Elite', 'Epic', 'Fender', 'Filter', 'Fire Font-k', 'Fire Font-s', 'Flipped', 'Flower Power', 'Four Tops', 'Fraktur', 'Fun Face', 'Fun Faces', 'Fuzzy', 'Georgi16', 'Georgia11', 'Ghost', 'Ghoulish', 'Glenyn', 'Goofy', 'Gothic', 'Graceful', 'Gradient', 'Graffiti', 'Greek', 'Heart Left', 'Heart Right', 'Henry 3D', 'Hex', 'Hieroglyphs', 'Hollywood', 'Horizontal Left', 'Horizontal Right', 'ICL-1900', 'Impossible', 'Invita', 'Isometric1', 'Isometric2', 'Isometric3', 'Isometric4', 'Italic', 'Ivrit', 'JS Block Letters', 'JS Bracket Letters', 'JS Capital Curves', 'JS Cursive', 'JS Stick Letters', 'Jacky', 'Jazmine', 'Jerusalem', 'Katakana', 'Kban', 'Keyboard', 'Knob', 'Konto Slant', 'Konto', 'LCD', 'Larry 3D 2', 'Larry 3D', 'Lean', 'Letters', 'Lil Devil', 'Line Blocks', 'Linux', 'Lockergnome', 'Madrid', 'Marquee', 'Maxfour', 'Merlin1', 'Merlin2', 'Mike', 'Mini', 'Mirror', 'Mnemonic', 'Modular', 'Morse', 'Morse2', 'Moscow', 'Mshebrew210', 'Muzzle', 'NScript', 'NT Greek', 'NV Script', 'Nancyj-Fancy', 'Nancyj-Improved', 'Nancyj-Underlined', 'Nancyj', 'Nipples', 'O8', 'OS2', 'Octal', 'Ogre', 'Old Banner', 'Patorjk\'s Cheese', 'Patorjk-HeX', 'Pawp', 'Peaks Slant', 'Peaks', 'Pebbles', 'Pepper', 'Poison', 'Puffy', 'Puzzle', 'Pyramid', 'Rammstein', 'Rectangles', 'Red Phoenix', 'Relief', 'Relief2', 'Reverse', 'Roman', 'Rot13', 'Rot13', 'Rotated', 'Rounded', 'Rowan Cap', 'Rozzo', 'Runic', 'Runyc', 'S Blood', 'SL Script', 'Santa Clara', 'Script', 'Serifcap', 'Shadow', 'Shimrod', 'Short', 'Slant Relief', 'Slant', 'Slide', 'Small Caps', 'Small Isometric1', 'Small Keyboard', 'Small Poison', 'Small Script', 'Small Shadow', 'Small Slant', 'Small Tengwar', 'Small', 'Soft', 'Speed', 'Spliff', 'Stacey', 'Stampate', 'Stampatello', 'Standard', 'Star Strips', 'Star Wars', 'Stellar', 'Stforek', 'Stick Letters', 'Stop', 'Straight', 'Stronger Than All', 'Sub-Zero', 'Swamp Land', 'Swan', 'Sweet', 'THIS', 'Tanja', 'Tengwar', 'Term', 'Test1', 'The Edge', 'Thick', 'Thin', 'Thorned', 'Three Point', 'Ticks Slant', 'Ticks', 'Tiles', 'Tinker-Toy', 'Tombstone', 'Train', 'Trek', 'Tsalagi', 'Tubular', 'Twisted', 'Two Point', 'USA Flag', 'Univers', 'Varsity', 'Wavy', 'Weird', 'Wet Letter', 'Whimsy', 'Wow'];
41+
</script>
42+
43+
<template>
44+
<c-card style="max-width: 600px;">
45+
<c-input-text
46+
v-model:value="input"
47+
label="Your text:"
48+
placeholder="Your text to draw"
49+
raw-text
50+
multiline
51+
rows="4"
52+
/>
53+
54+
<n-divider />
55+
56+
<n-grid cols="4" x-gap="12" w-full>
57+
<n-gi span="2">
58+
<c-select
59+
v-model:value="font"
60+
label-position="top"
61+
label="Font:"
62+
:options="fonts"
63+
searchable="true"
64+
placeholder="Select font to use"
65+
/>
66+
</n-gi>
67+
<n-gi span="2">
68+
<n-form-item label="Width:" label-placement="top" label-width="100" :show-feedback="false">
69+
<n-input-number v-model:value="width" min="0" max="10000" w-full placeholder="Width of the text" />
70+
</n-form-item>
71+
</n-gi>
72+
</n-grid>
73+
74+
<n-divider />
75+
76+
<div v-if="processing" flex items-center justify-center>
77+
<n-spin size="medium" />
78+
<span class="ml-2">Loading font...</span>
79+
</div>
80+
81+
<c-alert v-if="errored" mt-1 text-center type="error">
82+
Current settings resulted in error.
83+
</c-alert>
84+
85+
<n-form-item v-if="!processing && !errored" label="Ascii Art text:">
86+
<TextareaCopyable
87+
:value="output"
88+
mb-1 mt-1
89+
copy-placement="outside"
90+
/>
91+
</n-form-item>
92+
</c-card>
93+
</template>

src/tools/ascii-text-drawer/index.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import { Artboard } from '@vicons/tabler';
2+
import { defineTool } from '../tool';
3+
4+
export const tool = defineTool({
5+
name: 'ASCII Art Text Generator',
6+
path: '/ascii-text-drawer',
7+
description: 'Create ASCII art text with many fonts and styles.',
8+
keywords: ['ascii', 'asciiart', 'text', 'drawer'],
9+
component: () => import('./ascii-text-drawer.vue'),
10+
icon: Artboard,
11+
createdAt: new Date('2024-03-03'),
12+
});

src/tools/bcrypt/bcrypt.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ const compareMatch = computed(() => compareSync(compareString.value, compareHash
2828
mb-2
2929
/>
3030
<n-form-item label="Salt count: " label-placement="left" label-width="120">
31-
<n-input-number v-model:value="saltCount" placeholder="Salt rounds..." :max="10" :min="0" w-full />
31+
<n-input-number v-model:value="saltCount" placeholder="Salt rounds..." :max="100" :min="0" w-full />
3232
</n-form-item>
3333

3434
<c-input-text :value="hashed" readonly text-center />

src/tools/index.ts

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
import { tool as base64FileConverter } from './base64-file-converter';
22
import { tool as base64StringConverter } from './base64-string-converter';
33
import { tool as basicAuthGenerator } from './basic-auth-generator';
4+
5+
import { tool as asciiTextDrawer } from './ascii-text-drawer';
6+
47
import { tool as textToUnicode } from './text-to-unicode';
8+
import { tool as safelinkDecoder } from './safelink-decoder';
59
import { tool as pdfSignatureChecker } from './pdf-signature-checker';
610
import { tool as numeronymGenerator } from './numeronym-generator';
711
import { tool as macAddressGenerator } from './mac-address-generator';
@@ -125,6 +129,7 @@ export const toolsByCategory: ToolCategory[] = [
125129
userAgentParser,
126130
httpStatusCodes,
127131
jsonDiff,
132+
safelinkDecoder,
128133
],
129134
},
130135
{
@@ -161,7 +166,15 @@ export const toolsByCategory: ToolCategory[] = [
161166
},
162167
{
163168
name: 'Text',
164-
components: [loremIpsumGenerator, textStatistics, emojiPicker, stringObfuscator, textDiff, numeronymGenerator],
169+
components: [
170+
loremIpsumGenerator,
171+
textStatistics,
172+
emojiPicker,
173+
stringObfuscator,
174+
textDiff,
175+
numeronymGenerator,
176+
asciiTextDrawer,
177+
],
165178
},
166179
{
167180
name: 'Data',

0 commit comments

Comments
 (0)