Pular para o conteúdo principal

Temas

A interface dos pacotes é neutra de propósito: deve parecer parte do seu app. Você muda o visual por meio de tokens de design, nunca editando os componentes.

Web: os tokens --od-*​

<OfflineDetector> renderiza um único elemento <style> em linha com as propriedades personalizadas --od-* (claro, e escuro por meio de prefers-color-scheme). Sobrescreva qualquer uma no seu CSS:

:root {
--od-color-action: #6d28d9;
--od-radius-md: 2px;
--od-font-family: 'Inter', system-ui, sans-serif;
}

As declarações --od-* do próprio pacote ficam sob seletores :where(), que não pesam nada; assim, uma regra sua :root { ... } como a de cima vence, onde quer que esteja na cascata. Sob uma Content Security Policy, passe o mesmo nonce que os seus outros estilos em linha usam: <OfflineDetector nonce={nonce}> (ou <OfflineTokens nonce={nonce} />).

Force um esquema com a prop colorScheme ('auto', 'light' ou 'dark'). Qualquer valor diferente de 'auto' envolve a árvore em um elemento com data-od-theme e display: contents. Você também pode definir data-od-theme="light" ou "dark" em <html>, em um elemento [data-od-root] ou em qualquer subárvore.

Alguns tokens servem ao layout, não ao visual: --od-offset-top e --od-offset-bottom afastam as peças das suas próprias barras fixas, e --od-banner-height é publicada enquanto o banner aparece, para que outros elementos se posicionem em relação a ele.

Nenhuma fonte é baixada. Personalizar a tipografia é tarefa sua, por meio de --od-font-family.

Todos os tokens​

Os valores são os padrões. O sinal de igual significa que o valor escuro é igual ao claro.

Cor​

TokenClaroEscuro
--od-color-surface#ffffff#1c1c1e
--od-color-surface-raised#f4f5f7#2c2c2e
--od-color-surface-inverse#1f2328#f2f3f5
--od-color-text#1b1f23#f2f3f5
--od-color-text-muted#545b64#a8aeb7
--od-color-text-inverse#ffffff#1b1f23
--od-color-text-muted-inverse#c4c9d0#4a5058
--od-color-border#80878f#8a9099
--od-color-border-subtle#d9dce1#3a3a3c
--od-color-status-offline#b3261e#ff8a80
--od-color-status-offline-subtle#fdecea#4a1f1c
--od-color-status-online#1a7f37#4cc38a
--od-color-status-checking#8a5a00#f0b429
--od-color-action#0b5fd1#8ab4ff
--od-color-on-action#ffffff#0b1b33
--od-color-action-inverse#8ab4ff#0b5fd1
--od-color-focus-ring#0b5fd1#8ab4ff
--od-color-scrimrgba(0, 0, 0, 0.4)rgba(0, 0, 0, 0.6)

Espaçamento​

TokenClaroEscuro
--od-space-xs4px=
--od-space-sm8px=
--od-space-md12px=
--od-space-lg16px=
--od-space-xl24px=
--od-space-2xl32px=

Raio​

TokenClaroEscuro
--od-radius-sm4px=
--od-radius-md8px=
--od-radius-lg12px=
--od-radius-full999px=

Sombra​

TokenClaroEscuro
--od-shadow-nonenone=
--od-shadow-chip0 1px 3px rgba(0, 0, 0, 0.2)=
--od-shadow-snackbar0 2px 8px rgba(0, 0, 0, 0.24), 0 1px 2px rgba(0, 0, 0, 0.16)=

Tipografia​

TokenClaroEscuro
--od-font-familysystem-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif=
--od-font-size-label12px=
--od-font-size-body14px=
--od-font-size-title16px=
--od-font-size-headline22px=
--od-font-weight-regular400=
--od-font-weight-medium500=
--od-font-weight-semibold600=

Altura de linha​

