Socket
Book a DemoInstallSign in
Socket

@designliquido/foles

Package Overview
Dependencies
Maintainers
1
Versions
38
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@designliquido/foles

Linguagem de folhas de estilo para documentos em geral em português

latest
Source
npmnpm
Version
0.10.0
Version published
Maintainers
1
Created
Source

FolEs

FolEs

Linguagem de Folhas de Estilo em Português, para geração de CSS.

Acompanhe a Design Líquido nas redes sociais:

Motivação

Assim como linguagens de programação e de marcação, linguagens de estilo como CSS podem ser difíceis de aprender em português.

FolEs começa do mesmo ponto que SASS, como uma linguagem de extensão que gera CSS. A base de CSS é HTML. A base de FolEs é LMHT.

Adicionalmente, FolEs possui um recurso de tradução reversa. Em outras palavras, FolEs pode ingerir um arquivo CSS e devolver seu correspondente em FolEs.

Exemplos

Se queremos definir estilos para um documento inteiro, podemos usar:

lmht {
    tamanho-fonte: 12px;
}

Isso traduz para o seguinte CSS:

html {
    font-size: 12px;
}

Instalação

Para instalar FolEs globalmente, use o seguinte comando:

npm i -g @designliquido/foles

Execução

Após instalar globalmente pelo npm, para executar FolEs traduzindo um arquivo chamado exemplo.foles, use:

foles exemplo.foles

Para tradução reversa:

foles exemplo.css

VSCode

No Visual Studio Code, adicione no seu launch.json o seguinte:

    "configurations": [
        {
            "type": "node",
            "request": "launch",
            "name": "FolEs",
            "skipFiles": ["<node_internals>/**", "node_modules/**"],
            "cwd": "${workspaceRoot}",
            "console": "integratedTerminal",
            "args": [
                "${workspaceFolder}${pathSeparator}execucao.ts",
                "${workspaceFolder}${pathSeparator}exemplos${pathSeparator}exemplo.foles"
            ],
            "runtimeExecutable": "node",
            "runtimeArgs": ["--nolazy", "-r", "ts-node/register/transpile-only"]
        },
    ]

Arquitetura

FolEs copia vários elementos de Delégua, como um Lexador e um Avaliador Sintático, mas contém um elemento original (um Tradutor, que usa o retorno do Avaliador Sintático para gerar uma folha de estilo em CSS).

Seletores

Um seletor é uma expressão que encontra N elementos em um documento LMHT que possuem certas características, como por exemplo o nome de uma estrutura, um id, uma classe e atributos dessa estrutura. Por exemplo:

ligacao {

}

Encontra todas as estruturas de um documento LMHT cujo nome da estrutura seja ligação:

<lmht>
    <cabeça>
    </cabeça>
    <corpo>
        <ligacao destino="https://github.com/DesignLiquido">GitHub da Design Líquido</ligacao>
        <ligacao destino="https://github.com/DesignLiquido/delegua">Linguagem Delégua</ligacao>
        <ligacao destino="https://github.com/DesignLiquido/FolEs">Linguagem FolEs</ligacao>
    </corpo>
</lmht>

Neste exemplo, portanto, irá encontrar três estruturas.

Podemos ainda selecionar por um identificador único:

#ligacao1 {

}

Para o exemplo modificado:

<lmht>
    <cabeça>
    </cabeça>
    <corpo>
        <ligacao id="ligacao1" destino="https://github.com/DesignLiquido">GitHub da Design Líquido</ligacao>
        <ligacao id="ligacao2" destino="https://github.com/DesignLiquido/delegua">Linguagem Delégua</ligacao>
        <ligacao id="ligacao3" destino="https://github.com/DesignLiquido/FolEs">Linguagem FolEs</ligacao>
    </corpo>
</lmht>

Iremos encontrar uma estrutura. Ainda, podemos usar algo assim:

.minhaligacao {

}

E modificar o exemplo mais uma vez:

<lmht>
    <cabeça>
    </cabeça>
    <corpo>
        <ligacao classe="minhaligacao" destino="https://github.com/DesignLiquido">GitHub da Design Líquido</ligacao>
        <ligacao classe="outraligacao" destino="https://github.com/DesignLiquido/delegua">Linguagem Delégua</ligacao>
        <ligacao classe="minhaligacao" destino="https://github.com/DesignLiquido/FolEs">Linguagem FolEs</ligacao>
    </corpo>
