@fluencypassdevs/cycle 1.28.0 → 1.30.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/bin/components.generated.mjs +218 -10
  2. package/dist/{chunk-JPEQ4BYK.js → chunk-5AH2PNYW.js} +68 -3
  3. package/dist/chunk-5AH2PNYW.js.map +1 -0
  4. package/dist/{chunk-32NHCUEZ.js → chunk-C6VTOLNM.js} +2 -2
  5. package/dist/{chunk-32NHCUEZ.js.map → chunk-C6VTOLNM.js.map} +1 -1
  6. package/dist/{chunk-RPU3FY62.js → chunk-CLL76ZXJ.js} +3 -3
  7. package/dist/{chunk-RPU3FY62.js.map → chunk-CLL76ZXJ.js.map} +1 -1
  8. package/dist/chunk-KSAVYUNJ.js +3 -0
  9. package/dist/chunk-KSAVYUNJ.js.map +1 -0
  10. package/dist/{chunk-NKBTC4IF.js → chunk-MOSB7T52.js} +3 -3
  11. package/dist/{chunk-NKBTC4IF.js.map → chunk-MOSB7T52.js.map} +1 -1
  12. package/dist/{chunk-2KFWBA76.js → chunk-MQTQIX4N.js} +3 -3
  13. package/dist/{chunk-2KFWBA76.js.map → chunk-MQTQIX4N.js.map} +1 -1
  14. package/dist/{chunk-AHHT4FZS.js → chunk-NMIDTIUE.js} +3 -3
  15. package/dist/{chunk-AHHT4FZS.js.map → chunk-NMIDTIUE.js.map} +1 -1
  16. package/dist/{chunk-OLYW5LVG.js → chunk-NYO2JMQ7.js} +3 -3
  17. package/dist/{chunk-OLYW5LVG.js.map → chunk-NYO2JMQ7.js.map} +1 -1
  18. package/dist/{chunk-CLMO3IRS.js → chunk-OFGJDRRR.js} +61 -50
  19. package/dist/chunk-OFGJDRRR.js.map +1 -0
  20. package/dist/{chunk-T73O7F3B.js → chunk-R3RHMROE.js} +3 -3
  21. package/dist/{chunk-T73O7F3B.js.map → chunk-R3RHMROE.js.map} +1 -1
  22. package/dist/{chunk-GI7MEYSN.js → chunk-T5U4Q37E.js} +3 -3
  23. package/dist/{chunk-GI7MEYSN.js.map → chunk-T5U4Q37E.js.map} +1 -1
  24. package/dist/chunk-TJ4O3VAL.js +274 -0
  25. package/dist/chunk-TJ4O3VAL.js.map +1 -0
  26. package/dist/chunk-VE4QISBD.js +3 -0
  27. package/dist/chunk-VE4QISBD.js.map +1 -0
  28. package/dist/chunk-VMUNB4RA.js +102 -0
  29. package/dist/chunk-VMUNB4RA.js.map +1 -0
  30. package/dist/{chunk-KSEDDFGG.js → chunk-VZ2GYSNK.js} +3 -3
  31. package/dist/{chunk-KSEDDFGG.js.map → chunk-VZ2GYSNK.js.map} +1 -1
  32. package/dist/{chunk-LALM2LHM.js → chunk-W62WANUP.js} +2 -2
  33. package/dist/{chunk-LALM2LHM.js.map → chunk-W62WANUP.js.map} +1 -1
  34. package/dist/composites/chat-thread.d.ts +18 -7
  35. package/dist/composites/chat-thread.js +10 -7
  36. package/dist/index.d.ts +2 -0
  37. package/dist/index.js +22 -18
  38. package/dist/marketing/effects/index.js +1 -1
  39. package/dist/marketing/motion/index.js +1 -1
  40. package/dist/ui/alert-dialog.js +3 -2
  41. package/dist/ui/alert.d.ts +1 -1
  42. package/dist/ui/badge.js +2 -1
  43. package/dist/ui/button.js +2 -1
  44. package/dist/ui/chat-message.js +4 -3
  45. package/dist/ui/chat-panel.js +3 -2
  46. package/dist/ui/command.js +4 -3
  47. package/dist/ui/dialog.js +3 -2
  48. package/dist/ui/error-state.d.ts +61 -0
  49. package/dist/ui/error-state.js +10 -0
  50. package/dist/ui/error-state.js.map +1 -0
  51. package/dist/ui/like-dislike.js +3 -2
  52. package/dist/ui/live-waiting.js +3 -2
  53. package/dist/ui/message-bar.d.ts +4 -1
  54. package/dist/ui/message-bar.js +4 -1
  55. package/dist/ui/pagination.js +3 -2
  56. package/dist/ui/status-banner.d.ts +32 -0
  57. package/dist/ui/status-banner.js +12 -0
  58. package/dist/ui/status-banner.js.map +1 -0
  59. package/package.json +1 -1
  60. package/dist/chunk-CLMO3IRS.js.map +0 -1
  61. package/dist/chunk-JPEQ4BYK.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/ui/like-dislike.tsx"],"names":["e"],"mappings":"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","file":"chunk-RPU3FY62.js","sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { ThumbsUp, ThumbsDown, X, Check } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\nimport { CycleIcon } from \"@/components/icons\"\nimport { Button } from \"@/components/ui/button\"\nimport { Textarea } from \"@/components/ui/textarea\"\n\n/* ---------------------------------- CVA ---------------------------------- */\n\nconst likeDislikeVariants = cva(\"inline-flex flex-col\", {\n variants: {\n size: {\n default: \"gap-2\",\n xs: \"gap-1.5\",\n sm: \"gap-1.5\",\n lg: \"gap-3\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n})\n\n/** Maps component size → toggle button dimensions + icon size + burst ray size */\nconst sizeConfig = {\n xs: { iconBtn: \"size-6\", icon: \"xs\" as const, text: \"text-xs\", rayH: \"h-1\", rayW: \"w-[2px]\" },\n sm: { iconBtn: \"size-8\", icon: \"xs\" as const, text: \"text-xs\", rayH: \"h-1.5\", rayW: \"w-[2px]\" },\n default: { iconBtn: \"size-10\", icon: \"sm\" as const, text: \"text-sm\", rayH: \"h-2\", rayW: \"w-[2px]\" },\n lg: { iconBtn: \"size-12\", icon: \"sm\" as const, text: \"text-base\", rayH: \"h-2.5\", rayW: \"w-[3px]\" },\n} as const\n\n/** Angles and colors for the burst rays */\nconst BURST_RAYS = [\n { angle: 0, delay: \"0ms\" },\n { angle: 45, delay: \"30ms\" },\n { angle: 90, delay: \"60ms\" },\n { angle: 135, delay: \"20ms\" },\n { angle: 180, delay: \"50ms\" },\n { angle: 225, delay: \"10ms\" },\n { angle: 270, delay: \"40ms\" },\n { angle: 315, delay: \"25ms\" },\n]\n\n/* -------------------------------- Types --------------------------------- */\n\nexport type LikeDislikeValue = \"like\" | \"dislike\" | null\n\nexport interface LikeDislikeProps\n extends Omit<React.ComponentProps<\"div\">, \"onChange\" | \"defaultValue\">,\n VariantProps<typeof likeDislikeVariants> {\n /** Current value — controlled */\n value?: LikeDislikeValue\n /** Default value — uncontrolled */\n defaultValue?: LikeDislikeValue\n /** Called when the value changes */\n onValueChange?: (value: LikeDislikeValue) => void\n /** Show feedback textarea when dislike is selected */\n showFeedback?: boolean\n /** Placeholder for the feedback textarea */\n feedbackPlaceholder?: string\n /** Label for the feedback submit button */\n feedbackSubmitLabel?: string\n /** Called when feedback is submitted. Can return a Promise for async handling. */\n onFeedbackSubmit?: (feedback: string) => void | Promise<void>\n /** Message shown after feedback is submitted */\n feedbackSuccessMessage?: string\n /** Delay in ms before auto-closing after submit. Default: 2000. Set 0 to disable. */\n feedbackAutoCloseDelay?: number\n /** Theme class for the burst animation rays (e.g. \"theme-brand\"). Default: \"theme-brand\" */\n burstTheme?: string\n /** Disabled state */\n disabled?: boolean\n}\n\n/* ------------------------------ Component ------------------------------- */\n\nfunction LikeDislike({\n className,\n size = \"default\",\n value: valueProp,\n defaultValue = null,\n onValueChange,\n showFeedback = false,\n feedbackPlaceholder = \"O que voce nao gostou?\",\n feedbackSubmitLabel = \"Enviar\",\n onFeedbackSubmit,\n feedbackSuccessMessage = \"Obrigado pelo feedback!\",\n feedbackAutoCloseDelay = 2000,\n burstTheme = \"theme-brand\",\n disabled = false,\n ...props\n}: LikeDislikeProps) {\n /* --- State --- */\n const isControlled = valueProp !== undefined\n const [internalValue, setInternalValue] = React.useState<LikeDislikeValue>(defaultValue)\n const currentValue = isControlled ? valueProp : internalValue\n\n const [feedbackText, setFeedbackText] = React.useState(\"\")\n const [isBursting, setIsBursting] = React.useState(false)\n const [feedbackDismissed, setFeedbackDismissed] = React.useState(false)\n const [feedbackStatus, setFeedbackStatus] = React.useState<\"idle\" | \"submitting\" | \"submitted\">(\"idle\")\n const autoCloseTimerRef = React.useRef<ReturnType<typeof setTimeout> | null>(null)\n\n const s = sizeConfig[size ?? \"default\"]\n\n /* --- Handlers --- */\n function handleClick(target: \"like\" | \"dislike\") {\n if (disabled) return\n const next: LikeDislikeValue = currentValue === target ? null : target\n\n if (!isControlled) setInternalValue(next)\n onValueChange?.(next)\n setFeedbackDismissed(false)\n setFeedbackStatus(\"idle\")\n setFeedbackText(\"\")\n if (autoCloseTimerRef.current) clearTimeout(autoCloseTimerRef.current)\n\n // Trigger burst animation when transitioning TO like\n if (target === \"like\" && next === \"like\") {\n setIsBursting(true)\n }\n }\n\n function handleBurstEnd() {\n setIsBursting(false)\n }\n\n // Cleanup auto-close timer\n React.useEffect(() => {\n return () => {\n if (autoCloseTimerRef.current) clearTimeout(autoCloseTimerRef.current)\n }\n }, [])\n\n async function handleFeedbackSubmit(e: React.FormEvent) {\n e.preventDefault()\n if (!feedbackText.trim() || feedbackStatus === \"submitting\") return\n\n setFeedbackStatus(\"submitting\")\n try {\n await onFeedbackSubmit?.(feedbackText.trim())\n setFeedbackStatus(\"submitted\")\n setFeedbackText(\"\")\n\n // Auto-close after delay\n if (feedbackAutoCloseDelay > 0) {\n autoCloseTimerRef.current = setTimeout(() => {\n setFeedbackDismissed(true)\n setFeedbackStatus(\"idle\")\n }, feedbackAutoCloseDelay)\n }\n } catch {\n // If the callback throws, reset to idle so the user can retry\n setFeedbackStatus(\"idle\")\n }\n }\n\n const isLiked = currentValue === \"like\"\n const isDisliked = currentValue === \"dislike\"\n const showFeedbackPanel = isDisliked && showFeedback && !feedbackDismissed\n\n /* --- Shared button classes --- */\n const btnBase = cn(\n \"relative inline-flex shrink-0 items-center justify-center rounded-lg transition-[color,box-shadow,background-color] outline-none cursor-pointer\",\n \"hover:bg-muted hover:text-muted-foreground\",\n \"focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50\",\n \"disabled:pointer-events-none disabled:opacity-50\",\n \"[&_svg]:pointer-events-none [&_svg]:shrink-0\",\n s.iconBtn\n )\n\n return (\n <div\n data-slot=\"like-dislike\"\n className={cn(\"relative inline-flex\", className)}\n {...props}\n >\n {/* Button row */}\n <div className=\"inline-flex items-center gap-1\" role=\"group\" aria-label=\"Avaliar conteudo\">\n {/* Like */}\n <button\n type=\"button\"\n aria-pressed={isLiked}\n aria-label=\"Gostei\"\n disabled={disabled}\n onClick={() => handleClick(\"like\")}\n className={cn(\n btnBase,\n isLiked && \"bg-accent text-accent-foreground [&_svg]:fill-current\"\n )}\n >\n {/* Burst rays (behind the icon) */}\n {isBursting && (\n <span\n className={cn(\"absolute inset-0 z-0 pointer-events-none\", burstTheme)}\n aria-hidden=\"true\"\n >\n {BURST_RAYS.map(({ angle, delay }) => (\n <span\n key={angle}\n className=\"absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2\"\n style={{ rotate: `${angle}deg` }}\n >\n <span\n className={cn(\n \"block rounded-full bg-primary opacity-0 animate-like-burst\",\n s.rayW, s.rayH\n )}\n style={{ animationDelay: delay }}\n />\n </span>\n ))}\n </span>\n )}\n\n {/* Icon with pop animation (above rays) */}\n <span\n className={cn(\"relative z-10\", isBursting && \"animate-like-pop\")}\n onAnimationEnd={handleBurstEnd}\n >\n <CycleIcon icon={ThumbsUp} size={s.icon} decorative />\n </span>\n </button>\n\n {/* Dislike */}\n <button\n type=\"button\"\n aria-pressed={isDisliked}\n aria-label=\"Nao gostei\"\n disabled={disabled}\n onClick={() => handleClick(\"dislike\")}\n className={cn(\n btnBase,\n isDisliked && \"bg-accent text-accent-foreground [&_svg]:fill-current\"\n )}\n >\n <CycleIcon icon={ThumbsDown} size={s.icon} decorative />\n </button>\n </div>\n\n {/* Floating feedback panel */}\n {showFeedbackPanel && (\n <div className=\"absolute left-0 top-full z-50 mt-2 w-72 rounded-lg border border-border bg-background p-3 shadow-md animate-in fade-in-0 zoom-in-95 slide-in-from-top-2\">\n {feedbackStatus === \"submitted\" ? (\n /* --- Success state --- */\n <div className=\"flex items-center gap-2 py-2\">\n <span className=\"inline-flex size-5 shrink-0 items-center justify-center rounded-full bg-primary text-primary-foreground\">\n <CycleIcon icon={Check} size=\"xs\" decorative />\n </span>\n <p className={cn(\"text-foreground\", s.text)}>\n {feedbackSuccessMessage}\n </p>\n </div>\n ) : (\n /* --- Form state --- */\n <>\n <div className=\"flex items-center justify-between mb-2\">\n <p className={cn(\"font-medium text-foreground\", s.text)}>\n {feedbackPlaceholder}\n </p>\n <button\n type=\"button\"\n onClick={() => setFeedbackDismissed(true)}\n className=\"inline-flex size-6 items-center justify-center rounded-md text-muted-foreground hover:bg-muted hover:text-foreground transition-colors cursor-pointer\"\n aria-label=\"Fechar\"\n >\n <CycleIcon icon={X} size=\"xs\" decorative />\n </button>\n </div>\n <form onSubmit={handleFeedbackSubmit} className=\"flex flex-col gap-2\">\n <Textarea\n textareaSize=\"sm\"\n value={feedbackText}\n onChange={(e) => setFeedbackText(e.target.value)}\n placeholder=\"Conte-nos mais...\"\n disabled={disabled || feedbackStatus === \"submitting\"}\n className=\"resize-none min-h-[60px]\"\n aria-label=\"Feedback\"\n />\n <div className=\"flex justify-end\">\n <Button\n type=\"submit\"\n size=\"sm\"\n disabled={disabled || !feedbackText.trim() || feedbackStatus === \"submitting\"}\n >\n {feedbackStatus === \"submitting\" ? \"Enviando...\" : feedbackSubmitLabel}\n </Button>\n </div>\n </form>\n </>\n )}\n </div>\n )}\n </div>\n )\n}\n\nexport { LikeDislike, likeDislikeVariants }\n"]}
