kanbase 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1178 -0
- package/assets/kanbase.png +0 -0
- package/dist/assets/kanbase.png +0 -0
- package/dist/index.d.ts +347 -0
- package/dist/kanbase.es.js +1041 -0
- package/dist/kanbase.es.js.map +1 -0
- package/dist/kanbase.umd.js +2 -0
- package/dist/kanbase.umd.js.map +1 -0
- package/package.json +112 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kanbase.umd.js","sources":["../src/lib/utils/utils.js","../src/lib/store/use-kanban-store.js","../src/lib/hooks/use-kanban.js","../src/lib/hooks/use-kanban-dnd.js","../src/lib/utils/filter-evaluator.js","../src/lib/utils/cn.js","../src/lib/components/default/default-card.js","../src/lib/components/default/default-column-empty.js","../src/lib/components/default/default-column-header.js","../src/components/ui/dialog.js","../src/components/ui/button.js","../src/lib/components/default/default-edit-form.js","../src/lib/components/default/default-card-view.js","../src/lib/components/filter-chips.js","../src/lib/hooks/use-kanban-column.js","../src/lib/components/add-card-button.js","../src/lib/components/kanban-card.js","../src/lib/components/kanban-column.js","../src/components/ui/sheet.js","../src/lib/components/filter-group.js","../src/lib/utils/data-discovery.js","../src/lib/components/kanban-filter-drawer.js","../src/lib/components/default/default-add-card-form.js","../src/lib/components/default/default-edit-column-form.js","../src/lib/components/kanboom-board.js","../src/lib/store/selectors.js","../src/lib/benchmark/fps-monitor.js"],"sourcesContent":["import { clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\nexport function cn(...inputs) {\n return twMerge(clsx(inputs));\n}\n","import { create } from 'zustand';\nimport { devtools } from 'zustand/middleware';\nconst generateId = () => `${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\nexport const useKanbanStore = create()(devtools((set) => ({\n cards: {},\n columns: {},\n columnOrder: [],\n config: {},\n activeId: null,\n viewingCardId: null,\n editingCardId: null,\n addingCardInColumnId: null,\n editingColumnId: null,\n // Initial Filter State\n filters: {\n searchQuery: '',\n groups: [],\n quickFilters: []\n },\n // === CARDS ===\n addCard: (columnId, cardData) => {\n const cardId = generateId();\n const newCard = {\n id: cardId,\n ...cardData,\n };\n set((state) => {\n const column = state.columns[columnId];\n if (!column)\n return state;\n return {\n cards: { ...state.cards, [cardId]: newCard },\n columns: {\n ...state.columns,\n [columnId]: {\n ...column,\n cardIds: [...column.cardIds, cardId],\n },\n },\n };\n });\n return cardId;\n },\n updateCard: (cardId, updates) => set((state) => {\n const card = state.cards[cardId];\n if (!card)\n return state;\n return {\n cards: {\n ...state.cards,\n [cardId]: { ...card, ...updates },\n },\n };\n }),\n deleteCard: (cardId) => set((state) => {\n const { [cardId]: deletedCard, ...remainingCards } = state.cards;\n const updatedColumns = { ...state.columns };\n Object.keys(updatedColumns).forEach((colId) => {\n updatedColumns[colId] = {\n ...updatedColumns[colId],\n cardIds: updatedColumns[colId].cardIds.filter((id) => id !== cardId),\n };\n });\n return {\n cards: remainingCards,\n columns: updatedColumns,\n };\n }),\n duplicateCard: (cardId) => {\n let newCardId = '';\n set((state) => {\n const card = state.cards[cardId];\n if (!card)\n return state;\n const columnId = Object.keys(state.columns).find((colId) => state.columns[colId].cardIds.includes(cardId));\n if (!columnId)\n return state;\n newCardId = generateId();\n const duplicatedCard = {\n ...card,\n id: newCardId,\n title: `${card.title} (copy)`,\n };\n const column = state.columns[columnId];\n const cardIndex = column.cardIds.indexOf(cardId);\n const newCardIds = [...column.cardIds];\n newCardIds.splice(cardIndex + 1, 0, newCardId);\n return {\n cards: { ...state.cards, [newCardId]: duplicatedCard },\n columns: {\n ...state.columns,\n [columnId]: {\n ...column,\n cardIds: newCardIds,\n },\n },\n };\n });\n return newCardId;\n },\n // === COLUMNS ===\n addColumn: (columnData, position) => {\n const columnId = generateId();\n const newColumn = {\n id: columnId,\n ...columnData,\n cardIds: [],\n };\n set((state) => {\n const newColumnOrder = [...state.columnOrder];\n const insertPosition = position ?? newColumnOrder.length;\n newColumnOrder.splice(insertPosition, 0, columnId);\n return {\n columns: { ...state.columns, [columnId]: newColumn },\n columnOrder: newColumnOrder,\n };\n });\n return columnId;\n },\n updateColumn: (columnId, updates) => set((state) => {\n const column = state.columns[columnId];\n if (!column)\n return state;\n return {\n columns: {\n ...state.columns,\n [columnId]: { ...column, ...updates },\n },\n };\n }),\n deleteColumn: (columnId, moveCardsTo) => set((state) => {\n const column = state.columns[columnId];\n if (!column)\n return state;\n const { [columnId]: deletedColumn, ...remainingColumns } = state.columns;\n const newColumnOrder = state.columnOrder.filter((id) => id !== columnId);\n let updatedCards = { ...state.cards };\n let updatedColumns = { ...remainingColumns };\n if (moveCardsTo && updatedColumns[moveCardsTo]) {\n // Explicit move requested\n const targetCol = updatedColumns[moveCardsTo];\n updatedColumns[moveCardsTo] = {\n ...targetCol,\n cardIds: [...targetCol.cardIds, ...column.cardIds],\n };\n // Update local card previousColumnId just in case\n column.cardIds.forEach(cardId => {\n if (updatedCards[cardId]) {\n updatedCards[cardId] = { ...updatedCards[cardId], previousColumnId: columnId };\n }\n });\n }\n else {\n // SAFE DELETE: Return cards to previous column or first available\n const firstColumnId = newColumnOrder.length > 0 ? newColumnOrder[0] : null;\n column.cardIds.forEach((cardId) => {\n const card = updatedCards[cardId];\n if (!card)\n return;\n const targetColId = (card.previousColumnId && updatedColumns[card.previousColumnId])\n ? card.previousColumnId\n : firstColumnId;\n if (targetColId && updatedColumns[targetColId]) {\n const targetCol = updatedColumns[targetColId];\n updatedColumns[targetColId] = {\n ...targetCol,\n cardIds: [...targetCol.cardIds, cardId]\n };\n // Keep the existing provenance? Or update?\n // Attempts to point to the deleted column are useless since it's gone.\n // Better to leave it pointing to the *original* source if possible, \n // or just don't update it, effectively behaving like it was always in the target.\n updatedCards[cardId] = { ...card };\n }\n else {\n // No place to go, sadly delete (or safeguard in 'Unsorted' if requested, but logic implies delete if no cols)\n delete updatedCards[cardId];\n }\n });\n }\n return {\n cards: updatedCards,\n columns: updatedColumns,\n columnOrder: newColumnOrder,\n };\n }),\n // === MOVEMENT ===\n moveCard: (cardId, sourceColId, targetColId, newIndex) => set((state) => {\n const sourceCol = state.columns[sourceColId];\n const targetCol = state.columns[targetColId];\n if (!sourceCol || !targetCol)\n return state;\n const newSourceCardIds = sourceCol.cardIds.filter(id => id !== cardId);\n if (sourceColId === targetColId) {\n newSourceCardIds.splice(newIndex, 0, cardId);\n return {\n ...state,\n columns: {\n ...state.columns,\n [sourceColId]: { ...sourceCol, cardIds: newSourceCardIds }\n }\n };\n }\n const newTargetCardIds = [...targetCol.cardIds];\n newTargetCardIds.splice(newIndex, 0, cardId);\n // Track previous column for recovery\n const updatedCard = { ...state.cards[cardId], previousColumnId: sourceColId };\n return {\n ...state,\n cards: { ...state.cards, [cardId]: updatedCard },\n columns: {\n ...state.columns,\n [sourceColId]: { ...sourceCol, cardIds: newSourceCardIds },\n [targetColId]: { ...targetCol, cardIds: newTargetCardIds }\n }\n };\n }),\n moveColumn: (columnId, newIndex) => set((state) => {\n const newOrder = state.columnOrder.filter(id => id !== columnId);\n newOrder.splice(newIndex, 0, columnId);\n return { ...state, columnOrder: newOrder };\n }),\n addColumnWithCard: (cardId, sourceColId, columnData) => set((state) => {\n const sourceCol = state.columns[sourceColId];\n const card = state.cards[cardId];\n if (!sourceCol || !card)\n return state;\n const columnId = generateId();\n const newColumn = {\n id: columnId,\n ...columnData,\n cardIds: [cardId],\n };\n const newSourceCardIds = sourceCol.cardIds.filter(id => id !== cardId);\n // Strict append to ensuring it goes to the end\n const newColumnOrder = Array.from(state.columnOrder);\n newColumnOrder.push(columnId);\n const updatedCard = { ...card, previousColumnId: sourceColId };\n return {\n ...state,\n cards: { ...state.cards, [cardId]: updatedCard },\n columns: {\n ...state.columns,\n [sourceColId]: { ...sourceCol, cardIds: newSourceCardIds },\n [columnId]: newColumn\n },\n columnOrder: newColumnOrder\n };\n }),\n // === FILTERS ===\n setSearchQuery: (query) => set((state) => ({\n filters: { ...state.filters, searchQuery: query }\n })),\n addFilterGroup: (group) => set((state) => ({\n filters: { ...state.filters, groups: [...state.filters.groups, group] }\n })),\n updateFilterGroup: (groupId, updates) => set((state) => ({\n filters: {\n ...state.filters,\n groups: state.filters.groups.map(g => g.id === groupId ? { ...g, ...updates } : g)\n }\n })),\n removeFilterGroup: (groupId) => set((state) => ({\n filters: { ...state.filters, groups: state.filters.groups.filter(g => g.id !== groupId) }\n })),\n removeFilterRule: (groupId, ruleId) => set((state) => ({\n filters: {\n ...state.filters,\n groups: state.filters.groups.map(g => {\n if (g.id !== groupId)\n return g;\n return {\n ...g,\n rules: g.rules.filter(r => !('id' in r) || r.id !== ruleId)\n };\n })\n }\n })),\n setFilters: (filters) => set({ filters }),\n clearFilters: () => set((state) => ({\n filters: { ...state.filters, groups: [], searchQuery: '' }\n })),\n // === UTILITY ===\n setBoardData: (data) => set({ ...data }),\n setConfig: (config) => set((state) => ({ config: { ...state.config, ...config } })),\n setActiveId: (activeId) => set({ activeId }),\n setViewingCardId: (viewingCardId) => set({ viewingCardId }),\n clearViewingCardId: () => set({ viewingCardId: null }),\n setEditingCardId: (editingCardId) => set({ editingCardId }),\n clearEditingCardId: () => set({ editingCardId: null }),\n setAddingCardInColumnId: (addingCardInColumnId) => set({ addingCardInColumnId }),\n clearAddingCardInColumnId: () => set({ addingCardInColumnId: null }),\n setEditingColumnId: (editingColumnId) => set({ editingColumnId }),\n clearEditingColumnId: () => set({ editingColumnId: null }),\n clearBoard: () => set({\n cards: {},\n columns: {},\n columnOrder: [],\n filters: { searchQuery: '', groups: [], quickFilters: [] }\n }),\n})));\n","import { useState, useCallback } from 'react';\nimport { useKanbanStore } from '../store/use-kanban-store';\nexport function useKanban(config) {\n const store = useKanbanStore();\n const [activeId, setActiveId] = useState(null);\n const [overId, setOverId] = useState(null);\n const [overSide, setOverSide] = useState(null);\n const handleDragStart = useCallback((cardId) => {\n setActiveId(cardId);\n }, []);\n const handleDragOver = useCallback((id, side) => {\n setOverId(id);\n setOverSide(side ?? null);\n }, []);\n const handleDragEnd = useCallback(() => {\n setActiveId(null);\n setOverId(null);\n setOverSide(null);\n }, []);\n const moveCard = useCallback((cardId, sourceColumnId, targetColumnId, index) => {\n store.moveCard(cardId, sourceColumnId, targetColumnId, index);\n config?.onCardMove?.(cardId, sourceColumnId, targetColumnId, index);\n }, [store, config]);\n return {\n // Estado\n ...store,\n activeId,\n overId,\n overSide,\n viewingCardId: store.viewingCardId,\n editingCardId: store.editingCardId,\n addingCardInColumnId: store.addingCardInColumnId,\n editingColumnId: store.editingColumnId, // Use store version\n setViewingCardId: store.setViewingCardId,\n clearViewingCardId: store.clearViewingCardId,\n // Ações de Cards\n handleDragStart,\n handleDragOver,\n handleDragEnd,\n moveCard,\n addCard: store.addCard,\n updateCard: store.updateCard,\n deleteCard: store.deleteCard,\n duplicateCard: store.duplicateCard,\n setEditingCardId: store.setEditingCardId,\n clearEditingCardId: store.clearEditingCardId,\n setAddingCardInColumnId: store.setAddingCardInColumnId,\n clearAddingCardInColumnId: store.clearAddingCardInColumnId,\n // Ações de Colunas\n addColumn: store.addColumn,\n addColumnWithCard: store.addColumnWithCard,\n updateColumn: store.updateColumn,\n deleteColumn: store.deleteColumn,\n moveColumn: store.moveColumn,\n setEditingColumnId: store.setEditingColumnId,\n clearEditingColumnId: store.clearEditingColumnId,\n // Utilitários\n clearBoard: store.clearBoard,\n // Configurações\n config: {\n dragActivationDistance: config?.dragActivationDistance ?? 10,\n touchActivationDelay: config?.touchActivationDelay ?? 250,\n virtualOverscan: config?.virtualOverscan ?? 5,\n estimatedCardHeight: config?.estimatedCardHeight ?? 90,\n columnWidth: config?.columnWidth ?? 320,\n columnMinHeight: config?.columnMinHeight ?? 500,\n gap: config?.gap ?? 16,\n allowAdd: config?.allowAdd ?? false,\n allowEdit: config?.allowEdit ?? false,\n allowColumnAdd: config?.allowColumnAdd ?? false,\n allowColumnEdit: config?.allowColumnEdit ?? false,\n allowColumnDelete: config?.allowColumnDelete ?? false,\n allowColumnReorder: config?.allowColumnReorder ?? false,\n allowFilters: config?.allowFilters ?? true,\n showURLSync: config?.showURLSync ?? false,\n }\n };\n}\n","import { KeyboardSensor, MouseSensor, TouchSensor, useSensor, useSensors } from '@dnd-kit/core';\nimport { useEffect, useRef } from 'react';\nexport function useKanbanDnd({ dragActivationDistance, touchActivationDelay, onDragStart, onDragOver, onDragEnd, onCardMove, onColumnMove, onCreateColumnWithCard, columns, columnOrder, recentlyMovedToNewContainer }) {\n // Use refs to avoid stale closures in dnd-kit handlers\n const columnsRef = useRef(columns);\n const columnOrderRef = useRef(columnOrder);\n useEffect(() => {\n columnsRef.current = columns;\n columnOrderRef.current = columnOrder;\n }, [columns, columnOrder]);\n const dragPositionRef = useRef(null);\n const sensors = useSensors(useSensor(MouseSensor, {\n activationConstraint: { distance: dragActivationDistance },\n }), useSensor(TouchSensor, {\n activationConstraint: { delay: touchActivationDelay, tolerance: 5 },\n }), useSensor(KeyboardSensor));\n const handleDragStart = (event) => {\n const data = event.active.data.current;\n const type = data?.type || 'Card';\n dragPositionRef.current = null;\n onDragStart(event.active.id, type);\n };\n const handleDragOver = (event) => {\n const { active, over } = event;\n const activeData = active.data.current;\n const type = activeData?.type || 'Card';\n const currentColumns = columnsRef.current;\n const currentOrder = columnOrderRef.current;\n if (!over) {\n onDragOver(null);\n dragPositionRef.current = null;\n return;\n }\n const activeId = active.id;\n const overId = over.id;\n // Detecção de lado (Top/Bottom ou Left/Right)\n const overRect = over.rect;\n // Obter coordenadas do mouse/toque dinâmicamente do dnd-kit se possível,\n // mas o simpler é usar o active rect vs over rect.\n const activeRect = active.rect.current.translated;\n let side = null;\n if (activeRect && overRect) {\n if (type === 'Column') {\n const overCenterX = overRect.left + overRect.width / 2;\n side = activeRect.left + activeRect.width / 2 < overCenterX ? 'left' : 'right';\n }\n else {\n const overCenterY = overRect.top + overRect.height / 2;\n side = activeRect.top + activeRect.height / 2 < overCenterY ? 'top' : 'bottom';\n }\n }\n onDragOver(overId, side);\n // --- COLUMN REORDERING ---\n if (type === 'Column') {\n let targetColumnId = overId;\n if (!currentColumns[overId]) {\n const overCol = Object.values(currentColumns).find(col => col.cardIds.includes(overId));\n if (overCol) {\n targetColumnId = overCol.id;\n }\n }\n const overIndex = currentOrder.indexOf(targetColumnId);\n const currentIndex = currentOrder.indexOf(activeId);\n if (overIndex !== -1 && currentIndex !== -1 && currentIndex !== overIndex) {\n // Live reorder: simple index swap is more stable for horizontal sorting\n onColumnMove(activeId, overIndex);\n if (dragPositionRef.current) {\n dragPositionRef.current.targetIndex = overIndex;\n }\n }\n return;\n }\n // --- CARD MOVEMENT ---\n // Check if dropping on the \"New Column\" target\n if (overId === 'new-column-drop-target') {\n const activeColumn = Object.values(currentColumns).find(col => col.cardIds.includes(activeId));\n if (activeColumn) {\n dragPositionRef.current = {\n type: 'NewColumn',\n activeId,\n sourceColumnId: activeColumn.id,\n targetIndex: 0\n };\n }\n return;\n }\n const activeColumn = Object.values(currentColumns).find(col => col.cardIds.includes(activeId));\n if (!activeColumn)\n return;\n if (currentColumns[overId]) {\n if (activeColumn.id !== overId) {\n // Signal that we're moving to a new container\n if (recentlyMovedToNewContainer) {\n recentlyMovedToNewContainer.current = true;\n }\n dragPositionRef.current = {\n type: 'Card',\n activeId,\n sourceColumnId: activeColumn.id,\n targetColumnId: overId,\n targetIndex: currentColumns[overId].cardIds.length,\n side: 'bottom' // Default para coluna vazia/header\n };\n }\n else {\n dragPositionRef.current = null;\n }\n return;\n }\n const overColumn = Object.values(currentColumns).find(col => col.cardIds.includes(overId));\n if (!overColumn)\n return;\n const overIndex = overColumn.cardIds.indexOf(overId);\n // Cálculo do index final baseado no lado\n const finalIndex = side === 'bottom' ? overIndex + 1 : overIndex;\n if (activeColumn.id !== overColumn.id) {\n // Signal that we're moving to a new container\n if (recentlyMovedToNewContainer) {\n recentlyMovedToNewContainer.current = true;\n }\n dragPositionRef.current = {\n type: 'Card',\n activeId,\n sourceColumnId: activeColumn.id,\n targetColumnId: overColumn.id,\n targetIndex: finalIndex,\n side: side\n };\n }\n else {\n const oldIndex = activeColumn.cardIds.indexOf(activeId);\n // Na mesma coluna, dnd-kit lida bem com sorting, mas para nossa store:\n if (oldIndex !== overIndex) {\n dragPositionRef.current = {\n type: 'Card',\n activeId,\n sourceColumnId: activeColumn.id,\n targetColumnId: activeColumn.id,\n targetIndex: overIndex, // Para mesma coluna, dnd-kit prefere swap direto ou splice\n side: side\n };\n }\n }\n };\n const handleDragEnd = () => {\n if (dragPositionRef.current) {\n const pos = dragPositionRef.current;\n if (pos.type === 'NewColumn' && pos.sourceColumnId && onCreateColumnWithCard) {\n onCreateColumnWithCard(pos.activeId, pos.sourceColumnId);\n }\n else if (pos.type === 'Card' && pos.sourceColumnId && pos.targetColumnId) {\n onCardMove(pos.activeId, pos.sourceColumnId, pos.targetColumnId, pos.targetIndex);\n }\n else if (pos.type === 'Column') {\n onColumnMove(pos.activeId, pos.targetIndex);\n }\n }\n dragPositionRef.current = null;\n onDragEnd();\n };\n return {\n sensors,\n handleDragStart,\n handleDragOver,\n handleDragEnd\n };\n}\n","export function evaluateFilter(card, filters) {\n // 1. Global Search\n if (filters.searchQuery) {\n const query = filters.searchQuery.toLowerCase();\n const titleMatch = card.title?.toLowerCase().includes(query);\n const descMatch = card.description?.toLowerCase().includes(query);\n // Also search in metadata values\n const metadataMatch = card.metadata && Object.values(card.metadata).some(val => String(val).toLowerCase().includes(query));\n if (!titleMatch && !descMatch && !metadataMatch)\n return false;\n }\n // 2. Advanced Filters (Groups)\n if (filters.groups.length === 0)\n return true;\n // Each group is combined with AND (top level)\n return filters.groups.every(group => {\n if (!group.enabled)\n return true;\n return evaluateGroup(card, group);\n });\n}\nfunction evaluateGroup(card, group) {\n const { conjunction, rules } = group;\n if (rules.length === 0)\n return true;\n if (conjunction === 'and') {\n return rules.every(rule => {\n if ('conjunction' in rule)\n return evaluateGroup(card, rule);\n return evaluateRule(card, rule);\n });\n }\n else {\n return rules.some(rule => {\n if ('conjunction' in rule)\n return evaluateGroup(card, rule);\n return evaluateRule(card, rule);\n });\n }\n}\nfunction evaluateRule(card, rule) {\n if (!rule.field || !rule.enabled)\n return true;\n const value = getNestedValue(card, rule.field);\n const target = rule.value;\n switch (rule.operator) {\n case 'eq': return value === target;\n case 'neq': return value !== target;\n case 'contains':\n return String(value || '').toLowerCase().includes(String(target || '').toLowerCase());\n case 'notContains':\n return !String(value || '').toLowerCase().includes(String(target || '').toLowerCase());\n case 'gt': return Number(value) > Number(target);\n case 'gte': return Number(value) >= Number(target);\n case 'lt': return Number(value) < Number(target);\n case 'lte': return Number(value) <= Number(target);\n case 'isEmpty': return !value || (Array.isArray(value) && value.length === 0);\n case 'isNotEmpty': return !!value && (!Array.isArray(value) || value.length > 0);\n default: return true;\n }\n}\nfunction getNestedValue(obj, path) {\n return path.split('.').reduce((acc, part) => acc && acc[part], obj);\n}\n","import { clsx } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\nexport function cn(...inputs) {\n return twMerge(clsx(inputs));\n}\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { cn } from '@/lib/utils/cn';\nimport { memo } from 'react';\nimport { MoreHorizontal, Paperclip, MessageSquare, Calendar } from 'lucide-react';\nexport const DefaultCard = memo(({ card, isDragging }) => {\n const { tags, members, commentsCount, attachmentsCount, dueDate, priority } = card.metadata || {};\n // Priority Color Map\n const priorityColors = {\n high: 'bg-red-500',\n medium: 'bg-amber-500',\n low: 'bg-emerald-500',\n };\n return (_jsxs(\"div\", { className: cn(\"group relative bg-card-bg rounded-card border border-card-border p-3\", \"shadow-card transition-all duration-200 cursor-pointer select-none\", \"hover:shadow-card-hover hover:-translate-y-0.5 hover:border-slate-300\", isDragging && \"opacity-50 grayscale-[0.5] scale-[1.02] shadow-xl border-blue-400 ring-1 ring-blue-400 rotate-2 z-50\", \n // Priority Indicator on Left\n priority && \"pl-4\"), children: [priority && (_jsx(\"div\", { className: cn(\"absolute left-0 top-3 bottom-3 w-1 rounded-r-full\", priorityColors[priority] || \"bg-slate-300\") })), _jsxs(\"div\", { className: \"flex flex-col gap-2.5\", children: [tags && tags.length > 0 && (_jsx(\"div\", { className: \"flex flex-wrap gap-1 mb-0.5\", children: tags.map((tag, i) => (_jsx(\"span\", { className: cn(\"px-2 py-0.5 rounded-full text-[10px] font-semibold tracking-tight\", tag.color || \"bg-slate-100 text-slate-600\"), children: tag.name }, i))) })), _jsxs(\"div\", { className: \"flex items-start justify-between gap-2\", children: [_jsx(\"h4\", { className: \"text-sm font-semibold text-slate-800 leading-snug group-hover:text-slate-900 transition-colors\", children: card.title }), _jsx(\"button\", { className: \"opacity-0 group-hover:opacity-100 transition-opacity p-1 hover:bg-slate-100 rounded text-slate-400 hover:text-slate-600 -mr-1 -mt-1\", children: _jsx(MoreHorizontal, { size: 14 }) })] }), card.description && (_jsx(\"p\", { className: \"text-xs text-slate-500 line-clamp-2 leading-relaxed font-medium\", children: card.description })), (members || commentsCount || attachmentsCount || dueDate) && (_jsxs(\"div\", { className: \"flex items-center justify-between mt-1 pt-2.5 border-t border-slate-100/80\", children: [_jsx(\"div\", { className: \"flex items-center\", children: members && members.length > 0 ? (_jsxs(\"div\", { className: \"flex -space-x-2 overflow-hidden py-0.5 pl-0.5\", children: [members.map((m, i) => (_jsx(\"div\", { className: \"h-6 w-6 rounded-full border-2 border-white bg-slate-200 flex items-center justify-center text-[9px] font-bold text-slate-600 ring-1 ring-slate-100\", title: m.name, children: m.avatar ? _jsx(\"img\", { src: m.avatar, alt: m.name, className: \"w-full h-full rounded-full object-cover\" }) : m.initials }, i))), members.length > 3 && (_jsxs(\"div\", { className: \"h-6 w-6 rounded-full border-2 border-white bg-slate-50 flex items-center justify-center text-[9px] font-bold text-slate-400\", children: [\"+\", members.length - 3] }))] })) : _jsx(\"div\", {}) }), _jsxs(\"div\", { className: \"flex items-center gap-3 text-slate-400\", children: [dueDate && (_jsxs(\"div\", { className: cn(\"flex items-center gap-1 text-[10px] font-medium\", new Date(dueDate) < new Date() ? \"text-red-500\" : \"text-slate-400\"), children: [_jsx(Calendar, { size: 12 }), _jsx(\"span\", { children: new Date(dueDate).toLocaleDateString(undefined, { month: 'short', day: 'numeric' }) })] })), commentsCount > 0 && (_jsxs(\"div\", { className: \"flex items-center gap-1 text-[10px] font-medium hover:text-slate-600 transition-colors\", children: [_jsx(MessageSquare, { size: 12 }), _jsx(\"span\", { children: commentsCount })] })), attachmentsCount > 0 && (_jsxs(\"div\", { className: \"flex items-center gap-1 text-[10px] font-medium hover:text-slate-600 transition-colors\", children: [_jsx(Paperclip, { size: 12 }), _jsx(\"span\", { children: attachmentsCount })] }))] })] }))] })] }));\n}, (prevProps, nextProps) => {\n // Deep comparison for metadata is risky but we'll check key props\n return (prevProps.card.id === nextProps.card.id &&\n prevProps.card.title === nextProps.card.title &&\n prevProps.card.description === nextProps.card.description &&\n prevProps.isDragging === nextProps.isDragging &&\n JSON.stringify(prevProps.card.metadata) === JSON.stringify(nextProps.card.metadata));\n});\nDefaultCard.displayName = 'DefaultCard';\n","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { memo } from 'react';\nexport const DefaultColumnEmpty = memo(() => {\n return (_jsx(\"div\", { className: \"flex items-center justify-center h-32 text-slate-400 text-sm\", children: \"Arraste cards aqui\" }));\n});\nDefaultColumnEmpty.displayName = 'DefaultColumnEmpty';\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { cn } from '@/lib/utils/cn';\nimport { GripVertical, MoreHorizontal, Plus } from 'lucide-react';\nimport { memo } from 'react';\nexport const DefaultColumnHeader = memo(({ column, cardCount, isOver, dragHandleProps, onAddCard, onEditColumn }) => {\n return (_jsxs(\"div\", { className: cn(\"px-3 py-3 flex items-center justify-between transition-colors mb-2 rounded-t-xl select-none group/header\", isOver ? \"bg-blue-50/80\" : \"bg-transparent\"), children: [_jsxs(\"div\", { className: \"flex items-center gap-2 min-w-0 flex-1\", children: [dragHandleProps && (_jsx(\"div\", { ...dragHandleProps.attributes, ...dragHandleProps.listeners, onClick: (e) => e.stopPropagation(), className: \"cursor-grab active:cursor-grabbing text-slate-400 hover:text-slate-600 p-0.5 rounded hover:bg-slate-200/50 transition-colors\", children: _jsx(GripVertical, { size: 14 }) })), _jsx(\"h3\", { className: \"font-semibold text-sm text-slate-700 truncate tracking-tight flex-1\", children: column.title }), _jsx(\"span\", { className: \"text-[10px] bg-slate-200/50 border border-slate-200 px-2 py-0.5 rounded-full text-slate-500 font-bold tabular-nums\", children: cardCount })] }), _jsxs(\"div\", { className: \"flex items-center gap-1 opacity-0 group-hover/header:opacity-100 transition-opacity\", children: [onAddCard && (_jsx(\"button\", { onClick: onAddCard, className: \"p-1 hover:bg-slate-200/50 rounded text-slate-400 hover:text-slate-600 transition-colors\", title: \"Adicionar Card\", children: _jsx(Plus, { size: 14 }) })), onEditColumn && (_jsx(\"button\", { onClick: onEditColumn, className: \"p-1 hover:bg-slate-200/50 rounded text-slate-400 hover:text-slate-600 transition-colors\", title: \"Editar Coluna\", children: _jsx(MoreHorizontal, { size: 14 }) }))] })] }));\n});\nDefaultColumnHeader.displayName = 'DefaultColumnHeader';\n","\"use client\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport * as React from \"react\";\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { X } from \"lucide-react\";\nimport { cn } from \"@/lib/utils/utils\";\nconst Dialog = DialogPrimitive.Root;\nconst DialogTrigger = DialogPrimitive.Trigger;\nconst DialogPortal = DialogPrimitive.Portal;\nconst DialogClose = DialogPrimitive.Close;\nconst DialogOverlay = React.forwardRef(({ className, ...props }, ref) => (_jsx(DialogPrimitive.Overlay, { ref: ref, className: cn(\"fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\", className), ...props })));\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName;\nconst DialogContent = React.forwardRef(({ className, children, ...props }, ref) => (_jsxs(DialogPortal, { children: [_jsx(DialogOverlay, {}), _jsxs(DialogPrimitive.Content, { ref: ref, className: cn(\"fixed left-1/2 top-1/2 z-50 grid w-full max-w-lg -translate-x-1/2 -translate-y-1/2 gap-4 border bg-background p-6 shadow-lg duration-200 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-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-48% data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-48% sm:rounded-lg\", className), ...props, children: [children, _jsxs(DialogPrimitive.Close, { className: \"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground\", children: [_jsx(X, { className: \"h-4 w-4\" }), _jsx(\"span\", { className: \"sr-only\", children: \"Close\" })] })] })] })));\nDialogContent.displayName = DialogPrimitive.Content.displayName;\nconst DialogHeader = ({ className, ...props }) => (_jsx(\"div\", { className: cn(\"flex flex-col space-y-1.5 text-center sm:text-left\", className), ...props }));\nDialogHeader.displayName = \"DialogHeader\";\nconst DialogFooter = ({ className, ...props }) => (_jsx(\"div\", { className: cn(\"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\", className), ...props }));\nDialogFooter.displayName = \"DialogFooter\";\nconst DialogTitle = React.forwardRef(({ className, ...props }, ref) => (_jsx(DialogPrimitive.Title, { ref: ref, className: cn(\"text-lg font-semibold leading-none tracking-tight\", className), ...props })));\nDialogTitle.displayName = DialogPrimitive.Title.displayName;\nconst DialogDescription = React.forwardRef(({ className, ...props }, ref) => (_jsx(DialogPrimitive.Description, { ref: ref, className: cn(\"text-sm text-muted-foreground\", className), ...props })));\nDialogDescription.displayName = DialogPrimitive.Description.displayName;\nexport { Dialog, DialogPortal, DialogOverlay, DialogClose, DialogTrigger, DialogContent, DialogHeader, DialogFooter, DialogTitle, DialogDescription, };\n","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva } from \"class-variance-authority\";\nimport { cn } from \"@/lib/utils/utils\";\nconst buttonVariants = cva(\"inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\", {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n destructive: \"bg-destructive text-destructive-foreground hover:bg-destructive/90\",\n outline: \"border border-input bg-background hover:bg-accent hover:text-accent-foreground\",\n secondary: \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n ghost: \"hover:bg-accent hover:text-accent-foreground\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-10 px-4 py-2\",\n sm: \"h-9 rounded-md px-3\",\n lg: \"h-11 rounded-md px-8\",\n icon: \"h-10 w-10\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n});\nconst Button = React.forwardRef(({ className, variant, size, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : \"button\";\n return (_jsx(Comp, { className: cn(buttonVariants({ variant, size, className })), ref: ref, ...props }));\n});\nButton.displayName = \"Button\";\nexport { Button, buttonVariants };\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { useState } from 'react';\nimport { Save, Trash2 } from 'lucide-react';\nimport { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from \"@/components/ui/dialog\";\nimport { Button } from \"@/components/ui/button\";\nexport function DefaultEditForm({ card, onSave, onCancel, onDelete }) {\n const [title, setTitle] = useState(card.title || '');\n const [description, setDescription] = useState(card.description || '');\n const handleSubmit = (e) => {\n e.preventDefault();\n onSave({ title, description });\n };\n return (_jsx(Dialog, { open: true, onOpenChange: (open) => !open && onCancel(), children: _jsxs(DialogContent, { className: \"sm:max-w-[425px]\", children: [_jsxs(DialogHeader, { children: [_jsx(DialogTitle, { children: \"Editar Card\" }), _jsx(DialogDescription, { children: \"Fa\\u00E7a altera\\u00E7\\u00F5es no card aqui. Clique em salvar quando terminar.\" })] }), _jsxs(\"form\", { onSubmit: handleSubmit, className: \"grid gap-4 py-4\", children: [_jsxs(\"div\", { className: \"grid gap-2\", children: [_jsx(\"label\", { htmlFor: \"title\", className: \"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\", children: \"T\\u00EDtulo\" }), _jsx(\"input\", { id: \"title\", autoFocus: true, value: title, onChange: (e) => setTitle(e.target.value), className: \"flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-sm transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50\", placeholder: \"Digite o t\\u00EDtulo...\" })] }), _jsxs(\"div\", { className: \"grid gap-2\", children: [_jsx(\"label\", { htmlFor: \"desc\", className: \"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\", children: \"Descri\\u00E7\\u00E3o\" }), _jsx(\"textarea\", { id: \"desc\", value: description, onChange: (e) => setDescription(e.target.value), rows: 4, className: \"flex min-h-[60px] w-full rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-sm placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 resize-none\", placeholder: \"Adicione uma descri\\u00E7\\u00E3o...\" })] }), _jsxs(DialogFooter, { className: \"flex items-center justify-between w-full sm:justify-between\", children: [onDelete && (_jsxs(Button, { type: \"button\", variant: \"destructive\", size: \"sm\", onClick: onDelete, className: \"gap-2\", children: [_jsx(Trash2, { size: 14 }), \"Excluir\"] })), _jsxs(\"div\", { className: \"flex gap-2\", children: [_jsx(Button, { type: \"button\", variant: \"outline\", onClick: onCancel, children: \"Cancelar\" }), _jsxs(Button, { type: \"submit\", className: \"gap-2\", children: [_jsx(Save, { size: 14 }), \"Salvar\"] })] })] })] })] }) }));\n}\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Dialog, DialogContent, DialogHeader, DialogTitle } from '@/components/ui/dialog';\nimport { Button } from '@/components/ui/button';\nimport { Calendar, User, Tag, AlignLeft, Info } from 'lucide-react';\nimport { memo } from 'react';\nimport { cn } from '@/lib/utils/cn';\nexport const DefaultCardView = memo(({ card, onClose }) => {\n const { priority, tags, members, dueDate, ...otherMetadata } = card.metadata || {};\n const priorityConfig = {\n high: { label: 'Alta', color: 'text-red-700', bg: 'bg-red-50 border-red-200' },\n medium: { label: 'Média', color: 'text-amber-700', bg: 'bg-amber-50 border-amber-200' },\n low: { label: 'Baixa', color: 'text-emerald-700', bg: 'bg-emerald-50 border-emerald-200' },\n };\n const pConfig = priority && priorityConfig[priority];\n return (_jsx(Dialog, { open: true, onOpenChange: (open) => !open && onClose(), children: _jsxs(DialogContent, { className: \"sm:max-w-2xl p-0 gap-0 overflow-hidden bg-white\", children: [pConfig && (_jsx(\"div\", { className: cn(\"h-1.5 w-full\", pConfig.bg.split(' ')[0], pConfig.bg.replace('bg-', 'bg-opacity-100')) })), _jsxs(\"div\", { className: \"flex flex-col h-full max-h-[85vh]\", children: [_jsx(DialogHeader, { className: \"p-6 pb-4\", children: _jsxs(\"div\", { className: \"flex items-start gap-4\", children: [_jsx(\"div\", { className: \"mt-1 p-2 bg-slate-100 rounded-lg text-slate-500\", children: _jsx(AlignLeft, { size: 20 }) }), _jsxs(\"div\", { className: \"space-y-1 flex-1\", children: [_jsx(DialogTitle, { className: \"text-xl font-bold text-slate-900 leading-tight\", children: card.title }), _jsx(\"p\", { className: \"text-xs text-slate-400 font-medium uppercase tracking-wider\", children: card.id })] }), pConfig && (_jsx(\"div\", { className: cn(\"px-3 py-1 rounded-full text-xs font-bold border uppercase tracking-wide\", pConfig.color, pConfig.bg), children: pConfig.label }))] }) }), _jsxs(\"div\", { className: \"flex-1 overflow-y-auto p-6 pt-0 grid md:grid-cols-[1fr,240px] gap-8\", children: [_jsxs(\"div\", { className: \"space-y-6\", children: [_jsxs(\"div\", { className: \"space-y-3\", children: [_jsx(\"h4\", { className: \"text-sm font-semibold text-slate-900 flex items-center gap-2\", children: \"Descri\\u00E7\\u00E3o\" }), _jsx(\"div\", { className: cn(\"text-sm text-slate-600 leading-relaxed p-4 rounded-lg border border-slate-100 bg-slate-50/50 min-h-[100px]\", !card.description && \"italic text-slate-400 flex items-center justify-center\"), children: card.description || \"Nenhuma descrição fornecida.\" })] }), card.content && (_jsxs(\"div\", { className: \"space-y-3\", children: [_jsx(\"h4\", { className: \"text-sm font-semibold text-slate-900\", children: \"Conte\\u00FAdo Detalhado\" }), _jsx(\"pre\", { className: \"text-xs font-mono bg-slate-900 text-slate-50 p-4 rounded-lg overflow-x-auto shadow-inner\", children: typeof card.content === 'object' ? JSON.stringify(card.content, null, 2) : card.content })] }))] }), _jsxs(\"div\", { className: \"space-y-6\", children: [dueDate && (_jsxs(\"div\", { className: \"space-y-1.5\", children: [_jsxs(\"span\", { className: \"text-xs font-semibold text-slate-500 uppercase tracking-wider flex items-center gap-1.5\", children: [_jsx(Calendar, { size: 12 }), \" Data de Entrega\"] }), _jsx(\"div\", { className: \"text-sm font-medium text-slate-900 bg-slate-50 px-3 py-2 rounded-md border border-slate-200\", children: new Date(dueDate).toLocaleDateString() })] })), members && Array.isArray(members) && members.length > 0 && (_jsxs(\"div\", { className: \"space-y-2\", children: [_jsxs(\"span\", { className: \"text-xs font-semibold text-slate-500 uppercase tracking-wider flex items-center gap-1.5\", children: [_jsx(User, { size: 12 }), \" Membros\"] }), _jsx(\"div\", { className: \"flex flex-col gap-2\", children: members.map((m, i) => (_jsxs(\"div\", { className: \"flex items-center gap-2 text-sm text-slate-700 bg-white p-1.5 rounded-md border border-slate-100 shadow-sm\", children: [_jsx(\"div\", { className: \"h-6 w-6 rounded-full bg-slate-200 flex items-center justify-center text-[10px] font-bold overflow-hidden shrink-0\", children: m.avatar ? _jsx(\"img\", { src: m.avatar, alt: m.name, className: \"w-full h-full object-cover\" }) : m.initials }), _jsx(\"span\", { className: \"truncate\", children: m.name })] }, i))) })] })), tags && Array.isArray(tags) && tags.length > 0 && (_jsxs(\"div\", { className: \"space-y-2\", children: [_jsxs(\"span\", { className: \"text-xs font-semibold text-slate-500 uppercase tracking-wider flex items-center gap-1.5\", children: [_jsx(Tag, { size: 12 }), \" Tags\"] }), _jsx(\"div\", { className: \"flex flex-wrap gap-1.5\", children: tags.map((tag, i) => (_jsx(\"span\", { className: cn(\"px-2.5 py-1 rounded-md text-xs font-semibold border shadow-sm\", tag.color ? `bg-${tag.color}-50 text-${tag.color}-700 border-${tag.color}-200` : \"bg-slate-100 text-slate-700 border-slate-200\"), children: tag.name }, i))) })] })), Object.keys(otherMetadata).length > 0 && (_jsxs(\"div\", { className: \"space-y-3 pt-4 border-t border-slate-100\", children: [_jsxs(\"span\", { className: \"text-xs font-semibold text-slate-500 uppercase tracking-wider flex items-center gap-1.5\", children: [_jsx(Info, { size: 12 }), \" Outros Detalhes\"] }), _jsx(\"div\", { className: \"grid gap-3\", children: Object.entries(otherMetadata).map(([key, value]) => (_jsxs(\"div\", { className: \"group\", children: [_jsx(\"dt\", { className: \"text-[10px] font-bold text-slate-400 uppercase mb-0.5 group-hover:text-slate-600 transition-colors\", children: key.replace(/([A-Z])/g, ' $1') }), _jsx(\"dd\", { className: \"text-sm font-medium text-slate-800 break-words\", children: typeof value === 'boolean' ? (value ? _jsx(\"span\", { className: \"inline-flex items-center gap-1 text-emerald-600 bg-emerald-50 px-2 py-0.5 rounded text-xs\", children: \"Sim\" }) : _jsx(\"span\", { className: \"text-slate-400\", children: \"N\\u00E3o\" })) : String(value) })] }, key))) })] }))] })] }), _jsx(\"div\", { className: \"p-4 border-t border-slate-100 bg-slate-50/50 flex justify-end\", children: _jsx(Button, { variant: \"outline\", onClick: onClose, className: \"hover:bg-white hover:text-slate-900 transition-colors\", children: \"Fechar Visualiza\\u00E7\\u00E3o\" }) })] })] }) }));\n});\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { useKanbanStore } from '@/lib/store/use-kanban-store';\nimport { Button } from '@/components/ui/button';\nimport { X, RotateCcw } from 'lucide-react';\nexport function FilterChips() {\n const { filters, removeFilterRule, clearFilters } = useKanbanStore();\n const activeRules = filters.groups.flatMap(group => group.rules\n .filter(rule => !('conjunction' in rule) && rule.enabled)\n .map(rule => ({ groupId: group.id, rule: rule })));\n if (activeRules.length === 0 && !filters.searchQuery)\n return null;\n return (_jsxs(\"div\", { className: \"flex flex-wrap items-center gap-2 px-4 py-2 bg-slate-50/50 border-b min-h-[48px] animate-in fade-in slide-in-from-top-1 duration-300\", children: [_jsxs(\"div\", { className: \"flex items-center gap-1.5 mr-2\", children: [_jsx(\"div\", { className: \"h-2 w-2 rounded-full bg-primary animate-pulse\" }), _jsx(\"span\", { className: \"text-[11px] font-bold text-slate-500 uppercase tracking-tight\", children: \"Filtros Ativos:\" })] }), filters.searchQuery && (_jsxs(\"div\", { className: \"flex items-center gap-1 bg-white border border-primary/20 rounded-full px-3 py-1 text-[11px] shadow-sm\", children: [_jsx(\"span\", { className: \"text-slate-500\", children: \"Busca:\" }), _jsx(\"span\", { className: \"font-semibold text-primary\", children: filters.searchQuery }), _jsx(\"button\", { onClick: () => useKanbanStore.getState().setSearchQuery(''), className: \"ml-1 hover:text-destructive transition-colors\", children: _jsx(X, { className: \"h-3 w-3\" }) })] })), activeRules.map(({ groupId, rule }) => (_jsxs(\"div\", { className: \"flex items-center gap-1 bg-white border border-slate-200 rounded-full px-3 py-1 text-[11px] shadow-sm hover:border-primary/30 transition-colors group\", children: [_jsxs(\"span\", { className: \"text-slate-400 capitalize\", children: [rule.field.split('.').pop(), \":\"] }), _jsx(\"span\", { className: \"font-semibold text-slate-700\", children: rule.value || '(vazio)' }), _jsx(\"button\", { onClick: () => removeFilterRule(groupId, rule.id), className: \"ml-1 text-slate-300 group-hover:text-destructive transition-colors\", children: _jsx(X, { className: \"h-3 w-3\" }) })] }, rule.id))), _jsxs(Button, { variant: \"ghost\", size: \"sm\", className: \"h-7 text-[10px] font-bold text-slate-400 hover:text-destructive gap-1 px-2 border-l ml-auto rounded-none\", onClick: clearFilters, children: [_jsx(RotateCcw, { className: \"h-3 w-3\" }), \"LIMPAR TUDO\"] })] }));\n}\n","import { useRef, useEffect, useState, useMemo } from 'react';\nimport { useVirtualizer } from '@tanstack/react-virtual';\n// Cache de medições de altura por card ID\nconst heightCache = new Map();\nexport function useKanbanColumn({ cardIds, estimatedCardHeight, overscan: baseOverscan }) {\n const parentRef = useRef(null);\n const [scrollVelocity, setScrollVelocity] = useState(0);\n // NOTE: We removed useDroppable here because the column is already \n // registered as a droppable via useSortable in SortableVirtualColumn.\n // Having two registrations with the same ID causes conflicts.\n useEffect(() => {\n const element = parentRef.current;\n if (!element)\n return;\n let lastScrollTop = 0;\n let lastTime = Date.now();\n let rafId;\n const handleScroll = () => {\n const now = Date.now();\n const scrollTop = element.scrollTop;\n const deltaTime = now - lastTime;\n const deltaScroll = Math.abs(scrollTop - lastScrollTop);\n if (deltaTime > 0) {\n const velocity = deltaScroll / deltaTime;\n setScrollVelocity(velocity);\n }\n lastScrollTop = scrollTop;\n lastTime = now;\n };\n const throttledScroll = () => {\n if (rafId)\n cancelAnimationFrame(rafId);\n rafId = requestAnimationFrame(handleScroll);\n };\n element.addEventListener('scroll', throttledScroll, { passive: true });\n return () => {\n element.removeEventListener('scroll', throttledScroll);\n if (rafId)\n cancelAnimationFrame(rafId);\n };\n }, []);\n // Overscan dinâmico baseado em velocidade\n const dynamicOverscan = useMemo(() => {\n if (scrollVelocity > 2000)\n return baseOverscan * 3;\n if (scrollVelocity > 1000)\n return baseOverscan * 2;\n if (scrollVelocity > 500)\n return Math.ceil(baseOverscan * 1.5);\n return baseOverscan;\n }, [scrollVelocity, baseOverscan]);\n const rowVirtualizer = useVirtualizer({\n count: cardIds.length,\n getScrollElement: () => parentRef.current,\n estimateSize: (index) => {\n const cardId = cardIds[index];\n const cached = heightCache.get(cardId);\n if (cached)\n return cached;\n return estimatedCardHeight;\n },\n measureElement: (element) => {\n const height = element.getBoundingClientRect().height;\n const cardId = element.getAttribute('data-card-id');\n if (cardId) {\n heightCache.set(cardId, height);\n }\n return height;\n },\n overscan: dynamicOverscan,\n });\n return {\n parentRef,\n rowVirtualizer\n };\n}\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Plus } from 'lucide-react';\nexport function AddCardButton({ onClick }) {\n return (_jsxs(\"button\", { onClick: onClick, className: \"w-full flex items-center gap-2 px-3 py-2 text-sm font-medium text-slate-500 hover:text-blue-600 hover:bg-blue-50/50 rounded-lg transition-all duration-200 group\", children: [_jsx(\"div\", { className: \"bg-slate-200 group-hover:bg-blue-600 group-hover:text-white p-0.5 rounded transition-colors\", children: _jsx(Plus, { size: 14 }) }), _jsx(\"span\", { children: \"Adicionar card\" })] }));\n}\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { memo, useMemo } from 'react';\nimport { useSortable } from '@dnd-kit/sortable';\nimport { CSS } from '@dnd-kit/utilities';\n// Lightweight sortable wrapper - only this re-renders during drag\nfunction KanbanCardInner({ card, renderCard, onClick, onEdit, allowEdit, index, columnId, overId, overSide }) {\n const { attributes, listeners, setNodeRef, transform, transition, isDragging: isSortableDragging } = useSortable({\n id: card.id,\n data: {\n type: 'Card',\n card,\n index,\n columnId\n }\n });\n const style = useMemo(() => ({\n transform: CSS.Translate.toString(transform),\n transition,\n opacity: isSortableDragging ? 0.4 : 1,\n }), [transform, transition, isSortableDragging]);\n const handleClick = useMemo(() => {\n return (e) => {\n e.stopPropagation();\n if (onClick) {\n onClick(card);\n }\n else if (allowEdit) {\n onEdit?.(card);\n }\n };\n }, [onClick, onEdit, allowEdit, card]);\n // Render card content - memoized by DefaultCard component\n const cardContent = useMemo(() => renderCard({ card, isDragging: isSortableDragging }), [card, renderCard, isSortableDragging]);\n return (_jsxs(\"div\", { ref: setNodeRef, style: style, ...attributes, ...listeners, onClick: handleClick, className: \"relative cursor-grab active:cursor-grabbing touch-none group\", children: [overId === card.id && overSide === 'top' && (_jsx(\"div\", { className: \"absolute -top-[2px] left-0 right-0 h-[4px] bg-blue-500 rounded-full z-10 pointer-events-none shadow-sm\" })), cardContent, overId === card.id && overSide === 'bottom' && (_jsx(\"div\", { className: \"absolute -bottom-[2px] left-0 right-0 h-[4px] bg-blue-500 rounded-full z-10 pointer-events-none shadow-sm\" }))] }));\n}\nexport const KanbanCard = memo(KanbanCardInner, (prevProps, nextProps) => {\n return (prevProps.card === nextProps.card &&\n prevProps.index === nextProps.index &&\n prevProps.columnId === nextProps.columnId &&\n prevProps.overId === nextProps.overId &&\n prevProps.overSide === nextProps.overSide);\n});\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { SortableContext, verticalListSortingStrategy } from '@dnd-kit/sortable';\nimport { memo } from 'react';\nimport { useKanbanColumn } from '../hooks/use-kanban-column';\nimport { useKanbanStore } from '../store/use-kanban-store';\nimport { cn } from '../utils/cn';\nimport { AddCardButton } from './add-card-button';\nimport { KanbanCard } from './kanban-card';\nfunction KanbanColumnInner({ column, allCards, activeId, overId, overSide, config, dragHandleProps, isActiveColumnDragging, isDragging, isOverlay }) {\n const columnData = column;\n const { setAddingCardInColumnId, setEditingColumnId } = useKanbanStore();\n const { parentRef, rowVirtualizer } = useKanbanColumn({\n cardIds: columnData.cardIds,\n estimatedCardHeight: config.estimatedCardHeight,\n overscan: config.virtualOverscan\n });\n // isOver is now managed by the parent SortableVirtualColumn\n const isColumnOver = overId === columnData.id;\n const handleColumnClick = (e) => {\n e.stopPropagation();\n if (config.onColumnClick) {\n config.onColumnClick(column);\n }\n else if (config.allowColumnEdit) {\n config.onEditColumn?.(column); // Custom handler\n // or open default modal if no custom handler? \n // Current design prefers Store control for default modals.\n // We'll also set Store ID for default behavior compatibility if no custom handler prevents it.\n setEditingColumnId(columnData.id);\n }\n };\n return (_jsxs(\"div\", { onClick: handleColumnClick, style: {\n width: config.columnWidth,\n maxHeight: '100%',\n boxSizing: 'border-box'\n }, className: cn(\"flex flex-col group/column bg-column-bg rounded-column transition-all relative select-none h-fit max-h-full\", \"duration-250 ease-[cubic-bezier(0.18,0.67,0.6,1.22)]\", // Spring-like transition\n isColumnOver && \"bg-blue-50/50 ring-1 ring-blue-300 shadow-sm\", isActiveColumnDragging && !isDragging && !isOverlay && \"scale-[0.98] border border-slate-200 border-dashed opacity-50\", // Other columns\n isDragging && !isOverlay && \"opacity-20\", // Placeholder\n isOverlay && \"bg-slate-100/80 shadow-[0_20px_50px_rgba(0,0,0,0.15)] scale-[1.02] z-50 cursor-grabbing ring-1 ring-slate-300\" // Overlay\n ), children: [overId === columnData.id && overSide === 'left' && (_jsx(\"div\", { className: \"absolute top-0 bottom-0 -left-[4px] w-[4px] bg-blue-500 rounded-full z-20 pointer-events-none shadow-sm\" })), overId === columnData.id && overSide === 'right' && (_jsx(\"div\", { className: \"absolute top-0 bottom-0 -right-[4px] w-[4px] bg-blue-500 rounded-full z-20 pointer-events-none shadow-sm\" })), _jsx(\"div\", { onClick: (e) => e.stopPropagation(), children: config.renderColumnHeader({\n column,\n cardCount: columnData.cardIds.length,\n isOver: isColumnOver,\n dragHandleProps,\n onAddCard: config.allowAdd ? () => setAddingCardInColumnId(columnData.id) : undefined,\n onEditColumn: config.allowColumnEdit ? () => setEditingColumnId(columnData.id) : undefined\n }) }), _jsx(\"div\", { className: cn(\"flex-1 flex flex-col min-h-0 transition-colors duration-200\", isColumnOver && \"bg-blue-50/30\"), style: { minHeight: config.columnMinHeight }, children: columnData.cardIds.length === 0 ? (\n // Empty column - simple area with parentRef for eventual virtualizer stability\n _jsx(\"div\", { ref: parentRef, className: cn(\"flex-1 px-3 pb-2 flex items-center justify-center border-2 border-dashed border-transparent rounded-b-lg transition-colors\", isColumnOver && \"border-blue-300\"), children: _jsx(\"div\", { className: \"pointer-events-none select-none opacity-50\", children: config.renderColumnEmpty({}) }) })) : (\n // Column with cards - use SortableContext for reordering\n _jsx(SortableContext, { items: columnData.cardIds, strategy: verticalListSortingStrategy, children: _jsx(\"div\", { ref: parentRef, className: \"flex-1 overflow-y-auto px-3 pb-2 scrollbar-thin scrollbar-thumb-slate-300 scrollbar-track-transparent\", style: { minHeight: config.columnMinHeight }, children: _jsx(\"div\", { style: {\n height: `${rowVirtualizer.getTotalSize()}px`,\n width: '100%',\n position: 'relative',\n }, children: rowVirtualizer.getVirtualItems().map((virtualRow) => {\n const cardId = columnData.cardIds[virtualRow.index];\n const card = allCards[cardId];\n if (!card)\n return null;\n const isActive = cardId === activeId;\n return (_jsx(\"div\", { \"data-index\": virtualRow.index, \"data-card-id\": cardId, style: {\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n height: `${virtualRow.size}px`,\n transform: `translateY(${virtualRow.start}px)`,\n }, children: _jsx(KanbanCard, { card: card, isDragging: isActive, renderCard: config.renderCard, onClick: config.onCardClick, onEdit: config.onEditCard, allowEdit: config.allowEdit, index: virtualRow.index, columnId: columnData.id, overId: overId, overSide: overSide }) }, cardId));\n }) }) }) })) }), config.allowAdd && (_jsx(\"div\", { className: \"p-3 border-t border-slate-200 shrink-0 relative z-20\", onClick: (e) => e.stopPropagation(), children: config.renderAddButton ? (config.renderAddButton({\n columnId: columnData.id,\n onClick: () => setAddingCardInColumnId(columnData.id)\n })) : (_jsx(AddCardButton, { onClick: () => setAddingCardInColumnId(columnData.id) })) }))] }));\n}\nexport const KanbanColumn = memo(KanbanColumnInner);\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport * as React from \"react\";\nimport * as SheetPrimitive from \"@radix-ui/react-dialog\";\nimport { cva } from \"class-variance-authority\";\nimport { X } from \"lucide-react\";\nimport { cn } from \"@/lib/utils/utils\";\nconst Sheet = SheetPrimitive.Root;\nconst SheetTrigger = SheetPrimitive.Trigger;\nconst SheetClose = SheetPrimitive.Close;\nconst SheetPortal = SheetPrimitive.Portal;\nconst SheetOverlay = React.forwardRef(({ className, ...props }, ref) => (_jsx(SheetPrimitive.Overlay, { className: cn(\"fixed inset-0 z-50 bg-black/40 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\", className), ...props, ref: ref })));\nSheetOverlay.displayName = SheetPrimitive.Overlay.displayName;\nconst sheetVariants = cva(\"fixed z-50 gap-4 bg-background p-6 shadow-lg transition ease-in-out data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:duration-300 data-[state=open]:duration-500\", {\n variants: {\n side: {\n top: \"inset-x-0 top-0 border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top\",\n bottom: \"inset-x-0 bottom-0 border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom\",\n left: \"inset-y-0 left-0 h-full w-3/4 border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm\",\n right: \"inset-y-0 right-0 h-full w-3/4 border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm\",\n },\n },\n defaultVariants: {\n side: \"right\",\n },\n});\nconst SheetContent = React.forwardRef(({ side = \"right\", className, children, ...props }, ref) => (_jsx(SheetPortal, { children: _jsxs(SheetPrimitive.Content, { ref: ref, className: cn(sheetVariants({ side }), \"bg-white shadow-2xl\", className), ...props, children: [children, _jsxs(SheetPrimitive.Close, { className: \"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-secondary\", children: [_jsx(X, { className: \"h-4 w-4\" }), _jsx(\"span\", { className: \"sr-only\", children: \"Close\" })] })] }) })));\nSheetContent.displayName = SheetPrimitive.Content.displayName;\nconst SheetHeader = ({ className, ...props }) => (_jsx(\"div\", { className: cn(\"flex flex-col space-y-2 text-center sm:text-left\", className), ...props }));\nSheetHeader.displayName = \"SheetHeader\";\nconst SheetFooter = ({ className, ...props }) => (_jsx(\"div\", { className: cn(\"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\", className), ...props }));\nSheetFooter.displayName = \"SheetFooter\";\nconst SheetTitle = React.forwardRef(({ className, ...props }, ref) => (_jsx(SheetPrimitive.Title, { ref: ref, className: cn(\"text-lg font-semibold text-foreground\", className), ...props })));\nSheetTitle.displayName = SheetPrimitive.Title.displayName;\nconst SheetDescription = React.forwardRef(({ className, ...props }, ref) => (_jsx(SheetPrimitive.Description, { ref: ref, className: cn(\"text-sm text-muted-foreground\", className), ...props })));\nSheetDescription.displayName = SheetPrimitive.Description.displayName;\nexport { Sheet, SheetPortal, SheetOverlay, SheetTrigger, SheetClose, SheetContent, SheetHeader, SheetFooter, SheetTitle, SheetDescription, };\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Trash2, Plus, X } from 'lucide-react';\nimport { useKanbanStore } from '@/lib/store/use-kanban-store';\nimport { Button } from '@/components/ui/button';\nexport function FilterGroup({ group, availableFields }) {\n const { updateFilterGroup, removeFilterGroup } = useKanbanStore();\n const handleAddRule = () => {\n const newRule = {\n id: crypto.randomUUID(),\n field: '',\n operator: 'contains',\n value: '',\n enabled: true\n };\n updateFilterGroup(group.id, {\n rules: [...group.rules, newRule]\n });\n };\n const handleRemoveRule = (ruleId) => {\n updateFilterGroup(group.id, {\n rules: group.rules.filter(r => 'id' in r && r.id !== ruleId)\n });\n };\n const handleUpdateRule = (ruleId, updates) => {\n updateFilterGroup(group.id, {\n rules: group.rules.map(r => ('id' in r && r.id === ruleId) ? { ...r, ...updates } : r)\n });\n };\n const toggleConjunction = () => {\n updateFilterGroup(group.id, {\n conjunction: group.conjunction === 'and' ? 'or' : 'and'\n });\n };\n return (_jsxs(\"div\", { className: \"p-4 border rounded-lg bg-slate-50/50 space-y-4 relative group\", children: [_jsxs(\"div\", { className: \"flex items-center justify-between\", children: [_jsxs(\"div\", { className: \"flex items-center gap-2\", children: [_jsx(Button, { variant: \"ghost\", size: \"sm\", className: \"h-7 text-[10px] uppercase font-bold tracking-wider hover:bg-white\", onClick: toggleConjunction, children: group.conjunction }), _jsx(\"span\", { className: \"text-xs text-muted-foreground italic\", children: \"dos seguintes crit\\u00E9rios:\" })] }), _jsx(Button, { variant: \"ghost\", size: \"icon\", className: \"h-8 w-8 text-destructive opacity-0 group-hover:opacity-100 transition-opacity\", onClick: () => removeFilterGroup(group.id), children: _jsx(Trash2, { className: \"h-4 w-4\" }) })] }), _jsxs(\"div\", { className: \"space-y-3\", children: [group.rules.map((rule) => {\n if ('field' in rule) {\n return (_jsx(FilterRuleRow, { rule: rule, availableFields: availableFields, onDelete: () => handleRemoveRule(rule.id), onUpdate: (updates) => handleUpdateRule(rule.id, updates) }, rule.id));\n }\n return null; // Nested groups not supported in basic UI yet\n }), group.rules.length === 0 && (_jsx(\"div\", { className: \"text-center py-4 border-2 border-dashed rounded-md bg-white/50 cursor-pointer hover:bg-white transition-colors\", onClick: handleAddRule, children: _jsx(\"p\", { className: \"text-xs text-muted-foreground\", children: \"Nenhuma regra definida. Clique para adicionar.\" }) }))] }), _jsxs(Button, { variant: \"ghost\", size: \"sm\", className: \"w-full h-8 text-xs border-dashed border hover:border-solid mt-2 bg-white\", onClick: handleAddRule, children: [_jsx(Plus, { className: \"mr-2 h-3 w-3\" }), \"Adicionar Regra\"] })] }));\n}\nfunction FilterRuleRow({ rule, availableFields, onDelete, onUpdate }) {\n const operators = [\n { label: 'contém', value: 'contains' },\n { label: 'não contém', value: 'notContains' },\n { label: 'igual a', value: 'eq' },\n { label: 'diferente de', value: 'neq' },\n { label: 'maior que', value: 'gt' },\n { label: 'menor que', value: 'lt' },\n { label: 'está vazio', value: 'isEmpty' },\n { label: 'não está vazio', value: 'isNotEmpty' },\n ];\n return (_jsxs(\"div\", { className: `flex items-center gap-2 bg-white p-2 rounded-md border shadow-sm transition-all duration-200 group/row ${!rule.enabled ? 'opacity-50 grayscale bg-slate-50' : 'hover:border-primary/30'}`, children: [_jsx(\"input\", { type: \"checkbox\", checked: rule.enabled, onChange: (e) => onUpdate({ enabled: e.target.checked }), className: \"h-3 w-3 rounded border-slate-300 text-primary focus:ring-primary cursor-pointer\", title: rule.enabled ? 'Desabilitar regra' : 'Habilitar regra' }), _jsxs(\"select\", { value: rule.field, onChange: (e) => onUpdate({ field: e.target.value }), className: \"flex-[1.5] min-w-[100px] bg-transparent text-[11px] font-semibold focus:outline-none truncate\", disabled: !rule.enabled, children: [_jsx(\"option\", { value: \"\", disabled: true, children: \"Campo...\" }), availableFields.map(f => (_jsx(\"option\", { value: f.value, children: f.label }, f.value)))] }), _jsx(\"select\", { value: rule.operator, onChange: (e) => onUpdate({ operator: e.target.value }), className: \"flex-1 min-w-[90px] bg-transparent text-[11px] text-muted-foreground focus:outline-none border-x px-2\", disabled: !rule.enabled, children: operators.map(o => (_jsx(\"option\", { value: o.value, children: o.label }, o.value))) }), _jsx(\"input\", { type: (availableFields.find(f => f.value === rule.field)?.type ?? 'text') === 'number' ? 'number' : 'text', value: rule.value || '', onChange: (e) => onUpdate({ value: e.target.value }), placeholder: \"Valor...\", disabled: !rule.enabled || rule.operator === 'isEmpty' || rule.operator === 'isNotEmpty', className: \"flex-[2] min-w-[100px] bg-transparent text-[11px] focus:outline-none placeholder:italic disabled:opacity-30 font-medium\" }), _jsx(Button, { variant: \"ghost\", size: \"icon\", className: \"h-6 w-6 shrink-0 hover:bg-destructive/10 hover:text-destructive opacity-0 group-row-hover/row:opacity-100 transition-opacity\", onClick: onDelete, children: _jsx(X, { className: \"h-3 w-3\" }) })] }));\n}\n","export function discoverFields(cards) {\n const fields = {\n title: { label: 'Título', value: 'title', type: 'text' },\n description: { label: 'Descrição', value: 'description', type: 'text' },\n };\n Object.values(cards).forEach((card) => {\n if (card.metadata && typeof card.metadata === 'object') {\n Object.entries(card.metadata).forEach(([key, value]) => {\n const path = `metadata.${key}`;\n if (!fields[path]) {\n let type = 'other';\n if (typeof value === 'string')\n type = 'text';\n else if (typeof value === 'number')\n type = 'number';\n else if (typeof value === 'boolean')\n type = 'boolean';\n fields[path] = {\n label: `${key.charAt(0).toUpperCase() + key.slice(1)} (Meta)`,\n value: path,\n type,\n };\n }\n });\n }\n });\n return Object.values(fields);\n}\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Button } from '@/components/ui/button';\nimport { Sheet, SheetContent, SheetDescription, SheetHeader, SheetTitle, SheetTrigger, } from '@/components/ui/sheet';\nimport { useKanbanStore } from '@/lib/store/use-kanban-store';\nimport { Filter, Plus } from 'lucide-react';\nimport { FilterGroup } from './filter-group';\nimport { discoverFields } from '../utils/data-discovery';\nimport { useMemo } from 'react';\nexport function KanbanFilterDrawer() {\n const { filters, addFilterGroup, cards } = useKanbanStore();\n const availableFields = useMemo(() => discoverFields(cards), [cards]);\n const handleAddGroup = () => {\n const newGroup = {\n id: crypto.randomUUID(),\n conjunction: 'and',\n rules: [],\n enabled: true\n };\n addFilterGroup(newGroup);\n };\n return (_jsxs(Sheet, { children: [_jsx(SheetTrigger, { asChild: true, children: _jsxs(Button, { variant: \"outline\", size: \"sm\", className: \"gap-2 text-slate-600 bg-white hover:bg-slate-50 border-slate-200 shadow-sm\", children: [_jsx(Filter, { className: \"h-4 w-4\" }), \"Filtros\", filters.groups.length > 0 && (_jsx(\"span\", { className: \"flex h-5 w-5 items-center justify-center rounded-full bg-primary text-[10px] text-primary-foreground font-bold shadow-sm\", children: filters.groups.length }))] }) }), _jsxs(SheetContent, { className: \"w-full sm:w-[600px] sm:max-w-none overflow-y-auto bg-white/95 backdrop-blur-sm border-l shadow-2xl\", children: [_jsx(SheetHeader, { className: \"pb-6 border-b\", children: _jsxs(\"div\", { className: \"flex items-center justify-between\", children: [_jsxs(\"div\", { children: [_jsx(SheetTitle, { className: \"text-xl font-bold text-slate-800\", children: \"Filtros Avan\\u00E7ados\" }), _jsx(SheetDescription, { className: \"text-sm text-slate-500\", children: \"Crie combina\\u00E7\\u00F5es de filtros para refinar sua visualiza\\u00E7\\u00E3o do board.\" })] }), filters.groups.length > 0 && (_jsx(Button, { variant: \"ghost\", size: \"sm\", onClick: useKanbanStore.getState().clearFilters, className: \"text-xs font-bold text-slate-400 hover:text-destructive h-8\", children: \"Limpar Tudo\" }))] }) }), _jsxs(\"div\", { className: \"mt-8 space-y-6\", children: [filters.groups.length === 0 ? (_jsxs(\"div\", { className: \"text-center py-12 px-6 bg-slate-50/50 border-2 border-dashed border-slate-200 rounded-xl space-y-2\", children: [_jsx(Filter, { className: \"mx-auto h-8 w-8 text-slate-300\" }), _jsx(\"p\", { className: \"text-slate-600 font-medium\", children: \"Nenhum filtro ativo.\" }), _jsx(\"p\", { className: \"text-xs text-slate-400\", children: \"Adicione um grupo para come\\u00E7ar a filtrar seus itens.\" })] })) : (_jsx(\"div\", { className: \"space-y-6\", children: filters.groups.map(group => (_jsx(FilterGroup, { group: group, availableFields: availableFields }, group.id))) })), _jsxs(Button, { onClick: handleAddGroup, className: \"w-full\", variant: \"outline\", children: [_jsx(Plus, { className: \"mr-2 h-4 w-4\" }), \"Adicionar Grupo de Filtros\"] })] })] })] }));\n}\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Button } from \"@/components/ui/button\";\nimport { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from \"@/components/ui/dialog\";\nimport { cn } from '@/lib/utils/cn';\nimport { Plus } from 'lucide-react';\nimport { useState } from 'react';\nexport function DefaultAddCardForm({ columnId: _columnId, onAdd, onCancel }) {\n const [title, setTitle] = useState('');\n const [description, setDescription] = useState('');\n const [priority, setPriority] = useState('medium');\n const handleSubmit = (e) => {\n e.preventDefault();\n onAdd({\n title,\n description,\n metadata: { priority }\n });\n };\n return (_jsx(Dialog, { open: true, onOpenChange: (open) => !open && onCancel(), children: _jsxs(DialogContent, { className: \"sm:max-w-[425px]\", children: [_jsxs(DialogHeader, { children: [_jsx(DialogTitle, { children: \"Adicionar Novo Card\" }), _jsx(DialogDescription, { children: \"Novo item para a coluna.\" })] }), _jsxs(\"form\", { onSubmit: handleSubmit, className: \"grid gap-4 py-4\", children: [_jsxs(\"div\", { className: \"grid gap-2\", children: [_jsx(\"label\", { htmlFor: \"title\", className: \"text-sm font-medium leading-none\", children: \"T\\u00EDtulo\" }), _jsx(\"input\", { id: \"title\", autoFocus: true, value: title, onChange: (e) => setTitle(e.target.value), className: \"flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-sm transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring\", placeholder: \"O que precisa ser feito?\" })] }), _jsxs(\"div\", { className: \"grid gap-2\", children: [_jsx(\"label\", { className: \"text-sm font-medium leading-none\", children: \"Prioridade\" }), _jsx(\"div\", { className: \"flex gap-2\", children: ['low', 'medium', 'high'].map((p) => (_jsx(\"button\", { type: \"button\", onClick: () => setPriority(p), className: cn(\"flex-1 px-3 py-2 text-xs font-bold uppercase tracking-wider rounded-md border transition-all\", priority === p\n ? p === 'high' ? \"bg-red-100 border-red-500 text-red-700\" :\n p === 'medium' ? \"bg-amber-100 border-amber-500 text-amber-900\" :\n \"bg-emerald-100 border-emerald-500 text-emerald-800\"\n : \"bg-transparent border-slate-200 text-slate-500 hover:bg-slate-50\"), children: p === 'low' ? 'Baixa' : p === 'medium' ? 'Média' : 'Alta' }, p))) })] }), _jsxs(\"div\", { className: \"grid gap-2\", children: [_jsx(\"label\", { htmlFor: \"desc\", className: \"text-sm font-medium leading-none\", children: \"Descri\\u00E7\\u00E3o\" }), _jsx(\"textarea\", { id: \"desc\", value: description, onChange: (e) => setDescription(e.target.value), rows: 3, className: \"flex min-h-[60px] w-full rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-sm resize-none focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring\", placeholder: \"Detalhes adicionais...\" })] }), _jsxs(DialogFooter, { children: [_jsx(Button, { type: \"button\", variant: \"outline\", onClick: onCancel, children: \"Cancelar\" }), _jsxs(Button, { type: \"submit\", className: \"gap-2 bg-blue-600 hover:bg-blue-700 text-white\", children: [_jsx(Plus, { size: 16 }), \"Criar Card\"] })] })] })] }) }));\n}\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { useState } from 'react';\nimport { Save, Trash2 } from 'lucide-react';\nimport { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from \"@/components/ui/dialog\";\nimport { Button } from \"@/components/ui/button\";\nexport function DefaultEditColumnForm({ column, onSave, onCancel, onDelete }) {\n const [title, setTitle] = useState(column.title || '');\n const handleSubmit = (e) => {\n e.preventDefault();\n onSave({ title });\n };\n return (_jsx(Dialog, { open: true, onOpenChange: (open) => !open && onCancel(), children: _jsxs(DialogContent, { className: \"sm:max-w-[400px]\", children: [_jsxs(DialogHeader, { children: [_jsx(DialogTitle, { children: \"Editar Coluna\" }), _jsx(DialogDescription, { children: \"Gerencie as configura\\u00E7\\u00F5es desta coluna.\" })] }), _jsxs(\"form\", { onSubmit: handleSubmit, className: \"grid gap-4 py-4\", children: [_jsxs(\"div\", { className: \"grid gap-2\", children: [_jsx(\"label\", { htmlFor: \"col-title\", className: \"text-sm font-medium leading-none\", children: \"Nome da Coluna\" }), _jsx(\"input\", { id: \"col-title\", autoFocus: true, value: title, onChange: (e) => setTitle(e.target.value), className: \"flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-sm transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring\", placeholder: \"Ex: A Fazer\" })] }), _jsxs(DialogFooter, { className: \"flex items-center justify-between w-full sm:justify-between\", children: [onDelete ? (_jsxs(Button, { type: \"button\", variant: \"destructive\", size: \"sm\", onClick: () => {\n if (window.confirm(\"Tem certeza que deseja excluir esta coluna e mover seus cards para a anterior?\")) {\n onDelete();\n }\n }, className: \"gap-2\", children: [_jsx(Trash2, { size: 14 }), \"Excluir\"] })) : _jsx(\"div\", {}), _jsxs(\"div\", { className: \"flex gap-2\", children: [_jsx(Button, { type: \"button\", variant: \"outline\", onClick: onCancel, children: \"Cancelar\" }), _jsxs(Button, { type: \"submit\", className: \"gap-2\", children: [_jsx(Save, { size: 14 }), \"Salvar\"] })] })] })] })] }) }));\n}\n","import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { DndContext, DragOverlay, MeasuringStrategy, closestCenter, getFirstCollision, pointerWithin, rectIntersection, useDroppable } from '@dnd-kit/core';\nimport { SortableContext, horizontalListSortingStrategy, useSortable } from '@dnd-kit/sortable';\nimport { useVirtualizer } from '@tanstack/react-virtual';\nimport { Plus } from 'lucide-react';\nimport { cloneElement, isValidElement, memo, useEffect, useMemo, useRef } from 'react';\nimport { cn } from '@/lib/utils/utils';\nimport { useKanban } from '../hooks/use-kanban';\nimport { CSS } from '@dnd-kit/utilities';\nimport { useKanbanDnd } from '../hooks/use-kanban-dnd';\nimport { evaluateFilter } from '../utils/filter-evaluator';\nimport { DefaultCard } from './default/default-card';\nimport { DefaultColumnEmpty } from './default/default-column-empty';\nimport { DefaultColumnHeader } from './default/default-column-header';\nimport { DefaultEditForm } from './default/default-edit-form';\nimport { DefaultCardView } from './default/default-card-view';\nimport { FilterChips } from './filter-chips';\nimport { KanbanColumn } from './kanban-column';\nimport { KanbanFilterDrawer } from './kanban-filter-drawer';\nimport { DefaultAddCardForm } from './default/default-add-card-form';\nimport { DefaultEditColumnForm } from './default/default-edit-column-form';\n// Droppable Wrapper for New Column Button\nconst DroppableNewColumnButton = memo(({ children }) => {\n const { setNodeRef, isOver } = useDroppable({\n id: 'new-column-drop-target',\n data: { type: 'NewColumn' }\n });\n return (_jsx(_Fragment, { children: children(isOver, setNodeRef) }));\n});\n// Sortable Wrapper for Virtual Column\nconst SortableVirtualColumn = memo(({ id, start, width, children, allowReorder, cardIds }) => {\n const { attributes, listeners, setNodeRef, transform, transition, isDragging: isSortableDragging } = useSortable({\n id,\n disabled: !allowReorder,\n data: {\n type: 'Column',\n children: cardIds // CRITICAL: Pass card IDs for collision detection\n }\n });\n const style = {\n position: 'absolute',\n top: 0,\n left: `${start}px`, // Virtual positioning via left, NOT transform\n width: `${width}px`,\n transition: transition || 'transform 250ms cubic-bezier(0.18, 0.67, 0.6, 1.22)',\n // Transform is now ONLY for dnd-kit's sorting logic\n transform: transform && !isSortableDragging\n ? CSS.Transform.toString(transform)\n : undefined,\n zIndex: isSortableDragging ? 50 : undefined,\n pointerEvents: (isSortableDragging ? 'none' : undefined),\n animation: isSortableDragging ? 'tilt 0.2s ease-in-out forwards' : undefined,\n };\n return (_jsx(\"div\", { ref: setNodeRef, style: style, children: isValidElement(children) ? (cloneElement(children, {\n dragHandleProps: allowReorder ? { attributes, listeners } : undefined,\n isDragging: isSortableDragging\n })) : children }));\n});\nexport function KanboomBoard({ config }) {\n const kanban = useKanban(config);\n const parentRef = useRef(null);\n const columnVirtualizer = useVirtualizer({\n horizontal: true,\n count: kanban.columnOrder.length,\n getScrollElement: () => parentRef.current,\n estimateSize: () => kanban.config.columnWidth + kanban.config.gap,\n overscan: 5,\n });\n // Filter cards and columns\n const filteredData = useMemo(() => {\n const filteredCards = {};\n // 1. Filter cards\n Object.values(kanban.cards).forEach(card => {\n if (evaluateFilter(card, kanban.filters)) {\n filteredCards[card.id] = card;\n }\n });\n // 2. Filter card IDs inside columns\n const filteredColumns = {};\n Object.values(kanban.columns).forEach(column => {\n filteredColumns[column.id] = {\n ...column,\n cardIds: column.cardIds.filter(id => filteredCards[id])\n };\n });\n return {\n cards: filteredCards,\n columns: filteredColumns,\n };\n }, [kanban.cards, kanban.columns, kanban.filters]);\n // Refs for collision detection fallback (from official dnd-kit pattern)\n const lastOverId = useRef(null);\n const recentlyMovedToNewContainer = useRef(false);\n // Reset recentlyMovedToNewContainer after layout settles\n useEffect(() => {\n requestAnimationFrame(() => {\n recentlyMovedToNewContainer.current = false;\n });\n }, [kanban.columnOrder, kanban.columns]);\n const dnd = useKanbanDnd({\n dragActivationDistance: kanban.config.dragActivationDistance,\n touchActivationDelay: kanban.config.touchActivationDelay,\n onDragStart: (id, _type) => {\n kanban.handleDragStart(id);\n },\n onDragOver: kanban.handleDragOver,\n onDragEnd: kanban.handleDragEnd,\n onCardMove: kanban.moveCard,\n onColumnMove: kanban.moveColumn,\n onCreateColumnWithCard: (cardId, sourceColumnId) => {\n kanban.addColumnWithCard(cardId, sourceColumnId, { title: 'Nova Coluna' });\n },\n columns: kanban.columns,\n columnOrder: kanban.columnOrder,\n recentlyMovedToNewContainer\n });\n const activeCard = kanban.activeId && kanban.cards[kanban.activeId] ? kanban.cards[kanban.activeId] : null;\n const activeColumn = kanban.activeId && kanban.columnOrder.includes(kanban.activeId) ? kanban.columns[kanban.activeId] : null;\n const viewingCard = kanban.viewingCardId ? kanban.cards[kanban.viewingCardId] : null;\n const editingColumn = kanban.editingColumnId ? kanban.columns[kanban.editingColumnId] : null;\n const finalConfig = {\n renderCard: config?.renderCard ?? ((props) => _jsx(DefaultCard, { ...props })),\n renderColumnHeader: config?.renderColumnHeader ?? ((props) => _jsx(DefaultColumnHeader, { ...props })),\n renderColumnEmpty: config?.renderColumnEmpty ?? (() => _jsx(DefaultColumnEmpty, {})),\n renderAddButton: config?.renderAddButton,\n renderAddForm: config?.renderAddForm,\n renderEditForm: config?.renderEditForm,\n renderAddColumnButton: config?.renderAddColumnButton,\n renderAddColumnForm: config?.renderAddColumnForm,\n renderEditColumnForm: config?.renderEditColumnForm,\n estimatedCardHeight: kanban.config.estimatedCardHeight,\n virtualOverscan: kanban.config.virtualOverscan,\n columnWidth: kanban.config.columnWidth,\n columnMinHeight: kanban.config.columnMinHeight,\n onCardClick: config?.onCardClick ?? ((card) => kanban.setViewingCardId(card.id)),\n onColumnClick: config?.onColumnClick,\n onEdit: kanban.config.allowEdit ? kanban.setEditingCardId : undefined,\n onEditColumn: (column) => kanban.setEditingColumnId(column.id),\n renderCardView: config?.renderCardView,\n allowAdd: kanban.config.allowAdd,\n allowColumnAdd: kanban.config.allowColumnAdd,\n allowColumnEdit: kanban.config.allowColumnEdit,\n allowColumnDelete: kanban.config.allowColumnDelete,\n allowColumnReorder: kanban.config.allowColumnReorder,\n allowFilters: kanban.config.allowFilters,\n };\n /**\n * Custom collision detection strategy optimized for multiple containers\n * Based on official dnd-kit MultipleContainers example\n */\n const customCollisionDetection = (args) => {\n const activeId = args.active.id;\n const isDraggingCard = activeId && !kanban.columnOrder.includes(activeId);\n // If dragging a column, use closestCenter (snappier for horizontal reordering)\n if (!isDraggingCard) {\n return closestCenter(args);\n }\n // 1. Explicit check for New Column target - HIGH PRIORITY\n const pointerCollisions = pointerWithin(args);\n if (activeId && pointerCollisions.length > 0) {\n const newColumnCollision = pointerCollisions.find(c => c.id === 'new-column-drop-target');\n if (newColumnCollision) {\n return [newColumnCollision];\n }\n }\n // 2. Dragging a card - use multi-container strategy\n // Find intersecting containers with the active draggable rect\n const intersections = pointerCollisions.length > 0\n ? pointerCollisions\n : rectIntersection(args);\n let overId = getFirstCollision(intersections, 'id');\n if (overId != null) {\n // If we found a container (column), get the closest item within it\n if (kanban.columnOrder.includes(overId)) {\n const column = kanban.columns[overId];\n if (column && column.cardIds.length > 0) {\n // Return the closest droppable within that container\n const containerItems = args.droppableContainers.filter((container) => container.id !== overId && column.cardIds.includes(container.id));\n if (containerItems.length > 0) {\n const closest = closestCenter({\n ...args,\n droppableContainers: containerItems,\n });\n overId = closest[0]?.id ?? overId;\n }\n }\n }\n lastOverId.current = overId;\n return [{ id: overId }];\n }\n // 4. Fallback to normal collision detection\n const collisions = closestCenter({\n ...args,\n droppableContainers: args.droppableContainers.filter((container) => container.id !== activeId)\n });\n if (collisions.length > 0) {\n lastOverId.current = collisions[0].id;\n return collisions;\n }\n if (recentlyMovedToNewContainer.current) {\n lastOverId.current = activeId;\n }\n // If no droppable is matched, return the last match\n return lastOverId.current ? [{ id: lastOverId.current }] : [];\n };\n return (_jsx(DndContext, { sensors: dnd.sensors, collisionDetection: customCollisionDetection, measuring: {\n droppable: {\n strategy: MeasuringStrategy.Always,\n },\n }, onDragStart: dnd.handleDragStart, onDragOver: dnd.handleDragOver, onDragEnd: dnd.handleDragEnd, children: _jsxs(\"div\", { className: \"flex flex-col h-full bg-slate-50 relative group/board overflow-hidden\", children: [kanban.config.allowFilters && (_jsx(\"div\", { className: \"absolute top-4 right-6 z-30 pointer-events-none\", children: _jsx(\"div\", { className: \"pointer-events-auto transition-all duration-300 translate-y-[-10px] opacity-0 group-hover/board:translate-y-0 group-hover/board:opacity-100\", children: _jsx(KanbanFilterDrawer, {}) }) })), kanban.config.allowFilters && _jsx(FilterChips, {}), _jsx(\"div\", { ref: parentRef, className: \"flex-1 overflow-x-auto overflow-y-hidden\", children: _jsxs(\"div\", { style: {\n width: `${columnVirtualizer.getTotalSize() + (kanban.config.allowColumnAdd ? 200 : 0)}px`,\n height: '100%',\n position: 'relative',\n }, children: [_jsx(SortableContext, { items: kanban.columnOrder, strategy: horizontalListSortingStrategy, children: columnVirtualizer.getVirtualItems().map((virtualColumn) => {\n const columnId = kanban.columnOrder[virtualColumn.index];\n return (_jsx(SortableVirtualColumn, { id: columnId, start: virtualColumn.start, width: kanban.config.columnWidth, allowReorder: kanban.config.allowColumnReorder, cardIds: filteredData.columns[columnId]?.cardIds ?? [], children: _jsx(KanbanColumn, { column: filteredData.columns[columnId], allCards: filteredData.cards, activeId: kanban.activeId, overId: kanban.overId, overSide: kanban.overSide, config: finalConfig, isActiveColumnDragging: kanban.activeId ? kanban.columnOrder.includes(kanban.activeId) : false }) }, columnId));\n }) }), kanban.config.allowColumnAdd && (_jsx(DroppableNewColumnButton, { children: (isOver, setNodeRef) => (_jsx(\"div\", { ref: setNodeRef, className: \"h-full z-10\", style: {\n position: 'absolute',\n top: 0,\n left: `${columnVirtualizer.getTotalSize()}px`,\n width: kanban.config.columnWidth,\n height: '100%',\n boxSizing: 'border-box',\n paddingRight: kanban.config.gap\n }, children: config?.renderAddColumnButton ? (config.renderAddColumnButton({ onClick: () => kanban.addColumn({ title: 'Nova Coluna' }) })) : (_jsxs(\"button\", { onClick: () => kanban.addColumn({ title: 'Nova Coluna' }), className: cn(\"flex items-center gap-2 w-full p-4 bg-slate-100/50 hover:bg-slate-200 text-slate-600 rounded-lg border-2 border-dashed transition-all font-semibold h-[200px] justify-center\", isOver ? \"bg-blue-100 border-blue-400 text-blue-600 scale-[1.02] shadow-lg ring-4 ring-blue-500/20\" : \"border-slate-300\"), children: [_jsx(Plus, { size: 20 }), isOver ? 'Soltar para criar' : 'Nova Coluna'] })) })) }))] }) }), kanban.editingCardId && kanban.config.allowEdit && ((() => {\n const editingCard = kanban.cards[kanban.editingCardId];\n if (!editingCard)\n return null;\n return config?.renderEditForm ? (config.renderEditForm({\n card: editingCard,\n onSave: (updates) => {\n kanban.updateCard(kanban.editingCardId, updates);\n kanban.clearEditingCardId();\n },\n onCancel: kanban.clearEditingCardId,\n onDelete: () => {\n kanban.deleteCard(kanban.editingCardId);\n kanban.clearEditingCardId();\n }\n })) : (_jsx(DefaultEditForm, { card: editingCard, onSave: (updates) => {\n kanban.updateCard(kanban.editingCardId, updates);\n kanban.clearEditingCardId();\n }, onCancel: kanban.clearEditingCardId, onDelete: () => {\n kanban.deleteCard(kanban.editingCardId);\n kanban.clearEditingCardId();\n } }));\n })()), kanban.addingCardInColumnId && kanban.config.allowAdd && (config?.renderAddForm ? (config.renderAddForm({\n columnId: kanban.addingCardInColumnId,\n onAdd: (data) => {\n kanban.addCard(kanban.addingCardInColumnId, data);\n kanban.clearAddingCardInColumnId();\n },\n onCancel: kanban.clearAddingCardInColumnId\n })) : (_jsx(DefaultAddCardForm, { columnId: kanban.addingCardInColumnId, onAdd: (data) => {\n kanban.addCard(kanban.addingCardInColumnId, data);\n kanban.clearAddingCardInColumnId();\n }, onCancel: kanban.clearAddingCardInColumnId }))), editingColumn && kanban.config.allowColumnEdit && (config?.renderEditColumnForm ? (config.renderEditColumnForm({\n column: editingColumn,\n onSave: (updates) => {\n kanban.updateColumn(editingColumn.id, updates);\n kanban.clearEditingColumnId();\n },\n onCancel: kanban.clearEditingColumnId,\n onDelete: kanban.config.allowColumnDelete ? () => {\n kanban.deleteColumn(editingColumn.id);\n kanban.clearEditingColumnId();\n } : undefined\n })) : (_jsx(DefaultEditColumnForm, { column: editingColumn, onSave: (updates) => {\n kanban.updateColumn(editingColumn.id, updates);\n kanban.clearEditingColumnId();\n }, onCancel: kanban.clearEditingColumnId, onDelete: kanban.config.allowColumnDelete ? () => {\n kanban.deleteColumn(editingColumn.id);\n kanban.clearEditingColumnId();\n } : undefined }))), viewingCard && (finalConfig.renderCardView ? (finalConfig.renderCardView({\n card: viewingCard,\n onClose: kanban.clearViewingCardId\n })) : (_jsx(DefaultCardView, { card: viewingCard, onClose: kanban.clearViewingCardId }))), _jsxs(DragOverlay, { dropAnimation: null, children: [activeCard && (_jsx(\"div\", { className: \"z-50 cursor-grabbing animate-tilt shadow-2xl rounded-card overflow-hidden\", children: finalConfig.renderCard({\n card: activeCard,\n isDragging: true\n }) })), activeColumn ? (_jsx(KanbanColumn, { column: activeColumn, allCards: kanban.cards, activeId: null, overId: null, overSide: null, config: finalConfig, isDragging: false, isOverlay: true, dragHandleProps: {\n attributes: {},\n listeners: {}\n } })) : null] })] }) }));\n}\n","/**\n * Zustand selectors for optimized component subscriptions\n * Components should use these instead of subscribing to the entire store\n */\n// === CARD SELECTORS ===\nexport const selectCard = (cardId) => (state) => state.cards[cardId];\nexport const selectAllCards = (state) => state.cards;\nexport const selectCardsByIds = (cardIds) => (state) => cardIds.map(id => state.cards[id]).filter(Boolean);\n// === COLUMN SELECTORS ===\nexport const selectColumn = (columnId) => (state) => state.columns[columnId];\nexport const selectAllColumns = (state) => state.columns;\nexport const selectColumnOrder = (state) => state.columnOrder;\nexport const selectColumnCards = (columnId) => (state) => {\n const column = state.columns[columnId];\n if (!column)\n return [];\n return column.cardIds.map(id => state.cards[id]).filter(Boolean);\n};\nexport const selectColumnCardIds = (columnId) => (state) => {\n const column = state.columns[columnId];\n return column?.cardIds || [];\n};\n// === ACTIONS SELECTORS ===\n// Note: CRUD actions will be added in future implementation\nexport const selectMoveCard = (state) => state.moveCard;\nexport const selectMoveColumn = (state) => state.moveColumn;\nexport const selectSetBoardData = (state) => state.setBoardData;\n// === UTILITY SELECTORS ===\nexport const selectBoardData = (state) => ({\n cards: state.cards,\n columns: state.columns,\n columnOrder: state.columnOrder,\n});\nexport const selectCardCount = (state) => Object.keys(state.cards).length;\nexport const selectColumnCount = (state) => state.columnOrder.length;\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { useEffect, useState, useRef } from 'react';\nexport const useFPS = () => {\n const [fps, setFps] = useState(0);\n const frameCount = useRef(0);\n const lastTime = useRef(performance.now());\n useEffect(() => {\n let animationFrameId;\n const measure = (time) => {\n frameCount.current++;\n const delta = time - lastTime.current;\n if (delta >= 1000) {\n setFps(Math.round((frameCount.current * 1000) / delta));\n frameCount.current = 0;\n lastTime.current = time;\n }\n animationFrameId = requestAnimationFrame(measure);\n };\n animationFrameId = requestAnimationFrame(measure);\n return () => {\n cancelAnimationFrame(animationFrameId);\n };\n }, []);\n return fps;\n};\nexport const BenchmarkStats = ({ cardCount, columnCount }) => {\n const fps = useFPS();\n const [minFps, setMinFps] = useState(60);\n const [maxFps, setMaxFps] = useState(0);\n const [isStressTesting, setIsStressTesting] = useState(false);\n useEffect(() => {\n if (fps > 0) {\n if (fps < minFps)\n setMinFps(fps);\n if (fps > maxFps)\n setMaxFps(fps);\n }\n }, [fps]);\n useEffect(() => {\n if (!isStressTesting)\n return;\n const columns = document.querySelectorAll('.overflow-y-auto');\n let direction = 1;\n let speed = 2;\n let animationId;\n const autoScroll = () => {\n columns.forEach(col => {\n col.scrollTop += speed * direction;\n if (col.scrollTop >= col.scrollHeight - col.clientHeight)\n direction = -1;\n if (col.scrollTop <= 0)\n direction = 1;\n });\n animationId = requestAnimationFrame(autoScroll);\n };\n animationId = requestAnimationFrame(autoScroll);\n return () => cancelAnimationFrame(animationId);\n }, [isStressTesting]);\n return (_jsxs(\"div\", { className: \"fixed bottom-4 right-4 bg-slate-900/90 text-white p-4 rounded-lg shadow-lg backdrop-blur-sm z-50 font-mono text-sm\", children: [_jsxs(\"div\", { className: \"flex items-center justify-between mb-2 gap-2\", children: [_jsx(\"h3\", { className: \"font-bold text-blue-400\", children: \"\\u26A1 Performance Stats\" }), _jsx(\"button\", { onClick: () => setIsStressTesting(!isStressTesting), className: `text-xs px-2 py-1 rounded ${isStressTesting ? 'bg-red-500 hover:bg-red-600' : 'bg-blue-600 hover:bg-blue-700'}`, children: isStressTesting ? 'Stop Stress Test' : 'Start Stress Test' })] }), _jsxs(\"div\", { className: \"grid grid-cols-2 gap-x-4 gap-y-1\", children: [_jsx(\"span\", { className: \"text-slate-400\", children: \"FPS:\" }), _jsx(\"span\", { className: `font-bold ${fps < 30 ? 'text-red-400' : fps < 50 ? 'text-yellow-400' : 'text-green-400'}`, children: fps }), _jsx(\"span\", { className: \"text-slate-400\", children: \"Min FPS:\" }), _jsx(\"span\", { className: \"text-slate-200\", children: minFps }), _jsx(\"span\", { className: \"text-slate-400\", children: \"Cards:\" }), _jsx(\"span\", { className: \"text-slate-200\", children: cardCount }), _jsx(\"span\", { className: \"text-slate-400\", children: \"Columns:\" }), _jsx(\"span\", { className: \"text-slate-200\", children: columnCount })] })] }));\n};\n"],"names":["cn","inputs","twMerge","clsx","generateId","useKanbanStore","create","devtools","set","columnId","cardData","cardId","newCard","state","column","updates","card","deletedCard","remainingCards","updatedColumns","colId","id","newCardId","duplicatedCard","cardIndex","newCardIds","columnData","position","newColumn","newColumnOrder","insertPosition","moveCardsTo","deletedColumn","remainingColumns","updatedCards","targetCol","firstColumnId","targetColId","sourceColId","newIndex","sourceCol","newSourceCardIds","newTargetCardIds","updatedCard","newOrder","query","group","groupId","g","ruleId","r","filters","data","config","activeId","viewingCardId","editingCardId","addingCardInColumnId","editingColumnId","useKanban","store","setActiveId","useState","overId","setOverId","overSide","setOverSide","handleDragStart","useCallback","handleDragOver","side","handleDragEnd","moveCard","sourceColumnId","targetColumnId","index","useKanbanDnd","dragActivationDistance","touchActivationDelay","onDragStart","onDragOver","onDragEnd","onCardMove","onColumnMove","onCreateColumnWithCard","columns","columnOrder","recentlyMovedToNewContainer","columnsRef","useRef","columnOrderRef","useEffect","dragPositionRef","useSensors","useSensor","MouseSensor","TouchSensor","KeyboardSensor","event","type","active","over","currentColumns","currentOrder","overRect","activeRect","overCenterX","overCenterY","overCol","col","overIndex","currentIndex","activeColumn","overColumn","finalIndex","pos","evaluateFilter","titleMatch","descMatch","metadataMatch","val","evaluateGroup","conjunction","rules","rule","evaluateRule","value","getNestedValue","target","obj","path","acc","part","DefaultCard","memo","isDragging","tags","members","commentsCount","attachmentsCount","dueDate","priority","priorityColors","_jsxs","_jsx","tag","i","MoreHorizontal","m","Calendar","MessageSquare","Paperclip","prevProps","nextProps","DefaultColumnEmpty","DefaultColumnHeader","cardCount","isOver","dragHandleProps","onAddCard","onEditColumn","e","GripVertical","Plus","Dialog","DialogPrimitive","DialogPortal","DialogOverlay","React","className","props","ref","DialogContent","children","X","DialogHeader","DialogFooter","DialogTitle","DialogDescription","buttonVariants","cva","Button","variant","size","asChild","Comp","Slot","DefaultEditForm","onSave","onCancel","onDelete","title","setTitle","description","setDescription","handleSubmit","open","Trash2","Save","DefaultCardView","onClose","otherMetadata","pConfig","AlignLeft","User","Tag","Info","key","FilterChips","removeFilterRule","clearFilters","activeRules","RotateCcw","heightCache","useKanbanColumn","cardIds","estimatedCardHeight","baseOverscan","parentRef","scrollVelocity","setScrollVelocity","element","lastScrollTop","lastTime","rafId","handleScroll","now","scrollTop","deltaTime","deltaScroll","velocity","throttledScroll","dynamicOverscan","useMemo","rowVirtualizer","useVirtualizer","cached","height","AddCardButton","onClick","KanbanCardInner","renderCard","onEdit","allowEdit","attributes","listeners","setNodeRef","transform","transition","isSortableDragging","useSortable","style","CSS","handleClick","cardContent","KanbanCard","KanbanColumnInner","allCards","isActiveColumnDragging","isOverlay","setAddingCardInColumnId","setEditingColumnId","isColumnOver","handleColumnClick","SortableContext","verticalListSortingStrategy","virtualRow","isActive","KanbanColumn","Sheet","SheetPrimitive","SheetTrigger","SheetPortal","SheetOverlay","sheetVariants","SheetContent","SheetHeader","SheetTitle","SheetDescription","FilterGroup","availableFields","updateFilterGroup","removeFilterGroup","handleAddRule","newRule","handleRemoveRule","handleUpdateRule","toggleConjunction","FilterRuleRow","onUpdate","operators","f","o","discoverFields","cards","fields","KanbanFilterDrawer","addFilterGroup","handleAddGroup","newGroup","Filter","DefaultAddCardForm","_columnId","onAdd","setPriority","p","DefaultEditColumnForm","DroppableNewColumnButton","useDroppable","_Fragment","SortableVirtualColumn","start","width","allowReorder","isValidElement","cloneElement","KanboomBoard","kanban","columnVirtualizer","filteredData","filteredCards","filteredColumns","lastOverId","dnd","_type","activeCard","viewingCard","editingColumn","finalConfig","customCollisionDetection","args","closestCenter","pointerCollisions","pointerWithin","newColumnCollision","c","intersections","rectIntersection","getFirstCollision","containerItems","container","collisions","DndContext","MeasuringStrategy","horizontalListSortingStrategy","virtualColumn","editingCard","DragOverlay","selectCard","selectAllCards","selectCardsByIds","selectColumn","selectAllColumns","selectColumnOrder","selectColumnCards","selectColumnCardIds","selectMoveCard","selectMoveColumn","selectSetBoardData","selectBoardData","selectCardCount","selectColumnCount","useFPS","fps","setFps","frameCount","animationFrameId","measure","time","delta","BenchmarkStats","columnCount","minFps","setMinFps","maxFps","setMaxFps","isStressTesting","setIsStressTesting","direction","speed","animationId","autoScroll"],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "kanbase",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "High-performance, enterprise-grade Kanban component for React with virtualization, advanced filtering, and fluid precision interactions",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/kanbase.umd.js",
|
|
7
|
+
"module": "./dist/kanbase.es.js",
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"files": [
|
|
10
|
+
"dist",
|
|
11
|
+
"assets",
|
|
12
|
+
"README.md"
|
|
13
|
+
],
|
|
14
|
+
"exports": {
|
|
15
|
+
".": {
|
|
16
|
+
"types": "./dist/index.d.ts",
|
|
17
|
+
"import": "./dist/kanbase.es.js",
|
|
18
|
+
"require": "./dist/kanbase.umd.js"
|
|
19
|
+
},
|
|
20
|
+
"./package.json": "./package.json"
|
|
21
|
+
},
|
|
22
|
+
"typesVersions": {
|
|
23
|
+
"*": {
|
|
24
|
+
"*": [
|
|
25
|
+
"./dist/index.d.ts"
|
|
26
|
+
]
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
"sideEffects": [
|
|
30
|
+
"./dist/kanbase.es.js",
|
|
31
|
+
"./dist/kanbase.umd.js"
|
|
32
|
+
],
|
|
33
|
+
"scripts": {
|
|
34
|
+
"dev": "vite",
|
|
35
|
+
"build": "tsc -b && vite build",
|
|
36
|
+
"build:lib": "tsc -b && vite build",
|
|
37
|
+
"lint": "eslint .",
|
|
38
|
+
"preview": "vite preview",
|
|
39
|
+
"prepublishOnly": "npm run build"
|
|
40
|
+
},
|
|
41
|
+
"keywords": [
|
|
42
|
+
"kanban",
|
|
43
|
+
"kanban-board",
|
|
44
|
+
"react",
|
|
45
|
+
"react-component",
|
|
46
|
+
"drag-and-drop",
|
|
47
|
+
"virtualization",
|
|
48
|
+
"typescript",
|
|
49
|
+
"zustand",
|
|
50
|
+
"dnd-kit",
|
|
51
|
+
"task-management",
|
|
52
|
+
"project-management",
|
|
53
|
+
"workflow"
|
|
54
|
+
],
|
|
55
|
+
"author": "wesleyxmns",
|
|
56
|
+
"license": "MIT",
|
|
57
|
+
"repository": {
|
|
58
|
+
"type": "git",
|
|
59
|
+
"url": "git+https://github.com/wesleyxmns/kanbase.git"
|
|
60
|
+
},
|
|
61
|
+
"bugs": {
|
|
62
|
+
"url": "https://github.com/wesleyxmns/kanbase/issues"
|
|
63
|
+
},
|
|
64
|
+
"homepage": "https://github.com/wesleyxmns/kanbase#readme",
|
|
65
|
+
"peerDependencies": {
|
|
66
|
+
"react": ">=18.0.0",
|
|
67
|
+
"react-dom": ">=18.0.0",
|
|
68
|
+
"tailwindcss": ">=3.0.0"
|
|
69
|
+
},
|
|
70
|
+
"peerDependenciesMeta": {
|
|
71
|
+
"tailwindcss": {
|
|
72
|
+
"optional": false
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
"dependencies": {
|
|
76
|
+
"@dnd-kit/core": "^6.3.1",
|
|
77
|
+
"@dnd-kit/sortable": "^10.0.0",
|
|
78
|
+
"@dnd-kit/utilities": "^3.2.2",
|
|
79
|
+
"@radix-ui/react-dialog": "^1.1.15",
|
|
80
|
+
"@radix-ui/react-slot": "^1.2.4",
|
|
81
|
+
"@tanstack/react-virtual": "^3.13.17",
|
|
82
|
+
"class-variance-authority": "^0.7.1",
|
|
83
|
+
"clsx": "^2.1.1",
|
|
84
|
+
"lodash.get": "^4.4.2",
|
|
85
|
+
"lucide-react": "^0.562.0",
|
|
86
|
+
"tailwind-merge": "^3.4.0",
|
|
87
|
+
"zustand": "^5.0.9"
|
|
88
|
+
},
|
|
89
|
+
"devDependencies": {
|
|
90
|
+
"@eslint/js": "^9.39.1",
|
|
91
|
+
"@tailwindcss/vite": "^4.1.18",
|
|
92
|
+
"@types/node": "^24.10.1",
|
|
93
|
+
"@types/react": "^19.2.5",
|
|
94
|
+
"@types/react-dom": "^19.2.3",
|
|
95
|
+
"@vitejs/plugin-react-swc": "^4.2.2",
|
|
96
|
+
"eslint": "^9.39.1",
|
|
97
|
+
"eslint-plugin-react-hooks": "^7.0.1",
|
|
98
|
+
"eslint-plugin-react-refresh": "^0.4.24",
|
|
99
|
+
"globals": "^16.5.0",
|
|
100
|
+
"react": "^19.2.0",
|
|
101
|
+
"react-dom": "^19.2.0",
|
|
102
|
+
"tailwindcss": "^4.1.18",
|
|
103
|
+
"typescript": "~5.9.3",
|
|
104
|
+
"typescript-eslint": "^8.46.4",
|
|
105
|
+
"vite": "^7.2.4",
|
|
106
|
+
"vite-plugin-dts": "^4.5.4"
|
|
107
|
+
},
|
|
108
|
+
"engines": {
|
|
109
|
+
"node": ">=18.0.0",
|
|
110
|
+
"npm": ">=9.0.0"
|
|
111
|
+
}
|
|
112
|
+
}
|