TokenClaroEscuro
--od-line-height-label16px=
--od-line-height-body20px=
--od-line-height-title24px=
--od-line-height-headline28px=

Tamanho e borda​

TokenClaroEscuro
--od-size-touch-target44px=
--od-size-indicator-dot14px=
--od-size-icon20px=
--od-size-snackbar-min-height48px=
--od-size-snackbar-max-width560px=
--od-size-fullscreen-measure36ch=
--od-border-width1px=
--od-focus-ring-width2px=

Movimento​

TokenClaroEscuro
--od-duration-fast120ms=
--od-duration-base200ms=
--od-duration-slow320ms=
--od-duration-exit150ms=
--od-duration-pulse1200ms=
--od-ease-outcubic-bezier(0.16, 1, 0.3, 1)=
--od-ease-incubic-bezier(0.7, 0, 0.84, 0)=
--od-ease-standardcubic-bezier(0.4, 0, 0.2, 1)=

Camadas​

TokenClaroEscuro
--od-z-banner1000=
--od-z-indicator1010=
--od-z-snackbar1020=
--od-z-fullscreen1100=

Deslocamentos​

TokenClaroEscuro
--od-offset-top0px=
--od-offset-bottom0px=

Nativo: o objeto OfflineTheme​

O React Native não tem variáveis CSS. Os mesmos tokens existem como um objeto tipado, com os nomes em camelCase e sem o prefixo (--od-color-action vira colorAction). Passe sobrescritas com a prop theme, monte um tema com createTheme ou parta de lightTheme e darkTheme:

import { OfflineDetector, createTheme } from '@rogeriodocarmo/offline-detector-native';

const theme = createTheme({ colorAction: '#6d28d9', radiusMd: 2 });

<OfflineDetector netInfo={NetInfo} theme={theme}>
<App />
</OfflineDetector>;

useOfflineTheme devolve o tema resolvido dentro dos seus próprios componentes. Todas as chaves de OfflineTheme:

ChaveTipo
colorSurfacestring
colorSurfaceRaisedstring
colorSurfaceInversestring
colorTextstring
colorTextMutedstring
colorTextInversestring
colorTextMutedInversestring
colorBorderstring
colorBorderSubtlestring
colorStatusOfflinestring
colorStatusOfflineSubtlestring
colorStatusOnlinestring
colorStatusCheckingstring
colorActionstring
colorOnActionstring
colorActionInversestring
colorFocusRingstring
colorScrimstring
spaceXsnumber
spaceSmnumber
spaceMdnumber
spaceLgnumber
spaceXlnumber
space2xlnumber
radiusSmnumber
radiusMdnumber
radiusLgnumber
radiusFullnumber
fontFamilystring | undefined
fontSizeLabelnumber
fontSizeBodynumber
fontSizeTitlenumber
fontSizeHeadlinenumber
lineHeightLabelnumber
lineHeightBodynumber
lineHeightTitlenumber
lineHeightHeadlinenumber
fontWeightRegular'400'
fontWeightMedium'500'
fontWeightSemibold'600'
sizeTouchTargetnumber
sizeIndicatorDotnumber
sizeIconnumber
sizeSnackbarMinHeightnumber
sizeSnackbarMaxWidthnumber
sizeFullscreenMeasurenumber
focusRingWidthnumber
durationFastnumber
durationBasenumber
durationSlownumber
durationExitnumber
durationPulsenumber
easeOutBezier
easeInBezier
easeStandardBezier
zBannernumber
zIndicatornumber
zSnackbarnumber
zFullscreennumber
shadowChipShadowStyle
shadowSnackbarShadowStyle

Mantenha o contraste​

Se você mudar as cores, mantenha o texto em 4,5 para 1 e os componentes de interface em 3 para 1, nos dois esquemas. As cores de status (offline, online, verificando) marcam um glifo ou um ponto; não as use em frases. Veja Acessibilidade.