{"_id":"@archeon.ai/taskboard-core","_rev":"2-edce10962a096ab691b8cf62aaf18ef1","name":"@archeon.ai/taskboard-core","dist-tags":{"latest":"1.0.1"},"versions":{"1.0.0":{"name":"@archeon.ai/taskboard-core","version":"1.0.0","keywords":["task-management","kanban","story-points","sprint-planning","react","typescript","tailwind"],"author":{"name":"isardmart"},"license":"MIT","_id":"@archeon.ai/taskboard-core@1.0.0","maintainers":[{"name":"isardmart","email":"antonigaligimeno@gmail.com"}],"homepage":"https://github.com/isardmart/Task-Management-Pre-built-Components-and-Hooks#readme","bugs":{"url":"https://github.com/isardmart/Task-Management-Pre-built-Components-and-Hooks/issues"},"dist":{"shasum":"3206b8f2b12686200e02e6cd0fd7ecaffc959f71","tarball":"https://registry.npmjs.org/@archeon.ai/taskboard-core/-/taskboard-core-1.0.0.tgz","fileCount":83,"integrity":"sha512-pDFoRB/YR2Ex4FQMSvTXwFDyaa1ne/4ZTRz4ASWZ0Hq5iEfUuZ+kYnLIBIfHm38yaJKxUUSNpCAfJ3danpJMwg==","signatures":[{"sig":"MEUCIQCb/3jgmSr0ERPxN5bvWW8A+SSQEOuynbdd1TbLqvh49AIgYiyfjWMjg7qiBtVOkoVslS+5fy8Cy7cMwtH/YTQw3jw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2093377},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"d61492caaaecae244f5301ba778cdb4245f0dc70","scripts":{"dev":"rollup -c -w","lint":"eslint src --ext .ts,.tsx","test":"jest","build":"rollup -c","lint:fix":"eslint src --ext .ts,.tsx --fix","type-check":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"isardmart","email":"antonigaligimeno@gmail.com"},"repository":{"url":"git+https://github.com/isardmart/Task-Management-Pre-built-Components-and-Hooks.git","type":"git"},"_npmVersion":"10.7.0","description":"A reusable task management package with Kanban board, story points, and sprint planning","directories":{},"_nodeVersion":"20.13.1","dependencies":{"zod":"^3.22.4","clsx":"^2.0.0","date-fns":"^3.0.0","@dnd-kit/core":"^6.1.0","@heroicons/react":"^2.0.18","@dnd-kit/sortable":"^8.0.0","@headlessui/react":"^1.7.17","@dnd-kit/utilities":"^3.2.2"},"_hasShrinkwrap":false,"devDependencies":{"react":"^19.2.0","eslint":"^8.55.0","rollup":"^4.9.0","postcss":"^8.4.32","react-dom":"^19.2.0","typescript":"^5.3.3","tailwindcss":"^3.3.6","@types/react":"^18.2.45","autoprefixer":"^10.4.16","@types/react-dom":"^18.2.18","eslint-plugin-react":"^7.33.2","@supabase/supabase-js":"^2.75.0","@tanstack/react-query":"^5.90.2","rollup-plugin-postcss":"^4.0.2","@rollup/plugin-commonjs":"^25.0.7","@rollup/plugin-typescript":"^11.1.5","@typescript-eslint/parser":"^6.14.0","eslint-plugin-react-hooks":"^4.6.0","@rollup/plugin-node-resolve":"^15.2.3","@typescript-eslint/eslint-plugin":"^6.14.0","rollup-plugin-peer-deps-external":"^2.2.4"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0","@supabase/supabase-js":">=2.0.0","@tanstack/react-query":">=5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/taskboard-core_1.0.0_1760701957870_0.24291449474534632","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@archeon.ai/taskboard-core","version":"1.0.1","type":"module","description":"A reusable task management package with Kanban board, story points, and sprint planning","main":"dist/index.js","module":"dist/index.esm.js","types":"dist/index.d.ts","scripts":{"build":"rollup -c","dev":"rollup -c -w","type-check":"tsc --noEmit","lint":"eslint src --ext .ts,.tsx","lint:fix":"eslint src --ext .ts,.tsx --fix","test":"jest","prepublishOnly":"npm run build"},"keywords":["task-management","kanban","story-points","sprint-planning","react","typescript","tailwind"],"author":{"name":"isardmart"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/isardmart/Task-Management-Pre-built-Components-and-Hooks.git"},"peerDependencies":{"@supabase/supabase-js":">=2.0.0","@tanstack/react-query":">=5.0.0","react":">=18.0.0","react-dom":">=18.0.0"},"dependencies":{"@dnd-kit/core":"^6.1.0","@dnd-kit/sortable":"^8.0.0","@dnd-kit/utilities":"^3.2.2","@headlessui/react":"^1.7.17","@heroicons/react":"^2.0.18","clsx":"^2.0.0","date-fns":"^3.0.0","zod":"^3.22.4"},"devDependencies":{"@rollup/plugin-commonjs":"^25.0.7","@rollup/plugin-node-resolve":"^15.2.3","@rollup/plugin-typescript":"^11.1.5","@supabase/supabase-js":"^2.75.0","@tanstack/react-query":"^5.90.2","@types/react":"^18.2.45","@types/react-dom":"^18.2.18","@typescript-eslint/eslint-plugin":"^6.14.0","@typescript-eslint/parser":"^6.14.0","autoprefixer":"^10.4.16","eslint":"^8.55.0","eslint-plugin-react":"^7.33.2","eslint-plugin-react-hooks":"^4.6.0","postcss":"^8.4.32","react":"^18.2.0","react-dom":"^18.2.0","rollup":"^4.9.0","rollup-plugin-peer-deps-external":"^2.2.4","rollup-plugin-postcss":"^4.0.2","tailwindcss":"^3.3.6","typescript":"^5.3.3"},"_id":"@archeon.ai/taskboard-core@1.0.1","gitHead":"f5bf54f16bf0338e161e8e831190d37536da0996","bugs":{"url":"https://github.com/isardmart/Task-Management-Pre-built-Components-and-Hooks/issues"},"homepage":"https://github.com/isardmart/Task-Management-Pre-built-Components-and-Hooks#readme","_nodeVersion":"20.13.1","_npmVersion":"10.7.0","dist":{"integrity":"sha512-Sp1cUuezZKTienUZp4XkOq+dCW3OWs7TnLaaxYtHydVI5Zc8tdK4RRNr7s6kR7sAon0RmGoyknOIwtdLm/IKPw==","shasum":"c45c4708f8a156713b6c1e52ca7dce4b20622a5f","tarball":"https://registry.npmjs.org/@archeon.ai/taskboard-core/-/taskboard-core-1.0.1.tgz","fileCount":83,"unpackedSize":2093389,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCphmUc25vtEScxK4E9JNPq3Rm2prZV77Gr3Xcy3xn4KwIhAMqWiR9xjVW6A07GMeB8RefOfl82i9QLORF7kN40UuKe"}]},"_npmUser":{"name":"isardmart","email":"antonigaligimeno@gmail.com"},"directories":{},"maintainers":[{"name":"isardmart","email":"antonigaligimeno@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/taskboard-core_1.0.1_1760711636327_0.6024168169542148"},"_hasShrinkwrap":false}},"time":{"created":"2025-10-17T11:52:37.814Z","modified":"2025-10-17T14:33:56.835Z","1.0.0":"2025-10-17T11:52:38.115Z","1.0.1":"2025-10-17T14:33:56.543Z"},"bugs":{"url":"https://github.com/isardmart/Task-Management-Pre-built-Components-and-Hooks/issues"},"author":{"name":"isardmart"},"license":"MIT","homepage":"https://github.com/isardmart/Task-Management-Pre-built-Components-and-Hooks#readme","keywords":["task-management","kanban","story-points","sprint-planning","react","typescript","tailwind"],"repository":{"type":"git","url":"git+https://github.com/isardmart/Task-Management-Pre-built-Components-and-Hooks.git"},"description":"A reusable task management package with Kanban board, story points, and sprint planning","maintainers":[{"name":"isardmart","email":"antonigaligimeno@gmail.com"}],"readme":"# @archeon.ai/taskboard-core\r\n\r\nA powerful, reusable task management package for React applications with Kanban board, story points, and sprint planning capabilities.\r\n\r\n## Features\r\n\r\n- 🎯 **Kanban Board** with drag-and-drop functionality\r\n- 📊 **Story Points System** with automatic hour conversion (1 point = 4 hours)\r\n- 🎨 **Priority-based Organization** (P0-P5 with color coding)\r\n- 📁 **Project-based Task Separation** (multiple projects in tabs)\r\n- 🏃 **Sprint Calculation** with team capacity planning\r\n- 📈 **Progress Tracking** with completion percentages\r\n- 👥 **Team Member Assignment** and workload distribution\r\n- ⚡ **Real-time Updates** with React Query\r\n- 📱 **Responsive Design** with Tailwind CSS\r\n- 🔧 **Fully Customizable** configuration system\r\n\r\n## Installation\r\n\r\n```bash\r\nnpm install @archeon.ai/taskboard-core\r\n# or\r\nyarn add @archeon.ai/taskboard-core\r\n```\r\n\r\n## Quick Start\r\n\r\n### 1. Basic Setup\r\n\r\n```tsx\r\nimport React from 'react';\r\nimport { TaskProvider, TaskBoard } from '@taskboard/core';\r\n\r\nfunction App() {\r\n  return (\r\n    <TaskProvider\r\n      config={{\r\n        teamMembers: [\r\n          { id: 'john', name: 'John Doe', capacity_hours_per_week: 40 },\r\n          { id: 'jane', name: 'Jane Smith', capacity_hours_per_week: 40 },\r\n        ],\r\n        projects: [\r\n          { id: 'project1', name: 'Project Alpha' },\r\n          { id: 'project2', name: 'Project Beta' },\r\n        ],\r\n      }}\r\n    >\r\n      <TaskBoard\r\n        project=\"project1\"\r\n        tasks={[]}\r\n        onTaskCreate={(data) => console.log('Create task:', data)}\r\n        onTaskUpdate={(id, data) => console.log('Update task:', id, data)}\r\n        onTaskMove={(data) => console.log('Move task:', data)}\r\n      />\r\n    </TaskProvider>\r\n  );\r\n}\r\n```\r\n\r\n### 2. With Supabase Integration\r\n\r\n```tsx\r\nimport React from 'react';\r\nimport { TaskProvider, TaskBoard, SupabaseAdapter } from '@taskboard/core';\r\n\r\nconst supabaseAdapter = new SupabaseAdapter({\r\n  url: 'your-supabase-url',\r\n  anonKey: 'your-supabase-anon-key',\r\n});\r\n\r\nfunction App() {\r\n  return (\r\n    <TaskProvider\r\n      config={{\r\n        adapter: supabaseAdapter,\r\n        teamMembers: [\r\n          { id: 'john', name: 'John Doe' },\r\n          { id: 'jane', name: 'Jane Smith' },\r\n        ],\r\n      }}\r\n    >\r\n      <TaskBoard\r\n        project=\"exe\"\r\n        tasks={[]}\r\n        onTaskCreate={(data) => console.log('Create task:', data)}\r\n        onTaskUpdate={(id, data) => console.log('Update task:', id, data)}\r\n        onTaskMove={(data) => console.log('Move task:', data)}\r\n      />\r\n    </TaskProvider>\r\n  );\r\n}\r\n```\r\n\r\n## Components\r\n\r\n### TaskBoard\r\n\r\nThe main Kanban board component with drag-and-drop functionality.\r\n\r\n```tsx\r\nimport { TaskBoard } from '@taskboard/core';\r\n\r\n<TaskBoard\r\n  project=\"exe\"\r\n  tasks={tasks}\r\n  onTaskMove={handleTaskMove}\r\n  onTaskCreate={handleTaskCreate}\r\n  onTaskUpdate={handleTaskUpdate}\r\n  onTaskDelete={handleTaskDelete}\r\n  onTaskView={handleTaskView}\r\n  isAdmin={true}\r\n  loading={false}\r\n  error={null}\r\n/>;\r\n```\r\n\r\n**Props:**\r\n\r\n- `project: Project` - Project identifier\r\n- `tasks: Task[]` - Array of tasks\r\n- `onTaskMove?: (data: TaskMoveData) => void` - Handle task movement\r\n- `onTaskCreate?: (data: CreateTaskData) => void` - Handle task creation\r\n- `onTaskUpdate?: (taskId: string, data: UpdateTaskData) => void` - Handle task updates\r\n- `onTaskDelete?: (taskId: string) => void` - Handle task deletion\r\n- `onTaskView?: (task: Task) => void` - Handle task viewing\r\n- `isAdmin?: boolean` - Admin permissions\r\n- `loading?: boolean` - Loading state\r\n- `error?: string` - Error message\r\n\r\n### TaskCard\r\n\r\nIndividual task display component.\r\n\r\n```tsx\r\nimport { TaskCard } from '@taskboard/core';\r\n\r\n<TaskCard\r\n  task={task}\r\n  onEdit={handleEdit}\r\n  onDelete={handleDelete}\r\n  onStatusChange={handleStatusChange}\r\n  onView={handleView}\r\n  isEditable={true}\r\n  showActions={true}\r\n/>;\r\n```\r\n\r\n### CreateTaskModal\r\n\r\nModal for creating new tasks.\r\n\r\n```tsx\r\nimport { CreateTaskModal } from '@taskboard/core';\r\n\r\n<CreateTaskModal\r\n  isOpen={isModalOpen}\r\n  onClose={() => setIsModalOpen(false)}\r\n  onCreate={handleCreateTask}\r\n  project=\"exe\"\r\n  teamMembers={teamMembers}\r\n  loading={isCreating}\r\n/>;\r\n```\r\n\r\n### SprintCalculator\r\n\r\nSprint planning and capacity calculation widget.\r\n\r\n```tsx\r\nimport { SprintCalculator } from '@taskboard/core';\r\n\r\n<SprintCalculator\r\n  tasks={tasks}\r\n  teamSize={4}\r\n  workingHoursPerWeek={40}\r\n  sprintDurationWeeks={2}\r\n  onSprintUpdate={handleSprintUpdate}\r\n/>;\r\n```\r\n\r\n## Hooks\r\n\r\n### useTasks\r\n\r\nFetch tasks with filtering and sorting.\r\n\r\n```tsx\r\nimport { useTasks } from '@taskboard/core';\r\n\r\nconst {\r\n  data: tasks,\r\n  isLoading,\r\n  error,\r\n} = useTasks({\r\n  project: 'exe',\r\n  status: 'in_progress',\r\n  owner: 'john',\r\n});\r\n```\r\n\r\n### useCreateTask\r\n\r\nCreate new tasks with optimistic updates.\r\n\r\n```tsx\r\nimport { useCreateTask } from '@taskboard/core';\r\n\r\nconst createTask = useCreateTask();\r\n\r\nconst handleCreate = () => {\r\n  createTask.mutate({\r\n    title: 'New Task',\r\n    description: 'Task description',\r\n    owner: 'john',\r\n    department: 'tech',\r\n    priority_level: 'p2',\r\n    hours_needed: 8,\r\n    project: 'exe',\r\n  });\r\n};\r\n```\r\n\r\n### useUpdateTask\r\n\r\nUpdate existing tasks with optimistic updates.\r\n\r\n```tsx\r\nimport { useUpdateTask } from '@taskboard/core';\r\n\r\nconst updateTask = useUpdateTask();\r\n\r\nconst handleUpdate = (taskId: string) => {\r\n  updateTask.mutate({\r\n    id: taskId,\r\n    data: {\r\n      status: 'completed',\r\n      estimated_completion: 100,\r\n    },\r\n  });\r\n};\r\n```\r\n\r\n### useMoveTask\r\n\r\nHandle drag-and-drop task movement.\r\n\r\n```tsx\r\nimport { useMoveTask } from '@taskboard/core';\r\n\r\nconst moveTask = useMoveTask();\r\n\r\nconst handleMove = (\r\n  taskId: string,\r\n  newPriority: PriorityLevel,\r\n  newOrder: number\r\n) => {\r\n  moveTask.mutate({\r\n    taskId,\r\n    newPriority,\r\n    newOrder,\r\n    newStatus: 'in_progress',\r\n  });\r\n};\r\n```\r\n\r\n## Configuration\r\n\r\n### TaskBoardConfig\r\n\r\n```tsx\r\ninterface TaskBoardConfig {\r\n  storyPoints: number[]; // [1, 2, 3, 5, 8, 10, 15, 20, 25, 30, 40]\r\n  priorities: PriorityLevel[]; // ['p0', 'p1', 'p2', 'p3', 'p4', 'p5']\r\n  statuses: TaskStatus[]; // ['backlog', 'in_progress', 'completed', 'cancelled']\r\n  teamMembers: TeamMember[]; // Team member definitions\r\n  projects: ProjectInfo[]; // Project definitions\r\n  workingHoursPerWeek?: number; // Default: 40\r\n  sprintDurationWeeks?: number; // Default: 2\r\n}\r\n```\r\n\r\n### Custom Configuration\r\n\r\n```tsx\r\nconst customConfig = {\r\n  storyPoints: [1, 2, 5, 8, 13, 21], // Fibonacci sequence\r\n  priorities: ['urgent', 'high', 'medium', 'low'],\r\n  teamMembers: [\r\n    { id: 'dev1', name: 'Developer 1', capacity_hours_per_week: 40 },\r\n    { id: 'dev2', name: 'Developer 2', capacity_hours_per_week: 35 },\r\n  ],\r\n  projects: [\r\n    { id: 'frontend', name: 'Frontend Development' },\r\n    { id: 'backend', name: 'Backend Development' },\r\n  ],\r\n  workingHoursPerWeek: 40,\r\n  sprintDurationWeeks: 2,\r\n};\r\n\r\n<TaskProvider config={customConfig}>{/* Your components */}</TaskProvider>;\r\n```\r\n\r\n## Story Points System\r\n\r\nThe package includes a comprehensive story points system:\r\n\r\n- **0.25 Points** = 1 hour (micro task)\r\n- **0.5 Points** = 2 hours (tiny task)\r\n- **1 Point** = 4 hours (half day)\r\n- **2 Points** = 8 hours (1 day)\r\n- **3 Points** = 12 hours (1.5 days)\r\n- **5 Points** = 20 hours (2.5 days)\r\n- **8 Points** = 32 hours (4 days)\r\n- **10 Points** = 40 hours (1 week)\r\n- **15 Points** = 60 hours (1.5 weeks)\r\n- **20 Points** = 80 hours (2 weeks)\r\n\r\n### Story Points Utilities\r\n\r\n```tsx\r\nimport {\r\n  storyPointsToHours,\r\n  hoursToStoryPoints,\r\n  getStoryPointsDescription,\r\n  getStoryPointsColor,\r\n} from '@archeon.ai/taskboard-core';\r\n\r\nconst hours = storyPointsToHours(5); // 20\r\nconst points = hoursToStoryPoints(16); // 4\r\nconst description = getStoryPointsDescription(8); // \"Tarea grande, casi 1 semana (32h)\"\r\nconst color = getStoryPointsColor(10); // \"#f97316\"\r\n```\r\n\r\n## Priority System\r\n\r\nSix priority levels with color coding:\r\n\r\n- **P0** (Critical) - Red (#ef4444)\r\n- **P1** (High) - Orange (#f97316)\r\n- **P2** (Medium-High) - Yellow (#eab308)\r\n- **P3** (Medium) - Green (#22c55e)\r\n- **P4** (Low) - Blue (#3b82f6)\r\n- **P5** (Backlog) - Gray (#6b7280)\r\n\r\n## Database Schema\r\n\r\nThe package includes a complete PostgreSQL schema with:\r\n\r\n- Tasks table with all necessary fields\r\n- Proper indexes for performance\r\n- Row Level Security (RLS) policies\r\n- Audit trail with task history\r\n- Soft delete support\r\n- Automatic timestamp management\r\n\r\nSee `database/schema.sql` for the complete schema.\r\n\r\n## API Integration\r\n\r\n### Supabase Integration\r\n\r\n```tsx\r\nimport { SupabaseAdapter } from '@taskboard/core';\r\n\r\nconst adapter = new SupabaseAdapter({\r\n  url: 'https://your-project.supabase.co',\r\n  anonKey: 'your-anon-key',\r\n});\r\n\r\n// Use with TaskProvider\r\n<TaskProvider config={{ adapter }}>{/* Your components */}</TaskProvider>;\r\n```\r\n\r\n### Custom API Integration\r\n\r\n```tsx\r\nimport { TaskService } from '@taskboard/core';\r\n\r\nconst taskService = new TaskService({\r\n  baseUrl: 'https://your-api.com',\r\n  apiKey: 'your-api-key',\r\n});\r\n\r\n// Use with hooks\r\nconst { data: tasks } = useTasks();\r\n```\r\n\r\n## Styling\r\n\r\nThe package uses Tailwind CSS with custom component classes. Import the styles:\r\n\r\n```tsx\r\nimport '@taskboard/core/dist/styles.css';\r\n```\r\n\r\n### Custom Styling\r\n\r\nYou can customize the appearance by overriding CSS variables or using Tailwind's configuration:\r\n\r\n```css\r\n/* Override priority colors */\r\n.priority-p0 {\r\n  @apply bg-red-600;\r\n}\r\n.priority-p1 {\r\n  @apply bg-orange-600;\r\n}\r\n```\r\n\r\n## TypeScript Support\r\n\r\nFull TypeScript support with comprehensive type definitions:\r\n\r\n```tsx\r\nimport {\r\n  Task,\r\n  CreateTaskData,\r\n  UpdateTaskData,\r\n  TaskMoveData,\r\n} from '@taskboard/core';\r\n\r\nconst task: Task = {\r\n  id: 'uuid',\r\n  int: 1,\r\n  title: 'Task Title',\r\n  // ... other properties\r\n};\r\n```\r\n\r\n## Examples\r\n\r\nCheck the `examples/` directory for complete implementation examples:\r\n\r\n- Basic Next.js setup\r\n- Supabase integration\r\n- Custom configuration\r\n- Multi-project setup\r\n\r\n## Contributing\r\n\r\nWe welcome contributions! Please see [CONTRIBUTING.md](./CONTRIBUTING.md) for details.\r\n\r\n## License\r\n\r\nMIT License - see [LICENSE](./LICENSE) for details.\r\n\r\n## Support\r\n\r\n- 📖 [Documentation](./docs/)\r\n- 🐛 [Issues](https://github.com/taskboard/core/issues)\r\n- 💬 [Discussions](https://github.com/taskboard/core/discussions)\r\n- 📧 [Email](mailto:support@taskboard.dev)\r\n","readmeFilename":"README.md"}