nu-email-builder-js
v0.0.6
Published
Este documento explica como configurar e personalizar as fontes e cores padrão dos componentes de email no projeto Email Builder.
Readme
Email Builder - Guia de Configuração de Fontes e Cores
Este documento explica como configurar e personalizar as fontes e cores padrão dos componentes de email no projeto Email Builder.
📋 Índice
- Visão Geral
- Estrutura do Projeto
- Configuração de Fontes
- Configuração de Cores
- Componentes Disponíveis
- Como Executar o Projeto
- Exemplos de Personalização
🎯 Visão Geral
O Email Builder é um editor visual para criação de emails responsivos. Ele permite configurar:
- Fontes: 9 famílias de fontes diferentes
- Cores: Sistema de cores personalizável
- Layout: Configurações de fundo, bordas e espaçamento
- Componentes: Blocos modulares para construção de emails
🏗️ Estrutura do Projeto
packages/
├── editor-sample/ # Interface principal do editor
├── block-*/ # Componentes individuais (Button, Text, etc.)
├── document-core/ # Lógica central do editor
└── email-builder/ # Renderizador de emails🔤 Configuração de Fontes
Fontes Disponíveis
O sistema oferece 9 famílias de fontes pré-configuradas:
| Nome | Descrição | Fontes CSS |
|------|-----------|------------|
| MODERN_SANS | Sans-serif moderna | "Helvetica Neue", "Arial Nova", Arial |
| BOOK_SANS | Sans-serif elegante | Optima, Candara, "Noto Sans" |
| ORGANIC_SANS | Sans-serif orgânica | Seravek, Ubuntu, Calibri |
| GEOMETRIC_SANS | Sans-serif geométrica | Avenir, Montserrat, Corbel |
| HEAVY_SANS | Sans-serif pesada | Bahnschrift, "Franklin Gothic Medium" |
| ROUNDED_SANS | Sans-serif arredondada | Quicksand, Comfortaa, "Arial Rounded MT Bold" |
| MODERN_SERIF | Serif moderna | Charter, "Bitstream Charter", Cambria |
| BOOK_SERIF | Serif clássica | "Iowan Old Style", "Palatino Linotype" |
| MONOSPACE | Monoespaçada | "Courier New", "Nimbus Mono PS" |
Arquivos de Configuração de Fontes
1. Definição das Fontes
Arquivo: packages/editor-sample/src/documents/blocks/helpers/fontFamily.ts
export const FONT_FAMILIES = [
{
key: 'MODERN_SANS',
label: 'Modern sans',
value: '"Helvetica Neue", "Arial Nova", "Nimbus Sans", Arial, sans-serif',
},
// ... outras fontes
];2. Aplicação das Fontes no Layout
Arquivo: packages/editor-sample/src/documents/blocks/EmailLayout/EmailLayoutEditor.tsx
function getFontFamily(fontFamily: EmailLayoutProps['fontFamily']) {
const f = fontFamily ?? 'MODERN_SANS';
switch (f) {
case 'MODERN_SANS':
return '"Helvetica Neue", "Arial Nova", "Nimbus Sans", Arial, sans-serif';
// ... outros casos
}
}3. Validação das Fontes
Arquivo: packages/editor-sample/src/documents/blocks/EmailLayout/EmailLayoutPropsSchema.tsx
const FONT_FAMILY_SCHEMA = z.enum([
'MODERN_SANS',
'BOOK_SANS',
'ORGANIC_SANS',
// ... outras opções
]);🎨 Configuração de Cores
Sistema de Cores
O projeto utiliza um sistema de cores organizado em diferentes níveis:
1. Cores da Marca (Interface)
Arquivo: packages/editor-sample/src/theme.ts
const BRAND_NAVY = '#212443';
const BRAND_BLUE = '#0079CC';
const BRAND_GREEN = '#1F8466';
const BRAND_RED = '#E81212';
const BRAND_YELLOW = '#F6DC9F';
const BRAND_PURPLE = '#6C0E7C';
const BRAND_BROWN = '#CC996C';2. Cores do Layout do Email
Arquivo: packages/editor-sample/src/getConfiguration/sample/empty-email-message.ts
const EMPTY_EMAIL_MESSAGE = {
root: {
type: 'EmailLayout',
data: {
backdropColor: '#F5F5F5', // Cor de fundo externa
canvasColor: '#FFFFFF', // Cor de fundo do email
textColor: '#262626', // Cor do texto principal
fontFamily: 'MODERN_SANS', // Fonte padrão
},
},
};3. Cores dos Componentes
Botão
Arquivo: packages/block-button/src/index.tsx
export const ButtonPropsDefaults = {
buttonBackgroundColor: '#999999', // Cor de fundo do botão
buttonTextColor: '#FFFFFF', // Cor do texto do botão
// ... outras propriedades
};Divisor
Arquivo: packages/editor-sample/src/documents/blocks/helpers/EditorChildrenIds/AddBlockMenu/buttons.tsx
{
label: 'Divider',
block: () => ({
type: 'Divider',
data: {
props: {
lineColor: '#CCCCCC', // Cor da linha do divisor
},
},
}),
}🧩 Componentes Disponíveis
Componentes de Layout
EmailLayout
- Arquivo:
packages/editor-sample/src/documents/blocks/EmailLayout/ - Função: Container principal do email
- Propriedades:
backdropColor: Cor de fundo externacanvasColor: Cor de fundo do emailtextColor: Cor do texto principalfontFamily: Família de fonteborderColor: Cor da bordaborderRadius: Raio da borda
Container
- Arquivo:
packages/editor-sample/src/documents/blocks/Container/ - Função: Container genérico para agrupar elementos
- Propriedades: Padding, alinhamento
ColumnsContainer
- Arquivo:
packages/editor-sample/src/documents/blocks/ColumnsContainer/ - Função: Layout em colunas
- Propriedades:
columnsCount: Número de colunascolumnsGap: Espaçamento entre colunas
Componentes de Conteúdo
Text
- Pacote:
packages/block-text/ - Função: Bloco de texto
- Propriedades:
text: Conteúdo do textomarkdown: Suporte a Markdownstyle.color: Cor do textostyle.fontSize: Tamanho da fontestyle.fontWeight: Peso da fonte (bold/normal)
Heading
- Pacote:
packages/block-heading/ - Função: Títulos e cabeçalhos
- Propriedades: Similar ao Text, mas com estilos de título
Button
- Pacote:
packages/block-button/ - Função: Botões clicáveis
- Propriedades:
text: Texto do botãourl: Link de destinobuttonBackgroundColor: Cor de fundobuttonTextColor: Cor do textosize: Tamanho (x-small, small, medium, large)buttonStyle: Estilo (rectangle, rounded, pill)fullWidth: Largura total
Image
- Pacote:
packages/block-image/ - Função: Imagens
- Propriedades:
url: URL da imagemalt: Texto alternativocontentAlignment: AlinhamentolinkHref: Link da imagem
Avatar
- Pacote:
packages/block-avatar/ - Função: Avatares de usuário
- Propriedades:
imageUrl: URL da imagemshape: Forma (circle, square)
Divider
- Pacote:
packages/block-divider/ - Função: Linhas divisórias
- Propriedades:
lineColor: Cor da linha
Spacer
- Pacote:
packages/block-spacer/ - Função: Espaçamento vertical
- Propriedades:
height: Altura do espaçamento
Html
- Pacote:
packages/block-html/ - Função: Conteúdo HTML personalizado
- Propriedades:
contents: Código HTML
🚀 Como Executar o Projeto
Pré-requisitos
- Node.js (versão 16 ou superior)
- npm ou yarn
Instalação
- Clone o repositório:
git clone <repository-url>
cd email-builder-js-test- Instale as dependências:
npm install- Execute o projeto:
cd packages/editor-sample
npm run dev- Acesse a aplicação:
http://localhost:5173Scripts Disponíveis
# Desenvolvimento
npm run dev
# Build para produção
npm run build
# Preview da build
npm run preview
# Testes
npm test🛠️ Exemplos de Personalização
1. Alterar Cores Padrão do Layout
Arquivo: packages/editor-sample/src/getConfiguration/sample/empty-email-message.ts
const EMPTY_EMAIL_MESSAGE = {
root: {
type: 'EmailLayout',
data: {
backdropColor: '#F0F0F0', // Fundo mais claro
canvasColor: '#FFFFFF', // Fundo branco
textColor: '#333333', // Texto mais escuro
fontFamily: 'GEOMETRIC_SANS', // Fonte geométrica
},
},
};2. Personalizar Cores dos Botões
Arquivo: packages/block-button/src/index.tsx
export const ButtonPropsDefaults = {
buttonBackgroundColor: '#0079CC', // Azul da marca
buttonTextColor: '#FFFFFF', // Texto branco
// ... outras propriedades
};3. Adicionar Nova Fonte
Arquivo: packages/editor-sample/src/documents/blocks/helpers/fontFamily.ts
export const FONT_FAMILIES = [
// ... fontes existentes
{
key: 'CUSTOM_SANS',
label: 'Custom Sans',
value: '"Inter", "Roboto", sans-serif',
},
];Arquivo: packages/editor-sample/src/documents/blocks/EmailLayout/EmailLayoutPropsSchema.tsx
const FONT_FAMILY_SCHEMA = z.enum([
// ... opções existentes
'CUSTOM_SANS',
]);4. Criar Template Personalizado
Arquivo: packages/editor-sample/src/getConfiguration/sample/custom-template.ts
import { TEditorConfiguration } from '../../documents/editor/core';
const CUSTOM_TEMPLATE: TEditorConfiguration = {
root: {
type: 'EmailLayout',
data: {
backdropColor: '#F8F9FA',
canvasColor: '#FFFFFF',
textColor: '#212529',
fontFamily: 'MODERN_SANS',
childrenIds: [
'header-block',
'content-block',
'footer-block',
],
},
},
'header-block': {
type: 'Text',
data: {
props: { text: 'Bem-vindo!' },
style: {
fontSize: 24,
fontWeight: 'bold',
textAlign: 'center',
padding: { top: 20, bottom: 20, left: 24, right: 24 },
},
},
},
// ... outros blocos
};
export default CUSTOM_TEMPLATE;📝 Notas Importantes
- Compatibilidade de Email: As fontes e cores são escolhidas considerando a compatibilidade com clientes de email
- Fallbacks: Sempre inclua fontes fallback para garantir compatibilidade
- Cores Hexadecimais: Use sempre o formato
#RRGGBBpara cores - Responsividade: O sistema é responsivo por padrão
- Validação: Todas as propriedades são validadas usando Zod schemas
🔗 Links Úteis
Desenvolvido com ❤️ para facilitar a criação de emails responsivos e profissionais.
