Typography Audit — Azion Console Kit
Auditor: Design System + Frontend
Date: 2026-02-23
Scope: src/**/*.vue, src/**/*.css
1. Resumo Executivo
| Métrica |
Valor |
| Assinaturas tipográficas únicas (Tailwind) |
~42 |
| Top 10 assinaturas mais usadas |
ver tabela abaixo |
| Outliers (assinaturas com 1 ocorrência) |
~18 |
| Ocorrências inline style tipográfico |
2 (em 2 arquivos) |
| Ocorrências CSS tipográfico (arquivos .css) |
~12 regras (em 2 arquivos) |
| Ocorrências de font-family arbitrária (Tailwind) |
3 (font-robotomono, font-roboto, font-mono, font-['Roboto_Mono']) |
| Ocorrências de tamanho arbitrário (text-[...]) |
~8 (text-[17.5px], text-[18px], text-[12px], text-[0.625rem]) |
Top 10 Assinaturas Mais Usadas
| # |
Assinatura Normalizada |
Contagem Estimada |
Papel Semântico |
| 1 |
text-xs font-normal leading-tight |
~60+ |
Mensagem de erro de campo |
| 2 |
text-xs text-color-secondary font-normal leading-5 |
~55+ |
Texto de ajuda/descrição de campo |
| 3 |
text-base font-medium leading-5 |
~40+ |
Label de campo de formulário |
| 4 |
text-sm font-normal text-color-secondary |
~35+ |
Texto secundário / subtítulo |
| 5 |
text-sm font-medium |
~30+ |
Texto de destaque pequeno |
| 6 |
text-xl font-medium |
~25+ |
Título de seção / heading de formulário |
| 7 |
text-lg font-medium |
~20+ |
Título de card / drawer header |
| 8 |
text-xs font-medium |
~18+ |
Metadata / badge / label pequeno |
| 9 |
text-sm font-medium leading-5 |
~15+ |
Label de filtro / campo |
| 10 |
text-2xl font-medium |
~8+ |
Heading de página / número grande |
2. Catálogo de "Variáveis Tipográficas" (Tailwind)
2.1 Grupo: Mensagens de Erro de Campo
Assinatura: text-xs font-normal leading-tight (+ p-error)
- Contagem: ~60+ ocorrências
- Exemplos (limite 10):
Variações por breakpoint/state: Nenhuma — assinatura é sempre estática.
2.2 Grupo: Texto de Ajuda / Descrição de Campo
Assinatura: text-xs text-color-secondary font-normal leading-5
- Contagem: ~55+ ocorrências
- Exemplos (limite 10):
Variação: Em src/components/description-text/descriptionText.vue:35 existe uma variante small que usa exatamente esta assinatura, e uma variante normal que usa text-sm font-normal.
2.3 Grupo: Label de Campo de Formulário
Assinatura: text-color text-base font-medium leading-5
- Contagem: ~40+ ocorrências
- Exemplos (limite 10):
Variações:
2.4 Grupo: Texto Secundário / Subtítulo
Assinatura: text-sm font-normal text-color-secondary
- Contagem: ~35+ ocorrências
- Exemplos (limite 10):
Variações por breakpoint:
2.5 Grupo: Texto de Destaque Pequeno / Metadata
Assinatura: text-sm font-medium
- Contagem: ~30+ ocorrências
- Exemplos (limite 10):
2.6 Grupo: Título de Seção / Heading de Formulário
Assinatura: text-xl font-medium
- Contagem: ~25+ ocorrências
- Exemplos (limite 10):
Variações por breakpoint:
2.7 Grupo: Título de Card / Drawer Header
Assinatura: text-lg font-medium
- Contagem: ~20+ ocorrências
- Exemplos (limite 10):
Variações:
2.8 Grupo: Metadata / Badge / Label Pequeno
Assinatura: text-xs font-medium
- Contagem: ~18+ ocorrências
- Exemplos (limite 10):
2.9 Grupo: Label de Filtro / Campo de Formulário Secundário
Assinatura: text-sm font-medium leading-5 text-color
- Contagem: ~15+ ocorrências
- Exemplos (limite 10):
2.10 Grupo: Heading de Página / Número Grande
Assinatura: text-2xl font-medium / text-3xl font-medium
- Contagem: ~8+ ocorrências
- Exemplos:
2.11 Assinaturas Outliers (1 ocorrência ou muito específicas)
2.12 Assinaturas com Variações de Font-Weight Inconsistentes para o Mesmo Tamanho
| Tamanho |
Pesos Encontrados |
Arquivos de Exemplo |
text-lg |
font-medium, font-bold, font-semibold |
BillsView.vue:8, WafRules/Dialog/index.vue:71, DataStream/Dialog/SamplingDialog.vue:18 |
text-sm |
font-normal, font-medium, font-bold, font-semibold |
Múltiplos arquivos |
text-xs |
font-normal, font-medium, font-semibold, font-bold |
Múltiplos arquivos |
3. Lista de Inline Style / CSS-in-JS / CSS Tipográfico
3.1 Inline Style (HTML style="...")
Observação: Ambos são ícones PrimeIcons (<i class="pi pi-times"> / <i class="pi pi-check">). O font-size: 2rem poderia ser substituído por text-[2rem] ou text-3xl (1.875rem ≈ 2rem).
3.2 Inline Style (Vue :style / style={{ }})
3.3 CSS Files com Propriedades Tipográficas
Arquivo: src/assets/main.css
| Linha |
Propriedade |
Valor |
| 37 |
font-family |
var(--font-family) — herda do tema PrimeVue |
| 38 |
text-rendering |
optimizeLegibility |
| 39 |
-webkit-font-smoothing |
antialiased |
| 40 |
-moz-osx-font-smoothing |
grayscale |
Arquivo: src/modules/azion-ai-chat/assets/markdown.css
| Linha |
Seletor |
Propriedades Tipográficas |
| 3 |
.markdown |
font-size: 16px |
| 18-19 |
.markdown pre |
font-size: 0.9em; line-height: 1.5em |
| 32-33 |
.markdown h1 |
font-weight: 700; letter-spacing: -0.04rem |
| 50 |
.markdown h2-h5 |
font-weight: 600 |
| 55-57 |
.markdown h2 |
font-size: 1.17em; line-height: 1.75; font-weight: 500 |
| 71 |
.markdown blockquote |
line-height: 1.5rem |
| 126-127 |
.markdown a |
text-decoration: underline; font-weight: 500 |
| 132-133 |
.markdown ul, ol |
font-size: 1rem; line-height: 1.75 |
Observação: O arquivo markdown.css é um caso legítimo de CSS tipográfico — é um reset/estilo para conteúdo Markdown renderizado dinamicamente, onde Tailwind não pode ser aplicado diretamente. Porém, os valores não estão alinhados com os tokens do DS.
3.4 Tailwind Passthrough (:pt) com Classes Tipográficas
Vários componentes PrimeVue usam o mecanismo :pt (passthrough) para injetar classes Tailwind em slots internos. Isso é equivalente a inline style para fins de auditoria:
4. Recomendações (Nível Design System)
4.1 Padrões Candidatos a "Text Styles" Oficiais
Com base na análise, os seguintes padrões emergem naturalmente do codebase e são candidatos diretos a classes DS:
/* Mapeamento atual → classe DS proposta */
text-xs font-normal leading-tight → .text-body-1 (error variant)
text-xs text-color-secondary font-normal leading-5 → .text-body-1 (help text)
text-base font-medium leading-5 → label de campo (sem equivalente direto no DS proposto)
text-sm font-normal text-color-secondary → .text-body-2 (secondary)
text-sm font-medium → .text-body-2 (emphasis)
text-xl font-medium → .text-heading-1 (form section)
text-lg font-medium → .text-heading-0 (card/drawer)
text-2xl font-medium → .text-heading-2 (page heading)
text-3xl font-medium → .text-heading-3 (marketing)
4.2 Análise Comparativa com o Sistema DS Proposto
O sistema proposto define:
/* Headings */
.text-heading-0 { @apply text-xs sm:text-xs lg:text-sm font-medium; }
.text-heading-1 { @apply text-base sm:text-lg lg:text-xl font-medium; }
.text-heading-2 { @apply text-xl sm:text-2xl lg:text-3xl font-medium; }
.text-heading-3 { @apply text-2xl sm:text-3xl lg:text-4xl font-medium; }
.text-heading-4 { @apply text-3xl sm:text-4xl lg:text-5xl font-medium; }
.text-heading-5 { @apply text-4xl sm:text-5xl lg:text-6xl font-medium; }
/* Body's */
.text-body-1 { @apply text-xs leading-normal sm:leading-relaxed; }
.text-body-2 { @apply text-xs sm:text-sm leading-normal sm:leading-relaxed; }
.text-body-3 { @apply text-sm sm:text-base leading-normal sm:leading-relaxed; }
.text-body-4 { @apply text-base sm:text-lg leading-normal sm:leading-relaxed; }
.text-body-5 { @apply text-lg sm:text-xl leading-normal sm:leading-relaxed; }
/* Others */
.text-overline { @apply text-[.625rem] sm:text-xs uppercase tracking-widest font-mono; }
.text-big-number { @apply text-5xl md:text-6xl leading-tight; }
Mapeamento de Migração
| Assinatura Atual (codebase) |
Classe DS Proposta |
Compatibilidade |
Observação |
text-xs font-normal leading-tight (erro) |
.text-body-1 |
⚠️ Parcial |
DS usa leading-normal sm:leading-relaxed; codebase usa leading-tight. Semântica diferente — erro precisa de leading-tight |
text-xs text-color-secondary font-normal leading-5 (help) |
.text-body-1 |
⚠️ Parcial |
leading-5 = 1.25rem; DS usa leading-normal (1.5). Diferença visual perceptível |
text-sm font-normal text-color-secondary |
.text-body-2 |
✅ Boa |
DS adiciona responsividade sm:text-sm que é compatível |
text-sm font-medium |
.text-body-2 + font-medium |
⚠️ Parcial |
DS não define peso — precisaria de modificador |
text-base font-medium leading-5 (label) |
.text-heading-1 (mobile) |
⚠️ Parcial |
.text-heading-1 começa em text-base no mobile, mas escala para text-xl no lg — labels de formulário NÃO devem escalar assim |
text-xl font-medium (seção) |
.text-heading-1 (lg) |
✅ Boa |
Coincide com o valor lg de .text-heading-1 |
text-lg font-medium (card) |
.text-heading-0 (lg) |
⚠️ Parcial |
.text-heading-0 é text-sm no lg — muito pequeno para card headers |
text-2xl font-medium |
.text-heading-2 (mobile) |
✅ Boa |
Coincide com o valor mobile de .text-heading-2 |
text-3xl font-medium |
.text-heading-2 (sm) ou .text-heading-3 (mobile) |
✅ Boa |
Depende do contexto |
text-5xl font-medium |
.text-big-number |
⚠️ Parcial |
.text-big-number não tem font-medium |
text-[0.625rem] (Required) |
.text-overline |
⚠️ Parcial |
.text-overline tem uppercase + tracking-widest — semântica diferente |
Gaps Críticos no Sistema DS Proposto
-
Ausência de classe para "Label de Campo": O padrão mais usado (text-base font-medium leading-5) não tem equivalente direto. .text-heading-1 escala demais para este uso.
-
Ausência de classe para "Texto de Erro": text-xs font-normal leading-tight é usado ~60 vezes mas não tem equivalente. O leading-tight é intencional para mensagens de erro compactas.
-
Ausência de modificadores de peso: O DS proposto não define variantes de font-weight para as classes body. Muitos usos de text-sm têm font-medium (destaque) vs font-normal (padrão).
-
.text-heading-0 muito pequeno para uso atual: O padrão text-lg font-medium (card headers) não mapeia bem para .text-heading-0 que é text-xs/sm.
-
Responsividade agressiva nos headings: As classes DS escalam muito entre breakpoints (ex: .text-heading-2 vai de text-xl para text-3xl). O codebase atual usa escalas mais conservadoras.
4.3 Inconsistências de Leading/Tracking por Faixa de Tamanho
| Tamanho |
Leading Encontrado |
Problema |
text-xs |
leading-tight, leading-5, leading-4, sem leading |
4 valores diferentes para o mesmo tamanho |
text-sm |
leading-5, leading-7, leading-tight, leading-relaxed, sem leading |
5 valores diferentes |
text-base |
leading-5, sem leading |
Inconsistente |
text-lg |
leading-5, leading-7, leading-tight, sem leading |
4 valores diferentes |
text-xl |
leading-7, leading-9, sem leading |
3 valores diferentes |
text-3xl |
leading-9, sem leading |
2 valores |
Tracking: Praticamente ausente no codebase (apenas em .text-overline proposto e em markdown.css). Não há uso de tracking-* em componentes Vue.
4.4 Onde Existe Dívida de Design
Dívida Alta (impacto imediato)
-
Bug de classe inválida: text-medium em src/views/CliCallback/SuccessView.vue:12 e src/views/CliCallback/FailView.vue:12 — não é uma classe Tailwind válida. Deveria ser font-medium.
-
Tamanhos arbitrários sem justificativa: text-[17.5px] em src/templates/advanced-filter/dialog-filter.vue:250 combinado com text-xl no mesmo elemento (conflito de especificidade).
-
Font-family arbitrária: font-['Roboto_Mono'] em src/views/EdgeSQL/Dialog/TruncateTable.vue:25 — deveria usar font-robotomono (já definido no tailwind.config.js) ou font-mono.
-
Inconsistência de font-weight em dialog headers: text-lg com font-bold, font-semibold e font-medium em diferentes dialogs sem critério aparente.
Dívida Média
-
Duplicação de padrão de erro: O padrão p-error text-xs font-normal leading-tight é repetido ~60 vezes. Deveria ser encapsulado em um componente <FieldError> ou classe utilitária.
-
Duplicação de padrão de help text: O padrão text-xs text-color-secondary font-normal leading-5 é repetido ~55 vezes. Deveria ser encapsulado.
-
text-md não existe no Tailwind: Encontrado em src/components/DataTable/DataTable.vue:112, src/templates/list-table-block/folder-list.vue:854 e outros — text-md não é uma classe Tailwind válida (o correto é text-base).
-
font=normal (typo): Em src/templates/switch-account-block/index.vue:187 — font=normal com = ao invés de -. Não tem efeito nenhum.
Dívida Baixa
-
text-xl md:text-xl em src/templates/mfa-setup-block/index.vue:14 — breakpoint redundante.
-
line-height-1 (PrimeVue utility) em src/views/Billing/BillsView.vue:196 — mistura de utilitários PrimeVue com Tailwind.
4.5 Sugestões de Refactor
Curto Prazo (sem mudança de DS)
-
Criar componente <FieldError> que encapsula p-error text-xs font-normal leading-tight — elimina ~60 duplicações.
-
Criar componente <FieldDescription> que encapsula text-xs text-color-secondary font-normal leading-5 — elimina ~55 duplicações.
-
Corrigir bugs: text-medium → font-medium, text-md → text-base, font=normal → font-normal, font-['Roboto_Mono'] → font-robotomono.
-
Padronizar dialog headers: Definir uma única assinatura para h5 de dialogs (sugestão: text-lg font-medium leading-5).
Médio Prazo (com adoção parcial do DS)
-
Adicionar ao DS proposto:
.text-field-label { @apply text-base font-medium leading-5; } — para labels de formulário
.text-field-error { @apply text-xs font-normal leading-tight; } — para mensagens de erro
.text-field-help { @apply text-xs font-normal leading-5; } — para textos de ajuda
-
Revisar .text-heading-0: O valor atual (text-xs sm:text-xs lg:text-sm) é muito pequeno para ser um "heading". Considerar renomear para .text-caption ou .text-overline-sm.
-
Adicionar variantes de peso ao DS: .text-body-2--emphasis { @apply text-body-2 font-medium; } ou usar composição de classes.
Longo Prazo (migração completa)
-
Migrar gradualmente usando o mapeamento da tabela 4.2, começando pelos componentes mais reutilizados (form-fields-inputs/, templates/).
-
Criar <Typography> component que aceita variant prop e aplica a classe DS correta, facilitando manutenção futura.
-
Alinhar markdown.css com tokens do DS — substituir valores hardcoded por variáveis CSS do tema.
Apêndice: Arquivos com Maior Concentração de Assinaturas Tipográficas
Diagnóstico gerado por varredura estática de código. Contagens são estimativas baseadas em grep/search — podem variar ±10% por ocorrências em strings dinâmicas ou condicionais.
Typography Audit — Azion Console Kit
1. Resumo Executivo
Top 10 Assinaturas Mais Usadas
text-xs font-normal leading-tighttext-xs text-color-secondary font-normal leading-5text-base font-medium leading-5text-sm font-normal text-color-secondarytext-sm font-mediumtext-xl font-mediumtext-lg font-mediumtext-xs font-mediumtext-sm font-medium leading-5text-2xl font-medium2. Catálogo de "Variáveis Tipográficas" (Tailwind)
2.1 Grupo: Mensagens de Erro de Campo
Assinatura:
text-xs font-normal leading-tight(+p-error)src/templates/form-fields-inputs/fieldText.vue:114src/templates/form-fields-inputs/fieldNumber.vue:132src/templates/form-fields-inputs/fieldDropdown.vue:227src/templates/form-fields-inputs/fieldTextArea.vue:141src/templates/form-fields-inputs/fieldTextPassword.vue:113src/templates/form-fields-inputs/fieldGroupRadio.vue:144src/views/Workload/FormFields/FormFieldsCreateDomains.vue:305src/views/EdgeNode/Dialog/Unbind.vue:55src/templates/list-table-block/dialog/delete-dialog.vue:60src/templates/sign-in-block/index.vue:50Variações por breakpoint/state: Nenhuma — assinatura é sempre estática.
2.2 Grupo: Texto de Ajuda / Descrição de Campo
Assinatura:
text-xs text-color-secondary font-normal leading-5src/templates/form-fields-inputs/fieldText.vue:121src/templates/form-fields-inputs/fieldNumber.vue:138src/templates/form-fields-inputs/fieldDropdown.vue:232src/templates/form-fields-inputs/fieldGroupSwitch.vue:114src/views/DataStream/FormFields/blocks/OutputSection.vue:181src/views/EdgeNode/FormFields/FormFieldsEdgeNode.vue:95src/views/NetworkLists/FormFields/FormFieldsCreateNetworkLists.vue:128src/views/YourSettings/FormFields/FormFieldsYourSettings.vue:161src/views/AccountSettings/FormFields/FormFieldsAccountSettings.vue:289src/views/ImportGitHub/FormFields/FormFieldsImportGithub.vue:363Variação: Em
src/components/description-text/descriptionText.vue:35existe uma variantesmallque usa exatamente esta assinatura, e uma variantenormalque usatext-sm font-normal.2.3 Grupo: Label de Campo de Formulário
Assinatura:
text-color text-base font-medium leading-5src/templates/label-block/index.vue:19src/templates/form-fields-inputs/fieldGroupSwitch.vue:77src/templates/form-fields-inputs/fieldGroupCheckbox.vue:66src/templates/form-fields-inputs/fieldGroupRadio.vue:90src/templates/form-fields-inputs/fieldAutoComplete.vue:72src/templates/form-fields-inputs/fieldDropdownIcon.vue:79src/views/EdgeStorage/FormFields/FormFieldsEdgeStorage.vue:84src/views/AccountSettings/FormFields/FormFieldsAccountSettings.vue:275src/views/Billing/FormFields/FormFieldsDrawerCredit.vue:100src/views/EdgeStorage/Dialog/CopyCredentialDialog.vue:9Variações:
leading-5:text-color text-base font-medium—src/views/Domains/FormFields/FormFieldsEditDomains.vue:243,src/views/Users/FormsFields/FormFieldsUsers.vue:343text-smao invés detext-base:text-color text-sm font-medium—src/views/Workload/Dialog/CopyDomainDialog.vue:23,src/views/Domains/Dialog/CopyDomainDialog.vue:232.4 Grupo: Texto Secundário / Subtítulo
Assinatura:
text-sm font-normal text-color-secondarysrc/templates/create-form-block/form-horizontal.vue:30src/templates/selector-block/index.vue:29src/templates/clone-block/index.vue:13src/views/CreateNew/DeployView.vue:42src/views/EdgeConnectors/FormFields/blocks/Address.vue:33src/views/DataStream/Dialog/SamplingDialog.vue:25src/views/Workload/FormFields/blocks/mutualAuthenticationSettingsBlock.vue:96src/views/EdgeApplicationsOrigins/ListView.vue:184src/views/Home/HomeView.vue:145src/templates/page-heading-block-tabs/index.vue:26Variações por breakpoint:
max-md:text-baseemsrc/templates/page-heading-block-tabs/index.vue:262.5 Grupo: Texto de Destaque Pequeno / Metadata
Assinatura:
text-sm font-mediumsrc/views/EdgeSQL/components/QuickTemplates.vue:30src/views/EdgeSQL/components/QueryHistoryList.vue:48src/views/EdgeSQL/components/ListTables.vue:127src/templates/list-table-block/index.vue:192src/templates/list-table-block/with-row-edit.vue:145src/templates/graphs-card-block/components/map/map-chart-blocks/map-legend-block.vue:6src/components/DataTable/DataTableFilter.vue:127src/components/base/dataTimeRange/quickSelect/index.vue:47src/views/Marketplace/components/ListSolutions.vue:25src/views/WafRules/FormFields/FormFieldsAllowed.vue:1462.6 Grupo: Título de Seção / Heading de Formulário
Assinatura:
text-xl font-mediumsrc/components/title-text/titleText.vue:2src/templates/create-form-block/form-horizontal.vue:21src/templates/info-drawer-block/info-section/index.vue:45src/views/CreateNew/DeployView.vue:21src/views/CreateNew/CreateView.vue:254src/views/Marketplace/SolutionView.vue:93src/views/WafRules/Drawer/index.vue:354src/views/EdgeApplicationsOrigins/ListView.vue:183src/templates/mfa-setup-block/index.vue:14src/templates/list-table-block/with-lazy-and-dropdown-filter.vue:9Variações por breakpoint:
md:text-xlemsrc/views/Home/HomeView.vue:176—text-lg sm:text-xl font-mediummd:text-xlemsrc/templates/mfa-setup-block/index.vue:14—text-xl md:text-xl font-medium(redundante)2.7 Grupo: Título de Card / Drawer Header
Assinatura:
text-lg font-mediumsrc/templates/clone-block/index.vue:9—text-lg font-medium leading-5src/templates/empty-results-block/index.vue:54—text-lg font-medium leading-7src/templates/message-notification/index.vue:12src/views/Billing/BillsView.vue:8—font-medium text-lg text-colorsrc/views/EdgeSQL/components/QueryHistoryList.vue:3src/views/EdgeSQL/components/ListTables.vue:7src/views/EdgeStorage/components/DragAndDrop.vue:13src/views/CreateNew/CreateView.vue:289src/views/Marketplace/SolutionView.vue:228src/views/Home/HomeView.vue:331Variações:
text-lg not-italic font-bold leading-5—src/views/EdgeServices/Dialog/EdgeServicesToggleStatus.vue:83,src/views/WafRules/Dialog/index.vue:71text-lg font-semibold leading-tight—src/views/DataStream/Dialog/SamplingDialog.vue:18text-lg not-italic font-medium leading-5—src/views/RealTimePurge/Dialog/index.vue:51,src/templates/dialog-unsaved-block/index.vue:1302.8 Grupo: Metadata / Badge / Label Pequeno
Assinatura:
text-xs font-mediumsrc/views/CreateNew/CreateView.vue:175—text-xs font-medium text-color-primarysrc/views/CreateNew/CreateView.vue:192—text-xs font-medium text-color-secondarysrc/views/Marketplace/SolutionView.vue:26src/templates/graphs-card-block/components/map/map-chart-blocks/map-legend-block.vue:11src/components/base/dataTimeRange/inputDateRange/index.vue:560src/views/RealTimeEvents/Blocks/tab-panel-block.vue:135src/templates/search-block/index.vue:7—text-xs font-semiboldsrc/templates/mfa-setup-block/index.vue:55—font-semibold text-xssrc/templates/mfa-authenticate-block/index.vue:21—font-semibold text-xssrc/views/CompareWithAzion/blocks/journey-block.vue:16—text-xs sm:text-sm2.9 Grupo: Label de Filtro / Campo de Formulário Secundário
Assinatura:
text-sm font-medium leading-5 text-colorsrc/templates/advanced-filter/component/fields/chips-filter.vue:29src/templates/advanced-filter/component/fields/text-filter.vue:33src/templates/advanced-filter/component/fields/multiselect-filter.vue:90src/templates/advanced-filter/component/fields/select-filter.vue:89src/templates/advanced-filter/component/fields/float-filter.vue:36src/templates/advanced-filter/component/fields/number-filter.vue:36src/components/base/dataTimeRange/quickSelect/index.vue:71src/components/base/advanced-filter-system/filterFields/temp/dialog-filter.vue:2732.10 Grupo: Heading de Página / Número Grande
Assinatura:
text-2xl font-medium/text-3xl font-mediumsrc/views/Billing/BillsView.vue:71—font-medium text-2xl text-colorsrc/views/Billing/BillsView.vue:109—font-medium text-3xl text-colorsrc/views/Signup/AdditionalDataView.vue:21—text-3xl font-mediumsrc/templates/page-heading-block-tabs/index.vue:20—text-3xl font-medium leading-9 max-md:text-2xlsrc/views/Marketplace/MarketplaceHomeView.vue:8—text-2xl sm:text-3xl font-mediumsrc/views/Home/HomeView.vue:144—text-xl md:text-2xl font-mediumsrc/templates/sign-in-block/index.vue:15—text-xl md:text-2xl font-mediumsrc/templates/sign-in-block/forgot-password.vue:11—text-xl lg:text-2xl font-medium2.11 Assinaturas Outliers (1 ocorrência ou muito específicas)
text-3xl lg:text-4xl text-mediumsrc/views/CliCallback/SuccessView.vue:12text-mediumnão é classe Tailwind válida — deveria serfont-mediumtext-3xl lg:text-4xl text-mediumsrc/views/CliCallback/FailView.vue:12text-4xl xl:text-6xl font-normal leading-10src/templates/signup-block/page-with-form-block.vue:6text-5xl font-mediumsrc/templates/error-page-block/index.vue:5text-2xl font-boldsrc/templates/graphs-card-block/components/chart/big-numbers-chart.vue:4text-xl font-semiboldsrc/templates/danger-card-block/index.vue:4text-[17.5px] text-xl font-medium leading-7src/templates/advanced-filter/dialog-filter.vue:250text-[18px]src/templates/page-heading-block/index.vue:58text-[18px]src/templates/page-heading-block/index.vue:85text-[12px]src/templates/list-table-block/folder-list.vue:668text-[0.625rem]src/templates/label-block/index.vue:27text-[0.625rem]src/templates/form-fields-inputs/fieldGroupRadio.vue:99font-roboto text-3xl font-medium leading-9src/modules/azion-ai-chat/components/chat-welcome.vue:4font-robotomonosrc/templates/script-runner-block/index.vue:28font-['Roboto_Mono']src/views/EdgeSQL/Dialog/TruncateTable.vue:25font-monosrc/components/base/advanced-filter-system/filterAQL/content-editable.vue:7text-xs text-color font-medium leading-4src/views/RealTimeEvents/Blocks/tab-panel-block.vue:135leading-4único no codebasetext-sm leading-relaxedsrc/templates/danger-card-block/index.vue:9leading-relaxedem texto de card2.12 Assinaturas com Variações de Font-Weight Inconsistentes para o Mesmo Tamanho
text-lgfont-medium,font-bold,font-semiboldBillsView.vue:8,WafRules/Dialog/index.vue:71,DataStream/Dialog/SamplingDialog.vue:18text-smfont-normal,font-medium,font-bold,font-semiboldtext-xsfont-normal,font-medium,font-semibold,font-bold3. Lista de Inline Style / CSS-in-JS / CSS Tipográfico
3.1 Inline Style (HTML
style="...")src/views/CliCallback/FailView.vue:9font-sizestyle="color: var(--red-400); font-size: 2rem"src/views/CliCallback/SuccessView.vue:9font-sizestyle="color: var(--green-500); font-size: 2rem"Observação: Ambos são ícones PrimeIcons (
<i class="pi pi-times">/<i class="pi pi-check">). Ofont-size: 2rempoderia ser substituído portext-[2rem]outext-3xl(1.875rem ≈ 2rem).3.2 Inline Style (Vue
:style/style={{ }})src/templates/create-form-block/form-horizontal.vue:32white-spacestyle="white-space: pre-line"— não tipográfico direto, mas afeta apresentação de texto3.3 CSS Files com Propriedades Tipográficas
Arquivo:
src/assets/main.cssfont-familyvar(--font-family)— herda do tema PrimeVuetext-renderingoptimizeLegibility-webkit-font-smoothingantialiased-moz-osx-font-smoothinggrayscaleArquivo:
src/modules/azion-ai-chat/assets/markdown.css.markdownfont-size: 16px.markdown prefont-size: 0.9em; line-height: 1.5em.markdown h1font-weight: 700; letter-spacing: -0.04rem.markdown h2-h5font-weight: 600.markdown h2font-size: 1.17em; line-height: 1.75; font-weight: 500.markdown blockquoteline-height: 1.5rem.markdown atext-decoration: underline; font-weight: 500.markdown ul, olfont-size: 1rem; line-height: 1.75Observação: O arquivo
markdown.cssé um caso legítimo de CSS tipográfico — é um reset/estilo para conteúdo Markdown renderizado dinamicamente, onde Tailwind não pode ser aplicado diretamente. Porém, os valores não estão alinhados com os tokens do DS.3.4 Tailwind Passthrough (
:pt) com Classes TipográficasVários componentes PrimeVue usam o mecanismo
:pt(passthrough) para injetar classes Tailwind em slots internos. Isso é equivalente a inline style para fins de auditoria:src/layout/components/menu-production/index.vue:38submenuheadertext-base font-medium leading-nonesrc/layout/components/menu-profile/index.vue:27submenuheadertext-base font-medium leading-nonesrc/layout/components/menu-profile/index.vue:85full-nametext-sm font-medium leading-nonesrc/templates/page-heading-block/index.vue:58label(Breadcrumb)text-[18px]— tamanho arbitráriosrc/views/RealTimeEvents/FormFields/FormFieldsCreateEdgeApplications.vue:148title(Panel)text-base font-mediumsrc/views/RealTimeEvents/FormFields/FormFieldsCreateEdgeApplications.vue:150subtitle(Panel)text-sm font-normal text-color-secondary4. Recomendações (Nível Design System)
4.1 Padrões Candidatos a "Text Styles" Oficiais
Com base na análise, os seguintes padrões emergem naturalmente do codebase e são candidatos diretos a classes DS:
4.2 Análise Comparativa com o Sistema DS Proposto
O sistema proposto define:
Mapeamento de Migração
text-xs font-normal leading-tight(erro).text-body-1leading-normal sm:leading-relaxed; codebase usaleading-tight. Semântica diferente — erro precisa deleading-tighttext-xs text-color-secondary font-normal leading-5(help).text-body-1leading-5= 1.25rem; DS usaleading-normal(1.5). Diferença visual perceptíveltext-sm font-normal text-color-secondary.text-body-2sm:text-smque é compatíveltext-sm font-medium.text-body-2+font-mediumtext-base font-medium leading-5(label).text-heading-1(mobile).text-heading-1começa emtext-baseno mobile, mas escala paratext-xlno lg — labels de formulário NÃO devem escalar assimtext-xl font-medium(seção).text-heading-1(lg).text-heading-1text-lg font-medium(card).text-heading-0(lg).text-heading-0étext-smno lg — muito pequeno para card headerstext-2xl font-medium.text-heading-2(mobile).text-heading-2text-3xl font-medium.text-heading-2(sm) ou.text-heading-3(mobile)text-5xl font-medium.text-big-number.text-big-numbernão temfont-mediumtext-[0.625rem](Required).text-overline.text-overlinetem uppercase + tracking-widest — semântica diferenteGaps Críticos no Sistema DS Proposto
Ausência de classe para "Label de Campo": O padrão mais usado (
text-base font-medium leading-5) não tem equivalente direto..text-heading-1escala demais para este uso.Ausência de classe para "Texto de Erro":
text-xs font-normal leading-tighté usado ~60 vezes mas não tem equivalente. Oleading-tighté intencional para mensagens de erro compactas.Ausência de modificadores de peso: O DS proposto não define variantes de
font-weightpara as classes body. Muitos usos detext-smtêmfont-medium(destaque) vsfont-normal(padrão)..text-heading-0muito pequeno para uso atual: O padrãotext-lg font-medium(card headers) não mapeia bem para.text-heading-0que étext-xs/sm.Responsividade agressiva nos headings: As classes DS escalam muito entre breakpoints (ex:
.text-heading-2vai detext-xlparatext-3xl). O codebase atual usa escalas mais conservadoras.4.3 Inconsistências de Leading/Tracking por Faixa de Tamanho
text-xsleading-tight,leading-5,leading-4, sem leadingtext-smleading-5,leading-7,leading-tight,leading-relaxed, sem leadingtext-baseleading-5, sem leadingtext-lgleading-5,leading-7,leading-tight, sem leadingtext-xlleading-7,leading-9, sem leadingtext-3xlleading-9, sem leadingTracking: Praticamente ausente no codebase (apenas em
.text-overlineproposto e emmarkdown.css). Não há uso detracking-*em componentes Vue.4.4 Onde Existe Dívida de Design
Dívida Alta (impacto imediato)
Bug de classe inválida:
text-mediumemsrc/views/CliCallback/SuccessView.vue:12esrc/views/CliCallback/FailView.vue:12— não é uma classe Tailwind válida. Deveria serfont-medium.Tamanhos arbitrários sem justificativa:
text-[17.5px]emsrc/templates/advanced-filter/dialog-filter.vue:250combinado comtext-xlno mesmo elemento (conflito de especificidade).Font-family arbitrária:
font-['Roboto_Mono']emsrc/views/EdgeSQL/Dialog/TruncateTable.vue:25— deveria usarfont-robotomono(já definido notailwind.config.js) oufont-mono.Inconsistência de font-weight em dialog headers:
text-lgcomfont-bold,font-semiboldefont-mediumem diferentes dialogs sem critério aparente.Dívida Média
Duplicação de padrão de erro: O padrão
p-error text-xs font-normal leading-tighté repetido ~60 vezes. Deveria ser encapsulado em um componente<FieldError>ou classe utilitária.Duplicação de padrão de help text: O padrão
text-xs text-color-secondary font-normal leading-5é repetido ~55 vezes. Deveria ser encapsulado.text-mdnão existe no Tailwind: Encontrado emsrc/components/DataTable/DataTable.vue:112,src/templates/list-table-block/folder-list.vue:854e outros —text-mdnão é uma classe Tailwind válida (o correto étext-base).font=normal(typo): Emsrc/templates/switch-account-block/index.vue:187—font=normalcom=ao invés de-. Não tem efeito nenhum.Dívida Baixa
text-xl md:text-xlemsrc/templates/mfa-setup-block/index.vue:14— breakpoint redundante.line-height-1(PrimeVue utility) emsrc/views/Billing/BillsView.vue:196— mistura de utilitários PrimeVue com Tailwind.4.5 Sugestões de Refactor
Curto Prazo (sem mudança de DS)
Criar componente
<FieldError>que encapsulap-error text-xs font-normal leading-tight— elimina ~60 duplicações.Criar componente
<FieldDescription>que encapsulatext-xs text-color-secondary font-normal leading-5— elimina ~55 duplicações.Corrigir bugs:
text-medium→font-medium,text-md→text-base,font=normal→font-normal,font-['Roboto_Mono']→font-robotomono.Padronizar dialog headers: Definir uma única assinatura para
h5de dialogs (sugestão:text-lg font-medium leading-5).Médio Prazo (com adoção parcial do DS)
Adicionar ao DS proposto:
.text-field-label { @apply text-base font-medium leading-5; }— para labels de formulário.text-field-error { @apply text-xs font-normal leading-tight; }— para mensagens de erro.text-field-help { @apply text-xs font-normal leading-5; }— para textos de ajudaRevisar
.text-heading-0: O valor atual (text-xs sm:text-xs lg:text-sm) é muito pequeno para ser um "heading". Considerar renomear para.text-captionou.text-overline-sm.Adicionar variantes de peso ao DS:
.text-body-2--emphasis { @apply text-body-2 font-medium; }ou usar composição de classes.Longo Prazo (migração completa)
Migrar gradualmente usando o mapeamento da tabela 4.2, começando pelos componentes mais reutilizados (
form-fields-inputs/,templates/).Criar
<Typography>component que aceitavariantprop e aplica a classe DS correta, facilitando manutenção futura.Alinhar
markdown.csscom tokens do DS — substituir valores hardcoded por variáveis CSS do tema.Apêndice: Arquivos com Maior Concentração de Assinaturas Tipográficas
src/views/RealTimeEvents/FormFields/FormFieldsCreateEdgeApplications.vuesrc/views/DataStream/FormFields/blocks/OutputSection.vuesrc/views/Billing/BillsView.vuesrc/views/Billing/InvoiceDetailsView.vuesrc/views/CreateNew/CreateView.vuesrc/templates/advanced-filter/dialog-filter.vuesrc/views/Workload/FormFields/FormFieldsCreateDomains.vuesrc/views/Workload/FormFields/FormFieldsEditDomains.vueDiagnóstico gerado por varredura estática de código. Contagens são estimativas baseadas em grep/search — podem variar ±10% por ocorrências em strings dinâmicas ou condicionais.