organify-ui 0.3.12 → 0.3.13
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.
- package/dist/{chunk-HFX2XZKZ.js → chunk-UMUOHUGU.js} +8 -115
- package/dist/chunk-UMUOHUGU.js.map +1 -0
- package/dist/{chunk-SAYB3NN2.js → chunk-W2Z7VRCR.js} +71 -28
- package/dist/chunk-W2Z7VRCR.js.map +1 -0
- package/dist/{chunk-VHQZS77G.js → chunk-XTMS6DXV.js} +138 -30
- package/dist/chunk-XTMS6DXV.js.map +1 -0
- package/dist/components/chat/index.js +2 -2
- package/dist/components/notifications/index.js +2 -2
- package/dist/index.d.ts +6 -2
- package/dist/index.js +328 -138
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/chunk-HFX2XZKZ.js.map +0 -1
- package/dist/chunk-SAYB3NN2.js.map +0 -1
- package/dist/chunk-VHQZS77G.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/primitives/org-loader.tsx","../src/components/primitives/button.tsx","../src/components/primitives/input.tsx","../src/components/chat/chat-sidebar.tsx","../src/components/chat/primitives/message-bubble.tsx","../src/components/chat/primitives/mention-popover.tsx","../src/components/chat/primitives/message-input.tsx","../src/components/chat/chat-messages.tsx","../src/components/primitives/label.tsx","../src/components/primitives/textarea.tsx","../src/components/primitives/dialog.tsx","../src/components/primitives/responsive-dialog.tsx","../src/components/primitives/tabs.tsx","../src/components/chat/create-room-dialog.tsx","../src/components/primitives/separator.tsx","../src/components/primitives/select.tsx","../src/components/chat/room-management-panel.tsx","../src/components/chat/types.ts","../src/components/chat/use-chat.ts","../src/components/feedback/alert.tsx","../src/components/chat/organify-chat.tsx","../src/components/chat/chat-mock-data.ts","../src/components/chat/ai-chat-sidebar.tsx","../src/components/chat/command-bar.tsx","../src/components/chat/inline-ai.tsx"],"names":["cva","jsx","jsxs","React","React2","Fragment","React3","getInitials","React4","truncate","React5","AnimatePresence","motion","React7","React8","React9","React10","React11","useState","useCallback","useEffect","useMediaQuery","React13","React14","React15","React16"],"mappings":"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","file":"chunk-UMUOHUGU.js","sourcesContent":["import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../lib/utils';\n\n/**\n * OrgLoader — Branded \"O\" loading animation\n *\n * An animated \"O\" ring with a diamond orbiting around it,\n * referencing the Organify brand identity.\n * Replaces traditional spinners across the platform.\n */\nconst orgLoaderVariants = cva('relative inline-flex items-center justify-center', {\n variants: {\n size: {\n xs: 'h-4 w-4',\n sm: 'h-6 w-6',\n default: 'h-10 w-10',\n lg: 'h-16 w-16',\n xl: 'h-24 w-24',\n full: 'h-32 w-32',\n },\n },\n defaultVariants: {\n size: 'default',\n },\n});\n\nconst diamondSizes: Record<string, number> = {\n xs: 3,\n sm: 4,\n default: 6,\n lg: 8,\n xl: 10,\n full: 14,\n};\n\nconst strokeWidths: Record<string, number> = {\n xs: 1.5,\n sm: 1.5,\n default: 2,\n lg: 2,\n xl: 2.5,\n full: 2.5,\n};\n\nexport interface OrgLoaderProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof orgLoaderVariants> {\n /** Text below loader */\n caption?: string;\n /** Overlay mode: centered on dark/light scrim */\n overlay?: boolean;\n}\n\nfunction OrgLoader({\n size = 'default',\n caption,\n overlay = false,\n className,\n ...props\n}: OrgLoaderProps) {\n const s = size ?? 'default';\n const d = diamondSizes[s];\n const sw = strokeWidths[s];\n\n const loader = (\n <div\n className={cn(\n 'flex flex-col items-center gap-3',\n overlay && 'pointer-events-none',\n className,\n )}\n role=\"status\"\n aria-label=\"Loading\"\n {...props}\n >\n <div className={cn(orgLoaderVariants({ size }))}>\n <svg className=\"h-full w-full\" viewBox=\"0 0 48 48\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n {/* Background \"O\" ring */}\n <circle\n cx=\"24\"\n cy=\"24\"\n r=\"18\"\n className=\"stroke-current opacity-10 dark:opacity-[0.08]\"\n strokeWidth={sw}\n />\n\n {/* Animated gradient arc — the living \"O\" */}\n <circle\n cx=\"24\"\n cy=\"24\"\n r=\"18\"\n stroke=\"url(#org-loader-gradient)\"\n strokeWidth={sw}\n strokeLinecap=\"round\"\n strokeDasharray=\"85 28.27\"\n className=\"origin-center\"\n style={{ animation: 'org-loader-spin 1.4s cubic-bezier(0.4, 0, 0.2, 1) infinite' }}\n />\n\n {/* Orbiting diamond */}\n <g style={{ animation: 'org-loader-orbit 1.4s cubic-bezier(0.4, 0, 0.2, 1) infinite' }} className=\"origin-center\">\n <rect\n x={24 - d / 2}\n y={6 - d / 2}\n width={d}\n height={d}\n rx={d * 0.15}\n transform={`rotate(45 24 6)`}\n fill=\"url(#org-loader-diamond)\"\n className=\"drop-shadow-[0_0_6px_rgba(99,102,241,0.5)]\"\n />\n </g>\n\n {/* Center dot — the \"heartbeat\" */}\n <circle\n cx=\"24\"\n cy=\"24\"\n r=\"2\"\n className=\"fill-current opacity-20\"\n style={{ animation: 'org-loader-pulse 1.4s ease-in-out infinite' }}\n />\n\n <defs>\n <linearGradient id=\"org-loader-gradient\" x1=\"6\" y1=\"6\" x2=\"42\" y2=\"42\" gradientUnits=\"userSpaceOnUse\">\n <stop stopColor=\"#7C3AED\" />\n <stop offset=\"0.5\" stopColor=\"#8B5CF6\" />\n <stop offset=\"1\" stopColor=\"#6D28D9\" />\n </linearGradient>\n <linearGradient id=\"org-loader-diamond\" x1=\"0\" y1=\"0\" x2=\"1\" y2=\"1\">\n <stop stopColor=\"#7C3AED\" />\n <stop offset=\"1\" stopColor=\"#6D28D9\" />\n </linearGradient>\n </defs>\n </svg>\n </div>\n\n {caption && (\n <span className={cn(\n 'font-mono uppercase tracking-widest text-current opacity-40',\n s === 'xs' || s === 'sm' ? 'text-[8px]' : 'text-[10px]',\n )}>\n {caption}\n </span>\n )}\n </div>\n );\n\n if (overlay) {\n return (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/40 backdrop-blur-sm dark:bg-black/60\">\n {loader}\n </div>\n );\n }\n\n return loader;\n}\n\n/**\n * OrgLoaderInline — Tiny inline loading for buttons, inputs, etc.\n * Just the \"O\" ring without caption support.\n */\nfunction OrgLoaderInline({ className, ...props }: React.SVGProps<SVGSVGElement>) {\n return (\n <svg\n className={cn('h-4 w-4', className)}\n viewBox=\"0 0 48 48\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n role=\"status\"\n aria-label=\"Loading\"\n {...props}\n >\n <circle cx=\"24\" cy=\"24\" r=\"18\" className=\"stroke-current opacity-10\" strokeWidth=\"2\" />\n <circle\n cx=\"24\"\n cy=\"24\"\n r=\"18\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeDasharray=\"85 28.27\"\n className=\"origin-center\"\n style={{ animation: 'org-loader-spin 1.4s cubic-bezier(0.4, 0, 0.2, 1) infinite' }}\n />\n <g style={{ animation: 'org-loader-orbit 1.4s cubic-bezier(0.4, 0, 0.2, 1) infinite' }} className=\"origin-center\">\n <rect x=\"21\" y=\"3\" width=\"6\" height=\"6\" rx=\"1\" transform=\"rotate(45 24 6)\" fill=\"currentColor\" />\n </g>\n </svg>\n );\n}\n\nexport { OrgLoader, OrgLoaderInline, orgLoaderVariants };\n","import * as React from 'react'\nimport { Slot } from '@radix-ui/react-slot'\nimport { cva, type VariantProps } from 'class-variance-authority'\n\nimport { cn } from '../../lib/utils'\nimport { OrgLoaderInline } from './org-loader'\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-full text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n {\n variants: {\n variant: {\n default: 'bg-primary !text-white hover:bg-primary/90',\n destructive: '!bg-destructive !text-white hover:bg-destructive/90 focus-visible:ring-destructive/20',\n outline: 'border bg-background border-input !text-white hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:text-white dark:hover:bg-input/50',\n secondary: 'bg-secondary !text-white hover:bg-secondary/80 !dark:text-white',\n ghost: '!text-white hover:bg-accent hover:text-accent-foreground !dark:text-white dark:hover:bg-accent/50',\n link: '!text-primary underline-offset-4 hover:underline',\n },\n size: {\n default: 'h-9 px-4 py-2 has-[>svg]:px-3',\n sm: 'h-8 rounded-full gap-1.5 px-3 has-[>svg]:px-2.5',\n lg: 'h-10 rounded-full px-6 has-[>svg]:px-4',\n icon: 'size-9',\n 'icon-sm': 'size-8',\n 'icon-lg': 'size-10',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n },\n)\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean\n loading?: boolean\n}\n\nfunction Button({\n className,\n variant,\n size,\n asChild = false,\n loading = false,\n children,\n ...props\n}: ButtonProps) {\n const Comp = asChild ? Slot : 'button'\n\n return (\n <Comp\n data-slot=\"button\"\n className={cn(buttonVariants({ variant, size, className }))}\n disabled={props.disabled || loading}\n {...props}\n >\n {loading ? (\n <>\n <OrgLoaderInline className=\"shrink-0\" />\n {children}\n </>\n ) : (\n children\n )}\n </Comp>\n )\n}\n\nexport { Button, buttonVariants }\n","import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../lib/utils';\n\n/**\n * Input — Organic Glass input field\n *\n * Theme-aware: uses CSS variables for backgrounds and borders.\n * Squircle radius, organic easing, focus glow.\n */\nconst inputVariants = cva(\n 'flex w-full bg-theme-subtle backdrop-blur-md border border-theme-subtle rounded-xl px-4 py-3 text-sm font-light text-theme transition-all duration-[400ms] ease-[cubic-bezier(0.25,1,0.5,1)] file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-theme-muted focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50',\n {\n variants: {\n variant: {\n default: 'focus:border-primary-light/50 focus:shadow-[0_0_0_3px_rgba(99,102,241,0.10),0_0_20px_rgba(99,102,241,0.08)]',\n flat: 'rounded-xl focus:border-primary-light/50 focus:shadow-[0_0_0_3px_rgba(99,102,241,0.10)]',\n rounded: 'rounded-xl focus:border-primary-light/50 focus:shadow-[0_0_0_3px_rgba(99,102,241,0.10)]',\n error:\n 'border-error/30 bg-error/5 text-red-100 placeholder:text-red-500/30 focus:border-error focus:shadow-[0_0_0_3px_rgba(224,17,95,0.10)]',\n // ─── Cream Light theme (explicit light styling) ─────────────────────\n cream:\n 'bg-white/60 border-[rgba(36,25,121,0.06)] text-neutral-900 placeholder:text-neutral-400 focus:border-primary/40 focus:bg-white/80 focus:shadow-[0_0_0_3px_rgba(99,102,241,0.08)] backdrop-blur-sm',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n },\n);\n\nexport interface InputProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size'>,\n VariantProps<typeof inputVariants> {\n label?: string;\n error?: string;\n /** Position of the floating label */\n labelPosition?: 'left' | 'right';\n}\n\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n ({ className, variant, type, label, error, labelPosition = 'left', ...props }, ref) => {\n const id = React.useId();\n const effectiveVariant = error ? 'error' : variant;\n\n return (\n <div className=\"relative group\">\n {label && (\n <label\n htmlFor={id}\n className={cn(\n 'absolute -top-3 z-10 px-2 text-label uppercase tracking-widest',\n effectiveVariant === 'cream' ? 'bg-cream-base' : 'bg-surface',\n labelPosition === 'left' ? 'left-0 ml-2' : 'right-0 mr-2',\n error ? 'text-error' : 'text-primary-light',\n )}\n >\n {label}\n </label>\n )}\n <input\n id={id}\n type={type}\n className={cn(inputVariants({ variant: effectiveVariant, className }))}\n ref={ref}\n aria-invalid={!!error}\n aria-describedby={error ? `${id}-error` : undefined}\n {...props}\n />\n {error && (\n <div id={`${id}-error`} className=\"mt-2 flex items-center justify-end gap-2\">\n <span className=\"text-mono-xs text-error\">{error}</span>\n </div>\n )}\n </div>\n );\n },\n);\nInput.displayName = 'Input';\n\nexport { Input, inputVariants };\n","// ─────────────────────────────────────────────\n// ChatSidebar — Room list with sections\n// (Channels / DMs), search, create button\n// ─────────────────────────────────────────────\n\n'use client';\n\nimport * as React from 'react';\nimport { cn } from '../../lib/utils';\nimport { Button } from '../primitives/button';\nimport { ScrollArea } from '../primitives/scroll-area';\nimport { Badge } from '../primitives/badge';\nimport { Skeleton } from '../primitives/skeleton';\nimport { Tooltip, TooltipContent, TooltipTrigger, TooltipProvider } from '../primitives/tooltip';\nimport { Input } from '../primitives/input';\nimport {\n OrgComment,\n OrgPlus,\n OrgSearch,\n OrgChevronDown,\n OrgChevronRight,\n OrgLock,\n} from '../../icons';\nimport type { ChatRoom } from './types';\n\ninterface ChatSidebarProps {\n rooms: ChatRoom[];\n activeRoomId: string | null;\n loading: boolean;\n onSelectRoom: (roomId: string) => void;\n onCreateRoom: () => void;\n /** Mobile: trigger to close sidebar after selecting */\n onMobileClose?: () => void;\n}\n\nfunction getRoomIcon(room: ChatRoom): React.ReactNode {\n if (room.type === 'DIRECT') return <OrgComment className=\"w-4 h-4\" />;\n if (room.visibility === 'PRIVATE') return <OrgLock className=\"w-3.5 h-3.5\" />;\n return <span className=\"text-sm font-medium\">#</span>;\n}\n\nexport function ChatSidebar({\n rooms,\n activeRoomId,\n loading,\n onSelectRoom,\n onCreateRoom,\n onMobileClose,\n}: ChatSidebarProps) {\n const [search, setSearch] = React.useState('');\n const [channelsOpen, setChannelsOpen] = React.useState(true);\n const [dmsOpen, setDmsOpen] = React.useState(true);\n\n const filtered = React.useMemo(\n () =>\n search\n ? rooms.filter(\n (r) =>\n r.name?.toLowerCase().includes(search.toLowerCase()) ||\n r.slug?.toLowerCase().includes(search.toLowerCase()),\n )\n : rooms,\n [rooms, search],\n );\n\n const channels = filtered.filter((r) => r.type === 'CHANNEL');\n const dms = filtered.filter((r) => r.type === 'DIRECT');\n\n const handleSelect = (roomId: string) => {\n onSelectRoom(roomId);\n onMobileClose?.();\n };\n\n const renderRoom = (room: ChatRoom) => (\n <button\n key={room.id}\n onClick={() => handleSelect(room.id)}\n className={cn(\n 'flex items-center gap-2.5 w-full px-2.5 py-2 rounded-xl text-left text-sm transition-all duration-[400ms] ease-[cubic-bezier(0.25,1,0.5,1)]',\n 'active:scale-[0.98]',\n room.id === activeRoomId\n ? 'bg-primary/12 text-primary-light'\n : 'text-theme-secondary hover:bg-theme-subtle hover:text-theme',\n )}\n >\n <span\n className={cn(\n 'flex items-center justify-center h-7 w-7 rounded-xl text-sm shrink-0',\n room.id === activeRoomId\n ? 'bg-primary/20 text-primary-light'\n : 'bg-theme-subtle-10 text-theme-muted',\n )}\n >\n {getRoomIcon(room)}\n </span>\n\n <div className=\"flex-1 min-w-0\">\n <div className=\"font-medium text-[13px] truncate\">\n {room.name || 'Sem nome'}\n </div>\n </div>\n\n {room.unreadCount > 0 && (\n <Badge\n variant=\"primary\"\n className=\"text-[10px] px-1.5 py-0 min-w-[18px] h-[18px] flex items-center justify-center rounded-full animate-in zoom-in-50 duration-[400ms]\"\n >\n {room.unreadCount > 99 ? '99+' : room.unreadCount}\n </Badge>\n )}\n </button>\n );\n\n const renderSection = (\n title: string,\n items: ChatRoom[],\n isOpen: boolean,\n toggle: () => void,\n ) => (\n <div className=\"mb-1\">\n <button\n onClick={toggle}\n className=\"flex items-center gap-1 w-full px-2.5 py-1.5 text-[11px] font-semibold uppercase tracking-wider text-theme-muted hover:text-theme-secondary transition-colors\"\n >\n {isOpen ? (\n <OrgChevronDown className=\"w-3 h-3\" />\n ) : (\n <OrgChevronRight className=\"w-3 h-3\" />\n )}\n <span>{title}</span>\n <span className=\"ml-auto text-[10px] font-normal\">{items.length}</span>\n </button>\n {isOpen && (\n <div className=\"space-y-0.5 animate-in fade-in-0 slide-in-from-top-1 duration-[400ms]\">\n {items.map(renderRoom)}\n </div>\n )}\n </div>\n );\n\n return (\n <div className=\"flex flex-col h-full border-r border-theme-subtle bg-theme-surface\">\n {/* Header */}\n <div className=\"flex items-center justify-between px-4 py-3 border-b border-theme-subtle\">\n <h3 className=\"text-sm font-semibold text-theme\">Chat</h3>\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={onCreateRoom}\n className=\"h-7 w-7 p-0 text-theme-muted hover:text-primary-light hover:bg-primary/10 transition-colors\"\n >\n <OrgPlus className=\"w-4 h-4\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent>Nova conversa</TooltipContent>\n </Tooltip>\n </TooltipProvider>\n </div>\n\n {/* Search */}\n <div className=\"px-3 py-2\">\n <div className=\"relative\">\n <OrgSearch className=\"absolute left-2.5 top-1/2 -translate-y-1/2 w-3.5 h-3.5 text-theme-muted\" />\n <Input\n variant=\"flat\"\n placeholder=\"Pesquisar...\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n className=\"h-8 text-xs bg-theme-subtle border-theme-subtle rounded-xl pl-8\"\n />\n </div>\n </div>\n\n {/* Room list */}\n <ScrollArea className=\"flex-1\">\n <div className=\"px-2 pb-2\">\n {loading ? (\n <div className=\"space-y-0.5\">\n {Array.from({ length: 6 }).map((_, i) => (\n <div key={i} className=\"flex items-center gap-3 px-3 py-2\">\n <Skeleton variant=\"rounded\" className=\"h-7 w-7 shrink-0\" />\n <div className=\"flex-1 space-y-1.5\">\n <Skeleton className=\"h-3 w-24\" />\n </div>\n </div>\n ))}\n </div>\n ) : filtered.length === 0 ? (\n <div className=\"flex flex-col items-center py-8 text-theme-muted\">\n <OrgSearch className=\"w-6 h-6 mb-2 opacity-40\" />\n <p className=\"text-xs\">\n {search ? 'Sem resultados' : 'Sem conversas'}\n </p>\n {!search && (\n <button\n onClick={onCreateRoom}\n className=\"mt-3 text-xs text-primary-light/70 hover:text-primary-light transition-colors\"\n >\n Criar primeira conversa →\n </button>\n )}\n </div>\n ) : (\n <>\n {channels.length > 0 &&\n renderSection('Canais', channels, channelsOpen, () => setChannelsOpen(!channelsOpen))}\n {dms.length > 0 &&\n renderSection('Mensagens Diretas', dms, dmsOpen, () => setDmsOpen(!dmsOpen))}\n </>\n )}\n </div>\n </ScrollArea>\n </div>\n );\n}\n","// ─────────────────────────────────────────────\n// MessageBubble — Bolha de mensagem individual\n// ─────────────────────────────────────────────\n// Features:\n// - Suporte a menções destacadas\n// - Menu de ações (editar, responder, excluir)\n// - Preview de reply\n// - Reações com animações\n// - Mobile: tap para mostrar ações\n// - Framer-motion para transições suaves\n// ─────────────────────────────────────────────\n\n'use client';\n\nimport * as React from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { cn } from '../../../lib/utils';\nimport { Avatar, AvatarFallback } from '../../primitives/avatar';\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n TooltipProvider,\n} from '../../primitives/tooltip';\nimport { OrgEdit, OrgComment, OrgTrash, OrgClose } from '../../../icons';\nimport type { ChatMessage, ChatReaction } from '../types';\n\n// ─── Animation Variants ─────────────────────\n\nconst actionBarVariants = {\n hidden: { \n opacity: 0, \n y: 8,\n scale: 0.95,\n },\n visible: { \n opacity: 1, \n y: 0,\n scale: 1,\n transition: {\n type: 'spring',\n stiffness: 400,\n damping: 25,\n staggerChildren: 0.03,\n },\n },\n exit: { \n opacity: 0, \n y: 4,\n scale: 0.98,\n transition: { duration: 0.15 },\n },\n};\n\nconst actionItemVariants = {\n hidden: { opacity: 0, scale: 0.8 },\n visible: { \n opacity: 1, \n scale: 1,\n transition: { type: 'spring', stiffness: 500, damping: 30 },\n },\n};\n\nconst replyPreviewVariants = {\n hidden: { opacity: 0, x: -10, height: 0 },\n visible: { \n opacity: 1, \n x: 0, \n height: 'auto',\n transition: { duration: 0.2, ease: 'easeOut' },\n },\n};\n\nconst reactionVariants = {\n hidden: { scale: 0, opacity: 0 },\n visible: { \n scale: 1, \n opacity: 1,\n transition: { type: 'spring', stiffness: 500, damping: 25 },\n },\n tap: { scale: 1.2 },\n};\n\n// ─── Types ──────────────────────────────────\n\nexport interface MessageBubbleProps {\n message: ChatMessage;\n isCurrentUser: boolean;\n /** Mensagem original se for uma resposta */\n replyToMessage?: ChatMessage | null;\n /** Callbacks */\n onEdit?: (message: ChatMessage) => void;\n onReply?: (message: ChatMessage) => void;\n onDelete?: (messageId: string) => void;\n onReact?: (messageId: string, emoji: string) => void;\n /** Scroll to a referenced message */\n onScrollToMessage?: (messageId: string) => void;\n /** Se pode editar/deletar */\n canEdit?: boolean;\n canDelete?: boolean;\n}\n\n// ─── Helpers ────────────────────────────────\n\nfunction formatTime(iso: string): string {\n return new Date(iso).toLocaleTimeString('pt-BR', {\n hour: '2-digit',\n minute: '2-digit',\n });\n}\n\nfunction getInitials(name: string): string {\n if (!name) return '??';\n return name\n .split(' ')\n .map((w) => w[0])\n .slice(0, 2)\n .join('')\n .toUpperCase();\n}\n\nfunction groupReactions(reactions: ChatReaction[]) {\n const map = new Map<string, { count: number; users: string[] }>();\n reactions.forEach((r) => {\n const existing = map.get(r.emoji);\n if (existing) {\n existing.count++;\n existing.users.push(r.userId);\n } else {\n map.set(r.emoji, { count: 1, users: [r.userId] });\n }\n });\n return Array.from(map.entries());\n}\n\nfunction truncate(str: string, len: number): string {\n if (str.length <= len) return str;\n return str.slice(0, len) + '...';\n}\n\n// Common emoji reactions\nconst quickEmojis = ['👍', '❤️', '😂', '😮', '😢', '🎉'];\n\n// ─── Render content with mentions ───────────\n\nfunction renderContent(content: string) {\n const parts = content.split(/(@\\w+)/g);\n \n return parts.map((part, i) => {\n if (part.startsWith('@')) {\n return (\n <motion.span\n key={i}\n className=\"text-primary-light font-medium hover:underline cursor-pointer\"\n whileHover={{ scale: 1.02 }}\n whileTap={{ scale: 0.98 }}\n >\n {part}\n </motion.span>\n );\n }\n return part;\n });\n}\n\n// ─── Inline Action Bar ──────────────────────\n\ninterface ActionBarProps {\n show: boolean;\n onClose: () => void;\n onEdit?: () => void;\n onReply?: () => void;\n onDelete?: () => void;\n onReact?: (emoji: string) => void;\n canEdit: boolean;\n canDelete: boolean;\n position: 'left' | 'right';\n}\n\nfunction ActionBar({\n show,\n onClose,\n onEdit,\n onReply,\n onDelete,\n onReact,\n canEdit,\n canDelete,\n position,\n}: ActionBarProps) {\n return (\n <AnimatePresence>\n {show && (\n <motion.div\n variants={actionBarVariants}\n initial=\"hidden\"\n animate=\"visible\"\n exit=\"exit\"\n className={cn(\n 'absolute z-10 -top-12 flex items-center gap-1 p-1.5 rounded-xl',\n 'bg-theme-surface/95 backdrop-blur-md border border-theme-subtle shadow-lg',\n position === 'right' ? 'right-0' : 'left-0',\n )}\n >\n {/* Quick reactions */}\n {onReact && (\n <>\n {quickEmojis.slice(0, 4).map((emoji) => (\n <motion.button\n key={emoji}\n variants={actionItemVariants}\n whileHover={{ scale: 1.15 }}\n whileTap={{ scale: 0.9 }}\n onClick={() => {\n onReact(emoji);\n onClose();\n }}\n className=\"w-8 h-8 flex items-center justify-center rounded-xl hover:bg-theme-highlight text-base transition-colors\"\n >\n {emoji}\n </motion.button>\n ))}\n <div className=\"w-px h-6 bg-theme-subtle mx-1\" />\n </>\n )}\n\n {/* Action buttons */}\n {onReply && (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <motion.button\n variants={actionItemVariants}\n whileHover={{ scale: 1.1 }}\n whileTap={{ scale: 0.9 }}\n onClick={() => {\n onReply();\n onClose();\n }}\n className=\"p-2 rounded-xl text-theme-muted hover:text-theme hover:bg-theme-highlight transition-colors\"\n >\n <OrgComment className=\"w-4 h-4\" />\n </motion.button>\n </TooltipTrigger>\n <TooltipContent side=\"top\">Responder</TooltipContent>\n </Tooltip>\n </TooltipProvider>\n )}\n\n {canEdit && onEdit && (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <motion.button\n variants={actionItemVariants}\n whileHover={{ scale: 1.1 }}\n whileTap={{ scale: 0.9 }}\n onClick={() => {\n onEdit();\n onClose();\n }}\n className=\"p-2 rounded-xl text-theme-muted hover:text-theme hover:bg-theme-highlight transition-colors\"\n >\n <OrgEdit className=\"w-4 h-4\" />\n </motion.button>\n </TooltipTrigger>\n <TooltipContent side=\"top\">Editar</TooltipContent>\n </Tooltip>\n </TooltipProvider>\n )}\n\n {canDelete && onDelete && (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <motion.button\n variants={actionItemVariants}\n whileHover={{ scale: 1.1 }}\n whileTap={{ scale: 0.9 }}\n onClick={() => {\n onDelete();\n onClose();\n }}\n className=\"p-2 rounded-xl text-rose-400 hover:text-rose-300 hover:bg-rose-500/10 transition-colors\"\n >\n <OrgTrash className=\"w-4 h-4\" />\n </motion.button>\n </TooltipTrigger>\n <TooltipContent side=\"top\">Excluir</TooltipContent>\n </Tooltip>\n </TooltipProvider>\n )}\n\n {/* Close button (mobile) */}\n <motion.button\n variants={actionItemVariants}\n whileHover={{ scale: 1.1 }}\n whileTap={{ scale: 0.9 }}\n onClick={onClose}\n className=\"p-2 rounded-xl text-theme-muted hover:text-theme hover:bg-theme-highlight transition-colors md:hidden\"\n >\n <OrgClose className=\"w-4 h-4\" />\n </motion.button>\n </motion.div>\n )}\n </AnimatePresence>\n );\n}\n\n// ─── Reaction Pill ──────────────────────────\n\ninterface ReactionPillProps {\n emoji: string;\n count: number;\n onClick: () => void;\n}\n\nfunction ReactionPill({ emoji, count, onClick }: ReactionPillProps) {\n return (\n <motion.button\n variants={reactionVariants}\n initial=\"hidden\"\n animate=\"visible\"\n whileHover={{ scale: 1.05 }}\n whileTap=\"tap\"\n onClick={onClick}\n className=\"inline-flex items-center gap-1 px-2 py-1 rounded-full text-xs bg-theme-subtle border border-theme-subtle hover:bg-primary/10 hover:border-primary/20 transition-colors\"\n >\n <motion.span\n animate={{ rotate: [0, -10, 10, 0] }}\n transition={{ duration: 0.3, delay: 0.1 }}\n >\n {emoji}\n </motion.span>\n <span className=\"text-theme-muted font-medium\">{count}</span>\n </motion.button>\n );\n}\n\n// ─── Main Component ─────────────────────────\n\nexport function MessageBubble({\n message,\n isCurrentUser,\n replyToMessage,\n onEdit,\n onReply,\n onDelete,\n onReact,\n onScrollToMessage,\n canEdit = false,\n canDelete = false,\n}: MessageBubbleProps) {\n const [showActions, setShowActions] = React.useState(false);\n const bubbleRef = React.useRef<HTMLDivElement>(null);\n const isPending = message._status === 'pending';\n const isError = message._status === 'error';\n\n // Close actions when clicking outside\n React.useEffect(() => {\n const handleClickOutside = (e: MouseEvent) => {\n if (bubbleRef.current && !bubbleRef.current.contains(e.target as Node)) {\n setShowActions(false);\n }\n };\n\n if (showActions) {\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }\n }, [showActions]);\n\n // Handle tap/click on message\n const handleMessageClick = (e: React.MouseEvent) => {\n // Don't toggle if clicking on a reaction button\n if ((e.target as HTMLElement).closest('button')) return;\n setShowActions((prev) => !prev);\n };\n\n // Current user's messages: right-aligned\n if (isCurrentUser) {\n return (\n <motion.div\n ref={bubbleRef}\n data-message-id={message.id}\n initial={{ opacity: 0, y: 10, x: 20 }}\n animate={{ opacity: 1, y: 0, x: 0 }}\n transition={{ duration: 0.2, ease: 'easeOut' }}\n className={cn(\n 'group flex flex-col items-end px-2 py-1.5 relative',\n isPending && 'opacity-60',\n )}\n >\n {/* Reply preview */}\n <AnimatePresence>\n {replyToMessage && (\n <motion.div\n variants={replyPreviewVariants}\n initial=\"hidden\"\n animate=\"visible\"\n onClick={(e) => {\n e.stopPropagation();\n if (replyToMessage.id && onScrollToMessage) onScrollToMessage(replyToMessage.id);\n }}\n className={cn(\n 'flex items-center gap-2 mb-1 mr-2 px-2 py-1 bg-theme-subtle/50 border-l-2 border-primary-light/50 rounded-r text-[11px] overflow-hidden',\n onScrollToMessage && 'cursor-pointer hover:bg-theme-subtle/80 transition-colors',\n )}\n >\n <span className=\"text-theme-muted\">\n Respondendo a <span className=\"text-primary-light\">{replyToMessage.authorName || replyToMessage.authorId?.substring(0, 8)}</span>:\n </span>\n <span className=\"text-theme-muted truncate\">\n {truncate(replyToMessage.content, 40)}\n </span>\n </motion.div>\n )}\n </AnimatePresence>\n\n <div className=\"max-w-[75%] flex flex-col items-end relative\">\n {/* Action bar */}\n <ActionBar\n show={showActions}\n onClose={() => setShowActions(false)}\n onEdit={onEdit ? () => onEdit(message) : undefined}\n onReply={onReply ? () => onReply(message) : undefined}\n onDelete={onDelete ? () => onDelete(message.id) : undefined}\n onReact={onReact ? (emoji) => onReact(message.id, emoji) : undefined}\n canEdit={canEdit}\n canDelete={canDelete}\n position=\"right\"\n />\n\n <div className=\"flex items-baseline gap-2 mb-0.5 justify-end\">\n <span className=\"text-[11px] text-theme-muted\">\n {formatTime(message.createdAt)}\n </span>\n {message.edited && (\n <motion.span \n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n className=\"text-[10px] text-theme-muted italic\"\n >\n (editado)\n </motion.span>\n )}\n {isPending && (\n <motion.span \n animate={{ opacity: [0.5, 1, 0.5] }}\n transition={{ duration: 1.5, repeat: Infinity }}\n className=\"text-[10px] text-theme-muted italic\"\n >\n enviando...\n </motion.span>\n )}\n {isError && (\n <motion.span \n initial={{ scale: 0.8 }}\n animate={{ scale: 1 }}\n className=\"text-[10px] text-rose-400 font-medium\"\n >\n erro — toque para reenviar\n </motion.span>\n )}\n </div>\n\n <motion.div\n onClick={handleMessageClick}\n whileTap={{ scale: 0.98 }}\n className={cn(\n 'rounded-xl rounded-br-none px-4 py-2.5 cursor-pointer select-none',\n 'bg-primary !text-white',\n isError && 'bg-rose-500/80',\n showActions && 'ring-2 ring-primary-light/30',\n )}\n >\n <p className=\"text-[13px] leading-relaxed break-words whitespace-pre-wrap !text-white\">\n {renderContent(message.content)}\n </p>\n </motion.div>\n\n {/* Reactions */}\n {message.reactions.length > 0 && (\n <motion.div \n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n transition={{ delay: 0.1 }}\n className=\"flex flex-wrap gap-1 mt-1.5 justify-end\"\n >\n {groupReactions(message.reactions).map(([emoji, data]) => (\n <ReactionPill\n key={emoji}\n emoji={emoji}\n count={data.count}\n onClick={() => onReact?.(message.id, emoji)}\n />\n ))}\n </motion.div>\n )}\n </div>\n </motion.div>\n );\n }\n\n // Other users' messages: left-aligned with avatar\n return (\n <motion.div\n ref={bubbleRef}\n data-message-id={message.id}\n initial={{ opacity: 0, y: 10, x: -20 }}\n animate={{ opacity: 1, y: 0, x: 0 }}\n transition={{ duration: 0.2, ease: 'easeOut' }}\n onClick={handleMessageClick}\n className={cn(\n 'group flex gap-3 px-2 py-1.5 rounded-xl cursor-pointer select-none relative',\n 'transition-colors',\n isPending && 'opacity-60',\n isError && 'border-l-2 border-rose-500/50',\n showActions && 'bg-theme-subtle',\n )}\n >\n <motion.div whileHover={{ scale: 1.05 }} whileTap={{ scale: 0.95 }}>\n <Avatar shape=\"circle\" size=\"sm\" className=\"mt-0.5 shrink-0\">\n <AvatarFallback className=\"bg-primary/20 text-primary-light text-xs font-semibold\">\n {getInitials(message.authorName || message.authorId)}\n </AvatarFallback>\n </Avatar>\n </motion.div>\n\n <div className=\"flex-1 min-w-0 relative\">\n {/* Action bar */}\n <ActionBar\n show={showActions}\n onClose={() => setShowActions(false)}\n onEdit={onEdit ? () => onEdit(message) : undefined}\n onReply={onReply ? () => onReply(message) : undefined}\n onDelete={onDelete ? () => onDelete(message.id) : undefined}\n onReact={onReact ? (emoji) => onReact(message.id, emoji) : undefined}\n canEdit={canEdit}\n canDelete={canDelete}\n position=\"left\"\n />\n\n {/* Reply preview */}\n <AnimatePresence>\n {replyToMessage && (\n <motion.div\n variants={replyPreviewVariants}\n initial=\"hidden\"\n animate=\"visible\"\n onClick={(e) => {\n e.stopPropagation();\n if (replyToMessage.id && onScrollToMessage) onScrollToMessage(replyToMessage.id);\n }}\n className={cn(\n 'flex items-center gap-2 mb-1 px-2 py-1 bg-theme-subtle/50 border-l-2 border-primary-light/50 rounded-r text-[11px] overflow-hidden',\n onScrollToMessage && 'cursor-pointer hover:bg-theme-subtle/80 transition-colors',\n )}\n >\n <span className=\"text-theme-muted\">\n Respondendo a <span className=\"text-primary-light\">{replyToMessage.authorName}</span>:\n </span>\n <span className=\"text-theme-muted truncate\">\n {truncate(replyToMessage.content, 40)}\n </span>\n </motion.div>\n )}\n </AnimatePresence>\n\n <div className=\"flex items-baseline gap-2 mb-0.5\">\n <span className=\"text-[13px] font-semibold text-theme\">\n {message.authorName || message.authorId.substring(0, 8)}\n </span>\n <span className=\"text-[11px] text-theme-muted\">\n {formatTime(message.createdAt)}\n </span>\n {message.edited && (\n <motion.span \n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n className=\"text-[10px] text-theme-muted italic\"\n >\n (editado)\n </motion.span>\n )}\n {isPending && (\n <motion.span \n animate={{ opacity: [0.5, 1, 0.5] }}\n transition={{ duration: 1.5, repeat: Infinity }}\n className=\"text-[10px] text-theme-muted italic\"\n >\n enviando...\n </motion.span>\n )}\n {isError && (\n <motion.span \n initial={{ scale: 0.8 }}\n animate={{ scale: 1 }}\n className=\"text-[10px] text-rose-400 font-medium\"\n >\n erro ao enviar\n </motion.span>\n )}\n </div>\n\n <p className=\"text-[13px] text-theme-secondary leading-relaxed break-words whitespace-pre-wrap\">\n {renderContent(message.content)}\n </p>\n\n {/* Reactions */}\n {message.reactions.length > 0 && (\n <motion.div \n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n transition={{ delay: 0.1 }}\n className=\"flex flex-wrap gap-1 mt-1.5\"\n >\n {groupReactions(message.reactions).map(([emoji, data]) => (\n <ReactionPill\n key={emoji}\n emoji={emoji}\n count={data.count}\n onClick={() => onReact?.(message.id, emoji)}\n />\n ))}\n </motion.div>\n )}\n </div>\n </motion.div>\n );\n}\n\nMessageBubble.displayName = 'MessageBubble';\n","// ─────────────────────────────────────────────\n// MentionPopover — Popover para selecionar menções\n// ─────────────────────────────────────────────\n// Aparece ao digitar @ para selecionar:\n// - Usuários (@user)\n// - Projetos (@projeto)\n// - Tarefas (@tarefa)\n// ─────────────────────────────────────────────\n\n'use client';\n\nimport * as React from 'react';\nimport { cn } from '../../../lib/utils';\nimport { Avatar, AvatarFallback } from '../../primitives/avatar';\nimport { OrgFolder, OrgCheck, OrgTeam } from '../../../icons';\n\n// ─── Types ──────────────────────────────────\n\nexport type MentionType = 'user' | 'project' | 'task';\n\nexport interface MentionOption {\n id: string;\n type: MentionType;\n display: string;\n avatarUrl?: string | null;\n /** Secondary info (email, project key, etc.) */\n subtitle?: string;\n}\n\nexport interface MentionPopoverProps {\n open: boolean;\n query: string;\n options: MentionOption[];\n loading?: boolean;\n onSelect: (option: MentionOption) => void;\n onClose: () => void;\n /** Position from input caret */\n position?: { top: number; left: number };\n selectedIndex?: number;\n}\n\n// ─── Helpers ────────────────────────────────\n\nfunction getInitials(name: string): string {\n if (!name) return '?';\n return name\n .split(' ')\n .map((w) => w[0])\n .slice(0, 2)\n .join('')\n .toUpperCase();\n}\n\nfunction getMentionIcon(type: MentionType) {\n switch (type) {\n case 'user':\n return <OrgTeam className=\"w-4 h-4\" />;\n case 'project':\n return <OrgFolder className=\"w-4 h-4\" />;\n case 'task':\n return <OrgCheck className=\"w-4 h-4\" />;\n default:\n return null;\n }\n}\n\nfunction getMentionLabel(type: MentionType): string {\n switch (type) {\n case 'user':\n return 'Usuário';\n case 'project':\n return 'Projeto';\n case 'task':\n return 'Tarefa';\n default:\n return '';\n }\n}\n\n// ─── Main Component ─────────────────────────\n\nexport function MentionPopover({\n open,\n query,\n options,\n loading = false,\n onSelect,\n onClose,\n position,\n selectedIndex = 0,\n}: MentionPopoverProps) {\n const listRef = React.useRef<HTMLDivElement>(null);\n\n // Group options by type\n const groupedOptions = React.useMemo(() => {\n const groups: Record<MentionType, MentionOption[]> = {\n user: [],\n project: [],\n task: [],\n };\n options.forEach((opt) => {\n if (groups[opt.type]) {\n groups[opt.type].push(opt);\n }\n });\n return groups;\n }, [options]);\n\n // Scroll selected item into view\n React.useEffect(() => {\n if (listRef.current && selectedIndex >= 0) {\n const items = listRef.current.querySelectorAll('[data-mention-item]');\n const item = items[selectedIndex] as HTMLElement;\n if (item) {\n item.scrollIntoView({ block: 'nearest' });\n }\n }\n }, [selectedIndex]);\n\n if (!open) return null;\n\n const hasResults = options.length > 0;\n let flatIndex = -1;\n\n return (\n <div\n className={cn(\n 'absolute z-50 w-72 max-h-64 overflow-y-auto',\n 'bg-theme-surface border border-theme-subtle rounded-xl shadow-lg',\n 'animate-in fade-in-0 zoom-in-95 duration-[400ms]',\n )}\n style={position ? { top: position.top, left: position.left } : undefined}\n >\n {loading ? (\n <div className=\"px-3 py-4 flex items-center justify-center\">\n <div className=\"flex gap-1\">\n {[0, 1, 2].map((i) => (\n <span\n key={i}\n className=\"w-2 h-2 rounded-full bg-primary-light/50 animate-bounce\"\n style={{ animationDelay: `${i * 100}ms` }}\n />\n ))}\n </div>\n </div>\n ) : !hasResults ? (\n <div className=\"px-3 py-4 text-center\">\n <p className=\"text-sm text-theme-muted\">\n {query ? `Nenhum resultado para \"${query}\"` : 'Digite para pesquisar'}\n </p>\n </div>\n ) : (\n <div ref={listRef} className=\"py-1\">\n {(['user', 'project', 'task'] as MentionType[]).map((type) => {\n const typeOptions = groupedOptions[type];\n if (typeOptions.length === 0) return null;\n\n return (\n <div key={type}>\n {/* Group Header */}\n <div className=\"px-3 py-1.5 flex items-center gap-2\">\n <span className=\"text-theme-muted\">{getMentionIcon(type)}</span>\n <span className=\"text-[11px] font-medium text-theme-muted uppercase tracking-wide\">\n {getMentionLabel(type)}s\n </span>\n </div>\n\n {/* Options */}\n {typeOptions.map((option) => {\n flatIndex++;\n const isSelected = flatIndex === selectedIndex;\n\n return (\n <button\n key={option.id}\n data-mention-item\n onClick={() => onSelect(option)}\n className={cn(\n 'w-full flex items-center gap-3 px-3 py-2 text-left transition-colors',\n 'hover:bg-theme-highlight focus:bg-theme-highlight focus:outline-none',\n isSelected && 'bg-theme-highlight',\n )}\n >\n {type === 'user' ? (\n <Avatar shape=\"circle\" size=\"sm\" className=\"w-7 h-7\">\n <AvatarFallback className=\"bg-primary/20 text-primary-light text-[10px] font-semibold\">\n {getInitials(option.display)}\n </AvatarFallback>\n </Avatar>\n ) : (\n <span\n className={cn(\n 'w-7 h-7 rounded flex items-center justify-center',\n type === 'project' && 'bg-purple-500/20 text-purple-400',\n type === 'task' && 'bg-emerald-500/20 text-emerald-400',\n )}\n >\n {getMentionIcon(type)}\n </span>\n )}\n\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm font-medium text-theme truncate\">\n {option.display}\n </p>\n {option.subtitle && (\n <p className=\"text-[11px] text-theme-muted truncate\">\n {option.subtitle}\n </p>\n )}\n </div>\n </button>\n );\n })}\n </div>\n );\n })}\n </div>\n )}\n </div>\n );\n}\n\nMentionPopover.displayName = 'MentionPopover';\n","// ─────────────────────────────────────────────\n// MessageInput — Input de chat avançado\n// ─────────────────────────────────────────────\n// Features:\n// - Menções (@user, @projeto)\n// - Edição de mensagem\n// - Reply (referenciar mensagens)\n// - Cmd+Enter para enviar\n// - Animações suaves com framer-motion\n// ─────────────────────────────────────────────\n\n'use client';\n\nimport * as React from 'react';\nimport { AnimatePresence, motion } from 'framer-motion';\nimport { cn } from '../../../lib/utils';\nimport { Button } from '../../primitives/button';\nimport { Avatar, AvatarFallback } from '../../primitives/avatar';\nimport { MentionPopover, type MentionOption, type MentionType } from './mention-popover';\nimport { OrgClose, OrgComment, OrgEdit } from '../../../icons';\nimport type { ChatMessage } from '../types';\n\n// ─── Animation Variants ─────────────────────\n\nconst bannerVariants = {\n initial: { opacity: 0, y: -8, height: 0 },\n animate: { opacity: 1, y: 0, height: 'auto' },\n exit: { opacity: 0, y: -8, height: 0 },\n};\n\nconst bannerTransition = {\n duration: 0.2,\n ease: [0.4, 0, 0.2, 1],\n};\n\n// ─── Types ──────────────────────────────────\n\nexport interface ReplyToMessage {\n id: string;\n authorName: string;\n content: string;\n}\n\nexport interface MessageInputProps {\n value: string;\n onChange: (value: string) => void;\n onSend: () => void;\n onTyping?: () => void;\n onStopTyping?: () => void;\n disabled?: boolean;\n placeholder?: string;\n /** Mensagem sendo editada */\n editingMessage?: ChatMessage | null;\n onCancelEdit?: () => void;\n /** Mensagem sendo respondida */\n replyTo?: ReplyToMessage | null;\n onCancelReply?: () => void;\n /** Opções disponíveis para menções */\n mentionOptions?: MentionOption[];\n onMentionSearch?: (query: string, type: MentionType | null) => void;\n mentionLoading?: boolean;\n}\n\n// ─── Helpers ────────────────────────────────\n\nfunction getInitials(name: string): string {\n if (!name) return '?';\n return name\n .split(' ')\n .map((w) => w[0])\n .slice(0, 2)\n .join('')\n .toUpperCase();\n}\n\nfunction truncate(str: string, len: number): string {\n if (str.length <= len) return str;\n return str.slice(0, len) + '...';\n}\n\n// ─── Main Component ─────────────────────────\n\nexport function MessageInput({\n value,\n onChange,\n onSend,\n onTyping,\n onStopTyping,\n disabled = false,\n placeholder = 'Escreva uma mensagem...',\n editingMessage,\n onCancelEdit,\n replyTo,\n onCancelReply,\n mentionOptions = [],\n onMentionSearch,\n mentionLoading = false,\n}: MessageInputProps) {\n const inputRef = React.useRef<HTMLTextAreaElement>(null);\n const [showMentions, setShowMentions] = React.useState(false);\n const [mentionQuery, setMentionQuery] = React.useState('');\n const [mentionIndex, setMentionIndex] = React.useState(0);\n const [caretPosition, setCaretPosition] = React.useState<{ top: number; left: number } | null>(null);\n\n // Track @ mentions\n const detectMention = (text: string, cursorPos: number) => {\n const beforeCursor = text.slice(0, cursorPos);\n const match = beforeCursor.match(/@(\\w*)$/);\n \n if (match) {\n setShowMentions(true);\n setMentionQuery(match[1]);\n setMentionIndex(0);\n onMentionSearch?.(match[1], null);\n \n // Calculate popover position (simplified)\n if (inputRef.current) {\n const rect = inputRef.current.getBoundingClientRect();\n setCaretPosition({\n top: -200, // Above input\n left: 0,\n });\n }\n } else {\n setShowMentions(false);\n setMentionQuery('');\n }\n };\n\n const handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n const newValue = e.target.value;\n onChange(newValue);\n onTyping?.();\n detectMention(newValue, e.target.selectionStart || 0);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n // Handle mention navigation\n if (showMentions && mentionOptions.length > 0) {\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n setMentionIndex((i) => Math.min(i + 1, mentionOptions.length - 1));\n return;\n }\n if (e.key === 'ArrowUp') {\n e.preventDefault();\n setMentionIndex((i) => Math.max(i - 1, 0));\n return;\n }\n if (e.key === 'Enter' || e.key === 'Tab') {\n e.preventDefault();\n handleMentionSelect(mentionOptions[mentionIndex]);\n return;\n }\n if (e.key === 'Escape') {\n e.preventDefault();\n setShowMentions(false);\n return;\n }\n }\n\n // Cmd/Ctrl+Enter or just Enter (no shift) to send\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n if (value.trim()) {\n onSend();\n }\n }\n };\n\n const handleMentionSelect = (option: MentionOption) => {\n // Replace @query with @display\n const cursorPos = inputRef.current?.selectionStart || 0;\n const beforeCursor = value.slice(0, cursorPos);\n const afterCursor = value.slice(cursorPos);\n \n // Find the @ position\n const match = beforeCursor.match(/@(\\w*)$/);\n if (match) {\n const mentionStart = beforeCursor.length - match[0].length;\n const newValue = \n beforeCursor.slice(0, mentionStart) + \n `@${option.display} ` + \n afterCursor;\n onChange(newValue);\n }\n \n setShowMentions(false);\n setMentionQuery('');\n inputRef.current?.focus();\n };\n\n const handleBlur = () => {\n // Delay to allow click on mention option\n setTimeout(() => {\n setShowMentions(false);\n onStopTyping?.();\n }, 200);\n };\n\n // Auto-resize textarea\n React.useEffect(() => {\n if (inputRef.current) {\n inputRef.current.style.height = 'auto';\n inputRef.current.style.height = `${Math.min(inputRef.current.scrollHeight, 120)}px`;\n }\n }, [value]);\n\n // Focus on edit\n React.useEffect(() => {\n if (editingMessage && inputRef.current) {\n inputRef.current.focus();\n }\n }, [editingMessage]);\n\n const isEditing = !!editingMessage;\n const isReplying = !!replyTo;\n\n return (\n <div className=\"relative\">\n {/* Mention Popover */}\n <MentionPopover\n open={showMentions}\n query={mentionQuery}\n options={mentionOptions}\n loading={mentionLoading}\n onSelect={handleMentionSelect}\n onClose={() => setShowMentions(false)}\n position={caretPosition ?? undefined}\n selectedIndex={mentionIndex}\n />\n\n {/* Reply Preview */}\n <AnimatePresence>\n {isReplying && replyTo && (\n <motion.div\n key=\"reply-banner\"\n variants={bannerVariants}\n initial=\"initial\"\n animate=\"animate\"\n exit=\"exit\"\n transition={bannerTransition}\n className=\"overflow-hidden\"\n >\n <div className=\"flex items-center gap-2 px-3 py-2 mb-2 bg-theme-subtle border border-theme-subtle rounded-xl\">\n <OrgComment className=\"w-4 h-4 text-primary-light shrink-0\" />\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-[11px] font-medium text-primary-light\">\n Respondendo a {replyTo.authorName}\n </p>\n <p className=\"text-[12px] text-theme-muted truncate\">\n {truncate(replyTo.content, 60)}\n </p>\n </div>\n <button\n onClick={onCancelReply}\n className=\"p-1 rounded hover:bg-theme-highlight text-theme-muted hover:text-theme transition-colors\"\n >\n <OrgClose className=\"w-4 h-4\" />\n </button>\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n\n {/* Edit Mode Banner */}\n <AnimatePresence>\n {isEditing && (\n <motion.div\n key=\"edit-banner\"\n variants={bannerVariants}\n initial=\"initial\"\n animate=\"animate\"\n exit=\"exit\"\n transition={bannerTransition}\n className=\"overflow-hidden\"\n >\n <div className=\"flex items-center gap-2 px-3 py-2 mb-2 bg-amber-500/10 border border-amber-500/30 rounded-xl\">\n <OrgEdit className=\"w-4 h-4 text-amber-400 shrink-0\" />\n <p className=\"text-[12px] text-amber-300 flex-1\">\n Editando mensagem\n </p>\n <button\n onClick={onCancelEdit}\n className=\"p-1 rounded hover:bg-amber-500/20 text-amber-400 hover:text-amber-300 transition-colors\"\n >\n <OrgClose className=\"w-4 h-4\" />\n </button>\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n\n {/* Input Area */}\n <div\n className={cn(\n 'flex items-end gap-2 bg-theme-subtle border border-theme-subtle rounded-xl px-3 py-2 transition-colors',\n 'focus-within:border-primary/50',\n isEditing && 'border-amber-500/30 focus-within:border-amber-500/50',\n )}\n >\n <textarea\n ref={inputRef}\n value={value}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n onBlur={handleBlur}\n placeholder={placeholder}\n disabled={disabled}\n rows={1}\n className={cn(\n 'flex-1 bg-transparent border-none outline-none resize-none',\n 'text-[13px] text-theme placeholder:text-theme-muted',\n 'min-h-[24px] max-h-[120px]',\n )}\n />\n <Button\n variant={isEditing ? 'secondary' : 'default'}\n size=\"sm\"\n onClick={onSend}\n disabled={disabled || !value.trim()}\n className=\"h-7 px-3 text-xs shrink-0\"\n >\n {isEditing ? 'Salvar' : 'Enviar'}\n </Button>\n </div>\n\n {/* Hint */}\n <div className=\"flex items-center justify-between px-1 mt-1\">\n <p className=\"text-[10px] text-theme-muted\">\n <kbd className=\"px-1 py-0.5 rounded bg-theme-subtle text-[10px]\">@</kbd> para mencionar\n </p>\n <p className=\"text-[10px] text-theme-muted\">\n <kbd className=\"px-1 py-0.5 rounded bg-theme-subtle text-[10px]\">Enter</kbd> para enviar\n </p>\n </div>\n </div>\n );\n}\n\nMessageInput.displayName = 'MessageInput';\n","// ─────────────────────────────────────────────\n// ChatMessages — Message list + input (refatorado)\n// ─────────────────────────────────────────────\n// Features:\n// - Menções (@user, @projeto)\n// - Edição de mensagem\n// - Reply (referenciar mensagens)\n// - Typing indicator\n// - Optimistic UI\n// - Animações de entrada/saída com framer-motion\n// ─────────────────────────────────────────────\n\n'use client';\n\nimport * as React from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { cn } from '../../lib/utils';\nimport { Button } from '../primitives/button';\nimport { Skeleton } from '../primitives/skeleton';\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n TooltipProvider,\n} from '../primitives/tooltip';\nimport type { ChatRoom, ChatMessage, ChatPermissions, ChatUser } from './types';\nimport { OrgComment, OrgTeam } from '../../icons';\nimport { MessageBubble } from './primitives/message-bubble';\nimport { MessageInput, type ReplyToMessage } from './primitives/message-input';\nimport type { MentionOption } from './primitives/mention-popover';\n\n// ─── Animation Variants ─────────────────────\n\nconst chatPanelVariants = {\n hidden: { opacity: 0, x: 20 },\n visible: { \n opacity: 1, \n x: 0,\n transition: {\n type: 'spring',\n stiffness: 300,\n damping: 30,\n },\n },\n exit: { \n opacity: 0, \n x: -20,\n transition: {\n duration: 0.2,\n },\n },\n};\n\n// ─── Helpers ────────────────────────────────\n\nfunction formatDateSeparator(iso: string): string {\n const date = new Date(iso);\n const today = new Date();\n const yesterday = new Date(today);\n yesterday.setDate(yesterday.getDate() - 1);\n\n if (date.toDateString() === today.toDateString()) return 'Hoje';\n if (date.toDateString() === yesterday.toDateString()) return 'Ontem';\n return date.toLocaleDateString('pt-BR', { day: 'numeric', month: 'long' });\n}\n\nfunction shouldShowDateSeparator(messages: ChatMessage[], index: number): boolean {\n if (index === 0) return true;\n const curr = new Date(messages[index].createdAt).toDateString();\n const prev = new Date(messages[index - 1].createdAt).toDateString();\n return curr !== prev;\n}\n\n// ─── Typing Indicator ───────────────────────\n\nfunction TypingIndicator({ users }: { users: string[] }) {\n if (users.length === 0) return null;\n\n const text =\n users.length === 1\n ? `${users[0].substring(0, 8)} está digitando`\n : users.length === 2\n ? `${users[0].substring(0, 8)} e ${users[1].substring(0, 8)} estão digitando`\n : `${users.length} pessoas estão digitando`;\n\n return (\n <div className=\"flex items-center gap-2 px-5 py-1 animate-in fade-in-0 duration-[400ms]\">\n <div className=\"flex gap-0.5\">\n {[0, 1, 2].map((i) => (\n <span\n key={i}\n className=\"w-1.5 h-1.5 rounded-full bg-primary-light/50 animate-bounce\"\n style={{ animationDelay: `${i * 150}ms` }}\n />\n ))}\n </div>\n <span className=\"text-[11px] text-theme-muted\">{text}</span>\n </div>\n );\n}\n\n// ─── Chat Messages Panel ────────────────────\n\nexport interface ChatMessagesProps {\n room: ChatRoom | undefined;\n messages: ChatMessage[];\n loading: boolean;\n typingUsers?: string[];\n currentUserId: string;\n permissions: ChatPermissions;\n onSendMessage: (content: string, replyToId?: string) => void;\n onEditMessage?: (messageId: string, content: string) => void;\n onDeleteMessage?: (messageId: string) => void;\n onReactToMessage?: (messageId: string, emoji: string) => void;\n onTyping?: () => void;\n onStopTyping?: () => void;\n /** Abrir painel de gestão da room */\n onOpenManagement?: () => void;\n /** Mobile: voltar para sidebar */\n onBack?: () => void;\n /** Se está em mobile */\n isMobile: boolean;\n /** Usuários disponíveis para menções */\n mentionUsers?: ChatUser[];\n /** Projetos disponíveis para menções */\n mentionProjects?: Array<{ id: string; name: string; key?: string }>;\n /** Whether there are more (older) messages to load */\n hasMore?: boolean;\n /** Callback to load older messages (pagination) */\n onLoadMore?: () => void;\n /** Whether older messages are currently being loaded */\n loadingMore?: boolean;\n}\n\nexport function ChatMessages({\n room,\n messages,\n loading,\n typingUsers = [],\n currentUserId,\n permissions,\n onSendMessage,\n onEditMessage,\n onDeleteMessage,\n onReactToMessage,\n onTyping,\n onStopTyping,\n onOpenManagement,\n onBack,\n isMobile,\n mentionUsers = [],\n mentionProjects = [],\n hasMore = false,\n onLoadMore,\n loadingMore = false,\n}: ChatMessagesProps) {\n const [inputValue, setInputValue] = React.useState('');\n const [editingMessage, setEditingMessage] = React.useState<ChatMessage | null>(null);\n const [replyTo, setReplyTo] = React.useState<ReplyToMessage | null>(null);\n const [mentionOptions, setMentionOptions] = React.useState<MentionOption[]>([]);\n const scrollRef = React.useRef<HTMLDivElement>(null);\n\n // Build message lookup for replies\n const messagesById = React.useMemo(() => {\n const map = new Map<string, ChatMessage>();\n messages.forEach((m) => map.set(m.id, m));\n return map;\n }, [messages]);\n\n // Scroll to bottom when messages change (only for new messages, not pagination)\n const isInitialLoad = React.useRef(true);\n const prevMessageCount = React.useRef(messages.length);\n\n React.useEffect(() => {\n const el = scrollRef.current;\n if (!el) return;\n\n // Scroll to bottom on initial load and new messages (appended at end)\n if (isInitialLoad.current || messages.length > prevMessageCount.current) {\n // Only auto-scroll if user is near bottom (or initial load)\n const nearBottom = isInitialLoad.current || (el.scrollHeight - el.scrollTop - el.clientHeight < 120);\n if (nearBottom) {\n requestAnimationFrame(() => {\n el.scrollTop = el.scrollHeight;\n });\n }\n isInitialLoad.current = false;\n }\n prevMessageCount.current = messages.length;\n }, [messages]);\n\n // Reset initial load flag when room changes\n React.useEffect(() => {\n isInitialLoad.current = true;\n }, [room?.id]);\n\n // Scroll-to-top detection for loading older messages\n const handleScroll = React.useCallback(() => {\n const el = scrollRef.current;\n if (!el || !hasMore || loadingMore || !onLoadMore) return;\n if (el.scrollTop < 60) {\n onLoadMore();\n }\n }, [hasMore, loadingMore, onLoadMore]);\n\n // When entering edit mode, populate input\n React.useEffect(() => {\n if (editingMessage) {\n setInputValue(editingMessage.content);\n }\n }, [editingMessage]);\n\n const handleSend = () => {\n if (!inputValue.trim()) return;\n\n if (editingMessage) {\n // Edit mode\n onEditMessage?.(editingMessage.id, inputValue.trim());\n setEditingMessage(null);\n } else {\n // Send new message\n onSendMessage(inputValue.trim(), replyTo?.id);\n setReplyTo(null);\n }\n \n setInputValue('');\n };\n\n const handleCancelEdit = () => {\n setEditingMessage(null);\n setInputValue('');\n };\n\n const handleCancelReply = () => {\n setReplyTo(null);\n };\n\n const handleEditMessage = (message: ChatMessage) => {\n setEditingMessage(message);\n setReplyTo(null); // Clear reply when editing\n };\n\n const handleReplyToMessage = (message: ChatMessage) => {\n setReplyTo({\n id: message.id,\n authorName: message.authorName || message.authorId.substring(0, 8),\n content: message.content,\n });\n setEditingMessage(null); // Clear edit when replying\n };\n\n // Scroll to a referenced message (reply click)\n const handleScrollToMessage = React.useCallback((messageId: string) => {\n const el = scrollRef.current?.querySelector(`[data-message-id=\"${messageId}\"]`);\n if (el) {\n el.scrollIntoView({ behavior: 'smooth', block: 'center' });\n // Briefly highlight the target message\n el.classList.add('bg-primary/10');\n setTimeout(() => el.classList.remove('bg-primary/10'), 1500);\n }\n }, []);\n\n const handleMentionSearch = (query: string) => {\n const q = query.toLowerCase();\n const options: MentionOption[] = [];\n\n // Search users\n mentionUsers\n .filter((u) => u.displayName.toLowerCase().includes(q) || u.email?.toLowerCase().includes(q))\n .slice(0, 5)\n .forEach((u) => {\n options.push({\n id: u.id,\n type: 'user',\n display: u.displayName,\n avatarUrl: u.avatarUrl,\n subtitle: u.email,\n });\n });\n\n // Search projects\n mentionProjects\n .filter((p) => p.name.toLowerCase().includes(q) || p.key?.toLowerCase().includes(q))\n .slice(0, 3)\n .forEach((p) => {\n options.push({\n id: p.id,\n type: 'project',\n display: p.name,\n subtitle: p.key,\n });\n });\n\n setMentionOptions(options);\n };\n\n // ─── Empty state (no room selected) ─────\n if (!room) {\n return (\n <div className=\"flex flex-1 flex-col items-center justify-center text-center px-6\">\n <div className=\"w-16 h-16 rounded-xl bg-primary/10 flex items-center justify-center mb-4\">\n <OrgComment className=\"w-8 h-8 text-primary-light/60\" />\n </div>\n <h3 className=\"text-lg font-medium text-theme mb-2\">Selecione uma conversa</h3>\n <p className=\"text-sm text-theme-muted max-w-[240px]\">\n Escolha um canal ou mensagem direta para começar a conversar.\n </p>\n </div>\n );\n }\n\n return (\n <AnimatePresence mode=\"wait\">\n <motion.div\n key={room.id}\n variants={chatPanelVariants}\n initial=\"hidden\"\n animate=\"visible\"\n exit=\"exit\"\n className=\"flex flex-col h-full overflow-hidden relative\"\n >\n {/* Header */}\n <div className=\"flex items-center gap-3 px-4 md:px-5 py-3 border-b border-theme-subtle\">\n {/* Mobile: botão voltar */}\n {isMobile && onBack && (\n <button\n onClick={onBack}\n className=\"p-1.5 rounded-xl text-theme-muted hover:text-theme hover:bg-theme-subtle transition-colors\"\n >\n <svg className=\"w-5 h-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M15 19l-7-7 7-7\" />\n </svg>\n </button>\n )}\n\n <span\n className={cn(\n 'flex items-center justify-center h-8 w-8 rounded-xl text-sm',\n 'bg-primary/15 text-primary-light',\n )}\n >\n {room.type === 'DIRECT' ? <OrgComment className=\"w-4 h-4\" /> : '#'}\n </span>\n <div className=\"flex-1 min-w-0\">\n <h3 className=\"text-[15px] font-semibold text-theme truncate\">\n {room.name || 'Sem nome'}\n </h3>\n <p className=\"text-[11px] text-theme-muted truncate\">\n {room.memberCount} membro{room.memberCount !== 1 ? 's' : ''}\n </p>\n </div>\n\n {/* Room management toggle */}\n {onOpenManagement && (\n <div className=\"flex items-center gap-1\">\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={onOpenManagement}\n className=\"h-8 w-8 p-0 text-theme-muted hover:text-theme\"\n >\n <OrgTeam className=\"w-4 h-4\" />\n </Button>\n </TooltipTrigger>\n <TooltipContent>Detalhes do canal</TooltipContent>\n </Tooltip>\n </TooltipProvider>\n </div>\n )}\n </div>\n\n {/* Messages */}\n <div\n ref={scrollRef}\n onScroll={handleScroll}\n className=\"flex-1 overflow-y-auto px-3 md:px-5 py-4 space-y-0.5\"\n >\n {/* Load more indicator at top */}\n {loadingMore && (\n <div className=\"flex justify-center py-3\">\n <div className=\"flex items-center gap-2 text-xs text-theme-muted\">\n <div className=\"w-4 h-4 border-2 border-primary-light/30 border-t-primary-light rounded-full animate-spin\" />\n Carregando mensagens anteriores...\n </div>\n </div>\n )}\n {hasMore && !loadingMore && (\n <div className=\"flex justify-center py-2\">\n <button\n onClick={onLoadMore}\n className=\"text-xs text-primary-light hover:text-primary transition-colors\"\n >\n ↑ Carregar mais mensagens\n </button>\n </div>\n )}\n {loading ? (\n <div className=\"space-y-4 py-4\">\n {Array.from({ length: 5 }).map((_, i) => (\n <div key={i} className=\"flex gap-3\">\n <Skeleton variant=\"circular\" className=\"h-8 w-8 shrink-0\" />\n <div className=\"flex-1 space-y-1.5\">\n <Skeleton className=\"h-3 w-32\" />\n <Skeleton className=\"h-3 w-full\" />\n <Skeleton className=\"h-3 w-3/4\" />\n </div>\n </div>\n ))}\n </div>\n ) : messages.length === 0 ? (\n <div className=\"flex flex-col items-center justify-center h-full\">\n <div className=\"w-12 h-12 rounded-xl bg-primary/10 flex items-center justify-center mb-3\">\n <OrgComment className=\"w-6 h-6 text-primary-light/50\" />\n </div>\n <p className=\"text-sm text-theme-muted\">Ainda sem mensagens.</p>\n <p className=\"text-xs text-theme-muted mt-1\">Comece a conversa!</p>\n </div>\n ) : (\n messages.map((msg, idx) => {\n const isCurrentUser = !!currentUserId && String(msg.authorId) === String(currentUserId);\n const replyToMessage = (msg.replyToId || msg.parentId) ? messagesById.get(msg.replyToId || msg.parentId || '') : null;\n\n return (\n <React.Fragment key={msg.id}>\n {shouldShowDateSeparator(messages, idx) && (\n <div className=\"flex items-center gap-3 py-3\">\n <div className=\"flex-1 h-px bg-theme-subtle-10\" />\n <span className=\"text-[11px] text-theme-muted font-medium\">\n {formatDateSeparator(msg.createdAt)}\n </span>\n <div className=\"flex-1 h-px bg-theme-subtle-10\" />\n </div>\n )}\n <MessageBubble\n message={msg}\n isCurrentUser={isCurrentUser}\n replyToMessage={replyToMessage}\n onEdit={isCurrentUser ? handleEditMessage : undefined}\n onReply={handleReplyToMessage}\n onDelete={isCurrentUser ? (id: string) => onDeleteMessage?.(id) : undefined}\n onReact={(id: string, emoji: string) => onReactToMessage?.(id, emoji)}\n onScrollToMessage={handleScrollToMessage}\n canEdit={isCurrentUser}\n canDelete={isCurrentUser}\n />\n </React.Fragment>\n );\n })\n )}\n </div>\n\n {/* Typing indicator */}\n <TypingIndicator users={typingUsers} />\n\n {/* Input */}\n <div className=\"px-3 md:px-5 py-3 border-t border-theme-subtle\">\n <MessageInput\n value={inputValue}\n onChange={setInputValue}\n onSend={handleSend}\n onTyping={onTyping}\n onStopTyping={onStopTyping}\n editingMessage={editingMessage}\n onCancelEdit={handleCancelEdit}\n replyTo={replyTo}\n onCancelReply={handleCancelReply}\n mentionOptions={mentionOptions}\n onMentionSearch={handleMentionSearch}\n placeholder=\"Escreva uma mensagem...\"\n />\n </div>\n </motion.div>\n </AnimatePresence>\n );\n}\n\nChatMessages.displayName = 'ChatMessages';\n","import * as React from 'react';\nimport { cn } from '../../lib/utils';\n\nfunction Label({ className, ...props }: React.ComponentProps<'label'>) {\n return (\n <label\n data-slot=\"label\"\n className={cn(\n 'text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70',\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Label };\n","import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../lib/utils';\n\n/**\n * Textarea — Organic Glass textarea field\n *\n * Theme-aware: uses CSS variables for backgrounds and borders.\n * Squircle radius, organic easing, focus glow.\n */\nconst textareaVariants = cva(\n 'flex w-full min-h-[100px] bg-white/[0.03] backdrop-blur-md border border-primary/15 rounded-xl px-4 py-3 text-sm font-light text-org-text transition-all duration-[400ms] ease-[cubic-bezier(0.25,1,0.5,1)] placeholder:text-org-text-muted focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50 resize-none',\n {\n variants: {\n variant: {\n default: 'focus:border-primary-light/50 focus:shadow-[0_0_0_3px_rgba(99,102,241,0.10),0_0_20px_rgba(99,102,241,0.08)]',\n flat: 'rounded-xl focus:border-primary-light/50 focus:shadow-[0_0_0_3px_rgba(99,102,241,0.10)]',\n rounded: 'rounded-xl focus:border-primary-light/50 focus:shadow-[0_0_0_3px_rgba(99,102,241,0.10)]',\n error:\n 'border-error/30 bg-error/5 text-red-100 placeholder:text-red-500/30 focus:border-error focus:shadow-[0_0_0_3px_rgba(224,17,95,0.10)]',\n cream:\n 'bg-white/60 border-[rgba(36,25,121,0.06)] text-neutral-900 placeholder:text-neutral-400 focus:border-primary/40 focus:bg-white/80 focus:shadow-[0_0_0_3px_rgba(99,102,241,0.08)] backdrop-blur-sm',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n },\n);\n\nexport interface TextareaProps\n extends Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, 'size'>,\n VariantProps<typeof textareaVariants> {\n label?: string;\n error?: string;\n labelPosition?: 'left' | 'right';\n}\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n ({ className, variant, label, error, labelPosition = 'left', ...props }, ref) => {\n const id = React.useId();\n const effectiveVariant = error ? 'error' : variant;\n\n return (\n <div className=\"relative group\">\n {label && (\n <label\n htmlFor={id}\n className={cn(\n 'absolute -top-3 z-10 px-2 text-label uppercase tracking-widest',\n effectiveVariant === 'cream' ? 'bg-cream-base' : 'bg-surface',\n labelPosition === 'left' ? 'left-0 ml-2' : 'right-0 mr-2',\n error ? 'text-error' : 'text-primary-light',\n )}\n >\n {label}\n </label>\n )}\n <textarea\n id={id}\n className={cn(textareaVariants({ variant: effectiveVariant, className }))}\n ref={ref}\n aria-invalid={!!error}\n aria-describedby={error ? `${id}-error` : undefined}\n {...props}\n />\n {error && (\n <div id={`${id}-error`} className=\"mt-2 flex items-center justify-end gap-2\">\n <span className=\"text-mono-xs text-error\">{error}</span>\n </div>\n )}\n </div>\n );\n },\n);\nTextarea.displayName = 'Textarea';\n\nexport { Textarea, textareaVariants };\n","'use client';\n\nimport * as React from 'react';\nimport * as DialogPrimitive from '@radix-ui/react-dialog';\nimport { XIcon } from 'lucide-react';\nimport { cn } from '../../lib/utils';\n\nfunction Dialog({ ...props }: React.ComponentProps<typeof DialogPrimitive.Root>) {\n return <DialogPrimitive.Root data-slot=\"dialog\" {...props} />;\n}\n\nfunction DialogTrigger({ ...props }: React.ComponentProps<typeof DialogPrimitive.Trigger>) {\n return <DialogPrimitive.Trigger data-slot=\"dialog-trigger\" {...props} />;\n}\n\nfunction DialogPortal({ ...props }: React.ComponentProps<typeof DialogPrimitive.Portal>) {\n return <DialogPrimitive.Portal data-slot=\"dialog-portal\" {...props} />;\n}\n\nfunction DialogClose({ ...props }: 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 'data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-theme-subtle-20',\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 'data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-2xl border border-gray-200 dark:!border-gray-800 !bg-white dark:!bg-[#0D0A1A] !text-gray-900 dark:!text-gray-100 p-6 shadow-2xl dark:shadow-[0_0_40px_rgba(124,58,237,0.15)] duration-[400ms] sm:max-w-lg',\n className,\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close\n data-slot=\"dialog-close\"\n className=\"ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_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({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"dialog-footer\"\n className={cn('flex flex-col-reverse gap-2 sm:flex-row sm:justify-end', className)}\n {...props}\n />\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-theme-secondary text-sm', 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","// ─────────────────────────────────────────────\n// ResponsiveDialog — Dialog em desktop, Drawer em mobile\n// ─────────────────────────────────────────────\n// Componente único para substituir Dialog/Drawer condicionais.\n// Usa useMediaQuery para detectar mobile/desktop.\n// ─────────────────────────────────────────────\n\n'use client';\n\nimport * as React from 'react';\nimport { motion } from 'framer-motion';\nimport { cn } from '../../lib/utils';\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogDescription,\n DialogFooter,\n} from './dialog';\nimport {\n Drawer,\n DrawerContent,\n DrawerHeader,\n DrawerTitle,\n DrawerDescription,\n DrawerFooter,\n} from './drawer';\n\n// ─── Hook: useMediaQuery ────────────────────\n\nfunction useMediaQuery(query: string): boolean {\n const [matches, setMatches] = React.useState(false);\n\n React.useEffect(() => {\n const mql = window.matchMedia(query);\n setMatches(mql.matches);\n const handler = (e: MediaQueryListEvent) => setMatches(e.matches);\n mql.addEventListener('change', handler);\n return () => mql.removeEventListener('change', handler);\n }, [query]);\n\n return matches;\n}\n\n// ─── Types ──────────────────────────────────\n\nexport interface ResponsiveDialogProps {\n /** Se o dialog/drawer está aberto */\n open: boolean;\n /** Callback quando o estado open muda */\n onOpenChange: (open: boolean) => void;\n /** Título do dialog/drawer */\n title?: string;\n /** Descrição/subtítulo */\n description?: string;\n /** Conteúdo principal */\n children: React.ReactNode;\n /** Ações do footer (botões) */\n footer?: React.ReactNode;\n /** Query para detectar desktop (default: min-width: 768px) */\n desktopQuery?: string;\n /** Classes CSS adicionais */\n className?: string;\n /** Classes CSS para o content wrapper */\n contentClassName?: string;\n}\n\n// ─── Component ──────────────────────────────\n\nexport function ResponsiveDialog({\n open,\n onOpenChange,\n title,\n description,\n children,\n footer,\n desktopQuery = '(min-width: 768px)',\n className,\n contentClassName,\n}: ResponsiveDialogProps) {\n const isDesktop = useMediaQuery(desktopQuery);\n\n if (isDesktop) {\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent\n className={cn('max-w-2xl max-h-[85vh] overflow-y-auto', contentClassName)}\n >\n {(title || description) && (\n <DialogHeader>\n {title && <DialogTitle className=\"text-lg\">{title}</DialogTitle>}\n {description && (\n <DialogDescription className=\"text-theme-muted text-sm\">\n {description}\n </DialogDescription>\n )}\n </DialogHeader>\n )}\n <div className={cn('text-theme', className)}>{children}</div>\n {footer && <DialogFooter>{footer}</DialogFooter>}\n </DialogContent>\n </Dialog>\n );\n }\n\n return (\n <Drawer open={open} onOpenChange={onOpenChange}>\n <DrawerContent className={cn('max-h-[90vh]', contentClassName)}>\n {(title || description) && (\n <DrawerHeader className=\"text-left\">\n {title && <DrawerTitle className=\"text-lg\">{title}</DrawerTitle>}\n {description && (\n <DrawerDescription className=\"text-theme-muted text-sm\">\n {description}\n </DrawerDescription>\n )}\n </DrawerHeader>\n )}\n <div className={cn('overflow-y-auto px-4 pb-4 text-theme', className)}>\n {children}\n </div>\n {footer && <DrawerFooter>{footer}</DrawerFooter>}\n </DrawerContent>\n </Drawer>\n );\n}\n\nResponsiveDialog.displayName = 'ResponsiveDialog';\n","'use client';\n\nimport * as React from 'react';\nimport * as TabsPrimitive from '@radix-ui/react-tabs';\nimport { cn } from '../../lib/utils';\n\nconst Tabs = TabsPrimitive.Root;\n\nfunction TabsList({\n className,\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.List>) {\n return (\n <TabsPrimitive.List\n data-slot=\"tabs-list\"\n className={cn(\n 'inline-flex h-10 items-center justify-center rounded-xl bg-white/[0.03] backdrop-blur-md border border-primary/15 p-1 text-theme-muted',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction TabsTrigger({\n className,\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.Trigger>) {\n return (\n <TabsPrimitive.Trigger\n data-slot=\"tabs-trigger\"\n className={cn(\n 'inline-flex items-center justify-center whitespace-nowrap rounded-lg px-3 py-1.5 text-sm font-medium ring-offset-background transition-all duration-[400ms] ease-[cubic-bezier(0.25,1,0.5,1)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-white/[0.05] data-[state=active]:text-theme data-[state=active]:shadow-inner-light',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction TabsContent({\n className,\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.Content>) {\n return (\n <TabsPrimitive.Content\n data-slot=\"tabs-content\"\n className={cn(\n 'mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent };\n","// ─────────────────────────────────────────────\n// CreateRoomDialog — Channel & DM creation\n// Progressive disclosure: starts simple, expands\n// ─────────────────────────────────────────────\n\n'use client';\n\nimport * as React from 'react';\nimport { cn } from '../../lib/utils';\nimport { Button } from '../primitives/button';\nimport { Input } from '../primitives/input';\nimport { Label } from '../primitives/label';\nimport { Textarea } from '../primitives/textarea';\nimport { ResponsiveDialog } from '../primitives/responsive-dialog';\nimport { Tabs, TabsList, TabsTrigger, TabsContent } from '../primitives/tabs';\nimport { ScrollArea } from '../primitives/scroll-area';\nimport { Avatar, AvatarFallback } from '../primitives/avatar';\nimport { Badge } from '../primitives/badge';\nimport { Skeleton } from '../primitives/skeleton';\nimport { OrgComment, OrgTeam, OrgSearch, OrgLock, OrgGlobe, OrgClose } from '../../icons';\nimport type { ChatUser, RoomVisibility } from './types';\n\ninterface CreateRoomDialogProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n onCreateChannel: (data: {\n name: string;\n description?: string;\n visibility: RoomVisibility;\n memberIds: string[];\n }) => Promise<any>;\n onCreateDM: (targetUserId: string) => Promise<any>;\n workspaceMembers: ChatUser[];\n loadingMembers?: boolean;\n}\n\nfunction getInitials(name: string): string {\n return name\n .split(' ')\n .map((w) => w[0])\n .slice(0, 2)\n .join('')\n .toUpperCase();\n}\n\nexport function CreateRoomDialog({\n open,\n onOpenChange,\n onCreateChannel,\n onCreateDM,\n workspaceMembers,\n loadingMembers,\n}: CreateRoomDialogProps) {\n const [tab, setTab] = React.useState<'channel' | 'dm'>('channel');\n const [creating, setCreating] = React.useState(false);\n\n // Channel form\n const [channelName, setChannelName] = React.useState('');\n const [channelDesc, setChannelDesc] = React.useState('');\n const [visibility, setVisibility] = React.useState<RoomVisibility>('WORKSPACE');\n const [selectedMembers, setSelectedMembers] = React.useState<string[]>([]);\n const [showAdvanced, setShowAdvanced] = React.useState(false);\n\n // DM search\n const [dmSearch, setDmSearch] = React.useState('');\n\n // Inline validation\n const [nameError, setNameError] = React.useState('');\n\n const validateName = (value: string) => {\n if (!value.trim()) {\n setNameError('Nome do canal é obrigatório');\n return false;\n }\n if (value.length < 2) {\n setNameError('Nome deve ter pelo menos 2 caracteres');\n return false;\n }\n if (!/^[a-zA-Z0-9À-ÿ\\s\\-_]+$/.test(value)) {\n setNameError('Apenas letras, números, espaços e hífens');\n return false;\n }\n setNameError('');\n return true;\n };\n\n const filteredMembers = React.useMemo(() => {\n if (!dmSearch) return workspaceMembers;\n const q = dmSearch.toLowerCase();\n return workspaceMembers.filter(\n (m) =>\n m.displayName.toLowerCase().includes(q) ||\n m.email?.toLowerCase().includes(q),\n );\n }, [workspaceMembers, dmSearch]);\n\n const handleCreateChannel = async () => {\n if (!validateName(channelName)) return;\n setCreating(true);\n try {\n const result = await onCreateChannel({\n name: channelName.trim(),\n description: channelDesc.trim() || undefined,\n visibility,\n memberIds: selectedMembers,\n });\n if (result) {\n resetForm();\n onOpenChange(false);\n }\n } finally {\n setCreating(false);\n }\n };\n\n const handleCreateDM = async (userId: string) => {\n setCreating(true);\n try {\n const result = await onCreateDM(userId);\n if (result) {\n resetForm();\n onOpenChange(false);\n }\n } finally {\n setCreating(false);\n }\n };\n\n const toggleMember = (userId: string) => {\n setSelectedMembers((prev) =>\n prev.includes(userId)\n ? prev.filter((id) => id !== userId)\n : [...prev, userId],\n );\n };\n\n const resetForm = () => {\n setChannelName('');\n setChannelDesc('');\n setVisibility('WORKSPACE');\n setSelectedMembers([]);\n setShowAdvanced(false);\n setDmSearch('');\n setNameError('');\n setTab('channel');\n };\n\n return (\n <ResponsiveDialog \n open={open} \n onOpenChange={onOpenChange}\n title=\"Nova conversa\"\n description=\"Crie um canal para a equipa ou inicie uma conversa direta.\"\n contentClassName=\"sm:max-w-md\"\n >\n <Tabs value={tab} onValueChange={(v) => setTab(v as 'channel' | 'dm')}>\n <TabsList className=\"grid w-full grid-cols-2 bg-theme-subtle\">\n <TabsTrigger\n value=\"channel\"\n className=\"text-xs data-[state=active]:bg-primary/20 data-[state=active]:text-primary-light\"\n >\n <OrgTeam className=\"w-3.5 h-3.5 mr-1.5\" />\n Canal\n </TabsTrigger>\n <TabsTrigger\n value=\"dm\"\n className=\"text-xs data-[state=active]:bg-primary/20 data-[state=active]:text-primary-light\"\n >\n <OrgComment className=\"w-3.5 h-3.5 mr-1.5\" />\n Mensagem Direta\n </TabsTrigger>\n </TabsList>\n\n {/* ─── Channel Creation ─── */}\n <TabsContent value=\"channel\" className=\"space-y-4 mt-4\">\n {/* Progressive disclosure: Name first */}\n <div className=\"space-y-2\">\n <Label className=\"text-theme-secondary text-xs\">Nome do canal</Label>\n <Input\n variant=\"flat\"\n placeholder=\"ex: equipa-design\"\n value={channelName}\n onChange={(e) => {\n setChannelName(e.target.value);\n if (nameError) validateName(e.target.value);\n }}\n onBlur={() => channelName && validateName(channelName)}\n className={cn(\n 'h-9 text-sm bg-theme-subtle border-theme-subtle',\n nameError && 'border-rose-500/50 focus:border-rose-500',\n )}\n autoFocus\n />\n {nameError && (\n <p className=\"text-[11px] text-rose-400 animate-in fade-in-0 slide-in-from-top-1 duration-[400ms]\">\n {nameError}\n </p>\n )}\n </div>\n\n {/* Visibility toggle */}\n <div className=\"flex gap-2\">\n <button\n type=\"button\"\n onClick={() => setVisibility('WORKSPACE')}\n className={cn(\n 'flex-1 flex items-center gap-2 px-3 py-2 rounded-xl text-xs transition-all duration-[400ms] ease-[cubic-bezier(0.25,1,0.5,1)] border',\n visibility === 'WORKSPACE'\n ? 'bg-primary/15 border-primary/30 text-primary-light'\n : 'bg-theme-subtle border-theme-subtle text-theme-muted hover:bg-theme-subtle',\n )}\n >\n <OrgGlobe className=\"w-3.5 h-3.5\" />\n Público\n </button>\n <button\n type=\"button\"\n onClick={() => setVisibility('PRIVATE')}\n className={cn(\n 'flex-1 flex items-center gap-2 px-3 py-2 rounded-xl text-xs transition-all duration-[400ms] ease-[cubic-bezier(0.25,1,0.5,1)] border',\n visibility === 'PRIVATE'\n ? 'bg-primary/15 border-primary/30 text-primary-light'\n : 'bg-theme-subtle border-theme-subtle text-theme-muted hover:bg-theme-subtle',\n )}\n >\n <OrgLock className=\"w-3.5 h-3.5\" />\n Privado\n </button>\n </div>\n\n {/* Progressive disclosure: show advanced */}\n {!showAdvanced ? (\n <button\n type=\"button\"\n onClick={() => setShowAdvanced(true)}\n className=\"text-xs text-primary-light/70 hover:text-primary-light transition-colors\"\n >\n + Adicionar descrição e membros\n </button>\n ) : (\n <div className=\"space-y-4 animate-in fade-in-0 slide-in-from-top-2 duration-[400ms]\">\n <div className=\"space-y-2\">\n <Label className=\"text-theme-secondary text-xs\">Descrição (opcional)</Label>\n <Textarea\n placeholder=\"Sobre o que é este canal...\"\n value={channelDesc}\n onChange={(e) => setChannelDesc(e.target.value)}\n className=\"min-h-[60px] text-sm bg-theme-subtle border-theme-subtle text-theme\"\n />\n </div>\n\n {/* Member picker */}\n <div className=\"space-y-2\">\n <Label className=\"text-theme-secondary text-xs\">\n Adicionar membros ({selectedMembers.length} selecionados)\n </Label>\n <ScrollArea className=\"max-h-[150px] rounded-xl border border-theme-subtle bg-theme-subtle\">\n <div className=\"p-2 space-y-0.5\">\n {loadingMembers ? (\n Array.from({ length: 3 }).map((_, i) => (\n <div key={i} className=\"flex items-center gap-2 p-2\">\n <Skeleton variant=\"circular\" className=\"h-7 w-7\" />\n <Skeleton className=\"h-3 w-24\" />\n </div>\n ))\n ) : workspaceMembers.length === 0 ? (\n <p className=\"text-xs text-theme-muted p-2 text-center\">Sem membros disponíveis</p>\n ) : (\n workspaceMembers.map((member) => (\n <button\n key={member.id}\n type=\"button\"\n onClick={() => toggleMember(member.id)}\n className={cn(\n 'flex items-center gap-2 w-full p-2 rounded-xl text-left text-xs transition-colors',\n selectedMembers.includes(member.id)\n ? 'bg-primary/15 text-primary-light'\n : 'text-theme-secondary hover:bg-theme-subtle',\n )}\n >\n <Avatar shape=\"circle\" size=\"sm\" className=\"h-7 w-7\">\n <AvatarFallback className=\"bg-primary/20 text-primary-light text-[10px]\">\n {getInitials(member.displayName)}\n </AvatarFallback>\n </Avatar>\n <span className=\"flex-1 truncate\">{member.displayName}</span>\n {selectedMembers.includes(member.id) && (\n <Badge variant=\"primary\" className=\"text-[9px] px-1 py-0 h-4\">\n ✓\n </Badge>\n )}\n </button>\n ))\n )}\n </div>\n </ScrollArea>\n </div>\n </div>\n )}\n\n {/* Footer Buttons */}\n <div className=\"flex items-center justify-end gap-2 mt-6\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => onOpenChange(false)}\n className=\"text-xs text-theme-muted\"\n >\n Cancelar\n </Button>\n <Button\n variant=\"default\"\n size=\"sm\"\n onClick={handleCreateChannel}\n disabled={!channelName.trim() || creating}\n className=\"text-xs\"\n >\n {creating ? 'Criando...' : 'Criar Canal'}\n </Button>\n </div>\n </TabsContent>\n\n {/* ─── Direct Message ─── */}\n <TabsContent value=\"dm\" className=\"space-y-3 mt-4\">\n <div className=\"relative\">\n <OrgSearch className=\"absolute left-3 top-1/2 -translate-y-1/2 w-3.5 h-3.5 text-theme-muted\" />\n <Input\n variant=\"flat\"\n placeholder=\"Pesquisar membro...\"\n value={dmSearch}\n onChange={(e) => setDmSearch(e.target.value)}\n className=\"h-9 text-sm bg-theme-subtle border-theme-subtle pl-9\"\n autoFocus\n />\n </div>\n\n <ScrollArea className=\"max-h-[280px]\">\n <div className=\"space-y-0.5\">\n {loadingMembers ? (\n Array.from({ length: 5 }).map((_, i) => (\n <div key={i} className=\"flex items-center gap-3 p-2.5\">\n <Skeleton variant=\"circular\" className=\"h-8 w-8\" />\n <div className=\"flex-1 space-y-1.5\">\n <Skeleton className=\"h-3 w-28\" />\n <Skeleton className=\"h-2 w-20\" />\n </div>\n </div>\n ))\n ) : filteredMembers.length === 0 ? (\n <div className=\"flex flex-col items-center py-8 text-theme-muted\">\n <OrgSearch className=\"w-8 h-8 mb-2 opacity-50\" />\n <p className=\"text-xs\">\n {dmSearch ? 'Nenhum membro encontrado' : 'Sem membros no workspace'}\n </p>\n </div>\n ) : (\n filteredMembers.map((member) => (\n <button\n key={member.id}\n onClick={() => handleCreateDM(member.id)}\n disabled={creating}\n className=\"flex items-center gap-3 w-full p-2.5 rounded-xl text-left transition-all duration-[400ms] ease-[cubic-bezier(0.25,1,0.5,1)] hover:bg-theme-subtle active:scale-[0.98] disabled:opacity-50\"\n >\n <Avatar shape=\"circle\" size=\"sm\" className=\"h-8 w-8\">\n <AvatarFallback className=\"bg-primary/20 text-primary-light text-xs\">\n {getInitials(member.displayName)}\n </AvatarFallback>\n </Avatar>\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-[13px] font-medium text-theme truncate\">\n {member.displayName}\n </p>\n {member.email && (\n <p className=\"text-[11px] text-theme-muted truncate\">{member.email}</p>\n )}\n </div>\n {member.status && (\n <span\n className={cn(\n 'w-2 h-2 rounded-full flex-shrink-0',\n member.status === 'ONLINE' && 'bg-emerald-400 animate-pulse',\n member.status === 'AWAY' && 'bg-amber-400',\n member.status === 'BUSY' && 'bg-rose-400',\n member.status === 'OFFLINE' && 'bg-theme-subtle-20',\n )}\n />\n )}\n </button>\n ))\n )}\n </div>\n </ScrollArea>\n </TabsContent>\n </Tabs>\n </ResponsiveDialog>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport * as SeparatorPrimitive from '@radix-ui/react-separator';\nimport { cn } from '../../lib/utils';\n\nfunction Separator({\n className,\n orientation = 'horizontal',\n decorative = true,\n ...props\n}: React.ComponentProps<typeof SeparatorPrimitive.Root>) {\n return (\n <SeparatorPrimitive.Root\n data-slot=\"separator\"\n decorative={decorative}\n orientation={orientation}\n className={cn(\n 'bg-border shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px',\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Separator };\n","'use client';\n\nimport * as React from 'react';\nimport * as SelectPrimitive from '@radix-ui/react-select';\nimport { ChevronDown, ChevronUp, Check } from 'lucide-react';\nimport { cn } from '../../lib/utils';\n\n/**\n * Select — Organic glass select\n *\n * Wraps Radix Select with Organify organic glass styling.\n * Theme-aware: uses CSS variables for theme switching.\n */\n\nconst Select = SelectPrimitive.Root;\nconst SelectGroup = SelectPrimitive.Group;\nconst SelectValue = SelectPrimitive.Value;\n\nconst SelectTrigger = React.forwardRef<\n React.ComponentRef<typeof SelectPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger> & {\n label?: string;\n }\n>(({ className, children, label, ...props }, ref) => (\n <div className=\"relative group\">\n {label && (\n <span className=\"absolute -top-3 right-0 z-10 mr-2 bg-theme-surface px-2 text-label uppercase tracking-widest text-theme-muted\">\n {label}\n </span>\n )}\n <SelectPrimitive.Trigger\n ref={ref}\n style={{\n background: 'var(--org-subtle-5, rgba(124,58,237,0.04))',\n borderColor: 'var(--org-glass-border, rgba(167,139,250,0.15))',\n color: 'var(--org-text-secondary, #C4BDD9)',\n }}\n className={cn(\n 'flex w-full items-center justify-between backdrop-blur-md border px-4 py-3 text-sm font-light rounded-xl transition-all duration-[400ms] ease-[cubic-bezier(0.25,1,0.5,1)] focus:outline-none focus:shadow-[0_0_0_3px_rgba(99,102,241,0.10),0_0_20px_rgba(99,102,241,0.08)] focus:border-primary-light/50 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1',\n className,\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDown className=\"h-4 w-4 text-primary-light opacity-60\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n </div>\n));\nSelectTrigger.displayName = SelectPrimitive.Trigger.displayName;\n\nconst SelectScrollUpButton = React.forwardRef<\n React.ComponentRef<typeof SelectPrimitive.ScrollUpButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollUpButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollUpButton\n ref={ref}\n className={cn('flex cursor-default items-center justify-center py-1', className)}\n {...props}\n >\n <ChevronUp className=\"h-4 w-4 text-theme-muted\" />\n </SelectPrimitive.ScrollUpButton>\n));\nSelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;\n\nconst SelectScrollDownButton = React.forwardRef<\n React.ComponentRef<typeof SelectPrimitive.ScrollDownButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollDownButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollDownButton\n ref={ref}\n className={cn('flex cursor-default items-center justify-center py-1', className)}\n {...props}\n >\n <ChevronDown className=\"h-4 w-4 text-theme-muted\" />\n </SelectPrimitive.ScrollDownButton>\n));\nSelectScrollDownButton.displayName = SelectPrimitive.ScrollDownButton.displayName;\n\nconst SelectContent = React.forwardRef<\n React.ComponentRef<typeof SelectPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content>\n>(({ className, children, position = 'popper', ...props }, ref) => (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n ref={ref}\n style={{\n background: 'var(--org-glass-bg-heavy, rgba(17,14,34,0.92))',\n borderColor: 'var(--org-glass-border, rgba(167,139,250,0.15))',\n color: 'var(--org-text, #F0ECF9)',\n }}\n className={cn(\n 'relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-xl border backdrop-blur-[40px] shadow-[0_24px_80px_-15px_rgba(0,0,0,0.5)] data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',\n position === 'popper' &&\n 'data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1',\n className,\n )}\n position={position}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn(\n 'p-1',\n position === 'popper' &&\n 'h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]',\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n));\nSelectContent.displayName = SelectPrimitive.Content.displayName;\n\nconst SelectItem = React.forwardRef<\n React.ComponentRef<typeof SelectPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Item>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Item\n ref={ref}\n className={cn(\n 'relative flex w-full cursor-default select-none items-center rounded-lg py-2 pl-8 pr-2 text-sm font-light text-theme-secondary outline-none transition-colors duration-[400ms] ease-[cubic-bezier(0.25,1,0.5,1)] focus:bg-theme-subtle-10 focus:text-theme data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n className,\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <Check className=\"h-4 w-4 text-primary-light\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n));\nSelectItem.displayName = SelectPrimitive.Item.displayName;\n\nconst SelectSeparator = React.forwardRef<\n React.ComponentRef<typeof SelectPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Separator\n ref={ref}\n className={cn('-mx-1 my-1 h-px bg-theme-subtle-10', className)}\n {...props}\n />\n));\nSelectSeparator.displayName = SelectPrimitive.Separator.displayName;\n\nconst SelectLabel = React.forwardRef<\n React.ComponentRef<typeof SelectPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Label>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Label\n ref={ref}\n className={cn('py-1.5 pl-8 pr-2 text-label uppercase tracking-widest text-theme-muted', className)}\n {...props}\n />\n));\nSelectLabel.displayName = SelectPrimitive.Label.displayName;\n\nexport {\n Select,\n SelectGroup,\n SelectValue,\n SelectTrigger,\n SelectContent,\n SelectItem,\n SelectSeparator,\n SelectLabel,\n SelectScrollUpButton,\n SelectScrollDownButton,\n};\n","// ─────────────────────────────────────────────\n// RoomManagementPanel — Room settings, members,\n// RBAC-gated actions (edit, archive, delete, leave)\n// ─────────────────────────────────────────────\n\n'use client';\n\nimport * as React from 'react';\nimport { cn } from '../../lib/utils';\nimport { Button } from '../primitives/button';\nimport { Input } from '../primitives/input';\nimport { Label } from '../primitives/label';\nimport { Textarea } from '../primitives/textarea';\nimport { ScrollArea } from '../primitives/scroll-area';\nimport { Badge } from '../primitives/badge';\nimport { Avatar, AvatarFallback } from '../primitives/avatar';\nimport { Separator } from '../primitives/separator';\nimport { Skeleton } from '../primitives/skeleton';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '../primitives/select';\nimport {\n OrgSettings,\n OrgTeam,\n OrgTrash,\n OrgEdit,\n OrgShield,\n OrgDoor,\n OrgLock,\n OrgGlobe,\n OrgClose,\n OrgChevronLeft,\n} from '../../icons';\nimport type {\n ChatRoom,\n ChatRoomMember,\n ChatPermissions,\n MemberRole,\n RoomVisibility,\n} from './types';\n\n// ─── Sub-views ───────────────────────────────\n\ntype PanelView = 'info' | 'members' | 'edit';\n\ninterface RoomManagementPanelProps {\n room: ChatRoom;\n members: ChatRoomMember[];\n permissions: ChatPermissions;\n currentUserId: string;\n loading?: boolean;\n onClose: () => void;\n onUpdateRoom: (roomId: string, updates: { name?: string; description?: string; visibility?: RoomVisibility }) => Promise<void>;\n onArchiveRoom: (roomId: string) => Promise<void>;\n onLeaveRoom: (roomId: string) => Promise<void>;\n onRemoveMember: (roomId: string, userId: string) => Promise<void>;\n onUpdateMemberRole: (roomId: string, userId: string, role: MemberRole) => Promise<void>;\n className?: string;\n}\n\nfunction getInitials(name: string): string {\n return name\n .split(' ')\n .map((w) => w[0])\n .slice(0, 2)\n .join('')\n .toUpperCase();\n}\n\nconst roleBadgeColors: Record<MemberRole, string> = {\n OWNER: 'bg-amber-500/15 text-amber-300 border-amber-500/30',\n ADMIN: 'bg-blue-500/15 text-blue-300 border-blue-500/30',\n MEMBER: 'bg-white/5 text-white/40 border-primary/15',\n};\n\nconst roleLabels: Record<MemberRole, string> = {\n OWNER: 'Dono',\n ADMIN: 'Admin',\n MEMBER: 'Membro',\n};\n\nexport function RoomManagementPanel({\n room,\n members,\n permissions,\n currentUserId,\n loading,\n onClose,\n onUpdateRoom,\n onArchiveRoom,\n onLeaveRoom,\n onRemoveMember,\n onUpdateMemberRole,\n className,\n}: RoomManagementPanelProps) {\n const [view, setView] = React.useState<PanelView>('info');\n\n // Edit form state\n const [editName, setEditName] = React.useState(room.name || '');\n const [editDesc, setEditDesc] = React.useState(room.description || '');\n const [editVisibility, setEditVisibility] = React.useState<RoomVisibility>(room.visibility);\n const [saving, setSaving] = React.useState(false);\n const [confirmArchive, setConfirmArchive] = React.useState(false);\n\n React.useEffect(() => {\n setEditName(room.name || '');\n setEditDesc(room.description || '');\n setEditVisibility(room.visibility);\n }, [room]);\n\n const handleSave = async () => {\n setSaving(true);\n try {\n await onUpdateRoom(room.id, {\n name: editName.trim(),\n description: editDesc.trim() || undefined,\n visibility: editVisibility,\n });\n setView('info');\n } finally {\n setSaving(false);\n }\n };\n\n const renderHeader = (title: string, showBack?: boolean) => (\n <div className=\"flex items-center gap-2 px-4 py-3 border-b border-theme-subtle\">\n {showBack && (\n <button\n onClick={() => setView('info')}\n className=\"p-1 rounded-xl hover:bg-theme-subtle text-theme-muted hover:text-theme transition-colors\"\n >\n <OrgChevronLeft className=\"w-4 h-4\" />\n </button>\n )}\n <h3 className=\"flex-1 text-sm font-semibold text-theme\">{title}</h3>\n <button\n onClick={onClose}\n className=\"p-1 rounded-xl hover:bg-theme-subtle text-theme-muted hover:text-theme transition-colors\"\n >\n <OrgClose className=\"w-4 h-4\" />\n </button>\n </div>\n );\n\n // ─── Info View ─────────────────────────\n\n const renderInfo = () => (\n <>\n {renderHeader(room.name || 'Detalhes')}\n <div className=\"p-4 space-y-4\">\n {/* Room icon & name */}\n <div className=\"flex items-center gap-3\">\n <div\n className={cn(\n 'flex items-center justify-center h-12 w-12 rounded-xl text-lg',\n 'bg-primary/15 text-primary-light',\n )}\n >\n {room.type === 'DIRECT' ? '💬' : '#'}\n </div>\n <div>\n <h4 className=\"text-[15px] font-semibold text-theme\">{room.name || 'Sem nome'}</h4>\n <div className=\"flex items-center gap-2 mt-0.5\">\n <Badge\n variant=\"default\"\n className=\"text-[10px] px-1.5 py-0 h-4 border-theme-subtle-10 text-theme-muted\"\n >\n {room.type === 'DIRECT' ? 'DM' : room.visibility === 'PRIVATE' ? '🔒 Privado' : '🌐 Público'}\n </Badge>\n <span className=\"text-[11px] text-theme-muted\">{room.memberCount} membros</span>\n </div>\n </div>\n </div>\n\n {room.description && (\n <p className=\"text-xs text-theme-muted leading-relaxed\">{room.description}</p>\n )}\n\n <Separator className=\"bg-theme-subtle\" />\n\n {/* Actions */}\n <div className=\"space-y-1\">\n <button\n onClick={() => setView('members')}\n className=\"flex items-center gap-3 w-full px-3 py-2.5 rounded-xl text-sm text-theme-secondary hover:bg-theme-subtle hover:text-theme transition-colors\"\n >\n <OrgTeam className=\"w-4 h-4 text-theme-muted\" />\n <span className=\"flex-1 text-left\">Membros</span>\n <Badge variant=\"default\" className=\"text-[10px] px-1.5 py-0 h-4 border-theme-subtle-10 text-theme-muted\">\n {members.length}\n </Badge>\n </button>\n\n {permissions.canEditRoomSettings && room.type !== 'DIRECT' && (\n <button\n onClick={() => setView('edit')}\n className=\"flex items-center gap-3 w-full px-3 py-2.5 rounded-xl text-sm text-theme-secondary hover:bg-theme-subtle hover:text-theme transition-colors\"\n >\n <OrgEdit className=\"w-4 h-4 text-theme-muted\" />\n <span className=\"flex-1 text-left\">Editar canal</span>\n </button>\n )}\n\n <Separator className=\"bg-theme-subtle my-2\" />\n\n {/* Leave Room — always available */}\n <button\n onClick={() => onLeaveRoom(room.id)}\n className=\"flex items-center gap-3 w-full px-3 py-2.5 rounded-xl text-sm text-theme-muted hover:bg-rose-500/10 hover:text-rose-400 transition-colors\"\n >\n <OrgDoor className=\"w-4 h-4\" />\n <span className=\"flex-1 text-left\">Sair do canal</span>\n </button>\n\n {/* Archive — RBAC gated */}\n {permissions.canArchiveRoom && (\n <>\n {!confirmArchive ? (\n <button\n onClick={() => setConfirmArchive(true)}\n className=\"flex items-center gap-3 w-full px-3 py-2.5 rounded-xl text-sm text-theme-muted hover:bg-rose-500/10 hover:text-rose-400 transition-colors\"\n >\n <OrgTrash className=\"w-4 h-4\" />\n <span className=\"flex-1 text-left\">Arquivar canal</span>\n </button>\n ) : (\n <div className=\"flex items-center gap-2 px-3 py-2 rounded-xl bg-rose-500/10 border border-rose-500/20 animate-in fade-in-0 duration-[400ms]\">\n <p className=\"flex-1 text-xs text-rose-300\">Tem certeza?</p>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => setConfirmArchive(false)}\n className=\"h-6 px-2 text-[10px] text-theme-muted\"\n >\n Não\n </Button>\n <Button\n variant=\"destructive\"\n size=\"sm\"\n onClick={() => onArchiveRoom(room.id)}\n className=\"h-6 px-2 text-[10px]\"\n >\n Sim, arquivar\n </Button>\n </div>\n )}\n </>\n )}\n </div>\n </div>\n </>\n );\n\n // ─── Members View ──────────────────────\n\n const renderMembers = () => (\n <>\n {renderHeader('Membros', true)}\n <ScrollArea className=\"flex-1\">\n <div className=\"p-3 space-y-0.5\">\n {loading ? (\n Array.from({ length: 4 }).map((_, i) => (\n <div key={i} className=\"flex items-center gap-3 p-2\">\n <Skeleton variant=\"circular\" className=\"h-8 w-8\" />\n <div className=\"flex-1 space-y-1\">\n <Skeleton className=\"h-3 w-24\" />\n <Skeleton className=\"h-2 w-16\" />\n </div>\n </div>\n ))\n ) : members.length === 0 ? (\n <p className=\"text-xs text-theme-muted text-center py-8\">Sem membros</p>\n ) : (\n members.map((member) => (\n <div\n key={member.id}\n className=\"flex items-center gap-3 p-2 rounded-xl hover:bg-theme-subtle group transition-colors\"\n >\n <Avatar shape=\"circle\" size=\"sm\" className=\"h-8 w-8\">\n <AvatarFallback className=\"bg-primary/20 text-primary-light text-xs\">\n {getInitials(member.displayName || member.userId.substring(0, 8))}\n </AvatarFallback>\n </Avatar>\n\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-[13px] font-medium text-theme truncate\">\n {member.displayName || member.userId.substring(0, 8)}\n </span>\n {member.userId === currentUserId && (\n <span className=\"text-[10px] text-theme-muted\">(você)</span>\n )}\n </div>\n <Badge\n variant=\"default\"\n className={cn(\n 'text-[9px] px-1 py-0 h-3.5 border mt-0.5',\n roleBadgeColors[member.role],\n )}\n >\n {roleLabels[member.role]}\n </Badge>\n </div>\n\n {/* Role management — RBAC gated, can't modify self or owner */}\n {permissions.canManageMembers &&\n member.userId !== currentUserId &&\n member.role !== 'OWNER' && (\n <div className=\"flex items-center gap-1 opacity-0 group-hover:opacity-100 transition-opacity\">\n <Select\n value={member.role}\n onValueChange={(val) =>\n onUpdateMemberRole(room.id, member.userId, val as MemberRole)\n }\n >\n <SelectTrigger className=\"h-6 w-20 text-[10px] bg-theme-subtle border-theme-subtle-10\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"ADMIN\">Admin</SelectItem>\n <SelectItem value=\"MEMBER\">Membro</SelectItem>\n </SelectContent>\n </Select>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => onRemoveMember(room.id, member.userId)}\n className=\"h-6 w-6 p-0 text-theme-muted hover:text-rose-400 hover:bg-rose-500/10\"\n >\n <OrgClose className=\"w-3 h-3\" />\n </Button>\n </div>\n )}\n </div>\n ))\n )}\n </div>\n </ScrollArea>\n </>\n );\n\n // ─── Edit View ─────────────────────────\n\n const renderEdit = () => (\n <>\n {renderHeader('Editar canal', true)}\n <div className=\"p-4 space-y-4\">\n <div className=\"space-y-2\">\n <Label className=\"text-theme-secondary text-xs\">Nome</Label>\n <Input\n variant=\"flat\"\n value={editName}\n onChange={(e) => setEditName(e.target.value)}\n className=\"h-9 text-sm bg-theme-subtle border-theme-subtle\"\n />\n </div>\n\n <div className=\"space-y-2\">\n <Label className=\"text-theme-secondary text-xs\">Descrição</Label>\n <Textarea\n value={editDesc}\n onChange={(e) => setEditDesc(e.target.value)}\n className=\"min-h-[60px] text-sm bg-theme-subtle border-theme-subtle text-theme\"\n placeholder=\"Descrição do canal...\"\n />\n </div>\n\n <div className=\"space-y-2\">\n <Label className=\"text-theme-secondary text-xs\">Visibilidade</Label>\n <div className=\"flex gap-2\">\n <button\n type=\"button\"\n onClick={() => setEditVisibility('WORKSPACE')}\n className={cn(\n 'flex-1 flex items-center gap-2 px-3 py-2 rounded-xl text-xs transition-all duration-[400ms] border',\n editVisibility === 'WORKSPACE'\n ? 'bg-primary/15 border-primary/30 text-primary-light'\n : 'bg-theme-subtle border-theme-subtle text-theme-muted hover:bg-theme-subtle',\n )}\n >\n <OrgGlobe className=\"w-3.5 h-3.5\" />\n Público\n </button>\n <button\n type=\"button\"\n onClick={() => setEditVisibility('PRIVATE')}\n className={cn(\n 'flex-1 flex items-center gap-2 px-3 py-2 rounded-xl text-xs transition-all duration-[400ms] border',\n editVisibility === 'PRIVATE'\n ? 'bg-primary/15 border-primary/30 text-primary-light'\n : 'bg-theme-subtle border-theme-subtle text-theme-muted hover:bg-theme-subtle',\n )}\n >\n <OrgLock className=\"w-3.5 h-3.5\" />\n Privado\n </button>\n </div>\n </div>\n\n <div className=\"flex justify-end gap-2 pt-2\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => setView('info')}\n className=\"text-xs text-theme-muted\"\n >\n Cancelar\n </Button>\n <Button\n variant=\"default\"\n size=\"sm\"\n onClick={handleSave}\n disabled={!editName.trim() || saving}\n className=\"text-xs\"\n >\n {saving ? 'Salvando...' : 'Salvar'}\n </Button>\n </div>\n </div>\n </>\n );\n\n return (\n <div\n className={cn(\n 'flex flex-col h-full border-l border-theme-subtle bg-theme-surface w-[280px] shrink-0',\n 'animate-in slide-in-from-right-5 duration-[400ms]',\n className,\n )}\n >\n {view === 'info' && renderInfo()}\n {view === 'members' && renderMembers()}\n {view === 'edit' && renderEdit()}\n </div>\n );\n}\n","// ─────────────────────────────────────────────\n// Chat Component Types — Full RBAC + Room Management\n// ─────────────────────────────────────────────\n\n// ─── Room Types ──────────────────────────────\n\nexport type RoomType = 'CHANNEL' | 'DIRECT';\nexport type RoomVisibility = 'WORKSPACE' | 'PRIVATE';\nexport type MemberRole = 'OWNER' | 'ADMIN' | 'MEMBER';\n\nexport interface ChatRoom {\n id: string;\n name: string | null;\n slug: string | null;\n type: RoomType;\n visibility: RoomVisibility;\n description: string | null;\n memberCount: number;\n unreadCount: number;\n avatarUrl: string | null;\n createdBy: string | null;\n archived: boolean;\n lastMessageAt: string | null;\n}\n\nexport interface ChatRoomMember {\n id: string;\n userId: string;\n /** Resolved from users service — not on chat service schema */\n displayName?: string;\n /** Resolved from users service — not on chat service schema */\n avatarUrl?: string | null;\n role: MemberRole;\n muted?: boolean;\n pinned?: boolean;\n joinedAt: string;\n}\n\n// ─── Message Types ───────────────────────────\n\nexport interface ChatMention {\n type: string;\n targetId: string;\n display: string | null;\n}\n\nexport interface ChatReaction {\n emoji: string;\n userId: string;\n}\n\nexport interface ChatMessage {\n id: string;\n roomId: string;\n authorId: string;\n authorName?: string;\n authorAvatarUrl?: string;\n content: string;\n edited: boolean;\n editedAt: string | null;\n createdAt: string;\n mentions: ChatMention[];\n reactions: ChatReaction[];\n /** ID of parent message (thread / reply) — backend field name */\n parentId?: string | null;\n /** ID of the message being replied to (alias for parentId in UI) */\n replyToId?: string | null;\n /** Used for optimistic UI — pending messages have 'pending' status */\n _status?: 'pending' | 'sent' | 'error';\n}\n\n// ─── User Types ──────────────────────────────\n\nexport interface ChatUser {\n id: string;\n displayName: string;\n email?: string;\n avatarUrl: string | null;\n status?: 'ONLINE' | 'AWAY' | 'BUSY' | 'OFFLINE';\n}\n\n// ─── Chat Config ─────────────────────────────\n// NOTE: gatewayUrl, userId, workspaceId, authToken\n// are now pulled from OrganifyProvider internally.\n// These fields are kept for backward compat / override only.\n\nexport interface ChatConfig {\n /** @deprecated Use OrganifyProvider api.gatewayUrl instead */\n gatewayUrl?: string;\n /** @deprecated Use OrganifyProvider workspace.id instead */\n workspaceId?: string;\n /** @deprecated Use OrganifyProvider user.id instead */\n userId?: string;\n /** @deprecated Use OrganifyProvider api.authToken instead */\n authToken?: string;\n}\n\n// ─── RBAC Permissions ────────────────────────\n\nexport interface ChatPermissions {\n canCreateChannel: boolean;\n canCreateDM: boolean;\n canDeleteRoom: boolean;\n canArchiveRoom: boolean;\n canManageMembers: boolean;\n canEditRoomSettings: boolean;\n}\n\n/** Derive permissions from user's role within a room */\nexport function getRoomPermissions(role: MemberRole | null, isWorkspaceAdmin?: boolean): ChatPermissions {\n const isOwnerOrAdmin = role === 'OWNER' || role === 'ADMIN' || isWorkspaceAdmin;\n return {\n canCreateChannel: true,\n canCreateDM: true,\n canDeleteRoom: role === 'OWNER' || !!isWorkspaceAdmin,\n canArchiveRoom: isOwnerOrAdmin ?? false,\n canManageMembers: isOwnerOrAdmin ?? false,\n canEditRoomSettings: isOwnerOrAdmin ?? false,\n };\n}\n\n// ─── Component Props ─────────────────────────\n\nexport interface OrganifyChatProps extends ChatConfig {\n /** Current user role in workspace (for RBAC) */\n workspaceRole?: 'OWNER' | 'ADMIN' | 'MEMBER' | 'GUEST';\n /** All workspace members for DM user picker */\n workspaceMembers?: ChatUser[];\n /** Workspace projects for @mention (replaces mock data) */\n workspaceProjects?: { id: string; name: string; key?: string }[];\n /** Initial rooms for demo/testing (bypasses API fetch) */\n initialRooms?: ChatRoom[];\n /** Initial messages for demo/testing (bypasses API fetch) */\n initialMessages?: ChatMessage[];\n /** Optional CSS class name */\n className?: string;\n}\n\n// ─── Chat Events ─────────────────────────────\n\nexport interface ChatEvents {\n join_room: { roomId: string };\n leave_room: { roomId: string };\n new_message: ChatMessage;\n typing: { roomId: string; userId: string };\n stop_typing: { roomId: string; userId: string };\n room_updated: ChatRoom;\n member_joined: { roomId: string; userId: string };\n member_left: { roomId: string; userId: string };\n}\n","// ─────────────────────────────────────────────\n// useChat — Core hook with RBAC, room CRUD,\n// DM creation, typing indicators, optimistic UI\n// ─────────────────────────────────────────────\n// Pulls gatewayUrl, authToken, userId, workspaceId\n// from OrganifyProvider — no props needed.\n// ─────────────────────────────────────────────\n\nimport React, { useState, useEffect, useCallback } from 'react';\nimport { useOrganifyApi, useOrganifyUser, useOrganifyWorkspace, useOrganifyGql } from '../../providers/organify-provider';\nimport type {\n ChatRoom,\n ChatMessage,\n ChatRoomMember,\n ChatUser,\n MemberRole,\n ChatPermissions,\n RoomType,\n RoomVisibility,\n} from './types';\nimport { getRoomPermissions } from './types';\n\ninterface UseChatOptions {\n workspaceRole?: 'OWNER' | 'ADMIN' | 'MEMBER' | 'GUEST';\n /** Initial rooms for demo/testing (bypasses API fetch) */\n initialRooms?: ChatRoom[];\n /** Initial messages for demo/testing (bypasses API fetch) */\n initialMessages?: ChatMessage[];\n /** Workspace members for user name resolution */\n workspaceMembers?: ChatUser[];\n}\n\ninterface CreateRoomInput {\n name: string;\n type: RoomType;\n visibility: RoomVisibility;\n description?: string;\n memberIds?: string[];\n}\n\nexport function useChat(options: UseChatOptions = {}) {\n const {\n workspaceRole,\n initialRooms,\n initialMessages,\n } = options;\n\n // ─── Pull from OrganifyProvider ───────\n const api = useOrganifyApi();\n const { gatewayUrl, authToken } = api;\n const user = useOrganifyUser();\n const { workspace } = useOrganifyWorkspace();\n const userId = user?.id ?? '';\n const workspaceId = workspace?.id ?? '';\n\n const [rooms, setRooms] = useState<ChatRoom[]>(initialRooms ?? []);\n const [messages, setMessages] = useState<ChatMessage[]>(initialMessages ?? []);\n const [activeRoomId, setActiveRoomId] = useState<string | null>(null);\n const [loadingRooms, setLoadingRooms] = useState(false);\n const [loadingMessages, setLoadingMessages] = useState(false);\n const [hasMoreMessages, setHasMoreMessages] = useState(false);\n const [messageCursor, setMessageCursor] = useState<string | null>(null);\n const [loadingMoreMessages, setLoadingMoreMessages] = useState(false);\n const [roomMembers, setRoomMembers] = useState<ChatRoomMember[]>([]);\n const [myRoomRole, setMyRoomRole] = useState<MemberRole | null>(null);\n const [typingUsers, setTypingUsers] = useState<string[]>([]);\n const [error, setError] = useState<string | null>(null);\n\n\n const isWorkspaceAdmin = workspaceRole === 'OWNER' || workspaceRole === 'ADMIN';\n\n // Demo mode: when initialRooms are provided, all mutations operate\n // on local state only (mock IDs like \"r1\" are not valid MongoDB ObjectIds).\n const isDemoMode = !!(initialRooms && initialRooms.length > 0);\n\n // ─── Permissions ────────────────────────\n\n const permissions: ChatPermissions = getRoomPermissions(myRoomRole, isWorkspaceAdmin);\n\n // ─── GraphQL helper ─────────────────────\n // Uses centralized useOrganifyGql with 'chat' endpoint.\n // All chat GraphQL goes through the gateway proxy (/api/graphql/chat)\n // which injects x-user-id from the JWT cookie.\n // WebSocket still connects directly to the chat service.\n const centralGql = useOrganifyGql();\n\n const gql = useCallback(\n async <T = any>(query: string, variables?: Record<string, any>): Promise<T> => {\n return centralGql<T>('chat', query, variables);\n },\n [centralGql],\n );\n\n // ─── User Cache (BFF: authorId → name/avatar) ─\n\n const [userCache, setUserCache] = useState<Map<string, { displayName: string; avatarUrl?: string }>>(new Map());\n\n // Enrich messages with author names from cache\n const enrichedMessages = React.useMemo(() => {\n return messages.map((msg) => {\n const cached = userCache.get(msg.authorId);\n if (cached && !msg.authorName) {\n return { ...msg, authorName: cached.displayName, authorAvatar: cached.avatarUrl };\n }\n return msg;\n });\n }, [messages, userCache]);\n\n // Populate user cache from workspace members prop and current user\n useEffect(() => {\n setUserCache((prev) => {\n const next = new Map(prev);\n // Add current user\n if (userId && user?.name) {\n next.set(userId, { displayName: user.name, avatarUrl: user.avatarUrl ?? undefined });\n }\n // Add workspace members (passed via OrganifyChatProps → useChat)\n if (options.workspaceMembers) {\n for (const member of options.workspaceMembers) {\n if (member.id && !next.has(member.id)) {\n next.set(member.id, {\n displayName: member.displayName || member.email || `User`,\n avatarUrl: member.avatarUrl ?? undefined,\n });\n }\n }\n }\n return next;\n });\n }, [userId, user, options.workspaceMembers]);\n\n // ─── Fetch Rooms ────────────────────────\n\n const fetchRooms = useCallback(async () => {\n // Skip API fetch if using initial rooms (demo mode)\n if (initialRooms && initialRooms.length > 0) return;\n // Skip if workspace ID is not set, is optimistic (temp-ID), or user not authenticated\n if (!workspaceId || workspaceId.startsWith('temp-')) return;\n if (!userId) return;\n setLoadingRooms(true);\n setError(null);\n try {\n const data = await gql<{ rooms: { items: ChatRoom[] } }>(\n `query($workspaceId: String!) {\n rooms(workspaceId: $workspaceId) {\n items {\n id name slug type visibility description\n memberCount unreadCount avatarUrl createdBy\n archived lastMessageAt\n }\n total hasMore\n }\n }`,\n { workspaceId },\n );\n setRooms(data.rooms?.items ?? []);\n } catch (err: any) {\n console.error('[organify-chat] fetchRooms:', err);\n setError('Não foi possível carregar as conversas. Tente novamente.');\n } finally {\n setLoadingRooms(false);\n }\n }, [workspaceId, userId, gql, initialRooms]);\n\n // ─── Messages GraphQL fragment ──────────\n const MESSAGE_FIELDS = `\n id roomId authorId parentId\n content edited editedAt createdAt\n mentions { type targetId display }\n reactions { emoji userId }\n `;\n\n // ─── Fetch Messages (initial page) ──────\n\n const fetchMessages = useCallback(\n async (roomId: string) => {\n // In demo mode with initial messages, filter by roomId\n if (initialMessages && initialMessages.length > 0) {\n const roomMessages = initialMessages.filter(m => m.roomId === roomId);\n setMessages(roomMessages);\n setHasMoreMessages(false);\n setMessageCursor(null);\n return;\n }\n // Skip API call if user is not authenticated\n if (!userId) return;\n setLoadingMessages(true);\n setError(null);\n try {\n const data = await gql<{ messages: { items: ChatMessage[]; hasMore: boolean; nextCursor?: string } }>(\n `query($roomId: ID!, $filter: MessageFilterInput) {\n messages(roomId: $roomId, filter: $filter) {\n items { ${MESSAGE_FIELDS} }\n total hasMore nextCursor\n }\n }`,\n { roomId, filter: { limit: 50 } },\n );\n setMessages(data.messages?.items ?? []);\n setHasMoreMessages(data.messages?.hasMore ?? false);\n setMessageCursor(data.messages?.nextCursor ?? null);\n } catch (err: any) {\n console.error('[organify-chat] fetchMessages:', err);\n setError('Erro ao carregar mensagens.');\n } finally {\n setLoadingMessages(false);\n }\n },\n [gql, initialMessages, userId],\n );\n\n // ─── Load More Messages (pagination) ────\n\n const loadMoreMessages = useCallback(\n async () => {\n if (!activeRoomId || !hasMoreMessages || !messageCursor || loadingMoreMessages || !userId) return;\n setLoadingMoreMessages(true);\n try {\n const data = await gql<{ messages: { items: ChatMessage[]; hasMore: boolean; nextCursor?: string } }>(\n `query($roomId: ID!, $filter: MessageFilterInput) {\n messages(roomId: $roomId, filter: $filter) {\n items { ${MESSAGE_FIELDS} }\n total hasMore nextCursor\n }\n }`,\n { roomId: activeRoomId, filter: { limit: 50, cursor: messageCursor } },\n );\n const olderMessages = data.messages?.items ?? [];\n // Prepend older messages\n setMessages((prev) => [...olderMessages, ...prev]);\n setHasMoreMessages(data.messages?.hasMore ?? false);\n setMessageCursor(data.messages?.nextCursor ?? null);\n } catch (err: any) {\n console.error('[organify-chat] loadMore:', err);\n } finally {\n setLoadingMoreMessages(false);\n }\n },\n [gql, activeRoomId, hasMoreMessages, messageCursor, loadingMoreMessages, userId],\n );\n\n // ─── Fetch Room Members ─────────────────\n\n const fetchRoomMembers = useCallback(\n async (roomId: string) => {\n // Demo mode: no real room members to fetch\n if (isDemoMode) return;\n try {\n const data = await gql<{ room: { members: ChatRoomMember[] } }>(\n `query($roomId: ID!) {\n room(id: $roomId) {\n members {\n id userId role muted pinned joinedAt\n }\n }\n }`,\n { roomId },\n );\n const members = data?.room?.members ?? [];\n setRoomMembers(members);\n const myMembership = members.find((m) => m.userId === userId);\n setMyRoomRole(myMembership?.role ?? null);\n } catch (err) {\n console.error('[organify-chat] fetchRoomMembers:', err);\n }\n },\n [gql, userId, isDemoMode],\n );\n\n // ─── Select Room ────────────────────────\n\n const selectRoom = useCallback(\n (roomId: string) => {\n if (activeRoomId === roomId) return;\n // Don't load messages if workspace is optimistic (temp-ID) or no workspace selected\n if (!workspaceId || workspaceId.startsWith('temp-')) {\n // Still select the room, but without messages\n setActiveRoomId(roomId);\n setMessages([]);\n setRoomMembers([]);\n setMyRoomRole(null);\n setTypingUsers([]);\n setHasMoreMessages(false);\n setMessageCursor(null);\n return;\n }\n\n setActiveRoomId(roomId);\n setMessages([]);\n setRoomMembers([]);\n setMyRoomRole(null);\n setTypingUsers([]);\n setHasMoreMessages(false);\n setMessageCursor(null);\n fetchMessages(roomId);\n fetchRoomMembers(roomId);\n },\n [activeRoomId, workspaceId, fetchMessages, fetchRoomMembers],\n );\n\n // ─── Send Message (Optimistic UI) ──────\n\n const sendMessage = useCallback(\n async (content: string, replyToId?: string) => {\n if (!activeRoomId || !content.trim()) return;\n\n // Optimistic insert\n const tempId = `temp_${Date.now()}_${Math.random().toString(36).slice(2)}`;\n const optimisticMsg: ChatMessage = {\n id: tempId,\n roomId: activeRoomId,\n authorId: userId,\n content: content.trim(),\n edited: false,\n editedAt: null,\n createdAt: new Date().toISOString(),\n mentions: [],\n reactions: [],\n replyToId: replyToId ?? null,\n _status: 'pending',\n };\n\n setMessages((prev) => [...prev, optimisticMsg]);\n\n // Demo mode: keep optimistic message as-is (no API call)\n if (isDemoMode) {\n setMessages((prev) =>\n prev.map((m) => (m.id === tempId ? { ...m, id: `demo_${Date.now()}`, _status: 'sent' as const } : m)),\n );\n return;\n }\n\n try {\n const input: Record<string, any> = { roomId: activeRoomId, content: content.trim() };\n if (replyToId) input.parentId = replyToId;\n\n const data = await gql<{ sendMessage: ChatMessage }>(\n `mutation($input: SendMessageInput!) {\n sendMessage(input: $input) {\n id roomId authorId parentId\n content edited editedAt createdAt\n mentions { type targetId display }\n reactions { emoji userId }\n }\n }`,\n { input },\n );\n // Replace optimistic with real\n if (data?.sendMessage) {\n setMessages((prev) =>\n prev.map((m) => (m.id === tempId ? { ...data.sendMessage, _status: 'sent' as const } : m)),\n );\n } else {\n setMessages((prev) =>\n prev.map((m) => (m.id === tempId ? { ...m, _status: 'error' as const } : m)),\n );\n }\n } catch (err: any) {\n console.error('[organify-chat] sendMessage:', err);\n setMessages((prev) =>\n prev.map((m) => (m.id === tempId ? { ...m, _status: 'error' as const } : m)),\n );\n }\n },\n [activeRoomId, gql, userId, isDemoMode],\n );\n\n // ─── Create Room ────────────────────────\n\n const createRoom = useCallback(\n async (input: CreateRoomInput): Promise<ChatRoom | null> => {\n setError(null);\n // Demo mode: create local room\n if (isDemoMode) {\n const newRoom: ChatRoom = {\n id: `demo_room_${Date.now()}`,\n name: input.name,\n slug: input.name.toLowerCase().replace(/\\s+/g, '-'),\n type: input.type,\n visibility: input.visibility,\n description: input.description ?? null,\n memberCount: 1,\n unreadCount: 0,\n avatarUrl: null,\n createdBy: userId,\n archived: false,\n lastMessageAt: null,\n };\n setRooms((prev) => [newRoom, ...prev]);\n return newRoom;\n }\n try {\n const data = await gql<{ createRoom: ChatRoom }>(\n `mutation($input: CreateRoomInput!) {\n createRoom(input: $input) {\n id name slug type visibility description\n memberCount unreadCount avatarUrl createdBy\n archived lastMessageAt\n }\n }`,\n {\n input: {\n ...input,\n workspaceId,\n },\n },\n );\n const newRoom = data?.createRoom;\n if (!newRoom) throw new Error('Failed to create room');\n setRooms((prev) => [newRoom, ...prev]);\n return newRoom;\n } catch (err: any) {\n console.error('[organify-chat] createRoom:', err);\n setError(err.message || 'Não foi possível criar a sala.');\n return null;\n }\n },\n [gql, workspaceId, isDemoMode, userId],\n );\n\n // ─── Create Direct Message ──────────────\n // Backend uses createRoom with type=DIRECT + memberIds=[targetUserId].\n // The service auto-deduplicates — returns existing DM if one exists.\n\n const createDirectMessage = useCallback(\n async (targetUserId: string): Promise<ChatRoom | null> => {\n setError(null);\n if (isDemoMode) {\n const dm: ChatRoom = {\n id: `demo_dm_${Date.now()}`,\n name: targetUserId,\n slug: null,\n type: 'DIRECT',\n visibility: 'PRIVATE',\n description: null,\n memberCount: 2,\n unreadCount: 0,\n avatarUrl: null,\n createdBy: userId,\n archived: false,\n lastMessageAt: null,\n };\n setRooms((prev) => [dm, ...prev]);\n return dm;\n }\n try {\n const data = await gql<{ createRoom: ChatRoom }>(\n `mutation($input: CreateRoomInput!) {\n createRoom(input: $input) {\n id name slug type visibility description\n memberCount unreadCount avatarUrl createdBy\n archived lastMessageAt\n members { userId role }\n }\n }`,\n {\n input: {\n workspaceId,\n name: 'DM',\n type: 'DIRECT',\n visibility: 'PRIVATE',\n memberIds: [targetUserId],\n },\n },\n );\n const dm = data?.createRoom;\n if (!dm) throw new Error('Failed to create DM');\n // Add to rooms if not already present\n setRooms((prev) => {\n if (prev.find((r) => r.id === dm.id)) return prev;\n return [dm, ...prev];\n });\n return dm;\n } catch (err: any) {\n console.error('[organify-chat] createDM:', err);\n setError(err.message || 'Não foi possível iniciar a conversa.');\n return null;\n }\n },\n [gql, workspaceId, isDemoMode, userId],\n );\n\n // ─── Room Management ───────────────────\n\n const updateRoom = useCallback(\n async (roomId: string, updates: { name?: string; description?: string; visibility?: RoomVisibility }) => {\n if (!permissions.canEditRoomSettings) return;\n // Demo mode: update local state only\n if (isDemoMode) {\n setRooms((prev) => prev.map((r) => (r.id === roomId ? { ...r, ...updates } : r)));\n return;\n }\n try {\n const data = await gql<{ updateRoom: ChatRoom }>(\n `mutation($id: ID!, $input: UpdateRoomInput!) {\n updateRoom(id: $id, input: $input) {\n id name slug type visibility description\n memberCount unreadCount avatarUrl createdBy\n archived lastMessageAt\n }\n }`,\n { id: roomId, input: updates },\n );\n if (data?.updateRoom) {\n setRooms((prev) => prev.map((r) => (r.id === roomId ? data.updateRoom : r)));\n }\n } catch (err: any) {\n setError(err.message || 'Erro ao atualizar sala.');\n }\n },\n [gql, permissions.canEditRoomSettings, isDemoMode],\n );\n\n const archiveRoom = useCallback(\n async (roomId: string) => {\n if (!permissions.canArchiveRoom) return;\n // Demo mode: remove from local state\n if (isDemoMode) {\n setRooms((prev) => prev.filter((r) => r.id !== roomId));\n if (activeRoomId === roomId) { setActiveRoomId(null); setMessages([]); }\n return;\n }\n try {\n // Backend has no dedicated archiveRoom mutation;\n // archive via updateRoom(id, { archived: true })\n await gql(\n `mutation($id: ID!, $input: UpdateRoomInput!) {\n updateRoom(id: $id, input: $input) { id archived }\n }`,\n { id: roomId, input: { archived: true } },\n );\n setRooms((prev) => prev.filter((r) => r.id !== roomId));\n if (activeRoomId === roomId) {\n setActiveRoomId(null);\n setMessages([]);\n }\n } catch (err: any) {\n setError(err.message || 'Erro ao arquivar sala.');\n }\n },\n [gql, permissions.canArchiveRoom, activeRoomId, isDemoMode],\n );\n\n const leaveRoom = useCallback(\n async (roomId: string) => {\n // Demo mode: remove from local state\n if (isDemoMode) {\n setRooms((prev) => prev.filter((r) => r.id !== roomId));\n if (activeRoomId === roomId) { setActiveRoomId(null); setMessages([]); }\n return;\n }\n try {\n await gql(\n `mutation($roomId: ID!) { leaveRoom(roomId: $roomId) }`,\n { roomId },\n );\n setRooms((prev) => prev.filter((r) => r.id !== roomId));\n if (activeRoomId === roomId) {\n setActiveRoomId(null);\n setMessages([]);\n }\n } catch (err: any) {\n setError(err.message || 'Erro ao sair da sala.');\n }\n },\n [gql, activeRoomId, isDemoMode],\n );\n\n const addMember = useCallback(\n async (roomId: string, targetUserId: string, _role: MemberRole = 'MEMBER') => {\n if (!permissions.canManageMembers) return;\n if (isDemoMode) return;\n try {\n // Backend: inviteToRoom(roomId, userId)\n await gql(\n `mutation($roomId: ID!, $userId: String!) {\n inviteToRoom(roomId: $roomId, userId: $userId) { id userId role }\n }`,\n { roomId, userId: targetUserId },\n );\n fetchRoomMembers(roomId);\n } catch (err: any) {\n setError(err.message || 'Erro ao adicionar membro.');\n }\n },\n [gql, permissions.canManageMembers, fetchRoomMembers, isDemoMode],\n );\n\n const removeMember = useCallback(\n async (roomId: string, targetUserId: string) => {\n if (!permissions.canManageMembers) return;\n if (isDemoMode) return;\n try {\n // Backend: removeMember(roomId, targetUserId)\n await gql(\n `mutation($roomId: ID!, $targetUserId: String!) {\n removeMember(roomId: $roomId, targetUserId: $targetUserId)\n }`,\n { roomId, targetUserId },\n );\n setRoomMembers((prev) => prev.filter((m) => m.userId !== targetUserId));\n } catch (err: any) {\n setError(err.message || 'Erro ao remover membro.');\n }\n },\n [gql, permissions.canManageMembers, isDemoMode],\n );\n\n const updateMemberRole = useCallback(\n async (roomId: string, targetUserId: string, role: MemberRole) => {\n if (!permissions.canManageMembers) return;\n if (isDemoMode) return;\n try {\n // Backend: updateMemberRole(roomId, targetUserId, role)\n await gql(\n `mutation($roomId: ID!, $targetUserId: String!, $role: MemberRole!) {\n updateMemberRole(roomId: $roomId, targetUserId: $targetUserId, role: $role) { id userId role }\n }`,\n { roomId, targetUserId, role },\n );\n setRoomMembers((prev) =>\n prev.map((m) => (m.userId === targetUserId ? { ...m, role } : m)),\n );\n } catch (err: any) {\n setError(err.message || 'Erro ao atualizar cargo.');\n }\n },\n [gql, permissions.canManageMembers, isDemoMode],\n );\n\n // ─── Edit Message ──────────────────────\n\n const editMessage = useCallback(\n async (messageId: string, content: string) => {\n if (!content.trim()) return;\n // Demo mode: update local state\n if (isDemoMode) {\n setMessages((prev) =>\n prev.map((m) =>\n m.id === messageId\n ? { ...m, content: content.trim(), edited: true, editedAt: new Date().toISOString() }\n : m,\n ),\n );\n return;\n }\n try {\n const data = await gql<{ editMessage: ChatMessage }>(\n `mutation($id: ID!, $input: EditMessageInput!) {\n editMessage(id: $id, input: $input) {\n id roomId authorId parentId\n content edited editedAt createdAt\n mentions { type targetId display }\n reactions { emoji userId }\n }\n }`,\n { id: messageId, input: { content: content.trim() } },\n );\n if (data?.editMessage) {\n setMessages((prev) =>\n prev.map((m) => (m.id === messageId ? { ...data.editMessage, _status: 'sent' as const } : m)),\n );\n }\n } catch (err: any) {\n console.error('[organify-chat] editMessage:', err);\n setError(err.message || 'Erro ao editar mensagem.');\n }\n },\n [gql, isDemoMode],\n );\n\n // ─── Delete Message ────────────────────\n\n const deleteMessage = useCallback(\n async (messageId: string) => {\n // Demo mode: remove from local state\n if (isDemoMode) {\n setMessages((prev) => prev.filter((m) => m.id !== messageId));\n return;\n }\n // Find the message to get roomId (needed by backend)\n const msg = messages.find((m) => m.id === messageId);\n if (!msg) return;\n try {\n await gql(\n `mutation($id: ID!, $roomId: ID!) {\n deleteMessage(id: $id, roomId: $roomId)\n }`,\n { id: messageId, roomId: msg.roomId },\n );\n setMessages((prev) => prev.filter((m) => m.id !== messageId));\n } catch (err: any) {\n console.error('[organify-chat] deleteMessage:', err);\n setError(err.message || 'Erro ao eliminar mensagem.');\n }\n },\n [gql, isDemoMode, messages],\n );\n\n // ─── Reactions ─────────────────────────\n\n const addReaction = useCallback(\n async (messageId: string, emoji: string) => {\n // Demo mode: toggle in local state\n if (isDemoMode) {\n setMessages((prev) =>\n prev.map((m) => {\n if (m.id !== messageId) return m;\n const hasReaction = m.reactions.some((r) => r.emoji === emoji && r.userId === userId);\n if (hasReaction) return m;\n return { ...m, reactions: [...m.reactions, { emoji, userId }] };\n }),\n );\n return;\n }\n try {\n await gql(\n `mutation($messageId: ID!, $emoji: String!) {\n addReaction(messageId: $messageId, emoji: $emoji) { emoji userId createdAt }\n }`,\n { messageId, emoji },\n );\n // Optimistic update\n setMessages((prev) =>\n prev.map((m) => {\n if (m.id !== messageId) return m;\n return { ...m, reactions: [...m.reactions, { emoji, userId }] };\n }),\n );\n } catch (err: any) {\n console.error('[organify-chat] addReaction:', err);\n }\n },\n [gql, userId, isDemoMode],\n );\n\n const removeReaction = useCallback(\n async (messageId: string, emoji: string) => {\n // Demo mode: remove from local state\n if (isDemoMode) {\n setMessages((prev) =>\n prev.map((m) => {\n if (m.id !== messageId) return m;\n return { ...m, reactions: m.reactions.filter((r) => !(r.emoji === emoji && r.userId === userId)) };\n }),\n );\n return;\n }\n try {\n await gql(\n `mutation($messageId: ID!, $emoji: String!) {\n removeReaction(messageId: $messageId, emoji: $emoji)\n }`,\n { messageId, emoji },\n );\n setMessages((prev) =>\n prev.map((m) => {\n if (m.id !== messageId) return m;\n return { ...m, reactions: m.reactions.filter((r) => !(r.emoji === emoji && r.userId === userId)) };\n }),\n );\n } catch (err: any) {\n console.error('[organify-chat] removeReaction:', err);\n }\n },\n [gql, userId, isDemoMode],\n );\n\n // ─── React to Message (toggle) ─────────\n\n const reactToMessage = useCallback(\n async (messageId: string, emoji: string) => {\n const msg = messages.find((m) => m.id === messageId);\n if (!msg) return;\n const hasReaction = msg.reactions.some((r) => r.emoji === emoji && r.userId === userId);\n if (hasReaction) {\n await removeReaction(messageId, emoji);\n } else {\n await addReaction(messageId, emoji);\n }\n },\n [messages, userId, addReaction, removeReaction],\n );\n\n // ─── GraphQL Subscriptions (graphql-ws protocol) ─\n\n useEffect(() => {\n if (!userId || !activeRoomId) return;\n if (isDemoMode) return;\n\n // Connect directly to chat service for subscriptions\n // (gateway doesn't proxy WS upgrades on /graphql/chat)\n const chatServiceUrl = api?.services?.chat || gatewayUrl;\n const wsUrl = chatServiceUrl.replace(/^http/, 'ws') + '/graphql/chat';\n\n let ws: WebSocket | null = null;\n let pingInterval: ReturnType<typeof setInterval>;\n let reconnectTimer: ReturnType<typeof setTimeout>;\n let reconnectAttempts = 0;\n const maxReconnectAttempts = 8;\n let disposed = false;\n\n function connect() {\n if (disposed || reconnectAttempts >= maxReconnectAttempts) return;\n\n try {\n ws = new WebSocket(wsUrl, 'graphql-transport-ws');\n\n ws.onopen = () => {\n reconnectAttempts = 0;\n // graphql-ws: ConnectionInit\n ws?.send(JSON.stringify({\n type: 'connection_init',\n payload: { userId, workspaceId },\n }));\n };\n\n ws.onmessage = (event) => {\n try {\n const msg = JSON.parse(event.data);\n\n switch (msg.type) {\n case 'connection_ack':\n // Subscribe to messageCreated\n ws?.send(JSON.stringify({\n id: 'sub_msg_created',\n type: 'subscribe',\n payload: {\n query: `subscription($roomId: ID!) {\n messageCreated(roomId: $roomId) {\n ${MESSAGE_FIELDS}\n }\n }`,\n variables: { roomId: activeRoomId },\n },\n }));\n // Subscribe to messageUpdated\n ws?.send(JSON.stringify({\n id: 'sub_msg_updated',\n type: 'subscribe',\n payload: {\n query: `subscription($roomId: ID!) {\n messageUpdated(roomId: $roomId) {\n ${MESSAGE_FIELDS}\n }\n }`,\n variables: { roomId: activeRoomId },\n },\n }));\n // Subscribe to messageDeleted\n ws?.send(JSON.stringify({\n id: 'sub_msg_deleted',\n type: 'subscribe',\n payload: {\n query: `subscription($roomId: ID!) {\n messageDeleted(roomId: $roomId)\n }`,\n variables: { roomId: activeRoomId },\n },\n }));\n // Subscribe to typingIndicator\n ws?.send(JSON.stringify({\n id: 'sub_typing',\n type: 'subscribe',\n payload: {\n query: `subscription($roomId: ID!) {\n typingIndicator(roomId: $roomId) {\n roomId userId isTyping\n }\n }`,\n variables: { roomId: activeRoomId },\n },\n }));\n\n // Keep-alive ping every 25s\n pingInterval = setInterval(() => {\n if (ws?.readyState === WebSocket.OPEN) {\n ws.send(JSON.stringify({ type: 'ping' }));\n }\n }, 25000);\n break;\n\n case 'next':\n // Subscription data\n if (msg.id === 'sub_msg_created' && msg.payload?.data?.messageCreated) {\n const newMsg = msg.payload.data.messageCreated;\n // Skip if we sent this message (already added via optimistic insert)\n if (newMsg.authorId === userId) {\n // Just confirm the optimistic message (replace temp with real)\n setMessages((prev) =>\n prev.map((m) =>\n m._status === 'pending' && m.content === newMsg.content && m.authorId === newMsg.authorId\n ? { ...newMsg, _status: 'sent' as const }\n : m,\n ),\n );\n } else {\n // Message from another user — append if not already present\n setMessages((prev) => {\n if (prev.find((m) => m.id === newMsg.id)) return prev;\n return [...prev, newMsg];\n });\n }\n }\n if (msg.id === 'sub_msg_updated' && msg.payload?.data?.messageUpdated) {\n const updated = msg.payload.data.messageUpdated;\n setMessages((prev) =>\n prev.map((m) => (m.id === updated.id ? { ...updated, _status: 'sent' as const } : m)),\n );\n }\n if (msg.id === 'sub_msg_deleted' && msg.payload?.data?.messageDeleted) {\n const deletedId = msg.payload.data.messageDeleted;\n setMessages((prev) => prev.filter((m) => m.id !== deletedId));\n }\n if (msg.id === 'sub_typing' && msg.payload?.data?.typingIndicator) {\n const { userId: typerId, isTyping } = msg.payload.data.typingIndicator;\n if (typerId !== userId) {\n if (isTyping) {\n setTypingUsers((prev) =>\n prev.includes(typerId) ? prev : [...prev, typerId],\n );\n // Auto-clear after 4s\n setTimeout(() => {\n setTypingUsers((prev) => prev.filter((id) => id !== typerId));\n }, 4000);\n } else {\n setTypingUsers((prev) => prev.filter((id) => id !== typerId));\n }\n }\n }\n break;\n\n case 'pong':\n // Server acknowledged ping\n break;\n\n case 'error':\n console.warn('[organify-chat] Subscription error:', msg.payload);\n break;\n\n case 'complete':\n // Subscription completed by server\n break;\n }\n } catch {\n // ignore malformed messages\n }\n };\n\n ws.onerror = () => { /* suppress */ };\n\n ws.onclose = () => {\n clearInterval(pingInterval);\n if (!disposed && reconnectAttempts < maxReconnectAttempts) {\n const delay = Math.min(1000 * Math.pow(2, reconnectAttempts) + Math.random() * 500, 30000);\n reconnectAttempts++;\n reconnectTimer = setTimeout(connect, delay);\n }\n };\n } catch {\n if (!disposed && reconnectAttempts < maxReconnectAttempts) {\n reconnectAttempts++;\n reconnectTimer = setTimeout(connect, 3000);\n }\n }\n }\n\n connect();\n\n return () => {\n disposed = true;\n clearInterval(pingInterval);\n clearTimeout(reconnectTimer);\n if (ws?.readyState === WebSocket.OPEN) {\n // Unsubscribe all\n ws.send(JSON.stringify({ id: 'sub_msg_created', type: 'complete' }));\n ws.send(JSON.stringify({ id: 'sub_msg_updated', type: 'complete' }));\n ws.send(JSON.stringify({ id: 'sub_msg_deleted', type: 'complete' }));\n ws.send(JSON.stringify({ id: 'sub_typing', type: 'complete' }));\n ws.close(1000, 'unmount');\n } else {\n ws?.close();\n }\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [api?.services?.chat, gatewayUrl, userId, workspaceId, activeRoomId, isDemoMode]);\n\n // ─── Typing via GraphQL mutation (no separate WS needed) ──\n\n const sendTyping = useCallback(() => {\n // Typing is emitted via the subscription system.\n // We can also emit via a mutation if the backend supports it,\n // but for now we rely on the WS gateway / Socket.IO for typing.\n // This is a no-op until Socket.IO integration is complete.\n }, []);\n\n // ─── Auto-fetch rooms on workspaceId change (skip if optimistic workspace)\n useEffect(() => {\n if (workspaceId && !workspaceId.startsWith('temp-')) {\n fetchRooms();\n }\n }, [fetchRooms]);\n\n // ─── Clear error after 5s\n useEffect(() => {\n if (error) {\n const t = setTimeout(() => setError(null), 5000);\n return () => clearTimeout(t);\n }\n }, [error]);\n\n return {\n // State\n rooms,\n messages: enrichedMessages,\n activeRoomId,\n loadingRooms,\n loadingMessages,\n hasMoreMessages,\n loadingMoreMessages,\n roomMembers,\n myRoomRole,\n permissions,\n typingUsers,\n error,\n\n // Room selection\n selectRoom,\n\n // Messaging\n sendMessage,\n editMessage,\n deleteMessage,\n reactToMessage,\n sendTyping,\n loadMoreMessages,\n\n // Room CRUD\n createRoom,\n createDirectMessage,\n updateRoom,\n archiveRoom,\n leaveRoom,\n\n // Member management\n addMember,\n removeMember,\n updateMemberRole,\n\n // Refresh\n fetchRooms,\n fetchRoomMembers,\n userCache,\n };\n}\n","import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../lib/utils';\nimport { OrgCheckCircle, OrgError, OrgWarning, OrgInfo, OrgClose } from '../../icons';\n\n/**\n * Alert — Unified design with Toast\n *\n * Same layout as Toast component:\n * - Inline circular icon on the left\n * - rounded-2xl card\n * - Theme-adaptive (light/dark)\n * - Semantic border colors per variant\n */\nconst alertVariants = cva(\n 'relative flex w-full items-start gap-4 backdrop-blur-xl border px-5 py-4 transition-all duration-300 rounded-2xl shadow-2xl bg-white dark:bg-gray-900',\n {\n variants: {\n variant: {\n success: 'border-emerald-200 dark:border-emerald-800/50',\n error: 'border-rose-200 dark:border-rose-800/50',\n warning: 'border-amber-200 dark:border-amber-800/50',\n info: 'border-blue-200 dark:border-blue-800/50',\n },\n },\n defaultVariants: {\n variant: 'info',\n },\n },\n);\n\nconst alertIconVariants = cva(\n 'flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-full',\n {\n variants: {\n variant: {\n success: 'bg-emerald-100 text-emerald-600 dark:bg-emerald-600/20 dark:text-emerald-400',\n error: 'bg-rose-100 text-rose-600 dark:bg-rose-600/20 dark:text-rose-400',\n warning: 'bg-amber-100 text-amber-600 dark:bg-amber-600/20 dark:text-amber-400',\n info: 'bg-blue-100 text-blue-600 dark:bg-blue-600/20 dark:text-blue-400',\n },\n },\n defaultVariants: {\n variant: 'info',\n },\n },\n);\n\nexport interface AlertProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof alertVariants> {\n /** Alert title */\n title: string;\n /** Alert description */\n description?: string;\n /** Custom icon (lucide-react icon or any ReactNode) */\n icon?: React.ReactNode;\n /** Close handler — shows close button when provided */\n onClose?: () => void;\n /** Action button */\n action?: {\n label: string;\n onClick: () => void;\n };\n}\n\nfunction Alert({\n className,\n variant,\n title,\n description,\n icon,\n onClose,\n action,\n ...props\n}: AlertProps) {\n return (\n <div className={cn(alertVariants({ variant }), className)} role=\"alert\" {...props}>\n {/* Circular icon */}\n <div className={cn(alertIconVariants({ variant }))}>\n {icon || (\n <>\n {variant === 'success' && <OrgCheckCircle className=\"w-5 h-5\" />}\n {variant === 'error' && <OrgError className=\"w-5 h-5\" />}\n {variant === 'warning' && <OrgWarning className=\"w-5 h-5\" />}\n {variant === 'info' && <OrgInfo className=\"w-5 h-5\" />}\n </>\n )}\n </div>\n\n {/* Content */}\n <div className=\"flex-1 min-w-0\">\n <h4 className=\"text-sm font-semibold text-gray-900 dark:text-white mb-1 leading-tight\">{title}</h4>\n {description && (\n <p className=\"text-sm text-gray-500 dark:text-gray-400 leading-relaxed\">{description}</p>\n )}\n {action && (\n <button\n onClick={action.onClick}\n className=\"mt-3 px-4 py-2 text-sm font-medium text-white bg-primary hover:bg-primary/90 rounded-lg transition-colors\"\n >\n {action.label}\n </button>\n )}\n </div>\n\n {/* Close button */}\n {onClose && (\n <button\n onClick={onClose}\n className=\"absolute top-4 right-4 flex-shrink-0 p-1 text-gray-400 dark:text-gray-500 transition-colors hover:text-gray-600 dark:hover:text-gray-300\"\n aria-label=\"Close alert\"\n >\n <OrgClose className=\"h-4 w-4\" />\n </button>\n )}\n </div>\n );\n}\n\nexport { Alert, alertVariants };\n","// ─────────────────────────────────────────────\n// OrganifyChat — Fully responsive React component\n// with room CRUD, DM creation, RBAC management\n// ─────────────────────────────────────────────\n// Pulls gatewayUrl, userId, workspaceId from\n// OrganifyProvider — no manual prop passing.\n// ─────────────────────────────────────────────\n\n'use client';\n\nimport * as React from 'react';\nimport { cn } from '../../lib/utils';\nimport { useOrganifyUser } from '../../providers/organify-provider';\nimport { ChatSidebar } from './chat-sidebar';\nimport { ChatMessages } from './chat-messages';\nimport { CreateRoomDialog } from './create-room-dialog';\nimport { RoomManagementPanel } from './room-management-panel';\nimport { useChat } from './use-chat';\nimport type { OrganifyChatProps } from './types';\nimport { Alert } from '../feedback/alert';\n\n// ─── Detectar mobile ────────────────────────\n\nfunction useMediaQuery(query: string): boolean {\n const [matches, setMatches] = React.useState(false);\n\n React.useEffect(() => {\n const mql = window.matchMedia(query);\n setMatches(mql.matches);\n const handler = (e: MediaQueryListEvent) => setMatches(e.matches);\n mql.addEventListener('change', handler);\n return () => mql.removeEventListener('change', handler);\n }, [query]);\n\n return matches;\n}\n\nexport function OrganifyChat({\n workspaceRole,\n workspaceMembers,\n workspaceProjects,\n initialRooms,\n initialMessages,\n className,\n}: OrganifyChatProps) {\n const user = useOrganifyUser();\n const userId = user?.id ?? '';\n\n const stableWorkspaceMembers = React.useMemo(\n () => workspaceMembers ?? [],\n [workspaceMembers],\n );\n\n const stableWorkspaceProjects = React.useMemo(\n () => workspaceProjects ?? [],\n [workspaceProjects],\n );\n\n const chat = useChat({\n workspaceRole,\n initialRooms,\n initialMessages,\n workspaceMembers: stableWorkspaceMembers,\n });\n\n const isMobile = !useMediaQuery('(min-width: 768px)');\n\n const [createDialogOpen, setCreateDialogOpen] = React.useState(false);\n const [managementOpen, setManagementOpen] = React.useState(false);\n\n // Mobile: controla qual view mostrar (sidebar | room | management)\n const [mobileView, setMobileView] = React.useState<'sidebar' | 'room' | 'management'>('sidebar');\n\n const activeRoom = React.useMemo(\n () => chat.rooms.find((r) => r.id === chat.activeRoomId),\n [chat.rooms, chat.activeRoomId],\n );\n\n // Mobile: quando seleciona uma room, vai para room view\n const handleRoomSelect = (roomId: string) => {\n chat.selectRoom(roomId);\n if (isMobile) {\n setMobileView('room');\n }\n };\n\n // Mobile: voltar para sidebar\n const handleBackToSidebar = () => {\n setMobileView('sidebar');\n // No mobile, when going back to sidebar, clear the active room\n };\n\n // Mobile: abrir management drawer (da direita para esquerda)\n const handleOpenManagement = () => {\n if (isMobile) {\n setMobileView('management');\n } else {\n setManagementOpen(true);\n }\n };\n\n // Mobile: fechar management drawer\n const handleCloseManagement = () => {\n if (isMobile) {\n setMobileView('room');\n } else {\n setManagementOpen(false);\n }\n };\n\n return (\n <div\n className={cn(\n 'relative flex h-full min-h-[500px]',\n 'bg-theme-surface border border-theme-subtle rounded-xl overflow-hidden',\n className,\n )}\n >\n {/* ─── Error banner ─── */}\n {chat.error && (\n <div className=\"absolute top-0 left-0 right-0 z-50 px-4 pt-2 animate-in slide-in-from-top-2 duration-[400ms]\">\n <Alert\n variant=\"error\"\n title=\"Erro\"\n description={chat.error}\n className=\"py-3 text-xs\"\n />\n </div>\n )}\n\n {/* ─── DESKTOP: 3-column layout ─── */}\n {!isMobile && (\n <>\n {/* Sidebar */}\n <div className=\"w-[260px] shrink-0\">\n <ChatSidebar\n rooms={chat.rooms}\n activeRoomId={chat.activeRoomId}\n loading={chat.loadingRooms}\n onSelectRoom={chat.selectRoom}\n onCreateRoom={() => setCreateDialogOpen(true)}\n />\n </div>\n\n {/* Messages */}\n <div className=\"flex-1\">\n <ChatMessages\n room={activeRoom}\n messages={chat.messages}\n loading={chat.loadingMessages}\n typingUsers={chat.typingUsers}\n currentUserId={userId}\n permissions={chat.permissions}\n onSendMessage={chat.sendMessage}\n onEditMessage={chat.editMessage}\n onDeleteMessage={chat.deleteMessage}\n onReactToMessage={chat.reactToMessage}\n onTyping={chat.sendTyping}\n onStopTyping={chat.sendTyping}\n onOpenManagement={() => setManagementOpen(true)}\n isMobile={false}\n mentionUsers={stableWorkspaceMembers}\n mentionProjects={stableWorkspaceProjects}\n hasMore={chat.hasMoreMessages}\n onLoadMore={chat.loadMoreMessages}\n loadingMore={chat.loadingMoreMessages}\n />\n </div>\n\n {/* Management panel */}\n {managementOpen && activeRoom && (\n <div className=\"w-[300px] shrink-0 border-l border-theme-subtle bg-theme-glass\">\n <RoomManagementPanel\n room={activeRoom}\n members={chat.roomMembers}\n currentUserId={userId}\n permissions={chat.permissions}\n onClose={() => setManagementOpen(false)}\n onUpdateRoom={chat.updateRoom}\n onArchiveRoom={chat.archiveRoom}\n onLeaveRoom={chat.leaveRoom}\n onRemoveMember={chat.removeMember}\n onUpdateMemberRole={chat.updateMemberRole}\n />\n </div>\n )}\n </>\n )}\n\n {/* ─── MOBILE: view-based navigation ─── */}\n {isMobile && (\n <>\n {/* View: Sidebar */}\n {mobileView === 'sidebar' && (\n <div className=\"w-full animate-in fade-in-0 slide-in-from-left-5 duration-[400ms]\">\n <ChatSidebar\n rooms={chat.rooms}\n activeRoomId={chat.activeRoomId}\n loading={chat.loadingRooms}\n onSelectRoom={handleRoomSelect}\n onCreateRoom={() => setCreateDialogOpen(true)}\n />\n </div>\n )}\n\n {/* View: Room */}\n {mobileView === 'room' && activeRoom && (\n <div className=\"w-full animate-in fade-in-0 slide-in-from-right-5 duration-[400ms]\">\n <ChatMessages\n room={activeRoom}\n messages={chat.messages}\n loading={chat.loadingMessages}\n typingUsers={chat.typingUsers}\n currentUserId={userId}\n permissions={chat.permissions}\n onSendMessage={chat.sendMessage}\n onEditMessage={chat.editMessage}\n onDeleteMessage={chat.deleteMessage}\n onReactToMessage={chat.reactToMessage}\n onTyping={chat.sendTyping}\n onStopTyping={chat.sendTyping}\n onOpenManagement={handleOpenManagement}\n onBack={handleBackToSidebar}\n isMobile={true}\n mentionUsers={stableWorkspaceMembers}\n mentionProjects={stableWorkspaceProjects}\n hasMore={chat.hasMoreMessages}\n onLoadMore={chat.loadMoreMessages}\n loadingMore={chat.loadingMoreMessages}\n />\n </div>\n )}\n\n {/* View: Management Drawer (right-to-left) */}\n {mobileView === 'management' && activeRoom && (\n <div className=\"absolute inset-0 z-50 flex\">\n {/* Backdrop */}\n <div\n className=\"flex-1 bg-black/50 backdrop-blur-sm\"\n onClick={handleCloseManagement}\n />\n {/* Drawer panel da direita */}\n <div className=\"w-[85%] max-w-sm h-full bg-white/[0.03] backdrop-blur-[40px] border-l border-primary/15 animate-in slide-in-from-right-5 duration-[400ms]\">\n <RoomManagementPanel\n room={activeRoom}\n members={chat.roomMembers}\n currentUserId={userId}\n permissions={chat.permissions}\n onClose={handleCloseManagement}\n onUpdateRoom={chat.updateRoom}\n onArchiveRoom={chat.archiveRoom}\n onLeaveRoom={chat.leaveRoom}\n onRemoveMember={chat.removeMember}\n onUpdateMemberRole={chat.updateMemberRole}\n />\n </div>\n </div>\n )}\n </>\n )}\n\n {/* ─── Create Room Dialog ─── */}\n <CreateRoomDialog\n open={createDialogOpen}\n onOpenChange={setCreateDialogOpen}\n onCreateChannel={async (data) => {\n const room = await chat.createRoom({\n name: data.name,\n type: 'CHANNEL',\n visibility: data.visibility,\n description: data.description,\n memberIds: data.memberIds,\n });\n if (room) chat.selectRoom(room.id);\n return room;\n }}\n onCreateDM={async (targetUserId) => {\n const room = await chat.createDirectMessage(targetUserId);\n if (room) chat.selectRoom(room.id);\n return room;\n }}\n workspaceMembers={stableWorkspaceMembers}\n />\n </div>\n );\n}\n","// ─────────────────────────────────────────────\n// Chat Mock Data — Para desenvolvimento e testes\n// ─────────────────────────────────────────────\n// Features:\n// - Usuários mock com avatares\n// - Projetos mock\n// - Mensagens automáticas após envio\n// - Typing indicator mock\n// ─────────────────────────────────────────────\n\nimport type { ChatUser, ChatMessage } from './types';\nimport type { MentionOption } from './primitives/mention-popover';\n\n// ─── Mock Users ─────────────────────────────\n\nexport const MOCK_USERS: ChatUser[] = [\n {\n id: 'user-1',\n displayName: 'Ana Silva',\n email: 'ana.silva@organify.dev',\n avatarUrl: null,\n status: 'ONLINE',\n },\n {\n id: 'user-2',\n displayName: 'Bruno Costa',\n email: 'bruno.costa@organify.dev',\n avatarUrl: null,\n status: 'ONLINE',\n },\n {\n id: 'user-3',\n displayName: 'Carla Santos',\n email: 'carla.santos@organify.dev',\n avatarUrl: null,\n status: 'AWAY',\n },\n {\n id: 'user-4',\n displayName: 'Diego Ferreira',\n email: 'diego.ferreira@organify.dev',\n avatarUrl: null,\n status: 'ONLINE',\n },\n {\n id: 'user-5',\n displayName: 'Elena Rodrigues',\n email: 'elena.rodrigues@organify.dev',\n avatarUrl: null,\n status: 'BUSY',\n },\n {\n id: 'user-6',\n displayName: 'Fernando Lima',\n email: 'fernando.lima@organify.dev',\n avatarUrl: null,\n status: 'ONLINE',\n },\n {\n id: 'user-7',\n displayName: 'Gabriela Alves',\n email: 'gabriela.alves@organify.dev',\n avatarUrl: null,\n status: 'OFFLINE',\n },\n {\n id: 'user-8',\n displayName: 'Hugo Martins',\n email: 'hugo.martins@organify.dev',\n avatarUrl: null,\n status: 'ONLINE',\n },\n];\n\n// ─── Mock Projects ──────────────────────────\n\nexport const MOCK_PROJECTS = [\n { id: 'proj-1', name: 'Organify Platform', key: 'ORG' },\n { id: 'proj-2', name: 'Mobile App', key: 'MOB' },\n { id: 'proj-3', name: 'Design System', key: 'DS' },\n { id: 'proj-4', name: 'Marketing Website', key: 'WEB' },\n { id: 'proj-5', name: 'API Gateway', key: 'API' },\n];\n\n// ─── Mention Options ────────────────────────\n\nexport function getMockMentionOptions(query: string): MentionOption[] {\n const q = query.toLowerCase();\n const options: MentionOption[] = [];\n\n // Users\n MOCK_USERS\n .filter((u) => \n u.displayName.toLowerCase().includes(q) || \n u.email?.toLowerCase().includes(q)\n )\n .slice(0, 5)\n .forEach((u) => {\n options.push({\n id: u.id,\n type: 'user',\n display: u.displayName,\n avatarUrl: u.avatarUrl,\n subtitle: u.email,\n });\n });\n\n // Projects\n MOCK_PROJECTS\n .filter((p) => \n p.name.toLowerCase().includes(q) || \n p.key.toLowerCase().includes(q)\n )\n .slice(0, 3)\n .forEach((p) => {\n options.push({\n id: p.id,\n type: 'project',\n display: p.name,\n subtitle: p.key,\n });\n });\n\n return options;\n}\n\n// ─── Auto-Reply Messages ────────────────────\n\nconst REPLY_TEMPLATES = [\n 'Excelente ideia! 👍',\n 'Concordo totalmente.',\n 'Vou verificar isso agora.',\n 'Obrigado pela atualização! 🎉',\n 'Isso faz sentido.',\n 'Pode deixar comigo!',\n 'Bom ponto! Não tinha pensado nisso.',\n 'Já estou trabalhando nisso.',\n 'Perfeito, vamos em frente!',\n 'Ótimo trabalho! 🚀',\n 'Interessante... vou investigar.',\n 'Combinado!',\n 'Aceito o desafio! 💪',\n 'Bom demais!',\n 'Isso vai ajudar muito.',\n];\n\nconst RANDOM_COMMENTS = [\n 'Alguém viu o novo design? Está incrível!',\n 'Precisamos revisar a API de notificações.',\n 'O deploy de hoje foi um sucesso! 🎊',\n 'Quem pode me ajudar com TypeScript?',\n 'Reunião marcada para amanhã às 10h.',\n 'A feature de chat ficou muito boa!',\n 'Encontrei um bug no formulário de login.',\n 'Code review pendente no PR #234',\n 'Alguém tem tempo para pair programming?',\n 'Nova sprint começa na segunda-feira!',\n 'Preciso de feedback no mockup.',\n 'Performance melhorou 40% com as últimas mudanças!',\n 'Documentação atualizada no Notion.',\n 'Quem quer café? ☕',\n 'Cliente adorou a demo!',\n];\n\nfunction getRandomUser(): ChatUser {\n return MOCK_USERS[Math.floor(Math.random() * MOCK_USERS.length)];\n}\n\nfunction getRandomTemplate(): string {\n return REPLY_TEMPLATES[Math.floor(Math.random() * REPLY_TEMPLATES.length)];\n}\n\nfunction getRandomComment(): string {\n return RANDOM_COMMENTS[Math.floor(Math.random() * RANDOM_COMMENTS.length)];\n}\n\n// ─── Generate Auto-Replies ──────────────────\n\nexport function generateAutoReplies(\n userMessage: ChatMessage,\n roomId: string,\n count: number = 5,\n): ChatMessage[] {\n const replies: ChatMessage[] = [];\n const now = Date.now();\n\n for (let i = 0; i < count; i++) {\n const user = getRandomUser();\n const isReply = Math.random() > 0.6; // 40% chance de ser reply\n const isComment = Math.random() > 0.7; // 30% chance de ser comentário aleatório\n\n replies.push({\n id: `mock-${Date.now()}-${i}`,\n roomId,\n authorId: user.id,\n authorName: user.displayName,\n content: isComment ? getRandomComment() : getRandomTemplate(),\n createdAt: new Date(now + (i + 1) * 2000).toISOString(), // 2s interval\n replyToId: isReply ? userMessage.id : null,\n edited: false,\n editedAt: null,\n mentions: [],\n reactions: [],\n });\n }\n\n return replies;\n}\n\n// ─── Typing Indicator Mock ─────────────────\n\nexport class TypingIndicatorMock {\n private typingUsers: Set<string> = new Set();\n private timeouts: Map<string, NodeJS.Timeout> = new Map();\n private listeners: ((users: string[]) => void)[] = [];\n\n constructor() {}\n\n /** Simula alguém começando a digitar */\n startTyping(userId?: string) {\n const user = userId \n ? MOCK_USERS.find((u) => u.id === userId) \n : getRandomUser();\n \n if (!user) return;\n\n // Clear existing timeout\n const existingTimeout = this.timeouts.get(user.id);\n if (existingTimeout) {\n clearTimeout(existingTimeout);\n }\n\n // Add user\n this.typingUsers.add(user.displayName);\n this.notify();\n\n // Auto-stop after 3-5 seconds\n const duration = 3000 + Math.random() * 2000;\n const timeout = setTimeout(() => {\n this.stopTyping(user.id);\n }, duration);\n\n this.timeouts.set(user.id, timeout);\n }\n\n /** Para de digitar */\n stopTyping(userId: string) {\n const user = MOCK_USERS.find((u) => u.id === userId);\n if (!user) return;\n\n this.typingUsers.delete(user.displayName);\n \n const timeout = this.timeouts.get(userId);\n if (timeout) {\n clearTimeout(timeout);\n this.timeouts.delete(userId);\n }\n\n this.notify();\n }\n\n /** Subscribe to typing changes */\n subscribe(callback: (users: string[]) => void) {\n this.listeners.push(callback);\n return () => {\n this.listeners = this.listeners.filter((l) => l !== callback);\n };\n }\n\n private notify() {\n const users = Array.from(this.typingUsers);\n this.listeners.forEach((cb) => cb(users));\n }\n\n /** Simula typing indicator aleatório */\n simulateRandomTyping() {\n // Random delay between 2-8 seconds\n const delay = 2000 + Math.random() * 6000;\n \n setTimeout(() => {\n if (Math.random() > 0.5) {\n this.startTyping();\n }\n // Continue random typing\n this.simulateRandomTyping();\n }, delay);\n }\n\n clear() {\n this.typingUsers.clear();\n this.timeouts.forEach((timeout) => clearTimeout(timeout));\n this.timeouts.clear();\n this.notify();\n }\n}\n\n// ─── Singleton Instance ─────────────────────\n\nexport const typingIndicator = new TypingIndicatorMock();\n\n// Auto-start random typing simulation\nif (typeof window !== 'undefined') {\n typingIndicator.simulateRandomTyping();\n}\n","'use client';\n\nimport * as React from 'react';\nimport { cn } from '../../lib/utils';\n\n// ─────────────────────────────────────────────\n// AI Chat Sidebar — Slide-out panel\n// ─────────────────────────────────────────────\n\nexport interface AiChatMessage {\n id: string;\n role: 'user' | 'assistant' | 'system';\n content: string;\n timestamp: Date;\n actions?: AiAction[];\n loading?: boolean;\n}\n\nexport interface AiAction {\n type: string;\n label: string;\n description?: string;\n applied?: boolean;\n}\n\nexport interface AiChatSidebarProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n messages: AiChatMessage[];\n onSend: (message: string) => void;\n loading?: boolean;\n userName?: string;\n contextLabel?: string;\n placeholder?: string;\n}\n\nexport function AiChatSidebar({\n open,\n onOpenChange,\n messages,\n onSend,\n loading = false,\n userName,\n contextLabel,\n placeholder = 'Pergunte ao assistente IA...',\n}: AiChatSidebarProps) {\n const [input, setInput] = React.useState('');\n const messagesEndRef = React.useRef<HTMLDivElement>(null);\n const inputRef = React.useRef<HTMLTextAreaElement>(null);\n\n React.useEffect(() => {\n messagesEndRef.current?.scrollIntoView({ behavior: 'smooth' });\n }, [messages]);\n\n React.useEffect(() => {\n if (open) inputRef.current?.focus();\n }, [open]);\n\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n const trimmed = input.trim();\n if (!trimmed || loading) return;\n onSend(trimmed);\n setInput('');\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n handleSubmit(e);\n }\n };\n\n return (\n <>\n {/* Backdrop */}\n {open && (\n <div\n className=\"fixed inset-0 z-50 bg-theme-subtle-20 backdrop-blur-sm transition-opacity\"\n onClick={() => onOpenChange(false)}\n />\n )}\n\n {/* Sidebar panel */}\n <div\n className={cn(\n 'fixed right-0 top-0 z-50 flex h-full w-[420px] max-w-[90vw] flex-col border-l border-theme-subtle bg-theme-glass-heavy text-theme backdrop-blur-[60px] shadow-2xl',\n 'transition-transform duration-300 ease-in-out',\n open ? 'translate-x-0' : 'translate-x-full',\n )}\n >\n {/* Header */}\n <div className=\"flex items-center justify-between border-b border-theme-subtle px-4 py-3\">\n <div className=\"flex items-center gap-2\">\n <div className=\"flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-blue-500 to-purple-600 text-sm font-bold text-white\">\n AI\n </div>\n <div>\n <h3 className=\"text-sm font-semibold text-theme\">Assistente IA</h3>\n {contextLabel && (\n <p className=\"text-[11px] text-theme-muted\">{contextLabel}</p>\n )}\n </div>\n </div>\n <button\n onClick={() => onOpenChange(false)}\n className=\"rounded-md p-1.5 text-theme-muted hover:bg-theme-subtle-10 hover:text-theme transition-colors\"\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"M18 6L6 18M6 6l12 12\" />\n </svg>\n </button>\n </div>\n\n {/* Messages */}\n <div className=\"flex-1 overflow-y-auto px-4 py-3 space-y-4\">\n {messages.length === 0 && (\n <div className=\"flex flex-col items-center justify-center h-full text-center space-y-3\">\n <div className=\"flex h-14 w-14 items-center justify-center rounded-2xl bg-gradient-to-br from-blue-500/20 to-purple-600/20 border border-theme-subtle\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" className=\"text-blue-400\">\n <path d=\"M9.813 15.904L9 18.75l-.813-2.846a4.5 4.5 0 00-3.09-3.09L2.25 12l2.846-.813a4.5 4.5 0 003.09-3.09L9 5.25l.813 2.846a4.5 4.5 0 003.09 3.09L15.75 12l-2.846.813a4.5 4.5 0 00-3.09 3.09z\" />\n </svg>\n </div>\n <p className=\"text-sm text-theme-muted\">\n {userName ? `Olá ${userName}!` : 'Olá!'} Como posso ajudar?\n </p>\n <div className=\"space-y-1.5 text-[11px] text-theme-muted\">\n <p>\"Cria uma task para corrigir o bug do login\"</p>\n <p>\"Mostra o resumo do sprint atual\"</p>\n <p>\"Quem tem mais tarefas atribuídas?\"</p>\n </div>\n </div>\n )}\n\n {messages.map((msg) => (\n <div\n key={msg.id}\n className={cn(\n 'flex flex-col gap-1',\n msg.role === 'user' ? 'items-end' : 'items-start',\n )}\n >\n <div\n className={cn(\n 'max-w-[85%] rounded-xl px-3 py-2 text-sm leading-relaxed',\n msg.role === 'user'\n ? 'bg-primary text-white'\n : 'bg-theme-subtle-10 text-theme-secondary border border-theme-subtle',\n msg.loading && 'animate-pulse',\n )}\n >\n {msg.content}\n </div>\n\n {/* Actions the AI took */}\n {msg.actions && msg.actions.length > 0 && (\n <div className=\"mt-1 space-y-1 max-w-[85%]\">\n {msg.actions.map((action, i) => (\n <div\n key={i}\n className=\"flex items-center gap-2 rounded-lg bg-theme-subtle-10 border border-theme-subtle px-2.5 py-1.5 text-[11px]\"\n >\n <span className={cn(\n 'h-1.5 w-1.5 rounded-full',\n action.applied ? 'bg-green-400' : 'bg-yellow-400',\n )} />\n <span className=\"text-theme-secondary\">{action.label}</span>\n </div>\n ))}\n </div>\n )}\n\n <span className=\"text-[10px] text-theme-muted px-1\">\n {msg.timestamp.toLocaleTimeString('pt-PT', { hour: '2-digit', minute: '2-digit' })}\n </span>\n </div>\n ))}\n\n {loading && (\n <div className=\"flex items-start gap-2\">\n <div className=\"bg-theme-subtle-10 rounded-xl px-3 py-2 border border-theme-subtle\">\n <div className=\"flex gap-1\">\n <span className=\"h-2 w-2 rounded-full bg-primary animate-bounce\" style={{ animationDelay: '0ms' }} />\n <span className=\"h-2 w-2 rounded-full bg-primary animate-bounce\" style={{ animationDelay: '150ms' }} />\n <span className=\"h-2 w-2 rounded-full bg-primary animate-bounce\" style={{ animationDelay: '300ms' }} />\n </div>\n </div>\n </div>\n )}\n\n <div ref={messagesEndRef} />\n </div>\n\n {/* Input */}\n <form onSubmit={handleSubmit} className=\"border-t border-theme-subtle p-3\">\n <div className=\"flex items-end gap-2 rounded-xl bg-theme-subtle-10 border border-theme-subtle px-3 py-2 focus-within:border-theme-medium transition-colors\">\n <textarea\n ref={inputRef}\n value={input}\n onChange={(e) => setInput(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n rows={1}\n className=\"flex-1 resize-none bg-transparent text-sm text-theme placeholder:text-theme-muted outline-none max-h-32\"\n style={{ minHeight: '24px' }}\n />\n <button\n type=\"submit\"\n disabled={!input.trim() || loading}\n className={cn(\n 'flex h-7 w-7 items-center justify-center rounded-lg transition-colors',\n input.trim() && !loading\n ? 'bg-primary text-white hover:bg-primary/90'\n : 'bg-theme-subtle-10 text-theme-muted',\n )}\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"M22 2L11 13M22 2l-7 20-4-9-9-4 20-7z\" />\n </svg>\n </button>\n </div>\n <p className=\"mt-1.5 text-[10px] text-theme-muted text-center\">\n IA pode cometer erros. Verifique informações importantes.\n </p>\n </form>\n </div>\n </>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { cn } from '../../lib/utils';\n\n// ─────────────────────────────────────────────\n// Command Bar (⌘K) — AI-powered command palette\n// ─────────────────────────────────────────────\n\nexport interface CommandBarItem {\n id: string;\n icon?: React.ReactNode;\n label: string;\n description?: string;\n category?: string;\n shortcut?: string;\n onSelect: () => void;\n}\n\nexport interface CommandBarProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n items: CommandBarItem[];\n /** Called when user types a message that doesn't match any command */\n onAiPrompt?: (prompt: string) => void;\n aiLoading?: boolean;\n aiResponse?: string;\n placeholder?: string;\n}\n\nexport function CommandBar({\n open,\n onOpenChange,\n items,\n onAiPrompt,\n aiLoading = false,\n aiResponse,\n placeholder = 'Escreva um comando ou pergunte à IA...',\n}: CommandBarProps) {\n const [query, setQuery] = React.useState('');\n const [selectedIndex, setSelectedIndex] = React.useState(0);\n const inputRef = React.useRef<HTMLInputElement>(null);\n\n // Filter items by query\n const filtered = React.useMemo(() => {\n if (!query.trim()) return items;\n const q = query.toLowerCase();\n return items.filter(\n (item) =>\n item.label.toLowerCase().includes(q) ||\n item.description?.toLowerCase().includes(q) ||\n item.category?.toLowerCase().includes(q),\n );\n }, [items, query]);\n\n // Group by category\n const grouped = React.useMemo(() => {\n const groups = new Map<string, CommandBarItem[]>();\n for (const item of filtered) {\n const cat = item.category || 'Geral';\n if (!groups.has(cat)) groups.set(cat, []);\n groups.get(cat)!.push(item);\n }\n return groups;\n }, [filtered]);\n\n // Keyboard shortcut to open (⌘K / Ctrl+K)\n React.useEffect(() => {\n const handler = (e: KeyboardEvent) => {\n if ((e.metaKey || e.ctrlKey) && e.key === 'k') {\n e.preventDefault();\n onOpenChange(!open);\n }\n if (e.key === 'Escape' && open) {\n onOpenChange(false);\n }\n };\n window.addEventListener('keydown', handler);\n return () => window.removeEventListener('keydown', handler);\n }, [open, onOpenChange]);\n\n // Reset on open\n React.useEffect(() => {\n if (open) {\n setQuery('');\n setSelectedIndex(0);\n setTimeout(() => inputRef.current?.focus(), 50);\n }\n }, [open]);\n\n // Clamp selection\n React.useEffect(() => {\n setSelectedIndex(0);\n }, [query]);\n\n const flatItems = React.useMemo(() => {\n const flat: CommandBarItem[] = [];\n for (const group of grouped.values()) flat.push(...group);\n return flat;\n }, [grouped]);\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n setSelectedIndex((i) => Math.min(i + 1, flatItems.length - 1));\n break;\n case 'ArrowUp':\n e.preventDefault();\n setSelectedIndex((i) => Math.max(i - 1, 0));\n break;\n case 'Enter':\n e.preventDefault();\n if (flatItems[selectedIndex]) {\n flatItems[selectedIndex].onSelect();\n onOpenChange(false);\n } else if (query.trim() && onAiPrompt) {\n onAiPrompt(query.trim());\n }\n break;\n }\n };\n\n if (!open) return null;\n\n return (\n <div className=\"fixed inset-0 z-[100] flex items-start justify-center pt-[15vh]\">\n {/* Backdrop */}\n <div\n className=\"absolute inset-0 bg-theme-subtle-20 backdrop-blur-sm\"\n onClick={() => onOpenChange(false)}\n />\n\n {/* Dialog */}\n <div className=\"relative w-full max-w-[560px] rounded-2xl border border-theme-subtle bg-theme-glass-heavy text-theme backdrop-blur-[60px] shadow-2xl overflow-hidden animate-in fade-in slide-in-from-top-4 duration-200\">\n {/* Search input */}\n <div className=\"flex items-center gap-3 border-b border-theme-subtle px-4 py-3\">\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n className=\"text-theme-muted shrink-0\"\n >\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n <path d=\"M21 21l-4.35-4.35\" />\n </svg>\n <input\n ref={inputRef}\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n className=\"flex-1 bg-transparent text-sm text-theme placeholder:text-theme-muted outline-none\"\n />\n {query && (\n <button\n onClick={() => setQuery('')}\n className=\"text-theme-muted hover:text-theme transition-colors\"\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <path d=\"M18 6L6 18M6 6l12 12\" />\n </svg>\n </button>\n )}\n <kbd className=\"hidden sm:inline-flex h-5 items-center rounded border border-theme-subtle bg-theme-subtle-10 px-1.5 text-[10px] text-theme-muted\">\n ESC\n </kbd>\n </div>\n\n {/* Results */}\n <div className=\"max-h-[320px] overflow-y-auto py-2\">\n {flatItems.length > 0 ? (\n Array.from(grouped.entries()).map(([category, groupItems]) => (\n <div key={category}>\n <div className=\"px-4 py-1.5 text-[10px] font-semibold uppercase tracking-wider text-theme-muted\">\n {category}\n </div>\n {groupItems.map((item) => {\n const globalIdx = flatItems.indexOf(item);\n return (\n <button\n key={item.id}\n onClick={() => {\n item.onSelect();\n onOpenChange(false);\n }}\n onMouseEnter={() => setSelectedIndex(globalIdx)}\n className={cn(\n 'flex w-full items-center gap-3 px-4 py-2.5 text-left transition-colors',\n globalIdx === selectedIndex\n ? 'bg-theme-subtle-10 text-theme'\n : 'text-theme-secondary hover:bg-theme-subtle-10',\n )}\n >\n {item.icon && (\n <span className=\"flex h-8 w-8 items-center justify-center rounded-lg bg-theme-subtle-10 text-theme-muted\">\n {item.icon}\n </span>\n )}\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-sm font-medium truncate\">{item.label}</p>\n {item.description && (\n <p className=\"text-[11px] text-theme-muted truncate\">{item.description}</p>\n )}\n </div>\n {item.shortcut && (\n <kbd className=\"text-[10px] text-theme-muted border border-theme-subtle rounded px-1.5 py-0.5 bg-theme-subtle-10\">\n {item.shortcut}\n </kbd>\n )}\n </button>\n );\n })}\n </div>\n ))\n ) : query.trim() ? (\n <div className=\"px-4 py-6 text-center\">\n {onAiPrompt ? (\n <div className=\"space-y-2\">\n <p className=\"text-sm text-theme-muted\">Nenhum comando encontrado</p>\n <button\n onClick={() => {\n onAiPrompt(query.trim());\n }}\n className=\"inline-flex items-center gap-2 rounded-lg bg-primary/10 border border-primary/30 px-3 py-1.5 text-sm text-primary hover:bg-primary/20 transition-colors\"\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\">\n <path d=\"M9.813 15.904L9 18.75l-.813-2.846a4.5 4.5 0 00-3.09-3.09L2.25 12l2.846-.813a4.5 4.5 0 003.09-3.09L9 5.25l.813 2.846a4.5 4.5 0 003.09 3.09L15.75 12l-2.846.813a4.5 4.5 0 00-3.09 3.09z\" />\n </svg>\n Perguntar à IA: \"{query}\"\n </button>\n </div>\n ) : (\n <p className=\"text-sm text-theme-muted\">Nenhum resultado encontrado</p>\n )}\n </div>\n ) : (\n <div className=\"px-4 py-4 text-center text-sm text-theme-muted\">\n Comece a escrever para pesquisar...\n </div>\n )}\n </div>\n\n {/* AI Response */}\n {(aiLoading || aiResponse) && (\n <div className=\"border-t border-theme-subtle px-4 py-3\">\n {aiLoading ? (\n <div className=\"flex items-center gap-2 text-sm text-theme-muted\">\n <div className=\"flex gap-1\">\n <span className=\"h-1.5 w-1.5 rounded-full bg-primary animate-bounce\" style={{ animationDelay: '0ms' }} />\n <span className=\"h-1.5 w-1.5 rounded-full bg-primary animate-bounce\" style={{ animationDelay: '150ms' }} />\n <span className=\"h-1.5 w-1.5 rounded-full bg-primary animate-bounce\" style={{ animationDelay: '300ms' }} />\n </div>\n A pensar...\n </div>\n ) : aiResponse ? (\n <p className=\"text-sm text-theme-secondary leading-relaxed\">{aiResponse}</p>\n ) : null}\n </div>\n )}\n\n {/* Footer */}\n <div className=\"flex items-center justify-between border-t border-theme-subtle px-4 py-2 text-[10px] text-theme-muted\">\n <span>↑↓ navegar · Enter selecionar · Esc fechar</span>\n <span>⌘K para abrir</span>\n </div>\n </div>\n </div>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { cn } from '../../lib/utils';\n\n// ─────────────────────────────────────────────\n// Inline AI Button — Trigger AI assistance\n// inline in forms, text areas, etc.\n// ─────────────────────────────────────────────\n\nexport interface InlineAiButtonProps {\n /** Called when AI is triggered with optional context text */\n onTrigger: (selectedText?: string) => void;\n /** Whether AI is currently processing */\n loading?: boolean;\n /** Optional AI suggestion to display */\n suggestion?: string;\n /** Called when user accepts the suggestion */\n onAccept?: (suggestion: string) => void;\n /** Called when user dismisses the suggestion */\n onDismiss?: () => void;\n /** Size variant */\n size?: 'sm' | 'md';\n className?: string;\n}\n\nexport function InlineAiButton({\n onTrigger,\n loading = false,\n suggestion,\n onAccept,\n onDismiss,\n size = 'sm',\n className,\n}: InlineAiButtonProps) {\n return (\n <div className={cn('relative inline-flex flex-col', className)}>\n {/* Trigger button */}\n <button\n type=\"button\"\n onClick={() => onTrigger()}\n disabled={loading}\n className={cn(\n 'inline-flex items-center gap-1 rounded-md border border-theme-subtle bg-theme-subtle-10 text-theme-muted hover:bg-theme-subtle-20 hover:text-theme hover:border-theme-medium transition-all',\n size === 'sm' ? 'px-1.5 py-0.5 text-[10px]' : 'px-2 py-1 text-xs',\n loading && 'animate-pulse',\n )}\n title=\"Assistente IA (Alt+I)\"\n >\n <svg\n width={size === 'sm' ? 10 : 12}\n height={size === 'sm' ? 10 : 12}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n >\n <path d=\"M9.813 15.904L9 18.75l-.813-2.846a4.5 4.5 0 00-3.09-3.09L2.25 12l2.846-.813a4.5 4.5 0 003.09-3.09L9 5.25l.813 2.846a4.5 4.5 0 003.09 3.09L15.75 12l-2.846.813a4.5 4.5 0 00-3.09 3.09z\" />\n </svg>\n {loading ? 'A pensar...' : 'IA'}\n </button>\n\n {/* Suggestion popup */}\n {suggestion && (\n <div className=\"absolute top-full left-0 z-50 mt-1.5 w-72 rounded-xl border border-theme-subtle bg-theme-glass-heavy text-theme backdrop-blur-[40px] shadow-xl p-3 animate-in fade-in slide-in-from-top-2 duration-200\">\n <div className=\"flex items-center gap-1.5 mb-2\">\n <div className=\"h-4 w-4 rounded bg-gradient-to-br from-blue-500 to-purple-600 flex items-center justify-center\">\n <svg width=\"8\" height=\"8\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"white\" strokeWidth=\"3\">\n <path d=\"M9.813 15.904L9 18.75l-.813-2.846a4.5 4.5 0 00-3.09-3.09L2.25 12l2.846-.813a4.5 4.5 0 003.09-3.09L9 5.25\" />\n </svg>\n </div>\n <span className=\"text-[10px] font-medium text-theme-muted uppercase tracking-wider\">Sugestao IA</span>\n </div>\n\n <p className=\"text-sm text-theme-secondary leading-relaxed mb-3\">{suggestion}</p>\n\n <div className=\"flex items-center gap-2\">\n <button\n onClick={() => onAccept?.(suggestion)}\n className=\"flex-1 rounded-lg bg-primary px-2 py-1.5 text-xs font-medium text-white hover:bg-primary/90 transition-colors\"\n >\n Aceitar\n </button>\n <button\n onClick={onDismiss}\n className=\"flex-1 rounded-lg bg-theme-subtle-10 px-2 py-1.5 text-xs text-theme-muted hover:bg-theme-subtle-20 hover:text-theme transition-colors\"\n >\n Descartar\n </button>\n </div>\n </div>\n )}\n </div>\n );\n}\n\n// ─────────────────────────────────────────────\n// useAiInline hook — for use in form components\n// ─────────────────────────────────────────────\n\nexport interface UseAiInlineOptions {\n gatewayUrl: string;\n workspaceId: string;\n projectId?: string;\n}\n\nexport function useAiInline({ gatewayUrl, workspaceId, projectId }: UseAiInlineOptions) {\n const [loading, setLoading] = React.useState(false);\n const [suggestion, setSuggestion] = React.useState<string | undefined>();\n\n const requestSuggestion = React.useCallback(\n async (context: string, fieldType?: string) => {\n setLoading(true);\n setSuggestion(undefined);\n\n try {\n const res = await fetch(`${gatewayUrl}/api/ai/suggest`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n credentials: 'include',\n body: JSON.stringify({\n prompt: context,\n workspaceId,\n projectId,\n context: { fieldType },\n }),\n });\n\n if (!res.ok) throw new Error('AI request failed');\n const data = await res.json();\n setSuggestion(data.suggestion || data.response || data.message);\n } catch (err) {\n console.error('AI inline error:', err);\n setSuggestion(undefined);\n } finally {\n setLoading(false);\n }\n },\n [gatewayUrl, workspaceId, projectId],\n );\n\n const dismiss = React.useCallback(() => setSuggestion(undefined), []);\n\n return { loading, suggestion, requestSuggestion, dismiss };\n}\n"]}
|