organify-ui 0.3.21 → 0.3.22
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/index.d.ts +22 -9
- package/dist/index.js +91 -14
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/primitives/toggle.tsx","../src/components/primitives/use-resolved-user.ts","../src/components/primitives/user-avatar.tsx","../src/components/primitives/progress.tsx","../src/components/feedback/toast.tsx","../src/components/feedback/empty-state.tsx","../src/components/feedback/task-detail-panel.tsx","../src/components/feedback/skeletons.tsx","../src/components/layout/glass-panel.tsx","../src/components/layout/dock.tsx","../src/components/layout/dock-sidebar.tsx","../src/components/layout/workspace-switcher.tsx","../src/components/layout/logo.tsx","../src/components/layout/geometric-icon.tsx","../src/components/data/metric-card.tsx","../src/components/data/stepper.tsx","../src/components/data/status-pill.tsx","../../../node_modules/date-fns/constants.js","../../../node_modules/date-fns/constructFrom.js","../../../node_modules/date-fns/toDate.js","../../../node_modules/date-fns/_lib/defaultOptions.js","../../../node_modules/date-fns/startOfWeek.js","../../../node_modules/date-fns/startOfISOWeek.js","../../../node_modules/date-fns/getISOWeekYear.js","../../../node_modules/date-fns/_lib/getTimezoneOffsetInMilliseconds.js","../../../node_modules/date-fns/_lib/normalizeDates.js","../../../node_modules/date-fns/startOfDay.js","../../../node_modules/date-fns/differenceInCalendarDays.js","../../../node_modules/date-fns/startOfISOWeekYear.js","../../../node_modules/date-fns/isDate.js","../../../node_modules/date-fns/isValid.js","../../../node_modules/date-fns/startOfYear.js","../../../node_modules/date-fns/locale/en-US/_lib/formatDistance.js","../../../node_modules/date-fns/locale/_lib/buildFormatLongFn.js","../../../node_modules/date-fns/locale/en-US/_lib/formatLong.js","../../../node_modules/date-fns/locale/en-US/_lib/formatRelative.js","../../../node_modules/date-fns/locale/_lib/buildLocalizeFn.js","../../../node_modules/date-fns/locale/en-US/_lib/localize.js","../../../node_modules/date-fns/locale/_lib/buildMatchFn.js","../../../node_modules/date-fns/locale/_lib/buildMatchPatternFn.js","../../../node_modules/date-fns/locale/en-US/_lib/match.js","../../../node_modules/date-fns/locale/en-US.js","../../../node_modules/date-fns/getDayOfYear.js","../../../node_modules/date-fns/getISOWeek.js","../../../node_modules/date-fns/getWeekYear.js","../../../node_modules/date-fns/startOfWeekYear.js","../../../node_modules/date-fns/getWeek.js","../../../node_modules/date-fns/_lib/addLeadingZeros.js","../../../node_modules/date-fns/_lib/format/lightFormatters.js","../../../node_modules/date-fns/_lib/format/formatters.js","../../../node_modules/date-fns/_lib/format/longFormatters.js","../../../node_modules/date-fns/_lib/protectedTokens.js","../../../node_modules/date-fns/format.js","../../../node_modules/date-fns/locale/pt-BR/_lib/formatDistance.js","../../../node_modules/date-fns/locale/pt-BR/_lib/formatLong.js","../../../node_modules/date-fns/locale/pt-BR/_lib/formatRelative.js","../../../node_modules/date-fns/locale/pt-BR/_lib/localize.js","../../../node_modules/date-fns/locale/pt-BR/_lib/match.js","../../../node_modules/date-fns/locale/pt-BR.js","../src/components/primitives/sheet.tsx","../src/components/comments/comment-item.tsx","../src/components/comments/primitives/comment-input.tsx","../src/components/comments/primitives/comment-skeleton.tsx","../src/components/comments/comment-thread.tsx","../src/components/data/primitives/label-picker.tsx","../src/components/data/primitives/assignee-picker.tsx","../src/components/data/task-detail-sheet.tsx","../src/components/data/task-card.tsx","../src/components/data/task-detail-dialog.tsx","../src/components/data/kanban-board.tsx","../src/components/data/plan-badge.tsx","../src/components/data/boards-switcher.tsx","../src/components/data/sprint-filter.tsx","../src/components/data/activity-trail.tsx","../src/components/primitives/card.tsx","../src/components/primitives/dropdown-menu.tsx","../src/components/primitives/checkbox.tsx","../src/components/primitives/switch.tsx","../src/components/primitives/collapsible.tsx","../src/components/primitives/command.tsx","../src/components/primitives/breadcrumb.tsx","../src/components/primitives/empty.tsx","../src/components/feedback/sonner.tsx","../src/hooks/use-current-user.ts","../src/components/forms/create-project-dialog.tsx","../src/components/forms/create-workspace-dialog.tsx","../src/components/forms/create-sprint-dialog.tsx","../src/components/forms/create-epic-dialog.tsx","../src/components/forms/create-task-dialog.tsx","../src/components/forms/invite-member-dialog.tsx"],"names":["React","jsxs","jsx","React2","React3","message","_","cva","React4","useMediaQuery","Fragment","defaultOptions","format","localize","formatLong","formatDistanceLocale","formatDistance","dateFormats","timeFormats","dateTimeFormats","formatRelativeLocale","formatRelative","eraValues","quarterValues","monthValues","dayValues","dayPeriodValues","formattingDayPeriodValues","ordinalNumber","matchOrdinalNumberPattern","parseOrdinalNumberPattern","matchEraPatterns","parseEraPatterns","matchQuarterPatterns","parseQuarterPatterns","matchMonthPatterns","parseMonthPatterns","matchDayPatterns","parseDayPatterns","matchDayPeriodPatterns","parseDayPeriodPatterns","match","getInitials","React6","React7","React8","React9","React10","Check","Plus","React11","X","TaskDetailSkeleton","React12","priorityColors","toDetailData","TaskCard","React13","GripVertical","React14","React15","statusConfig","React16","createPortal","React17","React18","SwitchPrimitives","CollapsibleTrigger","CollapsibleContent","CommandPrimitive","Search","ChevronRight","Sonner","React19","CREATE_WORKSPACE_MUTATION","React20","React21","React22","React23","React24"],"mappings":"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","file":"index.js","sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport * as SwitchPrimitive from '@radix-ui/react-switch';\nimport { cn } from '../../lib/utils';\n\n/**\n * Toggle / Switch — Glass toggle with organic styling\n *\n * Organic squircle container, primary accent when checked.\n */\n\nexport interface ToggleProps\n extends React.ComponentPropsWithoutRef<typeof SwitchPrimitive.Root> {\n label?: string;\n description?: string;\n}\n\nconst Toggle = React.forwardRef<\n React.ComponentRef<typeof SwitchPrimitive.Root>,\n ToggleProps\n>(({ className, label, description, ...props }, ref) => {\n const id = React.useId();\n\n if (label) {\n return (\n <div\n className={cn(\n 'flex items-center justify-between border border-primary/15 bg-white/[0.03] rounded-xl p-4 transition-all duration-[400ms] ease-[cubic-bezier(0.25,1,0.5,1)]',\n className,\n )}\n >\n <div>\n <label htmlFor={id} className=\"text-xs font-bold uppercase tracking-wide text-white\">\n {label}\n </label>\n {description && (\n <p className=\"mt-1 font-mono text-mono-xs text-white/40\">{description}</p>\n )}\n </div>\n <SwitchPrimitive.Root\n id={id}\n ref={ref}\n className=\"peer inline-flex h-5 w-10 shrink-0 cursor-pointer items-center rounded-full border border-primary/15 bg-black/40 transition-all duration-[400ms] ease-[cubic-bezier(0.25,1,0.5,1)] data-[state=checked]:border-primary-light data-[state=checked]:bg-primary/50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-light\"\n {...props}\n >\n <SwitchPrimitive.Thumb className=\"pointer-events-none block h-4 w-4 border border-primary/15 bg-white/20 transition-transform data-[state=checked]:translate-x-5 data-[state=checked]:border-white data-[state=checked]:bg-white data-[state=unchecked]:translate-x-0\" />\n </SwitchPrimitive.Root>\n </div>\n );\n }\n\n return (\n <SwitchPrimitive.Root\n ref={ref}\n className={cn(\n 'peer inline-flex h-5 w-10 shrink-0 cursor-pointer items-center rounded-full border border-primary/15 bg-black/40 transition-all duration-[400ms] ease-[cubic-bezier(0.25,1,0.5,1)] data-[state=checked]:border-primary-light data-[state=checked]:bg-primary/50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-light',\n className,\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb className=\"pointer-events-none block h-4 w-4 border border-primary/15 bg-white/20 transition-transform data-[state=checked]:translate-x-5 data-[state=checked]:border-white data-[state=checked]:bg-white data-[state=unchecked]:translate-x-0\" />\n </SwitchPrimitive.Root>\n );\n});\nToggle.displayName = 'Toggle';\n\nexport { Toggle };\n","// ─────────────────────────────────────────────\n// User Resolver — client-side user lookup\n// ─────────────────────────────────────────────\n// Module-level cache + request deduplication\n// so `<UserAvatar userId=\"42\" />` used 20 times\n// on the same page only fires ONE fetch.\n//\n// Usage:\n// const user = useResolvedUser('123');\n// ─────────────────────────────────────────────\n\n'use client';\n\nimport { useState, useEffect } from 'react';\nimport { useOrganifyApi } from '../../providers/organify-provider';\n\nexport interface ResolvedUser {\n id: string | number;\n name: string;\n avatarUrl?: string | null;\n}\n\n// ─── Module-level shared cache (survives re-renders) ──\n\nconst _cache = new Map<string, ResolvedUser | null>();\nconst _inflight = new Map<string, Promise<ResolvedUser | null>>();\n\n// Pending IDs to batch in the next microtask tick\nconst _pendingBatch = new Set<string>();\nlet _batchTimer: ReturnType<typeof setTimeout> | null = null;\nconst _batchResolvers = new Map<string, Array<(u: ResolvedUser | null) => void>>();\n\nfunction _flushBatch(gatewayUrl: string) {\n const ids = Array.from(_pendingBatch);\n _pendingBatch.clear();\n _batchTimer = null;\n\n if (ids.length === 0) return;\n\n const p = fetch(`${gatewayUrl}/api/users/profiles/batch`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n credentials: 'include',\n body: JSON.stringify({ ids }),\n })\n .then((r) => (r.ok ? r.json() : []))\n .catch(() => [])\n .then((results: ResolvedUser[]) => {\n // Build a quick lookup\n const byId = new Map<string, ResolvedUser>();\n for (const u of results) {\n byId.set(String(u.id), u);\n }\n // Resolve each pending callback\n for (const id of ids) {\n const user = byId.get(id) ?? null;\n _cache.set(id, user);\n _inflight.delete(id);\n const resolvers = _batchResolvers.get(id) ?? [];\n _batchResolvers.delete(id);\n for (const resolve of resolvers) resolve(user);\n }\n });\n\n // Mark all as inflight\n for (const id of ids) {\n if (!_batchResolvers.has(id)) _batchResolvers.set(id, []);\n _inflight.set(id, p.then(() => _cache.get(id) ?? null));\n }\n}\n\n/**\n * Resolves a userId to its { name, avatarUrl } snapshot.\n * Batches concurrent requests within a single event-loop tick.\n */\nexport function resolveUser(\n userId: string,\n gatewayUrl: string,\n): Promise<ResolvedUser | null> {\n // Cache hit\n if (_cache.has(userId)) {\n return Promise.resolve(_cache.get(userId)!);\n }\n\n // Already inflight\n if (_inflight.has(userId)) {\n return _inflight.get(userId)!;\n }\n\n // Queue for batch\n _pendingBatch.add(userId);\n if (!_batchResolvers.has(userId)) _batchResolvers.set(userId, []);\n\n // Schedule the batch flush on next tick\n if (!_batchTimer) {\n _batchTimer = setTimeout(() => _flushBatch(gatewayUrl), 0);\n }\n\n // Return a promise that resolves when the batch completes\n const p = new Promise<ResolvedUser | null>((resolve) => {\n _batchResolvers.get(userId)!.push(resolve);\n });\n\n _inflight.set(userId, p);\n return p;\n}\n\n/** Invalidate a single entry (e.g. after a profile update) */\nexport function invalidateUserCache(userId: string) {\n _cache.delete(userId);\n _inflight.delete(userId);\n}\n\n/** Seed the cache with already-known users (e.g. from workspace members query) */\nexport function seedUserCache(users: ResolvedUser[]) {\n for (const u of users) {\n _cache.set(String(u.id), u);\n }\n}\n\n// ─── React hook ──────────────────────────────\n\n/**\n * React hook that resolves a userId to a user snapshot.\n * Returns `undefined` while loading, `null` if not found.\n *\n * @example\n * const user = useResolvedUser('42');\n * // user?.name, user?.avatarUrl\n */\nexport function useResolvedUser(\n userId: string | number | undefined | null,\n): ResolvedUser | null | undefined {\n const api = useOrganifyApi();\n const key = userId != null ? String(userId) : undefined;\n\n // Initialise from cache synchronously so we avoid a flash of \"loading\"\n const [user, setUser] = useState<ResolvedUser | null | undefined>(() => {\n if (!key) return undefined;\n return _cache.has(key) ? _cache.get(key)! : undefined;\n });\n\n useEffect(() => {\n if (!key || !api.gatewayUrl) return;\n\n let cancelled = false;\n\n // Already cached — sync update (handles stale state from SSR)\n if (_cache.has(key)) {\n setUser(_cache.get(key) ?? null);\n return;\n }\n\n resolveUser(key, api.gatewayUrl).then((u) => {\n if (!cancelled) setUser(u);\n });\n\n return () => {\n cancelled = true;\n };\n }, [key, api.gatewayUrl]);\n\n return user;\n}\n","'use client';\n\nimport * as React from 'react';\nimport { Avatar, AvatarImage, AvatarFallback, type AvatarProps } from './avatar';\nimport {\n Tooltip,\n TooltipTrigger,\n TooltipContent,\n TooltipProvider,\n} from './tooltip';\nimport { cn } from '../../lib/utils';\nimport { useResolvedUser } from './use-resolved-user';\n\n// ─── Helpers ────────────────────────────────\n\nfunction getInitials(name: string): string {\n return name\n .split(/\\s+/)\n .filter(Boolean)\n .slice(0, 2)\n .map((w) => w[0].toUpperCase())\n .join('');\n}\n\nfunction nameToGradient(name: string): string {\n let hash = 0;\n for (let i = 0; i < name.length; i++) {\n hash = name.charCodeAt(i) + ((hash << 5) - hash);\n }\n const gradients = [\n 'from-violet-500 to-purple-600',\n 'from-blue-500 to-cyan-500',\n 'from-emerald-500 to-teal-500',\n 'from-orange-500 to-amber-500',\n 'from-rose-500 to-pink-500',\n 'from-indigo-500 to-blue-600',\n 'from-fuchsia-500 to-purple-500',\n 'from-teal-500 to-green-500',\n ];\n return gradients[Math.abs(hash) % gradients.length];\n}\n\n// ─── Types ──────────────────────────────────\n\nexport interface UserAvatarProps extends Omit<AvatarProps, 'gradient'> {\n /**\n * User ID — when provided (and `name` is absent), the component\n * self-fetches the user profile via the gateway.\n * Multiple avatars sharing the same userId are batched into one request.\n */\n userId?: string | number;\n /** User display name — used for initials fallback. Takes priority over userId. */\n name?: string;\n /** Image URL (optional) */\n src?: string | null;\n /** User email (shown on hover) */\n email?: string;\n /** User role (shown on hover) */\n role?: string;\n /** Whether to show hover card with user info */\n showHoverInfo?: boolean;\n /** Custom fallback content (overrides initials) */\n fallback?: React.ReactNode;\n /** Extra info lines for hover card */\n extraInfo?: { label: string; value: string }[];\n /** Click handler */\n onClick?: () => void;\n}\n\n// ─── Component ──────────────────────────────\n\nfunction UserAvatar({\n userId,\n name: nameProp,\n src: srcProp,\n email,\n role,\n showHoverInfo = true,\n fallback,\n extraInfo,\n onClick,\n className,\n size = 'default',\n shape = 'circle',\n status,\n ...props\n}: UserAvatarProps) {\n // Self-fetch mode: only activate when userId present and name not provided\n const resolved = useResolvedUser(!nameProp && userId != null ? userId : null);\n\n const name = nameProp ?? resolved?.name ?? '…';\n const src = srcProp ?? resolved?.avatarUrl ?? undefined;\n const isLoading = !nameProp && userId != null && resolved === undefined;\n\n const initials = getInitials(name);\n const gradient = nameToGradient(name || 'unknown');\n\n const avatarElement = (\n <Avatar\n size={size}\n shape={shape}\n status={status}\n gradient={gradient}\n className={cn(\n onClick && 'cursor-pointer',\n isLoading && 'animate-pulse opacity-60',\n className,\n )}\n onClick={onClick}\n {...props}\n >\n {src ? (\n <AvatarImage src={src} alt={name} />\n ) : null}\n <AvatarFallback\n className={cn(\n 'bg-gradient-to-br text-white font-semibold',\n gradient,\n size === 'sm' && 'text-xs',\n size === 'default' && 'text-sm',\n size === 'lg' && 'text-lg',\n size === 'xl' && 'text-xl',\n )}\n >\n {fallback ?? initials}\n </AvatarFallback>\n </Avatar>\n );\n\n if (!showHoverInfo) return avatarElement;\n\n return (\n <TooltipProvider delayDuration={300}>\n <Tooltip>\n <TooltipTrigger asChild>{avatarElement}</TooltipTrigger>\n <TooltipContent\n side=\"top\"\n className={cn(\n 'flex items-center gap-3 rounded-xl border border-theme-subtle',\n 'bg-card-surface/95 px-4 py-3 shadow-glass-xl backdrop-blur-2xl',\n 'max-w-xs',\n )}\n >\n <Avatar size=\"sm\" shape={shape} gradient={gradient}>\n {src ? <AvatarImage src={src} alt={name} /> : null}\n <AvatarFallback className={cn('bg-gradient-to-br text-white text-xs font-semibold', gradient)}>\n {initials}\n </AvatarFallback>\n </Avatar>\n <div className=\"flex flex-col gap-0.5 min-w-0\">\n <span className=\"text-sm font-semibold text-white truncate\">\n {name}\n </span>\n {email && (\n <span className=\"text-xs text-theme-muted truncate\">{email}</span>\n )}\n {role && (\n <span className=\"text-xs text-primary-light/80 capitalize\">\n {role.toLowerCase()}\n </span>\n )}\n {extraInfo?.map((info) => (\n <span key={info.label} className=\"text-xs text-theme-muted\">\n {info.label}: {info.value}\n </span>\n ))}\n </div>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n}\n\nUserAvatar.displayName = 'UserAvatar';\n\nexport { UserAvatar, getInitials, nameToGradient };\n","'use client';\n\nimport * as React from 'react';\nimport * as ProgressPrimitive from '@radix-ui/react-progress';\nimport { cn } from '../../lib/utils';\n\n/**\n * Progress — Neon glow progress bar\n *\n * From the design system: thin bar with primary fill + trailing glow + end marker.\n */\n\nexport interface ProgressProps\n extends React.ComponentPropsWithoutRef<typeof ProgressPrimitive.Root> {\n /** Show percentage label */\n showLabel?: boolean;\n /** Label text above bar */\n label?: string;\n /** Visual variant */\n variant?: 'default' | 'cream';\n}\n\nconst Progress = React.forwardRef<\n React.ComponentRef<typeof ProgressPrimitive.Root>,\n ProgressProps\n>(({ className, value, showLabel, label, variant = 'default', ...props }, ref) => (\n <div className=\"space-y-2\">\n {(label || showLabel) && (\n <div className=\"flex items-end justify-between\">\n {label && (\n <span className=\"text-label uppercase tracking-widest text-org-text-muted\">{label}</span>\n )}\n {showLabel && (\n <span className=\"font-mono text-lg text-primary-light\">\n {value}\n <span className=\"text-xs text-org-text-muted\">%</span>\n </span>\n )}\n </div>\n )}\n <ProgressPrimitive.Root\n ref={ref}\n className={cn(\n 'relative h-1 w-full overflow-hidden',\n variant === 'default' ? 'bg-white/[0.05] rounded-full' : 'bg-black/5 rounded-full',\n className,\n )}\n {...props}\n >\n <ProgressPrimitive.Indicator\n className={cn(\n 'h-full transition-all duration-[400ms] ease-[cubic-bezier(0.25,1,0.5,1)]',\n variant === 'default'\n ? 'bg-primary-light shadow-[0_0_15px_rgba(99,102,241,0.8)]'\n : 'bg-primary rounded-full opacity-80',\n )}\n style={{ width: `${value || 0}%` }}\n >\n {variant === 'default' && (\n <div className=\"absolute bottom-0 right-0 top-0 w-1 bg-white\" />\n )}\n </ProgressPrimitive.Indicator>\n </ProgressPrimitive.Root>\n </div>\n));\nProgress.displayName = 'Progress';\n\nexport { Progress };\n","import * as React from 'react';\nimport { X, CheckCircle2, AlertTriangle, AlertCircle, Info, Sparkles } from 'lucide-react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../lib/utils';\n\n/**\n * Toast — Dark Glass Toast with circular icon\n *\n * Design language matching modern dark toast style:\n * - Dark background with rounded corners\n * - Circular icon on left with color-coded background\n * - Clean typography with title and description\n * - Close button on top right\n */\n\nconst toastVariants = cva(\n 'relative flex w-full min-w-[380px] max-w-md 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 default: 'border-gray-200 dark:border-gray-700',\n info: 'border-blue-200 dark:border-blue-800/50',\n success: 'border-emerald-200 dark:border-emerald-800/50',\n warning: 'border-amber-200 dark:border-amber-800/50',\n error: 'border-rose-200 dark:border-rose-800/50',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n },\n);\n\nconst toastIconVariants = cva(\n 'flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-full',\n {\n variants: {\n variant: {\n default: 'bg-indigo-100 text-indigo-600 dark:bg-indigo-600/20 dark:text-indigo-400',\n info: 'bg-blue-100 text-blue-600 dark:bg-blue-600/20 dark:text-blue-400',\n success: 'bg-emerald-100 text-emerald-600 dark:bg-emerald-600/20 dark:text-emerald-400',\n warning: 'bg-amber-100 text-amber-600 dark:bg-amber-600/20 dark:text-amber-400',\n error: 'bg-rose-100 text-rose-600 dark:bg-rose-600/20 dark:text-rose-400',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n },\n);\n\nconst defaultIcons: Record<string, React.ReactNode> = {\n default: <Sparkles className=\"h-5 w-5\" />,\n info: <Info className=\"h-5 w-5\" />,\n success: <CheckCircle2 className=\"h-5 w-5\" />,\n warning: <AlertTriangle className=\"h-5 w-5\" />,\n error: <AlertCircle className=\"h-5 w-5\" />,\n};\n\nexport interface ToastProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof toastVariants> {\n /** Close handler */\n onClose?: () => void;\n /** Custom icon element (overrides default variant icon) */\n icon?: React.ReactNode;\n /** Title text */\n title?: string;\n /** Description text */\n description?: string;\n /** Action button */\n action?: {\n label: string;\n onClick: () => void;\n };\n}\n\nfunction Toast({\n className,\n variant,\n onClose,\n icon,\n title,\n description,\n action,\n children,\n ...props\n}: ToastProps) {\n const v = variant ?? 'default';\n const displayIcon = icon ?? defaultIcons[v];\n\n return (\n <div className=\"group relative\" role=\"status\" aria-live=\"polite\">\n <div className={cn(toastVariants({ variant }), className)} {...props}>\n {/* Icon */}\n <div className={cn(toastIconVariants({ variant }))}>\n {displayIcon}\n </div>\n\n {/* Content */}\n <div className=\"flex-1 min-w-0\">\n {title && (\n <p className=\"text-sm font-semibold text-gray-900 dark:text-white mb-1 leading-tight\">{title}</p>\n )}\n {description && (\n <p className=\"text-sm text-gray-500 dark:text-gray-400 leading-relaxed\">{description}</p>\n )}\n {children}\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=\"Dismiss\"\n >\n <X className=\"h-4 w-4\" />\n </button>\n )}\n </div>\n </div>\n );\n}\n\n/**\n * ToastProgress — Progress bar inside a toast\n */\nexport interface ToastProgressProps extends React.HTMLAttributes<HTMLDivElement> {\n value: number;\n label?: string;\n}\n\nfunction ToastProgress({ value, label, className, ...props }: ToastProgressProps) {\n return (\n <div className={cn('flex-1 mt-2', className)} {...props}>\n {label && (\n <div className=\"mb-1.5 flex items-center justify-between\">\n <p className=\"text-xs font-medium text-gray-900 dark:text-white\">{label}</p>\n <span className=\"text-xs font-bold text-gray-500 dark:text-gray-400\">{value}%</span>\n </div>\n )}\n <div className=\"h-1 w-full overflow-hidden bg-gray-200 dark:bg-gray-700 rounded-full\">\n <div\n className=\"h-full bg-gradient-to-r from-primary to-primary-light transition-all duration-300\"\n style={{ width: `${value}%` }}\n />\n </div>\n </div>\n );\n}\n\nexport { Toast, ToastProgress, toastVariants };\n","import * as React from 'react';\nimport { cn } from '../../lib/utils';\nimport { OrgDiamond } from '../../icons';\n\n/**\n * EmptyState — Human-Centric Empty State\n *\n * From the Feedback HTML:\n * - Glass panel with gradient overlay\n * - Animated orb with floating colored dots\n * - Central icon inside bordered circle\n * - Sliding CTA button\n */\n\nexport interface EmptyStateProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Icon to display in the center orb */\n icon?: React.ReactNode;\n /** Title text */\n title: string;\n /** Description text */\n description?: string;\n /** CTA button label */\n actionLabel?: string;\n /** CTA button handler */\n onAction?: () => void;\n}\n\nfunction EmptyState({\n className,\n icon,\n title,\n description,\n actionLabel,\n onAction,\n ...props\n}: EmptyStateProps) {\n return (\n <div\n className={cn(\n 'glass-panel group relative flex flex-col items-center overflow-hidden p-10 text-center',\n className,\n )}\n {...props}\n >\n {/* Gradient overlay */}\n <div className=\"pointer-events-none absolute left-0 right-0 top-0 h-32 bg-gradient-to-b from-primary/10 to-transparent\" />\n\n {/* Animated orb */}\n <div className=\"relative mb-6 h-32 w-32\">\n {/* Outer spinning ring */}\n <div className=\"absolute inset-0 motion-safe:animate-[spin_10s_linear_infinite] rounded-full border border-theme-subtle\" />\n {/* Inner glow */}\n <div className=\"absolute inset-4 rounded-full bg-gradient-to-tr from-primary/30 to-purple-500/10 blur-xl transition-all duration-700 group-hover:blur-2xl\" />\n {/* Center icon container */}\n <div className=\"relative flex h-full w-full items-center justify-center\">\n <div className=\"z-10 flex h-20 w-20 items-center justify-center rounded-full border border-theme-subtle bg-theme-surface shadow-2xl\">\n {icon || (\n <OrgDiamond className=\"w-10 h-10 text-slate-200\" />\n )}\n </div>\n {/* Floating accent dots */}\n <div className=\"absolute right-4 top-0 h-3 w-3 rounded-full bg-emerald-400 blur-[1px]\" />\n <div className=\"absolute bottom-2 left-6 h-2 w-2 rounded-full bg-purple-400 blur-[1px]\" />\n </div>\n </div>\n\n {/* Text */}\n <h4 className=\"text-xl font-medium tracking-tight text-theme\">{title}</h4>\n {description && (\n <p className=\"mt-3 max-w-[260px] text-sm leading-relaxed text-slate-400\">\n {description}\n </p>\n )}\n\n {/* CTA button with slide animation */}\n {actionLabel && onAction && (\n <button\n onClick={onAction}\n className=\"group/btn relative mt-8 inline-flex items-center justify-center overflow-hidden rounded-full border border-theme-subtle-20 px-6 py-2.5 font-medium text-theme shadow-md transition duration-[400ms] ease-[cubic-bezier(0.25,1,0.5,1)]\"\n >\n <span className=\"absolute inset-0 flex h-full w-full -translate-x-full items-center justify-center bg-theme-subtle-10 text-theme transition duration-[400ms] ease-[cubic-bezier(0.25,1,0.5,1)] group-hover/btn:translate-x-0\">\n →\n </span>\n <span className=\"absolute flex h-full w-full items-center justify-center text-theme transition-all duration-[400ms] ease-[cubic-bezier(0.25,1,0.5,1)] group-hover/btn:translate-x-full\">\n {actionLabel}\n </span>\n <span className=\"invisible relative\">{actionLabel}</span>\n </button>\n )}\n </div>\n );\n}\n\nexport { EmptyState };\n","'use client';\n\nimport * as React from 'react';\nimport { cn } from '../../lib/utils';\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogDescription,\n} from '../primitives/dialog';\nimport {\n Drawer,\n DrawerContent,\n DrawerHeader,\n DrawerTitle,\n DrawerDescription,\n} from '../primitives/drawer';\nimport { Skeleton } from '../primitives/skeleton';\nimport { OrgWarning, OrgDiamond } from '../../icons';\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 TaskDetailPanelProps {\n /** Whether the panel is open */\n open: boolean;\n /** Callback when open state changes */\n onOpenChange: (open: boolean) => void;\n /** Task title (shown in header) */\n title?: string;\n /** Task subtitle / number */\n subtitle?: string;\n /** Panel content */\n children: React.ReactNode;\n /** Desktop breakpoint query */\n desktopQuery?: string;\n /** Loading state — shows skeleton content instead of children */\n loading?: boolean;\n /** Error state — shows error fallback instead of children */\n error?: string | null;\n /** Empty state — shows empty fallback instead of children */\n empty?: boolean;\n /** Custom loading skeleton (default: built-in skeleton) */\n loadingSkeleton?: React.ReactNode;\n /** Custom empty state content */\n emptyContent?: React.ReactNode;\n /** Retry callback for error state */\n onRetry?: () => void;\n}\n\n// ─── Component ──────────────────────────────\n\nfunction TaskDetailPanel({\n open,\n onOpenChange,\n title,\n subtitle,\n children,\n desktopQuery = '(min-width: 768px)',\n loading = false,\n error = null,\n empty = false,\n loadingSkeleton,\n emptyContent,\n onRetry,\n}: TaskDetailPanelProps) {\n const isDesktop = useMediaQuery(desktopQuery);\n\n // ─── Resolve content based on state ──────\n const resolvedContent = loading ? (\n loadingSkeleton ?? <TaskDetailSkeleton />\n ) : error ? (\n <TaskDetailError message={error} onRetry={onRetry} />\n ) : empty ? (\n emptyContent ?? <TaskDetailEmpty />\n ) : (\n children\n );\n\n if (isDesktop) {\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent\n className={cn(\n 'max-w-2xl max-h-[85vh] overflow-y-auto',\n 'border border-primary/25 bg-white/[0.03] backdrop-blur-[40px]',\n 'shadow-[0_24px_80px_-15px_rgba(0,0,0,0.5)] rounded-2xl',\n )}\n >\n {(title || subtitle) && (\n <DialogHeader>\n {title && <DialogTitle className=\"text-lg\">{title}</DialogTitle>}\n {subtitle && (\n <DialogDescription className=\"text-muted-foreground font-mono text-sm\">\n {subtitle}\n </DialogDescription>\n )}\n </DialogHeader>\n )}\n {resolvedContent}\n </DialogContent>\n </Dialog>\n );\n }\n\n return (\n <Drawer open={open} onOpenChange={onOpenChange}>\n <DrawerContent\n className={cn(\n 'max-h-[90vh]',\n 'border-t border-primary/25 bg-white/[0.03] backdrop-blur-[40px]',\n )}\n >\n {(title || subtitle) && (\n <DrawerHeader className=\"text-left\">\n {title && <DrawerTitle className=\"text-lg\">{title}</DrawerTitle>}\n {subtitle && (\n <DrawerDescription className=\"text-muted-foreground font-mono text-sm\">\n {subtitle}\n </DrawerDescription>\n )}\n </DrawerHeader>\n )}\n <div className=\"overflow-y-auto px-4 pb-6\">{resolvedContent}</div>\n </DrawerContent>\n </Drawer>\n );\n}\n\nTaskDetailPanel.displayName = 'TaskDetailPanel';\n\n// ─── Internal: Skeleton ─────────────────────\n\nfunction TaskDetailSkeleton() {\n return (\n <div className=\"space-y-4 animate-pulse py-2\">\n <div className=\"flex items-center gap-3\">\n <Skeleton className=\"w-5 h-5\" variant=\"rounded\" />\n <Skeleton className=\"h-5 w-48\" />\n </div>\n <Skeleton className=\"h-4 w-full\" />\n <Skeleton className=\"h-4 w-3/4\" />\n <div className=\"pt-2 space-y-3\">\n {[1, 2, 3].map((i) => (\n <div key={i} className=\"flex items-center gap-3\">\n <Skeleton className=\"w-20 h-3\" />\n <Skeleton className=\"flex-1 h-3\" />\n </div>\n ))}\n </div>\n <Skeleton className=\"h-24 w-full mt-4\" variant=\"rounded\" />\n </div>\n );\n}\n\n// ─── Internal: Error ────────────────────────\n\nfunction TaskDetailError({ message, onRetry }: { message: string; onRetry?: () => void }) {\n return (\n <div className=\"flex flex-col items-center justify-center py-10 text-center\">\n <OrgWarning className=\"w-10 h-10 text-rose-400/60 mb-3\" />\n <p className=\"text-sm text-theme-secondary mb-1\">Não foi possível carregar</p>\n <p className=\"text-xs text-theme-muted mb-4 max-w-xs\">{message}</p>\n {onRetry && (\n <button\n onClick={onRetry}\n className=\"text-xs font-medium text-primary-light hover:text-primary transition-colors\"\n >\n Tentar novamente\n </button>\n )}\n </div>\n );\n}\n\n// ─── Internal: Empty ────────────────────────\n\nfunction TaskDetailEmpty() {\n return (\n <div className=\"flex flex-col items-center justify-center py-10 text-center\">\n <OrgDiamond className=\"w-10 h-10 text-theme-muted mb-3\" />\n <p className=\"text-sm text-theme-muted\">Nenhum detalhe disponível</p>\n </div>\n );\n}\n\nexport { TaskDetailPanel, useMediaQuery };\n","// ─────────────────────────────────────────────\n// Domain Skeleton Screens\n// Section 16.2: NO spinners for page loading.\n// Use skeleton shimmer that matches the final layout.\n// ─────────────────────────────────────────────\n\n'use client';\n\nimport * as React from 'react';\nimport { cn } from '../../lib/utils';\nimport { Skeleton } from '../primitives/skeleton';\n\n// ─── Board Skeleton (Kanban columns) ────────\n\nexport function BoardSkeleton({ className, columns = 4 }: { className?: string; columns?: number }) {\n return (\n <div className={cn('flex gap-4 p-4 overflow-x-auto', className)}>\n {Array.from({ length: columns }).map((_, colIdx) => (\n <div key={colIdx} className=\"flex flex-col w-[280px] shrink-0 space-y-3\">\n {/* Column header */}\n <div className=\"flex items-center gap-2 px-2\">\n <Skeleton className=\"h-3 w-3 rounded-full\" />\n <Skeleton className=\"h-4 w-20\" />\n <Skeleton className=\"h-4 w-6 ml-auto rounded-full\" />\n </div>\n {/* Cards */}\n {Array.from({ length: 2 + Math.floor(Math.random() * 3) }).map((_, cardIdx) => (\n <div\n key={cardIdx}\n className=\"p-4 rounded-xl border border-theme-subtle bg-theme-subtle space-y-3\"\n >\n <Skeleton className=\"h-4 w-3/4\" />\n <Skeleton className=\"h-3 w-full\" />\n <div className=\"flex items-center justify-between pt-1\">\n <div className=\"flex items-center gap-1\">\n <Skeleton className=\"h-3 w-12 rounded-full\" />\n <Skeleton className=\"h-3 w-14 rounded-full\" />\n </div>\n <Skeleton variant=\"circular\" className=\"h-6 w-6\" />\n </div>\n </div>\n ))}\n </div>\n ))}\n </div>\n );\n}\n\n// ─── Task List Skeleton (List/Table view) ───\n\nexport function TaskListSkeleton({ className, rows = 6 }: { className?: string; rows?: number }) {\n return (\n <div className={cn('space-y-1', className)}>\n {/* Header row */}\n <div className=\"flex items-center gap-4 px-4 py-2 border-b border-theme-subtle\">\n <Skeleton className=\"h-4 w-4\" />\n <Skeleton className=\"h-3 w-32\" />\n <Skeleton className=\"h-3 w-16 ml-auto\" />\n <Skeleton className=\"h-3 w-16\" />\n <Skeleton className=\"h-3 w-20\" />\n </div>\n {/* Rows */}\n {Array.from({ length: rows }).map((_, i) => (\n <div key={i} className=\"flex items-center gap-4 px-4 py-3 border-b border-theme-subtle\">\n <Skeleton className=\"h-4 w-4 rounded\" />\n <div className=\"flex-1 space-y-1.5\">\n <Skeleton className=\"h-3.5 w-48\" />\n <Skeleton className=\"h-2.5 w-24 opacity-60\" />\n </div>\n <Skeleton className=\"h-5 w-16 rounded-full\" />\n <Skeleton className=\"h-5 w-14 rounded-full\" />\n <Skeleton variant=\"circular\" className=\"h-6 w-6\" />\n </div>\n ))}\n </div>\n );\n}\n\n// ─── Project List Skeleton ──────────────────\n\nexport function ProjectListSkeleton({ className, items = 4 }: { className?: string; items?: number }) {\n return (\n <div className={cn('grid gap-4 md:grid-cols-2 lg:grid-cols-3', className)}>\n {Array.from({ length: items }).map((_, i) => (\n <div key={i} className=\"glass-panel p-5 space-y-4\">\n <div className=\"flex items-center gap-3\">\n <Skeleton variant=\"rounded\" className=\"h-10 w-10 shrink-0\" />\n <div className=\"flex-1 space-y-1.5\">\n <Skeleton className=\"h-4 w-32\" />\n <Skeleton className=\"h-2.5 w-20 opacity-60\" />\n </div>\n </div>\n <Skeleton className=\"h-2 w-full rounded-full\" />\n <div className=\"flex items-center justify-between\">\n <div className=\"flex -space-x-1.5\">\n {[0, 1, 2].map((j) => (\n <Skeleton key={j} variant=\"circular\" className=\"h-6 w-6 border-2 border-surface\" />\n ))}\n </div>\n <Skeleton className=\"h-3 w-12\" />\n </div>\n </div>\n ))}\n </div>\n );\n}\n\n// ─── Sprint Skeleton ────────────────────────\n\nexport function SprintSkeleton({ className }: { className?: string }) {\n return (\n <div className={cn('space-y-4', className)}>\n {/* Sprint header */}\n <div className=\"flex items-center justify-between p-4 rounded-xl border border-theme-subtle bg-theme-subtle\">\n <div className=\"flex items-center gap-3\">\n <Skeleton className=\"h-8 w-8 rounded-xl\" />\n <div className=\"space-y-1.5\">\n <Skeleton className=\"h-4 w-28\" />\n <Skeleton className=\"h-2.5 w-40 opacity-60\" />\n </div>\n </div>\n <div className=\"flex items-center gap-3\">\n <Skeleton className=\"h-5 w-16 rounded-full\" />\n <Skeleton className=\"h-8 w-24 rounded-xl\" />\n </div>\n </div>\n {/* Sprint stats */}\n <div className=\"grid grid-cols-4 gap-3\">\n {Array.from({ length: 4 }).map((_, i) => (\n <div key={i} className=\"p-3 rounded-xl border border-theme-subtle bg-theme-subtle space-y-2\">\n <Skeleton className=\"h-2.5 w-16 opacity-60\" />\n <Skeleton className=\"h-6 w-10\" />\n </div>\n ))}\n </div>\n {/* Task list within sprint */}\n <TaskListSkeleton rows={4} />\n </div>\n );\n}\n\n// ─── Dashboard Skeleton ─────────────────────\n\nexport function DashboardSkeleton({ className }: { className?: string }) {\n return (\n <div className={cn('space-y-6', className)}>\n {/* Stats row */}\n <div className=\"grid grid-cols-2 md:grid-cols-4 gap-4\">\n {Array.from({ length: 4 }).map((_, i) => (\n <div key={i} className=\"glass-panel p-5 space-y-3\">\n <div className=\"flex items-center justify-between\">\n <Skeleton className=\"h-3 w-20 opacity-60\" />\n <Skeleton className=\"h-8 w-8 rounded-xl\" />\n </div>\n <Skeleton className=\"h-8 w-16\" />\n <Skeleton className=\"h-2 w-full rounded-full\" />\n </div>\n ))}\n </div>\n {/* Chart area */}\n <div className=\"grid md:grid-cols-3 gap-4\">\n <div className=\"md:col-span-2 glass-panel p-5 space-y-4\">\n <Skeleton className=\"h-4 w-32\" />\n <Skeleton className=\"h-48 w-full rounded-xl\" />\n </div>\n <div className=\"glass-panel p-5 space-y-4\">\n <Skeleton className=\"h-4 w-24\" />\n <div className=\"space-y-3\">\n {Array.from({ length: 5 }).map((_, i) => (\n <div key={i} className=\"flex items-center gap-2\">\n <Skeleton variant=\"circular\" className=\"h-6 w-6\" />\n <Skeleton className=\"h-3 flex-1\" />\n <Skeleton className=\"h-3 w-8\" />\n </div>\n ))}\n </div>\n </div>\n </div>\n </div>\n );\n}\n\n// ─── Member List Skeleton ───────────────────\n\nexport function MemberListSkeleton({ className, rows = 5 }: { className?: string; rows?: number }) {\n return (\n <div className={cn('space-y-1', className)}>\n {Array.from({ length: rows }).map((_, i) => (\n <div key={i} className=\"flex items-center gap-3 p-3 rounded-xl\">\n <Skeleton variant=\"circular\" className=\"h-10 w-10 shrink-0\" />\n <div className=\"flex-1 space-y-1.5\">\n <Skeleton className=\"h-3.5 w-28\" />\n <Skeleton className=\"h-2.5 w-36 opacity-60\" />\n </div>\n <Skeleton className=\"h-5 w-16 rounded-full\" />\n </div>\n ))}\n </div>\n );\n}\n\n// ─── Chat Skeleton (full page) ──────────────\n\nexport function ChatSkeleton({ className }: { className?: string }) {\n return (\n <div className={cn('grid grid-cols-[260px_1fr] h-full', className)}>\n {/* Sidebar */}\n <div className=\"border-r border-theme-subtle p-3 space-y-3\">\n <div className=\"flex items-center justify-between px-1\">\n <Skeleton className=\"h-4 w-12\" />\n <Skeleton className=\"h-7 w-7 rounded-xl\" />\n </div>\n <Skeleton className=\"h-8 w-full rounded-xl\" />\n <div className=\"space-y-1\">\n {Array.from({ length: 6 }).map((_, i) => (\n <div key={i} className=\"flex items-center gap-2.5 p-2\">\n <Skeleton variant=\"rounded\" className=\"h-7 w-7 shrink-0\" />\n <Skeleton className=\"h-3 w-24\" />\n </div>\n ))}\n </div>\n </div>\n {/* Messages */}\n <div className=\"flex flex-col p-4 space-y-4\">\n <div className=\"flex items-center gap-3 pb-3 border-b border-theme-subtle\">\n <Skeleton className=\"h-8 w-8 rounded-xl\" />\n <Skeleton className=\"h-4 w-24\" />\n </div>\n <div className=\"flex-1 space-y-4\">\n {Array.from({ length: 4 }).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-2/3\" />\n </div>\n </div>\n ))}\n </div>\n <Skeleton className=\"h-10 w-full rounded-xl\" />\n </div>\n </div>\n );\n}\n\n// ─── Settings Skeleton ──────────────────────\n\nexport function SettingsSkeleton({ className }: { className?: string }) {\n return (\n <div className={cn('max-w-2xl space-y-6', className)}>\n {Array.from({ length: 3 }).map((_, sectionIdx) => (\n <div key={sectionIdx} className=\"glass-panel p-6 space-y-4\">\n <Skeleton className=\"h-5 w-32\" />\n <Skeleton className=\"h-3 w-64 opacity-60\" />\n <div className=\"space-y-4 pt-2\">\n {Array.from({ length: 3 }).map((_, fieldIdx) => (\n <div key={fieldIdx} className=\"space-y-2\">\n <Skeleton className=\"h-3 w-20\" />\n <Skeleton className=\"h-10 w-full rounded-xl\" />\n </div>\n ))}\n </div>\n </div>\n ))}\n </div>\n );\n}\n","import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../lib/utils';\n\n/**\n * GlassPanel — Core layout container\n *\n * Multiple variants from the design system:\n * - `default`: standard glass with clip-path\n * - `highlight`: primary-tinted glass with asymmetric borders\n * - `alt`: clip-path top-left variant\n * - `cream`: light theme glass\n * - `flat`: no clip-path, rounded corners\n */\nconst glassPanelVariants = cva('relative transition-all duration-[400ms] ease-[cubic-bezier(0.25,1,0.5,1)]', {\n variants: {\n variant: {\n default: 'glass-panel',\n highlight: 'glass-panel-highlight',\n alt: 'glass-panel-alt',\n cream: 'glass-panel-cream',\n flat: 'rounded-2xl border border-[rgba(167,139,250,0.12)] bg-[rgba(124,58,237,0.06)] shadow-[0_24px_80px_-15px_rgba(13,10,26,0.5)] backdrop-blur-[40px] [backdrop-filter:blur(40px)_saturate(180%)]',\n },\n corners: {\n none: '',\n tl: 'geometric-corner',\n br: 'geometric-corner-br',\n both: 'geometric-corner-both',\n },\n padding: {\n none: '',\n sm: 'p-6',\n default: 'p-8',\n lg: 'p-10',\n xl: 'p-12',\n },\n },\n defaultVariants: {\n variant: 'default',\n corners: 'none',\n padding: 'default',\n },\n});\n\nexport interface GlassPanelProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof glassPanelVariants> {\n /** Add the in-flow indicator dot */\n indicator?: boolean;\n}\n\nfunction GlassPanel({\n className,\n variant,\n corners,\n padding,\n indicator,\n children,\n ...props\n}: GlassPanelProps) {\n return (\n <div className={cn(glassPanelVariants({ variant, corners, padding }), className)} {...props}>\n {indicator && <div className=\"in-flow-indicator\" />}\n {children}\n </div>\n );\n}\n\nexport { GlassPanel, glassPanelVariants };\n","import * as React from 'react';\nimport { cn } from '../../lib/utils';\n\n/**\n * Dock — Floating bottom navigation bar\n *\n * Glass background with icon buttons, separators, active state glow,\n * tooltips on hover. Derived from the Performance UI Library HTML.\n */\n\nexport interface DockItem {\n id: string;\n icon: React.ReactNode;\n label: string;\n onClick?: () => void;\n active?: boolean;\n badge?: number;\n}\n\nexport interface DockSeparator {\n type: 'separator';\n}\n\nexport type DockEntry = DockItem | DockSeparator;\n\nfunction isDockSeparator(entry: DockEntry): entry is DockSeparator {\n return 'type' in entry && entry.type === 'separator';\n}\n\nexport interface DockProps extends React.HTMLAttributes<HTMLDivElement> {\n items: DockEntry[];\n position?: 'bottom' | 'top';\n}\n\nfunction Dock({ items, position = 'bottom', className, ...props }: DockProps) {\n return (\n <div\n className={cn(\n 'fixed left-1/2 z-50 -translate-x-1/2',\n position === 'bottom' ? 'bottom-6' : 'top-6',\n className,\n )}\n {...props}\n >\n <nav\n className={cn(\n 'flex items-center gap-1 rounded-2xl border border-primary/25',\n 'bg-white/[0.03] px-3 py-2 shadow-[0_24px_80px_-15px_rgba(0,0,0,0.5)] backdrop-blur-[40px]',\n 'transition-shadow duration-[400ms] ease-[cubic-bezier(0.25,1,0.5,1)]',\n )}\n >\n {items.map((entry, i) => {\n if (isDockSeparator(entry)) {\n return (\n <div\n key={`sep-${i}`}\n className=\"mx-1.5 h-6 w-px bg-gradient-to-b from-transparent via-white/20 to-transparent\"\n />\n );\n }\n\n return <DockButton key={entry.id} item={entry} />;\n })}\n </nav>\n </div>\n );\n}\n\ninterface DockButtonProps {\n item: DockItem;\n}\n\nfunction DockButton({ item }: DockButtonProps) {\n const { icon, label, onClick, active, badge } = item;\n\n return (\n <div className=\"group relative\">\n <button\n type=\"button\"\n onClick={onClick}\n aria-label={label}\n aria-current={active ? 'page' : undefined}\n className={cn(\n 'relative flex h-10 w-10 items-center justify-center rounded-xl',\n 'text-theme-muted transition-all duration-[400ms] ease-[cubic-bezier(0.25,1,0.5,1)]',\n 'hover:bg-theme-subtle hover:text-theme',\n active && [\n 'bg-primary/15 text-primary-light',\n 'shadow-[0_0_12px_rgba(99,102,241,0.3)]',\n ],\n )}\n >\n {icon}\n\n {typeof badge === 'number' && badge > 0 && (\n <span\n className={cn(\n 'absolute -right-0.5 -top-0.5 flex h-4 min-w-4 items-center justify-center',\n 'rounded-full bg-error px-1 text-[10px] font-semibold text-cream-base',\n 'shadow-[0_0_8px_rgba(224,17,95,0.4)]',\n )}\n >\n {badge > 99 ? '99+' : badge}\n </span>\n )}\n </button>\n\n {/* Tooltip */}\n <span\n className={cn(\n 'pointer-events-none absolute -top-10 left-1/2 -translate-x-1/2',\n 'whitespace-nowrap rounded-xl bg-white/[0.05] px-2.5 py-1',\n 'text-xs font-medium text-white/90 shadow-[0_24px_80px_-15px_rgba(0,0,0,0.5)] backdrop-blur-[40px]',\n 'opacity-0 transition-all duration-[400ms] ease-[cubic-bezier(0.25,1,0.5,1)]',\n 'group-hover:-top-11 group-hover:opacity-100',\n )}\n >\n {label}\n <span className=\"absolute -bottom-1 left-1/2 h-2 w-2 -translate-x-1/2 rotate-45 bg-white/[0.05]\" />\n </span>\n </div>\n );\n}\n\nexport { Dock, DockButton };\n","'use client';\n\nimport * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../lib/utils';\n\n// ─── Types ──────────────────────────────────\n\nexport interface SidebarNavItem {\n id: string;\n icon: React.ReactNode;\n label: string;\n href?: string;\n onClick?: () => void;\n active?: boolean;\n badge?: number | string;\n disabled?: boolean;\n}\n\nexport interface SidebarNavSeparator {\n type: 'separator';\n label?: string;\n}\n\nexport type SidebarNavEntry = SidebarNavItem | SidebarNavSeparator;\n\nfunction isSeparator(entry: SidebarNavEntry): entry is SidebarNavSeparator {\n return 'type' in entry && entry.type === 'separator';\n}\n\n// ─── Variants ───────────────────────────────\n\nconst sidebarVariants = cva(\n 'fixed left-0 top-0 z-40 flex h-full flex-col border-r border-primary/15 bg-white/[0.02] backdrop-blur-[40px] motion-safe:transition-all motion-safe:duration-[400ms] ease-in-out',\n {\n variants: {\n state: {\n collapsed: 'w-16',\n expanded: 'w-60',\n },\n },\n defaultVariants: { state: 'collapsed' },\n },\n);\n\n// ─── Main Component ─────────────────────────\n\nexport interface DockSidebarProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Navigation items */\n items: SidebarNavEntry[];\n /** Bottom-pinned items (e.g., settings, profile) */\n bottomItems?: SidebarNavEntry[];\n /** Extra content rendered above the bottom items (e.g., notification bell) */\n bottomExtra?: React.ReactNode;\n /** Header slot (e.g., logo or workspace avatar) */\n header?: React.ReactNode;\n /** Whether the sidebar is expanded */\n expanded?: boolean;\n /** Callback when expanded state changes */\n onExpandedChange?: (expanded: boolean) => void;\n /** Whether hover should expand/collapse the sidebar */\n hoverExpand?: boolean;\n /** Render custom link element (for Next.js Link etc.) */\n renderLink?: (props: { href: string; children: React.ReactNode; className: string; onClick?: () => void }) => React.ReactNode;\n /** Mobile drawer mode — on small screens, show as overlay drawer */\n mobileOpen?: boolean;\n /** Callback to close mobile drawer */\n onMobileClose?: () => void;\n}\n\nfunction DockSidebar({\n items,\n bottomItems,\n bottomExtra,\n header,\n expanded = false,\n onExpandedChange,\n hoverExpand = false,\n renderLink,\n mobileOpen = false,\n onMobileClose,\n className,\n // Destructure hoverExpand out so it doesn't leak to DOM via ...props\n ...props\n}: DockSidebarProps) {\n // hoverExpand is consumed above — not forwarded to <aside>\n const handleToggle = () => onExpandedChange?.(!expanded);\n\n // Close mobile drawer on escape\n React.useEffect(() => {\n if (!mobileOpen) return;\n const onKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape') onMobileClose?.();\n };\n document.addEventListener('keydown', onKey);\n return () => document.removeEventListener('keydown', onKey);\n }, [mobileOpen, onMobileClose]);\n\n // Lock body scroll when mobile drawer is open\n React.useEffect(() => {\n if (!mobileOpen) return;\n document.body.style.overflow = 'hidden';\n return () => { document.body.style.overflow = ''; };\n }, [mobileOpen]);\n\n return (\n <>\n {/* Mobile backdrop overlay */}\n {mobileOpen && (\n <div\n className=\"fixed inset-0 z-[49] bg-black/60 backdrop-blur-sm sm:hidden animate-in fade-in duration-200\"\n onClick={onMobileClose}\n aria-hidden=\"true\"\n />\n )}\n\n <aside\n className={cn(\n // Desktop: normal fixed sidebar\n 'hidden sm:flex',\n sidebarVariants({ state: expanded ? 'expanded' : 'collapsed' }),\n // Mobile: overlay drawer mode\n mobileOpen && 'flex sm:flex fixed inset-y-0 left-0 z-50 w-64 shadow-2xl shadow-black/50 animate-in slide-in-from-left duration-300',\n !mobileOpen && 'max-sm:hidden',\n className,\n )}\n onMouseEnter={() => hoverExpand && onExpandedChange?.(true)}\n onMouseLeave={() => hoverExpand && onExpandedChange?.(false)}\n {...props}\n >\n {/* Header */}\n <div\n data-tour=\"workspace-switcher\"\n className={cn(\n 'flex items-center px-3 h-16 border-b border-primary/15',\n (expanded || mobileOpen) ? 'justify-between' : 'justify-center',\n )}\n >\n {header}\n <div className=\"flex items-center gap-1\">\n {/* Close button — mobile only */}\n {mobileOpen && (\n <button\n type=\"button\"\n onClick={onMobileClose}\n aria-label=\"Fechar menu\"\n className=\"flex h-7 w-7 items-center justify-center rounded-xl text-org-text-muted hover:bg-white/[0.05] hover:text-org-text sm:hidden\"\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M4 4L12 12M12 4L4 12\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n </button>\n )}\n {/* Collapse toggle — desktop only */}\n <button\n type=\"button\"\n onClick={handleToggle}\n aria-label={expanded ? 'Collapse sidebar' : 'Expand sidebar'}\n className={cn(\n 'hidden sm:flex h-7 w-7 items-center justify-center rounded-xl',\n 'text-org-text-muted transition-all hover:bg-white/[0.05] hover:text-org-text',\n )}\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n className={cn(\n 'transition-transform duration-[400ms]',\n expanded ? 'rotate-0' : 'rotate-180',\n )}\n >\n <path d=\"M10 12L6 8L10 4\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </button>\n </div>\n </div>\n\n {/* Main nav */}\n <nav data-tour=\"main-nav\" className=\"flex-1 overflow-y-auto overflow-x-hidden py-2 px-2 space-y-0.5\">\n {items.map((entry, i) => (\n <SidebarEntry\n key={isSeparator(entry) ? `sep-${i}` : entry.id}\n entry={entry}\n expanded={expanded || mobileOpen}\n renderLink={renderLink}\n onNavigate={mobileOpen ? onMobileClose : undefined}\n />\n ))}\n </nav>\n\n {/* Bottom section */}\n {(bottomExtra || (bottomItems && bottomItems.length > 0)) && (\n <div className=\"border-t border-primary/15 py-2 px-2 space-y-0.5\">\n {bottomExtra && (\n <div className=\"flex items-center justify-center mb-1\">\n {bottomExtra}\n </div>\n )}\n {bottomItems && bottomItems.map((entry, i) => (\n <SidebarEntry\n key={isSeparator(entry) ? `bsep-${i}` : entry.id}\n entry={entry}\n expanded={expanded || mobileOpen}\n renderLink={renderLink}\n onNavigate={mobileOpen ? onMobileClose : undefined}\n />\n ))}\n </div>\n )}\n </aside>\n </>\n );\n}\n\n// ─── Sidebar Entry ──────────────────────────\n\nfunction SidebarEntry({\n entry,\n expanded,\n renderLink,\n onNavigate,\n}: {\n entry: SidebarNavEntry;\n expanded: boolean;\n renderLink?: DockSidebarProps['renderLink'];\n onNavigate?: () => void;\n}) {\n if (isSeparator(entry)) {\n return (\n <div className=\"py-2\">\n <div className=\"h-px bg-white/10\" />\n {expanded && entry.label && (\n <span className=\"block px-3 pt-2 text-[10px] font-semibold uppercase tracking-widest text-org-text-muted\">\n {entry.label}\n </span>\n )}\n </div>\n );\n }\n\n return (\n <SidebarButton\n item={entry}\n expanded={expanded}\n renderLink={renderLink}\n onNavigate={onNavigate}\n />\n );\n}\n\n// ─── Sidebar Button ─────────────────────────\n\nfunction SidebarButton({\n item,\n expanded,\n renderLink,\n onNavigate,\n}: {\n item: SidebarNavItem;\n expanded: boolean;\n renderLink?: DockSidebarProps['renderLink'];\n onNavigate?: () => void;\n}) {\n const { icon, label, href, onClick, active, badge, disabled, id } = item;\n\n const handleClick = () => {\n onClick?.();\n onNavigate?.();\n };\n\n const content = (\n <>\n <span className=\"flex h-9 w-9 flex-shrink-0 items-center justify-center rounded-xl transition-all\">\n {icon}\n </span>\n <span\n className={cn(\n 'flex-1 truncate text-sm font-medium transition-all duration-[400ms]',\n expanded ? 'opacity-100 ml-2' : 'opacity-0 w-0 overflow-hidden ml-0',\n )}\n >\n {label}\n </span>\n {badge != null && expanded && (\n <span\n className={cn(\n 'flex h-5 min-w-5 items-center justify-center rounded-full px-1.5',\n 'text-[10px] font-semibold transition-opacity duration-[400ms]',\n typeof badge === 'number' && badge > 0\n ? 'bg-primary/20 text-primary-light'\n : 'bg-white/[0.05] text-org-text-muted',\n expanded ? 'opacity-100' : 'opacity-0',\n )}\n >\n {typeof badge === 'number' && badge > 99 ? '99+' : badge}\n </span>\n )}\n {badge != null && !expanded && typeof badge === 'number' && badge > 0 && (\n <span className=\"absolute -right-0.5 -top-0.5 h-2 w-2 rounded-full bg-primary shadow-[0_0_6px_rgba(99,102,241,0.5)]\" />\n )}\n </>\n );\n\n const sharedClass = cn(\n 'group relative flex items-center rounded-xl px-1 py-0.5 transition-all duration-[400ms]',\n 'text-org-text-muted hover:bg-white/[0.05] hover:text-org-text',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/50',\n active && 'bg-primary/10 text-primary-light shadow-[0_0_12px_rgba(99,102,241,0.15)]',\n disabled && 'pointer-events-none opacity-40',\n !expanded && 'justify-center',\n );\n\n if (href && renderLink) {\n return renderLink({ href, children: content, className: sharedClass, onClick: handleClick });\n }\n\n return (\n <button\n type=\"button\"\n onClick={handleClick}\n disabled={disabled}\n aria-current={active ? 'page' : undefined}\n className={sharedClass}\n >\n {content}\n {/* Tooltip in collapsed state */}\n {!expanded && (\n <span\n className={cn(\n 'pointer-events-none absolute left-full ml-3 whitespace-nowrap',\n 'rounded-xl bg-white/[0.05] px-2.5 py-1.5 text-xs font-medium text-white/90',\n 'shadow-[0_24px_80px_-15px_rgba(0,0,0,0.5)] backdrop-blur-[40px]',\n 'opacity-0 transition-all duration-[400ms] -translate-x-1',\n 'group-hover:opacity-100 group-hover:translate-x-0',\n )}\n >\n {label}\n <span className=\"absolute right-full top-1/2 -translate-y-1/2 border-4 border-transparent border-r-theme-glass-heavy\" />\n </span>\n )}\n </button>\n );\n}\n\nDockSidebar.displayName = 'DockSidebar';\n\nexport { DockSidebar, SidebarButton, SidebarEntry };\n","// ─────────────────────────────────────────────\n// WorkspaceSwitcher — organify-ui component\n// ─────────────────────────────────────────────\n// Consumes OrganifyProvider for workspace data.\n// Works in expanded (full name) & collapsed (icon) modes.\n// Uses renderLink from OrganifyProvider for navigation.\n// Full optimistic CRUD for workspaces (create, update, delete).\n// ─────────────────────────────────────────────\n\n'use client';\n\nimport * as React from 'react';\nimport { cn } from '../../lib/utils';\nimport { UserAvatar } from '../primitives/user-avatar';\nimport { Skeleton } from '../primitives/skeleton';\nimport { Separator } from '../primitives/separator';\nimport { Input } from '../primitives/input';\nimport { Label } from '../primitives/label';\nimport { Textarea } from '../primitives/textarea';\nimport { Button } from '../primitives/button';\nimport { ResponsiveDialog } from '../primitives/responsive-dialog';\nimport { useOrganify, useOrganifyGql, type OrganifyWorkspace } from '../../providers/organify-provider';\nimport { OrgPlus } from '../../icons';\n\n// ─── GraphQL ────────────────────────────────\n\nconst CREATE_WORKSPACE_MUTATION = `\n mutation CreateWorkspace($input: CreateWorkspaceInput!) {\n createWorkspace(input: $input) {\n id\n name\n slug\n description\n avatarUrl\n }\n }\n`;\n\nconst UPDATE_WORKSPACE_MUTATION = `\n mutation UpdateWorkspace($slug: String!, $input: UpdateWorkspaceInput!) {\n updateWorkspace(slug: $slug, input: $input) {\n id\n name\n slug\n description\n avatarUrl\n }\n }\n`;\n\nconst DELETE_WORKSPACE_MUTATION = `\n mutation DeleteWorkspace($slug: String!) {\n deleteWorkspace(slug: $slug) {\n deleted\n }\n }\n`;\n\n// ─── Props ──────────────────────────────────\n\nexport interface WorkspaceSwitcherProps {\n /** Whether the sidebar is collapsed (icon-only mode) */\n compact?: boolean;\n /** Callback when user submits the create workspace form */\n onCreateWorkspace?: (data: { name: string; description: string }) => void | Promise<void>;\n /** Additional CSS class */\n className?: string;\n}\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// ─── Component ──────────────────────────────\n\nfunction WorkspaceSwitcher({ compact = false, onCreateWorkspace, className }: WorkspaceSwitcherProps) {\n const {\n workspace,\n workspaceLoading,\n workspaces,\n workspacesLoading,\n renderLink,\n onWorkspacesChange,\n onWorkspaceChange,\n } = useOrganify();\n\n const gql = useOrganifyGql();\n const [isOpen, setIsOpen] = React.useState(false);\n const [createDialogOpen, setCreateDialogOpen] = React.useState(false);\n const [editingWorkspace, setEditingWorkspace] = React.useState<OrganifyWorkspace | null>(null);\n const [deletingWorkspace, setDeletingWorkspace] = React.useState<OrganifyWorkspace | null>(null);\n const dropdownRef = React.useRef<HTMLDivElement>(null);\n const isMobile = useMediaQuery('(max-width: 767px)');\n\n React.useEffect(() => {\n if (isMobile) return;\n function handleClickOutside(event: MouseEvent) {\n if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) {\n setIsOpen(false);\n }\n }\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [isMobile]);\n\n // ─── Optimistic Create ──────────────────\n const handleCreateWorkspace = React.useCallback(\n async (data: { name: string; description: string }) => {\n const optimisticId = `temp-${Date.now()}`;\n const optimisticSlug = data.name\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-|-$/g, '');\n\n const optimisticWs: OrganifyWorkspace = {\n id: optimisticId,\n name: data.name,\n slug: optimisticSlug,\n description: data.description || null,\n avatarUrl: null,\n plan: null,\n _count: { members: 1, teams: 0 },\n };\n\n // Optimistic: add immediately\n const prevWorkspaces = [...workspaces];\n const nextWorkspaces = [...workspaces, optimisticWs];\n onWorkspacesChange?.(nextWorkspaces);\n\n try {\n const result = await gql<{ createWorkspace: OrganifyWorkspace }>(\n 'workspaces',\n CREATE_WORKSPACE_MUTATION,\n { input: { name: data.name.trim(), description: data.description.trim() || undefined } },\n );\n\n // Replace optimistic with real data\n const realWs: OrganifyWorkspace = {\n ...result.createWorkspace,\n plan: null,\n _count: { members: 1, teams: 0 },\n };\n const confirmed = nextWorkspaces.map((w) =>\n w.id === optimisticId ? realWs : w,\n );\n onWorkspacesChange?.(confirmed);\n\n // Switch to the new workspace\n onWorkspaceChange?.(realWs);\n\n // Notify parent callback\n await onCreateWorkspace?.(data);\n } catch (err: any) {\n // Rollback\n onWorkspacesChange?.(prevWorkspaces);\n throw err; // let the dialog show the error\n }\n },\n [workspaces, gql, onWorkspacesChange, onWorkspaceChange, onCreateWorkspace],\n );\n\n // ─── Optimistic Update ──────────────────\n const handleUpdateWorkspace = React.useCallback(\n async (slug: string, data: { name?: string; description?: string }) => {\n const prevWorkspaces = [...workspaces];\n const prevActive = workspace;\n\n // Optimistic: update immediately\n const updated = workspaces.map((w) =>\n w.slug === slug ? { ...w, ...data } : w,\n );\n onWorkspacesChange?.(updated);\n\n // If we're editing the active workspace, update it too\n if (workspace?.slug === slug) {\n onWorkspaceChange?.({ ...workspace, ...data });\n }\n\n try {\n console.debug('[workspace-switcher] Updating workspace', { slug, data });\n const result = await gql<{ updateWorkspace: OrganifyWorkspace }>(\n 'workspaces',\n UPDATE_WORKSPACE_MUTATION,\n { slug, input: data },\n );\n console.debug('[workspace-switcher] Update successful', result.updateWorkspace);\n\n // Replace with confirmed server data\n const confirmed = updated.map((w) =>\n w.slug === slug ? { ...w, ...result.updateWorkspace } : w,\n );\n onWorkspacesChange?.(confirmed);\n\n if (workspace?.slug === slug) {\n onWorkspaceChange?.({ ...workspace, ...result.updateWorkspace });\n }\n } catch (err: any) {\n console.error('[workspace-switcher] Update failed:', err.message, err);\n // Rollback\n onWorkspacesChange?.(prevWorkspaces);\n if (prevActive?.slug === slug) onWorkspaceChange?.(prevActive);\n throw err;\n }\n },\n [workspaces, workspace, gql, onWorkspacesChange, onWorkspaceChange],\n );\n\n // ─── Optimistic Delete ──────────────────\n const handleDeleteWorkspace = React.useCallback(\n async (slug: string) => {\n const prevWorkspaces = [...workspaces];\n const prevActive = workspace;\n\n // Optimistic: remove immediately\n const filtered = workspaces.filter((w) => w.slug !== slug);\n onWorkspacesChange?.(filtered);\n\n // If we deleted the active workspace, switch to first available\n if (workspace?.slug === slug) {\n onWorkspaceChange?.(filtered[0] ?? null);\n }\n\n try {\n await gql('workspaces', DELETE_WORKSPACE_MUTATION, { slug });\n } catch (err: any) {\n // Rollback\n onWorkspacesChange?.(prevWorkspaces);\n if (prevActive?.slug === slug) onWorkspaceChange?.(prevActive);\n throw err;\n }\n },\n [workspaces, workspace, gql, onWorkspacesChange, onWorkspaceChange],\n );\n\n const displayName = workspace?.name ?? workspace?.slug ?? '…';\n\n return (\n <div className={cn('relative min-w-0', className)} ref={dropdownRef}>\n {/* ─── Trigger ──────────────────────── */}\n <button\n onClick={() => setIsOpen(!isOpen)}\n className={cn(\n 'flex items-center gap-2.5 rounded-xl transition-colors hover:bg-theme-subtle',\n compact ? 'justify-center p-1' : 'w-full px-2 py-2',\n isOpen && 'bg-theme-subtle',\n )}\n >\n {workspaceLoading ? (\n <Skeleton className=\"w-8 h-8\" variant=\"rounded\" />\n ) : (\n <UserAvatar\n name={displayName}\n src={workspace?.avatarUrl}\n size=\"sm\"\n shape=\"square\"\n showHoverInfo={false}\n />\n )}\n\n {!compact && (\n <>\n <div className=\"flex-1 min-w-0\">\n {workspaceLoading ? (\n <Skeleton className=\"h-4 w-24\" />\n ) : (\n <p className=\"text-sm font-semibold truncate text-foreground\">\n {displayName}\n </p>\n )}\n </div>\n <SwitcherChevron open={isOpen} />\n </>\n )}\n </button>\n\n {/* ─── Desktop Dropdown ─────────────── */}\n {isOpen && !isMobile && (\n <SwitcherDropdown\n workspaces={workspaces}\n currentSlug={workspace?.slug}\n loading={workspacesLoading}\n renderLink={renderLink}\n onClose={() => setIsOpen(false)}\n onCreateClick={() => {\n setIsOpen(false);\n setCreateDialogOpen(true);\n }}\n onEditClick={(ws) => {\n setIsOpen(false);\n setEditingWorkspace(ws);\n }}\n onDeleteClick={(ws) => {\n setIsOpen(false);\n setDeletingWorkspace(ws);\n }}\n />\n )}\n\n {/* ─── Mobile Drawer ────────────────── */}\n {isMobile && (\n <ResponsiveDialog\n open={isOpen}\n onOpenChange={setIsOpen}\n contentClassName=\"max-w-full sm:max-w-full\"\n >\n <SwitcherDropdown\n mobile\n workspaces={workspaces}\n currentSlug={workspace?.slug}\n loading={workspacesLoading}\n renderLink={renderLink}\n onClose={() => setIsOpen(false)}\n onCreateClick={() => {\n setIsOpen(false);\n setCreateDialogOpen(true);\n }}\n onEditClick={(ws) => {\n setIsOpen(false);\n setEditingWorkspace(ws);\n }}\n onDeleteClick={(ws) => {\n setIsOpen(false);\n setDeletingWorkspace(ws);\n }}\n />\n </ResponsiveDialog>\n )}\n\n {/* ─── Create Workspace Dialog ──────── */}\n <CreateWorkspaceInlineDialog\n open={createDialogOpen}\n onOpenChange={setCreateDialogOpen}\n onSubmit={handleCreateWorkspace}\n />\n\n {/* ─── Edit Workspace Dialog ────────── */}\n <EditWorkspaceDialog\n open={!!editingWorkspace}\n onOpenChange={(open) => { if (!open) setEditingWorkspace(null); }}\n workspace={editingWorkspace}\n onSubmit={handleUpdateWorkspace}\n />\n\n {/* ─── Delete Workspace Dialog ──────── */}\n <DeleteWorkspaceDialog\n open={!!deletingWorkspace}\n onOpenChange={(open) => { if (!open) setDeletingWorkspace(null); }}\n workspace={deletingWorkspace}\n onConfirm={handleDeleteWorkspace}\n />\n </div>\n );\n}\n\n// ─── Chevron ────────────────────────────────\n\nfunction SwitcherChevron({ open }: { open: boolean }) {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n className={cn('transition-transform text-muted-foreground', open && 'rotate-180')}\n >\n <path\n d=\"M4 6L8 10L12 6\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\n// ─── Dropdown ───────────────────────────────\n\nfunction SwitcherDropdown({\n mobile = false,\n workspaces,\n currentSlug,\n loading,\n renderLink,\n onClose,\n onCreateClick,\n onEditClick,\n onDeleteClick,\n}: {\n mobile?: boolean;\n workspaces: OrganifyWorkspace[];\n currentSlug?: string;\n loading: boolean;\n renderLink?: (props: { href: string; children: React.ReactNode; className?: string; onClick?: () => void }) => React.ReactNode;\n onClose: () => void;\n onCreateClick?: () => void;\n onEditClick?: (ws: OrganifyWorkspace) => void;\n onDeleteClick?: (ws: OrganifyWorkspace) => void;\n}) {\n return (\n <div\n className={cn(\n 'rounded-xl border border-primary/20 bg-[linear-gradient(165deg,rgba(22,26,40,0.92),rgba(11,14,24,0.94))] backdrop-blur-[40px] shadow-[0_24px_80px_-15px_rgba(0,0,0,0.55)] overflow-hidden',\n mobile ? 'w-full' : 'absolute top-full left-0 mt-1 w-64 z-50',\n )}\n >\n <div className=\"px-3 py-2 text-xs font-medium uppercase tracking-wider text-theme-muted border-b border-primary/15\">\n Workspaces\n </div>\n\n <div className=\"max-h-64 overflow-y-auto overscroll-contain scrollbar-thin scrollbar-thumb-white/15 scrollbar-track-transparent\">\n <div className=\"py-1\">\n {loading ? (\n <div className=\"space-y-1 px-3 py-2\">\n {[1, 2, 3].map((i) => (\n <div key={i} className=\"flex items-center gap-2.5 py-2\">\n <Skeleton className=\"w-7 h-7\" variant=\"rounded\" />\n <div className=\"flex-1 space-y-1.5\">\n <Skeleton className=\"h-3.5 w-24\" />\n <Skeleton className=\"h-2.5 w-16\" />\n </div>\n </div>\n ))}\n </div>\n ) : workspaces.length === 0 ? (\n <div className=\"px-3 py-6 text-center\">\n <p className=\"text-xs text-muted-foreground mb-2\">Nenhum workspace encontrado</p>\n <button\n onClick={onCreateClick}\n className=\"inline-flex items-center gap-1.5 text-xs font-medium text-primary-light hover:text-primary transition-colors\"\n >\n <OrgPlus className=\"w-3.5 h-3.5\" />\n Criar primeiro workspace\n </button>\n </div>\n ) : (\n workspaces.map((ws) => (\n <SwitcherItem\n key={ws.id}\n ws={ws}\n isActive={ws.slug === currentSlug}\n renderLink={renderLink}\n onClose={onClose}\n onEdit={() => onEditClick?.(ws)}\n onDelete={() => onDeleteClick?.(ws)}\n />\n ))\n )}\n </div>\n </div>\n\n <Separator />\n <button\n onClick={onCreateClick}\n className=\"flex items-center gap-2 px-3 py-2.5 text-sm text-primary-light transition-colors hover:bg-theme-subtle w-full text-left\"\n >\n <OrgPlus className=\"w-4 h-4\" />\n <span className=\"font-medium\">Criar workspace</span>\n </button>\n </div>\n );\n}\n\n// ─── Item ───────────────────────────────────\n\nfunction SwitcherItem({\n ws,\n isActive,\n renderLink,\n onClose,\n onEdit,\n onDelete,\n}: {\n ws: OrganifyWorkspace;\n isActive: boolean;\n renderLink?: (props: { href: string; children: React.ReactNode; className?: string; onClick?: () => void }) => React.ReactNode;\n onClose: () => void;\n onEdit?: () => void;\n onDelete?: () => void;\n}) {\n const [showActions, setShowActions] = React.useState(false);\n const isOptimistic = ws.id.startsWith('temp-');\n\n const content = (\n <>\n <UserAvatar\n name={ws.name}\n src={ws.avatarUrl}\n size=\"sm\"\n shape=\"square\"\n showHoverInfo={false}\n className={cn('h-7 w-7', isOptimistic && 'opacity-50')}\n />\n <div className=\"flex-1 min-w-0\">\n <p className={cn('text-sm font-medium truncate text-foreground', isOptimistic && 'opacity-50')}>\n {ws.name}\n </p>\n <p className=\"text-xs truncate text-neutral-400\">\n {isOptimistic\n ? 'Criando…'\n : `${ws.plan?.name ?? 'Gratuito'} · ${ws._count?.members ?? 0} membro${(ws._count?.members ?? 0) !== 1 ? 's' : ''}`\n }\n </p>\n </div>\n {isActive && <div className=\"w-2 h-2 rounded-full bg-primary\" />}\n {!isOptimistic && showActions && (\n <div className=\"flex items-center gap-0.5 ml-1\" onClick={(e) => e.preventDefault()}>\n <button\n onClick={(e) => { e.preventDefault(); e.stopPropagation(); if (!isOptimistic) onEdit?.(); }}\n disabled={isOptimistic}\n className=\"p-1 rounded hover:bg-white/10 text-muted-foreground hover:text-foreground transition-colors disabled:opacity-50 disabled:cursor-not-allowed\"\n title={isOptimistic ? 'Aguardando confirmação do servidor' : 'Editar workspace'}\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M17 3a2.85 2.83 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5Z\" />\n </svg>\n </button>\n <button\n onClick={(e) => { e.preventDefault(); e.stopPropagation(); if (!isOptimistic) onDelete?.(); }}\n disabled={isOptimistic}\n className=\"p-1 rounded hover:bg-rose-500/20 text-muted-foreground hover:text-rose-400 transition-colors disabled:opacity-50 disabled:cursor-not-allowed\"\n title={isOptimistic ? 'Aguardando confirmação do servidor' : 'Excluir workspace'}\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M3 6h18\" /><path d=\"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6\" />\n <path d=\"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2\" />\n </svg>\n </button>\n </div>\n )}\n </>\n );\n\n const cls = cn(\n 'flex items-center gap-2.5 px-3 py-2 w-full min-w-0 overflow-hidden transition-colors hover:bg-theme-subtle',\n isActive && 'bg-theme-subtle',\n isOptimistic && 'pointer-events-none',\n );\n\n const wrapperProps = {\n onMouseEnter: () => setShowActions(true),\n onMouseLeave: () => setShowActions(false),\n };\n\n if (renderLink) {\n return (\n <div className=\"min-w-0 overflow-hidden\" {...wrapperProps}>\n {renderLink({ href: `/${ws.slug}`, children: content, className: cls, onClick: onClose })}\n </div>\n );\n }\n\n return (\n <div className=\"min-w-0 overflow-hidden\" {...wrapperProps}>\n <a href={`/${ws.slug}`} onClick={onClose} className={cls}>\n {content}\n </a>\n </div>\n );\n}\n\nWorkspaceSwitcher.displayName = 'WorkspaceSwitcher';\n\n// ─── Inline Create Workspace Dialog ─────────\n\nfunction CreateWorkspaceInlineDialog({\n open,\n onOpenChange,\n onSubmit,\n}: {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n onSubmit?: (data: { name: string; description: string }) => void | Promise<void>;\n}) {\n const [name, setName] = React.useState('');\n const [description, setDescription] = React.useState('');\n const [loading, setLoading] = React.useState(false);\n const [error, setError] = React.useState('');\n\n React.useEffect(() => {\n if (open) { setName(''); setDescription(''); setError(''); }\n }, [open]);\n\n const handleSubmit = async () => {\n if (!name.trim()) return;\n setLoading(true);\n setError('');\n try {\n await onSubmit?.({ name: name.trim(), description: description.trim() });\n setName('');\n setDescription('');\n onOpenChange(false);\n } catch (err: any) {\n setError(err.message || 'Falha ao criar workspace');\n } finally {\n setLoading(false);\n }\n };\n\n return (\n <ResponsiveDialog\n open={open}\n onOpenChange={onOpenChange}\n title=\"Criar novo workspace\"\n description=\"Configure o nome e a descrição do seu workspace\"\n footer={\n <div className=\"flex justify-end gap-2\">\n <Button variant=\"ghost\" onClick={() => onOpenChange(false)} disabled={loading}>\n Cancelar\n </Button>\n <Button onClick={handleSubmit} disabled={!name.trim() || loading}>\n {loading ? 'Criando...' : 'Criar workspace'}\n </Button>\n </div>\n }\n >\n <div className=\"space-y-4\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"ws-name\">Nome *</Label>\n <Input\n id=\"ws-name\"\n placeholder=\"Ex: Minha Empresa\"\n value={name}\n onChange={(e) => setName(e.target.value)}\n disabled={loading}\n autoFocus\n />\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"ws-desc\">Descrição</Label>\n <Textarea\n id=\"ws-desc\"\n placeholder=\"Opcional\"\n value={description}\n onChange={(e) => setDescription(e.target.value)}\n disabled={loading}\n rows={3}\n />\n </div>\n {error && <p className=\"text-xs text-rose-400\">{error}</p>}\n </div>\n </ResponsiveDialog>\n );\n}\n\n// ─── Edit Workspace Dialog ──────────────────\n\nfunction EditWorkspaceDialog({\n open,\n onOpenChange,\n workspace,\n onSubmit,\n}: {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n workspace: OrganifyWorkspace | null;\n onSubmit: (slug: string, data: { name?: string; description?: string }) => Promise<void>;\n}) {\n const [name, setName] = React.useState('');\n const [description, setDescription] = React.useState('');\n const [loading, setLoading] = React.useState(false);\n const [error, setError] = React.useState('');\n\n React.useEffect(() => {\n if (open && workspace) {\n setName(workspace.name);\n setDescription(workspace.description ?? '');\n setError('');\n }\n }, [open, workspace]);\n\n const handleSubmit = async () => {\n if (!name.trim() || !workspace) return;\n setLoading(true);\n setError('');\n try {\n await onSubmit(workspace.slug, {\n name: name.trim(),\n description: description.trim() || undefined,\n });\n onOpenChange(false);\n } catch (err: any) {\n setError(err.message || 'Falha ao atualizar workspace');\n } finally {\n setLoading(false);\n }\n };\n\n return (\n <ResponsiveDialog\n open={open}\n onOpenChange={onOpenChange}\n title=\"Editar workspace\"\n description={`Atualize as informações de \"${workspace?.name ?? ''}\"`}\n footer={\n <div className=\"flex justify-end gap-2\">\n <Button variant=\"ghost\" onClick={() => onOpenChange(false)} disabled={loading}>\n Cancelar\n </Button>\n <Button onClick={handleSubmit} disabled={!name.trim() || loading}>\n {loading ? 'Salvando...' : 'Salvar alterações'}\n </Button>\n </div>\n }\n >\n <div className=\"space-y-4\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"ws-edit-name\">Nome *</Label>\n <Input\n id=\"ws-edit-name\"\n placeholder=\"Ex: Minha Empresa\"\n value={name}\n onChange={(e) => setName(e.target.value)}\n disabled={loading}\n autoFocus\n />\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"ws-edit-desc\">Descrição</Label>\n <Textarea\n id=\"ws-edit-desc\"\n placeholder=\"Opcional\"\n value={description}\n onChange={(e) => setDescription(e.target.value)}\n disabled={loading}\n rows={3}\n />\n </div>\n {error && <p className=\"text-xs text-rose-400\">{error}</p>}\n </div>\n </ResponsiveDialog>\n );\n}\n\n// ─── Delete Workspace Dialog ────────────────\n\nfunction DeleteWorkspaceDialog({\n open,\n onOpenChange,\n workspace,\n onConfirm,\n}: {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n workspace: OrganifyWorkspace | null;\n onConfirm: (slug: string) => Promise<void>;\n}) {\n const [loading, setLoading] = React.useState(false);\n const [error, setError] = React.useState('');\n const [confirmText, setConfirmText] = React.useState('');\n\n React.useEffect(() => {\n if (open) { setError(''); setConfirmText(''); }\n }, [open]);\n\n const canConfirm = confirmText === workspace?.name;\n\n const handleDelete = async () => {\n if (!workspace || !canConfirm) return;\n setLoading(true);\n setError('');\n try {\n await onConfirm(workspace.slug);\n onOpenChange(false);\n } catch (err: any) {\n setError(err.message || 'Falha ao excluir workspace');\n } finally {\n setLoading(false);\n }\n };\n\n return (\n <ResponsiveDialog\n open={open}\n onOpenChange={onOpenChange}\n title=\"Excluir workspace\"\n description=\"Esta ação é irreversível. Todos os projetos, tarefas e dados serão perdidos.\"\n footer={\n <div className=\"flex justify-end gap-2\">\n <Button variant=\"ghost\" onClick={() => onOpenChange(false)} disabled={loading}>\n Cancelar\n </Button>\n <Button\n onClick={handleDelete}\n disabled={!canConfirm || loading}\n className=\"!bg-rose-600 hover:!bg-rose-700 !text-white\"\n >\n {loading ? 'Excluindo...' : 'Excluir permanentemente'}\n </Button>\n </div>\n }\n >\n <div className=\"space-y-4\">\n <div className=\"p-3 rounded-xl bg-rose-500/10 border border-rose-500/20\">\n <p className=\"text-sm text-rose-300\">\n Você está prestes a excluir o workspace <strong className=\"text-rose-200\">{workspace?.name}</strong>.\n Todos os projetos, tarefas, membros e dados associados serão removidos permanentemente.\n </p>\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"ws-delete-confirm\">\n Digite <strong className=\"text-foreground\">{workspace?.name}</strong> para confirmar\n </Label>\n <Input\n id=\"ws-delete-confirm\"\n placeholder={workspace?.name ?? ''}\n value={confirmText}\n onChange={(e) => setConfirmText(e.target.value)}\n disabled={loading}\n autoFocus\n />\n </div>\n {error && <p className=\"text-xs text-rose-400\">{error}</p>}\n </div>\n </ResponsiveDialog>\n );\n}\n\nexport { WorkspaceSwitcher };\n","import * as React from 'react';\nimport { cn } from '../../lib/utils';\n\n/**\n * Logo — Organify geometric diamond logo\n *\n * Rotating diamond inside bordered container with optional text.\n * From Brand Assets & Icons HTML.\n */\n\nexport interface LogoProps extends React.HTMLAttributes<HTMLDivElement> {\n size?: 'sm' | 'default' | 'lg' | 'xl';\n variant?: 'default' | 'minimal' | 'full';\n animated?: boolean;\n}\n\nconst sizes = {\n sm: { container: 'h-8 w-8', diamond: 'h-3.5 w-3.5', text: 'text-sm', gap: 'gap-2' },\n default: { container: 'h-10 w-10', diamond: 'h-4 w-4', text: 'text-base', gap: 'gap-2.5' },\n lg: { container: 'h-14 w-14', diamond: 'h-5.5 w-5.5', text: 'text-lg', gap: 'gap-3' },\n xl: { container: 'h-20 w-20', diamond: 'h-8 w-8', text: 'text-2xl', gap: 'gap-4' },\n};\n\nfunction Logo({ size = 'default', variant = 'default', animated = false, className, ...props }: LogoProps) {\n const s = sizes[size];\n\n return (\n <div\n className={cn(\n 'flex items-center',\n s.gap,\n className,\n )}\n {...props}\n >\n {/* Diamond mark */}\n <div\n className={cn(\n 'relative flex items-center justify-center',\n s.container,\n 'rounded-xl border-2 border-primary/30',\n 'bg-gradient-to-br from-primary/10 to-transparent',\n 'shadow-[0_0_20px_rgba(99,102,241,0.15)]',\n 'transition-all duration-500',\n animated && 'hover:border-primary/50 hover:shadow-[0_0_30px_rgba(99,102,241,0.3)]',\n )}\n >\n <div\n className={cn(\n s.diamond,\n 'rotate-45 rounded-xl bg-gradient-to-br from-primary to-primary-light',\n 'shadow-[0_0_12px_rgba(99,102,241,0.5)]',\n 'transition-transform duration-500',\n animated && 'hover:rotate-[135deg]',\n )}\n />\n\n {/* Corner accent line */}\n <div className=\"absolute -right-1 -top-1 h-3 w-3 border-r-2 border-t-2 border-primary/40 rounded-tr-md\" />\n </div>\n\n {/* Wordmark */}\n {variant !== 'minimal' && (\n <div className=\"flex flex-col\">\n <span\n className={cn(\n s.text,\n 'font-semibold tracking-tight text-theme',\n )}\n >\n Organify\n </span>\n {variant === 'full' && (\n <span className=\"font-mono text-[10px] uppercase tracking-widest text-theme-muted\">\n Gestão inteligente\n </span>\n )}\n </div>\n )}\n </div>\n );\n}\n\nexport { Logo };\n","import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../lib/utils';\n\n/**\n * GeometricIcon — Diamond-shaped icon container\n *\n * Rotate-45 border with icon inside, hover transition from rotated to straight.\n * From Brand Assets & Icons HTML.\n */\nconst geometricIconVariants = cva(\n [\n 'relative inline-flex items-center justify-center',\n 'rotate-45 transition-all duration-500',\n ],\n {\n variants: {\n variant: {\n default: 'border-2 border-primary/30 bg-primary/10 shadow-[0_0_16px_rgba(99,102,241,0.2)]',\n filled: 'bg-gradient-to-br from-primary to-primary-light shadow-[0_0_20px_rgba(99,102,241,0.4)]',\n outline: 'border-2 border-theme-subtle-20 bg-transparent',\n success: 'border-2 border-success/30 bg-success/10 shadow-[0_0_16px_rgba(16,185,129,0.2)]',\n warning: 'border-2 border-warning/30 bg-warning/10 shadow-[0_0_16px_rgba(245,158,11,0.2)]',\n error: 'border-2 border-error/30 bg-error/10 shadow-[0_0_16px_rgba(224,17,95,0.2)]',\n cream: 'border-2 border-primary/20 bg-cream-card shadow-cream-sm',\n },\n size: {\n sm: 'h-8 w-8 rounded-xl',\n default: 'h-10 w-10 rounded-xl',\n lg: 'h-14 w-14 rounded-xl',\n xl: 'h-20 w-20 rounded-xl',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n },\n);\n\nconst iconSizes = {\n sm: 'h-3.5 w-3.5',\n default: 'h-4.5 w-4.5',\n lg: 'h-6 w-6',\n xl: 'h-9 w-9',\n};\n\nexport interface GeometricIconProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof geometricIconVariants> {\n icon: React.ReactNode;\n /** Straighten the icon on hover */\n interactive?: boolean;\n /** Show corner accent */\n accent?: boolean;\n}\n\nfunction GeometricIcon({\n icon,\n variant,\n size = 'default',\n interactive = false,\n accent = false,\n className,\n ...props\n}: GeometricIconProps) {\n return (\n <div\n className={cn(\n geometricIconVariants({ variant, size }),\n interactive && 'cursor-pointer hover:rotate-0 hover:scale-110',\n className,\n )}\n {...props}\n >\n {/* Counter-rotate the icon so it stays upright */}\n <span className={cn('-rotate-45 transition-transform duration-500', iconSizes[size ?? 'default'])}>\n {icon}\n </span>\n\n {/* Corner accent */}\n {accent && (\n <div className=\"absolute -right-0.5 -top-0.5 h-2.5 w-2.5 border-r-2 border-t-2 border-current opacity-40 rounded-tr-sm\" />\n )}\n </div>\n );\n}\n\nexport { GeometricIcon, geometricIconVariants };\n","import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../lib/utils';\n\n/**\n * MetricCard — Glass panel with large metric, label, and optional progress\n *\n * From Advanced Product Components HTML.\n */\nconst metricCardVariants = cva(\n [\n 'relative overflow-hidden rounded-xl border p-6',\n 'transition-all duration-[400ms] ease-[cubic-bezier(0.25,1,0.5,1)]',\n ],\n {\n variants: {\n variant: {\n default: [\n 'border-theme-subtle bg-theme-surface/80 backdrop-blur-2xl',\n 'shadow-glass-lg hover:shadow-glass-xl',\n ],\n highlight: [\n 'border-primary/20 bg-gradient-to-br from-primary/5 to-transparent backdrop-blur-2xl',\n 'shadow-glass-lg hover:shadow-glass-xl',\n ],\n cream: [\n 'border-cream-border bg-cream-card',\n 'shadow-cream-md hover:shadow-cream-lg',\n ],\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n },\n);\n\nexport interface MetricCardProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof metricCardVariants> {\n /** The big number or value */\n value: string | number;\n /** Label / description below the value */\n label: string;\n /** Subtitle or secondary label */\n subtitle?: string;\n /** Icon element shown top-right */\n icon?: React.ReactNode;\n /** Progress percentage 0-100 */\n progress?: number;\n /** Trend indicator (positive or negative) */\n trend?: { value: string; positive: boolean };\n /** Badge content top-right near icon */\n badge?: React.ReactNode;\n}\n\nfunction MetricCard({\n value,\n label,\n subtitle,\n icon,\n progress,\n trend,\n badge,\n variant,\n className,\n ...props\n}: MetricCardProps) {\n return (\n <div className={cn(metricCardVariants({ variant }), className)} {...props}>\n {/* Header row: badge + icon */}\n {(icon || badge) && (\n <div className=\"mb-4 flex items-start justify-between\">\n {badge && <div>{badge}</div>}\n {icon && (\n <div\n className={cn(\n 'flex h-10 w-10 items-center justify-center rounded-xl',\n variant === 'cream'\n ? 'bg-primary/10 text-primary'\n : 'bg-theme-subtle text-theme-muted',\n )}\n >\n {icon}\n </div>\n )}\n </div>\n )}\n\n {/* Value */}\n <div className=\"mb-1 flex items-baseline gap-3\">\n <span\n className={cn(\n 'text-3xl font-semibold tracking-tight',\n variant === 'cream' ? 'text-cream-primary' : 'text-theme',\n )}\n >\n {value}\n </span>\n\n {trend && (\n <span\n className={cn(\n 'rounded-full px-2 py-0.5 text-xs font-semibold',\n trend.positive\n ? 'bg-success/15 text-success-light'\n : 'bg-error/15 text-error-light',\n )}\n >\n {trend.positive ? '↑' : '↓'} {trend.value}\n </span>\n )}\n </div>\n\n {/* Label */}\n <p\n className={cn(\n 'text-sm',\n variant === 'cream' ? 'text-cream-secondary' : 'text-theme-secondary',\n )}\n >\n {label}\n </p>\n\n {subtitle && (\n <p\n className={cn(\n 'mt-0.5 font-mono text-xs',\n variant === 'cream' ? 'text-cream-muted' : 'text-theme-muted',\n )}\n >\n {subtitle}\n </p>\n )}\n\n {/* Progress bar */}\n {typeof progress === 'number' && (\n <div className=\"mt-4\">\n <div className=\"flex items-center justify-between text-xs text-theme-muted mb-1.5\">\n <span>Progresso</span>\n <span className={variant === 'cream' ? 'text-cream-primary' : 'text-theme'}>\n {Math.round(progress)}%\n </span>\n </div>\n <div\n className={cn(\n 'h-1.5 w-full overflow-hidden rounded-full',\n variant === 'cream' ? 'bg-cream-border' : 'bg-theme-subtle',\n )}\n >\n <div\n className=\"h-full rounded-full bg-gradient-to-r from-primary to-primary-light motion-safe:transition-all motion-safe:duration-700\"\n style={{ width: `${Math.min(100, Math.max(0, progress))}%` }}\n />\n </div>\n </div>\n )}\n\n {/* Subtle inner glow */}\n <div className=\"pointer-events-none absolute inset-0 rounded-xl shadow-inner-light\" />\n </div>\n );\n}\n\nexport { MetricCard, metricCardVariants };\n\n// ─── Skeleton ───────────────────────────────\n\nfunction MetricCardSkeleton({ className }: { className?: string }) {\n return (\n <div\n className={cn(\n 'relative overflow-hidden rounded-xl border border-theme-subtle bg-theme-card p-5 animate-pulse',\n className,\n )}\n >\n {/* Icon */}\n <div className=\"h-10 w-10 rounded-xl bg-theme-subtle mb-4\" />\n {/* Value */}\n <div className=\"h-8 w-20 rounded bg-theme-subtle-10 mb-2\" />\n {/* Label */}\n <div className=\"h-3 w-24 rounded bg-theme-subtle mb-1\" />\n {/* Subtitle */}\n <div className=\"h-3 w-16 rounded bg-theme-subtle\" />\n {/* Progress bar */}\n <div className=\"mt-4\">\n <div className=\"flex items-center justify-between mb-1.5\">\n <div className=\"h-2 w-14 rounded bg-theme-subtle\" />\n <div className=\"h-2 w-8 rounded bg-theme-subtle\" />\n </div>\n <div className=\"h-1.5 w-full rounded-full bg-theme-subtle\" />\n </div>\n </div>\n );\n}\n\nMetricCardSkeleton.displayName = 'MetricCardSkeleton';\n\nexport { MetricCardSkeleton };\n","import * as React from 'react';\nimport { cn } from '../../lib/utils';\n\n/**\n * Stepper — Horizontal workflow steps with connecting line\n *\n * Completed / active / pending states, glow on active.\n * From Advanced Product Components HTML.\n */\n\nexport interface StepperStep {\n id: string;\n label: string;\n description?: string;\n icon?: React.ReactNode;\n}\n\nexport type StepStatus = 'completed' | 'active' | 'pending' | 'error';\n\nexport interface StepperProps extends React.HTMLAttributes<HTMLDivElement> {\n steps: StepperStep[];\n /** Index of the currently active step (0-based) */\n activeStep: number;\n /** Vertical layout instead of horizontal */\n orientation?: 'horizontal' | 'vertical';\n /** Cream light theme */\n variant?: 'default' | 'cream';\n /** Indices of steps in error state */\n errorSteps?: number[];\n}\n\nfunction getStepStatus(index: number, activeStep: number, errorSteps?: number[]): StepStatus {\n if (errorSteps?.includes(index)) return 'error';\n if (index < activeStep) return 'completed';\n if (index === activeStep) return 'active';\n return 'pending';\n}\n\nfunction Stepper({\n steps,\n activeStep,\n orientation = 'horizontal',\n variant = 'default',\n errorSteps,\n className,\n ...props\n}: StepperProps) {\n const isVertical = orientation === 'vertical';\n\n return (\n <div\n className={cn(\n 'flex',\n isVertical ? 'flex-col gap-0' : 'items-start gap-0',\n className,\n )}\n role=\"list\"\n {...props}\n >\n {steps.map((step, index) => {\n const status = getStepStatus(index, activeStep, errorSteps);\n const isLast = index === steps.length - 1;\n\n return (\n <div\n key={step.id}\n className={cn(\n 'flex',\n isVertical ? 'flex-row gap-3' : 'flex-1 flex-col items-center gap-2',\n )}\n role=\"listitem\"\n aria-current={status === 'active' ? 'step' : undefined}\n >\n {/* Step indicator row */}\n <div\n className={cn(\n 'flex items-center',\n isVertical ? 'flex-col' : 'w-full',\n )}\n >\n {/* Connector before (horizontal only, skip first) */}\n {!isVertical && index > 0 && (\n <StepConnector\n status={status === 'completed' || status === 'active' ? 'filled' : 'empty'}\n variant={variant}\n />\n )}\n\n {/* Circle */}\n <StepCircle status={status} icon={step.icon} index={index} variant={variant} />\n\n {/* Connector after (horizontal only, skip last) */}\n {!isVertical && !isLast && (\n <StepConnector\n status={status === 'completed' ? 'filled' : 'empty'}\n variant={variant}\n />\n )}\n\n {/* Vertical connector down */}\n {isVertical && !isLast && (\n <div\n className={cn(\n 'my-1 h-8 w-0.5',\n status === 'completed'\n ? 'bg-gradient-to-b from-primary to-primary-light'\n : variant === 'cream'\n ? 'bg-cream-border'\n : 'bg-theme-subtle-10',\n )}\n />\n )}\n </div>\n\n {/* Label */}\n <div\n className={cn(\n isVertical ? 'pt-0.5' : 'mt-2 text-center',\n )}\n >\n <p\n className={cn(\n 'text-sm font-medium transition-colors',\n status === 'active'\n ? variant === 'cream'\n ? 'text-primary'\n : 'text-theme'\n : status === 'completed'\n ? variant === 'cream'\n ? 'text-cream-primary'\n : 'text-theme-secondary'\n : variant === 'cream'\n ? 'text-cream-muted'\n : 'text-theme-muted',\n )}\n >\n {step.label}\n </p>\n {step.description && (\n <p\n className={cn(\n 'mt-0.5 text-xs',\n variant === 'cream' ? 'text-cream-muted' : 'text-theme-muted',\n )}\n >\n {step.description}\n </p>\n )}\n </div>\n </div>\n );\n })}\n </div>\n );\n}\n\n/* ───────── Sub-components ───────── */\n\nfunction StepCircle({\n status,\n icon,\n index,\n variant,\n}: {\n status: StepStatus;\n icon?: React.ReactNode;\n index: number;\n variant: 'default' | 'cream';\n}) {\n return (\n <div\n className={cn(\n 'relative flex h-9 w-9 shrink-0 items-center justify-center rounded-full',\n 'text-sm font-semibold transition-all duration-[400ms] ease-[cubic-bezier(0.25,1,0.5,1)]',\n status === 'completed' && [\n 'bg-gradient-to-br from-primary to-primary-light text-cream-base',\n variant !== 'cream' && 'shadow-[0_0_12px_rgba(99,102,241,0.3)]',\n ],\n status === 'active' && [\n 'border-2 border-primary bg-primary/15 text-primary-light',\n variant !== 'cream' && 'shadow-[0_0_20px_rgba(99,102,241,0.4)]',\n ],\n status === 'pending' && [\n variant === 'cream'\n ? 'border-2 border-cream-border bg-cream-card text-cream-muted'\n : 'border-2 border-theme-subtle-10 bg-theme-surface text-theme-muted',\n ],\n status === 'error' && [\n 'border-2 border-rose-500/30 bg-rose-500/15 text-rose-400',\n variant !== 'cream' && 'shadow-[0_0_15px_rgba(244,63,94,0.3)]',\n ],\n )}\n >\n {status === 'completed' ? (\n <svg className=\"h-4 w-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={3}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M5 13l4 4L19 7\" />\n </svg>\n ) : status === 'error' ? (\n <svg className=\"h-4 w-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={3}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n ) : icon ? (\n <span className=\"h-4 w-4\">{icon}</span>\n ) : (\n <span>{index + 1}</span>\n )}\n\n {/* Active pulse ring */}\n {status === 'active' && (\n <span className=\"absolute inset-0 motion-safe:animate-ping rounded-full border-2 border-primary/30\" />\n )}\n </div>\n );\n}\n\nfunction StepConnector({\n status,\n variant,\n}: {\n status: 'filled' | 'empty';\n variant: 'default' | 'cream';\n}) {\n return (\n <div\n className={cn(\n 'h-0.5 flex-1 transition-colors duration-500',\n status === 'filled'\n ? 'bg-gradient-to-r from-primary to-primary-light'\n : variant === 'cream'\n ? 'bg-cream-border'\n : 'bg-white/10',\n )}\n />\n );\n}\n\nexport { Stepper, StepCircle, StepConnector };\n","import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../lib/utils';\n\n/**\n * StatusPill — Asymmetric border-radius pill with dot indicator\n *\n * Semantic colors, optional glow shadow.\n * From Brand Assets & Icons HTML.\n */\nconst statusPillVariants = cva(\n [\n 'inline-flex items-center gap-2 font-medium',\n 'transition-all duration-[400ms] ease-[cubic-bezier(0.25,1,0.5,1)]',\n ],\n {\n variants: {\n variant: {\n default: 'border border-theme-subtle bg-theme-card-surface text-theme-secondary',\n primary: 'border border-primary/20 bg-primary/10 text-primary-light',\n success: 'border border-success/20 bg-success/10 text-success',\n warning: 'border border-warning/20 bg-warning/10 text-warning',\n error: 'border border-error/20 bg-error/10 text-error',\n info: 'border border-info/20 bg-info/10 text-info',\n\n // Status-specific\n 'in-flow': 'border border-in-flow-border bg-in-flow-bg text-in-flow-text',\n 'deep-work': 'border border-deep-work-border bg-deep-work-bg text-deep-work-text',\n 'high-energy': 'border border-warning/20 bg-warning/10 text-warning',\n resting: 'border border-resting-border bg-resting-bg text-resting-text',\n disconnected: 'border border-disconnected-border bg-disconnected-bg text-disconnected-text',\n\n // Cream theme\n cream: 'border border-cream-border bg-cream-card text-cream-primary',\n },\n size: {\n sm: 'rounded-pill-asym px-2.5 py-0.5 text-xs',\n default: 'rounded-pill-asym px-3.5 py-1 text-sm',\n lg: 'rounded-pill-asym px-5 py-1.5 text-base',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n },\n);\n\nconst dotColors: Record<string, string> = {\n default: 'bg-neutral-400',\n primary: 'bg-primary-light',\n success: 'bg-success',\n warning: 'bg-warning',\n error: 'bg-error',\n info: 'bg-info',\n 'in-flow': 'bg-primary-light',\n 'deep-work': 'bg-info',\n 'high-energy': 'bg-warning',\n resting: 'bg-neutral-400',\n disconnected: 'bg-neutral-500',\n cream: 'bg-primary',\n};\n\nexport interface StatusPillProps\n extends React.HTMLAttributes<HTMLSpanElement>,\n VariantProps<typeof statusPillVariants> {\n /** Show the animated dot indicator */\n dot?: boolean;\n /** Pulse the dot (animated) */\n pulse?: boolean;\n /** Icon before text */\n icon?: React.ReactNode;\n}\n\nfunction StatusPill({\n variant = 'default',\n size,\n dot = true,\n pulse = false,\n icon,\n children,\n className,\n ...props\n}: StatusPillProps) {\n return (\n <span\n className={cn(statusPillVariants({ variant, size }), className)}\n {...props}\n >\n {dot && (\n <span className=\"relative flex h-2 w-2\">\n {pulse && (\n <span\n className={cn(\n 'absolute inline-flex h-full w-full motion-safe:animate-ping rounded-full opacity-50',\n dotColors[variant ?? 'default'],\n )}\n />\n )}\n <span\n className={cn(\n 'relative inline-flex h-2 w-2 rounded-full',\n dotColors[variant ?? 'default'],\n )}\n />\n </span>\n )}\n\n {icon && <span className=\"h-3.5 w-3.5\">{icon}</span>}\n\n {children}\n </span>\n );\n}\n\nexport { StatusPill, statusPillVariants };\n","/**\n * @module constants\n * @summary Useful constants\n * @description\n * Collection of useful date constants.\n *\n * The constants could be imported from `date-fns/constants`:\n *\n * ```ts\n * import { maxTime, minTime } from \"./constants/date-fns/constants\";\n *\n * function isAllowedTime(time) {\n * return time <= maxTime && time >= minTime;\n * }\n * ```\n */\n\n/**\n * @constant\n * @name daysInWeek\n * @summary Days in 1 week.\n */\nexport const daysInWeek = 7;\n\n/**\n * @constant\n * @name daysInYear\n * @summary Days in 1 year.\n *\n * @description\n * How many days in a year.\n *\n * One years equals 365.2425 days according to the formula:\n *\n * > Leap year occurs every 4 years, except for years that are divisible by 100 and not divisible by 400.\n * > 1 mean year = (365+1/4-1/100+1/400) days = 365.2425 days\n */\nexport const daysInYear = 365.2425;\n\n/**\n * @constant\n * @name maxTime\n * @summary Maximum allowed time.\n *\n * @example\n * import { maxTime } from \"./constants/date-fns/constants\";\n *\n * const isValid = 8640000000000001 <= maxTime;\n * //=> false\n *\n * new Date(8640000000000001);\n * //=> Invalid Date\n */\nexport const maxTime = Math.pow(10, 8) * 24 * 60 * 60 * 1000;\n\n/**\n * @constant\n * @name minTime\n * @summary Minimum allowed time.\n *\n * @example\n * import { minTime } from \"./constants/date-fns/constants\";\n *\n * const isValid = -8640000000000001 >= minTime;\n * //=> false\n *\n * new Date(-8640000000000001)\n * //=> Invalid Date\n */\nexport const minTime = -maxTime;\n\n/**\n * @constant\n * @name millisecondsInWeek\n * @summary Milliseconds in 1 week.\n */\nexport const millisecondsInWeek = 604800000;\n\n/**\n * @constant\n * @name millisecondsInDay\n * @summary Milliseconds in 1 day.\n */\nexport const millisecondsInDay = 86400000;\n\n/**\n * @constant\n * @name millisecondsInMinute\n * @summary Milliseconds in 1 minute\n */\nexport const millisecondsInMinute = 60000;\n\n/**\n * @constant\n * @name millisecondsInHour\n * @summary Milliseconds in 1 hour\n */\nexport const millisecondsInHour = 3600000;\n\n/**\n * @constant\n * @name millisecondsInSecond\n * @summary Milliseconds in 1 second\n */\nexport const millisecondsInSecond = 1000;\n\n/**\n * @constant\n * @name minutesInYear\n * @summary Minutes in 1 year.\n */\nexport const minutesInYear = 525600;\n\n/**\n * @constant\n * @name minutesInMonth\n * @summary Minutes in 1 month.\n */\nexport const minutesInMonth = 43200;\n\n/**\n * @constant\n * @name minutesInDay\n * @summary Minutes in 1 day.\n */\nexport const minutesInDay = 1440;\n\n/**\n * @constant\n * @name minutesInHour\n * @summary Minutes in 1 hour.\n */\nexport const minutesInHour = 60;\n\n/**\n * @constant\n * @name monthsInQuarter\n * @summary Months in 1 quarter.\n */\nexport const monthsInQuarter = 3;\n\n/**\n * @constant\n * @name monthsInYear\n * @summary Months in 1 year.\n */\nexport const monthsInYear = 12;\n\n/**\n * @constant\n * @name quartersInYear\n * @summary Quarters in 1 year\n */\nexport const quartersInYear = 4;\n\n/**\n * @constant\n * @name secondsInHour\n * @summary Seconds in 1 hour.\n */\nexport const secondsInHour = 3600;\n\n/**\n * @constant\n * @name secondsInMinute\n * @summary Seconds in 1 minute.\n */\nexport const secondsInMinute = 60;\n\n/**\n * @constant\n * @name secondsInDay\n * @summary Seconds in 1 day.\n */\nexport const secondsInDay = secondsInHour * 24;\n\n/**\n * @constant\n * @name secondsInWeek\n * @summary Seconds in 1 week.\n */\nexport const secondsInWeek = secondsInDay * 7;\n\n/**\n * @constant\n * @name secondsInYear\n * @summary Seconds in 1 year.\n */\nexport const secondsInYear = secondsInDay * daysInYear;\n\n/**\n * @constant\n * @name secondsInMonth\n * @summary Seconds in 1 month\n */\nexport const secondsInMonth = secondsInYear / 12;\n\n/**\n * @constant\n * @name secondsInQuarter\n * @summary Seconds in 1 quarter.\n */\nexport const secondsInQuarter = secondsInMonth * 3;\n\n/**\n * @constant\n * @name constructFromSymbol\n * @summary Symbol enabling Date extensions to inherit properties from the reference date.\n *\n * The symbol is used to enable the `constructFrom` function to construct a date\n * using a reference date and a value. It allows to transfer extra properties\n * from the reference date to the new date. It's useful for extensions like\n * [`TZDate`](https://github.com/date-fns/tz) that accept a time zone as\n * a constructor argument.\n */\nexport const constructFromSymbol = Symbol.for(\"constructDateFrom\");\n","import { constructFromSymbol } from \"./constants.js\";\n\n/**\n * @name constructFrom\n * @category Generic Helpers\n * @summary Constructs a date using the reference date and the value\n *\n * @description\n * The function constructs a new date using the constructor from the reference\n * date and the given value. It helps to build generic functions that accept\n * date extensions.\n *\n * It defaults to `Date` if the passed reference date is a number or a string.\n *\n * Starting from v3.7.0, it allows to construct a date using `[Symbol.for(\"constructDateFrom\")]`\n * enabling to transfer extra properties from the reference date to the new date.\n * It's useful for extensions like [`TZDate`](https://github.com/date-fns/tz)\n * that accept a time zone as a constructor argument.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The reference date to take constructor from\n * @param value - The value to create the date\n *\n * @returns Date initialized using the given date and value\n *\n * @example\n * import { constructFrom } from \"./constructFrom/date-fns\";\n *\n * // A function that clones a date preserving the original type\n * function cloneDate<DateType extends Date>(date: DateType): DateType {\n * return constructFrom(\n * date, // Use constructor from the given date\n * date.getTime() // Use the date value to create a new date\n * );\n * }\n */\nexport function constructFrom(date, value) {\n if (typeof date === \"function\") return date(value);\n\n if (date && typeof date === \"object\" && constructFromSymbol in date)\n return date[constructFromSymbol](value);\n\n if (date instanceof Date) return new date.constructor(value);\n\n return new Date(value);\n}\n\n// Fallback for modularized imports:\nexport default constructFrom;\n","import { constructFrom } from \"./constructFrom.js\";\n\n/**\n * @name toDate\n * @category Common Helpers\n * @summary Convert the given argument to an instance of Date.\n *\n * @description\n * Convert the given argument to an instance of Date.\n *\n * If the argument is an instance of Date, the function returns its clone.\n *\n * If the argument is a number, it is treated as a timestamp.\n *\n * If the argument is none of the above, the function returns Invalid Date.\n *\n * Starting from v3.7.0, it clones a date using `[Symbol.for(\"constructDateFrom\")]`\n * enabling to transfer extra properties from the reference date to the new date.\n * It's useful for extensions like [`TZDate`](https://github.com/date-fns/tz)\n * that accept a time zone as a constructor argument.\n *\n * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param argument - The value to convert\n *\n * @returns The parsed date in the local time zone\n *\n * @example\n * // Clone the date:\n * const result = toDate(new Date(2014, 1, 11, 11, 30, 30))\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert the timestamp to date:\n * const result = toDate(1392098430000)\n * //=> Tue Feb 11 2014 11:30:30\n */\nexport function toDate(argument, context) {\n // [TODO] Get rid of `toDate` or `constructFrom`?\n return constructFrom(context || argument, argument);\n}\n\n// Fallback for modularized imports:\nexport default toDate;\n","let defaultOptions = {};\n\nexport function getDefaultOptions() {\n return defaultOptions;\n}\n\nexport function setDefaultOptions(newOptions) {\n defaultOptions = newOptions;\n}\n","import { getDefaultOptions } from \"./_lib/defaultOptions.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link startOfWeek} function options.\n */\n\n/**\n * @name startOfWeek\n * @category Week Helpers\n * @summary Return the start of a week for the given date.\n *\n * @description\n * Return the start of a week for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of a week\n *\n * @example\n * // The start of a week for 2 September 2014 11:55:00:\n * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sun Aug 31 2014 00:00:00\n *\n * @example\n * // If the week starts on Monday, the start of the week for 2 September 2014 11:55:00:\n * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport function startOfWeek(date, options) {\n const defaultOptions = getDefaultOptions();\n const weekStartsOn =\n options?.weekStartsOn ??\n options?.locale?.options?.weekStartsOn ??\n defaultOptions.weekStartsOn ??\n defaultOptions.locale?.options?.weekStartsOn ??\n 0;\n\n const _date = toDate(date, options?.in);\n const day = _date.getDay();\n const diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n\n _date.setDate(_date.getDate() - diff);\n _date.setHours(0, 0, 0, 0);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfWeek;\n","import { startOfWeek } from \"./startOfWeek.js\";\n\n/**\n * The {@link startOfISOWeek} function options.\n */\n\n/**\n * @name startOfISOWeek\n * @category ISO Week Helpers\n * @summary Return the start of an ISO week for the given date.\n *\n * @description\n * Return the start of an ISO week for the given date.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of an ISO week\n *\n * @example\n * // The start of an ISO week for 2 September 2014 11:55:00:\n * const result = startOfISOWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport function startOfISOWeek(date, options) {\n return startOfWeek(date, { ...options, weekStartsOn: 1 });\n}\n\n// Fallback for modularized imports:\nexport default startOfISOWeek;\n","import { constructFrom } from \"./constructFrom.js\";\nimport { startOfISOWeek } from \"./startOfISOWeek.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getISOWeekYear} function options.\n */\n\n/**\n * @name getISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Get the ISO week-numbering year of the given date.\n *\n * @description\n * Get the ISO week-numbering year of the given date,\n * which always starts 3 days before the year's first Thursday.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param date - The given date\n *\n * @returns The ISO week-numbering year\n *\n * @example\n * // Which ISO-week numbering year is 2 January 2005?\n * const result = getISOWeekYear(new Date(2005, 0, 2))\n * //=> 2004\n */\nexport function getISOWeekYear(date, options) {\n const _date = toDate(date, options?.in);\n const year = _date.getFullYear();\n\n const fourthOfJanuaryOfNextYear = constructFrom(_date, 0);\n fourthOfJanuaryOfNextYear.setFullYear(year + 1, 0, 4);\n fourthOfJanuaryOfNextYear.setHours(0, 0, 0, 0);\n const startOfNextYear = startOfISOWeek(fourthOfJanuaryOfNextYear);\n\n const fourthOfJanuaryOfThisYear = constructFrom(_date, 0);\n fourthOfJanuaryOfThisYear.setFullYear(year, 0, 4);\n fourthOfJanuaryOfThisYear.setHours(0, 0, 0, 0);\n const startOfThisYear = startOfISOWeek(fourthOfJanuaryOfThisYear);\n\n if (_date.getTime() >= startOfNextYear.getTime()) {\n return year + 1;\n } else if (_date.getTime() >= startOfThisYear.getTime()) {\n return year;\n } else {\n return year - 1;\n }\n}\n\n// Fallback for modularized imports:\nexport default getISOWeekYear;\n","import { toDate } from \"../toDate.js\";\n\n/**\n * Google Chrome as of 67.0.3396.87 introduced timezones with offset that includes seconds.\n * They usually appear for dates that denote time before the timezones were introduced\n * (e.g. for 'Europe/Prague' timezone the offset is GMT+00:57:44 before 1 October 1891\n * and GMT+01:00:00 after that date)\n *\n * Date#getTimezoneOffset returns the offset in minutes and would return 57 for the example above,\n * which would lead to incorrect calculations.\n *\n * This function returns the timezone offset in milliseconds that takes seconds in account.\n */\nexport function getTimezoneOffsetInMilliseconds(date) {\n const _date = toDate(date);\n const utcDate = new Date(\n Date.UTC(\n _date.getFullYear(),\n _date.getMonth(),\n _date.getDate(),\n _date.getHours(),\n _date.getMinutes(),\n _date.getSeconds(),\n _date.getMilliseconds(),\n ),\n );\n utcDate.setUTCFullYear(_date.getFullYear());\n return +date - +utcDate;\n}\n","import { constructFrom } from \"../constructFrom.js\";\n\nexport function normalizeDates(context, ...dates) {\n const normalize = constructFrom.bind(\n null,\n context || dates.find((date) => typeof date === \"object\"),\n );\n return dates.map(normalize);\n}\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link startOfDay} function options.\n */\n\n/**\n * @name startOfDay\n * @category Day Helpers\n * @summary Return the start of a day for the given date.\n *\n * @description\n * Return the start of a day for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - The options\n *\n * @returns The start of a day\n *\n * @example\n * // The start of a day for 2 September 2014 11:55:00:\n * const result = startOfDay(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 02 2014 00:00:00\n */\nexport function startOfDay(date, options) {\n const _date = toDate(date, options?.in);\n _date.setHours(0, 0, 0, 0);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfDay;\n","import { getTimezoneOffsetInMilliseconds } from \"./_lib/getTimezoneOffsetInMilliseconds.js\";\nimport { normalizeDates } from \"./_lib/normalizeDates.js\";\nimport { millisecondsInDay } from \"./constants.js\";\nimport { startOfDay } from \"./startOfDay.js\";\n\n/**\n * The {@link differenceInCalendarDays} function options.\n */\n\n/**\n * @name differenceInCalendarDays\n * @category Day Helpers\n * @summary Get the number of calendar days between the given dates.\n *\n * @description\n * Get the number of calendar days between the given dates. This means that the times are removed\n * from the dates and then the difference in days is calculated.\n *\n * @param laterDate - The later date\n * @param earlierDate - The earlier date\n * @param options - The options object\n *\n * @returns The number of calendar days\n *\n * @example\n * // How many calendar days are between\n * // 2 July 2011 23:00:00 and 2 July 2012 00:00:00?\n * const result = differenceInCalendarDays(\n * new Date(2012, 6, 2, 0, 0),\n * new Date(2011, 6, 2, 23, 0)\n * )\n * //=> 366\n * // How many calendar days are between\n * // 2 July 2011 23:59:00 and 3 July 2011 00:01:00?\n * const result = differenceInCalendarDays(\n * new Date(2011, 6, 3, 0, 1),\n * new Date(2011, 6, 2, 23, 59)\n * )\n * //=> 1\n */\nexport function differenceInCalendarDays(laterDate, earlierDate, options) {\n const [laterDate_, earlierDate_] = normalizeDates(\n options?.in,\n laterDate,\n earlierDate,\n );\n\n const laterStartOfDay = startOfDay(laterDate_);\n const earlierStartOfDay = startOfDay(earlierDate_);\n\n const laterTimestamp =\n +laterStartOfDay - getTimezoneOffsetInMilliseconds(laterStartOfDay);\n const earlierTimestamp =\n +earlierStartOfDay - getTimezoneOffsetInMilliseconds(earlierStartOfDay);\n\n // Round the number of days to the nearest integer because the number of\n // milliseconds in a day is not constant (e.g. it's different in the week of\n // the daylight saving time clock shift).\n return Math.round((laterTimestamp - earlierTimestamp) / millisecondsInDay);\n}\n\n// Fallback for modularized imports:\nexport default differenceInCalendarDays;\n","import { constructFrom } from \"./constructFrom.js\";\nimport { getISOWeekYear } from \"./getISOWeekYear.js\";\nimport { startOfISOWeek } from \"./startOfISOWeek.js\";\n\n/**\n * The {@link startOfISOWeekYear} function options.\n */\n\n/**\n * @name startOfISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Return the start of an ISO week-numbering year for the given date.\n *\n * @description\n * Return the start of an ISO week-numbering year,\n * which always starts 3 days before the year's first Thursday.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of an ISO week-numbering year\n *\n * @example\n * // The start of an ISO week-numbering year for 2 July 2005:\n * const result = startOfISOWeekYear(new Date(2005, 6, 2))\n * //=> Mon Jan 03 2005 00:00:00\n */\nexport function startOfISOWeekYear(date, options) {\n const year = getISOWeekYear(date, options);\n const fourthOfJanuary = constructFrom(options?.in || date, 0);\n fourthOfJanuary.setFullYear(year, 0, 4);\n fourthOfJanuary.setHours(0, 0, 0, 0);\n return startOfISOWeek(fourthOfJanuary);\n}\n\n// Fallback for modularized imports:\nexport default startOfISOWeekYear;\n","/**\n * @name isDate\n * @category Common Helpers\n * @summary Is the given value a date?\n *\n * @description\n * Returns true if the given value is an instance of Date. The function works for dates transferred across iframes.\n *\n * @param value - The value to check\n *\n * @returns True if the given value is a date\n *\n * @example\n * // For a valid date:\n * const result = isDate(new Date())\n * //=> true\n *\n * @example\n * // For an invalid date:\n * const result = isDate(new Date(NaN))\n * //=> true\n *\n * @example\n * // For some value:\n * const result = isDate('2014-02-31')\n * //=> false\n *\n * @example\n * // For an object:\n * const result = isDate({})\n * //=> false\n */\nexport function isDate(value) {\n return (\n value instanceof Date ||\n (typeof value === \"object\" &&\n Object.prototype.toString.call(value) === \"[object Date]\")\n );\n}\n\n// Fallback for modularized imports:\nexport default isDate;\n","import { isDate } from \"./isDate.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * @name isValid\n * @category Common Helpers\n * @summary Is the given date valid?\n *\n * @description\n * Returns false if argument is Invalid Date and true otherwise.\n * Argument is converted to Date using `toDate`. See [toDate](https://date-fns.org/docs/toDate)\n * Invalid Date is a Date, whose time value is NaN.\n *\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * @param date - The date to check\n *\n * @returns The date is valid\n *\n * @example\n * // For the valid date:\n * const result = isValid(new Date(2014, 1, 31))\n * //=> true\n *\n * @example\n * // For the value, convertible into a date:\n * const result = isValid(1393804800000)\n * //=> true\n *\n * @example\n * // For the invalid date:\n * const result = isValid(new Date(''))\n * //=> false\n */\nexport function isValid(date) {\n return !((!isDate(date) && typeof date !== \"number\") || isNaN(+toDate(date)));\n}\n\n// Fallback for modularized imports:\nexport default isValid;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link startOfYear} function options.\n */\n\n/**\n * @name startOfYear\n * @category Year Helpers\n * @summary Return the start of a year for the given date.\n *\n * @description\n * Return the start of a year for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - The options\n *\n * @returns The start of a year\n *\n * @example\n * // The start of a year for 2 September 2014 11:55:00:\n * const result = startOfYear(new Date(2014, 8, 2, 11, 55, 00))\n * //=> Wed Jan 01 2014 00:00:00\n */\nexport function startOfYear(date, options) {\n const date_ = toDate(date, options?.in);\n date_.setFullYear(date_.getFullYear(), 0, 1);\n date_.setHours(0, 0, 0, 0);\n return date_;\n}\n\n// Fallback for modularized imports:\nexport default startOfYear;\n","const formatDistanceLocale = {\n lessThanXSeconds: {\n one: \"less than a second\",\n other: \"less than {{count}} seconds\",\n },\n\n xSeconds: {\n one: \"1 second\",\n other: \"{{count}} seconds\",\n },\n\n halfAMinute: \"half a minute\",\n\n lessThanXMinutes: {\n one: \"less than a minute\",\n other: \"less than {{count}} minutes\",\n },\n\n xMinutes: {\n one: \"1 minute\",\n other: \"{{count}} minutes\",\n },\n\n aboutXHours: {\n one: \"about 1 hour\",\n other: \"about {{count}} hours\",\n },\n\n xHours: {\n one: \"1 hour\",\n other: \"{{count}} hours\",\n },\n\n xDays: {\n one: \"1 day\",\n other: \"{{count}} days\",\n },\n\n aboutXWeeks: {\n one: \"about 1 week\",\n other: \"about {{count}} weeks\",\n },\n\n xWeeks: {\n one: \"1 week\",\n other: \"{{count}} weeks\",\n },\n\n aboutXMonths: {\n one: \"about 1 month\",\n other: \"about {{count}} months\",\n },\n\n xMonths: {\n one: \"1 month\",\n other: \"{{count}} months\",\n },\n\n aboutXYears: {\n one: \"about 1 year\",\n other: \"about {{count}} years\",\n },\n\n xYears: {\n one: \"1 year\",\n other: \"{{count}} years\",\n },\n\n overXYears: {\n one: \"over 1 year\",\n other: \"over {{count}} years\",\n },\n\n almostXYears: {\n one: \"almost 1 year\",\n other: \"almost {{count}} years\",\n },\n};\n\nexport const formatDistance = (token, count, options) => {\n let result;\n\n const tokenValue = formatDistanceLocale[token];\n if (typeof tokenValue === \"string\") {\n result = tokenValue;\n } else if (count === 1) {\n result = tokenValue.one;\n } else {\n result = tokenValue.other.replace(\"{{count}}\", count.toString());\n }\n\n if (options?.addSuffix) {\n if (options.comparison && options.comparison > 0) {\n return \"in \" + result;\n } else {\n return result + \" ago\";\n }\n }\n\n return result;\n};\n","export function buildFormatLongFn(args) {\n return (options = {}) => {\n // TODO: Remove String()\n const width = options.width ? String(options.width) : args.defaultWidth;\n const format = args.formats[width] || args.formats[args.defaultWidth];\n return format;\n };\n}\n","import { buildFormatLongFn } from \"../../_lib/buildFormatLongFn.js\";\n\nconst dateFormats = {\n full: \"EEEE, MMMM do, y\",\n long: \"MMMM do, y\",\n medium: \"MMM d, y\",\n short: \"MM/dd/yyyy\",\n};\n\nconst timeFormats = {\n full: \"h:mm:ss a zzzz\",\n long: \"h:mm:ss a z\",\n medium: \"h:mm:ss a\",\n short: \"h:mm a\",\n};\n\nconst dateTimeFormats = {\n full: \"{{date}} 'at' {{time}}\",\n long: \"{{date}} 'at' {{time}}\",\n medium: \"{{date}}, {{time}}\",\n short: \"{{date}}, {{time}}\",\n};\n\nexport const formatLong = {\n date: buildFormatLongFn({\n formats: dateFormats,\n defaultWidth: \"full\",\n }),\n\n time: buildFormatLongFn({\n formats: timeFormats,\n defaultWidth: \"full\",\n }),\n\n dateTime: buildFormatLongFn({\n formats: dateTimeFormats,\n defaultWidth: \"full\",\n }),\n};\n","const formatRelativeLocale = {\n lastWeek: \"'last' eeee 'at' p\",\n yesterday: \"'yesterday at' p\",\n today: \"'today at' p\",\n tomorrow: \"'tomorrow at' p\",\n nextWeek: \"eeee 'at' p\",\n other: \"P\",\n};\n\nexport const formatRelative = (token, _date, _baseDate, _options) =>\n formatRelativeLocale[token];\n","/**\n * The localize function argument callback which allows to convert raw value to\n * the actual type.\n *\n * @param value - The value to convert\n *\n * @returns The converted value\n */\n\n/**\n * The map of localized values for each width.\n */\n\n/**\n * The index type of the locale unit value. It types conversion of units of\n * values that don't start at 0 (i.e. quarters).\n */\n\n/**\n * Converts the unit value to the tuple of values.\n */\n\n/**\n * The tuple of localized era values. The first element represents BC,\n * the second element represents AD.\n */\n\n/**\n * The tuple of localized quarter values. The first element represents Q1.\n */\n\n/**\n * The tuple of localized day values. The first element represents Sunday.\n */\n\n/**\n * The tuple of localized month values. The first element represents January.\n */\n\nexport function buildLocalizeFn(args) {\n return (value, options) => {\n const context = options?.context ? String(options.context) : \"standalone\";\n\n let valuesArray;\n if (context === \"formatting\" && args.formattingValues) {\n const defaultWidth = args.defaultFormattingWidth || args.defaultWidth;\n const width = options?.width ? String(options.width) : defaultWidth;\n\n valuesArray =\n args.formattingValues[width] || args.formattingValues[defaultWidth];\n } else {\n const defaultWidth = args.defaultWidth;\n const width = options?.width ? String(options.width) : args.defaultWidth;\n\n valuesArray = args.values[width] || args.values[defaultWidth];\n }\n const index = args.argumentCallback ? args.argumentCallback(value) : value;\n\n // @ts-expect-error - For some reason TypeScript just don't want to match it, no matter how hard we try. I challenge you to try to remove it!\n return valuesArray[index];\n };\n}\n","import { buildLocalizeFn } from \"../../_lib/buildLocalizeFn.js\";\n\nconst eraValues = {\n narrow: [\"B\", \"A\"],\n abbreviated: [\"BC\", \"AD\"],\n wide: [\"Before Christ\", \"Anno Domini\"],\n};\n\nconst quarterValues = {\n narrow: [\"1\", \"2\", \"3\", \"4\"],\n abbreviated: [\"Q1\", \"Q2\", \"Q3\", \"Q4\"],\n wide: [\"1st quarter\", \"2nd quarter\", \"3rd quarter\", \"4th quarter\"],\n};\n\n// Note: in English, the names of days of the week and months are capitalized.\n// If you are making a new locale based on this one, check if the same is true for the language you're working on.\n// Generally, formatted dates should look like they are in the middle of a sentence,\n// e.g. in Spanish language the weekdays and months should be in the lowercase.\nconst monthValues = {\n narrow: [\"J\", \"F\", \"M\", \"A\", \"M\", \"J\", \"J\", \"A\", \"S\", \"O\", \"N\", \"D\"],\n abbreviated: [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\",\n ],\n\n wide: [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n ],\n};\n\nconst dayValues = {\n narrow: [\"S\", \"M\", \"T\", \"W\", \"T\", \"F\", \"S\"],\n short: [\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"],\n abbreviated: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n wide: [\n \"Sunday\",\n \"Monday\",\n \"Tuesday\",\n \"Wednesday\",\n \"Thursday\",\n \"Friday\",\n \"Saturday\",\n ],\n};\n\nconst dayPeriodValues = {\n narrow: {\n am: \"a\",\n pm: \"p\",\n midnight: \"mi\",\n noon: \"n\",\n morning: \"morning\",\n afternoon: \"afternoon\",\n evening: \"evening\",\n night: \"night\",\n },\n abbreviated: {\n am: \"AM\",\n pm: \"PM\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"morning\",\n afternoon: \"afternoon\",\n evening: \"evening\",\n night: \"night\",\n },\n wide: {\n am: \"a.m.\",\n pm: \"p.m.\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"morning\",\n afternoon: \"afternoon\",\n evening: \"evening\",\n night: \"night\",\n },\n};\n\nconst formattingDayPeriodValues = {\n narrow: {\n am: \"a\",\n pm: \"p\",\n midnight: \"mi\",\n noon: \"n\",\n morning: \"in the morning\",\n afternoon: \"in the afternoon\",\n evening: \"in the evening\",\n night: \"at night\",\n },\n abbreviated: {\n am: \"AM\",\n pm: \"PM\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"in the morning\",\n afternoon: \"in the afternoon\",\n evening: \"in the evening\",\n night: \"at night\",\n },\n wide: {\n am: \"a.m.\",\n pm: \"p.m.\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"in the morning\",\n afternoon: \"in the afternoon\",\n evening: \"in the evening\",\n night: \"at night\",\n },\n};\n\nconst ordinalNumber = (dirtyNumber, _options) => {\n const number = Number(dirtyNumber);\n\n // If ordinal numbers depend on context, for example,\n // if they are different for different grammatical genders,\n // use `options.unit`.\n //\n // `unit` can be 'year', 'quarter', 'month', 'week', 'date', 'dayOfYear',\n // 'day', 'hour', 'minute', 'second'.\n\n const rem100 = number % 100;\n if (rem100 > 20 || rem100 < 10) {\n switch (rem100 % 10) {\n case 1:\n return number + \"st\";\n case 2:\n return number + \"nd\";\n case 3:\n return number + \"rd\";\n }\n }\n return number + \"th\";\n};\n\nexport const localize = {\n ordinalNumber,\n\n era: buildLocalizeFn({\n values: eraValues,\n defaultWidth: \"wide\",\n }),\n\n quarter: buildLocalizeFn({\n values: quarterValues,\n defaultWidth: \"wide\",\n argumentCallback: (quarter) => quarter - 1,\n }),\n\n month: buildLocalizeFn({\n values: monthValues,\n defaultWidth: \"wide\",\n }),\n\n day: buildLocalizeFn({\n values: dayValues,\n defaultWidth: \"wide\",\n }),\n\n dayPeriod: buildLocalizeFn({\n values: dayPeriodValues,\n defaultWidth: \"wide\",\n formattingValues: formattingDayPeriodValues,\n defaultFormattingWidth: \"wide\",\n }),\n};\n","export function buildMatchFn(args) {\n return (string, options = {}) => {\n const width = options.width;\n\n const matchPattern =\n (width && args.matchPatterns[width]) ||\n args.matchPatterns[args.defaultMatchWidth];\n const matchResult = string.match(matchPattern);\n\n if (!matchResult) {\n return null;\n }\n const matchedString = matchResult[0];\n\n const parsePatterns =\n (width && args.parsePatterns[width]) ||\n args.parsePatterns[args.defaultParseWidth];\n\n const key = Array.isArray(parsePatterns)\n ? findIndex(parsePatterns, (pattern) => pattern.test(matchedString))\n : // [TODO] -- I challenge you to fix the type\n findKey(parsePatterns, (pattern) => pattern.test(matchedString));\n\n let value;\n\n value = args.valueCallback ? args.valueCallback(key) : key;\n value = options.valueCallback\n ? // [TODO] -- I challenge you to fix the type\n options.valueCallback(value)\n : value;\n\n const rest = string.slice(matchedString.length);\n\n return { value, rest };\n };\n}\n\nfunction findKey(object, predicate) {\n for (const key in object) {\n if (\n Object.prototype.hasOwnProperty.call(object, key) &&\n predicate(object[key])\n ) {\n return key;\n }\n }\n return undefined;\n}\n\nfunction findIndex(array, predicate) {\n for (let key = 0; key < array.length; key++) {\n if (predicate(array[key])) {\n return key;\n }\n }\n return undefined;\n}\n","export function buildMatchPatternFn(args) {\n return (string, options = {}) => {\n const matchResult = string.match(args.matchPattern);\n if (!matchResult) return null;\n const matchedString = matchResult[0];\n\n const parseResult = string.match(args.parsePattern);\n if (!parseResult) return null;\n let value = args.valueCallback\n ? args.valueCallback(parseResult[0])\n : parseResult[0];\n\n // [TODO] I challenge you to fix the type\n value = options.valueCallback ? options.valueCallback(value) : value;\n\n const rest = string.slice(matchedString.length);\n\n return { value, rest };\n };\n}\n","import { buildMatchFn } from \"../../_lib/buildMatchFn.js\";\nimport { buildMatchPatternFn } from \"../../_lib/buildMatchPatternFn.js\";\n\nconst matchOrdinalNumberPattern = /^(\\d+)(th|st|nd|rd)?/i;\nconst parseOrdinalNumberPattern = /\\d+/i;\n\nconst matchEraPatterns = {\n narrow: /^(b|a)/i,\n abbreviated: /^(b\\.?\\s?c\\.?|b\\.?\\s?c\\.?\\s?e\\.?|a\\.?\\s?d\\.?|c\\.?\\s?e\\.?)/i,\n wide: /^(before christ|before common era|anno domini|common era)/i,\n};\nconst parseEraPatterns = {\n any: [/^b/i, /^(a|c)/i],\n};\n\nconst matchQuarterPatterns = {\n narrow: /^[1234]/i,\n abbreviated: /^q[1234]/i,\n wide: /^[1234](th|st|nd|rd)? quarter/i,\n};\nconst parseQuarterPatterns = {\n any: [/1/i, /2/i, /3/i, /4/i],\n};\n\nconst matchMonthPatterns = {\n narrow: /^[jfmasond]/i,\n abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,\n wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i,\n};\nconst parseMonthPatterns = {\n narrow: [\n /^j/i,\n /^f/i,\n /^m/i,\n /^a/i,\n /^m/i,\n /^j/i,\n /^j/i,\n /^a/i,\n /^s/i,\n /^o/i,\n /^n/i,\n /^d/i,\n ],\n\n any: [\n /^ja/i,\n /^f/i,\n /^mar/i,\n /^ap/i,\n /^may/i,\n /^jun/i,\n /^jul/i,\n /^au/i,\n /^s/i,\n /^o/i,\n /^n/i,\n /^d/i,\n ],\n};\n\nconst matchDayPatterns = {\n narrow: /^[smtwf]/i,\n short: /^(su|mo|tu|we|th|fr|sa)/i,\n abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i,\n wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i,\n};\nconst parseDayPatterns = {\n narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i],\n any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i],\n};\n\nconst matchDayPeriodPatterns = {\n narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,\n any: /^([ap]\\.?\\s?m\\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i,\n};\nconst parseDayPeriodPatterns = {\n any: {\n am: /^a/i,\n pm: /^p/i,\n midnight: /^mi/i,\n noon: /^no/i,\n morning: /morning/i,\n afternoon: /afternoon/i,\n evening: /evening/i,\n night: /night/i,\n },\n};\n\nexport const match = {\n ordinalNumber: buildMatchPatternFn({\n matchPattern: matchOrdinalNumberPattern,\n parsePattern: parseOrdinalNumberPattern,\n valueCallback: (value) => parseInt(value, 10),\n }),\n\n era: buildMatchFn({\n matchPatterns: matchEraPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseEraPatterns,\n defaultParseWidth: \"any\",\n }),\n\n quarter: buildMatchFn({\n matchPatterns: matchQuarterPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseQuarterPatterns,\n defaultParseWidth: \"any\",\n valueCallback: (index) => index + 1,\n }),\n\n month: buildMatchFn({\n matchPatterns: matchMonthPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseMonthPatterns,\n defaultParseWidth: \"any\",\n }),\n\n day: buildMatchFn({\n matchPatterns: matchDayPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseDayPatterns,\n defaultParseWidth: \"any\",\n }),\n\n dayPeriod: buildMatchFn({\n matchPatterns: matchDayPeriodPatterns,\n defaultMatchWidth: \"any\",\n parsePatterns: parseDayPeriodPatterns,\n defaultParseWidth: \"any\",\n }),\n};\n","import { formatDistance } from \"./en-US/_lib/formatDistance.js\";\nimport { formatLong } from \"./en-US/_lib/formatLong.js\";\nimport { formatRelative } from \"./en-US/_lib/formatRelative.js\";\nimport { localize } from \"./en-US/_lib/localize.js\";\nimport { match } from \"./en-US/_lib/match.js\";\n\n/**\n * @category Locales\n * @summary English locale (United States).\n * @language English\n * @iso-639-2 eng\n * @author Sasha Koss [@kossnocorp](https://github.com/kossnocorp)\n * @author Lesha Koss [@leshakoss](https://github.com/leshakoss)\n */\nexport const enUS = {\n code: \"en-US\",\n formatDistance: formatDistance,\n formatLong: formatLong,\n formatRelative: formatRelative,\n localize: localize,\n match: match,\n options: {\n weekStartsOn: 0 /* Sunday */,\n firstWeekContainsDate: 1,\n },\n};\n\n// Fallback for modularized imports:\nexport default enUS;\n","import { differenceInCalendarDays } from \"./differenceInCalendarDays.js\";\nimport { startOfYear } from \"./startOfYear.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getDayOfYear} function options.\n */\n\n/**\n * @name getDayOfYear\n * @category Day Helpers\n * @summary Get the day of the year of the given date.\n *\n * @description\n * Get the day of the year of the given date.\n *\n * @param date - The given date\n * @param options - The options\n *\n * @returns The day of year\n *\n * @example\n * // Which day of the year is 2 July 2014?\n * const result = getDayOfYear(new Date(2014, 6, 2))\n * //=> 183\n */\nexport function getDayOfYear(date, options) {\n const _date = toDate(date, options?.in);\n const diff = differenceInCalendarDays(_date, startOfYear(_date));\n const dayOfYear = diff + 1;\n return dayOfYear;\n}\n\n// Fallback for modularized imports:\nexport default getDayOfYear;\n","import { millisecondsInWeek } from \"./constants.js\";\nimport { startOfISOWeek } from \"./startOfISOWeek.js\";\nimport { startOfISOWeekYear } from \"./startOfISOWeekYear.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getISOWeek} function options.\n */\n\n/**\n * @name getISOWeek\n * @category ISO Week Helpers\n * @summary Get the ISO week of the given date.\n *\n * @description\n * Get the ISO week of the given date.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param date - The given date\n * @param options - The options\n *\n * @returns The ISO week\n *\n * @example\n * // Which week of the ISO-week numbering year is 2 January 2005?\n * const result = getISOWeek(new Date(2005, 0, 2))\n * //=> 53\n */\nexport function getISOWeek(date, options) {\n const _date = toDate(date, options?.in);\n const diff = +startOfISOWeek(_date) - +startOfISOWeekYear(_date);\n\n // Round the number of weeks to the nearest integer because the number of\n // milliseconds in a week is not constant (e.g. it's different in the week of\n // the daylight saving time clock shift).\n return Math.round(diff / millisecondsInWeek) + 1;\n}\n\n// Fallback for modularized imports:\nexport default getISOWeek;\n","import { getDefaultOptions } from \"./_lib/defaultOptions.js\";\nimport { constructFrom } from \"./constructFrom.js\";\nimport { startOfWeek } from \"./startOfWeek.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getWeekYear} function options.\n */\n\n/**\n * @name getWeekYear\n * @category Week-Numbering Year Helpers\n * @summary Get the local week-numbering year of the given date.\n *\n * @description\n * Get the local week-numbering year of the given date.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system\n *\n * @param date - The given date\n * @param options - An object with options.\n *\n * @returns The local week-numbering year\n *\n * @example\n * // Which week numbering year is 26 December 2004 with the default settings?\n * const result = getWeekYear(new Date(2004, 11, 26))\n * //=> 2005\n *\n * @example\n * // Which week numbering year is 26 December 2004 if week starts on Saturday?\n * const result = getWeekYear(new Date(2004, 11, 26), { weekStartsOn: 6 })\n * //=> 2004\n *\n * @example\n * // Which week numbering year is 26 December 2004 if the first week contains 4 January?\n * const result = getWeekYear(new Date(2004, 11, 26), { firstWeekContainsDate: 4 })\n * //=> 2004\n */\nexport function getWeekYear(date, options) {\n const _date = toDate(date, options?.in);\n const year = _date.getFullYear();\n\n const defaultOptions = getDefaultOptions();\n const firstWeekContainsDate =\n options?.firstWeekContainsDate ??\n options?.locale?.options?.firstWeekContainsDate ??\n defaultOptions.firstWeekContainsDate ??\n defaultOptions.locale?.options?.firstWeekContainsDate ??\n 1;\n\n const firstWeekOfNextYear = constructFrom(options?.in || date, 0);\n firstWeekOfNextYear.setFullYear(year + 1, 0, firstWeekContainsDate);\n firstWeekOfNextYear.setHours(0, 0, 0, 0);\n const startOfNextYear = startOfWeek(firstWeekOfNextYear, options);\n\n const firstWeekOfThisYear = constructFrom(options?.in || date, 0);\n firstWeekOfThisYear.setFullYear(year, 0, firstWeekContainsDate);\n firstWeekOfThisYear.setHours(0, 0, 0, 0);\n const startOfThisYear = startOfWeek(firstWeekOfThisYear, options);\n\n if (+_date >= +startOfNextYear) {\n return year + 1;\n } else if (+_date >= +startOfThisYear) {\n return year;\n } else {\n return year - 1;\n }\n}\n\n// Fallback for modularized imports:\nexport default getWeekYear;\n","import { getDefaultOptions } from \"./_lib/defaultOptions.js\";\nimport { constructFrom } from \"./constructFrom.js\";\nimport { getWeekYear } from \"./getWeekYear.js\";\nimport { startOfWeek } from \"./startOfWeek.js\";\n\n/**\n * The {@link startOfWeekYear} function options.\n */\n\n/**\n * @name startOfWeekYear\n * @category Week-Numbering Year Helpers\n * @summary Return the start of a local week-numbering year for the given date.\n *\n * @description\n * Return the start of a local week-numbering year.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of a week-numbering year\n *\n * @example\n * // The start of an a week-numbering year for 2 July 2005 with default settings:\n * const result = startOfWeekYear(new Date(2005, 6, 2))\n * //=> Sun Dec 26 2004 00:00:00\n *\n * @example\n * // The start of a week-numbering year for 2 July 2005\n * // if Monday is the first day of week\n * // and 4 January is always in the first week of the year:\n * const result = startOfWeekYear(new Date(2005, 6, 2), {\n * weekStartsOn: 1,\n * firstWeekContainsDate: 4\n * })\n * //=> Mon Jan 03 2005 00:00:00\n */\nexport function startOfWeekYear(date, options) {\n const defaultOptions = getDefaultOptions();\n const firstWeekContainsDate =\n options?.firstWeekContainsDate ??\n options?.locale?.options?.firstWeekContainsDate ??\n defaultOptions.firstWeekContainsDate ??\n defaultOptions.locale?.options?.firstWeekContainsDate ??\n 1;\n\n const year = getWeekYear(date, options);\n const firstWeek = constructFrom(options?.in || date, 0);\n firstWeek.setFullYear(year, 0, firstWeekContainsDate);\n firstWeek.setHours(0, 0, 0, 0);\n const _date = startOfWeek(firstWeek, options);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfWeekYear;\n","import { millisecondsInWeek } from \"./constants.js\";\nimport { startOfWeek } from \"./startOfWeek.js\";\nimport { startOfWeekYear } from \"./startOfWeekYear.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getWeek} function options.\n */\n\n/**\n * @name getWeek\n * @category Week Helpers\n * @summary Get the local week index of the given date.\n *\n * @description\n * Get the local week index of the given date.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system\n *\n * @param date - The given date\n * @param options - An object with options\n *\n * @returns The week\n *\n * @example\n * // Which week of the local week numbering year is 2 January 2005 with default options?\n * const result = getWeek(new Date(2005, 0, 2))\n * //=> 2\n *\n * @example\n * // Which week of the local week numbering year is 2 January 2005,\n * // if Monday is the first day of the week,\n * // and the first week of the year always contains 4 January?\n * const result = getWeek(new Date(2005, 0, 2), {\n * weekStartsOn: 1,\n * firstWeekContainsDate: 4\n * })\n * //=> 53\n */\nexport function getWeek(date, options) {\n const _date = toDate(date, options?.in);\n const diff = +startOfWeek(_date, options) - +startOfWeekYear(_date, options);\n\n // Round the number of weeks to the nearest integer because the number of\n // milliseconds in a week is not constant (e.g. it's different in the week of\n // the daylight saving time clock shift).\n return Math.round(diff / millisecondsInWeek) + 1;\n}\n\n// Fallback for modularized imports:\nexport default getWeek;\n","export function addLeadingZeros(number, targetLength) {\n const sign = number < 0 ? \"-\" : \"\";\n const output = Math.abs(number).toString().padStart(targetLength, \"0\");\n return sign + output;\n}\n","import { addLeadingZeros } from \"../addLeadingZeros.js\";\n\n/*\n * | | Unit | | Unit |\n * |-----|--------------------------------|-----|--------------------------------|\n * | a | AM, PM | A* | |\n * | d | Day of month | D | |\n * | h | Hour [1-12] | H | Hour [0-23] |\n * | m | Minute | M | Month |\n * | s | Second | S | Fraction of second |\n * | y | Year (abs) | Y | |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n */\n\nexport const lightFormatters = {\n // Year\n y(date, token) {\n // From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_tokens\n // | Year | y | yy | yyy | yyyy | yyyyy |\n // |----------|-------|----|-------|-------|-------|\n // | AD 1 | 1 | 01 | 001 | 0001 | 00001 |\n // | AD 12 | 12 | 12 | 012 | 0012 | 00012 |\n // | AD 123 | 123 | 23 | 123 | 0123 | 00123 |\n // | AD 1234 | 1234 | 34 | 1234 | 1234 | 01234 |\n // | AD 12345 | 12345 | 45 | 12345 | 12345 | 12345 |\n\n const signedYear = date.getFullYear();\n // Returns 1 for 1 BC (which is year 0 in JavaScript)\n const year = signedYear > 0 ? signedYear : 1 - signedYear;\n return addLeadingZeros(token === \"yy\" ? year % 100 : year, token.length);\n },\n\n // Month\n M(date, token) {\n const month = date.getMonth();\n return token === \"M\" ? String(month + 1) : addLeadingZeros(month + 1, 2);\n },\n\n // Day of the month\n d(date, token) {\n return addLeadingZeros(date.getDate(), token.length);\n },\n\n // AM or PM\n a(date, token) {\n const dayPeriodEnumValue = date.getHours() / 12 >= 1 ? \"pm\" : \"am\";\n\n switch (token) {\n case \"a\":\n case \"aa\":\n return dayPeriodEnumValue.toUpperCase();\n case \"aaa\":\n return dayPeriodEnumValue;\n case \"aaaaa\":\n return dayPeriodEnumValue[0];\n case \"aaaa\":\n default:\n return dayPeriodEnumValue === \"am\" ? \"a.m.\" : \"p.m.\";\n }\n },\n\n // Hour [1-12]\n h(date, token) {\n return addLeadingZeros(date.getHours() % 12 || 12, token.length);\n },\n\n // Hour [0-23]\n H(date, token) {\n return addLeadingZeros(date.getHours(), token.length);\n },\n\n // Minute\n m(date, token) {\n return addLeadingZeros(date.getMinutes(), token.length);\n },\n\n // Second\n s(date, token) {\n return addLeadingZeros(date.getSeconds(), token.length);\n },\n\n // Fraction of second\n S(date, token) {\n const numberOfDigits = token.length;\n const milliseconds = date.getMilliseconds();\n const fractionalSeconds = Math.trunc(\n milliseconds * Math.pow(10, numberOfDigits - 3),\n );\n return addLeadingZeros(fractionalSeconds, token.length);\n },\n};\n","import { getDayOfYear } from \"../../getDayOfYear.js\";\nimport { getISOWeek } from \"../../getISOWeek.js\";\nimport { getISOWeekYear } from \"../../getISOWeekYear.js\";\nimport { getWeek } from \"../../getWeek.js\";\nimport { getWeekYear } from \"../../getWeekYear.js\";\n\nimport { addLeadingZeros } from \"../addLeadingZeros.js\";\nimport { lightFormatters } from \"./lightFormatters.js\";\n\nconst dayPeriodEnum = {\n am: \"am\",\n pm: \"pm\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"morning\",\n afternoon: \"afternoon\",\n evening: \"evening\",\n night: \"night\",\n};\n\n/*\n * | | Unit | | Unit |\n * |-----|--------------------------------|-----|--------------------------------|\n * | a | AM, PM | A* | Milliseconds in day |\n * | b | AM, PM, noon, midnight | B | Flexible day period |\n * | c | Stand-alone local day of week | C* | Localized hour w/ day period |\n * | d | Day of month | D | Day of year |\n * | e | Local day of week | E | Day of week |\n * | f | | F* | Day of week in month |\n * | g* | Modified Julian day | G | Era |\n * | h | Hour [1-12] | H | Hour [0-23] |\n * | i! | ISO day of week | I! | ISO week of year |\n * | j* | Localized hour w/ day period | J* | Localized hour w/o day period |\n * | k | Hour [1-24] | K | Hour [0-11] |\n * | l* | (deprecated) | L | Stand-alone month |\n * | m | Minute | M | Month |\n * | n | | N | |\n * | o! | Ordinal number modifier | O | Timezone (GMT) |\n * | p! | Long localized time | P! | Long localized date |\n * | q | Stand-alone quarter | Q | Quarter |\n * | r* | Related Gregorian year | R! | ISO week-numbering year |\n * | s | Second | S | Fraction of second |\n * | t! | Seconds timestamp | T! | Milliseconds timestamp |\n * | u | Extended year | U* | Cyclic year |\n * | v* | Timezone (generic non-locat.) | V* | Timezone (location) |\n * | w | Local week of year | W* | Week of month |\n * | x | Timezone (ISO-8601 w/o Z) | X | Timezone (ISO-8601) |\n * | y | Year (abs) | Y | Local week-numbering year |\n * | z | Timezone (specific non-locat.) | Z* | Timezone (aliases) |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n *\n * Letters marked by ! are non-standard, but implemented by date-fns:\n * - `o` modifies the previous token to turn it into an ordinal (see `format` docs)\n * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days,\n * i.e. 7 for Sunday, 1 for Monday, etc.\n * - `I` is ISO week of year, as opposed to `w` which is local week of year.\n * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year.\n * `R` is supposed to be used in conjunction with `I` and `i`\n * for universal ISO week-numbering date, whereas\n * `Y` is supposed to be used in conjunction with `w` and `e`\n * for week-numbering date specific to the locale.\n * - `P` is long localized date format\n * - `p` is long localized time format\n */\n\nexport const formatters = {\n // Era\n G: function (date, token, localize) {\n const era = date.getFullYear() > 0 ? 1 : 0;\n switch (token) {\n // AD, BC\n case \"G\":\n case \"GG\":\n case \"GGG\":\n return localize.era(era, { width: \"abbreviated\" });\n // A, B\n case \"GGGGG\":\n return localize.era(era, { width: \"narrow\" });\n // Anno Domini, Before Christ\n case \"GGGG\":\n default:\n return localize.era(era, { width: \"wide\" });\n }\n },\n\n // Year\n y: function (date, token, localize) {\n // Ordinal number\n if (token === \"yo\") {\n const signedYear = date.getFullYear();\n // Returns 1 for 1 BC (which is year 0 in JavaScript)\n const year = signedYear > 0 ? signedYear : 1 - signedYear;\n return localize.ordinalNumber(year, { unit: \"year\" });\n }\n\n return lightFormatters.y(date, token);\n },\n\n // Local week-numbering year\n Y: function (date, token, localize, options) {\n const signedWeekYear = getWeekYear(date, options);\n // Returns 1 for 1 BC (which is year 0 in JavaScript)\n const weekYear = signedWeekYear > 0 ? signedWeekYear : 1 - signedWeekYear;\n\n // Two digit year\n if (token === \"YY\") {\n const twoDigitYear = weekYear % 100;\n return addLeadingZeros(twoDigitYear, 2);\n }\n\n // Ordinal number\n if (token === \"Yo\") {\n return localize.ordinalNumber(weekYear, { unit: \"year\" });\n }\n\n // Padding\n return addLeadingZeros(weekYear, token.length);\n },\n\n // ISO week-numbering year\n R: function (date, token) {\n const isoWeekYear = getISOWeekYear(date);\n\n // Padding\n return addLeadingZeros(isoWeekYear, token.length);\n },\n\n // Extended year. This is a single number designating the year of this calendar system.\n // The main difference between `y` and `u` localizers are B.C. years:\n // | Year | `y` | `u` |\n // |------|-----|-----|\n // | AC 1 | 1 | 1 |\n // | BC 1 | 1 | 0 |\n // | BC 2 | 2 | -1 |\n // Also `yy` always returns the last two digits of a year,\n // while `uu` pads single digit years to 2 characters and returns other years unchanged.\n u: function (date, token) {\n const year = date.getFullYear();\n return addLeadingZeros(year, token.length);\n },\n\n // Quarter\n Q: function (date, token, localize) {\n const quarter = Math.ceil((date.getMonth() + 1) / 3);\n switch (token) {\n // 1, 2, 3, 4\n case \"Q\":\n return String(quarter);\n // 01, 02, 03, 04\n case \"QQ\":\n return addLeadingZeros(quarter, 2);\n // 1st, 2nd, 3rd, 4th\n case \"Qo\":\n return localize.ordinalNumber(quarter, { unit: \"quarter\" });\n // Q1, Q2, Q3, Q4\n case \"QQQ\":\n return localize.quarter(quarter, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n case \"QQQQQ\":\n return localize.quarter(quarter, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // 1st quarter, 2nd quarter, ...\n case \"QQQQ\":\n default:\n return localize.quarter(quarter, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // Stand-alone quarter\n q: function (date, token, localize) {\n const quarter = Math.ceil((date.getMonth() + 1) / 3);\n switch (token) {\n // 1, 2, 3, 4\n case \"q\":\n return String(quarter);\n // 01, 02, 03, 04\n case \"qq\":\n return addLeadingZeros(quarter, 2);\n // 1st, 2nd, 3rd, 4th\n case \"qo\":\n return localize.ordinalNumber(quarter, { unit: \"quarter\" });\n // Q1, Q2, Q3, Q4\n case \"qqq\":\n return localize.quarter(quarter, {\n width: \"abbreviated\",\n context: \"standalone\",\n });\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n case \"qqqqq\":\n return localize.quarter(quarter, {\n width: \"narrow\",\n context: \"standalone\",\n });\n // 1st quarter, 2nd quarter, ...\n case \"qqqq\":\n default:\n return localize.quarter(quarter, {\n width: \"wide\",\n context: \"standalone\",\n });\n }\n },\n\n // Month\n M: function (date, token, localize) {\n const month = date.getMonth();\n switch (token) {\n case \"M\":\n case \"MM\":\n return lightFormatters.M(date, token);\n // 1st, 2nd, ..., 12th\n case \"Mo\":\n return localize.ordinalNumber(month + 1, { unit: \"month\" });\n // Jan, Feb, ..., Dec\n case \"MMM\":\n return localize.month(month, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n // J, F, ..., D\n case \"MMMMM\":\n return localize.month(month, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // January, February, ..., December\n case \"MMMM\":\n default:\n return localize.month(month, { width: \"wide\", context: \"formatting\" });\n }\n },\n\n // Stand-alone month\n L: function (date, token, localize) {\n const month = date.getMonth();\n switch (token) {\n // 1, 2, ..., 12\n case \"L\":\n return String(month + 1);\n // 01, 02, ..., 12\n case \"LL\":\n return addLeadingZeros(month + 1, 2);\n // 1st, 2nd, ..., 12th\n case \"Lo\":\n return localize.ordinalNumber(month + 1, { unit: \"month\" });\n // Jan, Feb, ..., Dec\n case \"LLL\":\n return localize.month(month, {\n width: \"abbreviated\",\n context: \"standalone\",\n });\n // J, F, ..., D\n case \"LLLLL\":\n return localize.month(month, {\n width: \"narrow\",\n context: \"standalone\",\n });\n // January, February, ..., December\n case \"LLLL\":\n default:\n return localize.month(month, { width: \"wide\", context: \"standalone\" });\n }\n },\n\n // Local week of year\n w: function (date, token, localize, options) {\n const week = getWeek(date, options);\n\n if (token === \"wo\") {\n return localize.ordinalNumber(week, { unit: \"week\" });\n }\n\n return addLeadingZeros(week, token.length);\n },\n\n // ISO week of year\n I: function (date, token, localize) {\n const isoWeek = getISOWeek(date);\n\n if (token === \"Io\") {\n return localize.ordinalNumber(isoWeek, { unit: \"week\" });\n }\n\n return addLeadingZeros(isoWeek, token.length);\n },\n\n // Day of the month\n d: function (date, token, localize) {\n if (token === \"do\") {\n return localize.ordinalNumber(date.getDate(), { unit: \"date\" });\n }\n\n return lightFormatters.d(date, token);\n },\n\n // Day of year\n D: function (date, token, localize) {\n const dayOfYear = getDayOfYear(date);\n\n if (token === \"Do\") {\n return localize.ordinalNumber(dayOfYear, { unit: \"dayOfYear\" });\n }\n\n return addLeadingZeros(dayOfYear, token.length);\n },\n\n // Day of week\n E: function (date, token, localize) {\n const dayOfWeek = date.getDay();\n switch (token) {\n // Tue\n case \"E\":\n case \"EE\":\n case \"EEE\":\n return localize.day(dayOfWeek, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n // T\n case \"EEEEE\":\n return localize.day(dayOfWeek, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // Tu\n case \"EEEEEE\":\n return localize.day(dayOfWeek, {\n width: \"short\",\n context: \"formatting\",\n });\n // Tuesday\n case \"EEEE\":\n default:\n return localize.day(dayOfWeek, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // Local day of week\n e: function (date, token, localize, options) {\n const dayOfWeek = date.getDay();\n const localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;\n switch (token) {\n // Numerical value (Nth day of week with current locale or weekStartsOn)\n case \"e\":\n return String(localDayOfWeek);\n // Padded numerical value\n case \"ee\":\n return addLeadingZeros(localDayOfWeek, 2);\n // 1st, 2nd, ..., 7th\n case \"eo\":\n return localize.ordinalNumber(localDayOfWeek, { unit: \"day\" });\n case \"eee\":\n return localize.day(dayOfWeek, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n // T\n case \"eeeee\":\n return localize.day(dayOfWeek, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // Tu\n case \"eeeeee\":\n return localize.day(dayOfWeek, {\n width: \"short\",\n context: \"formatting\",\n });\n // Tuesday\n case \"eeee\":\n default:\n return localize.day(dayOfWeek, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // Stand-alone local day of week\n c: function (date, token, localize, options) {\n const dayOfWeek = date.getDay();\n const localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;\n switch (token) {\n // Numerical value (same as in `e`)\n case \"c\":\n return String(localDayOfWeek);\n // Padded numerical value\n case \"cc\":\n return addLeadingZeros(localDayOfWeek, token.length);\n // 1st, 2nd, ..., 7th\n case \"co\":\n return localize.ordinalNumber(localDayOfWeek, { unit: \"day\" });\n case \"ccc\":\n return localize.day(dayOfWeek, {\n width: \"abbreviated\",\n context: \"standalone\",\n });\n // T\n case \"ccccc\":\n return localize.day(dayOfWeek, {\n width: \"narrow\",\n context: \"standalone\",\n });\n // Tu\n case \"cccccc\":\n return localize.day(dayOfWeek, {\n width: \"short\",\n context: \"standalone\",\n });\n // Tuesday\n case \"cccc\":\n default:\n return localize.day(dayOfWeek, {\n width: \"wide\",\n context: \"standalone\",\n });\n }\n },\n\n // ISO day of week\n i: function (date, token, localize) {\n const dayOfWeek = date.getDay();\n const isoDayOfWeek = dayOfWeek === 0 ? 7 : dayOfWeek;\n switch (token) {\n // 2\n case \"i\":\n return String(isoDayOfWeek);\n // 02\n case \"ii\":\n return addLeadingZeros(isoDayOfWeek, token.length);\n // 2nd\n case \"io\":\n return localize.ordinalNumber(isoDayOfWeek, { unit: \"day\" });\n // Tue\n case \"iii\":\n return localize.day(dayOfWeek, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n // T\n case \"iiiii\":\n return localize.day(dayOfWeek, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // Tu\n case \"iiiiii\":\n return localize.day(dayOfWeek, {\n width: \"short\",\n context: \"formatting\",\n });\n // Tuesday\n case \"iiii\":\n default:\n return localize.day(dayOfWeek, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // AM or PM\n a: function (date, token, localize) {\n const hours = date.getHours();\n const dayPeriodEnumValue = hours / 12 >= 1 ? \"pm\" : \"am\";\n\n switch (token) {\n case \"a\":\n case \"aa\":\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n case \"aaa\":\n return localize\n .dayPeriod(dayPeriodEnumValue, {\n width: \"abbreviated\",\n context: \"formatting\",\n })\n .toLowerCase();\n case \"aaaaa\":\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"narrow\",\n context: \"formatting\",\n });\n case \"aaaa\":\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // AM, PM, midnight, noon\n b: function (date, token, localize) {\n const hours = date.getHours();\n let dayPeriodEnumValue;\n if (hours === 12) {\n dayPeriodEnumValue = dayPeriodEnum.noon;\n } else if (hours === 0) {\n dayPeriodEnumValue = dayPeriodEnum.midnight;\n } else {\n dayPeriodEnumValue = hours / 12 >= 1 ? \"pm\" : \"am\";\n }\n\n switch (token) {\n case \"b\":\n case \"bb\":\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n case \"bbb\":\n return localize\n .dayPeriod(dayPeriodEnumValue, {\n width: \"abbreviated\",\n context: \"formatting\",\n })\n .toLowerCase();\n case \"bbbbb\":\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"narrow\",\n context: \"formatting\",\n });\n case \"bbbb\":\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // in the morning, in the afternoon, in the evening, at night\n B: function (date, token, localize) {\n const hours = date.getHours();\n let dayPeriodEnumValue;\n if (hours >= 17) {\n dayPeriodEnumValue = dayPeriodEnum.evening;\n } else if (hours >= 12) {\n dayPeriodEnumValue = dayPeriodEnum.afternoon;\n } else if (hours >= 4) {\n dayPeriodEnumValue = dayPeriodEnum.morning;\n } else {\n dayPeriodEnumValue = dayPeriodEnum.night;\n }\n\n switch (token) {\n case \"B\":\n case \"BB\":\n case \"BBB\":\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n case \"BBBBB\":\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"narrow\",\n context: \"formatting\",\n });\n case \"BBBB\":\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // Hour [1-12]\n h: function (date, token, localize) {\n if (token === \"ho\") {\n let hours = date.getHours() % 12;\n if (hours === 0) hours = 12;\n return localize.ordinalNumber(hours, { unit: \"hour\" });\n }\n\n return lightFormatters.h(date, token);\n },\n\n // Hour [0-23]\n H: function (date, token, localize) {\n if (token === \"Ho\") {\n return localize.ordinalNumber(date.getHours(), { unit: \"hour\" });\n }\n\n return lightFormatters.H(date, token);\n },\n\n // Hour [0-11]\n K: function (date, token, localize) {\n const hours = date.getHours() % 12;\n\n if (token === \"Ko\") {\n return localize.ordinalNumber(hours, { unit: \"hour\" });\n }\n\n return addLeadingZeros(hours, token.length);\n },\n\n // Hour [1-24]\n k: function (date, token, localize) {\n let hours = date.getHours();\n if (hours === 0) hours = 24;\n\n if (token === \"ko\") {\n return localize.ordinalNumber(hours, { unit: \"hour\" });\n }\n\n return addLeadingZeros(hours, token.length);\n },\n\n // Minute\n m: function (date, token, localize) {\n if (token === \"mo\") {\n return localize.ordinalNumber(date.getMinutes(), { unit: \"minute\" });\n }\n\n return lightFormatters.m(date, token);\n },\n\n // Second\n s: function (date, token, localize) {\n if (token === \"so\") {\n return localize.ordinalNumber(date.getSeconds(), { unit: \"second\" });\n }\n\n return lightFormatters.s(date, token);\n },\n\n // Fraction of second\n S: function (date, token) {\n return lightFormatters.S(date, token);\n },\n\n // Timezone (ISO-8601. If offset is 0, output is always `'Z'`)\n X: function (date, token, _localize) {\n const timezoneOffset = date.getTimezoneOffset();\n\n if (timezoneOffset === 0) {\n return \"Z\";\n }\n\n switch (token) {\n // Hours and optional minutes\n case \"X\":\n return formatTimezoneWithOptionalMinutes(timezoneOffset);\n\n // Hours, minutes and optional seconds without `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `XX`\n case \"XXXX\":\n case \"XX\": // Hours and minutes without `:` delimiter\n return formatTimezone(timezoneOffset);\n\n // Hours, minutes and optional seconds with `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `XXX`\n case \"XXXXX\":\n case \"XXX\": // Hours and minutes with `:` delimiter\n default:\n return formatTimezone(timezoneOffset, \":\");\n }\n },\n\n // Timezone (ISO-8601. If offset is 0, output is `'+00:00'` or equivalent)\n x: function (date, token, _localize) {\n const timezoneOffset = date.getTimezoneOffset();\n\n switch (token) {\n // Hours and optional minutes\n case \"x\":\n return formatTimezoneWithOptionalMinutes(timezoneOffset);\n\n // Hours, minutes and optional seconds without `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `xx`\n case \"xxxx\":\n case \"xx\": // Hours and minutes without `:` delimiter\n return formatTimezone(timezoneOffset);\n\n // Hours, minutes and optional seconds with `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `xxx`\n case \"xxxxx\":\n case \"xxx\": // Hours and minutes with `:` delimiter\n default:\n return formatTimezone(timezoneOffset, \":\");\n }\n },\n\n // Timezone (GMT)\n O: function (date, token, _localize) {\n const timezoneOffset = date.getTimezoneOffset();\n\n switch (token) {\n // Short\n case \"O\":\n case \"OO\":\n case \"OOO\":\n return \"GMT\" + formatTimezoneShort(timezoneOffset, \":\");\n // Long\n case \"OOOO\":\n default:\n return \"GMT\" + formatTimezone(timezoneOffset, \":\");\n }\n },\n\n // Timezone (specific non-location)\n z: function (date, token, _localize) {\n const timezoneOffset = date.getTimezoneOffset();\n\n switch (token) {\n // Short\n case \"z\":\n case \"zz\":\n case \"zzz\":\n return \"GMT\" + formatTimezoneShort(timezoneOffset, \":\");\n // Long\n case \"zzzz\":\n default:\n return \"GMT\" + formatTimezone(timezoneOffset, \":\");\n }\n },\n\n // Seconds timestamp\n t: function (date, token, _localize) {\n const timestamp = Math.trunc(+date / 1000);\n return addLeadingZeros(timestamp, token.length);\n },\n\n // Milliseconds timestamp\n T: function (date, token, _localize) {\n return addLeadingZeros(+date, token.length);\n },\n};\n\nfunction formatTimezoneShort(offset, delimiter = \"\") {\n const sign = offset > 0 ? \"-\" : \"+\";\n const absOffset = Math.abs(offset);\n const hours = Math.trunc(absOffset / 60);\n const minutes = absOffset % 60;\n if (minutes === 0) {\n return sign + String(hours);\n }\n return sign + String(hours) + delimiter + addLeadingZeros(minutes, 2);\n}\n\nfunction formatTimezoneWithOptionalMinutes(offset, delimiter) {\n if (offset % 60 === 0) {\n const sign = offset > 0 ? \"-\" : \"+\";\n return sign + addLeadingZeros(Math.abs(offset) / 60, 2);\n }\n return formatTimezone(offset, delimiter);\n}\n\nfunction formatTimezone(offset, delimiter = \"\") {\n const sign = offset > 0 ? \"-\" : \"+\";\n const absOffset = Math.abs(offset);\n const hours = addLeadingZeros(Math.trunc(absOffset / 60), 2);\n const minutes = addLeadingZeros(absOffset % 60, 2);\n return sign + hours + delimiter + minutes;\n}\n","const dateLongFormatter = (pattern, formatLong) => {\n switch (pattern) {\n case \"P\":\n return formatLong.date({ width: \"short\" });\n case \"PP\":\n return formatLong.date({ width: \"medium\" });\n case \"PPP\":\n return formatLong.date({ width: \"long\" });\n case \"PPPP\":\n default:\n return formatLong.date({ width: \"full\" });\n }\n};\n\nconst timeLongFormatter = (pattern, formatLong) => {\n switch (pattern) {\n case \"p\":\n return formatLong.time({ width: \"short\" });\n case \"pp\":\n return formatLong.time({ width: \"medium\" });\n case \"ppp\":\n return formatLong.time({ width: \"long\" });\n case \"pppp\":\n default:\n return formatLong.time({ width: \"full\" });\n }\n};\n\nconst dateTimeLongFormatter = (pattern, formatLong) => {\n const matchResult = pattern.match(/(P+)(p+)?/) || [];\n const datePattern = matchResult[1];\n const timePattern = matchResult[2];\n\n if (!timePattern) {\n return dateLongFormatter(pattern, formatLong);\n }\n\n let dateTimeFormat;\n\n switch (datePattern) {\n case \"P\":\n dateTimeFormat = formatLong.dateTime({ width: \"short\" });\n break;\n case \"PP\":\n dateTimeFormat = formatLong.dateTime({ width: \"medium\" });\n break;\n case \"PPP\":\n dateTimeFormat = formatLong.dateTime({ width: \"long\" });\n break;\n case \"PPPP\":\n default:\n dateTimeFormat = formatLong.dateTime({ width: \"full\" });\n break;\n }\n\n return dateTimeFormat\n .replace(\"{{date}}\", dateLongFormatter(datePattern, formatLong))\n .replace(\"{{time}}\", timeLongFormatter(timePattern, formatLong));\n};\n\nexport const longFormatters = {\n p: timeLongFormatter,\n P: dateTimeLongFormatter,\n};\n","const dayOfYearTokenRE = /^D+$/;\nconst weekYearTokenRE = /^Y+$/;\n\nconst throwTokens = [\"D\", \"DD\", \"YY\", \"YYYY\"];\n\nexport function isProtectedDayOfYearToken(token) {\n return dayOfYearTokenRE.test(token);\n}\n\nexport function isProtectedWeekYearToken(token) {\n return weekYearTokenRE.test(token);\n}\n\nexport function warnOrThrowProtectedError(token, format, input) {\n const _message = message(token, format, input);\n console.warn(_message);\n if (throwTokens.includes(token)) throw new RangeError(_message);\n}\n\nfunction message(token, format, input) {\n const subject = token[0] === \"Y\" ? \"years\" : \"days of the month\";\n return `Use \\`${token.toLowerCase()}\\` instead of \\`${token}\\` (in \\`${format}\\`) for formatting ${subject} to the input \\`${input}\\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`;\n}\n","import { defaultLocale } from \"./_lib/defaultLocale.js\";\nimport { getDefaultOptions } from \"./_lib/defaultOptions.js\";\nimport { formatters } from \"./_lib/format/formatters.js\";\nimport { longFormatters } from \"./_lib/format/longFormatters.js\";\nimport {\n isProtectedDayOfYearToken,\n isProtectedWeekYearToken,\n warnOrThrowProtectedError,\n} from \"./_lib/protectedTokens.js\";\nimport { isValid } from \"./isValid.js\";\nimport { toDate } from \"./toDate.js\";\n\n// Rexports of internal for libraries to use.\n// See: https://github.com/date-fns/date-fns/issues/3638#issuecomment-1877082874\nexport { formatters, longFormatters };\n\n// This RegExp consists of three parts separated by `|`:\n// - [yYQqMLwIdDecihHKkms]o matches any available ordinal number token\n// (one of the certain letters followed by `o`)\n// - (\\w)\\1* matches any sequences of the same letter\n// - '' matches two quote characters in a row\n// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('),\n// except a single quote symbol, which ends the sequence.\n// Two quote characters do not end the sequence.\n// If there is no matching single quote\n// then the sequence will continue until the end of the string.\n// - . matches any single character unmatched by previous parts of the RegExps\nconst formattingTokensRegExp =\n /[yYQqMLwIdDecihHKkms]o|(\\w)\\1*|''|'(''|[^'])+('|$)|./g;\n\n// This RegExp catches symbols escaped by quotes, and also\n// sequences of symbols P, p, and the combinations like `PPPPPPPppppp`\nconst longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g;\n\nconst escapedStringRegExp = /^'([^]*?)'?$/;\nconst doubleQuoteRegExp = /''/g;\nconst unescapedLatinCharacterRegExp = /[a-zA-Z]/;\n\nexport { format as formatDate };\n\n/**\n * The {@link format} function options.\n */\n\n/**\n * @name format\n * @alias formatDate\n * @category Common Helpers\n * @summary Format the date.\n *\n * @description\n * Return the formatted date string in the given format. The result may vary by locale.\n *\n * > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries.\n * > See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * The characters wrapped between two single quotes characters (') are escaped.\n * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.\n * (see the last example)\n *\n * Format of the string is based on Unicode Technical Standard #35:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * with a few additions (see note 7 below the table).\n *\n * Accepted patterns:\n * | Unit | Pattern | Result examples | Notes |\n * |---------------------------------|---------|-----------------------------------|-------|\n * | Era | G..GGG | AD, BC | |\n * | | GGGG | Anno Domini, Before Christ | 2 |\n * | | GGGGG | A, B | |\n * | Calendar year | y | 44, 1, 1900, 2017 | 5 |\n * | | yo | 44th, 1st, 0th, 17th | 5,7 |\n * | | yy | 44, 01, 00, 17 | 5 |\n * | | yyy | 044, 001, 1900, 2017 | 5 |\n * | | yyyy | 0044, 0001, 1900, 2017 | 5 |\n * | | yyyyy | ... | 3,5 |\n * | Local week-numbering year | Y | 44, 1, 1900, 2017 | 5 |\n * | | Yo | 44th, 1st, 1900th, 2017th | 5,7 |\n * | | YY | 44, 01, 00, 17 | 5,8 |\n * | | YYY | 044, 001, 1900, 2017 | 5 |\n * | | YYYY | 0044, 0001, 1900, 2017 | 5,8 |\n * | | YYYYY | ... | 3,5 |\n * | ISO week-numbering year | R | -43, 0, 1, 1900, 2017 | 5,7 |\n * | | RR | -43, 00, 01, 1900, 2017 | 5,7 |\n * | | RRR | -043, 000, 001, 1900, 2017 | 5,7 |\n * | | RRRR | -0043, 0000, 0001, 1900, 2017 | 5,7 |\n * | | RRRRR | ... | 3,5,7 |\n * | Extended year | u | -43, 0, 1, 1900, 2017 | 5 |\n * | | uu | -43, 01, 1900, 2017 | 5 |\n * | | uuu | -043, 001, 1900, 2017 | 5 |\n * | | uuuu | -0043, 0001, 1900, 2017 | 5 |\n * | | uuuuu | ... | 3,5 |\n * | Quarter (formatting) | Q | 1, 2, 3, 4 | |\n * | | Qo | 1st, 2nd, 3rd, 4th | 7 |\n * | | QQ | 01, 02, 03, 04 | |\n * | | QQQ | Q1, Q2, Q3, Q4 | |\n * | | QQQQ | 1st quarter, 2nd quarter, ... | 2 |\n * | | QQQQQ | 1, 2, 3, 4 | 4 |\n * | Quarter (stand-alone) | q | 1, 2, 3, 4 | |\n * | | qo | 1st, 2nd, 3rd, 4th | 7 |\n * | | qq | 01, 02, 03, 04 | |\n * | | qqq | Q1, Q2, Q3, Q4 | |\n * | | qqqq | 1st quarter, 2nd quarter, ... | 2 |\n * | | qqqqq | 1, 2, 3, 4 | 4 |\n * | Month (formatting) | M | 1, 2, ..., 12 | |\n * | | Mo | 1st, 2nd, ..., 12th | 7 |\n * | | MM | 01, 02, ..., 12 | |\n * | | MMM | Jan, Feb, ..., Dec | |\n * | | MMMM | January, February, ..., December | 2 |\n * | | MMMMM | J, F, ..., D | |\n * | Month (stand-alone) | L | 1, 2, ..., 12 | |\n * | | Lo | 1st, 2nd, ..., 12th | 7 |\n * | | LL | 01, 02, ..., 12 | |\n * | | LLL | Jan, Feb, ..., Dec | |\n * | | LLLL | January, February, ..., December | 2 |\n * | | LLLLL | J, F, ..., D | |\n * | Local week of year | w | 1, 2, ..., 53 | |\n * | | wo | 1st, 2nd, ..., 53th | 7 |\n * | | ww | 01, 02, ..., 53 | |\n * | ISO week of year | I | 1, 2, ..., 53 | 7 |\n * | | Io | 1st, 2nd, ..., 53th | 7 |\n * | | II | 01, 02, ..., 53 | 7 |\n * | Day of month | d | 1, 2, ..., 31 | |\n * | | do | 1st, 2nd, ..., 31st | 7 |\n * | | dd | 01, 02, ..., 31 | |\n * | Day of year | D | 1, 2, ..., 365, 366 | 9 |\n * | | Do | 1st, 2nd, ..., 365th, 366th | 7 |\n * | | DD | 01, 02, ..., 365, 366 | 9 |\n * | | DDD | 001, 002, ..., 365, 366 | |\n * | | DDDD | ... | 3 |\n * | Day of week (formatting) | E..EEE | Mon, Tue, Wed, ..., Sun | |\n * | | EEEE | Monday, Tuesday, ..., Sunday | 2 |\n * | | EEEEE | M, T, W, T, F, S, S | |\n * | | EEEEEE | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | ISO day of week (formatting) | i | 1, 2, 3, ..., 7 | 7 |\n * | | io | 1st, 2nd, ..., 7th | 7 |\n * | | ii | 01, 02, ..., 07 | 7 |\n * | | iii | Mon, Tue, Wed, ..., Sun | 7 |\n * | | iiii | Monday, Tuesday, ..., Sunday | 2,7 |\n * | | iiiii | M, T, W, T, F, S, S | 7 |\n * | | iiiiii | Mo, Tu, We, Th, Fr, Sa, Su | 7 |\n * | Local day of week (formatting) | e | 2, 3, 4, ..., 1 | |\n * | | eo | 2nd, 3rd, ..., 1st | 7 |\n * | | ee | 02, 03, ..., 01 | |\n * | | eee | Mon, Tue, Wed, ..., Sun | |\n * | | eeee | Monday, Tuesday, ..., Sunday | 2 |\n * | | eeeee | M, T, W, T, F, S, S | |\n * | | eeeeee | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | Local day of week (stand-alone) | c | 2, 3, 4, ..., 1 | |\n * | | co | 2nd, 3rd, ..., 1st | 7 |\n * | | cc | 02, 03, ..., 01 | |\n * | | ccc | Mon, Tue, Wed, ..., Sun | |\n * | | cccc | Monday, Tuesday, ..., Sunday | 2 |\n * | | ccccc | M, T, W, T, F, S, S | |\n * | | cccccc | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | AM, PM | a..aa | AM, PM | |\n * | | aaa | am, pm | |\n * | | aaaa | a.m., p.m. | 2 |\n * | | aaaaa | a, p | |\n * | AM, PM, noon, midnight | b..bb | AM, PM, noon, midnight | |\n * | | bbb | am, pm, noon, midnight | |\n * | | bbbb | a.m., p.m., noon, midnight | 2 |\n * | | bbbbb | a, p, n, mi | |\n * | Flexible day period | B..BBB | at night, in the morning, ... | |\n * | | BBBB | at night, in the morning, ... | 2 |\n * | | BBBBB | at night, in the morning, ... | |\n * | Hour [1-12] | h | 1, 2, ..., 11, 12 | |\n * | | ho | 1st, 2nd, ..., 11th, 12th | 7 |\n * | | hh | 01, 02, ..., 11, 12 | |\n * | Hour [0-23] | H | 0, 1, 2, ..., 23 | |\n * | | Ho | 0th, 1st, 2nd, ..., 23rd | 7 |\n * | | HH | 00, 01, 02, ..., 23 | |\n * | Hour [0-11] | K | 1, 2, ..., 11, 0 | |\n * | | Ko | 1st, 2nd, ..., 11th, 0th | 7 |\n * | | KK | 01, 02, ..., 11, 00 | |\n * | Hour [1-24] | k | 24, 1, 2, ..., 23 | |\n * | | ko | 24th, 1st, 2nd, ..., 23rd | 7 |\n * | | kk | 24, 01, 02, ..., 23 | |\n * | Minute | m | 0, 1, ..., 59 | |\n * | | mo | 0th, 1st, ..., 59th | 7 |\n * | | mm | 00, 01, ..., 59 | |\n * | Second | s | 0, 1, ..., 59 | |\n * | | so | 0th, 1st, ..., 59th | 7 |\n * | | ss | 00, 01, ..., 59 | |\n * | Fraction of second | S | 0, 1, ..., 9 | |\n * | | SS | 00, 01, ..., 99 | |\n * | | SSS | 000, 001, ..., 999 | |\n * | | SSSS | ... | 3 |\n * | Timezone (ISO-8601 w/ Z) | X | -08, +0530, Z | |\n * | | XX | -0800, +0530, Z | |\n * | | XXX | -08:00, +05:30, Z | |\n * | | XXXX | -0800, +0530, Z, +123456 | 2 |\n * | | XXXXX | -08:00, +05:30, Z, +12:34:56 | |\n * | Timezone (ISO-8601 w/o Z) | x | -08, +0530, +00 | |\n * | | xx | -0800, +0530, +0000 | |\n * | | xxx | -08:00, +05:30, +00:00 | 2 |\n * | | xxxx | -0800, +0530, +0000, +123456 | |\n * | | xxxxx | -08:00, +05:30, +00:00, +12:34:56 | |\n * | Timezone (GMT) | O...OOO | GMT-8, GMT+5:30, GMT+0 | |\n * | | OOOO | GMT-08:00, GMT+05:30, GMT+00:00 | 2 |\n * | Timezone (specific non-locat.) | z...zzz | GMT-8, GMT+5:30, GMT+0 | 6 |\n * | | zzzz | GMT-08:00, GMT+05:30, GMT+00:00 | 2,6 |\n * | Seconds timestamp | t | 512969520 | 7 |\n * | | tt | ... | 3,7 |\n * | Milliseconds timestamp | T | 512969520900 | 7 |\n * | | TT | ... | 3,7 |\n * | Long localized date | P | 04/29/1453 | 7 |\n * | | PP | Apr 29, 1453 | 7 |\n * | | PPP | April 29th, 1453 | 7 |\n * | | PPPP | Friday, April 29th, 1453 | 2,7 |\n * | Long localized time | p | 12:00 AM | 7 |\n * | | pp | 12:00:00 AM | 7 |\n * | | ppp | 12:00:00 AM GMT+2 | 7 |\n * | | pppp | 12:00:00 AM GMT+02:00 | 2,7 |\n * | Combination of date and time | Pp | 04/29/1453, 12:00 AM | 7 |\n * | | PPpp | Apr 29, 1453, 12:00:00 AM | 7 |\n * | | PPPppp | April 29th, 1453 at ... | 7 |\n * | | PPPPpppp| Friday, April 29th, 1453 at ... | 2,7 |\n * Notes:\n * 1. \"Formatting\" units (e.g. formatting quarter) in the default en-US locale\n * are the same as \"stand-alone\" units, but are different in some languages.\n * \"Formatting\" units are declined according to the rules of the language\n * in the context of a date. \"Stand-alone\" units are always nominative singular:\n *\n * `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'`\n *\n * `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'`\n *\n * 2. Any sequence of the identical letters is a pattern, unless it is escaped by\n * the single quote characters (see below).\n * If the sequence is longer than listed in table (e.g. `EEEEEEEEEEE`)\n * the output will be the same as default pattern for this unit, usually\n * the longest one (in case of ISO weekdays, `EEEE`). Default patterns for units\n * are marked with \"2\" in the last column of the table.\n *\n * `format(new Date(2017, 10, 6), 'MMM') //=> 'Nov'`\n *\n * `format(new Date(2017, 10, 6), 'MMMM') //=> 'November'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMM') //=> 'N'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMMM') //=> 'November'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMMMM') //=> 'November'`\n *\n * 3. Some patterns could be unlimited length (such as `yyyyyyyy`).\n * The output will be padded with zeros to match the length of the pattern.\n *\n * `format(new Date(2017, 10, 6), 'yyyyyyyy') //=> '00002017'`\n *\n * 4. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.\n * These tokens represent the shortest form of the quarter.\n *\n * 5. The main difference between `y` and `u` patterns are B.C. years:\n *\n * | Year | `y` | `u` |\n * |------|-----|-----|\n * | AC 1 | 1 | 1 |\n * | BC 1 | 1 | 0 |\n * | BC 2 | 2 | -1 |\n *\n * Also `yy` always returns the last two digits of a year,\n * while `uu` pads single digit years to 2 characters and returns other years unchanged:\n *\n * | Year | `yy` | `uu` |\n * |------|------|------|\n * | 1 | 01 | 01 |\n * | 14 | 14 | 14 |\n * | 376 | 76 | 376 |\n * | 1453 | 53 | 1453 |\n *\n * The same difference is true for local and ISO week-numbering years (`Y` and `R`),\n * except local week-numbering years are dependent on `options.weekStartsOn`\n * and `options.firstWeekContainsDate` (compare [getISOWeekYear](https://date-fns.org/docs/getISOWeekYear)\n * and [getWeekYear](https://date-fns.org/docs/getWeekYear)).\n *\n * 6. Specific non-location timezones are currently unavailable in `date-fns`,\n * so right now these tokens fall back to GMT timezones.\n *\n * 7. These patterns are not in the Unicode Technical Standard #35:\n * - `i`: ISO day of week\n * - `I`: ISO week of year\n * - `R`: ISO week-numbering year\n * - `t`: seconds timestamp\n * - `T`: milliseconds timestamp\n * - `o`: ordinal number modifier\n * - `P`: long localized date\n * - `p`: long localized time\n *\n * 8. `YY` and `YYYY` tokens represent week-numbering years but they are often confused with years.\n * You should enable `options.useAdditionalWeekYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * 9. `D` and `DD` tokens represent days of the year but they are often confused with days of the month.\n * You should enable `options.useAdditionalDayOfYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * @param date - The original date\n * @param format - The string of tokens\n * @param options - An object with options\n *\n * @returns The formatted date string\n *\n * @throws `date` must not be Invalid Date\n * @throws `options.locale` must contain `localize` property\n * @throws `options.locale` must contain `formatLong` property\n * @throws use `yyyy` instead of `YYYY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `yy` instead of `YY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `d` instead of `D` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `dd` instead of `DD` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws format string contains an unescaped latin alphabet character\n *\n * @example\n * // Represent 11 February 2014 in middle-endian format:\n * const result = format(new Date(2014, 1, 11), 'MM/dd/yyyy')\n * //=> '02/11/2014'\n *\n * @example\n * // Represent 2 July 2014 in Esperanto:\n * import { eoLocale } from 'date-fns/locale/eo'\n * const result = format(new Date(2014, 6, 2), \"do 'de' MMMM yyyy\", {\n * locale: eoLocale\n * })\n * //=> '2-a de julio 2014'\n *\n * @example\n * // Escape string by single quote characters:\n * const result = format(new Date(2014, 6, 2, 15), \"h 'o''clock'\")\n * //=> \"3 o'clock\"\n */\nexport function format(date, formatStr, options) {\n const defaultOptions = getDefaultOptions();\n const locale = options?.locale ?? defaultOptions.locale ?? defaultLocale;\n\n const firstWeekContainsDate =\n options?.firstWeekContainsDate ??\n options?.locale?.options?.firstWeekContainsDate ??\n defaultOptions.firstWeekContainsDate ??\n defaultOptions.locale?.options?.firstWeekContainsDate ??\n 1;\n\n const weekStartsOn =\n options?.weekStartsOn ??\n options?.locale?.options?.weekStartsOn ??\n defaultOptions.weekStartsOn ??\n defaultOptions.locale?.options?.weekStartsOn ??\n 0;\n\n const originalDate = toDate(date, options?.in);\n\n if (!isValid(originalDate)) {\n throw new RangeError(\"Invalid time value\");\n }\n\n let parts = formatStr\n .match(longFormattingTokensRegExp)\n .map((substring) => {\n const firstCharacter = substring[0];\n if (firstCharacter === \"p\" || firstCharacter === \"P\") {\n const longFormatter = longFormatters[firstCharacter];\n return longFormatter(substring, locale.formatLong);\n }\n return substring;\n })\n .join(\"\")\n .match(formattingTokensRegExp)\n .map((substring) => {\n // Replace two single quote characters with one single quote character\n if (substring === \"''\") {\n return { isToken: false, value: \"'\" };\n }\n\n const firstCharacter = substring[0];\n if (firstCharacter === \"'\") {\n return { isToken: false, value: cleanEscapedString(substring) };\n }\n\n if (formatters[firstCharacter]) {\n return { isToken: true, value: substring };\n }\n\n if (firstCharacter.match(unescapedLatinCharacterRegExp)) {\n throw new RangeError(\n \"Format string contains an unescaped latin alphabet character `\" +\n firstCharacter +\n \"`\",\n );\n }\n\n return { isToken: false, value: substring };\n });\n\n // invoke localize preprocessor (only for french locales at the moment)\n if (locale.localize.preprocessor) {\n parts = locale.localize.preprocessor(originalDate, parts);\n }\n\n const formatterOptions = {\n firstWeekContainsDate,\n weekStartsOn,\n locale,\n };\n\n return parts\n .map((part) => {\n if (!part.isToken) return part.value;\n\n const token = part.value;\n\n if (\n (!options?.useAdditionalWeekYearTokens &&\n isProtectedWeekYearToken(token)) ||\n (!options?.useAdditionalDayOfYearTokens &&\n isProtectedDayOfYearToken(token))\n ) {\n warnOrThrowProtectedError(token, formatStr, String(date));\n }\n\n const formatter = formatters[token[0]];\n return formatter(originalDate, token, locale.localize, formatterOptions);\n })\n .join(\"\");\n}\n\nfunction cleanEscapedString(input) {\n const matched = input.match(escapedStringRegExp);\n\n if (!matched) {\n return input;\n }\n\n return matched[1].replace(doubleQuoteRegExp, \"'\");\n}\n\n// Fallback for modularized imports:\nexport default format;\n","const formatDistanceLocale = {\n lessThanXSeconds: {\n one: \"menos de um segundo\",\n other: \"menos de {{count}} segundos\",\n },\n\n xSeconds: {\n one: \"1 segundo\",\n other: \"{{count}} segundos\",\n },\n\n halfAMinute: \"meio minuto\",\n\n lessThanXMinutes: {\n one: \"menos de um minuto\",\n other: \"menos de {{count}} minutos\",\n },\n\n xMinutes: {\n one: \"1 minuto\",\n other: \"{{count}} minutos\",\n },\n\n aboutXHours: {\n one: \"cerca de 1 hora\",\n other: \"cerca de {{count}} horas\",\n },\n\n xHours: {\n one: \"1 hora\",\n other: \"{{count}} horas\",\n },\n\n xDays: {\n one: \"1 dia\",\n other: \"{{count}} dias\",\n },\n\n aboutXWeeks: {\n one: \"cerca de 1 semana\",\n other: \"cerca de {{count}} semanas\",\n },\n\n xWeeks: {\n one: \"1 semana\",\n other: \"{{count}} semanas\",\n },\n\n aboutXMonths: {\n one: \"cerca de 1 mês\",\n other: \"cerca de {{count}} meses\",\n },\n\n xMonths: {\n one: \"1 mês\",\n other: \"{{count}} meses\",\n },\n\n aboutXYears: {\n one: \"cerca de 1 ano\",\n other: \"cerca de {{count}} anos\",\n },\n\n xYears: {\n one: \"1 ano\",\n other: \"{{count}} anos\",\n },\n\n overXYears: {\n one: \"mais de 1 ano\",\n other: \"mais de {{count}} anos\",\n },\n\n almostXYears: {\n one: \"quase 1 ano\",\n other: \"quase {{count}} anos\",\n },\n};\n\nexport const formatDistance = (token, count, options) => {\n let result;\n\n const tokenValue = formatDistanceLocale[token];\n if (typeof tokenValue === \"string\") {\n result = tokenValue;\n } else if (count === 1) {\n result = tokenValue.one;\n } else {\n result = tokenValue.other.replace(\"{{count}}\", String(count));\n }\n\n if (options?.addSuffix) {\n if (options.comparison && options.comparison > 0) {\n return \"em \" + result;\n } else {\n return \"há \" + result;\n }\n }\n\n return result;\n};\n","import { buildFormatLongFn } from \"../../_lib/buildFormatLongFn.js\";\n\nconst dateFormats = {\n full: \"EEEE, d 'de' MMMM 'de' y\",\n long: \"d 'de' MMMM 'de' y\",\n medium: \"d MMM y\",\n short: \"dd/MM/yyyy\",\n};\n\nconst timeFormats = {\n full: \"HH:mm:ss zzzz\",\n long: \"HH:mm:ss z\",\n medium: \"HH:mm:ss\",\n short: \"HH:mm\",\n};\n\nconst dateTimeFormats = {\n full: \"{{date}} 'às' {{time}}\",\n long: \"{{date}} 'às' {{time}}\",\n medium: \"{{date}}, {{time}}\",\n short: \"{{date}}, {{time}}\",\n};\n\nexport const formatLong = {\n date: buildFormatLongFn({\n formats: dateFormats,\n defaultWidth: \"full\",\n }),\n\n time: buildFormatLongFn({\n formats: timeFormats,\n defaultWidth: \"full\",\n }),\n\n dateTime: buildFormatLongFn({\n formats: dateTimeFormats,\n defaultWidth: \"full\",\n }),\n};\n","const formatRelativeLocale = {\n lastWeek: (date) => {\n const weekday = date.getDay();\n const last = weekday === 0 || weekday === 6 ? \"último\" : \"última\";\n return \"'\" + last + \"' eeee 'às' p\";\n },\n yesterday: \"'ontem às' p\",\n today: \"'hoje às' p\",\n tomorrow: \"'amanhã às' p\",\n nextWeek: \"eeee 'às' p\",\n other: \"P\",\n};\n\nexport const formatRelative = (token, date, _baseDate, _options) => {\n const format = formatRelativeLocale[token];\n\n if (typeof format === \"function\") {\n return format(date);\n }\n\n return format;\n};\n","import { buildLocalizeFn } from \"../../_lib/buildLocalizeFn.js\";\n\nconst eraValues = {\n narrow: [\"AC\", \"DC\"],\n abbreviated: [\"AC\", \"DC\"],\n wide: [\"antes de cristo\", \"depois de cristo\"],\n};\n\nconst quarterValues = {\n narrow: [\"1\", \"2\", \"3\", \"4\"],\n abbreviated: [\"T1\", \"T2\", \"T3\", \"T4\"],\n wide: [\"1º trimestre\", \"2º trimestre\", \"3º trimestre\", \"4º trimestre\"],\n};\n\nconst monthValues = {\n narrow: [\"j\", \"f\", \"m\", \"a\", \"m\", \"j\", \"j\", \"a\", \"s\", \"o\", \"n\", \"d\"],\n abbreviated: [\n \"jan\",\n \"fev\",\n \"mar\",\n \"abr\",\n \"mai\",\n \"jun\",\n \"jul\",\n \"ago\",\n \"set\",\n \"out\",\n \"nov\",\n \"dez\",\n ],\n\n wide: [\n \"janeiro\",\n \"fevereiro\",\n \"março\",\n \"abril\",\n \"maio\",\n \"junho\",\n \"julho\",\n \"agosto\",\n \"setembro\",\n \"outubro\",\n \"novembro\",\n \"dezembro\",\n ],\n};\n\nconst dayValues = {\n narrow: [\"D\", \"S\", \"T\", \"Q\", \"Q\", \"S\", \"S\"],\n short: [\"dom\", \"seg\", \"ter\", \"qua\", \"qui\", \"sex\", \"sab\"],\n abbreviated: [\n \"domingo\",\n \"segunda\",\n \"terça\",\n \"quarta\",\n \"quinta\",\n \"sexta\",\n \"sábado\",\n ],\n\n wide: [\n \"domingo\",\n \"segunda-feira\",\n \"terça-feira\",\n \"quarta-feira\",\n \"quinta-feira\",\n \"sexta-feira\",\n \"sábado\",\n ],\n};\n\nconst dayPeriodValues = {\n narrow: {\n am: \"a\",\n pm: \"p\",\n midnight: \"mn\",\n noon: \"md\",\n morning: \"manhã\",\n afternoon: \"tarde\",\n evening: \"tarde\",\n night: \"noite\",\n },\n abbreviated: {\n am: \"AM\",\n pm: \"PM\",\n midnight: \"meia-noite\",\n noon: \"meio-dia\",\n morning: \"manhã\",\n afternoon: \"tarde\",\n evening: \"tarde\",\n night: \"noite\",\n },\n wide: {\n am: \"a.m.\",\n pm: \"p.m.\",\n midnight: \"meia-noite\",\n noon: \"meio-dia\",\n morning: \"manhã\",\n afternoon: \"tarde\",\n evening: \"tarde\",\n night: \"noite\",\n },\n};\n\nconst formattingDayPeriodValues = {\n narrow: {\n am: \"a\",\n pm: \"p\",\n midnight: \"mn\",\n noon: \"md\",\n morning: \"da manhã\",\n afternoon: \"da tarde\",\n evening: \"da tarde\",\n night: \"da noite\",\n },\n abbreviated: {\n am: \"AM\",\n pm: \"PM\",\n midnight: \"meia-noite\",\n noon: \"meio-dia\",\n morning: \"da manhã\",\n afternoon: \"da tarde\",\n evening: \"da tarde\",\n night: \"da noite\",\n },\n wide: {\n am: \"a.m.\",\n pm: \"p.m.\",\n midnight: \"meia-noite\",\n noon: \"meio-dia\",\n morning: \"da manhã\",\n afternoon: \"da tarde\",\n evening: \"da tarde\",\n night: \"da noite\",\n },\n};\n\nconst ordinalNumber = (dirtyNumber, options) => {\n const number = Number(dirtyNumber);\n\n if (options?.unit === \"week\") {\n return number + \"ª\";\n }\n return number + \"º\";\n};\n\nexport const localize = {\n ordinalNumber,\n\n era: buildLocalizeFn({\n values: eraValues,\n defaultWidth: \"wide\",\n }),\n\n quarter: buildLocalizeFn({\n values: quarterValues,\n defaultWidth: \"wide\",\n argumentCallback: (quarter) => quarter - 1,\n }),\n\n month: buildLocalizeFn({\n values: monthValues,\n defaultWidth: \"wide\",\n }),\n\n day: buildLocalizeFn({\n values: dayValues,\n defaultWidth: \"wide\",\n }),\n\n dayPeriod: buildLocalizeFn({\n values: dayPeriodValues,\n defaultWidth: \"wide\",\n formattingValues: formattingDayPeriodValues,\n defaultFormattingWidth: \"wide\",\n }),\n};\n","import { buildMatchFn } from \"../../_lib/buildMatchFn.js\";\nimport { buildMatchPatternFn } from \"../../_lib/buildMatchPatternFn.js\";\n\nconst matchOrdinalNumberPattern = /^(\\d+)[ºªo]?/i;\nconst parseOrdinalNumberPattern = /\\d+/i;\n\nconst matchEraPatterns = {\n narrow: /^(ac|dc|a|d)/i,\n abbreviated: /^(a\\.?\\s?c\\.?|d\\.?\\s?c\\.?)/i,\n wide: /^(antes de cristo|depois de cristo)/i,\n};\nconst parseEraPatterns = {\n any: [/^ac/i, /^dc/i],\n wide: [/^antes de cristo/i, /^depois de cristo/i],\n};\n\nconst matchQuarterPatterns = {\n narrow: /^[1234]/i,\n abbreviated: /^T[1234]/i,\n wide: /^[1234](º)? trimestre/i,\n};\nconst parseQuarterPatterns = {\n any: [/1/i, /2/i, /3/i, /4/i],\n};\n\nconst matchMonthPatterns = {\n narrow: /^[jfmajsond]/i,\n abbreviated: /^(jan|fev|mar|abr|mai|jun|jul|ago|set|out|nov|dez)/i,\n wide: /^(janeiro|fevereiro|março|abril|maio|junho|julho|agosto|setembro|outubro|novembro|dezembro)/i,\n};\nconst parseMonthPatterns = {\n narrow: [\n /^j/i,\n /^f/i,\n /^m/i,\n /^a/i,\n /^m/i,\n /^j/i,\n /^j/i,\n /^a/i,\n /^s/i,\n /^o/i,\n /^n/i,\n /^d/i,\n ],\n\n any: [\n /^ja/i,\n /^fev/i,\n /^mar/i,\n /^abr/i,\n /^mai/i,\n /^jun/i,\n /^jul/i,\n /^ago/i,\n /^set/i,\n /^out/i,\n /^nov/i,\n /^dez/i,\n ],\n};\n\nconst matchDayPatterns = {\n narrow: /^(dom|[23456]ª?|s[aá]b)/i,\n short: /^(dom|[23456]ª?|s[aá]b)/i,\n abbreviated: /^(dom|seg|ter|qua|qui|sex|s[aá]b)/i,\n wide: /^(domingo|(segunda|ter[cç]a|quarta|quinta|sexta)([- ]feira)?|s[aá]bado)/i,\n};\nconst parseDayPatterns = {\n short: [/^d/i, /^2/i, /^3/i, /^4/i, /^5/i, /^6/i, /^s[aá]/i],\n narrow: [/^d/i, /^2/i, /^3/i, /^4/i, /^5/i, /^6/i, /^s[aá]/i],\n any: [/^d/i, /^seg/i, /^t/i, /^qua/i, /^qui/i, /^sex/i, /^s[aá]b/i],\n};\n\nconst matchDayPeriodPatterns = {\n narrow: /^(a|p|mn|md|(da) (manhã|tarde|noite))/i,\n any: /^([ap]\\.?\\s?m\\.?|meia[-\\s]noite|meio[-\\s]dia|(da) (manhã|tarde|noite))/i,\n};\nconst parseDayPeriodPatterns = {\n any: {\n am: /^a/i,\n pm: /^p/i,\n midnight: /^mn|^meia[-\\s]noite/i,\n noon: /^md|^meio[-\\s]dia/i,\n morning: /manhã/i,\n afternoon: /tarde/i,\n evening: /tarde/i,\n night: /noite/i,\n },\n};\n\nexport const match = {\n ordinalNumber: buildMatchPatternFn({\n matchPattern: matchOrdinalNumberPattern,\n parsePattern: parseOrdinalNumberPattern,\n valueCallback: (value) => parseInt(value, 10),\n }),\n\n era: buildMatchFn({\n matchPatterns: matchEraPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseEraPatterns,\n defaultParseWidth: \"any\",\n }),\n\n quarter: buildMatchFn({\n matchPatterns: matchQuarterPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseQuarterPatterns,\n defaultParseWidth: \"any\",\n valueCallback: (index) => index + 1,\n }),\n\n month: buildMatchFn({\n matchPatterns: matchMonthPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseMonthPatterns,\n defaultParseWidth: \"any\",\n }),\n\n day: buildMatchFn({\n matchPatterns: matchDayPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseDayPatterns,\n defaultParseWidth: \"any\",\n }),\n\n dayPeriod: buildMatchFn({\n matchPatterns: matchDayPeriodPatterns,\n defaultMatchWidth: \"any\",\n parsePatterns: parseDayPeriodPatterns,\n defaultParseWidth: \"any\",\n }),\n};\n","import { formatDistance } from \"./pt-BR/_lib/formatDistance.js\";\nimport { formatLong } from \"./pt-BR/_lib/formatLong.js\";\nimport { formatRelative } from \"./pt-BR/_lib/formatRelative.js\";\nimport { localize } from \"./pt-BR/_lib/localize.js\";\nimport { match } from \"./pt-BR/_lib/match.js\";\n\n/**\n * @category Locales\n * @summary Portuguese locale (Brazil).\n * @language Portuguese\n * @iso-639-2 por\n * @author Lucas Duailibe [@duailibe](https://github.com/duailibe)\n * @author Yago Carballo [@yagocarballo](https://github.com/YagoCarballo)\n */\nexport const ptBR = {\n code: \"pt-BR\",\n formatDistance: formatDistance,\n formatLong: formatLong,\n formatRelative: formatRelative,\n localize: localize,\n match: match,\n options: {\n weekStartsOn: 0 /* Sunday */,\n firstWeekContainsDate: 1,\n },\n};\n\n// Fallback for modularized imports:\nexport default ptBR;\n","'use client';\n\nimport * as React from 'react';\nimport * as SheetPrimitive from '@radix-ui/react-dialog';\nimport { XIcon } from 'lucide-react';\nimport { cn } from '../../lib/utils';\n\nfunction Sheet({ ...props }: React.ComponentProps<typeof SheetPrimitive.Root>) {\n return <SheetPrimitive.Root data-slot=\"sheet\" {...props} />;\n}\n\nfunction SheetTrigger({ ...props }: React.ComponentProps<typeof SheetPrimitive.Trigger>) {\n return <SheetPrimitive.Trigger data-slot=\"sheet-trigger\" {...props} />;\n}\n\nfunction SheetClose({ ...props }: React.ComponentProps<typeof SheetPrimitive.Close>) {\n return <SheetPrimitive.Close data-slot=\"sheet-close\" {...props} />;\n}\n\nfunction SheetPortal({ ...props }: React.ComponentProps<typeof SheetPrimitive.Portal>) {\n return <SheetPrimitive.Portal data-slot=\"sheet-portal\" {...props} />;\n}\n\nfunction SheetOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Overlay>) {\n return (\n <SheetPrimitive.Overlay\n data-slot=\"sheet-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 backdrop-blur-sm',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction SheetContent({\n className,\n children,\n side = 'right',\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Content> & {\n side?: 'top' | 'right' | 'bottom' | 'left';\n}) {\n return (\n <SheetPortal>\n <SheetOverlay />\n <SheetPrimitive.Content\n data-slot=\"sheet-content\"\n className={cn(\n 'data-[state=open]:animate-in data-[state=closed]:animate-out fixed z-50 flex flex-col gap-4 shadow-2xl dark:shadow-[0_0_40px_rgba(124,58,237,0.15)] transition ease-[cubic-bezier(0.25,1,0.5,1)] data-[state=closed]:duration-300 data-[state=open]:duration-500 !bg-white dark:!bg-[#0D0A1A] !text-gray-900 dark:!text-gray-100 border-gray-200 dark:!border-gray-800',\n side === 'right' &&\n 'data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right inset-y-0 right-0 h-full w-3/4 border-l sm:max-w-sm',\n side === 'left' &&\n 'data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left inset-y-0 left-0 h-full w-3/4 border-r sm:max-w-sm',\n side === 'top' &&\n 'data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top inset-x-0 top-0 h-auto border-b',\n side === 'bottom' &&\n 'data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom inset-x-0 bottom-0 h-auto border-t',\n className,\n )}\n {...props}\n >\n {children}\n <SheetPrimitive.Close className=\"ring-offset-background focus:ring-ring data-[state=open]:bg-secondary absolute top-4 right-4 rounded-full opacity-70 transition-opacity duration-[400ms] ease-[cubic-bezier(0.25,1,0.5,1)] hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none\">\n <XIcon className=\"size-4\" />\n <span className=\"sr-only\">Close</span>\n </SheetPrimitive.Close>\n </SheetPrimitive.Content>\n </SheetPortal>\n );\n}\n\nfunction SheetHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sheet-header\"\n className={cn('flex flex-col gap-1.5 p-4', className)}\n {...props}\n />\n );\n}\n\nfunction SheetFooter({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sheet-footer\"\n className={cn('mt-auto flex flex-col gap-2 p-4', className)}\n {...props}\n />\n );\n}\n\nfunction SheetTitle({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Title>) {\n return (\n <SheetPrimitive.Title\n data-slot=\"sheet-title\"\n className={cn('text-theme font-semibold', className)}\n {...props}\n />\n );\n}\n\nfunction SheetDescription({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Description>) {\n return (\n <SheetPrimitive.Description\n data-slot=\"sheet-description\"\n className={cn('text-theme-muted text-sm', className)}\n {...props}\n />\n );\n}\n\nexport {\n Sheet,\n SheetTrigger,\n SheetClose,\n SheetContent,\n SheetHeader,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n};\n","// ─────────────────────────────────────────────\n// CommentItem — Single comment with replies,\n// reactions, edit/delete, optimistic UI\n// ─────────────────────────────────────────────\n\n'use client';\n\nimport * as React from 'react';\nimport { cn } from '../../lib/utils';\nimport { Button } from '../primitives/button';\nimport { Avatar, AvatarFallback } from '../primitives/avatar';\nimport { Tooltip, TooltipContent, TooltipTrigger, TooltipProvider } from '../primitives/tooltip';\nimport { OrgEdit, OrgTrash, OrgComment } from '../../icons';\nimport type { Comment, CommentAuthor } from './types';\n\ninterface CommentItemProps {\n comment: Comment;\n currentUser: CommentAuthor;\n depth?: number;\n onReply: (parentId: string) => void;\n onEdit?: (commentId: string, content: string) => Promise<any>;\n onDelete?: (commentId: string) => Promise<void>;\n onReact?: (commentId: string, emoji: string) => Promise<void>;\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\nfunction formatRelativeTime(iso: string): string {\n const diff = Date.now() - new Date(iso).getTime();\n const mins = Math.floor(diff / 60000);\n if (mins < 1) return 'agora';\n if (mins < 60) return `${mins}m`;\n const hours = Math.floor(mins / 60);\n if (hours < 24) return `${hours}h`;\n const days = Math.floor(hours / 24);\n if (days < 7) return `${days}d`;\n return new Date(iso).toLocaleDateString('pt-BR', { day: 'numeric', month: 'short' });\n}\n\nfunction groupReactions(reactions: { emoji: string; userId: string }[]) {\n const map = new Map<string, string[]>();\n reactions.forEach((r) => {\n const arr = map.get(r.emoji) || [];\n arr.push(r.userId);\n map.set(r.emoji, arr);\n });\n return Array.from(map.entries());\n}\n\nconst QUICK_REACTIONS = ['👍', '❤️', '🎉', '😄', '👀', '🚀'];\n\nexport function CommentItem({\n comment,\n currentUser,\n depth = 0,\n onReply,\n onEdit,\n onDelete,\n onReact,\n}: CommentItemProps) {\n const [editing, setEditing] = React.useState(false);\n const [editContent, setEditContent] = React.useState(comment.content);\n const [showReactions, setShowReactions] = React.useState(false);\n const isAuthor = comment.author.id === currentUser.id;\n const isPending = comment._status === 'pending';\n const isError = comment._status === 'error';\n const maxDepth = 3;\n\n const handleSaveEdit = async () => {\n if (!editContent.trim() || !onEdit) return;\n await onEdit(comment.id, editContent.trim());\n setEditing(false);\n };\n\n return (\n <div\n className={cn(\n 'group relative',\n depth > 0 && 'ml-8 pl-4 border-l border-theme-subtle',\n isPending && 'opacity-60',\n isError && 'border-l-2 border-rose-500/50 pl-3',\n )}\n >\n <div className=\"flex gap-3 py-2\">\n <Avatar shape=\"circle\" size=\"sm\" className=\"mt-0.5 shrink-0 h-7 w-7\">\n <AvatarFallback className=\"bg-primary/20 text-primary-light text-[10px] font-semibold\">\n {getInitials(comment.author.displayName)}\n </AvatarFallback>\n </Avatar>\n\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-baseline gap-2 mb-1\">\n <span className=\"text-[13px] font-semibold text-theme\">\n {comment.author.displayName}\n </span>\n <span className=\"text-[11px] text-theme-muted\">\n {formatRelativeTime(comment.createdAt)}\n </span>\n {comment.edited && (\n <span className=\"text-[10px] text-theme-muted italic\">(editado)</span>\n )}\n {isPending && (\n <span className=\"text-[10px] text-theme-muted\">enviando...</span>\n )}\n {isError && (\n <span className=\"text-[10px] text-rose-400\">erro</span>\n )}\n </div>\n\n {editing ? (\n <div className=\"space-y-2\">\n <textarea\n value={editContent}\n onChange={(e) => setEditContent(e.target.value)}\n className=\"w-full min-h-[60px] text-[13px] text-theme bg-theme-subtle border border-theme-subtle-10 rounded-xl px-3 py-2 outline-none focus:border-primary/50 resize-none\"\n autoFocus\n />\n <div className=\"flex gap-2\">\n <Button\n variant=\"default\"\n size=\"sm\"\n onClick={handleSaveEdit}\n disabled={!editContent.trim()}\n className=\"h-6 px-2 text-[10px]\"\n >\n Salvar\n </Button>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => {\n setEditing(false);\n setEditContent(comment.content);\n }}\n className=\"h-6 px-2 text-[10px] text-theme-muted\"\n >\n Cancelar\n </Button>\n </div>\n </div>\n ) : (\n <p className=\"text-[13px] text-theme-secondary leading-relaxed break-words whitespace-pre-wrap\">\n {comment.content}\n </p>\n )}\n\n {/* Reactions */}\n {comment.reactions.length > 0 && !editing && (\n <div className=\"flex flex-wrap gap-1 mt-1.5\">\n {groupReactions(comment.reactions).map(([emoji, userIds]) => (\n <button\n key={emoji}\n onClick={() => onReact?.(comment.id, emoji)}\n className={cn(\n 'inline-flex items-center gap-1 px-1.5 py-0.5 rounded-full text-xs border transition-colors',\n userIds.includes(currentUser.id)\n ? 'bg-primary/15 border-primary/30 text-primary-light'\n : 'bg-theme-subtle border-theme-subtle text-theme-muted hover:bg-theme-subtle-10',\n )}\n >\n <span>{emoji}</span>\n <span className=\"text-[10px]\">{userIds.length}</span>\n </button>\n ))}\n </div>\n )}\n\n {/* Actions */}\n {!editing && !isPending && (\n <div className=\"flex items-center gap-1 mt-1 opacity-0 group-hover:opacity-100 transition-opacity duration-[400ms]\">\n {/* Reply */}\n {depth < maxDepth && (\n <button\n onClick={() => onReply(comment.id)}\n className=\"flex items-center gap-1 px-1.5 py-0.5 rounded text-[11px] text-theme-muted hover:text-theme-secondary hover:bg-theme-subtle transition-colors\"\n >\n <OrgComment className=\"w-3 h-3\" />\n Responder\n </button>\n )}\n\n {/* React */}\n <div className=\"relative\">\n <button\n onClick={() => setShowReactions(!showReactions)}\n className=\"px-1.5 py-0.5 rounded text-[11px] text-theme-muted hover:text-theme-secondary hover:bg-theme-subtle transition-colors\"\n >\n 😊\n </button>\n {showReactions && (\n <div className=\"absolute bottom-full left-0 mb-1 flex gap-0.5 p-1 rounded-xl bg-theme-surface border border-theme-subtle-10 shadow-lg animate-in zoom-in-95 duration-[400ms] z-10\">\n {QUICK_REACTIONS.map((emoji) => (\n <button\n key={emoji}\n onClick={() => {\n onReact?.(comment.id, emoji);\n setShowReactions(false);\n }}\n className=\"w-7 h-7 flex items-center justify-center rounded hover:bg-theme-subtle-10 transition-colors text-sm\"\n >\n {emoji}\n </button>\n ))}\n </div>\n )}\n </div>\n\n {/* Edit (author only) */}\n {isAuthor && onEdit && (\n <button\n onClick={() => setEditing(true)}\n className=\"flex items-center gap-1 px-1.5 py-0.5 rounded text-[11px] text-theme-muted hover:text-theme-secondary hover:bg-theme-subtle transition-colors\"\n >\n <OrgEdit className=\"w-3 h-3\" />\n </button>\n )}\n\n {/* Delete (author only) */}\n {isAuthor && onDelete && (\n <button\n onClick={() => onDelete(comment.id)}\n className=\"flex items-center gap-1 px-1.5 py-0.5 rounded text-[11px] text-theme-muted hover:text-rose-400 hover:bg-rose-500/10 transition-colors\"\n >\n <OrgTrash className=\"w-3 h-3\" />\n </button>\n )}\n </div>\n )}\n </div>\n </div>\n\n {/* Nested replies */}\n {comment.replies && comment.replies.length > 0 && (\n <div className=\"space-y-0\">\n {comment.replies.map((reply) => (\n <CommentItem\n key={reply.id}\n comment={reply}\n currentUser={currentUser}\n depth={depth + 1}\n onReply={onReply}\n onEdit={onEdit}\n onDelete={onDelete}\n onReact={onReact}\n />\n ))}\n </div>\n )}\n </div>\n );\n}\n","// ─────────────────────────────────────────────\n// CommentInput — Always-visible input component\n// ─────────────────────────────────────────────\n\n'use client';\n\nimport * as React from 'react';\nimport { cn } from '../../../lib/utils';\nimport { Button } from '../../primitives/button';\nimport { Avatar, AvatarFallback } from '../../primitives/avatar';\nimport type { CommentAuthor } from '../types';\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 interface CommentInputProps {\n currentUser: CommentAuthor;\n placeholder?: string;\n autoFocus?: boolean;\n onSubmit: (content: string) => void;\n onCancel?: () => void;\n /** Compact mode: smaller padding, no avatar */\n compact?: boolean;\n /** Always show expanded textarea (default true) */\n alwaysExpanded?: boolean;\n}\n\nexport function CommentInput({\n currentUser,\n placeholder = 'Adicionar um comentário...',\n autoFocus = false,\n onSubmit,\n onCancel,\n compact = false,\n alwaysExpanded = true,\n}: CommentInputProps) {\n const [content, setContent] = React.useState('');\n const textareaRef = React.useRef<HTMLTextAreaElement>(null);\n\n React.useEffect(() => {\n if (autoFocus && textareaRef.current) {\n textareaRef.current.focus();\n }\n }, [autoFocus]);\n\n const handleSubmit = () => {\n if (!content.trim()) return;\n onSubmit(content.trim());\n setContent('');\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' && (e.metaKey || e.ctrlKey)) {\n e.preventDefault();\n handleSubmit();\n }\n if (e.key === 'Escape') {\n onCancel?.();\n }\n };\n\n return (\n <div className=\"space-y-2 animate-in fade-in-0 duration-[400ms]\">\n <div className=\"flex gap-2\">\n {!compact && (\n <Avatar shape=\"circle\" size=\"sm\" className=\"mt-1 h-6 w-6 shrink-0\">\n <AvatarFallback className=\"bg-primary/20 text-primary-light text-[9px]\">\n {getInitials(currentUser.displayName)}\n </AvatarFallback>\n </Avatar>\n )}\n <textarea\n ref={textareaRef}\n value={content}\n onChange={(e) => setContent(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n rows={compact ? 2 : 2}\n className={cn(\n 'flex-1 min-h-[48px] text-[13px] resize-none',\n 'bg-theme-subtle border border-theme-subtle rounded-xl px-3 py-2',\n 'text-theme placeholder:text-theme-muted',\n 'outline-none focus:border-primary/50 transition-colors',\n )}\n />\n </div>\n <div className={cn('flex items-center justify-between', !compact && 'pl-8')}>\n <span className=\"text-[10px] text-theme-muted\">⌘ + Enter para enviar</span>\n <div className=\"flex gap-2\">\n {onCancel && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => {\n onCancel();\n setContent('');\n }}\n className=\"h-6 px-2 text-[10px] text-theme-muted\"\n >\n Cancelar\n </Button>\n )}\n <Button\n variant=\"default\"\n size=\"sm\"\n onClick={handleSubmit}\n disabled={!content.trim()}\n className=\"h-6 px-3 text-[10px]\"\n >\n Comentar\n </Button>\n </div>\n </div>\n </div>\n );\n}\n\nCommentInput.displayName = 'CommentInput';\n","// ─────────────────────────────────────────────\n// CommentSkeleton — Loading placeholder\n// ─────────────────────────────────────────────\n\n'use client';\n\nimport { Skeleton } from '../../primitives/skeleton';\n\nexport function CommentSkeleton() {\n return (\n <div className=\"flex gap-3 py-2\">\n <Skeleton variant=\"circular\" className=\"h-7 w-7 shrink-0\" />\n <div className=\"flex-1 space-y-2\">\n <div className=\"flex gap-2\">\n <Skeleton className=\"h-3 w-20\" />\n <Skeleton className=\"h-3 w-10\" />\n </div>\n <Skeleton className=\"h-3 w-full\" />\n <Skeleton className=\"h-3 w-3/4\" />\n </div>\n </div>\n );\n}\n\nCommentSkeleton.displayName = 'CommentSkeleton';\n","// ─────────────────────────────────────────────\n// CommentThread — Full comment system\n// ─────────────────────────────────────────────\n// Pulls currentUser from OrganifyProvider if not\n// provided. If onFetch/onAdd/onEdit/onDelete are\n// not provided, auto-fetches via OrganifyProvider API.\n// Uses GraphQL subscriptions for real-time updates.\n// Input is always visible for better UX.\n// ─────────────────────────────────────────────\n\n'use client';\n\nimport * as React from 'react';\nimport { cn } from '../../lib/utils';\nimport { useOrganifyUser, useOrganifyGql, useOrganifyApi } from '../../providers/organify-provider';\nimport { OrgComment } from '../../icons';\nimport { CommentItem } from './comment-item';\nimport { CommentInput, CommentSkeleton } from './primitives';\nimport type { Comment, CommentThreadProps, CommentAuthor } from './types';\n\n// ─── Helpers ────────────────────────────────\n\n/** Map backend TaskComment to local Comment shape */\nfunction mapTaskComment(tc: any, fallbackAuthor?: CommentAuthor): Comment {\n return {\n id: tc.id,\n content: tc.content,\n parentId: tc.parentId ?? null,\n replyCount: 0,\n edited: tc.isEdited ?? false,\n createdAt: tc.createdAt,\n updatedAt: tc.updatedAt ?? tc.editedAt,\n author: fallbackAuthor ?? { id: tc.userId, displayName: tc.userId, avatarUrl: null },\n reactions: [],\n };\n}\n\n// ─── CommentThread ──────────────────────────\n\nexport function CommentThread({\n entityType,\n entityId,\n currentUser: currentUserProp,\n comments: externalComments,\n onFetch,\n onAdd,\n onEdit,\n onDelete,\n onReact,\n maxVisible = 5,\n className,\n}: CommentThreadProps) {\n // ─── Derive currentUser from OrganifyProvider if not provided ──\n const providerUser = useOrganifyUser();\n const gql = useOrganifyGql();\n const api = useOrganifyApi();\n\n const currentUser: CommentAuthor = currentUserProp ?? {\n id: providerUser?.id ?? '',\n displayName: providerUser?.name ?? '',\n avatarUrl: providerUser?.avatarUrl ?? null,\n };\n\n // ─── Memoized API callbacks (prevents infinite re-render loop) ──\n\n const effectiveOnFetch = React.useCallback(\n async (_entityType: string, _entityId: string) => {\n if (onFetch) return onFetch(_entityType, _entityId);\n const data = await gql<{ taskComments: Array<any> }>(\n 'projects',\n `query($taskId: String!) {\n taskComments(taskId: $taskId) {\n id content parentId isEdited editedAt createdAt updatedAt\n userId taskId attachments\n }\n }`,\n { taskId: _entityId },\n );\n return (data.taskComments ?? []).map((tc: any) => mapTaskComment(tc)) as Comment[];\n },\n // gql is already memoized via useCallback in the provider\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [gql, onFetch],\n );\n\n const effectiveOnAdd = React.useCallback(\n async (input: { entityType: string; entityId: string; content: string; parentId?: string }) => {\n if (onAdd) return onAdd(input);\n const data = await gql<{ createComment: any }>(\n 'projects',\n `mutation($input: CreateCommentInput!) {\n createComment(input: $input) {\n id content parentId isEdited createdAt updatedAt\n }\n }`,\n { input: { taskId: input.entityId, content: input.content, parentId: input.parentId } },\n );\n return mapTaskComment(data.createComment, currentUser);\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [gql, onAdd, currentUser.id],\n );\n\n const effectiveOnEdit = React.useCallback(\n async (commentId: string, content: string) => {\n if (onEdit) return onEdit(commentId, content);\n const data = await gql<{ updateComment: any }>(\n 'projects',\n `mutation($commentId: String!, $content: String!) {\n updateComment(id: $commentId, input: { content: $content }) {\n id content isEdited editedAt updatedAt\n }\n }`,\n { commentId, content },\n );\n const raw = data.updateComment;\n return {\n id: raw.id,\n content: raw.content,\n edited: raw.isEdited ?? true,\n updatedAt: raw.updatedAt ?? raw.editedAt,\n } as unknown as Comment;\n },\n [gql, onEdit],\n );\n\n const effectiveOnDelete = React.useCallback(\n async (commentId: string) => {\n if (onDelete) return onDelete(commentId);\n await gql(\n 'projects',\n `mutation($commentId: String!) { deleteComment(id: $commentId) { success message } }`,\n { commentId },\n );\n },\n [gql, onDelete],\n );\n\n const [comments, setComments] = React.useState<Comment[]>(externalComments || []);\n const [loading, setLoading] = React.useState(!externalComments);\n const [showAll, setShowAll] = React.useState(false);\n const [replyingTo, setReplyingTo] = React.useState<string | null>(null);\n\n // ─── Fetch comments on mount (runs once per entityId) ──\n const hasFetchedRef = React.useRef(false);\n\n React.useEffect(() => {\n hasFetchedRef.current = false;\n }, [entityId, entityType]);\n\n React.useEffect(() => {\n if (externalComments) return;\n if (hasFetchedRef.current) return;\n hasFetchedRef.current = true;\n\n let cancelled = false;\n const fetchComments = async () => {\n try {\n const fetched = await effectiveOnFetch(entityType, entityId);\n if (!cancelled) setComments(fetched);\n } finally {\n if (!cancelled) setLoading(false);\n }\n };\n\n fetchComments();\n return () => { cancelled = true; };\n }, [entityType, entityId, externalComments, effectiveOnFetch]);\n\n // ─── Sync externalComments ──\n React.useEffect(() => {\n if (externalComments) {\n setComments(externalComments);\n }\n }, [externalComments]);\n\n // ─── GraphQL Subscriptions (real-time comment updates) ──\n\n React.useEffect(() => {\n // Only subscribe when using internal API (no external callbacks)\n if (externalComments || onFetch) return;\n if (!entityId || entityType !== 'task') return;\n\n const projectsServiceUrl = api?.services?.projects || api?.gatewayUrl;\n if (!projectsServiceUrl) return;\n\n const wsUrl = projectsServiceUrl.replace(/^http/, 'ws') + '/graphql/projects';\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 ws?.send(JSON.stringify({\n type: 'connection_init',\n payload: {\n userId: currentUser.id,\n authorization: api?.authToken ? `Bearer ${api.authToken}` : undefined,\n },\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 taskCommentCreated\n ws?.send(JSON.stringify({\n id: 'sub_comment_created',\n type: 'subscribe',\n payload: {\n query: `subscription($taskId: ID!) {\n taskCommentCreated(taskId: $taskId) {\n id content parentId isEdited editedAt createdAt updatedAt\n userId taskId attachments\n }\n }`,\n variables: { taskId: entityId },\n },\n }));\n // Subscribe to taskCommentUpdated\n ws?.send(JSON.stringify({\n id: 'sub_comment_updated',\n type: 'subscribe',\n payload: {\n query: `subscription($taskId: ID!) {\n taskCommentUpdated(taskId: $taskId) {\n id content parentId isEdited editedAt createdAt updatedAt\n userId taskId attachments\n }\n }`,\n variables: { taskId: entityId },\n },\n }));\n // Subscribe to taskCommentDeleted\n ws?.send(JSON.stringify({\n id: 'sub_comment_deleted',\n type: 'subscribe',\n payload: {\n query: `subscription($taskId: ID!) {\n taskCommentDeleted(taskId: $taskId)\n }`,\n variables: { taskId: entityId },\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 // ─── Comment Created ──\n if (msg.id === 'sub_comment_created' && msg.payload?.data?.taskCommentCreated) {\n const raw = msg.payload.data.taskCommentCreated;\n const newComment = mapTaskComment(raw);\n // Skip if this user's message (already added via optimistic insert)\n if (raw.userId === currentUser.id) {\n setComments((prev) =>\n prev.map((c) =>\n c._status === 'pending' && c.content === raw.content\n ? { ...newComment, _status: 'sent' as const }\n : c,\n ),\n );\n } else {\n setComments((prev) => {\n if (prev.find((c) => c.id === raw.id)) return prev;\n if (raw.parentId) {\n return prev.map((c) =>\n c.id === raw.parentId\n ? { ...c, replies: [...(c.replies || []), newComment], replyCount: c.replyCount + 1 }\n : c,\n );\n }\n return [...prev, newComment];\n });\n }\n }\n // ─── Comment Updated ──\n if (msg.id === 'sub_comment_updated' && msg.payload?.data?.taskCommentUpdated) {\n const raw = msg.payload.data.taskCommentUpdated;\n setComments((prev) => {\n const update = (list: Comment[]): Comment[] =>\n list.map((c) => {\n if (c.id === raw.id) return { ...c, content: raw.content, edited: raw.isEdited ?? true, updatedAt: raw.updatedAt ?? raw.editedAt };\n if (c.replies) return { ...c, replies: update(c.replies) };\n return c;\n });\n return update(prev);\n });\n }\n // ─── Comment Deleted ──\n if (msg.id === 'sub_comment_deleted' && msg.payload?.data?.taskCommentDeleted) {\n const deletedId = msg.payload.data.taskCommentDeleted;\n setComments((prev) => {\n const remove = (list: Comment[]): Comment[] =>\n list\n .filter((c) => c.id !== deletedId)\n .map((c) => c.replies ? { ...c, replies: remove(c.replies), replyCount: Math.max(0, c.replyCount - (c.replies.some((r) => r.id === deletedId) ? 1 : 0)) } : c);\n return remove(prev);\n });\n }\n break;\n }\n\n case 'pong':\n break;\n\n case 'error':\n console.warn('[CommentThread] Subscription error:', msg.payload);\n break;\n\n case 'complete':\n break;\n }\n } catch {\n // ignore malformed WS 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 ws.send(JSON.stringify({ id: 'sub_comment_created', type: 'complete' }));\n ws.send(JSON.stringify({ id: 'sub_comment_updated', type: 'complete' }));\n ws.send(JSON.stringify({ id: 'sub_comment_deleted', 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?.projects, api?.gatewayUrl, api?.authToken, entityId, entityType, currentUser.id, externalComments, onFetch]);\n\n // ─── Add comment ──\n const handleAddComment = async (content: string, parentId?: string) => {\n const tempId = `temp-${Date.now()}`;\n\n // Optimistic insert\n const tempComment: Comment = {\n id: tempId,\n content,\n parentId: parentId ?? null,\n author: currentUser,\n reactions: [],\n replyCount: 0,\n edited: false,\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n _status: 'pending',\n };\n\n if (parentId) {\n setComments((prev) =>\n prev.map((c) =>\n c.id === parentId\n ? { ...c, replies: [...(c.replies || []), tempComment], replyCount: c.replyCount + 1 }\n : c,\n ),\n );\n setReplyingTo(null);\n } else {\n setComments((prev) => [...prev, tempComment]);\n }\n\n try {\n const real = await effectiveOnAdd({ entityType, entityId, content, parentId });\n setComments((prev) => {\n const replace = (list: Comment[]): Comment[] =>\n list.map((c) => {\n if (c.id === tempId) return { ...real, _status: 'sent' };\n if (c.replies) return { ...c, replies: replace(c.replies) };\n return c;\n });\n return replace(prev);\n });\n } catch {\n setComments((prev) => {\n const markError = (list: Comment[]): Comment[] =>\n list.map((c) => {\n if (c.id === tempId) return { ...c, _status: 'error' };\n if (c.replies) return { ...c, replies: markError(c.replies) };\n return c;\n });\n return markError(prev);\n });\n }\n };\n\n // ─── Edit / Delete ─────────────────────\n\n const handleEdit = async (commentId: string, content: string) => {\n const updated = await effectiveOnEdit(commentId, content);\n setComments((prev) =>\n prev.map((c) => (c.id === commentId ? { ...c, ...updated } : c)),\n );\n };\n\n const handleDelete = async (commentId: string) => {\n // Optimistic remove\n setComments((prev) => prev.filter((c) => c.id !== commentId));\n try {\n await effectiveOnDelete(commentId);\n } catch {\n // TODO: restore on error\n }\n };\n\n const handleReact = async (commentId: string, emoji: string) => {\n if (!onReact) return;\n // Optimistic toggle\n setComments((prev) => {\n const toggle = (list: Comment[]): Comment[] =>\n list.map((c) => {\n if (c.id === commentId) {\n const existing = c.reactions.find(\n (r) => r.emoji === emoji && r.userId === currentUser.id,\n );\n return {\n ...c,\n reactions: existing\n ? c.reactions.filter((r) => !(r.emoji === emoji && r.userId === currentUser.id))\n : [...c.reactions, { emoji, userId: currentUser.id }],\n };\n }\n if (c.replies) return { ...c, replies: toggle(c.replies) };\n return c;\n });\n return toggle(prev);\n });\n await onReact(commentId, emoji);\n };\n\n // Visible comments\n const topLevelComments = comments.filter((c) => !c.parentId);\n const visibleComments = showAll\n ? topLevelComments\n : topLevelComments.slice(0, maxVisible);\n const hiddenCount = topLevelComments.length - maxVisible;\n\n return (\n <div className={cn('space-y-3', className)}>\n {/* Header */}\n <div className=\"flex items-center justify-between\">\n <h4 className=\"text-sm font-semibold text-theme flex items-center gap-2\">\n <OrgComment className=\"w-4 h-4 text-theme-muted\" />\n Comentários\n {topLevelComments.length > 0 && (\n <span className=\"text-[11px] text-theme-muted font-normal\">\n ({topLevelComments.length})\n </span>\n )}\n </h4>\n </div>\n\n {/* Loading skeleton */}\n {loading && (\n <div className=\"space-y-1\">\n <CommentSkeleton />\n <CommentSkeleton />\n <CommentSkeleton />\n </div>\n )}\n\n {/* Empty state */}\n {!loading && topLevelComments.length === 0 && (\n <div className=\"flex flex-col items-center py-6 text-center\">\n <div className=\"w-10 h-10 rounded-xl bg-theme-subtle flex items-center justify-center mb-3\">\n <OrgComment className=\"w-5 h-5 text-theme-muted\" />\n </div>\n <p className=\"text-xs text-theme-muted\">Sem comentários ainda.</p>\n <p className=\"text-[11px] text-theme-muted mt-0.5\">Seja o primeiro a comentar.</p>\n </div>\n )}\n\n {/* Comments list */}\n {!loading && visibleComments.length > 0 && (\n <div className=\"space-y-0.5\">\n {visibleComments.map((comment) => (\n <React.Fragment key={comment.id}>\n <CommentItem\n comment={comment}\n currentUser={currentUser}\n onReply={setReplyingTo}\n onEdit={handleEdit}\n onDelete={handleDelete}\n onReact={onReact ? handleReact : undefined}\n />\n {/* Reply input inline */}\n {replyingTo === comment.id && (\n <div className=\"ml-8 pl-4 border-l border-theme-subtle animate-in slide-in-from-top-2 duration-[400ms]\">\n <CommentInput\n currentUser={currentUser}\n placeholder={`Responder a ${comment.author.displayName}...`}\n autoFocus\n compact\n onSubmit={(content) => handleAddComment(content, comment.id)}\n onCancel={() => setReplyingTo(null)}\n />\n </div>\n )}\n </React.Fragment>\n ))}\n\n {/* Show more */}\n {!showAll && hiddenCount > 0 && (\n <button\n onClick={() => setShowAll(true)}\n className=\"text-xs text-primary-light/70 hover:text-primary-light transition-colors py-1 px-2\"\n >\n Ver mais {hiddenCount} comentário{hiddenCount !== 1 ? 's' : ''} →\n </button>\n )}\n </div>\n )}\n\n {/* New comment input — ALWAYS VISIBLE */}\n {!loading && (\n <div className=\"pt-2 border-t border-theme-subtle\">\n <CommentInput\n currentUser={currentUser}\n onSubmit={(content) => handleAddComment(content)}\n />\n </div>\n )}\n </div>\n );\n}\n\nCommentThread.displayName = 'CommentThread';\n","// ─────────────────────────────────────────────\n// LabelPicker — Select/Create labels popover\n// ─────────────────────────────────────────────\n\n'use client';\n\nimport * as React from 'react';\nimport { X, Plus, Check } from 'lucide-react';\nimport { cn } from '../../../lib/utils';\nimport { Button } from '../../primitives/button';\nimport { Input } from '../../primitives/input';\nimport { Badge } from '../../primitives/badge';\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from '../../primitives/popover';\n\n// ─── Types ──────────────────────────────────\n\nexport interface PickerLabel {\n id: string;\n name: string;\n color: string;\n}\n\nexport interface LabelPickerProps {\n /** Currently selected labels */\n selectedLabels: PickerLabel[];\n /** Available labels to choose from */\n availableLabels: PickerLabel[];\n /** Called when a label is toggled (selected/deselected) */\n onToggle: (label: PickerLabel) => void;\n /** Called when a new label is created */\n onCreate?: (name: string, color: string) => void;\n /** Custom trigger button (optional) */\n trigger?: React.ReactNode;\n /** Whether the picker is disabled */\n disabled?: boolean;\n}\n\n// ─── Preset Colors ──────────────────────────\n\nconst presetColors = [\n '#ef4444', // red\n '#f97316', // orange\n '#f59e0b', // amber\n '#eab308', // yellow\n '#84cc16', // lime\n '#22c55e', // green\n '#14b8a6', // teal\n '#06b6d4', // cyan\n '#3b82f6', // blue\n '#7c3aed', // violet (primary)\n '#8b5cf6', // violet\n '#a855f7', // purple\n '#d946ef', // fuchsia\n '#ec4899', // pink\n '#64748b', // slate\n];\n\n// ─── Component ──────────────────────────────\n\nexport function LabelPicker({\n selectedLabels,\n availableLabels,\n onToggle,\n onCreate,\n trigger,\n disabled = false,\n}: LabelPickerProps) {\n const [open, setOpen] = React.useState(false);\n const [search, setSearch] = React.useState('');\n const [isCreating, setIsCreating] = React.useState(false);\n const [newLabelName, setNewLabelName] = React.useState('');\n const [newLabelColor, setNewLabelColor] = React.useState(presetColors[8]); // blue default\n\n const selectedIds = new Set(selectedLabels.map((l) => l.id));\n\n // Filter available labels by search\n const filteredLabels = availableLabels.filter((label) =>\n label.name.toLowerCase().includes(search.toLowerCase()),\n );\n\n // Check if search matches any existing label\n const exactMatch = availableLabels.some(\n (l) => l.name.toLowerCase() === search.toLowerCase(),\n );\n\n const handleCreate = () => {\n if (newLabelName.trim() && onCreate) {\n onCreate(newLabelName.trim(), newLabelColor);\n setNewLabelName('');\n setIsCreating(false);\n }\n };\n\n const handleQuickCreate = () => {\n if (search.trim() && !exactMatch && onCreate) {\n onCreate(search.trim(), presetColors[Math.floor(Math.random() * presetColors.length)]);\n setSearch('');\n }\n };\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild disabled={disabled}>\n {trigger ?? (\n <Button variant=\"secondary\" size=\"sm\" className=\"h-7 px-2 text-xs\">\n <Plus className=\"w-3 h-3 mr-1\" />\n Adicionar\n </Button>\n )}\n </PopoverTrigger>\n <PopoverContent className=\"w-64 p-0\" align=\"start\">\n <div className=\"p-2 border-b border-theme-subtle\">\n <Input\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n placeholder=\"Buscar ou criar label...\"\n className=\"h-8 text-sm\"\n autoFocus\n />\n </div>\n\n <div className=\"max-h-48 overflow-y-auto p-1\">\n {filteredLabels.length > 0 ? (\n filteredLabels.map((label) => {\n const isSelected = selectedIds.has(label.id);\n return (\n <button\n key={label.id}\n onClick={() => onToggle(label)}\n className={cn(\n 'w-full flex items-center gap-2 px-2 py-1.5 rounded text-sm text-left',\n 'hover:bg-theme-subtle transition-colors',\n isSelected && 'bg-primary/10',\n )}\n >\n <div\n className=\"w-3 h-3 rounded-full shrink-0\"\n style={{ backgroundColor: label.color }}\n />\n <span className=\"flex-1 text-theme truncate\">{label.name}</span>\n {isSelected && <Check className=\"w-4 h-4 text-primary-light\" />}\n </button>\n );\n })\n ) : search && !exactMatch ? (\n <button\n onClick={handleQuickCreate}\n className=\"w-full flex items-center gap-2 px-2 py-1.5 rounded text-sm text-left hover:bg-theme-subtle\"\n >\n <Plus className=\"w-3 h-3 text-primary-light\" />\n <span className=\"text-theme\">Criar \"{search}\"</span>\n </button>\n ) : (\n <p className=\"px-2 py-4 text-sm text-theme-muted text-center\">\n Nenhuma label encontrada\n </p>\n )}\n </div>\n\n {/* Create new label section */}\n {onCreate && (\n <div className=\"p-2 border-t border-theme-subtle\">\n {isCreating ? (\n <div className=\"space-y-2\">\n <Input\n value={newLabelName}\n onChange={(e) => setNewLabelName(e.target.value)}\n placeholder=\"Nome da label\"\n className=\"h-8 text-sm\"\n autoFocus\n onKeyDown={(e) => {\n if (e.key === 'Enter') handleCreate();\n if (e.key === 'Escape') setIsCreating(false);\n }}\n />\n <div className=\"flex flex-wrap gap-1\">\n {presetColors.map((color) => (\n <button\n key={color}\n onClick={() => setNewLabelColor(color)}\n className={cn(\n 'w-5 h-5 rounded-full transition-transform',\n newLabelColor === color && 'ring-2 ring-primary ring-offset-1 ring-offset-theme-card scale-110',\n )}\n style={{ backgroundColor: color }}\n />\n ))}\n </div>\n <div className=\"flex gap-2 justify-end\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => setIsCreating(false)}\n className=\"h-7 text-xs\"\n >\n Cancelar\n </Button>\n <Button\n variant=\"default\"\n size=\"sm\"\n onClick={handleCreate}\n disabled={!newLabelName.trim()}\n className=\"h-7 text-xs\"\n >\n Criar\n </Button>\n </div>\n </div>\n ) : (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => setIsCreating(true)}\n className=\"w-full justify-start text-xs text-theme-muted\"\n >\n <Plus className=\"w-3 h-3 mr-2\" />\n Nova label\n </Button>\n )}\n </div>\n )}\n </PopoverContent>\n </Popover>\n );\n}\n\nLabelPicker.displayName = 'LabelPicker';\n","// ─────────────────────────────────────────────\n// AssigneePicker — Select assignees popover\n// ─────────────────────────────────────────────\n\n'use client';\n\nimport * as React from 'react';\nimport { Plus, Check, Search } from 'lucide-react';\nimport { cn } from '../../../lib/utils';\nimport { Button } from '../../primitives/button';\nimport { Input } from '../../primitives/input';\nimport { Avatar, AvatarFallback, AvatarImage } from '../../primitives/avatar';\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from '../../primitives/popover';\n\n// ─── Types ──────────────────────────────────\n\nexport interface PickerAssignee {\n id: string;\n name: string;\n avatarUrl?: string;\n email?: string;\n type?: 'USER' | 'GROUP';\n}\n\nexport interface AssigneePickerProps {\n /** Currently selected assignees */\n selectedAssignees: PickerAssignee[];\n /** Available users to assign */\n availableUsers: PickerAssignee[];\n /** Available groups to assign */\n availableGroups?: PickerAssignee[];\n /** Called when a user/group is toggled (assigned/unassigned) */\n onToggle: (item: PickerAssignee) => void;\n /** Custom trigger button (optional) */\n trigger?: React.ReactNode;\n /** Whether the picker is disabled */\n disabled?: boolean;\n /** Max number of items allowed (optional) */\n maxAssignees?: number;\n}\n\n// ─── Helpers ────────────────────────────────\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\n// ─── Component ──────────────────────────────\n\nexport function AssigneePicker({\n selectedAssignees,\n availableUsers,\n availableGroups = [],\n onToggle,\n trigger,\n disabled = false,\n maxAssignees,\n}: AssigneePickerProps) {\n const [open, setOpen] = React.useState(false);\n const [search, setSearch] = React.useState('');\n\n const selectedIds = new Set(selectedAssignees.map((a) => a.id));\n const canAddMore = maxAssignees ? selectedAssignees.length < maxAssignees : true;\n\n // Filter available items by search\n const filteredUsers = availableUsers.filter(\n (user) =>\n user.name.toLowerCase().includes(search.toLowerCase()) ||\n user.email?.toLowerCase().includes(search.toLowerCase()),\n );\n\n const filteredGroups = availableGroups.filter(\n (group) =>\n group.name.toLowerCase().includes(search.toLowerCase()),\n );\n\n const renderItem = (item: PickerAssignee) => {\n const isSelected = selectedIds.has(item.id);\n const isDisabled = !isSelected && !canAddMore;\n const isGroup = item.type === 'GROUP';\n\n return (\n <button\n key={item.id}\n onClick={() => !isDisabled && onToggle(item)}\n disabled={isDisabled}\n className={cn(\n 'w-full flex items-center gap-3 px-2 py-2 rounded text-left',\n 'hover:bg-theme-subtle transition-colors',\n isSelected && 'bg-primary/10',\n isDisabled && 'opacity-50 cursor-not-allowed',\n )}\n >\n <Avatar shape={isGroup ? 'square' : 'circle'} size=\"sm\" className=\"w-7 h-7 shrink-0\">\n {item.avatarUrl && <AvatarImage src={item.avatarUrl} alt={item.name} />}\n <AvatarFallback className={cn(\n 'text-[10px]',\n isGroup ? 'bg-amber-500/20 text-amber-400' : 'bg-primary/20 text-primary-light'\n )}>\n {getInitials(item.name)}\n </AvatarFallback>\n </Avatar>\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center gap-2\">\n <p className=\"text-sm text-theme font-medium truncate\">{item.name}</p>\n {isGroup && (\n <span className=\"text-[10px] px-1.5 py-0.5 rounded bg-amber-500/10 text-amber-400 border border-amber-500/20 uppercase font-bold\">\n Group\n </span>\n )}\n </div>\n {item.email && (\n <p className=\"text-xs text-theme-muted truncate\">{item.email}</p>\n )}\n </div>\n {isSelected && <Check className=\"w-4 h-4 text-primary-light shrink-0\" />}\n </button>\n );\n };\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild disabled={disabled}>\n {trigger ?? (\n <Button variant=\"secondary\" size=\"sm\" className=\"h-7 px-2 text-xs\">\n <Plus className=\"w-3 h-3 mr-1\" />\n Adicionar\n </Button>\n )}\n </PopoverTrigger>\n <PopoverContent className=\"w-64 p-0 shadow-glass-xl border-theme-subtle bg-theme-surface/90 backdrop-blur-md\" align=\"start\">\n <div className=\"p-2 border-b border-theme-subtle\">\n <div className=\"relative\">\n <Search className=\"absolute left-2.5 top-1/2 -translate-y-1/2 w-3.5 h-3.5 text-theme-muted\" />\n <Input\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n placeholder=\"Buscar...\"\n className=\"h-8 pl-8 text-sm bg-theme-void/50\"\n autoFocus\n />\n </div>\n </div>\n\n <div className=\"max-h-64 overflow-y-auto p-1 py-2 custom-scrollbar\">\n {filteredGroups.length > 0 && (\n <div className=\"mb-2\">\n <p className=\"px-2 pb-1 text-[10px] font-bold text-theme-muted uppercase tracking-wider\">Grupos</p>\n {filteredGroups.map(renderItem)}\n </div>\n )}\n\n {filteredUsers.length > 0 && (\n <div>\n {filteredGroups.length > 0 && <p className=\"px-2 pt-2 pb-1 text-[10px] font-bold text-theme-muted uppercase tracking-wider border-t border-theme-subtle/50 mt-2\">Usuários</p>}\n {filteredUsers.map(renderItem)}\n </div>\n )}\n\n {filteredUsers.length === 0 && filteredGroups.length === 0 && (\n <p className=\"px-2 py-6 text-sm text-theme-muted text-center\">\n Nenhum resultado encontrado\n </p>\n )}\n </div>\n\n {maxAssignees && (\n <div className=\"p-2 border-t border-theme-subtle\">\n <p className=\"text-xs text-theme-muted text-center\">\n {selectedAssignees.length}/{maxAssignees} selecionados\n </p>\n </div>\n )}\n </PopoverContent>\n </Popover>\n );\n}\n\nAssigneePicker.displayName = 'AssigneePicker';\n","// ─────────────────────────────────────────────\n// TaskDetailSheet — Sheet para detalhes da task\n// ─────────────────────────────────────────────\n// Desktop: Sheet da direita para a esquerda\n// Mobile: Drawer full-screen\n// Edição inline com Enter para salvar\n// Gerenciamento completo de subtasks\n// ─────────────────────────────────────────────\n\n'use client';\n\nimport * as React from 'react';\nimport { format } from 'date-fns';\nimport { ptBR } from 'date-fns/locale';\nimport { X, Plus, Trash2, Calendar, Check, Square, CheckSquare, Zap } from 'lucide-react';\nimport { cn } from '../../lib/utils';\nimport { Sheet, SheetContent, SheetHeader, SheetTitle } from '../primitives/sheet';\nimport { Drawer, DrawerContent, DrawerHeader, DrawerTitle } from '../primitives/drawer';\nimport { Button } from '../primitives/button';\nimport { Input } from '../primitives/input';\nimport { Badge } from '../primitives/badge';\nimport { Separator } from '../primitives/separator';\nimport { Avatar, AvatarFallback } from '../primitives/avatar';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '../primitives/select';\nimport { Skeleton } from '../primitives/skeleton';\nimport { CommentThread } from '../comments/comment-thread';\nimport type { Comment, CommentAuthor } from '../comments/types';\nimport { OrgCalendar, OrgFlag, OrgCheck, OrgClose } from '../../icons';\nimport { LabelPicker, type PickerLabel } from './primitives/label-picker';\nimport { AssigneePicker, type PickerAssignee } from './primitives/assignee-picker';\n\n// ─── Types ──────────────────────────────────\n\nexport type TaskStatus = 'TODO' | 'IN_PROGRESS' | 'DONE' | 'BLOCKED' | 'REVIEW';\nexport type TaskPriority = 'LOW' | 'MEDIUM' | 'HIGH' | 'URGENT';\n\nexport interface TaskLabel {\n id: string;\n name: string;\n color: string;\n}\n\nexport interface TaskAssignee {\n id: string;\n name: string;\n avatarUrl?: string;\n}\n\nexport interface TaskSubtask {\n id: string;\n title: string;\n completed: boolean;\n}\n\nexport interface TaskDetailData {\n id: string;\n title: string;\n description?: string;\n number?: number;\n status: TaskStatus;\n priority: TaskPriority;\n labels: TaskLabel[];\n assignees: TaskAssignee[];\n dueDate?: string;\n startDate?: string;\n storyPoints?: number;\n subtaskCount?: number;\n subtaskDone?: number;\n commentCount?: number;\n attachmentCount?: number;\n subtasks?: TaskSubtask[];\n assigneeGroup?: TaskAssignee;\n}\n\nexport interface TaskDetailSheetProps {\n task: TaskDetailData | null;\n open: boolean;\n onOpenChange: (open: boolean) => void;\n onUpdate?: (taskId: string, updates: Partial<TaskDetailData>) => Promise<void>;\n // Label operations\n onAddLabel?: (taskId: string) => void;\n onRemoveLabel?: (taskId: string, labelId: string) => void;\n onToggleLabel?: (taskId: string, label: TaskLabel) => void;\n onCreateLabel?: (name: string, color: string) => Promise<TaskLabel>;\n availableLabels?: TaskLabel[];\n // Assignee operations\n onAddAssignee?: (taskId: string) => void;\n onRemoveAssignee?: (taskId: string, assigneeId: string) => void;\n onToggleAssignee?: (taskId: string, assignee: TaskAssignee) => void;\n availableUsers?: TaskAssignee[];\n // Assignee group\n availableGroups?: TaskAssignee[];\n onToggleAssigneeGroup?: (taskId: string, group: TaskAssignee | null) => void;\n // Subtask operations\n onAddSubtask?: (taskId: string, title: string) => Promise<void>;\n onToggleSubtask?: (taskId: string, subtaskId: string, completed: boolean) => Promise<void>;\n onDeleteSubtask?: (taskId: string, subtaskId: string) => Promise<void>;\n onUpdateSubtask?: (taskId: string, subtaskId: string, title: string) => Promise<void>;\n onDeleteTask?: (taskId: string) => Promise<void>;\n comments?: Comment[];\n currentUser?: CommentAuthor;\n loading?: boolean;\n availableStatuses?: { value: TaskStatus; label: string }[];\n availablePriorities?: { value: TaskPriority; label: string; color: string }[];\n}\n\n// ─── Config ─────────────────────────────────\n\nconst defaultStatuses: { value: TaskStatus; label: string }[] = [\n { value: 'TODO', label: 'A Fazer' },\n { value: 'IN_PROGRESS', label: 'Em Progresso' },\n { value: 'REVIEW', label: 'Em Revisão' },\n { value: 'BLOCKED', label: 'Bloqueado' },\n { value: 'DONE', label: 'Concluído' },\n];\n\nconst defaultPriorities: { value: TaskPriority; label: string; color: string }[] = [\n { value: 'LOW', label: 'Baixa', color: '#6b7280' },\n { value: 'MEDIUM', label: 'Média', color: '#3b82f6' },\n { value: 'HIGH', label: 'Alta', color: '#f59e0b' },\n { value: 'URGENT', label: 'Urgente', color: '#ef4444' },\n];\n\nconst statusColors: Record<TaskStatus, string> = {\n TODO: 'bg-slate-500/15 text-slate-400 border-slate-500/30',\n IN_PROGRESS: 'bg-blue-500/15 text-blue-400 border-blue-500/30',\n REVIEW: 'bg-purple-500/15 text-purple-400 border-purple-500/30',\n BLOCKED: 'bg-rose-500/15 text-rose-400 border-rose-500/30',\n DONE: 'bg-emerald-500/15 text-emerald-400 border-emerald-500/30',\n};\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// ─── Inline Editable Field ──────────────────\n\ninterface EditableFieldProps {\n value: string;\n onSave: (value: string) => void;\n placeholder?: string;\n className?: string;\n inputClassName?: string;\n as?: 'h1' | 'h2' | 'p' | 'span';\n}\n\nfunction EditableField({\n value,\n onSave,\n placeholder = 'Clique para editar',\n className,\n inputClassName,\n as: Tag = 'span',\n}: EditableFieldProps) {\n const [editing, setEditing] = React.useState(false);\n const [localValue, setLocalValue] = React.useState(value);\n const inputRef = React.useRef<HTMLInputElement>(null);\n\n React.useEffect(() => {\n setLocalValue(value);\n }, [value]);\n\n React.useEffect(() => {\n if (editing && inputRef.current) {\n inputRef.current.focus();\n inputRef.current.select();\n }\n }, [editing]);\n\n const handleSave = () => {\n setEditing(false);\n if (localValue !== value) {\n onSave(localValue);\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n handleSave();\n }\n if (e.key === 'Escape') {\n setLocalValue(value);\n setEditing(false);\n }\n };\n\n if (editing) {\n return (\n <input\n ref={inputRef}\n type=\"text\"\n value={localValue}\n onChange={(e) => setLocalValue(e.target.value)}\n onBlur={handleSave}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n className={cn(\n 'w-full bg-theme-subtle backdrop-blur-md border border-theme-subtle px-3 py-2 text-sm font-light text-theme transition-all rounded-xl 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',\n inputClassName,\n )}\n />\n );\n }\n\n return (\n <Tag\n onClick={() => setEditing(true)}\n className={cn(\n 'cursor-pointer hover:bg-theme-highlight px-2 py-1 -mx-2 rounded transition-colors',\n !value && 'text-theme-muted italic',\n className,\n )}\n >\n {value || placeholder}\n </Tag>\n );\n}\n\n// ─── Date Picker Inline ─────────────────────\n\ninterface EditableDateProps {\n value?: string;\n onSave: (value: string) => void;\n placeholder?: string;\n}\n\nfunction EditableDate({ value, onSave, placeholder = 'Adicionar data' }: EditableDateProps) {\n const [editing, setEditing] = React.useState(false);\n const inputRef = React.useRef<HTMLInputElement>(null);\n\n React.useEffect(() => {\n if (editing && inputRef.current) {\n inputRef.current.focus();\n }\n }, [editing]);\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n onSave(e.target.value);\n setEditing(false);\n };\n\n if (editing) {\n return (\n <input\n ref={inputRef}\n type=\"date\"\n defaultValue={value ? value.split('T')[0] : ''}\n onChange={handleChange}\n onBlur={() => setEditing(false)}\n className=\"w-full bg-theme-subtle backdrop-blur-md border border-theme-subtle px-3 py-2 text-sm font-light text-theme transition-all rounded-xl 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\"\n />\n );\n }\n\n return (\n <button\n onClick={() => setEditing(true)}\n className={cn(\n 'flex items-center gap-2 px-2 py-1 -mx-2 rounded hover:bg-theme-highlight transition-colors text-sm',\n !value && 'text-theme-muted italic',\n )}\n >\n <Calendar className=\"w-4 h-4\" />\n {value ? format(new Date(value), 'dd MMM yyyy', { locale: ptBR }) : placeholder}\n </button>\n );\n}\n\n// ─── Story Points Editable ──────────────────\n\ninterface EditableStoryPointsProps {\n value?: number;\n onSave: (value: number | undefined) => void;\n}\n\nfunction EditableStoryPoints({ value, onSave }: EditableStoryPointsProps) {\n const [editing, setEditing] = React.useState(false);\n const [localValue, setLocalValue] = React.useState(value !== undefined ? String(value) : '');\n const inputRef = React.useRef<HTMLInputElement>(null);\n\n React.useEffect(() => {\n setLocalValue(value !== undefined ? String(value) : '');\n }, [value]);\n\n React.useEffect(() => {\n if (editing && inputRef.current) {\n inputRef.current.focus();\n inputRef.current.select();\n }\n }, [editing]);\n\n const handleSave = () => {\n setEditing(false);\n const parsed = localValue === '' ? undefined : parseFloat(localValue);\n if (parsed !== value) {\n onSave(isNaN(parsed as number) ? undefined : parsed);\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter') { e.preventDefault(); handleSave(); }\n if (e.key === 'Escape') { setLocalValue(value !== undefined ? String(value) : ''); setEditing(false); }\n };\n\n if (editing) {\n return (\n <input\n ref={inputRef}\n type=\"number\"\n min={0}\n step={0.5}\n value={localValue}\n onChange={(e) => setLocalValue(e.target.value)}\n onBlur={handleSave}\n onKeyDown={handleKeyDown}\n placeholder=\"0\"\n className=\"w-28 bg-theme-subtle backdrop-blur-md border border-theme-subtle px-3 py-1.5 text-sm font-light text-theme transition-all rounded-xl 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\"\n />\n );\n }\n\n return (\n <button\n onClick={() => setEditing(true)}\n className={cn(\n 'flex items-center gap-2 px-2 py-1 -mx-2 rounded hover:bg-theme-highlight transition-colors text-sm',\n value == null && 'text-theme-muted italic',\n )}\n >\n {value != null ? (\n <span className=\"inline-flex items-center gap-1 font-semibold\">\n <span className=\"text-primary-light\">{value}</span>\n <span className=\"text-theme-muted text-xs\">pts</span>\n </span>\n ) : (\n <span className=\"text-theme-muted italic\">Adicionar</span>\n )}\n </button>\n );\n}\n\n// ─── Label Item ─────────────────────────────\n\ninterface LabelItemProps {\n label: TaskLabel;\n onRemove?: () => void;\n showDelete?: boolean;\n}\n\nfunction LabelItem({ label, onRemove, showDelete = true }: LabelItemProps) {\n return (\n <div className=\"group relative inline-flex\">\n <Badge\n className=\"border\"\n style={{\n backgroundColor: `${label.color}20`,\n borderColor: `${label.color}50`,\n color: label.color,\n }}\n >\n {label.name}\n </Badge>\n {showDelete && onRemove && (\n <button\n onClick={onRemove}\n className={cn(\n 'absolute -top-1 -right-1 w-4 h-4 rounded-full bg-rose-500 text-white flex items-center justify-center transition-opacity',\n 'md:opacity-0 md:group-hover:opacity-100',\n 'opacity-100',\n )}\n >\n <X className=\"w-2.5 h-2.5\" />\n </button>\n )}\n </div>\n );\n}\n\n// ─── Assignee Item ──────────────────────────\n\ninterface AssigneeItemProps {\n assignee: TaskAssignee;\n onRemove?: () => void;\n showDelete?: boolean;\n}\n\nfunction AssigneeItem({ assignee, onRemove, showDelete = true }: AssigneeItemProps) {\n return (\n <div className=\"group relative inline-flex items-center gap-2 px-3 py-1.5 bg-theme-subtle border border-theme-subtle rounded-full\">\n <Avatar shape=\"circle\" size=\"sm\" className=\"w-5 h-5\">\n <AvatarFallback className=\"bg-primary/20 text-primary-light text-[10px] font-semibold\">\n {assignee.name.charAt(0).toUpperCase()}\n </AvatarFallback>\n </Avatar>\n <span className=\"text-xs font-medium text-theme\">{assignee.name}</span>\n {showDelete && onRemove && (\n <button\n onClick={onRemove}\n className={cn(\n 'w-4 h-4 rounded-full bg-rose-500/20 text-rose-400 flex items-center justify-center transition-opacity',\n 'md:opacity-0 md:group-hover:opacity-100',\n 'opacity-100',\n )}\n >\n <X className=\"w-2.5 h-2.5\" />\n </button>\n )}\n </div>\n );\n}\n\n// ─── Subtask Item ───────────────────────────\n\ninterface SubtaskItemProps {\n subtask: TaskSubtask;\n onToggle?: (completed: boolean) => void;\n onDelete?: () => void;\n onUpdate?: (title: string) => void;\n}\n\nfunction SubtaskItem({ subtask, onToggle, onDelete, onUpdate }: SubtaskItemProps) {\n const [editing, setEditing] = React.useState(false);\n const [localTitle, setLocalTitle] = React.useState(subtask.title);\n const inputRef = React.useRef<HTMLInputElement>(null);\n\n React.useEffect(() => {\n setLocalTitle(subtask.title);\n }, [subtask.title]);\n\n React.useEffect(() => {\n if (editing && inputRef.current) {\n inputRef.current.focus();\n inputRef.current.select();\n }\n }, [editing]);\n\n const handleSave = () => {\n setEditing(false);\n if (localTitle.trim() && localTitle !== subtask.title) {\n onUpdate?.(localTitle.trim());\n } else {\n setLocalTitle(subtask.title);\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n handleSave();\n }\n if (e.key === 'Escape') {\n setLocalTitle(subtask.title);\n setEditing(false);\n }\n };\n\n return (\n <div className=\"group flex items-center gap-2 py-1.5 px-2 -mx-2 rounded hover:bg-theme-highlight transition-colors\">\n {/* Checkbox */}\n <button\n onClick={() => onToggle?.(!subtask.completed)}\n className={cn(\n 'flex-shrink-0 w-5 h-5 rounded border transition-all',\n subtask.completed\n ? 'bg-emerald-500/20 border-emerald-500/50 text-emerald-400'\n : 'border-theme-subtle hover:border-primary-light/50 text-transparent hover:text-primary-light',\n )}\n >\n <Check className=\"w-full h-full p-0.5\" />\n </button>\n\n {/* Title */}\n {editing ? (\n <input\n ref={inputRef}\n type=\"text\"\n value={localTitle}\n onChange={(e) => setLocalTitle(e.target.value)}\n onBlur={handleSave}\n onKeyDown={handleKeyDown}\n className=\"flex-1 bg-theme-subtle border border-theme-subtle px-2 py-1 text-sm text-theme rounded focus:outline-none focus:ring-1 focus:ring-primary-light\"\n />\n ) : (\n <span\n onClick={() => setEditing(true)}\n className={cn(\n 'flex-1 text-sm cursor-pointer transition-colors',\n subtask.completed ? 'text-theme-muted line-through' : 'text-theme',\n )}\n >\n {subtask.title}\n </span>\n )}\n\n {/* Delete button */}\n {onDelete && (\n <button\n onClick={onDelete}\n className={cn(\n 'flex-shrink-0 w-6 h-6 rounded flex items-center justify-center transition-all',\n 'text-theme-muted hover:text-rose-400 hover:bg-rose-500/10',\n 'md:opacity-0 md:group-hover:opacity-100',\n 'opacity-100',\n )}\n >\n <Trash2 className=\"w-3.5 h-3.5\" />\n </button>\n )}\n </div>\n );\n}\n\n// ─── Subtask Add Form ───────────────────────\n\ninterface SubtaskAddFormProps {\n onAdd: (title: string) => void;\n}\n\nfunction SubtaskAddForm({ onAdd }: SubtaskAddFormProps) {\n const [adding, setAdding] = React.useState(false);\n const [title, setTitle] = React.useState('');\n const inputRef = React.useRef<HTMLInputElement>(null);\n\n React.useEffect(() => {\n if (adding && inputRef.current) {\n inputRef.current.focus();\n }\n }, [adding]);\n\n const handleSubmit = () => {\n if (title.trim()) {\n onAdd(title.trim());\n setTitle('');\n // Keep form open for rapid entry\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n handleSubmit();\n }\n if (e.key === 'Escape') {\n setTitle('');\n setAdding(false);\n }\n };\n\n if (!adding) {\n return (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => setAdding(true)}\n className=\"w-full justify-start text-xs text-theme-muted hover:text-theme\"\n >\n <Plus className=\"w-3 h-3 mr-2\" />\n Adicionar subtask\n </Button>\n );\n }\n\n return (\n <div className=\"flex items-center gap-2\">\n <input\n ref={inputRef}\n type=\"text\"\n value={title}\n onChange={(e) => setTitle(e.target.value)}\n onKeyDown={handleKeyDown}\n onBlur={() => {\n if (!title.trim()) setAdding(false);\n }}\n placeholder=\"Título da subtask\"\n className=\"flex-1 bg-theme-subtle border border-theme-subtle px-3 py-1.5 text-sm text-theme rounded focus:outline-none focus:ring-1 focus:ring-primary-light\"\n />\n <Button\n variant=\"secondary\"\n size=\"sm\"\n onClick={handleSubmit}\n disabled={!title.trim()}\n className=\"h-8\"\n >\n <Check className=\"w-3 h-3\" />\n </Button>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => {\n setTitle('');\n setAdding(false);\n }}\n className=\"h-8\"\n >\n <X className=\"w-3 h-3\" />\n </Button>\n </div>\n );\n}\n\n// ─── Subtask Section ────────────────────────\n\ninterface SubtaskSectionProps {\n taskId: string;\n subtasks?: TaskSubtask[];\n subtaskCount?: number;\n subtaskDone?: number;\n onAdd?: (taskId: string, title: string) => Promise<void>;\n onToggle?: (taskId: string, subtaskId: string, completed: boolean) => Promise<void>;\n onDelete?: (taskId: string, subtaskId: string) => Promise<void>;\n onUpdate?: (taskId: string, subtaskId: string, title: string) => Promise<void>;\n}\n\nfunction SubtaskSection({\n taskId,\n subtasks,\n subtaskCount,\n subtaskDone,\n onAdd,\n onToggle,\n onDelete,\n onUpdate,\n}: SubtaskSectionProps) {\n const [loading, setLoading] = React.useState<string | null>(null);\n\n const handleAdd = async (title: string) => {\n if (onAdd) {\n setLoading('add');\n try {\n await onAdd(taskId, title);\n } finally {\n setLoading(null);\n }\n }\n };\n\n const handleToggle = async (subtaskId: string, completed: boolean) => {\n if (onToggle) {\n setLoading(subtaskId);\n try {\n await onToggle(taskId, subtaskId, completed);\n } finally {\n setLoading(null);\n }\n }\n };\n\n const handleDelete = async (subtaskId: string) => {\n if (onDelete) {\n setLoading(subtaskId);\n try {\n await onDelete(taskId, subtaskId);\n } finally {\n setLoading(null);\n }\n }\n };\n\n const handleUpdate = async (subtaskId: string, title: string) => {\n if (onUpdate) {\n setLoading(subtaskId);\n try {\n await onUpdate(taskId, subtaskId, title);\n } finally {\n setLoading(null);\n }\n }\n };\n\n // Calculate progress\n const total = subtasks?.length ?? subtaskCount ?? 0;\n const done = subtasks?.filter((s) => s.completed).length ?? subtaskDone ?? 0;\n const progress = total > 0 ? (done / total) * 100 : 0;\n\n return (\n <div className=\"space-y-3\">\n <div className=\"flex items-center justify-between\">\n <label className=\"text-xs font-medium text-theme-muted uppercase tracking-wide\">\n Subtasks\n </label>\n {total > 0 && (\n <span className=\"text-xs text-theme-muted\">\n {done}/{total}\n </span>\n )}\n </div>\n\n {/* Progress bar */}\n {total > 0 && (\n <div className=\"h-1.5 bg-theme-subtle rounded-full overflow-hidden\">\n <div\n className=\"h-full bg-emerald-500 transition-all duration-[400ms] ease-[cubic-bezier(0.25,1,0.5,1)]\"\n style={{ width: `${progress}%` }}\n />\n </div>\n )}\n\n {/* Subtask list */}\n {subtasks && subtasks.length > 0 && (\n <div className=\"space-y-1\">\n {subtasks.map((subtask) => (\n <SubtaskItem\n key={subtask.id}\n subtask={subtask}\n onToggle={onToggle ? (c) => handleToggle(subtask.id, c) : undefined}\n onDelete={onDelete ? () => handleDelete(subtask.id) : undefined}\n onUpdate={onUpdate ? (t) => handleUpdate(subtask.id, t) : undefined}\n />\n ))}\n </div>\n )}\n\n {/* Add form */}\n {onAdd && <SubtaskAddForm onAdd={handleAdd} />}\n\n {/* Empty state */}\n {!subtasks?.length && !onAdd && total === 0 && (\n <p className=\"text-sm text-theme-muted italic\">Sem subtasks</p>\n )}\n </div>\n );\n}\n\n// ─── Task Detail Content ────────────────────\n\ninterface TaskDetailContentProps {\n task: TaskDetailData;\n onUpdate?: TaskDetailSheetProps['onUpdate'];\n onAddLabel?: TaskDetailSheetProps['onAddLabel'];\n onRemoveLabel?: TaskDetailSheetProps['onRemoveLabel'];\n onToggleLabel?: TaskDetailSheetProps['onToggleLabel'];\n onCreateLabel?: TaskDetailSheetProps['onCreateLabel'];\n availableLabels?: TaskLabel[];\n onAddAssignee?: TaskDetailSheetProps['onAddAssignee'];\n onRemoveAssignee?: TaskDetailSheetProps['onRemoveAssignee'];\n onToggleAssignee?: TaskDetailSheetProps['onToggleAssignee'];\n availableUsers?: TaskAssignee[];\n availableGroups?: TaskAssignee[];\n onToggleAssigneeGroup?: TaskDetailSheetProps['onToggleAssigneeGroup'];\n onAddSubtask?: TaskDetailSheetProps['onAddSubtask'];\n onToggleSubtask?: TaskDetailSheetProps['onToggleSubtask'];\n onDeleteSubtask?: TaskDetailSheetProps['onDeleteSubtask'];\n onUpdateSubtask?: TaskDetailSheetProps['onUpdateSubtask'];\n onDeleteTask?: TaskDetailSheetProps['onDeleteTask'];\n comments?: Comment[];\n currentUser?: CommentAuthor;\n statuses: { value: TaskStatus; label: string }[];\n priorities: { value: TaskPriority; label: string; color: string }[];\n}\n\nfunction TaskDetailContent({\n task,\n onUpdate,\n onAddLabel,\n onRemoveLabel,\n onToggleLabel,\n onCreateLabel,\n availableLabels,\n onAddAssignee,\n onRemoveAssignee,\n onToggleAssignee,\n availableUsers,\n availableGroups,\n onToggleAssigneeGroup,\n onAddSubtask,\n onToggleSubtask,\n onDeleteSubtask,\n onUpdateSubtask,\n onDeleteTask,\n comments,\n currentUser,\n statuses,\n priorities,\n}: TaskDetailContentProps) {\n const handleFieldUpdate = async (field: keyof TaskDetailData, value: any) => {\n if (onUpdate) {\n await onUpdate(task.id, { [field]: value });\n }\n };\n\n return (\n <div className=\"flex-1 overflow-y-auto px-6 py-4 space-y-6 text-theme\">\n {/* Task Number */}\n {task.number && (\n <div className=\"flex justify-end -mt-2\">\n <Badge className=\"bg-theme-subtle border border-theme-subtle text-theme-muted font-mono\">\n #{task.number}\n </Badge>\n </div>\n )}\n\n {/* Title (editable) */}\n <div>\n <EditableField\n value={task.title}\n onSave={(v) => handleFieldUpdate('title', v)}\n placeholder=\"Título da tarefa\"\n as=\"h2\"\n className=\"text-xl font-semibold text-theme\"\n inputClassName=\"text-lg font-semibold\"\n />\n </div>\n\n {/* Status & Priority (selects) */}\n <div className=\"grid grid-cols-2 gap-4\">\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium text-theme-muted uppercase tracking-wide\">\n Status\n </label>\n <Select\n value={task.status}\n onValueChange={(v) => handleFieldUpdate('status', v)}\n >\n <SelectTrigger className=\"h-9\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {statuses.map((s) => (\n <SelectItem key={s.value} value={s.value}>\n <span className={cn('px-2 py-0.5 rounded text-xs', statusColors[s.value])}>\n {s.label}\n </span>\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium text-theme-muted uppercase tracking-wide\">\n Prioridade\n </label>\n <Select\n value={task.priority}\n onValueChange={(v) => handleFieldUpdate('priority', v)}\n >\n <SelectTrigger className=\"h-9\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {priorities.map((p) => (\n <SelectItem key={p.value} value={p.value}>\n <span\n className=\"flex items-center gap-2\"\n style={{ color: p.color }}\n >\n <OrgFlag className=\"w-3 h-3\" />\n {p.label}\n </span>\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n </div>\n\n <Separator className=\"bg-theme-subtle\" />\n\n {/* Labels */}\n <div className=\"space-y-3\">\n <div className=\"flex items-center justify-between\">\n <label className=\"text-xs font-medium text-theme-muted uppercase tracking-wide\">\n Labels\n </label>\n {/* Inline picker when availableLabels is provided */}\n {onToggleLabel && availableLabels ? (\n <LabelPicker\n selectedLabels={task.labels.map((l) => ({ id: l.id, name: l.name, color: l.color }))}\n availableLabels={availableLabels.map((l) => ({ id: l.id, name: l.name, color: l.color }))}\n onToggle={(label) => onToggleLabel(task.id, { id: label.id, name: label.name, color: label.color })}\n onCreate={onCreateLabel ? async (name, color) => {\n const newLabel = await onCreateLabel(name, color);\n return { id: newLabel.id, name: newLabel.name, color: newLabel.color };\n } : undefined}\n />\n ) : onAddLabel ? (\n <Button\n variant=\"secondary\"\n size=\"sm\"\n onClick={() => onAddLabel(task.id)}\n className=\"h-7 px-2 text-xs\"\n >\n <Plus className=\"w-3 h-3 mr-1\" />\n Adicionar\n </Button>\n ) : null}\n </div>\n <div className=\"flex flex-wrap gap-2\">\n {task.labels.length === 0 ? (\n <span className=\"text-sm text-theme-muted italic\">Sem labels</span>\n ) : (\n task.labels.map((label) => (\n <LabelItem\n key={label.id}\n label={label}\n onRemove={onRemoveLabel ? () => onRemoveLabel(task.id, label.id) : undefined}\n />\n ))\n )}\n </div>\n </div>\n\n {/* Assignees */}\n <div className=\"space-y-3\">\n <div className=\"flex items-center justify-between\">\n <label className=\"text-xs font-medium text-theme-muted uppercase tracking-wide\">\n Atribuído para\n </label>\n {/* Inline picker when availableUsers is provided */}\n {onToggleAssignee && availableUsers ? (\n <AssigneePicker\n selectedAssignees={task.assignees.map((a) => ({ id: a.id, name: a.name, avatarUrl: a.avatarUrl }))}\n availableUsers={availableUsers.map((a) => ({ id: a.id, name: a.name, avatarUrl: a.avatarUrl }))}\n onToggle={(assignee) => onToggleAssignee(task.id, { id: assignee.id, name: assignee.name, avatarUrl: assignee.avatarUrl })}\n />\n ) : onAddAssignee ? (\n <Button\n variant=\"secondary\"\n size=\"sm\"\n onClick={() => onAddAssignee(task.id)}\n className=\"h-7 px-2 text-xs\"\n >\n <Plus className=\"w-3 h-3 mr-1\" />\n Adicionar\n </Button>\n ) : null}\n </div>\n <div className=\"flex flex-wrap gap-2\">\n {task.assignees.length === 0 ? (\n <span className=\"text-sm text-theme-muted italic\">Ninguém atribuído</span>\n ) : (\n task.assignees.map((assignee) => (\n <AssigneeItem\n key={assignee.id}\n assignee={assignee}\n onRemove={\n onRemoveAssignee ? () => onRemoveAssignee(task.id, assignee.id) : undefined\n }\n />\n ))\n )}\n </div>\n </div>\n\n {/* Assignee Group */}\n {availableGroups && availableGroups.length > 0 && (\n <div className=\"space-y-2\">\n <div className=\"flex items-center justify-between\">\n <label className=\"text-xs font-medium text-theme-muted uppercase tracking-wide\">\n Grupo responsável\n </label>\n {onToggleAssigneeGroup && (\n <AssigneePicker\n selectedAssignees={task.assigneeGroup ? [{ id: task.assigneeGroup.id, name: task.assigneeGroup.name, avatarUrl: task.assigneeGroup.avatarUrl }] : []}\n availableUsers={availableGroups.map((g) => ({ id: g.id, name: g.name, avatarUrl: g.avatarUrl }))}\n onToggle={(group) => {\n const isSame = task.assigneeGroup?.id === group.id;\n onToggleAssigneeGroup(task.id, isSame ? null : { id: group.id, name: group.name, avatarUrl: group.avatarUrl });\n }}\n />\n )}\n </div>\n <div className=\"flex flex-wrap gap-2\">\n {task.assigneeGroup ? (\n <AssigneeItem\n assignee={task.assigneeGroup}\n onRemove={\n onToggleAssigneeGroup ? () => onToggleAssigneeGroup(task.id, null) : undefined\n }\n />\n ) : (\n <span className=\"text-sm text-theme-muted italic\">Nenhum grupo</span>\n )}\n </div>\n </div>\n )}\n\n <Separator className=\"bg-theme-subtle\" />\n\n {/* Dates */}\n <div className=\"grid grid-cols-2 gap-4\">\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium text-theme-muted uppercase tracking-wide\">\n Data de Início\n </label>\n <EditableDate\n value={task.startDate}\n onSave={(v) => handleFieldUpdate('startDate', v)}\n placeholder=\"Adicionar\"\n />\n </div>\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium text-theme-muted uppercase tracking-wide\">\n Data de Vencimento\n </label>\n <EditableDate\n value={task.dueDate}\n onSave={(v) => handleFieldUpdate('dueDate', v)}\n placeholder=\"Adicionar\"\n />\n </div>\n </div>\n\n {/* Story Points */}\n {task.storyPoints !== undefined || onUpdate ? (\n <>\n <Separator className=\"bg-theme-subtle\" />\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium text-theme-muted uppercase tracking-wide flex items-center gap-1.5\">\n <Zap className=\"w-3 h-3\" />\n Story Points\n </label>\n <EditableStoryPoints\n value={task.storyPoints}\n onSave={(v) => handleFieldUpdate('storyPoints', v)}\n />\n </div>\n </>\n ) : null}\n\n <Separator className=\"bg-theme-subtle\" />\n\n {/* Subtasks Section */}\n <SubtaskSection\n taskId={task.id}\n subtasks={task.subtasks}\n subtaskCount={task.subtaskCount}\n subtaskDone={task.subtaskDone}\n onAdd={onAddSubtask}\n onToggle={onToggleSubtask}\n onDelete={onDeleteSubtask}\n onUpdate={onUpdateSubtask}\n />\n\n <Separator className=\"bg-theme-subtle\" />\n\n {/* Comments */}\n <div className=\"space-y-3\">\n <label className=\"text-xs font-medium text-theme-muted uppercase tracking-wide\">\n Comentários\n </label>\n <CommentThread\n entityType=\"task\"\n entityId={task.id}\n comments={comments}\n currentUser={currentUser}\n />\n </div>\n\n {/* Delete Task */}\n {onDeleteTask && (\n <>\n <Separator className=\"bg-theme-subtle\" />\n <div className=\"pb-2\">\n <Button\n variant=\"destructive\"\n size=\"sm\"\n className=\"w-full\"\n onClick={() => onDeleteTask(task.id)}\n >\n <Trash2 className=\"h-4 w-4 mr-2\" />\n Excluir tarefa\n </Button>\n </div>\n </>\n )}\n </div>\n );\n}\n\n// ─── Loading Skeleton ───────────────────────\n\nfunction TaskDetailSkeleton() {\n return (\n <div className=\"flex-1 overflow-y-auto px-6 py-4 space-y-6 animate-pulse text-theme\">\n <Skeleton className=\"h-8 w-3/4\" />\n <div className=\"grid grid-cols-2 gap-4\">\n <Skeleton className=\"h-10 w-full\" />\n <Skeleton className=\"h-10 w-full\" />\n </div>\n <Skeleton className=\"h-px w-full\" />\n <div className=\"space-y-2\">\n <Skeleton className=\"h-4 w-16\" />\n <div className=\"flex gap-2\">\n <Skeleton className=\"h-6 w-16 rounded-full\" />\n <Skeleton className=\"h-6 w-20 rounded-full\" />\n </div>\n </div>\n <div className=\"space-y-2\">\n <Skeleton className=\"h-4 w-24\" />\n <div className=\"flex gap-2\">\n <Skeleton className=\"h-8 w-28 rounded-full\" />\n <Skeleton className=\"h-8 w-32 rounded-full\" />\n </div>\n </div>\n <Skeleton className=\"h-24 w-full\" />\n </div>\n );\n}\n\n// ─── Main Component ─────────────────────────\n\nexport function TaskDetailSheet({\n task,\n open,\n onOpenChange,\n onUpdate,\n onAddLabel,\n onRemoveLabel,\n onToggleLabel,\n onCreateLabel,\n availableLabels,\n onAddAssignee,\n onRemoveAssignee,\n onToggleAssignee,\n availableUsers,\n availableGroups,\n onToggleAssigneeGroup,\n onAddSubtask,\n onToggleSubtask,\n onDeleteSubtask,\n onUpdateSubtask,\n onDeleteTask,\n comments,\n currentUser,\n loading = false,\n availableStatuses = defaultStatuses,\n availablePriorities = defaultPriorities,\n}: TaskDetailSheetProps) {\n const isDesktop = useMediaQuery('(min-width: 768px)');\n\n const content = loading ? (\n <TaskDetailSkeleton />\n ) : task ? (\n <TaskDetailContent\n task={task}\n onUpdate={onUpdate}\n onAddLabel={onAddLabel}\n onRemoveLabel={onRemoveLabel}\n onToggleLabel={onToggleLabel}\n onCreateLabel={onCreateLabel}\n availableLabels={availableLabels}\n onAddAssignee={onAddAssignee}\n onRemoveAssignee={onRemoveAssignee}\n onToggleAssignee={onToggleAssignee}\n availableUsers={availableUsers}\n availableGroups={availableGroups}\n onToggleAssigneeGroup={onToggleAssigneeGroup}\n onAddSubtask={onAddSubtask}\n onToggleSubtask={onToggleSubtask}\n onDeleteSubtask={onDeleteSubtask}\n onUpdateSubtask={onUpdateSubtask}\n onDeleteTask={onDeleteTask}\n comments={comments}\n currentUser={currentUser}\n statuses={availableStatuses}\n priorities={availablePriorities}\n />\n ) : null;\n\n // Desktop: Sheet from right\n if (isDesktop) {\n return (\n <Sheet open={open} onOpenChange={onOpenChange}>\n <SheetContent\n side=\"right\"\n className={cn(\n 'w-full sm:max-w-lg lg:max-w-xl',\n 'border-l border-theme-subtle',\n 'flex flex-col p-0',\n )}\n style={{\n background: 'var(--org-bg-elevated, #110E22)',\n color: 'var(--org-text, #F0ECF9)',\n }}\n >\n <SheetHeader className=\"px-6 py-4 border-b border-theme-subtle\">\n <SheetTitle className=\"text-theme\">\n {task?.number ? `Task #${task.number}` : 'Detalhes da Tarefa'}\n </SheetTitle>\n </SheetHeader>\n {content}\n </SheetContent>\n </Sheet>\n );\n }\n\n // Mobile: Full screen drawer\n return (\n <Drawer open={open} onOpenChange={onOpenChange}>\n <DrawerContent\n className={cn(\n 'h-[100dvh] max-h-[100dvh]',\n 'border-none rounded-none',\n 'flex flex-col',\n )}\n style={{\n background: 'var(--org-bg-elevated, #110E22)',\n color: 'var(--org-text, #F0ECF9)',\n }}\n >\n <DrawerHeader className=\"px-4 py-3 border-b border-theme-subtle flex-shrink-0\">\n <div className=\"flex items-center justify-between\">\n <DrawerTitle className=\"text-theme\">\n {task?.number ? `Task #${task.number}` : 'Detalhes'}\n </DrawerTitle>\n <button\n onClick={() => onOpenChange(false)}\n className=\"p-2 rounded-xl hover:bg-theme-highlight text-theme-muted\"\n >\n <X className=\"w-5 h-5\" />\n </button>\n </div>\n </DrawerHeader>\n {content}\n </DrawerContent>\n </Drawer>\n );\n}\n\nTaskDetailSheet.displayName = 'TaskDetailSheet';\n\n// Export types and hook\nexport { useMediaQuery };\n","'use client';\n\nimport * as React from 'react';\nimport { GripVertical } from 'lucide-react';\nimport { cn } from '../../lib/utils';\nimport { Badge } from '../primitives/badge';\nimport { UserAvatar } from '../primitives/user-avatar';\nimport { TaskDetailSheet, type TaskDetailData, type TaskStatus, type TaskPriority } from './task-detail-sheet';\nimport { OrgCheckCircle, OrgComment, OrgAttachment, OrgCalendar, OrgSprint } from '../../icons';\n\n// ─── Priority Colors (Glass Style) ──────────\n\nconst priorityColors: Record<string, string> = {\n CRITICAL: 'bg-rose-500/15 text-rose-400 border-rose-500/30',\n URGENT: 'bg-rose-500/15 text-rose-400 border-rose-500/30',\n HIGH: 'bg-amber-500/15 text-amber-400 border-amber-500/30',\n MEDIUM: 'bg-blue-500/15 text-blue-400 border-blue-500/30',\n LOW: 'bg-slate-500/15 text-slate-400 border-slate-500/30',\n NONE: 'bg-slate-500/10 text-slate-500 border-slate-500/20',\n};\n\n// Legacy config for backwards compatibility\nconst priorityConfig = {\n CRITICAL: { color: 'bg-rose-500', label: 'Critical', variant: 'error' as const },\n URGENT: { color: 'bg-rose-500', label: 'Urgent', variant: 'error' as const },\n HIGH: { color: 'bg-amber-500', label: 'High', variant: 'warning' as const },\n MEDIUM: { color: 'bg-blue-500', label: 'Medium', variant: 'info' as const },\n LOW: { color: 'bg-neutral-400', label: 'Low', variant: 'default' as const },\n NONE: { color: 'bg-neutral-400', label: 'None', variant: 'default' as const },\n} as const;\n\n// ─── Types ──────────────────────────────────\n\nexport interface TaskCardData {\n id: string;\n title: string;\n number?: number;\n description?: string | null;\n priority?: keyof typeof priorityConfig;\n status?: TaskStatus;\n storyPoints?: number | null;\n /** Single assignee (legacy support) */\n assignee?: {\n id?: string;\n name: string;\n avatarUrl?: string | null;\n } | null;\n /** Multiple assignees - recommended approach */\n assignees?: Array<{\n id: string;\n name: string;\n avatarUrl?: string | null;\n }>;\n /** Assign to a group instead of individuals */\n assigneeGroup?: {\n id: string;\n name: string;\n memberCount: number;\n avatarUrl?: string | null;\n } | null;\n labels?: Array<{ id: string; name: string; color: string } | string>;\n dueDate?: string | null;\n startDate?: string | null;\n subtaskCount?: number;\n subtaskDone?: number;\n commentCount?: number;\n attachmentCount?: number;\n reworkCount?: number;\n /** Subtasks for detail sheet */\n subtasks?: Array<{\n id: string;\n title: string;\n completed: boolean;\n }>;\n /** Extra fields the consumer can attach for detail rendering */\n [key: string]: unknown;\n}\n\nexport interface TaskCardProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onDragStart' | 'onDragEnd'> {\n /** Task data to render (undefined will show skeleton) */\n task?: TaskCardData;\n /** Click handler when card is clicked (if set, internal sheet is disabled unless enableDetailSheet=true) */\n onTaskClick?: (task: TaskCardData) => void;\n /** Whether the card is being dragged */\n isDragging?: boolean;\n /** Whether the card is selected */\n isSelected?: boolean;\n /** Compact variant (less padding, fewer details) */\n compact?: boolean;\n /** Enable internal TaskDetailSheet (default true if onTaskClick is not provided) */\n enableDetailSheet?: boolean;\n /** Show drag handle for external DnD libraries */\n showDragHandle?: boolean;\n /** Callbacks for TaskDetailSheet operations */\n onUpdate?: (taskId: string, updates: Partial<TaskDetailData>) => Promise<void>;\n onAddLabel?: (taskId: string) => void;\n onRemoveLabel?: (taskId: string, labelId: string) => void;\n onToggleLabel?: (taskId: string, label: { id: string; name: string; color: string }) => void;\n onCreateLabel?: (name: string, color: string) => Promise<{ id: string; name: string; color: string }>;\n availableLabels?: Array<{ id: string; name: string; color: string }>;\n onAddAssignee?: (taskId: string) => void;\n onRemoveAssignee?: (taskId: string, assigneeId: string) => void;\n onToggleAssignee?: (taskId: string, assignee: { id: string; name: string; avatarUrl?: string }) => void;\n availableUsers?: Array<{ id: string; name: string; avatarUrl?: string }>;\n onAddSubtask?: (taskId: string, title: string) => Promise<void>;\n onToggleSubtask?: (taskId: string, subtaskId: string, completed: boolean) => Promise<void>;\n onDeleteSubtask?: (taskId: string, subtaskId: string) => Promise<void>;\n onUpdateSubtask?: (taskId: string, subtaskId: string, title: string) => Promise<void>;\n}\n\n// ─── Helper: Convert TaskCardData to TaskDetailData ───\n\nfunction toDetailData(task: TaskCardData): TaskDetailData {\n const labels = (task.labels || []).map((label, i) =>\n typeof label === 'string'\n ? { id: `label-${i}`, name: label, color: '#6b7280' }\n : label\n );\n\n const assignees = task.assignees\n ? task.assignees.map((a) => ({ id: a.id, name: a.name, avatarUrl: a.avatarUrl || undefined }))\n : task.assignee\n ? [{ id: task.assignee.id || 'legacy', name: task.assignee.name, avatarUrl: task.assignee.avatarUrl || undefined }]\n : [];\n\n return {\n id: task.id,\n title: task.title,\n description: task.description || undefined,\n number: task.number,\n status: task.status || 'TODO',\n priority: (task.priority === 'CRITICAL' ? 'URGENT' : task.priority || 'LOW') as TaskPriority,\n labels,\n assignees,\n dueDate: task.dueDate || undefined,\n startDate: task.startDate || undefined,\n storyPoints: task.storyPoints || undefined,\n subtaskCount: task.subtaskCount,\n subtaskDone: task.subtaskDone,\n commentCount: task.commentCount,\n attachmentCount: task.attachmentCount,\n subtasks: task.subtasks,\n };\n}\n\n// ─── Component ──────────────────────────────\n\nfunction TaskCard({\n task,\n onTaskClick,\n isDragging,\n isSelected,\n compact = false,\n enableDetailSheet,\n showDragHandle,\n onUpdate,\n onAddLabel,\n onRemoveLabel,\n onToggleLabel,\n onCreateLabel,\n availableLabels,\n onAddAssignee,\n onRemoveAssignee,\n onToggleAssignee,\n availableUsers,\n onAddSubtask,\n onToggleSubtask,\n onDeleteSubtask,\n onUpdateSubtask,\n className,\n ...props\n}: TaskCardProps) {\n const [sheetOpen, setSheetOpen] = React.useState(false);\n\n // Guard: return skeleton if task data is missing\n if (!task) {\n return <TaskCardSkeleton compact={compact} className={className} />;\n }\n\n const priority = task.priority ?? 'NONE';\n const priorityClasses = priorityColors[priority] || priorityColors.NONE;\n \n // Determine if internal sheet should be used\n const useInternalSheet = enableDetailSheet ?? !onTaskClick;\n\n const handleClick = (e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n \n if (onTaskClick) {\n onTaskClick(task);\n }\n if (useInternalSheet) {\n setSheetOpen(true);\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n if (onTaskClick) {\n onTaskClick(task);\n }\n if (useInternalSheet) {\n setSheetOpen(true);\n }\n }\n };\n\n // Normalize labels for display\n const displayLabels = (task.labels || []).map((label) =>\n typeof label === 'string' ? label : label.name\n );\n\n return (\n <>\n <div\n role=\"button\"\n tabIndex={0}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n data-task-id={task.id}\n className={cn(\n // Glass geometric style\n 'group relative flex flex-col gap-2 p-3 cursor-pointer',\n 'bg-theme-subtle-10 backdrop-blur-md border border-theme-subtle',\n 'transition-all duration-[400ms] ease-[cubic-bezier(0.25,1,0.5,1)] rounded-xl',\n 'hover:border-theme-medium',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/50',\n // State modifiers\n isDragging && 'opacity-50 scale-95',\n isSelected && 'ring-2 ring-primary/50 border-primary/30',\n compact && 'p-2 gap-1',\n className,\n )}\n {...props}\n >\n {/* Drag handle for external DnD */}\n {showDragHandle && (\n <div\n data-drag-handle\n className=\"absolute top-2 right-2 p-1 rounded opacity-0 group-hover:opacity-100 transition-opacity cursor-grab active:cursor-grabbing text-theme-muted hover:text-theme\"\n >\n <GripVertical className=\"w-4 h-4\" />\n </div>\n )}\n\n {/* Title */}\n <h4\n className={cn(\n 'text-sm font-medium text-theme pr-6 line-clamp-2',\n compact && 'text-xs line-clamp-1',\n )}\n >\n {task.title}\n </h4>\n\n {/* Meta row: priority + labels */}\n <div className=\"flex items-center gap-2 flex-wrap\">\n {priority !== 'NONE' && (\n <Badge\n className={cn(\n 'text-[10px] px-1.5 py-0 h-4 border',\n priorityClasses,\n )}\n >\n {priority}\n </Badge>\n )}\n {!compact && displayLabels.slice(0, 2).map((label, i) => (\n <Badge\n key={`${label}-${i}`}\n className=\"text-[10px] px-1.5 py-0 h-4 bg-primary/10 text-primary-light border-primary/20\"\n >\n {label}\n </Badge>\n ))}\n {!compact && displayLabels.length > 2 && (\n <span className=\"text-[10px] text-theme-muted\">+{displayLabels.length - 2}</span>\n )}\n </div>\n\n {/* Stats row */}\n {!compact && (\n <div className=\"flex items-center gap-3 text-xs text-theme-muted\">\n {task.number != null && (\n <span className=\"font-mono opacity-60\">#{task.number}</span>\n )}\n {task.storyPoints != null && task.storyPoints > 0 && (\n <span className=\"inline-flex items-center gap-0.5 text-[10px] px-1.5 py-0.5 rounded-md bg-primary/10 text-primary-light border border-primary/25 font-medium\">\n <OrgSprint className=\"w-2.5 h-2.5\" />\n {task.storyPoints}pt\n </span>\n )}\n {task.subtaskCount != null && task.subtaskCount > 0 && (\n <span className=\"flex items-center gap-0.5\">\n <OrgCheckCircle className=\"w-3 h-3\" /> {task.subtaskDone ?? 0}/{task.subtaskCount}\n </span>\n )}\n {task.commentCount != null && task.commentCount > 0 && (\n <span className=\"flex items-center gap-0.5\">\n <OrgComment className=\"w-3 h-3\" /> {task.commentCount}\n </span>\n )}\n {task.attachmentCount != null && task.attachmentCount > 0 && (\n <span className=\"flex items-center gap-0.5\">\n <OrgAttachment className=\"w-3 h-3\" /> {task.attachmentCount}\n </span>\n )}\n {task.reworkCount != null && task.reworkCount > 0 && (\n <span className=\"text-rose-400\">↻{task.reworkCount}</span>\n )}\n </div>\n )}\n\n {/* Assignee row */}\n {task.assigneeGroup ? (\n <div className=\"flex items-center gap-2 mt-1\">\n <div\n className=\"w-5 h-5 rounded-full bg-blue-500/20 flex items-center justify-center text-[10px] font-bold text-blue-400 border border-blue-500/30\"\n title={`${task.assigneeGroup.name} (${task.assigneeGroup.memberCount} membros)`}\n >\n {task.assigneeGroup.name[0]}\n </div>\n <span className=\"text-xs text-theme-muted truncate max-w-24\">{task.assigneeGroup.name}</span>\n </div>\n ) : task.assignees && task.assignees.length > 0 ? (\n <div className=\"flex items-center gap-2 mt-1\">\n <div className=\"flex -space-x-1.5\">\n {task.assignees.slice(0, 2).map((assignee) => (\n <UserAvatar\n key={assignee.id}\n name={assignee.name}\n src={assignee.avatarUrl}\n size=\"sm\"\n showHoverInfo={true}\n className=\"h-5 w-5 border border-primary/20\"\n />\n ))}\n {task.assignees.length > 2 && (\n <div\n className=\"w-5 h-5 rounded-full bg-primary/10 flex items-center justify-center text-[10px] font-bold text-primary-light border border-primary/20\"\n title={task.assignees.slice(2).map((a) => a.name).join(', ')}\n >\n +{task.assignees.length - 2}\n </div>\n )}\n </div>\n <span className=\"text-xs text-theme-muted truncate max-w-24\">{task.assignees[0].name}</span>\n </div>\n ) : task.assignee ? (\n <div className=\"flex items-center gap-2 mt-1\">\n <div className=\"w-5 h-5 rounded-full bg-primary/20 flex items-center justify-center text-[10px] font-semibold text-primary-light\">\n {task.assignee.name.charAt(0)}\n </div>\n <span className=\"text-xs text-theme-muted truncate max-w-24\">{task.assignee.name}</span>\n </div>\n ) : null}\n\n {/* Due date */}\n {!compact && task.dueDate && (\n <div className=\"mt-1\">\n <DueDateBadge date={task.dueDate} />\n </div>\n )}\n\n {/* Geometric corner accent */}\n <div className=\"pointer-events-none absolute bottom-0 right-0 h-3 w-3 border-b border-r border-primary/20\" />\n </div>\n\n {/* Internal TaskDetailSheet */}\n {useInternalSheet && (\n <TaskDetailSheet\n task={sheetOpen ? toDetailData(task) : null}\n open={sheetOpen}\n onOpenChange={setSheetOpen}\n onUpdate={onUpdate}\n onAddLabel={onAddLabel}\n onRemoveLabel={onRemoveLabel}\n onToggleLabel={onToggleLabel}\n onCreateLabel={onCreateLabel}\n availableLabels={availableLabels}\n onAddAssignee={onAddAssignee}\n onRemoveAssignee={onRemoveAssignee}\n onToggleAssignee={onToggleAssignee}\n availableUsers={availableUsers}\n onAddSubtask={onAddSubtask}\n onToggleSubtask={onToggleSubtask}\n onDeleteSubtask={onDeleteSubtask}\n onUpdateSubtask={onUpdateSubtask}\n />\n )}\n </>\n );\n}\n\n// ─── Due Date Badge ─────────────────────────\n\nfunction DueDateBadge({ date }: { date: string }) {\n const d = new Date(date);\n const now = new Date();\n const diffDays = Math.ceil((d.getTime() - now.getTime()) / (1000 * 60 * 60 * 24));\n const isOverdue = diffDays < 0;\n const isSoon = diffDays >= 0 && diffDays <= 2;\n\n return (\n <span\n className={cn(\n 'inline-flex items-center gap-1 text-[10px] px-1.5 py-0.5 border',\n isOverdue && 'bg-rose-500/15 text-rose-400 border-rose-500/30',\n isSoon && !isOverdue && 'bg-amber-500/15 text-amber-400 border-amber-500/30',\n !isOverdue && !isSoon && 'bg-theme-subtle text-theme-muted border-theme-subtle',\n )}\n >\n <OrgCalendar className=\"w-3 h-3\" /> {d.toLocaleDateString('pt-BR', { day: '2-digit', month: 'short' })}\n </span>\n );\n}\n\nTaskCard.displayName = 'TaskCard';\n\n// ─── Skeleton ───────────────────────────────\n\nfunction TaskCardSkeleton({ compact, className }: { compact?: boolean; className?: string }) {\n return (\n <div\n className={cn(\n 'relative flex flex-col gap-2 animate-pulse',\n 'bg-theme-subtle/50 backdrop-blur-md border border-primary/10 rounded-xl',\n compact ? 'p-2' : 'p-3',\n className,\n )}\n >\n {/* Title */}\n <div className=\"h-4 w-3/4 rounded bg-glass-border\" />\n \n {compact ? null : (\n <>\n {/* Badges */}\n <div className=\"flex gap-1.5\">\n <div className=\"h-4 w-14 rounded bg-glass-border\" />\n <div className=\"h-4 w-10 rounded bg-glass-border\" />\n </div>\n {/* Stats */}\n <div className=\"flex gap-3\">\n <div className=\"h-3 w-8 rounded bg-glass-border/50\" />\n <div className=\"h-3 w-12 rounded bg-glass-border/50\" />\n </div>\n {/* Assignee */}\n <div className=\"flex items-center gap-2 mt-1\">\n <div className=\"h-5 w-5 rounded-full bg-glass-border\" />\n <div className=\"h-3 w-16 rounded bg-glass-border/50\" />\n </div>\n </>\n )}\n \n {/* Geometric corner accent */}\n <div className=\"pointer-events-none absolute bottom-0 right-0 h-3 w-3 border-b border-r border-primary/20\" />\n </div>\n );\n}\n\nTaskCardSkeleton.displayName = 'TaskCardSkeleton';\n\nexport { TaskCard, TaskCardSkeleton, DueDateBadge, priorityConfig, priorityColors };\n","// ─────────────────────────────────────────────\n// TaskDetailDialog — Exibe detalhes completos da task\n// ─────────────────────────────────────────────\n// Comments are auto-fetched via OrganifyProvider API.\n// currentUser is derived from OrganifyProvider if not passed.\n// ─────────────────────────────────────────────\n\n'use client';\n\nimport React from 'react';\nimport { format } from 'date-fns';\nimport { ptBR } from 'date-fns/locale';\nimport { Badge } from '../primitives/badge';\nimport { Button } from '../primitives/button';\nimport { Separator } from '../primitives/separator';\nimport { ResponsiveDialog } from '../primitives/responsive-dialog';\nimport { TaskCardData, priorityConfig } from './task-card';\nimport { CommentThread } from '../comments/comment-thread';\nimport type { Comment, CommentAuthor } from '../comments/types';\n\nexport interface TaskDetailDialogProps {\n task: TaskCardData | null;\n open: boolean;\n onOpenChange: (open: boolean) => void;\n /** Comments to display (if not provided, auto-fetched via API) */\n comments?: Comment[];\n /** Current user (if not provided, derived from OrganifyProvider) */\n currentUser?: CommentAuthor;\n}\n\nconst statusConfig = {\n TODO: { label: 'A Fazer', color: 'bg-gray-100 text-gray-800' },\n IN_PROGRESS: { label: 'Em Progresso', color: 'bg-blue-100 text-blue-800' },\n DONE: { label: 'Concluído', color: 'bg-green-100 text-green-800' },\n BLOCKED: { label: 'Bloqueado', color: 'bg-red-100 text-red-800' },\n REVIEW: { label: 'Em Revisão', color: 'bg-purple-100 text-purple-800' },\n} as const;\n\nexport function TaskDetailDialog({\n task,\n open,\n onOpenChange,\n comments,\n currentUser,\n}: TaskDetailDialogProps) {\n if (!task) return null;\n\n const status = (task.status as keyof typeof statusConfig) || 'TODO';\n const priority = task.priority ? priorityConfig[task.priority] : null;\n const dueDate = task.dueDate ? new Date(task.dueDate) : null;\n const startDate = task.startDate ? new Date(task.startDate) : null;\n\n // Determinar assignees display\n const assigneesList = task.assignees || (task.assignee ? [{ id: '0', ...task.assignee }] : []);\n const hasGroup = !!task.assigneeGroup;\n\n const footerContent = (\n <div className=\"flex gap-2 w-full justify-end\">\n <Button variant=\"outline\" onClick={() => onOpenChange(false)}>\n Fechar\n </Button>\n <Button>Editar Task</Button>\n </div>\n );\n\n return (\n <ResponsiveDialog \n open={open} \n onOpenChange={onOpenChange}\n title={task.title}\n description={task.description || undefined}\n footer={footerContent}\n contentClassName=\"max-w-2xl\"\n >\n <div className=\"space-y-6\">\n {/* Task Number Badge */}\n {task.number && (\n <div className=\"flex justify-end -mt-4\">\n <Badge>#{task.number}</Badge>\n </div>\n )}\n\n {/* Status & Priority */}\n <div className=\"grid grid-cols-2 gap-4\">\n <div>\n <p className=\"text-sm font-semibold text-muted-foreground mb-2\">Status</p>\n <Badge className={statusConfig[status].color}>\n {statusConfig[status].label}\n </Badge>\n </div>\n {priority && (\n <div>\n <p className=\"text-sm font-semibold text-muted-foreground mb-2\">Prioridade</p>\n <Badge style={{ backgroundColor: priority.color }}>\n {priority.label}\n </Badge>\n </div>\n )}\n </div>\n\n {/* Story Points */}\n {task.storyPoints !== undefined && task.storyPoints !== null && (\n <div>\n <p className=\"text-sm font-semibold text-muted-foreground mb-2\">Story Points</p>\n <div className=\"text-lg font-bold\">{task.storyPoints}</div>\n </div>\n )}\n\n <Separator />\n\n {/* Assignees or Group */}\n {(hasGroup || assigneesList.length > 0) && (\n <div>\n <p className=\"text-sm font-semibold text-muted-foreground mb-3\">\n {hasGroup ? 'Grupo Atribuído' : 'Atribuído para'}\n </p>\n {hasGroup ? (\n <div className=\"flex items-center gap-3 p-3 bg-blue-500/10 rounded-xl border border-blue-500/20\">\n <div className=\"w-10 h-10 rounded-full bg-blue-500/20 flex items-center justify-center text-sm font-bold text-blue-400\">\n {task.assigneeGroup!.name[0]}\n </div>\n <div className=\"flex-1\">\n <p className=\"font-medium\">{task.assigneeGroup!.name}</p>\n <p className=\"text-sm text-muted-foreground\">\n {task.assigneeGroup!.memberCount} membros\n </p>\n </div>\n </div>\n ) : (\n <div className=\"flex flex-wrap gap-2\">\n {assigneesList.map((assignee) => (\n <div\n key={assignee.id}\n className=\"flex items-center gap-2 px-3 py-2 bg-muted rounded-full\"\n >\n <div className=\"w-6 h-6 rounded-full bg-primary/20 flex items-center justify-center text-xs font-bold\">\n {assignee.name[0]}\n </div>\n <span className=\"text-sm font-medium\">{assignee.name}</span>\n </div>\n ))}\n </div>\n )}\n </div>\n )}\n\n {/* Labels */}\n {task.labels && task.labels.length > 0 && (\n <div>\n <p className=\"text-sm font-semibold text-muted-foreground mb-3\">Labels</p>\n <div className=\"flex flex-wrap gap-2\">\n {task.labels.map((label, index) => {\n const labelName = typeof label === 'string' ? label : label.name;\n return (\n <Badge key={`${labelName}-${index}`} className=\"bg-muted text-muted-foreground\">\n {labelName}\n </Badge>\n );\n })}\n </div>\n </div>\n )}\n\n {/* Dates */}\n <div className=\"grid grid-cols-2 gap-4\">\n {startDate && (\n <div>\n <p className=\"text-sm font-semibold text-muted-foreground mb-2\">Data de Início</p>\n <p className=\"text-sm\">\n {format(startDate, 'dd MMM yyyy', { locale: ptBR })}\n </p>\n </div>\n )}\n {dueDate && (\n <div>\n <p className=\"text-sm font-semibold text-muted-foreground mb-2\">Data de Vencimento</p>\n <p className=\"text-sm\">\n {format(dueDate, 'dd MMM yyyy', { locale: ptBR })}\n </p>\n </div>\n )}\n </div>\n\n <Separator />\n\n {/* Subtasks */}\n {task.subtaskCount && task.subtaskCount > 0 && (\n <div>\n <p className=\"text-sm font-semibold text-muted-foreground mb-2\">Subtasks</p>\n <div className=\"flex items-center gap-2\">\n <div className=\"flex-1 h-2 bg-muted rounded-full overflow-hidden\">\n <div\n className=\"h-full bg-green-500\"\n style={{\n width: `${((task.subtaskDone || 0) / task.subtaskCount) * 100}%`,\n }}\n />\n </div>\n <span className=\"text-sm font-medium\">\n {task.subtaskDone || 0}/{task.subtaskCount}\n </span>\n </div>\n </div>\n )}\n\n {/* Meta Info */}\n <div className=\"grid grid-cols-3 gap-4 text-center py-4 bg-muted/50 rounded-xl\">\n {task.commentCount !== undefined && (\n <div>\n <p className=\"text-2xl font-bold\">{task.commentCount}</p>\n <p className=\"text-xs text-muted-foreground\">Comentários</p>\n </div>\n )}\n {task.attachmentCount !== undefined && (\n <div>\n <p className=\"text-2xl font-bold\">{task.attachmentCount}</p>\n <p className=\"text-xs text-muted-foreground\">Arquivos</p>\n </div>\n )}\n {task.reworkCount !== undefined && (\n <div>\n <p className=\"text-2xl font-bold\">{task.reworkCount || 0}</p>\n <p className=\"text-xs text-muted-foreground\">Rework</p>\n </div>\n )}\n </div>\n\n {/* Comments Section — auto-fetched via OrganifyProvider API */}\n <div>\n <Separator className=\"mb-4\" />\n <p className=\"text-sm font-semibold text-muted-foreground mb-4\">Comentários</p>\n <CommentThread \n entityType=\"task\"\n entityId={task.id}\n comments={comments}\n currentUser={currentUser}\n />\n </div>\n </div>\n </ResponsiveDialog>\n );\n}\n\nTaskDetailDialog.displayName = 'TaskDetailDialog';\n","// ─────────────────────────────────────────────\n// KanbanBoard — Glass-style board with TaskDetailSheet\n// ─────────────────────────────────────────────\n// Glass TaskCard design with geometric accents\n// Click on card opens TaskDetailSheet\n// Supports internal HTML5 DnD or external library\n// ─────────────────────────────────────────────\n\n'use client';\n\nimport * as React from 'react';\nimport { GripVertical, Check, X } from 'lucide-react';\nimport { cn } from '../../lib/utils';\nimport { Button } from '../primitives/button';\nimport { Badge } from '../primitives/badge';\nimport { ScrollArea } from '../primitives/scroll-area';\nimport { TaskDetailSheet, type TaskDetailData, type TaskDetailSheetProps } from './task-detail-sheet';\nimport { OrgPlus, OrgSprint } from '../../icons';\n\n// ─── Types ──────────────────────────────────\n\nexport interface KanbanTask {\n id: string;\n title: string;\n description?: string;\n number?: number;\n priority?: 'LOW' | 'MEDIUM' | 'HIGH' | 'URGENT';\n status?: 'TODO' | 'IN_PROGRESS' | 'DONE' | 'BLOCKED' | 'REVIEW';\n labels?: Array<{ id: string; name: string; color: string } | string>;\n assignee?: { id?: string; name: string; avatarUrl?: string };\n assignees?: Array<{ id: string; name: string; avatarUrl?: string }>;\n dueDate?: string;\n startDate?: string;\n storyPoints?: number;\n subtaskCount?: number;\n subtaskDone?: number;\n commentCount?: number;\n subtasks?: Array<{ id: string; title: string; completed: boolean }>;\n}\n\nexport interface KanbanColumnData {\n id: string;\n title: string;\n color?: string;\n tasks: KanbanTask[];\n /** WIP limit — column header turns red when exceeded */\n wipLimit?: number;\n /** Whether this column is locked (e.g. restricted by role) */\n locked?: boolean;\n}\n\nexport interface KanbanBoardProps {\n columns: KanbanColumnData[];\n onColumnChange?: (columns: KanbanColumnData[]) => void;\n onTaskMove?: (taskId: string, fromColumnId: string, toColumnId: string, newIndex: number) => void;\n /** Called with (columnId, title) when inline task is created */\n onAddTask?: (columnId: string, title?: string) => void;\n /** Called with (title) when inline column is created */\n onAddColumn?: (title?: string) => void;\n /** Called with (columnId, newTitle) when column is renamed inline */\n onRenameColumn?: (columnId: string, newTitle: string) => void;\n className?: string;\n /** \n * External drag-and-drop library integration\n * If true, the component provides data attributes for external DnD\n * If false, uses internal HTML5 drag-and-drop (basic)\n */\n externalDnD?: boolean;\n /** TaskDetailSheet callbacks */\n onTaskUpdate?: TaskDetailSheetProps['onUpdate'];\n onToggleLabel?: TaskDetailSheetProps['onToggleLabel'];\n onCreateLabel?: TaskDetailSheetProps['onCreateLabel'];\n availableLabels?: TaskDetailSheetProps['availableLabels'];\n onAddLabel?: TaskDetailSheetProps['onAddLabel'];\n onRemoveLabel?: TaskDetailSheetProps['onRemoveLabel'];\n onToggleAssignee?: TaskDetailSheetProps['onToggleAssignee'];\n availableUsers?: TaskDetailSheetProps['availableUsers'];\n availableGroups?: TaskDetailSheetProps['availableGroups'];\n onToggleAssigneeGroup?: TaskDetailSheetProps['onToggleAssigneeGroup'];\n onAddAssignee?: TaskDetailSheetProps['onAddAssignee'];\n onRemoveAssignee?: TaskDetailSheetProps['onRemoveAssignee'];\n onAddSubtask?: TaskDetailSheetProps['onAddSubtask'];\n onToggleSubtask?: TaskDetailSheetProps['onToggleSubtask'];\n onDeleteSubtask?: TaskDetailSheetProps['onDeleteSubtask'];\n onDeleteTask?: TaskDetailSheetProps['onDeleteTask'];\n onUpdateSubtask?: TaskDetailSheetProps['onUpdateSubtask'];\n /** When provided, fires on task click instead of opening internal sheet.\n * The parent then renders its own TaskDetailSheet with full data (subtasks, comments). */\n onTaskClick?: (taskId: string) => void;\n}\n\n// ─── Priority Config ────────────────────────\n\nconst priorityColors: Record<string, string> = {\n LOW: 'bg-slate-500/15 text-slate-400 border-slate-500/30',\n MEDIUM: 'bg-blue-500/15 text-blue-400 border-blue-500/30',\n HIGH: 'bg-amber-500/15 text-amber-400 border-amber-500/30',\n URGENT: 'bg-rose-500/15 text-rose-400 border-rose-500/30',\n};\n\n// ─── Helper: Convert KanbanTask to TaskDetailData ───\n\nfunction toDetailData(task: KanbanTask, columnId: string): TaskDetailData {\n const labels = (task.labels || []).map((label, i) =>\n typeof label === 'string'\n ? { id: `label-${i}`, name: label, color: '#6b7280' }\n : label\n );\n\n const assignees = task.assignees\n ? task.assignees.map((a) => ({ id: a.id, name: a.name, avatarUrl: a.avatarUrl }))\n : task.assignee\n ? [{ id: task.assignee.id || 'legacy', name: task.assignee.name, avatarUrl: task.assignee.avatarUrl }]\n : [];\n\n // Map column to status if not provided\n const statusMap: Record<string, TaskDetailData['status']> = {\n 'todo': 'TODO',\n 'in-progress': 'IN_PROGRESS',\n 'in_progress': 'IN_PROGRESS',\n 'review': 'REVIEW',\n 'blocked': 'BLOCKED',\n 'done': 'DONE',\n };\n\n return {\n id: task.id,\n title: task.title,\n description: task.description,\n number: task.number,\n status: task.status || statusMap[columnId.toLowerCase()] || 'TODO',\n priority: task.priority || 'LOW',\n labels,\n assignees,\n dueDate: task.dueDate,\n startDate: task.startDate,\n storyPoints: task.storyPoints,\n subtaskCount: task.subtaskCount,\n subtaskDone: task.subtaskDone,\n commentCount: task.commentCount,\n subtasks: task.subtasks,\n };\n}\n\n// ─── Glass TaskCard Component ───────────────\n\ninterface TaskCardProps {\n task: KanbanTask;\n columnId: string;\n index: number;\n onClick: () => void;\n isDragging?: boolean;\n externalDnD?: boolean;\n onDragStart?: (e: React.DragEvent, task: KanbanTask, columnId: string) => void;\n onDragEnd?: () => void;\n onTouchDragStart?: (task: KanbanTask, columnId: string) => void;\n}\n\nfunction TaskCard({\n task,\n columnId,\n index,\n onClick,\n isDragging,\n externalDnD,\n onDragStart,\n onDragEnd,\n onTouchDragStart,\n}: TaskCardProps) {\n // ── Touch DnD state ──\n const touchTimerRef = React.useRef<ReturnType<typeof setTimeout> | null>(null);\n const hasMoved = React.useRef(false);\n\n const handleTouchStart = (e: React.TouchEvent) => {\n hasMoved.current = false;\n // Long-press to start drag (300ms)\n touchTimerRef.current = setTimeout(() => {\n if (!hasMoved.current) {\n onTouchDragStart?.(task, columnId);\n // Vibrate feedback on supported devices\n if (navigator.vibrate) navigator.vibrate(50);\n }\n }, 300);\n };\n\n const handleTouchMove = () => {\n hasMoved.current = true;\n if (touchTimerRef.current) {\n clearTimeout(touchTimerRef.current);\n touchTimerRef.current = null;\n }\n };\n\n const handleTouchEnd = () => {\n if (touchTimerRef.current) {\n clearTimeout(touchTimerRef.current);\n touchTimerRef.current = null;\n }\n };\n\n // Normalize labels for display\n const displayLabels = (task.labels || []).map((label) =>\n typeof label === 'string' ? label : label.name\n );\n\n return (\n <div\n draggable={!externalDnD}\n onDragStart={!externalDnD ? (e) => onDragStart?.(e, task, columnId) : undefined}\n onDragEnd={!externalDnD ? onDragEnd : undefined}\n onClick={onClick}\n onTouchStart={handleTouchStart}\n onTouchMove={handleTouchMove}\n onTouchEnd={handleTouchEnd}\n data-task-id={task.id}\n data-column-id={columnId}\n data-index={index}\n className={cn(\n 'group relative flex flex-col gap-2 p-3 cursor-pointer select-none',\n 'bg-theme-subtle backdrop-blur-md border border-theme-subtle',\n 'transition-all duration-[400ms] ease-[cubic-bezier(0.25,1,0.5,1)] rounded-xl',\n 'hover:border-primary-light/30',\n 'active:scale-[0.98]',\n isDragging && 'opacity-50 scale-95',\n )}\n >\n {/* Drag handle for external DnD */}\n {externalDnD && (\n <div\n data-drag-handle\n className=\"absolute top-2 right-2 p-1 rounded opacity-0 group-hover:opacity-100 transition-opacity cursor-grab active:cursor-grabbing text-theme-muted hover:text-theme\"\n >\n <GripVertical className=\"w-4 h-4\" />\n </div>\n )}\n\n {/* Title — truncated to 2 lines */}\n <h4 className=\"text-sm font-medium text-theme pr-6 line-clamp-2\">{task.title}</h4>\n\n {/* Meta row */}\n <div className=\"flex items-center gap-2 flex-wrap\">\n {task.priority && (\n <Badge\n className={cn(\n 'text-[10px] px-1.5 py-0 h-4 border',\n priorityColors[task.priority],\n )}\n >\n {task.priority}\n </Badge>\n )}\n {displayLabels.map((label, i) => (\n <Badge\n key={`${label}-${i}`}\n className=\"text-[10px] px-1.5 py-0 h-4 bg-primary/10 text-primary-light border-primary/20\"\n >\n {label}\n </Badge>\n ))}\n </div>\n\n {/* Story points + stats */}\n {(task.storyPoints != null || task.subtaskCount != null || task.commentCount != null) && (\n <div className=\"flex items-center gap-2 text-xs text-theme-muted\">\n {task.storyPoints != null && task.storyPoints > 0 && (\n <span className=\"inline-flex items-center gap-0.5 text-[10px] px-1.5 py-0.5 rounded-md bg-primary/10 text-primary-light border border-primary/25 font-medium\">\n <OrgSprint className=\"w-2.5 h-2.5\" />\n {task.storyPoints}pt\n </span>\n )}\n {task.subtaskCount != null && task.subtaskCount > 0 && (\n <span className=\"text-[10px]\">{task.subtaskDone ?? 0}/{task.subtaskCount} ✓</span>\n )}\n {task.commentCount != null && task.commentCount > 0 && (\n <span className=\"text-[10px]\">{task.commentCount} 💬</span>\n )}\n </div>\n )}\n\n {/* Assignee */}\n {task.assignee && (\n <div className=\"flex items-center gap-2 mt-1\">\n <div className=\"w-5 h-5 rounded-full bg-primary/20 flex items-center justify-center text-[10px] font-semibold text-primary-light\">\n {task.assignee.name.charAt(0)}\n </div>\n <span className=\"text-xs text-theme-muted\">{task.assignee.name}</span>\n </div>\n )}\n\n {/* Geometric corner accent */}\n <div className=\"pointer-events-none absolute bottom-0 right-0 h-3 w-3 border-b border-r border-primary/20\" />\n </div>\n );\n}\n\n// ─── Column Component ───────────────────────\n\ninterface ColumnComponentProps {\n column: KanbanColumnData;\n onTaskClick: (task: KanbanTask, columnId: string) => void;\n onAddTask?: (columnId: string, title?: string) => void;\n onRenameColumn?: (columnId: string, newTitle: string) => void;\n externalDnD?: boolean;\n draggedTask?: { task: KanbanTask; fromColumnId: string } | null;\n onDragStart?: (e: React.DragEvent, task: KanbanTask, columnId: string) => void;\n onDragEnd?: () => void;\n onDragOver?: (e: React.DragEvent, columnId: string) => void;\n onDrop?: (e: React.DragEvent, columnId: string) => void;\n isDropTarget?: boolean;\n onTouchDragStart?: (task: KanbanTask, columnId: string) => void;\n}\n\nfunction Column({\n column,\n onTaskClick,\n onAddTask,\n onRenameColumn,\n externalDnD,\n draggedTask,\n onDragStart,\n onDragEnd,\n onDragOver,\n onDrop,\n isDropTarget,\n onTouchDragStart,\n}: ColumnComponentProps) {\n // ─── Inline rename state ───\n const [isRenaming, setIsRenaming] = React.useState(false);\n const [renameValue, setRenameValue] = React.useState(column.title);\n const renameInputRef = React.useRef<HTMLInputElement>(null);\n\n // ─── Inline task creation state ───\n const [isAddingTask, setIsAddingTask] = React.useState(false);\n const [newTaskTitle, setNewTaskTitle] = React.useState('');\n const taskInputRef = React.useRef<HTMLInputElement>(null);\n\n React.useEffect(() => {\n if (isRenaming) renameInputRef.current?.focus();\n }, [isRenaming]);\n\n React.useEffect(() => {\n if (isAddingTask) taskInputRef.current?.focus();\n }, [isAddingTask]);\n\n const handleRenameSubmit = () => {\n const trimmed = renameValue.trim();\n if (trimmed && trimmed !== column.title) {\n onRenameColumn?.(column.id, trimmed);\n }\n setIsRenaming(false);\n };\n\n const handleRenameKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter') handleRenameSubmit();\n if (e.key === 'Escape') {\n setRenameValue(column.title);\n setIsRenaming(false);\n }\n };\n\n const handleAddTaskSubmit = () => {\n const trimmed = newTaskTitle.trim();\n if (trimmed) {\n onAddTask?.(column.id, trimmed);\n setNewTaskTitle('');\n // Keep input open for quick multi-add\n } else {\n setIsAddingTask(false);\n }\n };\n\n const handleAddTaskKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter') handleAddTaskSubmit();\n if (e.key === 'Escape') {\n setNewTaskTitle('');\n setIsAddingTask(false);\n }\n };\n\n return (\n <div\n data-column-id={column.id}\n onDragOver={!externalDnD ? (e) => {\n e.preventDefault();\n e.dataTransfer.dropEffect = 'move';\n onDragOver?.(e, column.id);\n } : undefined}\n onDrop={!externalDnD ? (e) => onDrop?.(e, column.id) : undefined}\n className={cn(\n 'flex flex-col w-[280px] sm:w-72 shrink-0 max-h-[calc(100dvh-8rem)] sm:max-h-[calc(100vh-10rem)]',\n 'bg-theme-glass backdrop-blur-md border border-theme-subtle rounded-xl',\n 'transition-all duration-[400ms] ease-[cubic-bezier(0.25,1,0.5,1)]',\n 'snap-start',\n isDropTarget && 'border-primary-light/50 bg-primary/5',\n )}\n >\n {/* Column Header */}\n <div className=\"flex items-center gap-2 px-3 py-3 border-b border-theme-subtle\">\n {column.color && (\n <div\n className=\"w-3 h-3 rounded-full shrink-0\"\n style={{ backgroundColor: column.color }}\n />\n )}\n\n {isRenaming ? (\n <div className=\"flex-1 flex items-center gap-1\">\n <input\n ref={renameInputRef}\n value={renameValue}\n onChange={(e) => setRenameValue(e.target.value)}\n onBlur={handleRenameSubmit}\n onKeyDown={handleRenameKeyDown}\n className=\"flex-1 text-sm font-semibold text-theme bg-transparent border-b border-primary-light/50 outline-none px-0 py-0\"\n />\n </div>\n ) : (\n <h3\n className=\"flex-1 text-sm font-semibold text-theme truncate cursor-pointer hover:text-primary-light transition-colors\"\n onClick={() => {\n if (onRenameColumn) {\n setRenameValue(column.title);\n setIsRenaming(true);\n }\n }}\n title={onRenameColumn ? 'Clique para renomear' : undefined}\n >\n {column.title}\n </h3>\n )}\n\n {/* Task count + WIP limit indicator */}\n <div className=\"flex items-center gap-1 shrink-0\">\n <Badge \n variant={column.wipLimit && column.tasks.length > column.wipLimit ? 'error' : 'default'}\n className={cn(\n 'text-xs',\n column.wipLimit && column.tasks.length > column.wipLimit\n ? 'bg-red-500/20 text-red-400 border-red-500/40 animate-pulse'\n : 'bg-theme-highlight text-theme-muted border-theme-subtle',\n )}\n >\n {column.tasks.length}\n {column.wipLimit != null && (\n <span className=\"text-theme-muted\">/{column.wipLimit}</span>\n )}\n </Badge>\n </div>\n </div>\n\n {/* WIP Limit warning bar */}\n {column.wipLimit != null && column.tasks.length > column.wipLimit && (\n <div className=\"px-3 py-1.5 bg-red-500/10 border-b border-red-500/20 text-[10px] font-medium text-red-400 text-center\">\n ⚠ WIP limit exceeded ({column.tasks.length - column.wipLimit} over)\n </div>\n )}\n\n {/* Tasks List — hidden scrollbar, smooth scroll */}\n <ScrollArea className=\"flex-1 min-h-0 [&_[data-radix-scroll-area-viewport]]:!overflow-y-auto [&_[data-radix-scroll-area-viewport]]:scrollbar-none\">\n <div className=\"p-2 space-y-2\">\n {column.tasks.map((task, index) => {\n const isDragging = draggedTask?.task.id === task.id;\n \n return (\n <TaskCard\n key={task.id}\n task={task}\n columnId={column.id}\n index={index}\n onClick={() => onTaskClick(task, column.id)}\n isDragging={isDragging}\n externalDnD={externalDnD}\n onDragStart={onDragStart}\n onDragEnd={onDragEnd}\n onTouchDragStart={onTouchDragStart}\n />\n );\n })}\n\n {/* Inline task creation input */}\n {isAddingTask && (\n <div className=\"p-2 bg-theme-subtle border border-theme-subtle rounded-xl animate-in slide-in-from-top-2 duration-[400ms]\">\n <input\n ref={taskInputRef}\n value={newTaskTitle}\n onChange={(e) => setNewTaskTitle(e.target.value)}\n onKeyDown={handleAddTaskKeyDown}\n placeholder=\"Título da tarefa...\"\n className=\"w-full text-sm text-theme bg-transparent outline-none placeholder:text-theme-muted\"\n />\n <div className=\"flex items-center gap-1 mt-2\">\n <Button\n variant=\"default\"\n size=\"sm\"\n onClick={handleAddTaskSubmit}\n disabled={!newTaskTitle.trim()}\n className=\"h-6 text-[11px] px-2\"\n >\n <Check className=\"w-3 h-3 mr-1\" />\n Criar\n </Button>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => {\n setNewTaskTitle('');\n setIsAddingTask(false);\n }}\n className=\"h-6 text-[11px] px-2\"\n >\n <X className=\"w-3 h-3\" />\n </Button>\n </div>\n </div>\n )}\n\n {/* Empty state */}\n {column.tasks.length === 0 && !isAddingTask && (\n <div className=\"flex flex-col items-center justify-center py-8 text-center\">\n <p className=\"text-xs text-theme-muted\">Nenhuma tarefa</p>\n </div>\n )}\n </div>\n </ScrollArea>\n\n {/* Add Task Button */}\n {onAddTask && !isAddingTask && (\n <div className=\"p-2 border-t border-theme-subtle\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => setIsAddingTask(true)}\n className=\"w-full justify-start text-xs text-theme-muted hover:text-theme hover:bg-theme-highlight\"\n >\n <OrgPlus className=\"w-3 h-3 mr-2\" />\n Adicionar tarefa\n </Button>\n </div>\n )}\n </div>\n );\n}\n\nColumn.displayName = 'KanbanColumn';\n\n// ─── Main Board Component ───────────────────\n\nexport function KanbanBoard({\n columns,\n onColumnChange,\n onTaskMove,\n onAddTask,\n onAddColumn,\n onRenameColumn,\n className,\n externalDnD = false,\n onTaskUpdate,\n onToggleLabel,\n onCreateLabel,\n availableLabels,\n onAddLabel,\n onRemoveLabel,\n onToggleAssignee,\n availableUsers,\n availableGroups,\n onToggleAssigneeGroup,\n onAddAssignee,\n onRemoveAssignee,\n onAddSubtask,\n onToggleSubtask,\n onDeleteSubtask,\n onDeleteTask,\n onUpdateSubtask,\n onTaskClick,\n}: KanbanBoardProps) {\n // Internal DnD state\n const [draggedTask, setDraggedTask] = React.useState<{\n task: KanbanTask;\n fromColumnId: string;\n } | null>(null);\n const [dropTargetColumnId, setDropTargetColumnId] = React.useState<string | null>(null);\n\n // ─── Mobile Touch DnD ───\n const [touchDraggedTask, setTouchDraggedTask] = React.useState<{\n task: KanbanTask;\n fromColumnId: string;\n } | null>(null);\n\n const handleTouchDragStart = React.useCallback((task: KanbanTask, fromColumnId: string) => {\n setTouchDraggedTask({ task, fromColumnId });\n }, []);\n\n const handleTouchDrop = React.useCallback((toColumnId: string) => {\n if (!touchDraggedTask) return;\n const { task, fromColumnId } = touchDraggedTask;\n if (fromColumnId !== toColumnId) {\n onTaskMove?.(task.id, fromColumnId, toColumnId, 0);\n if (onColumnChange) {\n const newColumns = columns.map((col) => {\n if (col.id === fromColumnId) return { ...col, tasks: col.tasks.filter((t) => t.id !== task.id) };\n if (col.id === toColumnId) return { ...col, tasks: [...col.tasks, task] };\n return col;\n });\n onColumnChange(newColumns);\n }\n }\n setTouchDraggedTask(null);\n }, [touchDraggedTask, columns, onTaskMove, onColumnChange]);\n\n const cancelTouchDrag = React.useCallback(() => setTouchDraggedTask(null), []);\n\n const isTouchDragging = touchDraggedTask !== null;\n const effectiveDraggedTask = draggedTask || touchDraggedTask;\n\n // TaskDetailSheet state\n const [sheetOpen, setSheetOpen] = React.useState(false);\n const [selectedTask, setSelectedTask] = React.useState<{ task: KanbanTask; columnId: string } | null>(null);\n\n // ─── Add Column inline state ───\n const [isAddingColumn, setIsAddingColumn] = React.useState(false);\n const [newColumnTitle, setNewColumnTitle] = React.useState('');\n const addColumnInputRef = React.useRef<HTMLInputElement>(null);\n\n React.useEffect(() => {\n if (isAddingColumn) addColumnInputRef.current?.focus();\n }, [isAddingColumn]);\n\n const handleAddColumnSubmit = () => {\n const trimmed = newColumnTitle.trim();\n if (trimmed) {\n onAddColumn?.(trimmed);\n setNewColumnTitle('');\n setIsAddingColumn(false);\n } else {\n setIsAddingColumn(false);\n }\n };\n\n const handleAddColumnKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter') handleAddColumnSubmit();\n if (e.key === 'Escape') {\n setNewColumnTitle('');\n setIsAddingColumn(false);\n }\n };\n\n // ─── Task Click Handler ───\n const handleTaskClick = (task: KanbanTask, columnId: string) => {\n if (onTaskClick) {\n // External handler — parent manages its own TaskDetailSheet\n onTaskClick(task.id);\n return;\n }\n setSelectedTask({ task, columnId });\n setSheetOpen(true);\n };\n\n // ─── DnD Handlers ───\n const handleDragStart = (e: React.DragEvent, task: KanbanTask, columnId: string) => {\n setDraggedTask({ task, fromColumnId: columnId });\n e.dataTransfer.effectAllowed = 'move';\n e.dataTransfer.setData('text/plain', task.id);\n };\n\n const handleDragEnd = () => {\n setDraggedTask(null);\n setDropTargetColumnId(null);\n };\n\n const handleDragOver = (e: React.DragEvent, columnId: string) => {\n setDropTargetColumnId(columnId);\n };\n\n const handleDrop = (e: React.DragEvent, toColumnId: string) => {\n e.preventDefault();\n if (!draggedTask) return;\n\n const { task, fromColumnId } = draggedTask;\n\n if (fromColumnId !== toColumnId) {\n onTaskMove?.(task.id, fromColumnId, toColumnId, 0);\n\n if (onColumnChange) {\n const newColumns = columns.map((col) => {\n if (col.id === fromColumnId) {\n return { ...col, tasks: col.tasks.filter((t) => t.id !== task.id) };\n }\n if (col.id === toColumnId) {\n return { ...col, tasks: [...col.tasks, task] };\n }\n return col;\n });\n onColumnChange(newColumns);\n }\n }\n\n handleDragEnd();\n };\n\n return (\n <>\n <div\n data-tour=\"kanban-board\"\n className={cn(\n 'flex h-full overflow-x-auto gap-3 p-4 bg-void snap-x snap-mandatory sm:snap-none',\n 'scrollbar-none',\n className,\n )}\n >\n {columns.map((column) => (\n <Column\n key={column.id}\n column={column}\n onTaskClick={handleTaskClick}\n onAddTask={onAddTask}\n onRenameColumn={onRenameColumn}\n externalDnD={externalDnD}\n draggedTask={effectiveDraggedTask}\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n onDragOver={handleDragOver}\n onDrop={handleDrop}\n isDropTarget={dropTargetColumnId === column.id}\n onTouchDragStart={handleTouchDragStart}\n />\n ))}\n\n {/* Add Column — inline or button */}\n {onAddColumn && (\n <div className=\"w-72 shrink-0\">\n {isAddingColumn ? (\n <div className=\"p-3 bg-theme-glass backdrop-blur-md border border-theme-subtle rounded-xl animate-in slide-in-from-left-2 duration-[400ms]\">\n <input\n ref={addColumnInputRef}\n value={newColumnTitle}\n onChange={(e) => setNewColumnTitle(e.target.value)}\n onKeyDown={handleAddColumnKeyDown}\n onBlur={handleAddColumnSubmit}\n placeholder=\"Nome da coluna...\"\n className=\"w-full text-sm font-semibold text-theme bg-transparent outline-none placeholder:text-theme-muted mb-2\"\n />\n <div className=\"flex items-center gap-1\">\n <Button\n variant=\"default\"\n size=\"sm\"\n onClick={handleAddColumnSubmit}\n disabled={!newColumnTitle.trim()}\n className=\"h-7 text-xs px-3\"\n >\n <Check className=\"w-3 h-3 mr-1\" />\n Criar\n </Button>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => {\n setNewColumnTitle('');\n setIsAddingColumn(false);\n }}\n className=\"h-7 text-xs px-2\"\n >\n <X className=\"w-3 h-3\" />\n </Button>\n </div>\n </div>\n ) : (\n <Button\n variant=\"outline\"\n onClick={() => setIsAddingColumn(true)}\n className=\"w-full h-12 border-dashed border-theme-subtle text-theme-muted hover:text-theme hover:border-primary-light/30 hover:bg-theme-highlight\"\n >\n <OrgPlus className=\"w-4 h-4 mr-2\" />\n Adicionar coluna\n </Button>\n )}\n </div>\n )}\n </div>\n\n {/* Mobile Touch DnD — Drop targets overlay */}\n {isTouchDragging && (\n <div className=\"fixed inset-x-0 bottom-0 z-50 flex gap-2 p-3 bg-void/90 backdrop-blur-xl border-t border-theme-subtle animate-in slide-in-from-bottom-4 duration-300 sm:hidden\">\n <div className=\"w-full overflow-x-auto scrollbar-none flex gap-2\">\n {columns\n .filter((col) => col.id !== touchDraggedTask?.fromColumnId)\n .map((col) => (\n <button\n key={col.id}\n onClick={() => handleTouchDrop(col.id)}\n className={cn(\n 'flex-shrink-0 flex items-center gap-2 px-4 py-3 rounded-xl',\n 'bg-theme-glass border border-theme-subtle',\n 'text-sm font-medium text-theme',\n 'active:bg-primary/20 active:border-primary-light/50',\n 'transition-all duration-200',\n )}\n >\n {col.color && (\n <div className=\"w-2.5 h-2.5 rounded-full shrink-0\" style={{ backgroundColor: col.color }} />\n )}\n {col.title}\n <Badge className=\"text-[10px] bg-theme-highlight text-theme-muted border-theme-subtle\">\n {col.tasks.length}\n </Badge>\n </button>\n ))}\n </div>\n <button\n onClick={cancelTouchDrag}\n className=\"shrink-0 p-3 rounded-xl bg-rose-500/20 text-rose-400 border border-rose-500/30\"\n >\n <X className=\"w-4 h-4\" />\n </button>\n </div>\n )}\n\n {/* TaskDetailSheet - opens when clicking a task */}\n <TaskDetailSheet\n task={selectedTask ? toDetailData(selectedTask.task, selectedTask.columnId) : null}\n open={sheetOpen}\n onOpenChange={setSheetOpen}\n onUpdate={onTaskUpdate}\n onToggleLabel={onToggleLabel}\n onCreateLabel={onCreateLabel}\n availableLabels={availableLabels}\n onAddLabel={onAddLabel}\n onRemoveLabel={onRemoveLabel}\n onToggleAssignee={onToggleAssignee}\n availableUsers={availableUsers}\n availableGroups={availableGroups}\n onToggleAssigneeGroup={onToggleAssigneeGroup}\n onAddAssignee={onAddAssignee}\n onRemoveAssignee={onRemoveAssignee}\n onAddSubtask={onAddSubtask}\n onToggleSubtask={onToggleSubtask}\n onDeleteSubtask={onDeleteSubtask}\n onDeleteTask={onDeleteTask}\n onUpdateSubtask={onUpdateSubtask}\n />\n </>\n );\n}\n\nKanbanBoard.displayName = 'KanbanBoard';\n\n// ─── Export individual parts for flexibility ───\n\nexport { Column as KanbanColumn, TaskCard as KanbanTaskCard };\n","// ─────────────────────────────────────────────\n// PlanBadge — Subscription plan indicator\n// Badge mode (compact) + expanded mode with\n// limits progress bars, upgrade CTA\n// ─────────────────────────────────────────────\n\n'use client';\n\nimport * as React from 'react';\nimport { cn } from '../../lib/utils';\nimport { Badge } from '../primitives/badge';\nimport { Button } from '../primitives/button';\nimport { Progress } from '../primitives/progress';\nimport { Tooltip, TooltipContent, TooltipTrigger, TooltipProvider } from '../primitives/tooltip';\nimport { OrgRocket, OrgZap, OrgStar, OrgShield } from '../../icons';\n\n// ─── Types ──────────────────────────────────\n\nexport type PlanTier = 'FREE' | 'STARTER' | 'PRO' | 'ENTERPRISE';\n\nexport interface PlanLimit {\n label: string;\n current: number;\n max: number;\n /** Override percentage (0-100) */\n percentage?: number;\n}\n\nexport interface PlanBadgeProps {\n /** Current plan tier */\n plan: PlanTier;\n /** Display mode */\n variant?: 'badge' | 'compact' | 'full';\n /** Usage limits to display in full/compact mode */\n limits?: PlanLimit[];\n /** Callback for upgrade CTA */\n onUpgrade?: () => void;\n /** Whether the plan is on trial */\n isTrial?: boolean;\n /** Days remaining in trial */\n trialDaysLeft?: number;\n /** CSS class */\n className?: string;\n}\n\n// ─── Config ─────────────────────────────────\n\nconst planConfig: Record<PlanTier, {\n label: string;\n color: string;\n bgColor: string;\n borderColor: string;\n icon: React.ReactNode;\n}> = {\n FREE: {\n label: 'Gratuito',\n color: 'text-theme-muted',\n bgColor: 'bg-theme-subtle',\n borderColor: 'border-theme-subtle',\n icon: <OrgStar className=\"w-3 h-3\" />,\n },\n STARTER: {\n label: 'Starter',\n color: 'text-blue-300',\n bgColor: 'bg-blue-500/10',\n borderColor: 'border-blue-500/20',\n icon: <OrgRocket className=\"w-3 h-3\" />,\n },\n PRO: {\n label: 'Pro',\n color: 'text-purple-300',\n bgColor: 'bg-purple-500/10',\n borderColor: 'border-purple-500/20',\n icon: <OrgZap className=\"w-3 h-3\" />,\n },\n ENTERPRISE: {\n label: 'Enterprise',\n color: 'text-amber-300',\n bgColor: 'bg-amber-500/10',\n borderColor: 'border-amber-500/20',\n icon: <OrgShield className=\"w-3 h-3\" />,\n },\n};\n\nfunction getUsageColor(percentage: number): string {\n if (percentage >= 90) return 'text-rose-400';\n if (percentage >= 70) return 'text-amber-400';\n return 'text-emerald-400';\n}\n\nfunction getProgressColor(percentage: number): string {\n if (percentage >= 90) return '[&>div]:bg-rose-500';\n if (percentage >= 70) return '[&>div]:bg-amber-500';\n return '[&>div]:bg-emerald-500';\n}\n\n// ─── Badge Mode ─────────────────────────────\n\nfunction PlanBadgeMini({\n plan,\n isTrial,\n trialDaysLeft,\n className,\n}: Pick<PlanBadgeProps, 'plan' | 'isTrial' | 'trialDaysLeft' | 'className'>) {\n const config = planConfig[plan];\n\n return (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <Badge\n variant=\"default\"\n className={cn(\n 'gap-1 text-[10px] px-1.5 py-0 h-5 border font-medium',\n config.bgColor,\n config.borderColor,\n config.color,\n isTrial && 'border-dashed',\n className,\n )}\n >\n {config.icon}\n {config.label}\n {isTrial && trialDaysLeft !== undefined && (\n <span className=\"text-theme-muted ml-0.5\">({trialDaysLeft}d)</span>\n )}\n </Badge>\n </TooltipTrigger>\n <TooltipContent>\n {isTrial\n ? `Período de teste — ${trialDaysLeft} dias restantes`\n : `Plano ${config.label}`}\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n}\n\n// ─── Compact Mode ───────────────────────────\n\nfunction PlanBadgeCompact({\n plan,\n limits = [],\n isTrial,\n trialDaysLeft,\n onUpgrade,\n className,\n}: PlanBadgeProps) {\n const config = planConfig[plan];\n const mostUsed = limits.reduce(\n (max, l) => {\n const pct = l.percentage ?? (l.max > 0 ? (l.current / l.max) * 100 : 0);\n return pct > max.pct ? { pct, limit: l } : max;\n },\n { pct: 0, limit: null as PlanLimit | null },\n );\n\n return (\n <div\n className={cn(\n 'flex items-center gap-3 px-3 py-2 rounded-xl border',\n config.bgColor,\n config.borderColor,\n className,\n )}\n >\n <div className=\"flex items-center gap-1.5\">\n <span className={config.color}>{config.icon}</span>\n <span className={cn('text-xs font-medium', config.color)}>{config.label}</span>\n </div>\n\n {mostUsed.limit && (\n <div className=\"flex-1 max-w-[120px]\">\n <div className=\"flex items-center justify-between mb-0.5\">\n <span className=\"text-[10px] text-theme-muted\">{mostUsed.limit.label}</span>\n <span className={cn('text-[10px] font-medium', getUsageColor(mostUsed.pct))}>\n {mostUsed.limit.current}/{mostUsed.limit.max}\n </span>\n </div>\n <Progress\n value={mostUsed.pct}\n className={cn('h-1 bg-theme-subtle', getProgressColor(mostUsed.pct))}\n />\n </div>\n )}\n\n {isTrial && trialDaysLeft !== undefined && (\n <span className=\"text-[10px] text-amber-400/70\">\n {trialDaysLeft}d restantes\n </span>\n )}\n\n {onUpgrade && plan !== 'ENTERPRISE' && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={onUpgrade}\n className=\"h-6 px-2 text-[10px] text-primary-light/70 hover:text-primary-light\"\n >\n Upgrade\n </Button>\n )}\n </div>\n );\n}\n\n// ─── Full Mode ──────────────────────────────\n\nfunction PlanBadgeFull({\n plan,\n limits = [],\n isTrial,\n trialDaysLeft,\n onUpgrade,\n className,\n}: PlanBadgeProps) {\n const config = planConfig[plan];\n\n return (\n <div\n className={cn(\n 'rounded-xl border p-5 space-y-4',\n config.bgColor,\n config.borderColor,\n className,\n )}\n >\n {/* Header */}\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n <div\n className={cn(\n 'flex items-center justify-center w-9 h-9 rounded-xl border',\n config.bgColor,\n config.borderColor,\n )}\n >\n <span className={config.color}>\n {React.cloneElement(config.icon as React.ReactElement<any>, {\n className: 'w-5 h-5',\n })}\n </span>\n </div>\n <div>\n <h4 className={cn('text-sm font-semibold', config.color)}>\n Plano {config.label}\n </h4>\n {isTrial && (\n <p className=\"text-[11px] text-amber-400/70\">\n Trial — {trialDaysLeft} dias restantes\n </p>\n )}\n </div>\n </div>\n\n {onUpgrade && plan !== 'ENTERPRISE' && (\n <Button\n variant=\"default\"\n size=\"sm\"\n onClick={onUpgrade}\n className=\"text-xs\"\n >\n <OrgRocket className=\"w-3.5 h-3.5 mr-1\" />\n Fazer Upgrade\n </Button>\n )}\n </div>\n\n {/* Limits */}\n {limits.length > 0 && (\n <div className=\"space-y-3\">\n {limits.map((limit, i) => {\n const pct = limit.percentage ?? (limit.max > 0 ? (limit.current / limit.max) * 100 : 0);\n return (\n <div key={i}>\n <div className=\"flex items-center justify-between mb-1\">\n <span className=\"text-xs text-theme-secondary\">{limit.label}</span>\n <span className={cn('text-xs font-medium', getUsageColor(pct))}>\n {limit.current} / {limit.max}\n </span>\n </div>\n <Progress\n value={Math.min(pct, 100)}\n className={cn('h-1.5 bg-theme-subtle', getProgressColor(pct))}\n />\n {pct >= 90 && (\n <p className=\"text-[10px] text-rose-400/80 mt-1\">\n ⚠ Quase no limite — considere fazer upgrade\n </p>\n )}\n </div>\n );\n })}\n </div>\n )}\n </div>\n );\n}\n\n// ─── Main Export ─────────────────────────────\n\nexport function PlanBadge({ variant = 'badge', ...props }: PlanBadgeProps) {\n switch (variant) {\n case 'badge':\n return <PlanBadgeMini {...props} />;\n case 'compact':\n return <PlanBadgeCompact variant={variant} {...props} />;\n case 'full':\n return <PlanBadgeFull variant={variant} {...props} />;\n default:\n return <PlanBadgeMini {...props} />;\n }\n}\n","// ─────────────────────────────────────────────\n// BoardsSwitcher — Board selector for project view\n// ─────────────────────────────────────────────\n// Switch between boards within a project.\n// Compact mode shows icon only (for collapsed sidebar).\n// Supports create board inline.\n// ─────────────────────────────────────────────\n\n'use client';\n\nimport * as React from 'react';\nimport { createPortal } from 'react-dom';\nimport { cn } from '../../lib/utils';\nimport { Badge } from '../primitives/badge';\nimport { Button } from '../primitives/button';\nimport { OrgPlus } from '../../icons';\n\n// ─── Types ──────────────────────────────────\n\nexport interface BoardItem {\n id: string;\n name: string;\n color?: string;\n taskCount?: number;\n isDefault?: boolean;\n /** Board privacy: 'public' = all project members, 'private' = invited only */\n visibility?: 'public' | 'private';\n}\n\nexport interface BoardsSwitcherProps {\n boards: BoardItem[];\n activeBoardId?: string | null;\n onBoardChange: (boardId: string) => void;\n onCreateBoard?: (name: string) => void;\n compact?: boolean;\n className?: string;\n}\n\n// ─── Component ──────────────────────────────\n\nexport function BoardsSwitcher({\n boards,\n activeBoardId,\n onBoardChange,\n onCreateBoard,\n compact = false,\n className,\n}: BoardsSwitcherProps) {\n const [isOpen, setIsOpen] = React.useState(false);\n const [isCreating, setIsCreating] = React.useState(false);\n const [newBoardName, setNewBoardName] = React.useState('');\n const [menuPos, setMenuPos] = React.useState<{ top: number; left: number } | null>(null);\n const triggerRef = React.useRef<HTMLDivElement>(null);\n const dropdownRef = React.useRef<HTMLDivElement>(null);\n const createInputRef = React.useRef<HTMLInputElement>(null);\n\n // Close on click outside\n React.useEffect(() => {\n if (!isOpen) return;\n function handleClickOutside(event: MouseEvent) {\n if (\n !triggerRef.current?.contains(event.target as Node) &&\n !dropdownRef.current?.contains(event.target as Node)\n ) {\n setIsOpen(false);\n setIsCreating(false);\n setNewBoardName('');\n }\n }\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [isOpen]);\n\n // Close on scroll/resize\n React.useEffect(() => {\n if (!isOpen) return;\n const close = () => setIsOpen(false);\n window.addEventListener('scroll', close, true);\n window.addEventListener('resize', close);\n return () => {\n window.removeEventListener('scroll', close, true);\n window.removeEventListener('resize', close);\n };\n }, [isOpen]);\n\n React.useEffect(() => {\n if (isCreating) createInputRef.current?.focus();\n }, [isCreating]);\n\n const handleToggle = () => {\n if (!isOpen) {\n const rect = triggerRef.current?.getBoundingClientRect();\n if (rect) setMenuPos({ top: rect.bottom + 4, left: rect.left });\n }\n setIsOpen((v) => !v);\n };\n\n const activeBoard = boards.find((b) => b.id === activeBoardId);\n\n const handleCreate = () => {\n const trimmed = newBoardName.trim();\n if (trimmed) {\n onCreateBoard?.(trimmed);\n setNewBoardName('');\n setIsCreating(false);\n }\n };\n\n const dropdown = isOpen && menuPos ? (\n <div\n ref={dropdownRef}\n style={{ position: 'fixed', top: menuPos.top, left: menuPos.left, zIndex: 9999 }}\n className={cn(\n 'min-w-[240px]',\n 'bg-elevated/95 backdrop-blur-xl border border-theme-subtle rounded-xl shadow-2xl',\n 'animate-in fade-in slide-in-from-top-2 duration-200',\n )}\n >\n <div className=\"p-1.5\">\n {/* Board list */}\n <div className=\"max-h-[240px] overflow-y-auto scrollbar-none space-y-0.5\">\n {boards.map((board) => {\n const isActive = board.id === activeBoardId;\n return (\n <button\n key={board.id}\n onClick={() => {\n onBoardChange(board.id);\n setIsOpen(false);\n }}\n className={cn(\n 'w-full flex items-center gap-2 px-3 py-2 rounded-lg text-xs',\n 'transition-colors',\n isActive\n ? 'bg-primary/10 text-primary-light'\n : 'text-theme hover:bg-theme-highlight',\n )}\n >\n <div\n className=\"w-2.5 h-2.5 rounded shrink-0\"\n style={{ backgroundColor: board.color || '#7C3AED' }}\n />\n <span className=\"flex-1 text-left truncate\">{board.name}</span>\n {board.visibility === 'private' && (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 16 16\" fill=\"none\" className=\"text-theme-muted shrink-0\">\n <rect x=\"3\" y=\"7\" width=\"10\" height=\"7\" rx=\"1.5\" stroke=\"currentColor\" strokeWidth=\"1.2\" />\n <path d=\"M5 7V5a3 3 0 016 0v2\" stroke=\"currentColor\" strokeWidth=\"1.2\" strokeLinecap=\"round\" />\n </svg>\n )}\n {board.isDefault && (\n <Badge className=\"text-[9px] px-1.5 py-0 h-4 bg-primary/10 text-primary-light border-primary/20\">\n Padrão\n </Badge>\n )}\n {board.taskCount != null && (\n <span className=\"text-[10px] text-theme-muted\">{board.taskCount}</span>\n )}\n </button>\n );\n })}\n </div>\n\n {/* Create board */}\n {onCreateBoard && (\n <>\n <div className=\"h-px bg-theme-subtle my-1\" />\n {isCreating ? (\n <div className=\"px-2 py-1.5\">\n <input\n ref={createInputRef}\n value={newBoardName}\n onChange={(e) => setNewBoardName(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter') handleCreate();\n if (e.key === 'Escape') {\n setIsCreating(false);\n setNewBoardName('');\n }\n }}\n placeholder=\"Nome do board...\"\n className=\"w-full text-xs text-theme bg-transparent outline-none placeholder:text-theme-muted\"\n />\n </div>\n ) : (\n <button\n onClick={() => setIsCreating(true)}\n className=\"w-full flex items-center gap-2 px-3 py-2 rounded-lg text-xs text-theme-muted hover:text-theme hover:bg-theme-highlight transition-colors\"\n >\n <OrgPlus className=\"w-3 h-3\" />\n Criar board\n </button>\n )}\n </>\n )}\n </div>\n </div>\n ) : null;\n\n return (\n <div ref={triggerRef} data-tour=\"board-switcher\" className={cn('relative inline-flex', className)}>\n {/* Trigger button */}\n <button\n onClick={handleToggle}\n className={cn(\n 'flex items-center gap-2 rounded-xl px-3 py-2',\n 'bg-theme-glass backdrop-blur-md border border-theme-subtle',\n 'text-theme hover:bg-theme-highlight',\n 'transition-all duration-[400ms]',\n compact && 'px-2',\n )}\n >\n {/* Board color dot */}\n <div\n className=\"w-3 h-3 rounded shrink-0\"\n style={{ backgroundColor: activeBoard?.color || '#7C3AED' }}\n />\n\n {!compact && (\n <>\n <span className=\"text-sm font-medium truncate max-w-[140px] sm:max-w-[200px]\">\n {activeBoard?.name || 'Selecionar board'}\n </span>\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\" className={cn('transition-transform shrink-0', isOpen && 'rotate-180')}>\n <path d=\"M2.5 3.75L5 6.25L7.5 3.75\" stroke=\"currentColor\" strokeWidth=\"1.2\" strokeLinecap=\"round\" />\n </svg>\n </>\n )}\n </button>\n\n {typeof document !== 'undefined' && dropdown && createPortal(dropdown, document.body)}\n </div>\n );\n}\n\nBoardsSwitcher.displayName = 'BoardsSwitcher';\n","// ─────────────────────────────────────────────\n// SprintFilter — Sprint switcher for board view\n// ─────────────────────────────────────────────\n// Allows users to filter tasks by sprint.\n// Shows active sprint prominently + dropdown\n// for selecting other sprints or \"All tasks\".\n// ─────────────────────────────────────────────\n\n'use client';\n\nimport * as React from 'react';\nimport { createPortal } from 'react-dom';\nimport { cn } from '../../lib/utils';\nimport { Badge } from '../primitives/badge';\nimport { Button } from '../primitives/button';\n\n// ─── Types ──────────────────────────────────\n\nexport interface Sprint {\n id: string;\n name: string;\n status: 'PLANNED' | 'ACTIVE' | 'COMPLETED';\n startDate?: string;\n endDate?: string;\n taskCount?: number;\n}\n\nexport interface SprintFilterProps {\n sprints: Sprint[];\n activeSprint?: Sprint | null;\n selectedSprintId?: string | null;\n onSprintChange: (sprintId: string | null) => void;\n /** When true, shows only the icon (no label text). Ideal for compact / mobile toolbars. */\n compact?: boolean;\n className?: string;\n}\n\n// ─── Status config ──────────────────────────\n\nconst statusConfig: Record<Sprint['status'], { label: string; className: string }> = {\n ACTIVE: { label: 'Ativa', className: 'bg-emerald-500/15 text-emerald-400 border-emerald-500/30' },\n PLANNED: { label: 'Planeada', className: 'bg-blue-500/15 text-blue-400 border-blue-500/30' },\n COMPLETED: { label: 'Concluída', className: 'bg-theme-highlight text-theme-muted border-theme-subtle' },\n};\n\n// ─── Component ──────────────────────────────\n\nexport function SprintFilter({\n sprints,\n activeSprint,\n selectedSprintId,\n onSprintChange,\n compact = false,\n className,\n}: SprintFilterProps) {\n const [isOpen, setIsOpen] = React.useState(false);\n const [menuPos, setMenuPos] = React.useState<{ top: number; left: number } | null>(null);\n const triggerRef = React.useRef<HTMLDivElement>(null);\n const dropdownRef = React.useRef<HTMLDivElement>(null);\n\n // Close on click outside (both trigger and portal dropdown)\n React.useEffect(() => {\n if (!isOpen) return;\n function handleClickOutside(event: MouseEvent) {\n if (\n !triggerRef.current?.contains(event.target as Node) &&\n !dropdownRef.current?.contains(event.target as Node)\n ) {\n setIsOpen(false);\n }\n }\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [isOpen]);\n\n // Close on scroll/resize to avoid stale position\n React.useEffect(() => {\n if (!isOpen) return;\n const close = () => setIsOpen(false);\n window.addEventListener('scroll', close, true);\n window.addEventListener('resize', close);\n return () => {\n window.removeEventListener('scroll', close, true);\n window.removeEventListener('resize', close);\n };\n }, [isOpen]);\n\n const handleToggle = () => {\n if (!isOpen) {\n const rect = triggerRef.current?.getBoundingClientRect();\n if (rect) setMenuPos({ top: rect.bottom + 4, left: rect.left });\n }\n setIsOpen((v) => !v);\n };\n\n const selectedSprint = selectedSprintId\n ? sprints.find((s) => s.id === selectedSprintId)\n : null;\n\n const displayLabel = selectedSprint\n ? selectedSprint.name\n : selectedSprintId === null\n ? 'Todas as tarefas'\n : activeSprint?.name ?? 'Todas as tarefas';\n\n // Sort: active first, then planned, then completed\n const sortedSprints = React.useMemo(() => {\n const order: Record<string, number> = { ACTIVE: 0, PLANNED: 1, COMPLETED: 2 };\n return [...sprints].sort((a, b) => (order[a.status] ?? 9) - (order[b.status] ?? 9));\n }, [sprints]);\n\n const dropdown = isOpen && menuPos ? (\n <div\n ref={dropdownRef}\n style={{ position: 'fixed', top: menuPos.top, left: menuPos.left, zIndex: 9999 }}\n className={cn(\n 'min-w-[220px]',\n 'bg-elevated/95 backdrop-blur-xl border border-theme-subtle rounded-xl shadow-2xl',\n 'animate-in fade-in slide-in-from-top-2 duration-200',\n )}\n >\n <div className=\"p-1.5 max-h-[280px] overflow-y-auto scrollbar-none\">\n {/* All tasks option */}\n <button\n onClick={() => {\n onSprintChange(null);\n setIsOpen(false);\n }}\n className={cn(\n 'w-full flex items-center gap-2 px-3 py-2 rounded-lg text-xs',\n 'transition-colors',\n selectedSprintId === null\n ? 'bg-primary/10 text-primary-light'\n : 'text-theme-muted hover:bg-theme-highlight hover:text-theme',\n )}\n >\n <span className=\"w-2 h-2 rounded-full bg-theme-muted shrink-0\" />\n <span className=\"flex-1 text-left\">Todas as tarefas</span>\n </button>\n\n {/* Sprint separator */}\n {sortedSprints.length > 0 && (\n <div className=\"h-px bg-theme-subtle my-1\" />\n )}\n\n {/* Sprint items */}\n {sortedSprints.map((sprint) => {\n const config = statusConfig[sprint.status];\n const isSelected = selectedSprintId === sprint.id;\n\n return (\n <button\n key={sprint.id}\n onClick={() => {\n onSprintChange(sprint.id);\n setIsOpen(false);\n }}\n className={cn(\n 'w-full flex items-center gap-2 px-3 py-2 rounded-lg text-xs',\n 'transition-colors',\n isSelected\n ? 'bg-primary/10 text-primary-light'\n : 'text-theme hover:bg-theme-highlight',\n )}\n >\n <span\n className={cn('w-2 h-2 rounded-full shrink-0', {\n 'bg-emerald-400': sprint.status === 'ACTIVE',\n 'bg-blue-400': sprint.status === 'PLANNED',\n 'bg-theme-muted': sprint.status === 'COMPLETED',\n })}\n />\n <span className=\"flex-1 text-left truncate\">{sprint.name}</span>\n <Badge className={cn('text-[9px] px-1.5 py-0 h-4 border', config.className)}>\n {config.label}\n </Badge>\n {sprint.taskCount != null && (\n <span className=\"text-[10px] text-theme-muted\">{sprint.taskCount}</span>\n )}\n </button>\n );\n })}\n\n {sortedSprints.length === 0 && (\n <div className=\"px-3 py-4 text-center text-xs text-theme-muted\">\n Nenhuma sprint criada\n </div>\n )}\n </div>\n </div>\n ) : null;\n\n return (\n <div data-tour=\"sprint-switcher\" className={cn('relative', className)}>\n <div ref={triggerRef} className=\"inline-flex\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={handleToggle}\n className={cn(\n 'h-8 gap-1.5 text-xs font-medium',\n compact ? 'px-2' : 'px-3 gap-2',\n 'bg-theme-glass border border-theme-subtle',\n 'text-theme hover:bg-theme-highlight',\n )}\n title={compact ? displayLabel : undefined}\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 16 16\" fill=\"none\" className=\"shrink-0\">\n <path d=\"M3 8h10M5 4h6M7 12h2\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n {!compact && (\n <span className=\"truncate max-w-[120px] sm:max-w-[200px]\">{displayLabel}</span>\n )}\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\" className={cn('transition-transform shrink-0', isOpen && 'rotate-180')}>\n <path d=\"M2.5 3.75L5 6.25L7.5 3.75\" stroke=\"currentColor\" strokeWidth=\"1.2\" strokeLinecap=\"round\" />\n </svg>\n </Button>\n </div>\n\n {typeof document !== 'undefined' && dropdown && createPortal(dropdown, document.body)}\n </div>\n );\n}\n\nSprintFilter.displayName = 'SprintFilter';\n","// ─────────────────────────────────────────────\n// ActivityTrail — Audit log / activity feed\n// ─────────────────────────────────────────────\n// Displays a chronological trail of all project\n// activities: task creation, moves, status changes,\n// comments, sprint changes, etc. Glass design.\n// ─────────────────────────────────────────────\n\n'use client';\n\nimport * as React from 'react';\nimport { cn } from '../../lib/utils';\nimport { Badge } from '../primitives/badge';\nimport { ScrollArea } from '../primitives/scroll-area';\nimport { UserAvatar } from '../primitives/user-avatar';\nimport { Skeleton } from '../primitives/skeleton';\n\n// ─── Types ──────────────────────────────────\n\nexport type ActivityAction =\n | 'TASK_CREATED'\n | 'TASK_MOVED'\n | 'TASK_UPDATED'\n | 'TASK_DELETED'\n | 'TASK_COMPLETED'\n | 'TASK_ASSIGNED'\n | 'COMMENT_ADDED'\n | 'SPRINT_STARTED'\n | 'SPRINT_COMPLETED'\n | 'BOARD_CREATED'\n | 'COLUMN_CREATED'\n | 'MEMBER_ADDED'\n | 'MEMBER_REMOVED'\n | 'LABEL_ADDED'\n | 'ATTACHMENT_ADDED'\n | 'PRIORITY_CHANGED'\n | 'DUE_DATE_SET'\n | 'REPORT_GENERATED';\n\nexport interface ActivityEntry {\n id: string;\n action: ActivityAction;\n description: string;\n actor: {\n id: string;\n name: string;\n avatarUrl?: string;\n };\n target?: {\n id: string;\n type: 'task' | 'board' | 'sprint' | 'column' | 'member' | 'report';\n name: string;\n };\n metadata?: Record<string, any>;\n /** ISO 8601 timestamp */\n timestamp: string;\n /** SHA-256 chain hash for audit integrity */\n hash?: string;\n}\n\nexport interface ActivityTrailProps {\n activities: ActivityEntry[];\n loading?: boolean;\n hasMore?: boolean;\n onLoadMore?: () => void;\n /** Filter by action type */\n filterActions?: ActivityAction[];\n onFilterChange?: (actions: ActivityAction[]) => void;\n /** Max height of the feed */\n maxHeight?: string;\n className?: string;\n compact?: boolean;\n}\n\n// ─── Action Config ──────────────────────────\n\nconst actionConfig: Record<ActivityAction, { icon: string; color: string; label: string }> = {\n TASK_CREATED: { icon: '+', color: 'text-emerald-400', label: 'criou tarefa' },\n TASK_MOVED: { icon: '→', color: 'text-blue-400', label: 'moveu tarefa' },\n TASK_UPDATED: { icon: '✎', color: 'text-amber-400', label: 'atualizou tarefa' },\n TASK_DELETED: { icon: '✕', color: 'text-rose-400', label: 'eliminou tarefa' },\n TASK_COMPLETED: { icon: '✓', color: 'text-emerald-400', label: 'concluiu tarefa' },\n TASK_ASSIGNED: { icon: '👤', color: 'text-blue-400', label: 'atribuiu tarefa' },\n COMMENT_ADDED: { icon: '💬', color: 'text-primary-light', label: 'comentou' },\n SPRINT_STARTED: { icon: '🏃', color: 'text-emerald-400', label: 'iniciou sprint' },\n SPRINT_COMPLETED: { icon: '🏁', color: 'text-theme-muted', label: 'concluiu sprint' },\n BOARD_CREATED: { icon: '📋', color: 'text-primary-light', label: 'criou board' },\n COLUMN_CREATED: { icon: '▐', color: 'text-blue-400', label: 'criou coluna' },\n MEMBER_ADDED: { icon: '➕', color: 'text-emerald-400', label: 'adicionou membro' },\n MEMBER_REMOVED: { icon: '➖', color: 'text-rose-400', label: 'removeu membro' },\n LABEL_ADDED: { icon: '🏷', color: 'text-amber-400', label: 'etiquetou' },\n ATTACHMENT_ADDED: { icon: '📎', color: 'text-blue-400', label: 'anexou ficheiro' },\n PRIORITY_CHANGED: { icon: '⚡', color: 'text-amber-400', label: 'alterou prioridade' },\n DUE_DATE_SET: { icon: '📅', color: 'text-blue-400', label: 'definiu prazo' },\n REPORT_GENERATED: { icon: '📊', color: 'text-primary-light', label: 'gerou relatório' },\n};\n\n// ─── Available filters ──────────────────────\n\nconst FILTER_GROUPS = [\n { label: 'Tarefas', actions: ['TASK_CREATED', 'TASK_MOVED', 'TASK_UPDATED', 'TASK_DELETED', 'TASK_COMPLETED', 'TASK_ASSIGNED'] as ActivityAction[] },\n { label: 'Sprints', actions: ['SPRINT_STARTED', 'SPRINT_COMPLETED'] as ActivityAction[] },\n { label: 'Board', actions: ['BOARD_CREATED', 'COLUMN_CREATED'] as ActivityAction[] },\n { label: 'Equipa', actions: ['MEMBER_ADDED', 'MEMBER_REMOVED', 'COMMENT_ADDED'] as ActivityAction[] },\n { label: 'Outros', actions: ['LABEL_ADDED', 'ATTACHMENT_ADDED', 'PRIORITY_CHANGED', 'DUE_DATE_SET', 'REPORT_GENERATED'] as ActivityAction[] },\n];\n\n// ─── Time formatting ────────────────────────\n\nfunction timeAgo(timestamp: string): string {\n const now = Date.now();\n const then = new Date(timestamp).getTime();\n const diff = now - then;\n\n const minutes = Math.floor(diff / 60000);\n if (minutes < 1) return 'agora';\n if (minutes < 60) return `${minutes}m`;\n\n const hours = Math.floor(minutes / 60);\n if (hours < 24) return `${hours}h`;\n\n const days = Math.floor(hours / 24);\n if (days < 7) return `${days}d`;\n\n return new Date(timestamp).toLocaleDateString('pt-BR', { day: '2-digit', month: 'short' });\n}\n\n// ─── Group by date ──────────────────────────\n\nfunction groupByDate(activities: ActivityEntry[]): Map<string, ActivityEntry[]> {\n const groups = new Map<string, ActivityEntry[]>();\n const today = new Date().toDateString();\n const yesterday = new Date(Date.now() - 86400000).toDateString();\n\n for (const activity of activities) {\n const date = new Date(activity.timestamp).toDateString();\n let label: string;\n\n if (date === today) label = 'Hoje';\n else if (date === yesterday) label = 'Ontem';\n else label = new Date(activity.timestamp).toLocaleDateString('pt-BR', { weekday: 'long', day: 'numeric', month: 'long' });\n\n if (!groups.has(label)) groups.set(label, []);\n groups.get(label)!.push(activity);\n }\n\n return groups;\n}\n\n// ─── Component ──────────────────────────────\n\nexport function ActivityTrail({\n activities,\n loading,\n hasMore,\n onLoadMore,\n filterActions,\n onFilterChange,\n maxHeight = '600px',\n className,\n compact = false,\n}: ActivityTrailProps) {\n const [showFilters, setShowFilters] = React.useState(false);\n\n const filteredActivities = filterActions && filterActions.length > 0\n ? activities.filter((a) => filterActions.includes(a.action))\n : activities;\n\n const grouped = groupByDate(filteredActivities);\n\n return (\n <div className={cn('flex flex-col', className)}>\n {/* Header with filter toggle */}\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 flex items-center gap-2\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <circle cx=\"8\" cy=\"8\" r=\"6\" stroke=\"currentColor\" strokeWidth=\"1.2\" />\n <path d=\"M8 4.5V8L10.5 10\" stroke=\"currentColor\" strokeWidth=\"1.2\" strokeLinecap=\"round\" />\n </svg>\n Registo de atividades\n {filteredActivities.length > 0 && (\n <Badge className=\"text-[10px] bg-theme-highlight text-theme-muted border-theme-subtle\">\n {filteredActivities.length}\n </Badge>\n )}\n </h3>\n {onFilterChange && (\n <button\n onClick={() => setShowFilters(!showFilters)}\n className={cn(\n 'p-1.5 rounded-lg transition-colors text-theme-muted hover:text-theme hover:bg-theme-highlight',\n showFilters && 'bg-primary/10 text-primary-light',\n )}\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M2 4h12M4 8h8M6 12h4\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n </button>\n )}\n </div>\n\n {/* Filters */}\n {showFilters && onFilterChange && (\n <div className=\"px-4 py-2 border-b border-theme-subtle flex flex-wrap gap-1.5 animate-in slide-in-from-top-2 duration-200\">\n {FILTER_GROUPS.map((group) => {\n const isActive = filterActions && group.actions.some((a) => filterActions.includes(a));\n return (\n <button\n key={group.label}\n onClick={() => {\n if (isActive) {\n onFilterChange((filterActions || []).filter((a) => !group.actions.includes(a)));\n } else {\n onFilterChange([...(filterActions || []), ...group.actions]);\n }\n }}\n className={cn(\n 'px-2 py-1 rounded-lg text-[10px] font-medium border transition-colors',\n isActive\n ? 'bg-primary/10 text-primary-light border-primary/20'\n : 'bg-theme-subtle text-theme-muted border-theme-subtle hover:text-theme',\n )}\n >\n {group.label}\n </button>\n );\n })}\n </div>\n )}\n\n {/* Activity Feed */}\n <ScrollArea style={{ maxHeight }} className=\"[&_[data-radix-scroll-area-viewport]]:scrollbar-none\">\n <div className=\"px-4 py-2\">\n {Array.from(grouped.entries()).map(([dateLabel, entries]) => (\n <div key={dateLabel} className=\"mb-4\">\n {/* Date group label */}\n <div className=\"sticky top-0 z-10 py-1.5 bg-void/80 backdrop-blur-sm\">\n <span className=\"text-[10px] font-semibold uppercase tracking-wider text-theme-muted\">\n {dateLabel}\n </span>\n </div>\n\n {/* Timeline */}\n <div className=\"relative\">\n {/* Timeline vertical line */}\n <div className=\"absolute left-3 top-0 bottom-0 w-px bg-theme-subtle\" />\n\n {entries.map((activity, i) => {\n const config = actionConfig[activity.action] || actionConfig.TASK_UPDATED;\n \n return (\n <div key={activity.id} className=\"relative flex gap-3 py-2 group\">\n {/* Timeline dot */}\n <div className={cn(\n 'relative z-10 w-6 h-6 rounded-full flex items-center justify-center shrink-0',\n 'bg-void border border-theme-subtle text-[10px]',\n 'group-hover:border-primary-light/30 transition-colors',\n )}>\n <span className={config.color}>{config.icon}</span>\n </div>\n\n {/* Content */}\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-start gap-2\">\n {!compact && (\n <UserAvatar\n name={activity.actor.name}\n src={activity.actor.avatarUrl}\n size=\"sm\"\n className=\"h-5 w-5 shrink-0 mt-0.5\"\n />\n )}\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-xs text-theme\">\n <span className=\"font-medium\">{activity.actor.name}</span>\n {' '}\n <span className=\"text-theme-muted\">{config.label}</span>\n {activity.target && (\n <>\n {' '}\n <span className=\"font-medium text-primary-light truncate\">\n {activity.target.name}\n </span>\n </>\n )}\n </p>\n {!compact && activity.description && activity.description !== config.label && (\n <p className=\"text-[11px] text-theme-muted mt-0.5 line-clamp-2\">\n {activity.description}\n </p>\n )}\n </div>\n <span className=\"text-[10px] text-theme-muted whitespace-nowrap shrink-0\">\n {timeAgo(activity.timestamp)}\n </span>\n </div>\n\n {/* Audit hash for compliance */}\n {activity.hash && !compact && (\n <div className=\"mt-1 flex items-center gap-1\">\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 16 16\" fill=\"none\" className=\"text-theme-muted\">\n <path d=\"M4 8h8M8 4v8\" stroke=\"currentColor\" strokeWidth=\"1\" strokeLinecap=\"round\" />\n <circle cx=\"8\" cy=\"8\" r=\"6\" stroke=\"currentColor\" strokeWidth=\"1\" />\n </svg>\n <span className=\"text-[9px] font-mono text-theme-muted opacity-50 truncate max-w-[120px]\">\n {activity.hash.slice(0, 16)}…\n </span>\n </div>\n )}\n </div>\n </div>\n );\n })}\n </div>\n </div>\n ))}\n\n {/* Empty state */}\n {filteredActivities.length === 0 && !loading && (\n <div className=\"flex flex-col items-center justify-center py-12 text-center\">\n <svg width=\"40\" height=\"40\" viewBox=\"0 0 48 48\" fill=\"none\" className=\"text-theme-muted mb-3 opacity-40\">\n <circle cx=\"24\" cy=\"24\" r=\"18\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M24 14v10l7 4\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n <p className=\"text-sm text-theme-muted\">Sem atividades registadas</p>\n <p className=\"text-xs text-theme-muted mt-1\">As atividades aparecerão aqui</p>\n </div>\n )}\n\n {/* Loading skeleton */}\n {loading && (\n <div className=\"space-y-3\">\n {[1, 2, 3].map((i) => (\n <div key={i} className=\"flex gap-3\">\n <Skeleton className=\"w-6 h-6 rounded-full\" />\n <div className=\"flex-1 space-y-1.5\">\n <Skeleton className=\"h-3 w-3/4\" />\n <Skeleton className=\"h-2 w-1/2\" />\n </div>\n </div>\n ))}\n </div>\n )}\n\n {/* Load more */}\n {hasMore && !loading && (\n <div className=\"flex justify-center py-3\">\n <button\n onClick={onLoadMore}\n className=\"text-xs text-primary-light hover:text-primary transition-colors\"\n >\n Carregar mais atividades\n </button>\n </div>\n )}\n </div>\n </ScrollArea>\n </div>\n );\n}\n\nActivityTrail.displayName = 'ActivityTrail';\n\n// ─── Skeleton ───────────────────────────────\n\nexport function ActivityTrailSkeleton({ className }: { className?: string }) {\n return (\n <div className={cn('space-y-4 p-4', className)}>\n {[1, 2, 3, 4, 5].map((i) => (\n <div key={i} className=\"flex gap-3 animate-pulse\">\n <Skeleton className=\"w-6 h-6 rounded-full shrink-0\" />\n <div className=\"flex-1 space-y-1.5\">\n <Skeleton className=\"h-3 w-4/5\" />\n <Skeleton className=\"h-2 w-2/3\" />\n </div>\n <Skeleton className=\"h-3 w-8 shrink-0\" />\n </div>\n ))}\n </div>\n );\n}\n\nActivityTrailSkeleton.displayName = 'ActivityTrailSkeleton';\n","import * as React from 'react';\nimport { cn } from '../../lib/utils';\n\nfunction Card({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"card\"\n className={cn('rounded-2xl border border-[rgba(167,139,250,0.12)] bg-[rgba(124,58,237,0.06)] backdrop-blur-2xl text-theme shadow-inner-light', className)}\n {...props}\n />\n );\n}\n\nfunction CardHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"card-header\"\n className={cn('flex flex-col gap-1.5 p-6', className)}\n {...props}\n />\n );\n}\n\nfunction CardTitle({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"card-title\"\n className={cn('font-semibold leading-none tracking-tight', className)}\n {...props}\n />\n );\n}\n\nfunction CardDescription({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"card-description\"\n className={cn('text-sm text-muted-foreground', className)}\n {...props}\n />\n );\n}\n\nfunction CardContent({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div data-slot=\"card-content\" className={cn('p-6 pt-0', className)} {...props} />\n );\n}\n\nfunction CardFooter({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"card-footer\"\n className={cn('flex items-center p-6 pt-0', className)}\n {...props}\n />\n );\n}\n\nexport { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent };\n","'use client';\n\nimport * as React from 'react';\nimport * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';\nimport { Check, ChevronRight, Circle } from 'lucide-react';\nimport { cn } from '../../lib/utils';\n\nconst DropdownMenu = DropdownMenuPrimitive.Root;\nconst DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;\nconst DropdownMenuGroup = DropdownMenuPrimitive.Group;\nconst DropdownMenuPortal = DropdownMenuPrimitive.Portal;\nconst DropdownMenuSub = DropdownMenuPrimitive.Sub;\nconst DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup;\n\nfunction DropdownMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubTrigger> & { inset?: boolean }) {\n return (\n <DropdownMenuPrimitive.SubTrigger\n data-slot=\"dropdown-menu-sub-trigger\"\n className={cn(\n 'flex cursor-default select-none items-center gap-2 rounded-lg px-2 py-1.5 text-sm outline-none transition-colors duration-[400ms] ease-[cubic-bezier(0.25,1,0.5,1)] focus:bg-white/[0.05] data-[state=open]:bg-white/[0.05] [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0',\n inset && 'pl-8',\n className,\n )}\n {...props}\n >\n {children}\n <ChevronRight className=\"ml-auto\" />\n </DropdownMenuPrimitive.SubTrigger>\n );\n}\n\nfunction DropdownMenuSubContent({\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubContent>) {\n return (\n <DropdownMenuPrimitive.SubContent\n data-slot=\"dropdown-menu-sub-content\"\n className={cn(\n 'z-50 min-w-[8rem] overflow-hidden rounded-xl border border-primary/25 bg-white/[0.03] backdrop-blur-[40px] p-1 text-theme 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 className,\n )}\n {...props}\n />\n );\n}\n\nfunction DropdownMenuContent({\n className,\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Content>) {\n return (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n data-slot=\"dropdown-menu-content\"\n sideOffset={sideOffset}\n className={cn(\n 'z-50 max-h-[var(--radix-dropdown-menu-content-available-height)] min-w-[8rem] overflow-y-auto overflow-x-hidden rounded-xl border border-primary/25 bg-white/[0.03] backdrop-blur-[40px] p-1 text-theme shadow-[0_24px_80px_-15px_rgba(0,0,0,0.5)]',\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 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 className,\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n );\n}\n\nfunction DropdownMenuItem({\n className,\n inset,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Item> & { inset?: boolean }) {\n return (\n <DropdownMenuPrimitive.Item\n data-slot=\"dropdown-menu-item\"\n className={cn(\n 'relative flex cursor-default select-none items-center gap-2 rounded-lg px-2 py-1.5 text-sm outline-none transition-colors duration-[400ms] ease-[cubic-bezier(0.25,1,0.5,1)] focus:bg-white/[0.05] focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&>svg]:size-4 [&>svg]:shrink-0',\n inset && 'pl-8',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction DropdownMenuCheckboxItem({\n className,\n children,\n checked,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem>) {\n return (\n <DropdownMenuPrimitive.CheckboxItem\n data-slot=\"dropdown-menu-checkbox-item\"\n className={cn(\n 'relative flex cursor-default select-none items-center rounded-lg py-1.5 pl-8 pr-2 text-sm outline-none transition-colors duration-[400ms] ease-[cubic-bezier(0.25,1,0.5,1)] focus:bg-white/[0.05] focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n className,\n )}\n checked={checked}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Check className=\"h-4 w-4\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n );\n}\n\nfunction DropdownMenuRadioItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioItem>) {\n return (\n <DropdownMenuPrimitive.RadioItem\n data-slot=\"dropdown-menu-radio-item\"\n className={cn(\n 'relative flex cursor-default select-none items-center rounded-lg py-1.5 pl-8 pr-2 text-sm outline-none transition-colors duration-[400ms] ease-[cubic-bezier(0.25,1,0.5,1)] focus:bg-white/[0.05] focus:text-accent-foreground 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 <DropdownMenuPrimitive.ItemIndicator>\n <Circle className=\"h-2 w-2 fill-current\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n );\n}\n\nfunction DropdownMenuLabel({\n className,\n inset,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Label> & { inset?: boolean }) {\n return (\n <DropdownMenuPrimitive.Label\n data-slot=\"dropdown-menu-label\"\n className={cn('px-2 py-1.5 text-sm font-semibold', inset && 'pl-8', className)}\n {...props}\n />\n );\n}\n\nfunction DropdownMenuSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Separator>) {\n return (\n <DropdownMenuPrimitive.Separator\n data-slot=\"dropdown-menu-separator\"\n className={cn('-mx-1 my-1 h-px bg-muted', className)}\n {...props}\n />\n );\n}\n\nfunction DropdownMenuShortcut({ className, ...props }: React.ComponentProps<'span'>) {\n return (\n <span\n data-slot=\"dropdown-menu-shortcut\"\n className={cn('ml-auto text-xs tracking-widest opacity-60', className)}\n {...props}\n />\n );\n}\n\nexport {\n DropdownMenu,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuGroup,\n DropdownMenuPortal,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuRadioGroup,\n};\n","'use client';\n\nimport * as React from 'react';\nimport * as CheckboxPrimitive from '@radix-ui/react-checkbox';\nimport { Check } from 'lucide-react';\nimport { cn } from '../../lib/utils';\n\nfunction Checkbox({\n className,\n ...props\n}: React.ComponentProps<typeof CheckboxPrimitive.Root>) {\n return (\n <CheckboxPrimitive.Root\n data-slot=\"checkbox\"\n className={cn(\n 'grid place-content-center peer h-4 w-4 shrink-0 rounded-sm border border-primary shadow-sm transition-all duration-[400ms] ease-[cubic-bezier(0.25,1,0.5,1)] focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground',\n className,\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator className=\"grid place-content-center text-current\">\n <Check className=\"h-4 w-4\" />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n );\n}\n\nexport { Checkbox };\n","'use client';\n\nimport * as React from 'react';\nimport * as SwitchPrimitives from '@radix-ui/react-switch';\nimport { cn } from '../../lib/utils';\n\nexport interface SwitchProps\n extends React.ComponentPropsWithoutRef<typeof SwitchPrimitives.Root> {}\n\nconst Switch = React.forwardRef<\n React.ComponentRef<typeof SwitchPrimitives.Root>,\n SwitchProps\n>(({ className, ...props }, ref) => (\n <SwitchPrimitives.Root\n className={cn(\n 'peer inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-full',\n 'border-2 shadow-sm transition-all duration-300',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/50 focus-visible:ring-offset-2',\n 'focus-visible:ring-offset-background',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n 'data-[state=checked]:bg-primary data-[state=checked]:border-primary',\n 'data-[state=unchecked]:bg-gray-200 data-[state=unchecked]:border-gray-300',\n 'dark:data-[state=unchecked]:bg-gray-700 dark:data-[state=unchecked]:border-gray-600',\n className,\n )}\n {...props}\n ref={ref}\n >\n <SwitchPrimitives.Thumb\n className={cn(\n 'pointer-events-none block h-5 w-5 rounded-full bg-white shadow-lg ring-0',\n 'transition-transform duration-300',\n 'data-[state=checked]:translate-x-5 data-[state=unchecked]:translate-x-0',\n )}\n />\n </SwitchPrimitives.Root>\n));\nSwitch.displayName = SwitchPrimitives.Root.displayName;\n\nexport { Switch };\n","'use client';\n\nimport * as CollapsiblePrimitive from '@radix-ui/react-collapsible';\n\nconst Collapsible = CollapsiblePrimitive.Root;\nconst CollapsibleTrigger = CollapsiblePrimitive.CollapsibleTrigger;\nconst CollapsibleContent = CollapsiblePrimitive.CollapsibleContent;\n\nexport { Collapsible, CollapsibleTrigger, CollapsibleContent };\n","'use client';\n\nimport * as React from 'react';\nimport { type DialogProps } from '@radix-ui/react-dialog';\nimport { Command as CommandPrimitive } from 'cmdk';\nimport { Search } from 'lucide-react';\nimport { cn } from '../../lib/utils';\nimport {\n Dialog,\n DialogContent,\n} from './dialog';\n\nfunction Command({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive>) {\n return (\n <CommandPrimitive\n data-slot=\"command\"\n className={cn(\n 'flex h-full w-full flex-col overflow-hidden rounded-xl bg-white/[0.03] text-popover-foreground',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction CommandDialog({ children, ...props }: DialogProps) {\n return (\n <Dialog {...props}>\n <DialogContent className=\"overflow-hidden p-0\">\n <Command className=\"[&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-group]]:px-2 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5\">\n {children}\n </Command>\n </DialogContent>\n </Dialog>\n );\n}\n\nfunction CommandInput({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Input>) {\n return (\n <div className=\"flex items-center border-b border-primary/15 px-3\" cmdk-input-wrapper=\"\">\n <Search className=\"mr-2 h-4 w-4 shrink-0 opacity-50\" />\n <CommandPrimitive.Input\n data-slot=\"command-input\"\n className={cn(\n 'flex h-10 w-full rounded-xl bg-transparent py-3 text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50',\n className,\n )}\n {...props}\n />\n </div>\n );\n}\n\nfunction CommandList({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.List>) {\n return (\n <CommandPrimitive.List\n data-slot=\"command-list\"\n className={cn('max-h-[300px] overflow-y-auto overflow-x-hidden', className)}\n {...props}\n />\n );\n}\n\nfunction CommandEmpty(props: React.ComponentProps<typeof CommandPrimitive.Empty>) {\n return (\n <CommandPrimitive.Empty data-slot=\"command-empty\" className=\"py-6 text-center text-sm\" {...props} />\n );\n}\n\nfunction CommandGroup({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Group>) {\n return (\n <CommandPrimitive.Group\n data-slot=\"command-group\"\n className={cn(\n 'overflow-hidden p-1 text-foreground [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction CommandSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Separator>) {\n return (\n <CommandPrimitive.Separator\n data-slot=\"command-separator\"\n className={cn('-mx-1 h-px bg-border', className)}\n {...props}\n />\n );\n}\n\nfunction CommandItem({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Item>) {\n return (\n <CommandPrimitive.Item\n data-slot=\"command-item\"\n className={cn(\n 'relative flex cursor-default gap-2 select-none items-center rounded-lg px-2 py-1.5 text-sm outline-none data-[disabled=true]:pointer-events-none data-[selected=true]:bg-white/[0.05] data-[selected=true]:text-accent-foreground data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction CommandShortcut({ className, ...props }: React.ComponentProps<'span'>) {\n return (\n <span\n data-slot=\"command-shortcut\"\n className={cn('ml-auto text-xs tracking-widest text-muted-foreground', className)}\n {...props}\n />\n );\n}\n\nexport {\n Command,\n CommandDialog,\n CommandInput,\n CommandList,\n CommandEmpty,\n CommandGroup,\n CommandItem,\n CommandShortcut,\n CommandSeparator,\n};\n","import * as React from 'react';\nimport { Slot } from '@radix-ui/react-slot';\nimport { ChevronRight, MoreHorizontal } from 'lucide-react';\nimport { cn } from '../../lib/utils';\n\nfunction Breadcrumb({\n ...props\n}: React.ComponentProps<'nav'> & { separator?: React.ReactNode }) {\n return <nav aria-label=\"breadcrumb\" data-slot=\"breadcrumb\" {...props} />;\n}\n\nfunction BreadcrumbList({ className, ...props }: React.ComponentProps<'ol'>) {\n return (\n <ol\n data-slot=\"breadcrumb-list\"\n className={cn(\n 'flex flex-wrap items-center gap-1.5 break-words text-sm text-muted-foreground sm:gap-2.5',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction BreadcrumbItem({ className, ...props }: React.ComponentProps<'li'>) {\n return (\n <li\n data-slot=\"breadcrumb-item\"\n className={cn('inline-flex items-center gap-1.5', className)}\n {...props}\n />\n );\n}\n\nfunction BreadcrumbLink({\n asChild,\n className,\n ...props\n}: React.ComponentProps<'a'> & { asChild?: boolean }) {\n const Comp = asChild ? Slot : 'a';\n return (\n <Comp\n data-slot=\"breadcrumb-link\"\n className={cn('transition-colors hover:text-foreground', className)}\n {...props}\n />\n );\n}\n\nfunction BreadcrumbPage({ className, ...props }: React.ComponentProps<'span'>) {\n return (\n <span\n data-slot=\"breadcrumb-page\"\n role=\"link\"\n aria-disabled=\"true\"\n aria-current=\"page\"\n className={cn('font-normal text-foreground', className)}\n {...props}\n />\n );\n}\n\nfunction BreadcrumbSeparator({\n children,\n className,\n ...props\n}: React.ComponentProps<'li'>) {\n return (\n <li\n data-slot=\"breadcrumb-separator\"\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn('[&>svg]:w-3.5 [&>svg]:h-3.5', className)}\n {...props}\n >\n {children ?? <ChevronRight />}\n </li>\n );\n}\n\nfunction BreadcrumbEllipsis({ className, ...props }: React.ComponentProps<'span'>) {\n return (\n <span\n data-slot=\"breadcrumb-ellipsis\"\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn('flex h-9 w-9 items-center justify-center', className)}\n {...props}\n >\n <MoreHorizontal className=\"h-4 w-4\" />\n <span className=\"sr-only\">More</span>\n </span>\n );\n}\n\nexport {\n Breadcrumb,\n BreadcrumbList,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbPage,\n BreadcrumbSeparator,\n BreadcrumbEllipsis,\n};\n","import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../lib/utils';\n\nfunction Empty({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"empty\"\n className={cn(\n 'flex min-w-0 flex-1 flex-col items-center justify-center gap-6 text-balance rounded-xl border-dashed p-6 text-center md:p-12',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction EmptyHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"empty-header\"\n className={cn('flex max-w-sm flex-col items-center gap-2 text-center', className)}\n {...props}\n />\n );\n}\n\nconst emptyMediaVariants = cva(\n 'mb-2 flex shrink-0 items-center justify-center [&_svg]:pointer-events-none [&_svg]:shrink-0',\n {\n variants: {\n variant: {\n default: 'bg-transparent',\n icon: 'bg-muted text-foreground flex size-10 shrink-0 items-center justify-center rounded-xl [&_svg:not([class*=\\'size-\\'])]:size-6',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n },\n);\n\nfunction EmptyMedia({\n className,\n variant = 'default',\n ...props\n}: React.ComponentProps<'div'> & VariantProps<typeof emptyMediaVariants>) {\n return (\n <div\n data-slot=\"empty-icon\"\n data-variant={variant}\n className={cn(emptyMediaVariants({ variant, className }))}\n {...props}\n />\n );\n}\n\nfunction EmptyTitle({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"empty-title\"\n className={cn('text-lg font-medium tracking-tight', className)}\n {...props}\n />\n );\n}\n\nfunction EmptyDescription({ className, ...props }: React.ComponentProps<'p'>) {\n return (\n <div\n data-slot=\"empty-description\"\n className={cn(\n 'text-muted-foreground [&>a:hover]:text-primary text-sm/relaxed [&>a]:underline [&>a]:underline-offset-4',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction EmptyContent({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"empty-content\"\n className={cn(\n 'flex w-full min-w-0 max-w-sm flex-col items-center gap-4 text-balance text-sm',\n className,\n )}\n {...props}\n />\n );\n}\n\nexport {\n Empty,\n EmptyHeader,\n EmptyTitle,\n EmptyDescription,\n EmptyContent,\n EmptyMedia,\n emptyMediaVariants,\n};\n","'use client';\n\nimport * as React from 'react';\nimport { Toaster as Sonner } from 'sonner';\n\ntype ToasterProps = React.ComponentProps<typeof Sonner>;\n\n/**\n * Toaster — Sonner integration with dark glass design\n *\n * Dark theme toast notifications with circular icon on the left\n * matching the design from the reference images\n */\nfunction Toaster({ ...props }: ToasterProps) {\n return (\n <Sonner\n data-slot=\"sonner\"\n className=\"toaster group\"\n position=\"top-right\"\n expand={true}\n richColors={false}\n toastOptions={{\n classNames: {\n toast:\n 'group toast group-[.toaster]:bg-white dark:group-[.toaster]:bg-gray-900 group-[.toaster]:backdrop-blur-xl group-[.toaster]:text-gray-900 dark:group-[.toaster]:text-white group-[.toaster]:border group-[.toaster]:border-gray-200 dark:group-[.toaster]:border-gray-700 group-[.toaster]:shadow-2xl group-[.toaster]:p-4 group-[.toaster]:rounded-2xl group-[.toaster]:min-w-[380px]',\n description:\n 'group-[.toast]:text-gray-500 dark:group-[.toast]:text-gray-400 group-[.toast]:text-sm group-[.toast]:leading-relaxed',\n actionButton:\n 'group-[.toast]:bg-primary group-[.toast]:border-0 group-[.toast]:text-white group-[.toast]:px-4 group-[.toast]:py-2 group-[.toast]:text-sm group-[.toast]:font-medium hover:group-[.toast]:bg-primary/90 group-[.toast]:transition-all group-[.toast]:rounded-lg',\n cancelButton:\n 'group-[.toast]:bg-transparent group-[.toast]:text-gray-500 dark:group-[.toast]:text-gray-400 group-[.toast]:px-4 group-[.toast]:py-2 group-[.toast]:text-sm group-[.toast]:font-medium hover:group-[.toast]:bg-gray-100 dark:hover:group-[.toast]:bg-white/10 group-[.toast]:transition-all group-[.toast]:rounded-lg',\n closeButton:\n 'group-[.toast]:!bg-transparent group-[.toast]:!border-0 group-[.toast]:text-gray-400 dark:group-[.toast]:text-gray-500 hover:group-[.toast]:text-gray-600 dark:hover:group-[.toast]:text-gray-300 group-[.toast]:transition-colors',\n success:\n 'group-[.toaster]:border-emerald-200 dark:group-[.toaster]:border-emerald-800/50',\n error:\n 'group-[.toaster]:border-rose-200 dark:group-[.toaster]:border-rose-800/50',\n warning:\n 'group-[.toaster]:border-amber-200 dark:group-[.toaster]:border-amber-800/50',\n info:\n 'group-[.toaster]:border-blue-200 dark:group-[.toaster]:border-blue-800/50',\n },\n }}\n {...props}\n />\n );\n}\n\nexport { Toaster, type ToasterProps };\n","// ─────────────────────────────────────────────\n// useCurrentUser — Shared hook (TanStack Query)\n// ─────────────────────────────────────────────\n// Fetches GET /api/auth/me with caching + dedup.\n// Shared across all zone apps via organify-ui.\n// ─────────────────────────────────────────────\n\n'use client';\n\nimport { useQuery, useQueryClient } from '@tanstack/react-query';\nimport type { OrganifyUser } from '../providers/organify-provider';\n\n/** Cache key for the current-user query. */\nexport const CURRENT_USER_KEY = ['current-user'] as const;\n\nfunction readCookieToken(): string | null {\n if (typeof document === 'undefined') return null;\n const match = document.cookie\n .split(';')\n .map((s) => s.trim())\n .find((s) => s.startsWith('auth_token='));\n if (!match) return null;\n return decodeURIComponent(match.split('=')[1]);\n}\n\nfunction readAuthToken(): string | null {\n // Try cookie first, then localStorage\n return readCookieToken() ?? (typeof localStorage !== 'undefined' ? localStorage.getItem('organify_access_token') : null);\n}\n\nasync function fetchCurrentUser(): Promise<OrganifyUser> {\n const res = await fetch('/api/auth/me', { credentials: 'include' });\n\n if (!res.ok) {\n if (res.status === 401) {\n window.location.href = '/login';\n throw new Error('UNAUTHENTICATED');\n }\n throw new Error(`HTTP ${res.status}`);\n }\n\n const data = await res.json();\n\n return {\n id: String(data.id),\n name: data.name,\n email: data.email,\n avatarUrl: data.avatar ?? null,\n role: data.role,\n };\n}\n\nexport interface UseCurrentUserReturn {\n user: OrganifyUser | null;\n authToken: string | null;\n loading: boolean;\n error: string | null;\n refetch: () => Promise<void>;\n}\n\nexport function useCurrentUser(): UseCurrentUserReturn {\n const queryClient = useQueryClient();\n\n const { data: user, isLoading, error } = useQuery({\n queryKey: CURRENT_USER_KEY,\n queryFn: fetchCurrentUser,\n staleTime: 5 * 60 * 1000, // 5 minutes — user data rarely changes\n gcTime: 10 * 60 * 1000, // Keep in GC for 10 min\n retry: (failureCount, err) => {\n // Don't retry 401s\n if (err instanceof Error && err.message === 'UNAUTHENTICATED') return false;\n return failureCount < 2;\n },\n refetchOnWindowFocus: true,\n refetchOnMount: false, // Use cache if not stale\n });\n\n const authToken = typeof window !== 'undefined' ? readAuthToken() : null;\n\n const refetch = async () => {\n await queryClient.invalidateQueries({ queryKey: CURRENT_USER_KEY });\n };\n\n return {\n user: user ?? null,\n authToken,\n loading: isLoading,\n error: error instanceof Error ? error.message : null,\n refetch,\n };\n}\n","// ─────────────────────────────────────────────\n// CreateProjectDialog — Self-contained project creation\n// ─────────────────────────────────────────────\n// Uses ResponsiveDialog (Dialog on desktop, Drawer on mobile).\n// Fetches via useOrganifyGql — no props needed for data.\n// Minimal form: name + type. Description added later in settings.\n// ─────────────────────────────────────────────\n\n'use client';\n\nimport * as React from 'react';\nimport { ResponsiveDialog } from '../primitives/responsive-dialog';\nimport { Button } from '../primitives/button';\nimport { Input } from '../primitives/input';\nimport { Label } from '../primitives/label';\nimport { cn } from '../../lib/utils';\nimport { useOrganifyGql, useOrganifyWorkspace, useOrganifyNavigation } from '../../providers/organify-provider';\nimport { OrgBoard, OrgSprint } from '../../icons';\n\n// ─── GraphQL ────────────────────────────────\n\nconst CREATE_PROJECT_MUTATION = `\n mutation CreateProject($input: CreateProjectInput!) {\n createProject(input: $input) {\n id\n name\n slug\n }\n }\n`;\n\n// ─── Types ──────────────────────────────────\n\nexport interface CreateProjectDialogProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n /** Called after successful creation with the new project */\n onCreated?: (project: { id: string; name: string; slug: string }) => void;\n}\n\n// ─── Component ──────────────────────────────\n\nexport function CreateProjectDialog({\n open,\n onOpenChange,\n onCreated,\n}: CreateProjectDialogProps) {\n const gql = useOrganifyGql();\n const { workspace } = useOrganifyWorkspace();\n const { navigate } = useOrganifyNavigation();\n\n const [name, setName] = React.useState('');\n const [type, setType] = React.useState<'KANBAN' | 'SCRUM'>('KANBAN');\n const [error, setError] = React.useState('');\n const [loading, setLoading] = React.useState(false);\n\n // Reset form on open\n React.useEffect(() => {\n if (open) {\n setName('');\n setType('KANBAN');\n setError('');\n }\n }, [open]);\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n const trimmed = name.trim();\n if (!trimmed) { setError('Project name is required'); return; }\n if (trimmed.length > 100) { setError('Name must be 100 characters or less'); return; }\n if (!workspace?.id) { setError('No workspace selected'); return; }\n\n setLoading(true);\n setError('');\n try {\n const data = await gql<{ createProject: { id: string; name: string; slug: string } }>(\n 'projects',\n CREATE_PROJECT_MUTATION,\n { input: { name: trimmed, type, workspaceId: workspace.id } },\n );\n onOpenChange(false);\n onCreated?.(data.createProject);\n // Navigate to board zone if no custom handler\n if (!onCreated && navigate) {\n navigate(`/${workspace.slug}/projects/${data.createProject.slug}`);\n }\n } catch (err: any) {\n setError(err.message || 'Failed to create project');\n } finally {\n setLoading(false);\n }\n };\n\n const types = [\n { value: 'KANBAN' as const, icon: <OrgBoard className=\"w-6 h-6\" />, title: 'Kanban', desc: 'Visual flow with boards' },\n { value: 'SCRUM' as const, icon: <OrgSprint className=\"w-6 h-6\" />, title: 'Scrum', desc: 'Sprints & epics' },\n ];\n\n return (\n <ResponsiveDialog\n open={open}\n onOpenChange={onOpenChange}\n title=\"Create Project\"\n description=\"Start with a name. Add details later in settings.\"\n contentClassName=\"max-w-md\"\n footer={\n <div className=\"flex gap-2 justify-end w-full\">\n <Button variant=\"ghost\" onClick={() => onOpenChange(false)} disabled={loading}>\n Cancel\n </Button>\n <Button onClick={handleSubmit} disabled={loading || !name.trim()}>\n {loading ? 'Creating…' : 'Create'}\n </Button>\n </div>\n }\n >\n <form onSubmit={handleSubmit} className=\"space-y-4\">\n {/* Name */}\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"project-name\">Project name</Label>\n <Input\n id=\"project-name\"\n placeholder=\"e.g. Marketing Website\"\n value={name}\n onChange={(e) => { setName(e.target.value); setError(''); }}\n maxLength={100}\n autoFocus\n />\n {error && <p className=\"text-xs text-rose-400\">{error}</p>}\n </div>\n\n {/* Type */}\n <div className=\"space-y-1.5\">\n <Label>Project type</Label>\n <div className=\"grid grid-cols-2 gap-2\">\n {types.map((t) => (\n <button\n key={t.value}\n type=\"button\"\n onClick={() => setType(t.value)}\n className={cn(\n 'p-3 rounded-xl border text-left transition-all',\n type === t.value\n ? 'bg-theme-subtle-10 border-primary ring-1 ring-primary/30'\n : 'bg-theme-card border-theme-subtle hover:border-theme-medium',\n )}\n >\n <span className=\"mb-1 block text-theme-secondary\">{t.icon}</span>\n <p className=\"text-sm font-medium text-theme\">{t.title}</p>\n <p className=\"text-xs text-theme-muted\">{t.desc}</p>\n </button>\n ))}\n </div>\n </div>\n </form>\n </ResponsiveDialog>\n );\n}\n","// ─────────────────────────────────────────────\n// CreateWorkspaceDialog — Self-contained workspace creation\n// ─────────────────────────────────────────────\n// Minimal form: just name. Slug auto-generated by backend.\n// Description, avatar, etc. added later in workspace settings.\n// Performs an optimistic add to the workspace list so the switcher\n// reflects the new workspace immediately, before the API round-trip.\n// ─────────────────────────────────────────────\n\n'use client';\n\nimport * as React from 'react';\nimport { ResponsiveDialog } from '../primitives/responsive-dialog';\nimport { Button } from '../primitives/button';\nimport { Input } from '../primitives/input';\nimport { Label } from '../primitives/label';\nimport {\n useOrganify,\n useOrganifyGql,\n useOrganifyNavigation,\n type OrganifyWorkspace,\n} from '../../providers/organify-provider';\n\n// ─── GraphQL ────────────────────────────────\n\nconst CREATE_WORKSPACE_MUTATION = `\n mutation CreateWorkspace($input: CreateWorkspaceInput!) {\n createWorkspace(input: $input) {\n id\n name\n slug\n description\n avatarUrl\n }\n }\n`;\n\n// ─── Types ──────────────────────────────────\n\nexport interface CreateWorkspaceDialogProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n /** Called after successful creation */\n onCreated?: (workspace: { id: string; name: string; slug: string }) => void;\n}\n\n// ─── Component ──────────────────────────────\n\nexport function CreateWorkspaceDialog({\n open,\n onOpenChange,\n onCreated,\n}: CreateWorkspaceDialogProps) {\n const gql = useOrganifyGql();\n const { navigate } = useOrganifyNavigation();\n const { workspaces, onWorkspacesChange, onWorkspaceChange } = useOrganify();\n\n const [name, setName] = React.useState('');\n const [error, setError] = React.useState('');\n const [loading, setLoading] = React.useState(false);\n\n React.useEffect(() => {\n if (open) { setName(''); setError(''); }\n }, [open]);\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n const trimmed = name.trim();\n if (!trimmed) { setError('Workspace name is required'); return; }\n if (trimmed.length > 80) { setError('Name must be 80 characters or less'); return; }\n\n setLoading(true);\n setError('');\n\n // ─── Optimistic update ───────────────────\n const optimisticId = `temp-${Date.now()}`;\n const optimisticSlug = trimmed\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-|-$/g, '');\n\n const optimisticWs: OrganifyWorkspace = {\n id: optimisticId,\n name: trimmed,\n slug: optimisticSlug,\n description: null,\n avatarUrl: null,\n plan: null,\n _count: { members: 1, teams: 0 },\n };\n\n const prevWorkspaces = [...workspaces];\n onWorkspacesChange?.([...workspaces, optimisticWs]);\n\n try {\n const data = await gql<{ createWorkspace: OrganifyWorkspace }>(\n 'workspaces',\n CREATE_WORKSPACE_MUTATION,\n { input: { name: trimmed } },\n );\n\n // Replace optimistic entry with real data\n const realWs: OrganifyWorkspace = {\n ...data.createWorkspace,\n plan: null,\n _count: { members: 1, teams: 0 },\n };\n onWorkspacesChange?.(\n [...prevWorkspaces, realWs],\n );\n onWorkspaceChange?.(realWs);\n\n onOpenChange(false);\n onCreated?.(realWs);\n if (!onCreated && navigate) {\n navigate(`/${realWs.slug}`);\n }\n } catch (err: any) {\n // Rollback optimistic entry\n onWorkspacesChange?.(prevWorkspaces);\n setError(err.message || 'Failed to create workspace');\n } finally {\n setLoading(false);\n }\n };\n\n return (\n <ResponsiveDialog\n open={open}\n onOpenChange={onOpenChange}\n title=\"Create Workspace\"\n description=\"Give your workspace a name. You can configure it further in settings.\"\n contentClassName=\"max-w-sm\"\n footer={\n <div className=\"flex gap-2 justify-end w-full\">\n <Button variant=\"ghost\" onClick={() => onOpenChange(false)} disabled={loading}>\n Cancel\n </Button>\n <Button onClick={handleSubmit} disabled={loading || !name.trim()}>\n {loading ? 'Creating…' : 'Create'}\n </Button>\n </div>\n }\n >\n <form onSubmit={handleSubmit} className=\"space-y-4\">\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"ws-name\">Workspace name</Label>\n <Input\n id=\"ws-name\"\n placeholder=\"e.g. Acme Inc.\"\n value={name}\n onChange={(e) => { setName(e.target.value); setError(''); }}\n maxLength={80}\n autoFocus\n />\n {error && <p className=\"text-xs text-rose-400\">{error}</p>}\n </div>\n </form>\n </ResponsiveDialog>\n );\n}\n\n","// ─────────────────────────────────────────────\n// CreateSprintDialog — Self-contained sprint creation\n// ─────────────────────────────────────────────\n// Minimal: name only. Goal + dates added via settings later.\n// Uses useOrganifyGql + useOrganifyProject for context.\n// ─────────────────────────────────────────────\n\n'use client';\n\nimport * as React from 'react';\nimport { ResponsiveDialog } from '../primitives/responsive-dialog';\nimport { Button } from '../primitives/button';\nimport { Input } from '../primitives/input';\nimport { Label } from '../primitives/label';\nimport { Textarea } from '../primitives/textarea';\nimport { useOrganifyGql, useOrganifyProject } from '../../providers/organify-provider';\n\n// ─── GraphQL ────────────────────────────────\n\nconst CREATE_SPRINT_MUTATION = `\n mutation CreateSprint($input: CreateSprintInput!) {\n createSprint(input: $input) {\n id\n name\n goal\n status\n startDate\n endDate\n }\n }\n`;\n\n// ─── Types ──────────────────────────────────\n\nexport interface CreateSprintDialogProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n /** Override projectId if not using OrganifyProvider context */\n projectId?: string;\n /** Called after successful creation */\n onCreated?: (sprint: { id: string; name: string }) => void;\n}\n\n// ─── Component ──────────────────────────────\n\nexport function CreateSprintDialog({\n open,\n onOpenChange,\n projectId: propProjectId,\n onCreated,\n}: CreateSprintDialogProps) {\n const gql = useOrganifyGql();\n const { project } = useOrganifyProject();\n const effectiveProjectId = propProjectId ?? project?.id;\n\n const [name, setName] = React.useState('');\n const [goal, setGoal] = React.useState('');\n const [startDate, setStartDate] = React.useState('');\n const [endDate, setEndDate] = React.useState('');\n const [error, setError] = React.useState('');\n const [loading, setLoading] = React.useState(false);\n\n React.useEffect(() => {\n if (open) { setName(''); setGoal(''); setStartDate(''); setEndDate(''); setError(''); }\n }, [open]);\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n const trimmed = name.trim();\n if (!trimmed) { setError('Sprint name is required'); return; }\n if (!effectiveProjectId) { setError('No project context'); return; }\n\n setLoading(true);\n setError('');\n try {\n const data = await gql<{ createSprint: { id: string; name: string } }>(\n 'projects',\n CREATE_SPRINT_MUTATION,\n {\n input: {\n name: trimmed,\n projectId: effectiveProjectId,\n ...(goal.trim() && { goal: goal.trim() }),\n ...(startDate && { startDate: new Date(startDate).toISOString() }),\n ...(endDate && { endDate: new Date(endDate).toISOString() }),\n },\n },\n );\n onOpenChange(false);\n onCreated?.(data.createSprint);\n } catch (err: any) {\n setError(err.message || 'Failed to create sprint');\n } finally {\n setLoading(false);\n }\n };\n\n return (\n <ResponsiveDialog\n open={open}\n onOpenChange={onOpenChange}\n title=\"Create Sprint\"\n description=\"Name your sprint. Goal and dates are optional.\"\n contentClassName=\"max-w-md\"\n footer={\n <div className=\"flex gap-2 justify-end w-full\">\n <Button variant=\"ghost\" onClick={() => onOpenChange(false)} disabled={loading}>\n Cancel\n </Button>\n <Button onClick={handleSubmit} disabled={loading || !name.trim()}>\n {loading ? 'Creating…' : 'Create Sprint'}\n </Button>\n </div>\n }\n >\n <form onSubmit={handleSubmit} className=\"space-y-4\">\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"sprint-name\">Name</Label>\n <Input\n id=\"sprint-name\"\n placeholder=\"Sprint 1\"\n value={name}\n onChange={(e) => { setName(e.target.value); setError(''); }}\n maxLength={100}\n autoFocus\n />\n {error && <p className=\"text-xs text-rose-400\">{error}</p>}\n </div>\n\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"sprint-goal\">Goal <span className=\"text-muted-foreground text-xs\">(optional)</span></Label>\n <Textarea\n id=\"sprint-goal\"\n placeholder=\"What should this sprint achieve?\"\n value={goal}\n onChange={(e) => setGoal(e.target.value)}\n rows={2}\n maxLength={500}\n />\n </div>\n\n <div className=\"grid grid-cols-2 gap-3\">\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"sprint-start\">Start date</Label>\n <Input id=\"sprint-start\" type=\"date\" value={startDate} onChange={(e) => setStartDate(e.target.value)} />\n </div>\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"sprint-end\">End date</Label>\n <Input id=\"sprint-end\" type=\"date\" value={endDate} onChange={(e) => setEndDate(e.target.value)} />\n </div>\n </div>\n </form>\n </ResponsiveDialog>\n );\n}\n","// ─────────────────────────────────────────────\n// CreateEpicDialog — Self-contained epic creation\n// ─────────────────────────────────────────────\n// Minimal: name + color. Description added later.\n// ─────────────────────────────────────────────\n\n'use client';\n\nimport * as React from 'react';\nimport { ResponsiveDialog } from '../primitives/responsive-dialog';\nimport { Button } from '../primitives/button';\nimport { Input } from '../primitives/input';\nimport { Label } from '../primitives/label';\nimport { Textarea } from '../primitives/textarea';\nimport { cn } from '../../lib/utils';\nimport { useOrganifyGql, useOrganifyProject } from '../../providers/organify-provider';\n\n// ─── GraphQL ────────────────────────────────\n\nconst CREATE_EPIC_MUTATION = `\n mutation CreateEpic($input: CreateEpicInput!) {\n createEpic(input: $input) {\n id\n name\n color\n status\n }\n }\n`;\n\n// ─── Types ──────────────────────────────────\n\nexport interface CreateEpicDialogProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n projectId?: string;\n onCreated?: (epic: { id: string; name: string }) => void;\n}\n\n// ─── Colors ─────────────────────────────────\n\nconst EPIC_COLORS = [\n '#7c3aed', '#8b5cf6', '#a855f7', '#d946ef',\n '#ec4899', '#f43f5e', '#ef4444', '#f97316',\n '#eab308', '#22c55e', '#14b8a6', '#06b6d4',\n '#3b82f6', '#6b7280',\n];\n\n// ─── Component ──────────────────────────────\n\nexport function CreateEpicDialog({\n open,\n onOpenChange,\n projectId: propProjectId,\n onCreated,\n}: CreateEpicDialogProps) {\n const gql = useOrganifyGql();\n const { project } = useOrganifyProject();\n const effectiveProjectId = propProjectId ?? project?.id;\n\n const [name, setName] = React.useState('');\n const [description, setDescription] = React.useState('');\n const [color, setColor] = React.useState(EPIC_COLORS[0]);\n const [error, setError] = React.useState('');\n const [loading, setLoading] = React.useState(false);\n\n React.useEffect(() => {\n if (open) {\n setName(''); setDescription(''); setColor(EPIC_COLORS[0]); setError('');\n }\n }, [open]);\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n const trimmed = name.trim();\n if (!trimmed) { setError('Epic name is required'); return; }\n if (!effectiveProjectId) { setError('No project context'); return; }\n\n setLoading(true);\n setError('');\n try {\n const data = await gql<{ createEpic: { id: string; name: string } }>(\n 'projects',\n CREATE_EPIC_MUTATION,\n {\n input: {\n name: trimmed,\n projectId: effectiveProjectId,\n color,\n ...(description.trim() && { description: description.trim() }),\n },\n },\n );\n onOpenChange(false);\n onCreated?.(data.createEpic);\n } catch (err: any) {\n setError(err.message || 'Failed to create epic');\n } finally {\n setLoading(false);\n }\n };\n\n return (\n <ResponsiveDialog\n open={open}\n onOpenChange={onOpenChange}\n title=\"Create Epic\"\n description=\"Group related tasks into an epic.\"\n contentClassName=\"max-w-md\"\n footer={\n <div className=\"flex gap-2 justify-end w-full\">\n <Button variant=\"ghost\" onClick={() => onOpenChange(false)} disabled={loading}>\n Cancel\n </Button>\n <Button onClick={handleSubmit} disabled={loading || !name.trim()}>\n {loading ? 'Creating…' : 'Create Epic'}\n </Button>\n </div>\n }\n >\n <form onSubmit={handleSubmit} className=\"space-y-4\">\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"epic-name\">Name</Label>\n <Input\n id=\"epic-name\"\n placeholder=\"e.g. User Authentication\"\n value={name}\n onChange={(e) => { setName(e.target.value); setError(''); }}\n maxLength={100}\n autoFocus\n />\n {error && <p className=\"text-xs text-rose-400\">{error}</p>}\n </div>\n\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"epic-desc\">Description <span className=\"text-muted-foreground text-xs\">(optional)</span></Label>\n <Textarea\n id=\"epic-desc\"\n placeholder=\"Brief description...\"\n value={description}\n onChange={(e) => setDescription(e.target.value)}\n rows={2}\n maxLength={500}\n />\n </div>\n\n <div className=\"space-y-1.5\">\n <Label>Color</Label>\n <div className=\"flex flex-wrap gap-2\">\n {EPIC_COLORS.map((c) => (\n <button\n key={c}\n type=\"button\"\n onClick={() => setColor(c)}\n className={cn(\n 'w-7 h-7 rounded-full border-2 transition-all',\n color === c ? 'border-white scale-110' : 'border-transparent hover:scale-105',\n )}\n style={{ background: c }}\n />\n ))}\n </div>\n </div>\n </form>\n </ResponsiveDialog>\n );\n}\n","// ─────────────────────────────────────────────\n// CreateTaskDialog — Self-contained task creation\n// ─────────────────────────────────────────────\n// Uses ResponsiveDialog (Dialog on desktop, Drawer on mobile).\n// Fetches via useOrganifyGql — no props needed for data.\n// Minimal form: title + priority. Description & details added later.\n// ─────────────────────────────────────────────\n\n'use client';\n\nimport * as React from 'react';\nimport { ResponsiveDialog } from '../primitives/responsive-dialog';\nimport { Button } from '../primitives/button';\nimport { Input } from '../primitives/input';\nimport { Label } from '../primitives/label';\nimport { cn } from '../../lib/utils';\nimport { useOrganifyGql, useOrganifyProject } from '../../providers/organify-provider';\n\n// ─── GraphQL ────────────────────────────────\n\nconst CREATE_TASK_MUTATION = `\n mutation CreateTask($input: CreateTaskInput!) {\n createTask(input: $input) {\n id\n title\n number\n priority\n }\n }\n`;\n\n// ─── Types ──────────────────────────────────\n\ntype Priority = 'NONE' | 'LOW' | 'MEDIUM' | 'HIGH' | 'CRITICAL';\n\nconst PRIORITIES: { value: Priority; label: string; color: string }[] = [\n { value: 'NONE', label: 'None', color: 'bg-theme-subtle-10 text-theme-muted border-theme-subtle' },\n { value: 'LOW', label: 'Low', color: 'bg-blue-500/10 text-blue-400 border-blue-500/20' },\n { value: 'MEDIUM', label: 'Medium', color: 'bg-amber-500/10 text-amber-400 border-amber-500/20' },\n { value: 'HIGH', label: 'High', color: 'bg-orange-500/10 text-orange-400 border-orange-500/20' },\n { value: 'CRITICAL', label: 'Critical', color: 'bg-rose-500/10 text-rose-400 border-rose-500/20' },\n];\n\nexport interface CreateTaskDialogProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n /** Override project context (otherwise uses OrganifyProvider) */\n projectId?: string;\n /** Called after successful creation with the new task */\n onCreated?: (task: { id: string; title: string; number: number }) => void;\n}\n\n// ─── Component ──────────────────────────────\n\nexport function CreateTaskDialog({\n open,\n onOpenChange,\n projectId: projectIdProp,\n onCreated,\n}: CreateTaskDialogProps) {\n const gql = useOrganifyGql();\n const projectCtx = useOrganifyProject();\n const projectId = projectIdProp ?? projectCtx?.project?.id;\n\n const [title, setTitle] = React.useState('');\n const [priority, setPriority] = React.useState<Priority>('NONE');\n const [error, setError] = React.useState('');\n const [loading, setLoading] = React.useState(false);\n\n // Reset form on open\n React.useEffect(() => {\n if (open) {\n setTitle('');\n setPriority('NONE');\n setError('');\n }\n }, [open]);\n\n const handleCreate = async () => {\n if (!title.trim()) {\n setError('Task title is required');\n return;\n }\n if (!projectId) {\n setError('No project context found');\n return;\n }\n\n setLoading(true);\n setError('');\n try {\n const result = await gql('projects', CREATE_TASK_MUTATION, {\n input: {\n projectId,\n title: title.trim(),\n priority,\n },\n });\n const task = result.createTask;\n onCreated?.(task);\n onOpenChange(false);\n } catch (err: any) {\n setError(err.message || 'Failed to create task');\n } finally {\n setLoading(false);\n }\n };\n\n return (\n <ResponsiveDialog\n open={open}\n onOpenChange={onOpenChange}\n title=\"Create Task\"\n description=\"Add a new task. You can fill in details later.\"\n >\n <div className=\"space-y-4 py-2\">\n {/* Title */}\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"task-title\">Title</Label>\n <Input\n id=\"task-title\"\n placeholder=\"What needs to be done?\"\n value={title}\n onChange={(e) => setTitle(e.target.value)}\n onKeyDown={(e) => e.key === 'Enter' && handleCreate()}\n autoFocus\n />\n </div>\n\n {/* Priority */}\n <div className=\"space-y-1.5\">\n <Label>Priority</Label>\n <div className=\"flex flex-wrap gap-2\">\n {PRIORITIES.map((p) => (\n <button\n key={p.value}\n type=\"button\"\n onClick={() => setPriority(p.value)}\n className={cn(\n 'px-3 py-1.5 rounded-xl text-sm font-medium border transition-all',\n p.color,\n priority === p.value\n ? 'ring-2 ring-brand-primary ring-offset-1 ring-offset-surface-primary'\n : 'opacity-60 hover:opacity-100',\n )}\n >\n {p.label}\n </button>\n ))}\n </div>\n </div>\n\n {error && (\n <p className=\"text-sm text-rose-400\">{error}</p>\n )}\n </div>\n\n {/* Footer */}\n <div className=\"flex justify-end gap-2 pt-4\">\n <Button variant=\"outline\" onClick={() => onOpenChange(false)}>\n Cancel\n </Button>\n <Button\n onClick={handleCreate}\n disabled={loading || !title.trim()}\n loading={loading}\n >\n Create Task\n </Button>\n </div>\n </ResponsiveDialog>\n );\n}\n","// ─────────────────────────────────────────────\n// InviteMemberDialog — Invite user to workspace\n// ─────────────────────────────────────────────\n// Minimal: email + role selection. One at a time.\n// ─────────────────────────────────────────────\n\n'use client';\n\nimport * as React from 'react';\nimport { ResponsiveDialog } from '../primitives/responsive-dialog';\nimport { Button } from '../primitives/button';\nimport { Input } from '../primitives/input';\nimport { Label } from '../primitives/label';\nimport { cn } from '../../lib/utils';\nimport { useOrganifyGql, useOrganifyWorkspace } from '../../providers/organify-provider';\nimport { OrgMail } from '../../icons';\n\n// ─── GraphQL ────────────────────────────────\n\nconst INVITE_MEMBER_MUTATION = `\n mutation InviteWorkspaceMember($slug: String!, $input: InviteMemberInput!) {\n inviteWorkspaceMember(slug: $slug, input: $input) {\n id\n email\n role\n status\n }\n }\n`;\n\n// ─── Types ──────────────────────────────────\n\nexport interface InviteMemberDialogProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n /** Workspace slug (overrides context) */\n workspaceSlug?: string;\n /** @deprecated use workspaceSlug */\n workspaceId?: string;\n onInvited?: (invite: { id: string; email: string }) => void;\n}\n\ntype Role = 'ADMIN' | 'MEMBER' | 'VIEWER';\n\n// ─── Component ──────────────────────────────\n\nexport function InviteMemberDialog({\n open,\n onOpenChange,\n workspaceSlug: propWorkspaceSlug,\n workspaceId: _deprecated,\n onInvited,\n}: InviteMemberDialogProps) {\n const gql = useOrganifyGql();\n const { workspace } = useOrganifyWorkspace();\n const effectiveSlug = propWorkspaceSlug ?? workspace?.slug;\n\n const [email, setEmail] = React.useState('');\n const [role, setRole] = React.useState<Role>('MEMBER');\n const [error, setError] = React.useState('');\n const [loading, setLoading] = React.useState(false);\n\n React.useEffect(() => {\n if (open) { setEmail(''); setRole('MEMBER'); setError(''); }\n }, [open]);\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n const trimmed = email.trim().toLowerCase();\n if (!trimmed) { setError('Email is required'); return; }\n if (!/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(trimmed)) { setError('Invalid email format'); return; }\n if (!effectiveSlug) { setError('No workspace context'); return; }\n\n setLoading(true);\n setError('');\n try {\n const data = await gql<{ inviteWorkspaceMember: { id: string; email: string } }>(\n 'workspaces',\n INVITE_MEMBER_MUTATION,\n { slug: effectiveSlug, input: { email: trimmed, role } },\n );\n onOpenChange(false);\n onInvited?.(data.inviteWorkspaceMember);\n } catch (err: any) {\n setError(err.message || 'Failed to send invite');\n } finally {\n setLoading(false);\n }\n };\n\n const roles: { value: Role; label: string; desc: string }[] = [\n { value: 'ADMIN', label: 'Admin', desc: 'Full access, manage members' },\n { value: 'MEMBER', label: 'Member', desc: 'Edit projects and tasks' },\n { value: 'VIEWER', label: 'Viewer', desc: 'Read-only access' },\n ];\n\n return (\n <ResponsiveDialog\n open={open}\n onOpenChange={onOpenChange}\n title=\"Invite Member\"\n description=\"Send an invitation to join this workspace.\"\n contentClassName=\"max-w-sm\"\n footer={\n <div className=\"flex gap-2 justify-end w-full\">\n <Button variant=\"ghost\" onClick={() => onOpenChange(false)} disabled={loading}>\n Cancel\n </Button>\n <Button onClick={handleSubmit} disabled={loading || !email.trim()}>\n <OrgMail className=\"w-4 h-4 mr-1.5\" />\n {loading ? 'Sending…' : 'Send Invite'}\n </Button>\n </div>\n }\n >\n <form onSubmit={handleSubmit} className=\"space-y-4\">\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"invite-email\">Email address</Label>\n <Input\n id=\"invite-email\"\n type=\"email\"\n placeholder=\"colleague@company.com\"\n value={email}\n onChange={(e) => { setEmail(e.target.value); setError(''); }}\n autoFocus\n />\n {error && <p className=\"text-xs text-rose-400\">{error}</p>}\n </div>\n\n <div className=\"space-y-1.5\">\n <Label>Role</Label>\n <div className=\"space-y-2\">\n {roles.map((r) => (\n <button\n key={r.value}\n type=\"button\"\n onClick={() => setRole(r.value)}\n className={cn(\n 'w-full flex items-center gap-3 p-2.5 rounded-xl border text-left transition-all',\n role === r.value\n ? 'bg-theme-subtle-10 border-primary ring-1 ring-primary/30'\n : 'bg-theme-card border-theme-subtle hover:border-theme-medium',\n )}\n >\n <div\n className={cn(\n 'w-3 h-3 rounded-full border-2',\n role === r.value ? 'bg-primary border-primary' : 'border-theme-subtle-20',\n )}\n />\n <div>\n <p className=\"text-sm font-medium text-theme\">{r.label}</p>\n <p className=\"text-xs text-theme-muted\">{r.desc}</p>\n </div>\n </button>\n ))}\n </div>\n </div>\n </form>\n </ResponsiveDialog>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/primitives/toggle.tsx","../src/components/primitives/use-resolved-user.ts","../src/components/primitives/user-avatar.tsx","../src/components/primitives/user-display-name.tsx","../src/components/primitives/progress.tsx","../src/components/feedback/toast.tsx","../src/components/feedback/empty-state.tsx","../src/components/feedback/task-detail-panel.tsx","../src/components/feedback/skeletons.tsx","../src/components/layout/glass-panel.tsx","../src/components/layout/dock.tsx","../src/components/layout/dock-sidebar.tsx","../src/components/layout/workspace-switcher.tsx","../src/components/layout/logo.tsx","../src/components/layout/geometric-icon.tsx","../src/components/data/metric-card.tsx","../src/components/data/stepper.tsx","../src/components/data/status-pill.tsx","../../../node_modules/date-fns/constants.js","../../../node_modules/date-fns/constructFrom.js","../../../node_modules/date-fns/toDate.js","../../../node_modules/date-fns/_lib/defaultOptions.js","../../../node_modules/date-fns/startOfWeek.js","../../../node_modules/date-fns/startOfISOWeek.js","../../../node_modules/date-fns/getISOWeekYear.js","../../../node_modules/date-fns/_lib/getTimezoneOffsetInMilliseconds.js","../../../node_modules/date-fns/_lib/normalizeDates.js","../../../node_modules/date-fns/startOfDay.js","../../../node_modules/date-fns/differenceInCalendarDays.js","../../../node_modules/date-fns/startOfISOWeekYear.js","../../../node_modules/date-fns/isDate.js","../../../node_modules/date-fns/isValid.js","../../../node_modules/date-fns/startOfYear.js","../../../node_modules/date-fns/locale/en-US/_lib/formatDistance.js","../../../node_modules/date-fns/locale/_lib/buildFormatLongFn.js","../../../node_modules/date-fns/locale/en-US/_lib/formatLong.js","../../../node_modules/date-fns/locale/en-US/_lib/formatRelative.js","../../../node_modules/date-fns/locale/_lib/buildLocalizeFn.js","../../../node_modules/date-fns/locale/en-US/_lib/localize.js","../../../node_modules/date-fns/locale/_lib/buildMatchFn.js","../../../node_modules/date-fns/locale/_lib/buildMatchPatternFn.js","../../../node_modules/date-fns/locale/en-US/_lib/match.js","../../../node_modules/date-fns/locale/en-US.js","../../../node_modules/date-fns/getDayOfYear.js","../../../node_modules/date-fns/getISOWeek.js","../../../node_modules/date-fns/getWeekYear.js","../../../node_modules/date-fns/startOfWeekYear.js","../../../node_modules/date-fns/getWeek.js","../../../node_modules/date-fns/_lib/addLeadingZeros.js","../../../node_modules/date-fns/_lib/format/lightFormatters.js","../../../node_modules/date-fns/_lib/format/formatters.js","../../../node_modules/date-fns/_lib/format/longFormatters.js","../../../node_modules/date-fns/_lib/protectedTokens.js","../../../node_modules/date-fns/format.js","../../../node_modules/date-fns/locale/pt-BR/_lib/formatDistance.js","../../../node_modules/date-fns/locale/pt-BR/_lib/formatLong.js","../../../node_modules/date-fns/locale/pt-BR/_lib/formatRelative.js","../../../node_modules/date-fns/locale/pt-BR/_lib/localize.js","../../../node_modules/date-fns/locale/pt-BR/_lib/match.js","../../../node_modules/date-fns/locale/pt-BR.js","../src/components/primitives/sheet.tsx","../src/components/comments/comment-item.tsx","../src/components/comments/primitives/comment-input.tsx","../src/components/comments/primitives/comment-skeleton.tsx","../src/components/comments/comment-thread.tsx","../src/components/data/primitives/label-picker.tsx","../src/components/data/primitives/assignee-picker.tsx","../src/components/data/task-detail-sheet.tsx","../src/components/data/task-card.tsx","../src/components/data/task-detail-dialog.tsx","../src/components/data/kanban-board.tsx","../src/components/data/plan-badge.tsx","../src/components/data/boards-switcher.tsx","../src/components/data/sprint-filter.tsx","../src/components/data/activity-trail.tsx","../src/components/primitives/card.tsx","../src/components/primitives/dropdown-menu.tsx","../src/components/primitives/checkbox.tsx","../src/components/primitives/switch.tsx","../src/components/primitives/collapsible.tsx","../src/components/primitives/command.tsx","../src/components/primitives/breadcrumb.tsx","../src/components/primitives/empty.tsx","../src/components/feedback/sonner.tsx","../src/hooks/use-current-user.ts","../src/components/forms/create-project-dialog.tsx","../src/components/forms/create-workspace-dialog.tsx","../src/components/forms/create-sprint-dialog.tsx","../src/components/forms/create-epic-dialog.tsx","../src/components/forms/create-task-dialog.tsx","../src/components/forms/invite-member-dialog.tsx"],"names":["React","jsxs","jsx","React2","React3","message","_","cva","React4","useMediaQuery","Fragment","defaultOptions","format","localize","formatLong","formatDistanceLocale","formatDistance","dateFormats","timeFormats","dateTimeFormats","formatRelativeLocale","formatRelative","eraValues","quarterValues","monthValues","dayValues","dayPeriodValues","formattingDayPeriodValues","ordinalNumber","matchOrdinalNumberPattern","parseOrdinalNumberPattern","matchEraPatterns","parseEraPatterns","matchQuarterPatterns","parseQuarterPatterns","matchMonthPatterns","parseMonthPatterns","matchDayPatterns","parseDayPatterns","matchDayPeriodPatterns","parseDayPeriodPatterns","match","getInitials","React6","React7","React8","React9","React10","Check","Plus","React11","X","TaskDetailSkeleton","React12","priorityColors","toDetailData","TaskCard","React13","GripVertical","React14","React15","statusConfig","React16","createPortal","React17","React18","SwitchPrimitives","CollapsibleTrigger","CollapsibleContent","CommandPrimitive","Search","ChevronRight","Sonner","React19","CREATE_WORKSPACE_MUTATION","React20","React21","React22","React23","React24"],"mappings":"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","file":"index.js","sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport * as SwitchPrimitive from '@radix-ui/react-switch';\nimport { cn } from '../../lib/utils';\n\n/**\n * Toggle / Switch — Glass toggle with organic styling\n *\n * Organic squircle container, primary accent when checked.\n */\n\nexport interface ToggleProps\n extends React.ComponentPropsWithoutRef<typeof SwitchPrimitive.Root> {\n label?: string;\n description?: string;\n}\n\nconst Toggle = React.forwardRef<\n React.ComponentRef<typeof SwitchPrimitive.Root>,\n ToggleProps\n>(({ className, label, description, ...props }, ref) => {\n const id = React.useId();\n\n if (label) {\n return (\n <div\n className={cn(\n 'flex items-center justify-between border border-primary/15 bg-white/[0.03] rounded-xl p-4 transition-all duration-[400ms] ease-[cubic-bezier(0.25,1,0.5,1)]',\n className,\n )}\n >\n <div>\n <label htmlFor={id} className=\"text-xs font-bold uppercase tracking-wide text-white\">\n {label}\n </label>\n {description && (\n <p className=\"mt-1 font-mono text-mono-xs text-white/40\">{description}</p>\n )}\n </div>\n <SwitchPrimitive.Root\n id={id}\n ref={ref}\n className=\"peer inline-flex h-5 w-10 shrink-0 cursor-pointer items-center rounded-full border border-primary/15 bg-black/40 transition-all duration-[400ms] ease-[cubic-bezier(0.25,1,0.5,1)] data-[state=checked]:border-primary-light data-[state=checked]:bg-primary/50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-light\"\n {...props}\n >\n <SwitchPrimitive.Thumb className=\"pointer-events-none block h-4 w-4 border border-primary/15 bg-white/20 transition-transform data-[state=checked]:translate-x-5 data-[state=checked]:border-white data-[state=checked]:bg-white data-[state=unchecked]:translate-x-0\" />\n </SwitchPrimitive.Root>\n </div>\n );\n }\n\n return (\n <SwitchPrimitive.Root\n ref={ref}\n className={cn(\n 'peer inline-flex h-5 w-10 shrink-0 cursor-pointer items-center rounded-full border border-primary/15 bg-black/40 transition-all duration-[400ms] ease-[cubic-bezier(0.25,1,0.5,1)] data-[state=checked]:border-primary-light data-[state=checked]:bg-primary/50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-light',\n className,\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb className=\"pointer-events-none block h-4 w-4 border border-primary/15 bg-white/20 transition-transform data-[state=checked]:translate-x-5 data-[state=checked]:border-white data-[state=checked]:bg-white data-[state=unchecked]:translate-x-0\" />\n </SwitchPrimitive.Root>\n );\n});\nToggle.displayName = 'Toggle';\n\nexport { Toggle };\n","// ─────────────────────────────────────────────\n// User Resolver — client-side user lookup\n// ─────────────────────────────────────────────\n// Module-level cache + request deduplication\n// so `<UserAvatar userId=\"42\" />` used 20 times\n// on the same page only fires ONE fetch.\n//\n// Usage:\n// const user = useResolvedUser('123');\n// ─────────────────────────────────────────────\n\n'use client';\n\nimport { useState, useEffect } from 'react';\nimport { useOrganifyApi } from '../../providers/organify-provider';\n\nexport interface ResolvedUser {\n id: string | number;\n name: string;\n avatarUrl?: string | null;\n}\n\n// ─── Module-level shared cache (survives re-renders) ──\n\nconst _cache = new Map<string, ResolvedUser | null>();\nconst _inflight = new Map<string, Promise<ResolvedUser | null>>();\n\n// Pending IDs to batch in the next microtask tick\nconst _pendingBatch = new Set<string>();\nlet _batchTimer: ReturnType<typeof setTimeout> | null = null;\nconst _batchResolvers = new Map<string, Array<(u: ResolvedUser | null) => void>>();\n\nfunction _flushBatch(gatewayUrl: string) {\n const ids = Array.from(_pendingBatch);\n _pendingBatch.clear();\n _batchTimer = null;\n\n if (ids.length === 0) return;\n\n const p = fetch(`${gatewayUrl}/api/users/profiles/batch`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n credentials: 'include',\n body: JSON.stringify({ ids }),\n })\n .then((r) => (r.ok ? r.json() : []))\n .catch(() => [])\n .then((results: ResolvedUser[]) => {\n // Build a quick lookup\n const byId = new Map<string, ResolvedUser>();\n for (const u of results) {\n byId.set(String(u.id), u);\n }\n // Resolve each pending callback\n for (const id of ids) {\n const user = byId.get(id) ?? null;\n _cache.set(id, user);\n _inflight.delete(id);\n const resolvers = _batchResolvers.get(id) ?? [];\n _batchResolvers.delete(id);\n for (const resolve of resolvers) resolve(user);\n }\n });\n\n // Mark all as inflight\n for (const id of ids) {\n if (!_batchResolvers.has(id)) _batchResolvers.set(id, []);\n _inflight.set(id, p.then(() => _cache.get(id) ?? null));\n }\n}\n\n/**\n * Resolves a userId to its { name, avatarUrl } snapshot.\n * Batches concurrent requests within a single event-loop tick.\n */\nexport function resolveUser(\n userId: string,\n gatewayUrl: string,\n): Promise<ResolvedUser | null> {\n // Cache hit\n if (_cache.has(userId)) {\n return Promise.resolve(_cache.get(userId)!);\n }\n\n // Already inflight\n if (_inflight.has(userId)) {\n return _inflight.get(userId)!;\n }\n\n // Queue for batch\n _pendingBatch.add(userId);\n if (!_batchResolvers.has(userId)) _batchResolvers.set(userId, []);\n\n // Schedule the batch flush on next tick\n if (!_batchTimer) {\n _batchTimer = setTimeout(() => _flushBatch(gatewayUrl), 0);\n }\n\n // Return a promise that resolves when the batch completes\n const p = new Promise<ResolvedUser | null>((resolve) => {\n _batchResolvers.get(userId)!.push(resolve);\n });\n\n _inflight.set(userId, p);\n return p;\n}\n\n/** Invalidate a single entry (e.g. after a profile update) */\nexport function invalidateUserCache(userId: string) {\n _cache.delete(userId);\n _inflight.delete(userId);\n}\n\n/** Seed the cache with already-known users (e.g. from workspace members query) */\nexport function seedUserCache(users: ResolvedUser[]) {\n for (const u of users) {\n _cache.set(String(u.id), u);\n }\n}\n\n// ─── React hook ──────────────────────────────\n\n/**\n * React hook that resolves a userId to a user snapshot.\n * Returns `undefined` while loading, `null` if not found.\n *\n * @example\n * const user = useResolvedUser('42');\n * // user?.name, user?.avatarUrl\n */\nexport function useResolvedUser(\n userId: string | number | undefined | null,\n): ResolvedUser | null | undefined {\n const api = useOrganifyApi();\n const key = userId != null ? String(userId) : undefined;\n\n // Initialise from cache synchronously so we avoid a flash of \"loading\"\n const [user, setUser] = useState<ResolvedUser | null | undefined>(() => {\n if (!key) return undefined;\n return _cache.has(key) ? _cache.get(key)! : undefined;\n });\n\n useEffect(() => {\n if (!key || !api.gatewayUrl) return;\n\n let cancelled = false;\n\n // Already cached — sync update (handles stale state from SSR)\n if (_cache.has(key)) {\n setUser(_cache.get(key) ?? null);\n return;\n }\n\n resolveUser(key, api.gatewayUrl).then((u) => {\n if (!cancelled) setUser(u);\n });\n\n return () => {\n cancelled = true;\n };\n }, [key, api.gatewayUrl]);\n\n return user;\n}\n","'use client';\n\nimport * as React from 'react';\nimport { Avatar, AvatarImage, AvatarFallback, type AvatarProps } from './avatar';\nimport {\n Tooltip,\n TooltipTrigger,\n TooltipContent,\n TooltipProvider,\n} from './tooltip';\nimport { cn } from '../../lib/utils';\nimport { useResolvedUser } from './use-resolved-user';\n\n// ─── Helpers ────────────────────────────────\n\nfunction getInitials(name: string): string {\n return name\n .split(/\\s+/)\n .filter(Boolean)\n .slice(0, 2)\n .map((w) => w[0].toUpperCase())\n .join('');\n}\n\nfunction nameToGradient(name: string): string {\n let hash = 0;\n for (let i = 0; i < name.length; i++) {\n hash = name.charCodeAt(i) + ((hash << 5) - hash);\n }\n const gradients = [\n 'from-violet-500 to-purple-600',\n 'from-blue-500 to-cyan-500',\n 'from-emerald-500 to-teal-500',\n 'from-orange-500 to-amber-500',\n 'from-rose-500 to-pink-500',\n 'from-indigo-500 to-blue-600',\n 'from-fuchsia-500 to-purple-500',\n 'from-teal-500 to-green-500',\n ];\n return gradients[Math.abs(hash) % gradients.length];\n}\n\n// ─── Types ──────────────────────────────────\n\nexport interface UserAvatarProps extends Omit<AvatarProps, 'gradient'> {\n /**\n * User ID — when provided (and `name` is absent), the component\n * self-fetches the user profile via the gateway.\n * Multiple avatars sharing the same userId are batched into one request.\n */\n userId?: string | number;\n /** User display name — used for initials fallback. Takes priority over userId. */\n name?: string;\n /** Image URL (optional) */\n src?: string | null;\n /** User email (shown on hover) */\n email?: string;\n /** User role (shown on hover) */\n role?: string;\n /** Whether to show hover card with user info */\n showHoverInfo?: boolean;\n /** Custom fallback content (overrides initials) */\n fallback?: React.ReactNode;\n /** Extra info lines for hover card */\n extraInfo?: { label: string; value: string }[];\n /** Click handler */\n onClick?: () => void;\n}\n\n// ─── Component ──────────────────────────────\n\nfunction UserAvatar({\n userId,\n name: nameProp,\n src: srcProp,\n email,\n role,\n showHoverInfo = true,\n fallback,\n extraInfo,\n onClick,\n className,\n size = 'default',\n shape = 'circle',\n status,\n ...props\n}: UserAvatarProps) {\n // Self-fetch mode: only activate when userId present and name not provided\n const resolved = useResolvedUser(!nameProp && userId != null ? userId : null);\n\n const name = nameProp ?? resolved?.name ?? '…';\n const src = srcProp ?? resolved?.avatarUrl ?? undefined;\n const isLoading = !nameProp && userId != null && resolved === undefined;\n\n const initials = getInitials(name);\n const gradient = nameToGradient(name || 'unknown');\n\n const avatarElement = (\n <Avatar\n size={size}\n shape={shape}\n status={status}\n gradient={gradient}\n className={cn(\n onClick && 'cursor-pointer',\n isLoading && 'animate-pulse opacity-60',\n className,\n )}\n onClick={onClick}\n {...props}\n >\n {src ? (\n <AvatarImage src={src} alt={name} />\n ) : null}\n <AvatarFallback\n className={cn(\n 'bg-gradient-to-br text-white font-semibold',\n gradient,\n size === 'sm' && 'text-xs',\n size === 'default' && 'text-sm',\n size === 'lg' && 'text-lg',\n size === 'xl' && 'text-xl',\n )}\n >\n {fallback ?? initials}\n </AvatarFallback>\n </Avatar>\n );\n\n if (!showHoverInfo) return avatarElement;\n\n return (\n <TooltipProvider delayDuration={300}>\n <Tooltip>\n <TooltipTrigger asChild>{avatarElement}</TooltipTrigger>\n <TooltipContent\n side=\"top\"\n className={cn(\n 'flex items-center gap-3 rounded-xl border border-theme-subtle',\n 'bg-card-surface/95 px-4 py-3 shadow-glass-xl backdrop-blur-2xl',\n 'max-w-xs',\n )}\n >\n <Avatar size=\"sm\" shape={shape} gradient={gradient}>\n {src ? <AvatarImage src={src} alt={name} /> : null}\n <AvatarFallback className={cn('bg-gradient-to-br text-white text-xs font-semibold', gradient)}>\n {initials}\n </AvatarFallback>\n </Avatar>\n <div className=\"flex flex-col gap-0.5 min-w-0\">\n <span className=\"text-sm font-semibold text-white truncate\">\n {name}\n </span>\n {email && (\n <span className=\"text-xs text-theme-muted truncate\">{email}</span>\n )}\n {role && (\n <span className=\"text-xs text-primary-light/80 capitalize\">\n {role.toLowerCase()}\n </span>\n )}\n {extraInfo?.map((info) => (\n <span key={info.label} className=\"text-xs text-theme-muted\">\n {info.label}: {info.value}\n </span>\n ))}\n </div>\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n}\n\nUserAvatar.displayName = 'UserAvatar';\n\nexport { UserAvatar, getInitials, nameToGradient };\n","'use client';\n\nimport * as React from 'react';\nimport { useResolvedUser } from './use-resolved-user';\nimport { cn } from '../../lib/utils';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// UserDisplayName\n// Renders a user's display name as text.\n// When `userId` is provided and `name` is absent, self-fetches via the\n// batched gateway endpoint (same session-cookie auth, no extra token needed).\n// Multiple instances with the same userId are coalesced into a single request.\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport interface UserDisplayNameProps {\n /** User ID — used for self-fetch when `name` is not provided. */\n userId?: string | number;\n /** Display name override — when present, skips the fetch entirely. */\n name?: string;\n /** Fallback text shown while loading. Defaults to '…' */\n loadingFallback?: string;\n /** Extra CSS classes applied to the wrapping <span>. */\n className?: string;\n /** Inline style overrides. */\n style?: React.CSSProperties;\n}\n\nexport function UserDisplayName({\n userId,\n name: nameProp,\n loadingFallback = '…',\n className,\n style,\n}: UserDisplayNameProps) {\n // Activate self-fetch only when userId is provided and name is not already known\n const resolved = useResolvedUser(!nameProp && userId != null ? userId : null);\n\n const isLoading = !nameProp && userId != null && resolved === undefined;\n const displayName = nameProp ?? resolved?.name ?? (isLoading ? loadingFallback : '?');\n\n return (\n <span\n className={cn(isLoading && 'animate-pulse opacity-60', className)}\n style={style}\n title={displayName}\n >\n {displayName}\n </span>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport * as ProgressPrimitive from '@radix-ui/react-progress';\nimport { cn } from '../../lib/utils';\n\n/**\n * Progress — Neon glow progress bar\n *\n * From the design system: thin bar with primary fill + trailing glow + end marker.\n */\n\nexport interface ProgressProps\n extends React.ComponentPropsWithoutRef<typeof ProgressPrimitive.Root> {\n /** Show percentage label */\n showLabel?: boolean;\n /** Label text above bar */\n label?: string;\n /** Visual variant */\n variant?: 'default' | 'cream';\n}\n\nconst Progress = React.forwardRef<\n React.ComponentRef<typeof ProgressPrimitive.Root>,\n ProgressProps\n>(({ className, value, showLabel, label, variant = 'default', ...props }, ref) => (\n <div className=\"space-y-2\">\n {(label || showLabel) && (\n <div className=\"flex items-end justify-between\">\n {label && (\n <span className=\"text-label uppercase tracking-widest text-org-text-muted\">{label}</span>\n )}\n {showLabel && (\n <span className=\"font-mono text-lg text-primary-light\">\n {value}\n <span className=\"text-xs text-org-text-muted\">%</span>\n </span>\n )}\n </div>\n )}\n <ProgressPrimitive.Root\n ref={ref}\n className={cn(\n 'relative h-1 w-full overflow-hidden',\n variant === 'default' ? 'bg-white/[0.05] rounded-full' : 'bg-black/5 rounded-full',\n className,\n )}\n {...props}\n >\n <ProgressPrimitive.Indicator\n className={cn(\n 'h-full transition-all duration-[400ms] ease-[cubic-bezier(0.25,1,0.5,1)]',\n variant === 'default'\n ? 'bg-primary-light shadow-[0_0_15px_rgba(99,102,241,0.8)]'\n : 'bg-primary rounded-full opacity-80',\n )}\n style={{ width: `${value || 0}%` }}\n >\n {variant === 'default' && (\n <div className=\"absolute bottom-0 right-0 top-0 w-1 bg-white\" />\n )}\n </ProgressPrimitive.Indicator>\n </ProgressPrimitive.Root>\n </div>\n));\nProgress.displayName = 'Progress';\n\nexport { Progress };\n","import * as React from 'react';\nimport { X, CheckCircle2, AlertTriangle, AlertCircle, Info, Sparkles } from 'lucide-react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../lib/utils';\n\n/**\n * Toast — Dark Glass Toast with circular icon\n *\n * Design language matching modern dark toast style:\n * - Dark background with rounded corners\n * - Circular icon on left with color-coded background\n * - Clean typography with title and description\n * - Close button on top right\n */\n\nconst toastVariants = cva(\n 'relative flex w-full min-w-[380px] max-w-md 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 default: 'border-gray-200 dark:border-gray-700',\n info: 'border-blue-200 dark:border-blue-800/50',\n success: 'border-emerald-200 dark:border-emerald-800/50',\n warning: 'border-amber-200 dark:border-amber-800/50',\n error: 'border-rose-200 dark:border-rose-800/50',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n },\n);\n\nconst toastIconVariants = cva(\n 'flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-full',\n {\n variants: {\n variant: {\n default: 'bg-indigo-100 text-indigo-600 dark:bg-indigo-600/20 dark:text-indigo-400',\n info: 'bg-blue-100 text-blue-600 dark:bg-blue-600/20 dark:text-blue-400',\n success: 'bg-emerald-100 text-emerald-600 dark:bg-emerald-600/20 dark:text-emerald-400',\n warning: 'bg-amber-100 text-amber-600 dark:bg-amber-600/20 dark:text-amber-400',\n error: 'bg-rose-100 text-rose-600 dark:bg-rose-600/20 dark:text-rose-400',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n },\n);\n\nconst defaultIcons: Record<string, React.ReactNode> = {\n default: <Sparkles className=\"h-5 w-5\" />,\n info: <Info className=\"h-5 w-5\" />,\n success: <CheckCircle2 className=\"h-5 w-5\" />,\n warning: <AlertTriangle className=\"h-5 w-5\" />,\n error: <AlertCircle className=\"h-5 w-5\" />,\n};\n\nexport interface ToastProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof toastVariants> {\n /** Close handler */\n onClose?: () => void;\n /** Custom icon element (overrides default variant icon) */\n icon?: React.ReactNode;\n /** Title text */\n title?: string;\n /** Description text */\n description?: string;\n /** Action button */\n action?: {\n label: string;\n onClick: () => void;\n };\n}\n\nfunction Toast({\n className,\n variant,\n onClose,\n icon,\n title,\n description,\n action,\n children,\n ...props\n}: ToastProps) {\n const v = variant ?? 'default';\n const displayIcon = icon ?? defaultIcons[v];\n\n return (\n <div className=\"group relative\" role=\"status\" aria-live=\"polite\">\n <div className={cn(toastVariants({ variant }), className)} {...props}>\n {/* Icon */}\n <div className={cn(toastIconVariants({ variant }))}>\n {displayIcon}\n </div>\n\n {/* Content */}\n <div className=\"flex-1 min-w-0\">\n {title && (\n <p className=\"text-sm font-semibold text-gray-900 dark:text-white mb-1 leading-tight\">{title}</p>\n )}\n {description && (\n <p className=\"text-sm text-gray-500 dark:text-gray-400 leading-relaxed\">{description}</p>\n )}\n {children}\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=\"Dismiss\"\n >\n <X className=\"h-4 w-4\" />\n </button>\n )}\n </div>\n </div>\n );\n}\n\n/**\n * ToastProgress — Progress bar inside a toast\n */\nexport interface ToastProgressProps extends React.HTMLAttributes<HTMLDivElement> {\n value: number;\n label?: string;\n}\n\nfunction ToastProgress({ value, label, className, ...props }: ToastProgressProps) {\n return (\n <div className={cn('flex-1 mt-2', className)} {...props}>\n {label && (\n <div className=\"mb-1.5 flex items-center justify-between\">\n <p className=\"text-xs font-medium text-gray-900 dark:text-white\">{label}</p>\n <span className=\"text-xs font-bold text-gray-500 dark:text-gray-400\">{value}%</span>\n </div>\n )}\n <div className=\"h-1 w-full overflow-hidden bg-gray-200 dark:bg-gray-700 rounded-full\">\n <div\n className=\"h-full bg-gradient-to-r from-primary to-primary-light transition-all duration-300\"\n style={{ width: `${value}%` }}\n />\n </div>\n </div>\n );\n}\n\nexport { Toast, ToastProgress, toastVariants };\n","import * as React from 'react';\nimport { cn } from '../../lib/utils';\nimport { OrgDiamond } from '../../icons';\n\n/**\n * EmptyState — Human-Centric Empty State\n *\n * From the Feedback HTML:\n * - Glass panel with gradient overlay\n * - Animated orb with floating colored dots\n * - Central icon inside bordered circle\n * - Sliding CTA button\n */\n\nexport interface EmptyStateProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Icon to display in the center orb */\n icon?: React.ReactNode;\n /** Title text */\n title: string;\n /** Description text */\n description?: string;\n /** CTA button label */\n actionLabel?: string;\n /** CTA button handler */\n onAction?: () => void;\n}\n\nfunction EmptyState({\n className,\n icon,\n title,\n description,\n actionLabel,\n onAction,\n ...props\n}: EmptyStateProps) {\n return (\n <div\n className={cn(\n 'glass-panel group relative flex flex-col items-center overflow-hidden p-10 text-center',\n className,\n )}\n {...props}\n >\n {/* Gradient overlay */}\n <div className=\"pointer-events-none absolute left-0 right-0 top-0 h-32 bg-gradient-to-b from-primary/10 to-transparent\" />\n\n {/* Animated orb */}\n <div className=\"relative mb-6 h-32 w-32\">\n {/* Outer spinning ring */}\n <div className=\"absolute inset-0 motion-safe:animate-[spin_10s_linear_infinite] rounded-full border border-theme-subtle\" />\n {/* Inner glow */}\n <div className=\"absolute inset-4 rounded-full bg-gradient-to-tr from-primary/30 to-purple-500/10 blur-xl transition-all duration-700 group-hover:blur-2xl\" />\n {/* Center icon container */}\n <div className=\"relative flex h-full w-full items-center justify-center\">\n <div className=\"z-10 flex h-20 w-20 items-center justify-center rounded-full border border-theme-subtle bg-theme-surface shadow-2xl\">\n {icon || (\n <OrgDiamond className=\"w-10 h-10 text-slate-200\" />\n )}\n </div>\n {/* Floating accent dots */}\n <div className=\"absolute right-4 top-0 h-3 w-3 rounded-full bg-emerald-400 blur-[1px]\" />\n <div className=\"absolute bottom-2 left-6 h-2 w-2 rounded-full bg-purple-400 blur-[1px]\" />\n </div>\n </div>\n\n {/* Text */}\n <h4 className=\"text-xl font-medium tracking-tight text-theme\">{title}</h4>\n {description && (\n <p className=\"mt-3 max-w-[260px] text-sm leading-relaxed text-slate-400\">\n {description}\n </p>\n )}\n\n {/* CTA button with slide animation */}\n {actionLabel && onAction && (\n <button\n onClick={onAction}\n className=\"group/btn relative mt-8 inline-flex items-center justify-center overflow-hidden rounded-full border border-theme-subtle-20 px-6 py-2.5 font-medium text-theme shadow-md transition duration-[400ms] ease-[cubic-bezier(0.25,1,0.5,1)]\"\n >\n <span className=\"absolute inset-0 flex h-full w-full -translate-x-full items-center justify-center bg-theme-subtle-10 text-theme transition duration-[400ms] ease-[cubic-bezier(0.25,1,0.5,1)] group-hover/btn:translate-x-0\">\n →\n </span>\n <span className=\"absolute flex h-full w-full items-center justify-center text-theme transition-all duration-[400ms] ease-[cubic-bezier(0.25,1,0.5,1)] group-hover/btn:translate-x-full\">\n {actionLabel}\n </span>\n <span className=\"invisible relative\">{actionLabel}</span>\n </button>\n )}\n </div>\n );\n}\n\nexport { EmptyState };\n","'use client';\n\nimport * as React from 'react';\nimport { cn } from '../../lib/utils';\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogDescription,\n} from '../primitives/dialog';\nimport {\n Drawer,\n DrawerContent,\n DrawerHeader,\n DrawerTitle,\n DrawerDescription,\n} from '../primitives/drawer';\nimport { Skeleton } from '../primitives/skeleton';\nimport { OrgWarning, OrgDiamond } from '../../icons';\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 TaskDetailPanelProps {\n /** Whether the panel is open */\n open: boolean;\n /** Callback when open state changes */\n onOpenChange: (open: boolean) => void;\n /** Task title (shown in header) */\n title?: string;\n /** Task subtitle / number */\n subtitle?: string;\n /** Panel content */\n children: React.ReactNode;\n /** Desktop breakpoint query */\n desktopQuery?: string;\n /** Loading state — shows skeleton content instead of children */\n loading?: boolean;\n /** Error state — shows error fallback instead of children */\n error?: string | null;\n /** Empty state — shows empty fallback instead of children */\n empty?: boolean;\n /** Custom loading skeleton (default: built-in skeleton) */\n loadingSkeleton?: React.ReactNode;\n /** Custom empty state content */\n emptyContent?: React.ReactNode;\n /** Retry callback for error state */\n onRetry?: () => void;\n}\n\n// ─── Component ──────────────────────────────\n\nfunction TaskDetailPanel({\n open,\n onOpenChange,\n title,\n subtitle,\n children,\n desktopQuery = '(min-width: 768px)',\n loading = false,\n error = null,\n empty = false,\n loadingSkeleton,\n emptyContent,\n onRetry,\n}: TaskDetailPanelProps) {\n const isDesktop = useMediaQuery(desktopQuery);\n\n // ─── Resolve content based on state ──────\n const resolvedContent = loading ? (\n loadingSkeleton ?? <TaskDetailSkeleton />\n ) : error ? (\n <TaskDetailError message={error} onRetry={onRetry} />\n ) : empty ? (\n emptyContent ?? <TaskDetailEmpty />\n ) : (\n children\n );\n\n if (isDesktop) {\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent\n className={cn(\n 'max-w-2xl max-h-[85vh] overflow-y-auto',\n 'border border-primary/25 bg-white/[0.03] backdrop-blur-[40px]',\n 'shadow-[0_24px_80px_-15px_rgba(0,0,0,0.5)] rounded-2xl',\n )}\n >\n {(title || subtitle) && (\n <DialogHeader>\n {title && <DialogTitle className=\"text-lg\">{title}</DialogTitle>}\n {subtitle && (\n <DialogDescription className=\"text-muted-foreground font-mono text-sm\">\n {subtitle}\n </DialogDescription>\n )}\n </DialogHeader>\n )}\n {resolvedContent}\n </DialogContent>\n </Dialog>\n );\n }\n\n return (\n <Drawer open={open} onOpenChange={onOpenChange}>\n <DrawerContent\n className={cn(\n 'max-h-[90vh]',\n 'border-t border-primary/25 bg-white/[0.03] backdrop-blur-[40px]',\n )}\n >\n {(title || subtitle) && (\n <DrawerHeader className=\"text-left\">\n {title && <DrawerTitle className=\"text-lg\">{title}</DrawerTitle>}\n {subtitle && (\n <DrawerDescription className=\"text-muted-foreground font-mono text-sm\">\n {subtitle}\n </DrawerDescription>\n )}\n </DrawerHeader>\n )}\n <div className=\"overflow-y-auto px-4 pb-6\">{resolvedContent}</div>\n </DrawerContent>\n </Drawer>\n );\n}\n\nTaskDetailPanel.displayName = 'TaskDetailPanel';\n\n// ─── Internal: Skeleton ─────────────────────\n\nfunction TaskDetailSkeleton() {\n return (\n <div className=\"space-y-4 animate-pulse py-2\">\n <div className=\"flex items-center gap-3\">\n <Skeleton className=\"w-5 h-5\" variant=\"rounded\" />\n <Skeleton className=\"h-5 w-48\" />\n </div>\n <Skeleton className=\"h-4 w-full\" />\n <Skeleton className=\"h-4 w-3/4\" />\n <div className=\"pt-2 space-y-3\">\n {[1, 2, 3].map((i) => (\n <div key={i} className=\"flex items-center gap-3\">\n <Skeleton className=\"w-20 h-3\" />\n <Skeleton className=\"flex-1 h-3\" />\n </div>\n ))}\n </div>\n <Skeleton className=\"h-24 w-full mt-4\" variant=\"rounded\" />\n </div>\n );\n}\n\n// ─── Internal: Error ────────────────────────\n\nfunction TaskDetailError({ message, onRetry }: { message: string; onRetry?: () => void }) {\n return (\n <div className=\"flex flex-col items-center justify-center py-10 text-center\">\n <OrgWarning className=\"w-10 h-10 text-rose-400/60 mb-3\" />\n <p className=\"text-sm text-theme-secondary mb-1\">Não foi possível carregar</p>\n <p className=\"text-xs text-theme-muted mb-4 max-w-xs\">{message}</p>\n {onRetry && (\n <button\n onClick={onRetry}\n className=\"text-xs font-medium text-primary-light hover:text-primary transition-colors\"\n >\n Tentar novamente\n </button>\n )}\n </div>\n );\n}\n\n// ─── Internal: Empty ────────────────────────\n\nfunction TaskDetailEmpty() {\n return (\n <div className=\"flex flex-col items-center justify-center py-10 text-center\">\n <OrgDiamond className=\"w-10 h-10 text-theme-muted mb-3\" />\n <p className=\"text-sm text-theme-muted\">Nenhum detalhe disponível</p>\n </div>\n );\n}\n\nexport { TaskDetailPanel, useMediaQuery };\n","// ─────────────────────────────────────────────\n// Domain Skeleton Screens\n// Section 16.2: NO spinners for page loading.\n// Use skeleton shimmer that matches the final layout.\n// ─────────────────────────────────────────────\n\n'use client';\n\nimport * as React from 'react';\nimport { cn } from '../../lib/utils';\nimport { Skeleton } from '../primitives/skeleton';\n\n// ─── Board Skeleton (Kanban columns) ────────\n\nexport function BoardSkeleton({ className, columns = 4 }: { className?: string; columns?: number }) {\n return (\n <div className={cn('flex gap-4 p-4 overflow-x-auto', className)}>\n {Array.from({ length: columns }).map((_, colIdx) => (\n <div key={colIdx} className=\"flex flex-col w-[280px] shrink-0 space-y-3\">\n {/* Column header */}\n <div className=\"flex items-center gap-2 px-2\">\n <Skeleton className=\"h-3 w-3 rounded-full\" />\n <Skeleton className=\"h-4 w-20\" />\n <Skeleton className=\"h-4 w-6 ml-auto rounded-full\" />\n </div>\n {/* Cards */}\n {Array.from({ length: 2 + Math.floor(Math.random() * 3) }).map((_, cardIdx) => (\n <div\n key={cardIdx}\n className=\"p-4 rounded-xl border border-theme-subtle bg-theme-subtle space-y-3\"\n >\n <Skeleton className=\"h-4 w-3/4\" />\n <Skeleton className=\"h-3 w-full\" />\n <div className=\"flex items-center justify-between pt-1\">\n <div className=\"flex items-center gap-1\">\n <Skeleton className=\"h-3 w-12 rounded-full\" />\n <Skeleton className=\"h-3 w-14 rounded-full\" />\n </div>\n <Skeleton variant=\"circular\" className=\"h-6 w-6\" />\n </div>\n </div>\n ))}\n </div>\n ))}\n </div>\n );\n}\n\n// ─── Task List Skeleton (List/Table view) ───\n\nexport function TaskListSkeleton({ className, rows = 6 }: { className?: string; rows?: number }) {\n return (\n <div className={cn('space-y-1', className)}>\n {/* Header row */}\n <div className=\"flex items-center gap-4 px-4 py-2 border-b border-theme-subtle\">\n <Skeleton className=\"h-4 w-4\" />\n <Skeleton className=\"h-3 w-32\" />\n <Skeleton className=\"h-3 w-16 ml-auto\" />\n <Skeleton className=\"h-3 w-16\" />\n <Skeleton className=\"h-3 w-20\" />\n </div>\n {/* Rows */}\n {Array.from({ length: rows }).map((_, i) => (\n <div key={i} className=\"flex items-center gap-4 px-4 py-3 border-b border-theme-subtle\">\n <Skeleton className=\"h-4 w-4 rounded\" />\n <div className=\"flex-1 space-y-1.5\">\n <Skeleton className=\"h-3.5 w-48\" />\n <Skeleton className=\"h-2.5 w-24 opacity-60\" />\n </div>\n <Skeleton className=\"h-5 w-16 rounded-full\" />\n <Skeleton className=\"h-5 w-14 rounded-full\" />\n <Skeleton variant=\"circular\" className=\"h-6 w-6\" />\n </div>\n ))}\n </div>\n );\n}\n\n// ─── Project List Skeleton ──────────────────\n\nexport function ProjectListSkeleton({ className, items = 4 }: { className?: string; items?: number }) {\n return (\n <div className={cn('grid gap-4 md:grid-cols-2 lg:grid-cols-3', className)}>\n {Array.from({ length: items }).map((_, i) => (\n <div key={i} className=\"glass-panel p-5 space-y-4\">\n <div className=\"flex items-center gap-3\">\n <Skeleton variant=\"rounded\" className=\"h-10 w-10 shrink-0\" />\n <div className=\"flex-1 space-y-1.5\">\n <Skeleton className=\"h-4 w-32\" />\n <Skeleton className=\"h-2.5 w-20 opacity-60\" />\n </div>\n </div>\n <Skeleton className=\"h-2 w-full rounded-full\" />\n <div className=\"flex items-center justify-between\">\n <div className=\"flex -space-x-1.5\">\n {[0, 1, 2].map((j) => (\n <Skeleton key={j} variant=\"circular\" className=\"h-6 w-6 border-2 border-surface\" />\n ))}\n </div>\n <Skeleton className=\"h-3 w-12\" />\n </div>\n </div>\n ))}\n </div>\n );\n}\n\n// ─── Sprint Skeleton ────────────────────────\n\nexport function SprintSkeleton({ className }: { className?: string }) {\n return (\n <div className={cn('space-y-4', className)}>\n {/* Sprint header */}\n <div className=\"flex items-center justify-between p-4 rounded-xl border border-theme-subtle bg-theme-subtle\">\n <div className=\"flex items-center gap-3\">\n <Skeleton className=\"h-8 w-8 rounded-xl\" />\n <div className=\"space-y-1.5\">\n <Skeleton className=\"h-4 w-28\" />\n <Skeleton className=\"h-2.5 w-40 opacity-60\" />\n </div>\n </div>\n <div className=\"flex items-center gap-3\">\n <Skeleton className=\"h-5 w-16 rounded-full\" />\n <Skeleton className=\"h-8 w-24 rounded-xl\" />\n </div>\n </div>\n {/* Sprint stats */}\n <div className=\"grid grid-cols-4 gap-3\">\n {Array.from({ length: 4 }).map((_, i) => (\n <div key={i} className=\"p-3 rounded-xl border border-theme-subtle bg-theme-subtle space-y-2\">\n <Skeleton className=\"h-2.5 w-16 opacity-60\" />\n <Skeleton className=\"h-6 w-10\" />\n </div>\n ))}\n </div>\n {/* Task list within sprint */}\n <TaskListSkeleton rows={4} />\n </div>\n );\n}\n\n// ─── Dashboard Skeleton ─────────────────────\n\nexport function DashboardSkeleton({ className }: { className?: string }) {\n return (\n <div className={cn('space-y-6', className)}>\n {/* Stats row */}\n <div className=\"grid grid-cols-2 md:grid-cols-4 gap-4\">\n {Array.from({ length: 4 }).map((_, i) => (\n <div key={i} className=\"glass-panel p-5 space-y-3\">\n <div className=\"flex items-center justify-between\">\n <Skeleton className=\"h-3 w-20 opacity-60\" />\n <Skeleton className=\"h-8 w-8 rounded-xl\" />\n </div>\n <Skeleton className=\"h-8 w-16\" />\n <Skeleton className=\"h-2 w-full rounded-full\" />\n </div>\n ))}\n </div>\n {/* Chart area */}\n <div className=\"grid md:grid-cols-3 gap-4\">\n <div className=\"md:col-span-2 glass-panel p-5 space-y-4\">\n <Skeleton className=\"h-4 w-32\" />\n <Skeleton className=\"h-48 w-full rounded-xl\" />\n </div>\n <div className=\"glass-panel p-5 space-y-4\">\n <Skeleton className=\"h-4 w-24\" />\n <div className=\"space-y-3\">\n {Array.from({ length: 5 }).map((_, i) => (\n <div key={i} className=\"flex items-center gap-2\">\n <Skeleton variant=\"circular\" className=\"h-6 w-6\" />\n <Skeleton className=\"h-3 flex-1\" />\n <Skeleton className=\"h-3 w-8\" />\n </div>\n ))}\n </div>\n </div>\n </div>\n </div>\n );\n}\n\n// ─── Member List Skeleton ───────────────────\n\nexport function MemberListSkeleton({ className, rows = 5 }: { className?: string; rows?: number }) {\n return (\n <div className={cn('space-y-1', className)}>\n {Array.from({ length: rows }).map((_, i) => (\n <div key={i} className=\"flex items-center gap-3 p-3 rounded-xl\">\n <Skeleton variant=\"circular\" className=\"h-10 w-10 shrink-0\" />\n <div className=\"flex-1 space-y-1.5\">\n <Skeleton className=\"h-3.5 w-28\" />\n <Skeleton className=\"h-2.5 w-36 opacity-60\" />\n </div>\n <Skeleton className=\"h-5 w-16 rounded-full\" />\n </div>\n ))}\n </div>\n );\n}\n\n// ─── Chat Skeleton (full page) ──────────────\n\nexport function ChatSkeleton({ className }: { className?: string }) {\n return (\n <div className={cn('grid grid-cols-[260px_1fr] h-full', className)}>\n {/* Sidebar */}\n <div className=\"border-r border-theme-subtle p-3 space-y-3\">\n <div className=\"flex items-center justify-between px-1\">\n <Skeleton className=\"h-4 w-12\" />\n <Skeleton className=\"h-7 w-7 rounded-xl\" />\n </div>\n <Skeleton className=\"h-8 w-full rounded-xl\" />\n <div className=\"space-y-1\">\n {Array.from({ length: 6 }).map((_, i) => (\n <div key={i} className=\"flex items-center gap-2.5 p-2\">\n <Skeleton variant=\"rounded\" className=\"h-7 w-7 shrink-0\" />\n <Skeleton className=\"h-3 w-24\" />\n </div>\n ))}\n </div>\n </div>\n {/* Messages */}\n <div className=\"flex flex-col p-4 space-y-4\">\n <div className=\"flex items-center gap-3 pb-3 border-b border-theme-subtle\">\n <Skeleton className=\"h-8 w-8 rounded-xl\" />\n <Skeleton className=\"h-4 w-24\" />\n </div>\n <div className=\"flex-1 space-y-4\">\n {Array.from({ length: 4 }).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-2/3\" />\n </div>\n </div>\n ))}\n </div>\n <Skeleton className=\"h-10 w-full rounded-xl\" />\n </div>\n </div>\n );\n}\n\n// ─── Settings Skeleton ──────────────────────\n\nexport function SettingsSkeleton({ className }: { className?: string }) {\n return (\n <div className={cn('max-w-2xl space-y-6', className)}>\n {Array.from({ length: 3 }).map((_, sectionIdx) => (\n <div key={sectionIdx} className=\"glass-panel p-6 space-y-4\">\n <Skeleton className=\"h-5 w-32\" />\n <Skeleton className=\"h-3 w-64 opacity-60\" />\n <div className=\"space-y-4 pt-2\">\n {Array.from({ length: 3 }).map((_, fieldIdx) => (\n <div key={fieldIdx} className=\"space-y-2\">\n <Skeleton className=\"h-3 w-20\" />\n <Skeleton className=\"h-10 w-full rounded-xl\" />\n </div>\n ))}\n </div>\n </div>\n ))}\n </div>\n );\n}\n","import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../lib/utils';\n\n/**\n * GlassPanel — Core layout container\n *\n * Multiple variants from the design system:\n * - `default`: standard glass with clip-path\n * - `highlight`: primary-tinted glass with asymmetric borders\n * - `alt`: clip-path top-left variant\n * - `cream`: light theme glass\n * - `flat`: no clip-path, rounded corners\n */\nconst glassPanelVariants = cva('relative transition-all duration-[400ms] ease-[cubic-bezier(0.25,1,0.5,1)]', {\n variants: {\n variant: {\n default: 'glass-panel',\n highlight: 'glass-panel-highlight',\n alt: 'glass-panel-alt',\n cream: 'glass-panel-cream',\n flat: 'rounded-2xl border border-[rgba(167,139,250,0.12)] bg-[rgba(124,58,237,0.06)] shadow-[0_24px_80px_-15px_rgba(13,10,26,0.5)] backdrop-blur-[40px] [backdrop-filter:blur(40px)_saturate(180%)]',\n },\n corners: {\n none: '',\n tl: 'geometric-corner',\n br: 'geometric-corner-br',\n both: 'geometric-corner-both',\n },\n padding: {\n none: '',\n sm: 'p-6',\n default: 'p-8',\n lg: 'p-10',\n xl: 'p-12',\n },\n },\n defaultVariants: {\n variant: 'default',\n corners: 'none',\n padding: 'default',\n },\n});\n\nexport interface GlassPanelProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof glassPanelVariants> {\n /** Add the in-flow indicator dot */\n indicator?: boolean;\n}\n\nfunction GlassPanel({\n className,\n variant,\n corners,\n padding,\n indicator,\n children,\n ...props\n}: GlassPanelProps) {\n return (\n <div className={cn(glassPanelVariants({ variant, corners, padding }), className)} {...props}>\n {indicator && <div className=\"in-flow-indicator\" />}\n {children}\n </div>\n );\n}\n\nexport { GlassPanel, glassPanelVariants };\n","import * as React from 'react';\nimport { cn } from '../../lib/utils';\n\n/**\n * Dock — Floating bottom navigation bar\n *\n * Glass background with icon buttons, separators, active state glow,\n * tooltips on hover. Derived from the Performance UI Library HTML.\n */\n\nexport interface DockItem {\n id: string;\n icon: React.ReactNode;\n label: string;\n onClick?: () => void;\n active?: boolean;\n badge?: number;\n}\n\nexport interface DockSeparator {\n type: 'separator';\n}\n\nexport type DockEntry = DockItem | DockSeparator;\n\nfunction isDockSeparator(entry: DockEntry): entry is DockSeparator {\n return 'type' in entry && entry.type === 'separator';\n}\n\nexport interface DockProps extends React.HTMLAttributes<HTMLDivElement> {\n items: DockEntry[];\n position?: 'bottom' | 'top';\n}\n\nfunction Dock({ items, position = 'bottom', className, ...props }: DockProps) {\n return (\n <div\n className={cn(\n 'fixed left-1/2 z-50 -translate-x-1/2',\n position === 'bottom' ? 'bottom-6' : 'top-6',\n className,\n )}\n {...props}\n >\n <nav\n className={cn(\n 'flex items-center gap-1 rounded-2xl border border-primary/25',\n 'bg-white/[0.03] px-3 py-2 shadow-[0_24px_80px_-15px_rgba(0,0,0,0.5)] backdrop-blur-[40px]',\n 'transition-shadow duration-[400ms] ease-[cubic-bezier(0.25,1,0.5,1)]',\n )}\n >\n {items.map((entry, i) => {\n if (isDockSeparator(entry)) {\n return (\n <div\n key={`sep-${i}`}\n className=\"mx-1.5 h-6 w-px bg-gradient-to-b from-transparent via-white/20 to-transparent\"\n />\n );\n }\n\n return <DockButton key={entry.id} item={entry} />;\n })}\n </nav>\n </div>\n );\n}\n\ninterface DockButtonProps {\n item: DockItem;\n}\n\nfunction DockButton({ item }: DockButtonProps) {\n const { icon, label, onClick, active, badge } = item;\n\n return (\n <div className=\"group relative\">\n <button\n type=\"button\"\n onClick={onClick}\n aria-label={label}\n aria-current={active ? 'page' : undefined}\n className={cn(\n 'relative flex h-10 w-10 items-center justify-center rounded-xl',\n 'text-theme-muted transition-all duration-[400ms] ease-[cubic-bezier(0.25,1,0.5,1)]',\n 'hover:bg-theme-subtle hover:text-theme',\n active && [\n 'bg-primary/15 text-primary-light',\n 'shadow-[0_0_12px_rgba(99,102,241,0.3)]',\n ],\n )}\n >\n {icon}\n\n {typeof badge === 'number' && badge > 0 && (\n <span\n className={cn(\n 'absolute -right-0.5 -top-0.5 flex h-4 min-w-4 items-center justify-center',\n 'rounded-full bg-error px-1 text-[10px] font-semibold text-cream-base',\n 'shadow-[0_0_8px_rgba(224,17,95,0.4)]',\n )}\n >\n {badge > 99 ? '99+' : badge}\n </span>\n )}\n </button>\n\n {/* Tooltip */}\n <span\n className={cn(\n 'pointer-events-none absolute -top-10 left-1/2 -translate-x-1/2',\n 'whitespace-nowrap rounded-xl bg-white/[0.05] px-2.5 py-1',\n 'text-xs font-medium text-white/90 shadow-[0_24px_80px_-15px_rgba(0,0,0,0.5)] backdrop-blur-[40px]',\n 'opacity-0 transition-all duration-[400ms] ease-[cubic-bezier(0.25,1,0.5,1)]',\n 'group-hover:-top-11 group-hover:opacity-100',\n )}\n >\n {label}\n <span className=\"absolute -bottom-1 left-1/2 h-2 w-2 -translate-x-1/2 rotate-45 bg-white/[0.05]\" />\n </span>\n </div>\n );\n}\n\nexport { Dock, DockButton };\n","'use client';\n\nimport * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../lib/utils';\n\n// ─── Types ──────────────────────────────────\n\nexport interface SidebarNavItem {\n id: string;\n icon: React.ReactNode;\n label: string;\n href?: string;\n onClick?: () => void;\n active?: boolean;\n badge?: number | string;\n disabled?: boolean;\n}\n\nexport interface SidebarNavSeparator {\n type: 'separator';\n label?: string;\n}\n\nexport type SidebarNavEntry = SidebarNavItem | SidebarNavSeparator;\n\nfunction isSeparator(entry: SidebarNavEntry): entry is SidebarNavSeparator {\n return 'type' in entry && entry.type === 'separator';\n}\n\n// ─── Variants ───────────────────────────────\n\nconst sidebarVariants = cva(\n 'fixed left-0 top-0 z-40 flex h-full flex-col border-r border-primary/15 bg-white/[0.02] backdrop-blur-[40px] motion-safe:transition-all motion-safe:duration-[400ms] ease-in-out',\n {\n variants: {\n state: {\n collapsed: 'w-16',\n expanded: 'w-60',\n },\n },\n defaultVariants: { state: 'collapsed' },\n },\n);\n\n// ─── Main Component ─────────────────────────\n\nexport interface DockSidebarProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Navigation items */\n items: SidebarNavEntry[];\n /** Bottom-pinned items (e.g., settings, profile) */\n bottomItems?: SidebarNavEntry[];\n /** Extra content rendered above the bottom items (e.g., notification bell) */\n bottomExtra?: React.ReactNode;\n /** Header slot (e.g., logo or workspace avatar) */\n header?: React.ReactNode;\n /** Whether the sidebar is expanded */\n expanded?: boolean;\n /** Callback when expanded state changes */\n onExpandedChange?: (expanded: boolean) => void;\n /** Whether hover should expand/collapse the sidebar */\n hoverExpand?: boolean;\n /** Render custom link element (for Next.js Link etc.) */\n renderLink?: (props: { href: string; children: React.ReactNode; className: string; onClick?: () => void }) => React.ReactNode;\n /** Mobile drawer mode — on small screens, show as overlay drawer */\n mobileOpen?: boolean;\n /** Callback to close mobile drawer */\n onMobileClose?: () => void;\n}\n\nfunction DockSidebar({\n items,\n bottomItems,\n bottomExtra,\n header,\n expanded = false,\n onExpandedChange,\n hoverExpand = false,\n renderLink,\n mobileOpen = false,\n onMobileClose,\n className,\n // Destructure hoverExpand out so it doesn't leak to DOM via ...props\n ...props\n}: DockSidebarProps) {\n // hoverExpand is consumed above — not forwarded to <aside>\n const handleToggle = () => onExpandedChange?.(!expanded);\n\n // Close mobile drawer on escape\n React.useEffect(() => {\n if (!mobileOpen) return;\n const onKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape') onMobileClose?.();\n };\n document.addEventListener('keydown', onKey);\n return () => document.removeEventListener('keydown', onKey);\n }, [mobileOpen, onMobileClose]);\n\n // Lock body scroll when mobile drawer is open\n React.useEffect(() => {\n if (!mobileOpen) return;\n document.body.style.overflow = 'hidden';\n return () => { document.body.style.overflow = ''; };\n }, [mobileOpen]);\n\n return (\n <>\n {/* Mobile backdrop overlay */}\n {mobileOpen && (\n <div\n className=\"fixed inset-0 z-[49] bg-black/60 backdrop-blur-sm sm:hidden animate-in fade-in duration-200\"\n onClick={onMobileClose}\n aria-hidden=\"true\"\n />\n )}\n\n <aside\n className={cn(\n // Desktop: normal fixed sidebar\n 'hidden sm:flex',\n sidebarVariants({ state: expanded ? 'expanded' : 'collapsed' }),\n // Mobile: overlay drawer mode\n mobileOpen && 'flex sm:flex fixed inset-y-0 left-0 z-50 w-64 shadow-2xl shadow-black/50 animate-in slide-in-from-left duration-300',\n !mobileOpen && 'max-sm:hidden',\n className,\n )}\n onMouseEnter={() => hoverExpand && onExpandedChange?.(true)}\n onMouseLeave={() => hoverExpand && onExpandedChange?.(false)}\n {...props}\n >\n {/* Header */}\n <div\n data-tour=\"workspace-switcher\"\n className={cn(\n 'flex items-center px-3 h-16 border-b border-primary/15',\n (expanded || mobileOpen) ? 'justify-between' : 'justify-center',\n )}\n >\n {header}\n <div className=\"flex items-center gap-1\">\n {/* Close button — mobile only */}\n {mobileOpen && (\n <button\n type=\"button\"\n onClick={onMobileClose}\n aria-label=\"Fechar menu\"\n className=\"flex h-7 w-7 items-center justify-center rounded-xl text-org-text-muted hover:bg-white/[0.05] hover:text-org-text sm:hidden\"\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M4 4L12 12M12 4L4 12\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n </button>\n )}\n {/* Collapse toggle — desktop only */}\n <button\n type=\"button\"\n onClick={handleToggle}\n aria-label={expanded ? 'Collapse sidebar' : 'Expand sidebar'}\n className={cn(\n 'hidden sm:flex h-7 w-7 items-center justify-center rounded-xl',\n 'text-org-text-muted transition-all hover:bg-white/[0.05] hover:text-org-text',\n )}\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n className={cn(\n 'transition-transform duration-[400ms]',\n expanded ? 'rotate-0' : 'rotate-180',\n )}\n >\n <path d=\"M10 12L6 8L10 4\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </button>\n </div>\n </div>\n\n {/* Main nav */}\n <nav data-tour=\"main-nav\" className=\"flex-1 overflow-y-auto overflow-x-hidden py-2 px-2 space-y-0.5\">\n {items.map((entry, i) => (\n <SidebarEntry\n key={isSeparator(entry) ? `sep-${i}` : entry.id}\n entry={entry}\n expanded={expanded || mobileOpen}\n renderLink={renderLink}\n onNavigate={mobileOpen ? onMobileClose : undefined}\n />\n ))}\n </nav>\n\n {/* Bottom section */}\n {(bottomExtra || (bottomItems && bottomItems.length > 0)) && (\n <div className=\"border-t border-primary/15 py-2 px-2 space-y-0.5\">\n {bottomExtra && (\n <div className=\"flex items-center justify-center mb-1\">\n {bottomExtra}\n </div>\n )}\n {bottomItems && bottomItems.map((entry, i) => (\n <SidebarEntry\n key={isSeparator(entry) ? `bsep-${i}` : entry.id}\n entry={entry}\n expanded={expanded || mobileOpen}\n renderLink={renderLink}\n onNavigate={mobileOpen ? onMobileClose : undefined}\n />\n ))}\n </div>\n )}\n </aside>\n </>\n );\n}\n\n// ─── Sidebar Entry ──────────────────────────\n\nfunction SidebarEntry({\n entry,\n expanded,\n renderLink,\n onNavigate,\n}: {\n entry: SidebarNavEntry;\n expanded: boolean;\n renderLink?: DockSidebarProps['renderLink'];\n onNavigate?: () => void;\n}) {\n if (isSeparator(entry)) {\n return (\n <div className=\"py-2\">\n <div className=\"h-px bg-white/10\" />\n {expanded && entry.label && (\n <span className=\"block px-3 pt-2 text-[10px] font-semibold uppercase tracking-widest text-org-text-muted\">\n {entry.label}\n </span>\n )}\n </div>\n );\n }\n\n return (\n <SidebarButton\n item={entry}\n expanded={expanded}\n renderLink={renderLink}\n onNavigate={onNavigate}\n />\n );\n}\n\n// ─── Sidebar Button ─────────────────────────\n\nfunction SidebarButton({\n item,\n expanded,\n renderLink,\n onNavigate,\n}: {\n item: SidebarNavItem;\n expanded: boolean;\n renderLink?: DockSidebarProps['renderLink'];\n onNavigate?: () => void;\n}) {\n const { icon, label, href, onClick, active, badge, disabled, id } = item;\n\n const handleClick = () => {\n onClick?.();\n onNavigate?.();\n };\n\n const content = (\n <>\n <span className=\"flex h-9 w-9 flex-shrink-0 items-center justify-center rounded-xl transition-all\">\n {icon}\n </span>\n <span\n className={cn(\n 'flex-1 truncate text-sm font-medium transition-all duration-[400ms]',\n expanded ? 'opacity-100 ml-2' : 'opacity-0 w-0 overflow-hidden ml-0',\n )}\n >\n {label}\n </span>\n {badge != null && expanded && (\n <span\n className={cn(\n 'flex h-5 min-w-5 items-center justify-center rounded-full px-1.5',\n 'text-[10px] font-semibold transition-opacity duration-[400ms]',\n typeof badge === 'number' && badge > 0\n ? 'bg-primary/20 text-primary-light'\n : 'bg-white/[0.05] text-org-text-muted',\n expanded ? 'opacity-100' : 'opacity-0',\n )}\n >\n {typeof badge === 'number' && badge > 99 ? '99+' : badge}\n </span>\n )}\n {badge != null && !expanded && typeof badge === 'number' && badge > 0 && (\n <span className=\"absolute -right-0.5 -top-0.5 h-2 w-2 rounded-full bg-primary shadow-[0_0_6px_rgba(99,102,241,0.5)]\" />\n )}\n </>\n );\n\n const sharedClass = cn(\n 'group relative flex items-center rounded-xl px-1 py-0.5 transition-all duration-[400ms]',\n 'text-org-text-muted hover:bg-white/[0.05] hover:text-org-text',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/50',\n active && 'bg-primary/10 text-primary-light shadow-[0_0_12px_rgba(99,102,241,0.15)]',\n disabled && 'pointer-events-none opacity-40',\n !expanded && 'justify-center',\n );\n\n if (href && renderLink) {\n return renderLink({ href, children: content, className: sharedClass, onClick: handleClick });\n }\n\n return (\n <button\n type=\"button\"\n onClick={handleClick}\n disabled={disabled}\n aria-current={active ? 'page' : undefined}\n className={sharedClass}\n >\n {content}\n {/* Tooltip in collapsed state */}\n {!expanded && (\n <span\n className={cn(\n 'pointer-events-none absolute left-full ml-3 whitespace-nowrap',\n 'rounded-xl bg-white/[0.05] px-2.5 py-1.5 text-xs font-medium text-white/90',\n 'shadow-[0_24px_80px_-15px_rgba(0,0,0,0.5)] backdrop-blur-[40px]',\n 'opacity-0 transition-all duration-[400ms] -translate-x-1',\n 'group-hover:opacity-100 group-hover:translate-x-0',\n )}\n >\n {label}\n <span className=\"absolute right-full top-1/2 -translate-y-1/2 border-4 border-transparent border-r-theme-glass-heavy\" />\n </span>\n )}\n </button>\n );\n}\n\nDockSidebar.displayName = 'DockSidebar';\n\nexport { DockSidebar, SidebarButton, SidebarEntry };\n","// ─────────────────────────────────────────────\n// WorkspaceSwitcher — organify-ui component\n// ─────────────────────────────────────────────\n// Consumes OrganifyProvider for workspace data.\n// Works in expanded (full name) & collapsed (icon) modes.\n// Uses renderLink from OrganifyProvider for navigation.\n// Full optimistic CRUD for workspaces (create, update, delete).\n// ─────────────────────────────────────────────\n\n'use client';\n\nimport * as React from 'react';\nimport { cn } from '../../lib/utils';\nimport { UserAvatar } from '../primitives/user-avatar';\nimport { Skeleton } from '../primitives/skeleton';\nimport { Separator } from '../primitives/separator';\nimport { Input } from '../primitives/input';\nimport { Label } from '../primitives/label';\nimport { Textarea } from '../primitives/textarea';\nimport { Button } from '../primitives/button';\nimport { ResponsiveDialog } from '../primitives/responsive-dialog';\nimport { useOrganify, useOrganifyGql, type OrganifyWorkspace } from '../../providers/organify-provider';\nimport { OrgPlus } from '../../icons';\n\n// ─── GraphQL ────────────────────────────────\n\nconst CREATE_WORKSPACE_MUTATION = `\n mutation CreateWorkspace($input: CreateWorkspaceInput!) {\n createWorkspace(input: $input) {\n id\n name\n slug\n description\n avatarUrl\n }\n }\n`;\n\nconst UPDATE_WORKSPACE_MUTATION = `\n mutation UpdateWorkspace($slug: String!, $input: UpdateWorkspaceInput!) {\n updateWorkspace(slug: $slug, input: $input) {\n id\n name\n slug\n description\n avatarUrl\n }\n }\n`;\n\nconst DELETE_WORKSPACE_MUTATION = `\n mutation DeleteWorkspace($slug: String!) {\n deleteWorkspace(slug: $slug) {\n deleted\n }\n }\n`;\n\n// ─── Props ──────────────────────────────────\n\nexport interface WorkspaceSwitcherProps {\n /** Whether the sidebar is collapsed (icon-only mode) */\n compact?: boolean;\n /** Callback when user submits the create workspace form */\n onCreateWorkspace?: (data: { name: string; description: string }) => void | Promise<void>;\n /** Additional CSS class */\n className?: string;\n}\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// ─── Component ──────────────────────────────\n\nfunction WorkspaceSwitcher({ compact = false, onCreateWorkspace, className }: WorkspaceSwitcherProps) {\n const {\n workspace,\n workspaceLoading,\n workspaces,\n workspacesLoading,\n renderLink,\n onWorkspacesChange,\n onWorkspaceChange,\n } = useOrganify();\n\n const gql = useOrganifyGql();\n const [isOpen, setIsOpen] = React.useState(false);\n const [createDialogOpen, setCreateDialogOpen] = React.useState(false);\n const [editingWorkspace, setEditingWorkspace] = React.useState<OrganifyWorkspace | null>(null);\n const [deletingWorkspace, setDeletingWorkspace] = React.useState<OrganifyWorkspace | null>(null);\n const dropdownRef = React.useRef<HTMLDivElement>(null);\n const isMobile = useMediaQuery('(max-width: 767px)');\n\n React.useEffect(() => {\n if (isMobile) return;\n function handleClickOutside(event: MouseEvent) {\n if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) {\n setIsOpen(false);\n }\n }\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [isMobile]);\n\n // ─── Optimistic Create ──────────────────\n const handleCreateWorkspace = React.useCallback(\n async (data: { name: string; description: string }) => {\n const optimisticId = `temp-${Date.now()}`;\n const optimisticSlug = data.name\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-|-$/g, '');\n\n const optimisticWs: OrganifyWorkspace = {\n id: optimisticId,\n name: data.name,\n slug: optimisticSlug,\n description: data.description || null,\n avatarUrl: null,\n plan: null,\n _count: { members: 1, teams: 0 },\n };\n\n // Optimistic: add immediately\n const prevWorkspaces = [...workspaces];\n const nextWorkspaces = [...workspaces, optimisticWs];\n onWorkspacesChange?.(nextWorkspaces);\n\n try {\n const result = await gql<{ createWorkspace: OrganifyWorkspace }>(\n 'workspaces',\n CREATE_WORKSPACE_MUTATION,\n { input: { name: data.name.trim(), description: data.description.trim() || undefined } },\n );\n\n // Replace optimistic with real data\n const realWs: OrganifyWorkspace = {\n ...result.createWorkspace,\n plan: null,\n _count: { members: 1, teams: 0 },\n };\n const confirmed = nextWorkspaces.map((w) =>\n w.id === optimisticId ? realWs : w,\n );\n onWorkspacesChange?.(confirmed);\n\n // Switch to the new workspace\n onWorkspaceChange?.(realWs);\n\n // Notify parent callback\n await onCreateWorkspace?.(data);\n } catch (err: any) {\n // Rollback\n onWorkspacesChange?.(prevWorkspaces);\n throw err; // let the dialog show the error\n }\n },\n [workspaces, gql, onWorkspacesChange, onWorkspaceChange, onCreateWorkspace],\n );\n\n // ─── Optimistic Update ──────────────────\n const handleUpdateWorkspace = React.useCallback(\n async (slug: string, data: { name?: string; description?: string }) => {\n const prevWorkspaces = [...workspaces];\n const prevActive = workspace;\n\n // Optimistic: update immediately\n const updated = workspaces.map((w) =>\n w.slug === slug ? { ...w, ...data } : w,\n );\n onWorkspacesChange?.(updated);\n\n // If we're editing the active workspace, update it too\n if (workspace?.slug === slug) {\n onWorkspaceChange?.({ ...workspace, ...data });\n }\n\n try {\n console.debug('[workspace-switcher] Updating workspace', { slug, data });\n const result = await gql<{ updateWorkspace: OrganifyWorkspace }>(\n 'workspaces',\n UPDATE_WORKSPACE_MUTATION,\n { slug, input: data },\n );\n console.debug('[workspace-switcher] Update successful', result.updateWorkspace);\n\n // Replace with confirmed server data\n const confirmed = updated.map((w) =>\n w.slug === slug ? { ...w, ...result.updateWorkspace } : w,\n );\n onWorkspacesChange?.(confirmed);\n\n if (workspace?.slug === slug) {\n onWorkspaceChange?.({ ...workspace, ...result.updateWorkspace });\n }\n } catch (err: any) {\n console.error('[workspace-switcher] Update failed:', err.message, err);\n // Rollback\n onWorkspacesChange?.(prevWorkspaces);\n if (prevActive?.slug === slug) onWorkspaceChange?.(prevActive);\n throw err;\n }\n },\n [workspaces, workspace, gql, onWorkspacesChange, onWorkspaceChange],\n );\n\n // ─── Optimistic Delete ──────────────────\n const handleDeleteWorkspace = React.useCallback(\n async (slug: string) => {\n const prevWorkspaces = [...workspaces];\n const prevActive = workspace;\n\n // Optimistic: remove immediately\n const filtered = workspaces.filter((w) => w.slug !== slug);\n onWorkspacesChange?.(filtered);\n\n // If we deleted the active workspace, switch to first available\n if (workspace?.slug === slug) {\n onWorkspaceChange?.(filtered[0] ?? null);\n }\n\n try {\n await gql('workspaces', DELETE_WORKSPACE_MUTATION, { slug });\n } catch (err: any) {\n // Rollback\n onWorkspacesChange?.(prevWorkspaces);\n if (prevActive?.slug === slug) onWorkspaceChange?.(prevActive);\n throw err;\n }\n },\n [workspaces, workspace, gql, onWorkspacesChange, onWorkspaceChange],\n );\n\n const displayName = workspace?.name ?? workspace?.slug ?? '…';\n\n return (\n <div className={cn('relative min-w-0', className)} ref={dropdownRef}>\n {/* ─── Trigger ──────────────────────── */}\n <button\n onClick={() => setIsOpen(!isOpen)}\n className={cn(\n 'flex items-center gap-2.5 rounded-xl transition-colors hover:bg-theme-subtle',\n compact ? 'justify-center p-1' : 'w-full px-2 py-2',\n isOpen && 'bg-theme-subtle',\n )}\n >\n {workspaceLoading ? (\n <Skeleton className=\"w-8 h-8\" variant=\"rounded\" />\n ) : (\n <UserAvatar\n name={displayName}\n src={workspace?.avatarUrl}\n size=\"sm\"\n shape=\"square\"\n showHoverInfo={false}\n />\n )}\n\n {!compact && (\n <>\n <div className=\"flex-1 min-w-0\">\n {workspaceLoading ? (\n <Skeleton className=\"h-4 w-24\" />\n ) : (\n <p className=\"text-sm font-semibold truncate text-foreground\">\n {displayName}\n </p>\n )}\n </div>\n <SwitcherChevron open={isOpen} />\n </>\n )}\n </button>\n\n {/* ─── Desktop Dropdown ─────────────── */}\n {isOpen && !isMobile && (\n <SwitcherDropdown\n workspaces={workspaces}\n currentSlug={workspace?.slug}\n loading={workspacesLoading}\n renderLink={renderLink}\n onClose={() => setIsOpen(false)}\n onCreateClick={() => {\n setIsOpen(false);\n setCreateDialogOpen(true);\n }}\n onEditClick={(ws) => {\n setIsOpen(false);\n setEditingWorkspace(ws);\n }}\n onDeleteClick={(ws) => {\n setIsOpen(false);\n setDeletingWorkspace(ws);\n }}\n />\n )}\n\n {/* ─── Mobile Drawer ────────────────── */}\n {isMobile && (\n <ResponsiveDialog\n open={isOpen}\n onOpenChange={setIsOpen}\n contentClassName=\"max-w-full sm:max-w-full\"\n >\n <SwitcherDropdown\n mobile\n workspaces={workspaces}\n currentSlug={workspace?.slug}\n loading={workspacesLoading}\n renderLink={renderLink}\n onClose={() => setIsOpen(false)}\n onCreateClick={() => {\n setIsOpen(false);\n setCreateDialogOpen(true);\n }}\n onEditClick={(ws) => {\n setIsOpen(false);\n setEditingWorkspace(ws);\n }}\n onDeleteClick={(ws) => {\n setIsOpen(false);\n setDeletingWorkspace(ws);\n }}\n />\n </ResponsiveDialog>\n )}\n\n {/* ─── Create Workspace Dialog ──────── */}\n <CreateWorkspaceInlineDialog\n open={createDialogOpen}\n onOpenChange={setCreateDialogOpen}\n onSubmit={handleCreateWorkspace}\n />\n\n {/* ─── Edit Workspace Dialog ────────── */}\n <EditWorkspaceDialog\n open={!!editingWorkspace}\n onOpenChange={(open) => { if (!open) setEditingWorkspace(null); }}\n workspace={editingWorkspace}\n onSubmit={handleUpdateWorkspace}\n />\n\n {/* ─── Delete Workspace Dialog ──────── */}\n <DeleteWorkspaceDialog\n open={!!deletingWorkspace}\n onOpenChange={(open) => { if (!open) setDeletingWorkspace(null); }}\n workspace={deletingWorkspace}\n onConfirm={handleDeleteWorkspace}\n />\n </div>\n );\n}\n\n// ─── Chevron ────────────────────────────────\n\nfunction SwitcherChevron({ open }: { open: boolean }) {\n return (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n className={cn('transition-transform text-muted-foreground', open && 'rotate-180')}\n >\n <path\n d=\"M4 6L8 10L12 6\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\n// ─── Dropdown ───────────────────────────────\n\nfunction SwitcherDropdown({\n mobile = false,\n workspaces,\n currentSlug,\n loading,\n renderLink,\n onClose,\n onCreateClick,\n onEditClick,\n onDeleteClick,\n}: {\n mobile?: boolean;\n workspaces: OrganifyWorkspace[];\n currentSlug?: string;\n loading: boolean;\n renderLink?: (props: { href: string; children: React.ReactNode; className?: string; onClick?: () => void }) => React.ReactNode;\n onClose: () => void;\n onCreateClick?: () => void;\n onEditClick?: (ws: OrganifyWorkspace) => void;\n onDeleteClick?: (ws: OrganifyWorkspace) => void;\n}) {\n return (\n <div\n className={cn(\n 'rounded-xl border border-primary/20 bg-[linear-gradient(165deg,rgba(22,26,40,0.92),rgba(11,14,24,0.94))] backdrop-blur-[40px] shadow-[0_24px_80px_-15px_rgba(0,0,0,0.55)] overflow-hidden',\n mobile ? 'w-full' : 'absolute top-full left-0 mt-1 w-64 z-50',\n )}\n >\n <div className=\"px-3 py-2 text-xs font-medium uppercase tracking-wider text-theme-muted border-b border-primary/15\">\n Workspaces\n </div>\n\n <div className=\"max-h-64 overflow-y-auto overscroll-contain scrollbar-thin scrollbar-thumb-white/15 scrollbar-track-transparent\">\n <div className=\"py-1\">\n {loading ? (\n <div className=\"space-y-1 px-3 py-2\">\n {[1, 2, 3].map((i) => (\n <div key={i} className=\"flex items-center gap-2.5 py-2\">\n <Skeleton className=\"w-7 h-7\" variant=\"rounded\" />\n <div className=\"flex-1 space-y-1.5\">\n <Skeleton className=\"h-3.5 w-24\" />\n <Skeleton className=\"h-2.5 w-16\" />\n </div>\n </div>\n ))}\n </div>\n ) : workspaces.length === 0 ? (\n <div className=\"px-3 py-6 text-center\">\n <p className=\"text-xs text-muted-foreground mb-2\">Nenhum workspace encontrado</p>\n <button\n onClick={onCreateClick}\n className=\"inline-flex items-center gap-1.5 text-xs font-medium text-primary-light hover:text-primary transition-colors\"\n >\n <OrgPlus className=\"w-3.5 h-3.5\" />\n Criar primeiro workspace\n </button>\n </div>\n ) : (\n workspaces.map((ws) => (\n <SwitcherItem\n key={ws.id}\n ws={ws}\n isActive={ws.slug === currentSlug}\n renderLink={renderLink}\n onClose={onClose}\n onEdit={() => onEditClick?.(ws)}\n onDelete={() => onDeleteClick?.(ws)}\n />\n ))\n )}\n </div>\n </div>\n\n <Separator />\n <button\n onClick={onCreateClick}\n className=\"flex items-center gap-2 px-3 py-2.5 text-sm text-primary-light transition-colors hover:bg-theme-subtle w-full text-left\"\n >\n <OrgPlus className=\"w-4 h-4\" />\n <span className=\"font-medium\">Criar workspace</span>\n </button>\n </div>\n );\n}\n\n// ─── Item ───────────────────────────────────\n\nfunction SwitcherItem({\n ws,\n isActive,\n renderLink,\n onClose,\n onEdit,\n onDelete,\n}: {\n ws: OrganifyWorkspace;\n isActive: boolean;\n renderLink?: (props: { href: string; children: React.ReactNode; className?: string; onClick?: () => void }) => React.ReactNode;\n onClose: () => void;\n onEdit?: () => void;\n onDelete?: () => void;\n}) {\n const [showActions, setShowActions] = React.useState(false);\n const isOptimistic = ws.id.startsWith('temp-');\n\n const content = (\n <>\n <UserAvatar\n name={ws.name}\n src={ws.avatarUrl}\n size=\"sm\"\n shape=\"square\"\n showHoverInfo={false}\n className={cn('h-7 w-7', isOptimistic && 'opacity-50')}\n />\n <div className=\"flex-1 min-w-0\">\n <p className={cn('text-sm font-medium truncate text-foreground', isOptimistic && 'opacity-50')}>\n {ws.name}\n </p>\n <p className=\"text-xs truncate text-neutral-400\">\n {isOptimistic\n ? 'Criando…'\n : `${ws.plan?.name ?? 'Gratuito'} · ${ws._count?.members ?? 0} membro${(ws._count?.members ?? 0) !== 1 ? 's' : ''}`\n }\n </p>\n </div>\n {isActive && <div className=\"w-2 h-2 rounded-full bg-primary\" />}\n {!isOptimistic && showActions && (\n <div className=\"flex items-center gap-0.5 ml-1\" onClick={(e) => e.preventDefault()}>\n <button\n onClick={(e) => { e.preventDefault(); e.stopPropagation(); if (!isOptimistic) onEdit?.(); }}\n disabled={isOptimistic}\n className=\"p-1 rounded hover:bg-white/10 text-muted-foreground hover:text-foreground transition-colors disabled:opacity-50 disabled:cursor-not-allowed\"\n title={isOptimistic ? 'Aguardando confirmação do servidor' : 'Editar workspace'}\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M17 3a2.85 2.83 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5Z\" />\n </svg>\n </button>\n <button\n onClick={(e) => { e.preventDefault(); e.stopPropagation(); if (!isOptimistic) onDelete?.(); }}\n disabled={isOptimistic}\n className=\"p-1 rounded hover:bg-rose-500/20 text-muted-foreground hover:text-rose-400 transition-colors disabled:opacity-50 disabled:cursor-not-allowed\"\n title={isOptimistic ? 'Aguardando confirmação do servidor' : 'Excluir workspace'}\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M3 6h18\" /><path d=\"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6\" />\n <path d=\"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2\" />\n </svg>\n </button>\n </div>\n )}\n </>\n );\n\n const cls = cn(\n 'flex items-center gap-2.5 px-3 py-2 w-full min-w-0 overflow-hidden transition-colors hover:bg-theme-subtle',\n isActive && 'bg-theme-subtle',\n isOptimistic && 'pointer-events-none',\n );\n\n const wrapperProps = {\n onMouseEnter: () => setShowActions(true),\n onMouseLeave: () => setShowActions(false),\n };\n\n if (renderLink) {\n return (\n <div className=\"min-w-0 overflow-hidden\" {...wrapperProps}>\n {renderLink({ href: `/${ws.slug}`, children: content, className: cls, onClick: onClose })}\n </div>\n );\n }\n\n return (\n <div className=\"min-w-0 overflow-hidden\" {...wrapperProps}>\n <a href={`/${ws.slug}`} onClick={onClose} className={cls}>\n {content}\n </a>\n </div>\n );\n}\n\nWorkspaceSwitcher.displayName = 'WorkspaceSwitcher';\n\n// ─── Inline Create Workspace Dialog ─────────\n\nfunction CreateWorkspaceInlineDialog({\n open,\n onOpenChange,\n onSubmit,\n}: {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n onSubmit?: (data: { name: string; description: string }) => void | Promise<void>;\n}) {\n const [name, setName] = React.useState('');\n const [description, setDescription] = React.useState('');\n const [loading, setLoading] = React.useState(false);\n const [error, setError] = React.useState('');\n\n React.useEffect(() => {\n if (open) { setName(''); setDescription(''); setError(''); }\n }, [open]);\n\n const handleSubmit = async () => {\n if (!name.trim()) return;\n setLoading(true);\n setError('');\n try {\n await onSubmit?.({ name: name.trim(), description: description.trim() });\n setName('');\n setDescription('');\n onOpenChange(false);\n } catch (err: any) {\n setError(err.message || 'Falha ao criar workspace');\n } finally {\n setLoading(false);\n }\n };\n\n return (\n <ResponsiveDialog\n open={open}\n onOpenChange={onOpenChange}\n title=\"Criar novo workspace\"\n description=\"Configure o nome e a descrição do seu workspace\"\n footer={\n <div className=\"flex justify-end gap-2\">\n <Button variant=\"ghost\" onClick={() => onOpenChange(false)} disabled={loading}>\n Cancelar\n </Button>\n <Button onClick={handleSubmit} disabled={!name.trim() || loading}>\n {loading ? 'Criando...' : 'Criar workspace'}\n </Button>\n </div>\n }\n >\n <div className=\"space-y-4\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"ws-name\">Nome *</Label>\n <Input\n id=\"ws-name\"\n placeholder=\"Ex: Minha Empresa\"\n value={name}\n onChange={(e) => setName(e.target.value)}\n disabled={loading}\n autoFocus\n />\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"ws-desc\">Descrição</Label>\n <Textarea\n id=\"ws-desc\"\n placeholder=\"Opcional\"\n value={description}\n onChange={(e) => setDescription(e.target.value)}\n disabled={loading}\n rows={3}\n />\n </div>\n {error && <p className=\"text-xs text-rose-400\">{error}</p>}\n </div>\n </ResponsiveDialog>\n );\n}\n\n// ─── Edit Workspace Dialog ──────────────────\n\nfunction EditWorkspaceDialog({\n open,\n onOpenChange,\n workspace,\n onSubmit,\n}: {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n workspace: OrganifyWorkspace | null;\n onSubmit: (slug: string, data: { name?: string; description?: string }) => Promise<void>;\n}) {\n const [name, setName] = React.useState('');\n const [description, setDescription] = React.useState('');\n const [loading, setLoading] = React.useState(false);\n const [error, setError] = React.useState('');\n\n React.useEffect(() => {\n if (open && workspace) {\n setName(workspace.name);\n setDescription(workspace.description ?? '');\n setError('');\n }\n }, [open, workspace]);\n\n const handleSubmit = async () => {\n if (!name.trim() || !workspace) return;\n setLoading(true);\n setError('');\n try {\n await onSubmit(workspace.slug, {\n name: name.trim(),\n description: description.trim() || undefined,\n });\n onOpenChange(false);\n } catch (err: any) {\n setError(err.message || 'Falha ao atualizar workspace');\n } finally {\n setLoading(false);\n }\n };\n\n return (\n <ResponsiveDialog\n open={open}\n onOpenChange={onOpenChange}\n title=\"Editar workspace\"\n description={`Atualize as informações de \"${workspace?.name ?? ''}\"`}\n footer={\n <div className=\"flex justify-end gap-2\">\n <Button variant=\"ghost\" onClick={() => onOpenChange(false)} disabled={loading}>\n Cancelar\n </Button>\n <Button onClick={handleSubmit} disabled={!name.trim() || loading}>\n {loading ? 'Salvando...' : 'Salvar alterações'}\n </Button>\n </div>\n }\n >\n <div className=\"space-y-4\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"ws-edit-name\">Nome *</Label>\n <Input\n id=\"ws-edit-name\"\n placeholder=\"Ex: Minha Empresa\"\n value={name}\n onChange={(e) => setName(e.target.value)}\n disabled={loading}\n autoFocus\n />\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"ws-edit-desc\">Descrição</Label>\n <Textarea\n id=\"ws-edit-desc\"\n placeholder=\"Opcional\"\n value={description}\n onChange={(e) => setDescription(e.target.value)}\n disabled={loading}\n rows={3}\n />\n </div>\n {error && <p className=\"text-xs text-rose-400\">{error}</p>}\n </div>\n </ResponsiveDialog>\n );\n}\n\n// ─── Delete Workspace Dialog ────────────────\n\nfunction DeleteWorkspaceDialog({\n open,\n onOpenChange,\n workspace,\n onConfirm,\n}: {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n workspace: OrganifyWorkspace | null;\n onConfirm: (slug: string) => Promise<void>;\n}) {\n const [loading, setLoading] = React.useState(false);\n const [error, setError] = React.useState('');\n const [confirmText, setConfirmText] = React.useState('');\n\n React.useEffect(() => {\n if (open) { setError(''); setConfirmText(''); }\n }, [open]);\n\n const canConfirm = confirmText === workspace?.name;\n\n const handleDelete = async () => {\n if (!workspace || !canConfirm) return;\n setLoading(true);\n setError('');\n try {\n await onConfirm(workspace.slug);\n onOpenChange(false);\n } catch (err: any) {\n setError(err.message || 'Falha ao excluir workspace');\n } finally {\n setLoading(false);\n }\n };\n\n return (\n <ResponsiveDialog\n open={open}\n onOpenChange={onOpenChange}\n title=\"Excluir workspace\"\n description=\"Esta ação é irreversível. Todos os projetos, tarefas e dados serão perdidos.\"\n footer={\n <div className=\"flex justify-end gap-2\">\n <Button variant=\"ghost\" onClick={() => onOpenChange(false)} disabled={loading}>\n Cancelar\n </Button>\n <Button\n onClick={handleDelete}\n disabled={!canConfirm || loading}\n className=\"!bg-rose-600 hover:!bg-rose-700 !text-white\"\n >\n {loading ? 'Excluindo...' : 'Excluir permanentemente'}\n </Button>\n </div>\n }\n >\n <div className=\"space-y-4\">\n <div className=\"p-3 rounded-xl bg-rose-500/10 border border-rose-500/20\">\n <p className=\"text-sm text-rose-300\">\n Você está prestes a excluir o workspace <strong className=\"text-rose-200\">{workspace?.name}</strong>.\n Todos os projetos, tarefas, membros e dados associados serão removidos permanentemente.\n </p>\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"ws-delete-confirm\">\n Digite <strong className=\"text-foreground\">{workspace?.name}</strong> para confirmar\n </Label>\n <Input\n id=\"ws-delete-confirm\"\n placeholder={workspace?.name ?? ''}\n value={confirmText}\n onChange={(e) => setConfirmText(e.target.value)}\n disabled={loading}\n autoFocus\n />\n </div>\n {error && <p className=\"text-xs text-rose-400\">{error}</p>}\n </div>\n </ResponsiveDialog>\n );\n}\n\nexport { WorkspaceSwitcher };\n","import * as React from 'react';\nimport { cn } from '../../lib/utils';\n\n/**\n * Logo — Organify geometric diamond logo\n *\n * Rotating diamond inside bordered container with optional text.\n * From Brand Assets & Icons HTML.\n */\n\nexport interface LogoProps extends React.HTMLAttributes<HTMLDivElement> {\n size?: 'sm' | 'default' | 'lg' | 'xl';\n variant?: 'default' | 'minimal' | 'full';\n animated?: boolean;\n}\n\nconst sizes = {\n sm: { container: 'h-8 w-8', diamond: 'h-3.5 w-3.5', text: 'text-sm', gap: 'gap-2' },\n default: { container: 'h-10 w-10', diamond: 'h-4 w-4', text: 'text-base', gap: 'gap-2.5' },\n lg: { container: 'h-14 w-14', diamond: 'h-5.5 w-5.5', text: 'text-lg', gap: 'gap-3' },\n xl: { container: 'h-20 w-20', diamond: 'h-8 w-8', text: 'text-2xl', gap: 'gap-4' },\n};\n\nfunction Logo({ size = 'default', variant = 'default', animated = false, className, ...props }: LogoProps) {\n const s = sizes[size];\n\n return (\n <div\n className={cn(\n 'flex items-center',\n s.gap,\n className,\n )}\n {...props}\n >\n {/* Diamond mark */}\n <div\n className={cn(\n 'relative flex items-center justify-center',\n s.container,\n 'rounded-xl border-2 border-primary/30',\n 'bg-gradient-to-br from-primary/10 to-transparent',\n 'shadow-[0_0_20px_rgba(99,102,241,0.15)]',\n 'transition-all duration-500',\n animated && 'hover:border-primary/50 hover:shadow-[0_0_30px_rgba(99,102,241,0.3)]',\n )}\n >\n <div\n className={cn(\n s.diamond,\n 'rotate-45 rounded-xl bg-gradient-to-br from-primary to-primary-light',\n 'shadow-[0_0_12px_rgba(99,102,241,0.5)]',\n 'transition-transform duration-500',\n animated && 'hover:rotate-[135deg]',\n )}\n />\n\n {/* Corner accent line */}\n <div className=\"absolute -right-1 -top-1 h-3 w-3 border-r-2 border-t-2 border-primary/40 rounded-tr-md\" />\n </div>\n\n {/* Wordmark */}\n {variant !== 'minimal' && (\n <div className=\"flex flex-col\">\n <span\n className={cn(\n s.text,\n 'font-semibold tracking-tight text-theme',\n )}\n >\n Organify\n </span>\n {variant === 'full' && (\n <span className=\"font-mono text-[10px] uppercase tracking-widest text-theme-muted\">\n Gestão inteligente\n </span>\n )}\n </div>\n )}\n </div>\n );\n}\n\nexport { Logo };\n","import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../lib/utils';\n\n/**\n * GeometricIcon — Diamond-shaped icon container\n *\n * Rotate-45 border with icon inside, hover transition from rotated to straight.\n * From Brand Assets & Icons HTML.\n */\nconst geometricIconVariants = cva(\n [\n 'relative inline-flex items-center justify-center',\n 'rotate-45 transition-all duration-500',\n ],\n {\n variants: {\n variant: {\n default: 'border-2 border-primary/30 bg-primary/10 shadow-[0_0_16px_rgba(99,102,241,0.2)]',\n filled: 'bg-gradient-to-br from-primary to-primary-light shadow-[0_0_20px_rgba(99,102,241,0.4)]',\n outline: 'border-2 border-theme-subtle-20 bg-transparent',\n success: 'border-2 border-success/30 bg-success/10 shadow-[0_0_16px_rgba(16,185,129,0.2)]',\n warning: 'border-2 border-warning/30 bg-warning/10 shadow-[0_0_16px_rgba(245,158,11,0.2)]',\n error: 'border-2 border-error/30 bg-error/10 shadow-[0_0_16px_rgba(224,17,95,0.2)]',\n cream: 'border-2 border-primary/20 bg-cream-card shadow-cream-sm',\n },\n size: {\n sm: 'h-8 w-8 rounded-xl',\n default: 'h-10 w-10 rounded-xl',\n lg: 'h-14 w-14 rounded-xl',\n xl: 'h-20 w-20 rounded-xl',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n },\n);\n\nconst iconSizes = {\n sm: 'h-3.5 w-3.5',\n default: 'h-4.5 w-4.5',\n lg: 'h-6 w-6',\n xl: 'h-9 w-9',\n};\n\nexport interface GeometricIconProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof geometricIconVariants> {\n icon: React.ReactNode;\n /** Straighten the icon on hover */\n interactive?: boolean;\n /** Show corner accent */\n accent?: boolean;\n}\n\nfunction GeometricIcon({\n icon,\n variant,\n size = 'default',\n interactive = false,\n accent = false,\n className,\n ...props\n}: GeometricIconProps) {\n return (\n <div\n className={cn(\n geometricIconVariants({ variant, size }),\n interactive && 'cursor-pointer hover:rotate-0 hover:scale-110',\n className,\n )}\n {...props}\n >\n {/* Counter-rotate the icon so it stays upright */}\n <span className={cn('-rotate-45 transition-transform duration-500', iconSizes[size ?? 'default'])}>\n {icon}\n </span>\n\n {/* Corner accent */}\n {accent && (\n <div className=\"absolute -right-0.5 -top-0.5 h-2.5 w-2.5 border-r-2 border-t-2 border-current opacity-40 rounded-tr-sm\" />\n )}\n </div>\n );\n}\n\nexport { GeometricIcon, geometricIconVariants };\n","import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../lib/utils';\n\n/**\n * MetricCard — Glass panel with large metric, label, and optional progress\n *\n * From Advanced Product Components HTML.\n */\nconst metricCardVariants = cva(\n [\n 'relative overflow-hidden rounded-xl border p-6',\n 'transition-all duration-[400ms] ease-[cubic-bezier(0.25,1,0.5,1)]',\n ],\n {\n variants: {\n variant: {\n default: [\n 'border-theme-subtle bg-theme-surface/80 backdrop-blur-2xl',\n 'shadow-glass-lg hover:shadow-glass-xl',\n ],\n highlight: [\n 'border-primary/20 bg-gradient-to-br from-primary/5 to-transparent backdrop-blur-2xl',\n 'shadow-glass-lg hover:shadow-glass-xl',\n ],\n cream: [\n 'border-cream-border bg-cream-card',\n 'shadow-cream-md hover:shadow-cream-lg',\n ],\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n },\n);\n\nexport interface MetricCardProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof metricCardVariants> {\n /** The big number or value */\n value: string | number;\n /** Label / description below the value */\n label: string;\n /** Subtitle or secondary label */\n subtitle?: string;\n /** Icon element shown top-right */\n icon?: React.ReactNode;\n /** Progress percentage 0-100 */\n progress?: number;\n /** Trend indicator (positive or negative) */\n trend?: { value: string; positive: boolean };\n /** Badge content top-right near icon */\n badge?: React.ReactNode;\n}\n\nfunction MetricCard({\n value,\n label,\n subtitle,\n icon,\n progress,\n trend,\n badge,\n variant,\n className,\n ...props\n}: MetricCardProps) {\n return (\n <div className={cn(metricCardVariants({ variant }), className)} {...props}>\n {/* Header row: badge + icon */}\n {(icon || badge) && (\n <div className=\"mb-4 flex items-start justify-between\">\n {badge && <div>{badge}</div>}\n {icon && (\n <div\n className={cn(\n 'flex h-10 w-10 items-center justify-center rounded-xl',\n variant === 'cream'\n ? 'bg-primary/10 text-primary'\n : 'bg-theme-subtle text-theme-muted',\n )}\n >\n {icon}\n </div>\n )}\n </div>\n )}\n\n {/* Value */}\n <div className=\"mb-1 flex items-baseline gap-3\">\n <span\n className={cn(\n 'text-3xl font-semibold tracking-tight',\n variant === 'cream' ? 'text-cream-primary' : 'text-theme',\n )}\n >\n {value}\n </span>\n\n {trend && (\n <span\n className={cn(\n 'rounded-full px-2 py-0.5 text-xs font-semibold',\n trend.positive\n ? 'bg-success/15 text-success-light'\n : 'bg-error/15 text-error-light',\n )}\n >\n {trend.positive ? '↑' : '↓'} {trend.value}\n </span>\n )}\n </div>\n\n {/* Label */}\n <p\n className={cn(\n 'text-sm',\n variant === 'cream' ? 'text-cream-secondary' : 'text-theme-secondary',\n )}\n >\n {label}\n </p>\n\n {subtitle && (\n <p\n className={cn(\n 'mt-0.5 font-mono text-xs',\n variant === 'cream' ? 'text-cream-muted' : 'text-theme-muted',\n )}\n >\n {subtitle}\n </p>\n )}\n\n {/* Progress bar */}\n {typeof progress === 'number' && (\n <div className=\"mt-4\">\n <div className=\"flex items-center justify-between text-xs text-theme-muted mb-1.5\">\n <span>Progresso</span>\n <span className={variant === 'cream' ? 'text-cream-primary' : 'text-theme'}>\n {Math.round(progress)}%\n </span>\n </div>\n <div\n className={cn(\n 'h-1.5 w-full overflow-hidden rounded-full',\n variant === 'cream' ? 'bg-cream-border' : 'bg-theme-subtle',\n )}\n >\n <div\n className=\"h-full rounded-full bg-gradient-to-r from-primary to-primary-light motion-safe:transition-all motion-safe:duration-700\"\n style={{ width: `${Math.min(100, Math.max(0, progress))}%` }}\n />\n </div>\n </div>\n )}\n\n {/* Subtle inner glow */}\n <div className=\"pointer-events-none absolute inset-0 rounded-xl shadow-inner-light\" />\n </div>\n );\n}\n\nexport { MetricCard, metricCardVariants };\n\n// ─── Skeleton ───────────────────────────────\n\nfunction MetricCardSkeleton({ className }: { className?: string }) {\n return (\n <div\n className={cn(\n 'relative overflow-hidden rounded-xl border border-theme-subtle bg-theme-card p-5 animate-pulse',\n className,\n )}\n >\n {/* Icon */}\n <div className=\"h-10 w-10 rounded-xl bg-theme-subtle mb-4\" />\n {/* Value */}\n <div className=\"h-8 w-20 rounded bg-theme-subtle-10 mb-2\" />\n {/* Label */}\n <div className=\"h-3 w-24 rounded bg-theme-subtle mb-1\" />\n {/* Subtitle */}\n <div className=\"h-3 w-16 rounded bg-theme-subtle\" />\n {/* Progress bar */}\n <div className=\"mt-4\">\n <div className=\"flex items-center justify-between mb-1.5\">\n <div className=\"h-2 w-14 rounded bg-theme-subtle\" />\n <div className=\"h-2 w-8 rounded bg-theme-subtle\" />\n </div>\n <div className=\"h-1.5 w-full rounded-full bg-theme-subtle\" />\n </div>\n </div>\n );\n}\n\nMetricCardSkeleton.displayName = 'MetricCardSkeleton';\n\nexport { MetricCardSkeleton };\n","import * as React from 'react';\nimport { cn } from '../../lib/utils';\n\n/**\n * Stepper — Horizontal workflow steps with connecting line\n *\n * Completed / active / pending states, glow on active.\n * From Advanced Product Components HTML.\n */\n\nexport interface StepperStep {\n id: string;\n label: string;\n description?: string;\n icon?: React.ReactNode;\n}\n\nexport type StepStatus = 'completed' | 'active' | 'pending' | 'error';\n\nexport interface StepperProps extends React.HTMLAttributes<HTMLDivElement> {\n steps: StepperStep[];\n /** Index of the currently active step (0-based) */\n activeStep: number;\n /** Vertical layout instead of horizontal */\n orientation?: 'horizontal' | 'vertical';\n /** Cream light theme */\n variant?: 'default' | 'cream';\n /** Indices of steps in error state */\n errorSteps?: number[];\n}\n\nfunction getStepStatus(index: number, activeStep: number, errorSteps?: number[]): StepStatus {\n if (errorSteps?.includes(index)) return 'error';\n if (index < activeStep) return 'completed';\n if (index === activeStep) return 'active';\n return 'pending';\n}\n\nfunction Stepper({\n steps,\n activeStep,\n orientation = 'horizontal',\n variant = 'default',\n errorSteps,\n className,\n ...props\n}: StepperProps) {\n const isVertical = orientation === 'vertical';\n\n return (\n <div\n className={cn(\n 'flex',\n isVertical ? 'flex-col gap-0' : 'items-start gap-0',\n className,\n )}\n role=\"list\"\n {...props}\n >\n {steps.map((step, index) => {\n const status = getStepStatus(index, activeStep, errorSteps);\n const isLast = index === steps.length - 1;\n\n return (\n <div\n key={step.id}\n className={cn(\n 'flex',\n isVertical ? 'flex-row gap-3' : 'flex-1 flex-col items-center gap-2',\n )}\n role=\"listitem\"\n aria-current={status === 'active' ? 'step' : undefined}\n >\n {/* Step indicator row */}\n <div\n className={cn(\n 'flex items-center',\n isVertical ? 'flex-col' : 'w-full',\n )}\n >\n {/* Connector before (horizontal only, skip first) */}\n {!isVertical && index > 0 && (\n <StepConnector\n status={status === 'completed' || status === 'active' ? 'filled' : 'empty'}\n variant={variant}\n />\n )}\n\n {/* Circle */}\n <StepCircle status={status} icon={step.icon} index={index} variant={variant} />\n\n {/* Connector after (horizontal only, skip last) */}\n {!isVertical && !isLast && (\n <StepConnector\n status={status === 'completed' ? 'filled' : 'empty'}\n variant={variant}\n />\n )}\n\n {/* Vertical connector down */}\n {isVertical && !isLast && (\n <div\n className={cn(\n 'my-1 h-8 w-0.5',\n status === 'completed'\n ? 'bg-gradient-to-b from-primary to-primary-light'\n : variant === 'cream'\n ? 'bg-cream-border'\n : 'bg-theme-subtle-10',\n )}\n />\n )}\n </div>\n\n {/* Label */}\n <div\n className={cn(\n isVertical ? 'pt-0.5' : 'mt-2 text-center',\n )}\n >\n <p\n className={cn(\n 'text-sm font-medium transition-colors',\n status === 'active'\n ? variant === 'cream'\n ? 'text-primary'\n : 'text-theme'\n : status === 'completed'\n ? variant === 'cream'\n ? 'text-cream-primary'\n : 'text-theme-secondary'\n : variant === 'cream'\n ? 'text-cream-muted'\n : 'text-theme-muted',\n )}\n >\n {step.label}\n </p>\n {step.description && (\n <p\n className={cn(\n 'mt-0.5 text-xs',\n variant === 'cream' ? 'text-cream-muted' : 'text-theme-muted',\n )}\n >\n {step.description}\n </p>\n )}\n </div>\n </div>\n );\n })}\n </div>\n );\n}\n\n/* ───────── Sub-components ───────── */\n\nfunction StepCircle({\n status,\n icon,\n index,\n variant,\n}: {\n status: StepStatus;\n icon?: React.ReactNode;\n index: number;\n variant: 'default' | 'cream';\n}) {\n return (\n <div\n className={cn(\n 'relative flex h-9 w-9 shrink-0 items-center justify-center rounded-full',\n 'text-sm font-semibold transition-all duration-[400ms] ease-[cubic-bezier(0.25,1,0.5,1)]',\n status === 'completed' && [\n 'bg-gradient-to-br from-primary to-primary-light text-cream-base',\n variant !== 'cream' && 'shadow-[0_0_12px_rgba(99,102,241,0.3)]',\n ],\n status === 'active' && [\n 'border-2 border-primary bg-primary/15 text-primary-light',\n variant !== 'cream' && 'shadow-[0_0_20px_rgba(99,102,241,0.4)]',\n ],\n status === 'pending' && [\n variant === 'cream'\n ? 'border-2 border-cream-border bg-cream-card text-cream-muted'\n : 'border-2 border-theme-subtle-10 bg-theme-surface text-theme-muted',\n ],\n status === 'error' && [\n 'border-2 border-rose-500/30 bg-rose-500/15 text-rose-400',\n variant !== 'cream' && 'shadow-[0_0_15px_rgba(244,63,94,0.3)]',\n ],\n )}\n >\n {status === 'completed' ? (\n <svg className=\"h-4 w-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={3}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M5 13l4 4L19 7\" />\n </svg>\n ) : status === 'error' ? (\n <svg className=\"h-4 w-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={3}>\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n ) : icon ? (\n <span className=\"h-4 w-4\">{icon}</span>\n ) : (\n <span>{index + 1}</span>\n )}\n\n {/* Active pulse ring */}\n {status === 'active' && (\n <span className=\"absolute inset-0 motion-safe:animate-ping rounded-full border-2 border-primary/30\" />\n )}\n </div>\n );\n}\n\nfunction StepConnector({\n status,\n variant,\n}: {\n status: 'filled' | 'empty';\n variant: 'default' | 'cream';\n}) {\n return (\n <div\n className={cn(\n 'h-0.5 flex-1 transition-colors duration-500',\n status === 'filled'\n ? 'bg-gradient-to-r from-primary to-primary-light'\n : variant === 'cream'\n ? 'bg-cream-border'\n : 'bg-white/10',\n )}\n />\n );\n}\n\nexport { Stepper, StepCircle, StepConnector };\n","import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../lib/utils';\n\n/**\n * StatusPill — Asymmetric border-radius pill with dot indicator\n *\n * Semantic colors, optional glow shadow.\n * From Brand Assets & Icons HTML.\n */\nconst statusPillVariants = cva(\n [\n 'inline-flex items-center gap-2 font-medium',\n 'transition-all duration-[400ms] ease-[cubic-bezier(0.25,1,0.5,1)]',\n ],\n {\n variants: {\n variant: {\n default: 'border border-theme-subtle bg-theme-card-surface text-theme-secondary',\n primary: 'border border-primary/20 bg-primary/10 text-primary-light',\n success: 'border border-success/20 bg-success/10 text-success',\n warning: 'border border-warning/20 bg-warning/10 text-warning',\n error: 'border border-error/20 bg-error/10 text-error',\n info: 'border border-info/20 bg-info/10 text-info',\n\n // Status-specific\n 'in-flow': 'border border-in-flow-border bg-in-flow-bg text-in-flow-text',\n 'deep-work': 'border border-deep-work-border bg-deep-work-bg text-deep-work-text',\n 'high-energy': 'border border-warning/20 bg-warning/10 text-warning',\n resting: 'border border-resting-border bg-resting-bg text-resting-text',\n disconnected: 'border border-disconnected-border bg-disconnected-bg text-disconnected-text',\n\n // Cream theme\n cream: 'border border-cream-border bg-cream-card text-cream-primary',\n },\n size: {\n sm: 'rounded-pill-asym px-2.5 py-0.5 text-xs',\n default: 'rounded-pill-asym px-3.5 py-1 text-sm',\n lg: 'rounded-pill-asym px-5 py-1.5 text-base',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n },\n);\n\nconst dotColors: Record<string, string> = {\n default: 'bg-neutral-400',\n primary: 'bg-primary-light',\n success: 'bg-success',\n warning: 'bg-warning',\n error: 'bg-error',\n info: 'bg-info',\n 'in-flow': 'bg-primary-light',\n 'deep-work': 'bg-info',\n 'high-energy': 'bg-warning',\n resting: 'bg-neutral-400',\n disconnected: 'bg-neutral-500',\n cream: 'bg-primary',\n};\n\nexport interface StatusPillProps\n extends React.HTMLAttributes<HTMLSpanElement>,\n VariantProps<typeof statusPillVariants> {\n /** Show the animated dot indicator */\n dot?: boolean;\n /** Pulse the dot (animated) */\n pulse?: boolean;\n /** Icon before text */\n icon?: React.ReactNode;\n}\n\nfunction StatusPill({\n variant = 'default',\n size,\n dot = true,\n pulse = false,\n icon,\n children,\n className,\n ...props\n}: StatusPillProps) {\n return (\n <span\n className={cn(statusPillVariants({ variant, size }), className)}\n {...props}\n >\n {dot && (\n <span className=\"relative flex h-2 w-2\">\n {pulse && (\n <span\n className={cn(\n 'absolute inline-flex h-full w-full motion-safe:animate-ping rounded-full opacity-50',\n dotColors[variant ?? 'default'],\n )}\n />\n )}\n <span\n className={cn(\n 'relative inline-flex h-2 w-2 rounded-full',\n dotColors[variant ?? 'default'],\n )}\n />\n </span>\n )}\n\n {icon && <span className=\"h-3.5 w-3.5\">{icon}</span>}\n\n {children}\n </span>\n );\n}\n\nexport { StatusPill, statusPillVariants };\n","/**\n * @module constants\n * @summary Useful constants\n * @description\n * Collection of useful date constants.\n *\n * The constants could be imported from `date-fns/constants`:\n *\n * ```ts\n * import { maxTime, minTime } from \"./constants/date-fns/constants\";\n *\n * function isAllowedTime(time) {\n * return time <= maxTime && time >= minTime;\n * }\n * ```\n */\n\n/**\n * @constant\n * @name daysInWeek\n * @summary Days in 1 week.\n */\nexport const daysInWeek = 7;\n\n/**\n * @constant\n * @name daysInYear\n * @summary Days in 1 year.\n *\n * @description\n * How many days in a year.\n *\n * One years equals 365.2425 days according to the formula:\n *\n * > Leap year occurs every 4 years, except for years that are divisible by 100 and not divisible by 400.\n * > 1 mean year = (365+1/4-1/100+1/400) days = 365.2425 days\n */\nexport const daysInYear = 365.2425;\n\n/**\n * @constant\n * @name maxTime\n * @summary Maximum allowed time.\n *\n * @example\n * import { maxTime } from \"./constants/date-fns/constants\";\n *\n * const isValid = 8640000000000001 <= maxTime;\n * //=> false\n *\n * new Date(8640000000000001);\n * //=> Invalid Date\n */\nexport const maxTime = Math.pow(10, 8) * 24 * 60 * 60 * 1000;\n\n/**\n * @constant\n * @name minTime\n * @summary Minimum allowed time.\n *\n * @example\n * import { minTime } from \"./constants/date-fns/constants\";\n *\n * const isValid = -8640000000000001 >= minTime;\n * //=> false\n *\n * new Date(-8640000000000001)\n * //=> Invalid Date\n */\nexport const minTime = -maxTime;\n\n/**\n * @constant\n * @name millisecondsInWeek\n * @summary Milliseconds in 1 week.\n */\nexport const millisecondsInWeek = 604800000;\n\n/**\n * @constant\n * @name millisecondsInDay\n * @summary Milliseconds in 1 day.\n */\nexport const millisecondsInDay = 86400000;\n\n/**\n * @constant\n * @name millisecondsInMinute\n * @summary Milliseconds in 1 minute\n */\nexport const millisecondsInMinute = 60000;\n\n/**\n * @constant\n * @name millisecondsInHour\n * @summary Milliseconds in 1 hour\n */\nexport const millisecondsInHour = 3600000;\n\n/**\n * @constant\n * @name millisecondsInSecond\n * @summary Milliseconds in 1 second\n */\nexport const millisecondsInSecond = 1000;\n\n/**\n * @constant\n * @name minutesInYear\n * @summary Minutes in 1 year.\n */\nexport const minutesInYear = 525600;\n\n/**\n * @constant\n * @name minutesInMonth\n * @summary Minutes in 1 month.\n */\nexport const minutesInMonth = 43200;\n\n/**\n * @constant\n * @name minutesInDay\n * @summary Minutes in 1 day.\n */\nexport const minutesInDay = 1440;\n\n/**\n * @constant\n * @name minutesInHour\n * @summary Minutes in 1 hour.\n */\nexport const minutesInHour = 60;\n\n/**\n * @constant\n * @name monthsInQuarter\n * @summary Months in 1 quarter.\n */\nexport const monthsInQuarter = 3;\n\n/**\n * @constant\n * @name monthsInYear\n * @summary Months in 1 year.\n */\nexport const monthsInYear = 12;\n\n/**\n * @constant\n * @name quartersInYear\n * @summary Quarters in 1 year\n */\nexport const quartersInYear = 4;\n\n/**\n * @constant\n * @name secondsInHour\n * @summary Seconds in 1 hour.\n */\nexport const secondsInHour = 3600;\n\n/**\n * @constant\n * @name secondsInMinute\n * @summary Seconds in 1 minute.\n */\nexport const secondsInMinute = 60;\n\n/**\n * @constant\n * @name secondsInDay\n * @summary Seconds in 1 day.\n */\nexport const secondsInDay = secondsInHour * 24;\n\n/**\n * @constant\n * @name secondsInWeek\n * @summary Seconds in 1 week.\n */\nexport const secondsInWeek = secondsInDay * 7;\n\n/**\n * @constant\n * @name secondsInYear\n * @summary Seconds in 1 year.\n */\nexport const secondsInYear = secondsInDay * daysInYear;\n\n/**\n * @constant\n * @name secondsInMonth\n * @summary Seconds in 1 month\n */\nexport const secondsInMonth = secondsInYear / 12;\n\n/**\n * @constant\n * @name secondsInQuarter\n * @summary Seconds in 1 quarter.\n */\nexport const secondsInQuarter = secondsInMonth * 3;\n\n/**\n * @constant\n * @name constructFromSymbol\n * @summary Symbol enabling Date extensions to inherit properties from the reference date.\n *\n * The symbol is used to enable the `constructFrom` function to construct a date\n * using a reference date and a value. It allows to transfer extra properties\n * from the reference date to the new date. It's useful for extensions like\n * [`TZDate`](https://github.com/date-fns/tz) that accept a time zone as\n * a constructor argument.\n */\nexport const constructFromSymbol = Symbol.for(\"constructDateFrom\");\n","import { constructFromSymbol } from \"./constants.js\";\n\n/**\n * @name constructFrom\n * @category Generic Helpers\n * @summary Constructs a date using the reference date and the value\n *\n * @description\n * The function constructs a new date using the constructor from the reference\n * date and the given value. It helps to build generic functions that accept\n * date extensions.\n *\n * It defaults to `Date` if the passed reference date is a number or a string.\n *\n * Starting from v3.7.0, it allows to construct a date using `[Symbol.for(\"constructDateFrom\")]`\n * enabling to transfer extra properties from the reference date to the new date.\n * It's useful for extensions like [`TZDate`](https://github.com/date-fns/tz)\n * that accept a time zone as a constructor argument.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The reference date to take constructor from\n * @param value - The value to create the date\n *\n * @returns Date initialized using the given date and value\n *\n * @example\n * import { constructFrom } from \"./constructFrom/date-fns\";\n *\n * // A function that clones a date preserving the original type\n * function cloneDate<DateType extends Date>(date: DateType): DateType {\n * return constructFrom(\n * date, // Use constructor from the given date\n * date.getTime() // Use the date value to create a new date\n * );\n * }\n */\nexport function constructFrom(date, value) {\n if (typeof date === \"function\") return date(value);\n\n if (date && typeof date === \"object\" && constructFromSymbol in date)\n return date[constructFromSymbol](value);\n\n if (date instanceof Date) return new date.constructor(value);\n\n return new Date(value);\n}\n\n// Fallback for modularized imports:\nexport default constructFrom;\n","import { constructFrom } from \"./constructFrom.js\";\n\n/**\n * @name toDate\n * @category Common Helpers\n * @summary Convert the given argument to an instance of Date.\n *\n * @description\n * Convert the given argument to an instance of Date.\n *\n * If the argument is an instance of Date, the function returns its clone.\n *\n * If the argument is a number, it is treated as a timestamp.\n *\n * If the argument is none of the above, the function returns Invalid Date.\n *\n * Starting from v3.7.0, it clones a date using `[Symbol.for(\"constructDateFrom\")]`\n * enabling to transfer extra properties from the reference date to the new date.\n * It's useful for extensions like [`TZDate`](https://github.com/date-fns/tz)\n * that accept a time zone as a constructor argument.\n *\n * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param argument - The value to convert\n *\n * @returns The parsed date in the local time zone\n *\n * @example\n * // Clone the date:\n * const result = toDate(new Date(2014, 1, 11, 11, 30, 30))\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert the timestamp to date:\n * const result = toDate(1392098430000)\n * //=> Tue Feb 11 2014 11:30:30\n */\nexport function toDate(argument, context) {\n // [TODO] Get rid of `toDate` or `constructFrom`?\n return constructFrom(context || argument, argument);\n}\n\n// Fallback for modularized imports:\nexport default toDate;\n","let defaultOptions = {};\n\nexport function getDefaultOptions() {\n return defaultOptions;\n}\n\nexport function setDefaultOptions(newOptions) {\n defaultOptions = newOptions;\n}\n","import { getDefaultOptions } from \"./_lib/defaultOptions.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link startOfWeek} function options.\n */\n\n/**\n * @name startOfWeek\n * @category Week Helpers\n * @summary Return the start of a week for the given date.\n *\n * @description\n * Return the start of a week for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of a week\n *\n * @example\n * // The start of a week for 2 September 2014 11:55:00:\n * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sun Aug 31 2014 00:00:00\n *\n * @example\n * // If the week starts on Monday, the start of the week for 2 September 2014 11:55:00:\n * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport function startOfWeek(date, options) {\n const defaultOptions = getDefaultOptions();\n const weekStartsOn =\n options?.weekStartsOn ??\n options?.locale?.options?.weekStartsOn ??\n defaultOptions.weekStartsOn ??\n defaultOptions.locale?.options?.weekStartsOn ??\n 0;\n\n const _date = toDate(date, options?.in);\n const day = _date.getDay();\n const diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n\n _date.setDate(_date.getDate() - diff);\n _date.setHours(0, 0, 0, 0);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfWeek;\n","import { startOfWeek } from \"./startOfWeek.js\";\n\n/**\n * The {@link startOfISOWeek} function options.\n */\n\n/**\n * @name startOfISOWeek\n * @category ISO Week Helpers\n * @summary Return the start of an ISO week for the given date.\n *\n * @description\n * Return the start of an ISO week for the given date.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of an ISO week\n *\n * @example\n * // The start of an ISO week for 2 September 2014 11:55:00:\n * const result = startOfISOWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport function startOfISOWeek(date, options) {\n return startOfWeek(date, { ...options, weekStartsOn: 1 });\n}\n\n// Fallback for modularized imports:\nexport default startOfISOWeek;\n","import { constructFrom } from \"./constructFrom.js\";\nimport { startOfISOWeek } from \"./startOfISOWeek.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getISOWeekYear} function options.\n */\n\n/**\n * @name getISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Get the ISO week-numbering year of the given date.\n *\n * @description\n * Get the ISO week-numbering year of the given date,\n * which always starts 3 days before the year's first Thursday.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param date - The given date\n *\n * @returns The ISO week-numbering year\n *\n * @example\n * // Which ISO-week numbering year is 2 January 2005?\n * const result = getISOWeekYear(new Date(2005, 0, 2))\n * //=> 2004\n */\nexport function getISOWeekYear(date, options) {\n const _date = toDate(date, options?.in);\n const year = _date.getFullYear();\n\n const fourthOfJanuaryOfNextYear = constructFrom(_date, 0);\n fourthOfJanuaryOfNextYear.setFullYear(year + 1, 0, 4);\n fourthOfJanuaryOfNextYear.setHours(0, 0, 0, 0);\n const startOfNextYear = startOfISOWeek(fourthOfJanuaryOfNextYear);\n\n const fourthOfJanuaryOfThisYear = constructFrom(_date, 0);\n fourthOfJanuaryOfThisYear.setFullYear(year, 0, 4);\n fourthOfJanuaryOfThisYear.setHours(0, 0, 0, 0);\n const startOfThisYear = startOfISOWeek(fourthOfJanuaryOfThisYear);\n\n if (_date.getTime() >= startOfNextYear.getTime()) {\n return year + 1;\n } else if (_date.getTime() >= startOfThisYear.getTime()) {\n return year;\n } else {\n return year - 1;\n }\n}\n\n// Fallback for modularized imports:\nexport default getISOWeekYear;\n","import { toDate } from \"../toDate.js\";\n\n/**\n * Google Chrome as of 67.0.3396.87 introduced timezones with offset that includes seconds.\n * They usually appear for dates that denote time before the timezones were introduced\n * (e.g. for 'Europe/Prague' timezone the offset is GMT+00:57:44 before 1 October 1891\n * and GMT+01:00:00 after that date)\n *\n * Date#getTimezoneOffset returns the offset in minutes and would return 57 for the example above,\n * which would lead to incorrect calculations.\n *\n * This function returns the timezone offset in milliseconds that takes seconds in account.\n */\nexport function getTimezoneOffsetInMilliseconds(date) {\n const _date = toDate(date);\n const utcDate = new Date(\n Date.UTC(\n _date.getFullYear(),\n _date.getMonth(),\n _date.getDate(),\n _date.getHours(),\n _date.getMinutes(),\n _date.getSeconds(),\n _date.getMilliseconds(),\n ),\n );\n utcDate.setUTCFullYear(_date.getFullYear());\n return +date - +utcDate;\n}\n","import { constructFrom } from \"../constructFrom.js\";\n\nexport function normalizeDates(context, ...dates) {\n const normalize = constructFrom.bind(\n null,\n context || dates.find((date) => typeof date === \"object\"),\n );\n return dates.map(normalize);\n}\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link startOfDay} function options.\n */\n\n/**\n * @name startOfDay\n * @category Day Helpers\n * @summary Return the start of a day for the given date.\n *\n * @description\n * Return the start of a day for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - The options\n *\n * @returns The start of a day\n *\n * @example\n * // The start of a day for 2 September 2014 11:55:00:\n * const result = startOfDay(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 02 2014 00:00:00\n */\nexport function startOfDay(date, options) {\n const _date = toDate(date, options?.in);\n _date.setHours(0, 0, 0, 0);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfDay;\n","import { getTimezoneOffsetInMilliseconds } from \"./_lib/getTimezoneOffsetInMilliseconds.js\";\nimport { normalizeDates } from \"./_lib/normalizeDates.js\";\nimport { millisecondsInDay } from \"./constants.js\";\nimport { startOfDay } from \"./startOfDay.js\";\n\n/**\n * The {@link differenceInCalendarDays} function options.\n */\n\n/**\n * @name differenceInCalendarDays\n * @category Day Helpers\n * @summary Get the number of calendar days between the given dates.\n *\n * @description\n * Get the number of calendar days between the given dates. This means that the times are removed\n * from the dates and then the difference in days is calculated.\n *\n * @param laterDate - The later date\n * @param earlierDate - The earlier date\n * @param options - The options object\n *\n * @returns The number of calendar days\n *\n * @example\n * // How many calendar days are between\n * // 2 July 2011 23:00:00 and 2 July 2012 00:00:00?\n * const result = differenceInCalendarDays(\n * new Date(2012, 6, 2, 0, 0),\n * new Date(2011, 6, 2, 23, 0)\n * )\n * //=> 366\n * // How many calendar days are between\n * // 2 July 2011 23:59:00 and 3 July 2011 00:01:00?\n * const result = differenceInCalendarDays(\n * new Date(2011, 6, 3, 0, 1),\n * new Date(2011, 6, 2, 23, 59)\n * )\n * //=> 1\n */\nexport function differenceInCalendarDays(laterDate, earlierDate, options) {\n const [laterDate_, earlierDate_] = normalizeDates(\n options?.in,\n laterDate,\n earlierDate,\n );\n\n const laterStartOfDay = startOfDay(laterDate_);\n const earlierStartOfDay = startOfDay(earlierDate_);\n\n const laterTimestamp =\n +laterStartOfDay - getTimezoneOffsetInMilliseconds(laterStartOfDay);\n const earlierTimestamp =\n +earlierStartOfDay - getTimezoneOffsetInMilliseconds(earlierStartOfDay);\n\n // Round the number of days to the nearest integer because the number of\n // milliseconds in a day is not constant (e.g. it's different in the week of\n // the daylight saving time clock shift).\n return Math.round((laterTimestamp - earlierTimestamp) / millisecondsInDay);\n}\n\n// Fallback for modularized imports:\nexport default differenceInCalendarDays;\n","import { constructFrom } from \"./constructFrom.js\";\nimport { getISOWeekYear } from \"./getISOWeekYear.js\";\nimport { startOfISOWeek } from \"./startOfISOWeek.js\";\n\n/**\n * The {@link startOfISOWeekYear} function options.\n */\n\n/**\n * @name startOfISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Return the start of an ISO week-numbering year for the given date.\n *\n * @description\n * Return the start of an ISO week-numbering year,\n * which always starts 3 days before the year's first Thursday.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of an ISO week-numbering year\n *\n * @example\n * // The start of an ISO week-numbering year for 2 July 2005:\n * const result = startOfISOWeekYear(new Date(2005, 6, 2))\n * //=> Mon Jan 03 2005 00:00:00\n */\nexport function startOfISOWeekYear(date, options) {\n const year = getISOWeekYear(date, options);\n const fourthOfJanuary = constructFrom(options?.in || date, 0);\n fourthOfJanuary.setFullYear(year, 0, 4);\n fourthOfJanuary.setHours(0, 0, 0, 0);\n return startOfISOWeek(fourthOfJanuary);\n}\n\n// Fallback for modularized imports:\nexport default startOfISOWeekYear;\n","/**\n * @name isDate\n * @category Common Helpers\n * @summary Is the given value a date?\n *\n * @description\n * Returns true if the given value is an instance of Date. The function works for dates transferred across iframes.\n *\n * @param value - The value to check\n *\n * @returns True if the given value is a date\n *\n * @example\n * // For a valid date:\n * const result = isDate(new Date())\n * //=> true\n *\n * @example\n * // For an invalid date:\n * const result = isDate(new Date(NaN))\n * //=> true\n *\n * @example\n * // For some value:\n * const result = isDate('2014-02-31')\n * //=> false\n *\n * @example\n * // For an object:\n * const result = isDate({})\n * //=> false\n */\nexport function isDate(value) {\n return (\n value instanceof Date ||\n (typeof value === \"object\" &&\n Object.prototype.toString.call(value) === \"[object Date]\")\n );\n}\n\n// Fallback for modularized imports:\nexport default isDate;\n","import { isDate } from \"./isDate.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * @name isValid\n * @category Common Helpers\n * @summary Is the given date valid?\n *\n * @description\n * Returns false if argument is Invalid Date and true otherwise.\n * Argument is converted to Date using `toDate`. See [toDate](https://date-fns.org/docs/toDate)\n * Invalid Date is a Date, whose time value is NaN.\n *\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * @param date - The date to check\n *\n * @returns The date is valid\n *\n * @example\n * // For the valid date:\n * const result = isValid(new Date(2014, 1, 31))\n * //=> true\n *\n * @example\n * // For the value, convertible into a date:\n * const result = isValid(1393804800000)\n * //=> true\n *\n * @example\n * // For the invalid date:\n * const result = isValid(new Date(''))\n * //=> false\n */\nexport function isValid(date) {\n return !((!isDate(date) && typeof date !== \"number\") || isNaN(+toDate(date)));\n}\n\n// Fallback for modularized imports:\nexport default isValid;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link startOfYear} function options.\n */\n\n/**\n * @name startOfYear\n * @category Year Helpers\n * @summary Return the start of a year for the given date.\n *\n * @description\n * Return the start of a year for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - The options\n *\n * @returns The start of a year\n *\n * @example\n * // The start of a year for 2 September 2014 11:55:00:\n * const result = startOfYear(new Date(2014, 8, 2, 11, 55, 00))\n * //=> Wed Jan 01 2014 00:00:00\n */\nexport function startOfYear(date, options) {\n const date_ = toDate(date, options?.in);\n date_.setFullYear(date_.getFullYear(), 0, 1);\n date_.setHours(0, 0, 0, 0);\n return date_;\n}\n\n// Fallback for modularized imports:\nexport default startOfYear;\n","const formatDistanceLocale = {\n lessThanXSeconds: {\n one: \"less than a second\",\n other: \"less than {{count}} seconds\",\n },\n\n xSeconds: {\n one: \"1 second\",\n other: \"{{count}} seconds\",\n },\n\n halfAMinute: \"half a minute\",\n\n lessThanXMinutes: {\n one: \"less than a minute\",\n other: \"less than {{count}} minutes\",\n },\n\n xMinutes: {\n one: \"1 minute\",\n other: \"{{count}} minutes\",\n },\n\n aboutXHours: {\n one: \"about 1 hour\",\n other: \"about {{count}} hours\",\n },\n\n xHours: {\n one: \"1 hour\",\n other: \"{{count}} hours\",\n },\n\n xDays: {\n one: \"1 day\",\n other: \"{{count}} days\",\n },\n\n aboutXWeeks: {\n one: \"about 1 week\",\n other: \"about {{count}} weeks\",\n },\n\n xWeeks: {\n one: \"1 week\",\n other: \"{{count}} weeks\",\n },\n\n aboutXMonths: {\n one: \"about 1 month\",\n other: \"about {{count}} months\",\n },\n\n xMonths: {\n one: \"1 month\",\n other: \"{{count}} months\",\n },\n\n aboutXYears: {\n one: \"about 1 year\",\n other: \"about {{count}} years\",\n },\n\n xYears: {\n one: \"1 year\",\n other: \"{{count}} years\",\n },\n\n overXYears: {\n one: \"over 1 year\",\n other: \"over {{count}} years\",\n },\n\n almostXYears: {\n one: \"almost 1 year\",\n other: \"almost {{count}} years\",\n },\n};\n\nexport const formatDistance = (token, count, options) => {\n let result;\n\n const tokenValue = formatDistanceLocale[token];\n if (typeof tokenValue === \"string\") {\n result = tokenValue;\n } else if (count === 1) {\n result = tokenValue.one;\n } else {\n result = tokenValue.other.replace(\"{{count}}\", count.toString());\n }\n\n if (options?.addSuffix) {\n if (options.comparison && options.comparison > 0) {\n return \"in \" + result;\n } else {\n return result + \" ago\";\n }\n }\n\n return result;\n};\n","export function buildFormatLongFn(args) {\n return (options = {}) => {\n // TODO: Remove String()\n const width = options.width ? String(options.width) : args.defaultWidth;\n const format = args.formats[width] || args.formats[args.defaultWidth];\n return format;\n };\n}\n","import { buildFormatLongFn } from \"../../_lib/buildFormatLongFn.js\";\n\nconst dateFormats = {\n full: \"EEEE, MMMM do, y\",\n long: \"MMMM do, y\",\n medium: \"MMM d, y\",\n short: \"MM/dd/yyyy\",\n};\n\nconst timeFormats = {\n full: \"h:mm:ss a zzzz\",\n long: \"h:mm:ss a z\",\n medium: \"h:mm:ss a\",\n short: \"h:mm a\",\n};\n\nconst dateTimeFormats = {\n full: \"{{date}} 'at' {{time}}\",\n long: \"{{date}} 'at' {{time}}\",\n medium: \"{{date}}, {{time}}\",\n short: \"{{date}}, {{time}}\",\n};\n\nexport const formatLong = {\n date: buildFormatLongFn({\n formats: dateFormats,\n defaultWidth: \"full\",\n }),\n\n time: buildFormatLongFn({\n formats: timeFormats,\n defaultWidth: \"full\",\n }),\n\n dateTime: buildFormatLongFn({\n formats: dateTimeFormats,\n defaultWidth: \"full\",\n }),\n};\n","const formatRelativeLocale = {\n lastWeek: \"'last' eeee 'at' p\",\n yesterday: \"'yesterday at' p\",\n today: \"'today at' p\",\n tomorrow: \"'tomorrow at' p\",\n nextWeek: \"eeee 'at' p\",\n other: \"P\",\n};\n\nexport const formatRelative = (token, _date, _baseDate, _options) =>\n formatRelativeLocale[token];\n","/**\n * The localize function argument callback which allows to convert raw value to\n * the actual type.\n *\n * @param value - The value to convert\n *\n * @returns The converted value\n */\n\n/**\n * The map of localized values for each width.\n */\n\n/**\n * The index type of the locale unit value. It types conversion of units of\n * values that don't start at 0 (i.e. quarters).\n */\n\n/**\n * Converts the unit value to the tuple of values.\n */\n\n/**\n * The tuple of localized era values. The first element represents BC,\n * the second element represents AD.\n */\n\n/**\n * The tuple of localized quarter values. The first element represents Q1.\n */\n\n/**\n * The tuple of localized day values. The first element represents Sunday.\n */\n\n/**\n * The tuple of localized month values. The first element represents January.\n */\n\nexport function buildLocalizeFn(args) {\n return (value, options) => {\n const context = options?.context ? String(options.context) : \"standalone\";\n\n let valuesArray;\n if (context === \"formatting\" && args.formattingValues) {\n const defaultWidth = args.defaultFormattingWidth || args.defaultWidth;\n const width = options?.width ? String(options.width) : defaultWidth;\n\n valuesArray =\n args.formattingValues[width] || args.formattingValues[defaultWidth];\n } else {\n const defaultWidth = args.defaultWidth;\n const width = options?.width ? String(options.width) : args.defaultWidth;\n\n valuesArray = args.values[width] || args.values[defaultWidth];\n }\n const index = args.argumentCallback ? args.argumentCallback(value) : value;\n\n // @ts-expect-error - For some reason TypeScript just don't want to match it, no matter how hard we try. I challenge you to try to remove it!\n return valuesArray[index];\n };\n}\n","import { buildLocalizeFn } from \"../../_lib/buildLocalizeFn.js\";\n\nconst eraValues = {\n narrow: [\"B\", \"A\"],\n abbreviated: [\"BC\", \"AD\"],\n wide: [\"Before Christ\", \"Anno Domini\"],\n};\n\nconst quarterValues = {\n narrow: [\"1\", \"2\", \"3\", \"4\"],\n abbreviated: [\"Q1\", \"Q2\", \"Q3\", \"Q4\"],\n wide: [\"1st quarter\", \"2nd quarter\", \"3rd quarter\", \"4th quarter\"],\n};\n\n// Note: in English, the names of days of the week and months are capitalized.\n// If you are making a new locale based on this one, check if the same is true for the language you're working on.\n// Generally, formatted dates should look like they are in the middle of a sentence,\n// e.g. in Spanish language the weekdays and months should be in the lowercase.\nconst monthValues = {\n narrow: [\"J\", \"F\", \"M\", \"A\", \"M\", \"J\", \"J\", \"A\", \"S\", \"O\", \"N\", \"D\"],\n abbreviated: [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\",\n ],\n\n wide: [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n ],\n};\n\nconst dayValues = {\n narrow: [\"S\", \"M\", \"T\", \"W\", \"T\", \"F\", \"S\"],\n short: [\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"],\n abbreviated: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n wide: [\n \"Sunday\",\n \"Monday\",\n \"Tuesday\",\n \"Wednesday\",\n \"Thursday\",\n \"Friday\",\n \"Saturday\",\n ],\n};\n\nconst dayPeriodValues = {\n narrow: {\n am: \"a\",\n pm: \"p\",\n midnight: \"mi\",\n noon: \"n\",\n morning: \"morning\",\n afternoon: \"afternoon\",\n evening: \"evening\",\n night: \"night\",\n },\n abbreviated: {\n am: \"AM\",\n pm: \"PM\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"morning\",\n afternoon: \"afternoon\",\n evening: \"evening\",\n night: \"night\",\n },\n wide: {\n am: \"a.m.\",\n pm: \"p.m.\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"morning\",\n afternoon: \"afternoon\",\n evening: \"evening\",\n night: \"night\",\n },\n};\n\nconst formattingDayPeriodValues = {\n narrow: {\n am: \"a\",\n pm: \"p\",\n midnight: \"mi\",\n noon: \"n\",\n morning: \"in the morning\",\n afternoon: \"in the afternoon\",\n evening: \"in the evening\",\n night: \"at night\",\n },\n abbreviated: {\n am: \"AM\",\n pm: \"PM\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"in the morning\",\n afternoon: \"in the afternoon\",\n evening: \"in the evening\",\n night: \"at night\",\n },\n wide: {\n am: \"a.m.\",\n pm: \"p.m.\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"in the morning\",\n afternoon: \"in the afternoon\",\n evening: \"in the evening\",\n night: \"at night\",\n },\n};\n\nconst ordinalNumber = (dirtyNumber, _options) => {\n const number = Number(dirtyNumber);\n\n // If ordinal numbers depend on context, for example,\n // if they are different for different grammatical genders,\n // use `options.unit`.\n //\n // `unit` can be 'year', 'quarter', 'month', 'week', 'date', 'dayOfYear',\n // 'day', 'hour', 'minute', 'second'.\n\n const rem100 = number % 100;\n if (rem100 > 20 || rem100 < 10) {\n switch (rem100 % 10) {\n case 1:\n return number + \"st\";\n case 2:\n return number + \"nd\";\n case 3:\n return number + \"rd\";\n }\n }\n return number + \"th\";\n};\n\nexport const localize = {\n ordinalNumber,\n\n era: buildLocalizeFn({\n values: eraValues,\n defaultWidth: \"wide\",\n }),\n\n quarter: buildLocalizeFn({\n values: quarterValues,\n defaultWidth: \"wide\",\n argumentCallback: (quarter) => quarter - 1,\n }),\n\n month: buildLocalizeFn({\n values: monthValues,\n defaultWidth: \"wide\",\n }),\n\n day: buildLocalizeFn({\n values: dayValues,\n defaultWidth: \"wide\",\n }),\n\n dayPeriod: buildLocalizeFn({\n values: dayPeriodValues,\n defaultWidth: \"wide\",\n formattingValues: formattingDayPeriodValues,\n defaultFormattingWidth: \"wide\",\n }),\n};\n","export function buildMatchFn(args) {\n return (string, options = {}) => {\n const width = options.width;\n\n const matchPattern =\n (width && args.matchPatterns[width]) ||\n args.matchPatterns[args.defaultMatchWidth];\n const matchResult = string.match(matchPattern);\n\n if (!matchResult) {\n return null;\n }\n const matchedString = matchResult[0];\n\n const parsePatterns =\n (width && args.parsePatterns[width]) ||\n args.parsePatterns[args.defaultParseWidth];\n\n const key = Array.isArray(parsePatterns)\n ? findIndex(parsePatterns, (pattern) => pattern.test(matchedString))\n : // [TODO] -- I challenge you to fix the type\n findKey(parsePatterns, (pattern) => pattern.test(matchedString));\n\n let value;\n\n value = args.valueCallback ? args.valueCallback(key) : key;\n value = options.valueCallback\n ? // [TODO] -- I challenge you to fix the type\n options.valueCallback(value)\n : value;\n\n const rest = string.slice(matchedString.length);\n\n return { value, rest };\n };\n}\n\nfunction findKey(object, predicate) {\n for (const key in object) {\n if (\n Object.prototype.hasOwnProperty.call(object, key) &&\n predicate(object[key])\n ) {\n return key;\n }\n }\n return undefined;\n}\n\nfunction findIndex(array, predicate) {\n for (let key = 0; key < array.length; key++) {\n if (predicate(array[key])) {\n return key;\n }\n }\n return undefined;\n}\n","export function buildMatchPatternFn(args) {\n return (string, options = {}) => {\n const matchResult = string.match(args.matchPattern);\n if (!matchResult) return null;\n const matchedString = matchResult[0];\n\n const parseResult = string.match(args.parsePattern);\n if (!parseResult) return null;\n let value = args.valueCallback\n ? args.valueCallback(parseResult[0])\n : parseResult[0];\n\n // [TODO] I challenge you to fix the type\n value = options.valueCallback ? options.valueCallback(value) : value;\n\n const rest = string.slice(matchedString.length);\n\n return { value, rest };\n };\n}\n","import { buildMatchFn } from \"../../_lib/buildMatchFn.js\";\nimport { buildMatchPatternFn } from \"../../_lib/buildMatchPatternFn.js\";\n\nconst matchOrdinalNumberPattern = /^(\\d+)(th|st|nd|rd)?/i;\nconst parseOrdinalNumberPattern = /\\d+/i;\n\nconst matchEraPatterns = {\n narrow: /^(b|a)/i,\n abbreviated: /^(b\\.?\\s?c\\.?|b\\.?\\s?c\\.?\\s?e\\.?|a\\.?\\s?d\\.?|c\\.?\\s?e\\.?)/i,\n wide: /^(before christ|before common era|anno domini|common era)/i,\n};\nconst parseEraPatterns = {\n any: [/^b/i, /^(a|c)/i],\n};\n\nconst matchQuarterPatterns = {\n narrow: /^[1234]/i,\n abbreviated: /^q[1234]/i,\n wide: /^[1234](th|st|nd|rd)? quarter/i,\n};\nconst parseQuarterPatterns = {\n any: [/1/i, /2/i, /3/i, /4/i],\n};\n\nconst matchMonthPatterns = {\n narrow: /^[jfmasond]/i,\n abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,\n wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i,\n};\nconst parseMonthPatterns = {\n narrow: [\n /^j/i,\n /^f/i,\n /^m/i,\n /^a/i,\n /^m/i,\n /^j/i,\n /^j/i,\n /^a/i,\n /^s/i,\n /^o/i,\n /^n/i,\n /^d/i,\n ],\n\n any: [\n /^ja/i,\n /^f/i,\n /^mar/i,\n /^ap/i,\n /^may/i,\n /^jun/i,\n /^jul/i,\n /^au/i,\n /^s/i,\n /^o/i,\n /^n/i,\n /^d/i,\n ],\n};\n\nconst matchDayPatterns = {\n narrow: /^[smtwf]/i,\n short: /^(su|mo|tu|we|th|fr|sa)/i,\n abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i,\n wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i,\n};\nconst parseDayPatterns = {\n narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i],\n any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i],\n};\n\nconst matchDayPeriodPatterns = {\n narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,\n any: /^([ap]\\.?\\s?m\\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i,\n};\nconst parseDayPeriodPatterns = {\n any: {\n am: /^a/i,\n pm: /^p/i,\n midnight: /^mi/i,\n noon: /^no/i,\n morning: /morning/i,\n afternoon: /afternoon/i,\n evening: /evening/i,\n night: /night/i,\n },\n};\n\nexport const match = {\n ordinalNumber: buildMatchPatternFn({\n matchPattern: matchOrdinalNumberPattern,\n parsePattern: parseOrdinalNumberPattern,\n valueCallback: (value) => parseInt(value, 10),\n }),\n\n era: buildMatchFn({\n matchPatterns: matchEraPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseEraPatterns,\n defaultParseWidth: \"any\",\n }),\n\n quarter: buildMatchFn({\n matchPatterns: matchQuarterPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseQuarterPatterns,\n defaultParseWidth: \"any\",\n valueCallback: (index) => index + 1,\n }),\n\n month: buildMatchFn({\n matchPatterns: matchMonthPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseMonthPatterns,\n defaultParseWidth: \"any\",\n }),\n\n day: buildMatchFn({\n matchPatterns: matchDayPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseDayPatterns,\n defaultParseWidth: \"any\",\n }),\n\n dayPeriod: buildMatchFn({\n matchPatterns: matchDayPeriodPatterns,\n defaultMatchWidth: \"any\",\n parsePatterns: parseDayPeriodPatterns,\n defaultParseWidth: \"any\",\n }),\n};\n","import { formatDistance } from \"./en-US/_lib/formatDistance.js\";\nimport { formatLong } from \"./en-US/_lib/formatLong.js\";\nimport { formatRelative } from \"./en-US/_lib/formatRelative.js\";\nimport { localize } from \"./en-US/_lib/localize.js\";\nimport { match } from \"./en-US/_lib/match.js\";\n\n/**\n * @category Locales\n * @summary English locale (United States).\n * @language English\n * @iso-639-2 eng\n * @author Sasha Koss [@kossnocorp](https://github.com/kossnocorp)\n * @author Lesha Koss [@leshakoss](https://github.com/leshakoss)\n */\nexport const enUS = {\n code: \"en-US\",\n formatDistance: formatDistance,\n formatLong: formatLong,\n formatRelative: formatRelative,\n localize: localize,\n match: match,\n options: {\n weekStartsOn: 0 /* Sunday */,\n firstWeekContainsDate: 1,\n },\n};\n\n// Fallback for modularized imports:\nexport default enUS;\n","import { differenceInCalendarDays } from \"./differenceInCalendarDays.js\";\nimport { startOfYear } from \"./startOfYear.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getDayOfYear} function options.\n */\n\n/**\n * @name getDayOfYear\n * @category Day Helpers\n * @summary Get the day of the year of the given date.\n *\n * @description\n * Get the day of the year of the given date.\n *\n * @param date - The given date\n * @param options - The options\n *\n * @returns The day of year\n *\n * @example\n * // Which day of the year is 2 July 2014?\n * const result = getDayOfYear(new Date(2014, 6, 2))\n * //=> 183\n */\nexport function getDayOfYear(date, options) {\n const _date = toDate(date, options?.in);\n const diff = differenceInCalendarDays(_date, startOfYear(_date));\n const dayOfYear = diff + 1;\n return dayOfYear;\n}\n\n// Fallback for modularized imports:\nexport default getDayOfYear;\n","import { millisecondsInWeek } from \"./constants.js\";\nimport { startOfISOWeek } from \"./startOfISOWeek.js\";\nimport { startOfISOWeekYear } from \"./startOfISOWeekYear.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getISOWeek} function options.\n */\n\n/**\n * @name getISOWeek\n * @category ISO Week Helpers\n * @summary Get the ISO week of the given date.\n *\n * @description\n * Get the ISO week of the given date.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param date - The given date\n * @param options - The options\n *\n * @returns The ISO week\n *\n * @example\n * // Which week of the ISO-week numbering year is 2 January 2005?\n * const result = getISOWeek(new Date(2005, 0, 2))\n * //=> 53\n */\nexport function getISOWeek(date, options) {\n const _date = toDate(date, options?.in);\n const diff = +startOfISOWeek(_date) - +startOfISOWeekYear(_date);\n\n // Round the number of weeks to the nearest integer because the number of\n // milliseconds in a week is not constant (e.g. it's different in the week of\n // the daylight saving time clock shift).\n return Math.round(diff / millisecondsInWeek) + 1;\n}\n\n// Fallback for modularized imports:\nexport default getISOWeek;\n","import { getDefaultOptions } from \"./_lib/defaultOptions.js\";\nimport { constructFrom } from \"./constructFrom.js\";\nimport { startOfWeek } from \"./startOfWeek.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getWeekYear} function options.\n */\n\n/**\n * @name getWeekYear\n * @category Week-Numbering Year Helpers\n * @summary Get the local week-numbering year of the given date.\n *\n * @description\n * Get the local week-numbering year of the given date.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system\n *\n * @param date - The given date\n * @param options - An object with options.\n *\n * @returns The local week-numbering year\n *\n * @example\n * // Which week numbering year is 26 December 2004 with the default settings?\n * const result = getWeekYear(new Date(2004, 11, 26))\n * //=> 2005\n *\n * @example\n * // Which week numbering year is 26 December 2004 if week starts on Saturday?\n * const result = getWeekYear(new Date(2004, 11, 26), { weekStartsOn: 6 })\n * //=> 2004\n *\n * @example\n * // Which week numbering year is 26 December 2004 if the first week contains 4 January?\n * const result = getWeekYear(new Date(2004, 11, 26), { firstWeekContainsDate: 4 })\n * //=> 2004\n */\nexport function getWeekYear(date, options) {\n const _date = toDate(date, options?.in);\n const year = _date.getFullYear();\n\n const defaultOptions = getDefaultOptions();\n const firstWeekContainsDate =\n options?.firstWeekContainsDate ??\n options?.locale?.options?.firstWeekContainsDate ??\n defaultOptions.firstWeekContainsDate ??\n defaultOptions.locale?.options?.firstWeekContainsDate ??\n 1;\n\n const firstWeekOfNextYear = constructFrom(options?.in || date, 0);\n firstWeekOfNextYear.setFullYear(year + 1, 0, firstWeekContainsDate);\n firstWeekOfNextYear.setHours(0, 0, 0, 0);\n const startOfNextYear = startOfWeek(firstWeekOfNextYear, options);\n\n const firstWeekOfThisYear = constructFrom(options?.in || date, 0);\n firstWeekOfThisYear.setFullYear(year, 0, firstWeekContainsDate);\n firstWeekOfThisYear.setHours(0, 0, 0, 0);\n const startOfThisYear = startOfWeek(firstWeekOfThisYear, options);\n\n if (+_date >= +startOfNextYear) {\n return year + 1;\n } else if (+_date >= +startOfThisYear) {\n return year;\n } else {\n return year - 1;\n }\n}\n\n// Fallback for modularized imports:\nexport default getWeekYear;\n","import { getDefaultOptions } from \"./_lib/defaultOptions.js\";\nimport { constructFrom } from \"./constructFrom.js\";\nimport { getWeekYear } from \"./getWeekYear.js\";\nimport { startOfWeek } from \"./startOfWeek.js\";\n\n/**\n * The {@link startOfWeekYear} function options.\n */\n\n/**\n * @name startOfWeekYear\n * @category Week-Numbering Year Helpers\n * @summary Return the start of a local week-numbering year for the given date.\n *\n * @description\n * Return the start of a local week-numbering year.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of a week-numbering year\n *\n * @example\n * // The start of an a week-numbering year for 2 July 2005 with default settings:\n * const result = startOfWeekYear(new Date(2005, 6, 2))\n * //=> Sun Dec 26 2004 00:00:00\n *\n * @example\n * // The start of a week-numbering year for 2 July 2005\n * // if Monday is the first day of week\n * // and 4 January is always in the first week of the year:\n * const result = startOfWeekYear(new Date(2005, 6, 2), {\n * weekStartsOn: 1,\n * firstWeekContainsDate: 4\n * })\n * //=> Mon Jan 03 2005 00:00:00\n */\nexport function startOfWeekYear(date, options) {\n const defaultOptions = getDefaultOptions();\n const firstWeekContainsDate =\n options?.firstWeekContainsDate ??\n options?.locale?.options?.firstWeekContainsDate ??\n defaultOptions.firstWeekContainsDate ??\n defaultOptions.locale?.options?.firstWeekContainsDate ??\n 1;\n\n const year = getWeekYear(date, options);\n const firstWeek = constructFrom(options?.in || date, 0);\n firstWeek.setFullYear(year, 0, firstWeekContainsDate);\n firstWeek.setHours(0, 0, 0, 0);\n const _date = startOfWeek(firstWeek, options);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfWeekYear;\n","import { millisecondsInWeek } from \"./constants.js\";\nimport { startOfWeek } from \"./startOfWeek.js\";\nimport { startOfWeekYear } from \"./startOfWeekYear.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getWeek} function options.\n */\n\n/**\n * @name getWeek\n * @category Week Helpers\n * @summary Get the local week index of the given date.\n *\n * @description\n * Get the local week index of the given date.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system\n *\n * @param date - The given date\n * @param options - An object with options\n *\n * @returns The week\n *\n * @example\n * // Which week of the local week numbering year is 2 January 2005 with default options?\n * const result = getWeek(new Date(2005, 0, 2))\n * //=> 2\n *\n * @example\n * // Which week of the local week numbering year is 2 January 2005,\n * // if Monday is the first day of the week,\n * // and the first week of the year always contains 4 January?\n * const result = getWeek(new Date(2005, 0, 2), {\n * weekStartsOn: 1,\n * firstWeekContainsDate: 4\n * })\n * //=> 53\n */\nexport function getWeek(date, options) {\n const _date = toDate(date, options?.in);\n const diff = +startOfWeek(_date, options) - +startOfWeekYear(_date, options);\n\n // Round the number of weeks to the nearest integer because the number of\n // milliseconds in a week is not constant (e.g. it's different in the week of\n // the daylight saving time clock shift).\n return Math.round(diff / millisecondsInWeek) + 1;\n}\n\n// Fallback for modularized imports:\nexport default getWeek;\n","export function addLeadingZeros(number, targetLength) {\n const sign = number < 0 ? \"-\" : \"\";\n const output = Math.abs(number).toString().padStart(targetLength, \"0\");\n return sign + output;\n}\n","import { addLeadingZeros } from \"../addLeadingZeros.js\";\n\n/*\n * | | Unit | | Unit |\n * |-----|--------------------------------|-----|--------------------------------|\n * | a | AM, PM | A* | |\n * | d | Day of month | D | |\n * | h | Hour [1-12] | H | Hour [0-23] |\n * | m | Minute | M | Month |\n * | s | Second | S | Fraction of second |\n * | y | Year (abs) | Y | |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n */\n\nexport const lightFormatters = {\n // Year\n y(date, token) {\n // From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_tokens\n // | Year | y | yy | yyy | yyyy | yyyyy |\n // |----------|-------|----|-------|-------|-------|\n // | AD 1 | 1 | 01 | 001 | 0001 | 00001 |\n // | AD 12 | 12 | 12 | 012 | 0012 | 00012 |\n // | AD 123 | 123 | 23 | 123 | 0123 | 00123 |\n // | AD 1234 | 1234 | 34 | 1234 | 1234 | 01234 |\n // | AD 12345 | 12345 | 45 | 12345 | 12345 | 12345 |\n\n const signedYear = date.getFullYear();\n // Returns 1 for 1 BC (which is year 0 in JavaScript)\n const year = signedYear > 0 ? signedYear : 1 - signedYear;\n return addLeadingZeros(token === \"yy\" ? year % 100 : year, token.length);\n },\n\n // Month\n M(date, token) {\n const month = date.getMonth();\n return token === \"M\" ? String(month + 1) : addLeadingZeros(month + 1, 2);\n },\n\n // Day of the month\n d(date, token) {\n return addLeadingZeros(date.getDate(), token.length);\n },\n\n // AM or PM\n a(date, token) {\n const dayPeriodEnumValue = date.getHours() / 12 >= 1 ? \"pm\" : \"am\";\n\n switch (token) {\n case \"a\":\n case \"aa\":\n return dayPeriodEnumValue.toUpperCase();\n case \"aaa\":\n return dayPeriodEnumValue;\n case \"aaaaa\":\n return dayPeriodEnumValue[0];\n case \"aaaa\":\n default:\n return dayPeriodEnumValue === \"am\" ? \"a.m.\" : \"p.m.\";\n }\n },\n\n // Hour [1-12]\n h(date, token) {\n return addLeadingZeros(date.getHours() % 12 || 12, token.length);\n },\n\n // Hour [0-23]\n H(date, token) {\n return addLeadingZeros(date.getHours(), token.length);\n },\n\n // Minute\n m(date, token) {\n return addLeadingZeros(date.getMinutes(), token.length);\n },\n\n // Second\n s(date, token) {\n return addLeadingZeros(date.getSeconds(), token.length);\n },\n\n // Fraction of second\n S(date, token) {\n const numberOfDigits = token.length;\n const milliseconds = date.getMilliseconds();\n const fractionalSeconds = Math.trunc(\n milliseconds * Math.pow(10, numberOfDigits - 3),\n );\n return addLeadingZeros(fractionalSeconds, token.length);\n },\n};\n","import { getDayOfYear } from \"../../getDayOfYear.js\";\nimport { getISOWeek } from \"../../getISOWeek.js\";\nimport { getISOWeekYear } from \"../../getISOWeekYear.js\";\nimport { getWeek } from \"../../getWeek.js\";\nimport { getWeekYear } from \"../../getWeekYear.js\";\n\nimport { addLeadingZeros } from \"../addLeadingZeros.js\";\nimport { lightFormatters } from \"./lightFormatters.js\";\n\nconst dayPeriodEnum = {\n am: \"am\",\n pm: \"pm\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"morning\",\n afternoon: \"afternoon\",\n evening: \"evening\",\n night: \"night\",\n};\n\n/*\n * | | Unit | | Unit |\n * |-----|--------------------------------|-----|--------------------------------|\n * | a | AM, PM | A* | Milliseconds in day |\n * | b | AM, PM, noon, midnight | B | Flexible day period |\n * | c | Stand-alone local day of week | C* | Localized hour w/ day period |\n * | d | Day of month | D | Day of year |\n * | e | Local day of week | E | Day of week |\n * | f | | F* | Day of week in month |\n * | g* | Modified Julian day | G | Era |\n * | h | Hour [1-12] | H | Hour [0-23] |\n * | i! | ISO day of week | I! | ISO week of year |\n * | j* | Localized hour w/ day period | J* | Localized hour w/o day period |\n * | k | Hour [1-24] | K | Hour [0-11] |\n * | l* | (deprecated) | L | Stand-alone month |\n * | m | Minute | M | Month |\n * | n | | N | |\n * | o! | Ordinal number modifier | O | Timezone (GMT) |\n * | p! | Long localized time | P! | Long localized date |\n * | q | Stand-alone quarter | Q | Quarter |\n * | r* | Related Gregorian year | R! | ISO week-numbering year |\n * | s | Second | S | Fraction of second |\n * | t! | Seconds timestamp | T! | Milliseconds timestamp |\n * | u | Extended year | U* | Cyclic year |\n * | v* | Timezone (generic non-locat.) | V* | Timezone (location) |\n * | w | Local week of year | W* | Week of month |\n * | x | Timezone (ISO-8601 w/o Z) | X | Timezone (ISO-8601) |\n * | y | Year (abs) | Y | Local week-numbering year |\n * | z | Timezone (specific non-locat.) | Z* | Timezone (aliases) |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n *\n * Letters marked by ! are non-standard, but implemented by date-fns:\n * - `o` modifies the previous token to turn it into an ordinal (see `format` docs)\n * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days,\n * i.e. 7 for Sunday, 1 for Monday, etc.\n * - `I` is ISO week of year, as opposed to `w` which is local week of year.\n * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year.\n * `R` is supposed to be used in conjunction with `I` and `i`\n * for universal ISO week-numbering date, whereas\n * `Y` is supposed to be used in conjunction with `w` and `e`\n * for week-numbering date specific to the locale.\n * - `P` is long localized date format\n * - `p` is long localized time format\n */\n\nexport const formatters = {\n // Era\n G: function (date, token, localize) {\n const era = date.getFullYear() > 0 ? 1 : 0;\n switch (token) {\n // AD, BC\n case \"G\":\n case \"GG\":\n case \"GGG\":\n return localize.era(era, { width: \"abbreviated\" });\n // A, B\n case \"GGGGG\":\n return localize.era(era, { width: \"narrow\" });\n // Anno Domini, Before Christ\n case \"GGGG\":\n default:\n return localize.era(era, { width: \"wide\" });\n }\n },\n\n // Year\n y: function (date, token, localize) {\n // Ordinal number\n if (token === \"yo\") {\n const signedYear = date.getFullYear();\n // Returns 1 for 1 BC (which is year 0 in JavaScript)\n const year = signedYear > 0 ? signedYear : 1 - signedYear;\n return localize.ordinalNumber(year, { unit: \"year\" });\n }\n\n return lightFormatters.y(date, token);\n },\n\n // Local week-numbering year\n Y: function (date, token, localize, options) {\n const signedWeekYear = getWeekYear(date, options);\n // Returns 1 for 1 BC (which is year 0 in JavaScript)\n const weekYear = signedWeekYear > 0 ? signedWeekYear : 1 - signedWeekYear;\n\n // Two digit year\n if (token === \"YY\") {\n const twoDigitYear = weekYear % 100;\n return addLeadingZeros(twoDigitYear, 2);\n }\n\n // Ordinal number\n if (token === \"Yo\") {\n return localize.ordinalNumber(weekYear, { unit: \"year\" });\n }\n\n // Padding\n return addLeadingZeros(weekYear, token.length);\n },\n\n // ISO week-numbering year\n R: function (date, token) {\n const isoWeekYear = getISOWeekYear(date);\n\n // Padding\n return addLeadingZeros(isoWeekYear, token.length);\n },\n\n // Extended year. This is a single number designating the year of this calendar system.\n // The main difference between `y` and `u` localizers are B.C. years:\n // | Year | `y` | `u` |\n // |------|-----|-----|\n // | AC 1 | 1 | 1 |\n // | BC 1 | 1 | 0 |\n // | BC 2 | 2 | -1 |\n // Also `yy` always returns the last two digits of a year,\n // while `uu` pads single digit years to 2 characters and returns other years unchanged.\n u: function (date, token) {\n const year = date.getFullYear();\n return addLeadingZeros(year, token.length);\n },\n\n // Quarter\n Q: function (date, token, localize) {\n const quarter = Math.ceil((date.getMonth() + 1) / 3);\n switch (token) {\n // 1, 2, 3, 4\n case \"Q\":\n return String(quarter);\n // 01, 02, 03, 04\n case \"QQ\":\n return addLeadingZeros(quarter, 2);\n // 1st, 2nd, 3rd, 4th\n case \"Qo\":\n return localize.ordinalNumber(quarter, { unit: \"quarter\" });\n // Q1, Q2, Q3, Q4\n case \"QQQ\":\n return localize.quarter(quarter, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n case \"QQQQQ\":\n return localize.quarter(quarter, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // 1st quarter, 2nd quarter, ...\n case \"QQQQ\":\n default:\n return localize.quarter(quarter, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // Stand-alone quarter\n q: function (date, token, localize) {\n const quarter = Math.ceil((date.getMonth() + 1) / 3);\n switch (token) {\n // 1, 2, 3, 4\n case \"q\":\n return String(quarter);\n // 01, 02, 03, 04\n case \"qq\":\n return addLeadingZeros(quarter, 2);\n // 1st, 2nd, 3rd, 4th\n case \"qo\":\n return localize.ordinalNumber(quarter, { unit: \"quarter\" });\n // Q1, Q2, Q3, Q4\n case \"qqq\":\n return localize.quarter(quarter, {\n width: \"abbreviated\",\n context: \"standalone\",\n });\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n case \"qqqqq\":\n return localize.quarter(quarter, {\n width: \"narrow\",\n context: \"standalone\",\n });\n // 1st quarter, 2nd quarter, ...\n case \"qqqq\":\n default:\n return localize.quarter(quarter, {\n width: \"wide\",\n context: \"standalone\",\n });\n }\n },\n\n // Month\n M: function (date, token, localize) {\n const month = date.getMonth();\n switch (token) {\n case \"M\":\n case \"MM\":\n return lightFormatters.M(date, token);\n // 1st, 2nd, ..., 12th\n case \"Mo\":\n return localize.ordinalNumber(month + 1, { unit: \"month\" });\n // Jan, Feb, ..., Dec\n case \"MMM\":\n return localize.month(month, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n // J, F, ..., D\n case \"MMMMM\":\n return localize.month(month, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // January, February, ..., December\n case \"MMMM\":\n default:\n return localize.month(month, { width: \"wide\", context: \"formatting\" });\n }\n },\n\n // Stand-alone month\n L: function (date, token, localize) {\n const month = date.getMonth();\n switch (token) {\n // 1, 2, ..., 12\n case \"L\":\n return String(month + 1);\n // 01, 02, ..., 12\n case \"LL\":\n return addLeadingZeros(month + 1, 2);\n // 1st, 2nd, ..., 12th\n case \"Lo\":\n return localize.ordinalNumber(month + 1, { unit: \"month\" });\n // Jan, Feb, ..., Dec\n case \"LLL\":\n return localize.month(month, {\n width: \"abbreviated\",\n context: \"standalone\",\n });\n // J, F, ..., D\n case \"LLLLL\":\n return localize.month(month, {\n width: \"narrow\",\n context: \"standalone\",\n });\n // January, February, ..., December\n case \"LLLL\":\n default:\n return localize.month(month, { width: \"wide\", context: \"standalone\" });\n }\n },\n\n // Local week of year\n w: function (date, token, localize, options) {\n const week = getWeek(date, options);\n\n if (token === \"wo\") {\n return localize.ordinalNumber(week, { unit: \"week\" });\n }\n\n return addLeadingZeros(week, token.length);\n },\n\n // ISO week of year\n I: function (date, token, localize) {\n const isoWeek = getISOWeek(date);\n\n if (token === \"Io\") {\n return localize.ordinalNumber(isoWeek, { unit: \"week\" });\n }\n\n return addLeadingZeros(isoWeek, token.length);\n },\n\n // Day of the month\n d: function (date, token, localize) {\n if (token === \"do\") {\n return localize.ordinalNumber(date.getDate(), { unit: \"date\" });\n }\n\n return lightFormatters.d(date, token);\n },\n\n // Day of year\n D: function (date, token, localize) {\n const dayOfYear = getDayOfYear(date);\n\n if (token === \"Do\") {\n return localize.ordinalNumber(dayOfYear, { unit: \"dayOfYear\" });\n }\n\n return addLeadingZeros(dayOfYear, token.length);\n },\n\n // Day of week\n E: function (date, token, localize) {\n const dayOfWeek = date.getDay();\n switch (token) {\n // Tue\n case \"E\":\n case \"EE\":\n case \"EEE\":\n return localize.day(dayOfWeek, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n // T\n case \"EEEEE\":\n return localize.day(dayOfWeek, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // Tu\n case \"EEEEEE\":\n return localize.day(dayOfWeek, {\n width: \"short\",\n context: \"formatting\",\n });\n // Tuesday\n case \"EEEE\":\n default:\n return localize.day(dayOfWeek, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // Local day of week\n e: function (date, token, localize, options) {\n const dayOfWeek = date.getDay();\n const localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;\n switch (token) {\n // Numerical value (Nth day of week with current locale or weekStartsOn)\n case \"e\":\n return String(localDayOfWeek);\n // Padded numerical value\n case \"ee\":\n return addLeadingZeros(localDayOfWeek, 2);\n // 1st, 2nd, ..., 7th\n case \"eo\":\n return localize.ordinalNumber(localDayOfWeek, { unit: \"day\" });\n case \"eee\":\n return localize.day(dayOfWeek, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n // T\n case \"eeeee\":\n return localize.day(dayOfWeek, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // Tu\n case \"eeeeee\":\n return localize.day(dayOfWeek, {\n width: \"short\",\n context: \"formatting\",\n });\n // Tuesday\n case \"eeee\":\n default:\n return localize.day(dayOfWeek, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // Stand-alone local day of week\n c: function (date, token, localize, options) {\n const dayOfWeek = date.getDay();\n const localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;\n switch (token) {\n // Numerical value (same as in `e`)\n case \"c\":\n return String(localDayOfWeek);\n // Padded numerical value\n case \"cc\":\n return addLeadingZeros(localDayOfWeek, token.length);\n // 1st, 2nd, ..., 7th\n case \"co\":\n return localize.ordinalNumber(localDayOfWeek, { unit: \"day\" });\n case \"ccc\":\n return localize.day(dayOfWeek, {\n width: \"abbreviated\",\n context: \"standalone\",\n });\n // T\n case \"ccccc\":\n return localize.day(dayOfWeek, {\n width: \"narrow\",\n context: \"standalone\",\n });\n // Tu\n case \"cccccc\":\n return localize.day(dayOfWeek, {\n width: \"short\",\n context: \"standalone\",\n });\n // Tuesday\n case \"cccc\":\n default:\n return localize.day(dayOfWeek, {\n width: \"wide\",\n context: \"standalone\",\n });\n }\n },\n\n // ISO day of week\n i: function (date, token, localize) {\n const dayOfWeek = date.getDay();\n const isoDayOfWeek = dayOfWeek === 0 ? 7 : dayOfWeek;\n switch (token) {\n // 2\n case \"i\":\n return String(isoDayOfWeek);\n // 02\n case \"ii\":\n return addLeadingZeros(isoDayOfWeek, token.length);\n // 2nd\n case \"io\":\n return localize.ordinalNumber(isoDayOfWeek, { unit: \"day\" });\n // Tue\n case \"iii\":\n return localize.day(dayOfWeek, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n // T\n case \"iiiii\":\n return localize.day(dayOfWeek, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // Tu\n case \"iiiiii\":\n return localize.day(dayOfWeek, {\n width: \"short\",\n context: \"formatting\",\n });\n // Tuesday\n case \"iiii\":\n default:\n return localize.day(dayOfWeek, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // AM or PM\n a: function (date, token, localize) {\n const hours = date.getHours();\n const dayPeriodEnumValue = hours / 12 >= 1 ? \"pm\" : \"am\";\n\n switch (token) {\n case \"a\":\n case \"aa\":\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n case \"aaa\":\n return localize\n .dayPeriod(dayPeriodEnumValue, {\n width: \"abbreviated\",\n context: \"formatting\",\n })\n .toLowerCase();\n case \"aaaaa\":\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"narrow\",\n context: \"formatting\",\n });\n case \"aaaa\":\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // AM, PM, midnight, noon\n b: function (date, token, localize) {\n const hours = date.getHours();\n let dayPeriodEnumValue;\n if (hours === 12) {\n dayPeriodEnumValue = dayPeriodEnum.noon;\n } else if (hours === 0) {\n dayPeriodEnumValue = dayPeriodEnum.midnight;\n } else {\n dayPeriodEnumValue = hours / 12 >= 1 ? \"pm\" : \"am\";\n }\n\n switch (token) {\n case \"b\":\n case \"bb\":\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n case \"bbb\":\n return localize\n .dayPeriod(dayPeriodEnumValue, {\n width: \"abbreviated\",\n context: \"formatting\",\n })\n .toLowerCase();\n case \"bbbbb\":\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"narrow\",\n context: \"formatting\",\n });\n case \"bbbb\":\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // in the morning, in the afternoon, in the evening, at night\n B: function (date, token, localize) {\n const hours = date.getHours();\n let dayPeriodEnumValue;\n if (hours >= 17) {\n dayPeriodEnumValue = dayPeriodEnum.evening;\n } else if (hours >= 12) {\n dayPeriodEnumValue = dayPeriodEnum.afternoon;\n } else if (hours >= 4) {\n dayPeriodEnumValue = dayPeriodEnum.morning;\n } else {\n dayPeriodEnumValue = dayPeriodEnum.night;\n }\n\n switch (token) {\n case \"B\":\n case \"BB\":\n case \"BBB\":\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n case \"BBBBB\":\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"narrow\",\n context: \"formatting\",\n });\n case \"BBBB\":\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // Hour [1-12]\n h: function (date, token, localize) {\n if (token === \"ho\") {\n let hours = date.getHours() % 12;\n if (hours === 0) hours = 12;\n return localize.ordinalNumber(hours, { unit: \"hour\" });\n }\n\n return lightFormatters.h(date, token);\n },\n\n // Hour [0-23]\n H: function (date, token, localize) {\n if (token === \"Ho\") {\n return localize.ordinalNumber(date.getHours(), { unit: \"hour\" });\n }\n\n return lightFormatters.H(date, token);\n },\n\n // Hour [0-11]\n K: function (date, token, localize) {\n const hours = date.getHours() % 12;\n\n if (token === \"Ko\") {\n return localize.ordinalNumber(hours, { unit: \"hour\" });\n }\n\n return addLeadingZeros(hours, token.length);\n },\n\n // Hour [1-24]\n k: function (date, token, localize) {\n let hours = date.getHours();\n if (hours === 0) hours = 24;\n\n if (token === \"ko\") {\n return localize.ordinalNumber(hours, { unit: \"hour\" });\n }\n\n return addLeadingZeros(hours, token.length);\n },\n\n // Minute\n m: function (date, token, localize) {\n if (token === \"mo\") {\n return localize.ordinalNumber(date.getMinutes(), { unit: \"minute\" });\n }\n\n return lightFormatters.m(date, token);\n },\n\n // Second\n s: function (date, token, localize) {\n if (token === \"so\") {\n return localize.ordinalNumber(date.getSeconds(), { unit: \"second\" });\n }\n\n return lightFormatters.s(date, token);\n },\n\n // Fraction of second\n S: function (date, token) {\n return lightFormatters.S(date, token);\n },\n\n // Timezone (ISO-8601. If offset is 0, output is always `'Z'`)\n X: function (date, token, _localize) {\n const timezoneOffset = date.getTimezoneOffset();\n\n if (timezoneOffset === 0) {\n return \"Z\";\n }\n\n switch (token) {\n // Hours and optional minutes\n case \"X\":\n return formatTimezoneWithOptionalMinutes(timezoneOffset);\n\n // Hours, minutes and optional seconds without `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `XX`\n case \"XXXX\":\n case \"XX\": // Hours and minutes without `:` delimiter\n return formatTimezone(timezoneOffset);\n\n // Hours, minutes and optional seconds with `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `XXX`\n case \"XXXXX\":\n case \"XXX\": // Hours and minutes with `:` delimiter\n default:\n return formatTimezone(timezoneOffset, \":\");\n }\n },\n\n // Timezone (ISO-8601. If offset is 0, output is `'+00:00'` or equivalent)\n x: function (date, token, _localize) {\n const timezoneOffset = date.getTimezoneOffset();\n\n switch (token) {\n // Hours and optional minutes\n case \"x\":\n return formatTimezoneWithOptionalMinutes(timezoneOffset);\n\n // Hours, minutes and optional seconds without `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `xx`\n case \"xxxx\":\n case \"xx\": // Hours and minutes without `:` delimiter\n return formatTimezone(timezoneOffset);\n\n // Hours, minutes and optional seconds with `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `xxx`\n case \"xxxxx\":\n case \"xxx\": // Hours and minutes with `:` delimiter\n default:\n return formatTimezone(timezoneOffset, \":\");\n }\n },\n\n // Timezone (GMT)\n O: function (date, token, _localize) {\n const timezoneOffset = date.getTimezoneOffset();\n\n switch (token) {\n // Short\n case \"O\":\n case \"OO\":\n case \"OOO\":\n return \"GMT\" + formatTimezoneShort(timezoneOffset, \":\");\n // Long\n case \"OOOO\":\n default:\n return \"GMT\" + formatTimezone(timezoneOffset, \":\");\n }\n },\n\n // Timezone (specific non-location)\n z: function (date, token, _localize) {\n const timezoneOffset = date.getTimezoneOffset();\n\n switch (token) {\n // Short\n case \"z\":\n case \"zz\":\n case \"zzz\":\n return \"GMT\" + formatTimezoneShort(timezoneOffset, \":\");\n // Long\n case \"zzzz\":\n default:\n return \"GMT\" + formatTimezone(timezoneOffset, \":\");\n }\n },\n\n // Seconds timestamp\n t: function (date, token, _localize) {\n const timestamp = Math.trunc(+date / 1000);\n return addLeadingZeros(timestamp, token.length);\n },\n\n // Milliseconds timestamp\n T: function (date, token, _localize) {\n return addLeadingZeros(+date, token.length);\n },\n};\n\nfunction formatTimezoneShort(offset, delimiter = \"\") {\n const sign = offset > 0 ? \"-\" : \"+\";\n const absOffset = Math.abs(offset);\n const hours = Math.trunc(absOffset / 60);\n const minutes = absOffset % 60;\n if (minutes === 0) {\n return sign + String(hours);\n }\n return sign + String(hours) + delimiter + addLeadingZeros(minutes, 2);\n}\n\nfunction formatTimezoneWithOptionalMinutes(offset, delimiter) {\n if (offset % 60 === 0) {\n const sign = offset > 0 ? \"-\" : \"+\";\n return sign + addLeadingZeros(Math.abs(offset) / 60, 2);\n }\n return formatTimezone(offset, delimiter);\n}\n\nfunction formatTimezone(offset, delimiter = \"\") {\n const sign = offset > 0 ? \"-\" : \"+\";\n const absOffset = Math.abs(offset);\n const hours = addLeadingZeros(Math.trunc(absOffset / 60), 2);\n const minutes = addLeadingZeros(absOffset % 60, 2);\n return sign + hours + delimiter + minutes;\n}\n","const dateLongFormatter = (pattern, formatLong) => {\n switch (pattern) {\n case \"P\":\n return formatLong.date({ width: \"short\" });\n case \"PP\":\n return formatLong.date({ width: \"medium\" });\n case \"PPP\":\n return formatLong.date({ width: \"long\" });\n case \"PPPP\":\n default:\n return formatLong.date({ width: \"full\" });\n }\n};\n\nconst timeLongFormatter = (pattern, formatLong) => {\n switch (pattern) {\n case \"p\":\n return formatLong.time({ width: \"short\" });\n case \"pp\":\n return formatLong.time({ width: \"medium\" });\n case \"ppp\":\n return formatLong.time({ width: \"long\" });\n case \"pppp\":\n default:\n return formatLong.time({ width: \"full\" });\n }\n};\n\nconst dateTimeLongFormatter = (pattern, formatLong) => {\n const matchResult = pattern.match(/(P+)(p+)?/) || [];\n const datePattern = matchResult[1];\n const timePattern = matchResult[2];\n\n if (!timePattern) {\n return dateLongFormatter(pattern, formatLong);\n }\n\n let dateTimeFormat;\n\n switch (datePattern) {\n case \"P\":\n dateTimeFormat = formatLong.dateTime({ width: \"short\" });\n break;\n case \"PP\":\n dateTimeFormat = formatLong.dateTime({ width: \"medium\" });\n break;\n case \"PPP\":\n dateTimeFormat = formatLong.dateTime({ width: \"long\" });\n break;\n case \"PPPP\":\n default:\n dateTimeFormat = formatLong.dateTime({ width: \"full\" });\n break;\n }\n\n return dateTimeFormat\n .replace(\"{{date}}\", dateLongFormatter(datePattern, formatLong))\n .replace(\"{{time}}\", timeLongFormatter(timePattern, formatLong));\n};\n\nexport const longFormatters = {\n p: timeLongFormatter,\n P: dateTimeLongFormatter,\n};\n","const dayOfYearTokenRE = /^D+$/;\nconst weekYearTokenRE = /^Y+$/;\n\nconst throwTokens = [\"D\", \"DD\", \"YY\", \"YYYY\"];\n\nexport function isProtectedDayOfYearToken(token) {\n return dayOfYearTokenRE.test(token);\n}\n\nexport function isProtectedWeekYearToken(token) {\n return weekYearTokenRE.test(token);\n}\n\nexport function warnOrThrowProtectedError(token, format, input) {\n const _message = message(token, format, input);\n console.warn(_message);\n if (throwTokens.includes(token)) throw new RangeError(_message);\n}\n\nfunction message(token, format, input) {\n const subject = token[0] === \"Y\" ? \"years\" : \"days of the month\";\n return `Use \\`${token.toLowerCase()}\\` instead of \\`${token}\\` (in \\`${format}\\`) for formatting ${subject} to the input \\`${input}\\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`;\n}\n","import { defaultLocale } from \"./_lib/defaultLocale.js\";\nimport { getDefaultOptions } from \"./_lib/defaultOptions.js\";\nimport { formatters } from \"./_lib/format/formatters.js\";\nimport { longFormatters } from \"./_lib/format/longFormatters.js\";\nimport {\n isProtectedDayOfYearToken,\n isProtectedWeekYearToken,\n warnOrThrowProtectedError,\n} from \"./_lib/protectedTokens.js\";\nimport { isValid } from \"./isValid.js\";\nimport { toDate } from \"./toDate.js\";\n\n// Rexports of internal for libraries to use.\n// See: https://github.com/date-fns/date-fns/issues/3638#issuecomment-1877082874\nexport { formatters, longFormatters };\n\n// This RegExp consists of three parts separated by `|`:\n// - [yYQqMLwIdDecihHKkms]o matches any available ordinal number token\n// (one of the certain letters followed by `o`)\n// - (\\w)\\1* matches any sequences of the same letter\n// - '' matches two quote characters in a row\n// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('),\n// except a single quote symbol, which ends the sequence.\n// Two quote characters do not end the sequence.\n// If there is no matching single quote\n// then the sequence will continue until the end of the string.\n// - . matches any single character unmatched by previous parts of the RegExps\nconst formattingTokensRegExp =\n /[yYQqMLwIdDecihHKkms]o|(\\w)\\1*|''|'(''|[^'])+('|$)|./g;\n\n// This RegExp catches symbols escaped by quotes, and also\n// sequences of symbols P, p, and the combinations like `PPPPPPPppppp`\nconst longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g;\n\nconst escapedStringRegExp = /^'([^]*?)'?$/;\nconst doubleQuoteRegExp = /''/g;\nconst unescapedLatinCharacterRegExp = /[a-zA-Z]/;\n\nexport { format as formatDate };\n\n/**\n * The {@link format} function options.\n */\n\n/**\n * @name format\n * @alias formatDate\n * @category Common Helpers\n * @summary Format the date.\n *\n * @description\n * Return the formatted date string in the given format. The result may vary by locale.\n *\n * > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries.\n * > See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * The characters wrapped between two single quotes characters (') are escaped.\n * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.\n * (see the last example)\n *\n * Format of the string is based on Unicode Technical Standard #35:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * with a few additions (see note 7 below the table).\n *\n * Accepted patterns:\n * | Unit | Pattern | Result examples | Notes |\n * |---------------------------------|---------|-----------------------------------|-------|\n * | Era | G..GGG | AD, BC | |\n * | | GGGG | Anno Domini, Before Christ | 2 |\n * | | GGGGG | A, B | |\n * | Calendar year | y | 44, 1, 1900, 2017 | 5 |\n * | | yo | 44th, 1st, 0th, 17th | 5,7 |\n * | | yy | 44, 01, 00, 17 | 5 |\n * | | yyy | 044, 001, 1900, 2017 | 5 |\n * | | yyyy | 0044, 0001, 1900, 2017 | 5 |\n * | | yyyyy | ... | 3,5 |\n * | Local week-numbering year | Y | 44, 1, 1900, 2017 | 5 |\n * | | Yo | 44th, 1st, 1900th, 2017th | 5,7 |\n * | | YY | 44, 01, 00, 17 | 5,8 |\n * | | YYY | 044, 001, 1900, 2017 | 5 |\n * | | YYYY | 0044, 0001, 1900, 2017 | 5,8 |\n * | | YYYYY | ... | 3,5 |\n * | ISO week-numbering year | R | -43, 0, 1, 1900, 2017 | 5,7 |\n * | | RR | -43, 00, 01, 1900, 2017 | 5,7 |\n * | | RRR | -043, 000, 001, 1900, 2017 | 5,7 |\n * | | RRRR | -0043, 0000, 0001, 1900, 2017 | 5,7 |\n * | | RRRRR | ... | 3,5,7 |\n * | Extended year | u | -43, 0, 1, 1900, 2017 | 5 |\n * | | uu | -43, 01, 1900, 2017 | 5 |\n * | | uuu | -043, 001, 1900, 2017 | 5 |\n * | | uuuu | -0043, 0001, 1900, 2017 | 5 |\n * | | uuuuu | ... | 3,5 |\n * | Quarter (formatting) | Q | 1, 2, 3, 4 | |\n * | | Qo | 1st, 2nd, 3rd, 4th | 7 |\n * | | QQ | 01, 02, 03, 04 | |\n * | | QQQ | Q1, Q2, Q3, Q4 | |\n * | | QQQQ | 1st quarter, 2nd quarter, ... | 2 |\n * | | QQQQQ | 1, 2, 3, 4 | 4 |\n * | Quarter (stand-alone) | q | 1, 2, 3, 4 | |\n * | | qo | 1st, 2nd, 3rd, 4th | 7 |\n * | | qq | 01, 02, 03, 04 | |\n * | | qqq | Q1, Q2, Q3, Q4 | |\n * | | qqqq | 1st quarter, 2nd quarter, ... | 2 |\n * | | qqqqq | 1, 2, 3, 4 | 4 |\n * | Month (formatting) | M | 1, 2, ..., 12 | |\n * | | Mo | 1st, 2nd, ..., 12th | 7 |\n * | | MM | 01, 02, ..., 12 | |\n * | | MMM | Jan, Feb, ..., Dec | |\n * | | MMMM | January, February, ..., December | 2 |\n * | | MMMMM | J, F, ..., D | |\n * | Month (stand-alone) | L | 1, 2, ..., 12 | |\n * | | Lo | 1st, 2nd, ..., 12th | 7 |\n * | | LL | 01, 02, ..., 12 | |\n * | | LLL | Jan, Feb, ..., Dec | |\n * | | LLLL | January, February, ..., December | 2 |\n * | | LLLLL | J, F, ..., D | |\n * | Local week of year | w | 1, 2, ..., 53 | |\n * | | wo | 1st, 2nd, ..., 53th | 7 |\n * | | ww | 01, 02, ..., 53 | |\n * | ISO week of year | I | 1, 2, ..., 53 | 7 |\n * | | Io | 1st, 2nd, ..., 53th | 7 |\n * | | II | 01, 02, ..., 53 | 7 |\n * | Day of month | d | 1, 2, ..., 31 | |\n * | | do | 1st, 2nd, ..., 31st | 7 |\n * | | dd | 01, 02, ..., 31 | |\n * | Day of year | D | 1, 2, ..., 365, 366 | 9 |\n * | | Do | 1st, 2nd, ..., 365th, 366th | 7 |\n * | | DD | 01, 02, ..., 365, 366 | 9 |\n * | | DDD | 001, 002, ..., 365, 366 | |\n * | | DDDD | ... | 3 |\n * | Day of week (formatting) | E..EEE | Mon, Tue, Wed, ..., Sun | |\n * | | EEEE | Monday, Tuesday, ..., Sunday | 2 |\n * | | EEEEE | M, T, W, T, F, S, S | |\n * | | EEEEEE | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | ISO day of week (formatting) | i | 1, 2, 3, ..., 7 | 7 |\n * | | io | 1st, 2nd, ..., 7th | 7 |\n * | | ii | 01, 02, ..., 07 | 7 |\n * | | iii | Mon, Tue, Wed, ..., Sun | 7 |\n * | | iiii | Monday, Tuesday, ..., Sunday | 2,7 |\n * | | iiiii | M, T, W, T, F, S, S | 7 |\n * | | iiiiii | Mo, Tu, We, Th, Fr, Sa, Su | 7 |\n * | Local day of week (formatting) | e | 2, 3, 4, ..., 1 | |\n * | | eo | 2nd, 3rd, ..., 1st | 7 |\n * | | ee | 02, 03, ..., 01 | |\n * | | eee | Mon, Tue, Wed, ..., Sun | |\n * | | eeee | Monday, Tuesday, ..., Sunday | 2 |\n * | | eeeee | M, T, W, T, F, S, S | |\n * | | eeeeee | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | Local day of week (stand-alone) | c | 2, 3, 4, ..., 1 | |\n * | | co | 2nd, 3rd, ..., 1st | 7 |\n * | | cc | 02, 03, ..., 01 | |\n * | | ccc | Mon, Tue, Wed, ..., Sun | |\n * | | cccc | Monday, Tuesday, ..., Sunday | 2 |\n * | | ccccc | M, T, W, T, F, S, S | |\n * | | cccccc | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | AM, PM | a..aa | AM, PM | |\n * | | aaa | am, pm | |\n * | | aaaa | a.m., p.m. | 2 |\n * | | aaaaa | a, p | |\n * | AM, PM, noon, midnight | b..bb | AM, PM, noon, midnight | |\n * | | bbb | am, pm, noon, midnight | |\n * | | bbbb | a.m., p.m., noon, midnight | 2 |\n * | | bbbbb | a, p, n, mi | |\n * | Flexible day period | B..BBB | at night, in the morning, ... | |\n * | | BBBB | at night, in the morning, ... | 2 |\n * | | BBBBB | at night, in the morning, ... | |\n * | Hour [1-12] | h | 1, 2, ..., 11, 12 | |\n * | | ho | 1st, 2nd, ..., 11th, 12th | 7 |\n * | | hh | 01, 02, ..., 11, 12 | |\n * | Hour [0-23] | H | 0, 1, 2, ..., 23 | |\n * | | Ho | 0th, 1st, 2nd, ..., 23rd | 7 |\n * | | HH | 00, 01, 02, ..., 23 | |\n * | Hour [0-11] | K | 1, 2, ..., 11, 0 | |\n * | | Ko | 1st, 2nd, ..., 11th, 0th | 7 |\n * | | KK | 01, 02, ..., 11, 00 | |\n * | Hour [1-24] | k | 24, 1, 2, ..., 23 | |\n * | | ko | 24th, 1st, 2nd, ..., 23rd | 7 |\n * | | kk | 24, 01, 02, ..., 23 | |\n * | Minute | m | 0, 1, ..., 59 | |\n * | | mo | 0th, 1st, ..., 59th | 7 |\n * | | mm | 00, 01, ..., 59 | |\n * | Second | s | 0, 1, ..., 59 | |\n * | | so | 0th, 1st, ..., 59th | 7 |\n * | | ss | 00, 01, ..., 59 | |\n * | Fraction of second | S | 0, 1, ..., 9 | |\n * | | SS | 00, 01, ..., 99 | |\n * | | SSS | 000, 001, ..., 999 | |\n * | | SSSS | ... | 3 |\n * | Timezone (ISO-8601 w/ Z) | X | -08, +0530, Z | |\n * | | XX | -0800, +0530, Z | |\n * | | XXX | -08:00, +05:30, Z | |\n * | | XXXX | -0800, +0530, Z, +123456 | 2 |\n * | | XXXXX | -08:00, +05:30, Z, +12:34:56 | |\n * | Timezone (ISO-8601 w/o Z) | x | -08, +0530, +00 | |\n * | | xx | -0800, +0530, +0000 | |\n * | | xxx | -08:00, +05:30, +00:00 | 2 |\n * | | xxxx | -0800, +0530, +0000, +123456 | |\n * | | xxxxx | -08:00, +05:30, +00:00, +12:34:56 | |\n * | Timezone (GMT) | O...OOO | GMT-8, GMT+5:30, GMT+0 | |\n * | | OOOO | GMT-08:00, GMT+05:30, GMT+00:00 | 2 |\n * | Timezone (specific non-locat.) | z...zzz | GMT-8, GMT+5:30, GMT+0 | 6 |\n * | | zzzz | GMT-08:00, GMT+05:30, GMT+00:00 | 2,6 |\n * | Seconds timestamp | t | 512969520 | 7 |\n * | | tt | ... | 3,7 |\n * | Milliseconds timestamp | T | 512969520900 | 7 |\n * | | TT | ... | 3,7 |\n * | Long localized date | P | 04/29/1453 | 7 |\n * | | PP | Apr 29, 1453 | 7 |\n * | | PPP | April 29th, 1453 | 7 |\n * | | PPPP | Friday, April 29th, 1453 | 2,7 |\n * | Long localized time | p | 12:00 AM | 7 |\n * | | pp | 12:00:00 AM | 7 |\n * | | ppp | 12:00:00 AM GMT+2 | 7 |\n * | | pppp | 12:00:00 AM GMT+02:00 | 2,7 |\n * | Combination of date and time | Pp | 04/29/1453, 12:00 AM | 7 |\n * | | PPpp | Apr 29, 1453, 12:00:00 AM | 7 |\n * | | PPPppp | April 29th, 1453 at ... | 7 |\n * | | PPPPpppp| Friday, April 29th, 1453 at ... | 2,7 |\n * Notes:\n * 1. \"Formatting\" units (e.g. formatting quarter) in the default en-US locale\n * are the same as \"stand-alone\" units, but are different in some languages.\n * \"Formatting\" units are declined according to the rules of the language\n * in the context of a date. \"Stand-alone\" units are always nominative singular:\n *\n * `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'`\n *\n * `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'`\n *\n * 2. Any sequence of the identical letters is a pattern, unless it is escaped by\n * the single quote characters (see below).\n * If the sequence is longer than listed in table (e.g. `EEEEEEEEEEE`)\n * the output will be the same as default pattern for this unit, usually\n * the longest one (in case of ISO weekdays, `EEEE`). Default patterns for units\n * are marked with \"2\" in the last column of the table.\n *\n * `format(new Date(2017, 10, 6), 'MMM') //=> 'Nov'`\n *\n * `format(new Date(2017, 10, 6), 'MMMM') //=> 'November'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMM') //=> 'N'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMMM') //=> 'November'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMMMM') //=> 'November'`\n *\n * 3. Some patterns could be unlimited length (such as `yyyyyyyy`).\n * The output will be padded with zeros to match the length of the pattern.\n *\n * `format(new Date(2017, 10, 6), 'yyyyyyyy') //=> '00002017'`\n *\n * 4. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.\n * These tokens represent the shortest form of the quarter.\n *\n * 5. The main difference between `y` and `u` patterns are B.C. years:\n *\n * | Year | `y` | `u` |\n * |------|-----|-----|\n * | AC 1 | 1 | 1 |\n * | BC 1 | 1 | 0 |\n * | BC 2 | 2 | -1 |\n *\n * Also `yy` always returns the last two digits of a year,\n * while `uu` pads single digit years to 2 characters and returns other years unchanged:\n *\n * | Year | `yy` | `uu` |\n * |------|------|------|\n * | 1 | 01 | 01 |\n * | 14 | 14 | 14 |\n * | 376 | 76 | 376 |\n * | 1453 | 53 | 1453 |\n *\n * The same difference is true for local and ISO week-numbering years (`Y` and `R`),\n * except local week-numbering years are dependent on `options.weekStartsOn`\n * and `options.firstWeekContainsDate` (compare [getISOWeekYear](https://date-fns.org/docs/getISOWeekYear)\n * and [getWeekYear](https://date-fns.org/docs/getWeekYear)).\n *\n * 6. Specific non-location timezones are currently unavailable in `date-fns`,\n * so right now these tokens fall back to GMT timezones.\n *\n * 7. These patterns are not in the Unicode Technical Standard #35:\n * - `i`: ISO day of week\n * - `I`: ISO week of year\n * - `R`: ISO week-numbering year\n * - `t`: seconds timestamp\n * - `T`: milliseconds timestamp\n * - `o`: ordinal number modifier\n * - `P`: long localized date\n * - `p`: long localized time\n *\n * 8. `YY` and `YYYY` tokens represent week-numbering years but they are often confused with years.\n * You should enable `options.useAdditionalWeekYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * 9. `D` and `DD` tokens represent days of the year but they are often confused with days of the month.\n * You should enable `options.useAdditionalDayOfYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * @param date - The original date\n * @param format - The string of tokens\n * @param options - An object with options\n *\n * @returns The formatted date string\n *\n * @throws `date` must not be Invalid Date\n * @throws `options.locale` must contain `localize` property\n * @throws `options.locale` must contain `formatLong` property\n * @throws use `yyyy` instead of `YYYY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `yy` instead of `YY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `d` instead of `D` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `dd` instead of `DD` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws format string contains an unescaped latin alphabet character\n *\n * @example\n * // Represent 11 February 2014 in middle-endian format:\n * const result = format(new Date(2014, 1, 11), 'MM/dd/yyyy')\n * //=> '02/11/2014'\n *\n * @example\n * // Represent 2 July 2014 in Esperanto:\n * import { eoLocale } from 'date-fns/locale/eo'\n * const result = format(new Date(2014, 6, 2), \"do 'de' MMMM yyyy\", {\n * locale: eoLocale\n * })\n * //=> '2-a de julio 2014'\n *\n * @example\n * // Escape string by single quote characters:\n * const result = format(new Date(2014, 6, 2, 15), \"h 'o''clock'\")\n * //=> \"3 o'clock\"\n */\nexport function format(date, formatStr, options) {\n const defaultOptions = getDefaultOptions();\n const locale = options?.locale ?? defaultOptions.locale ?? defaultLocale;\n\n const firstWeekContainsDate =\n options?.firstWeekContainsDate ??\n options?.locale?.options?.firstWeekContainsDate ??\n defaultOptions.firstWeekContainsDate ??\n defaultOptions.locale?.options?.firstWeekContainsDate ??\n 1;\n\n const weekStartsOn =\n options?.weekStartsOn ??\n options?.locale?.options?.weekStartsOn ??\n defaultOptions.weekStartsOn ??\n defaultOptions.locale?.options?.weekStartsOn ??\n 0;\n\n const originalDate = toDate(date, options?.in);\n\n if (!isValid(originalDate)) {\n throw new RangeError(\"Invalid time value\");\n }\n\n let parts = formatStr\n .match(longFormattingTokensRegExp)\n .map((substring) => {\n const firstCharacter = substring[0];\n if (firstCharacter === \"p\" || firstCharacter === \"P\") {\n const longFormatter = longFormatters[firstCharacter];\n return longFormatter(substring, locale.formatLong);\n }\n return substring;\n })\n .join(\"\")\n .match(formattingTokensRegExp)\n .map((substring) => {\n // Replace two single quote characters with one single quote character\n if (substring === \"''\") {\n return { isToken: false, value: \"'\" };\n }\n\n const firstCharacter = substring[0];\n if (firstCharacter === \"'\") {\n return { isToken: false, value: cleanEscapedString(substring) };\n }\n\n if (formatters[firstCharacter]) {\n return { isToken: true, value: substring };\n }\n\n if (firstCharacter.match(unescapedLatinCharacterRegExp)) {\n throw new RangeError(\n \"Format string contains an unescaped latin alphabet character `\" +\n firstCharacter +\n \"`\",\n );\n }\n\n return { isToken: false, value: substring };\n });\n\n // invoke localize preprocessor (only for french locales at the moment)\n if (locale.localize.preprocessor) {\n parts = locale.localize.preprocessor(originalDate, parts);\n }\n\n const formatterOptions = {\n firstWeekContainsDate,\n weekStartsOn,\n locale,\n };\n\n return parts\n .map((part) => {\n if (!part.isToken) return part.value;\n\n const token = part.value;\n\n if (\n (!options?.useAdditionalWeekYearTokens &&\n isProtectedWeekYearToken(token)) ||\n (!options?.useAdditionalDayOfYearTokens &&\n isProtectedDayOfYearToken(token))\n ) {\n warnOrThrowProtectedError(token, formatStr, String(date));\n }\n\n const formatter = formatters[token[0]];\n return formatter(originalDate, token, locale.localize, formatterOptions);\n })\n .join(\"\");\n}\n\nfunction cleanEscapedString(input) {\n const matched = input.match(escapedStringRegExp);\n\n if (!matched) {\n return input;\n }\n\n return matched[1].replace(doubleQuoteRegExp, \"'\");\n}\n\n// Fallback for modularized imports:\nexport default format;\n","const formatDistanceLocale = {\n lessThanXSeconds: {\n one: \"menos de um segundo\",\n other: \"menos de {{count}} segundos\",\n },\n\n xSeconds: {\n one: \"1 segundo\",\n other: \"{{count}} segundos\",\n },\n\n halfAMinute: \"meio minuto\",\n\n lessThanXMinutes: {\n one: \"menos de um minuto\",\n other: \"menos de {{count}} minutos\",\n },\n\n xMinutes: {\n one: \"1 minuto\",\n other: \"{{count}} minutos\",\n },\n\n aboutXHours: {\n one: \"cerca de 1 hora\",\n other: \"cerca de {{count}} horas\",\n },\n\n xHours: {\n one: \"1 hora\",\n other: \"{{count}} horas\",\n },\n\n xDays: {\n one: \"1 dia\",\n other: \"{{count}} dias\",\n },\n\n aboutXWeeks: {\n one: \"cerca de 1 semana\",\n other: \"cerca de {{count}} semanas\",\n },\n\n xWeeks: {\n one: \"1 semana\",\n other: \"{{count}} semanas\",\n },\n\n aboutXMonths: {\n one: \"cerca de 1 mês\",\n other: \"cerca de {{count}} meses\",\n },\n\n xMonths: {\n one: \"1 mês\",\n other: \"{{count}} meses\",\n },\n\n aboutXYears: {\n one: \"cerca de 1 ano\",\n other: \"cerca de {{count}} anos\",\n },\n\n xYears: {\n one: \"1 ano\",\n other: \"{{count}} anos\",\n },\n\n overXYears: {\n one: \"mais de 1 ano\",\n other: \"mais de {{count}} anos\",\n },\n\n almostXYears: {\n one: \"quase 1 ano\",\n other: \"quase {{count}} anos\",\n },\n};\n\nexport const formatDistance = (token, count, options) => {\n let result;\n\n const tokenValue = formatDistanceLocale[token];\n if (typeof tokenValue === \"string\") {\n result = tokenValue;\n } else if (count === 1) {\n result = tokenValue.one;\n } else {\n result = tokenValue.other.replace(\"{{count}}\", String(count));\n }\n\n if (options?.addSuffix) {\n if (options.comparison && options.comparison > 0) {\n return \"em \" + result;\n } else {\n return \"há \" + result;\n }\n }\n\n return result;\n};\n","import { buildFormatLongFn } from \"../../_lib/buildFormatLongFn.js\";\n\nconst dateFormats = {\n full: \"EEEE, d 'de' MMMM 'de' y\",\n long: \"d 'de' MMMM 'de' y\",\n medium: \"d MMM y\",\n short: \"dd/MM/yyyy\",\n};\n\nconst timeFormats = {\n full: \"HH:mm:ss zzzz\",\n long: \"HH:mm:ss z\",\n medium: \"HH:mm:ss\",\n short: \"HH:mm\",\n};\n\nconst dateTimeFormats = {\n full: \"{{date}} 'às' {{time}}\",\n long: \"{{date}} 'às' {{time}}\",\n medium: \"{{date}}, {{time}}\",\n short: \"{{date}}, {{time}}\",\n};\n\nexport const formatLong = {\n date: buildFormatLongFn({\n formats: dateFormats,\n defaultWidth: \"full\",\n }),\n\n time: buildFormatLongFn({\n formats: timeFormats,\n defaultWidth: \"full\",\n }),\n\n dateTime: buildFormatLongFn({\n formats: dateTimeFormats,\n defaultWidth: \"full\",\n }),\n};\n","const formatRelativeLocale = {\n lastWeek: (date) => {\n const weekday = date.getDay();\n const last = weekday === 0 || weekday === 6 ? \"último\" : \"última\";\n return \"'\" + last + \"' eeee 'às' p\";\n },\n yesterday: \"'ontem às' p\",\n today: \"'hoje às' p\",\n tomorrow: \"'amanhã às' p\",\n nextWeek: \"eeee 'às' p\",\n other: \"P\",\n};\n\nexport const formatRelative = (token, date, _baseDate, _options) => {\n const format = formatRelativeLocale[token];\n\n if (typeof format === \"function\") {\n return format(date);\n }\n\n return format;\n};\n","import { buildLocalizeFn } from \"../../_lib/buildLocalizeFn.js\";\n\nconst eraValues = {\n narrow: [\"AC\", \"DC\"],\n abbreviated: [\"AC\", \"DC\"],\n wide: [\"antes de cristo\", \"depois de cristo\"],\n};\n\nconst quarterValues = {\n narrow: [\"1\", \"2\", \"3\", \"4\"],\n abbreviated: [\"T1\", \"T2\", \"T3\", \"T4\"],\n wide: [\"1º trimestre\", \"2º trimestre\", \"3º trimestre\", \"4º trimestre\"],\n};\n\nconst monthValues = {\n narrow: [\"j\", \"f\", \"m\", \"a\", \"m\", \"j\", \"j\", \"a\", \"s\", \"o\", \"n\", \"d\"],\n abbreviated: [\n \"jan\",\n \"fev\",\n \"mar\",\n \"abr\",\n \"mai\",\n \"jun\",\n \"jul\",\n \"ago\",\n \"set\",\n \"out\",\n \"nov\",\n \"dez\",\n ],\n\n wide: [\n \"janeiro\",\n \"fevereiro\",\n \"março\",\n \"abril\",\n \"maio\",\n \"junho\",\n \"julho\",\n \"agosto\",\n \"setembro\",\n \"outubro\",\n \"novembro\",\n \"dezembro\",\n ],\n};\n\nconst dayValues = {\n narrow: [\"D\", \"S\", \"T\", \"Q\", \"Q\", \"S\", \"S\"],\n short: [\"dom\", \"seg\", \"ter\", \"qua\", \"qui\", \"sex\", \"sab\"],\n abbreviated: [\n \"domingo\",\n \"segunda\",\n \"terça\",\n \"quarta\",\n \"quinta\",\n \"sexta\",\n \"sábado\",\n ],\n\n wide: [\n \"domingo\",\n \"segunda-feira\",\n \"terça-feira\",\n \"quarta-feira\",\n \"quinta-feira\",\n \"sexta-feira\",\n \"sábado\",\n ],\n};\n\nconst dayPeriodValues = {\n narrow: {\n am: \"a\",\n pm: \"p\",\n midnight: \"mn\",\n noon: \"md\",\n morning: \"manhã\",\n afternoon: \"tarde\",\n evening: \"tarde\",\n night: \"noite\",\n },\n abbreviated: {\n am: \"AM\",\n pm: \"PM\",\n midnight: \"meia-noite\",\n noon: \"meio-dia\",\n morning: \"manhã\",\n afternoon: \"tarde\",\n evening: \"tarde\",\n night: \"noite\",\n },\n wide: {\n am: \"a.m.\",\n pm: \"p.m.\",\n midnight: \"meia-noite\",\n noon: \"meio-dia\",\n morning: \"manhã\",\n afternoon: \"tarde\",\n evening: \"tarde\",\n night: \"noite\",\n },\n};\n\nconst formattingDayPeriodValues = {\n narrow: {\n am: \"a\",\n pm: \"p\",\n midnight: \"mn\",\n noon: \"md\",\n morning: \"da manhã\",\n afternoon: \"da tarde\",\n evening: \"da tarde\",\n night: \"da noite\",\n },\n abbreviated: {\n am: \"AM\",\n pm: \"PM\",\n midnight: \"meia-noite\",\n noon: \"meio-dia\",\n morning: \"da manhã\",\n afternoon: \"da tarde\",\n evening: \"da tarde\",\n night: \"da noite\",\n },\n wide: {\n am: \"a.m.\",\n pm: \"p.m.\",\n midnight: \"meia-noite\",\n noon: \"meio-dia\",\n morning: \"da manhã\",\n afternoon: \"da tarde\",\n evening: \"da tarde\",\n night: \"da noite\",\n },\n};\n\nconst ordinalNumber = (dirtyNumber, options) => {\n const number = Number(dirtyNumber);\n\n if (options?.unit === \"week\") {\n return number + \"ª\";\n }\n return number + \"º\";\n};\n\nexport const localize = {\n ordinalNumber,\n\n era: buildLocalizeFn({\n values: eraValues,\n defaultWidth: \"wide\",\n }),\n\n quarter: buildLocalizeFn({\n values: quarterValues,\n defaultWidth: \"wide\",\n argumentCallback: (quarter) => quarter - 1,\n }),\n\n month: buildLocalizeFn({\n values: monthValues,\n defaultWidth: \"wide\",\n }),\n\n day: buildLocalizeFn({\n values: dayValues,\n defaultWidth: \"wide\",\n }),\n\n dayPeriod: buildLocalizeFn({\n values: dayPeriodValues,\n defaultWidth: \"wide\",\n formattingValues: formattingDayPeriodValues,\n defaultFormattingWidth: \"wide\",\n }),\n};\n","import { buildMatchFn } from \"../../_lib/buildMatchFn.js\";\nimport { buildMatchPatternFn } from \"../../_lib/buildMatchPatternFn.js\";\n\nconst matchOrdinalNumberPattern = /^(\\d+)[ºªo]?/i;\nconst parseOrdinalNumberPattern = /\\d+/i;\n\nconst matchEraPatterns = {\n narrow: /^(ac|dc|a|d)/i,\n abbreviated: /^(a\\.?\\s?c\\.?|d\\.?\\s?c\\.?)/i,\n wide: /^(antes de cristo|depois de cristo)/i,\n};\nconst parseEraPatterns = {\n any: [/^ac/i, /^dc/i],\n wide: [/^antes de cristo/i, /^depois de cristo/i],\n};\n\nconst matchQuarterPatterns = {\n narrow: /^[1234]/i,\n abbreviated: /^T[1234]/i,\n wide: /^[1234](º)? trimestre/i,\n};\nconst parseQuarterPatterns = {\n any: [/1/i, /2/i, /3/i, /4/i],\n};\n\nconst matchMonthPatterns = {\n narrow: /^[jfmajsond]/i,\n abbreviated: /^(jan|fev|mar|abr|mai|jun|jul|ago|set|out|nov|dez)/i,\n wide: /^(janeiro|fevereiro|março|abril|maio|junho|julho|agosto|setembro|outubro|novembro|dezembro)/i,\n};\nconst parseMonthPatterns = {\n narrow: [\n /^j/i,\n /^f/i,\n /^m/i,\n /^a/i,\n /^m/i,\n /^j/i,\n /^j/i,\n /^a/i,\n /^s/i,\n /^o/i,\n /^n/i,\n /^d/i,\n ],\n\n any: [\n /^ja/i,\n /^fev/i,\n /^mar/i,\n /^abr/i,\n /^mai/i,\n /^jun/i,\n /^jul/i,\n /^ago/i,\n /^set/i,\n /^out/i,\n /^nov/i,\n /^dez/i,\n ],\n};\n\nconst matchDayPatterns = {\n narrow: /^(dom|[23456]ª?|s[aá]b)/i,\n short: /^(dom|[23456]ª?|s[aá]b)/i,\n abbreviated: /^(dom|seg|ter|qua|qui|sex|s[aá]b)/i,\n wide: /^(domingo|(segunda|ter[cç]a|quarta|quinta|sexta)([- ]feira)?|s[aá]bado)/i,\n};\nconst parseDayPatterns = {\n short: [/^d/i, /^2/i, /^3/i, /^4/i, /^5/i, /^6/i, /^s[aá]/i],\n narrow: [/^d/i, /^2/i, /^3/i, /^4/i, /^5/i, /^6/i, /^s[aá]/i],\n any: [/^d/i, /^seg/i, /^t/i, /^qua/i, /^qui/i, /^sex/i, /^s[aá]b/i],\n};\n\nconst matchDayPeriodPatterns = {\n narrow: /^(a|p|mn|md|(da) (manhã|tarde|noite))/i,\n any: /^([ap]\\.?\\s?m\\.?|meia[-\\s]noite|meio[-\\s]dia|(da) (manhã|tarde|noite))/i,\n};\nconst parseDayPeriodPatterns = {\n any: {\n am: /^a/i,\n pm: /^p/i,\n midnight: /^mn|^meia[-\\s]noite/i,\n noon: /^md|^meio[-\\s]dia/i,\n morning: /manhã/i,\n afternoon: /tarde/i,\n evening: /tarde/i,\n night: /noite/i,\n },\n};\n\nexport const match = {\n ordinalNumber: buildMatchPatternFn({\n matchPattern: matchOrdinalNumberPattern,\n parsePattern: parseOrdinalNumberPattern,\n valueCallback: (value) => parseInt(value, 10),\n }),\n\n era: buildMatchFn({\n matchPatterns: matchEraPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseEraPatterns,\n defaultParseWidth: \"any\",\n }),\n\n quarter: buildMatchFn({\n matchPatterns: matchQuarterPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseQuarterPatterns,\n defaultParseWidth: \"any\",\n valueCallback: (index) => index + 1,\n }),\n\n month: buildMatchFn({\n matchPatterns: matchMonthPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseMonthPatterns,\n defaultParseWidth: \"any\",\n }),\n\n day: buildMatchFn({\n matchPatterns: matchDayPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseDayPatterns,\n defaultParseWidth: \"any\",\n }),\n\n dayPeriod: buildMatchFn({\n matchPatterns: matchDayPeriodPatterns,\n defaultMatchWidth: \"any\",\n parsePatterns: parseDayPeriodPatterns,\n defaultParseWidth: \"any\",\n }),\n};\n","import { formatDistance } from \"./pt-BR/_lib/formatDistance.js\";\nimport { formatLong } from \"./pt-BR/_lib/formatLong.js\";\nimport { formatRelative } from \"./pt-BR/_lib/formatRelative.js\";\nimport { localize } from \"./pt-BR/_lib/localize.js\";\nimport { match } from \"./pt-BR/_lib/match.js\";\n\n/**\n * @category Locales\n * @summary Portuguese locale (Brazil).\n * @language Portuguese\n * @iso-639-2 por\n * @author Lucas Duailibe [@duailibe](https://github.com/duailibe)\n * @author Yago Carballo [@yagocarballo](https://github.com/YagoCarballo)\n */\nexport const ptBR = {\n code: \"pt-BR\",\n formatDistance: formatDistance,\n formatLong: formatLong,\n formatRelative: formatRelative,\n localize: localize,\n match: match,\n options: {\n weekStartsOn: 0 /* Sunday */,\n firstWeekContainsDate: 1,\n },\n};\n\n// Fallback for modularized imports:\nexport default ptBR;\n","'use client';\n\nimport * as React from 'react';\nimport * as SheetPrimitive from '@radix-ui/react-dialog';\nimport { XIcon } from 'lucide-react';\nimport { cn } from '../../lib/utils';\n\nfunction Sheet({ ...props }: React.ComponentProps<typeof SheetPrimitive.Root>) {\n return <SheetPrimitive.Root data-slot=\"sheet\" {...props} />;\n}\n\nfunction SheetTrigger({ ...props }: React.ComponentProps<typeof SheetPrimitive.Trigger>) {\n return <SheetPrimitive.Trigger data-slot=\"sheet-trigger\" {...props} />;\n}\n\nfunction SheetClose({ ...props }: React.ComponentProps<typeof SheetPrimitive.Close>) {\n return <SheetPrimitive.Close data-slot=\"sheet-close\" {...props} />;\n}\n\nfunction SheetPortal({ ...props }: React.ComponentProps<typeof SheetPrimitive.Portal>) {\n return <SheetPrimitive.Portal data-slot=\"sheet-portal\" {...props} />;\n}\n\nfunction SheetOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Overlay>) {\n return (\n <SheetPrimitive.Overlay\n data-slot=\"sheet-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 backdrop-blur-sm',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction SheetContent({\n className,\n children,\n side = 'right',\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Content> & {\n side?: 'top' | 'right' | 'bottom' | 'left';\n}) {\n return (\n <SheetPortal>\n <SheetOverlay />\n <SheetPrimitive.Content\n data-slot=\"sheet-content\"\n className={cn(\n 'data-[state=open]:animate-in data-[state=closed]:animate-out fixed z-50 flex flex-col gap-4 shadow-2xl dark:shadow-[0_0_40px_rgba(124,58,237,0.15)] transition ease-[cubic-bezier(0.25,1,0.5,1)] data-[state=closed]:duration-300 data-[state=open]:duration-500 !bg-white dark:!bg-[#0D0A1A] !text-gray-900 dark:!text-gray-100 border-gray-200 dark:!border-gray-800',\n side === 'right' &&\n 'data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right inset-y-0 right-0 h-full w-3/4 border-l sm:max-w-sm',\n side === 'left' &&\n 'data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left inset-y-0 left-0 h-full w-3/4 border-r sm:max-w-sm',\n side === 'top' &&\n 'data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top inset-x-0 top-0 h-auto border-b',\n side === 'bottom' &&\n 'data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom inset-x-0 bottom-0 h-auto border-t',\n className,\n )}\n {...props}\n >\n {children}\n <SheetPrimitive.Close className=\"ring-offset-background focus:ring-ring data-[state=open]:bg-secondary absolute top-4 right-4 rounded-full opacity-70 transition-opacity duration-[400ms] ease-[cubic-bezier(0.25,1,0.5,1)] hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none\">\n <XIcon className=\"size-4\" />\n <span className=\"sr-only\">Close</span>\n </SheetPrimitive.Close>\n </SheetPrimitive.Content>\n </SheetPortal>\n );\n}\n\nfunction SheetHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sheet-header\"\n className={cn('flex flex-col gap-1.5 p-4', className)}\n {...props}\n />\n );\n}\n\nfunction SheetFooter({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sheet-footer\"\n className={cn('mt-auto flex flex-col gap-2 p-4', className)}\n {...props}\n />\n );\n}\n\nfunction SheetTitle({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Title>) {\n return (\n <SheetPrimitive.Title\n data-slot=\"sheet-title\"\n className={cn('text-theme font-semibold', className)}\n {...props}\n />\n );\n}\n\nfunction SheetDescription({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Description>) {\n return (\n <SheetPrimitive.Description\n data-slot=\"sheet-description\"\n className={cn('text-theme-muted text-sm', className)}\n {...props}\n />\n );\n}\n\nexport {\n Sheet,\n SheetTrigger,\n SheetClose,\n SheetContent,\n SheetHeader,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n};\n","// ─────────────────────────────────────────────\n// CommentItem — Single comment with replies,\n// reactions, edit/delete, optimistic UI\n// ─────────────────────────────────────────────\n\n'use client';\n\nimport * as React from 'react';\nimport { cn } from '../../lib/utils';\nimport { Button } from '../primitives/button';\nimport { Avatar, AvatarFallback } from '../primitives/avatar';\nimport { Tooltip, TooltipContent, TooltipTrigger, TooltipProvider } from '../primitives/tooltip';\nimport { OrgEdit, OrgTrash, OrgComment } from '../../icons';\nimport type { Comment, CommentAuthor } from './types';\n\ninterface CommentItemProps {\n comment: Comment;\n currentUser: CommentAuthor;\n depth?: number;\n onReply: (parentId: string) => void;\n onEdit?: (commentId: string, content: string) => Promise<any>;\n onDelete?: (commentId: string) => Promise<void>;\n onReact?: (commentId: string, emoji: string) => Promise<void>;\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\nfunction formatRelativeTime(iso: string): string {\n const diff = Date.now() - new Date(iso).getTime();\n const mins = Math.floor(diff / 60000);\n if (mins < 1) return 'agora';\n if (mins < 60) return `${mins}m`;\n const hours = Math.floor(mins / 60);\n if (hours < 24) return `${hours}h`;\n const days = Math.floor(hours / 24);\n if (days < 7) return `${days}d`;\n return new Date(iso).toLocaleDateString('pt-BR', { day: 'numeric', month: 'short' });\n}\n\nfunction groupReactions(reactions: { emoji: string; userId: string }[]) {\n const map = new Map<string, string[]>();\n reactions.forEach((r) => {\n const arr = map.get(r.emoji) || [];\n arr.push(r.userId);\n map.set(r.emoji, arr);\n });\n return Array.from(map.entries());\n}\n\nconst QUICK_REACTIONS = ['👍', '❤️', '🎉', '😄', '👀', '🚀'];\n\nexport function CommentItem({\n comment,\n currentUser,\n depth = 0,\n onReply,\n onEdit,\n onDelete,\n onReact,\n}: CommentItemProps) {\n const [editing, setEditing] = React.useState(false);\n const [editContent, setEditContent] = React.useState(comment.content);\n const [showReactions, setShowReactions] = React.useState(false);\n const isAuthor = comment.author.id === currentUser.id;\n const isPending = comment._status === 'pending';\n const isError = comment._status === 'error';\n const maxDepth = 3;\n\n const handleSaveEdit = async () => {\n if (!editContent.trim() || !onEdit) return;\n await onEdit(comment.id, editContent.trim());\n setEditing(false);\n };\n\n return (\n <div\n className={cn(\n 'group relative',\n depth > 0 && 'ml-8 pl-4 border-l border-theme-subtle',\n isPending && 'opacity-60',\n isError && 'border-l-2 border-rose-500/50 pl-3',\n )}\n >\n <div className=\"flex gap-3 py-2\">\n <Avatar shape=\"circle\" size=\"sm\" className=\"mt-0.5 shrink-0 h-7 w-7\">\n <AvatarFallback className=\"bg-primary/20 text-primary-light text-[10px] font-semibold\">\n {getInitials(comment.author.displayName)}\n </AvatarFallback>\n </Avatar>\n\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-baseline gap-2 mb-1\">\n <span className=\"text-[13px] font-semibold text-theme\">\n {comment.author.displayName}\n </span>\n <span className=\"text-[11px] text-theme-muted\">\n {formatRelativeTime(comment.createdAt)}\n </span>\n {comment.edited && (\n <span className=\"text-[10px] text-theme-muted italic\">(editado)</span>\n )}\n {isPending && (\n <span className=\"text-[10px] text-theme-muted\">enviando...</span>\n )}\n {isError && (\n <span className=\"text-[10px] text-rose-400\">erro</span>\n )}\n </div>\n\n {editing ? (\n <div className=\"space-y-2\">\n <textarea\n value={editContent}\n onChange={(e) => setEditContent(e.target.value)}\n className=\"w-full min-h-[60px] text-[13px] text-theme bg-theme-subtle border border-theme-subtle-10 rounded-xl px-3 py-2 outline-none focus:border-primary/50 resize-none\"\n autoFocus\n />\n <div className=\"flex gap-2\">\n <Button\n variant=\"default\"\n size=\"sm\"\n onClick={handleSaveEdit}\n disabled={!editContent.trim()}\n className=\"h-6 px-2 text-[10px]\"\n >\n Salvar\n </Button>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => {\n setEditing(false);\n setEditContent(comment.content);\n }}\n className=\"h-6 px-2 text-[10px] text-theme-muted\"\n >\n Cancelar\n </Button>\n </div>\n </div>\n ) : (\n <p className=\"text-[13px] text-theme-secondary leading-relaxed break-words whitespace-pre-wrap\">\n {comment.content}\n </p>\n )}\n\n {/* Reactions */}\n {comment.reactions.length > 0 && !editing && (\n <div className=\"flex flex-wrap gap-1 mt-1.5\">\n {groupReactions(comment.reactions).map(([emoji, userIds]) => (\n <button\n key={emoji}\n onClick={() => onReact?.(comment.id, emoji)}\n className={cn(\n 'inline-flex items-center gap-1 px-1.5 py-0.5 rounded-full text-xs border transition-colors',\n userIds.includes(currentUser.id)\n ? 'bg-primary/15 border-primary/30 text-primary-light'\n : 'bg-theme-subtle border-theme-subtle text-theme-muted hover:bg-theme-subtle-10',\n )}\n >\n <span>{emoji}</span>\n <span className=\"text-[10px]\">{userIds.length}</span>\n </button>\n ))}\n </div>\n )}\n\n {/* Actions */}\n {!editing && !isPending && (\n <div className=\"flex items-center gap-1 mt-1 opacity-0 group-hover:opacity-100 transition-opacity duration-[400ms]\">\n {/* Reply */}\n {depth < maxDepth && (\n <button\n onClick={() => onReply(comment.id)}\n className=\"flex items-center gap-1 px-1.5 py-0.5 rounded text-[11px] text-theme-muted hover:text-theme-secondary hover:bg-theme-subtle transition-colors\"\n >\n <OrgComment className=\"w-3 h-3\" />\n Responder\n </button>\n )}\n\n {/* React */}\n <div className=\"relative\">\n <button\n onClick={() => setShowReactions(!showReactions)}\n className=\"px-1.5 py-0.5 rounded text-[11px] text-theme-muted hover:text-theme-secondary hover:bg-theme-subtle transition-colors\"\n >\n 😊\n </button>\n {showReactions && (\n <div className=\"absolute bottom-full left-0 mb-1 flex gap-0.5 p-1 rounded-xl bg-theme-surface border border-theme-subtle-10 shadow-lg animate-in zoom-in-95 duration-[400ms] z-10\">\n {QUICK_REACTIONS.map((emoji) => (\n <button\n key={emoji}\n onClick={() => {\n onReact?.(comment.id, emoji);\n setShowReactions(false);\n }}\n className=\"w-7 h-7 flex items-center justify-center rounded hover:bg-theme-subtle-10 transition-colors text-sm\"\n >\n {emoji}\n </button>\n ))}\n </div>\n )}\n </div>\n\n {/* Edit (author only) */}\n {isAuthor && onEdit && (\n <button\n onClick={() => setEditing(true)}\n className=\"flex items-center gap-1 px-1.5 py-0.5 rounded text-[11px] text-theme-muted hover:text-theme-secondary hover:bg-theme-subtle transition-colors\"\n >\n <OrgEdit className=\"w-3 h-3\" />\n </button>\n )}\n\n {/* Delete (author only) */}\n {isAuthor && onDelete && (\n <button\n onClick={() => onDelete(comment.id)}\n className=\"flex items-center gap-1 px-1.5 py-0.5 rounded text-[11px] text-theme-muted hover:text-rose-400 hover:bg-rose-500/10 transition-colors\"\n >\n <OrgTrash className=\"w-3 h-3\" />\n </button>\n )}\n </div>\n )}\n </div>\n </div>\n\n {/* Nested replies */}\n {comment.replies && comment.replies.length > 0 && (\n <div className=\"space-y-0\">\n {comment.replies.map((reply) => (\n <CommentItem\n key={reply.id}\n comment={reply}\n currentUser={currentUser}\n depth={depth + 1}\n onReply={onReply}\n onEdit={onEdit}\n onDelete={onDelete}\n onReact={onReact}\n />\n ))}\n </div>\n )}\n </div>\n );\n}\n","// ─────────────────────────────────────────────\n// CommentInput — Always-visible input component\n// ─────────────────────────────────────────────\n\n'use client';\n\nimport * as React from 'react';\nimport { cn } from '../../../lib/utils';\nimport { Button } from '../../primitives/button';\nimport { Avatar, AvatarFallback } from '../../primitives/avatar';\nimport type { CommentAuthor } from '../types';\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 interface CommentInputProps {\n currentUser: CommentAuthor;\n placeholder?: string;\n autoFocus?: boolean;\n onSubmit: (content: string) => void;\n onCancel?: () => void;\n /** Compact mode: smaller padding, no avatar */\n compact?: boolean;\n /** Always show expanded textarea (default true) */\n alwaysExpanded?: boolean;\n}\n\nexport function CommentInput({\n currentUser,\n placeholder = 'Adicionar um comentário...',\n autoFocus = false,\n onSubmit,\n onCancel,\n compact = false,\n alwaysExpanded = true,\n}: CommentInputProps) {\n const [content, setContent] = React.useState('');\n const textareaRef = React.useRef<HTMLTextAreaElement>(null);\n\n React.useEffect(() => {\n if (autoFocus && textareaRef.current) {\n textareaRef.current.focus();\n }\n }, [autoFocus]);\n\n const handleSubmit = () => {\n if (!content.trim()) return;\n onSubmit(content.trim());\n setContent('');\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' && (e.metaKey || e.ctrlKey)) {\n e.preventDefault();\n handleSubmit();\n }\n if (e.key === 'Escape') {\n onCancel?.();\n }\n };\n\n return (\n <div className=\"space-y-2 animate-in fade-in-0 duration-[400ms]\">\n <div className=\"flex gap-2\">\n {!compact && (\n <Avatar shape=\"circle\" size=\"sm\" className=\"mt-1 h-6 w-6 shrink-0\">\n <AvatarFallback className=\"bg-primary/20 text-primary-light text-[9px]\">\n {getInitials(currentUser.displayName)}\n </AvatarFallback>\n </Avatar>\n )}\n <textarea\n ref={textareaRef}\n value={content}\n onChange={(e) => setContent(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n rows={compact ? 2 : 2}\n className={cn(\n 'flex-1 min-h-[48px] text-[13px] resize-none',\n 'bg-theme-subtle border border-theme-subtle rounded-xl px-3 py-2',\n 'text-theme placeholder:text-theme-muted',\n 'outline-none focus:border-primary/50 transition-colors',\n )}\n />\n </div>\n <div className={cn('flex items-center justify-between', !compact && 'pl-8')}>\n <span className=\"text-[10px] text-theme-muted\">⌘ + Enter para enviar</span>\n <div className=\"flex gap-2\">\n {onCancel && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => {\n onCancel();\n setContent('');\n }}\n className=\"h-6 px-2 text-[10px] text-theme-muted\"\n >\n Cancelar\n </Button>\n )}\n <Button\n variant=\"default\"\n size=\"sm\"\n onClick={handleSubmit}\n disabled={!content.trim()}\n className=\"h-6 px-3 text-[10px]\"\n >\n Comentar\n </Button>\n </div>\n </div>\n </div>\n );\n}\n\nCommentInput.displayName = 'CommentInput';\n","// ─────────────────────────────────────────────\n// CommentSkeleton — Loading placeholder\n// ─────────────────────────────────────────────\n\n'use client';\n\nimport { Skeleton } from '../../primitives/skeleton';\n\nexport function CommentSkeleton() {\n return (\n <div className=\"flex gap-3 py-2\">\n <Skeleton variant=\"circular\" className=\"h-7 w-7 shrink-0\" />\n <div className=\"flex-1 space-y-2\">\n <div className=\"flex gap-2\">\n <Skeleton className=\"h-3 w-20\" />\n <Skeleton className=\"h-3 w-10\" />\n </div>\n <Skeleton className=\"h-3 w-full\" />\n <Skeleton className=\"h-3 w-3/4\" />\n </div>\n </div>\n );\n}\n\nCommentSkeleton.displayName = 'CommentSkeleton';\n","// ─────────────────────────────────────────────\n// CommentThread — Full comment system\n// ─────────────────────────────────────────────\n// Pulls currentUser from OrganifyProvider if not\n// provided. If onFetch/onAdd/onEdit/onDelete are\n// not provided, auto-fetches via OrganifyProvider API.\n// Uses GraphQL subscriptions for real-time updates.\n// Input is always visible for better UX.\n// ─────────────────────────────────────────────\n\n'use client';\n\nimport * as React from 'react';\nimport { cn } from '../../lib/utils';\nimport { useOrganifyUser, useOrganifyGql, useOrganifyApi } from '../../providers/organify-provider';\nimport { OrgComment } from '../../icons';\nimport { CommentItem } from './comment-item';\nimport { CommentInput, CommentSkeleton } from './primitives';\nimport type { Comment, CommentThreadProps, CommentAuthor } from './types';\n\n// ─── Helpers ────────────────────────────────\n\n/** Map backend TaskComment to local Comment shape */\nfunction mapTaskComment(tc: any, fallbackAuthor?: CommentAuthor): Comment {\n return {\n id: tc.id,\n content: tc.content,\n parentId: tc.parentId ?? null,\n replyCount: 0,\n edited: tc.isEdited ?? false,\n createdAt: tc.createdAt,\n updatedAt: tc.updatedAt ?? tc.editedAt,\n author: fallbackAuthor ?? { id: tc.userId, displayName: tc.userId, avatarUrl: null },\n reactions: [],\n };\n}\n\n// ─── CommentThread ──────────────────────────\n\nexport function CommentThread({\n entityType,\n entityId,\n currentUser: currentUserProp,\n comments: externalComments,\n onFetch,\n onAdd,\n onEdit,\n onDelete,\n onReact,\n maxVisible = 5,\n className,\n}: CommentThreadProps) {\n // ─── Derive currentUser from OrganifyProvider if not provided ──\n const providerUser = useOrganifyUser();\n const gql = useOrganifyGql();\n const api = useOrganifyApi();\n\n const currentUser: CommentAuthor = currentUserProp ?? {\n id: providerUser?.id ?? '',\n displayName: providerUser?.name ?? '',\n avatarUrl: providerUser?.avatarUrl ?? null,\n };\n\n // ─── Memoized API callbacks (prevents infinite re-render loop) ──\n\n const effectiveOnFetch = React.useCallback(\n async (_entityType: string, _entityId: string) => {\n if (onFetch) return onFetch(_entityType, _entityId);\n const data = await gql<{ taskComments: Array<any> }>(\n 'projects',\n `query($taskId: String!) {\n taskComments(taskId: $taskId) {\n id content parentId isEdited editedAt createdAt updatedAt\n userId taskId attachments\n }\n }`,\n { taskId: _entityId },\n );\n return (data.taskComments ?? []).map((tc: any) => mapTaskComment(tc)) as Comment[];\n },\n // gql is already memoized via useCallback in the provider\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [gql, onFetch],\n );\n\n const effectiveOnAdd = React.useCallback(\n async (input: { entityType: string; entityId: string; content: string; parentId?: string }) => {\n if (onAdd) return onAdd(input);\n const data = await gql<{ createComment: any }>(\n 'projects',\n `mutation($input: CreateCommentInput!) {\n createComment(input: $input) {\n id content parentId isEdited createdAt updatedAt\n }\n }`,\n { input: { taskId: input.entityId, content: input.content, parentId: input.parentId } },\n );\n return mapTaskComment(data.createComment, currentUser);\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [gql, onAdd, currentUser.id],\n );\n\n const effectiveOnEdit = React.useCallback(\n async (commentId: string, content: string) => {\n if (onEdit) return onEdit(commentId, content);\n const data = await gql<{ updateComment: any }>(\n 'projects',\n `mutation($commentId: String!, $content: String!) {\n updateComment(id: $commentId, input: { content: $content }) {\n id content isEdited editedAt updatedAt\n }\n }`,\n { commentId, content },\n );\n const raw = data.updateComment;\n return {\n id: raw.id,\n content: raw.content,\n edited: raw.isEdited ?? true,\n updatedAt: raw.updatedAt ?? raw.editedAt,\n } as unknown as Comment;\n },\n [gql, onEdit],\n );\n\n const effectiveOnDelete = React.useCallback(\n async (commentId: string) => {\n if (onDelete) return onDelete(commentId);\n await gql(\n 'projects',\n `mutation($commentId: String!) { deleteComment(id: $commentId) { success message } }`,\n { commentId },\n );\n },\n [gql, onDelete],\n );\n\n const [comments, setComments] = React.useState<Comment[]>(externalComments || []);\n const [loading, setLoading] = React.useState(!externalComments);\n const [showAll, setShowAll] = React.useState(false);\n const [replyingTo, setReplyingTo] = React.useState<string | null>(null);\n\n // ─── Fetch comments on mount (runs once per entityId) ──\n const hasFetchedRef = React.useRef(false);\n\n React.useEffect(() => {\n hasFetchedRef.current = false;\n }, [entityId, entityType]);\n\n React.useEffect(() => {\n if (externalComments) return;\n if (hasFetchedRef.current) return;\n hasFetchedRef.current = true;\n\n let cancelled = false;\n const fetchComments = async () => {\n try {\n const fetched = await effectiveOnFetch(entityType, entityId);\n if (!cancelled) setComments(fetched);\n } finally {\n if (!cancelled) setLoading(false);\n }\n };\n\n fetchComments();\n return () => { cancelled = true; };\n }, [entityType, entityId, externalComments, effectiveOnFetch]);\n\n // ─── Sync externalComments ──\n React.useEffect(() => {\n if (externalComments) {\n setComments(externalComments);\n }\n }, [externalComments]);\n\n // ─── GraphQL Subscriptions (real-time comment updates) ──\n\n React.useEffect(() => {\n // Only subscribe when using internal API (no external callbacks)\n if (externalComments || onFetch) return;\n if (!entityId || entityType !== 'task') return;\n\n const projectsServiceUrl = api?.services?.projects || api?.gatewayUrl;\n if (!projectsServiceUrl) return;\n\n const wsUrl = projectsServiceUrl.replace(/^http/, 'ws') + '/graphql/projects';\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 ws?.send(JSON.stringify({\n type: 'connection_init',\n payload: {\n userId: currentUser.id,\n authorization: api?.authToken ? `Bearer ${api.authToken}` : undefined,\n },\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 taskCommentCreated\n ws?.send(JSON.stringify({\n id: 'sub_comment_created',\n type: 'subscribe',\n payload: {\n query: `subscription($taskId: ID!) {\n taskCommentCreated(taskId: $taskId) {\n id content parentId isEdited editedAt createdAt updatedAt\n userId taskId attachments\n }\n }`,\n variables: { taskId: entityId },\n },\n }));\n // Subscribe to taskCommentUpdated\n ws?.send(JSON.stringify({\n id: 'sub_comment_updated',\n type: 'subscribe',\n payload: {\n query: `subscription($taskId: ID!) {\n taskCommentUpdated(taskId: $taskId) {\n id content parentId isEdited editedAt createdAt updatedAt\n userId taskId attachments\n }\n }`,\n variables: { taskId: entityId },\n },\n }));\n // Subscribe to taskCommentDeleted\n ws?.send(JSON.stringify({\n id: 'sub_comment_deleted',\n type: 'subscribe',\n payload: {\n query: `subscription($taskId: ID!) {\n taskCommentDeleted(taskId: $taskId)\n }`,\n variables: { taskId: entityId },\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 // ─── Comment Created ──\n if (msg.id === 'sub_comment_created' && msg.payload?.data?.taskCommentCreated) {\n const raw = msg.payload.data.taskCommentCreated;\n const newComment = mapTaskComment(raw);\n // Skip if this user's message (already added via optimistic insert)\n if (raw.userId === currentUser.id) {\n setComments((prev) =>\n prev.map((c) =>\n c._status === 'pending' && c.content === raw.content\n ? { ...newComment, _status: 'sent' as const }\n : c,\n ),\n );\n } else {\n setComments((prev) => {\n if (prev.find((c) => c.id === raw.id)) return prev;\n if (raw.parentId) {\n return prev.map((c) =>\n c.id === raw.parentId\n ? { ...c, replies: [...(c.replies || []), newComment], replyCount: c.replyCount + 1 }\n : c,\n );\n }\n return [...prev, newComment];\n });\n }\n }\n // ─── Comment Updated ──\n if (msg.id === 'sub_comment_updated' && msg.payload?.data?.taskCommentUpdated) {\n const raw = msg.payload.data.taskCommentUpdated;\n setComments((prev) => {\n const update = (list: Comment[]): Comment[] =>\n list.map((c) => {\n if (c.id === raw.id) return { ...c, content: raw.content, edited: raw.isEdited ?? true, updatedAt: raw.updatedAt ?? raw.editedAt };\n if (c.replies) return { ...c, replies: update(c.replies) };\n return c;\n });\n return update(prev);\n });\n }\n // ─── Comment Deleted ──\n if (msg.id === 'sub_comment_deleted' && msg.payload?.data?.taskCommentDeleted) {\n const deletedId = msg.payload.data.taskCommentDeleted;\n setComments((prev) => {\n const remove = (list: Comment[]): Comment[] =>\n list\n .filter((c) => c.id !== deletedId)\n .map((c) => c.replies ? { ...c, replies: remove(c.replies), replyCount: Math.max(0, c.replyCount - (c.replies.some((r) => r.id === deletedId) ? 1 : 0)) } : c);\n return remove(prev);\n });\n }\n break;\n }\n\n case 'pong':\n break;\n\n case 'error':\n console.warn('[CommentThread] Subscription error:', msg.payload);\n break;\n\n case 'complete':\n break;\n }\n } catch {\n // ignore malformed WS 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 ws.send(JSON.stringify({ id: 'sub_comment_created', type: 'complete' }));\n ws.send(JSON.stringify({ id: 'sub_comment_updated', type: 'complete' }));\n ws.send(JSON.stringify({ id: 'sub_comment_deleted', 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?.projects, api?.gatewayUrl, api?.authToken, entityId, entityType, currentUser.id, externalComments, onFetch]);\n\n // ─── Add comment ──\n const handleAddComment = async (content: string, parentId?: string) => {\n const tempId = `temp-${Date.now()}`;\n\n // Optimistic insert\n const tempComment: Comment = {\n id: tempId,\n content,\n parentId: parentId ?? null,\n author: currentUser,\n reactions: [],\n replyCount: 0,\n edited: false,\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n _status: 'pending',\n };\n\n if (parentId) {\n setComments((prev) =>\n prev.map((c) =>\n c.id === parentId\n ? { ...c, replies: [...(c.replies || []), tempComment], replyCount: c.replyCount + 1 }\n : c,\n ),\n );\n setReplyingTo(null);\n } else {\n setComments((prev) => [...prev, tempComment]);\n }\n\n try {\n const real = await effectiveOnAdd({ entityType, entityId, content, parentId });\n setComments((prev) => {\n const replace = (list: Comment[]): Comment[] =>\n list.map((c) => {\n if (c.id === tempId) return { ...real, _status: 'sent' };\n if (c.replies) return { ...c, replies: replace(c.replies) };\n return c;\n });\n return replace(prev);\n });\n } catch {\n setComments((prev) => {\n const markError = (list: Comment[]): Comment[] =>\n list.map((c) => {\n if (c.id === tempId) return { ...c, _status: 'error' };\n if (c.replies) return { ...c, replies: markError(c.replies) };\n return c;\n });\n return markError(prev);\n });\n }\n };\n\n // ─── Edit / Delete ─────────────────────\n\n const handleEdit = async (commentId: string, content: string) => {\n const updated = await effectiveOnEdit(commentId, content);\n setComments((prev) =>\n prev.map((c) => (c.id === commentId ? { ...c, ...updated } : c)),\n );\n };\n\n const handleDelete = async (commentId: string) => {\n // Optimistic remove\n setComments((prev) => prev.filter((c) => c.id !== commentId));\n try {\n await effectiveOnDelete(commentId);\n } catch {\n // TODO: restore on error\n }\n };\n\n const handleReact = async (commentId: string, emoji: string) => {\n if (!onReact) return;\n // Optimistic toggle\n setComments((prev) => {\n const toggle = (list: Comment[]): Comment[] =>\n list.map((c) => {\n if (c.id === commentId) {\n const existing = c.reactions.find(\n (r) => r.emoji === emoji && r.userId === currentUser.id,\n );\n return {\n ...c,\n reactions: existing\n ? c.reactions.filter((r) => !(r.emoji === emoji && r.userId === currentUser.id))\n : [...c.reactions, { emoji, userId: currentUser.id }],\n };\n }\n if (c.replies) return { ...c, replies: toggle(c.replies) };\n return c;\n });\n return toggle(prev);\n });\n await onReact(commentId, emoji);\n };\n\n // Visible comments\n const topLevelComments = comments.filter((c) => !c.parentId);\n const visibleComments = showAll\n ? topLevelComments\n : topLevelComments.slice(0, maxVisible);\n const hiddenCount = topLevelComments.length - maxVisible;\n\n return (\n <div className={cn('space-y-3', className)}>\n {/* Header */}\n <div className=\"flex items-center justify-between\">\n <h4 className=\"text-sm font-semibold text-theme flex items-center gap-2\">\n <OrgComment className=\"w-4 h-4 text-theme-muted\" />\n Comentários\n {topLevelComments.length > 0 && (\n <span className=\"text-[11px] text-theme-muted font-normal\">\n ({topLevelComments.length})\n </span>\n )}\n </h4>\n </div>\n\n {/* Loading skeleton */}\n {loading && (\n <div className=\"space-y-1\">\n <CommentSkeleton />\n <CommentSkeleton />\n <CommentSkeleton />\n </div>\n )}\n\n {/* Empty state */}\n {!loading && topLevelComments.length === 0 && (\n <div className=\"flex flex-col items-center py-6 text-center\">\n <div className=\"w-10 h-10 rounded-xl bg-theme-subtle flex items-center justify-center mb-3\">\n <OrgComment className=\"w-5 h-5 text-theme-muted\" />\n </div>\n <p className=\"text-xs text-theme-muted\">Sem comentários ainda.</p>\n <p className=\"text-[11px] text-theme-muted mt-0.5\">Seja o primeiro a comentar.</p>\n </div>\n )}\n\n {/* Comments list */}\n {!loading && visibleComments.length > 0 && (\n <div className=\"space-y-0.5\">\n {visibleComments.map((comment) => (\n <React.Fragment key={comment.id}>\n <CommentItem\n comment={comment}\n currentUser={currentUser}\n onReply={setReplyingTo}\n onEdit={handleEdit}\n onDelete={handleDelete}\n onReact={onReact ? handleReact : undefined}\n />\n {/* Reply input inline */}\n {replyingTo === comment.id && (\n <div className=\"ml-8 pl-4 border-l border-theme-subtle animate-in slide-in-from-top-2 duration-[400ms]\">\n <CommentInput\n currentUser={currentUser}\n placeholder={`Responder a ${comment.author.displayName}...`}\n autoFocus\n compact\n onSubmit={(content) => handleAddComment(content, comment.id)}\n onCancel={() => setReplyingTo(null)}\n />\n </div>\n )}\n </React.Fragment>\n ))}\n\n {/* Show more */}\n {!showAll && hiddenCount > 0 && (\n <button\n onClick={() => setShowAll(true)}\n className=\"text-xs text-primary-light/70 hover:text-primary-light transition-colors py-1 px-2\"\n >\n Ver mais {hiddenCount} comentário{hiddenCount !== 1 ? 's' : ''} →\n </button>\n )}\n </div>\n )}\n\n {/* New comment input — ALWAYS VISIBLE */}\n {!loading && (\n <div className=\"pt-2 border-t border-theme-subtle\">\n <CommentInput\n currentUser={currentUser}\n onSubmit={(content) => handleAddComment(content)}\n />\n </div>\n )}\n </div>\n );\n}\n\nCommentThread.displayName = 'CommentThread';\n","// ─────────────────────────────────────────────\n// LabelPicker — Select/Create labels popover\n// ─────────────────────────────────────────────\n\n'use client';\n\nimport * as React from 'react';\nimport { X, Plus, Check } from 'lucide-react';\nimport { cn } from '../../../lib/utils';\nimport { Button } from '../../primitives/button';\nimport { Input } from '../../primitives/input';\nimport { Badge } from '../../primitives/badge';\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from '../../primitives/popover';\n\n// ─── Types ──────────────────────────────────\n\nexport interface PickerLabel {\n id: string;\n name: string;\n color: string;\n}\n\nexport interface LabelPickerProps {\n /** Currently selected labels */\n selectedLabels: PickerLabel[];\n /** Available labels to choose from */\n availableLabels: PickerLabel[];\n /** Called when a label is toggled (selected/deselected) */\n onToggle: (label: PickerLabel) => void;\n /** Called when a new label is created */\n onCreate?: (name: string, color: string) => void;\n /** Custom trigger button (optional) */\n trigger?: React.ReactNode;\n /** Whether the picker is disabled */\n disabled?: boolean;\n}\n\n// ─── Preset Colors ──────────────────────────\n\nconst presetColors = [\n '#ef4444', // red\n '#f97316', // orange\n '#f59e0b', // amber\n '#eab308', // yellow\n '#84cc16', // lime\n '#22c55e', // green\n '#14b8a6', // teal\n '#06b6d4', // cyan\n '#3b82f6', // blue\n '#7c3aed', // violet (primary)\n '#8b5cf6', // violet\n '#a855f7', // purple\n '#d946ef', // fuchsia\n '#ec4899', // pink\n '#64748b', // slate\n];\n\n// ─── Component ──────────────────────────────\n\nexport function LabelPicker({\n selectedLabels,\n availableLabels,\n onToggle,\n onCreate,\n trigger,\n disabled = false,\n}: LabelPickerProps) {\n const [open, setOpen] = React.useState(false);\n const [search, setSearch] = React.useState('');\n const [isCreating, setIsCreating] = React.useState(false);\n const [newLabelName, setNewLabelName] = React.useState('');\n const [newLabelColor, setNewLabelColor] = React.useState(presetColors[8]); // blue default\n\n const selectedIds = new Set(selectedLabels.map((l) => l.id));\n\n // Filter available labels by search\n const filteredLabels = availableLabels.filter((label) =>\n label.name.toLowerCase().includes(search.toLowerCase()),\n );\n\n // Check if search matches any existing label\n const exactMatch = availableLabels.some(\n (l) => l.name.toLowerCase() === search.toLowerCase(),\n );\n\n const handleCreate = () => {\n if (newLabelName.trim() && onCreate) {\n onCreate(newLabelName.trim(), newLabelColor);\n setNewLabelName('');\n setIsCreating(false);\n }\n };\n\n const handleQuickCreate = () => {\n if (search.trim() && !exactMatch && onCreate) {\n onCreate(search.trim(), presetColors[Math.floor(Math.random() * presetColors.length)]);\n setSearch('');\n }\n };\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild disabled={disabled}>\n {trigger ?? (\n <Button variant=\"secondary\" size=\"sm\" className=\"h-7 px-2 text-xs\">\n <Plus className=\"w-3 h-3 mr-1\" />\n Adicionar\n </Button>\n )}\n </PopoverTrigger>\n <PopoverContent className=\"w-64 p-0\" align=\"start\">\n <div className=\"p-2 border-b border-theme-subtle\">\n <Input\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n placeholder=\"Buscar ou criar label...\"\n className=\"h-8 text-sm\"\n autoFocus\n />\n </div>\n\n <div className=\"max-h-48 overflow-y-auto p-1\">\n {filteredLabels.length > 0 ? (\n filteredLabels.map((label) => {\n const isSelected = selectedIds.has(label.id);\n return (\n <button\n key={label.id}\n onClick={() => onToggle(label)}\n className={cn(\n 'w-full flex items-center gap-2 px-2 py-1.5 rounded text-sm text-left',\n 'hover:bg-theme-subtle transition-colors',\n isSelected && 'bg-primary/10',\n )}\n >\n <div\n className=\"w-3 h-3 rounded-full shrink-0\"\n style={{ backgroundColor: label.color }}\n />\n <span className=\"flex-1 text-theme truncate\">{label.name}</span>\n {isSelected && <Check className=\"w-4 h-4 text-primary-light\" />}\n </button>\n );\n })\n ) : search && !exactMatch ? (\n <button\n onClick={handleQuickCreate}\n className=\"w-full flex items-center gap-2 px-2 py-1.5 rounded text-sm text-left hover:bg-theme-subtle\"\n >\n <Plus className=\"w-3 h-3 text-primary-light\" />\n <span className=\"text-theme\">Criar \"{search}\"</span>\n </button>\n ) : (\n <p className=\"px-2 py-4 text-sm text-theme-muted text-center\">\n Nenhuma label encontrada\n </p>\n )}\n </div>\n\n {/* Create new label section */}\n {onCreate && (\n <div className=\"p-2 border-t border-theme-subtle\">\n {isCreating ? (\n <div className=\"space-y-2\">\n <Input\n value={newLabelName}\n onChange={(e) => setNewLabelName(e.target.value)}\n placeholder=\"Nome da label\"\n className=\"h-8 text-sm\"\n autoFocus\n onKeyDown={(e) => {\n if (e.key === 'Enter') handleCreate();\n if (e.key === 'Escape') setIsCreating(false);\n }}\n />\n <div className=\"flex flex-wrap gap-1\">\n {presetColors.map((color) => (\n <button\n key={color}\n onClick={() => setNewLabelColor(color)}\n className={cn(\n 'w-5 h-5 rounded-full transition-transform',\n newLabelColor === color && 'ring-2 ring-primary ring-offset-1 ring-offset-theme-card scale-110',\n )}\n style={{ backgroundColor: color }}\n />\n ))}\n </div>\n <div className=\"flex gap-2 justify-end\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => setIsCreating(false)}\n className=\"h-7 text-xs\"\n >\n Cancelar\n </Button>\n <Button\n variant=\"default\"\n size=\"sm\"\n onClick={handleCreate}\n disabled={!newLabelName.trim()}\n className=\"h-7 text-xs\"\n >\n Criar\n </Button>\n </div>\n </div>\n ) : (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => setIsCreating(true)}\n className=\"w-full justify-start text-xs text-theme-muted\"\n >\n <Plus className=\"w-3 h-3 mr-2\" />\n Nova label\n </Button>\n )}\n </div>\n )}\n </PopoverContent>\n </Popover>\n );\n}\n\nLabelPicker.displayName = 'LabelPicker';\n","// ─────────────────────────────────────────────\n// AssigneePicker — Select assignees popover\n// ─────────────────────────────────────────────\n\n'use client';\n\nimport * as React from 'react';\nimport { Plus, Check, Search } from 'lucide-react';\nimport { cn } from '../../../lib/utils';\nimport { Button } from '../../primitives/button';\nimport { Input } from '../../primitives/input';\nimport { Avatar, AvatarFallback, AvatarImage } from '../../primitives/avatar';\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from '../../primitives/popover';\n\n// ─── Types ──────────────────────────────────\n\nexport interface PickerAssignee {\n id: string;\n name: string;\n avatarUrl?: string;\n email?: string;\n type?: 'USER' | 'GROUP';\n}\n\nexport interface AssigneePickerProps {\n /** Currently selected assignees */\n selectedAssignees: PickerAssignee[];\n /** Available users to assign */\n availableUsers: PickerAssignee[];\n /** Available groups to assign */\n availableGroups?: PickerAssignee[];\n /** Called when a user/group is toggled (assigned/unassigned) */\n onToggle: (item: PickerAssignee) => void;\n /** Custom trigger button (optional) */\n trigger?: React.ReactNode;\n /** Whether the picker is disabled */\n disabled?: boolean;\n /** Max number of items allowed (optional) */\n maxAssignees?: number;\n}\n\n// ─── Helpers ────────────────────────────────\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\n// ─── Component ──────────────────────────────\n\nexport function AssigneePicker({\n selectedAssignees,\n availableUsers,\n availableGroups = [],\n onToggle,\n trigger,\n disabled = false,\n maxAssignees,\n}: AssigneePickerProps) {\n const [open, setOpen] = React.useState(false);\n const [search, setSearch] = React.useState('');\n\n const selectedIds = new Set(selectedAssignees.map((a) => a.id));\n const canAddMore = maxAssignees ? selectedAssignees.length < maxAssignees : true;\n\n // Filter available items by search\n const filteredUsers = availableUsers.filter(\n (user) =>\n user.name.toLowerCase().includes(search.toLowerCase()) ||\n user.email?.toLowerCase().includes(search.toLowerCase()),\n );\n\n const filteredGroups = availableGroups.filter(\n (group) =>\n group.name.toLowerCase().includes(search.toLowerCase()),\n );\n\n const renderItem = (item: PickerAssignee) => {\n const isSelected = selectedIds.has(item.id);\n const isDisabled = !isSelected && !canAddMore;\n const isGroup = item.type === 'GROUP';\n\n return (\n <button\n key={item.id}\n onClick={() => !isDisabled && onToggle(item)}\n disabled={isDisabled}\n className={cn(\n 'w-full flex items-center gap-3 px-2 py-2 rounded text-left',\n 'hover:bg-theme-subtle transition-colors',\n isSelected && 'bg-primary/10',\n isDisabled && 'opacity-50 cursor-not-allowed',\n )}\n >\n <Avatar shape={isGroup ? 'square' : 'circle'} size=\"sm\" className=\"w-7 h-7 shrink-0\">\n {item.avatarUrl && <AvatarImage src={item.avatarUrl} alt={item.name} />}\n <AvatarFallback className={cn(\n 'text-[10px]',\n isGroup ? 'bg-amber-500/20 text-amber-400' : 'bg-primary/20 text-primary-light'\n )}>\n {getInitials(item.name)}\n </AvatarFallback>\n </Avatar>\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center gap-2\">\n <p className=\"text-sm text-theme font-medium truncate\">{item.name}</p>\n {isGroup && (\n <span className=\"text-[10px] px-1.5 py-0.5 rounded bg-amber-500/10 text-amber-400 border border-amber-500/20 uppercase font-bold\">\n Group\n </span>\n )}\n </div>\n {item.email && (\n <p className=\"text-xs text-theme-muted truncate\">{item.email}</p>\n )}\n </div>\n {isSelected && <Check className=\"w-4 h-4 text-primary-light shrink-0\" />}\n </button>\n );\n };\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild disabled={disabled}>\n {trigger ?? (\n <Button variant=\"secondary\" size=\"sm\" className=\"h-7 px-2 text-xs\">\n <Plus className=\"w-3 h-3 mr-1\" />\n Adicionar\n </Button>\n )}\n </PopoverTrigger>\n <PopoverContent className=\"w-64 p-0 shadow-glass-xl border-theme-subtle bg-theme-surface/90 backdrop-blur-md\" align=\"start\">\n <div className=\"p-2 border-b border-theme-subtle\">\n <div className=\"relative\">\n <Search className=\"absolute left-2.5 top-1/2 -translate-y-1/2 w-3.5 h-3.5 text-theme-muted\" />\n <Input\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n placeholder=\"Buscar...\"\n className=\"h-8 pl-8 text-sm bg-theme-void/50\"\n autoFocus\n />\n </div>\n </div>\n\n <div className=\"max-h-64 overflow-y-auto p-1 py-2 custom-scrollbar\">\n {filteredGroups.length > 0 && (\n <div className=\"mb-2\">\n <p className=\"px-2 pb-1 text-[10px] font-bold text-theme-muted uppercase tracking-wider\">Grupos</p>\n {filteredGroups.map(renderItem)}\n </div>\n )}\n\n {filteredUsers.length > 0 && (\n <div>\n {filteredGroups.length > 0 && <p className=\"px-2 pt-2 pb-1 text-[10px] font-bold text-theme-muted uppercase tracking-wider border-t border-theme-subtle/50 mt-2\">Usuários</p>}\n {filteredUsers.map(renderItem)}\n </div>\n )}\n\n {filteredUsers.length === 0 && filteredGroups.length === 0 && (\n <p className=\"px-2 py-6 text-sm text-theme-muted text-center\">\n Nenhum resultado encontrado\n </p>\n )}\n </div>\n\n {maxAssignees && (\n <div className=\"p-2 border-t border-theme-subtle\">\n <p className=\"text-xs text-theme-muted text-center\">\n {selectedAssignees.length}/{maxAssignees} selecionados\n </p>\n </div>\n )}\n </PopoverContent>\n </Popover>\n );\n}\n\nAssigneePicker.displayName = 'AssigneePicker';\n","// ─────────────────────────────────────────────\n// TaskDetailSheet — Sheet para detalhes da task\n// ─────────────────────────────────────────────\n// Desktop: Sheet da direita para a esquerda\n// Mobile: Drawer full-screen\n// Edição inline com Enter para salvar\n// Gerenciamento completo de subtasks\n// ─────────────────────────────────────────────\n\n'use client';\n\nimport * as React from 'react';\nimport { format } from 'date-fns';\nimport { ptBR } from 'date-fns/locale';\nimport { X, Plus, Trash2, Calendar, Check, Square, CheckSquare, Zap } from 'lucide-react';\nimport { cn } from '../../lib/utils';\nimport { Sheet, SheetContent, SheetHeader, SheetTitle } from '../primitives/sheet';\nimport { Drawer, DrawerContent, DrawerHeader, DrawerTitle } from '../primitives/drawer';\nimport { Button } from '../primitives/button';\nimport { Input } from '../primitives/input';\nimport { Badge } from '../primitives/badge';\nimport { Separator } from '../primitives/separator';\nimport { Avatar, AvatarFallback } from '../primitives/avatar';\nimport { UserAvatar } from '../primitives/user-avatar';\nimport { UserDisplayName } from '../primitives/user-display-name';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '../primitives/select';\nimport { Skeleton } from '../primitives/skeleton';\nimport { CommentThread } from '../comments/comment-thread';\nimport type { Comment, CommentAuthor } from '../comments/types';\nimport { OrgCalendar, OrgFlag, OrgCheck, OrgClose } from '../../icons';\nimport { LabelPicker, type PickerLabel } from './primitives/label-picker';\nimport { AssigneePicker, type PickerAssignee } from './primitives/assignee-picker';\n\n// ─── Types ──────────────────────────────────\n\nexport type TaskStatus = 'TODO' | 'IN_PROGRESS' | 'DONE' | 'BLOCKED' | 'REVIEW';\nexport type TaskPriority = 'LOW' | 'MEDIUM' | 'HIGH' | 'URGENT';\n\nexport interface TaskLabel {\n id: string;\n name: string;\n color: string;\n}\n\nexport interface TaskAssignee {\n id: string;\n /** Optional — when absent, UserAvatar/UserDisplayName will self-fetch by `id` */\n name?: string;\n avatarUrl?: string;\n}\n\nexport interface TaskSubtask {\n id: string;\n title: string;\n completed: boolean;\n}\n\nexport interface TaskDetailData {\n id: string;\n title: string;\n description?: string;\n number?: number;\n status: TaskStatus;\n priority: TaskPriority;\n labels: TaskLabel[];\n assignees: TaskAssignee[];\n dueDate?: string;\n startDate?: string;\n storyPoints?: number;\n subtaskCount?: number;\n subtaskDone?: number;\n commentCount?: number;\n attachmentCount?: number;\n subtasks?: TaskSubtask[];\n assigneeGroup?: TaskAssignee;\n}\n\nexport interface TaskDetailSheetProps {\n task: TaskDetailData | null;\n open: boolean;\n onOpenChange: (open: boolean) => void;\n onUpdate?: (taskId: string, updates: Partial<TaskDetailData>) => Promise<void>;\n // Label operations\n onAddLabel?: (taskId: string) => void;\n onRemoveLabel?: (taskId: string, labelId: string) => void;\n onToggleLabel?: (taskId: string, label: TaskLabel) => void;\n onCreateLabel?: (name: string, color: string) => Promise<TaskLabel>;\n availableLabels?: TaskLabel[];\n // Assignee operations\n onAddAssignee?: (taskId: string) => void;\n onRemoveAssignee?: (taskId: string, assigneeId: string) => void;\n onToggleAssignee?: (taskId: string, assignee: TaskAssignee) => void;\n availableUsers?: TaskAssignee[];\n // Assignee group\n availableGroups?: TaskAssignee[];\n onToggleAssigneeGroup?: (taskId: string, group: TaskAssignee | null) => void;\n // Subtask operations\n onAddSubtask?: (taskId: string, title: string) => Promise<void>;\n onToggleSubtask?: (taskId: string, subtaskId: string, completed: boolean) => Promise<void>;\n onDeleteSubtask?: (taskId: string, subtaskId: string) => Promise<void>;\n onUpdateSubtask?: (taskId: string, subtaskId: string, title: string) => Promise<void>;\n onDeleteTask?: (taskId: string) => Promise<void>;\n comments?: Comment[];\n currentUser?: CommentAuthor;\n loading?: boolean;\n availableStatuses?: { value: TaskStatus; label: string }[];\n availablePriorities?: { value: TaskPriority; label: string; color: string }[];\n}\n\n// ─── Config ─────────────────────────────────\n\nconst defaultStatuses: { value: TaskStatus; label: string }[] = [\n { value: 'TODO', label: 'A Fazer' },\n { value: 'IN_PROGRESS', label: 'Em Progresso' },\n { value: 'REVIEW', label: 'Em Revisão' },\n { value: 'BLOCKED', label: 'Bloqueado' },\n { value: 'DONE', label: 'Concluído' },\n];\n\nconst defaultPriorities: { value: TaskPriority; label: string; color: string }[] = [\n { value: 'LOW', label: 'Baixa', color: '#6b7280' },\n { value: 'MEDIUM', label: 'Média', color: '#3b82f6' },\n { value: 'HIGH', label: 'Alta', color: '#f59e0b' },\n { value: 'URGENT', label: 'Urgente', color: '#ef4444' },\n];\n\nconst statusColors: Record<TaskStatus, string> = {\n TODO: 'bg-slate-500/15 text-slate-400 border-slate-500/30',\n IN_PROGRESS: 'bg-blue-500/15 text-blue-400 border-blue-500/30',\n REVIEW: 'bg-purple-500/15 text-purple-400 border-purple-500/30',\n BLOCKED: 'bg-rose-500/15 text-rose-400 border-rose-500/30',\n DONE: 'bg-emerald-500/15 text-emerald-400 border-emerald-500/30',\n};\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// ─── Inline Editable Field ──────────────────\n\ninterface EditableFieldProps {\n value: string;\n onSave: (value: string) => void;\n placeholder?: string;\n className?: string;\n inputClassName?: string;\n as?: 'h1' | 'h2' | 'p' | 'span';\n}\n\nfunction EditableField({\n value,\n onSave,\n placeholder = 'Clique para editar',\n className,\n inputClassName,\n as: Tag = 'span',\n}: EditableFieldProps) {\n const [editing, setEditing] = React.useState(false);\n const [localValue, setLocalValue] = React.useState(value);\n const inputRef = React.useRef<HTMLInputElement>(null);\n\n React.useEffect(() => {\n setLocalValue(value);\n }, [value]);\n\n React.useEffect(() => {\n if (editing && inputRef.current) {\n inputRef.current.focus();\n inputRef.current.select();\n }\n }, [editing]);\n\n const handleSave = () => {\n setEditing(false);\n if (localValue !== value) {\n onSave(localValue);\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n handleSave();\n }\n if (e.key === 'Escape') {\n setLocalValue(value);\n setEditing(false);\n }\n };\n\n if (editing) {\n return (\n <input\n ref={inputRef}\n type=\"text\"\n value={localValue}\n onChange={(e) => setLocalValue(e.target.value)}\n onBlur={handleSave}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n className={cn(\n 'w-full bg-theme-subtle backdrop-blur-md border border-theme-subtle px-3 py-2 text-sm font-light text-theme transition-all rounded-xl 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',\n inputClassName,\n )}\n />\n );\n }\n\n return (\n <Tag\n onClick={() => setEditing(true)}\n className={cn(\n 'cursor-pointer hover:bg-theme-highlight px-2 py-1 -mx-2 rounded transition-colors',\n !value && 'text-theme-muted italic',\n className,\n )}\n >\n {value || placeholder}\n </Tag>\n );\n}\n\n// ─── Date Picker Inline ─────────────────────\n\ninterface EditableDateProps {\n value?: string;\n onSave: (value: string) => void;\n placeholder?: string;\n}\n\nfunction EditableDate({ value, onSave, placeholder = 'Adicionar data' }: EditableDateProps) {\n const [editing, setEditing] = React.useState(false);\n const inputRef = React.useRef<HTMLInputElement>(null);\n\n React.useEffect(() => {\n if (editing && inputRef.current) {\n inputRef.current.focus();\n }\n }, [editing]);\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n onSave(e.target.value);\n setEditing(false);\n };\n\n if (editing) {\n return (\n <input\n ref={inputRef}\n type=\"date\"\n defaultValue={value ? value.split('T')[0] : ''}\n onChange={handleChange}\n onBlur={() => setEditing(false)}\n className=\"w-full bg-theme-subtle backdrop-blur-md border border-theme-subtle px-3 py-2 text-sm font-light text-theme transition-all rounded-xl 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\"\n />\n );\n }\n\n return (\n <button\n onClick={() => setEditing(true)}\n className={cn(\n 'flex items-center gap-2 px-2 py-1 -mx-2 rounded hover:bg-theme-highlight transition-colors text-sm',\n !value && 'text-theme-muted italic',\n )}\n >\n <Calendar className=\"w-4 h-4\" />\n {value ? format(new Date(value), 'dd MMM yyyy', { locale: ptBR }) : placeholder}\n </button>\n );\n}\n\n// ─── Story Points Editable ──────────────────\n\ninterface EditableStoryPointsProps {\n value?: number;\n onSave: (value: number | undefined) => void;\n}\n\nfunction EditableStoryPoints({ value, onSave }: EditableStoryPointsProps) {\n const [editing, setEditing] = React.useState(false);\n const [localValue, setLocalValue] = React.useState(value !== undefined ? String(value) : '');\n const inputRef = React.useRef<HTMLInputElement>(null);\n\n React.useEffect(() => {\n setLocalValue(value !== undefined ? String(value) : '');\n }, [value]);\n\n React.useEffect(() => {\n if (editing && inputRef.current) {\n inputRef.current.focus();\n inputRef.current.select();\n }\n }, [editing]);\n\n const handleSave = () => {\n setEditing(false);\n const parsed = localValue === '' ? undefined : parseFloat(localValue);\n if (parsed !== value) {\n onSave(isNaN(parsed as number) ? undefined : parsed);\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter') { e.preventDefault(); handleSave(); }\n if (e.key === 'Escape') { setLocalValue(value !== undefined ? String(value) : ''); setEditing(false); }\n };\n\n if (editing) {\n return (\n <input\n ref={inputRef}\n type=\"number\"\n min={0}\n step={0.5}\n value={localValue}\n onChange={(e) => setLocalValue(e.target.value)}\n onBlur={handleSave}\n onKeyDown={handleKeyDown}\n placeholder=\"0\"\n className=\"w-28 bg-theme-subtle backdrop-blur-md border border-theme-subtle px-3 py-1.5 text-sm font-light text-theme transition-all rounded-xl 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\"\n />\n );\n }\n\n return (\n <button\n onClick={() => setEditing(true)}\n className={cn(\n 'flex items-center gap-2 px-2 py-1 -mx-2 rounded hover:bg-theme-highlight transition-colors text-sm',\n value == null && 'text-theme-muted italic',\n )}\n >\n {value != null ? (\n <span className=\"inline-flex items-center gap-1 font-semibold\">\n <span className=\"text-primary-light\">{value}</span>\n <span className=\"text-theme-muted text-xs\">pts</span>\n </span>\n ) : (\n <span className=\"text-theme-muted italic\">Adicionar</span>\n )}\n </button>\n );\n}\n\n// ─── Label Item ─────────────────────────────\n\ninterface LabelItemProps {\n label: TaskLabel;\n onRemove?: () => void;\n showDelete?: boolean;\n}\n\nfunction LabelItem({ label, onRemove, showDelete = true }: LabelItemProps) {\n return (\n <div className=\"group relative inline-flex\">\n <Badge\n className=\"border\"\n style={{\n backgroundColor: `${label.color}20`,\n borderColor: `${label.color}50`,\n color: label.color,\n }}\n >\n {label.name}\n </Badge>\n {showDelete && onRemove && (\n <button\n onClick={onRemove}\n className={cn(\n 'absolute -top-1 -right-1 w-4 h-4 rounded-full bg-rose-500 text-white flex items-center justify-center transition-opacity',\n 'md:opacity-0 md:group-hover:opacity-100',\n 'opacity-100',\n )}\n >\n <X className=\"w-2.5 h-2.5\" />\n </button>\n )}\n </div>\n );\n}\n\n// ─── Assignee Item ──────────────────────────\n\ninterface AssigneeItemProps {\n assignee: TaskAssignee;\n onRemove?: () => void;\n showDelete?: boolean;\n}\n\nfunction AssigneeItem({ assignee, onRemove, showDelete = true }: AssigneeItemProps) {\n return (\n <div className=\"group relative inline-flex items-center gap-2 px-3 py-1.5 bg-theme-subtle border border-theme-subtle rounded-full\">\n <UserAvatar\n userId={assignee.id}\n name={assignee.name}\n src={assignee.avatarUrl}\n size=\"sm\"\n showHoverInfo={false}\n className=\"w-5 h-5\"\n />\n <UserDisplayName\n userId={assignee.id}\n name={assignee.name}\n className=\"text-xs font-medium text-theme\"\n />\n {showDelete && onRemove && (\n <button\n onClick={onRemove}\n className={cn(\n 'w-4 h-4 rounded-full bg-rose-500/20 text-rose-400 flex items-center justify-center transition-opacity',\n 'md:opacity-0 md:group-hover:opacity-100',\n 'opacity-100',\n )}\n >\n <X className=\"w-2.5 h-2.5\" />\n </button>\n )}\n </div>\n );\n}\n\n// ─── Subtask Item ───────────────────────────\n\ninterface SubtaskItemProps {\n subtask: TaskSubtask;\n onToggle?: (completed: boolean) => void;\n onDelete?: () => void;\n onUpdate?: (title: string) => void;\n}\n\nfunction SubtaskItem({ subtask, onToggle, onDelete, onUpdate }: SubtaskItemProps) {\n const [editing, setEditing] = React.useState(false);\n const [localTitle, setLocalTitle] = React.useState(subtask.title);\n const inputRef = React.useRef<HTMLInputElement>(null);\n\n React.useEffect(() => {\n setLocalTitle(subtask.title);\n }, [subtask.title]);\n\n React.useEffect(() => {\n if (editing && inputRef.current) {\n inputRef.current.focus();\n inputRef.current.select();\n }\n }, [editing]);\n\n const handleSave = () => {\n setEditing(false);\n if (localTitle.trim() && localTitle !== subtask.title) {\n onUpdate?.(localTitle.trim());\n } else {\n setLocalTitle(subtask.title);\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n handleSave();\n }\n if (e.key === 'Escape') {\n setLocalTitle(subtask.title);\n setEditing(false);\n }\n };\n\n return (\n <div className=\"group flex items-center gap-2 py-1.5 px-2 -mx-2 rounded hover:bg-theme-highlight transition-colors\">\n {/* Checkbox */}\n <button\n onClick={() => onToggle?.(!subtask.completed)}\n className={cn(\n 'flex-shrink-0 w-5 h-5 rounded border transition-all',\n subtask.completed\n ? 'bg-emerald-500/20 border-emerald-500/50 text-emerald-400'\n : 'border-theme-subtle hover:border-primary-light/50 text-transparent hover:text-primary-light',\n )}\n >\n <Check className=\"w-full h-full p-0.5\" />\n </button>\n\n {/* Title */}\n {editing ? (\n <input\n ref={inputRef}\n type=\"text\"\n value={localTitle}\n onChange={(e) => setLocalTitle(e.target.value)}\n onBlur={handleSave}\n onKeyDown={handleKeyDown}\n className=\"flex-1 bg-theme-subtle border border-theme-subtle px-2 py-1 text-sm text-theme rounded focus:outline-none focus:ring-1 focus:ring-primary-light\"\n />\n ) : (\n <span\n onClick={() => setEditing(true)}\n className={cn(\n 'flex-1 text-sm cursor-pointer transition-colors',\n subtask.completed ? 'text-theme-muted line-through' : 'text-theme',\n )}\n >\n {subtask.title}\n </span>\n )}\n\n {/* Delete button */}\n {onDelete && (\n <button\n onClick={onDelete}\n className={cn(\n 'flex-shrink-0 w-6 h-6 rounded flex items-center justify-center transition-all',\n 'text-theme-muted hover:text-rose-400 hover:bg-rose-500/10',\n 'md:opacity-0 md:group-hover:opacity-100',\n 'opacity-100',\n )}\n >\n <Trash2 className=\"w-3.5 h-3.5\" />\n </button>\n )}\n </div>\n );\n}\n\n// ─── Subtask Add Form ───────────────────────\n\ninterface SubtaskAddFormProps {\n onAdd: (title: string) => void;\n}\n\nfunction SubtaskAddForm({ onAdd }: SubtaskAddFormProps) {\n const [adding, setAdding] = React.useState(false);\n const [title, setTitle] = React.useState('');\n const inputRef = React.useRef<HTMLInputElement>(null);\n\n React.useEffect(() => {\n if (adding && inputRef.current) {\n inputRef.current.focus();\n }\n }, [adding]);\n\n const handleSubmit = () => {\n if (title.trim()) {\n onAdd(title.trim());\n setTitle('');\n // Keep form open for rapid entry\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n handleSubmit();\n }\n if (e.key === 'Escape') {\n setTitle('');\n setAdding(false);\n }\n };\n\n if (!adding) {\n return (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => setAdding(true)}\n className=\"w-full justify-start text-xs text-theme-muted hover:text-theme\"\n >\n <Plus className=\"w-3 h-3 mr-2\" />\n Adicionar subtask\n </Button>\n );\n }\n\n return (\n <div className=\"flex items-center gap-2\">\n <input\n ref={inputRef}\n type=\"text\"\n value={title}\n onChange={(e) => setTitle(e.target.value)}\n onKeyDown={handleKeyDown}\n onBlur={() => {\n if (!title.trim()) setAdding(false);\n }}\n placeholder=\"Título da subtask\"\n className=\"flex-1 bg-theme-subtle border border-theme-subtle px-3 py-1.5 text-sm text-theme rounded focus:outline-none focus:ring-1 focus:ring-primary-light\"\n />\n <Button\n variant=\"secondary\"\n size=\"sm\"\n onClick={handleSubmit}\n disabled={!title.trim()}\n className=\"h-8\"\n >\n <Check className=\"w-3 h-3\" />\n </Button>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => {\n setTitle('');\n setAdding(false);\n }}\n className=\"h-8\"\n >\n <X className=\"w-3 h-3\" />\n </Button>\n </div>\n );\n}\n\n// ─── Subtask Section ────────────────────────\n\ninterface SubtaskSectionProps {\n taskId: string;\n subtasks?: TaskSubtask[];\n subtaskCount?: number;\n subtaskDone?: number;\n onAdd?: (taskId: string, title: string) => Promise<void>;\n onToggle?: (taskId: string, subtaskId: string, completed: boolean) => Promise<void>;\n onDelete?: (taskId: string, subtaskId: string) => Promise<void>;\n onUpdate?: (taskId: string, subtaskId: string, title: string) => Promise<void>;\n}\n\nfunction SubtaskSection({\n taskId,\n subtasks,\n subtaskCount,\n subtaskDone,\n onAdd,\n onToggle,\n onDelete,\n onUpdate,\n}: SubtaskSectionProps) {\n const [loading, setLoading] = React.useState<string | null>(null);\n\n const handleAdd = async (title: string) => {\n if (onAdd) {\n setLoading('add');\n try {\n await onAdd(taskId, title);\n } finally {\n setLoading(null);\n }\n }\n };\n\n const handleToggle = async (subtaskId: string, completed: boolean) => {\n if (onToggle) {\n setLoading(subtaskId);\n try {\n await onToggle(taskId, subtaskId, completed);\n } finally {\n setLoading(null);\n }\n }\n };\n\n const handleDelete = async (subtaskId: string) => {\n if (onDelete) {\n setLoading(subtaskId);\n try {\n await onDelete(taskId, subtaskId);\n } finally {\n setLoading(null);\n }\n }\n };\n\n const handleUpdate = async (subtaskId: string, title: string) => {\n if (onUpdate) {\n setLoading(subtaskId);\n try {\n await onUpdate(taskId, subtaskId, title);\n } finally {\n setLoading(null);\n }\n }\n };\n\n // Calculate progress\n const total = subtasks?.length ?? subtaskCount ?? 0;\n const done = subtasks?.filter((s) => s.completed).length ?? subtaskDone ?? 0;\n const progress = total > 0 ? (done / total) * 100 : 0;\n\n return (\n <div className=\"space-y-3\">\n <div className=\"flex items-center justify-between\">\n <label className=\"text-xs font-medium text-theme-muted uppercase tracking-wide\">\n Subtasks\n </label>\n {total > 0 && (\n <span className=\"text-xs text-theme-muted\">\n {done}/{total}\n </span>\n )}\n </div>\n\n {/* Progress bar */}\n {total > 0 && (\n <div className=\"h-1.5 bg-theme-subtle rounded-full overflow-hidden\">\n <div\n className=\"h-full bg-emerald-500 transition-all duration-[400ms] ease-[cubic-bezier(0.25,1,0.5,1)]\"\n style={{ width: `${progress}%` }}\n />\n </div>\n )}\n\n {/* Subtask list */}\n {subtasks && subtasks.length > 0 && (\n <div className=\"space-y-1\">\n {subtasks.map((subtask) => (\n <SubtaskItem\n key={subtask.id}\n subtask={subtask}\n onToggle={onToggle ? (c) => handleToggle(subtask.id, c) : undefined}\n onDelete={onDelete ? () => handleDelete(subtask.id) : undefined}\n onUpdate={onUpdate ? (t) => handleUpdate(subtask.id, t) : undefined}\n />\n ))}\n </div>\n )}\n\n {/* Add form */}\n {onAdd && <SubtaskAddForm onAdd={handleAdd} />}\n\n {/* Empty state */}\n {!subtasks?.length && !onAdd && total === 0 && (\n <p className=\"text-sm text-theme-muted italic\">Sem subtasks</p>\n )}\n </div>\n );\n}\n\n// ─── Task Detail Content ────────────────────\n\ninterface TaskDetailContentProps {\n task: TaskDetailData;\n onUpdate?: TaskDetailSheetProps['onUpdate'];\n onAddLabel?: TaskDetailSheetProps['onAddLabel'];\n onRemoveLabel?: TaskDetailSheetProps['onRemoveLabel'];\n onToggleLabel?: TaskDetailSheetProps['onToggleLabel'];\n onCreateLabel?: TaskDetailSheetProps['onCreateLabel'];\n availableLabels?: TaskLabel[];\n onAddAssignee?: TaskDetailSheetProps['onAddAssignee'];\n onRemoveAssignee?: TaskDetailSheetProps['onRemoveAssignee'];\n onToggleAssignee?: TaskDetailSheetProps['onToggleAssignee'];\n availableUsers?: TaskAssignee[];\n availableGroups?: TaskAssignee[];\n onToggleAssigneeGroup?: TaskDetailSheetProps['onToggleAssigneeGroup'];\n onAddSubtask?: TaskDetailSheetProps['onAddSubtask'];\n onToggleSubtask?: TaskDetailSheetProps['onToggleSubtask'];\n onDeleteSubtask?: TaskDetailSheetProps['onDeleteSubtask'];\n onUpdateSubtask?: TaskDetailSheetProps['onUpdateSubtask'];\n onDeleteTask?: TaskDetailSheetProps['onDeleteTask'];\n comments?: Comment[];\n currentUser?: CommentAuthor;\n statuses: { value: TaskStatus; label: string }[];\n priorities: { value: TaskPriority; label: string; color: string }[];\n}\n\nfunction TaskDetailContent({\n task,\n onUpdate,\n onAddLabel,\n onRemoveLabel,\n onToggleLabel,\n onCreateLabel,\n availableLabels,\n onAddAssignee,\n onRemoveAssignee,\n onToggleAssignee,\n availableUsers,\n availableGroups,\n onToggleAssigneeGroup,\n onAddSubtask,\n onToggleSubtask,\n onDeleteSubtask,\n onUpdateSubtask,\n onDeleteTask,\n comments,\n currentUser,\n statuses,\n priorities,\n}: TaskDetailContentProps) {\n const handleFieldUpdate = async (field: keyof TaskDetailData, value: any) => {\n if (onUpdate) {\n await onUpdate(task.id, { [field]: value });\n }\n };\n\n return (\n <div className=\"flex-1 overflow-y-auto px-6 py-4 space-y-6 text-theme\">\n {/* Task Number */}\n {task.number && (\n <div className=\"flex justify-end -mt-2\">\n <Badge className=\"bg-theme-subtle border border-theme-subtle text-theme-muted font-mono\">\n #{task.number}\n </Badge>\n </div>\n )}\n\n {/* Title (editable) */}\n <div>\n <EditableField\n value={task.title}\n onSave={(v) => handleFieldUpdate('title', v)}\n placeholder=\"Título da tarefa\"\n as=\"h2\"\n className=\"text-xl font-semibold text-theme\"\n inputClassName=\"text-lg font-semibold\"\n />\n </div>\n\n {/* Status & Priority (selects) */}\n <div className=\"grid grid-cols-2 gap-4\">\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium text-theme-muted uppercase tracking-wide\">\n Status\n </label>\n <Select\n value={task.status}\n onValueChange={(v) => handleFieldUpdate('status', v)}\n >\n <SelectTrigger className=\"h-9\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {statuses.map((s) => (\n <SelectItem key={s.value} value={s.value}>\n <span className={cn('px-2 py-0.5 rounded text-xs', statusColors[s.value])}>\n {s.label}\n </span>\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium text-theme-muted uppercase tracking-wide\">\n Prioridade\n </label>\n <Select\n value={task.priority}\n onValueChange={(v) => handleFieldUpdate('priority', v)}\n >\n <SelectTrigger className=\"h-9\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {priorities.map((p) => (\n <SelectItem key={p.value} value={p.value}>\n <span\n className=\"flex items-center gap-2\"\n style={{ color: p.color }}\n >\n <OrgFlag className=\"w-3 h-3\" />\n {p.label}\n </span>\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n </div>\n\n <Separator className=\"bg-theme-subtle\" />\n\n {/* Labels */}\n <div className=\"space-y-3\">\n <div className=\"flex items-center justify-between\">\n <label className=\"text-xs font-medium text-theme-muted uppercase tracking-wide\">\n Labels\n </label>\n {/* Inline picker when availableLabels is provided */}\n {onToggleLabel && availableLabels ? (\n <LabelPicker\n selectedLabels={task.labels.map((l) => ({ id: l.id, name: l.name, color: l.color }))}\n availableLabels={availableLabels.map((l) => ({ id: l.id, name: l.name, color: l.color }))}\n onToggle={(label) => onToggleLabel(task.id, { id: label.id, name: label.name, color: label.color })}\n onCreate={onCreateLabel ? async (name, color) => {\n const newLabel = await onCreateLabel(name, color);\n return { id: newLabel.id, name: newLabel.name, color: newLabel.color };\n } : undefined}\n />\n ) : onAddLabel ? (\n <Button\n variant=\"secondary\"\n size=\"sm\"\n onClick={() => onAddLabel(task.id)}\n className=\"h-7 px-2 text-xs\"\n >\n <Plus className=\"w-3 h-3 mr-1\" />\n Adicionar\n </Button>\n ) : null}\n </div>\n <div className=\"flex flex-wrap gap-2\">\n {task.labels.length === 0 ? (\n <span className=\"text-sm text-theme-muted italic\">Sem labels</span>\n ) : (\n task.labels.map((label) => (\n <LabelItem\n key={label.id}\n label={label}\n onRemove={onRemoveLabel ? () => onRemoveLabel(task.id, label.id) : undefined}\n />\n ))\n )}\n </div>\n </div>\n\n {/* Assignees */}\n <div className=\"space-y-3\">\n <div className=\"flex items-center justify-between\">\n <label className=\"text-xs font-medium text-theme-muted uppercase tracking-wide\">\n Atribuído para\n </label>\n {/* Inline picker when availableUsers is provided */}\n {onToggleAssignee && availableUsers ? (\n <AssigneePicker\n selectedAssignees={task.assignees.map((a) => ({ id: a.id, name: a.name ?? '', avatarUrl: a.avatarUrl }))}\n availableUsers={availableUsers.map((a) => ({ id: a.id, name: a.name ?? '', avatarUrl: a.avatarUrl }))}\n onToggle={(assignee) => onToggleAssignee(task.id, { id: assignee.id, name: assignee.name, avatarUrl: assignee.avatarUrl })}\n />\n ) : onAddAssignee ? (\n <Button\n variant=\"secondary\"\n size=\"sm\"\n onClick={() => onAddAssignee(task.id)}\n className=\"h-7 px-2 text-xs\"\n >\n <Plus className=\"w-3 h-3 mr-1\" />\n Adicionar\n </Button>\n ) : null}\n </div>\n <div className=\"flex flex-wrap gap-2\">\n {task.assignees.length === 0 ? (\n <span className=\"text-sm text-theme-muted italic\">Ninguém atribuído</span>\n ) : (\n task.assignees.map((assignee) => (\n <AssigneeItem\n key={assignee.id}\n assignee={assignee}\n onRemove={\n onRemoveAssignee ? () => onRemoveAssignee(task.id, assignee.id) : undefined\n }\n />\n ))\n )}\n </div>\n </div>\n\n {/* Assignee Group */}\n {availableGroups && availableGroups.length > 0 && (\n <div className=\"space-y-2\">\n <div className=\"flex items-center justify-between\">\n <label className=\"text-xs font-medium text-theme-muted uppercase tracking-wide\">\n Grupo responsável\n </label>\n {onToggleAssigneeGroup && (\n <AssigneePicker\n selectedAssignees={task.assigneeGroup ? [{ id: task.assigneeGroup.id, name: task.assigneeGroup.name ?? '', avatarUrl: task.assigneeGroup.avatarUrl }] : []}\n availableUsers={availableGroups.map((g) => ({ id: g.id, name: g.name ?? '', avatarUrl: g.avatarUrl }))}\n onToggle={(group) => {\n const isSame = task.assigneeGroup?.id === group.id;\n onToggleAssigneeGroup(task.id, isSame ? null : { id: group.id, name: group.name, avatarUrl: group.avatarUrl });\n }}\n />\n )}\n </div>\n <div className=\"flex flex-wrap gap-2\">\n {task.assigneeGroup ? (\n <AssigneeItem\n assignee={task.assigneeGroup}\n onRemove={\n onToggleAssigneeGroup ? () => onToggleAssigneeGroup(task.id, null) : undefined\n }\n />\n ) : (\n <span className=\"text-sm text-theme-muted italic\">Nenhum grupo</span>\n )}\n </div>\n </div>\n )}\n\n <Separator className=\"bg-theme-subtle\" />\n\n {/* Dates */}\n <div className=\"grid grid-cols-2 gap-4\">\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium text-theme-muted uppercase tracking-wide\">\n Data de Início\n </label>\n <EditableDate\n value={task.startDate}\n onSave={(v) => handleFieldUpdate('startDate', v)}\n placeholder=\"Adicionar\"\n />\n </div>\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium text-theme-muted uppercase tracking-wide\">\n Data de Vencimento\n </label>\n <EditableDate\n value={task.dueDate}\n onSave={(v) => handleFieldUpdate('dueDate', v)}\n placeholder=\"Adicionar\"\n />\n </div>\n </div>\n\n {/* Story Points */}\n {task.storyPoints !== undefined || onUpdate ? (\n <>\n <Separator className=\"bg-theme-subtle\" />\n <div className=\"space-y-2\">\n <label className=\"text-xs font-medium text-theme-muted uppercase tracking-wide flex items-center gap-1.5\">\n <Zap className=\"w-3 h-3\" />\n Story Points\n </label>\n <EditableStoryPoints\n value={task.storyPoints}\n onSave={(v) => handleFieldUpdate('storyPoints', v)}\n />\n </div>\n </>\n ) : null}\n\n <Separator className=\"bg-theme-subtle\" />\n\n {/* Subtasks Section */}\n <SubtaskSection\n taskId={task.id}\n subtasks={task.subtasks}\n subtaskCount={task.subtaskCount}\n subtaskDone={task.subtaskDone}\n onAdd={onAddSubtask}\n onToggle={onToggleSubtask}\n onDelete={onDeleteSubtask}\n onUpdate={onUpdateSubtask}\n />\n\n <Separator className=\"bg-theme-subtle\" />\n\n {/* Comments */}\n <div className=\"space-y-3\">\n <label className=\"text-xs font-medium text-theme-muted uppercase tracking-wide\">\n Comentários\n </label>\n <CommentThread\n entityType=\"task\"\n entityId={task.id}\n comments={comments}\n currentUser={currentUser}\n />\n </div>\n\n {/* Delete Task */}\n {onDeleteTask && (\n <>\n <Separator className=\"bg-theme-subtle\" />\n <div className=\"pb-2\">\n <Button\n variant=\"destructive\"\n size=\"sm\"\n className=\"w-full\"\n onClick={() => onDeleteTask(task.id)}\n >\n <Trash2 className=\"h-4 w-4 mr-2\" />\n Excluir tarefa\n </Button>\n </div>\n </>\n )}\n </div>\n );\n}\n\n// ─── Loading Skeleton ───────────────────────\n\nfunction TaskDetailSkeleton() {\n return (\n <div className=\"flex-1 overflow-y-auto px-6 py-4 space-y-6 animate-pulse text-theme\">\n <Skeleton className=\"h-8 w-3/4\" />\n <div className=\"grid grid-cols-2 gap-4\">\n <Skeleton className=\"h-10 w-full\" />\n <Skeleton className=\"h-10 w-full\" />\n </div>\n <Skeleton className=\"h-px w-full\" />\n <div className=\"space-y-2\">\n <Skeleton className=\"h-4 w-16\" />\n <div className=\"flex gap-2\">\n <Skeleton className=\"h-6 w-16 rounded-full\" />\n <Skeleton className=\"h-6 w-20 rounded-full\" />\n </div>\n </div>\n <div className=\"space-y-2\">\n <Skeleton className=\"h-4 w-24\" />\n <div className=\"flex gap-2\">\n <Skeleton className=\"h-8 w-28 rounded-full\" />\n <Skeleton className=\"h-8 w-32 rounded-full\" />\n </div>\n </div>\n <Skeleton className=\"h-24 w-full\" />\n </div>\n );\n}\n\n// ─── Main Component ─────────────────────────\n\nexport function TaskDetailSheet({\n task,\n open,\n onOpenChange,\n onUpdate,\n onAddLabel,\n onRemoveLabel,\n onToggleLabel,\n onCreateLabel,\n availableLabels,\n onAddAssignee,\n onRemoveAssignee,\n onToggleAssignee,\n availableUsers,\n availableGroups,\n onToggleAssigneeGroup,\n onAddSubtask,\n onToggleSubtask,\n onDeleteSubtask,\n onUpdateSubtask,\n onDeleteTask,\n comments,\n currentUser,\n loading = false,\n availableStatuses = defaultStatuses,\n availablePriorities = defaultPriorities,\n}: TaskDetailSheetProps) {\n const isDesktop = useMediaQuery('(min-width: 768px)');\n\n const content = loading ? (\n <TaskDetailSkeleton />\n ) : task ? (\n <TaskDetailContent\n task={task}\n onUpdate={onUpdate}\n onAddLabel={onAddLabel}\n onRemoveLabel={onRemoveLabel}\n onToggleLabel={onToggleLabel}\n onCreateLabel={onCreateLabel}\n availableLabels={availableLabels}\n onAddAssignee={onAddAssignee}\n onRemoveAssignee={onRemoveAssignee}\n onToggleAssignee={onToggleAssignee}\n availableUsers={availableUsers}\n availableGroups={availableGroups}\n onToggleAssigneeGroup={onToggleAssigneeGroup}\n onAddSubtask={onAddSubtask}\n onToggleSubtask={onToggleSubtask}\n onDeleteSubtask={onDeleteSubtask}\n onUpdateSubtask={onUpdateSubtask}\n onDeleteTask={onDeleteTask}\n comments={comments}\n currentUser={currentUser}\n statuses={availableStatuses}\n priorities={availablePriorities}\n />\n ) : null;\n\n // Desktop: Sheet from right\n if (isDesktop) {\n return (\n <Sheet open={open} onOpenChange={onOpenChange}>\n <SheetContent\n side=\"right\"\n className={cn(\n 'w-full sm:max-w-lg lg:max-w-xl',\n 'border-l border-theme-subtle',\n 'flex flex-col p-0',\n )}\n style={{\n background: 'var(--org-bg-elevated, #110E22)',\n color: 'var(--org-text, #F0ECF9)',\n }}\n >\n <SheetHeader className=\"px-6 py-4 border-b border-theme-subtle\">\n <SheetTitle className=\"text-theme\">\n {task?.number ? `Task #${task.number}` : 'Detalhes da Tarefa'}\n </SheetTitle>\n </SheetHeader>\n {content}\n </SheetContent>\n </Sheet>\n );\n }\n\n // Mobile: Full screen drawer\n return (\n <Drawer open={open} onOpenChange={onOpenChange}>\n <DrawerContent\n className={cn(\n 'h-[100dvh] max-h-[100dvh]',\n 'border-none rounded-none',\n 'flex flex-col',\n )}\n style={{\n background: 'var(--org-bg-elevated, #110E22)',\n color: 'var(--org-text, #F0ECF9)',\n }}\n >\n <DrawerHeader className=\"px-4 py-3 border-b border-theme-subtle flex-shrink-0\">\n <div className=\"flex items-center justify-between\">\n <DrawerTitle className=\"text-theme\">\n {task?.number ? `Task #${task.number}` : 'Detalhes'}\n </DrawerTitle>\n <button\n onClick={() => onOpenChange(false)}\n className=\"p-2 rounded-xl hover:bg-theme-highlight text-theme-muted\"\n >\n <X className=\"w-5 h-5\" />\n </button>\n </div>\n </DrawerHeader>\n {content}\n </DrawerContent>\n </Drawer>\n );\n}\n\nTaskDetailSheet.displayName = 'TaskDetailSheet';\n\n// Export types and hook\nexport { useMediaQuery };\n","'use client';\n\nimport * as React from 'react';\nimport { GripVertical } from 'lucide-react';\nimport { cn } from '../../lib/utils';\nimport { Badge } from '../primitives/badge';\nimport { UserAvatar } from '../primitives/user-avatar';\nimport { UserDisplayName } from '../primitives/user-display-name';\nimport { TaskDetailSheet, type TaskDetailData, type TaskStatus, type TaskPriority, type TaskAssignee } from './task-detail-sheet';\nimport { OrgCheckCircle, OrgComment, OrgAttachment, OrgCalendar, OrgSprint } from '../../icons';\n\n// ─── Priority Colors (Glass Style) ──────────\n\nconst priorityColors: Record<string, string> = {\n CRITICAL: 'bg-rose-500/15 text-rose-400 border-rose-500/30',\n URGENT: 'bg-rose-500/15 text-rose-400 border-rose-500/30',\n HIGH: 'bg-amber-500/15 text-amber-400 border-amber-500/30',\n MEDIUM: 'bg-blue-500/15 text-blue-400 border-blue-500/30',\n LOW: 'bg-slate-500/15 text-slate-400 border-slate-500/30',\n NONE: 'bg-slate-500/10 text-slate-500 border-slate-500/20',\n};\n\n// Legacy config for backwards compatibility\nconst priorityConfig = {\n CRITICAL: { color: 'bg-rose-500', label: 'Critical', variant: 'error' as const },\n URGENT: { color: 'bg-rose-500', label: 'Urgent', variant: 'error' as const },\n HIGH: { color: 'bg-amber-500', label: 'High', variant: 'warning' as const },\n MEDIUM: { color: 'bg-blue-500', label: 'Medium', variant: 'info' as const },\n LOW: { color: 'bg-neutral-400', label: 'Low', variant: 'default' as const },\n NONE: { color: 'bg-neutral-400', label: 'None', variant: 'default' as const },\n} as const;\n\n// ─── Types ──────────────────────────────────\n\nexport interface TaskCardData {\n id: string;\n title: string;\n number?: number;\n description?: string | null;\n priority?: keyof typeof priorityConfig;\n status?: TaskStatus;\n storyPoints?: number | null;\n /** Single assignee (legacy support) */\n assignee?: {\n id?: string;\n /** Optional — when absent, UserAvatar will self-fetch by `id` */\n name?: string;\n avatarUrl?: string | null;\n } | null;\n /** Multiple assignees - recommended approach */\n assignees?: Array<{\n id: string;\n /** Optional — when absent, UserAvatar/UserDisplayName will self-fetch by `id` */\n name?: string;\n avatarUrl?: string | null;\n }>;\n /** Assign to a group instead of individuals */\n assigneeGroup?: {\n id: string;\n name: string;\n memberCount: number;\n avatarUrl?: string | null;\n } | null;\n labels?: Array<{ id: string; name: string; color: string } | string>;\n dueDate?: string | null;\n startDate?: string | null;\n subtaskCount?: number;\n subtaskDone?: number;\n commentCount?: number;\n attachmentCount?: number;\n reworkCount?: number;\n /** Subtasks for detail sheet */\n subtasks?: Array<{\n id: string;\n title: string;\n completed: boolean;\n }>;\n /** Extra fields the consumer can attach for detail rendering */\n [key: string]: unknown;\n}\n\nexport interface TaskCardProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onDragStart' | 'onDragEnd'> {\n /** Task data to render (undefined will show skeleton) */\n task?: TaskCardData;\n /** Click handler when card is clicked (if set, internal sheet is disabled unless enableDetailSheet=true) */\n onTaskClick?: (task: TaskCardData) => void;\n /** Whether the card is being dragged */\n isDragging?: boolean;\n /** Whether the card is selected */\n isSelected?: boolean;\n /** Compact variant (less padding, fewer details) */\n compact?: boolean;\n /** Enable internal TaskDetailSheet (default true if onTaskClick is not provided) */\n enableDetailSheet?: boolean;\n /** Show drag handle for external DnD libraries */\n showDragHandle?: boolean;\n /** Callbacks for TaskDetailSheet operations */\n onUpdate?: (taskId: string, updates: Partial<TaskDetailData>) => Promise<void>;\n onAddLabel?: (taskId: string) => void;\n onRemoveLabel?: (taskId: string, labelId: string) => void;\n onToggleLabel?: (taskId: string, label: { id: string; name: string; color: string }) => void;\n onCreateLabel?: (name: string, color: string) => Promise<{ id: string; name: string; color: string }>;\n availableLabels?: Array<{ id: string; name: string; color: string }>;\n onAddAssignee?: (taskId: string) => void;\n onRemoveAssignee?: (taskId: string, assigneeId: string) => void;\n onToggleAssignee?: (taskId: string, assignee: TaskAssignee) => void;\n availableUsers?: Array<{ id: string; name: string; avatarUrl?: string }>;\n onAddSubtask?: (taskId: string, title: string) => Promise<void>;\n onToggleSubtask?: (taskId: string, subtaskId: string, completed: boolean) => Promise<void>;\n onDeleteSubtask?: (taskId: string, subtaskId: string) => Promise<void>;\n onUpdateSubtask?: (taskId: string, subtaskId: string, title: string) => Promise<void>;\n}\n\n// ─── Helper: Convert TaskCardData to TaskDetailData ───\n\nfunction toDetailData(task: TaskCardData): TaskDetailData {\n const labels = (task.labels || []).map((label, i) =>\n typeof label === 'string'\n ? { id: `label-${i}`, name: label, color: '#6b7280' }\n : label\n );\n\n const assignees = task.assignees\n ? task.assignees.map((a) => ({ id: a.id, name: a.name, avatarUrl: a.avatarUrl || undefined }))\n : task.assignee\n ? [{ id: task.assignee.id || 'legacy', name: task.assignee.name ?? undefined, avatarUrl: task.assignee.avatarUrl || undefined }]\n : [];\n\n return {\n id: task.id,\n title: task.title,\n description: task.description || undefined,\n number: task.number,\n status: task.status || 'TODO',\n priority: (task.priority === 'CRITICAL' ? 'URGENT' : task.priority || 'LOW') as TaskPriority,\n labels,\n assignees,\n dueDate: task.dueDate || undefined,\n startDate: task.startDate || undefined,\n storyPoints: task.storyPoints || undefined,\n subtaskCount: task.subtaskCount,\n subtaskDone: task.subtaskDone,\n commentCount: task.commentCount,\n attachmentCount: task.attachmentCount,\n subtasks: task.subtasks,\n };\n}\n\n// ─── Component ──────────────────────────────\n\nfunction TaskCard({\n task,\n onTaskClick,\n isDragging,\n isSelected,\n compact = false,\n enableDetailSheet,\n showDragHandle,\n onUpdate,\n onAddLabel,\n onRemoveLabel,\n onToggleLabel,\n onCreateLabel,\n availableLabels,\n onAddAssignee,\n onRemoveAssignee,\n onToggleAssignee,\n availableUsers,\n onAddSubtask,\n onToggleSubtask,\n onDeleteSubtask,\n onUpdateSubtask,\n className,\n ...props\n}: TaskCardProps) {\n const [sheetOpen, setSheetOpen] = React.useState(false);\n\n // Guard: return skeleton if task data is missing\n if (!task) {\n return <TaskCardSkeleton compact={compact} className={className} />;\n }\n\n const priority = task.priority ?? 'NONE';\n const priorityClasses = priorityColors[priority] || priorityColors.NONE;\n \n // Determine if internal sheet should be used\n const useInternalSheet = enableDetailSheet ?? !onTaskClick;\n\n const handleClick = (e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n \n if (onTaskClick) {\n onTaskClick(task);\n }\n if (useInternalSheet) {\n setSheetOpen(true);\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n if (onTaskClick) {\n onTaskClick(task);\n }\n if (useInternalSheet) {\n setSheetOpen(true);\n }\n }\n };\n\n // Normalize labels for display\n const displayLabels = (task.labels || []).map((label) =>\n typeof label === 'string' ? label : label.name\n );\n\n return (\n <>\n <div\n role=\"button\"\n tabIndex={0}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n data-task-id={task.id}\n className={cn(\n // Glass geometric style\n 'group relative flex flex-col gap-2 p-3 cursor-pointer',\n 'bg-theme-subtle-10 backdrop-blur-md border border-theme-subtle',\n 'transition-all duration-[400ms] ease-[cubic-bezier(0.25,1,0.5,1)] rounded-xl',\n 'hover:border-theme-medium',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/50',\n // State modifiers\n isDragging && 'opacity-50 scale-95',\n isSelected && 'ring-2 ring-primary/50 border-primary/30',\n compact && 'p-2 gap-1',\n className,\n )}\n {...props}\n >\n {/* Drag handle for external DnD */}\n {showDragHandle && (\n <div\n data-drag-handle\n className=\"absolute top-2 right-2 p-1 rounded opacity-0 group-hover:opacity-100 transition-opacity cursor-grab active:cursor-grabbing text-theme-muted hover:text-theme\"\n >\n <GripVertical className=\"w-4 h-4\" />\n </div>\n )}\n\n {/* Title */}\n <h4\n className={cn(\n 'text-sm font-medium text-theme pr-6 line-clamp-2',\n compact && 'text-xs line-clamp-1',\n )}\n >\n {task.title}\n </h4>\n\n {/* Meta row: priority + labels */}\n <div className=\"flex items-center gap-2 flex-wrap\">\n {priority !== 'NONE' && (\n <Badge\n className={cn(\n 'text-[10px] px-1.5 py-0 h-4 border',\n priorityClasses,\n )}\n >\n {priority}\n </Badge>\n )}\n {!compact && displayLabels.slice(0, 2).map((label, i) => (\n <Badge\n key={`${label}-${i}`}\n className=\"text-[10px] px-1.5 py-0 h-4 bg-primary/10 text-primary-light border-primary/20\"\n >\n {label}\n </Badge>\n ))}\n {!compact && displayLabels.length > 2 && (\n <span className=\"text-[10px] text-theme-muted\">+{displayLabels.length - 2}</span>\n )}\n </div>\n\n {/* Stats row */}\n {!compact && (\n <div className=\"flex items-center gap-3 text-xs text-theme-muted\">\n {task.number != null && (\n <span className=\"font-mono opacity-60\">#{task.number}</span>\n )}\n {task.storyPoints != null && task.storyPoints > 0 && (\n <span className=\"inline-flex items-center gap-0.5 text-[10px] px-1.5 py-0.5 rounded-md bg-primary/10 text-primary-light border border-primary/25 font-medium\">\n <OrgSprint className=\"w-2.5 h-2.5\" />\n {task.storyPoints}pt\n </span>\n )}\n {task.subtaskCount != null && task.subtaskCount > 0 && (\n <span className=\"flex items-center gap-0.5\">\n <OrgCheckCircle className=\"w-3 h-3\" /> {task.subtaskDone ?? 0}/{task.subtaskCount}\n </span>\n )}\n {task.commentCount != null && task.commentCount > 0 && (\n <span className=\"flex items-center gap-0.5\">\n <OrgComment className=\"w-3 h-3\" /> {task.commentCount}\n </span>\n )}\n {task.attachmentCount != null && task.attachmentCount > 0 && (\n <span className=\"flex items-center gap-0.5\">\n <OrgAttachment className=\"w-3 h-3\" /> {task.attachmentCount}\n </span>\n )}\n {task.reworkCount != null && task.reworkCount > 0 && (\n <span className=\"text-rose-400\">↻{task.reworkCount}</span>\n )}\n </div>\n )}\n\n {/* Assignee row */}\n {task.assigneeGroup ? (\n <div className=\"flex items-center gap-2 mt-1\">\n <div\n className=\"w-5 h-5 rounded-full bg-blue-500/20 flex items-center justify-center text-[10px] font-bold text-blue-400 border border-blue-500/30\"\n title={`${task.assigneeGroup.name} (${task.assigneeGroup.memberCount} membros)`}\n >\n {task.assigneeGroup.name[0]}\n </div>\n <span className=\"text-xs text-theme-muted truncate max-w-24\">{task.assigneeGroup.name}</span>\n </div>\n ) : task.assignees && task.assignees.length > 0 ? (\n <div className=\"flex items-center gap-2 mt-1\">\n <div className=\"flex -space-x-1.5\">\n {task.assignees.slice(0, 2).map((assignee) => (\n <UserAvatar\n key={assignee.id}\n userId={assignee.id}\n name={assignee.name}\n src={assignee.avatarUrl}\n size=\"sm\"\n showHoverInfo={true}\n className=\"h-5 w-5 border border-primary/20\"\n />\n ))}\n {task.assignees.length > 2 && (\n <div\n className=\"w-5 h-5 rounded-full bg-primary/10 flex items-center justify-center text-[10px] font-bold text-primary-light border border-primary/20\"\n >\n +{task.assignees.length - 2}\n </div>\n )}\n </div>\n <UserDisplayName\n userId={task.assignees[0].id}\n name={task.assignees[0].name}\n className=\"text-xs text-theme-muted truncate max-w-24\"\n />\n </div>\n ) : task.assignee ? (\n <div className=\"flex items-center gap-2 mt-1\">\n <UserAvatar\n userId={task.assignee.id}\n name={task.assignee.name}\n src={task.assignee.avatarUrl}\n size=\"sm\"\n className=\"h-5 w-5\"\n />\n <UserDisplayName\n userId={task.assignee.id}\n name={task.assignee.name}\n className=\"text-xs text-theme-muted truncate max-w-24\"\n />\n </div>\n ) : null}\n\n {/* Due date */}\n {!compact && task.dueDate && (\n <div className=\"mt-1\">\n <DueDateBadge date={task.dueDate} />\n </div>\n )}\n\n {/* Geometric corner accent */}\n <div className=\"pointer-events-none absolute bottom-0 right-0 h-3 w-3 border-b border-r border-primary/20\" />\n </div>\n\n {/* Internal TaskDetailSheet */}\n {useInternalSheet && (\n <TaskDetailSheet\n task={sheetOpen ? toDetailData(task) : null}\n open={sheetOpen}\n onOpenChange={setSheetOpen}\n onUpdate={onUpdate}\n onAddLabel={onAddLabel}\n onRemoveLabel={onRemoveLabel}\n onToggleLabel={onToggleLabel}\n onCreateLabel={onCreateLabel}\n availableLabels={availableLabels}\n onAddAssignee={onAddAssignee}\n onRemoveAssignee={onRemoveAssignee}\n onToggleAssignee={onToggleAssignee}\n availableUsers={availableUsers}\n onAddSubtask={onAddSubtask}\n onToggleSubtask={onToggleSubtask}\n onDeleteSubtask={onDeleteSubtask}\n onUpdateSubtask={onUpdateSubtask}\n />\n )}\n </>\n );\n}\n\n// ─── Due Date Badge ─────────────────────────\n\nfunction DueDateBadge({ date }: { date: string }) {\n const d = new Date(date);\n const now = new Date();\n const diffDays = Math.ceil((d.getTime() - now.getTime()) / (1000 * 60 * 60 * 24));\n const isOverdue = diffDays < 0;\n const isSoon = diffDays >= 0 && diffDays <= 2;\n\n return (\n <span\n className={cn(\n 'inline-flex items-center gap-1 text-[10px] px-1.5 py-0.5 border',\n isOverdue && 'bg-rose-500/15 text-rose-400 border-rose-500/30',\n isSoon && !isOverdue && 'bg-amber-500/15 text-amber-400 border-amber-500/30',\n !isOverdue && !isSoon && 'bg-theme-subtle text-theme-muted border-theme-subtle',\n )}\n >\n <OrgCalendar className=\"w-3 h-3\" /> {d.toLocaleDateString('pt-BR', { day: '2-digit', month: 'short' })}\n </span>\n );\n}\n\nTaskCard.displayName = 'TaskCard';\n\n// ─── Skeleton ───────────────────────────────\n\nfunction TaskCardSkeleton({ compact, className }: { compact?: boolean; className?: string }) {\n return (\n <div\n className={cn(\n 'relative flex flex-col gap-2 animate-pulse',\n 'bg-theme-subtle/50 backdrop-blur-md border border-primary/10 rounded-xl',\n compact ? 'p-2' : 'p-3',\n className,\n )}\n >\n {/* Title */}\n <div className=\"h-4 w-3/4 rounded bg-glass-border\" />\n \n {compact ? null : (\n <>\n {/* Badges */}\n <div className=\"flex gap-1.5\">\n <div className=\"h-4 w-14 rounded bg-glass-border\" />\n <div className=\"h-4 w-10 rounded bg-glass-border\" />\n </div>\n {/* Stats */}\n <div className=\"flex gap-3\">\n <div className=\"h-3 w-8 rounded bg-glass-border/50\" />\n <div className=\"h-3 w-12 rounded bg-glass-border/50\" />\n </div>\n {/* Assignee */}\n <div className=\"flex items-center gap-2 mt-1\">\n <div className=\"h-5 w-5 rounded-full bg-glass-border\" />\n <div className=\"h-3 w-16 rounded bg-glass-border/50\" />\n </div>\n </>\n )}\n \n {/* Geometric corner accent */}\n <div className=\"pointer-events-none absolute bottom-0 right-0 h-3 w-3 border-b border-r border-primary/20\" />\n </div>\n );\n}\n\nTaskCardSkeleton.displayName = 'TaskCardSkeleton';\n\nexport { TaskCard, TaskCardSkeleton, DueDateBadge, priorityConfig, priorityColors };\n","// ─────────────────────────────────────────────\n// TaskDetailDialog — Exibe detalhes completos da task\n// ─────────────────────────────────────────────\n// Comments are auto-fetched via OrganifyProvider API.\n// currentUser is derived from OrganifyProvider if not passed.\n// ─────────────────────────────────────────────\n\n'use client';\n\nimport React from 'react';\nimport { format } from 'date-fns';\nimport { ptBR } from 'date-fns/locale';\nimport { Badge } from '../primitives/badge';\nimport { Button } from '../primitives/button';\nimport { Separator } from '../primitives/separator';\nimport { ResponsiveDialog } from '../primitives/responsive-dialog';\nimport { UserAvatar } from '../primitives/user-avatar';\nimport { UserDisplayName } from '../primitives/user-display-name';\nimport { TaskCardData, priorityConfig } from './task-card';\nimport { CommentThread } from '../comments/comment-thread';\nimport type { Comment, CommentAuthor } from '../comments/types';\n\nexport interface TaskDetailDialogProps {\n task: TaskCardData | null;\n open: boolean;\n onOpenChange: (open: boolean) => void;\n /** Comments to display (if not provided, auto-fetched via API) */\n comments?: Comment[];\n /** Current user (if not provided, derived from OrganifyProvider) */\n currentUser?: CommentAuthor;\n}\n\nconst statusConfig = {\n TODO: { label: 'A Fazer', color: 'bg-gray-100 text-gray-800' },\n IN_PROGRESS: { label: 'Em Progresso', color: 'bg-blue-100 text-blue-800' },\n DONE: { label: 'Concluído', color: 'bg-green-100 text-green-800' },\n BLOCKED: { label: 'Bloqueado', color: 'bg-red-100 text-red-800' },\n REVIEW: { label: 'Em Revisão', color: 'bg-purple-100 text-purple-800' },\n} as const;\n\nexport function TaskDetailDialog({\n task,\n open,\n onOpenChange,\n comments,\n currentUser,\n}: TaskDetailDialogProps) {\n if (!task) return null;\n\n const status = (task.status as keyof typeof statusConfig) || 'TODO';\n const priority = task.priority ? priorityConfig[task.priority] : null;\n const dueDate = task.dueDate ? new Date(task.dueDate) : null;\n const startDate = task.startDate ? new Date(task.startDate) : null;\n\n // Determinar assignees display\n const assigneesList = task.assignees || (task.assignee ? [{ id: '0', ...task.assignee }] : []);\n const hasGroup = !!task.assigneeGroup;\n\n const footerContent = (\n <div className=\"flex gap-2 w-full justify-end\">\n <Button variant=\"outline\" onClick={() => onOpenChange(false)}>\n Fechar\n </Button>\n <Button>Editar Task</Button>\n </div>\n );\n\n return (\n <ResponsiveDialog \n open={open} \n onOpenChange={onOpenChange}\n title={task.title}\n description={task.description || undefined}\n footer={footerContent}\n contentClassName=\"max-w-2xl\"\n >\n <div className=\"space-y-6\">\n {/* Task Number Badge */}\n {task.number && (\n <div className=\"flex justify-end -mt-4\">\n <Badge>#{task.number}</Badge>\n </div>\n )}\n\n {/* Status & Priority */}\n <div className=\"grid grid-cols-2 gap-4\">\n <div>\n <p className=\"text-sm font-semibold text-muted-foreground mb-2\">Status</p>\n <Badge className={statusConfig[status].color}>\n {statusConfig[status].label}\n </Badge>\n </div>\n {priority && (\n <div>\n <p className=\"text-sm font-semibold text-muted-foreground mb-2\">Prioridade</p>\n <Badge style={{ backgroundColor: priority.color }}>\n {priority.label}\n </Badge>\n </div>\n )}\n </div>\n\n {/* Story Points */}\n {task.storyPoints !== undefined && task.storyPoints !== null && (\n <div>\n <p className=\"text-sm font-semibold text-muted-foreground mb-2\">Story Points</p>\n <div className=\"text-lg font-bold\">{task.storyPoints}</div>\n </div>\n )}\n\n <Separator />\n\n {/* Assignees or Group */}\n {(hasGroup || assigneesList.length > 0) && (\n <div>\n <p className=\"text-sm font-semibold text-muted-foreground mb-3\">\n {hasGroup ? 'Grupo Atribuído' : 'Atribuído para'}\n </p>\n {hasGroup ? (\n <div className=\"flex items-center gap-3 p-3 bg-blue-500/10 rounded-xl border border-blue-500/20\">\n <div className=\"w-10 h-10 rounded-full bg-blue-500/20 flex items-center justify-center text-sm font-bold text-blue-400\">\n {task.assigneeGroup!.name[0]}\n </div>\n <div className=\"flex-1\">\n <p className=\"font-medium\">{task.assigneeGroup!.name}</p>\n <p className=\"text-sm text-muted-foreground\">\n {task.assigneeGroup!.memberCount} membros\n </p>\n </div>\n </div>\n ) : (\n <div className=\"flex flex-wrap gap-2\">\n {assigneesList.map((assignee) => (\n <div\n key={assignee.id}\n className=\"flex items-center gap-2 px-3 py-2 bg-muted rounded-full\"\n >\n <UserAvatar\n userId={assignee.id}\n name={assignee.name}\n src={assignee.avatarUrl}\n size=\"sm\"\n showHoverInfo={false}\n className=\"w-6 h-6\"\n />\n <UserDisplayName\n userId={assignee.id}\n name={assignee.name}\n className=\"text-sm font-medium\"\n />\n </div>\n ))}\n </div>\n )}\n </div>\n )}\n\n {/* Labels */}\n {task.labels && task.labels.length > 0 && (\n <div>\n <p className=\"text-sm font-semibold text-muted-foreground mb-3\">Labels</p>\n <div className=\"flex flex-wrap gap-2\">\n {task.labels.map((label, index) => {\n const labelName = typeof label === 'string' ? label : label.name;\n return (\n <Badge key={`${labelName}-${index}`} className=\"bg-muted text-muted-foreground\">\n {labelName}\n </Badge>\n );\n })}\n </div>\n </div>\n )}\n\n {/* Dates */}\n <div className=\"grid grid-cols-2 gap-4\">\n {startDate && (\n <div>\n <p className=\"text-sm font-semibold text-muted-foreground mb-2\">Data de Início</p>\n <p className=\"text-sm\">\n {format(startDate, 'dd MMM yyyy', { locale: ptBR })}\n </p>\n </div>\n )}\n {dueDate && (\n <div>\n <p className=\"text-sm font-semibold text-muted-foreground mb-2\">Data de Vencimento</p>\n <p className=\"text-sm\">\n {format(dueDate, 'dd MMM yyyy', { locale: ptBR })}\n </p>\n </div>\n )}\n </div>\n\n <Separator />\n\n {/* Subtasks */}\n {task.subtaskCount && task.subtaskCount > 0 && (\n <div>\n <p className=\"text-sm font-semibold text-muted-foreground mb-2\">Subtasks</p>\n <div className=\"flex items-center gap-2\">\n <div className=\"flex-1 h-2 bg-muted rounded-full overflow-hidden\">\n <div\n className=\"h-full bg-green-500\"\n style={{\n width: `${((task.subtaskDone || 0) / task.subtaskCount) * 100}%`,\n }}\n />\n </div>\n <span className=\"text-sm font-medium\">\n {task.subtaskDone || 0}/{task.subtaskCount}\n </span>\n </div>\n </div>\n )}\n\n {/* Meta Info */}\n <div className=\"grid grid-cols-3 gap-4 text-center py-4 bg-muted/50 rounded-xl\">\n {task.commentCount !== undefined && (\n <div>\n <p className=\"text-2xl font-bold\">{task.commentCount}</p>\n <p className=\"text-xs text-muted-foreground\">Comentários</p>\n </div>\n )}\n {task.attachmentCount !== undefined && (\n <div>\n <p className=\"text-2xl font-bold\">{task.attachmentCount}</p>\n <p className=\"text-xs text-muted-foreground\">Arquivos</p>\n </div>\n )}\n {task.reworkCount !== undefined && (\n <div>\n <p className=\"text-2xl font-bold\">{task.reworkCount || 0}</p>\n <p className=\"text-xs text-muted-foreground\">Rework</p>\n </div>\n )}\n </div>\n\n {/* Comments Section — auto-fetched via OrganifyProvider API */}\n <div>\n <Separator className=\"mb-4\" />\n <p className=\"text-sm font-semibold text-muted-foreground mb-4\">Comentários</p>\n <CommentThread \n entityType=\"task\"\n entityId={task.id}\n comments={comments}\n currentUser={currentUser}\n />\n </div>\n </div>\n </ResponsiveDialog>\n );\n}\n\nTaskDetailDialog.displayName = 'TaskDetailDialog';\n","// ─────────────────────────────────────────────\n// KanbanBoard — Glass-style board with TaskDetailSheet\n// ─────────────────────────────────────────────\n// Glass TaskCard design with geometric accents\n// Click on card opens TaskDetailSheet\n// Supports internal HTML5 DnD or external library\n// ─────────────────────────────────────────────\n\n'use client';\n\nimport * as React from 'react';\nimport { GripVertical, Check, X } from 'lucide-react';\nimport { cn } from '../../lib/utils';\nimport { Button } from '../primitives/button';\nimport { Badge } from '../primitives/badge';\nimport { ScrollArea } from '../primitives/scroll-area';\nimport { TaskDetailSheet, type TaskDetailData, type TaskDetailSheetProps } from './task-detail-sheet';\nimport { OrgPlus, OrgSprint } from '../../icons';\n\n// ─── Types ──────────────────────────────────\n\nexport interface KanbanTask {\n id: string;\n title: string;\n description?: string;\n number?: number;\n priority?: 'LOW' | 'MEDIUM' | 'HIGH' | 'URGENT';\n status?: 'TODO' | 'IN_PROGRESS' | 'DONE' | 'BLOCKED' | 'REVIEW';\n labels?: Array<{ id: string; name: string; color: string } | string>;\n assignee?: { id?: string; name: string; avatarUrl?: string };\n assignees?: Array<{ id: string; name: string; avatarUrl?: string }>;\n dueDate?: string;\n startDate?: string;\n storyPoints?: number;\n subtaskCount?: number;\n subtaskDone?: number;\n commentCount?: number;\n subtasks?: Array<{ id: string; title: string; completed: boolean }>;\n}\n\nexport interface KanbanColumnData {\n id: string;\n title: string;\n color?: string;\n tasks: KanbanTask[];\n /** WIP limit — column header turns red when exceeded */\n wipLimit?: number;\n /** Whether this column is locked (e.g. restricted by role) */\n locked?: boolean;\n}\n\nexport interface KanbanBoardProps {\n columns: KanbanColumnData[];\n onColumnChange?: (columns: KanbanColumnData[]) => void;\n onTaskMove?: (taskId: string, fromColumnId: string, toColumnId: string, newIndex: number) => void;\n /** Called with (columnId, title) when inline task is created */\n onAddTask?: (columnId: string, title?: string) => void;\n /** Called with (title) when inline column is created */\n onAddColumn?: (title?: string) => void;\n /** Called with (columnId, newTitle) when column is renamed inline */\n onRenameColumn?: (columnId: string, newTitle: string) => void;\n className?: string;\n /** \n * External drag-and-drop library integration\n * If true, the component provides data attributes for external DnD\n * If false, uses internal HTML5 drag-and-drop (basic)\n */\n externalDnD?: boolean;\n /** TaskDetailSheet callbacks */\n onTaskUpdate?: TaskDetailSheetProps['onUpdate'];\n onToggleLabel?: TaskDetailSheetProps['onToggleLabel'];\n onCreateLabel?: TaskDetailSheetProps['onCreateLabel'];\n availableLabels?: TaskDetailSheetProps['availableLabels'];\n onAddLabel?: TaskDetailSheetProps['onAddLabel'];\n onRemoveLabel?: TaskDetailSheetProps['onRemoveLabel'];\n onToggleAssignee?: TaskDetailSheetProps['onToggleAssignee'];\n availableUsers?: TaskDetailSheetProps['availableUsers'];\n availableGroups?: TaskDetailSheetProps['availableGroups'];\n onToggleAssigneeGroup?: TaskDetailSheetProps['onToggleAssigneeGroup'];\n onAddAssignee?: TaskDetailSheetProps['onAddAssignee'];\n onRemoveAssignee?: TaskDetailSheetProps['onRemoveAssignee'];\n onAddSubtask?: TaskDetailSheetProps['onAddSubtask'];\n onToggleSubtask?: TaskDetailSheetProps['onToggleSubtask'];\n onDeleteSubtask?: TaskDetailSheetProps['onDeleteSubtask'];\n onDeleteTask?: TaskDetailSheetProps['onDeleteTask'];\n onUpdateSubtask?: TaskDetailSheetProps['onUpdateSubtask'];\n /** When provided, fires on task click instead of opening internal sheet.\n * The parent then renders its own TaskDetailSheet with full data (subtasks, comments). */\n onTaskClick?: (taskId: string) => void;\n}\n\n// ─── Priority Config ────────────────────────\n\nconst priorityColors: Record<string, string> = {\n LOW: 'bg-slate-500/15 text-slate-400 border-slate-500/30',\n MEDIUM: 'bg-blue-500/15 text-blue-400 border-blue-500/30',\n HIGH: 'bg-amber-500/15 text-amber-400 border-amber-500/30',\n URGENT: 'bg-rose-500/15 text-rose-400 border-rose-500/30',\n};\n\n// ─── Helper: Convert KanbanTask to TaskDetailData ───\n\nfunction toDetailData(task: KanbanTask, columnId: string): TaskDetailData {\n const labels = (task.labels || []).map((label, i) =>\n typeof label === 'string'\n ? { id: `label-${i}`, name: label, color: '#6b7280' }\n : label\n );\n\n const assignees = task.assignees\n ? task.assignees.map((a) => ({ id: a.id, name: a.name, avatarUrl: a.avatarUrl }))\n : task.assignee\n ? [{ id: task.assignee.id || 'legacy', name: task.assignee.name, avatarUrl: task.assignee.avatarUrl }]\n : [];\n\n // Map column to status if not provided\n const statusMap: Record<string, TaskDetailData['status']> = {\n 'todo': 'TODO',\n 'in-progress': 'IN_PROGRESS',\n 'in_progress': 'IN_PROGRESS',\n 'review': 'REVIEW',\n 'blocked': 'BLOCKED',\n 'done': 'DONE',\n };\n\n return {\n id: task.id,\n title: task.title,\n description: task.description,\n number: task.number,\n status: task.status || statusMap[columnId.toLowerCase()] || 'TODO',\n priority: task.priority || 'LOW',\n labels,\n assignees,\n dueDate: task.dueDate,\n startDate: task.startDate,\n storyPoints: task.storyPoints,\n subtaskCount: task.subtaskCount,\n subtaskDone: task.subtaskDone,\n commentCount: task.commentCount,\n subtasks: task.subtasks,\n };\n}\n\n// ─── Glass TaskCard Component ───────────────\n\ninterface TaskCardProps {\n task: KanbanTask;\n columnId: string;\n index: number;\n onClick: () => void;\n isDragging?: boolean;\n externalDnD?: boolean;\n onDragStart?: (e: React.DragEvent, task: KanbanTask, columnId: string) => void;\n onDragEnd?: () => void;\n onTouchDragStart?: (task: KanbanTask, columnId: string) => void;\n}\n\nfunction TaskCard({\n task,\n columnId,\n index,\n onClick,\n isDragging,\n externalDnD,\n onDragStart,\n onDragEnd,\n onTouchDragStart,\n}: TaskCardProps) {\n // ── Touch DnD state ──\n const touchTimerRef = React.useRef<ReturnType<typeof setTimeout> | null>(null);\n const hasMoved = React.useRef(false);\n\n const handleTouchStart = (e: React.TouchEvent) => {\n hasMoved.current = false;\n // Long-press to start drag (300ms)\n touchTimerRef.current = setTimeout(() => {\n if (!hasMoved.current) {\n onTouchDragStart?.(task, columnId);\n // Vibrate feedback on supported devices\n if (navigator.vibrate) navigator.vibrate(50);\n }\n }, 300);\n };\n\n const handleTouchMove = () => {\n hasMoved.current = true;\n if (touchTimerRef.current) {\n clearTimeout(touchTimerRef.current);\n touchTimerRef.current = null;\n }\n };\n\n const handleTouchEnd = () => {\n if (touchTimerRef.current) {\n clearTimeout(touchTimerRef.current);\n touchTimerRef.current = null;\n }\n };\n\n // Normalize labels for display\n const displayLabels = (task.labels || []).map((label) =>\n typeof label === 'string' ? label : label.name\n );\n\n return (\n <div\n draggable={!externalDnD}\n onDragStart={!externalDnD ? (e) => onDragStart?.(e, task, columnId) : undefined}\n onDragEnd={!externalDnD ? onDragEnd : undefined}\n onClick={onClick}\n onTouchStart={handleTouchStart}\n onTouchMove={handleTouchMove}\n onTouchEnd={handleTouchEnd}\n data-task-id={task.id}\n data-column-id={columnId}\n data-index={index}\n className={cn(\n 'group relative flex flex-col gap-2 p-3 cursor-pointer select-none',\n 'bg-theme-subtle backdrop-blur-md border border-theme-subtle',\n 'transition-all duration-[400ms] ease-[cubic-bezier(0.25,1,0.5,1)] rounded-xl',\n 'hover:border-primary-light/30',\n 'active:scale-[0.98]',\n isDragging && 'opacity-50 scale-95',\n )}\n >\n {/* Drag handle for external DnD */}\n {externalDnD && (\n <div\n data-drag-handle\n className=\"absolute top-2 right-2 p-1 rounded opacity-0 group-hover:opacity-100 transition-opacity cursor-grab active:cursor-grabbing text-theme-muted hover:text-theme\"\n >\n <GripVertical className=\"w-4 h-4\" />\n </div>\n )}\n\n {/* Title — truncated to 2 lines */}\n <h4 className=\"text-sm font-medium text-theme pr-6 line-clamp-2\">{task.title}</h4>\n\n {/* Meta row */}\n <div className=\"flex items-center gap-2 flex-wrap\">\n {task.priority && (\n <Badge\n className={cn(\n 'text-[10px] px-1.5 py-0 h-4 border',\n priorityColors[task.priority],\n )}\n >\n {task.priority}\n </Badge>\n )}\n {displayLabels.map((label, i) => (\n <Badge\n key={`${label}-${i}`}\n className=\"text-[10px] px-1.5 py-0 h-4 bg-primary/10 text-primary-light border-primary/20\"\n >\n {label}\n </Badge>\n ))}\n </div>\n\n {/* Story points + stats */}\n {(task.storyPoints != null || task.subtaskCount != null || task.commentCount != null) && (\n <div className=\"flex items-center gap-2 text-xs text-theme-muted\">\n {task.storyPoints != null && task.storyPoints > 0 && (\n <span className=\"inline-flex items-center gap-0.5 text-[10px] px-1.5 py-0.5 rounded-md bg-primary/10 text-primary-light border border-primary/25 font-medium\">\n <OrgSprint className=\"w-2.5 h-2.5\" />\n {task.storyPoints}pt\n </span>\n )}\n {task.subtaskCount != null && task.subtaskCount > 0 && (\n <span className=\"text-[10px]\">{task.subtaskDone ?? 0}/{task.subtaskCount} ✓</span>\n )}\n {task.commentCount != null && task.commentCount > 0 && (\n <span className=\"text-[10px]\">{task.commentCount} 💬</span>\n )}\n </div>\n )}\n\n {/* Assignee */}\n {task.assignee && (\n <div className=\"flex items-center gap-2 mt-1\">\n <div className=\"w-5 h-5 rounded-full bg-primary/20 flex items-center justify-center text-[10px] font-semibold text-primary-light\">\n {task.assignee.name.charAt(0)}\n </div>\n <span className=\"text-xs text-theme-muted\">{task.assignee.name}</span>\n </div>\n )}\n\n {/* Geometric corner accent */}\n <div className=\"pointer-events-none absolute bottom-0 right-0 h-3 w-3 border-b border-r border-primary/20\" />\n </div>\n );\n}\n\n// ─── Column Component ───────────────────────\n\ninterface ColumnComponentProps {\n column: KanbanColumnData;\n onTaskClick: (task: KanbanTask, columnId: string) => void;\n onAddTask?: (columnId: string, title?: string) => void;\n onRenameColumn?: (columnId: string, newTitle: string) => void;\n externalDnD?: boolean;\n draggedTask?: { task: KanbanTask; fromColumnId: string } | null;\n onDragStart?: (e: React.DragEvent, task: KanbanTask, columnId: string) => void;\n onDragEnd?: () => void;\n onDragOver?: (e: React.DragEvent, columnId: string) => void;\n onDrop?: (e: React.DragEvent, columnId: string) => void;\n isDropTarget?: boolean;\n onTouchDragStart?: (task: KanbanTask, columnId: string) => void;\n}\n\nfunction Column({\n column,\n onTaskClick,\n onAddTask,\n onRenameColumn,\n externalDnD,\n draggedTask,\n onDragStart,\n onDragEnd,\n onDragOver,\n onDrop,\n isDropTarget,\n onTouchDragStart,\n}: ColumnComponentProps) {\n // ─── Inline rename state ───\n const [isRenaming, setIsRenaming] = React.useState(false);\n const [renameValue, setRenameValue] = React.useState(column.title);\n const renameInputRef = React.useRef<HTMLInputElement>(null);\n\n // ─── Inline task creation state ───\n const [isAddingTask, setIsAddingTask] = React.useState(false);\n const [newTaskTitle, setNewTaskTitle] = React.useState('');\n const taskInputRef = React.useRef<HTMLInputElement>(null);\n\n React.useEffect(() => {\n if (isRenaming) renameInputRef.current?.focus();\n }, [isRenaming]);\n\n React.useEffect(() => {\n if (isAddingTask) taskInputRef.current?.focus();\n }, [isAddingTask]);\n\n const handleRenameSubmit = () => {\n const trimmed = renameValue.trim();\n if (trimmed && trimmed !== column.title) {\n onRenameColumn?.(column.id, trimmed);\n }\n setIsRenaming(false);\n };\n\n const handleRenameKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter') handleRenameSubmit();\n if (e.key === 'Escape') {\n setRenameValue(column.title);\n setIsRenaming(false);\n }\n };\n\n const handleAddTaskSubmit = () => {\n const trimmed = newTaskTitle.trim();\n if (trimmed) {\n onAddTask?.(column.id, trimmed);\n setNewTaskTitle('');\n // Keep input open for quick multi-add\n } else {\n setIsAddingTask(false);\n }\n };\n\n const handleAddTaskKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter') handleAddTaskSubmit();\n if (e.key === 'Escape') {\n setNewTaskTitle('');\n setIsAddingTask(false);\n }\n };\n\n return (\n <div\n data-column-id={column.id}\n onDragOver={!externalDnD ? (e) => {\n e.preventDefault();\n e.dataTransfer.dropEffect = 'move';\n onDragOver?.(e, column.id);\n } : undefined}\n onDrop={!externalDnD ? (e) => onDrop?.(e, column.id) : undefined}\n className={cn(\n 'flex flex-col w-[280px] sm:w-72 shrink-0 max-h-[calc(100dvh-8rem)] sm:max-h-[calc(100vh-10rem)]',\n 'bg-theme-glass backdrop-blur-md border border-theme-subtle rounded-xl',\n 'transition-all duration-[400ms] ease-[cubic-bezier(0.25,1,0.5,1)]',\n 'snap-start',\n isDropTarget && 'border-primary-light/50 bg-primary/5',\n )}\n >\n {/* Column Header */}\n <div className=\"flex items-center gap-2 px-3 py-3 border-b border-theme-subtle\">\n {column.color && (\n <div\n className=\"w-3 h-3 rounded-full shrink-0\"\n style={{ backgroundColor: column.color }}\n />\n )}\n\n {isRenaming ? (\n <div className=\"flex-1 flex items-center gap-1\">\n <input\n ref={renameInputRef}\n value={renameValue}\n onChange={(e) => setRenameValue(e.target.value)}\n onBlur={handleRenameSubmit}\n onKeyDown={handleRenameKeyDown}\n className=\"flex-1 text-sm font-semibold text-theme bg-transparent border-b border-primary-light/50 outline-none px-0 py-0\"\n />\n </div>\n ) : (\n <h3\n className=\"flex-1 text-sm font-semibold text-theme truncate cursor-pointer hover:text-primary-light transition-colors\"\n onClick={() => {\n if (onRenameColumn) {\n setRenameValue(column.title);\n setIsRenaming(true);\n }\n }}\n title={onRenameColumn ? 'Clique para renomear' : undefined}\n >\n {column.title}\n </h3>\n )}\n\n {/* Task count + WIP limit indicator */}\n <div className=\"flex items-center gap-1 shrink-0\">\n <Badge \n variant={column.wipLimit && column.tasks.length > column.wipLimit ? 'error' : 'default'}\n className={cn(\n 'text-xs',\n column.wipLimit && column.tasks.length > column.wipLimit\n ? 'bg-red-500/20 text-red-400 border-red-500/40 animate-pulse'\n : 'bg-theme-highlight text-theme-muted border-theme-subtle',\n )}\n >\n {column.tasks.length}\n {column.wipLimit != null && (\n <span className=\"text-theme-muted\">/{column.wipLimit}</span>\n )}\n </Badge>\n </div>\n </div>\n\n {/* WIP Limit warning bar */}\n {column.wipLimit != null && column.tasks.length > column.wipLimit && (\n <div className=\"px-3 py-1.5 bg-red-500/10 border-b border-red-500/20 text-[10px] font-medium text-red-400 text-center\">\n ⚠ WIP limit exceeded ({column.tasks.length - column.wipLimit} over)\n </div>\n )}\n\n {/* Tasks List — hidden scrollbar, smooth scroll */}\n <ScrollArea className=\"flex-1 min-h-0 [&_[data-radix-scroll-area-viewport]]:!overflow-y-auto [&_[data-radix-scroll-area-viewport]]:scrollbar-none\">\n <div className=\"p-2 space-y-2\">\n {column.tasks.map((task, index) => {\n const isDragging = draggedTask?.task.id === task.id;\n \n return (\n <TaskCard\n key={task.id}\n task={task}\n columnId={column.id}\n index={index}\n onClick={() => onTaskClick(task, column.id)}\n isDragging={isDragging}\n externalDnD={externalDnD}\n onDragStart={onDragStart}\n onDragEnd={onDragEnd}\n onTouchDragStart={onTouchDragStart}\n />\n );\n })}\n\n {/* Inline task creation input */}\n {isAddingTask && (\n <div className=\"p-2 bg-theme-subtle border border-theme-subtle rounded-xl animate-in slide-in-from-top-2 duration-[400ms]\">\n <input\n ref={taskInputRef}\n value={newTaskTitle}\n onChange={(e) => setNewTaskTitle(e.target.value)}\n onKeyDown={handleAddTaskKeyDown}\n placeholder=\"Título da tarefa...\"\n className=\"w-full text-sm text-theme bg-transparent outline-none placeholder:text-theme-muted\"\n />\n <div className=\"flex items-center gap-1 mt-2\">\n <Button\n variant=\"default\"\n size=\"sm\"\n onClick={handleAddTaskSubmit}\n disabled={!newTaskTitle.trim()}\n className=\"h-6 text-[11px] px-2\"\n >\n <Check className=\"w-3 h-3 mr-1\" />\n Criar\n </Button>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => {\n setNewTaskTitle('');\n setIsAddingTask(false);\n }}\n className=\"h-6 text-[11px] px-2\"\n >\n <X className=\"w-3 h-3\" />\n </Button>\n </div>\n </div>\n )}\n\n {/* Empty state */}\n {column.tasks.length === 0 && !isAddingTask && (\n <div className=\"flex flex-col items-center justify-center py-8 text-center\">\n <p className=\"text-xs text-theme-muted\">Nenhuma tarefa</p>\n </div>\n )}\n </div>\n </ScrollArea>\n\n {/* Add Task Button */}\n {onAddTask && !isAddingTask && (\n <div className=\"p-2 border-t border-theme-subtle\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => setIsAddingTask(true)}\n className=\"w-full justify-start text-xs text-theme-muted hover:text-theme hover:bg-theme-highlight\"\n >\n <OrgPlus className=\"w-3 h-3 mr-2\" />\n Adicionar tarefa\n </Button>\n </div>\n )}\n </div>\n );\n}\n\nColumn.displayName = 'KanbanColumn';\n\n// ─── Main Board Component ───────────────────\n\nexport function KanbanBoard({\n columns,\n onColumnChange,\n onTaskMove,\n onAddTask,\n onAddColumn,\n onRenameColumn,\n className,\n externalDnD = false,\n onTaskUpdate,\n onToggleLabel,\n onCreateLabel,\n availableLabels,\n onAddLabel,\n onRemoveLabel,\n onToggleAssignee,\n availableUsers,\n availableGroups,\n onToggleAssigneeGroup,\n onAddAssignee,\n onRemoveAssignee,\n onAddSubtask,\n onToggleSubtask,\n onDeleteSubtask,\n onDeleteTask,\n onUpdateSubtask,\n onTaskClick,\n}: KanbanBoardProps) {\n // Internal DnD state\n const [draggedTask, setDraggedTask] = React.useState<{\n task: KanbanTask;\n fromColumnId: string;\n } | null>(null);\n const [dropTargetColumnId, setDropTargetColumnId] = React.useState<string | null>(null);\n\n // ─── Mobile Touch DnD ───\n const [touchDraggedTask, setTouchDraggedTask] = React.useState<{\n task: KanbanTask;\n fromColumnId: string;\n } | null>(null);\n\n const handleTouchDragStart = React.useCallback((task: KanbanTask, fromColumnId: string) => {\n setTouchDraggedTask({ task, fromColumnId });\n }, []);\n\n const handleTouchDrop = React.useCallback((toColumnId: string) => {\n if (!touchDraggedTask) return;\n const { task, fromColumnId } = touchDraggedTask;\n if (fromColumnId !== toColumnId) {\n onTaskMove?.(task.id, fromColumnId, toColumnId, 0);\n if (onColumnChange) {\n const newColumns = columns.map((col) => {\n if (col.id === fromColumnId) return { ...col, tasks: col.tasks.filter((t) => t.id !== task.id) };\n if (col.id === toColumnId) return { ...col, tasks: [...col.tasks, task] };\n return col;\n });\n onColumnChange(newColumns);\n }\n }\n setTouchDraggedTask(null);\n }, [touchDraggedTask, columns, onTaskMove, onColumnChange]);\n\n const cancelTouchDrag = React.useCallback(() => setTouchDraggedTask(null), []);\n\n const isTouchDragging = touchDraggedTask !== null;\n const effectiveDraggedTask = draggedTask || touchDraggedTask;\n\n // TaskDetailSheet state\n const [sheetOpen, setSheetOpen] = React.useState(false);\n const [selectedTask, setSelectedTask] = React.useState<{ task: KanbanTask; columnId: string } | null>(null);\n\n // ─── Add Column inline state ───\n const [isAddingColumn, setIsAddingColumn] = React.useState(false);\n const [newColumnTitle, setNewColumnTitle] = React.useState('');\n const addColumnInputRef = React.useRef<HTMLInputElement>(null);\n\n React.useEffect(() => {\n if (isAddingColumn) addColumnInputRef.current?.focus();\n }, [isAddingColumn]);\n\n const handleAddColumnSubmit = () => {\n const trimmed = newColumnTitle.trim();\n if (trimmed) {\n onAddColumn?.(trimmed);\n setNewColumnTitle('');\n setIsAddingColumn(false);\n } else {\n setIsAddingColumn(false);\n }\n };\n\n const handleAddColumnKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter') handleAddColumnSubmit();\n if (e.key === 'Escape') {\n setNewColumnTitle('');\n setIsAddingColumn(false);\n }\n };\n\n // ─── Task Click Handler ───\n const handleTaskClick = (task: KanbanTask, columnId: string) => {\n if (onTaskClick) {\n // External handler — parent manages its own TaskDetailSheet\n onTaskClick(task.id);\n return;\n }\n setSelectedTask({ task, columnId });\n setSheetOpen(true);\n };\n\n // ─── DnD Handlers ───\n const handleDragStart = (e: React.DragEvent, task: KanbanTask, columnId: string) => {\n setDraggedTask({ task, fromColumnId: columnId });\n e.dataTransfer.effectAllowed = 'move';\n e.dataTransfer.setData('text/plain', task.id);\n };\n\n const handleDragEnd = () => {\n setDraggedTask(null);\n setDropTargetColumnId(null);\n };\n\n const handleDragOver = (e: React.DragEvent, columnId: string) => {\n setDropTargetColumnId(columnId);\n };\n\n const handleDrop = (e: React.DragEvent, toColumnId: string) => {\n e.preventDefault();\n if (!draggedTask) return;\n\n const { task, fromColumnId } = draggedTask;\n\n if (fromColumnId !== toColumnId) {\n onTaskMove?.(task.id, fromColumnId, toColumnId, 0);\n\n if (onColumnChange) {\n const newColumns = columns.map((col) => {\n if (col.id === fromColumnId) {\n return { ...col, tasks: col.tasks.filter((t) => t.id !== task.id) };\n }\n if (col.id === toColumnId) {\n return { ...col, tasks: [...col.tasks, task] };\n }\n return col;\n });\n onColumnChange(newColumns);\n }\n }\n\n handleDragEnd();\n };\n\n return (\n <>\n <div\n data-tour=\"kanban-board\"\n className={cn(\n 'flex h-full overflow-x-auto gap-3 p-4 bg-void snap-x snap-mandatory sm:snap-none',\n 'scrollbar-none',\n className,\n )}\n >\n {columns.map((column) => (\n <Column\n key={column.id}\n column={column}\n onTaskClick={handleTaskClick}\n onAddTask={onAddTask}\n onRenameColumn={onRenameColumn}\n externalDnD={externalDnD}\n draggedTask={effectiveDraggedTask}\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n onDragOver={handleDragOver}\n onDrop={handleDrop}\n isDropTarget={dropTargetColumnId === column.id}\n onTouchDragStart={handleTouchDragStart}\n />\n ))}\n\n {/* Add Column — inline or button */}\n {onAddColumn && (\n <div className=\"w-72 shrink-0\">\n {isAddingColumn ? (\n <div className=\"p-3 bg-theme-glass backdrop-blur-md border border-theme-subtle rounded-xl animate-in slide-in-from-left-2 duration-[400ms]\">\n <input\n ref={addColumnInputRef}\n value={newColumnTitle}\n onChange={(e) => setNewColumnTitle(e.target.value)}\n onKeyDown={handleAddColumnKeyDown}\n onBlur={handleAddColumnSubmit}\n placeholder=\"Nome da coluna...\"\n className=\"w-full text-sm font-semibold text-theme bg-transparent outline-none placeholder:text-theme-muted mb-2\"\n />\n <div className=\"flex items-center gap-1\">\n <Button\n variant=\"default\"\n size=\"sm\"\n onClick={handleAddColumnSubmit}\n disabled={!newColumnTitle.trim()}\n className=\"h-7 text-xs px-3\"\n >\n <Check className=\"w-3 h-3 mr-1\" />\n Criar\n </Button>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => {\n setNewColumnTitle('');\n setIsAddingColumn(false);\n }}\n className=\"h-7 text-xs px-2\"\n >\n <X className=\"w-3 h-3\" />\n </Button>\n </div>\n </div>\n ) : (\n <Button\n variant=\"outline\"\n onClick={() => setIsAddingColumn(true)}\n className=\"w-full h-12 border-dashed border-theme-subtle text-theme-muted hover:text-theme hover:border-primary-light/30 hover:bg-theme-highlight\"\n >\n <OrgPlus className=\"w-4 h-4 mr-2\" />\n Adicionar coluna\n </Button>\n )}\n </div>\n )}\n </div>\n\n {/* Mobile Touch DnD — Drop targets overlay */}\n {isTouchDragging && (\n <div className=\"fixed inset-x-0 bottom-0 z-50 flex gap-2 p-3 bg-void/90 backdrop-blur-xl border-t border-theme-subtle animate-in slide-in-from-bottom-4 duration-300 sm:hidden\">\n <div className=\"w-full overflow-x-auto scrollbar-none flex gap-2\">\n {columns\n .filter((col) => col.id !== touchDraggedTask?.fromColumnId)\n .map((col) => (\n <button\n key={col.id}\n onClick={() => handleTouchDrop(col.id)}\n className={cn(\n 'flex-shrink-0 flex items-center gap-2 px-4 py-3 rounded-xl',\n 'bg-theme-glass border border-theme-subtle',\n 'text-sm font-medium text-theme',\n 'active:bg-primary/20 active:border-primary-light/50',\n 'transition-all duration-200',\n )}\n >\n {col.color && (\n <div className=\"w-2.5 h-2.5 rounded-full shrink-0\" style={{ backgroundColor: col.color }} />\n )}\n {col.title}\n <Badge className=\"text-[10px] bg-theme-highlight text-theme-muted border-theme-subtle\">\n {col.tasks.length}\n </Badge>\n </button>\n ))}\n </div>\n <button\n onClick={cancelTouchDrag}\n className=\"shrink-0 p-3 rounded-xl bg-rose-500/20 text-rose-400 border border-rose-500/30\"\n >\n <X className=\"w-4 h-4\" />\n </button>\n </div>\n )}\n\n {/* TaskDetailSheet - opens when clicking a task */}\n <TaskDetailSheet\n task={selectedTask ? toDetailData(selectedTask.task, selectedTask.columnId) : null}\n open={sheetOpen}\n onOpenChange={setSheetOpen}\n onUpdate={onTaskUpdate}\n onToggleLabel={onToggleLabel}\n onCreateLabel={onCreateLabel}\n availableLabels={availableLabels}\n onAddLabel={onAddLabel}\n onRemoveLabel={onRemoveLabel}\n onToggleAssignee={onToggleAssignee}\n availableUsers={availableUsers}\n availableGroups={availableGroups}\n onToggleAssigneeGroup={onToggleAssigneeGroup}\n onAddAssignee={onAddAssignee}\n onRemoveAssignee={onRemoveAssignee}\n onAddSubtask={onAddSubtask}\n onToggleSubtask={onToggleSubtask}\n onDeleteSubtask={onDeleteSubtask}\n onDeleteTask={onDeleteTask}\n onUpdateSubtask={onUpdateSubtask}\n />\n </>\n );\n}\n\nKanbanBoard.displayName = 'KanbanBoard';\n\n// ─── Export individual parts for flexibility ───\n\nexport { Column as KanbanColumn, TaskCard as KanbanTaskCard };\n","// ─────────────────────────────────────────────\n// PlanBadge — Subscription plan indicator\n// Badge mode (compact) + expanded mode with\n// limits progress bars, upgrade CTA\n// ─────────────────────────────────────────────\n\n'use client';\n\nimport * as React from 'react';\nimport { cn } from '../../lib/utils';\nimport { Badge } from '../primitives/badge';\nimport { Button } from '../primitives/button';\nimport { Progress } from '../primitives/progress';\nimport { Tooltip, TooltipContent, TooltipTrigger, TooltipProvider } from '../primitives/tooltip';\nimport { OrgRocket, OrgZap, OrgStar, OrgShield } from '../../icons';\n\n// ─── Types ──────────────────────────────────\n\nexport type PlanTier = 'FREE' | 'STARTER' | 'PRO' | 'ENTERPRISE';\n\nexport interface PlanLimit {\n label: string;\n current: number;\n max: number;\n /** Override percentage (0-100) */\n percentage?: number;\n}\n\nexport interface PlanBadgeProps {\n /** Current plan tier */\n plan: PlanTier;\n /** Display mode */\n variant?: 'badge' | 'compact' | 'full';\n /** Usage limits to display in full/compact mode */\n limits?: PlanLimit[];\n /** Callback for upgrade CTA */\n onUpgrade?: () => void;\n /** Whether the plan is on trial */\n isTrial?: boolean;\n /** Days remaining in trial */\n trialDaysLeft?: number;\n /** CSS class */\n className?: string;\n}\n\n// ─── Config ─────────────────────────────────\n\nconst planConfig: Record<PlanTier, {\n label: string;\n color: string;\n bgColor: string;\n borderColor: string;\n icon: React.ReactNode;\n}> = {\n FREE: {\n label: 'Gratuito',\n color: 'text-theme-muted',\n bgColor: 'bg-theme-subtle',\n borderColor: 'border-theme-subtle',\n icon: <OrgStar className=\"w-3 h-3\" />,\n },\n STARTER: {\n label: 'Starter',\n color: 'text-blue-300',\n bgColor: 'bg-blue-500/10',\n borderColor: 'border-blue-500/20',\n icon: <OrgRocket className=\"w-3 h-3\" />,\n },\n PRO: {\n label: 'Pro',\n color: 'text-purple-300',\n bgColor: 'bg-purple-500/10',\n borderColor: 'border-purple-500/20',\n icon: <OrgZap className=\"w-3 h-3\" />,\n },\n ENTERPRISE: {\n label: 'Enterprise',\n color: 'text-amber-300',\n bgColor: 'bg-amber-500/10',\n borderColor: 'border-amber-500/20',\n icon: <OrgShield className=\"w-3 h-3\" />,\n },\n};\n\nfunction getUsageColor(percentage: number): string {\n if (percentage >= 90) return 'text-rose-400';\n if (percentage >= 70) return 'text-amber-400';\n return 'text-emerald-400';\n}\n\nfunction getProgressColor(percentage: number): string {\n if (percentage >= 90) return '[&>div]:bg-rose-500';\n if (percentage >= 70) return '[&>div]:bg-amber-500';\n return '[&>div]:bg-emerald-500';\n}\n\n// ─── Badge Mode ─────────────────────────────\n\nfunction PlanBadgeMini({\n plan,\n isTrial,\n trialDaysLeft,\n className,\n}: Pick<PlanBadgeProps, 'plan' | 'isTrial' | 'trialDaysLeft' | 'className'>) {\n const config = planConfig[plan];\n\n return (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <Badge\n variant=\"default\"\n className={cn(\n 'gap-1 text-[10px] px-1.5 py-0 h-5 border font-medium',\n config.bgColor,\n config.borderColor,\n config.color,\n isTrial && 'border-dashed',\n className,\n )}\n >\n {config.icon}\n {config.label}\n {isTrial && trialDaysLeft !== undefined && (\n <span className=\"text-theme-muted ml-0.5\">({trialDaysLeft}d)</span>\n )}\n </Badge>\n </TooltipTrigger>\n <TooltipContent>\n {isTrial\n ? `Período de teste — ${trialDaysLeft} dias restantes`\n : `Plano ${config.label}`}\n </TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n}\n\n// ─── Compact Mode ───────────────────────────\n\nfunction PlanBadgeCompact({\n plan,\n limits = [],\n isTrial,\n trialDaysLeft,\n onUpgrade,\n className,\n}: PlanBadgeProps) {\n const config = planConfig[plan];\n const mostUsed = limits.reduce(\n (max, l) => {\n const pct = l.percentage ?? (l.max > 0 ? (l.current / l.max) * 100 : 0);\n return pct > max.pct ? { pct, limit: l } : max;\n },\n { pct: 0, limit: null as PlanLimit | null },\n );\n\n return (\n <div\n className={cn(\n 'flex items-center gap-3 px-3 py-2 rounded-xl border',\n config.bgColor,\n config.borderColor,\n className,\n )}\n >\n <div className=\"flex items-center gap-1.5\">\n <span className={config.color}>{config.icon}</span>\n <span className={cn('text-xs font-medium', config.color)}>{config.label}</span>\n </div>\n\n {mostUsed.limit && (\n <div className=\"flex-1 max-w-[120px]\">\n <div className=\"flex items-center justify-between mb-0.5\">\n <span className=\"text-[10px] text-theme-muted\">{mostUsed.limit.label}</span>\n <span className={cn('text-[10px] font-medium', getUsageColor(mostUsed.pct))}>\n {mostUsed.limit.current}/{mostUsed.limit.max}\n </span>\n </div>\n <Progress\n value={mostUsed.pct}\n className={cn('h-1 bg-theme-subtle', getProgressColor(mostUsed.pct))}\n />\n </div>\n )}\n\n {isTrial && trialDaysLeft !== undefined && (\n <span className=\"text-[10px] text-amber-400/70\">\n {trialDaysLeft}d restantes\n </span>\n )}\n\n {onUpgrade && plan !== 'ENTERPRISE' && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={onUpgrade}\n className=\"h-6 px-2 text-[10px] text-primary-light/70 hover:text-primary-light\"\n >\n Upgrade\n </Button>\n )}\n </div>\n );\n}\n\n// ─── Full Mode ──────────────────────────────\n\nfunction PlanBadgeFull({\n plan,\n limits = [],\n isTrial,\n trialDaysLeft,\n onUpgrade,\n className,\n}: PlanBadgeProps) {\n const config = planConfig[plan];\n\n return (\n <div\n className={cn(\n 'rounded-xl border p-5 space-y-4',\n config.bgColor,\n config.borderColor,\n className,\n )}\n >\n {/* Header */}\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n <div\n className={cn(\n 'flex items-center justify-center w-9 h-9 rounded-xl border',\n config.bgColor,\n config.borderColor,\n )}\n >\n <span className={config.color}>\n {React.cloneElement(config.icon as React.ReactElement<any>, {\n className: 'w-5 h-5',\n })}\n </span>\n </div>\n <div>\n <h4 className={cn('text-sm font-semibold', config.color)}>\n Plano {config.label}\n </h4>\n {isTrial && (\n <p className=\"text-[11px] text-amber-400/70\">\n Trial — {trialDaysLeft} dias restantes\n </p>\n )}\n </div>\n </div>\n\n {onUpgrade && plan !== 'ENTERPRISE' && (\n <Button\n variant=\"default\"\n size=\"sm\"\n onClick={onUpgrade}\n className=\"text-xs\"\n >\n <OrgRocket className=\"w-3.5 h-3.5 mr-1\" />\n Fazer Upgrade\n </Button>\n )}\n </div>\n\n {/* Limits */}\n {limits.length > 0 && (\n <div className=\"space-y-3\">\n {limits.map((limit, i) => {\n const pct = limit.percentage ?? (limit.max > 0 ? (limit.current / limit.max) * 100 : 0);\n return (\n <div key={i}>\n <div className=\"flex items-center justify-between mb-1\">\n <span className=\"text-xs text-theme-secondary\">{limit.label}</span>\n <span className={cn('text-xs font-medium', getUsageColor(pct))}>\n {limit.current} / {limit.max}\n </span>\n </div>\n <Progress\n value={Math.min(pct, 100)}\n className={cn('h-1.5 bg-theme-subtle', getProgressColor(pct))}\n />\n {pct >= 90 && (\n <p className=\"text-[10px] text-rose-400/80 mt-1\">\n ⚠ Quase no limite — considere fazer upgrade\n </p>\n )}\n </div>\n );\n })}\n </div>\n )}\n </div>\n );\n}\n\n// ─── Main Export ─────────────────────────────\n\nexport function PlanBadge({ variant = 'badge', ...props }: PlanBadgeProps) {\n switch (variant) {\n case 'badge':\n return <PlanBadgeMini {...props} />;\n case 'compact':\n return <PlanBadgeCompact variant={variant} {...props} />;\n case 'full':\n return <PlanBadgeFull variant={variant} {...props} />;\n default:\n return <PlanBadgeMini {...props} />;\n }\n}\n","// ─────────────────────────────────────────────\n// BoardsSwitcher — Board selector for project view\n// ─────────────────────────────────────────────\n// Switch between boards within a project.\n// Compact mode shows icon only (for collapsed sidebar).\n// Supports create board inline.\n// ─────────────────────────────────────────────\n\n'use client';\n\nimport * as React from 'react';\nimport { createPortal } from 'react-dom';\nimport { cn } from '../../lib/utils';\nimport { Badge } from '../primitives/badge';\nimport { Button } from '../primitives/button';\nimport { OrgPlus } from '../../icons';\n\n// ─── Types ──────────────────────────────────\n\nexport interface BoardItem {\n id: string;\n name: string;\n color?: string;\n taskCount?: number;\n isDefault?: boolean;\n /** Board privacy: 'public' = all project members, 'private' = invited only */\n visibility?: 'public' | 'private';\n}\n\nexport interface BoardsSwitcherProps {\n boards: BoardItem[];\n activeBoardId?: string | null;\n onBoardChange: (boardId: string) => void;\n onCreateBoard?: (name: string) => void;\n compact?: boolean;\n className?: string;\n}\n\n// ─── Component ──────────────────────────────\n\nexport function BoardsSwitcher({\n boards,\n activeBoardId,\n onBoardChange,\n onCreateBoard,\n compact = false,\n className,\n}: BoardsSwitcherProps) {\n const [isOpen, setIsOpen] = React.useState(false);\n const [isCreating, setIsCreating] = React.useState(false);\n const [newBoardName, setNewBoardName] = React.useState('');\n const [menuPos, setMenuPos] = React.useState<{ top: number; left: number } | null>(null);\n const triggerRef = React.useRef<HTMLDivElement>(null);\n const dropdownRef = React.useRef<HTMLDivElement>(null);\n const createInputRef = React.useRef<HTMLInputElement>(null);\n\n // Close on click outside\n React.useEffect(() => {\n if (!isOpen) return;\n function handleClickOutside(event: MouseEvent) {\n if (\n !triggerRef.current?.contains(event.target as Node) &&\n !dropdownRef.current?.contains(event.target as Node)\n ) {\n setIsOpen(false);\n setIsCreating(false);\n setNewBoardName('');\n }\n }\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [isOpen]);\n\n // Close on scroll/resize\n React.useEffect(() => {\n if (!isOpen) return;\n const close = () => setIsOpen(false);\n window.addEventListener('scroll', close, true);\n window.addEventListener('resize', close);\n return () => {\n window.removeEventListener('scroll', close, true);\n window.removeEventListener('resize', close);\n };\n }, [isOpen]);\n\n React.useEffect(() => {\n if (isCreating) createInputRef.current?.focus();\n }, [isCreating]);\n\n const handleToggle = () => {\n if (!isOpen) {\n const rect = triggerRef.current?.getBoundingClientRect();\n if (rect) setMenuPos({ top: rect.bottom + 4, left: rect.left });\n }\n setIsOpen((v) => !v);\n };\n\n const activeBoard = boards.find((b) => b.id === activeBoardId);\n\n const handleCreate = () => {\n const trimmed = newBoardName.trim();\n if (trimmed) {\n onCreateBoard?.(trimmed);\n setNewBoardName('');\n setIsCreating(false);\n }\n };\n\n const dropdown = isOpen && menuPos ? (\n <div\n ref={dropdownRef}\n style={{ position: 'fixed', top: menuPos.top, left: menuPos.left, zIndex: 9999 }}\n className={cn(\n 'min-w-[240px]',\n 'bg-elevated/95 backdrop-blur-xl border border-theme-subtle rounded-xl shadow-2xl',\n 'animate-in fade-in slide-in-from-top-2 duration-200',\n )}\n >\n <div className=\"p-1.5\">\n {/* Board list */}\n <div className=\"max-h-[240px] overflow-y-auto scrollbar-none space-y-0.5\">\n {boards.map((board) => {\n const isActive = board.id === activeBoardId;\n return (\n <button\n key={board.id}\n onClick={() => {\n onBoardChange(board.id);\n setIsOpen(false);\n }}\n className={cn(\n 'w-full flex items-center gap-2 px-3 py-2 rounded-lg text-xs',\n 'transition-colors',\n isActive\n ? 'bg-primary/10 text-primary-light'\n : 'text-theme hover:bg-theme-highlight',\n )}\n >\n <div\n className=\"w-2.5 h-2.5 rounded shrink-0\"\n style={{ backgroundColor: board.color || '#7C3AED' }}\n />\n <span className=\"flex-1 text-left truncate\">{board.name}</span>\n {board.visibility === 'private' && (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 16 16\" fill=\"none\" className=\"text-theme-muted shrink-0\">\n <rect x=\"3\" y=\"7\" width=\"10\" height=\"7\" rx=\"1.5\" stroke=\"currentColor\" strokeWidth=\"1.2\" />\n <path d=\"M5 7V5a3 3 0 016 0v2\" stroke=\"currentColor\" strokeWidth=\"1.2\" strokeLinecap=\"round\" />\n </svg>\n )}\n {board.isDefault && (\n <Badge className=\"text-[9px] px-1.5 py-0 h-4 bg-primary/10 text-primary-light border-primary/20\">\n Padrão\n </Badge>\n )}\n {board.taskCount != null && (\n <span className=\"text-[10px] text-theme-muted\">{board.taskCount}</span>\n )}\n </button>\n );\n })}\n </div>\n\n {/* Create board */}\n {onCreateBoard && (\n <>\n <div className=\"h-px bg-theme-subtle my-1\" />\n {isCreating ? (\n <div className=\"px-2 py-1.5\">\n <input\n ref={createInputRef}\n value={newBoardName}\n onChange={(e) => setNewBoardName(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter') handleCreate();\n if (e.key === 'Escape') {\n setIsCreating(false);\n setNewBoardName('');\n }\n }}\n placeholder=\"Nome do board...\"\n className=\"w-full text-xs text-theme bg-transparent outline-none placeholder:text-theme-muted\"\n />\n </div>\n ) : (\n <button\n onClick={() => setIsCreating(true)}\n className=\"w-full flex items-center gap-2 px-3 py-2 rounded-lg text-xs text-theme-muted hover:text-theme hover:bg-theme-highlight transition-colors\"\n >\n <OrgPlus className=\"w-3 h-3\" />\n Criar board\n </button>\n )}\n </>\n )}\n </div>\n </div>\n ) : null;\n\n return (\n <div ref={triggerRef} data-tour=\"board-switcher\" className={cn('relative inline-flex', className)}>\n {/* Trigger button */}\n <button\n onClick={handleToggle}\n className={cn(\n 'flex items-center gap-2 rounded-xl px-3 py-2',\n 'bg-theme-glass backdrop-blur-md border border-theme-subtle',\n 'text-theme hover:bg-theme-highlight',\n 'transition-all duration-[400ms]',\n compact && 'px-2',\n )}\n >\n {/* Board color dot */}\n <div\n className=\"w-3 h-3 rounded shrink-0\"\n style={{ backgroundColor: activeBoard?.color || '#7C3AED' }}\n />\n\n {!compact && (\n <>\n <span className=\"text-sm font-medium truncate max-w-[140px] sm:max-w-[200px]\">\n {activeBoard?.name || 'Selecionar board'}\n </span>\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\" className={cn('transition-transform shrink-0', isOpen && 'rotate-180')}>\n <path d=\"M2.5 3.75L5 6.25L7.5 3.75\" stroke=\"currentColor\" strokeWidth=\"1.2\" strokeLinecap=\"round\" />\n </svg>\n </>\n )}\n </button>\n\n {typeof document !== 'undefined' && dropdown && createPortal(dropdown, document.body)}\n </div>\n );\n}\n\nBoardsSwitcher.displayName = 'BoardsSwitcher';\n","// ─────────────────────────────────────────────\n// SprintFilter — Sprint switcher for board view\n// ─────────────────────────────────────────────\n// Allows users to filter tasks by sprint.\n// Shows active sprint prominently + dropdown\n// for selecting other sprints or \"All tasks\".\n// ─────────────────────────────────────────────\n\n'use client';\n\nimport * as React from 'react';\nimport { createPortal } from 'react-dom';\nimport { cn } from '../../lib/utils';\nimport { Badge } from '../primitives/badge';\nimport { Button } from '../primitives/button';\n\n// ─── Types ──────────────────────────────────\n\nexport interface Sprint {\n id: string;\n name: string;\n status: 'PLANNED' | 'ACTIVE' | 'COMPLETED';\n startDate?: string;\n endDate?: string;\n taskCount?: number;\n}\n\nexport interface SprintFilterProps {\n sprints: Sprint[];\n activeSprint?: Sprint | null;\n selectedSprintId?: string | null;\n onSprintChange: (sprintId: string | null) => void;\n /** When true, shows only the icon (no label text). Ideal for compact / mobile toolbars. */\n compact?: boolean;\n className?: string;\n}\n\n// ─── Status config ──────────────────────────\n\nconst statusConfig: Record<Sprint['status'], { label: string; className: string }> = {\n ACTIVE: { label: 'Ativa', className: 'bg-emerald-500/15 text-emerald-400 border-emerald-500/30' },\n PLANNED: { label: 'Planeada', className: 'bg-blue-500/15 text-blue-400 border-blue-500/30' },\n COMPLETED: { label: 'Concluída', className: 'bg-theme-highlight text-theme-muted border-theme-subtle' },\n};\n\n// ─── Component ──────────────────────────────\n\nexport function SprintFilter({\n sprints,\n activeSprint,\n selectedSprintId,\n onSprintChange,\n compact = false,\n className,\n}: SprintFilterProps) {\n const [isOpen, setIsOpen] = React.useState(false);\n const [menuPos, setMenuPos] = React.useState<{ top: number; left: number } | null>(null);\n const triggerRef = React.useRef<HTMLDivElement>(null);\n const dropdownRef = React.useRef<HTMLDivElement>(null);\n\n // Close on click outside (both trigger and portal dropdown)\n React.useEffect(() => {\n if (!isOpen) return;\n function handleClickOutside(event: MouseEvent) {\n if (\n !triggerRef.current?.contains(event.target as Node) &&\n !dropdownRef.current?.contains(event.target as Node)\n ) {\n setIsOpen(false);\n }\n }\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [isOpen]);\n\n // Close on scroll/resize to avoid stale position\n React.useEffect(() => {\n if (!isOpen) return;\n const close = () => setIsOpen(false);\n window.addEventListener('scroll', close, true);\n window.addEventListener('resize', close);\n return () => {\n window.removeEventListener('scroll', close, true);\n window.removeEventListener('resize', close);\n };\n }, [isOpen]);\n\n const handleToggle = () => {\n if (!isOpen) {\n const rect = triggerRef.current?.getBoundingClientRect();\n if (rect) setMenuPos({ top: rect.bottom + 4, left: rect.left });\n }\n setIsOpen((v) => !v);\n };\n\n const selectedSprint = selectedSprintId\n ? sprints.find((s) => s.id === selectedSprintId)\n : null;\n\n const displayLabel = selectedSprint\n ? selectedSprint.name\n : selectedSprintId === null\n ? 'Todas as tarefas'\n : activeSprint?.name ?? 'Todas as tarefas';\n\n // Sort: active first, then planned, then completed\n const sortedSprints = React.useMemo(() => {\n const order: Record<string, number> = { ACTIVE: 0, PLANNED: 1, COMPLETED: 2 };\n return [...sprints].sort((a, b) => (order[a.status] ?? 9) - (order[b.status] ?? 9));\n }, [sprints]);\n\n const dropdown = isOpen && menuPos ? (\n <div\n ref={dropdownRef}\n style={{ position: 'fixed', top: menuPos.top, left: menuPos.left, zIndex: 9999 }}\n className={cn(\n 'min-w-[220px]',\n 'bg-elevated/95 backdrop-blur-xl border border-theme-subtle rounded-xl shadow-2xl',\n 'animate-in fade-in slide-in-from-top-2 duration-200',\n )}\n >\n <div className=\"p-1.5 max-h-[280px] overflow-y-auto scrollbar-none\">\n {/* All tasks option */}\n <button\n onClick={() => {\n onSprintChange(null);\n setIsOpen(false);\n }}\n className={cn(\n 'w-full flex items-center gap-2 px-3 py-2 rounded-lg text-xs',\n 'transition-colors',\n selectedSprintId === null\n ? 'bg-primary/10 text-primary-light'\n : 'text-theme-muted hover:bg-theme-highlight hover:text-theme',\n )}\n >\n <span className=\"w-2 h-2 rounded-full bg-theme-muted shrink-0\" />\n <span className=\"flex-1 text-left\">Todas as tarefas</span>\n </button>\n\n {/* Sprint separator */}\n {sortedSprints.length > 0 && (\n <div className=\"h-px bg-theme-subtle my-1\" />\n )}\n\n {/* Sprint items */}\n {sortedSprints.map((sprint) => {\n const config = statusConfig[sprint.status];\n const isSelected = selectedSprintId === sprint.id;\n\n return (\n <button\n key={sprint.id}\n onClick={() => {\n onSprintChange(sprint.id);\n setIsOpen(false);\n }}\n className={cn(\n 'w-full flex items-center gap-2 px-3 py-2 rounded-lg text-xs',\n 'transition-colors',\n isSelected\n ? 'bg-primary/10 text-primary-light'\n : 'text-theme hover:bg-theme-highlight',\n )}\n >\n <span\n className={cn('w-2 h-2 rounded-full shrink-0', {\n 'bg-emerald-400': sprint.status === 'ACTIVE',\n 'bg-blue-400': sprint.status === 'PLANNED',\n 'bg-theme-muted': sprint.status === 'COMPLETED',\n })}\n />\n <span className=\"flex-1 text-left truncate\">{sprint.name}</span>\n <Badge className={cn('text-[9px] px-1.5 py-0 h-4 border', config.className)}>\n {config.label}\n </Badge>\n {sprint.taskCount != null && (\n <span className=\"text-[10px] text-theme-muted\">{sprint.taskCount}</span>\n )}\n </button>\n );\n })}\n\n {sortedSprints.length === 0 && (\n <div className=\"px-3 py-4 text-center text-xs text-theme-muted\">\n Nenhuma sprint criada\n </div>\n )}\n </div>\n </div>\n ) : null;\n\n return (\n <div data-tour=\"sprint-switcher\" className={cn('relative', className)}>\n <div ref={triggerRef} className=\"inline-flex\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={handleToggle}\n className={cn(\n 'h-8 gap-1.5 text-xs font-medium',\n compact ? 'px-2' : 'px-3 gap-2',\n 'bg-theme-glass border border-theme-subtle',\n 'text-theme hover:bg-theme-highlight',\n )}\n title={compact ? displayLabel : undefined}\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 16 16\" fill=\"none\" className=\"shrink-0\">\n <path d=\"M3 8h10M5 4h6M7 12h2\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n {!compact && (\n <span className=\"truncate max-w-[120px] sm:max-w-[200px]\">{displayLabel}</span>\n )}\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\" className={cn('transition-transform shrink-0', isOpen && 'rotate-180')}>\n <path d=\"M2.5 3.75L5 6.25L7.5 3.75\" stroke=\"currentColor\" strokeWidth=\"1.2\" strokeLinecap=\"round\" />\n </svg>\n </Button>\n </div>\n\n {typeof document !== 'undefined' && dropdown && createPortal(dropdown, document.body)}\n </div>\n );\n}\n\nSprintFilter.displayName = 'SprintFilter';\n","// ─────────────────────────────────────────────\n// ActivityTrail — Audit log / activity feed\n// ─────────────────────────────────────────────\n// Displays a chronological trail of all project\n// activities: task creation, moves, status changes,\n// comments, sprint changes, etc. Glass design.\n// ─────────────────────────────────────────────\n\n'use client';\n\nimport * as React from 'react';\nimport { cn } from '../../lib/utils';\nimport { Badge } from '../primitives/badge';\nimport { ScrollArea } from '../primitives/scroll-area';\nimport { UserAvatar } from '../primitives/user-avatar';\nimport { Skeleton } from '../primitives/skeleton';\n\n// ─── Types ──────────────────────────────────\n\nexport type ActivityAction =\n | 'TASK_CREATED'\n | 'TASK_MOVED'\n | 'TASK_UPDATED'\n | 'TASK_DELETED'\n | 'TASK_COMPLETED'\n | 'TASK_ASSIGNED'\n | 'COMMENT_ADDED'\n | 'SPRINT_STARTED'\n | 'SPRINT_COMPLETED'\n | 'BOARD_CREATED'\n | 'COLUMN_CREATED'\n | 'MEMBER_ADDED'\n | 'MEMBER_REMOVED'\n | 'LABEL_ADDED'\n | 'ATTACHMENT_ADDED'\n | 'PRIORITY_CHANGED'\n | 'DUE_DATE_SET'\n | 'REPORT_GENERATED';\n\nexport interface ActivityEntry {\n id: string;\n action: ActivityAction;\n description: string;\n actor: {\n id: string;\n name: string;\n avatarUrl?: string;\n };\n target?: {\n id: string;\n type: 'task' | 'board' | 'sprint' | 'column' | 'member' | 'report';\n name: string;\n };\n metadata?: Record<string, any>;\n /** ISO 8601 timestamp */\n timestamp: string;\n /** SHA-256 chain hash for audit integrity */\n hash?: string;\n}\n\nexport interface ActivityTrailProps {\n activities: ActivityEntry[];\n loading?: boolean;\n hasMore?: boolean;\n onLoadMore?: () => void;\n /** Filter by action type */\n filterActions?: ActivityAction[];\n onFilterChange?: (actions: ActivityAction[]) => void;\n /** Max height of the feed */\n maxHeight?: string;\n className?: string;\n compact?: boolean;\n}\n\n// ─── Action Config ──────────────────────────\n\nconst actionConfig: Record<ActivityAction, { icon: string; color: string; label: string }> = {\n TASK_CREATED: { icon: '+', color: 'text-emerald-400', label: 'criou tarefa' },\n TASK_MOVED: { icon: '→', color: 'text-blue-400', label: 'moveu tarefa' },\n TASK_UPDATED: { icon: '✎', color: 'text-amber-400', label: 'atualizou tarefa' },\n TASK_DELETED: { icon: '✕', color: 'text-rose-400', label: 'eliminou tarefa' },\n TASK_COMPLETED: { icon: '✓', color: 'text-emerald-400', label: 'concluiu tarefa' },\n TASK_ASSIGNED: { icon: '👤', color: 'text-blue-400', label: 'atribuiu tarefa' },\n COMMENT_ADDED: { icon: '💬', color: 'text-primary-light', label: 'comentou' },\n SPRINT_STARTED: { icon: '🏃', color: 'text-emerald-400', label: 'iniciou sprint' },\n SPRINT_COMPLETED: { icon: '🏁', color: 'text-theme-muted', label: 'concluiu sprint' },\n BOARD_CREATED: { icon: '📋', color: 'text-primary-light', label: 'criou board' },\n COLUMN_CREATED: { icon: '▐', color: 'text-blue-400', label: 'criou coluna' },\n MEMBER_ADDED: { icon: '➕', color: 'text-emerald-400', label: 'adicionou membro' },\n MEMBER_REMOVED: { icon: '➖', color: 'text-rose-400', label: 'removeu membro' },\n LABEL_ADDED: { icon: '🏷', color: 'text-amber-400', label: 'etiquetou' },\n ATTACHMENT_ADDED: { icon: '📎', color: 'text-blue-400', label: 'anexou ficheiro' },\n PRIORITY_CHANGED: { icon: '⚡', color: 'text-amber-400', label: 'alterou prioridade' },\n DUE_DATE_SET: { icon: '📅', color: 'text-blue-400', label: 'definiu prazo' },\n REPORT_GENERATED: { icon: '📊', color: 'text-primary-light', label: 'gerou relatório' },\n};\n\n// ─── Available filters ──────────────────────\n\nconst FILTER_GROUPS = [\n { label: 'Tarefas', actions: ['TASK_CREATED', 'TASK_MOVED', 'TASK_UPDATED', 'TASK_DELETED', 'TASK_COMPLETED', 'TASK_ASSIGNED'] as ActivityAction[] },\n { label: 'Sprints', actions: ['SPRINT_STARTED', 'SPRINT_COMPLETED'] as ActivityAction[] },\n { label: 'Board', actions: ['BOARD_CREATED', 'COLUMN_CREATED'] as ActivityAction[] },\n { label: 'Equipa', actions: ['MEMBER_ADDED', 'MEMBER_REMOVED', 'COMMENT_ADDED'] as ActivityAction[] },\n { label: 'Outros', actions: ['LABEL_ADDED', 'ATTACHMENT_ADDED', 'PRIORITY_CHANGED', 'DUE_DATE_SET', 'REPORT_GENERATED'] as ActivityAction[] },\n];\n\n// ─── Time formatting ────────────────────────\n\nfunction timeAgo(timestamp: string): string {\n const now = Date.now();\n const then = new Date(timestamp).getTime();\n const diff = now - then;\n\n const minutes = Math.floor(diff / 60000);\n if (minutes < 1) return 'agora';\n if (minutes < 60) return `${minutes}m`;\n\n const hours = Math.floor(minutes / 60);\n if (hours < 24) return `${hours}h`;\n\n const days = Math.floor(hours / 24);\n if (days < 7) return `${days}d`;\n\n return new Date(timestamp).toLocaleDateString('pt-BR', { day: '2-digit', month: 'short' });\n}\n\n// ─── Group by date ──────────────────────────\n\nfunction groupByDate(activities: ActivityEntry[]): Map<string, ActivityEntry[]> {\n const groups = new Map<string, ActivityEntry[]>();\n const today = new Date().toDateString();\n const yesterday = new Date(Date.now() - 86400000).toDateString();\n\n for (const activity of activities) {\n const date = new Date(activity.timestamp).toDateString();\n let label: string;\n\n if (date === today) label = 'Hoje';\n else if (date === yesterday) label = 'Ontem';\n else label = new Date(activity.timestamp).toLocaleDateString('pt-BR', { weekday: 'long', day: 'numeric', month: 'long' });\n\n if (!groups.has(label)) groups.set(label, []);\n groups.get(label)!.push(activity);\n }\n\n return groups;\n}\n\n// ─── Component ──────────────────────────────\n\nexport function ActivityTrail({\n activities,\n loading,\n hasMore,\n onLoadMore,\n filterActions,\n onFilterChange,\n maxHeight = '600px',\n className,\n compact = false,\n}: ActivityTrailProps) {\n const [showFilters, setShowFilters] = React.useState(false);\n\n const filteredActivities = filterActions && filterActions.length > 0\n ? activities.filter((a) => filterActions.includes(a.action))\n : activities;\n\n const grouped = groupByDate(filteredActivities);\n\n return (\n <div className={cn('flex flex-col', className)}>\n {/* Header with filter toggle */}\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 flex items-center gap-2\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <circle cx=\"8\" cy=\"8\" r=\"6\" stroke=\"currentColor\" strokeWidth=\"1.2\" />\n <path d=\"M8 4.5V8L10.5 10\" stroke=\"currentColor\" strokeWidth=\"1.2\" strokeLinecap=\"round\" />\n </svg>\n Registo de atividades\n {filteredActivities.length > 0 && (\n <Badge className=\"text-[10px] bg-theme-highlight text-theme-muted border-theme-subtle\">\n {filteredActivities.length}\n </Badge>\n )}\n </h3>\n {onFilterChange && (\n <button\n onClick={() => setShowFilters(!showFilters)}\n className={cn(\n 'p-1.5 rounded-lg transition-colors text-theme-muted hover:text-theme hover:bg-theme-highlight',\n showFilters && 'bg-primary/10 text-primary-light',\n )}\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M2 4h12M4 8h8M6 12h4\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n </button>\n )}\n </div>\n\n {/* Filters */}\n {showFilters && onFilterChange && (\n <div className=\"px-4 py-2 border-b border-theme-subtle flex flex-wrap gap-1.5 animate-in slide-in-from-top-2 duration-200\">\n {FILTER_GROUPS.map((group) => {\n const isActive = filterActions && group.actions.some((a) => filterActions.includes(a));\n return (\n <button\n key={group.label}\n onClick={() => {\n if (isActive) {\n onFilterChange((filterActions || []).filter((a) => !group.actions.includes(a)));\n } else {\n onFilterChange([...(filterActions || []), ...group.actions]);\n }\n }}\n className={cn(\n 'px-2 py-1 rounded-lg text-[10px] font-medium border transition-colors',\n isActive\n ? 'bg-primary/10 text-primary-light border-primary/20'\n : 'bg-theme-subtle text-theme-muted border-theme-subtle hover:text-theme',\n )}\n >\n {group.label}\n </button>\n );\n })}\n </div>\n )}\n\n {/* Activity Feed */}\n <ScrollArea style={{ maxHeight }} className=\"[&_[data-radix-scroll-area-viewport]]:scrollbar-none\">\n <div className=\"px-4 py-2\">\n {Array.from(grouped.entries()).map(([dateLabel, entries]) => (\n <div key={dateLabel} className=\"mb-4\">\n {/* Date group label */}\n <div className=\"sticky top-0 z-10 py-1.5 bg-void/80 backdrop-blur-sm\">\n <span className=\"text-[10px] font-semibold uppercase tracking-wider text-theme-muted\">\n {dateLabel}\n </span>\n </div>\n\n {/* Timeline */}\n <div className=\"relative\">\n {/* Timeline vertical line */}\n <div className=\"absolute left-3 top-0 bottom-0 w-px bg-theme-subtle\" />\n\n {entries.map((activity, i) => {\n const config = actionConfig[activity.action] || actionConfig.TASK_UPDATED;\n \n return (\n <div key={activity.id} className=\"relative flex gap-3 py-2 group\">\n {/* Timeline dot */}\n <div className={cn(\n 'relative z-10 w-6 h-6 rounded-full flex items-center justify-center shrink-0',\n 'bg-void border border-theme-subtle text-[10px]',\n 'group-hover:border-primary-light/30 transition-colors',\n )}>\n <span className={config.color}>{config.icon}</span>\n </div>\n\n {/* Content */}\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-start gap-2\">\n {!compact && (\n <UserAvatar\n name={activity.actor.name}\n src={activity.actor.avatarUrl}\n size=\"sm\"\n className=\"h-5 w-5 shrink-0 mt-0.5\"\n />\n )}\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-xs text-theme\">\n <span className=\"font-medium\">{activity.actor.name}</span>\n {' '}\n <span className=\"text-theme-muted\">{config.label}</span>\n {activity.target && (\n <>\n {' '}\n <span className=\"font-medium text-primary-light truncate\">\n {activity.target.name}\n </span>\n </>\n )}\n </p>\n {!compact && activity.description && activity.description !== config.label && (\n <p className=\"text-[11px] text-theme-muted mt-0.5 line-clamp-2\">\n {activity.description}\n </p>\n )}\n </div>\n <span className=\"text-[10px] text-theme-muted whitespace-nowrap shrink-0\">\n {timeAgo(activity.timestamp)}\n </span>\n </div>\n\n {/* Audit hash for compliance */}\n {activity.hash && !compact && (\n <div className=\"mt-1 flex items-center gap-1\">\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 16 16\" fill=\"none\" className=\"text-theme-muted\">\n <path d=\"M4 8h8M8 4v8\" stroke=\"currentColor\" strokeWidth=\"1\" strokeLinecap=\"round\" />\n <circle cx=\"8\" cy=\"8\" r=\"6\" stroke=\"currentColor\" strokeWidth=\"1\" />\n </svg>\n <span className=\"text-[9px] font-mono text-theme-muted opacity-50 truncate max-w-[120px]\">\n {activity.hash.slice(0, 16)}…\n </span>\n </div>\n )}\n </div>\n </div>\n );\n })}\n </div>\n </div>\n ))}\n\n {/* Empty state */}\n {filteredActivities.length === 0 && !loading && (\n <div className=\"flex flex-col items-center justify-center py-12 text-center\">\n <svg width=\"40\" height=\"40\" viewBox=\"0 0 48 48\" fill=\"none\" className=\"text-theme-muted mb-3 opacity-40\">\n <circle cx=\"24\" cy=\"24\" r=\"18\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M24 14v10l7 4\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n <p className=\"text-sm text-theme-muted\">Sem atividades registadas</p>\n <p className=\"text-xs text-theme-muted mt-1\">As atividades aparecerão aqui</p>\n </div>\n )}\n\n {/* Loading skeleton */}\n {loading && (\n <div className=\"space-y-3\">\n {[1, 2, 3].map((i) => (\n <div key={i} className=\"flex gap-3\">\n <Skeleton className=\"w-6 h-6 rounded-full\" />\n <div className=\"flex-1 space-y-1.5\">\n <Skeleton className=\"h-3 w-3/4\" />\n <Skeleton className=\"h-2 w-1/2\" />\n </div>\n </div>\n ))}\n </div>\n )}\n\n {/* Load more */}\n {hasMore && !loading && (\n <div className=\"flex justify-center py-3\">\n <button\n onClick={onLoadMore}\n className=\"text-xs text-primary-light hover:text-primary transition-colors\"\n >\n Carregar mais atividades\n </button>\n </div>\n )}\n </div>\n </ScrollArea>\n </div>\n );\n}\n\nActivityTrail.displayName = 'ActivityTrail';\n\n// ─── Skeleton ───────────────────────────────\n\nexport function ActivityTrailSkeleton({ className }: { className?: string }) {\n return (\n <div className={cn('space-y-4 p-4', className)}>\n {[1, 2, 3, 4, 5].map((i) => (\n <div key={i} className=\"flex gap-3 animate-pulse\">\n <Skeleton className=\"w-6 h-6 rounded-full shrink-0\" />\n <div className=\"flex-1 space-y-1.5\">\n <Skeleton className=\"h-3 w-4/5\" />\n <Skeleton className=\"h-2 w-2/3\" />\n </div>\n <Skeleton className=\"h-3 w-8 shrink-0\" />\n </div>\n ))}\n </div>\n );\n}\n\nActivityTrailSkeleton.displayName = 'ActivityTrailSkeleton';\n","import * as React from 'react';\nimport { cn } from '../../lib/utils';\n\nfunction Card({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"card\"\n className={cn('rounded-2xl border border-[rgba(167,139,250,0.12)] bg-[rgba(124,58,237,0.06)] backdrop-blur-2xl text-theme shadow-inner-light', className)}\n {...props}\n />\n );\n}\n\nfunction CardHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"card-header\"\n className={cn('flex flex-col gap-1.5 p-6', className)}\n {...props}\n />\n );\n}\n\nfunction CardTitle({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"card-title\"\n className={cn('font-semibold leading-none tracking-tight', className)}\n {...props}\n />\n );\n}\n\nfunction CardDescription({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"card-description\"\n className={cn('text-sm text-muted-foreground', className)}\n {...props}\n />\n );\n}\n\nfunction CardContent({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div data-slot=\"card-content\" className={cn('p-6 pt-0', className)} {...props} />\n );\n}\n\nfunction CardFooter({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"card-footer\"\n className={cn('flex items-center p-6 pt-0', className)}\n {...props}\n />\n );\n}\n\nexport { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent };\n","'use client';\n\nimport * as React from 'react';\nimport * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';\nimport { Check, ChevronRight, Circle } from 'lucide-react';\nimport { cn } from '../../lib/utils';\n\nconst DropdownMenu = DropdownMenuPrimitive.Root;\nconst DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;\nconst DropdownMenuGroup = DropdownMenuPrimitive.Group;\nconst DropdownMenuPortal = DropdownMenuPrimitive.Portal;\nconst DropdownMenuSub = DropdownMenuPrimitive.Sub;\nconst DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup;\n\nfunction DropdownMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubTrigger> & { inset?: boolean }) {\n return (\n <DropdownMenuPrimitive.SubTrigger\n data-slot=\"dropdown-menu-sub-trigger\"\n className={cn(\n 'flex cursor-default select-none items-center gap-2 rounded-lg px-2 py-1.5 text-sm outline-none transition-colors duration-[400ms] ease-[cubic-bezier(0.25,1,0.5,1)] focus:bg-white/[0.05] data-[state=open]:bg-white/[0.05] [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0',\n inset && 'pl-8',\n className,\n )}\n {...props}\n >\n {children}\n <ChevronRight className=\"ml-auto\" />\n </DropdownMenuPrimitive.SubTrigger>\n );\n}\n\nfunction DropdownMenuSubContent({\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubContent>) {\n return (\n <DropdownMenuPrimitive.SubContent\n data-slot=\"dropdown-menu-sub-content\"\n className={cn(\n 'z-50 min-w-[8rem] overflow-hidden rounded-xl border border-primary/25 bg-white/[0.03] backdrop-blur-[40px] p-1 text-theme 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 className,\n )}\n {...props}\n />\n );\n}\n\nfunction DropdownMenuContent({\n className,\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Content>) {\n return (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n data-slot=\"dropdown-menu-content\"\n sideOffset={sideOffset}\n className={cn(\n 'z-50 max-h-[var(--radix-dropdown-menu-content-available-height)] min-w-[8rem] overflow-y-auto overflow-x-hidden rounded-xl border border-primary/25 bg-white/[0.03] backdrop-blur-[40px] p-1 text-theme shadow-[0_24px_80px_-15px_rgba(0,0,0,0.5)]',\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 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 className,\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n );\n}\n\nfunction DropdownMenuItem({\n className,\n inset,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Item> & { inset?: boolean }) {\n return (\n <DropdownMenuPrimitive.Item\n data-slot=\"dropdown-menu-item\"\n className={cn(\n 'relative flex cursor-default select-none items-center gap-2 rounded-lg px-2 py-1.5 text-sm outline-none transition-colors duration-[400ms] ease-[cubic-bezier(0.25,1,0.5,1)] focus:bg-white/[0.05] focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&>svg]:size-4 [&>svg]:shrink-0',\n inset && 'pl-8',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction DropdownMenuCheckboxItem({\n className,\n children,\n checked,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem>) {\n return (\n <DropdownMenuPrimitive.CheckboxItem\n data-slot=\"dropdown-menu-checkbox-item\"\n className={cn(\n 'relative flex cursor-default select-none items-center rounded-lg py-1.5 pl-8 pr-2 text-sm outline-none transition-colors duration-[400ms] ease-[cubic-bezier(0.25,1,0.5,1)] focus:bg-white/[0.05] focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n className,\n )}\n checked={checked}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Check className=\"h-4 w-4\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n );\n}\n\nfunction DropdownMenuRadioItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioItem>) {\n return (\n <DropdownMenuPrimitive.RadioItem\n data-slot=\"dropdown-menu-radio-item\"\n className={cn(\n 'relative flex cursor-default select-none items-center rounded-lg py-1.5 pl-8 pr-2 text-sm outline-none transition-colors duration-[400ms] ease-[cubic-bezier(0.25,1,0.5,1)] focus:bg-white/[0.05] focus:text-accent-foreground 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 <DropdownMenuPrimitive.ItemIndicator>\n <Circle className=\"h-2 w-2 fill-current\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n );\n}\n\nfunction DropdownMenuLabel({\n className,\n inset,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Label> & { inset?: boolean }) {\n return (\n <DropdownMenuPrimitive.Label\n data-slot=\"dropdown-menu-label\"\n className={cn('px-2 py-1.5 text-sm font-semibold', inset && 'pl-8', className)}\n {...props}\n />\n );\n}\n\nfunction DropdownMenuSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Separator>) {\n return (\n <DropdownMenuPrimitive.Separator\n data-slot=\"dropdown-menu-separator\"\n className={cn('-mx-1 my-1 h-px bg-muted', className)}\n {...props}\n />\n );\n}\n\nfunction DropdownMenuShortcut({ className, ...props }: React.ComponentProps<'span'>) {\n return (\n <span\n data-slot=\"dropdown-menu-shortcut\"\n className={cn('ml-auto text-xs tracking-widest opacity-60', className)}\n {...props}\n />\n );\n}\n\nexport {\n DropdownMenu,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuGroup,\n DropdownMenuPortal,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuRadioGroup,\n};\n","'use client';\n\nimport * as React from 'react';\nimport * as CheckboxPrimitive from '@radix-ui/react-checkbox';\nimport { Check } from 'lucide-react';\nimport { cn } from '../../lib/utils';\n\nfunction Checkbox({\n className,\n ...props\n}: React.ComponentProps<typeof CheckboxPrimitive.Root>) {\n return (\n <CheckboxPrimitive.Root\n data-slot=\"checkbox\"\n className={cn(\n 'grid place-content-center peer h-4 w-4 shrink-0 rounded-sm border border-primary shadow-sm transition-all duration-[400ms] ease-[cubic-bezier(0.25,1,0.5,1)] focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground',\n className,\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator className=\"grid place-content-center text-current\">\n <Check className=\"h-4 w-4\" />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n );\n}\n\nexport { Checkbox };\n","'use client';\n\nimport * as React from 'react';\nimport * as SwitchPrimitives from '@radix-ui/react-switch';\nimport { cn } from '../../lib/utils';\n\nexport interface SwitchProps\n extends React.ComponentPropsWithoutRef<typeof SwitchPrimitives.Root> {}\n\nconst Switch = React.forwardRef<\n React.ComponentRef<typeof SwitchPrimitives.Root>,\n SwitchProps\n>(({ className, ...props }, ref) => (\n <SwitchPrimitives.Root\n className={cn(\n 'peer inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-full',\n 'border-2 shadow-sm transition-all duration-300',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/50 focus-visible:ring-offset-2',\n 'focus-visible:ring-offset-background',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n 'data-[state=checked]:bg-primary data-[state=checked]:border-primary',\n 'data-[state=unchecked]:bg-gray-200 data-[state=unchecked]:border-gray-300',\n 'dark:data-[state=unchecked]:bg-gray-700 dark:data-[state=unchecked]:border-gray-600',\n className,\n )}\n {...props}\n ref={ref}\n >\n <SwitchPrimitives.Thumb\n className={cn(\n 'pointer-events-none block h-5 w-5 rounded-full bg-white shadow-lg ring-0',\n 'transition-transform duration-300',\n 'data-[state=checked]:translate-x-5 data-[state=unchecked]:translate-x-0',\n )}\n />\n </SwitchPrimitives.Root>\n));\nSwitch.displayName = SwitchPrimitives.Root.displayName;\n\nexport { Switch };\n","'use client';\n\nimport * as CollapsiblePrimitive from '@radix-ui/react-collapsible';\n\nconst Collapsible = CollapsiblePrimitive.Root;\nconst CollapsibleTrigger = CollapsiblePrimitive.CollapsibleTrigger;\nconst CollapsibleContent = CollapsiblePrimitive.CollapsibleContent;\n\nexport { Collapsible, CollapsibleTrigger, CollapsibleContent };\n","'use client';\n\nimport * as React from 'react';\nimport { type DialogProps } from '@radix-ui/react-dialog';\nimport { Command as CommandPrimitive } from 'cmdk';\nimport { Search } from 'lucide-react';\nimport { cn } from '../../lib/utils';\nimport {\n Dialog,\n DialogContent,\n} from './dialog';\n\nfunction Command({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive>) {\n return (\n <CommandPrimitive\n data-slot=\"command\"\n className={cn(\n 'flex h-full w-full flex-col overflow-hidden rounded-xl bg-white/[0.03] text-popover-foreground',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction CommandDialog({ children, ...props }: DialogProps) {\n return (\n <Dialog {...props}>\n <DialogContent className=\"overflow-hidden p-0\">\n <Command className=\"[&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-group]]:px-2 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5\">\n {children}\n </Command>\n </DialogContent>\n </Dialog>\n );\n}\n\nfunction CommandInput({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Input>) {\n return (\n <div className=\"flex items-center border-b border-primary/15 px-3\" cmdk-input-wrapper=\"\">\n <Search className=\"mr-2 h-4 w-4 shrink-0 opacity-50\" />\n <CommandPrimitive.Input\n data-slot=\"command-input\"\n className={cn(\n 'flex h-10 w-full rounded-xl bg-transparent py-3 text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50',\n className,\n )}\n {...props}\n />\n </div>\n );\n}\n\nfunction CommandList({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.List>) {\n return (\n <CommandPrimitive.List\n data-slot=\"command-list\"\n className={cn('max-h-[300px] overflow-y-auto overflow-x-hidden', className)}\n {...props}\n />\n );\n}\n\nfunction CommandEmpty(props: React.ComponentProps<typeof CommandPrimitive.Empty>) {\n return (\n <CommandPrimitive.Empty data-slot=\"command-empty\" className=\"py-6 text-center text-sm\" {...props} />\n );\n}\n\nfunction CommandGroup({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Group>) {\n return (\n <CommandPrimitive.Group\n data-slot=\"command-group\"\n className={cn(\n 'overflow-hidden p-1 text-foreground [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction CommandSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Separator>) {\n return (\n <CommandPrimitive.Separator\n data-slot=\"command-separator\"\n className={cn('-mx-1 h-px bg-border', className)}\n {...props}\n />\n );\n}\n\nfunction CommandItem({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Item>) {\n return (\n <CommandPrimitive.Item\n data-slot=\"command-item\"\n className={cn(\n 'relative flex cursor-default gap-2 select-none items-center rounded-lg px-2 py-1.5 text-sm outline-none data-[disabled=true]:pointer-events-none data-[selected=true]:bg-white/[0.05] data-[selected=true]:text-accent-foreground data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction CommandShortcut({ className, ...props }: React.ComponentProps<'span'>) {\n return (\n <span\n data-slot=\"command-shortcut\"\n className={cn('ml-auto text-xs tracking-widest text-muted-foreground', className)}\n {...props}\n />\n );\n}\n\nexport {\n Command,\n CommandDialog,\n CommandInput,\n CommandList,\n CommandEmpty,\n CommandGroup,\n CommandItem,\n CommandShortcut,\n CommandSeparator,\n};\n","import * as React from 'react';\nimport { Slot } from '@radix-ui/react-slot';\nimport { ChevronRight, MoreHorizontal } from 'lucide-react';\nimport { cn } from '../../lib/utils';\n\nfunction Breadcrumb({\n ...props\n}: React.ComponentProps<'nav'> & { separator?: React.ReactNode }) {\n return <nav aria-label=\"breadcrumb\" data-slot=\"breadcrumb\" {...props} />;\n}\n\nfunction BreadcrumbList({ className, ...props }: React.ComponentProps<'ol'>) {\n return (\n <ol\n data-slot=\"breadcrumb-list\"\n className={cn(\n 'flex flex-wrap items-center gap-1.5 break-words text-sm text-muted-foreground sm:gap-2.5',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction BreadcrumbItem({ className, ...props }: React.ComponentProps<'li'>) {\n return (\n <li\n data-slot=\"breadcrumb-item\"\n className={cn('inline-flex items-center gap-1.5', className)}\n {...props}\n />\n );\n}\n\nfunction BreadcrumbLink({\n asChild,\n className,\n ...props\n}: React.ComponentProps<'a'> & { asChild?: boolean }) {\n const Comp = asChild ? Slot : 'a';\n return (\n <Comp\n data-slot=\"breadcrumb-link\"\n className={cn('transition-colors hover:text-foreground', className)}\n {...props}\n />\n );\n}\n\nfunction BreadcrumbPage({ className, ...props }: React.ComponentProps<'span'>) {\n return (\n <span\n data-slot=\"breadcrumb-page\"\n role=\"link\"\n aria-disabled=\"true\"\n aria-current=\"page\"\n className={cn('font-normal text-foreground', className)}\n {...props}\n />\n );\n}\n\nfunction BreadcrumbSeparator({\n children,\n className,\n ...props\n}: React.ComponentProps<'li'>) {\n return (\n <li\n data-slot=\"breadcrumb-separator\"\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn('[&>svg]:w-3.5 [&>svg]:h-3.5', className)}\n {...props}\n >\n {children ?? <ChevronRight />}\n </li>\n );\n}\n\nfunction BreadcrumbEllipsis({ className, ...props }: React.ComponentProps<'span'>) {\n return (\n <span\n data-slot=\"breadcrumb-ellipsis\"\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn('flex h-9 w-9 items-center justify-center', className)}\n {...props}\n >\n <MoreHorizontal className=\"h-4 w-4\" />\n <span className=\"sr-only\">More</span>\n </span>\n );\n}\n\nexport {\n Breadcrumb,\n BreadcrumbList,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbPage,\n BreadcrumbSeparator,\n BreadcrumbEllipsis,\n};\n","import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../lib/utils';\n\nfunction Empty({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"empty\"\n className={cn(\n 'flex min-w-0 flex-1 flex-col items-center justify-center gap-6 text-balance rounded-xl border-dashed p-6 text-center md:p-12',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction EmptyHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"empty-header\"\n className={cn('flex max-w-sm flex-col items-center gap-2 text-center', className)}\n {...props}\n />\n );\n}\n\nconst emptyMediaVariants = cva(\n 'mb-2 flex shrink-0 items-center justify-center [&_svg]:pointer-events-none [&_svg]:shrink-0',\n {\n variants: {\n variant: {\n default: 'bg-transparent',\n icon: 'bg-muted text-foreground flex size-10 shrink-0 items-center justify-center rounded-xl [&_svg:not([class*=\\'size-\\'])]:size-6',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n },\n);\n\nfunction EmptyMedia({\n className,\n variant = 'default',\n ...props\n}: React.ComponentProps<'div'> & VariantProps<typeof emptyMediaVariants>) {\n return (\n <div\n data-slot=\"empty-icon\"\n data-variant={variant}\n className={cn(emptyMediaVariants({ variant, className }))}\n {...props}\n />\n );\n}\n\nfunction EmptyTitle({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"empty-title\"\n className={cn('text-lg font-medium tracking-tight', className)}\n {...props}\n />\n );\n}\n\nfunction EmptyDescription({ className, ...props }: React.ComponentProps<'p'>) {\n return (\n <div\n data-slot=\"empty-description\"\n className={cn(\n 'text-muted-foreground [&>a:hover]:text-primary text-sm/relaxed [&>a]:underline [&>a]:underline-offset-4',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction EmptyContent({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"empty-content\"\n className={cn(\n 'flex w-full min-w-0 max-w-sm flex-col items-center gap-4 text-balance text-sm',\n className,\n )}\n {...props}\n />\n );\n}\n\nexport {\n Empty,\n EmptyHeader,\n EmptyTitle,\n EmptyDescription,\n EmptyContent,\n EmptyMedia,\n emptyMediaVariants,\n};\n","'use client';\n\nimport * as React from 'react';\nimport { Toaster as Sonner } from 'sonner';\n\ntype ToasterProps = React.ComponentProps<typeof Sonner>;\n\n/**\n * Toaster — Sonner integration with dark glass design\n *\n * Dark theme toast notifications with circular icon on the left\n * matching the design from the reference images\n */\nfunction Toaster({ ...props }: ToasterProps) {\n return (\n <Sonner\n data-slot=\"sonner\"\n className=\"toaster group\"\n position=\"top-right\"\n expand={true}\n richColors={false}\n toastOptions={{\n classNames: {\n toast:\n 'group toast group-[.toaster]:bg-white dark:group-[.toaster]:bg-gray-900 group-[.toaster]:backdrop-blur-xl group-[.toaster]:text-gray-900 dark:group-[.toaster]:text-white group-[.toaster]:border group-[.toaster]:border-gray-200 dark:group-[.toaster]:border-gray-700 group-[.toaster]:shadow-2xl group-[.toaster]:p-4 group-[.toaster]:rounded-2xl group-[.toaster]:min-w-[380px]',\n description:\n 'group-[.toast]:text-gray-500 dark:group-[.toast]:text-gray-400 group-[.toast]:text-sm group-[.toast]:leading-relaxed',\n actionButton:\n 'group-[.toast]:bg-primary group-[.toast]:border-0 group-[.toast]:text-white group-[.toast]:px-4 group-[.toast]:py-2 group-[.toast]:text-sm group-[.toast]:font-medium hover:group-[.toast]:bg-primary/90 group-[.toast]:transition-all group-[.toast]:rounded-lg',\n cancelButton:\n 'group-[.toast]:bg-transparent group-[.toast]:text-gray-500 dark:group-[.toast]:text-gray-400 group-[.toast]:px-4 group-[.toast]:py-2 group-[.toast]:text-sm group-[.toast]:font-medium hover:group-[.toast]:bg-gray-100 dark:hover:group-[.toast]:bg-white/10 group-[.toast]:transition-all group-[.toast]:rounded-lg',\n closeButton:\n 'group-[.toast]:!bg-transparent group-[.toast]:!border-0 group-[.toast]:text-gray-400 dark:group-[.toast]:text-gray-500 hover:group-[.toast]:text-gray-600 dark:hover:group-[.toast]:text-gray-300 group-[.toast]:transition-colors',\n success:\n 'group-[.toaster]:border-emerald-200 dark:group-[.toaster]:border-emerald-800/50',\n error:\n 'group-[.toaster]:border-rose-200 dark:group-[.toaster]:border-rose-800/50',\n warning:\n 'group-[.toaster]:border-amber-200 dark:group-[.toaster]:border-amber-800/50',\n info:\n 'group-[.toaster]:border-blue-200 dark:group-[.toaster]:border-blue-800/50',\n },\n }}\n {...props}\n />\n );\n}\n\nexport { Toaster, type ToasterProps };\n","// ─────────────────────────────────────────────\n// useCurrentUser — Shared hook (TanStack Query)\n// ─────────────────────────────────────────────\n// Fetches GET /api/auth/me with caching + dedup.\n// Shared across all zone apps via organify-ui.\n// ─────────────────────────────────────────────\n\n'use client';\n\nimport { useQuery, useQueryClient } from '@tanstack/react-query';\nimport type { OrganifyUser } from '../providers/organify-provider';\n\n/** Cache key for the current-user query. */\nexport const CURRENT_USER_KEY = ['current-user'] as const;\n\nfunction readCookieToken(): string | null {\n if (typeof document === 'undefined') return null;\n const match = document.cookie\n .split(';')\n .map((s) => s.trim())\n .find((s) => s.startsWith('auth_token='));\n if (!match) return null;\n return decodeURIComponent(match.split('=')[1]);\n}\n\nfunction readAuthToken(): string | null {\n // Try cookie first, then localStorage\n return readCookieToken() ?? (typeof localStorage !== 'undefined' ? localStorage.getItem('organify_access_token') : null);\n}\n\nasync function fetchCurrentUser(): Promise<OrganifyUser> {\n const res = await fetch('/api/auth/me', { credentials: 'include' });\n\n if (!res.ok) {\n if (res.status === 401) {\n window.location.href = '/login';\n throw new Error('UNAUTHENTICATED');\n }\n throw new Error(`HTTP ${res.status}`);\n }\n\n const data = await res.json();\n\n return {\n id: String(data.id),\n name: data.name,\n email: data.email,\n avatarUrl: data.avatar ?? null,\n role: data.role,\n };\n}\n\nexport interface UseCurrentUserReturn {\n user: OrganifyUser | null;\n authToken: string | null;\n loading: boolean;\n error: string | null;\n refetch: () => Promise<void>;\n}\n\nexport function useCurrentUser(): UseCurrentUserReturn {\n const queryClient = useQueryClient();\n\n const { data: user, isLoading, error } = useQuery({\n queryKey: CURRENT_USER_KEY,\n queryFn: fetchCurrentUser,\n staleTime: 5 * 60 * 1000, // 5 minutes — user data rarely changes\n gcTime: 10 * 60 * 1000, // Keep in GC for 10 min\n retry: (failureCount, err) => {\n // Don't retry 401s\n if (err instanceof Error && err.message === 'UNAUTHENTICATED') return false;\n return failureCount < 2;\n },\n refetchOnWindowFocus: true,\n refetchOnMount: false, // Use cache if not stale\n });\n\n const authToken = typeof window !== 'undefined' ? readAuthToken() : null;\n\n const refetch = async () => {\n await queryClient.invalidateQueries({ queryKey: CURRENT_USER_KEY });\n };\n\n return {\n user: user ?? null,\n authToken,\n loading: isLoading,\n error: error instanceof Error ? error.message : null,\n refetch,\n };\n}\n","// ─────────────────────────────────────────────\n// CreateProjectDialog — Self-contained project creation\n// ─────────────────────────────────────────────\n// Uses ResponsiveDialog (Dialog on desktop, Drawer on mobile).\n// Fetches via useOrganifyGql — no props needed for data.\n// Minimal form: name + type. Description added later in settings.\n// ─────────────────────────────────────────────\n\n'use client';\n\nimport * as React from 'react';\nimport { ResponsiveDialog } from '../primitives/responsive-dialog';\nimport { Button } from '../primitives/button';\nimport { Input } from '../primitives/input';\nimport { Label } from '../primitives/label';\nimport { cn } from '../../lib/utils';\nimport { useOrganifyGql, useOrganifyWorkspace, useOrganifyNavigation } from '../../providers/organify-provider';\nimport { OrgBoard, OrgSprint } from '../../icons';\n\n// ─── GraphQL ────────────────────────────────\n\nconst CREATE_PROJECT_MUTATION = `\n mutation CreateProject($input: CreateProjectInput!) {\n createProject(input: $input) {\n id\n name\n slug\n }\n }\n`;\n\n// ─── Types ──────────────────────────────────\n\nexport interface CreateProjectDialogProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n /** Called after successful creation with the new project */\n onCreated?: (project: { id: string; name: string; slug: string }) => void;\n}\n\n// ─── Component ──────────────────────────────\n\nexport function CreateProjectDialog({\n open,\n onOpenChange,\n onCreated,\n}: CreateProjectDialogProps) {\n const gql = useOrganifyGql();\n const { workspace } = useOrganifyWorkspace();\n const { navigate } = useOrganifyNavigation();\n\n const [name, setName] = React.useState('');\n const [type, setType] = React.useState<'KANBAN' | 'SCRUM'>('KANBAN');\n const [error, setError] = React.useState('');\n const [loading, setLoading] = React.useState(false);\n\n // Reset form on open\n React.useEffect(() => {\n if (open) {\n setName('');\n setType('KANBAN');\n setError('');\n }\n }, [open]);\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n const trimmed = name.trim();\n if (!trimmed) { setError('Project name is required'); return; }\n if (trimmed.length > 100) { setError('Name must be 100 characters or less'); return; }\n if (!workspace?.id) { setError('No workspace selected'); return; }\n\n setLoading(true);\n setError('');\n try {\n const data = await gql<{ createProject: { id: string; name: string; slug: string } }>(\n 'projects',\n CREATE_PROJECT_MUTATION,\n { input: { name: trimmed, type, workspaceId: workspace.id } },\n );\n onOpenChange(false);\n onCreated?.(data.createProject);\n // Navigate to board zone if no custom handler\n if (!onCreated && navigate) {\n navigate(`/${workspace.slug}/projects/${data.createProject.slug}`);\n }\n } catch (err: any) {\n setError(err.message || 'Failed to create project');\n } finally {\n setLoading(false);\n }\n };\n\n const types = [\n { value: 'KANBAN' as const, icon: <OrgBoard className=\"w-6 h-6\" />, title: 'Kanban', desc: 'Visual flow with boards' },\n { value: 'SCRUM' as const, icon: <OrgSprint className=\"w-6 h-6\" />, title: 'Scrum', desc: 'Sprints & epics' },\n ];\n\n return (\n <ResponsiveDialog\n open={open}\n onOpenChange={onOpenChange}\n title=\"Create Project\"\n description=\"Start with a name. Add details later in settings.\"\n contentClassName=\"max-w-md\"\n footer={\n <div className=\"flex gap-2 justify-end w-full\">\n <Button variant=\"ghost\" onClick={() => onOpenChange(false)} disabled={loading}>\n Cancel\n </Button>\n <Button onClick={handleSubmit} disabled={loading || !name.trim()}>\n {loading ? 'Creating…' : 'Create'}\n </Button>\n </div>\n }\n >\n <form onSubmit={handleSubmit} className=\"space-y-4\">\n {/* Name */}\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"project-name\">Project name</Label>\n <Input\n id=\"project-name\"\n placeholder=\"e.g. Marketing Website\"\n value={name}\n onChange={(e) => { setName(e.target.value); setError(''); }}\n maxLength={100}\n autoFocus\n />\n {error && <p className=\"text-xs text-rose-400\">{error}</p>}\n </div>\n\n {/* Type */}\n <div className=\"space-y-1.5\">\n <Label>Project type</Label>\n <div className=\"grid grid-cols-2 gap-2\">\n {types.map((t) => (\n <button\n key={t.value}\n type=\"button\"\n onClick={() => setType(t.value)}\n className={cn(\n 'p-3 rounded-xl border text-left transition-all',\n type === t.value\n ? 'bg-theme-subtle-10 border-primary ring-1 ring-primary/30'\n : 'bg-theme-card border-theme-subtle hover:border-theme-medium',\n )}\n >\n <span className=\"mb-1 block text-theme-secondary\">{t.icon}</span>\n <p className=\"text-sm font-medium text-theme\">{t.title}</p>\n <p className=\"text-xs text-theme-muted\">{t.desc}</p>\n </button>\n ))}\n </div>\n </div>\n </form>\n </ResponsiveDialog>\n );\n}\n","// ─────────────────────────────────────────────\n// CreateWorkspaceDialog — Self-contained workspace creation\n// ─────────────────────────────────────────────\n// Minimal form: just name. Slug auto-generated by backend.\n// Description, avatar, etc. added later in workspace settings.\n// Performs an optimistic add to the workspace list so the switcher\n// reflects the new workspace immediately, before the API round-trip.\n// ─────────────────────────────────────────────\n\n'use client';\n\nimport * as React from 'react';\nimport { ResponsiveDialog } from '../primitives/responsive-dialog';\nimport { Button } from '../primitives/button';\nimport { Input } from '../primitives/input';\nimport { Label } from '../primitives/label';\nimport {\n useOrganify,\n useOrganifyGql,\n useOrganifyNavigation,\n type OrganifyWorkspace,\n} from '../../providers/organify-provider';\n\n// ─── GraphQL ────────────────────────────────\n\nconst CREATE_WORKSPACE_MUTATION = `\n mutation CreateWorkspace($input: CreateWorkspaceInput!) {\n createWorkspace(input: $input) {\n id\n name\n slug\n description\n avatarUrl\n }\n }\n`;\n\n// ─── Types ──────────────────────────────────\n\nexport interface CreateWorkspaceDialogProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n /** Called after successful creation */\n onCreated?: (workspace: { id: string; name: string; slug: string }) => void;\n}\n\n// ─── Component ──────────────────────────────\n\nexport function CreateWorkspaceDialog({\n open,\n onOpenChange,\n onCreated,\n}: CreateWorkspaceDialogProps) {\n const gql = useOrganifyGql();\n const { navigate } = useOrganifyNavigation();\n const { workspaces, onWorkspacesChange, onWorkspaceChange } = useOrganify();\n\n const [name, setName] = React.useState('');\n const [error, setError] = React.useState('');\n const [loading, setLoading] = React.useState(false);\n\n React.useEffect(() => {\n if (open) { setName(''); setError(''); }\n }, [open]);\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n const trimmed = name.trim();\n if (!trimmed) { setError('Workspace name is required'); return; }\n if (trimmed.length > 80) { setError('Name must be 80 characters or less'); return; }\n\n setLoading(true);\n setError('');\n\n // ─── Optimistic update ───────────────────\n const optimisticId = `temp-${Date.now()}`;\n const optimisticSlug = trimmed\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-|-$/g, '');\n\n const optimisticWs: OrganifyWorkspace = {\n id: optimisticId,\n name: trimmed,\n slug: optimisticSlug,\n description: null,\n avatarUrl: null,\n plan: null,\n _count: { members: 1, teams: 0 },\n };\n\n const prevWorkspaces = [...workspaces];\n onWorkspacesChange?.([...workspaces, optimisticWs]);\n\n try {\n const data = await gql<{ createWorkspace: OrganifyWorkspace }>(\n 'workspaces',\n CREATE_WORKSPACE_MUTATION,\n { input: { name: trimmed } },\n );\n\n // Replace optimistic entry with real data\n const realWs: OrganifyWorkspace = {\n ...data.createWorkspace,\n plan: null,\n _count: { members: 1, teams: 0 },\n };\n onWorkspacesChange?.(\n [...prevWorkspaces, realWs],\n );\n onWorkspaceChange?.(realWs);\n\n onOpenChange(false);\n onCreated?.(realWs);\n if (!onCreated && navigate) {\n navigate(`/${realWs.slug}`);\n }\n } catch (err: any) {\n // Rollback optimistic entry\n onWorkspacesChange?.(prevWorkspaces);\n setError(err.message || 'Failed to create workspace');\n } finally {\n setLoading(false);\n }\n };\n\n return (\n <ResponsiveDialog\n open={open}\n onOpenChange={onOpenChange}\n title=\"Create Workspace\"\n description=\"Give your workspace a name. You can configure it further in settings.\"\n contentClassName=\"max-w-sm\"\n footer={\n <div className=\"flex gap-2 justify-end w-full\">\n <Button variant=\"ghost\" onClick={() => onOpenChange(false)} disabled={loading}>\n Cancel\n </Button>\n <Button onClick={handleSubmit} disabled={loading || !name.trim()}>\n {loading ? 'Creating…' : 'Create'}\n </Button>\n </div>\n }\n >\n <form onSubmit={handleSubmit} className=\"space-y-4\">\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"ws-name\">Workspace name</Label>\n <Input\n id=\"ws-name\"\n placeholder=\"e.g. Acme Inc.\"\n value={name}\n onChange={(e) => { setName(e.target.value); setError(''); }}\n maxLength={80}\n autoFocus\n />\n {error && <p className=\"text-xs text-rose-400\">{error}</p>}\n </div>\n </form>\n </ResponsiveDialog>\n );\n}\n\n","// ─────────────────────────────────────────────\n// CreateSprintDialog — Self-contained sprint creation\n// ─────────────────────────────────────────────\n// Minimal: name only. Goal + dates added via settings later.\n// Uses useOrganifyGql + useOrganifyProject for context.\n// ─────────────────────────────────────────────\n\n'use client';\n\nimport * as React from 'react';\nimport { ResponsiveDialog } from '../primitives/responsive-dialog';\nimport { Button } from '../primitives/button';\nimport { Input } from '../primitives/input';\nimport { Label } from '../primitives/label';\nimport { Textarea } from '../primitives/textarea';\nimport { useOrganifyGql, useOrganifyProject } from '../../providers/organify-provider';\n\n// ─── GraphQL ────────────────────────────────\n\nconst CREATE_SPRINT_MUTATION = `\n mutation CreateSprint($input: CreateSprintInput!) {\n createSprint(input: $input) {\n id\n name\n goal\n status\n startDate\n endDate\n }\n }\n`;\n\n// ─── Types ──────────────────────────────────\n\nexport interface CreateSprintDialogProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n /** Override projectId if not using OrganifyProvider context */\n projectId?: string;\n /** Called after successful creation */\n onCreated?: (sprint: { id: string; name: string }) => void;\n}\n\n// ─── Component ──────────────────────────────\n\nexport function CreateSprintDialog({\n open,\n onOpenChange,\n projectId: propProjectId,\n onCreated,\n}: CreateSprintDialogProps) {\n const gql = useOrganifyGql();\n const { project } = useOrganifyProject();\n const effectiveProjectId = propProjectId ?? project?.id;\n\n const [name, setName] = React.useState('');\n const [goal, setGoal] = React.useState('');\n const [startDate, setStartDate] = React.useState('');\n const [endDate, setEndDate] = React.useState('');\n const [error, setError] = React.useState('');\n const [loading, setLoading] = React.useState(false);\n\n React.useEffect(() => {\n if (open) { setName(''); setGoal(''); setStartDate(''); setEndDate(''); setError(''); }\n }, [open]);\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n const trimmed = name.trim();\n if (!trimmed) { setError('Sprint name is required'); return; }\n if (!effectiveProjectId) { setError('No project context'); return; }\n\n setLoading(true);\n setError('');\n try {\n const data = await gql<{ createSprint: { id: string; name: string } }>(\n 'projects',\n CREATE_SPRINT_MUTATION,\n {\n input: {\n name: trimmed,\n projectId: effectiveProjectId,\n ...(goal.trim() && { goal: goal.trim() }),\n ...(startDate && { startDate: new Date(startDate).toISOString() }),\n ...(endDate && { endDate: new Date(endDate).toISOString() }),\n },\n },\n );\n onOpenChange(false);\n onCreated?.(data.createSprint);\n } catch (err: any) {\n setError(err.message || 'Failed to create sprint');\n } finally {\n setLoading(false);\n }\n };\n\n return (\n <ResponsiveDialog\n open={open}\n onOpenChange={onOpenChange}\n title=\"Create Sprint\"\n description=\"Name your sprint. Goal and dates are optional.\"\n contentClassName=\"max-w-md\"\n footer={\n <div className=\"flex gap-2 justify-end w-full\">\n <Button variant=\"ghost\" onClick={() => onOpenChange(false)} disabled={loading}>\n Cancel\n </Button>\n <Button onClick={handleSubmit} disabled={loading || !name.trim()}>\n {loading ? 'Creating…' : 'Create Sprint'}\n </Button>\n </div>\n }\n >\n <form onSubmit={handleSubmit} className=\"space-y-4\">\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"sprint-name\">Name</Label>\n <Input\n id=\"sprint-name\"\n placeholder=\"Sprint 1\"\n value={name}\n onChange={(e) => { setName(e.target.value); setError(''); }}\n maxLength={100}\n autoFocus\n />\n {error && <p className=\"text-xs text-rose-400\">{error}</p>}\n </div>\n\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"sprint-goal\">Goal <span className=\"text-muted-foreground text-xs\">(optional)</span></Label>\n <Textarea\n id=\"sprint-goal\"\n placeholder=\"What should this sprint achieve?\"\n value={goal}\n onChange={(e) => setGoal(e.target.value)}\n rows={2}\n maxLength={500}\n />\n </div>\n\n <div className=\"grid grid-cols-2 gap-3\">\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"sprint-start\">Start date</Label>\n <Input id=\"sprint-start\" type=\"date\" value={startDate} onChange={(e) => setStartDate(e.target.value)} />\n </div>\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"sprint-end\">End date</Label>\n <Input id=\"sprint-end\" type=\"date\" value={endDate} onChange={(e) => setEndDate(e.target.value)} />\n </div>\n </div>\n </form>\n </ResponsiveDialog>\n );\n}\n","// ─────────────────────────────────────────────\n// CreateEpicDialog — Self-contained epic creation\n// ─────────────────────────────────────────────\n// Minimal: name + color. Description added later.\n// ─────────────────────────────────────────────\n\n'use client';\n\nimport * as React from 'react';\nimport { ResponsiveDialog } from '../primitives/responsive-dialog';\nimport { Button } from '../primitives/button';\nimport { Input } from '../primitives/input';\nimport { Label } from '../primitives/label';\nimport { Textarea } from '../primitives/textarea';\nimport { cn } from '../../lib/utils';\nimport { useOrganifyGql, useOrganifyProject } from '../../providers/organify-provider';\n\n// ─── GraphQL ────────────────────────────────\n\nconst CREATE_EPIC_MUTATION = `\n mutation CreateEpic($input: CreateEpicInput!) {\n createEpic(input: $input) {\n id\n name\n color\n status\n }\n }\n`;\n\n// ─── Types ──────────────────────────────────\n\nexport interface CreateEpicDialogProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n projectId?: string;\n onCreated?: (epic: { id: string; name: string }) => void;\n}\n\n// ─── Colors ─────────────────────────────────\n\nconst EPIC_COLORS = [\n '#7c3aed', '#8b5cf6', '#a855f7', '#d946ef',\n '#ec4899', '#f43f5e', '#ef4444', '#f97316',\n '#eab308', '#22c55e', '#14b8a6', '#06b6d4',\n '#3b82f6', '#6b7280',\n];\n\n// ─── Component ──────────────────────────────\n\nexport function CreateEpicDialog({\n open,\n onOpenChange,\n projectId: propProjectId,\n onCreated,\n}: CreateEpicDialogProps) {\n const gql = useOrganifyGql();\n const { project } = useOrganifyProject();\n const effectiveProjectId = propProjectId ?? project?.id;\n\n const [name, setName] = React.useState('');\n const [description, setDescription] = React.useState('');\n const [color, setColor] = React.useState(EPIC_COLORS[0]);\n const [error, setError] = React.useState('');\n const [loading, setLoading] = React.useState(false);\n\n React.useEffect(() => {\n if (open) {\n setName(''); setDescription(''); setColor(EPIC_COLORS[0]); setError('');\n }\n }, [open]);\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n const trimmed = name.trim();\n if (!trimmed) { setError('Epic name is required'); return; }\n if (!effectiveProjectId) { setError('No project context'); return; }\n\n setLoading(true);\n setError('');\n try {\n const data = await gql<{ createEpic: { id: string; name: string } }>(\n 'projects',\n CREATE_EPIC_MUTATION,\n {\n input: {\n name: trimmed,\n projectId: effectiveProjectId,\n color,\n ...(description.trim() && { description: description.trim() }),\n },\n },\n );\n onOpenChange(false);\n onCreated?.(data.createEpic);\n } catch (err: any) {\n setError(err.message || 'Failed to create epic');\n } finally {\n setLoading(false);\n }\n };\n\n return (\n <ResponsiveDialog\n open={open}\n onOpenChange={onOpenChange}\n title=\"Create Epic\"\n description=\"Group related tasks into an epic.\"\n contentClassName=\"max-w-md\"\n footer={\n <div className=\"flex gap-2 justify-end w-full\">\n <Button variant=\"ghost\" onClick={() => onOpenChange(false)} disabled={loading}>\n Cancel\n </Button>\n <Button onClick={handleSubmit} disabled={loading || !name.trim()}>\n {loading ? 'Creating…' : 'Create Epic'}\n </Button>\n </div>\n }\n >\n <form onSubmit={handleSubmit} className=\"space-y-4\">\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"epic-name\">Name</Label>\n <Input\n id=\"epic-name\"\n placeholder=\"e.g. User Authentication\"\n value={name}\n onChange={(e) => { setName(e.target.value); setError(''); }}\n maxLength={100}\n autoFocus\n />\n {error && <p className=\"text-xs text-rose-400\">{error}</p>}\n </div>\n\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"epic-desc\">Description <span className=\"text-muted-foreground text-xs\">(optional)</span></Label>\n <Textarea\n id=\"epic-desc\"\n placeholder=\"Brief description...\"\n value={description}\n onChange={(e) => setDescription(e.target.value)}\n rows={2}\n maxLength={500}\n />\n </div>\n\n <div className=\"space-y-1.5\">\n <Label>Color</Label>\n <div className=\"flex flex-wrap gap-2\">\n {EPIC_COLORS.map((c) => (\n <button\n key={c}\n type=\"button\"\n onClick={() => setColor(c)}\n className={cn(\n 'w-7 h-7 rounded-full border-2 transition-all',\n color === c ? 'border-white scale-110' : 'border-transparent hover:scale-105',\n )}\n style={{ background: c }}\n />\n ))}\n </div>\n </div>\n </form>\n </ResponsiveDialog>\n );\n}\n","// ─────────────────────────────────────────────\n// CreateTaskDialog — Self-contained task creation\n// ─────────────────────────────────────────────\n// Uses ResponsiveDialog (Dialog on desktop, Drawer on mobile).\n// Fetches via useOrganifyGql — no props needed for data.\n// Minimal form: title + priority. Description & details added later.\n// ─────────────────────────────────────────────\n\n'use client';\n\nimport * as React from 'react';\nimport { ResponsiveDialog } from '../primitives/responsive-dialog';\nimport { Button } from '../primitives/button';\nimport { Input } from '../primitives/input';\nimport { Label } from '../primitives/label';\nimport { cn } from '../../lib/utils';\nimport { useOrganifyGql, useOrganifyProject } from '../../providers/organify-provider';\n\n// ─── GraphQL ────────────────────────────────\n\nconst CREATE_TASK_MUTATION = `\n mutation CreateTask($input: CreateTaskInput!) {\n createTask(input: $input) {\n id\n title\n number\n priority\n }\n }\n`;\n\n// ─── Types ──────────────────────────────────\n\ntype Priority = 'NONE' | 'LOW' | 'MEDIUM' | 'HIGH' | 'CRITICAL';\n\nconst PRIORITIES: { value: Priority; label: string; color: string }[] = [\n { value: 'NONE', label: 'None', color: 'bg-theme-subtle-10 text-theme-muted border-theme-subtle' },\n { value: 'LOW', label: 'Low', color: 'bg-blue-500/10 text-blue-400 border-blue-500/20' },\n { value: 'MEDIUM', label: 'Medium', color: 'bg-amber-500/10 text-amber-400 border-amber-500/20' },\n { value: 'HIGH', label: 'High', color: 'bg-orange-500/10 text-orange-400 border-orange-500/20' },\n { value: 'CRITICAL', label: 'Critical', color: 'bg-rose-500/10 text-rose-400 border-rose-500/20' },\n];\n\nexport interface CreateTaskDialogProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n /** Override project context (otherwise uses OrganifyProvider) */\n projectId?: string;\n /** Called after successful creation with the new task */\n onCreated?: (task: { id: string; title: string; number: number }) => void;\n}\n\n// ─── Component ──────────────────────────────\n\nexport function CreateTaskDialog({\n open,\n onOpenChange,\n projectId: projectIdProp,\n onCreated,\n}: CreateTaskDialogProps) {\n const gql = useOrganifyGql();\n const projectCtx = useOrganifyProject();\n const projectId = projectIdProp ?? projectCtx?.project?.id;\n\n const [title, setTitle] = React.useState('');\n const [priority, setPriority] = React.useState<Priority>('NONE');\n const [error, setError] = React.useState('');\n const [loading, setLoading] = React.useState(false);\n\n // Reset form on open\n React.useEffect(() => {\n if (open) {\n setTitle('');\n setPriority('NONE');\n setError('');\n }\n }, [open]);\n\n const handleCreate = async () => {\n if (!title.trim()) {\n setError('Task title is required');\n return;\n }\n if (!projectId) {\n setError('No project context found');\n return;\n }\n\n setLoading(true);\n setError('');\n try {\n const result = await gql('projects', CREATE_TASK_MUTATION, {\n input: {\n projectId,\n title: title.trim(),\n priority,\n },\n });\n const task = result.createTask;\n onCreated?.(task);\n onOpenChange(false);\n } catch (err: any) {\n setError(err.message || 'Failed to create task');\n } finally {\n setLoading(false);\n }\n };\n\n return (\n <ResponsiveDialog\n open={open}\n onOpenChange={onOpenChange}\n title=\"Create Task\"\n description=\"Add a new task. You can fill in details later.\"\n >\n <div className=\"space-y-4 py-2\">\n {/* Title */}\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"task-title\">Title</Label>\n <Input\n id=\"task-title\"\n placeholder=\"What needs to be done?\"\n value={title}\n onChange={(e) => setTitle(e.target.value)}\n onKeyDown={(e) => e.key === 'Enter' && handleCreate()}\n autoFocus\n />\n </div>\n\n {/* Priority */}\n <div className=\"space-y-1.5\">\n <Label>Priority</Label>\n <div className=\"flex flex-wrap gap-2\">\n {PRIORITIES.map((p) => (\n <button\n key={p.value}\n type=\"button\"\n onClick={() => setPriority(p.value)}\n className={cn(\n 'px-3 py-1.5 rounded-xl text-sm font-medium border transition-all',\n p.color,\n priority === p.value\n ? 'ring-2 ring-brand-primary ring-offset-1 ring-offset-surface-primary'\n : 'opacity-60 hover:opacity-100',\n )}\n >\n {p.label}\n </button>\n ))}\n </div>\n </div>\n\n {error && (\n <p className=\"text-sm text-rose-400\">{error}</p>\n )}\n </div>\n\n {/* Footer */}\n <div className=\"flex justify-end gap-2 pt-4\">\n <Button variant=\"outline\" onClick={() => onOpenChange(false)}>\n Cancel\n </Button>\n <Button\n onClick={handleCreate}\n disabled={loading || !title.trim()}\n loading={loading}\n >\n Create Task\n </Button>\n </div>\n </ResponsiveDialog>\n );\n}\n","// ─────────────────────────────────────────────\n// InviteMemberDialog — Invite user to workspace\n// ─────────────────────────────────────────────\n// Minimal: email + role selection. One at a time.\n// ─────────────────────────────────────────────\n\n'use client';\n\nimport * as React from 'react';\nimport { ResponsiveDialog } from '../primitives/responsive-dialog';\nimport { Button } from '../primitives/button';\nimport { Input } from '../primitives/input';\nimport { Label } from '../primitives/label';\nimport { cn } from '../../lib/utils';\nimport { useOrganifyGql, useOrganifyWorkspace } from '../../providers/organify-provider';\nimport { OrgMail } from '../../icons';\n\n// ─── GraphQL ────────────────────────────────\n\nconst INVITE_MEMBER_MUTATION = `\n mutation InviteWorkspaceMember($slug: String!, $input: InviteMemberInput!) {\n inviteWorkspaceMember(slug: $slug, input: $input) {\n id\n email\n role\n status\n }\n }\n`;\n\n// ─── Types ──────────────────────────────────\n\nexport interface InviteMemberDialogProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n /** Workspace slug (overrides context) */\n workspaceSlug?: string;\n /** @deprecated use workspaceSlug */\n workspaceId?: string;\n onInvited?: (invite: { id: string; email: string }) => void;\n}\n\ntype Role = 'ADMIN' | 'MEMBER' | 'VIEWER';\n\n// ─── Component ──────────────────────────────\n\nexport function InviteMemberDialog({\n open,\n onOpenChange,\n workspaceSlug: propWorkspaceSlug,\n workspaceId: _deprecated,\n onInvited,\n}: InviteMemberDialogProps) {\n const gql = useOrganifyGql();\n const { workspace } = useOrganifyWorkspace();\n const effectiveSlug = propWorkspaceSlug ?? workspace?.slug;\n\n const [email, setEmail] = React.useState('');\n const [role, setRole] = React.useState<Role>('MEMBER');\n const [error, setError] = React.useState('');\n const [loading, setLoading] = React.useState(false);\n\n React.useEffect(() => {\n if (open) { setEmail(''); setRole('MEMBER'); setError(''); }\n }, [open]);\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n const trimmed = email.trim().toLowerCase();\n if (!trimmed) { setError('Email is required'); return; }\n if (!/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(trimmed)) { setError('Invalid email format'); return; }\n if (!effectiveSlug) { setError('No workspace context'); return; }\n\n setLoading(true);\n setError('');\n try {\n const data = await gql<{ inviteWorkspaceMember: { id: string; email: string } }>(\n 'workspaces',\n INVITE_MEMBER_MUTATION,\n { slug: effectiveSlug, input: { email: trimmed, role } },\n );\n onOpenChange(false);\n onInvited?.(data.inviteWorkspaceMember);\n } catch (err: any) {\n setError(err.message || 'Failed to send invite');\n } finally {\n setLoading(false);\n }\n };\n\n const roles: { value: Role; label: string; desc: string }[] = [\n { value: 'ADMIN', label: 'Admin', desc: 'Full access, manage members' },\n { value: 'MEMBER', label: 'Member', desc: 'Edit projects and tasks' },\n { value: 'VIEWER', label: 'Viewer', desc: 'Read-only access' },\n ];\n\n return (\n <ResponsiveDialog\n open={open}\n onOpenChange={onOpenChange}\n title=\"Invite Member\"\n description=\"Send an invitation to join this workspace.\"\n contentClassName=\"max-w-sm\"\n footer={\n <div className=\"flex gap-2 justify-end w-full\">\n <Button variant=\"ghost\" onClick={() => onOpenChange(false)} disabled={loading}>\n Cancel\n </Button>\n <Button onClick={handleSubmit} disabled={loading || !email.trim()}>\n <OrgMail className=\"w-4 h-4 mr-1.5\" />\n {loading ? 'Sending…' : 'Send Invite'}\n </Button>\n </div>\n }\n >\n <form onSubmit={handleSubmit} className=\"space-y-4\">\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"invite-email\">Email address</Label>\n <Input\n id=\"invite-email\"\n type=\"email\"\n placeholder=\"colleague@company.com\"\n value={email}\n onChange={(e) => { setEmail(e.target.value); setError(''); }}\n autoFocus\n />\n {error && <p className=\"text-xs text-rose-400\">{error}</p>}\n </div>\n\n <div className=\"space-y-1.5\">\n <Label>Role</Label>\n <div className=\"space-y-2\">\n {roles.map((r) => (\n <button\n key={r.value}\n type=\"button\"\n onClick={() => setRole(r.value)}\n className={cn(\n 'w-full flex items-center gap-3 p-2.5 rounded-xl border text-left transition-all',\n role === r.value\n ? 'bg-theme-subtle-10 border-primary ring-1 ring-primary/30'\n : 'bg-theme-card border-theme-subtle hover:border-theme-medium',\n )}\n >\n <div\n className={cn(\n 'w-3 h-3 rounded-full border-2',\n role === r.value ? 'bg-primary border-primary' : 'border-theme-subtle-20',\n )}\n />\n <div>\n <p className=\"text-sm font-medium text-theme\">{r.label}</p>\n <p className=\"text-xs text-theme-muted\">{r.desc}</p>\n </div>\n </button>\n ))}\n </div>\n </div>\n </form>\n </ResponsiveDialog>\n );\n}\n"]}
|