0.0.47 • Published 2 years ago

@waveclass/wds-core v0.0.47

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

Waveclass Design System (WDS) - Core

Este repositório pertence à organização Wavetex e tem o objetivo de reunir os componentes padronizados da grade de estilos da plataforma Waveclass para Web.

Sumário

Tecnologias utilizadas

Storybook

Este repositório faz uso do Storybook para demonstração dos componentes visuais da WDS. Para utilizá-lo, clone o repositório localmente em sua máquina e execute os seguintes comandos:

pnpm i

É fortemente recomendado o uso do PNPM para execução de scripts de instalação neste repositório.

pnpm sb

Este comando iniciará o Storybook e deve automaticamente abrir uma aba no seu browser padrão com a página inicial do Storybook. Caso isso não ocorra, basta acessar http://localhost:6006/.

Agora você pode visualizar os componentes da WDS e brincar com suas variações!

Instalação

Para utilizar a Waveclass Design System no seu projeto (seja no repo principal da Waveclass ou em algum projeto à parte), basta executar o comando:

pnpm i --save @waveclass/wds-core

A WDS assume que o seu projeto possua as dependências necessárias para o funcionamento, são elas:

  • React ^18.2.0;
  • React DOM ^18.2.0;
  • React Icons ^4.9.0;
  • Styled Components 6.0.0-rc.3.

Certifique-se de tê-las instaladas e nas versões mínimas necessárias antes de iniciar o uso da WDS.

Utilitários

getSchoolColors

Esta utility function retorna um objeto com as cores personalizadas da escola atualmente logada no browser.

import { getSchoolColors } from '@waveclass/wds-core';

const schoolColors = getSchoolColors();

Dados retornados | Nome | Tipo | Descrição | |--|--|--| | primaryColor | string | Cor primária | | secondaryColor | string | Cor secundária | | buttonColor | string | Cor de botão | | secondaryLogo | string | URL da logo secundária (ícone) |

getThemeMode

Esta utility function retorna um a preferência de tema atual do usuário.

import { getThemeMode } from '@waveclass/wds-core';

const themeMode = getThemeMode(); /* light | dark */

isColorDark

Esta utility function indica se determinada cor é escura. Use-a para estilizações em que será necessário alterar alguma cor dependendo das cores personalizadas da escola.

import { isColorDark, getSchoolColors } from '@waveclass/wds-core';

const { primaryColor } = getSchoolColors(); /* assuming primaryColor resolves to #000000 */
const isPrimaryColorDark = isColorDark(primaryColor); /* true */
const myTextColor = isPrimaryColorDark ? '#FFF' : '#000';

theme

Esta utility function retorna um objeto com os dados completos do tema da Waveclass Design System.

import { theme } from '@waveclass/wds-core';

Por gentileza, a fim de reduzir o tamanho desta documentação, cheque a tipagem deste objeto em:

src -> theme.ts

toStyledComponent

Esta utility function recebe como argumento um objeto do tipo CSSProperties e o transforma em string para inserção de estilos customizados em componentes feitos com StyledComponents.

import styled from 'styled-components';
import { toStyledComponent } from '@waveclass/wds-core';

export const MyStyledComponent = styled.div<{ customStyles?: CSSProperties }>`
    // ... some styles

    ${({ customStyles }) => customStyles && toStyledComponent(customStyles)}
`;

Componentes

Avatar

Props | Nome | Tipo | Descrição | Obrigatório | |--|--|--|--| | size | string | Tamanho: 'sm', 'md', 'lg' e 'xl' | Sim | | name | string | Nome do usuário | Sim | | img | string | URL da foto | Não | | online | boolean | Se deve exibir badge de online | Não |

Exemplo de uso

import { Avatar } from '@waveclass/wds-core';

const MyComponent = () => {
    return (
	    <Avatar size='sm' name='Fulano da Silva' />
    );
};

Course Banner

Props

NomeTipoDescriçãoObrigatório
courseNamestringNome do cursoSim
bannerImageUrlstringURL do BannerSim
courseIdstringID do cursoSim
onClick(courseId: string) => voidHandler de cliqueSim

Exemplo de uso

import { CourseBanner } from "@waveclass/wds-core";

const MyComponent = () => {
  return (
    <CourseBanner
      courseName="Nome do curso"
      bannerImageUrl="url-do-banner"
    />
  );
};

Modal

