Pular para o conteúdo principal

Dimension — A Camada Ortogonal

O que é Dimension

Dimension é a camada ortogonal do Aplica DS. Ela corre em paralelo ao pipeline Brand → Mode → Surface e alimenta diretamente as camadas Semantic e Foundation.

Enquanto Brand, Mode e Surface controlam a identidade visual (cores, tipografia, contexto), Dimension controla a densidade espacial e tipográfica da interface.

Brand ──┐
Mode ─┼─────────────────────────────┐
Surface─┘ ▼
┌──────────────┐
│ Semantic │ ← onde os tokens ganham propósito
└──────┬───────┘
Dimension ─────────────────────┘ │
(minor / normal / major) ▼
┌──────────────┐
│ Foundation │
└──────────────┘

Por que existe a Dimension?

A mesma interface pode precisar de densidades diferentes dependendo do contexto de uso:

ContextoDensidade ideal
Dashboards e interfaces densas de dadosminor — compacto
Aplicações web e mobile de uso geralnormal — padrão
Leitura, acessibilidade, mobile grandemajor — espaçoso

Sem Dimension, atender essas necessidades exigiria múltiplos sistemas de tokens separados ou valores hardcoded. Com Dimension, é uma troca de variante.


Variantes

O sistema suporta três variantes de Dimension, cada uma com seu próprio DefaultDesignUnit:

VarianteDefaultDesignUnitUso
minor8pxInterfaces compactas, densidade alta
normal16pxPadrão — uso geral
major24pxEspaçoso — acessibilidade, leitura

O DefaultDesignUnit é a âncora de toda a escala. Mudar a variante muda todos os valores dimensionais proporcionalmente.


Escala Espacial (Sizing e Spacing)

Constantes do sistema

ConstanteValor (para normal)Descrição
LayoutUnit4pxUnidade base — todos os valores são múltiplos dela
ScaleMultiplierFactor4Multiplicador para derivar o DefaultDesignUnit
DefaultDesignUnit16pxUnidade-base de layout (1 DefaultDesignUnit = 1rem)

Regras de progressão

Acima do DefaultDesignUnit: progressão tipo Fibonacci

16, 28, 44, 72, 116 ... (cada passo = soma dos dois anteriores, arredondado para múltiplo de LayoutUnit)

Abaixo do DefaultDesignUnit até LayoutUnit: subtração de LayoutUnit

12, 8, 4 (para LayoutUnit = 4, DefaultDesignUnit = 16)

Abaixo do LayoutUnit: divisão por 2, arredondado para baixo

2, 1

Sizing inclui 1px e 2px (para bordas e strokes). Spacing começa em LayoutUnit (4px mínimo).

Aliases semânticos de sizing

Alias SemânticoValor (normal)Valor (minor)Valor (major)
zero000
pico1px1px1px
nano2px2px2px
micro4px2px6px
extraSmall8px4px12px
small12px6px18px
medium16px8px24px
large20px10px30px
extraLarge24px12px36px
mega28px14px42px
giga44px22px66px
tera72px36px108px
peta116px58px174px

Os valores de minor e major são aproximações — os valores reais dependem da configuração exata dos params de cada variante.


Escala Tipográfica

A escala tipográfica é gerada por variant e convive com os dados de dimensão no mesmo arquivo (data/dimension/<variant>.json), sob a chave _theme_typography.

Tamanhos de fonte — 13 steps

StepExpoenteValor (normal, ratio 1.2)
nano-48px
micro-310px
extraSmall-212px
small-114px
medium016px ← base
large+124px
extraLarge+224px
mega+332px
giga+440px
tera+540px
peta+648px
exa+764px
zetta+872px

Fórmula: tamanho = DefaultDesignUnit × ratio^expoente

  • Acima do base: arredondado para múltiplo de LayoutUnit
  • Abaixo do base: arredondado para cima (Math.ceil)

Ratio padrão: 1.2 (Minor Third) — configurável globalmente.

Line-heights

Derivados automaticamente dos fontSizes via quatro densidades:

DensidadeRatioUso
tight~1.2Headings, títulos
close~1.35Subtítulos
regular~1.5Corpo de texto padrão
wild~1.8Leitura longa, acessibilidade

Letter-spacing