1
+ {"version":3,"sources":["../src/components/ui/like-dislike.tsx"],"names":["e"],"mappings":"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","file":"chunk-CLL76ZXJ.js","sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { ThumbsUp, ThumbsDown, X, Check } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\nimport { CycleIcon } from \"@/components/icons\"\nimport { Button } from \"@/components/ui/button\"\nimport { Textarea } from \"@/components/ui/textarea\"\n\n/* ---------------------------------- CVA ---------------------------------- */\n\nconst likeDislikeVariants = cva(\"inline-flex flex-col\", {\n variants: {\n size: {\n default: \"gap-2\",\n xs: \"gap-1.5\",\n sm: \"gap-1.5\",\n lg: \"gap-3\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n})\n\n/** Maps component size → toggle button dimensions + icon size + burst ray size */\nconst sizeConfig = {\n xs: { iconBtn: \"size-6\", icon: \"xs\" as const, text: \"text-xs\", rayH: \"h-1\", rayW: \"w-[2px]\" },\n sm: { iconBtn: \"size-8\", icon: \"xs\" as const, text: \"text-xs\", rayH: \"h-1.5\", rayW: \"w-[2px]\" },\n default: { iconBtn: \"size-10\", icon: \"sm\" as const, text: \"text-sm\", rayH: \"h-2\", rayW: \"w-[2px]\" },\n lg: { iconBtn: \"size-12\", icon: \"sm\" as const, text: \"text-base\", rayH: \"h-2.5\", rayW: \"w-[3px]\" },\n} as const\n\n/** Angles and colors for the burst rays */\nconst BURST_RAYS = [\n { angle: 0, delay: \"0ms\" },\n { angle: 45, delay: \"30ms\" },\n { angle: 90, delay: \"60ms\" },\n { angle: 135, delay: \"20ms\" },\n { angle: 180, delay: \"50ms\" },\n { angle: 225, delay: \"10ms\" },\n { angle: 270, delay: \"40ms\" },\n { angle: 315, delay: \"25ms\" },\n]\n\n/* -------------------------------- Types --------------------------------- */\n\nexport type LikeDislikeValue = \"like\" | \"dislike\" | null\n\nexport interface LikeDislikeProps\n extends Omit<React.ComponentProps<\"div\">, \"onChange\" | \"defaultValue\">,\n VariantProps<typeof likeDislikeVariants> {\n /** Current value — controlled */\n value?: LikeDislikeValue\n /** Default value — uncontrolled */\n defaultValue?: LikeDislikeValue\n /** Called when the value changes */\n onValueChange?: (value: LikeDislikeValue) => void\n /** Show feedback textarea when dislike is selected */\n showFeedback?: boolean\n /** Placeholder for the feedback textarea */\n feedbackPlaceholder?: string\n /** Label for the feedback submit button */\n feedbackSubmitLabel?: string\n /** Called when feedback is submitted. Can return a Promise for async handling. */\n onFeedbackSubmit?: (feedback: string) => void | Promise<void>\n /** Message shown after feedback is submitted */\n feedbackSuccessMessage?: string\n /** Delay in ms before auto-closing after submit. Default: 2000. Set 0 to disable. */\n feedbackAutoCloseDelay?: number\n /** Theme class for the burst animation rays (e.g. \"theme-brand\"). Default: \"theme-brand\" */\n burstTheme?: string\n /** Disabled state */\n disabled?: boolean\n}\n\n/* ------------------------------ Component ------------------------------- */\n\nfunction LikeDislike({\n className,\n size = \"default\",\n value: valueProp,\n defaultValue = null,\n onValueChange,\n showFeedback = false,\n feedbackPlaceholder = \"O que voce nao gostou?\",\n feedbackSubmitLabel = \"Enviar\",\n onFeedbackSubmit,\n feedbackSuccessMessage = \"Obrigado pelo feedback!\",\n feedbackAutoCloseDelay = 2000,\n burstTheme = \"theme-brand\",\n disabled = false,\n ...props\n}: LikeDislikeProps) {\n /* --- State --- */\n const isControlled = valueProp !== undefined\n const [internalValue, setInternalValue] = React.useState<LikeDislikeValue>(defaultValue)\n const currentValue = isControlled ? valueProp : internalValue\n\n const [feedbackText, setFeedbackText] = React.useState(\"\")\n const [isBursting, setIsBursting] = React.useState(false)\n const [feedbackDismissed, setFeedbackDismissed] = React.useState(false)\n const [feedbackStatus, setFeedbackStatus] = React.useState<\"idle\" | \"submitting\" | \"submitted\">(\"idle\")\n const autoCloseTimerRef = React.useRef<ReturnType<typeof setTimeout> | null>(null)\n\n const s = sizeConfig[size ?? \"default\"]\n\n /* --- Handlers --- */\n function handleClick(target: \"like\" | \"dislike\") {\n if (disabled) return\n const next: LikeDislikeValue = currentValue === target ? null : target\n\n if (!isControlled) setInternalValue(next)\n onValueChange?.(next)\n setFeedbackDismissed(false)\n setFeedbackStatus(\"idle\")\n setFeedbackText(\"\")\n if (autoCloseTimerRef.current) clearTimeout(autoCloseTimerRef.current)\n\n // Trigger burst animation when transitioning TO like\n if (target === \"like\" && next === \"like\") {\n setIsBursting(true)\n }\n }\n\n function handleBurstEnd() {\n setIsBursting(false)\n }\n\n // Cleanup auto-close timer\n React.useEffect(() => {\n return () => {\n if (autoCloseTimerRef.current) clearTimeout(autoCloseTimerRef.current)\n }\n }, [])\n\n async function handleFeedbackSubmit(e: React.FormEvent) {\n e.preventDefault()\n if (!feedbackText.trim() || feedbackStatus === \"submitting\") return\n\n setFeedbackStatus(\"submitting\")\n try {\n await onFeedbackSubmit?.(feedbackText.trim())\n setFeedbackStatus(\"submitted\")\n setFeedbackText(\"\")\n\n // Auto-close after delay\n if (feedbackAutoCloseDelay > 0) {\n autoCloseTimerRef.current = setTimeout(() => {\n setFeedbackDismissed(true)\n setFeedbackStatus(\"idle\")\n }, feedbackAutoCloseDelay)\n }\n } catch {\n // If the callback throws, reset to idle so the user can retry\n setFeedbackStatus(\"idle\")\n }\n }\n\n const isLiked = currentValue === \"like\"\n const isDisliked = currentValue === \"dislike\"\n const showFeedbackPanel = isDisliked && showFeedback && !feedbackDismissed\n\n /* --- Shared button classes --- */\n const btnBase = cn(\n \"relative inline-flex shrink-0 items-center justify-center rounded-lg transition-[color,box-shadow,background-color] outline-none cursor-pointer\",\n \"hover:bg-muted hover:text-muted-foreground\",\n \"focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50\",\n \"disabled:pointer-events-none disabled:opacity-50\",\n \"[&_svg]:pointer-events-none [&_svg]:shrink-0\",\n s.iconBtn\n )\n\n return (\n <div\n data-slot=\"like-dislike\"\n className={cn(\"relative inline-flex\", className)}\n {...props}\n >\n {/* Button row */}\n <div className=\"inline-flex items-center gap-1\" role=\"group\" aria-label=\"Avaliar conteudo\">\n {/* Like */}\n <button\n type=\"button\"\n aria-pressed={isLiked}\n aria-label=\"Gostei\"\n disabled={disabled}\n onClick={() => handleClick(\"like\")}\n className={cn(\n btnBase,\n isLiked && \"bg-accent text-accent-foreground [&_svg]:fill-current\"\n )}\n >\n {/* Burst rays (behind the icon) */}\n {isBursting && (\n <span\n className={cn(\"absolute inset-0 z-0 pointer-events-none\", burstTheme)}\n aria-hidden=\"true\"\n >\n {BURST_RAYS.map(({ angle, delay }) => (\n <span\n key={angle}\n className=\"absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2\"\n style={{ rotate: `${angle}deg` }}\n >\n <span\n className={cn(\n \"block rounded-full bg-primary opacity-0 animate-like-burst\",\n s.rayW, s.rayH\n )}\n style={{ animationDelay: delay }}\n />\n </span>\n ))}\n </span>\n )}\n\n {/* Icon with pop animation (above rays) */}\n <span\n className={cn(\"relative z-10\", isBursting && \"animate-like-pop\")}\n onAnimationEnd={handleBurstEnd}\n >\n <CycleIcon icon={ThumbsUp} size={s.icon} decorative />\n </span>\n </button>\n\n {/* Dislike */}\n <button\n type=\"button\"\n aria-pressed={isDisliked}\n aria-label=\"Nao gostei\"\n disabled={disabled}\n onClick={() => handleClick(\"dislike\")}\n className={cn(\n btnBase,\n isDisliked && \"bg-accent text-accent-foreground [&_svg]:fill-current\"\n )}\n >\n <CycleIcon icon={ThumbsDown} size={s.icon} decorative />\n </button>\n </div>\n\n {/* Floating feedback panel */}\n {showFeedbackPanel && (\n <div className=\"absolute left-0 top-full z-50 mt-2 w-72 rounded-lg border border-border bg-background p-3 shadow-md animate-in fade-in-0 zoom-in-95 slide-in-from-top-2\">\n {feedbackStatus === \"submitted\" ? (\n /* --- Success state --- */\n <div className=\"flex items-center gap-2 py-2\">\n <span className=\"inline-flex size-5 shrink-0 items-center justify-center rounded-full bg-primary text-primary-foreground\">\n <CycleIcon icon={Check} size=\"xs\" decorative />\n </span>\n <p className={cn(\"text-foreground\", s.text)}>\n {feedbackSuccessMessage}\n </p>\n </div>\n ) : (\n /* --- Form state --- */\n <>\n <div className=\"flex items-center justify-between mb-2\">\n <p className={cn(\"font-medium text-foreground\", s.text)}>\n {feedbackPlaceholder}\n </p>\n <button\n type=\"button\"\n onClick={() => setFeedbackDismissed(true)}\n className=\"inline-flex size-6 items-center justify-center rounded-md text-muted-foreground hover:bg-muted hover:text-foreground transition-colors cursor-pointer\"\n aria-label=\"Fechar\"\n >\n <CycleIcon icon={X} size=\"xs\" decorative />\n </button>\n </div>\n <form onSubmit={handleFeedbackSubmit} className=\"flex flex-col gap-2\">\n <Textarea\n textareaSize=\"sm\"\n value={feedbackText}\n onChange={(e) => setFeedbackText(e.target.value)}\n placeholder=\"Conte-nos mais...\"\n disabled={disabled || feedbackStatus === \"submitting\"}\n className=\"resize-none min-h-[60px]\"\n aria-label=\"Feedback\"\n />\n <div className=\"flex justify-end\">\n <Button\n type=\"submit\"\n size=\"sm\"\n disabled={disabled || !feedbackText.trim() || feedbackStatus === \"submitting\"}\n >\n {feedbackStatus === \"submitting\" ? \"Enviando...\" : feedbackSubmitLabel}\n </Button>\n </div>\n </form>\n </>\n )}\n </div>\n )}\n </div>\n )\n}\n\nexport { LikeDislike, likeDislikeVariants }\n"]}
@@ -0,0 +1,3 @@
1
+
2
+ //# sourceMappingURL=chunk-KSAVYUNJ.js.map
3
+ //# sourceMappingURL=chunk-KSAVYUNJ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-KSAVYUNJ.js"}
@@ -1,6 +1,6 @@
1
1
  import { Avatar, AvatarImage, AvatarFallback } from './chunk-T2TJG24M.js';
