{"version":3,"sources":["../../src/core/types.ts","../../src/core/schemas.ts","../../src/react/hooks/useTimeEntries.ts","../../src/react/components/TimeEntryForm.tsx","../../src/react/components/Timer.tsx","../../src/react/components/WeeklyTimesheetGrid.tsx","../../src/utils/debounce.ts","../../src/react/components/FiltersBar.tsx","../../src/react/components/ProjectTimeChart.tsx","../../src/react/components/DeveloperHoursChart.tsx","../../src/react/hooks/useExportCSV.ts"],"names":["TimeEntryStatus","TimeCategoryType","z","useQuery","useQueryClient","useMutation","useToast","useColorModeValue","useState","useForm","zodResolver","useEffect","jsx","Box","jsxs","VStack","FormControl","FormLabel","Controller","Select","FormErrorMessage","HStack","Input","Switch","Textarea","Button","useRef","Text","Badge","Fragment","FiPlay","FiPause","FiSquare","useMemo","startOfWeek","addDays","format","totals","Table","Thead","Tr","Th","Tbody","Td","IconButton","FiCheck","FiX","FiEdit2","Tfoot","FiSend","useCallback","FiFilter","Wrap","WrapItem","ResponsiveContainer","BarChart","CartesianGrid","XAxis","YAxis","Tooltip","Legend","Bar"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Core TypeScript type definitions for Time Log domain\n */\n\nexport enum TimeEntryStatus {\n  DRAFT = 'DRAFT',\n  SUBMITTED = 'SUBMITTED',\n  APPROVED = 'APPROVED',\n  REJECTED = 'REJECTED',\n  LOCKED = 'LOCKED',\n  BILLED = 'BILLED',\n}\n\nexport enum TimeCategoryType {\n  BILLABLE = 'BILLABLE',\n  NON_BILLABLE = 'NON_BILLABLE',\n  INTERNAL = 'INTERNAL',\n  TRAINING = 'TRAINING',\n  MEETING = 'MEETING',\n}\n\nexport interface TimeEntry {\n  id: string;\n  projectId: string;\n  taskId?: string;\n  developerId: string;\n  clientId: string;\n  startAt: Date;\n  endAt: Date;\n  durationMinutes: number;\n  billable: boolean;\n  category: TimeCategoryType;\n  tags: string[];\n  status: TimeEntryStatus;\n  notes?: string;\n  approvedBy?: string;\n  approvedAt?: Date;\n  rejectedBy?: string;\n  rejectedAt?: Date;\n  rejectionReason?: string;\n  lockedAt?: Date;\n  billedAt?: Date;\n  invoiceId?: string;\n  createdAt: Date;\n  updatedAt: Date;\n}\n\nexport interface Timesheet {\n  id: string;\n  developerId: string;\n  clientId: string;\n  periodStart: Date;\n  periodEnd: Date;\n  totalMinutes: number;\n  billableMinutes: number;\n  status: TimeEntryStatus;\n  submittedAt?: Date;\n  approvedAt?: Date;\n  approvedBy?: string;\n  entries: TimeEntry[];\n}\n\nexport interface RateCard {\n  id: string;\n  developerId?: string;\n  projectId?: string;\n  clientId?: string;\n  hourlyRate: number;\n  currency: string;\n  effectiveFrom: Date;\n  effectiveTo?: Date;\n  isActive: boolean;\n  createdAt: Date;\n  updatedAt: Date;\n}\n\nexport interface TimeCategory {\n  id: string;\n  name: string;\n  type: TimeCategoryType;\n  billable: boolean;\n  color: string;\n  description?: string;\n  isActive: boolean;\n}\n\nexport interface TimeLock {\n  id: string;\n  projectId?: string;\n  clientId?: string;\n  periodStart: Date;\n  periodEnd: Date;\n  reason: string;\n  lockedBy: string;\n  lockedAt: Date;\n  unlockedBy?: string;\n  unlockedAt?: Date;\n  isActive: boolean;\n}\n\nexport interface AuditLog {\n  id: string;\n  entityType: string;\n  entityId: string;\n  action: string;\n  userId: string;\n  metadata?: Record<string, any>;\n  createdAt: Date;\n}","/**\n * Zod validation schemas for Time Log domain\n */\n\nimport { z } from 'zod';\nimport { TimeEntryStatus, TimeCategoryType } from './types';\n\n// Base schemas\nexport const timeEntryStatusSchema = z.nativeEnum(TimeEntryStatus);\nexport const timeCategoryTypeSchema = z.nativeEnum(TimeCategoryType);\n\n// TimeEntry schemas\nexport const createTimeEntrySchema = z.object({\n  projectId: z.string().min(1),\n  taskId: z.string().optional(),\n  developerId: z.string().min(1),\n  clientId: z.string().min(1),\n  startAt: z.string().datetime().or(z.date()),\n  endAt: z.string().datetime().or(z.date()),\n  billable: z.boolean().default(true),\n  category: timeCategoryTypeSchema.default(TimeCategoryType.BILLABLE),\n  tags: z.array(z.string()).default([]),\n  notes: z.string().optional(),\n});\n\nexport const updateTimeEntrySchema = createTimeEntrySchema.partial().extend({\n  id: z.string().min(1),\n});\n\nexport const submitTimeEntrySchema = z.object({\n  id: z.string().min(1),\n});\n\nexport const approveTimeEntrySchema = z.object({\n  id: z.string().min(1),\n  approvedBy: z.string().min(1),\n});\n\nexport const rejectTimeEntrySchema = z.object({\n  id: z.string().min(1),\n  rejectedBy: z.string().min(1),\n  reason: z.string().min(1),\n});\n\n// Timesheet schemas\nexport const timesheetQuerySchema = z.object({\n  developerId: z.string().optional(),\n  clientId: z.string().optional(),\n  projectId: z.string().optional(),\n  periodStart: z.string().datetime().or(z.date()),\n  periodEnd: z.string().datetime().or(z.date()),\n  status: timeEntryStatusSchema.optional(),\n});\n\n// RateCard schemas\nexport const createRateCardSchema = z.object({\n  developerId: z.string().optional(),\n  projectId: z.string().optional(),\n  clientId: z.string().optional(),\n  hourlyRate: z.number().positive(),\n  currency: z.string().length(3).default('USD'),\n  effectiveFrom: z.string().datetime().or(z.date()),\n  effectiveTo: z.string().datetime().or(z.date()).optional(),\n}).refine(\n  (data) => data.developerId || data.projectId || data.clientId,\n  { message: 'At least one of developerId, projectId, or clientId must be provided' }\n);\n\n// TimeCategory schemas\nexport const createTimeCategorySchema = z.object({\n  name: z.string().min(1).max(50),\n  type: timeCategoryTypeSchema,\n  billable: z.boolean(),\n  color: z.string().regex(/^#[0-9A-Fa-f]{6}$/),\n  description: z.string().optional(),\n});\n\n// TimeLock schemas\nexport const createTimeLockSchema = z.object({\n  projectId: z.string().optional(),\n  clientId: z.string().optional(),\n  periodStart: z.string().datetime().or(z.date()),\n  periodEnd: z.string().datetime().or(z.date()),\n  reason: z.string().min(1),\n  lockedBy: z.string().min(1),\n}).refine(\n  (data) => data.projectId || data.clientId,\n  { message: 'Either projectId or clientId must be provided' }\n);\n\n// Query and filter schemas\nexport const paginationSchema = z.object({\n  page: z.coerce.number().int().positive().default(1),\n  limit: z.coerce.number().int().positive().max(100).default(20),\n  sortBy: z.string().optional(),\n  sortOrder: z.enum(['asc', 'desc']).default('desc'),\n});\n\nexport const timeEntryFilterSchema = z.object({\n  developerId: z.string().optional(),\n  clientId: z.string().optional(),\n  projectId: z.string().optional(),\n  taskId: z.string().optional(),\n  status: timeEntryStatusSchema.optional(),\n  billable: z.coerce.boolean().optional(),\n  category: timeCategoryTypeSchema.optional(),\n  tags: z.array(z.string()).optional(),\n  startDate: z.string().datetime().or(z.date()).optional(),\n  endDate: z.string().datetime().or(z.date()).optional(),\n}).merge(paginationSchema);\n\n// Export types from schemas\nexport type CreateTimeEntryInput = z.infer<typeof createTimeEntrySchema>;\nexport type UpdateTimeEntryInput = z.infer<typeof updateTimeEntrySchema>;\nexport type TimeEntryFilter = z.infer<typeof timeEntryFilterSchema>;\nexport type TimesheetQuery = z.infer<typeof timesheetQuerySchema>;\nexport type CreateRateCardInput = z.infer<typeof createRateCardSchema>;\nexport type CreateTimeCategoryInput = z.infer<typeof createTimeCategorySchema>;\nexport type CreateTimeLockInput = z.infer<typeof createTimeLockSchema>;\nexport type PaginationParams = z.infer<typeof paginationSchema>;","/**\n * React Query hooks for time entries\n */\n\nimport { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';\nimport type { \n  TimeEntry, \n  CreateTimeEntryInput, \n  UpdateTimeEntryInput,\n  TimeEntryFilter \n} from '../../core';\n\ninterface TimeEntryResponse {\n  data: TimeEntry[];\n  total: number;\n}\n\nconst API_BASE = '/api/timelog';\n\n/**\n * Fetch time entries with filters\n */\nexport function useTimeEntries(filter: Partial<TimeEntryFilter> = {}) {\n  return useQuery<TimeEntryResponse>({\n    queryKey: ['timeEntries', filter],\n    queryFn: async () => {\n      const params = new URLSearchParams();\n      Object.entries(filter).forEach(([key, value]) => {\n        if (value !== undefined && value !== null) {\n          params.append(key, String(value));\n        }\n      });\n      \n      const response = await fetch(`${API_BASE}/time-entries?${params}`);\n      if (!response.ok) {\n        throw new Error('Failed to fetch time entries');\n      }\n      return response.json();\n    },\n  });\n}\n\n/**\n * Create a new time entry\n */\nexport function useCreateTimeEntry() {\n  const queryClient = useQueryClient();\n  \n  return useMutation<TimeEntry, Error, CreateTimeEntryInput>({\n    mutationFn: async (data) => {\n      const response = await fetch(`${API_BASE}/time-entries`, {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json' },\n        body: JSON.stringify(data),\n      });\n      \n      if (!response.ok) {\n        const error = await response.json();\n        throw new Error(error.message || 'Failed to create time entry');\n      }\n      \n      return response.json();\n    },\n    onSuccess: () => {\n      queryClient.invalidateQueries({ queryKey: ['timeEntries'] });\n      queryClient.invalidateQueries({ queryKey: ['timesheets'] });\n    },\n  });\n}\n\n/**\n * Update an existing time entry\n */\nexport function useUpdateTimeEntry() {\n  const queryClient = useQueryClient();\n  \n  return useMutation<TimeEntry, Error, UpdateTimeEntryInput>({\n    mutationFn: async (data) => {\n      const response = await fetch(`${API_BASE}/time-entries`, {\n        method: 'PUT',\n        headers: { 'Content-Type': 'application/json' },\n        body: JSON.stringify(data),\n      });\n      \n      if (!response.ok) {\n        const error = await response.json();\n        throw new Error(error.message || 'Failed to update time entry');\n      }\n      \n      return response.json();\n    },\n    onSuccess: () => {\n      queryClient.invalidateQueries({ queryKey: ['timeEntries'] });\n      queryClient.invalidateQueries({ queryKey: ['timesheets'] });\n    },\n  });\n}\n\n/**\n * Delete a time entry\n */\nexport function useDeleteTimeEntry() {\n  const queryClient = useQueryClient();\n  \n  return useMutation<void, Error, string>({\n    mutationFn: async (id) => {\n      const response = await fetch(`${API_BASE}/time-entries?id=${id}`, {\n        method: 'DELETE',\n      });\n      \n      if (!response.ok) {\n        const error = await response.json();\n        throw new Error(error.message || 'Failed to delete time entry');\n      }\n    },\n    onSuccess: () => {\n      queryClient.invalidateQueries({ queryKey: ['timeEntries'] });\n      queryClient.invalidateQueries({ queryKey: ['timesheets'] });\n    },\n  });\n}\n\n/**\n * Submit time entries\n */\nexport function useSubmitTimeEntries() {\n  const queryClient = useQueryClient();\n  \n  return useMutation<void, Error, string[]>({\n    mutationFn: async (ids) => {\n      const response = await fetch(`${API_BASE}/time-entries/submit`, {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json' },\n        body: JSON.stringify({ ids }),\n      });\n      \n      if (!response.ok) {\n        const error = await response.json();\n        throw new Error(error.message || 'Failed to submit time entries');\n      }\n    },\n    onSuccess: () => {\n      queryClient.invalidateQueries({ queryKey: ['timeEntries'] });\n      queryClient.invalidateQueries({ queryKey: ['timesheets'] });\n    },\n  });\n}","/**\n * Time Entry Form Component\n */\n\nimport React, { useState, useEffect } from 'react';\nimport {\n  Box,\n  Button,\n  FormControl,\n  FormLabel,\n  FormErrorMessage,\n  Input,\n  Select,\n  Textarea,\n  HStack,\n  VStack,\n  Switch,\n  useToast,\n  useColorModeValue,\n} from '@chakra-ui/react';\nimport { useForm, Controller } from 'react-hook-form';\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport { createTimeEntrySchema, type CreateTimeEntryInput, TimeCategoryType } from '../../core';\nimport { useCreateTimeEntry, useUpdateTimeEntry } from '../hooks/useTimeEntries';\n\ninterface TimeEntryFormProps {\n  projects: Array<{ id: string; name: string }>;\n  tasks?: Array<{ id: string; name: string; projectId: string }>;\n  categories?: Array<{ id: string; name: string; type: TimeCategoryType }>;\n  developerId: string;\n  clientId: string;\n  initialValue?: Partial<CreateTimeEntryInput & { id?: string }>;\n  onSubmit?: (data: CreateTimeEntryInput) => void;\n  onCancel?: () => void;\n  onSuccess?: () => void;\n}\n\nexport function TimeEntryForm({\n  projects,\n  tasks = [],\n  categories = [],\n  developerId,\n  clientId,\n  initialValue,\n  onSubmit,\n  onCancel,\n  onSuccess,\n}: TimeEntryFormProps) {\n  const toast = useToast();\n  const bgColor = useColorModeValue('white', 'gray.800');\n  const borderColor = useColorModeValue('gray.200', 'gray.600');\n  \n  const createMutation = useCreateTimeEntry();\n  const updateMutation = useUpdateTimeEntry();\n  \n  const [filteredTasks, setFilteredTasks] = useState(tasks);\n  \n  type FormData = {\n    projectId: string;\n    taskId?: string;\n    developerId: string;\n    clientId: string;\n    startAt: Date;\n    endAt: Date;\n    billable: boolean;\n    category: TimeCategoryType;\n    tags: string[];\n    notes?: string;\n  };\n\n  const {\n    control,\n    handleSubmit,\n    watch,\n    formState: { errors, isSubmitting },\n    reset,\n  } = useForm<FormData>({\n    resolver: zodResolver(createTimeEntrySchema) as any,\n    defaultValues: {\n      projectId: initialValue?.projectId || '',\n      taskId: initialValue?.taskId || '',\n      developerId: initialValue?.developerId || developerId,\n      clientId: initialValue?.clientId || clientId,\n      startAt: initialValue?.startAt ? new Date(initialValue.startAt) : new Date(),\n      endAt: initialValue?.endAt ? new Date(initialValue.endAt) : new Date(),\n      billable: initialValue?.billable ?? true,\n      category: initialValue?.category || TimeCategoryType.BILLABLE,\n      tags: initialValue?.tags || [],\n      notes: initialValue?.notes || '',\n    },\n  });\n  \n  const selectedProjectId = watch('projectId');\n  \n  useEffect(() => {\n    if (selectedProjectId) {\n      setFilteredTasks(tasks.filter(task => task.projectId === selectedProjectId));\n    } else {\n      setFilteredTasks([]);\n    }\n  }, [selectedProjectId, tasks]);\n  \n  const handleFormSubmit = async (data: FormData) => {\n    try {\n      if (onSubmit) {\n        onSubmit(data);\n      } else if (initialValue?.id) {\n        await updateMutation.mutateAsync({ ...data, id: initialValue.id });\n        toast({\n          title: 'Time entry updated',\n          status: 'success',\n          duration: 3000,\n        });\n      } else {\n        await createMutation.mutateAsync(data);\n        toast({\n          title: 'Time entry created',\n          status: 'success',\n          duration: 3000,\n        });\n      }\n      onSuccess?.();\n      reset();\n    } catch (error: any) {\n      toast({\n        title: 'Error',\n        description: error.message,\n        status: 'error',\n        duration: 5000,\n      });\n    }\n  };\n  \n  const formatDateTimeLocal = (date: Date | string) => {\n    const d = new Date(date);\n    const year = d.getFullYear();\n    const month = String(d.getMonth() + 1).padStart(2, '0');\n    const day = String(d.getDate()).padStart(2, '0');\n    const hours = String(d.getHours()).padStart(2, '0');\n    const minutes = String(d.getMinutes()).padStart(2, '0');\n    return `${year}-${month}-${day}T${hours}:${minutes}`;\n  };\n  \n  return (\n    <Box\n      as=\"form\"\n      onSubmit={handleSubmit(handleFormSubmit)}\n      bg={bgColor}\n      borderWidth=\"1px\"\n      borderColor={borderColor}\n      borderRadius=\"lg\"\n      p={6}\n    >\n      <VStack spacing={4} align=\"stretch\">\n        <FormControl isInvalid={!!errors.projectId}>\n          <FormLabel>Project</FormLabel>\n          <Controller\n            name=\"projectId\"\n            control={control}\n            render={({ field }) => (\n              <Select {...field} placeholder=\"Select project\">\n                {projects.map(project => (\n                  <option key={project.id} value={project.id}>\n                    {project.name}\n                  </option>\n                ))}\n              </Select>\n            )}\n          />\n          <FormErrorMessage>{errors.projectId?.message}</FormErrorMessage>\n        </FormControl>\n        \n        {filteredTasks.length > 0 && (\n          <FormControl isInvalid={!!errors.taskId}>\n            <FormLabel>Task (Optional)</FormLabel>\n            <Controller\n              name=\"taskId\"\n              control={control}\n              render={({ field }) => (\n                <Select {...field} placeholder=\"Select task\">\n                  {filteredTasks.map(task => (\n                    <option key={task.id} value={task.id}>\n                      {task.name}\n                    </option>\n                  ))}\n                </Select>\n              )}\n            />\n            <FormErrorMessage>{errors.taskId?.message}</FormErrorMessage>\n          </FormControl>\n        )}\n        \n        <HStack spacing={4}>\n          <FormControl isInvalid={!!errors.startAt}>\n            <FormLabel>Start Time</FormLabel>\n            <Controller\n              name=\"startAt\"\n              control={control}\n              render={({ field }) => (\n                <Input\n                  type=\"datetime-local\"\n                  value={formatDateTimeLocal(field.value)}\n                  onChange={(e) => field.onChange(new Date(e.target.value))}\n                />\n              )}\n            />\n            <FormErrorMessage>{errors.startAt?.message}</FormErrorMessage>\n          </FormControl>\n          \n          <FormControl isInvalid={!!errors.endAt}>\n            <FormLabel>End Time</FormLabel>\n            <Controller\n              name=\"endAt\"\n              control={control}\n              render={({ field }) => (\n                <Input\n                  type=\"datetime-local\"\n                  value={formatDateTimeLocal(field.value)}\n                  onChange={(e) => field.onChange(new Date(e.target.value))}\n                />\n              )}\n            />\n            <FormErrorMessage>{errors.endAt?.message}</FormErrorMessage>\n          </FormControl>\n        </HStack>\n        \n        {categories.length > 0 && (\n          <FormControl isInvalid={!!errors.category}>\n            <FormLabel>Category</FormLabel>\n            <Controller\n              name=\"category\"\n              control={control}\n              render={({ field }) => (\n                <Select {...field}>\n                  {categories.map(category => (\n                    <option key={category.id} value={category.type}>\n                      {category.name}\n                    </option>\n                  ))}\n                </Select>\n              )}\n            />\n            <FormErrorMessage>{errors.category?.message}</FormErrorMessage>\n          </FormControl>\n        )}\n        \n        <FormControl>\n          <HStack>\n            <FormLabel mb={0}>Billable</FormLabel>\n            <Controller\n              name=\"billable\"\n              control={control}\n              render={({ field: { value, onChange } }) => (\n                <Switch isChecked={value} onChange={(e) => onChange(e.target.checked)} />\n              )}\n            />\n          </HStack>\n        </FormControl>\n        \n        <FormControl isInvalid={!!errors.notes}>\n          <FormLabel>Notes (Optional)</FormLabel>\n          <Controller\n            name=\"notes\"\n            control={control}\n            render={({ field }) => (\n              <Textarea {...field} placeholder=\"Add any notes about this time entry\" rows={3} />\n            )}\n          />\n          <FormErrorMessage>{errors.notes?.message}</FormErrorMessage>\n        </FormControl>\n        \n        <HStack spacing={4} justify=\"flex-end\">\n          {onCancel && (\n            <Button variant=\"ghost\" onClick={onCancel}>\n              Cancel\n            </Button>\n          )}\n          <Button\n            type=\"submit\"\n            colorScheme=\"blue\"\n            isLoading={isSubmitting || createMutation.isPending || updateMutation.isPending}\n          >\n            {initialValue?.id ? 'Update' : 'Create'} Entry\n          </Button>\n        </HStack>\n      </VStack>\n    </Box>\n  );\n}","/**\n * Timer Component for tracking time\n */\n\nimport React, { useState, useEffect, useRef } from 'react';\nimport {\n  Box,\n  Button,\n  Text,\n  HStack,\n  VStack,\n  Select,\n  Textarea,\n  FormControl,\n  FormLabel,\n  Badge,\n  useColorModeValue,\n  useToast,\n} from '@chakra-ui/react';\nimport { FiPlay, FiPause, FiSquare } from 'react-icons/fi';\n\ninterface TimerProps {\n  projects: Array<{ id: string; name: string }>;\n  tasks?: Array<{ id: string; name: string; projectId: string }>;\n  categories?: Array<{ id: string; name: string }>;\n  onStart?: (data: TimerData) => void;\n  onStop?: (data: TimerData & { duration: number }) => void;\n  isRunning?: boolean;\n  elapsed?: number;\n  lockedRanges?: Array<{ start: Date; end: Date }>;\n}\n\ninterface TimerData {\n  projectId: string;\n  taskId?: string;\n  categoryId?: string;\n  notes?: string;\n  startedAt?: Date;\n}\n\nexport function Timer({\n  projects,\n  tasks = [],\n  categories = [],\n  onStart,\n  onStop,\n  isRunning: externalIsRunning,\n  elapsed: externalElapsed,\n  lockedRanges = [],\n}: TimerProps) {\n  const [isRunning, setIsRunning] = useState(externalIsRunning || false);\n  const [elapsed, setElapsed] = useState(externalElapsed || 0);\n  const [startTime, setStartTime] = useState<Date | null>(null);\n  const [timerData, setTimerData] = useState<TimerData>({\n    projectId: '',\n    taskId: '',\n    categoryId: '',\n    notes: '',\n  });\n  const [filteredTasks, setFilteredTasks] = useState(tasks);\n  \n  const intervalRef = useRef<NodeJS.Timeout | null>(null);\n  const toast = useToast();\n  \n  const bgColor = useColorModeValue('white', 'gray.800');\n  const borderColor = useColorModeValue('gray.200', 'gray.600');\n  const timerBg = useColorModeValue('gray.50', 'gray.700');\n  \n  useEffect(() => {\n    if (timerData.projectId) {\n      setFilteredTasks(tasks.filter(task => task.projectId === timerData.projectId));\n    } else {\n      setFilteredTasks([]);\n    }\n  }, [timerData.projectId, tasks]);\n  \n  useEffect(() => {\n    if (isRunning && !intervalRef.current) {\n      intervalRef.current = setInterval(() => {\n        setElapsed(prev => prev + 1);\n      }, 1000);\n    } else if (!isRunning && intervalRef.current) {\n      clearInterval(intervalRef.current);\n      intervalRef.current = null;\n    }\n    \n    return () => {\n      if (intervalRef.current) {\n        clearInterval(intervalRef.current);\n      }\n    };\n  }, [isRunning]);\n  \n  const formatTime = (seconds: number): string => {\n    const hours = Math.floor(seconds / 3600);\n    const minutes = Math.floor((seconds % 3600) / 60);\n    const secs = seconds % 60;\n    \n    return [\n      hours.toString().padStart(2, '0'),\n      minutes.toString().padStart(2, '0'),\n      secs.toString().padStart(2, '0'),\n    ].join(':');\n  };\n  \n  const isInLockedRange = (date: Date): boolean => {\n    return lockedRanges.some(range => date >= range.start && date <= range.end);\n  };\n  \n  const handleStart = () => {\n    if (!timerData.projectId) {\n      toast({\n        title: 'Select a project',\n        description: 'Please select a project before starting the timer',\n        status: 'warning',\n        duration: 3000,\n      });\n      return;\n    }\n    \n    const now = new Date();\n    \n    if (isInLockedRange(now)) {\n      toast({\n        title: 'Locked period',\n        description: 'Cannot start timer in a locked time period',\n        status: 'error',\n        duration: 3000,\n      });\n      return;\n    }\n    \n    setStartTime(now);\n    setIsRunning(true);\n    setElapsed(0);\n    \n    const data = {\n      ...timerData,\n      startedAt: now,\n    };\n    \n    setTimerData(data);\n    onStart?.(data);\n  };\n  \n  const handlePause = () => {\n    setIsRunning(false);\n  };\n  \n  const handleResume = () => {\n    setIsRunning(true);\n  };\n  \n  const handleStop = () => {\n    const now = new Date();\n    \n    if (isInLockedRange(now)) {\n      toast({\n        title: 'Locked period',\n        description: 'Cannot stop timer in a locked time period',\n        status: 'error',\n        duration: 3000,\n      });\n      return;\n    }\n    \n    setIsRunning(false);\n    \n    if (startTime) {\n      const data = {\n        ...timerData,\n        duration: elapsed,\n      };\n      \n      onStop?.(data);\n      \n      // Reset timer\n      setElapsed(0);\n      setStartTime(null);\n      setTimerData({\n        projectId: '',\n        taskId: '',\n        categoryId: '',\n        notes: '',\n      });\n    }\n  };\n  \n  return (\n    <Box\n      bg={bgColor}\n      borderWidth=\"1px\"\n      borderColor={borderColor}\n      borderRadius=\"lg\"\n      p={6}\n    >\n      <VStack spacing={4} align=\"stretch\">\n        {/* Timer Display */}\n        <Box\n          bg={timerBg}\n          borderRadius=\"md\"\n          p={6}\n          textAlign=\"center\"\n        >\n          <Text fontSize=\"4xl\" fontWeight=\"bold\" fontFamily=\"mono\">\n            {formatTime(elapsed)}\n          </Text>\n          {isRunning && (\n            <Badge colorScheme=\"green\" mt={2}>\n              RUNNING\n            </Badge>\n          )}\n        </Box>\n        \n        {/* Controls */}\n        {!isRunning && elapsed === 0 && (\n          <>\n            <FormControl>\n              <FormLabel>Project</FormLabel>\n              <Select\n                value={timerData.projectId}\n                onChange={(e) => setTimerData({ ...timerData, projectId: e.target.value })}\n                placeholder=\"Select project\"\n              >\n                {projects.map(project => (\n                  <option key={project.id} value={project.id}>\n                    {project.name}\n                  </option>\n                ))}\n              </Select>\n            </FormControl>\n            \n            {filteredTasks.length > 0 && (\n              <FormControl>\n                <FormLabel>Task (Optional)</FormLabel>\n                <Select\n                  value={timerData.taskId}\n                  onChange={(e) => setTimerData({ ...timerData, taskId: e.target.value })}\n                  placeholder=\"Select task\"\n                >\n                  {filteredTasks.map(task => (\n                    <option key={task.id} value={task.id}>\n                      {task.name}\n                    </option>\n                  ))}\n                </Select>\n              </FormControl>\n            )}\n            \n            {categories.length > 0 && (\n              <FormControl>\n                <FormLabel>Category</FormLabel>\n                <Select\n                  value={timerData.categoryId}\n                  onChange={(e) => setTimerData({ ...timerData, categoryId: e.target.value })}\n                  placeholder=\"Select category\"\n                >\n                  {categories.map(category => (\n                    <option key={category.id} value={category.id}>\n                      {category.name}\n                    </option>\n                  ))}\n                </Select>\n              </FormControl>\n            )}\n            \n            <FormControl>\n              <FormLabel>Notes (Optional)</FormLabel>\n              <Textarea\n                value={timerData.notes}\n                onChange={(e) => setTimerData({ ...timerData, notes: e.target.value })}\n                placeholder=\"What are you working on?\"\n                rows={2}\n              />\n            </FormControl>\n          </>\n        )}\n        \n        {/* Action Buttons */}\n        <HStack spacing={4} justify=\"center\">\n          {!isRunning && elapsed === 0 && (\n            <Button\n              leftIcon={<FiPlay />}\n              colorScheme=\"green\"\n              size=\"lg\"\n              onClick={handleStart}\n            >\n              Start Timer\n            </Button>\n          )}\n          \n          {isRunning && (\n            <>\n              <Button\n                leftIcon={<FiPause />}\n                colorScheme=\"yellow\"\n                size=\"lg\"\n                onClick={handlePause}\n              >\n                Pause\n              </Button>\n              <Button\n                leftIcon={<FiSquare />}\n                colorScheme=\"red\"\n                size=\"lg\"\n                onClick={handleStop}\n              >\n                Stop\n              </Button>\n            </>\n          )}\n          \n          {!isRunning && elapsed > 0 && (\n            <>\n              <Button\n                leftIcon={<FiPlay />}\n                colorScheme=\"green\"\n                size=\"lg\"\n                onClick={handleResume}\n              >\n                Resume\n              </Button>\n              <Button\n                leftIcon={<FiSquare />}\n                colorScheme=\"red\"\n                size=\"lg\"\n                onClick={handleStop}\n              >\n                Finish\n              </Button>\n            </>\n          )}\n        </HStack>\n      </VStack>\n    </Box>\n  );\n}","/**\n * Weekly Timesheet Grid Component\n */\n\nimport React, { useState, useCallback, useMemo } from 'react';\nimport {\n  Box,\n  Table,\n  Thead,\n  Tbody,\n  Tfoot,\n  Tr,\n  Th,\n  Td,\n  Input,\n  Button,\n  Text,\n  HStack,\n  VStack,\n  Badge,\n  IconButton,\n  useColorModeValue,\n  useToast,\n} from '@chakra-ui/react';\nimport { FiEdit2, FiCheck, FiX, FiSend } from 'react-icons/fi';\nimport { format, startOfWeek, addDays, isSameDay } from 'date-fns';\nimport type { TimeEntry } from '../../core';\n\ninterface WeeklyTimesheetGridProps {\n  weekStart: Date;\n  entries: TimeEntry[];\n  projects: Array<{ id: string; name: string }>;\n  onCellEdit?: (entryId: string, date: Date, minutes: number) => void;\n  onSubmitWeek?: () => void;\n  totals?: {\n    daily: Record<string, number>;\n    weekly: number;\n    billable: number;\n  };\n  isEditable?: boolean;\n  isSubmitted?: boolean;\n}\n\ninterface GridCell {\n  date: Date;\n  projectId: string;\n  entries: TimeEntry[];\n  totalMinutes: number;\n  isEditing: boolean;\n  editValue: string;\n}\n\nexport function WeeklyTimesheetGrid({\n  weekStart,\n  entries,\n  projects,\n  onCellEdit,\n  onSubmitWeek,\n  totals,\n  isEditable = true,\n  isSubmitted = false,\n}: WeeklyTimesheetGridProps) {\n  const toast = useToast();\n  const bgColor = useColorModeValue('white', 'gray.800');\n  const borderColor = useColorModeValue('gray.200', 'gray.600');\n  const headerBg = useColorModeValue('gray.50', 'gray.700');\n  const footerBg = useColorModeValue('gray.100', 'gray.700');\n  const editingBg = useColorModeValue('blue.50', 'blue.900');\n  \n  const [editingCells, setEditingCells] = useState<Set<string>>(new Set());\n  const [editValues, setEditValues] = useState<Record<string, string>>({});\n  \n  // Generate week days\n  const weekDays = useMemo(() => {\n    const days = [];\n    const start = startOfWeek(weekStart, { weekStartsOn: 1 }); // Monday\n    for (let i = 0; i < 7; i++) {\n      days.push(addDays(start, i));\n    }\n    return days;\n  }, [weekStart]);\n  \n  // Organize entries by project and day\n  const gridData = useMemo(() => {\n    const data: Record<string, Record<string, GridCell>> = {};\n    \n    // Initialize grid\n    projects.forEach(project => {\n      data[project.id] = {};\n      weekDays.forEach(day => {\n        const dayKey = format(day, 'yyyy-MM-dd');\n        data[project.id][dayKey] = {\n          date: day,\n          projectId: project.id,\n          entries: [],\n          totalMinutes: 0,\n          isEditing: false,\n          editValue: '',\n        };\n      });\n    });\n    \n    // Populate with entries\n    entries.forEach(entry => {\n      const dayKey = format(new Date(entry.startAt), 'yyyy-MM-dd');\n      if (data[entry.projectId] && data[entry.projectId][dayKey]) {\n        data[entry.projectId][dayKey].entries.push(entry);\n        data[entry.projectId][dayKey].totalMinutes += entry.durationMinutes;\n      }\n    });\n    \n    return data;\n  }, [projects, weekDays, entries]);\n  \n  // Calculate daily totals\n  const dailyTotals = useMemo(() => {\n    const totals: Record<string, number> = {};\n    weekDays.forEach(day => {\n      const dayKey = format(day, 'yyyy-MM-dd');\n      totals[dayKey] = 0;\n      Object.values(gridData).forEach(projectRow => {\n        totals[dayKey] += projectRow[dayKey]?.totalMinutes || 0;\n      });\n    });\n    return totals;\n  }, [gridData, weekDays]);\n  \n  // Calculate weekly total\n  const weeklyTotal = useMemo(() => {\n    return Object.values(dailyTotals).reduce((sum, minutes) => sum + minutes, 0);\n  }, [dailyTotals]);\n  \n  const formatMinutes = (minutes: number): string => {\n    const hours = Math.floor(minutes / 60);\n    const mins = minutes % 60;\n    if (mins === 0) return `${hours}h`;\n    return `${hours}h ${mins}m`;\n  };\n  \n  const parseTimeInput = (input: string): number | null => {\n    // Accept formats: \"2.5\", \"2:30\", \"2h30m\", \"150m\"\n    const decimal = input.match(/^(\\d+(?:\\.\\d+)?)$/);\n    if (decimal) {\n      return Math.round(parseFloat(decimal[1]) * 60);\n    }\n    \n    const hoursMinutes = input.match(/^(\\d+):(\\d+)$/);\n    if (hoursMinutes) {\n      return parseInt(hoursMinutes[1]) * 60 + parseInt(hoursMinutes[2]);\n    }\n    \n    const hoursMinutesText = input.match(/^(\\d+)h\\s*(\\d+)m?$/);\n    if (hoursMinutesText) {\n      return parseInt(hoursMinutesText[1]) * 60 + parseInt(hoursMinutesText[2]);\n    }\n    \n    const minutesOnly = input.match(/^(\\d+)m$/);\n    if (minutesOnly) {\n      return parseInt(minutesOnly[1]);\n    }\n    \n    return null;\n  };\n  \n  const handleStartEdit = (projectId: string, dayKey: string, currentMinutes: number) => {\n    const cellKey = `${projectId}-${dayKey}`;\n    setEditingCells(new Set([cellKey]));\n    setEditValues({\n      [cellKey]: currentMinutes > 0 ? formatMinutes(currentMinutes) : '',\n    });\n  };\n  \n  const handleCancelEdit = (projectId: string, dayKey: string) => {\n    const cellKey = `${projectId}-${dayKey}`;\n    const newEditing = new Set(editingCells);\n    newEditing.delete(cellKey);\n    setEditingCells(newEditing);\n    \n    const newValues = { ...editValues };\n    delete newValues[cellKey];\n    setEditValues(newValues);\n  };\n  \n  const handleSaveEdit = (projectId: string, dayKey: string) => {\n    const cellKey = `${projectId}-${dayKey}`;\n    const value = editValues[cellKey] || '0';\n    const minutes = parseTimeInput(value);\n    \n    if (minutes === null) {\n      toast({\n        title: 'Invalid time format',\n        description: 'Use formats like: 2.5, 2:30, 2h30m, or 150m',\n        status: 'error',\n        duration: 3000,\n      });\n      return;\n    }\n    \n    const cell = gridData[projectId][dayKey];\n    if (cell.entries.length > 0) {\n      // Update existing entry\n      onCellEdit?.(cell.entries[0].id, cell.date, minutes);\n    } else if (minutes > 0) {\n      // Create new entry\n      onCellEdit?.('new', cell.date, minutes);\n    }\n    \n    handleCancelEdit(projectId, dayKey);\n  };\n  \n  const handleKeyDown = (e: React.KeyboardEvent, projectId: string, dayKey: string) => {\n    if (e.key === 'Enter') {\n      handleSaveEdit(projectId, dayKey);\n    } else if (e.key === 'Escape') {\n      handleCancelEdit(projectId, dayKey);\n    }\n  };\n  \n  return (\n    <Box\n      bg={bgColor}\n      borderWidth=\"1px\"\n      borderColor={borderColor}\n      borderRadius=\"lg\"\n      overflow=\"hidden\"\n    >\n      <Box overflowX=\"auto\">\n        <Table variant=\"simple\" size=\"sm\">\n          <Thead bg={headerBg}>\n            <Tr>\n              <Th width=\"200px\">Project</Th>\n              {weekDays.map(day => (\n                <Th key={format(day, 'yyyy-MM-dd')} textAlign=\"center\">\n                  <VStack spacing={0}>\n                    <Text fontSize=\"xs\" fontWeight=\"normal\">\n                      {format(day, 'EEE')}\n                    </Text>\n                    <Text>{format(day, 'MMM d')}</Text>\n                  </VStack>\n                </Th>\n              ))}\n              <Th textAlign=\"center\">Total</Th>\n            </Tr>\n          </Thead>\n          \n          <Tbody>\n            {projects.map(project => {\n              const projectTotal = weekDays.reduce((sum, day) => {\n                const dayKey = format(day, 'yyyy-MM-dd');\n                return sum + (gridData[project.id][dayKey]?.totalMinutes || 0);\n              }, 0);\n              \n              return (\n                <Tr key={project.id}>\n                  <Td fontWeight=\"medium\">{project.name}</Td>\n                  {weekDays.map(day => {\n                    const dayKey = format(day, 'yyyy-MM-dd');\n                    const cell = gridData[project.id][dayKey];\n                    const cellKey = `${project.id}-${dayKey}`;\n                    const isEditing = editingCells.has(cellKey);\n                    \n                    return (\n                      <Td\n                        key={dayKey}\n                        textAlign=\"center\"\n                        bg={isEditing ? editingBg : undefined}\n                        position=\"relative\"\n                      >\n                        {isEditing ? (\n                          <HStack spacing={1}>\n                            <Input\n                              size=\"sm\"\n                              value={editValues[cellKey] || ''}\n                              onChange={(e) => setEditValues({\n                                ...editValues,\n                                [cellKey]: e.target.value,\n                              })}\n                              onKeyDown={(e) => handleKeyDown(e, project.id, dayKey)}\n                              autoFocus\n                              width=\"80px\"\n                            />\n                            <IconButton\n                              aria-label=\"Save\"\n                              icon={<FiCheck />}\n                              size=\"xs\"\n                              colorScheme=\"green\"\n                              onClick={() => handleSaveEdit(project.id, dayKey)}\n                            />\n                            <IconButton\n                              aria-label=\"Cancel\"\n                              icon={<FiX />}\n                              size=\"xs\"\n                              colorScheme=\"red\"\n                              onClick={() => handleCancelEdit(project.id, dayKey)}\n                            />\n                          </HStack>\n                        ) : (\n                          <HStack spacing={1} justify=\"center\">\n                            <Text>\n                              {cell.totalMinutes > 0 ? formatMinutes(cell.totalMinutes) : '-'}\n                            </Text>\n                            {isEditable && !isSubmitted && (\n                              <IconButton\n                                aria-label=\"Edit\"\n                                icon={<FiEdit2 />}\n                                size=\"xs\"\n                                variant=\"ghost\"\n                                onClick={() => handleStartEdit(project.id, dayKey, cell.totalMinutes)}\n                              />\n                            )}\n                          </HStack>\n                        )}\n                      </Td>\n                    );\n                  })}\n                  <Td textAlign=\"center\" fontWeight=\"bold\">\n                    {projectTotal > 0 ? formatMinutes(projectTotal) : '-'}\n                  </Td>\n                </Tr>\n              );\n            })}\n          </Tbody>\n          \n          <Tfoot bg={footerBg}>\n            <Tr>\n              <Th>Daily Total</Th>\n              {weekDays.map(day => {\n                const dayKey = format(day, 'yyyy-MM-dd');\n                const total = dailyTotals[dayKey];\n                return (\n                  <Th key={dayKey} textAlign=\"center\">\n                    {total > 0 ? formatMinutes(total) : '-'}\n                  </Th>\n                );\n              })}\n              <Th textAlign=\"center\">\n                <VStack spacing={1}>\n                  <Text>{formatMinutes(weeklyTotal)}</Text>\n                  {isSubmitted && (\n                    <Badge colorScheme=\"green\" fontSize=\"xs\">\n                      SUBMITTED\n                    </Badge>\n                  )}\n                </VStack>\n              </Th>\n            </Tr>\n          </Tfoot>\n        </Table>\n      </Box>\n      \n      {isEditable && !isSubmitted && onSubmitWeek && (\n        <Box p={4} borderTopWidth=\"1px\" borderColor={borderColor}>\n          <HStack justify=\"flex-end\">\n            <Button\n              leftIcon={<FiSend />}\n              colorScheme=\"blue\"\n              onClick={onSubmitWeek}\n              isDisabled={weeklyTotal === 0}\n            >\n              Submit Week\n            </Button>\n          </HStack>\n        </Box>\n      )}\n    </Box>\n  );\n}","/**\n * Debounce utility function\n */\n\nexport function debounce<T extends (...args: any[]) => any>(\n  func: T,\n  wait: number\n): (...args: Parameters<T>) => void {\n  let timeout: NodeJS.Timeout | null = null;\n  \n  return function debounced(...args: Parameters<T>) {\n    if (timeout) {\n      clearTimeout(timeout);\n    }\n    \n    timeout = setTimeout(() => {\n      func(...args);\n      timeout = null;\n    }, wait);\n  };\n}","/**\n * Filters Bar Component\n */\n\nimport React, { useState, useCallback, useMemo } from 'react';\nimport {\n  Box,\n  HStack,\n  Select,\n  Input,\n  Button,\n  FormControl,\n  FormLabel,\n  Switch,\n  Wrap,\n  WrapItem,\n  useColorModeValue,\n} from '@chakra-ui/react';\nimport { FiFilter, FiX } from 'react-icons/fi';\nimport { debounce } from '../../utils/debounce';\n\ninterface FiltersBarProps {\n  projects?: Array<{ id: string; name: string }>;\n  developers?: Array<{ id: string; name: string }>;\n  categories?: Array<{ id: string; name: string }>;\n  onFiltersChange?: (filters: FilterValues) => void;\n  initialFilters?: FilterValues;\n  showBillableFilter?: boolean;\n  showDateRange?: boolean;\n}\n\nexport interface FilterValues {\n  projectIds?: string[];\n  developerIds?: string[];\n  categoryIds?: string[];\n  startDate?: string;\n  endDate?: string;\n  billable?: boolean | null;\n}\n\nexport function FiltersBar({\n  projects = [],\n  developers = [],\n  categories = [],\n  onFiltersChange,\n  initialFilters = {},\n  showBillableFilter = true,\n  showDateRange = true,\n}: FiltersBarProps) {\n  const bgColor = useColorModeValue('white', 'gray.800');\n  const borderColor = useColorModeValue('gray.200', 'gray.600');\n  \n  const [filters, setFilters] = useState<FilterValues>(initialFilters);\n  const [isExpanded, setIsExpanded] = useState(false);\n  \n  // Debounced filter change handler\n  const debouncedOnChange = useMemo(\n    () => debounce((newFilters: FilterValues) => {\n      onFiltersChange?.(newFilters);\n    }, 300),\n    [onFiltersChange]\n  );\n  \n  const handleFilterChange = useCallback((key: keyof FilterValues, value: any) => {\n    const newFilters = { ...filters, [key]: value };\n    \n    // Handle empty values\n    if (value === '' || value === null || (Array.isArray(value) && value.length === 0)) {\n      delete newFilters[key];\n    }\n    \n    setFilters(newFilters);\n    debouncedOnChange(newFilters);\n  }, [filters, debouncedOnChange]);\n  \n  const handleProjectChange = (projectId: string) => {\n    const currentProjects = filters.projectIds || [];\n    let newProjects: string[];\n    \n    if (projectId === '') {\n      newProjects = [];\n    } else if (currentProjects.includes(projectId)) {\n      newProjects = currentProjects.filter(id => id !== projectId);\n    } else {\n      newProjects = [...currentProjects, projectId];\n    }\n    \n    handleFilterChange('projectIds', newProjects);\n  };\n  \n  const handleDeveloperChange = (developerId: string) => {\n    const currentDevelopers = filters.developerIds || [];\n    let newDevelopers: string[];\n    \n    if (developerId === '') {\n      newDevelopers = [];\n    } else if (currentDevelopers.includes(developerId)) {\n      newDevelopers = currentDevelopers.filter(id => id !== developerId);\n    } else {\n      newDevelopers = [...currentDevelopers, developerId];\n    }\n    \n    handleFilterChange('developerIds', newDevelopers);\n  };\n  \n  const handleCategoryChange = (categoryId: string) => {\n    const currentCategories = filters.categoryIds || [];\n    let newCategories: string[];\n    \n    if (categoryId === '') {\n      newCategories = [];\n    } else if (currentCategories.includes(categoryId)) {\n      newCategories = currentCategories.filter(id => id !== categoryId);\n    } else {\n      newCategories = [...currentCategories, categoryId];\n    }\n    \n    handleFilterChange('categoryIds', newCategories);\n  };\n  \n  const handleBillableChange = (value: string) => {\n    if (value === 'all') {\n      handleFilterChange('billable', null);\n    } else if (value === 'billable') {\n      handleFilterChange('billable', true);\n    } else if (value === 'non-billable') {\n      handleFilterChange('billable', false);\n    }\n  };\n  \n  const clearFilters = () => {\n    setFilters({});\n    onFiltersChange?.({});\n  };\n  \n  const hasActiveFilters = Object.keys(filters).length > 0;\n  \n  return (\n    <Box\n      bg={bgColor}\n      borderWidth=\"1px\"\n      borderColor={borderColor}\n      borderRadius=\"lg\"\n      p={4}\n    >\n      <HStack spacing={4} mb={isExpanded ? 4 : 0}>\n        <Button\n          leftIcon={<FiFilter />}\n          variant=\"outline\"\n          size=\"sm\"\n          onClick={() => setIsExpanded(!isExpanded)}\n        >\n          Filters {hasActiveFilters && `(${Object.keys(filters).length})`}\n        </Button>\n        \n        {hasActiveFilters && (\n          <Button\n            leftIcon={<FiX />}\n            variant=\"ghost\"\n            size=\"sm\"\n            onClick={clearFilters}\n          >\n            Clear All\n          </Button>\n        )}\n      </HStack>\n      \n      {isExpanded && (\n        <Wrap spacing={4}>\n          {projects.length > 0 && (\n            <WrapItem>\n              <FormControl>\n                <FormLabel fontSize=\"sm\">Project</FormLabel>\n                <Select\n                  size=\"sm\"\n                  placeholder=\"All projects\"\n                  value={filters.projectIds?.[0] || ''}\n                  onChange={(e) => handleProjectChange(e.target.value)}\n                >\n                  {projects.map(project => (\n                    <option key={project.id} value={project.id}>\n                      {project.name}\n                    </option>\n                  ))}\n                </Select>\n              </FormControl>\n            </WrapItem>\n          )}\n          \n          {developers.length > 0 && (\n            <WrapItem>\n              <FormControl>\n                <FormLabel fontSize=\"sm\">Developer</FormLabel>\n                <Select\n                  size=\"sm\"\n                  placeholder=\"All developers\"\n                  value={filters.developerIds?.[0] || ''}\n                  onChange={(e) => handleDeveloperChange(e.target.value)}\n                >\n                  {developers.map(developer => (\n                    <option key={developer.id} value={developer.id}>\n                      {developer.name}\n                    </option>\n                  ))}\n                </Select>\n              </FormControl>\n            </WrapItem>\n          )}\n          \n          {categories.length > 0 && (\n            <WrapItem>\n              <FormControl>\n                <FormLabel fontSize=\"sm\">Category</FormLabel>\n                <Select\n                  size=\"sm\"\n                  placeholder=\"All categories\"\n                  value={filters.categoryIds?.[0] || ''}\n                  onChange={(e) => handleCategoryChange(e.target.value)}\n                >\n                  {categories.map(category => (\n                    <option key={category.id} value={category.id}>\n                      {category.name}\n                    </option>\n                  ))}\n                </Select>\n              </FormControl>\n            </WrapItem>\n          )}\n          \n          {showBillableFilter && (\n            <WrapItem>\n              <FormControl>\n                <FormLabel fontSize=\"sm\">Billable</FormLabel>\n                <Select\n                  size=\"sm\"\n                  value={\n                    filters.billable === true\n                      ? 'billable'\n                      : filters.billable === false\n                      ? 'non-billable'\n                      : 'all'\n                  }\n                  onChange={(e) => handleBillableChange(e.target.value)}\n                >\n                  <option value=\"all\">All</option>\n                  <option value=\"billable\">Billable Only</option>\n                  <option value=\"non-billable\">Non-Billable Only</option>\n                </Select>\n              </FormControl>\n            </WrapItem>\n          )}\n          \n          {showDateRange && (\n            <>\n              <WrapItem>\n                <FormControl>\n                  <FormLabel fontSize=\"sm\">Start Date</FormLabel>\n                  <Input\n                    type=\"date\"\n                    size=\"sm\"\n                    value={filters.startDate || ''}\n                    onChange={(e) => handleFilterChange('startDate', e.target.value)}\n                  />\n                </FormControl>\n              </WrapItem>\n              \n              <WrapItem>\n                <FormControl>\n                  <FormLabel fontSize=\"sm\">End Date</FormLabel>\n                  <Input\n                    type=\"date\"\n                    size=\"sm\"\n                    value={filters.endDate || ''}\n                    onChange={(e) => handleFilterChange('endDate', e.target.value)}\n                  />\n                </FormControl>\n              </WrapItem>\n            </>\n          )}\n        </Wrap>\n      )}\n    </Box>\n  );\n}","/**\n * Project Time Chart Component\n */\n\nimport React from 'react';\nimport {\n  Box,\n  Text,\n  useColorModeValue,\n} from '@chakra-ui/react';\nimport {\n  BarChart,\n  Bar,\n  XAxis,\n  YAxis,\n  CartesianGrid,\n  Tooltip,\n  Legend,\n  ResponsiveContainer,\n} from 'recharts';\n\ninterface ProjectTimeChartProps {\n  data: Array<{\n    projectName: string;\n    hours: number;\n    billableHours: number;\n    nonBillableHours: number;\n  }>;\n  height?: number;\n}\n\nexport function ProjectTimeChart({ data, height = 300 }: ProjectTimeChartProps) {\n  const bgColor = useColorModeValue('white', 'gray.800');\n  const borderColor = useColorModeValue('gray.200', 'gray.600');\n  const textColor = useColorModeValue('gray.700', 'gray.200');\n  const gridColor = useColorModeValue('#E2E8F0', '#4A5568');\n  \n  const formatHours = (value: number) => `${value}h`;\n  \n  const CustomTooltip = ({ active, payload, label }: any) => {\n    if (active && payload && payload.length) {\n      return (\n        <Box\n          bg={bgColor}\n          p={3}\n          borderWidth=\"1px\"\n          borderColor={borderColor}\n          borderRadius=\"md\"\n          shadow=\"md\"\n        >\n          <Text fontWeight=\"bold\" mb={2}>{label}</Text>\n          {payload.map((entry: any, index: number) => (\n            <Text key={index} color={entry.color} fontSize=\"sm\">\n              {entry.name}: {formatHours(entry.value)}\n            </Text>\n          ))}\n          <Text fontSize=\"sm\" fontWeight=\"bold\" mt={1}>\n            Total: {formatHours(payload[0].value + payload[1].value)}\n          </Text>\n        </Box>\n      );\n    }\n    return null;\n  };\n  \n  return (\n    <Box\n      bg={bgColor}\n      borderWidth=\"1px\"\n      borderColor={borderColor}\n      borderRadius=\"lg\"\n      p={4}\n    >\n      <Text fontSize=\"lg\" fontWeight=\"bold\" mb={4}>\n        Time by Project\n      </Text>\n      \n      {data.length === 0 ? (\n        <Box textAlign=\"center\" py={8}>\n          <Text color=\"gray.500\">No data available</Text>\n        </Box>\n      ) : (\n        <ResponsiveContainer width=\"100%\" height={height}>\n          <BarChart\n            data={data}\n            margin={{ top: 20, right: 30, left: 20, bottom: 5 }}\n          >\n            <CartesianGrid strokeDasharray=\"3 3\" stroke={gridColor} />\n            <XAxis\n              dataKey=\"projectName\"\n              tick={{ fill: textColor }}\n              angle={-45}\n              textAnchor=\"end\"\n              height={80}\n            />\n            <YAxis\n              tick={{ fill: textColor }}\n              tickFormatter={formatHours}\n            />\n            <Tooltip content={<CustomTooltip />} />\n            <Legend />\n            <Bar\n              dataKey=\"billableHours\"\n              name=\"Billable\"\n              stackId=\"a\"\n              fill=\"#3182CE\"\n            />\n            <Bar\n              dataKey=\"nonBillableHours\"\n              name=\"Non-Billable\"\n              stackId=\"a\"\n              fill=\"#805AD5\"\n            />\n          </BarChart>\n        </ResponsiveContainer>\n      )}\n    </Box>\n  );\n}","/**\n * Developer Hours Chart Component\n */\n\nimport React from 'react';\nimport {\n  Box,\n  Text,\n  useColorModeValue,\n} from '@chakra-ui/react';\nimport {\n  BarChart,\n  Bar,\n  XAxis,\n  YAxis,\n  CartesianGrid,\n  Tooltip,\n  Legend,\n  ResponsiveContainer,\n} from 'recharts';\n\ninterface DeveloperHoursChartProps {\n  data: Array<{\n    developerName: string;\n    hours: number;\n    projects: Record<string, number>;\n  }>;\n  height?: number;\n  projectColors?: Record<string, string>;\n}\n\nexport function DeveloperHoursChart({ \n  data, \n  height = 300,\n  projectColors = {}\n}: DeveloperHoursChartProps) {\n  const bgColor = useColorModeValue('white', 'gray.800');\n  const borderColor = useColorModeValue('gray.200', 'gray.600');\n  const textColor = useColorModeValue('gray.700', 'gray.200');\n  const gridColor = useColorModeValue('#E2E8F0', '#4A5568');\n  \n  const formatHours = (value: number) => `${value}h`;\n  \n  // Extract unique project names from data\n  const projectNames = Array.from(\n    new Set(data.flatMap(dev => Object.keys(dev.projects)))\n  );\n  \n  // Default colors for projects\n  const defaultColors = [\n    '#3182CE', // Blue\n    '#805AD5', // Purple\n    '#38A169', // Green\n    '#DD6B20', // Orange\n    '#E53E3E', // Red\n    '#38B2AC', // Teal\n    '#D69E2E', // Yellow\n    '#718096', // Gray\n  ];\n  \n  const getProjectColor = (projectName: string, index: number) => {\n    return projectColors[projectName] || defaultColors[index % defaultColors.length];\n  };\n  \n  const CustomTooltip = ({ active, payload, label }: any) => {\n    if (active && payload && payload.length) {\n      const total = payload.reduce((sum: number, entry: any) => sum + (entry.value || 0), 0);\n      \n      return (\n        <Box\n          bg={bgColor}\n          p={3}\n          borderWidth=\"1px\"\n          borderColor={borderColor}\n          borderRadius=\"md\"\n          shadow=\"md\"\n        >\n          <Text fontWeight=\"bold\" mb={2}>{label}</Text>\n          {payload.map((entry: any, index: number) => (\n            entry.value > 0 && (\n              <Text key={index} color={entry.color} fontSize=\"sm\">\n                {entry.name}: {formatHours(entry.value)}\n              </Text>\n            )\n          ))}\n          <Text fontSize=\"sm\" fontWeight=\"bold\" mt={1} borderTopWidth=\"1px\" pt={1}>\n            Total: {formatHours(total)}\n          </Text>\n        </Box>\n      );\n    }\n    return null;\n  };\n  \n  return (\n    <Box\n      bg={bgColor}\n      borderWidth=\"1px\"\n      borderColor={borderColor}\n      borderRadius=\"lg\"\n      p={4}\n    >\n      <Text fontSize=\"lg\" fontWeight=\"bold\" mb={4}>\n        Hours by Developer\n      </Text>\n      \n      {data.length === 0 ? (\n        <Box textAlign=\"center\" py={8}>\n          <Text color=\"gray.500\">No data available</Text>\n        </Box>\n      ) : (\n        <ResponsiveContainer width=\"100%\" height={height}>\n          <BarChart\n            data={data}\n            margin={{ top: 20, right: 30, left: 20, bottom: 5 }}\n          >\n            <CartesianGrid strokeDasharray=\"3 3\" stroke={gridColor} />\n            <XAxis\n              dataKey=\"developerName\"\n              tick={{ fill: textColor }}\n              angle={-45}\n              textAnchor=\"end\"\n              height={80}\n            />\n            <YAxis\n              tick={{ fill: textColor }}\n              tickFormatter={formatHours}\n            />\n            <Tooltip content={<CustomTooltip />} />\n            <Legend />\n            {projectNames.map((projectName, index) => (\n              <Bar\n                key={projectName}\n                dataKey={`projects.${projectName}`}\n                name={projectName}\n                stackId=\"a\"\n                fill={getProjectColor(projectName, index)}\n              />\n            ))}\n          </BarChart>\n        </ResponsiveContainer>\n      )}\n    </Box>\n  );\n}","/**\n * CSV Export Hook\n */\n\nimport { useCallback } from 'react';\nimport { format } from 'date-fns';\n\ninterface ExportOptions {\n  filename?: string;\n  headers?: string[];\n  dateFormat?: string;\n}\n\nexport function useExportCSV() {\n  const exportToCSV = useCallback((\n    data: Record<string, any>[],\n    options: ExportOptions = {}\n  ) => {\n    const {\n      filename = `export-${format(new Date(), 'yyyy-MM-dd-HHmmss')}.csv`,\n      headers,\n      dateFormat = 'yyyy-MM-dd HH:mm:ss',\n    } = options;\n    \n    if (!data || data.length === 0) {\n      console.warn('No data to export');\n      return;\n    }\n    \n    // Get headers from first object if not provided\n    const csvHeaders = headers || Object.keys(data[0]);\n    \n    // Helper to escape CSV values\n    const escapeCSV = (value: any): string => {\n      if (value === null || value === undefined) return '';\n      \n      // Format dates\n      if (value instanceof Date) {\n        value = format(value, dateFormat);\n      }\n      \n      const stringValue = String(value);\n      \n      // Escape quotes and wrap in quotes if contains comma, quote, or newline\n      if (stringValue.includes(',') || stringValue.includes('\"') || stringValue.includes('\\n')) {\n        return `\"${stringValue.replace(/\"/g, '\"\"')}\"`;\n      }\n      \n      return stringValue;\n    };\n    \n    // Build CSV content\n    const csvContent = [\n      // Headers\n      csvHeaders.map(escapeCSV).join(','),\n      // Data rows\n      ...data.map(row =>\n        csvHeaders.map(header => {\n          const value = header.includes('.')\n            ? header.split('.').reduce((obj, key) => obj?.[key], row)\n            : row[header];\n          return escapeCSV(value);\n        }).join(',')\n      ),\n    ].join('\\n');\n    \n    // Create blob and download\n    const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' });\n    const url = URL.createObjectURL(blob);\n    const link = document.createElement('a');\n    link.href = url;\n    link.download = filename;\n    link.style.display = 'none';\n    \n    document.body.appendChild(link);\n    link.click();\n    document.body.removeChild(link);\n    \n    // Clean up\n    URL.revokeObjectURL(url);\n  }, []);\n  \n  return { exportToCSV };\n}"]}