Três valores fixos, independentes de variante:

NomeValorUso
tight-0.72Headings grandes
regular0Padrão
wild+0.8Texto em maiúsculas, labels

Unidades de Output

Dimension é armazenado em px mas o output depende da plataforma:

FormatoUnidadeMotivo
CSSremAcessibilidade — escala com a preferência de fonte do usuário (WCAG 1.4.4)
JSONpxFigma e Tokens Studio trabalham com inteiros em px
JS / ESMpxPrecisão numérica para cálculos em JavaScript

Exceção: semantic.depth.spread permanece em px em todos os formatos (não é um token dimensional no sentido semântico — é um número raw para box-shadow).

Fórmula CSS: rem = px / baseFontSize onde baseFontSize padrão = 16.


Estrutura da escala bruta e regra de step

A escala é armazenada como um mapa chave-valor plano dentro de data/dimension/<variant>.json. Cada chave é um número inteiro de step; o valor é a dimensão em pixels para aquele step dado o LayoutUnit da variante.

Regra de step (a partir de 2.22.4):

IntervaloStep
0 – 100Variável (0, 6, 12, 25, 50, 75, 100)
acima de 10025 (100, 125, 150, 175, 200, 225, 250, 275 … 800)

Breaking change (2.22.4): Antes desta versão, keys acima de 100 usavam step 5 (100, 105, 110, … 800). Os steps 105, 110, 115, … 795 deixam de existir. Consumidores que referenciem dimension.scale.105, dimension.scale.110, etc. explicitamente devem migrar para o step mais próximo da nova série.

A regra de step 25 garante que, acima de 100, todo valor da escala seja sempre múltiplo de 4px (com LayoutUnit = 4), eliminando valores não inteiros (17px, 18px, 19px) e colisões de keys.

Mudança de semantic.giga (2.22.4): Movido de dimension.scale.200 (era 32px em Normal) para dimension.scale.275 (44px em Normal), alinhado aos valores esperados da escala semântica. Consumidores que usam semantic.giga não são afetados; consumidores que referenciam a key bruta dimension.scale.200 devem atualizar para dimension.scale.275 se pretendiam giga.


Arquivo gerado por variante

Cada variante gera um arquivo em data/dimension/<variant>.json com duas seções:

{
"dimension": {
"scale": { ... }, ← escala numérica bruta (keys: 0, 25, 50, 75, 100, 125, 150, ...)
"semantic": {
"sizing": { ... }, ← aliases semânticos de sizing
"spacing": { ... } ← aliases semânticos de spacing
}
},
"_theme_typography": {
"fontSizes": { ... }, ← escala de tamanhos de fonte
"lineHeights": { ... }, ← line-heights derivados
"letterSpacings": { ... } ← espaçamentos de letra
}
}

No build, _theme_typography é mesclado com o _typography.json do brand (que contribui fontFamilies, fontWeights, textDecoration, textCases) para formar o conjunto completo de tokens tipográficos.


Overrides e Extensibilidade

Valores de escala podem ser sobrescritos por variante via getOverrides(variant) em config/global/dimension.config.mjs.

Regra obrigatória: qualquer valor custom deve ser múltiplo de LayoutUnit.

value % LayoutUnit === 0 // deve ser true

Tokens semânticos devem sempre referenciar passos da escala (ou overrides válidos). Nunca valores que quebrem o grid.


Configuração

A Dimension é configurada em config/global/themes.config.json:

{
"global": {
"dimension": {
"outputUnit": {
"css": "rem",
"default": "px"
},
"baseFontSize": 16,
"params": {
"minor": { "layoutUnit": 2, "scaleMultiplierFactor": 4 },
"normal": { "layoutUnit": 4, "scaleMultiplierFactor": 4 },
"major": { "layoutUnit": 6, "scaleMultiplierFactor": 4 }
}
},
"typography": {
"fontSizeScaleRatio": 1.2
}
}
}

Referências

  • Token Architecture
  • Implementação: references/aplica-tokens-theme-engine/dynamic-themes/scripts/dimension-scale.mjs
  • Configuração: references/aplica-tokens-theme-engine/config/global/dimension.config.mjs
  • Documentação técnica: references/aplica-tokens-theme-engine/docs/context/dimension/