1.5.0 • Published 5 months ago

@convertcompany/ui v1.5.0

Weekly downloads
-
License
-
Repository
-
Last release
5 months ago

@convertcompany/ui

Biblioteca de componentes da Convert Company, baseada no ShadCN UI, com variações visuais e funcionais internas para projetos React.


📦 Instalação

npm install @convertcompany/ui

🔧 Uso

✅ Componentes leves (importação padrão)

Você pode importar diretamente da raiz:

import { Button, Input, Accordion } from "@convertcompany/ui";

Lista de componentes disponíveis por padrão:

  • Accordion
  • Badge
  • Button
  • Callout
  • Card
  • Checkbox
  • Collapsible
  • ContextMenu
  • CopyToClipboard
  • Dialog
  • Dropdown
  • InputOtp
  • Input
  • Link
  • Popover
  • Progress
  • Radio
  • ScrollArea
  • Select
  • Separator
  • Sheet
  • Skeleton
  • Switch
  • Table
  • Tabs
  • Tag
  • Textarea
  • Tooltip
  • Typography

📌 AutoComplete

Componente de seleção única com suporte a busca (autocomplete) e ícones.

✅ Props

PropriedadeTipoDescrição
options{ label: string; value: string; icon?: React.ComponentType }[]Lista de opções para selecionar.
onValueChange(value: string \| null) => voidCallback ao selecionar ou limpar a opção.
valuestring \| nullValor selecionado atual.
placeholderstringTexto exibido quando nada estiver selecionado.
emptyStateTextstringMensagem exibida quando nenhuma opção for encontrada.
modalPopoverbooleanDefine se o popover deve ser modal.
classNamestringClasse CSS adicional para o botão de trigger.
childrenReact.ReactNodeSe passado, sobrescreve o botão padrão e permite customização do trigger.
...propsReact.ButtonHTMLAttributes<HTMLButtonElement>Atributos extras aplicados ao botão (quando não há children).

📋 Exemplo de uso

<AutoComplete
  options={[
    { label: "Admin", value: "admin" },
    { label: "Usuário", value: "user" },
  ]}
  value={role}
  onValueChange={setRole}
/>

🧩 MultiSelect

Componente de seleção múltipla com suporte a badges, busca, seleção total e limite de seleção.

✅ Props

PropriedadeTipoDescrição
options{ label: string; value: string; icon?: React.ComponentType }[]Lista de opções.
onValueChange(value: string[]) => voidCallback com os valores selecionados.
defaultValuestring[]Valores iniciais selecionados.
placeholderstringTexto exibido quando nenhuma opção estiver selecionada.
selectAllTextstringTexto exibido para a opção "Selecionar tudo".
emptyStateTextstringMensagem exibida quando nenhuma opção for encontrada.
maxCountnumberQuantidade máxima de badges mostradas antes de resumir com "+X opções".
maxSelectionsnumberLimita o número máximo de seleções possíveis.
modalPopoverbooleanDefine se o popover deve ser modal.
renderOutsidebooleanExibe os badges abaixo do botão, fora do trigger.
classNamestringClasse CSS adicional para o botão de trigger.
canSelectAllbooleanExibe a opção de "Selecionar tudo".
canClearbooleanPermite limpar todas as seleções.
canCreateboolean(Reservado para futura criação de opções customizadas)
showActionFooterbooleanExibe rodapé com botões "Limpar" e "Fechar".
listSelectedOptionsbooleanMostra itens já selecionados na lista de opções.
renderValues(items: { value: string; onRemove: () => void }[]) => ReactNodeFunção customizada para renderizar os badges selecionados.
...propsReact.ButtonHTMLAttributes<HTMLButtonElement>Atributos extras aplicados ao botão.

📋 Exemplo de uso

<MultiSelect
  options={[
    { label: "Facebook", value: "fb" },
    { label: "Instagram", value: "ig" },
    { label: "WhatsApp", value: "wa" },
  ]}
  defaultValue={["wa"]}
  onValueChange={setChannels}
  maxSelections={2}
/>

⚠️ Componentes pesados (importar via subpaths)

Esses componentes têm dependências maiores e não estão incluídos automaticamente no bundle principal. Você deve importar separadamente:

import { PhoneInput } from "@convertcompany/ui/phone-input";
import { Toaster } from "@convertcompany/ui/toast";
import { Command, CommandInput, CommandItem } from "@convertcompany/ui/command";

