Assiny Gateway
Fragments

Aparência

Temas, rótulos, layout, as 15 variáveis, as regras por seletor e as fontes do catálogo do Payment Fragment.

A appearance ajusta o fragment à sua marca. Ela entra no assiny.fragments(), com as fonts, e vale para a instância inteira: não há como trocá-la depois na mesma instância.

Aparência do fragment

Carregando o fragment…

Objeto appearance
{
  "theme": "assiny"
}

Como funciona

A aparência é uma lista fechada. Cada item fora da lista ou da faixa é ignorado, só ele, com um aviso no console ([Assiny] Appearance: '…' foi ignorado (fora da lista fechada ou da faixa).), e o resto se aplica. Uma appearance que não é objeto vale o tema padrão.

const fragments = assiny.fragments({
  mode: 'payment',
  amount: 12990,
  currency: 'brl',
  appearance: { theme, labels, layout, variables: { … }, rules: { '.Input': { … } } },
  fonts: [{ family: 'Inter', weights: [400, 600] }],
});

Os valores seguem a CSS, como texto ('16px', '#6938ef'). Nenhum valor com url(, var(, inherit, /* ou um destes caracteres é aceito: { } ; < > \ @ ! " ' e a crase.

Tema, rótulos e layout

ChaveValoresPadrão
theme'assiny', 'night', 'flat''assiny'
labels'above' (rótulo acima do campo), 'floating' (rótulo pequeno dentro do campo, no alto)'above'
layout'tabs', 'accordion''tabs'

O tema dá o valor inicial das 15 variáveis; as variables que você passa trocam só as que você nomeia.

Variávelassinynightflat
colorPrimary#6938ef#9b8afb#6938ef
colorBackground#ffffff#30313d#ffffff
colorText#101828#ffffff#101828
colorTextSecondary#475467#a0a0aa#667085
colorTextPlaceholder#667085#86868f#667085
colorDanger#b42318#fe87a1#d92d20
colorSuccess#067647#75e0a7#079455
colorIcon#475467#a0a0aa#667085
fontFamilyInterInterInter
fontSizeBase16px15px15px
fontWeightNormal400400400
spacingUnit4px4px4px
borderRadius12px8px6px
focusBoxShadow0 0 0 1px var(--colorPrimary), 0 0 0 4px color-mix(in srgb, var(--colorPrimary) 12%, transparent)0 0 0 2px var(--colorPrimary)none
focusOutlinenonenone2px solid var(--colorPrimary)

O anel de foco dos três temas acompanha o colorPrimary. Os valores com var(--colorPrimary) e color-mix( são os padrões internos e não podem ser passados de volta (var( é recusado): para manter o anel na cor primária, passe a cor literal, como 0 0 0 2px #6938ef. A borda dos campos não é variável: cada tema tem a sua.

Variáveis

VariávelO que éValores aceitos
colorPrimarya cor principaluma cor
colorBackgroundo fundouma cor
colorTexto textouma cor sem transparência
colorTextSecondaryo texto secundáriouma cor sem transparência
colorTextPlaceholdero texto de exemplo dos camposuma cor sem transparência
colorDangeros errosuma cor
colorSuccesso sucessouma cor; nesta versão nenhum elemento do fragment a usa
colorIconos íconesuma cor
fontFamilya fonteo nome de uma família do catálogo
fontSizeBaseo tamanho do textode 12px a 20px
fontWeightNormalo peso do texto300, 400 ou 500
spacingUnita unidade de espaçamentode 2px a 8px
borderRadiuso raio dos cantosde 0px a 24px
focusBoxShadowo anel de foco, como sombranone ou uma box-shadow com comprimentos em px (de -100px a 100px), inset e cores
focusOutlineo anel de foco, como contornonone ou um outline com espessura em px (até 100px) ou thin, medium, thick, um estilo (ou auto) e uma cor
  • Cor é hexadecimal (#rgb, #rgba, #rrggbb, #rrggbbaa), rgb() ou rgba().
  • Tamanho é só em px (ou 0), sempre como texto: '16px', não 16.
  • fontWeightNormal aceita o número ou o texto (400 ou '400').

Em aparelho de toque (pointer: coarse), a fonte dos campos nunca fica abaixo de 16px, qualquer que seja o fontSizeBase ou o fontSize de uma regra; fora dele, o mínimo é 12px.

Regras

rules é { '<seletor>': { <propriedade>: <valor> } }, com a propriedade em camelCase, como no JavaScript.

rules: {
  '.Tab--selected': { fontWeight: '600' },
  '.Input': { borderColor: '#98a2b3' },
}

Os 14 seletores:

SeletorO que é
.Blocko bloco que agrupa os campos de um cartão ou de uma Parte no Combinar
.Tabcada aba, ou linha do accordion
.Tab:hovera aba sob o ponteiro
.Tab--selecteda aba selecionada
.TabIcono ícone da aba
.TabLabelo nome da aba
.Labelo rótulo de um campo
.Inputum campo
.Input:focuso campo com foco
.Input:disabledo campo desligado, enquanto os métodos de pagamento são criados
.Input--invalido campo com erro
.Errora mensagem de erro de um campo
.Textum texto, como a mensagem da aba PIX
.Text--secondaryum texto secundário, como o restante no Combinar

.Checkbox e .CheckboxLabel também são aceitos, sem aviso, e não têm efeito nesta versão.

As 18 propriedades:

PropriedadeValores aceitos
coloruma cor sem transparência
backgroundColoruma cor
borderespessura de 0px a 4px, estilo e cor
borderColoruma cor
borderStylenone, hidden, solid, dashed, dotted, double, groove, ridge, inset, outset
borderWidthde 1 a 4 valores, de 0px a 4px
borderRadiusde 1 a 4 valores, de 0px a 24px
boxShadownone ou camadas com 2 a 4 comprimentos (de -100px a 100px), inset e cor
outlinenone ou espessura (0px a 100px, thin, medium, thick), estilo (ou auto) e cor
paddingde 1 a 4 valores, de 0px a 32px
marginde 1 a 4 valores, de 0px a 32px
fontSizeum número maior que zero em px, em, rem ou %; na tela, nunca menos de 12px
fontWeight300, 400, 500, 600 ou 700
fontFamilyo nome de uma família do catálogo
letterSpacing0, normal ou de -0.05em a 0.2em
lineHeightum número sem unidade, de 1 a 2
textTransformnone, uppercase, lowercase, capitalize
transitiondurações até 300ms (em ms ou s), nomes de propriedade e de curva, cubic-bezier()

Um valor que o navegador não aceita para a propriedade também é ignorado.

O anel de foco nunca some

boxShadow e outline em .Input:focus desenham o anel de foco de todos os controles do fragment (campos, abas e opções). O anel só conta se tiver pelo menos 1px (de desfoque ou de espalhamento, na sombra; de espessura, no contorno, que precisa de um estilo como solid) e uma cor com alfa maior que zero. Sem isso, o fragment mantém o anel do tema e avisa no console. O mesmo vale para focusBoxShadow e focusOutline nas variables: os dois em none trazem de volta o anel do tema.

Fontes

As fontes vêm do próprio Assiny Gateway; nenhuma vem de fora. O catálogo tem 8 famílias:

FamíliaPesos
Inter300, 400, 500, 600, 700
Playfair Display400, 500, 600, 700
Lora400, 500, 600, 700
DM Mono300, 400, 500
Space Grotesk300, 400, 500, 600, 700
Nunito300, 400, 500, 600, 700
IBM Plex Sans300, 400, 500, 600, 700
Manrope300, 400, 500, 600, 700
  • fontFamily, na variável ou numa regra, aceita só o nome exato da família, sem pilha. A família em uso já carrega os pesos que o fragment usa (o fontWeightNormal, 500 e 600, quando a família os tem).
  • fonts: [{ family, weights }], no assiny.fragments(), acrescenta pesos; sem weights, carrega o 400.
  • Família ou peso fora do catálogo é ignorado com aviso no console.
  • Até a fonte carregar vale a fonte do sistema; o evento ready não espera.

Exemplo completo

const fragments = assiny.fragments({
  mode: 'payment',
  amount: 12990,
  currency: 'brl',
  appearance: {
    theme: 'flat',
    labels: 'floating',
    layout: 'tabs',
    variables: {
      colorPrimary: '#0b6e4f',
      colorText: '#1d2939',
      fontFamily: 'Manrope',
      fontSizeBase: '15px',
      spacingUnit: '4px',
      borderRadius: '10px',
    },
    rules: {
      '.Tab--selected': { fontWeight: '600' },
      '.Input': { borderColor: '#98a2b3' },
      '.Input:focus': { boxShadow: '0 0 0 3px rgba(11, 110, 79, 0.25)' },
      '.Label': { textTransform: 'uppercase', letterSpacing: '0.04em' },
    },
  },
  fonts: [{ family: 'Manrope', weights: [400, 600, 700] }],
});

A tela do QR do PIX não segue a aparência: ela tem a cara fixa do Assiny Gateway (PIX e a tela do QR).

Nesta página