</lmht>

E encontraremos apenas duas das três estruturas.

Modificadores

Um modificador é toda e qualquer propriedade declarada no escopo de um seletor que irá causar uma modificação em estruturas de um documento. Voltando ao exemplo da seção anterior:

ligacao {
    tamanho-fonte: 16px;
}

Se aplicamos este estilo ao documento do primeiro exemplo, todas as três estruturas receberão uma modificação de estilo, ou seja o tamanho da fonte (texto) passa a ter o tamanho de 16 pixels.

Atributos de Modificadores: Valores, Quantificadores e Qualitativos

FolEs trabalha com três conceitos de atributos em todas as etapas dos ciclos de ingestão de arquivos:

  • Valores: são os atributos que acompanham modificadores. No exemplo tamanho-fonte: 16px;, tamanho-fonte é o modificador, e 16px é o valor. Valores podem ser formados por números absolutos, números acompanhados de quantificadores, quantitativos ou ainda uma combinação de todos esses;
  • Quantificadores: são complementos de valores. No exemplo anterior, px é o quantificador, e acompanha o número 16, a parte numérica do valor;
  • Qualitativos: são valores adjetivos. Nem todo valor é expresso por um número e uma unidade de medida. Explorando um outro exemplo:
ligacao {
    estilo-contorno: pontilhado;
}

estilo-contorno é um modificador que pede um qualitativo. pontihado é um qualitativo.

Mapeamentos

