Pular para o conteúdo

Estilização

O LikeC4 oferece recursos avançados de personalização. Você pode alterar cores, formas, tamanhos e ícones de elementos e relacionamentos.

Há várias formas de estilizar elementos:

  • Estilizar todos os elementos de um tipo em specification
  • Estilizar um elemento específico em model ou deployment
  • Sobrescrever estilos em uma view (veja mais na próxima seção)

Para estilizar todos os elementos de um tipo, use o bloco style em specification:

specification {
element user {
style {
// every element of 'user' kind
shape person // has 'person' shape
color amber // and amber color
}
}
element frontend {
style {
// every 'frontend' displayed as browser
shape: browser // ':' is optional, but if you prefer
}
}
}

Para estilizar um elemento específico, use o bloco style aninhado.
Os estilos do elemento sobrescrevem os definidos para o tipo:

specification {
element actor {
style {
shape person
color red
}
}
}
model {
customer = actor 'Customer' {
style {
// inherits shape and overrides color
color green
}
}
}

A próxima seção explica como personalizar elementos em cada visão.

specification {
element actor {
style {
shape person
}
}
}

Formas disponíveis: rectangle (padrão), component, storage, cylinder, browser, mobile, person, queue, bucket, document e agent.

specification {
element actor {
style {
color red
}
}
}

Cores disponíveis: primary (padrão), secondary, muted, amber, gray, green, indigo, red.

O tamanho de um elemento é controlado pelas seguintes propriedades:

propriedade explicação
size tamanho da forma
padding espaço ao redor do título do elemento
textSize tamanho da fonte do título do elemento

Cada propriedade aceita: xsmall, small, medium, large ou xlarge
(ou as formas curtas xs, sm, md, lg, xl).
O tamanho padrão é medium.

Quando o tamanho da forma é xsmall, apenas o título do elemento é exibido.

specification {
element element {
style {
size large
textSize xl
}
}
}

Se um elemento for exibido como um grupo (como um container), você pode definir sua opacidade:

specification {
element element {
style {
opacity 10%
}
}
}

Se um elemento for exibido como um grupo (como um container), você pode alterar o estilo da borda:

specification {
element element {
style {
opacity 10%
border dotted
}
}
}

Valores aceitos: dashed (padrão), dotted, solid, none.

Para exibir um elemento como várias instâncias, defina multiple como true:

specification {
element element {
style {
multiple true
}
}
}

Os elementos podem ter um ícone em qualquer formato de imagem aceito pelo navegador (png, svg, webp etc.):

model {
pg = service 'PostgreSQL' {
style {
// Publicly available with `https://`
icon https://icons.terrastruct.com/dev%2Fpostgresql.svg
// or local image, relative to current file
icon ../postgresql.svg
}
}
}

O LikeC4 inclui mais de 5.000 ícones destes pacotes:

Exemplo:

model {
fn = service 'Lambda Function' {
icon aws:lambda
}
k8s = service 'K8s Service' {
icon gcp:google-kubernetes-engine
}
pg = storage 'PostgreSQL' {
icon tech:postgresql
}
ui = component 'User Interface' {
icon bootstrap:house
}
}


Use iconColor para sobrescrever a cor do ícone independentemente do preenchimento do elemento.
Aplica-se aos ícones bootstrap:* incluídos.

model {
api = service 'API' {
style {
icon tech:nodejs // ⛔️ Not applied
icon bootstrap:gear // ✅ Applies to `bootstrap:*` icons.
iconColor indigo
}
}
}

iconColor aceita cores do tema ou cores personalizadas definidas na especificação.

Use iconSize para redimensionar o ícone sem alterar o tamanho do elemento:

model {
api = service 'API' {
style {
icon tech:nodejs
iconSize sm
}
}
}

iconSize usa os mesmos valores de tamanho e, por padrão, usa o size do elemento (ou seja, se não for especificado e o tamanho for large, o ícone também será large).

Use iconPosition para posicionar o ícone ao redor do texto do elemento:

model {
api = service 'API' {
style {
icon tech:nodejs
iconPosition top
}
}
}

Valores aceitos: left (padrão), right, top, bottom.

Com o prefixo @, você pode usar pastas com aliases (saiba mais em configuração):

model {
pg = service 'PostgreSQL' {
style {
// local images, based on aliased folders
icon @/postgresql.svg
}
}
}

Há várias formas de estilizar relacionamentos:

  • Estilizar todos os relacionamentos de um tipo em specification
  • Estilizar um relacionamento específico em model
  • Personalizar por view (explicado aqui)

Relacionamentos podem ser estilizados na especificação:

specification {
relationship async {
color amber
line dotted
head diamond
tail vee
}
}
model {
customer -> ui 'opens in browser' {
style {
line solid
color amber
}
}
}

A próxima seção explica como personalizar relacionamentos por visão.

Além de color, os relacionamentos podem ter as seguintes propriedades:

linha exemplo
dashed ..
solid ..
dotted ..

Por padrão, a linha é dashed.

O tipo de seta pode ser definido para a ponta inicial e a ponta final do relacionamento:

tipo exemplo
normal ..
onormal ..
diamond ..
odiamond ..
crow ..
vee ..
open ..
none ..

onormal significa “normal contornada”, ou seja, sem preenchimento
odiamond significa “losango contornado”

Por padrão, a ponta final é normal e a ponta inicial é none.

model {
customer -> ui 'opens in browser' {
style {
head diamond
tail crow
}
}
}

Por padrão, vários relacionamentos entre os mesmos dois elementos são combinados em uma única aresta. Se os títulos forem diferentes, o rótulo combinado será [...].

Defina multiple como true para renderizar cada relacionamento como uma aresta separada, com seu próprio rótulo:

specification {
relationship async {
multiple true
line dotted
color amber
}
}

Você também pode habilitar esse comportamento por visão em relacionamentos individuais:

views {
view flows {
include *
include customer -> api with {
multiple true
}
}
}

A configuração do projeto explica como sobrescrever os estilos padrão.