2
2
  import { CycleIcon } from './chunk-US5LXJTO.js';
3
- import { Badge } from './chunk-32NHCUEZ.js';
3
+ import { Badge } from './chunk-C6VTOLNM.js';
4
4
  import { cn } from './chunk-W4KJCBMW.js';
5
5
  import * as React from 'react';
6
6
  import { RadioIcon } from 'lucide-react';
@@ -93,5 +93,5 @@ function LiveWaiting({
93
93
  }
94
94
 
95
95
  export { LiveWaiting };
96
- //# sourceMappingURL=chunk-NKBTC4IF.js.map
97
- //# sourceMappingURL=chunk-NKBTC4IF.js.map
96
+ //# sourceMappingURL=chunk-MOSB7T52.js.map
97
+ //# sourceMappingURL=chunk-MOSB7T52.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/ui/live-waiting.tsx"],"names":[],"mappings":"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","file":"chunk-NKBTC4IF.js","sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\nimport { RadioIcon } from \"lucide-react\"\nimport { CycleIcon } from \"@/components/icons/CycleIcon\"\nimport { Avatar, AvatarImage, AvatarFallback } from \"@/components/ui/avatar\"\nimport { Badge } from \"@/components/ui/badge\"\nimport { cn } from \"@/lib/utils\"\n\n/* ─── Types ─── */\n\nexport interface LiveWaitingProps {\n /** Scheduled start time of the live */\n scheduledAt: Date\n /** Teacher/instructor display name */\n teacherName?: string\n /** Teacher avatar URL */\n teacherAvatar?: string\n /** Live class topic/subject */\n topic?: string\n className?: string\n}\n\n/* ─── Helpers ─── */\n\ninterface TimeLeft {\n days: number\n hours: number\n minutes: number\n seconds: number\n total: number\n}\n\nfunction calcTimeLeft(target: Date): TimeLeft {\n const total = Math.max(0, target.getTime() - Date.now())\n return {\n days: Math.floor(total / (1000 * 60 * 60 * 24)),\n hours: Math.floor((total / (1000 * 60 * 60)) % 24),\n minutes: Math.floor((total / (1000 * 60)) % 60),\n seconds: Math.floor((total / 1000) % 60),\n total,\n }\n}\n\nfunction padTwo(n: number): string {\n return n.toString().padStart(2, \"0\")\n}\n\nfunction getInitials(name: string): string {\n return name\n .split(\" \")\n .slice(0, 2)\n .map((w) => w[0])\n .join(\"\")\n .toUpperCase()\n}\n\n/* ─── Sub-components ─── */\n\nfunction CountdownUnit({ value, label }: { value: string; label: string }) {\n return (\n <div className=\"flex flex-col items-center gap-1\">\n <div className=\"flex items-center justify-center size-14 sm:size-16 rounded-xl bg-muted border border-border text-2xl sm:text-3xl font-bold text-foreground tabular-nums\">\n {value}\n </div>\n <span className=\"text-[11px] text-muted-foreground uppercase tracking-wider font-medium\">\n {label}\n </span>\n </div>\n )\n}\n\n/* ─── Component ─── */\n\nfunction LiveWaiting({\n scheduledAt,\n teacherName,\n teacherAvatar,\n topic,\n className,\n}: LiveWaitingProps) {\n const [timeLeft, setTimeLeft] = React.useState<TimeLeft>(() =>\n calcTimeLeft(scheduledAt)\n )\n\n React.useEffect(() => {\n const timer = setInterval(() => {\n setTimeLeft(calcTimeLeft(scheduledAt))\n }, 1000)\n return () => clearInterval(timer)\n }, [scheduledAt])\n\n const hasStarted = timeLeft.total === 0\n\n return (\n <div\n data-slot=\"live-waiting\"\n className={cn(\n \"flex flex-col items-center justify-center gap-6 py-12 sm:py-16 px-4\",\n className\n )}\n >\n {/* Live badge */}\n <Badge variant=\"destructive\" size=\"lg\" className=\"gap-1.5\">\n <CycleIcon icon={RadioIcon} size=\"2xs\" decorative />\n {hasStarted ? \"Começando...\" : \"Aula ao Vivo\"}\n </Badge>\n\n {/* Topic */}\n {topic && (\n <h2 className=\"text-lg sm:text-xl font-semibold text-foreground text-center max-w-md leading-snug\">\n {topic}\n </h2>\n )}\n\n {/* Countdown */}\n {!hasStarted && (\n <div className=\"flex items-center gap-3\">\n {timeLeft.days > 0 && (\n <>\n <CountdownUnit value={padTwo(timeLeft.days)} label=\"Dias\" />\n <span className=\"text-2xl font-bold text-muted-foreground mt-[-20px]\">:</span>\n </>\n )}\n <CountdownUnit value={padTwo(timeLeft.hours)} label=\"Horas\" />\n <span className=\"text-2xl font-bold text-muted-foreground mt-[-20px]\">:</span>\n <CountdownUnit value={padTwo(timeLeft.minutes)} label=\"Min\" />\n <span className=\"text-2xl font-bold text-muted-foreground mt-[-20px]\">:</span>\n <CountdownUnit value={padTwo(timeLeft.seconds)} label=\"Seg\" />\n </div>\n )}\n\n {/* Scheduled date */}\n <p className=\"text-sm text-muted-foreground\">\n {scheduledAt.toLocaleDateString(\"pt-BR\", {\n weekday: \"long\",\n day: \"numeric\",\n month: \"long\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n })}\n </p>\n\n {/* Teacher info */}\n {teacherName && (\n <div className=\"flex items-center gap-3 mt-2\">\n <Avatar size=\"lg\">\n {teacherAvatar && (\n <AvatarImage src={teacherAvatar} alt={teacherName} />\n )}\n <AvatarFallback className=\"bg-primary text-primary-foreground\">\n {getInitials(teacherName)}\n </AvatarFallback>\n </Avatar>\n <div className=\"flex flex-col\">\n <span className=\"text-sm font-medium text-foreground\">\n {teacherName}\n </span>\n <span className=\"text-xs text-muted-foreground\">Professor(a)</span>\n </div>\n </div>\n )}\n </div>\n )\n}\n\nexport { LiveWaiting }\n"]}
1
+ {"version":3,"sources":["../src/components/ui/live-waiting.tsx"],"names":[],"mappings":"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","file":"chunk-MOSB7T52.js","sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\nimport { RadioIcon } from \"lucide-react\"\nimport { CycleIcon } from \"@/components/icons/CycleIcon\"\nimport { Avatar, AvatarImage, AvatarFallback } from \"@/components/ui/avatar\"\nimport { Badge } from \"@/components/ui/badge\"\nimport { cn } from \"@/lib/utils\"\n\n/* ─── Types ─── */\n\nexport interface LiveWaitingProps {\n /** Scheduled start time of the live */\n scheduledAt: Date\n /** Teacher/instructor display name */\n teacherName?: string\n /** Teacher avatar URL */\n teacherAvatar?: string\n /** Live class topic/subject */\n topic?: string\n className?: string\n}\n\n/* ─── Helpers ─── */\n\ninterface TimeLeft {\n days: number\n hours: number\n minutes: number\n seconds: number\n total: number\n}\n\nfunction calcTimeLeft(target: Date): TimeLeft {\n const total = Math.max(0, target.getTime() - Date.now())\n return {\n days: Math.floor(total / (1000 * 60 * 60 * 24)),\n hours: Math.floor((total / (1000 * 60 * 60)) % 24),\n minutes: Math.floor((total / (1000 * 60)) % 60),\n seconds: Math.floor((total / 1000) % 60),\n total,\n }\n}\n\nfunction padTwo(n: number): string {\n return n.toString().padStart(2, \"0\")\n}\n\nfunction getInitials(name: string): string {\n return name\n .split(\" \")\n .slice(0, 2)\n .map((w) => w[0])\n .join(\"\")\n .toUpperCase()\n}\n\n/* ─── Sub-components ─── */\n\nfunction CountdownUnit({ value, label }: { value: string; label: string }) {\n return (\n <div className=\"flex flex-col items-center gap-1\">\n <div className=\"flex items-center justify-center size-14 sm:size-16 rounded-xl bg-muted border border-border text-2xl sm:text-3xl font-bold text-foreground tabular-nums\">\n {value}\n </div>\n <span className=\"text-[11px] text-muted-foreground uppercase tracking-wider font-medium\">\n {label}\n </span>\n </div>\n )\n}\n\n/* ─── Component ─── */\n\nfunction LiveWaiting({\n scheduledAt,\n teacherName,\n teacherAvatar,\n topic,\n className,\n}: LiveWaitingProps) {\n const [timeLeft, setTimeLeft] = React.useState<TimeLeft>(() =>\n calcTimeLeft(scheduledAt)\n )\n\n React.useEffect(() => {\n const timer = setInterval(() => {\n setTimeLeft(calcTimeLeft(scheduledAt))\n }, 1000)\n return () => clearInterval(timer)\n }, [scheduledAt])\n\n const hasStarted = timeLeft.total === 0\n\n return (\n <div\n data-slot=\"live-waiting\"\n className={cn(\n \"flex flex-col items-center justify-center gap-6 py-12 sm:py-16 px-4\",\n className\n )}\n >\n {/* Live badge */}\n <Badge variant=\"destructive\" size=\"lg\" className=\"gap-1.5\">\n <CycleIcon icon={RadioIcon} size=\"2xs\" decorative />\n {hasStarted ? \"Começando...\" : \"Aula ao Vivo\"}\n </Badge>\n\n {/* Topic */}\n {topic && (\n <h2 className=\"text-lg sm:text-xl font-semibold text-foreground text-center max-w-md leading-snug\">\n {topic}\n </h2>\n )}\n\n {/* Countdown */}\n {!hasStarted && (\n <div className=\"flex items-center gap-3\">\n {timeLeft.days > 0 && (\n <>\n <CountdownUnit value={padTwo(timeLeft.days)} label=\"Dias\" />\n <span className=\"text-2xl font-bold text-muted-foreground mt-[-20px]\">:</span>\n </>\n )}\n <CountdownUnit value={padTwo(timeLeft.hours)} label=\"Horas\" />\n <span className=\"text-2xl font-bold text-muted-foreground mt-[-20px]\">:</span>\n <CountdownUnit value={padTwo(timeLeft.minutes)} label=\"Min\" />\n <span className=\"text-2xl font-bold text-muted-foreground mt-[-20px]\">:</span>\n <CountdownUnit value={padTwo(timeLeft.seconds)} label=\"Seg\" />\n </div>\n )}\n\n {/* Scheduled date */}\n <p className=\"text-sm text-muted-foreground\">\n {scheduledAt.toLocaleDateString(\"pt-BR\", {\n weekday: \"long\",\n day: \"numeric\",\n month: \"long\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n })}\n </p>\n\n {/* Teacher info */}\n {teacherName && (\n <div className=\"flex items-center gap-3 mt-2\">\n <Avatar size=\"lg\">\n {teacherAvatar && (\n <AvatarImage src={teacherAvatar} alt={teacherName} />\n )}\n <AvatarFallback className=\"bg-primary text-primary-foreground\">\n {getInitials(teacherName)}\n </AvatarFallback>\n </Avatar>\n <div className=\"flex flex-col\">\n <span className=\"text-sm font-medium text-foreground\">\n {teacherName}\n </span>\n <span className=\"text-xs text-muted-foreground\">Professor(a)</span>\n </div>\n </div>\n )}\n </div>\n )\n}\n\nexport { LiveWaiting }\n"]}
@@ -1,4 +1,4 @@
1
- import { Button } from './chunk-LALM2LHM.js';
1
+ import { Button } from './chunk-W62WANUP.js';
2
2
  import { cn } from './chunk-W4KJCBMW.js';