FolEsCSS
agrupar-palavraword-break
agrupar-vazamentooverflow-wrap
ajustar-objetoobject-fit
ajustar-tamanho-fontefont-size-adjust
ajuste-cor-forcadoforced-color-adjust
ajuste-cor-forçadoforced-color-adjust
alinhar-conteudoalign-content
alinhar-conteúdoalign-content
alinhar-encaixe-rolagem-mousescroll-snap-align
alinhar-itensalign-items
alinhar-sealign-self
alinhar-textotext-align
alinhar-verticalvertical-align
alinhar-ultimo-itemtext-align-last
alinhar-último-itemtext-align-last
alturaheight
altura-linhaline-height
altura-maximamax-height
altura-máximamax-height
altura-minimamin-height
altura-mínimamin-height
animacaoanimation
animaçãoanimation
ao-mudarwill-change
aparenciaappearance
aparênciaappearance
area-mascaramask-clip
área-máscaramask-clip
atraso-animacaoanimation-delay
atraso-animaçãoanimation-delay
atraso-transicaotransition-delay
atraso-transiçãotransition-delay
bordaborder
borda-direitaborder-right
borda-em-blocoborder-block
borda-em-linhaborder-inline
borda-esquerdaborder-left
borda-inferiorborder-bottom
borda-mascaramask-border
borda-máscaramask-border
borda-superiorborder-top
calha-barra-rolagemscrollbar-gutter
celulas-vaziasempty-cells
células-vaziasempty-cells
citacoesquotes
citaçõesquotes
coluna-em-gradegrid-column
colunascolumns
combinar-texto-verticaltext-combine-upright
comportamento-em-bloco-rolagem-mouseoverscroll-behavior-block
comportamento-em-linha-rolagem-mouseoverscroll-behavior-inline
comportamento-horizontal-rolagem-mouseoverscroll-behavior-x
comportamento-rolagemscroll-behavior
comportamento-rolagem-mouseoverscroll-behavior
comportamento-vertical-rolagem-mouseoverscroll-behavior-y
composicao-mascaramask-composite
composição-máscaramask-composite
configuracoes-variacao-fontefont-variation-settings
configurações-variação-fontefont-variation-settings
contar-colunacolumn-count
contemcontain
contémcontain
conteudocontent
conteúdocontent
contornooutline
coordenadastranslate
corcolor
cor-barra-rolagemscrollbar-color
cor-bordaborder-color
cor-borda-direitaborder-right-color
cor-borda-em-blocoborder-block-color
cor-borda-em-linhaborder-inline-color
cor-borda-esquerdaborder-left-color
cor-borda-inferiorborder-bottom-color
cor-borda-superiorborder-top-color
cor-contornooutline-color
cor-cursorcaret-color
cor-destaqueaccent-color
cor-enfase-textotext-emphasis-color
cor-ênfase-textotext-emphasis-color
cor-fim-borda-em-blocoborder-block-end-color
cor-fim-borda-em-linhaborder-inline-end-color
cor-fundobackground-color
cor-inicio-borda-em-blocoborder-block-start-color
cor-início-borda-em-blocoborder-block-start-color
cor-inicio-borda-em-linhaborder-inline-start-color
cor-início-borda-em-linhaborder-inline-start-color
cursorcursor
decoracao-cor-textotext-decoration-color
decoração-cor-textotext-decoration-color
decoracao-espessura-textotext-decoration-thickness
decoração-espessura-textotext-decoration-thickness
decoracao-estilo-textotext-decoration-style
decoração-estilo-textotext-decoration-style
decoracao-linha-textotext-decoration-line
decoração-linha-textotext-decoration-line
decoracao-textotext-decoration
decoração-textotext-decoration
decoracao-texto-sublinhadotext-decoration-skip-ink
decoração-texto-sublinhadotext-decoration-skip-ink
definir-contadorcounter-set
design-tabelatable-layout
deslocamentooffset
deslocamento-em-ancoraoffset-anchor
deslocamento-em-âncoraoffset-anchor
deslocamento-texto-sublinhadotext-underline-offset
deslocar-contornooutline-offset
deslocar-pontuacaohanging-punctuation
deslocar-pontuaçãohanging-punctuation
direcaodirection
direçãodirection
direcao-animacaoanimation-direction
direção-animaçãoanimation-direction
distancia-deslocamentooffset-distance
distância-deslocamentooffset-distance
duracao-animacaoanimation-duration
duração-animaçãoanimation-duration
duracao-transicaotransition-duration
duração-transiçãotransition-duration
enfase-textotext-emphasis
ênfase-textotext-emphasis
escalascale
espacamentogap
espaçamentogap
espacamento-colunacolumn-gap
espaçamento-colunacolumn-gap
espacamento-coluna-em-gradegrid-column-gap
espaçamento-coluna-em-gradegrid-column-gap
espacamento-em-gradegrid-gap
espaçamento-em-gradegrid-gap
espacamento-fontefont-kerning
espaçamento-fontefont-kerning
espacamento-letrasletter-spacing
espaçamento-letrasletter-spacing
espacamento-linhasrow-gap
espaçamento-linhasrow-gap
espacamento-linha-em-gradegrid-row-gap
espaçamento-linha-em-gradegrid-row-gap
espacamento-palavrasword-spacing
espaçamento-palavrasword-spacing
espaco-bordaborder-spacing
espaço-bordaborder-spacing
espaco-em-brancowhite-space
espaço-em-brancowhite-space
espessura-fontefont-weight
esquema-corcolor-scheme
estender-borda-imagemborder-image-outset
estender-colunacolumn-span
esticar-fontefont-stretch
estilo-bordaborder-style
estilo-borda-direitaborder-right-style
estilo-borda-em-blocoborder-block-style
estilo-borda-em-linhaborder-inline-style
estilo-borda-esquerdaborder-left-style
estilo-borda-inferiorborder-bottom-style
estilo-borda-superiorborder-top-style
estilo-contornooutline-style
estilo-enfase-textotext-emphasis-style
estilo-ênfase-textotext-emphasis-style
estilo-fim-borda-em-blocoborder-block-end-style
estilo-fim-borda-em-linhaborder-inline-end-style
estilo-fontefont-style
estilo-inicio-borda-em-blocoborder-block-start-style
estilo-início-borda-em-blocoborder-block-start-style
estilo-inicio-borda-em-linhaborder-inline-start-style
estilo-início-borda-em-linhaborder-inline-start-style
estilo-listalist-style
estilo-lista-imagemlist-style-image
estilo-lista-posicaolist-style-position
estilo-lista-posiçãolist-style-position
estilo-lista-tipolist-style-type
eventos-ponteiropointer-events
exibicaodisplay
exibiçãodisplay
fatiar-borda-mascaramask-border-slice
fatiar-borda-máscaramask-border-slice
fatiar-imagem-bordaborder-image-slice
filtrofilter
filtro-fundobackdrop-filter
fim-borda-em-blocoborder-block-end
fim-borda-em-linhaborder-inline-end
fim-coluna-em-gradegrid-column-end
fim-linha-em-gradegrid-row-end
fixar-fundobackground-attachment
flexflex
flex-agruparflex-wrap
flex-comprimentoflex-basis
flex-crescimentoflex-grow
flex-direcaoflex-direction
flex-direçãoflex-direction
flex-fluxoflex-flow
flex-reduzirflex-shrink
flutuarfloat
fluxoclear
fluxo-em-gradegrid-auto-flow
fontefont
fonte-textofont-family
forma-externashape-outside
forma-margemshape-margin
fundobackground
girarrotate
gradegrid
hifenshyphens
hífenshyphens
imagem-bordaborder-image
imagem-fundobackground-image
imagem-mascaramask-image
imagem-máscaramask-image
impressao-ajuste-corprint-color-adjust
impressão-ajuste-corprint-color-adjust
incrementar-contadorcounter-increment
indentacao-textotext-indent
indentação-textotext-indent
indice-zz-index
índice-zz-index
inicio-borda-em-blocoborder-block-start
início-borda-em-blocoborder-block-start
inicio-borda-em-linhaborder-inline-start
início-borda-em-linhaborder-inline-start
inicio-borda-mascaramask-border-outset
início-borda-máscaramask-border-outset
inicio-coluna-em-gradegrid-column-start
início-coluna-em-gradegrid-column-start
inicio-insercao-em-blocoinset-block-start
início-inserção-em-blocoinset-block-start
inicio-insercao-em-linhainset-inline-start
início-inserção-em-linhainset-inline-start
inicio-linha-em-gradegrid-row-start
início-linha-em-gradegrid-row-start
inicio-margem-em-blocomargin-block-start
início-margem-em-blocomargin-block-start
inicio-margem-em-linhamargin-inline-start
início-margem-em-linhamargin-inline-start
inicio-recuo-em-blocopadding-block-start
início-recuo-em-blocopadding-block-start
inicio-recuo-em-linhapadding-inline-start
início-recuo-em-linhapadding-inline-start
insercaoinset
inserçãoinset
insercao-em-blocoinset-block
inserção-em-blocoinset-block
insercao-em-bloco-fiminset-block-end
inserção-em-bloco-fiminset-block-end
insercao-em-linhainset-inline
inserção-em-linhainset-inline
insercao-em-linha-fiminset-inline-end
inserção-em-linha-fiminset-inline-end
isolamentoisolation
justificar-conteudojustify-content
justificar-conteúdojustify-content
justificar-itensjustify-items
justificar-sejustify-self
justificar-textotext-justify
largurawidth
largura-barra-rolagemscrollbar-width
largura-bordaborder-width
largura-borda-direitaborder-right-width
largura-borda-em-blocoborder-block-width
largura-borda-em-linhaborder-inline-width
largura-borda-esquerdaborder-left-width
largura-borda-inferiorborder-bottom-width
largura-borda-mascaramask-border-width
largura-borda-máscaramask-border-width
largura-borda-superiorborder-top-width
largura-colunacolumn-width
largura-contornooutline-width
largura-fim-borda-em-blocoborder-block-end-width
largura-fim-borda-em-linhaborder-inline-end-width
largura-imagem-bordaborder-image-width
largura-inicio-borda-em-blocoborder-block-start-width
largura-início-borda-em-blocoborder-block-start-width
largura-inicio-borda-em-linhaborder-inline-start-width
largura-início-borda-em-linhaborder-inline-start-width
largura-maximamax-width
largura-máximamax-width
largura-minimamin-width
largura-mínimamin-width
limite-forma-imagemshape-image-threshold
linha-em-gradegrid-row
linhas-inferioresorphans
linhas-superioreswidows
margemmargin
margem-direitamargin-right
margem-direita-rolagem-mousescroll-margin-right
margem-em-blocomargin-block
margem-em-bloco-fimmargin-block-end
margem-em-bloco-rolagem-mousescroll-margin-block
margem-em-linhamargin-inline
margem-em-linha-fimmargin-inline-end
margem-em-linha-rolagem-mousescroll-margin-inline
margem-esquerdamargin-left
margem-esquerda-rolagem-mousescroll-margin-left
margem-inferiormargin-bottom
margem-inferior-rolagem-mousescroll-margin-bottom
margem-rolagem-mousescroll-margin
margem-superiormargin-top
margem-superior-rolagem-mousescroll-margin-top
mascaramask
máscaramask
mesclar-fundobackground-blend-mode
modelo-colunas-em-gradegrid-template-columns
modelo-em-gradegrid-template
modelo-geral-em-gradegrid-template-areas
modelo-linhas-em-gradegrid-template-rows
modo-borda-mascaramask-border-mode
modo-borda-máscaramask-border-mode
modo-escritawriting-mode
modo-mascaramask-mode
modo-máscaramask-mode
modo-mesclamix-blend-mode
modo-preenchimento-animacaoanimation-fill-mode
modo-preenchimento-animaçãoanimation-fill-mode
nome-animacaoanimation-name
nome-animaçãoanimation-name
opacidadeopacity
ordem-pinturapaint-order
ordenarorder
orientacao-imagemimage-orientation
orientação-imagemimage-orientation
orientacao-textotext-orientation
orientação-textotext-orientation
origem-borda-mascaramask-border-source
origem-borda-máscaramask-border-source
origem-fundobackground-origin
origem-imagem-bordaborder-image-source
origem-mascaramask-origin
origem-máscaramask-origin
origem-perspectivaperspective-origin
parar-encaixe-rolagem-mousescroll-snap-stop
perspectivaperspective
posicaoposition
posiçãoposition
posicao-deslocamentooffset-position
posição-deslocamentooffset-position
posicao-direitaright
posição-direitaright
posicao-enfase-textotext-emphasis-position
posição-ênfase-textotext-emphasis-position
posicao-esquerdaleft
posição-esquerdaleft
posicao-fundobackground-position
posição-fundobackground-position
posicao-horizontal-fundobackground-position-x
posição-horizontal-fundobackground-position-x
posicao-inferiorbottom
posição-inferiorbottom
posicao-legendacaption-side
posição-legendacaption-side
posicao-mascaramask-position
posição-máscaramask-position
posicao-objetoobject-position
posição-objetoobject-position
posicao-superiortop
posição-superiortop
posicao-texto-sublinhadotext-underline-position
posição-texto-sublinhadotext-underline-position
posicao-vertical-fundobackground-position-y
posição-vertical-fundobackground-position-y
posicionar-conteudoplace-content
posicionar-conteúdoplace-content
posicionar-itensplace-items
posicionar-seplace-self
preencher-colunacolumn-fill
proporcao-telaaspect-ratio
proporção-telaaspect-ratio
propriedade-transicaotransition-property
propriedade-transiçãotransition-property
quebra-decoracao-caixabox-decoration-break
quebra-decoração-caixabox-decoration-break
quebrar-antesbreak-before
quebrar-aposbreak-after
quebrar-apósbreak-after
quebrar-dentrobreak-inside
quebrar-linhaline-break
quebrar-pagina-antespage-break-before
quebrar-página-antespage-break-before
quebrar-pagina-apospage-break-after
quebrar-página-apóspage-break-after
quebrar-pagina-dentropage-break-inside
quebrar-página-dentropage-break-inside
quebrar-palavraword-break
raio-bordaborder-radius
raio-direito-borda-inferior border-bottom-right-radius
raio-direito-borda-superiorborder-top-right-radius
raio-esquerdo-borda-inferiorborder-bottom-left-radius
raio-esquerdo-borda-superiorborder-top-left-radius
recolher-bordaborder-collapse
recortarclip
recortar-fundobackground-clip
recortar-margem-vazadaoverflow-clip-margin
recuopadding
recuo-direitopadding-right
recuo-direito-rolagem-mousescroll-padding-right
recuo-em-blocopadding-block
recuo-em-bloco-fimpadding-block-end
recuo-em-bloco-rolagem-mousescroll-padding-block
recuo-em-linhapadding-inline
recuo-em-linha-fimpadding-inline-end
recuo-em-linha-rolagem-mousescroll-padding-inline
recuo-esquerdopadding-left
recuo-esquerdo-rolagem-mousescroll-padding-left
recuo-inferiorpadding-bottom
recuo-inferior-rolagem-mousescroll-padding-bottom
recuo-rolagem-mousescroll-padding
recuo-superiorpadding-top
recuo-superior-rolagem-mousescroll-padding-top
recursos-fontefont-feature-settings
redimensionarresize
regras-colunacolumn-rule
regras-cor-colunacolumn-rule-color
regras-estilo-colunacolumn-rule-style
regras-largura-colunacolumn-rule-width
reiniciar-contadorcounter-reset
reiniciar-tudoall
renderizacao-imagemimage-rendering
renderização-imagemimage-rendering
renderizacao-textotext-rendering
renderização-textotext-rendering
repeticao-borda-mascaramask-border-repeat
repetição-borda-máscaramask-border-repeat
repetir-animacaoanimation-iteration-count
repetir-animaçãoanimation-iteration-count
repetir-fundobackground-repeat
repetir-imagem-bordaborder-image-repeat
repetir-mascaramask-repeat
repetir-máscaramask-repeat
rotacao-deslocamentooffset-rotate
rotação-deslocamentooffset-rotate
selecao-usuariouser-select
seleção-usuariouser-select
sintetizar-fontefont-synthesis
sombra-caixabox-shadow
sombra-textotext-shadow
status-animacaoanimation-play-state
status-animaçãoanimation-play-state
substituir-idioma-fontefont-language-override
tabulacaotab-size
tabulaçãotab-size
tamanho-caixabox-sizing
tamanho-colunas-em-gradegrid-auto-columns
tamanho-em-blocoblock-size
tamanho-em-linhainline-size
tamanho-fontefont-size
tamanho-fundobackground-size
tamanho-gradegrid-area
tamanho-linhas-em-gradegrid-auto-rows
tamanho-mascaramask-size
tamanho-máscaramask-size
tamanho-maximo-em-blocomax-block-size
tamanho-máximo-em-blocomax-block-size
tamanho-maximo-em-linhamax-inline-size
tamanho-máximo-em-linhamax-inline-size
tamanho-minimo-em-blocomin-block-size
tamanho-mínimo-em-blocomin-block-size
tamanho-minimo-em-linhamin-inline-size
tamanho-mínimo-em-linhamin-inline-size
tamanho-optico-fontefont-optical-sizing
tamanho-óptico-fontefont-optical-sizing
tempo-transicaotransition-timing-function
tempo-transiçãotransition-timing-function
texto-bidirecionalunicode-bidi
tipo-encaixe-rolagem-mousescroll-snap-type
tipo-mascaramask-type
tipo-máscaramask-type
toque-telatouch-action
trajeto-deslocamentooffset-path
transformartransform
transformar-caixatransform-box
transformar-estilotransform-style
transformar-origemtransform-origin
transformar-textotext-transform
transicaotransition
transiçãotransition
variacao-fontefont-variant
variação-fontefont-variant
variacao-fonte-alternativafont-variant-alternates
variação-fonte-alternativafont-variant-alternates
variacao-fonte-asiaticafont-variant-east-asian
variação-fonte-asiáticafont-variant-east-asian
variacao-fonte-ligacaofont-variant-ligatures
variação-fonte-ligaçãofont-variant-ligatures
variacao-fonte-maiusculafont-variant-caps
variação-fonte-maiúsculafont-variant-caps
variacao-fonte-numericafont-variant-numeric
variação-fonte-numéricafont-variant-numeric
variacao-fonte-posicaofont-variant-position
variação-fonte-posiçãofont-variant-position
vazamentooverflow
vazamento-em-ancoraoverflow-anchor
vazamento-em-âncoraoverflow-anchor
vazamento-em-blocooverflow-block
vazamento-em-linhaoverflow-inline
vazamento-horizontaloverflow-x
vazamento-textotext-overflow
vazamento-verticaloverflow-y
velocidade-animacaoanimation-timing-function
velocidade-animaçãoanimation-timing-function
visibilidadevisibility
visibilidade-conteudocontent-visibility
visibilidade-conteúdocontent-visibility
visibilidade-fundobackface-visibility

Recursos para desenvolvedores

Alguns sites são fundamentais para entender a implementação feita aqui:

Keywords

foles

FAQs

Package last updated on 18 Sep 2025

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts