@hanzo/ui 5.3.32 → 5.3.33

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.
@@ -0,0 +1,572 @@
1
+ "use client";
2
+ import * as React from 'react';
3
+ import { useSensors, useSensor, PointerSensor, DndContext, closestCorners, DragOverlay } from '@dnd-kit/core';
4
+ import { arrayMove, useSortable, SortableContext, verticalListSortingStrategy } from '@dnd-kit/sortable';
5
+ import { CSS } from '@dnd-kit/utilities';
6
+ import { cva } from 'class-variance-authority';
7
+ import { Search, User, Calendar, MoreHorizontal, Edit3, X, Plus } from 'lucide-react';
8
+ import { cn } from '@hanzo/ui/lib/utils';
9
+ import { Badge } from '@hanzo/ui/primitives/badge';
10
+ import { Button } from '@hanzo/ui/primitives/button';
11
+ import { Card, CardHeader } from '@hanzo/ui/primitives/card';
12
+ import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogFooter } from '@hanzo/ui/primitives/dialog';
13
+ import { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem } from '@hanzo/ui/primitives/dropdown-menu';
14
+ import { Input } from '@hanzo/ui/primitives/input';
15
+ import { Label } from '@hanzo/ui/primitives/label';
16
+ import { Select, SelectTrigger, SelectValue, SelectContent, SelectItem } from '@hanzo/ui/primitives/select';
17
+ import { Textarea } from '@hanzo/ui/primitives/textarea';
18
+ import { jsxs, jsx } from 'react/jsx-runtime';
19
+
20
+ var __defProp = Object.defineProperty;
21
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
22
+ var priorityVariants = cva(
23
+ "inline-flex items-center rounded-full border px-2 py-0.5 text-xs font-semibold",
24
+ {
25
+ variants: {
26
+ priority: {
27
+ low: "border-blue-200 bg-blue-50 text-blue-700 dark:border-blue-800 dark:bg-blue-900/20 dark:text-blue-400",
28
+ medium: "border-yellow-200 bg-yellow-50 text-yellow-700 dark:border-yellow-800 dark:bg-yellow-900/20 dark:text-yellow-400",
29
+ high: "border-orange-200 bg-orange-50 text-orange-700 dark:border-orange-800 dark:bg-orange-900/20 dark:text-orange-400",
30
+ urgent: "border-red-200 bg-red-50 text-red-700 dark:border-red-800 dark:bg-red-900/20 dark:text-red-400"
31
+ }
32
+ },
33
+ defaultVariants: {
34
+ priority: "low"
35
+ }
36
+ }
37
+ );
38
+ function SortableCard({
39
+ card,
40
+ onEdit,
41
+ onDelete
42
+ }) {
43
+ const {
44
+ attributes,
45
+ listeners,
46
+ setNodeRef,
47
+ transform,
48
+ transition,
49
+ isDragging
50
+ } = useSortable({ id: card.id });
51
+ const style = {
52
+ transform: CSS.Transform.toString(transform),
53
+ transition
54
+ };
55
+ return /* @__PURE__ */ jsx(
56
+ "div",
57
+ {
58
+ ref: setNodeRef,
59
+ style,
60
+ ...attributes,
61
+ ...listeners,
62
+ className: cn(
63
+ "cursor-grab active:cursor-grabbing",
64
+ isDragging && "opacity-50"
65
+ ),
66
+ children: /* @__PURE__ */ jsx(KanbanCardComponent, { card, onEdit, onDelete })
67
+ }
68
+ );
69
+ }
70
+ __name(SortableCard, "SortableCard");
71
+ function KanbanCardComponent({
72
+ card,
73
+ onEdit,
74
+ onDelete
75
+ }) {
76
+ return /* @__PURE__ */ jsx(Card, { className: "mb-3 group hover:shadow-md transition-shadow", children: /* @__PURE__ */ jsx(CardHeader, { className: "pb-3", children: /* @__PURE__ */ jsx("div", { className: "flex items-start justify-between", children: /* @__PURE__ */ jsxs("div", { className: "flex-1 min-w-0", children: [
77
+ /* @__PURE__ */ jsx("h4", { className: "font-medium text-sm leading-tight mb-2 break-words", children: card.title }),
78
+ card.description && /* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground line-clamp-2 mb-2", children: card.description }),
79
+ card.labels && card.labels.length > 0 && /* @__PURE__ */ jsx("div", { className: "flex flex-wrap gap-1 mb-2", children: card.labels.map((label) => /* @__PURE__ */ jsx(
80
+ Badge,
81
+ {
82
+ variant: "outline",
83
+ className: "text-xs h-5",
84
+ style: {
85
+ backgroundColor: `${label.color}20`,
86
+ borderColor: label.color,
87
+ color: label.color
88
+ },
89
+ children: label.name
90
+ },
91
+ label.id
92
+ )) }),
93
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between text-xs", children: [
94
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
95
+ card.priority && /* @__PURE__ */ jsx(
96
+ "span",
97
+ {
98
+ className: cn(
99
+ priorityVariants({ priority: card.priority })
100
+ ),
101
+ children: card.priority
102
+ }
103
+ ),
104
+ card.assignee && /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1 text-muted-foreground", children: [
105
+ /* @__PURE__ */ jsx(User, { className: "h-3 w-3" }),
106
+ /* @__PURE__ */ jsx("span", { children: card.assignee })
107
+ ] })
108
+ ] }),
109
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1", children: [
110
+ card.dueDate && /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1 text-muted-foreground", children: [
111
+ /* @__PURE__ */ jsx(Calendar, { className: "h-3 w-3" }),
112
+ /* @__PURE__ */ jsx("span", { children: new Date(card.dueDate).toLocaleDateString() })
113
+ ] }),
114
+ /* @__PURE__ */ jsxs(DropdownMenu, { children: [
115
+ /* @__PURE__ */ jsx(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsx(
116
+ Button,
117
+ {
118
+ variant: "ghost",
119
+ size: "icon",
120
+ className: "h-6 w-6 opacity-0 group-hover:opacity-100 transition-opacity",
121
+ children: /* @__PURE__ */ jsx(MoreHorizontal, { className: "h-3 w-3" })
122
+ }
123
+ ) }),
124
+ /* @__PURE__ */ jsxs(DropdownMenuContent, { align: "end", children: [
125
+ /* @__PURE__ */ jsxs(DropdownMenuItem, { onClick: () => onEdit(card), children: [
126
+ /* @__PURE__ */ jsx(Edit3, { className: "h-4 w-4 mr-2" }),
127
+ "Edit"
128
+ ] }),
129
+ /* @__PURE__ */ jsxs(
130
+ DropdownMenuItem,
131
+ {
132
+ onClick: () => onDelete(card.id),
133
+ className: "text-destructive",
134
+ children: [
135
+ /* @__PURE__ */ jsx(X, { className: "h-4 w-4 mr-2" }),
136
+ "Delete"
137
+ ]
138
+ }
139
+ )
140
+ ] })
141
+ ] })
142
+ ] })
143
+ ] })
144
+ ] }) }) }) });
145
+ }
146
+ __name(KanbanCardComponent, "KanbanCardComponent");
147
+ function KanbanColumnComponent({
148
+ column,
149
+ onAddCard,
150
+ onEditCard,
151
+ onDeleteCard
152
+ }) {
153
+ const { setNodeRef } = useSortable({ id: column.id });
154
+ return /* @__PURE__ */ jsxs(
155
+ "div",
156
+ {
157
+ ref: setNodeRef,
158
+ className: "bg-muted/50 rounded-lg p-4 min-w-[280px] max-w-[280px] flex flex-col",
159
+ children: [
160
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between mb-4", children: [
161
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
162
+ /* @__PURE__ */ jsx("h3", { className: "font-semibold text-sm", children: column.title }),
163
+ /* @__PURE__ */ jsxs(Badge, { variant: "secondary", className: "text-xs", children: [
164
+ column.cards.length,
165
+ column.limit && `/${column.limit}`
166
+ ] })
167
+ ] }),
168
+ /* @__PURE__ */ jsx(
169
+ Button,
170
+ {
171
+ variant: "ghost",
172
+ size: "icon",
173
+ className: "h-8 w-8",
174
+ onClick: () => onAddCard(column.id),
175
+ children: /* @__PURE__ */ jsx(Plus, { className: "h-4 w-4" })
176
+ }
177
+ )
178
+ ] }),
179
+ /* @__PURE__ */ jsx(
180
+ SortableContext,
181
+ {
182
+ items: column.cards.map((card) => card.id),
183
+ strategy: verticalListSortingStrategy,
184
+ children: /* @__PURE__ */ jsx("div", { className: "flex-1 min-h-[200px]", children: column.cards.map((card) => /* @__PURE__ */ jsx(
185
+ SortableCard,
186
+ {
187
+ card,
188
+ onEdit: onEditCard,
189
+ onDelete: onDeleteCard
190
+ },
191
+ card.id
192
+ )) })
193
+ }
194
+ )
195
+ ]
196
+ }
197
+ );
198
+ }
199
+ __name(KanbanColumnComponent, "KanbanColumnComponent");
200
+ function CardFormDialog({
201
+ open,
202
+ onOpenChange,
203
+ card,
204
+ onSave,
205
+ labels
206
+ }) {
207
+ const [formData, setFormData] = React.useState({
208
+ title: card?.title || "",
209
+ description: card?.description || "",
210
+ priority: card?.priority || "low",
211
+ assignee: card?.assignee || "",
212
+ dueDate: card?.dueDate || "",
213
+ labels: card?.labels?.map((l) => l.id) || []
214
+ });
215
+ const handleSubmit = /* @__PURE__ */ __name((e) => {
216
+ e.preventDefault();
217
+ if (!formData.title.trim()) return;
218
+ onSave({
219
+ ...card,
220
+ ...formData,
221
+ labels: labels.filter((l) => formData.labels.includes(l.id)),
222
+ updatedAt: (/* @__PURE__ */ new Date()).toISOString()
223
+ });
224
+ onOpenChange(false);
225
+ }, "handleSubmit");
226
+ React.useEffect(() => {
227
+ if (card) {
228
+ setFormData({
229
+ title: card.title,
230
+ description: card.description || "",
231
+ priority: card.priority || "low",
232
+ assignee: card.assignee || "",
233
+ dueDate: card.dueDate || "",
234
+ labels: card.labels?.map((l) => l.id) || []
235
+ });
236
+ } else {
237
+ setFormData({
238
+ title: "",
239
+ description: "",
240
+ priority: "low",
241
+ assignee: "",
242
+ dueDate: "",
243
+ labels: []
244
+ });
245
+ }
246
+ }, [card]);
247
+ return /* @__PURE__ */ jsx(Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxs(DialogContent, { className: "max-w-md", children: [
248
+ /* @__PURE__ */ jsxs(DialogHeader, { children: [
249
+ /* @__PURE__ */ jsx(DialogTitle, { children: card ? "Edit Card" : "Create Card" }),
250
+ /* @__PURE__ */ jsx(DialogDescription, { children: card ? "Update the card details below." : "Create a new card for your kanban board." })
251
+ ] }),
252
+ /* @__PURE__ */ jsxs("form", { onSubmit: handleSubmit, className: "space-y-4", children: [
253
+ /* @__PURE__ */ jsxs("div", { children: [
254
+ /* @__PURE__ */ jsx(Label, { htmlFor: "title", children: "Title *" }),
255
+ /* @__PURE__ */ jsx(
256
+ Input,
257
+ {
258
+ id: "title",
259
+ value: formData.title,
260
+ onChange: (e) => setFormData((prev) => ({ ...prev, title: e.target.value })),
261
+ placeholder: "Enter card title...",
262
+ required: true
263
+ }
264
+ )
265
+ ] }),
266
+ /* @__PURE__ */ jsxs("div", { children: [
267
+ /* @__PURE__ */ jsx(Label, { htmlFor: "description", children: "Description" }),
268
+ /* @__PURE__ */ jsx(
269
+ Textarea,
270
+ {
271
+ id: "description",
272
+ value: formData.description,
273
+ onChange: (e) => setFormData((prev) => ({
274
+ ...prev,
275
+ description: e.target.value
276
+ })),
277
+ placeholder: "Enter card description...",
278
+ rows: 3
279
+ }
280
+ )
281
+ ] }),
282
+ /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-2 gap-4", children: [
283
+ /* @__PURE__ */ jsxs("div", { children: [
284
+ /* @__PURE__ */ jsx(Label, { htmlFor: "priority", children: "Priority" }),
285
+ /* @__PURE__ */ jsxs(
286
+ Select,
287
+ {
288
+ value: formData.priority,
289
+ onValueChange: (value) => setFormData((prev) => ({ ...prev, priority: value })),
290
+ children: [
291
+ /* @__PURE__ */ jsx(SelectTrigger, { children: /* @__PURE__ */ jsx(SelectValue, {}) }),
292
+ /* @__PURE__ */ jsxs(SelectContent, { children: [
293
+ /* @__PURE__ */ jsx(SelectItem, { value: "low", children: "Low" }),
294
+ /* @__PURE__ */ jsx(SelectItem, { value: "medium", children: "Medium" }),
295
+ /* @__PURE__ */ jsx(SelectItem, { value: "high", children: "High" }),
296
+ /* @__PURE__ */ jsx(SelectItem, { value: "urgent", children: "Urgent" })
297
+ ] })
298
+ ]
299
+ }
300
+ )
301
+ ] }),
302
+ /* @__PURE__ */ jsxs("div", { children: [
303
+ /* @__PURE__ */ jsx(Label, { htmlFor: "assignee", children: "Assignee" }),
304
+ /* @__PURE__ */ jsx(
305
+ Input,
306
+ {
307
+ id: "assignee",
308
+ value: formData.assignee,
309
+ onChange: (e) => setFormData((prev) => ({ ...prev, assignee: e.target.value })),
310
+ placeholder: "Assign to..."
311
+ }
312
+ )
313
+ ] })
314
+ ] }),
315
+ /* @__PURE__ */ jsxs("div", { children: [
316
+ /* @__PURE__ */ jsx(Label, { htmlFor: "dueDate", children: "Due Date" }),
317
+ /* @__PURE__ */ jsx(
318
+ Input,
319
+ {
320
+ id: "dueDate",
321
+ type: "date",
322
+ value: formData.dueDate,
323
+ onChange: (e) => setFormData((prev) => ({ ...prev, dueDate: e.target.value }))
324
+ }
325
+ )
326
+ ] }),
327
+ /* @__PURE__ */ jsxs(DialogFooter, { children: [
328
+ /* @__PURE__ */ jsx(
329
+ Button,
330
+ {
331
+ type: "button",
332
+ variant: "outline",
333
+ onClick: () => onOpenChange(false),
334
+ children: "Cancel"
335
+ }
336
+ ),
337
+ /* @__PURE__ */ jsxs(Button, { type: "submit", children: [
338
+ card ? "Update" : "Create",
339
+ " Card"
340
+ ] })
341
+ ] })
342
+ ] })
343
+ ] }) });
344
+ }
345
+ __name(CardFormDialog, "CardFormDialog");
346
+ function KanbanBoard({
347
+ board,
348
+ onUpdateBoard,
349
+ className
350
+ }) {
351
+ const [activeCard, setActiveCard] = React.useState(null);
352
+ const [searchQuery, setSearchQuery] = React.useState("");
353
+ const [cardFormOpen, setCardFormOpen] = React.useState(false);
354
+ const [editingCard, setEditingCard] = React.useState(
355
+ void 0
356
+ );
357
+ const [activeColumnId, setActiveColumnId] = React.useState("");
358
+ const sensors = useSensors(
359
+ useSensor(PointerSensor, {
360
+ activationConstraint: {
361
+ distance: 8
362
+ }
363
+ })
364
+ );
365
+ const filteredBoard = React.useMemo(() => {
366
+ if (!searchQuery.trim()) return board;
367
+ const filtered = {
368
+ ...board,
369
+ columns: board.columns.map((column) => ({
370
+ ...column,
371
+ cards: column.cards.filter(
372
+ (card) => card.title.toLowerCase().includes(searchQuery.toLowerCase()) || card.description?.toLowerCase().includes(searchQuery.toLowerCase()) || card.labels?.some(
373
+ (label) => label.name.toLowerCase().includes(searchQuery.toLowerCase())
374
+ )
375
+ )
376
+ }))
377
+ };
378
+ return filtered;
379
+ }, [board, searchQuery]);
380
+ const handleDragStart = /* @__PURE__ */ __name((event) => {
381
+ const { active } = event;
382
+ const card = board.columns.flatMap((col) => col.cards).find((card2) => card2.id === active.id);
383
+ setActiveCard(card || null);
384
+ }, "handleDragStart");
385
+ const handleDragOver = /* @__PURE__ */ __name((event) => {
386
+ const { active, over } = event;
387
+ if (!over) return;
388
+ const activeId = active.id;
389
+ const overId = over.id;
390
+ const activeContainer = findContainer(activeId);
391
+ const overContainer = findContainer(overId);
392
+ if (!activeContainer || !overContainer || activeContainer === overContainer) {
393
+ return;
394
+ }
395
+ const updatedBoard = { ...board };
396
+ const activeColumnIndex = updatedBoard.columns.findIndex(
397
+ (col) => col.id === activeContainer
398
+ );
399
+ const overColumnIndex = updatedBoard.columns.findIndex(
400
+ (col) => col.id === overContainer
401
+ );
402
+ const activeColumn = updatedBoard.columns[activeColumnIndex];
403
+ const overColumn = updatedBoard.columns[overColumnIndex];
404
+ const activeCardIndex = activeColumn.cards.findIndex(
405
+ (card) => card.id === activeId
406
+ );
407
+ const [movedCard] = activeColumn.cards.splice(activeCardIndex, 1);
408
+ if (overColumn.limit && overColumn.cards.length >= overColumn.limit) {
409
+ return;
410
+ }
411
+ overColumn.cards.push(movedCard);
412
+ onUpdateBoard(updatedBoard);
413
+ }, "handleDragOver");
414
+ const handleDragEnd = /* @__PURE__ */ __name((event) => {
415
+ const { active, over } = event;
416
+ setActiveCard(null);
417
+ if (!over) return;
418
+ const activeId = active.id;
419
+ const overId = over.id;
420
+ const activeContainer = findContainer(activeId);
421
+ const overContainer = findContainer(overId);
422
+ if (!activeContainer || !overContainer) return;
423
+ const activeColumnIndex = board.columns.findIndex(
424
+ (col) => col.id === activeContainer
425
+ );
426
+ const activeColumn = board.columns[activeColumnIndex];
427
+ if (activeContainer === overContainer) {
428
+ const oldIndex = activeColumn.cards.findIndex(
429
+ (card) => card.id === activeId
430
+ );
431
+ const newIndex = activeColumn.cards.findIndex(
432
+ (card) => card.id === overId
433
+ );
434
+ if (oldIndex !== newIndex) {
435
+ const updatedBoard = { ...board };
436
+ updatedBoard.columns[activeColumnIndex].cards = arrayMove(
437
+ activeColumn.cards,
438
+ oldIndex,
439
+ newIndex
440
+ );
441
+ onUpdateBoard(updatedBoard);
442
+ }
443
+ }
444
+ }, "handleDragEnd");
445
+ const findContainer = /* @__PURE__ */ __name((id) => {
446
+ if (board.columns.some((col) => col.id === id)) {
447
+ return id;
448
+ }
449
+ return board.columns.find((col) => col.cards.some((card) => card.id === id))?.id;
450
+ }, "findContainer");
451
+ const handleAddCard = /* @__PURE__ */ __name((columnId) => {
452
+ setActiveColumnId(columnId);
453
+ setEditingCard(void 0);
454
+ setCardFormOpen(true);
455
+ }, "handleAddCard");
456
+ const handleEditCard = /* @__PURE__ */ __name((card) => {
457
+ setEditingCard(card);
458
+ setActiveColumnId("");
459
+ setCardFormOpen(true);
460
+ }, "handleEditCard");
461
+ const handleSaveCard = /* @__PURE__ */ __name((cardData) => {
462
+ const updatedBoard = { ...board };
463
+ if (editingCard) {
464
+ const columnIndex = updatedBoard.columns.findIndex(
465
+ (col) => col.cards.some((card) => card.id === editingCard.id)
466
+ );
467
+ if (columnIndex !== -1) {
468
+ const cardIndex = updatedBoard.columns[columnIndex].cards.findIndex(
469
+ (card) => card.id === editingCard.id
470
+ );
471
+ if (cardIndex !== -1) {
472
+ updatedBoard.columns[columnIndex].cards[cardIndex] = {
473
+ ...editingCard,
474
+ ...cardData
475
+ };
476
+ }
477
+ }
478
+ } else {
479
+ const columnIndex = updatedBoard.columns.findIndex(
480
+ (col) => col.id === activeColumnId
481
+ );
482
+ if (columnIndex !== -1) {
483
+ const newCard = {
484
+ id: `card-${Date.now()}`,
485
+ title: cardData.title,
486
+ description: cardData.description,
487
+ labels: cardData.labels,
488
+ priority: cardData.priority,
489
+ assignee: cardData.assignee,
490
+ dueDate: cardData.dueDate,
491
+ createdAt: (/* @__PURE__ */ new Date()).toISOString(),
492
+ updatedAt: (/* @__PURE__ */ new Date()).toISOString()
493
+ };
494
+ updatedBoard.columns[columnIndex].cards.push(newCard);
495
+ }
496
+ }
497
+ onUpdateBoard(updatedBoard);
498
+ }, "handleSaveCard");
499
+ const handleDeleteCard = /* @__PURE__ */ __name((cardId) => {
500
+ const updatedBoard = { ...board };
501
+ const columnIndex = updatedBoard.columns.findIndex(
502
+ (col) => col.cards.some((card) => card.id === cardId)
503
+ );
504
+ if (columnIndex !== -1) {
505
+ updatedBoard.columns[columnIndex].cards = updatedBoard.columns[columnIndex].cards.filter((card) => card.id !== cardId);
506
+ onUpdateBoard(updatedBoard);
507
+ }
508
+ }, "handleDeleteCard");
509
+ return /* @__PURE__ */ jsxs("div", { className: cn("flex flex-col h-full", className), children: [
510
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between p-4 border-b", children: [
511
+ /* @__PURE__ */ jsx("h1", { className: "text-2xl font-bold", children: board.title }),
512
+ /* @__PURE__ */ jsx("div", { className: "flex items-center gap-3", children: /* @__PURE__ */ jsxs("div", { className: "relative", children: [
513
+ /* @__PURE__ */ jsx(Search, { className: "absolute left-3 top-1/2 transform -translate-y-1/2 h-4 w-4 text-muted-foreground" }),
514
+ /* @__PURE__ */ jsx(
515
+ Input,
516
+ {
517
+ placeholder: "Search cards...",
518
+ value: searchQuery,
519
+ onChange: (e) => setSearchQuery(e.target.value),
520
+ className: "pl-9 w-64"
521
+ }
522
+ )
523
+ ] }) })
524
+ ] }),
525
+ /* @__PURE__ */ jsx("div", { className: "flex-1 overflow-x-auto", children: /* @__PURE__ */ jsx("div", { className: "h-full p-4", children: /* @__PURE__ */ jsxs(
526
+ DndContext,
527
+ {
528
+ sensors,
529
+ collisionDetection: closestCorners,
530
+ onDragStart: handleDragStart,
531
+ onDragOver: handleDragOver,
532
+ onDragEnd: handleDragEnd,
533
+ children: [
534
+ /* @__PURE__ */ jsx("div", { className: "flex gap-6 h-full pb-4", children: filteredBoard.columns.map((column) => /* @__PURE__ */ jsx(
535
+ KanbanColumnComponent,
536
+ {
537
+ column,
538
+ onAddCard: handleAddCard,
539
+ onEditCard: handleEditCard,
540
+ onDeleteCard: handleDeleteCard
541
+ },
542
+ column.id
543
+ )) }),
544
+ /* @__PURE__ */ jsx(DragOverlay, { children: activeCard ? /* @__PURE__ */ jsx(
545
+ KanbanCardComponent,
546
+ {
547
+ card: activeCard,
548
+ onEdit: () => {
549
+ },
550
+ onDelete: () => {
551
+ }
552
+ }
553
+ ) : null })
554
+ ]
555
+ }
556
+ ) }) }),
557
+ /* @__PURE__ */ jsx(
558
+ CardFormDialog,
559
+ {
560
+ open: cardFormOpen,
561
+ onOpenChange: setCardFormOpen,
562
+ card: editingCard,
563
+ onSave: handleSaveCard,
564
+ labels: board.labels
565
+ }
566
+ )
567
+ ] });
568
+ }
569
+ __name(KanbanBoard, "KanbanBoard");
570
+ var kanban_default = KanbanBoard;
571
+
572
+ export { kanban_default as KanbanBoard };