3
3
  import { __objRest, __spreadValues } from './chunk-2NMEKWO5.js';
4
4
  import { AlertDialog as AlertDialog$1 } from 'radix-ui';
@@ -176,5 +176,5 @@ function AlertDialogCancel(_a) {
176
176
  }
177
177
 
178
178
  export { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogMedia, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger };
179
- //# sourceMappingURL=chunk-2KFWBA76.js.map
180
- //# sourceMappingURL=chunk-2KFWBA76.js.map
179
+ //# sourceMappingURL=chunk-MQTQIX4N.js.map
180
+ //# sourceMappingURL=chunk-MQTQIX4N.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/ui/alert-dialog.tsx"],"names":["AlertDialogPrimitive"],"mappings":"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","file":"chunk-2KFWBA76.js","sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\nimport { AlertDialog as AlertDialogPrimitive } from \"radix-ui\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Button } from \"@/components/ui/button\"\n\nfunction AlertDialog({\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Root>) {\n return <AlertDialogPrimitive.Root data-slot=\"alert-dialog\" {...props} />\n}\n\nfunction AlertDialogTrigger({\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Trigger>) {\n return (\n <AlertDialogPrimitive.Trigger data-slot=\"alert-dialog-trigger\" {...props} />\n )\n}\n\nfunction AlertDialogPortal({\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Portal>) {\n return (\n <AlertDialogPrimitive.Portal data-slot=\"alert-dialog-portal\" {...props} />\n )\n}\n\nfunction AlertDialogOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Overlay>) {\n return (\n <AlertDialogPrimitive.Overlay\n data-slot=\"alert-dialog-overlay\"\n className={cn(\n \"fixed inset-0 z-50 bg-black/50 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogContent({\n className,\n size = \"default\",\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Content> & {\n size?: \"default\" | \"sm\"\n}) {\n return (\n <AlertDialogPortal>\n <AlertDialogOverlay />\n <AlertDialogPrimitive.Content\n data-slot=\"alert-dialog-content\"\n data-size={size}\n className={cn(\n \"group/alert-dialog-content fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border bg-background p-6 shadow-lg duration-200 data-[size=sm]:max-w-xs data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[size=default]:sm:max-w-lg\",\n className\n )}\n {...props}\n />\n </AlertDialogPortal>\n )\n}\n\nfunction AlertDialogHeader({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-dialog-header\"\n className={cn(\n \"grid grid-rows-[auto_1fr] place-items-center gap-1.5 text-center has-data-[slot=alert-dialog-media]:grid-rows-[auto_auto_1fr] has-data-[slot=alert-dialog-media]:gap-x-6 sm:group-data-[size=default]/alert-dialog-content:place-items-start sm:group-data-[size=default]/alert-dialog-content:text-left sm:group-data-[size=default]/alert-dialog-content:has-data-[slot=alert-dialog-media]:grid-rows-[auto_1fr]\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogFooter({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-dialog-footer\"\n className={cn(\n \"flex flex-col-reverse gap-2 group-data-[size=sm]/alert-dialog-content:grid group-data-[size=sm]/alert-dialog-content:grid-cols-2 sm:flex-row sm:justify-end\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogTitle({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Title>) {\n return (\n <AlertDialogPrimitive.Title\n data-slot=\"alert-dialog-title\"\n className={cn(\n \"text-lg font-semibold sm:group-data-[size=default]/alert-dialog-content:group-has-data-[slot=alert-dialog-media]/alert-dialog-content:col-start-2\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Description>) {\n return (\n <AlertDialogPrimitive.Description\n data-slot=\"alert-dialog-description\"\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n )\n}\n\nfunction AlertDialogMedia({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-dialog-media\"\n className={cn(\n \"mb-2 inline-flex size-16 items-center justify-center rounded-md bg-muted sm:group-data-[size=default]/alert-dialog-content:row-span-2 *:[svg:not([class*='size-'])]:size-8\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogAction({\n className,\n variant = \"default\",\n size = \"default\",\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Action> &\n Pick<React.ComponentProps<typeof Button>, \"variant\" | \"size\">) {\n return (\n <Button variant={variant} size={size} asChild>\n <AlertDialogPrimitive.Action\n data-slot=\"alert-dialog-action\"\n className={cn(className)}\n {...props}\n />\n </Button>\n )\n}\n\nfunction AlertDialogCancel({\n className,\n variant = \"outline\",\n size = \"default\",\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Cancel> &\n Pick<React.ComponentProps<typeof Button>, \"variant\" | \"size\">) {\n return (\n <Button variant={variant} size={size} asChild>\n <AlertDialogPrimitive.Cancel\n data-slot=\"alert-dialog-cancel\"\n className={cn(className)}\n {...props}\n />\n </Button>\n )\n}\n\nexport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogMedia,\n AlertDialogOverlay,\n AlertDialogPortal,\n AlertDialogTitle,\n AlertDialogTrigger,\n}\n"]}
1
+ {"version":3,"sources":["../src/components/ui/alert-dialog.tsx"],"names":["AlertDialogPrimitive"],"mappings":"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","file":"chunk-MQTQIX4N.js","sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\nimport { AlertDialog as AlertDialogPrimitive } from \"radix-ui\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Button } from \"@/components/ui/button\"\n\nfunction AlertDialog({\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Root>) {\n return <AlertDialogPrimitive.Root data-slot=\"alert-dialog\" {...props} />\n}\n\nfunction AlertDialogTrigger({\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Trigger>) {\n return (\n <AlertDialogPrimitive.Trigger data-slot=\"alert-dialog-trigger\" {...props} />\n )\n}\n\nfunction AlertDialogPortal({\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Portal>) {\n return (\n <AlertDialogPrimitive.Portal data-slot=\"alert-dialog-portal\" {...props} />\n )\n}\n\nfunction AlertDialogOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Overlay>) {\n return (\n <AlertDialogPrimitive.Overlay\n data-slot=\"alert-dialog-overlay\"\n className={cn(\n \"fixed inset-0 z-50 bg-black/50 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogContent({\n className,\n size = \"default\",\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Content> & {\n size?: \"default\" | \"sm\"\n}) {\n return (\n <AlertDialogPortal>\n <AlertDialogOverlay />\n <AlertDialogPrimitive.Content\n data-slot=\"alert-dialog-content\"\n data-size={size}\n className={cn(\n \"group/alert-dialog-content fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border bg-background p-6 shadow-lg duration-200 data-[size=sm]:max-w-xs data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[size=default]:sm:max-w-lg\",\n className\n )}\n {...props}\n />\n </AlertDialogPortal>\n )\n}\n\nfunction AlertDialogHeader({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-dialog-header\"\n className={cn(\n \"grid grid-rows-[auto_1fr] place-items-center gap-1.5 text-center has-data-[slot=alert-dialog-media]:grid-rows-[auto_auto_1fr] has-data-[slot=alert-dialog-media]:gap-x-6 sm:group-data-[size=default]/alert-dialog-content:place-items-start sm:group-data-[size=default]/alert-dialog-content:text-left sm:group-data-[size=default]/alert-dialog-content:has-data-[slot=alert-dialog-media]:grid-rows-[auto_1fr]\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogFooter({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-dialog-footer\"\n className={cn(\n \"flex flex-col-reverse gap-2 group-data-[size=sm]/alert-dialog-content:grid group-data-[size=sm]/alert-dialog-content:grid-cols-2 sm:flex-row sm:justify-end\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogTitle({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Title>) {\n return (\n <AlertDialogPrimitive.Title\n data-slot=\"alert-dialog-title\"\n className={cn(\n \"text-lg font-semibold sm:group-data-[size=default]/alert-dialog-content:group-has-data-[slot=alert-dialog-media]/alert-dialog-content:col-start-2\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Description>) {\n return (\n <AlertDialogPrimitive.Description\n data-slot=\"alert-dialog-description\"\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n )\n}\n\nfunction AlertDialogMedia({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"alert-dialog-media\"\n className={cn(\n \"mb-2 inline-flex size-16 items-center justify-center rounded-md bg-muted sm:group-data-[size=default]/alert-dialog-content:row-span-2 *:[svg:not([class*='size-'])]:size-8\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction AlertDialogAction({\n className,\n variant = \"default\",\n size = \"default\",\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Action> &\n Pick<React.ComponentProps<typeof Button>, \"variant\" | \"size\">) {\n return (\n <Button variant={variant} size={size} asChild>\n <AlertDialogPrimitive.Action\n data-slot=\"alert-dialog-action\"\n className={cn(className)}\n {...props}\n />\n </Button>\n )\n}\n\nfunction AlertDialogCancel({\n className,\n variant = \"outline\",\n size = \"default\",\n ...props\n}: React.ComponentProps<typeof AlertDialogPrimitive.Cancel> &\n Pick<React.ComponentProps<typeof Button>, \"variant\" | \"size\">) {\n return (\n <Button variant={variant} size={size} asChild>\n <AlertDialogPrimitive.Cancel\n data-slot=\"alert-dialog-cancel\"\n className={cn(className)}\n {...props}\n />\n </Button>\n )\n}\n\nexport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogMedia,\n AlertDialogOverlay,\n AlertDialogPortal,\n AlertDialogTitle,\n AlertDialogTrigger,\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { Button } from './chunk-LALM2LHM.js';
1
+ import { Button } from './chunk-W62WANUP.js';
2
2
  import { cn } from './chunk-W4KJCBMW.js';
3
3
  import { __objRest, __spreadValues, __spreadProps } from './chunk-2NMEKWO5.js';
4
4
  import { XIcon } from 'lucide-react';
@@ -143,5 +143,5 @@ function DialogDescription(_a) {
143
143
  }
144
144
 
145
145
  export { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger };
146
- //# sourceMappingURL=chunk-AHHT4FZS.js.map
147
- //# sourceMappingURL=chunk-AHHT4FZS.js.map
146
+ //# sourceMappingURL=chunk-NMIDTIUE.js.map
147
+ //# sourceMappingURL=chunk-NMIDTIUE.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/ui/dialog.tsx"],"names":["DialogPrimitive"],"mappings":"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","file":"chunk-AHHT4FZS.js","sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\nimport { XIcon } from \"lucide-react\"\nimport { Dialog as DialogPrimitive } from \"radix-ui\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Button } from \"@/components/ui/button\"\n\nfunction Dialog({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Root>) {\n return <DialogPrimitive.Root data-slot=\"dialog\" {...props} />\n}\n\nfunction DialogTrigger({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Trigger>) {\n return <DialogPrimitive.Trigger data-slot=\"dialog-trigger\" {...props} />\n}\n\nfunction DialogPortal({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Portal>) {\n return <DialogPrimitive.Portal data-slot=\"dialog-portal\" {...props} />\n}\n\nfunction DialogClose({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Close>) {\n return <DialogPrimitive.Close data-slot=\"dialog-close\" {...props} />\n}\n\nfunction DialogOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Overlay>) {\n return (\n <DialogPrimitive.Overlay\n data-slot=\"dialog-overlay\"\n className={cn(\n \"fixed inset-0 z-50 bg-black/50 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DialogContent({\n className,\n children,\n showCloseButton = true,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Content> & {\n showCloseButton?: boolean\n}) {\n return (\n <DialogPortal data-slot=\"dialog-portal\">\n <DialogOverlay />\n <DialogPrimitive.Content\n data-slot=\"dialog-content\"\n className={cn(\n \"fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border bg-background p-6 shadow-lg duration-200 outline-none data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 sm:max-w-lg\",\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close\n data-slot=\"dialog-close\"\n className=\"absolute top-4 right-4 rounded-xs opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:ring-2 focus:ring-ring focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\"\n >\n <XIcon />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </DialogPortal>\n )\n}\n\nfunction DialogHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"dialog-header\"\n className={cn(\"flex flex-col gap-2 text-center sm:text-left\", className)}\n {...props}\n />\n )\n}\n\nfunction DialogFooter({\n className,\n showCloseButton = false,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & {\n showCloseButton?: boolean\n}) {\n return (\n <div\n data-slot=\"dialog-footer\"\n className={cn(\n \"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\",\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close asChild>\n <Button variant=\"outline\">Close</Button>\n </DialogPrimitive.Close>\n )}\n </div>\n )\n}\n\nfunction DialogTitle({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Title>) {\n return (\n <DialogPrimitive.Title\n data-slot=\"dialog-title\"\n className={cn(\"text-lg leading-none font-semibold\", className)}\n {...props}\n />\n )\n}\n\nfunction DialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Description>) {\n return (\n <DialogPrimitive.Description\n data-slot=\"dialog-description\"\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n}\n"]}
1
+ {"version":3,"sources":["../src/components/ui/dialog.tsx"],"names":["DialogPrimitive"],"mappings":"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","file":"chunk-NMIDTIUE.js","sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\nimport { XIcon } from \"lucide-react\"\nimport { Dialog as DialogPrimitive } from \"radix-ui\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Button } from \"@/components/ui/button\"\n\nfunction Dialog({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Root>) {\n return <DialogPrimitive.Root data-slot=\"dialog\" {...props} />\n}\n\nfunction DialogTrigger({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Trigger>) {\n return <DialogPrimitive.Trigger data-slot=\"dialog-trigger\" {...props} />\n}\n\nfunction DialogPortal({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Portal>) {\n return <DialogPrimitive.Portal data-slot=\"dialog-portal\" {...props} />\n}\n\nfunction DialogClose({\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Close>) {\n return <DialogPrimitive.Close data-slot=\"dialog-close\" {...props} />\n}\n\nfunction DialogOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Overlay>) {\n return (\n <DialogPrimitive.Overlay\n data-slot=\"dialog-overlay\"\n className={cn(\n \"fixed inset-0 z-50 bg-black/50 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction DialogContent({\n className,\n children,\n showCloseButton = true,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Content> & {\n showCloseButton?: boolean\n}) {\n return (\n <DialogPortal data-slot=\"dialog-portal\">\n <DialogOverlay />\n <DialogPrimitive.Content\n data-slot=\"dialog-content\"\n className={cn(\n \"fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border bg-background p-6 shadow-lg duration-200 outline-none data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 sm:max-w-lg\",\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close\n data-slot=\"dialog-close\"\n className=\"absolute top-4 right-4 rounded-xs opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:ring-2 focus:ring-ring focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\"\n >\n <XIcon />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </DialogPortal>\n )\n}\n\nfunction DialogHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"dialog-header\"\n className={cn(\"flex flex-col gap-2 text-center sm:text-left\", className)}\n {...props}\n />\n )\n}\n\nfunction DialogFooter({\n className,\n showCloseButton = false,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & {\n showCloseButton?: boolean\n}) {\n return (\n <div\n data-slot=\"dialog-footer\"\n className={cn(\n \"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\",\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close asChild>\n <Button variant=\"outline\">Close</Button>\n </DialogPrimitive.Close>\n )}\n </div>\n )\n}\n\nfunction DialogTitle({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Title>) {\n return (\n <DialogPrimitive.Title\n data-slot=\"dialog-title\"\n className={cn(\"text-lg leading-none font-semibold\", className)}\n {...props}\n />\n )\n}\n\nfunction DialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Description>) {\n return (\n <DialogPrimitive.Description\n data-slot=\"dialog-description\"\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  import { ChatBubble } from './chunk-VHNPIT56.js';
2
2
  import { ScrollArea } from './chunk-6ZID2UNI.js';
3
3
  import { CycleIcon } from './chunk-US5LXJTO.js';
4
- import { Button } from './chunk-LALM2LHM.js';
4
+ import { Button } from './chunk-W62WANUP.js';
5
5
  import { cn } from './chunk-W4KJCBMW.js';
6
6
  import { __objRest, __spreadProps, __spreadValues } from './chunk-2NMEKWO5.js';
7
7
  import * as React from 'react';
@@ -100,5 +100,5 @@ function ChatPanel(_a) {
100
100
  }
101
101
 
102
102
  export { ChatPanel };
103
- //# sourceMappingURL=chunk-OLYW5LVG.js.map
104
- //# sourceMappingURL=chunk-OLYW5LVG.js.map
103
+ //# sourceMappingURL=chunk-NYO2JMQ7.js.map
104
+ //# sourceMappingURL=chunk-NYO2JMQ7.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/ui/chat-panel.tsx"],"names":[],"mappings":"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","file":"chunk-OLYW5LVG.js","sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\nimport { SendIcon } from \"lucide-react\"\nimport { CycleIcon } from \"@/components/icons/CycleIcon\"\nimport { Button } from \"@/components/ui/button\"\nimport { ScrollArea } from \"@/components/ui/scroll-area\"\nimport { ChatBubble, type ChatBubbleProps } from \"@/components/ui/chat-bubble\"\nimport { cn } from \"@/lib/utils\"\n\n/* ─── Types ─── */\n\nexport interface ChatMessage {\n /** Unique message ID */\n id: string\n /** Author display name */\n author: string\n /** Avatar URL */\n avatar?: string\n /** Message text */\n message: string\n /** Timestamp label (e.g. \"14:32\") */\n timestamp?: string\n /** Message variant */\n variant?: ChatBubbleProps[\"variant\"]\n}\n\nexport interface ChatPanelProps extends React.ComponentProps<\"div\"> {\n /** Chat messages array */\n messages: ChatMessage[]\n /** Callback when the user sends a message */\n onSendMessage?: (message: string) => void\n /** Disable the input (e.g. when chat is read-only or ended) */\n disabled?: boolean\n /** Input placeholder text */\n placeholder?: string\n /** Title shown at the top of the panel */\n title?: string\n}\n\n/* ─── Component ─── */\n\nfunction ChatPanel({\n messages,\n onSendMessage,\n disabled = false,\n placeholder = \"Envie uma mensagem...\",\n title = \"Chat\",\n className,\n ...props\n}: ChatPanelProps) {\n const [input, setInput] = React.useState(\"\")\n const scrollRef = React.useRef<HTMLDivElement>(null)\n\n /* Auto-scroll to bottom on new messages */\n React.useEffect(() => {\n const el = scrollRef.current\n if (el) {\n el.scrollTop = el.scrollHeight\n }\n }, [messages.length])\n\n function handleSubmit(e: React.FormEvent) {\n e.preventDefault()\n const trimmed = input.trim()\n if (!trimmed || disabled) return\n onSendMessage?.(trimmed)\n setInput(\"\")\n }\n\n return (\n <div\n data-slot=\"chat-panel\"\n className={cn(\n \"flex flex-col bg-background border-l border-border\",\n className\n )}\n {...props}\n >\n {/* Header */}\n <div className=\"shrink-0 flex items-center h-12 px-4 border-b border-border\">\n <h3 className=\"text-sm font-semibold text-foreground\">{title}</h3>\n </div>\n\n {/* Messages */}\n <ScrollArea className=\"flex-1 min-h-0\">\n <div ref={scrollRef} className=\"flex flex-col gap-3 p-4\">\n {messages.length === 0 && (\n <p className=\"text-sm text-muted-foreground text-center py-8\">\n Nenhuma mensagem ainda.\n </p>\n )}\n {messages.map((msg) => (\n <ChatBubble\n key={msg.id}\n author={msg.author}\n avatar={msg.avatar}\n message={msg.message}\n timestamp={msg.timestamp}\n variant={msg.variant}\n />\n ))}\n </div>\n </ScrollArea>\n\n {/* Input */}\n {onSendMessage && (\n <form\n onSubmit={handleSubmit}\n className=\"shrink-0 flex items-center gap-2 p-3 border-t border-border\"\n >\n <input\n type=\"text\"\n value={input}\n onChange={(e) => setInput(e.target.value)}\n placeholder={placeholder}\n disabled={disabled}\n className=\"flex-1 min-w-0 h-9 rounded-lg border border-input bg-background px-3 text-sm text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-1 ring-offset-background disabled:opacity-50 disabled:cursor-not-allowed\"\n />\n <Button\n type=\"submit\"\n size=\"icon-sm\"\n disabled={disabled || !input.trim()}\n className=\"shrink-0\"\n >\n <CycleIcon icon={SendIcon} size=\"xs\" decorative />\n </Button>\n </form>\n )}\n </div>\n )\n}\n\nexport { ChatPanel }\n"]}
1
+ {"version":3,"sources":["../src/components/ui/chat-panel.tsx"],"names":[],"mappings":"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","file":"chunk-NYO2JMQ7.js","sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\nimport { SendIcon } from \"lucide-react\"\nimport { CycleIcon } from \"@/components/icons/CycleIcon\"\nimport { Button } from \"@/components/ui/button\"\nimport { ScrollArea } from \"@/components/ui/scroll-area\"\nimport { ChatBubble, type ChatBubbleProps } from \"@/components/ui/chat-bubble\"\nimport { cn } from \"@/lib/utils\"\n\n/* ─── Types ─── */\n\nexport interface ChatMessage {\n /** Unique message ID */\n id: string\n /** Author display name */\n author: string\n /** Avatar URL */\n avatar?: string\n /** Message text */\n message: string\n /** Timestamp label (e.g. \"14:32\") */\n timestamp?: string\n /** Message variant */\n variant?: ChatBubbleProps[\"variant\"]\n}\n\nexport interface ChatPanelProps extends React.ComponentProps<\"div\"> {\n /** Chat messages array */\n messages: ChatMessage[]\n /** Callback when the user sends a message */\n onSendMessage?: (message: string) => void\n /** Disable the input (e.g. when chat is read-only or ended) */\n disabled?: boolean\n /** Input placeholder text */\n placeholder?: string\n /** Title shown at the top of the panel */\n title?: string\n}\n\n/* ─── Component ─── */\n\nfunction ChatPanel({\n messages,\n onSendMessage,\n disabled = false,\n placeholder = \"Envie uma mensagem...\",\n title = \"Chat\",\n className,\n ...props\n}: ChatPanelProps) {\n const [input, setInput] = React.useState(\"\")\n const scrollRef = React.useRef<HTMLDivElement>(null)\n\n /* Auto-scroll to bottom on new messages */\n React.useEffect(() => {\n const el = scrollRef.current\n if (el) {\n el.scrollTop = el.scrollHeight\n }\n }, [messages.length])\n\n function handleSubmit(e: React.FormEvent) {\n e.preventDefault()\n const trimmed = input.trim()\n if (!trimmed || disabled) return\n onSendMessage?.(trimmed)\n setInput(\"\")\n }\n\n return (\n <div\n data-slot=\"chat-panel\"\n className={cn(\n \"flex flex-col bg-background border-l border-border\",\n className\n )}\n {...props}\n >\n {/* Header */}\n <div className=\"shrink-0 flex items-center h-12 px-4 border-b border-border\">\n <h3 className=\"text-sm font-semibold text-foreground\">{title}</h3>\n </div>\n\n {/* Messages */}\n <ScrollArea className=\"flex-1 min-h-0\">\n <div ref={scrollRef} className=\"flex flex-col gap-3 p-4\">\n {messages.length === 0 && (\n <p className=\"text-sm text-muted-foreground text-center py-8\">\n Nenhuma mensagem ainda.\n </p>\n )}\n {messages.map((msg) => (\n <ChatBubble\n key={msg.id}\n author={msg.author}\n avatar={msg.avatar}\n message={msg.message}\n timestamp={msg.timestamp}\n variant={msg.variant}\n />\n ))}\n </div>\n </ScrollArea>\n\n {/* Input */}\n {onSendMessage && (\n <form\n onSubmit={handleSubmit}\n className=\"shrink-0 flex items-center gap-2 p-3 border-t border-border\"\n >\n <input\n type=\"text\"\n value={input}\n onChange={(e) => setInput(e.target.value)}\n placeholder={placeholder}\n disabled={disabled}\n className=\"flex-1 min-w-0 h-9 rounded-lg border border-input bg-background px-3 text-sm text-foreground placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-1 ring-offset-background disabled:opacity-50 disabled:cursor-not-allowed\"\n />\n <Button\n type=\"submit\"\n size=\"icon-sm\"\n disabled={disabled || !input.trim()}\n className=\"shrink-0\"\n >\n <CycleIcon icon={SendIcon} size=\"xs\" decorative />\n </Button>\n </form>\n )}\n </div>\n )\n}\n\nexport { ChatPanel }\n"]}
@@ -1,44 +1,19 @@
1
- import { AlertDialog, AlertDialogContent, AlertDialogHeader, AlertDialogTitle, AlertDialogDescription, AlertDialogFooter, AlertDialogCancel, AlertDialogAction } from './chunk-2KFWBA76.js';
2
- import { ChatMessage } from './chunk-KSEDDFGG.js';
1
+ import { AlertDialog, AlertDialogContent, AlertDialogHeader, AlertDialogTitle, AlertDialogDescription, AlertDialogFooter, AlertDialogCancel, AlertDialogAction } from './chunk-MQTQIX4N.js';
2
+ import { ChatMessage } from './chunk-VZ2GYSNK.js';
3
3
  import { DEFAULT_MESSAGE_RATING_LABELS, MessageRating } from './chunk-YIOXPV2N.js';
4
- import { MessageBar } from './chunk-JPEQ4BYK.js';
4
+ import { MessageBar } from './chunk-5AH2PNYW.js';
5
+ import { useCountdown, StatusBanner } from './chunk-VMUNB4RA.js';
5
6
  import { cn } from './chunk-W4KJCBMW.js';
6
7
  import { __objRest, __spreadValues, __spreadProps } from './chunk-2NMEKWO5.js';
7
8
  import * as React from 'react';
8
9
  import { Square } from 'lucide-react';
9
10
  import { jsxs, jsx } from 'react/jsx-runtime';
10
11
 
12
+ function isThenable(value) {
13
+ return !!value && (typeof value === "object" || typeof value === "function") && typeof value.then === "function";
14
+ }
11
15
  var SCROLL_BOTTOM_THRESHOLD = 100;
12
16
  var LOAD_MORE_THRESHOLD = 200;
13
- function ChatThreadBanner({
14
- variant,
15
- children
16
- }) {
17
- return /* @__PURE__ */ jsx(
18
- "div",
19
- {
20
- role: "status",
21
- "aria-live": "polite",
22
- className: cn(
23
- "shrink-0 flex items-center gap-2 px-4 py-2 text-sm border-b",
24
- variant === "offline" && "bg-destructive/10 text-destructive border-destructive/20",
25
- variant === "rate-limit" && "bg-muted text-muted-foreground border-border"
26
- ),
27
- children
28
- }
29
- );
30
- }
31
- function useCountdown(until) {
32
- const [now, setNow] = React.useState(() => Date.now());
33
- React.useEffect(() => {
34
- if (!until || until <= Date.now()) return;
35
- const id = setInterval(() => setNow(Date.now()), 1e3);
36
- return () => clearInterval(id);
37
- }, [until]);
38
- if (!until) return 0;
39
- const remainingMs = until - now;
40
- return Math.max(0, Math.ceil(remainingMs / 1e3));
41
- }
42
17
  function StopResponseButton({
43
18
  onClick,
44
19
  label = "Parar resposta"
@@ -112,6 +87,7 @@ function ChatThread(_a) {
112
87
  onStartRecording,
113
88
  onPauseRecording,
114
89
  onResumeRecording,
90
+ onRecordingError,
115
91
  onCancelRecording,
116
92
  onTogglePlay,
117
93
  onSeekPlayback,
@@ -136,7 +112,7 @@ function ChatThread(_a) {
136
112
  userAvatar,
137
113
  userName,
138
114
  userMessageTheme,
139
- offlineBannerText = "Sem conexao. Tentando reconectar...",
115
+ offlineBannerText,
140
116
  retryButtonText = "Tentar novamente",
141
117
  regenerateButtonText = "Regenerar resposta",
142
118
  stopResponseText = "Parar resposta",
@@ -155,6 +131,7 @@ function ChatThread(_a) {
155
131
  "onStartRecording",
156
132
  "onPauseRecording",
157
133
  "onResumeRecording",
134
+ "onRecordingError",
158
135
  "onCancelRecording",
159
136
  "onTogglePlay",
160
137
  "onSeekPlayback",
@@ -271,27 +248,59 @@ function ChatThread(_a) {
271
248
  );
272
249
  const baseMessageBarState = audioOnlyMode ? "audio-only" : "default";
273
250
  const [internalRecordingState, setInternalRecordingState] = React.useState("idle");
251
+ const recordingRequestTokenRef = React.useRef(0);
252
+ const isMountedRef = React.useRef(false);
253
+ React.useEffect(() => {
254
+ isMountedRef.current = true;
255
+ return () => {
256
+ isMountedRef.current = false;
257
+ recordingRequestTokenRef.current++;
258
+ };
259
+ }, []);
274
260
  React.useEffect(() => {
275
261
  if (internalRecordingState === "idle") return;
276
262
  }, [audioOnlyMode, internalRecordingState]);
277
- const messageBarState = isDisabled ? "disabled" : internalRecordingState === "recording" ? "recording" : internalRecordingState === "paused" ? "paused" : baseMessageBarState;
263
+ const messageBarState = isDisabled ? "disabled" : internalRecordingState === "recording" ? "recording" : internalRecordingState === "paused" ? "paused" : internalRecordingState === "requesting" ? "requesting" : baseMessageBarState;
264
+ const runRecordingRequest = React.useCallback(
265
+ (callback, fallbackState) => {
266
+ const result = callback == null ? void 0 : callback();
267
+ if (!isThenable(result)) {
268
+ setInternalRecordingState("recording");
269
+ return;
270
+ }
271
+ const token = ++recordingRequestTokenRef.current;
272
+ setInternalRecordingState("requesting");
273
+ result.then(
274
+ () => {
275
+ if (!isMountedRef.current || recordingRequestTokenRef.current !== token) return;
276
+ setInternalRecordingState("recording");
277
+ },
278
+ (error) => {
279
+ if (!isMountedRef.current || recordingRequestTokenRef.current !== token) return;
280
+ setInternalRecordingState(fallbackState);
281
+ onRecordingError == null ? void 0 : onRecordingError(error);
282
+ }
283
+ );
284
+ },
285
+ [onRecordingError]
286
+ );
278
287
  const handleStartRecordingInternal = React.useCallback(() => {
279
- setInternalRecordingState("recording");
280
- onStartRecording == null ? void 0 : onStartRecording();
281
- }, [onStartRecording]);
288
+ runRecordingRequest(onStartRecording, "idle");
289
+ }, [onStartRecording, runRecordingRequest]);
282
290
  const handlePauseRecordingInternal = React.useCallback(() => {
283
291
  setInternalRecordingState("paused");
284
292
  onPauseRecording == null ? void 0 : onPauseRecording();
285
293
  }, [onPauseRecording]);
286
294
  const handleResumeRecordingInternal = React.useCallback(() => {
287
- setInternalRecordingState("recording");
288
- onResumeRecording == null ? void 0 : onResumeRecording();
289
- }, [onResumeRecording]);
295
+ runRecordingRequest(onResumeRecording, "paused");
296
+ }, [onResumeRecording, runRecordingRequest]);
290
297
  const handleCancelRecordingInternal = React.useCallback(() => {
298
+ recordingRequestTokenRef.current++;
291
299
  setInternalRecordingState("idle");
292
300
  onCancelRecording == null ? void 0 : onCancelRecording();
293
301
  }, [onCancelRecording]);
294
302
  const handleSendAudioInternal = React.useCallback(() => {
303
+ recordingRequestTokenRef.current++;
295
304
  setInternalRecordingState("idle");
296
305
  onSendAudio == null ? void 0 : onSendAudio();
297
306
  }, [onSendAudio]);
@@ -317,14 +326,16 @@ function ChatThread(_a) {
317
326
  className: cn("relative flex flex-col h-full bg-background", className)
318
327
  }, props), {
319
328
  children: [
320
- offline && /* @__PURE__ */ jsxs(ChatThreadBanner, { variant: "offline", children: [
321
- /* @__PURE__ */ jsx("span", { "aria-hidden": "true", children: "\u26A0" }),
322
- /* @__PURE__ */ jsx("span", { children: offlineBannerText })
323
- ] }),
324
- isRateLimited && /* @__PURE__ */ jsxs(ChatThreadBanner, { variant: "rate-limit", children: [
325
- /* @__PURE__ */ jsx("span", { "aria-hidden": "true", children: "\u23F1" }),
326
- /* @__PURE__ */ jsx("span", { children: rateLimitBannerText ? rateLimitBannerText(rateLimitSecondsLeft) : `Aguarde ${rateLimitSecondsLeft}s antes de enviar nova mensagem` })
327
- ] }),
329
+ offline && /* @__PURE__ */ jsx(StatusBanner, { kind: "offline", className: "shrink-0 rounded-none border-x-0 border-t-0", children: offlineBannerText }),
330
+ isRateLimited && /* @__PURE__ */ jsx(
331
+ StatusBanner,
332
+ {
333
+ kind: "rate-limit",
334
+ until: rateLimitedUntil,
335
+ rateLimitText: rateLimitBannerText,
336
+ className: "shrink-0 rounded-none border-x-0 border-t-0"
337
+ }
338
+ ),
328
339
  /* @__PURE__ */ jsxs(
329
340
  "div",
330
341
  {
@@ -449,5 +460,5 @@ function ChatThread(_a) {
449
460
  }
450
461
 
451
462
  export { ChatThread };
452
- //# sourceMappingURL=chunk-CLMO3IRS.js.map
453
- //# sourceMappingURL=chunk-CLMO3IRS.js.map
463
+ //# sourceMappingURL=chunk-OFGJDRRR.js.map
464
+ //# sourceMappingURL=chunk-OFGJDRRR.js.map