Compare commits

...

2 Commits

Author SHA1 Message Date
6ca8524e3e Merge pull request 'feat: add medical page' (#4) from feature/crud-medico into develop
Reviewed-on: #4
2025-09-10 15:52:22 +00:00
João Gustavo
7385e648b0 feat: add medical page 2025-09-08 22:46:59 -03:00
4 changed files with 465 additions and 32 deletions

View File

@ -0,0 +1,435 @@
"use client";
import React, { useState } from "react";
import Link from "next/link";
import { Button } from "@/components/ui/button";
import { Input } from "@/components/ui/input";
import { Label } from "@/components/ui/label";
import { Textarea } from "@/components/ui/textarea";
import {
Table,
TableBody,
TableCell,
TableHead,
TableHeader,
TableRow,
} from "@/components/ui/table";
import {
Select,
SelectContent,
SelectItem,
SelectTrigger,
SelectValue,
} from "@/components/ui/select";
import { Avatar, AvatarImage, AvatarFallback } from "@/components/ui/avatar"
import { User, FolderOpen, X, Users, MessageSquare, ClipboardList } from "lucide-react"
import { Calendar as CalendarIcon, FileText, Settings } from "lucide-react";
import {
Tooltip,
TooltipContent,
TooltipProvider,
TooltipTrigger,
} from "@/components/ui/tooltip";
const pacientes = [
{ nome: "Ana Souza", cpf: "123.456.789-00", idade: 42, statusLaudo: "Finalizado" },
{ nome: "Bruno Lima", cpf: "987.654.321-00", idade: 33, statusLaudo: "Pendente" },
{ nome: "Carla Menezes", cpf: "111.222.333-44", idade: 67, statusLaudo: "Rascunho" },
];
const medico = {
nome: "Dr. Carlos Andrade",
identificacao: "CRM 000000 • Cardiologia",
fotoUrl: "",
}
const ProfissionalPage = () => {
const [pacienteSelecionado, setPacienteSelecionado] = useState<any>(null);
const handleSave = (event: React.MouseEvent<HTMLButtonElement>) => {
event.preventDefault();
console.log("Laudo salvo!");
window.scrollTo({ top: 0, behavior: "smooth" });
};
const handleSmoothScroll = (event: React.MouseEvent<HTMLAnchorElement>, targetId: string) => {
event.preventDefault();
const element = document.getElementById(targetId);
if (element) {
element.scrollIntoView({
behavior: 'smooth',
block: 'start'
});
}
};
const handleAbrirProntuario = (paciente: any) => {
setPacienteSelecionado(paciente);
// Preencher campos da seção Gestão de Laudos
const pacienteLaudo = document.getElementById('pacienteLaudo') as HTMLInputElement;
if (pacienteLaudo) pacienteLaudo.value = paciente.nome;
// Preencher campos da seção Comunicação com o Paciente
const destinatario = document.getElementById('destinatario') as HTMLInputElement;
if (destinatario) destinatario.value = `${paciente.nome} - ${paciente.cpf}`;
// Rolar para a seção do prontuário
const prontuarioSection = document.getElementById('prontuario-paciente');
if (prontuarioSection) {
prontuarioSection.scrollIntoView({ behavior: 'smooth' });
}
};
const handleFecharProntuario = () => {
setPacienteSelecionado(null);
};
return (
<TooltipProvider>
<div className="container mx-auto px-4 py-8">
<header className="bg-white shadow-md rounded-lg p-4 mb-6 flex items-center gap-4">
<Avatar className="h-12 w-12">
<AvatarImage src={medico.fotoUrl} alt={medico.nome} />
<AvatarFallback className="bg-muted">
<User className="h-5 w-5" />
</AvatarFallback>
</Avatar>
<div className="min-w-0">
<p className="text-sm text-muted-foreground truncate">Conta do profissional</p>
<h2 className="text-lg font-semibold leading-none truncate">{medico.nome}</h2>
<p className="text-sm text-muted-foreground truncate">{medico.identificacao}</p>
</div>
</header>
<div className="grid grid-cols-1 md:grid-cols-[220px_1fr] gap-6">
{/* Sidebar */}
<aside className="md:sticky md:top-8 h-fit">
<nav className="bg-white shadow-md rounded-lg p-3 space-y-1">
<Button asChild variant="ghost" className="w-full justify-start hover:bg-primary hover:text-primary-foreground">
<a
href="#calendario"
onClick={(e) => handleSmoothScroll(e, 'calendario')}
className="flex items-center"
>
<CalendarIcon className="mr-2 h-4 w-4" />
Calendário
</a>
</Button>
<Button asChild variant="ghost" className="w-full justify-start hover:bg-primary hover:text-primary-foreground">
<a
href="#gerenciamento-pacientes"
onClick={(e) => handleSmoothScroll(e, 'gerenciamento-pacientes')}
className="flex items-center"
>
<Users className="mr-2 h-4 w-4" />
Pacientes
</a>
</Button>
<Button asChild variant="ghost" className="w-full justify-start hover:bg-primary hover:text-primary-foreground">
<a
href="#prontuario-paciente"
onClick={(e) => handleSmoothScroll(e, 'prontuario-paciente')}
className="flex items-center"
>
<ClipboardList className="mr-2 h-4 w-4" />
Prontuário
</a>
</Button>
<Button asChild variant="ghost" className="w-full justify-start hover:bg-primary hover:text-primary-foreground">
<a
href="#gestao-laudos"
onClick={(e) => handleSmoothScroll(e, 'gestao-laudos')}
className="flex items-center"
>
<FileText className="mr-2 h-4 w-4" />
Laudos
</a>
</Button>
<Button asChild variant="ghost" className="w-full justify-start hover:bg-primary hover:text-primary-foreground">
<a
href="#comunicacao-paciente"
onClick={(e) => handleSmoothScroll(e, 'comunicacao-paciente')}
className="flex items-center"
>
<MessageSquare className="mr-2 h-4 w-4" />
Comunicação
</a>
</Button>
<Button variant="ghost" className="w-full justify-start cursor-pointer hover:bg-primary hover:text-primary-foreground">
<Settings className="mr-2 h-4 w-4" />
Meu Perfil
</Button>
</nav>
</aside>
<main>
<div className="flex justify-between items-center mb-4">
<h1 className="text-3xl font-bold">Área do Profissional de Saúde</h1>
<Button asChild>
<Link href="/">Início</Link>
</Button>
</div>
<p className="mb-8">Bem-vindo à sua área exclusiva.</p>
<section id="calendario" className="bg-white shadow-md rounded-lg p-6 mb-8">
<h2 className="text-2xl font-bold mb-4">Calendário</h2>
<p className="text-sm text-muted-foreground">
Seção do calendário (integração pode ser adicionada depois).
</p>
</section>
<div id="gerenciamento-pacientes" className="bg-white shadow-md rounded-lg p-6 mb-8">
<h2 className="text-2xl font-bold mb-4">Gerenciamento de Pacientes</h2>
<Table>
<TableHeader>
<TableRow>
<TableHead>Paciente</TableHead>
<TableHead>CPF</TableHead>
<TableHead>Idade</TableHead>
<TableHead>Status do laudo</TableHead>
<TableHead>Ações</TableHead>
</TableRow>
</TableHeader>
<TableBody>
{pacientes.map((paciente) => (
<TableRow key={paciente.cpf}>
<TableCell className="font-medium">{paciente.nome}</TableCell>
<TableCell>{paciente.cpf}</TableCell>
<TableCell>{paciente.idade}</TableCell>
<TableCell>{paciente.statusLaudo}</TableCell>
<TableCell>
<div className="flex items-center gap-2">
<Tooltip>
<TooltipTrigger asChild>
<Button
variant="outline"
size="sm"
className="border-primary text-primary hover:bg-primary hover:text-white cursor-pointer"
onClick={() => handleAbrirProntuario(paciente)}
>
<FolderOpen className="h-4 w-4" />
</Button>
</TooltipTrigger>
<TooltipContent>
<p>Detalhes do Paciente</p>
</TooltipContent>
</Tooltip>
</div>
</TableCell>
</TableRow>
))}
</TableBody>
</Table>
</div>
<div id="prontuario-paciente" className="bg-white shadow-md rounded-lg p-6 mb-8">
<h2 className="text-2xl font-bold mb-4">Prontuário do Paciente</h2>
{pacienteSelecionado && (
<div className="bg-primary/10 border border-primary/20 rounded-lg p-4 mb-6">
<div className="flex justify-between items-center mb-2">
<h3 className="font-semibold text-primary">Dados do Paciente</h3>
<Button
variant="ghost"
size="sm"
onClick={handleFecharProntuario}
className="text-primary hover:text-primary hover:bg-primary/10 h-6 w-6 p-0"
>
<X className="h-4 w-4" />
</Button>
</div>
<div className="grid grid-cols-1 md:grid-cols-3 gap-4 text-sm">
<div>
<span className="font-medium text-primary">Nome:</span>
<p className="text-primary/80">{pacienteSelecionado.nome}</p>
</div>
<div>
<span className="font-medium text-primary">CPF:</span>
<p className="text-primary/80">{pacienteSelecionado.cpf}</p>
</div>
<div>
<span className="font-medium text-primary">Idade:</span>
<p className="text-primary/80">{pacienteSelecionado.idade} anos</p>
</div>
</div>
</div>
)}
<div className="space-y-6">
<div>
<Label htmlFor="dataConsulta">Data da consulta</Label>
<p id="dataConsulta" className="text-sm text-muted-foreground">
03/09/2025
</p>
</div>
<div className="grid grid-cols-1 md:grid-cols-2 gap-6">
<div className="space-y-2">
<Label htmlFor="cid10">CID-10</Label>
<Input id="cid10" placeholder="Insira o código CID-10" />
</div>
<div className="space-y-2">
<Label htmlFor="retornoAgendado">Retorno Agendado</Label>
<Input id="retornoAgendado" type="date" />
</div>
</div>
<div className="space-y-2">
<Label htmlFor="anamnese">Anamnese</Label>
<Textarea id="anamnese" placeholder="Descreva a anamnese do paciente" />
</div>
<div className="space-y-2">
<Label htmlFor="exameFisico">Exame Físico</Label>
<Textarea id="exameFisico" placeholder="Descreva o exame físico" />
</div>
<div className="space-y-2">
<Label htmlFor="hipoteses">Hipóteses Diagnósticas</Label>
<Textarea id="hipoteses" placeholder="Liste as hipóteses diagnósticas" />
</div>
<div className="space-y-2">
<Label htmlFor="conduta">Conduta Médica</Label>
<Textarea id="conduta" placeholder="Descreva a conduta médica" />
</div>
<div className="space-y-2">
<Label htmlFor="prescricoes">Prescrições</Label>
<Textarea id="prescricoes" placeholder="Insira as prescrições" />
</div>
<div className="flex justify-end">
<Button onClick={handleSave}>Salvar Informações</Button>
</div>
</div>
</div>
<section id="gestao-laudos" className="bg-white shadow-md rounded-lg p-6 mb-8">
<h2 className="text-2xl font-bold mb-4">Gestão de Laudos</h2>
<div className="space-y-6">
<div className="grid grid-cols-1 md:grid-cols-2 gap-6">
<div className="space-y-2">
<Label htmlFor="tipoLaudo">Tipo de laudo</Label>
<Select name="tipoLaudo">
<SelectTrigger id="tipoLaudo" className="hover:border-primary focus:border-primary cursor-pointer">
<SelectValue placeholder="Selecione o tipo de laudo" />
</SelectTrigger>
<SelectContent className="bg-white border border-gray-200 ">
<SelectItem value="exame-sangue" className="hover:bg-primary hover:text-primary-foreground focus:bg-primary focus:text-primary-foreground cursor-pointer">Exame de Sangue</SelectItem>
<SelectItem value="raio-x" className="hover:bg-primary hover:text-primary-foreground focus:bg-primary focus:text-primary-foreground cursor-pointer">RaioX</SelectItem>
<SelectItem value="ultrassom" className="hover:bg-primary hover:text-primary-foreground focus:bg-primary focus:text-primary-foreground cursor-pointer">Ultrassom</SelectItem>
<SelectItem value="tomografia" className="hover:bg-primary hover:text-primary-foreground focus:bg-primary focus:text-primary-foreground cursor-pointer">Tomografia</SelectItem>
<SelectItem value="ressonancia" className="hover:bg-primary hover:text-primary-foreground focus:bg-primary focus:text-primary-foreground cursor-pointer">Ressonância</SelectItem>
</SelectContent>
</Select>
</div>
<div className="space-y-2">
<Label htmlFor="pacienteLaudo">Paciente</Label>
<Input
id="pacienteLaudo"
placeholder="Nome do Paciente"
disabled
className="bg-muted cursor-not-allowed text-gray-700 disabled:text-gray-900"
/>
</div>
</div>
<div className="grid grid-cols-1 md:grid-cols-2 gap-6">
<div>
<Label htmlFor="medicoResponsavel">Médico Responsável</Label>
<p id="medicoResponsavel" className="text-sm text-muted-foreground">
Dr. Carlos Andrade
</p>
</div>
<div>
<Label htmlFor="dataEmissao">Data de emissão</Label>
<p id="dataEmissao" className="text-sm text-muted-foreground">
03/09/2025
</p>
</div>
</div>
<div className="space-y-2">
<Label htmlFor="conteudoLaudo">Conteúdo do Laudo</Label>
<Textarea
id="conteudoLaudo"
placeholder="Insira o conteúdo detalhado do laudo"
rows={8}
/>
</div>
<div className="grid grid-cols-1 md:grid-cols-2 gap-6">
<div className="space-y-2">
<Label htmlFor="status">Status</Label>
<Select>
<SelectTrigger id="status" className="hover:border-primary focus:border-primary cursor-pointer">
<SelectValue placeholder="Selecione o status" />
</SelectTrigger>
<SelectContent className="bg-white border border-gray-200">
<SelectItem value="rascunho" className="hover:bg-primary hover:text-primary-foreground focus:bg-primary focus:text-primary-foreground cursor-pointer">Rascunho</SelectItem>
<SelectItem value="finalizado" className="hover:bg-primary hover:text-primary-foreground focus:bg-primary focus:text-primary-foreground cursor-pointer">Finalizado</SelectItem>
<SelectItem value="pendente" className="hover:bg-primary hover:text-primary-foreground focus:bg-primary focus:text-primary-foreground cursor-pointer">Pendente</SelectItem>
</SelectContent>
</Select>
</div>
<div className="space-y-2">
<Label htmlFor="assinatura">Assinatura digital (CRM)</Label>
<Input id="assinatura" placeholder="Insira seu CRM para assinar" />
</div>
</div>
<div className="flex justify-end mt-6">
<Button onClick={handleSave}>Salvar Laudo</Button>
</div>
</div>
</section>
<div id="comunicacao-paciente" className="bg-white shadow-md rounded-lg p-6 mb-8">
<h2 className="text-2xl font-bold mb-4">Comunicação com o Paciente</h2>
<div className="space-y-6">
<div className="grid grid-cols-1 md:grid-cols-2 gap-6">
<div className="space-y-2">
<Label htmlFor="destinatario">Destinatário</Label>
<Input
id="destinatario"
placeholder="Nome do Paciente ou CPF"
disabled
className="bg-muted cursor-not-allowed text-gray-700 disabled:text-gray-900"
/>
</div>
<div className="space-y-2">
<Label htmlFor="tipoMensagem">Tipo de mensagem</Label>
<Select>
<SelectTrigger id="tipoMensagem" className="hover:border-primary focus:border-primary cursor-pointer">
<SelectValue placeholder="Selecione o tipo" />
</SelectTrigger>
<SelectContent className="bg-white border border-gray-200">
<SelectItem value="lembrete" className="hover:bg-primary hover:text-primary-foreground focus:bg-primary focus:text-primary-foreground cursor-pointer">Lembrete de Consulta</SelectItem>
<SelectItem value="resultado" className="hover:bg-primary hover:text-primary-foreground focus:bg-primary focus:text-primary-foreground cursor-pointer">Resultado de Exame</SelectItem>
<SelectItem value="instrucao" className="hover:bg-primary hover:text-primary-foreground focus:bg-primary focus:text-primary-foreground cursor-pointer">Instruções Pós-Consulta</SelectItem>
<SelectItem value="outro" className="hover:bg-primary hover:text-primary-foreground focus:bg-primary focus:text-primary-foreground cursor-pointer">Outro</SelectItem>
</SelectContent>
</Select>
</div>
</div>
<div className="grid grid-cols-1 md:grid-cols-2 gap-6">
<div>
<Label htmlFor="dataEnvio">Data de envio</Label>
<p id="dataEnvio" className="text-sm text-muted-foreground">03/09/2025</p>
</div>
<div>
<Label htmlFor="statusEntrega">Status da entrega</Label>
<p id="statusEntrega" className="text-sm text-muted-foreground">Pendente</p>
</div>
</div>
<div className="space-y-2">
<Label>Resposta do paciente</Label>
<div className="border rounded-md p-3 bg-muted/40 space-y-2">
<p className="text-sm">"Ok, obrigado pelo lembrete!"</p>
<p className="text-xs text-muted-foreground">03/09/2025 14:30</p>
</div>
</div>
<div className="flex justify-end mt-6">
<Button onClick={handleSave}>Registrar Comunicação</Button>
</div>
</div>
</div>
</main>
</div>
</div>
</TooltipProvider>
);
};
export default ProfissionalPage;

View File

@ -40,19 +40,15 @@ export function Header() {
> >
Sou Paciente Sou Paciente
</Button> </Button>
<Link href="/dashboard"> <Button asChild className="bg-primary hover:bg-primary/90 text-primary-foreground">
<Button className="bg-primary hover:bg-primary/90 text-primary-foreground"> <Link href="/profissional">Sou Profissional de Saúde</Link>
Sou Profissional de Saúde
</Button> </Button>
</Link>
<Link href="/dashboard">
<Button <Button
variant="outline" variant="outline"
className="text-slate-700 border-slate-600 hover:bg-slate-700 hover:text-white bg-transparent" className="text-slate-700 border-slate-600 hover:bg-slate-700 hover:text-white bg-transparent"
> >
Sou Administrador de uma Clínica Sou Administrador de uma Clínica
</Button> </Button>
</Link>
</div> </div>
{/* Mobile Menu Button */} {/* Mobile Menu Button */}
@ -86,19 +82,15 @@ export function Header() {
> >
Sou Paciente Sou Paciente
</Button> </Button>
<Link href="/dashboard"> <Button asChild className="bg-primary hover:bg-primary/90 text-primary-foreground">
<Button className="bg-primary hover:bg-primary/90 text-primary-foreground w-full"> <Link href="/profissional" onClick={() => setIsMenuOpen(false)}>Sou Profissional de Saúde</Link>
Sou Profissional de Saúde
</Button> </Button>
</Link>
<Link href="/dashboard">
<Button <Button
variant="outline" variant="outline"
className="text-slate-700 border-slate-600 hover:bg-slate-700 hover:text-white bg-transparent w-full" className="text-slate-700 border-slate-600 hover:bg-slate-700 hover:text-white bg-transparent"
> >
Sou Administrador de uma Clínica Sou Administrador de uma Clínica
</Button> </Button>
</Link>
</div> </div>
</nav> </nav>
</div> </div>

View File

@ -1,5 +1,6 @@
import { Button } from "@/components/ui/button" import { Button } from "@/components/ui/button"
import { Shield, Clock, Users } from "lucide-react" import { Shield, Clock, Users } from "lucide-react"
import Link from "next/link"
export function HeroSection() { export function HeroSection() {
return ( return (
@ -32,7 +33,7 @@ export function HeroSection() {
variant="outline" variant="outline"
className="text-primary border-primary hover:bg-primary hover:text-primary-foreground bg-transparent" className="text-primary border-primary hover:bg-primary hover:text-primary-foreground bg-transparent"
> >
Sou Profissional de Saúde <Link href="/profissional">Sou Profissional de Saúde</Link>
</Button> </Button>
</div> </div>
</div> </div>

View File

@ -2465,7 +2465,7 @@
"version": "19.1.12", "version": "19.1.12",
"resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.12.tgz", "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.12.tgz",
"integrity": "sha512-cMoR+FoAf/Jyq6+Df2/Z41jISvGZZ2eTlnsaJRptmZ76Caldwy1odD4xTr/gNV9VLj0AWgg/nmkevIyUfIIq5w==", "integrity": "sha512-cMoR+FoAf/Jyq6+Df2/Z41jISvGZZ2eTlnsaJRptmZ76Caldwy1odD4xTr/gNV9VLj0AWgg/nmkevIyUfIIq5w==",
"dev": true, "devOptional": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"csstype": "^3.0.2" "csstype": "^3.0.2"
@ -2475,7 +2475,7 @@
"version": "19.1.9", "version": "19.1.9",
"resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.1.9.tgz", "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.1.9.tgz",
"integrity": "sha512-qXRuZaOsAdXKFyOhRBg6Lqqc0yay13vN7KrIg4L7N4aaHN68ma9OK3NE1BoDFgFOTfM7zg+3/8+2n8rLUH3OKQ==", "integrity": "sha512-qXRuZaOsAdXKFyOhRBg6Lqqc0yay13vN7KrIg4L7N4aaHN68ma9OK3NE1BoDFgFOTfM7zg+3/8+2n8rLUH3OKQ==",
"dev": true, "devOptional": true,
"license": "MIT", "license": "MIT",
"peerDependencies": { "peerDependencies": {
"@types/react": "^19.0.0" "@types/react": "^19.0.0"
@ -2722,7 +2722,7 @@
"version": "3.1.3", "version": "3.1.3",
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
"integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
"dev": true, "devOptional": true,
"license": "MIT" "license": "MIT"
}, },
"node_modules/d3-array": { "node_modules/d3-array": {
@ -3473,7 +3473,6 @@
"version": "8.5.6", "version": "8.5.6",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz",
"integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
"dev": true,
"funding": [ "funding": [
{ {
"type": "opencollective", "type": "opencollective",
@ -3562,6 +3561,13 @@
"react": "^16.8.0 || ^17 || ^18 || ^19" "react": "^16.8.0 || ^17 || ^18 || ^19"
} }
}, },
"node_modules/react-is": {
"version": "19.1.1",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-19.1.1.tgz",
"integrity": "sha512-tr41fA15Vn8p4X9ntI+yCyeGSf1TlYaY5vlTZfQmeLBrFo3psOPX6HhTDnFNL9uj3EhP0KAQ80cugCl4b4BERA==",
"license": "MIT",
"peer": true
},
"node_modules/react-redux": { "node_modules/react-redux": {
"version": "9.2.0", "version": "9.2.0",
"resolved": "https://registry.npmjs.org/react-redux/-/react-redux-9.2.0.tgz", "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-9.2.0.tgz",
@ -3851,7 +3857,6 @@
"version": "4.1.12", "version": "4.1.12",
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.12.tgz", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.12.tgz",
"integrity": "sha512-DzFtxOi+7NsFf7DBtI3BJsynR+0Yp6etH+nRPTbpWnS2pZBaSksv/JGctNwSWzbFjp0vxSqknaUylseZqMDGrA==", "integrity": "sha512-DzFtxOi+7NsFf7DBtI3BJsynR+0Yp6etH+nRPTbpWnS2pZBaSksv/JGctNwSWzbFjp0vxSqknaUylseZqMDGrA==",
"dev": true,
"license": "MIT" "license": "MIT"
}, },
"node_modules/tailwindcss-animate": { "node_modules/tailwindcss-animate": {