From 52df553294c9b8fd7cb4662eab2538e2a466ba54 Mon Sep 17 00:00:00 2001 From: Adrian Ortiz Date: Sat, 7 Sep 2024 11:36:53 -0600 Subject: [PATCH 01/12] feature: add border generator module. --- .../border-generator.e2e.spec.ts | 15 ++ .../border-generator.service.test.ts | 6 + .../border-generator.service.ts | 15 ++ .../border-generator/border-generator.vue | 214 ++++++++++++++++++ src/tools/border-generator/index.ts | 13 ++ src/tools/index.ts | 27 ++- 6 files changed, 287 insertions(+), 3 deletions(-) create mode 100644 src/tools/border-generator/border-generator.e2e.spec.ts create mode 100644 src/tools/border-generator/border-generator.service.test.ts create mode 100644 src/tools/border-generator/border-generator.service.ts create mode 100644 src/tools/border-generator/border-generator.vue create mode 100644 src/tools/border-generator/index.ts diff --git a/src/tools/border-generator/border-generator.e2e.spec.ts b/src/tools/border-generator/border-generator.e2e.spec.ts new file mode 100644 index 00000000..8c09252f --- /dev/null +++ b/src/tools/border-generator/border-generator.e2e.spec.ts @@ -0,0 +1,15 @@ +import { test, expect } from '@playwright/test'; + +test.describe('Tool - Border generator', () => { + test.beforeEach(async ({ page }) => { + await page.goto('/border-generator'); + }); + + test('Has correct title', async ({ page }) => { + await expect(page).toHaveTitle('Border generator - IT Tools'); + }); + + test('', async ({ page }) => { + + }); +}); \ No newline at end of file diff --git a/src/tools/border-generator/border-generator.service.test.ts b/src/tools/border-generator/border-generator.service.test.ts new file mode 100644 index 00000000..6bcfc44c --- /dev/null +++ b/src/tools/border-generator/border-generator.service.test.ts @@ -0,0 +1,6 @@ +import { expect, describe, it } from 'vitest'; +// import { } from './border-generator.service'; +// +// describe('border-generator', () => { +// +// }) \ No newline at end of file diff --git a/src/tools/border-generator/border-generator.service.ts b/src/tools/border-generator/border-generator.service.ts new file mode 100644 index 00000000..2ab77ee2 --- /dev/null +++ b/src/tools/border-generator/border-generator.service.ts @@ -0,0 +1,15 @@ +export interface Border { + label: string; + value: number; + max: number; +} + +export interface Borders { + [key: string]: Border; +} + +// Asegúrate de que esta función esté correctamente exportada +export function generateCSSOutput(borders: Borders, borderWidth: number, borderStyle: string, unit: string): string { + const { topLeft, topRight, bottomRight, bottomLeft } = borders; + return `border: ${borderWidth}px ${borderStyle} #000000; border-radius: ${topLeft.value}${unit} ${topRight.value}${unit} ${bottomRight.value}${unit} ${bottomLeft.value}${unit};`; +} diff --git a/src/tools/border-generator/border-generator.vue b/src/tools/border-generator/border-generator.vue new file mode 100644 index 00000000..f14d46d2 --- /dev/null +++ b/src/tools/border-generator/border-generator.vue @@ -0,0 +1,214 @@ + + + + + diff --git a/src/tools/border-generator/index.ts b/src/tools/border-generator/index.ts new file mode 100644 index 00000000..dcb371c8 --- /dev/null +++ b/src/tools/border-generator/index.ts @@ -0,0 +1,13 @@ +import { Square } from '@vicons/tabler'; +import { defineTool } from '../tool'; + +export const tool = defineTool({ + name: 'Border Generator', + path: '/border-radius-viewer', + description: 'Generate a complete CSS border properties.', + keywords: ['border', 'radius', 'viewer'], + component: () => import('./border-radius-viewer.vue'), + icon: Square, + createdAt: new Date('2024-09-06'), +}); + diff --git a/src/tools/index.ts b/src/tools/index.ts index c9003fe8..c0de1f7c 100644 --- a/src/tools/index.ts +++ b/src/tools/index.ts @@ -1,6 +1,7 @@ import { tool as base64FileConverter } from './base64-file-converter'; import { tool as base64StringConverter } from './base64-string-converter'; import { tool as basicAuthGenerator } from './basic-auth-generator'; +import { tool as borderGenerator } from './border-generator'; import { tool as emailNormalizer } from './email-normalizer'; import { tool as asciiTextDrawer } from './ascii-text-drawer'; @@ -89,7 +90,19 @@ import { tool as yamlViewer } from './yaml-viewer'; export const toolsByCategory: ToolCategory[] = [ { name: 'Crypto', - components: [tokenGenerator, hashText, bcrypt, uuidGenerator, ulidGenerator, cypher, bip39, hmacGenerator, rsaKeyPairGenerator, passwordStrengthAnalyser, pdfSignatureChecker], + components: [ + tokenGenerator, + hashText, + bcrypt, + uuidGenerator, + ulidGenerator, + cypher, + bip39, + hmacGenerator, + rsaKeyPairGenerator, + passwordStrengthAnalyser, + pdfSignatureChecker, + ], }, { name: 'Converter', @@ -135,6 +148,7 @@ export const toolsByCategory: ToolCategory[] = [ httpStatusCodes, jsonDiff, safelinkDecoder, + borderGenerator, ], }, { @@ -160,7 +174,14 @@ export const toolsByCategory: ToolCategory[] = [ }, { name: 'Network', - components: [ipv4SubnetCalculator, ipv4AddressConverter, ipv4RangeExpander, macAddressLookup, macAddressGenerator, ipv6UlaGenerator], + components: [ + ipv4SubnetCalculator, + ipv4AddressConverter, + ipv4RangeExpander, + macAddressLookup, + macAddressGenerator, + ipv6UlaGenerator, + ], }, { name: 'Math', @@ -190,5 +211,5 @@ export const toolsByCategory: ToolCategory[] = [ export const tools = toolsByCategory.flatMap(({ components }) => components); export const toolsWithCategory = toolsByCategory.flatMap(({ components, name }) => - components.map(tool => ({ category: name, ...tool })), + components.map((tool) => ({ category: name, ...tool })), ); From 4e1eae9607541375e34078d44c2cc397a42835fc Mon Sep 17 00:00:00 2001 From: Adrian Ortiz Date: Sat, 7 Sep 2024 12:01:14 -0600 Subject: [PATCH 02/12] fix --- src/tools/border-generator/index.ts | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/tools/border-generator/index.ts b/src/tools/border-generator/index.ts index dcb371c8..97a95e45 100644 --- a/src/tools/border-generator/index.ts +++ b/src/tools/border-generator/index.ts @@ -3,11 +3,10 @@ import { defineTool } from '../tool'; export const tool = defineTool({ name: 'Border Generator', - path: '/border-radius-viewer', + path: '/border-generator', description: 'Generate a complete CSS border properties.', - keywords: ['border', 'radius', 'viewer'], - component: () => import('./border-radius-viewer.vue'), + keywords: ['border', 'generator', 'css'], + component: () => import('./border-generator.vue'), icon: Square, createdAt: new Date('2024-09-06'), }); - From 45a87ce1571f23afa16070f485c8b2abe218f367 Mon Sep 17 00:00:00 2001 From: Adrian Ortiz Date: Sat, 7 Sep 2024 12:04:50 -0600 Subject: [PATCH 03/12] fix --- src/tools/border-generator/border-generator.vue | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/tools/border-generator/border-generator.vue b/src/tools/border-generator/border-generator.vue index f14d46d2..9fe836f2 100644 --- a/src/tools/border-generator/border-generator.vue +++ b/src/tools/border-generator/border-generator.vue @@ -78,7 +78,7 @@ import { defineComponent, ref, computed } from 'vue'; import { NSlider, NForm, NFormItem, NSelect, NCard, NColorPicker } from 'naive-ui'; import TextareaCopyable from '@/components/TextareaCopyable.vue'; -import { Borders } from './border-radius-viewer.service'; +import { Borders } from './border-generator.service'; export default defineComponent({ name: 'BorderRadiusViewer', @@ -211,4 +211,3 @@ n-color-picker { width: 100%; } - From e540a82d98872fd244eebf4cca66161ccee676f8 Mon Sep 17 00:00:00 2001 From: Adrian Ortiz Date: Sat, 7 Sep 2024 12:32:51 -0600 Subject: [PATCH 04/12] fix --- .../border-generator.e2e.spec.ts | 8 +- .../border-generator.service.test.ts | 4 +- .../border-generator/border-generator.vue | 156 +++++++++--------- 3 files changed, 82 insertions(+), 86 deletions(-) diff --git a/src/tools/border-generator/border-generator.e2e.spec.ts b/src/tools/border-generator/border-generator.e2e.spec.ts index 8c09252f..2e3bee70 100644 --- a/src/tools/border-generator/border-generator.e2e.spec.ts +++ b/src/tools/border-generator/border-generator.e2e.spec.ts @@ -1,4 +1,4 @@ -import { test, expect } from '@playwright/test'; +import { expect, test } from '@playwright/test'; test.describe('Tool - Border generator', () => { test.beforeEach(async ({ page }) => { @@ -8,8 +8,4 @@ test.describe('Tool - Border generator', () => { test('Has correct title', async ({ page }) => { await expect(page).toHaveTitle('Border generator - IT Tools'); }); - - test('', async ({ page }) => { - - }); -}); \ No newline at end of file +}); diff --git a/src/tools/border-generator/border-generator.service.test.ts b/src/tools/border-generator/border-generator.service.test.ts index 6bcfc44c..20c54344 100644 --- a/src/tools/border-generator/border-generator.service.test.ts +++ b/src/tools/border-generator/border-generator.service.test.ts @@ -1,6 +1,6 @@ -import { expect, describe, it } from 'vitest'; +// import { expect, describe, it } from 'vitest'; // import { } from './border-generator.service'; // // describe('border-generator', () => { // -// }) \ No newline at end of file +// }) diff --git a/src/tools/border-generator/border-generator.vue b/src/tools/border-generator/border-generator.vue index 9fe836f2..c8181444 100644 --- a/src/tools/border-generator/border-generator.vue +++ b/src/tools/border-generator/border-generator.vue @@ -1,84 +1,9 @@ - - - + + + + From be0302771d8b4cb554742ae1a6ade9541f4c743b Mon Sep 17 00:00:00 2001 From: Adrian Ortiz Date: Sat, 7 Sep 2024 12:49:26 -0600 Subject: [PATCH 06/12] fix --- .../border-generator.service.ts | 8 +- .../border-generator/border-generator.vue | 155 +++++++++--------- 2 files changed, 81 insertions(+), 82 deletions(-) diff --git a/src/tools/border-generator/border-generator.service.ts b/src/tools/border-generator/border-generator.service.ts index 2ab77ee2..56d6db67 100644 --- a/src/tools/border-generator/border-generator.service.ts +++ b/src/tools/border-generator/border-generator.service.ts @@ -1,11 +1,11 @@ export interface Border { - label: string; - value: number; - max: number; + label: string + value: number + max: number } export interface Borders { - [key: string]: Border; + [key: string]: Border } // Asegúrate de que esta función esté correctamente exportada diff --git a/src/tools/border-generator/border-generator.vue b/src/tools/border-generator/border-generator.vue index 8294a205..4e227a8a 100644 --- a/src/tools/border-generator/border-generator.vue +++ b/src/tools/border-generator/border-generator.vue @@ -1,85 +1,8 @@ - - - - + + diff --git a/src/tools/index.ts b/src/tools/index.ts index c0de1f7c..1981c1c1 100644 --- a/src/tools/index.ts +++ b/src/tools/index.ts @@ -211,5 +211,5 @@ export const toolsByCategory: ToolCategory[] = [ export const tools = toolsByCategory.flatMap(({ components }) => components); export const toolsWithCategory = toolsByCategory.flatMap(({ components, name }) => - components.map((tool) => ({ category: name, ...tool })), + components.map(tool) => ({ category: name, ...tool }), ); From 8a723eb5c7bcc5b081236a5ddcd443a0f7da3742 Mon Sep 17 00:00:00 2001 From: Adrian Ortiz Date: Sat, 7 Sep 2024 12:59:22 -0600 Subject: [PATCH 08/12] fix --- src/tools/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tools/index.ts b/src/tools/index.ts index 1981c1c1..d9f0a482 100644 --- a/src/tools/index.ts +++ b/src/tools/index.ts @@ -211,5 +211,5 @@ export const toolsByCategory: ToolCategory[] = [ export const tools = toolsByCategory.flatMap(({ components }) => components); export const toolsWithCategory = toolsByCategory.flatMap(({ components, name }) => - components.map(tool) => ({ category: name, ...tool }), + components.map((tool) => ({ ...tool, category: name })), ); From 54b14e0f7ac4794a6f9b1067ef79ac17f0012bcc Mon Sep 17 00:00:00 2001 From: Adrian Ortiz Date: Sat, 7 Sep 2024 13:06:59 -0600 Subject: [PATCH 09/12] fix --- src/tools/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tools/index.ts b/src/tools/index.ts index d9f0a482..123320df 100644 --- a/src/tools/index.ts +++ b/src/tools/index.ts @@ -211,5 +211,5 @@ export const toolsByCategory: ToolCategory[] = [ export const tools = toolsByCategory.flatMap(({ components }) => components); export const toolsWithCategory = toolsByCategory.flatMap(({ components, name }) => - components.map((tool) => ({ ...tool, category: name })), + components.map(tool => ({ ...tool, category: name })), ); From 217a1af7cb97a02dd1772d715ea7590a5b846a49 Mon Sep 17 00:00:00 2001 From: Adrian Ortiz Date: Sat, 7 Sep 2024 13:12:00 -0600 Subject: [PATCH 10/12] fix --- .../border-generator.service.test.ts | 45 ++++++++++++++++--- 1 file changed, 39 insertions(+), 6 deletions(-) diff --git a/src/tools/border-generator/border-generator.service.test.ts b/src/tools/border-generator/border-generator.service.test.ts index 20c54344..a085c23d 100644 --- a/src/tools/border-generator/border-generator.service.test.ts +++ b/src/tools/border-generator/border-generator.service.test.ts @@ -1,6 +1,39 @@ -// import { expect, describe, it } from 'vitest'; -// import { } from './border-generator.service'; -// -// describe('border-generator', () => { -// -// }) +import { expect, describe, it } from 'vitest'; +import { generateCSSOutput } from './border-generator.service'; +import type { Borders } from './border-generator.service'; + +describe('border-generator service', () => { + describe('generateCSSOutput', () => { + it('generates correct CSS with default values', () => { + const borders: Borders = { + topLeft: { label: 'Top Left', value: 10, max: 100 }, + topRight: { label: 'Top Right', value: 10, max: 100 }, + bottomRight: { label: 'Bottom Right', value: 10, max: 100 }, + bottomLeft: { label: 'Bottom Left', value: 10, max: 100 }, + }; + + const cssOutput = generateCSSOutput(borders, 1, 'solid', 'px'); + + expect(cssOutput).toEqual('border: 1px solid #000000; border-radius: 10px 10px 10px 10px;'); + }); + + it('generates correct CSS with custom values', () => { + const borders: Borders = { + topLeft: { label: 'Top Left', value: 20, max: 100 }, + topRight: { label: 'Top Right', value: 15, max: 100 }, + bottomRight: { label: 'Bottom Right', value: 5, max: 100 }, + bottomLeft: { label: 'Bottom Left', value: 25, max: 100 }, + }; + + const cssOutput = generateCSSOutput(borders, 2, 'dashed', '%'); + + expect(cssOutput).toEqual('border: 2px dashed #000000; border-radius: 20% 15% 5% 25%;'); + }); + + it('throws an error when borders are missing', () => { + const borders = {} as Borders; + + expect(() => generateCSSOutput(borders, 1, 'solid', 'px')).toThrowError(); + }); + }); +}); From 416070a26498dd1493f32c6ac20df2828971c05d Mon Sep 17 00:00:00 2001 From: Adrian Ortiz Date: Sat, 7 Sep 2024 13:16:50 -0600 Subject: [PATCH 11/12] fix --- src/tools/border-generator/border-generator.service.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tools/border-generator/border-generator.service.test.ts b/src/tools/border-generator/border-generator.service.test.ts index a085c23d..3f9c125a 100644 --- a/src/tools/border-generator/border-generator.service.test.ts +++ b/src/tools/border-generator/border-generator.service.test.ts @@ -1,4 +1,4 @@ -import { expect, describe, it } from 'vitest'; +import { describe ,expect, it } from 'vitest'; import { generateCSSOutput } from './border-generator.service'; import type { Borders } from './border-generator.service'; From 94693e60509e24be98724e67561dcc1b1f866adf Mon Sep 17 00:00:00 2001 From: Adrian Ortiz Date: Sat, 7 Sep 2024 13:19:55 -0600 Subject: [PATCH 12/12] fix --- src/tools/border-generator/border-generator.service.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tools/border-generator/border-generator.service.test.ts b/src/tools/border-generator/border-generator.service.test.ts index 3f9c125a..ff1725d4 100644 --- a/src/tools/border-generator/border-generator.service.test.ts +++ b/src/tools/border-generator/border-generator.service.test.ts @@ -1,4 +1,4 @@ -import { describe ,expect, it } from 'vitest'; +import { describe, expect, it } from 'vitest'; import { generateCSSOutput } from './border-generator.service'; import type { Borders } from './border-generator.service';