feat: add canvas-confetti integration and AuroraButton component; enhance UI with animations and improve button interactions

This commit is contained in:
2025-08-26 15:58:30 -06:00
parent 56b0dc8a62
commit 196aea5df9
8 changed files with 143 additions and 41 deletions

View File

@@ -13,6 +13,8 @@ import gsap from 'gsap'
import { ScrollTrigger } from 'gsap/ScrollTrigger'
import { AcademicSections } from '@/components/planes/academic-sections'
import { Tabs, TabsContent, TabsList, TabsTrigger } from '@radix-ui/react-tabs'
import confetti from 'canvas-confetti'
import { AuroraButton } from '@/components/effect/aurora-button'
gsap.registerPlugin(ScrollTrigger)
@@ -407,6 +409,8 @@ function AdjustAIButton({ plan }: { plan: PlanFull }) {
body: JSON.stringify({ prompt, plan_id: plan.id }),
}).catch(() => { })
setLoading(false)
confetti({ particleCount: 120, spread: 80, origin: { y: 0.6 } })
setOpen(false)
}
@@ -423,9 +427,9 @@ function AdjustAIButton({ plan }: { plan: PlanFull }) {
</DialogHeader>
<Textarea value={prompt} onChange={(e) => setPrompt(e.target.value)} placeholder="Ej.: Enfatiza ciberseguridad y proyectos prácticos…" className="min-h-[120px]" />
<DialogFooter>
<Button onClick={apply} disabled={!prompt.trim() || loading}>
<AuroraButton onClick={apply} disabled={!prompt.trim() || loading}>
{loading ? 'Aplicando…' : 'Aplicar ajuste'}
</Button>
</AuroraButton>
</DialogFooter>
</DialogContent>
</Dialog>
@@ -519,6 +523,8 @@ function AddAsignaturaButton({
}),
})
if (!res.ok) throw new Error(await res.text())
confetti({ particleCount: 120, spread: 80, origin: { y: 0.6 } })
setOpen(false); onAdded?.()
} catch (e: any) {
alert(e?.message ?? "Error al generar la asignatura")
@@ -616,11 +622,13 @@ function AddAsignaturaButton({
<DialogFooter>
<Button variant="outline" onClick={() => setOpen(false)}>Cancelar</Button>
<Button onClick={submit} disabled={saving || !canSubmit}>
<Button >
</Button>
<AuroraButton onClick={submit} disabled={saving || !canSubmit}>
{saving
? (mode === "manual" ? "Guardando…" : "Generando…")
: (mode === "manual" ? "Crear" : "Generar e insertar")}
</Button>
</AuroraButton>
</DialogFooter>
</DialogContent>
</Dialog>