Subpaths disponíveis:

  • @convertcompany/ui/phone-input → Usa react-phone-number-input
  • @convertcompany/ui/toast → Usa sonner
  • @convertcompany/ui/command → Usa cmdk

🎨 Configuração do TailwindCSS

tailwind.config.ts

import preset from "@convertcompany/ui/preset";

export default {
  content: [...preset.content, "./index.html", "./src/**/*.{js,ts,jsx,tsx}", "./playground/**/*.{js,ts,jsx,tsx}"],
  presets: [preset],
};

index.css

@tailwind base;
@tailwind components;
@tailwind utilities;

@layer base {
  :root {
    --font-sans: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
    --radius: 0.7rem;
    --radius-sm: calc(var(--radius) - 4px);
    --radius-md: calc(var(--radius) - 2px);
    --radius-lg: var(--radius);
    --radius-xl: calc(var(--radius) + 4px);
    --color-background: 255, 255, 255;
    --color-foreground: 18, 18, 18;
    --color-muted-foreground: 107, 114, 128;
    --color-card: 255, 255, 255;
    --color-primary: 31, 169, 97;
    --color-primary-foreground: 255, 255, 255;
    --color-secondary: 242, 242, 242;
    --color-muted: 149, 167, 184;
    --color-border: 227, 227, 229;
    --color-popover: 0, 0, 0;
    --color-popover-foreground: 255, 255, 255;
    --color-ring: var(--color-primary);
    --color-success: 22, 163, 74;
    --color-success-foreground: 255, 255, 255;
    --color-warning: 252, 211, 77;
    --color-warning-foreground: 69, 26, 3;
    --color-danger: 220, 38, 38;
    --color-danger-foreground: 255, 255, 255;
    --color-info: 56, 189, 248;
    --color-info-foreground: 8, 47, 73;
    --color-vertt-muted: 244, 232, 255;
    --color-vertt-lighter: 193, 132, 252;
    --color-vertt-light: 168, 85, 247;
    --color-vertt: 145, 51, 234;
    --color-vertt-dark: 122, 34, 206;
    --color-vertt-darker: 102, 33, 168;
  }

  .dark {
    --color-background: 11, 22, 33;
    --color-foreground: 255, 255, 255;
    --color-muted-foreground: 223, 225, 229;
    --color-card: 33, 44, 55;
    --color-secondary: 22, 33, 44;
    --color-border: 255, 255, 255, 0.07;
    --color-vertt-muted: 214, 171, 255, 0.1;
    --color-vertt: 168, 85, 247;
  }
}

@layer base {
  * {
    border-color: rgba(var(--color-border));
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
  }

  body {
    background-color: rgb(var(--color-background));
    color: rgb(var(--color-foreground));
  }

  ::-webkit-scrollbar {
    width: 8px;
    height: 8px;
  }

  ::-webkit-scrollbar-track {
    background: rgba(var(--color-muted), 0.2);
  }

  ::-webkit-scrollbar-thumb {
    background: rgba(var(--color-muted), 0.25);
    border-radius: 2.5px;
  }

  ::-webkit-scrollbar-thumb:hover {
    background: rgba(var(--color-muted), 0.35);
  }
}

🤝 Contribuição

Sinta-se livre para sugerir melhorias ou abrir PRs!


📄 Licença

MIT © Convert Company

1.5.0

5 months ago

1.4.2

5 months ago

1.4.1

5 months ago

1.4.0

5 months ago

1.3.10

5 months ago

1.3.9

5 months ago

1.3.8

5 months ago

1.3.7

5 months ago

1.3.6

5 months ago

1.3.5

5 months ago

1.3.4

5 months ago

1.3.3

5 months ago

1.3.2

5 months ago

1.3.1

5 months ago

1.3.0

5 months ago

1.2.0

6 months ago

1.1.6

6 months ago

1.1.5

6 months ago

1.1.4

6 months ago

1.1.3

6 months ago

1.1.2

6 months ago

1.1.1

6 months ago

1.1.0

6 months ago

1.0.0

6 months ago

0.2.0

6 months ago

0.1.3

6 months ago

0.1.2

6 months ago

0.1.1

6 months ago

0.0.14

7 months ago

0.0.13

7 months ago

0.0.12

7 months ago

0.0.10

7 months ago

0.0.9

7 months ago

0.0.8

7 months ago

0.0.7

7 months ago

0.0.6

7 months ago

0.0.5

7 months ago

0.0.4

7 months ago

0.0.3

7 months ago

0.0.2

7 months ago

0.0.1

7 months ago

0.1.0

7 months ago