From 41e453afe9bf0644c2e7269a8c8ff92018d52f1a Mon Sep 17 00:00:00 2001 From: Igor Vinicius Date: Sat, 11 Oct 2025 08:24:35 -0300 Subject: [PATCH 1/6] =?UTF-8?q?feat:=20Adiciona=20na=20documenta=C3=A7?= =?UTF-8?q?=C3=A3o=20principal=20informa=C3=A7=C3=A3o=20de=20como=20rodar?= =?UTF-8?q?=20o=20foundry?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/index.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/index.md b/docs/index.md index 993f842..8872ac2 100644 --- a/docs/index.md +++ b/docs/index.md @@ -67,6 +67,12 @@ git clone https://github.com/Sysvale/foundry npm i ``` +## Executando o Foundry + +```bash +npm run docs:dev +``` + A aplicação estará disponível na porta `5173`, em [http://localhost:5173/](http://localhost:5173/). ### Testando-o From 8e687d18a1115103f4c8cf6342a25052c7bb242e Mon Sep 17 00:00:00 2001 From: Igor Vinicius Date: Sat, 11 Oct 2025 08:24:48 -0300 Subject: [PATCH 2/6] =?UTF-8?q?chore:=20Atualiza=20vers=C3=A3o=20do=20foun?= =?UTF-8?q?dry?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index b2c4193..ef7c7c9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@sysvale/foundry", - "version": "1.3.0", + "version": "1.4.0", "description": "A forge for composables, helpers, and front-end utilities.", "type": "module", "main": "./dist/foundry.cjs.js", From 99b13a3dd8310de2fa9466d73752f99c7fd0f670 Mon Sep 17 00:00:00 2001 From: Igor Vinicius Date: Sat, 11 Oct 2025 08:25:53 -0300 Subject: [PATCH 3/6] feat: Adiciona novo formatador smartTitleCase --- docs/formatters/index.md | 6 ++++ docs/formatters/smartTitleCase.md | 54 +++++++++++++++++++++++++++++++ src/formatters/smartTitleCase.ts | 27 ++++++++++++++++ tests/smartTitleCase.test.ts | 14 ++++++++ 4 files changed, 101 insertions(+) create mode 100644 docs/formatters/smartTitleCase.md create mode 100644 src/formatters/smartTitleCase.ts create mode 100644 tests/smartTitleCase.test.ts diff --git a/docs/formatters/index.md b/docs/formatters/index.md index 679d012..043d9ed 100644 --- a/docs/formatters/index.md +++ b/docs/formatters/index.md @@ -15,3 +15,9 @@ Funções para aplicação ou remoção de máscaras em CPFs. Funções para aplicação ou remoção de máscaras em números telefônicos brasileiros. - [Documentação](./phone.md) + +### TitleCase + +Função para normalizar e formatar títulos, nomes próprios e frases. + +- [Documentação](./smartTitleCase.md) diff --git a/docs/formatters/smartTitleCase.md b/docs/formatters/smartTitleCase.md new file mode 100644 index 0000000..69a5708 --- /dev/null +++ b/docs/formatters/smartTitleCase.md @@ -0,0 +1,54 @@ +# Utilitários de Formatação de TitleCase + +Este módulo fornece funções para normalizar e formatar textos, aplicando regras de capitalização inteligente em títulos, nomes próprios e frases, respeitando preposições, conjunções e exceções definidas. + +## Instalação e Importação + +```typescript +import { smartTitleCase } from '@sysvale/foundry'; +``` + +## Funções + +### `smartTitleCase()` + +Formata uma string colocando a primeira letra de cada palavra em maiúsculo e o restante em minúsculo, exceto +preposições e palavras listadas como exceção. + +### Sintaxe + +```typescript +smartTitleCase(value: string, exceptions?: string[]): string +``` + +### Parâmetros + +- **`value`** (`string`): String que será formatada. + +- **`exceptions`** (`string[], opcional`): Lista de palavras que não serão formatadas, mesmo que estejam no início da string (ex.: ['da', 'de', 'UNIVASF']). + +### Retorno + +`string` - A string formatada no estilo “Title Case”, respeitando a lista de exceções, caso seja fornecida. + +### Exemplos + + +```typescript +smartTitleCase('ash ketchum da silva'); // → 'Ash Ketchum da Silva' +smartTitleCase('ASH KETCHUM DA SILVA'); // → 'Ash Ketchum da Silva' +smartTitleCase('ash ketchum dA Silva'); // → 'Ash Ketchum da Silva' +smartTitleCase('ESTUDANTE DA UNIVASF', ['UNIVASF']); // → 'Estudante da UNIVASF' +smartTitleCase(''); // → '' +``` + +### Casos de Uso + +- Exibir nomes próprios corretamente capitalizados em formulários e relatórios. +- Normalizar títulos, subtítulos e textos para interfaces de usuário. +- Evitar capitalização incorreta de preposições, conjunções e siglas. + +### Limitações + +- Não valida nomes ou títulos, apenas aplica a capitalização correta. +- Strings vazias retornam uma string vazia. diff --git a/src/formatters/smartTitleCase.ts b/src/formatters/smartTitleCase.ts new file mode 100644 index 0000000..cfb330d --- /dev/null +++ b/src/formatters/smartTitleCase.ts @@ -0,0 +1,27 @@ +const prepositions: Set = new Set(['da', 'de', 'do', 'das', 'dos']); + +export function smartTitleCase( + text: string, + exceptions: string[] | null = null +): string { + if (!text) return ''; + + const words = text.trim().split(/\s+/); + const defaultExceptions = new Set(exceptions); + + return words + .map((originalWord: string) => { + const lower = originalWord.toLowerCase(); + + if (prepositions.has(lower)) { + return lower; + } + + if (defaultExceptions.has(originalWord)) { + return originalWord; + } + + return lower.charAt(0).toUpperCase() + lower.slice(1); + }) + .join(' '); +} diff --git a/tests/smartTitleCase.test.ts b/tests/smartTitleCase.test.ts new file mode 100644 index 0000000..2791fd1 --- /dev/null +++ b/tests/smartTitleCase.test.ts @@ -0,0 +1,14 @@ +import { describe, test, expect } from 'vitest'; +import { smartTitleCase } from '../src/formatters/smartTitleCase'; + +describe('smartTitleCase', () => { + test('deve formatar strings', () => { + expect(smartTitleCase('ash ketchum da silva')).toBe('Ash Ketchum da Silva'); + expect(smartTitleCase('Ash Ketchum da Silva')).toBe('Ash Ketchum da Silva'); + expect(smartTitleCase('ASH KETCHUM DA SILVA')).toBe('Ash Ketchum da Silva'); + expect(smartTitleCase('ash ketchum dA Silva')).toBe('Ash Ketchum da Silva'); + expect(smartTitleCase('')).toBe(''); + + expect(smartTitleCase('ESTUDANTE DAS USP', ['USP', 'UNIVASF'])).toBe('Estudante das USP'); + }); +}); From 7043b4bf0ef05980f1c07dee838f13736e9e82c5 Mon Sep 17 00:00:00 2001 From: Igor Vinicius Date: Sat, 11 Oct 2025 08:30:10 -0300 Subject: [PATCH 4/6] refactor: Realiza ajustes no md do formatador --- docs/formatters/index.md | 2 +- docs/formatters/smartTitleCase.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/formatters/index.md b/docs/formatters/index.md index 043d9ed..af3040f 100644 --- a/docs/formatters/index.md +++ b/docs/formatters/index.md @@ -16,7 +16,7 @@ Funções para aplicação ou remoção de máscaras em números telefônicos br - [Documentação](./phone.md) -### TitleCase +### SmartTitleCase Função para normalizar e formatar títulos, nomes próprios e frases. diff --git a/docs/formatters/smartTitleCase.md b/docs/formatters/smartTitleCase.md index 69a5708..ffc2250 100644 --- a/docs/formatters/smartTitleCase.md +++ b/docs/formatters/smartTitleCase.md @@ -1,4 +1,4 @@ -# Utilitários de Formatação de TitleCase +# Utilitários de Formatação do SmartTitleCase Este módulo fornece funções para normalizar e formatar textos, aplicando regras de capitalização inteligente em títulos, nomes próprios e frases, respeitando preposições, conjunções e exceções definidas. From 782075935e55744923785b3ad3927b9ab884eb72 Mon Sep 17 00:00:00 2001 From: Igor Vinicius Date: Wed, 15 Oct 2025 07:49:53 -0300 Subject: [PATCH 5/6] refactor: Ajustes do prettier --- docs/formatters/smartTitleCase.md | 2 +- tests/smartTitleCase.test.ts | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/formatters/smartTitleCase.md b/docs/formatters/smartTitleCase.md index ffc2250..4c47b22 100644 --- a/docs/formatters/smartTitleCase.md +++ b/docs/formatters/smartTitleCase.md @@ -12,7 +12,7 @@ import { smartTitleCase } from '@sysvale/foundry'; ### `smartTitleCase()` -Formata uma string colocando a primeira letra de cada palavra em maiúsculo e o restante em minúsculo, exceto +Formata uma string colocando a primeira letra de cada palavra em maiúsculo e o restante em minúsculo, exceto preposições e palavras listadas como exceção. ### Sintaxe diff --git a/tests/smartTitleCase.test.ts b/tests/smartTitleCase.test.ts index 2791fd1..a8aed32 100644 --- a/tests/smartTitleCase.test.ts +++ b/tests/smartTitleCase.test.ts @@ -9,6 +9,8 @@ describe('smartTitleCase', () => { expect(smartTitleCase('ash ketchum dA Silva')).toBe('Ash Ketchum da Silva'); expect(smartTitleCase('')).toBe(''); - expect(smartTitleCase('ESTUDANTE DAS USP', ['USP', 'UNIVASF'])).toBe('Estudante das USP'); + expect(smartTitleCase('ESTUDANTE DAS USP', ['USP', 'UNIVASF'])).toBe( + 'Estudante das USP' + ); }); }); From 0bd87104bf84bd46512a546658a6d27005b22b3d Mon Sep 17 00:00:00 2001 From: Igor Vinicius Date: Thu, 16 Oct 2025 14:56:59 -0300 Subject: [PATCH 6/6] =?UTF-8?q?refactor:=20Remove=20limita=C3=A7=C3=B5es?= =?UTF-8?q?=20da=20documenta=C3=A7=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/formatters/smartTitleCase.md | 5 ----- 1 file changed, 5 deletions(-) diff --git a/docs/formatters/smartTitleCase.md b/docs/formatters/smartTitleCase.md index 4c47b22..a4bbeb5 100644 --- a/docs/formatters/smartTitleCase.md +++ b/docs/formatters/smartTitleCase.md @@ -47,8 +47,3 @@ smartTitleCase(''); // → '' - Exibir nomes próprios corretamente capitalizados em formulários e relatórios. - Normalizar títulos, subtítulos e textos para interfaces de usuário. - Evitar capitalização incorreta de preposições, conjunções e siglas. - -### Limitações - -- Não valida nomes ou títulos, apenas aplica a capitalização correta. -- Strings vazias retornam uma string vazia.