Props | Nome | Tipo | Descrição | Padrão | Obrigatório | |--|--|--|--|--| | isShowing | boolean | Se o modal está sendo exibido | false | Sim | | position | string | Posições do modal: 'center' e 'right' | 'center' | Sim | | children | ReactNode | Conteúdo a ser exibido dentro do componente | - | Sim | | onClose | function => void | Handler para fechar o modal | - | Sim | | size | string | Tamanhos do modal: 'sm', 'md' e 'lg | 'sm' | Não | | title | string | Título do modal | - | Não | | subtitle | string | Subtítulo do modal | - | Não | | confirmButton | ButtonpropsT | Propriedades do botão 'confirm': vide types.ts | - | Não | cancelButton | ButtonpropsT | Propriedades do botão 'cancel': vide types.ts | - | Não | dangerButton | ButtonpropsT | Propriedades do botão 'danger': vide types.ts | - | Não | customStyles | CustomStylesPropsT | Estilos customizados: vide types.ts | - | Não |

Exemplo de uso

import { Modal } from '@waveclass/wds-core';

const MyComponent = () => {
    const [isShowing, setIsShowing] = useState(false);

    return (
	    <Modal
            isShowing={isShowing}
            position='center'
            onClose={() => setIsShowing(false)}
        >
            <label>
                Nome: <input type="text">
            </label>
        </Modal>
    );
};

Filter Button

Props | Nome | Tipo | Descrição | Obrigatório | |--|--|--|--| | onClick | function => void | Handler de clique | Sim | | disabled | boolean | Se o botão está desabilitado | Não | | text | string | Texto do botão | Sim | | icon | ReactNode | Ícone do botão | Não | | customStyles | CSSProperties | Estilos customizados | Não |

Exemplo de uso

import { FilterButton } from '@waveclass/wds-core';

const MyComponent = () => {
    return (
	    <FilterButton text='Click Me' onClick={() => alert('I was clicked!')} />
    );
};

Floating Button

Props | Nome | Tipo | Descrição | Obrigatório | |--|--|--|--| | onClick | function => void | Handler de clique | Sim | | disabled | boolean | Se o botão está desabilitado | Não | | variant | string | Variante de estilo: 'primary' ou 'secondary' | Sim | | icon | ReactNode | Ícone do botão | Não | | customStyles | CSSProperties | Estilos customizados | Não |

Exemplo de uso

import { FloatingButton } from '@waveclass/wds-core';

const MyComponent = () => {
    return (
	    <FloatingButton onClick={() => alert('I was clicked!')} variant='primary' />
    );
};

Grid Item

Props

NomeTipoDescriçãoObrigatório
idstringIdentificador do elementoNão
variantstringVariante de tamanhoSim
customStylesCSSPropertiesPropriedades CSS customizadasNão
childrenReactNodeConteúdo a ser exibido dentro do componenteSim

Exemplo de uso

import { GridItem } from "@waveclass/wds-core";

const MyComponent = () => {
  return (
    <GridItem
      id="0"
      variant="row"
      customStyles={{
        background: red;
      }}
      children="Texto"
    />
  );
};

Input

Props | Nome | Tipo | Descrição | Obrigatório | |--|--|--|--| | onChange | function => void | Handler de evento de mudança | Sim | | value | string, number | Valor do input | Sim | | disabled | boolean | Se o botão está desabilitado | Não | | required | boolean | Se é de preenchimento obrigatório | Não | | max | number | Valor máximo | Não | | min | number | Valor mínimo | Não | | maxLength | number | Tamanho máximo | Não | | minLength | number | Tamanho mínimo | Não | | placeholder | string | Placeholder | Não | | type | string | Tipo do input | Não | | showError | boolean | Se deve exibir helper text de erro | Não | | errorMessage | string | Mensagem do helper text de erro | Não | | icon | ReactNode | Ícone do input | Não | | hideDefaultIcon | boolean | Se deve ocultar ícone padrão (baseado no type) | Não |

Exemplo de uso

import { Input } from '@waveclass/wds-core';
import { useState } from 'react';

const MyComponent = () => {
    const [name, setName] = useState('');

    return (
	    <Input value={name} onChange={e => setName(e.target.value)} />
    );
};

Lecture Card

Props

NomeTipoDescriçãoObrigatório
typestringTipo de aula (Vídeo, Áudio, etc)Sim
namestringTítulo da aulaSim
thumbnailstringURL da thumbnail da aulaSim
teacherstringProfessor da aulaSim
durationnumberDuração da aula, em segundosSim
finishedbooleanSe o aluno terminou a aulaNão
progressnumberO quanto da aula já foi completadaNão
onClick() => voidHandler de cliqueSim
avaliablebooleanSe a aula está disponívelSim
favoritebooleanSe a aula foi favoritadaNão

