mytopbar v1.3.6
Sobre o projeto
Na maioria das vezes, quando crio um projeto web, eu comeco a desenvolvedor a topbar (ou header) com menu, logo, etc, do zero, ou então eu faco a copia de um modelo pronto, porém nessa segunda opcão, mesmo sendo uma copia, demanda de modificacões, e isso acaba gerando um trabalho, além de que, caso eu queira mudar uma caracteristica em minha topbar, devo fazer a modificacão por projeto.
Motivacão:
- Foco na feature/objetivo principal do projeto.
- Não repetir a criacão de um novo topbar por projeto.
- Padronizacão de componente de topbar.
Óbvio que nenhum componente atenderá a todos os projetos, pois cada Design pensa e desenvolve um layout pensando na solucão como um todo. No caso de alguma modificacão ou nova caracteristica, você pode abrir uma issue ou se aventurar em implementar uma PR.
Desenvolvido com:
Começando
Siga as etapas para ter o componentes instalado e funcionando em seu projeto.
Requisitos necessários
Instale as libs seguintes para que a utilização aconteça sem nenhum problema.
Com NPM:
npm install styled-components --save-dev
Caso queira utilizar Yarn:
yarn add -D styled-components
Instalação
Vamos fazer a instalação do componente para vermos o qual rapido é instalar e começar a utilizar.
- Abra seu terminal e execute o comando abaixo dentro da pasta do seu projeto
npm install mytopbar
Ou com Yarn:
yarn add mytopbar
Como utilizar
- Adicione o código de exemplo abaixo para começar a utilizar o componente.
import { MyTopbar } from "mytopbar"; //Aqui eu importo o componente
export const App = () => {
return (
<MyTopbar
/* Configurações da logo complete e compacta */
logo={{
svgFullLogo: FullLogo,
svgCompactLogo: CompactLogo,
logoUrl: "/",
}}
/* Configuração da barra principal */
barOptions={{
height: 60,
maxWidth: 1366,
bgColor: "#FFF",
}}
/* Configuraçãp do menu principal */
menuOptions={{
/* Configuraçãp do menu e submenu com responsividae */
responsiveMenuStyle: {
hamburgerIconColor: "rgb(64, 64, 64)",
bgColor: "#FFF",
closeButtonColor: "#c4c4c4",
fontSize: "24px",
fontWeight: "600",
textColor: "rgb(64, 64, 64)",
},
/* Configuraçãp do submenu da barra principal sem responsividade */
menuStyle: {
textColor: "rgb(64, 64, 64)",
fontWeight: "500",
fontSize: "16px",
selectedMenuColor: "#FA00FF",
},
/* Configuraçãp do menu da barra principal sem responsividade */
submenuStyle: {
bgColor: "#FFF",
fontSize: "14px",
fontWeight: "500",
textColor: "rgb(64, 64, 64)",
hoverBorderLeftColor: "rgb(64, 64, 64)",
hoverColor: "rgba(0, 0, 0, 0.05)",
},
items: [
{
label: "Cadastros",
submenu: [
{ label: "Clientes" },
{ separator: true },
{ label: "Produtos" },
],
},
{ label: "Financeiro" },
{ separator: true },
{ label: "Estoque" },
],
}}
/* Configuração do menu opções de avatar */
userMenuOptions={{
avatarStyle: {
buttonColor: "#FA00FF",
buttonBorderColor: "#FA00FF",
},
menuStyle: {
bgColor: "#FFF",
hoverColor: "rgba(0, 0, 0, 0.05)",
hoverBorderLeftColor: "rgb(64, 64, 64)",
textColor: "#363636",
fontSize: "12px",
fontWeight: "400",
},
items: [
{ label: "Configurações", onClick: () => console.log("clicou") },
{ separator: true },
{ label: "Perfil", onClick: () => console.log("clicou") },
{ label: "Sair", onClick: () => console.log("clicou") },
],
}}
/>
);
};
- Vamos explorar cada propriedade da configuração do componente:
Propriedade | |||
---|---|---|---|
barOptions | height | Altura da barra principal | |
maxWidth | Largura em que a barra principal deve se estender | ||
bgColor | Cor de fundo da barra principal | ||
logo (null para omitir) | wrapper | Recebe um elemento React que substitui toda a implementação | |
svgFullLogo | Imagem da logo completa para telas > 960px | ||
svgCompactLogo | Imagem da logo compacta para telas < 960px | ||
logoUrl | Endereço de navegação para clique na imagem da logo | ||
menuOptions (null para omitir) | wrapper | Recebe um elemento React que substitui toda a implementação | |
items (Array of Objects) | label | Texto do item de menu | |
onClick | Função de clique do item de menu | ||
submenu | Array de objeto com os mesmos itens dessa seção | ||
separator | Cria uma separação/divisão na posição em que foi colocado no menu | ||
color | Cor da linha da divisão, somente quando usar "separator" | ||
responsiveMenuStyle < 960px | hamburgerIconColor | Cor do icone hamburguer para menu responsivo | |
bgColor | Cor de fundo do menu, aplicado para submenus também | ||
closeButtonColor | Cor do icone "X" de fechar o menu | ||
fontSize | Tamanho do texto do item de menu | ||
fontWeight | Peso do texto do item de menu | ||
textColor | Cor do texto do item de menu | ||
menuStyle > 960px | fontSize | Tamanho do texto do item de menu | |
fontWeight | Peso do texto do item de menu | ||
textColor | Cor do texto do item de menu | ||
selectedMenuColor | Cor da borda inferior para o menu selecionado | ||
submenuStyle > 960px | bgColor | Cor de fundo de submenu | |
fontSize | Tamanho do texto do item de submenu | ||
fontWeight | Peso do texto do item de submenu | ||
textColor | Cor do texto do item de submenu | ||
hoverBorderLeftColor | Cor da borda esquerda para efeito hover do item de submenu | ||
hoverBorderLeftColor | Cor de fundo para efeito hover do item de submenu | ||
userMenuOptions (null para omitir) | wrapper | Recebe um elemento React que substitui toda a implementação | |
avatarStyle | buttonColor | Cor da imagem do avatar e seta para baixo do botão que abre o menu avatar | |
buttonBorderColor | Cor da borda do botão que abre o menu de avatar | ||
menuStyle | bgColor | Cor de fundo do menu avatar | |
hoverColor | Cor de fundo do efeito hover para cada item do menu avatar | ||
hoverBorderLeftColor | Cor da borda esquerda que é aplicada quando passa o mouse por um item do menu avatar | ||
textColor | Cor do texto de cada item do menu avatar | ||
fontSize | Tamanho do texto de cada item do menu avatar | ||
fontWeight | Peso do texto de cada item do menu avatar | ||
items (Array of Objects) | label | Texto do item de menu para o menu avatar | |
onClick | Função de clique do item de menu para o menu avatar | ||
separator | Cria uma separação/divisão na posição em que foi colocado no menu | ||
color | Cor da linha da divisão, somente quando usar "separator" |
Roteiro
- Adicionar barra principal para compor os demais itens
- Adicionar renderização de logo completa e compacta para responsividade
- Adicionar menu/submenu com responsividade
- Adicionar menu com opções gerais (menu de avatar)
- Adicionar/organizar props para mudança de layout
- Adicionar props wrapper para cada componente (logo, menu, menu avatar) para ser possível substituir toda a implementação de cada parte da topbar.
- Adicionar função de clique na logo
- Adicionar linha/separador de itens de menu
- Adicionar borda no menu referente a pagina atual (menu selecionado)
- Adicionar gif de demonstração do componente
- Publicar NPM
- Adicionar responsividade ao menu avatar
- Adicionar testes
Veja as questões abertas para uma lista completa de recursos propostos e problemas conhecidos.
Contribuição
As contribuições são o que torna a comunidade de código aberto um lugar incrível para aprender, inspirar e criar.
Se você tiver uma sugestão que torne isso melhor, faça um fork do repositório e crie um PR. Você também pode simplesmente abrir uma issue com a tag "feature". Não se esqueça de dar uma estrela ao projeto!
- Faça um fork do projeto
- Crie sua branch de feature (
git checkout -b feature/suafeature
) - Faça commit de suas alterações (
git commit -m 'O que o commit faz?'
) - Envie para a branch (
git push origin feature/suafeature
) - Abra um PR
Licença
MIT License
Copyright (c) 2021
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Contatos
Renato Souza - Linkedin - natoicm@gmail.com
GitHub: https://github.com/renatosouzaBR