1.3.6 • Published 2 years ago

mytopbar v1.3.6

Weekly downloads
-
License
MIT
Repository
-
Last release
2 years ago

Contributors Forks Stargazers Issues

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.

  1. 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
barOptionsheightAltura da barra principal
maxWidthLargura em que a barra principal deve se estender
bgColorCor de fundo da barra principal
logo (null para omitir)wrapperRecebe um elemento React que substitui toda a implementação
svgFullLogoImagem da logo completa para telas > 960px
svgCompactLogoImagem da logo compacta para telas < 960px
logoUrlEndereço de navegação para clique na imagem da logo
menuOptions (null para omitir)wrapperRecebe um elemento React que substitui toda a implementação
items (Array of Objects)labelTexto do item de menu
onClickFunção de clique do item de menu
submenuArray de objeto com os mesmos itens dessa seção
separatorCria uma separação/divisão na posição em que foi colocado no menu
colorCor da linha da divisão, somente quando usar "separator"
responsiveMenuStyle < 960pxhamburgerIconColorCor do icone hamburguer para menu responsivo
bgColorCor de fundo do menu, aplicado para submenus também
closeButtonColorCor do icone "X" de fechar o menu
fontSizeTamanho do texto do item de menu
fontWeightPeso do texto do item de menu
textColorCor do texto do item de menu
menuStyle > 960pxfontSizeTamanho do texto do item de menu
fontWeightPeso do texto do item de menu
textColorCor do texto do item de menu
selectedMenuColorCor da borda inferior para o menu selecionado
submenuStyle > 960pxbgColorCor de fundo de submenu
fontSizeTamanho do texto do item de submenu
fontWeightPeso do texto do item de submenu
textColorCor do texto do item de submenu
hoverBorderLeftColorCor da borda esquerda para efeito hover do item de submenu
hoverBorderLeftColorCor de fundo para efeito hover do item de submenu
userMenuOptions (null para omitir)wrapperRecebe um elemento React que substitui toda a implementação
avatarStylebuttonColorCor da imagem do avatar e seta para baixo do botão que abre o menu avatar
buttonBorderColorCor da borda do botão que abre o menu de avatar
menuStylebgColorCor de fundo do menu avatar
hoverColorCor de fundo do efeito hover para cada item do menu avatar
hoverBorderLeftColorCor da borda esquerda que é aplicada quando passa o mouse por um item do menu avatar
textColorCor do texto de cada item do menu avatar
fontSizeTamanho do texto de cada item do menu avatar
fontWeightPeso do texto de cada item do menu avatar
items (Array of Objects)labelTexto do item de menu para o menu avatar
onClickFunção de clique do item de menu para o menu avatar
separatorCria uma separação/divisão na posição em que foi colocado no menu
colorCor 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!

  1. Faça um fork do projeto
  2. Crie sua branch de feature (git checkout -b feature/suafeature)
  3. Faça commit de suas alterações (git commit -m 'O que o commit faz?')
  4. Envie para a branch (git push origin feature/suafeature)
  5. 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

1.3.6

2 years ago

1.3.5

2 years ago

1.3.4

2 years ago

1.3.3

2 years ago

1.3.2

2 years ago

1.3.1

2 years ago

1.3.0

2 years ago

1.2.0

2 years ago

1.0.0

2 years ago

1.1.0

2 years ago

0.6.0

2 years ago

0.5.0

2 years ago

0.4.0

2 years ago

0.3.0

2 years ago

0.2.0

2 years ago

0.1.0

2 years ago