Exemplo de uso

import { LectureCard } from "@waveclass/wds-core";

const MyComponent = () => {
  return (
    <LectureCard
      lectureType="video"
      title="Título"
      thumbnail="url-da-imagem"
      author="Nome do autor"
      duration=605
      pillVariant="success"
      pillText="Texto"
    />
  );
};

Number Badge

Props | Nome | Tipo | Descrição | Obrigatório | |--|--|--|--| | value | number | Número a ser exibido | Sim |

Exemplo de uso

import { NumberBadge } from '@waveclass/wds-core';

const MyComponent = () => {
    return (
	    <NumberBadge value={5} />
    );
};

Option Button

Props | Nome | Tipo | Descrição | Obrigatório | |--|--|--|--| | onClick | function => void | Handler de clique | Sim | | disabled | boolean | Se o botão está desabilitado | Não | | text | string | Texto do botão | Sim | | icon | ReactNode | Ícone do botão | Não | | customStyles | CSSProperties | Estilos customizados | Não |

Exemplo de uso

import { OptionButton } from '@waveclass/wds-core';

const MyComponent = () => {
    return (
	    <OptionButton onClick={() => alert('I was clicked!')} text='Click me' />
    );
};

Pill

Props

NomeTipoDescriçãoObrigatório
textstringTexto a ser exibidoSim
variantstringVariante de cor de fundo e bordaSim

Exemplo de uso

import { Pill } from "@waveclass/wds-core";

const MyComponent = () => {
  return (
  	<Pill variant="success" text="Texto"/>
  );
};

Regular Button

Props | Nome | Tipo | Descrição | Obrigatório | |--|--|--|--| | onClick | function => void | Handler de clique | Sim | | disabled | boolean | Se o botão está desabilitado | Não | | type | string | Tipo do botão: 'button', 'submit' ou 'reset' | Não | | text | string | Texto do botão | Sim | | variant | string | Variante de estilo: vide Storybook | Sim | | icon | ReactNode | Ícone do botão | Não | | customStyles | CSSProperties | Estilos customizados | Não |

Exemplo de uso

import { RegularButton } from '@waveclass/wds-core';

const MyComponent = () => {
    return (
	    <RegularButton onClick={() => alert('I was clicked!')} text='Click me' variant='primary-contained' />
    );
};

Search Input

Props | Nome | Tipo | Descrição | Obrigatório | |--|--|--|--| | onChange | function => void | Handler de evento de mudança | Sim | | value | string, number | Valor do input | Sim | | disabled | boolean | Se o botão está desabilitado | Não | | required | boolean | Se é de preenchimento obrigatório | Não | | max | number | Valor máximo | Não | | min | number | Valor mínimo | Não | | maxLength | number | Tamanho máximo | Não | | minLength | number | Tamanho mínimo | Não | | placeholder | string | Placeholder | Não | | showError | boolean | Se deve exibir helper text de erro | Não | | errorMessage | string | Mensagem do helper text de erro | Não | | icon | ReactNode | Ícone do input | Não | | hideDefaultIcon | boolean | Se deve ocultar ícone padrão (baseado no type) | Não |

Exemplo de uso

import { SearchInput } from '@waveclass/wds-core';
import { useState } from 'react';

const MyComponent = () => {
    const [name, setName] = useState('');

    return (
	    <SearchInput value={name} onChange={e => setName(e.target.value)} />
    );
};

Typography

Props | Nome | Tipo | Descrição | Obrigatório | |--|--|--|--| | text | string | Texto a ser exibido | Sim | | variant | string | Variante de tamanho e estilo. Vide Storybook. | Sim | | customStyles | CSSProperties | Estilos customizados | Não |

Exemplo de uso

import { Typography } from '@waveclass/wds-core';

const MyComponent = () => {
    return (
	    <Typography text='Some valueble text' variant='paragraph-bold' />
    );
};
0.0.46

2 years ago

0.0.47

2 years ago

0.0.44

2 years ago

0.0.45

2 years ago

0.0.40

2 years ago

0.0.41

2 years ago

0.0.42

2 years ago

0.0.43

2 years ago

0.0.39

2 years ago

0.0.38

2 years ago

0.0.37

2 years ago

0.0.36

2 years ago

0.0.35

2 years ago

0.0.34

2 years ago

0.0.33

2 years ago

0.0.32

2 years ago

0.0.31

2 years ago

0.0.3

2 years ago

0.0.2

2 years ago

0.0.1

2 years ago