gridnd v1.1.0
🚀 Funcionalidades
- 📦 Widgets personalizáveis: Crie um grid com itens de tamanhos variáveis (
sm,md,lg,xl). - ↔️ Arrastar e soltar: Reordene os cards de forma simples com drag-and-drop.
- 👁️ Ocultar itens: Cada card pode ser ocultado ou redimensionado.
📦 Instalação
npm install gridnd
# ou
yarn add gridnd🛠️ Uso
import { Droppable, Draggable, reorderItens } from 'gridnd'
import 'gridnd/style.css'
import { useState } from 'react';
import { Card, cards, CardProps } from '@/components/Card';
export default function Home() {
const [widgets, setWidgets] = useState<CardProps[]>(cards);
function handleDropMove(idOrigin: string, idDestiny: string) {
const indexOrigin = widgets.findIndex(item => item.id.toString() === idOrigin);
const indexDestiny = widgets.findIndex(item => item.id.toString() === idDestiny);
const result = reorderItens(widgets, indexOrigin, indexDestiny);
setWidgets(result);
}
return (
<div className="w-screen h-screen bg-slate-900 p-4">
<Droppable style={{ backgroundColor: '#1e293b' }}>
{widgets.map(item =>
<Draggable
key={item.id}
id={item.id.toString()}
size={item.size}
onDragMove={handleDropMove}
isSizingDynamic
onHidden={() => {}}
>
<Card colorStyle={item.colorStyle} title={item.title}/>
</Draggable>
)}
</Droppable>
</div>
);
}📚 Documentação
Props do componente :
Esse componente é a area de arraste dos objetos, ela é a responsável por organizar os itens em grid.
| Prop | Tipo | Descrição |
|---|---|---|
| Children | ReactNode | É necessário passarmos para dentro do componentes filhos |
Props do componente :
Esse componente é o que torna os objetos arrastáveis.
| Prop | Tipo | Descrição |
|---|---|---|
| id | String | ID do componente a ser arrastado. |
| size | 'sm' ou 'md' ou 'lg' ou 'xl' | Tamanho que o componente irá ocupar na grid |
| onDragMove | (idOrigin: string, idDestiny: string) => void | Função responsável por gerenciar o arraste dos itens |
| onHidden (opcional) | () => void | Função responsável pelo clique em ocultar os cards |
| isSizingDynamic (opcional) | Boolean | Verifica se o card pode alterar o tamanho |
| availableSizes (opcional) | ('sm' ou 'md' ou 'lg' ou 'xl')[] | Representa os tamanhos que os cards podem ter |
| Children | ReactNode | É necessário passarmos O Componente que desejamos que fique dentro do card |
Função reorder:
Essa função é uma função padrão para reordenação dos cards.
export function reorderItens<T>(list: T[], indexOrigin: number, indexDestiny:number){
const result = Array.from(list);
const [removed] = result.splice(indexOrigin, 1);
result.splice(indexDestiny, 0, removed);
return result;
}🖼️ Demonstração

🏗️ Contribuição
Contribuições são bem-vindas!
📄 Licença
Este projeto está sob a licença MIT.
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago