maquinaweb-ui 2.48.0 → 2.49.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.
@@ -1,5 +1,5 @@
1
1
  import { FieldPath, FieldValues, UseControllerProps } from "react-hook-form";
2
- import * as react_jsx_runtime3 from "react/jsx-runtime";
2
+ import * as react_jsx_runtime4 from "react/jsx-runtime";
3
3
  import { Matcher } from "react-day-picker";
4
4
 
5
5
  //#region src/components/date-field/DateField.d.ts
@@ -29,7 +29,7 @@ declare function DateField<TFieldValues extends FieldValues = FieldValues, TFiel
29
29
  required,
30
30
  help,
31
31
  dateOnly
32
- }: DateFieldProps<TFieldValues, TFieldName>): react_jsx_runtime3.JSX.Element;
32
+ }: DateFieldProps<TFieldValues, TFieldName>): react_jsx_runtime4.JSX.Element;
33
33
  //#endregion
34
34
  export { DateField, type DateFieldProps };
35
35
  //# sourceMappingURL=date-field.d.ts.map
@@ -1,7 +1,7 @@
1
1
  import { n as Options, t as Mask } from "./with-mask-Chm8kVE1.js";
2
2
  import { FieldPath, FieldValues, UseControllerProps } from "react-hook-form";
3
3
  import { Dispatch, SetStateAction } from "react";
4
- import * as react_jsx_runtime4 from "react/jsx-runtime";
4
+ import * as react_jsx_runtime6 from "react/jsx-runtime";
5
5
  import { PopoverProps } from "@radix-ui/react-popover";
6
6
 
7
7
  //#region src/components/input-suggest/input-suggest.d.ts
@@ -71,7 +71,7 @@ declare function InputSuggest<TFieldValues extends FieldValues = FieldValues, TF
71
71
  debounceTime,
72
72
  maxWait,
73
73
  ...props
74
- }: InputSuggestProps<TFieldValues, TFieldName> & PopoverProps): react_jsx_runtime4.JSX.Element;
74
+ }: InputSuggestProps<TFieldValues, TFieldName> & PopoverProps): react_jsx_runtime6.JSX.Element;
75
75
  //#endregion
76
76
  export { InputSuggest, type InputSuggestProps };
77
77
  //# sourceMappingURL=input-suggest.d.ts.map
@@ -78,6 +78,13 @@ declare function useKanbanSelection(): {
78
78
  clearSelectedCards: () => void;
79
79
  toggleSelectedCardId: (cardId: string) => void;
80
80
  };
81
+ declare function useKanbanCardSelected(cardId: string | number): boolean;
82
+ declare function useKanbanSelectionActions(): {
83
+ setSelectedCardIds: (_cardIds: string[]) => void;
84
+ addSelectedCardId: (_cardId: string) => void;
85
+ clearSelectedCards: () => void;
86
+ toggleSelectedCardId: (_cardId: string) => void;
87
+ };
81
88
  //#endregion
82
89
  //#region src/components/kanban-dnd/kanban-card-item.d.ts
83
90
  declare function KanbanCardItem({
@@ -142,5 +149,5 @@ declare function useKanbanColumnDnD({
142
149
  dragHandleRef
143
150
  }: UseKanbanColumnDnDProps): void;
144
151
  //#endregion
145
- export { KanbanCardItem, type KanbanCardItemProps, KanbanDndMonitor, type KanbanDndMonitorProps, KanbanDropZone, type KanbanDropZoneProps, type KanbanOverflow, type KanbanSelectableItem, KanbanSelector, type KanbanSelectorProps, type UseKanbanColumnDnDProps, moveCardsInColumns, useKanbanColumnDnD, useKanbanSelection };
152
+ export { KanbanCardItem, type KanbanCardItemProps, KanbanDndMonitor, type KanbanDndMonitorProps, KanbanDropZone, type KanbanDropZoneProps, type KanbanOverflow, type KanbanSelectableItem, KanbanSelector, type KanbanSelectorProps, type UseKanbanColumnDnDProps, moveCardsInColumns, useKanbanCardSelected, useKanbanColumnDnD, useKanbanSelection, useKanbanSelectionActions };
146
153
  //# sourceMappingURL=kanban-dnd.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"kanban-dnd.d.ts","names":[],"sources":["../src/components/kanban-dnd/types.ts","../src/components/kanban-dnd/context.tsx","../src/components/kanban-dnd/kanban-card-item.tsx","../src/components/kanban-dnd/kanban-dnd-monitor.tsx","../src/components/kanban-dnd/kanban-dropzone.tsx","../src/components/kanban-dnd/kanban-selector.tsx","../src/components/kanban-dnd/move-cards.ts","../src/components/kanban-dnd/use-kanban-column-dnd.ts"],"sourcesContent":[],"mappings":"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"}
1
+ {"version":3,"file":"kanban-dnd.d.ts","names":[],"sources":["../src/components/kanban-dnd/types.ts","../src/components/kanban-dnd/context.tsx","../src/components/kanban-dnd/kanban-card-item.tsx","../src/components/kanban-dnd/kanban-dnd-monitor.tsx","../src/components/kanban-dnd/kanban-dropzone.tsx","../src/components/kanban-dnd/kanban-selector.tsx","../src/components/kanban-dnd/move-cards.ts","../src/components/kanban-dnd/use-kanban-column-dnd.ts"],"sourcesContent":[],"mappings":"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"}
@@ -2,7 +2,7 @@
2
2
 
3
3
 
4
4
  import { t as cn } from "./utils-C8_amEgK.js";
5
- import { createContext, useCallback, useContext, useEffect, useMemo, useRef, useState } from "react";
5
+ import { createContext, useCallback, useContext, useEffect, useMemo, useRef, useState, useSyncExternalStore } from "react";
6
6
  import { jsx, jsxs } from "react/jsx-runtime";
7
7
  import { draggable, dropTargetForElements, monitorForElements } from "@atlaskit/pragmatic-drag-and-drop/element/adapter";
8
8
  import { preserveOffsetOnSource } from "@atlaskit/pragmatic-drag-and-drop/element/preserve-offset-on-source";
@@ -34,7 +34,7 @@ function useKanbanSelection() {
34
34
  clearSelectedCards: () => {},
35
35
  toggleSelectedCardId: () => {}
36
36
  };
37
- const selectedCardIds = context.getSelectedCardIds();
37
+ const selectedCardIds = useSyncExternalStore(context.subscribeSelection, context.getSelectedCardIds, () => []);
38
38
  return {
39
39
  selectedCardIds,
40
40
  isSelected: (cardId) => selectedCardIds.includes(cardId),
@@ -44,6 +44,27 @@ function useKanbanSelection() {
44
44
  toggleSelectedCardId: context.toggleSelectedCardId
45
45
  };
46
46
  }
47
+ function useKanbanCardSelected(cardId) {
48
+ const context = useKanbanDndContext();
49
+ if (!context) return false;
50
+ const normalizedId = String(cardId);
51
+ return useSyncExternalStore(context.subscribeSelection, () => context.getSelectedCardIds().includes(normalizedId), () => false);
52
+ }
53
+ function useKanbanSelectionActions() {
54
+ const context = useKanbanDndContext();
55
+ if (!context) return {
56
+ setSelectedCardIds: (_cardIds) => {},
57
+ addSelectedCardId: (_cardId) => {},
58
+ clearSelectedCards: () => {},
59
+ toggleSelectedCardId: (_cardId) => {}
60
+ };
61
+ return {
62
+ setSelectedCardIds: context.setSelectedCardIds,
63
+ addSelectedCardId: context.addSelectedCardId,
64
+ clearSelectedCards: context.clearSelectedCards,
65
+ toggleSelectedCardId: context.toggleSelectedCardId
66
+ };
67
+ }
47
68
 
48
69
  //#endregion
49
70
  //#region src/components/kanban-dnd/constants.ts
@@ -213,72 +234,143 @@ function moveCardsInColumns(columns, cardIds, targetColumnId, resolvers = {}) {
213
234
  const getCardId = resolvers.getCardId ?? defaultGetCardId;
214
235
  const selectedIds = new Set(cardIds);
215
236
  if (selectedIds.size === 0) return columns;
216
- const cardsToMove = columns.flatMap((column) => getCards(column).filter((card) => selectedIds.has(getCardId(card))));
237
+ const cardsToMove = [];
238
+ let didRemoveCards = false;
239
+ const columnsWithoutMovedCards = columns.map((column) => {
240
+ const currentCards = getCards(column);
241
+ const remainingCards = currentCards.filter((card) => {
242
+ if (selectedIds.has(getCardId(card))) {
243
+ cardsToMove.push(card);
244
+ return false;
245
+ }
246
+ return true;
247
+ });
248
+ if (remainingCards.length === currentCards.length) return column;
249
+ didRemoveCards = true;
250
+ return setCards(column, remainingCards);
251
+ });
217
252
  if (cardsToMove.length === 0) return columns;
218
- return columns.map((column) => {
253
+ let didAddCards = false;
254
+ const nextColumns = columnsWithoutMovedCards.map((column) => {
219
255
  const currentCards = getCards(column);
220
256
  if (getColumnId(column) === targetColumnId) {
221
257
  const existingIds = new Set(currentCards.map((card) => getCardId(card)));
222
258
  const incomingCards = cardsToMove.filter((card) => !existingIds.has(getCardId(card)));
259
+ if (incomingCards.length === 0) return column;
260
+ didAddCards = true;
223
261
  return setCards(column, [...currentCards, ...incomingCards]);
224
262
  }
225
- return setCards(column, currentCards.filter((card) => !selectedIds.has(getCardId(card))));
263
+ return column;
226
264
  });
265
+ return didRemoveCards || didAddCards ? nextColumns : columns;
227
266
  }
228
267
 
229
268
  //#endregion
230
269
  //#region src/components/kanban-dnd/kanban-dnd-monitor.tsx
270
+ function areSameCardSet(a, b) {
271
+ if (a.length !== b.length) return false;
272
+ const aSet = new Set(a.map(String));
273
+ if (aSet.size !== b.length) return false;
274
+ return b.every((id) => aSet.has(String(id)));
275
+ }
231
276
  function defaultGetColumnId(column) {
232
277
  const id = column?.id;
233
278
  return id === void 0 || id === null ? "" : String(id);
234
279
  }
235
280
  function KanbanDndMonitor({ onCardsMove, onColumnReorder, scrollContainerId, setColumns, children, getColumnId, moveCards, getCardsFromColumn, setCardsInColumn, getCardId, getSelectedCardIds, setSelectedCardIds, addSelectedCardId, clearSelectedCards, onSelectionChange, setIsDragging, autoScrollOverflow, isAutoScrollEnabled = true, renderIdleLayer }) {
236
281
  const [isDragging, setLocalIsDragging] = useState(false);
237
- const [internalSelectedCardIds, setInternalSelectedCardIds] = useState([]);
282
+ const isDraggingRef = useRef(false);
283
+ const selectedCardIdsRef = useRef([]);
238
284
  const selectableItemMapRef = useRef(/* @__PURE__ */ new Map());
285
+ const selectionListenersRef = useRef(/* @__PURE__ */ new Set());
286
+ const notifySelectionListeners = useCallback(() => {
287
+ selectionListenersRef.current.forEach((listener) => listener());
288
+ }, []);
289
+ const subscribeSelection = useCallback((listener) => {
290
+ selectionListenersRef.current.add(listener);
291
+ return () => {
292
+ selectionListenersRef.current.delete(listener);
293
+ };
294
+ }, []);
239
295
  const getColumnIdSafe = useCallback((column) => getColumnId ? getColumnId(column) : defaultGetColumnId(column), [getColumnId]);
240
- const getSelectedCardIdsSafe = useCallback(() => getSelectedCardIds?.() ?? internalSelectedCardIds, [getSelectedCardIds, internalSelectedCardIds]);
296
+ const getSelectedCardIdsSafe = useCallback(() => getSelectedCardIds?.() ?? selectedCardIdsRef.current, [getSelectedCardIds]);
297
+ const setInternalSelectedCardIdsSafe = useCallback((nextIds) => {
298
+ selectedCardIdsRef.current = nextIds;
299
+ notifySelectionListeners();
300
+ onSelectionChange?.(nextIds);
301
+ }, [notifySelectionListeners, onSelectionChange]);
241
302
  const addSelectedCardIdSafe = useCallback((cardId) => {
303
+ const selectedIds = getSelectedCardIdsSafe();
304
+ if (selectedIds.includes(cardId)) return;
305
+ const nextIds = [...selectedIds, cardId];
242
306
  if (addSelectedCardId) {
243
307
  addSelectedCardId(cardId);
308
+ notifySelectionListeners();
309
+ onSelectionChange?.(nextIds);
244
310
  return;
245
311
  }
246
- setInternalSelectedCardIds((prev) => prev.includes(cardId) ? prev : [...prev, cardId]);
247
- }, [addSelectedCardId]);
312
+ setInternalSelectedCardIdsSafe(nextIds);
313
+ }, [
314
+ addSelectedCardId,
315
+ getSelectedCardIdsSafe,
316
+ notifySelectionListeners,
317
+ onSelectionChange,
318
+ setInternalSelectedCardIdsSafe
319
+ ]);
248
320
  const clearSelectedCardsSafe = useCallback(() => {
321
+ if (getSelectedCardIdsSafe().length === 0) return;
249
322
  if (clearSelectedCards) {
250
323
  clearSelectedCards();
324
+ notifySelectionListeners();
325
+ onSelectionChange?.([]);
251
326
  return;
252
327
  }
253
- setInternalSelectedCardIds([]);
254
- }, [clearSelectedCards]);
328
+ setInternalSelectedCardIdsSafe([]);
329
+ }, [
330
+ clearSelectedCards,
331
+ getSelectedCardIdsSafe,
332
+ notifySelectionListeners,
333
+ onSelectionChange,
334
+ setInternalSelectedCardIdsSafe
335
+ ]);
255
336
  const setSelectedCardIdsSafe = useCallback((cardIds) => {
337
+ const nextIds = Array.from(new Set(cardIds.map(String)));
338
+ if (areSameCardSet(nextIds, getSelectedCardIdsSafe())) return;
256
339
  if (setSelectedCardIds) {
257
- setSelectedCardIds(cardIds);
340
+ setSelectedCardIds(nextIds);
341
+ notifySelectionListeners();
342
+ onSelectionChange?.(nextIds);
258
343
  return;
259
344
  }
260
345
  if (getSelectedCardIds && clearSelectedCards && addSelectedCardId) {
261
346
  clearSelectedCards();
262
- cardIds.forEach((cardId) => addSelectedCardId(cardId));
347
+ nextIds.forEach((cardId) => addSelectedCardId(cardId));
348
+ notifySelectionListeners();
349
+ onSelectionChange?.(nextIds);
263
350
  return;
264
351
  }
265
- setInternalSelectedCardIds(cardIds);
352
+ setInternalSelectedCardIdsSafe(nextIds);
266
353
  }, [
267
354
  addSelectedCardId,
268
355
  clearSelectedCards,
356
+ getSelectedCardIdsSafe,
269
357
  getSelectedCardIds,
270
- setSelectedCardIds
358
+ notifySelectionListeners,
359
+ onSelectionChange,
360
+ setSelectedCardIds,
361
+ setInternalSelectedCardIdsSafe
271
362
  ]);
272
363
  const toggleSelectedCardIdSafe = useCallback((cardId) => {
273
- if (getSelectedCardIdsSafe().includes(cardId)) {
274
- if (!getSelectedCardIds) setInternalSelectedCardIds((prev) => prev.filter((id) => id !== cardId));
364
+ const selectedIds = getSelectedCardIdsSafe();
365
+ if (selectedIds.includes(cardId)) {
366
+ setSelectedCardIdsSafe(selectedIds.filter((selectedId) => selectedId !== cardId));
275
367
  return;
276
368
  }
277
369
  addSelectedCardIdSafe(cardId);
278
370
  }, [
279
371
  addSelectedCardIdSafe,
280
- getSelectedCardIds,
281
- getSelectedCardIdsSafe
372
+ getSelectedCardIdsSafe,
373
+ setSelectedCardIdsSafe
282
374
  ]);
283
375
  const registerSelectableItem = useCallback((id, element) => {
284
376
  if (!element) {
@@ -291,16 +383,10 @@ function KanbanDndMonitor({ onCardsMove, onColumnReorder, scrollContainerId, set
291
383
  id,
292
384
  element
293
385
  })), []);
294
- useEffect(() => {
295
- onSelectionChange?.(getSelectedCardIdsSafe());
296
- }, [
297
- getSelectedCardIdsSafe,
298
- internalSelectedCardIds,
299
- onSelectionChange
300
- ]);
301
386
  const contextValue = useMemo(() => ({
302
- isDragging,
387
+ getIsDragging: () => isDraggingRef.current,
303
388
  getSelectedCardIds: getSelectedCardIdsSafe,
389
+ subscribeSelection,
304
390
  setSelectedCardIds: setSelectedCardIdsSafe,
305
391
  addSelectedCardId: addSelectedCardIdSafe,
306
392
  clearSelectedCards: clearSelectedCardsSafe,
@@ -312,17 +398,19 @@ function KanbanDndMonitor({ onCardsMove, onColumnReorder, scrollContainerId, set
312
398
  clearSelectedCardsSafe,
313
399
  getSelectableItems,
314
400
  getSelectedCardIdsSafe,
315
- isDragging,
316
401
  registerSelectableItem,
317
402
  setSelectedCardIdsSafe,
403
+ subscribeSelection,
318
404
  toggleSelectedCardIdSafe
319
405
  ]);
406
+ const setDraggingState = useCallback((value) => {
407
+ isDraggingRef.current = value;
408
+ if (renderIdleLayer) setLocalIsDragging(value);
409
+ }, [renderIdleLayer]);
320
410
  const finishDrag = () => {
321
- setLocalIsDragging(false);
322
- setTimeout(() => {
323
- setIsDragging?.(false);
324
- clearSelectedCardsSafe();
325
- }, 100);
411
+ setDraggingState(false);
412
+ setIsDragging?.(false);
413
+ clearSelectedCardsSafe();
326
414
  };
327
415
  const startDrag = (source) => {
328
416
  if (source.data.type !== "column" && source.data.type !== "card") return;
@@ -331,7 +419,7 @@ function KanbanDndMonitor({ onCardsMove, onColumnReorder, scrollContainerId, set
331
419
  if (!getSelectedCardIdsSafe().includes(cardId)) addSelectedCardIdSafe(cardId);
332
420
  }
333
421
  setIsDragging?.(true);
334
- setLocalIsDragging(true);
422
+ setDraggingState(true);
335
423
  };
336
424
  const dropColumn = (sourceColumnId, targetColumnId) => {
337
425
  if (!sourceColumnId || sourceColumnId === targetColumnId) return;
@@ -469,6 +557,12 @@ const DEFAULT_IGNORED_SLOTS = [
469
557
  "dialog-overlay"
470
558
  ];
471
559
  const clampDelta = (delta, current, max) => delta > 0 ? Math.min(delta, max - current) : Math.max(delta, -current);
560
+ const hasSameCardSet = (a, b) => {
561
+ if (a.length !== b.length) return false;
562
+ const aSet = new Set(a.map(String));
563
+ if (aSet.size !== b.length) return false;
564
+ return b.every((id) => aSet.has(String(id)));
565
+ };
472
566
  const edgeDelta = (pointer, start, end, margin, dt) => {
473
567
  if (pointer < start + margin) return (pointer - (start + margin)) / margin * dt;
474
568
  if (pointer > end - margin) return (pointer - (end - margin)) / margin * dt;
@@ -612,6 +706,7 @@ function KanbanSelector({ dragAreaId = DEFAULT_DRAG_AREA_ID, autoScrollMargin =
612
706
  height: rect.height
613
707
  })) selectedIds.push(String(item.id));
614
708
  });
709
+ if (hasSameCardSet(selectedIds, context.getSelectedCardIds())) return;
615
710
  context.setSelectedCardIds(selectedIds);
616
711
  },
617
712
  onSelectionEnd: () => {
@@ -631,7 +726,7 @@ function KanbanSelector({ dragAreaId = DEFAULT_DRAG_AREA_ID, autoScrollMargin =
631
726
  if (!context) return;
632
727
  const handlePointerUp = (e) => {
633
728
  const target = e.target;
634
- if (!isSelectingRef.current && !context.isDragging && !target?.closest("[data-draggable=\"true\"]")) context.clearSelectedCards();
729
+ if (!isSelectingRef.current && !context.getIsDragging() && !target?.closest("[data-draggable=\"true\"]")) context.clearSelectedCards();
635
730
  };
636
731
  document.addEventListener("pointerup", handlePointerUp);
637
732
  return () => document.removeEventListener("pointerup", handlePointerUp);
@@ -669,5 +764,5 @@ function useKanbanColumnDnD({ columnId, elementRef, dragHandleRef }) {
669
764
  }
670
765
 
671
766
  //#endregion
672
- export { KanbanCardItem, KanbanDndMonitor, KanbanDropZone, KanbanSelector, moveCardsInColumns, useKanbanColumnDnD, useKanbanSelection };
767
+ export { KanbanCardItem, KanbanDndMonitor, KanbanDropZone, KanbanSelector, moveCardsInColumns, useKanbanCardSelected, useKanbanColumnDnD, useKanbanSelection, useKanbanSelectionActions };
673
768
  //# sourceMappingURL=kanban-dnd.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"kanban-dnd.js","names":["STACKED_CLONE_BASE_STYLE: Partial<CSSStyleDeclaration>","defaultGetColumnId","nextOrder: number | null","xContainer: HTMLElement | null","yContainer: HTMLElement | null","selectedIds: string[]"],"sources":["../src/components/kanban-dnd/context.tsx","../src/components/kanban-dnd/constants.ts","../src/components/kanban-dnd/utils.ts","../src/components/kanban-dnd/drag-preview.ts","../src/components/kanban-dnd/kanban-card-item.tsx","../src/components/kanban-dnd/move-cards.ts","../src/components/kanban-dnd/kanban-dnd-monitor.tsx","../src/components/kanban-dnd/kanban-dropzone.tsx","../src/components/kanban-dnd/kanban-selector.tsx","../src/components/kanban-dnd/use-kanban-column-dnd.ts"],"sourcesContent":["'use client';\n\nimport { createContext, useContext } from 'react';\n\nimport type { KanbanSelectableItem } from './types';\n\ntype KanbanDndContextValue = {\n isDragging: boolean;\n getSelectedCardIds: () => string[];\n setSelectedCardIds: (cardIds: string[]) => void;\n addSelectedCardId: (cardId: string) => void;\n clearSelectedCards: () => void;\n toggleSelectedCardId: (cardId: string) => void;\n registerSelectableItem: (id: string, element: HTMLElement | null) => void;\n getSelectableItems: () => KanbanSelectableItem[];\n};\n\nconst KanbanDndContext = createContext<KanbanDndContextValue | null>(null);\n\nexport function KanbanDndProvider({\n children,\n value,\n}: {\n children: React.ReactNode;\n value: KanbanDndContextValue;\n}) {\n return (\n <KanbanDndContext.Provider value={value}>\n {children}\n </KanbanDndContext.Provider>\n );\n}\n\nexport function useKanbanDndContext() {\n return useContext(KanbanDndContext);\n}\n\nexport function useKanbanSelection() {\n const context = useKanbanDndContext();\n\n if (!context) {\n return {\n selectedCardIds: [] as string[],\n isSelected: () => false,\n setSelectedCardIds: () => {},\n addSelectedCardId: () => {},\n clearSelectedCards: () => {},\n toggleSelectedCardId: () => {},\n };\n }\n\n const selectedCardIds = context.getSelectedCardIds();\n\n return {\n selectedCardIds,\n isSelected: (cardId: string) => selectedCardIds.includes(cardId),\n setSelectedCardIds: context.setSelectedCardIds,\n addSelectedCardId: context.addSelectedCardId,\n clearSelectedCards: context.clearSelectedCards,\n toggleSelectedCardId: context.toggleSelectedCardId,\n };\n}\n","export const PREVIEW_STACK_LIMIT = 10;\nexport const PREVIEW_STACK_X_OFFSET = 10;\nexport const PREVIEW_STACK_Y_OFFSET = 8;\nexport const PREVIEW_STACK_MIN_OPACITY = 0.75;\n\nexport const STACKED_CLONE_BASE_STYLE: Partial<CSSStyleDeclaration> = {\n pointerEvents: 'none',\n margin: '0',\n width: '100%',\n top: '0',\n left: '0',\n};\n\nexport const DEFAULT_AUTO_SCROLL_OVERFLOW = {\n forLeftEdge: {\n left: 320,\n top: 160,\n bottom: 160,\n },\n forRightEdge: {\n right: 160,\n top: 120,\n bottom: 120,\n },\n};\n","import type { DropTarget } from './types';\n\nexport function applyStyles(\n element: HTMLElement,\n styles: Partial<CSSStyleDeclaration>\n) {\n Object.assign(element.style, styles);\n}\n\nexport function getTargetColumnId(\n dropTargets: DropTarget[],\n targetType: string\n) {\n const target = dropTargets.find((item) => item.data.type === targetType);\n return target ? String(target.data.columnId ?? '') : '';\n}\n","import {\n PREVIEW_STACK_LIMIT,\n PREVIEW_STACK_MIN_OPACITY,\n PREVIEW_STACK_X_OFFSET,\n PREVIEW_STACK_Y_OFFSET,\n STACKED_CLONE_BASE_STYLE,\n} from './constants';\nimport type { KanbanSelectableItem } from './types';\nimport { applyStyles } from './utils';\n\nfunction createStackedClone(original: HTMLElement, index: number) {\n const clone = original.cloneNode(true) as HTMLElement;\n const xOffset = index * PREVIEW_STACK_X_OFFSET;\n const yOffset = index * PREVIEW_STACK_Y_OFFSET;\n const opacity = Math.max(1 - index * 0.1, PREVIEW_STACK_MIN_OPACITY);\n\n applyStyles(clone, {\n ...STACKED_CLONE_BASE_STYLE,\n position: index === 0 ? 'relative' : 'absolute',\n transform: `translate(${xOffset}px, ${yOffset}px)`,\n opacity: String(opacity),\n });\n\n return clone;\n}\n\nfunction createFallbackClone(sourceElement: HTMLElement) {\n const fallback = sourceElement.cloneNode(true) as HTMLElement;\n\n applyStyles(fallback, {\n pointerEvents: 'none',\n margin: '0',\n });\n\n return fallback;\n}\n\nexport function buildDragPreview({\n cardId,\n sourceElement,\n getSelectableItems,\n getSelectedCardIds,\n}: {\n cardId: string;\n sourceElement: HTMLElement;\n getSelectableItems?: () => KanbanSelectableItem[];\n getSelectedCardIds?: () => string[];\n}) {\n const selectedIds = getSelectedCardIds?.() ?? [];\n const idsToPreview = Array.from(new Set([...selectedIds, String(cardId)]));\n const root = document.createElement('div');\n\n applyStyles(root, {\n position: 'relative',\n });\n\n const selectableItems = getSelectableItems?.() ?? [];\n const itemElementById = new Map(\n selectableItems\n .filter((item) => item.element)\n .map((item) => [String(item.id), item.element as HTMLElement])\n );\n\n idsToPreview.slice(0, PREVIEW_STACK_LIMIT).forEach((previewId, index) => {\n const original = itemElementById.get(String(previewId));\n if (!original) return;\n\n root.appendChild(createStackedClone(original, index));\n });\n\n if (!root.childElementCount) {\n root.appendChild(createFallbackClone(sourceElement));\n }\n\n return root;\n}\n","'use client';\n\nimport { useEffect, useRef } from 'react';\n\nimport { draggable } from '@atlaskit/pragmatic-drag-and-drop/element/adapter';\nimport { preserveOffsetOnSource } from '@atlaskit/pragmatic-drag-and-drop/element/preserve-offset-on-source';\nimport { setCustomNativeDragPreview } from '@atlaskit/pragmatic-drag-and-drop/element/set-custom-native-drag-preview';\nimport { useKanbanDndContext } from './context';\nimport { buildDragPreview } from './drag-preview';\nimport type { KanbanCardItemProps } from './types';\n\nexport function KanbanCardItem({\n id,\n children,\n className,\n getSelectedCardIds,\n getSelectableItems,\n}: KanbanCardItemProps) {\n const ref = useRef<HTMLDivElement>(null);\n const context = useKanbanDndContext();\n\n const getSelectedCardIdsSafe =\n getSelectedCardIds ?? context?.getSelectedCardIds;\n const getSelectableItemsSafe =\n getSelectableItems ?? context?.getSelectableItems;\n\n useEffect(() => {\n context?.registerSelectableItem(String(id), ref.current);\n\n return () => {\n context?.registerSelectableItem(String(id), null);\n };\n }, [context, id]);\n\n useEffect(() => {\n const element = ref.current;\n if (!element) return;\n\n return draggable({\n element,\n getInitialData: () => ({\n type: 'card',\n cardId: String(id),\n }),\n onGenerateDragPreview: ({ nativeSetDragImage, source, location }) => {\n setCustomNativeDragPreview({\n getOffset: preserveOffsetOnSource({\n element: source.element,\n input: location.current.input,\n }),\n render({ container }) {\n const root = buildDragPreview({\n cardId: String(id),\n sourceElement: source.element,\n getSelectableItems: getSelectableItemsSafe,\n getSelectedCardIds: getSelectedCardIdsSafe,\n });\n\n container.appendChild(root);\n\n return () => {\n if (root.parentElement === container) {\n container.removeChild(root);\n }\n };\n },\n nativeSetDragImage,\n });\n },\n });\n }, [getSelectableItemsSafe, getSelectedCardIdsSafe, id]);\n\n return (\n <div\n className={className}\n data-draggable=\"true\"\n id={`kanban-card-item-${id}`}\n ref={ref}\n suppressHydrationWarning\n >\n {children}\n </div>\n );\n}\n","type AnyObject = Record<string, unknown>;\n\ntype MoveCardsResolvers<TColumn, TCard> = {\n getColumnId: (column: TColumn) => string;\n getCards: (column: TColumn) => TCard[];\n setCards: (column: TColumn, cards: TCard[]) => TColumn;\n getCardId: (card: TCard) => string;\n};\n\nfunction hasObjectValue(value: unknown): value is AnyObject {\n return typeof value === 'object' && value !== null;\n}\n\nfunction defaultGetColumnId<TColumn>(column: TColumn): string {\n if (!hasObjectValue(column)) return '';\n const id = column.id;\n return id === undefined || id === null ? '' : String(id);\n}\n\nfunction defaultGetCards<TColumn, TCard>(column: TColumn): TCard[] {\n if (!hasObjectValue(column)) return [];\n const cards = column.cards;\n return Array.isArray(cards) ? (cards as TCard[]) : [];\n}\n\nfunction defaultSetCards<TColumn, TCard>(\n column: TColumn,\n cards: TCard[]\n): TColumn {\n if (!hasObjectValue(column)) return column;\n return { ...column, cards } as TColumn;\n}\n\nfunction defaultGetCardId<TCard>(card: TCard): string {\n if (!hasObjectValue(card)) return '';\n const id = card.id;\n return id === undefined || id === null ? '' : String(id);\n}\n\nexport function moveCardsInColumns<TColumn, TCard>(\n columns: TColumn[],\n cardIds: string[],\n targetColumnId: string,\n resolvers: Partial<MoveCardsResolvers<TColumn, TCard>> = {}\n): TColumn[] {\n const getColumnId = resolvers.getColumnId ?? defaultGetColumnId<TColumn>;\n const getCards = resolvers.getCards ?? defaultGetCards<TColumn, TCard>;\n const setCards = resolvers.setCards ?? defaultSetCards<TColumn, TCard>;\n const getCardId = resolvers.getCardId ?? defaultGetCardId<TCard>;\n\n const selectedIds = new Set(cardIds);\n if (selectedIds.size === 0) return columns;\n\n const cardsToMove = columns.flatMap((column) =>\n getCards(column).filter((card) => selectedIds.has(getCardId(card)))\n );\n\n if (cardsToMove.length === 0) return columns;\n\n return columns.map((column) => {\n const currentCards = getCards(column);\n\n if (getColumnId(column) === targetColumnId) {\n const existingIds = new Set(currentCards.map((card) => getCardId(card)));\n const incomingCards = cardsToMove.filter(\n (card) => !existingIds.has(getCardId(card))\n );\n return setCards(column, [...currentCards, ...incomingCards]);\n }\n\n return setCards(\n column,\n currentCards.filter((card) => !selectedIds.has(getCardId(card)))\n );\n });\n}\n","'use client';\n\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { combine } from '@atlaskit/pragmatic-drag-and-drop/combine';\nimport { monitorForElements } from '@atlaskit/pragmatic-drag-and-drop/element/adapter';\nimport { reorder } from '@atlaskit/pragmatic-drag-and-drop/reorder';\nimport { autoScrollForElements } from '@atlaskit/pragmatic-drag-and-drop-auto-scroll/element';\nimport { unsafeOverflowAutoScrollForElements } from '@atlaskit/pragmatic-drag-and-drop-auto-scroll/unsafe-overflow/element';\nimport { DEFAULT_AUTO_SCROLL_OVERFLOW } from './constants';\nimport { KanbanDndProvider } from './context';\nimport { moveCardsInColumns } from './move-cards';\nimport type { DropTarget, KanbanDndMonitorProps } from './types';\nimport { getTargetColumnId } from './utils';\n\nfunction defaultGetColumnId<TColumn>(column: TColumn): string {\n const maybeColumn = column as Record<string, unknown>;\n const id = maybeColumn?.id;\n return id === undefined || id === null ? '' : String(id);\n}\n\nexport function KanbanDndMonitor<TColumn>({\n onCardsMove,\n onColumnReorder,\n scrollContainerId,\n setColumns,\n children,\n getColumnId,\n moveCards,\n getCardsFromColumn,\n setCardsInColumn,\n getCardId,\n getSelectedCardIds,\n setSelectedCardIds,\n addSelectedCardId,\n clearSelectedCards,\n onSelectionChange,\n setIsDragging,\n autoScrollOverflow,\n isAutoScrollEnabled = true,\n renderIdleLayer,\n}: KanbanDndMonitorProps<TColumn>) {\n const [isDragging, setLocalIsDragging] = useState(false);\n const [internalSelectedCardIds, setInternalSelectedCardIds] = useState<\n string[]\n >([]);\n const selectableItemMapRef = useRef(new Map<string, HTMLElement>());\n const getColumnIdSafe = useCallback(\n (column: TColumn) =>\n getColumnId ? getColumnId(column) : defaultGetColumnId(column),\n [getColumnId]\n );\n\n const getSelectedCardIdsSafe = useCallback(\n () => getSelectedCardIds?.() ?? internalSelectedCardIds,\n [getSelectedCardIds, internalSelectedCardIds]\n );\n\n const addSelectedCardIdSafe = useCallback(\n (cardId: string) => {\n if (addSelectedCardId) {\n addSelectedCardId(cardId);\n return;\n }\n\n setInternalSelectedCardIds((prev) =>\n prev.includes(cardId) ? prev : [...prev, cardId]\n );\n },\n [addSelectedCardId]\n );\n\n const clearSelectedCardsSafe = useCallback(() => {\n if (clearSelectedCards) {\n clearSelectedCards();\n return;\n }\n\n setInternalSelectedCardIds([]);\n }, [clearSelectedCards]);\n\n const setSelectedCardIdsSafe = useCallback(\n (cardIds: string[]) => {\n if (setSelectedCardIds) {\n setSelectedCardIds(cardIds);\n return;\n }\n\n if (getSelectedCardIds && clearSelectedCards && addSelectedCardId) {\n clearSelectedCards();\n cardIds.forEach((cardId) => addSelectedCardId(cardId));\n return;\n }\n\n setInternalSelectedCardIds(cardIds);\n },\n [\n addSelectedCardId,\n clearSelectedCards,\n getSelectedCardIds,\n setSelectedCardIds,\n ]\n );\n\n const toggleSelectedCardIdSafe = useCallback(\n (cardId: string) => {\n const selectedIds = getSelectedCardIdsSafe();\n if (selectedIds.includes(cardId)) {\n if (!getSelectedCardIds) {\n setInternalSelectedCardIds((prev) =>\n prev.filter((id) => id !== cardId)\n );\n }\n return;\n }\n\n addSelectedCardIdSafe(cardId);\n },\n [addSelectedCardIdSafe, getSelectedCardIds, getSelectedCardIdsSafe]\n );\n\n const registerSelectableItem = useCallback(\n (id: string, element: HTMLElement | null) => {\n if (!element) {\n selectableItemMapRef.current.delete(id);\n return;\n }\n\n selectableItemMapRef.current.set(id, element);\n },\n []\n );\n\n const getSelectableItems = useCallback(\n () =>\n Array.from(selectableItemMapRef.current.entries()).map(\n ([id, element]) => ({\n id,\n element,\n })\n ),\n []\n );\n\n useEffect(() => {\n onSelectionChange?.(getSelectedCardIdsSafe());\n }, [getSelectedCardIdsSafe, internalSelectedCardIds, onSelectionChange]);\n\n const contextValue = useMemo(\n () => ({\n isDragging,\n getSelectedCardIds: getSelectedCardIdsSafe,\n setSelectedCardIds: setSelectedCardIdsSafe,\n addSelectedCardId: addSelectedCardIdSafe,\n clearSelectedCards: clearSelectedCardsSafe,\n toggleSelectedCardId: toggleSelectedCardIdSafe,\n registerSelectableItem,\n getSelectableItems,\n }),\n [\n addSelectedCardIdSafe,\n clearSelectedCardsSafe,\n getSelectableItems,\n getSelectedCardIdsSafe,\n isDragging,\n registerSelectableItem,\n setSelectedCardIdsSafe,\n toggleSelectedCardIdSafe,\n ]\n );\n\n const finishDrag = () => {\n setLocalIsDragging(false);\n setTimeout(() => {\n setIsDragging?.(false);\n clearSelectedCardsSafe();\n }, 100);\n };\n\n const startDrag = (source: { data: Record<string, unknown> }) => {\n if (source.data.type !== 'column' && source.data.type !== 'card') return;\n\n if (source.data.type === 'card') {\n const cardId = String(source.data.cardId ?? '');\n const selectedIds = getSelectedCardIdsSafe();\n if (!selectedIds.includes(cardId)) {\n addSelectedCardIdSafe(cardId);\n }\n }\n\n setIsDragging?.(true);\n setLocalIsDragging(true);\n };\n\n const dropColumn = (sourceColumnId: string, targetColumnId: string) => {\n if (!sourceColumnId || sourceColumnId === targetColumnId) return;\n\n let nextOrder: number | null = null;\n\n setColumns((prev) => {\n const oldIndex = prev.findIndex(\n (col) => getColumnIdSafe(col) === sourceColumnId\n );\n const newIndex = prev.findIndex(\n (col) => getColumnIdSafe(col) === targetColumnId\n );\n\n if (oldIndex < 0 || newIndex < 0 || oldIndex === newIndex) {\n return prev;\n }\n\n nextOrder = newIndex + 1;\n return reorder({\n list: prev,\n startIndex: oldIndex,\n finishIndex: newIndex,\n });\n });\n\n if (nextOrder !== null) {\n onColumnReorder?.({ columnId: sourceColumnId, order: nextOrder });\n }\n };\n\n const dropCard = (cardId: string, targetColumnId: string) => {\n if (!cardId || !targetColumnId) return;\n\n const selectedIds = getSelectedCardIdsSafe();\n const idsToMove = selectedIds.length > 0 ? selectedIds : [cardId];\n\n setColumns((prev) => {\n if (moveCards) {\n return moveCards(prev, idsToMove, targetColumnId);\n }\n\n return moveCardsInColumns(prev, idsToMove, targetColumnId, {\n getColumnId: getColumnIdSafe,\n getCards: getCardsFromColumn as\n | ((column: TColumn) => unknown[])\n | undefined,\n setCards: setCardsInColumn as\n | ((column: TColumn, cards: unknown[]) => TColumn)\n | undefined,\n getCardId,\n });\n });\n onCardsMove?.({ cardIds: idsToMove, targetColumnId });\n };\n\n useEffect(() => {\n const monitorCleanup = monitorForElements({\n onDragStart: ({ source }) => startDrag(source),\n onDrop: ({ source, location }) => {\n const dropTargets = location.current.dropTargets as DropTarget[];\n\n if (source.data.type === 'column') {\n dropColumn(\n String(source.data.columnId ?? ''),\n getTargetColumnId(dropTargets, 'column')\n );\n finishDrag();\n return;\n }\n\n if (source.data.type === 'card') {\n dropCard(\n String(source.data.cardId ?? ''),\n getTargetColumnId(dropTargets, 'column-drop')\n );\n finishDrag();\n return;\n }\n\n finishDrag();\n },\n });\n\n if (!isAutoScrollEnabled || !scrollContainerId) {\n return monitorCleanup;\n }\n\n const scrollContainer = document.getElementById(scrollContainerId);\n if (!scrollContainer) {\n return monitorCleanup;\n }\n\n return combine(\n monitorCleanup,\n autoScrollForElements({\n element: scrollContainer,\n canScroll: ({ source }) =>\n source.data.type === 'card' || source.data.type === 'column',\n getAllowedAxis: () => 'horizontal',\n }),\n unsafeOverflowAutoScrollForElements({\n element: scrollContainer,\n canScroll: ({ source }) =>\n source.data.type === 'card' || source.data.type === 'column',\n getAllowedAxis: () => 'horizontal',\n getOverflow: () => autoScrollOverflow ?? DEFAULT_AUTO_SCROLL_OVERFLOW,\n })\n );\n }, [\n addSelectedCardIdSafe,\n autoScrollOverflow,\n clearSelectedCardsSafe,\n getCardId,\n getCardsFromColumn,\n getColumnIdSafe,\n getSelectedCardIdsSafe,\n isAutoScrollEnabled,\n moveCards,\n onCardsMove,\n onColumnReorder,\n setCardsInColumn,\n scrollContainerId,\n setSelectedCardIds,\n setColumns,\n setIsDragging,\n ]);\n\n return (\n <KanbanDndProvider value={contextValue}>\n <div className=\"contain-layout h-full\" id=\"draggable-area\">\n {!isDragging && renderIdleLayer}\n {children}\n </div>\n </KanbanDndProvider>\n );\n}\n","'use client';\n\nimport { useEffect, useRef, useState } from 'react';\n\nimport { cn } from '@/lib/utils';\nimport { dropTargetForElements } from '@atlaskit/pragmatic-drag-and-drop/element/adapter';\nimport type { KanbanDropZoneProps } from './types';\n\nexport function KanbanDropZone({\n children,\n id,\n className,\n isOverClassName,\n}: KanbanDropZoneProps) {\n const [isOver, setIsOver] = useState(false);\n const ref = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const element = ref.current;\n if (!element) return;\n\n return dropTargetForElements({\n element,\n canDrop: ({ source }) => source.data.type === 'card',\n getData: () => ({\n type: 'column-drop',\n columnId: String(id),\n }),\n onDragEnter: () => setIsOver(true),\n onDragLeave: () => setIsOver(false),\n onDrop: () => setIsOver(false),\n });\n }, [id]);\n\n return (\n <div\n className={cn(\n 'border flex-1 border-transparent rounded-xl transition-colors',\n isOver && (isOverClassName ?? 'border-border'),\n className\n )}\n id={`kanban-drop-zone-${id}`}\n ref={ref}\n >\n {children}\n </div>\n );\n}\n","'use client';\n\nimport type { MutableRefObject } from 'react';\nimport { useEffect, useMemo, useRef } from 'react';\n\nimport {\n boxesIntersect,\n useSelectionContainer,\n} from '@air/react-drag-to-select';\nimport { useKanbanDndContext } from './context';\nimport type { KanbanSelectorProps } from './types';\n\nconst DEFAULT_DRAG_AREA_ID = 'draggable-area';\nconst DEFAULT_AUTO_SCROLL_MARGIN = 120;\nconst DEFAULT_IGNORED_SLOTS = [\n 'sheet-content',\n 'popover-content',\n 'select-content',\n 'dialog-content',\n 'dialog-overlay',\n];\n\nconst clampDelta = (delta: number, current: number, max: number) =>\n delta > 0 ? Math.min(delta, max - current) : Math.max(delta, -current);\n\nconst edgeDelta = (\n pointer: number,\n start: number,\n end: number,\n margin: number,\n dt: number\n) => {\n if (pointer < start + margin)\n return ((pointer - (start + margin)) / margin) * dt;\n if (pointer > end - margin) return ((pointer - (end - margin)) / margin) * dt;\n return 0;\n};\n\nfunction findScrollable(\n node: HTMLElement | null,\n axis: 'x' | 'y'\n): HTMLElement | null {\n if (!node) return null;\n\n const style = window.getComputedStyle(node);\n const canScrollX =\n /(auto|scroll)/.test(style.overflowX) &&\n node.scrollWidth > node.clientWidth;\n const canScrollY =\n /(auto|scroll)/.test(style.overflowY) &&\n node.scrollHeight > node.clientHeight;\n\n if ((axis === 'x' && canScrollX) || (axis === 'y' && canScrollY)) return node;\n return findScrollable(node.parentElement, axis);\n}\n\nfunction getContainerBounds(container: HTMLElement | null) {\n if (\n !container ||\n container === document.documentElement ||\n container === document.body\n ) {\n return {\n left: 0,\n right: window.innerWidth,\n top: 0,\n bottom: window.innerHeight,\n };\n }\n\n const rect = container.getBoundingClientRect();\n return {\n left: Math.max(0, rect.left),\n right: Math.min(window.innerWidth, rect.right),\n top: Math.max(0, rect.top),\n bottom: Math.min(window.innerHeight, rect.bottom),\n };\n}\n\nfunction shouldStartSelecting(\n target: EventTarget | null,\n ignoredSlots: string[]\n): boolean {\n if (!(target instanceof Element)) return false;\n\n return !(\n target.closest('[data-draggable=\"true\"]') ||\n ignoredSlots.some((slot) => target.closest(`[data-slot=\"${slot}\"]`))\n );\n}\n\nfunction useAutoScroll({\n isSelectingRef,\n dragAreaId,\n autoScrollMargin,\n}: {\n isSelectingRef: MutableRefObject<boolean>;\n dragAreaId: string;\n autoScrollMargin: number;\n}) {\n useEffect(() => {\n let raf = 0;\n let lastTime = performance.now();\n const pos = { x: 0, y: 0 };\n let xContainer: HTMLElement | null = null;\n let yContainer: HTMLElement | null = null;\n let xMax = 0;\n let yMax = 0;\n let useWindowY = false;\n\n const onMove = (e: PointerEvent) => (\n (pos.x = e.clientX), (pos.y = e.clientY)\n );\n\n window.addEventListener('pointermove', onMove, { passive: true });\n\n const reset = () => {\n xContainer = null;\n yContainer = null;\n xMax = 0;\n yMax = 0;\n useWindowY = false;\n };\n\n const step = (time: number) => {\n const dt = time - lastTime;\n lastTime = time;\n\n if (!isSelectingRef.current) {\n reset();\n raf = requestAnimationFrame(step);\n return;\n }\n\n if (!xContainer && !yContainer && xMax === 0 && yMax === 0) {\n const startNode =\n document.getElementById(dragAreaId)?.parentElement ?? null;\n xContainer = findScrollable(startNode, 'x');\n yContainer = findScrollable(startNode, 'y');\n useWindowY = !yContainer;\n xMax = xContainer ? xContainer.scrollWidth - xContainer.clientWidth : 0;\n yMax = useWindowY\n ? document.documentElement.scrollHeight - window.innerHeight\n : yContainer\n ? yContainer.scrollHeight - yContainer.clientHeight\n : 0;\n }\n\n const xBounds = getContainerBounds(xContainer);\n const yBounds = useWindowY\n ? { top: 0, bottom: window.innerHeight }\n : getContainerBounds(yContainer);\n\n const dx = edgeDelta(\n pos.x,\n xBounds.left,\n xBounds.right,\n autoScrollMargin,\n dt\n );\n const dy = edgeDelta(\n pos.y,\n yBounds.top,\n yBounds.bottom,\n autoScrollMargin,\n dt\n );\n\n let didScroll = false;\n\n if (dx && xContainer && xMax > 0) {\n const clampedDx = clampDelta(dx, xContainer.scrollLeft, xMax);\n if (clampedDx) {\n xContainer.scrollBy(clampedDx, 0);\n didScroll = true;\n }\n }\n\n if (dy && yMax > 0) {\n if (useWindowY) {\n const clampedDy = clampDelta(\n dy,\n window.scrollY || document.documentElement.scrollTop,\n yMax\n );\n if (clampedDy) {\n window.scrollBy(0, clampedDy);\n didScroll = true;\n }\n } else if (yContainer) {\n const clampedDy = clampDelta(dy, yContainer.scrollTop, yMax);\n if (clampedDy) {\n yContainer.scrollBy(0, clampedDy);\n didScroll = true;\n }\n }\n }\n\n if (didScroll) {\n document.body.dispatchEvent(\n new MouseEvent('mousemove', {\n clientX: pos.x,\n clientY: pos.y,\n bubbles: true,\n cancelable: true,\n })\n );\n }\n\n raf = requestAnimationFrame(step);\n };\n\n raf = requestAnimationFrame(step);\n\n return () => {\n window.removeEventListener('pointermove', onMove);\n cancelAnimationFrame(raf);\n };\n }, [autoScrollMargin, dragAreaId, isSelectingRef]);\n}\n\nexport function KanbanSelector({\n dragAreaId = DEFAULT_DRAG_AREA_ID,\n autoScrollMargin = DEFAULT_AUTO_SCROLL_MARGIN,\n ignoredSlots = DEFAULT_IGNORED_SLOTS,\n}: KanbanSelectorProps) {\n const context = useKanbanDndContext();\n const isSelectingRef = useRef(false);\n\n useAutoScroll({ isSelectingRef, dragAreaId, autoScrollMargin });\n\n const shouldStart = useMemo(\n () => (target: EventTarget | null) =>\n shouldStartSelecting(target, ignoredSlots),\n [ignoredSlots]\n );\n\n const { DragSelection } = useSelectionContainer({\n shouldStartSelecting: shouldStart,\n onSelectionChange: (selection: Parameters<typeof boxesIntersect>[0]) => {\n if (!context) return;\n\n const selectedIds: string[] = [];\n\n context.getSelectableItems().forEach((item) => {\n if (!item.element) return;\n\n const rect = item.element.getBoundingClientRect();\n const cardRect = {\n ...rect,\n left: rect.left + window.scrollX,\n top: rect.top,\n width: rect.width,\n height: rect.height,\n };\n\n if (boxesIntersect(selection, cardRect)) {\n selectedIds.push(String(item.id));\n }\n });\n\n context.setSelectedCardIds(selectedIds);\n },\n onSelectionEnd: () => {\n isSelectingRef.current = false;\n },\n onSelectionStart: () => {\n isSelectingRef.current = true;\n },\n selectionProps: {\n style: {\n pointerEvents: 'none',\n position: 'fixed',\n inset: 0,\n zIndex: 50,\n },\n },\n });\n\n useEffect(() => {\n if (!context) return;\n\n const handlePointerUp = (e: PointerEvent) => {\n const target = e.target as Element | null;\n if (\n !isSelectingRef.current &&\n !context.isDragging &&\n !target?.closest('[data-draggable=\"true\"]')\n ) {\n context.clearSelectedCards();\n }\n };\n\n document.addEventListener('pointerup', handlePointerUp);\n return () => document.removeEventListener('pointerup', handlePointerUp);\n }, [context]);\n\n if (!context) return null;\n\n return <DragSelection />;\n}\n","'use client';\n\nimport { useEffect } from 'react';\n\nimport { combine } from '@atlaskit/pragmatic-drag-and-drop/combine';\nimport {\n draggable,\n dropTargetForElements,\n} from '@atlaskit/pragmatic-drag-and-drop/element/adapter';\nimport type { UseKanbanColumnDnDProps } from './types';\n\nexport function useKanbanColumnDnD({\n columnId,\n elementRef,\n dragHandleRef,\n}: UseKanbanColumnDnDProps) {\n useEffect(() => {\n const element = elementRef.current;\n if (!element) return;\n\n return combine(\n draggable({\n element,\n dragHandle: dragHandleRef?.current ?? undefined,\n getInitialData: () => ({\n type: 'column',\n columnId: String(columnId),\n }),\n }),\n dropTargetForElements({\n element,\n canDrop: ({ source }) =>\n source.data.type === 'column' &&\n String(source.data.columnId) !== String(columnId),\n getData: () => ({\n type: 'column',\n columnId: String(columnId),\n }),\n })\n );\n }, [columnId, dragHandleRef, elementRef]);\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"kanban-dnd.js","names":["STACKED_CLONE_BASE_STYLE: Partial<CSSStyleDeclaration>","defaultGetColumnId","cardsToMove: TCard[]","nextOrder: number | null","xContainer: HTMLElement | null","yContainer: HTMLElement | null","selectedIds: string[]"],"sources":["../src/components/kanban-dnd/context.tsx","../src/components/kanban-dnd/constants.ts","../src/components/kanban-dnd/utils.ts","../src/components/kanban-dnd/drag-preview.ts","../src/components/kanban-dnd/kanban-card-item.tsx","../src/components/kanban-dnd/move-cards.ts","../src/components/kanban-dnd/kanban-dnd-monitor.tsx","../src/components/kanban-dnd/kanban-dropzone.tsx","../src/components/kanban-dnd/kanban-selector.tsx","../src/components/kanban-dnd/use-kanban-column-dnd.ts"],"sourcesContent":["'use client';\n\nimport { createContext, useContext, useSyncExternalStore } from 'react';\n\nimport type { KanbanSelectableItem } from './types';\n\ntype KanbanDndContextValue = {\n getIsDragging: () => boolean;\n getSelectedCardIds: () => string[];\n subscribeSelection: (listener: () => void) => () => void;\n setSelectedCardIds: (cardIds: string[]) => void;\n addSelectedCardId: (cardId: string) => void;\n clearSelectedCards: () => void;\n toggleSelectedCardId: (cardId: string) => void;\n registerSelectableItem: (id: string, element: HTMLElement | null) => void;\n getSelectableItems: () => KanbanSelectableItem[];\n};\n\nconst KanbanDndContext = createContext<KanbanDndContextValue | null>(null);\n\nexport function KanbanDndProvider({\n children,\n value,\n}: {\n children: React.ReactNode;\n value: KanbanDndContextValue;\n}) {\n return (\n <KanbanDndContext.Provider value={value}>\n {children}\n </KanbanDndContext.Provider>\n );\n}\n\nexport function useKanbanDndContext() {\n return useContext(KanbanDndContext);\n}\n\nexport function useKanbanSelection() {\n const context = useKanbanDndContext();\n\n if (!context) {\n return {\n selectedCardIds: [] as string[],\n isSelected: () => false,\n setSelectedCardIds: () => {},\n addSelectedCardId: () => {},\n clearSelectedCards: () => {},\n toggleSelectedCardId: () => {},\n };\n }\n\n const selectedCardIds = useSyncExternalStore(\n context.subscribeSelection,\n context.getSelectedCardIds,\n () => []\n );\n\n return {\n selectedCardIds,\n isSelected: (cardId: string) => selectedCardIds.includes(cardId),\n setSelectedCardIds: context.setSelectedCardIds,\n addSelectedCardId: context.addSelectedCardId,\n clearSelectedCards: context.clearSelectedCards,\n toggleSelectedCardId: context.toggleSelectedCardId,\n };\n}\n\nexport function useKanbanCardSelected(cardId: string | number) {\n const context = useKanbanDndContext();\n\n if (!context) return false;\n\n const normalizedId = String(cardId);\n\n return useSyncExternalStore(\n context.subscribeSelection,\n () => context.getSelectedCardIds().includes(normalizedId),\n () => false\n );\n}\n\nexport function useKanbanSelectionActions() {\n const context = useKanbanDndContext();\n\n if (!context) {\n return {\n setSelectedCardIds: (_cardIds: string[]) => {},\n addSelectedCardId: (_cardId: string) => {},\n clearSelectedCards: () => {},\n toggleSelectedCardId: (_cardId: string) => {},\n };\n }\n\n return {\n setSelectedCardIds: context.setSelectedCardIds,\n addSelectedCardId: context.addSelectedCardId,\n clearSelectedCards: context.clearSelectedCards,\n toggleSelectedCardId: context.toggleSelectedCardId,\n };\n}\n","export const PREVIEW_STACK_LIMIT = 10;\nexport const PREVIEW_STACK_X_OFFSET = 10;\nexport const PREVIEW_STACK_Y_OFFSET = 8;\nexport const PREVIEW_STACK_MIN_OPACITY = 0.75;\n\nexport const STACKED_CLONE_BASE_STYLE: Partial<CSSStyleDeclaration> = {\n pointerEvents: 'none',\n margin: '0',\n width: '100%',\n top: '0',\n left: '0',\n};\n\nexport const DEFAULT_AUTO_SCROLL_OVERFLOW = {\n forLeftEdge: {\n left: 320,\n top: 160,\n bottom: 160,\n },\n forRightEdge: {\n right: 160,\n top: 120,\n bottom: 120,\n },\n};\n","import type { DropTarget } from './types';\n\nexport function applyStyles(\n element: HTMLElement,\n styles: Partial<CSSStyleDeclaration>\n) {\n Object.assign(element.style, styles);\n}\n\nexport function getTargetColumnId(\n dropTargets: DropTarget[],\n targetType: string\n) {\n const target = dropTargets.find((item) => item.data.type === targetType);\n return target ? String(target.data.columnId ?? '') : '';\n}\n","import {\n PREVIEW_STACK_LIMIT,\n PREVIEW_STACK_MIN_OPACITY,\n PREVIEW_STACK_X_OFFSET,\n PREVIEW_STACK_Y_OFFSET,\n STACKED_CLONE_BASE_STYLE,\n} from './constants';\nimport type { KanbanSelectableItem } from './types';\nimport { applyStyles } from './utils';\n\nfunction createStackedClone(original: HTMLElement, index: number) {\n const clone = original.cloneNode(true) as HTMLElement;\n const xOffset = index * PREVIEW_STACK_X_OFFSET;\n const yOffset = index * PREVIEW_STACK_Y_OFFSET;\n const opacity = Math.max(1 - index * 0.1, PREVIEW_STACK_MIN_OPACITY);\n\n applyStyles(clone, {\n ...STACKED_CLONE_BASE_STYLE,\n position: index === 0 ? 'relative' : 'absolute',\n transform: `translate(${xOffset}px, ${yOffset}px)`,\n opacity: String(opacity),\n });\n\n return clone;\n}\n\nfunction createFallbackClone(sourceElement: HTMLElement) {\n const fallback = sourceElement.cloneNode(true) as HTMLElement;\n\n applyStyles(fallback, {\n pointerEvents: 'none',\n margin: '0',\n });\n\n return fallback;\n}\n\nexport function buildDragPreview({\n cardId,\n sourceElement,\n getSelectableItems,\n getSelectedCardIds,\n}: {\n cardId: string;\n sourceElement: HTMLElement;\n getSelectableItems?: () => KanbanSelectableItem[];\n getSelectedCardIds?: () => string[];\n}) {\n const selectedIds = getSelectedCardIds?.() ?? [];\n const idsToPreview = Array.from(new Set([...selectedIds, String(cardId)]));\n const root = document.createElement('div');\n\n applyStyles(root, {\n position: 'relative',\n });\n\n const selectableItems = getSelectableItems?.() ?? [];\n const itemElementById = new Map(\n selectableItems\n .filter((item) => item.element)\n .map((item) => [String(item.id), item.element as HTMLElement])\n );\n\n idsToPreview.slice(0, PREVIEW_STACK_LIMIT).forEach((previewId, index) => {\n const original = itemElementById.get(String(previewId));\n if (!original) return;\n\n root.appendChild(createStackedClone(original, index));\n });\n\n if (!root.childElementCount) {\n root.appendChild(createFallbackClone(sourceElement));\n }\n\n return root;\n}\n","'use client';\n\nimport { useEffect, useRef } from 'react';\n\nimport { draggable } from '@atlaskit/pragmatic-drag-and-drop/element/adapter';\nimport { preserveOffsetOnSource } from '@atlaskit/pragmatic-drag-and-drop/element/preserve-offset-on-source';\nimport { setCustomNativeDragPreview } from '@atlaskit/pragmatic-drag-and-drop/element/set-custom-native-drag-preview';\nimport { useKanbanDndContext } from './context';\nimport { buildDragPreview } from './drag-preview';\nimport type { KanbanCardItemProps } from './types';\n\nexport function KanbanCardItem({\n id,\n children,\n className,\n getSelectedCardIds,\n getSelectableItems,\n}: KanbanCardItemProps) {\n const ref = useRef<HTMLDivElement>(null);\n const context = useKanbanDndContext();\n\n const getSelectedCardIdsSafe =\n getSelectedCardIds ?? context?.getSelectedCardIds;\n const getSelectableItemsSafe =\n getSelectableItems ?? context?.getSelectableItems;\n\n useEffect(() => {\n context?.registerSelectableItem(String(id), ref.current);\n\n return () => {\n context?.registerSelectableItem(String(id), null);\n };\n }, [context, id]);\n\n useEffect(() => {\n const element = ref.current;\n if (!element) return;\n\n return draggable({\n element,\n getInitialData: () => ({\n type: 'card',\n cardId: String(id),\n }),\n onGenerateDragPreview: ({ nativeSetDragImage, source, location }) => {\n setCustomNativeDragPreview({\n getOffset: preserveOffsetOnSource({\n element: source.element,\n input: location.current.input,\n }),\n render({ container }) {\n const root = buildDragPreview({\n cardId: String(id),\n sourceElement: source.element,\n getSelectableItems: getSelectableItemsSafe,\n getSelectedCardIds: getSelectedCardIdsSafe,\n });\n\n container.appendChild(root);\n\n return () => {\n if (root.parentElement === container) {\n container.removeChild(root);\n }\n };\n },\n nativeSetDragImage,\n });\n },\n });\n }, [getSelectableItemsSafe, getSelectedCardIdsSafe, id]);\n\n return (\n <div\n className={className}\n data-draggable=\"true\"\n id={`kanban-card-item-${id}`}\n ref={ref}\n suppressHydrationWarning\n >\n {children}\n </div>\n );\n}\n","type AnyObject = Record<string, unknown>;\n\ntype MoveCardsResolvers<TColumn, TCard> = {\n getColumnId: (column: TColumn) => string;\n getCards: (column: TColumn) => TCard[];\n setCards: (column: TColumn, cards: TCard[]) => TColumn;\n getCardId: (card: TCard) => string;\n};\n\nfunction hasObjectValue(value: unknown): value is AnyObject {\n return typeof value === 'object' && value !== null;\n}\n\nfunction defaultGetColumnId<TColumn>(column: TColumn): string {\n if (!hasObjectValue(column)) return '';\n const id = column.id;\n return id === undefined || id === null ? '' : String(id);\n}\n\nfunction defaultGetCards<TColumn, TCard>(column: TColumn): TCard[] {\n if (!hasObjectValue(column)) return [];\n const cards = column.cards;\n return Array.isArray(cards) ? (cards as TCard[]) : [];\n}\n\nfunction defaultSetCards<TColumn, TCard>(\n column: TColumn,\n cards: TCard[]\n): TColumn {\n if (!hasObjectValue(column)) return column;\n return { ...column, cards } as TColumn;\n}\n\nfunction defaultGetCardId<TCard>(card: TCard): string {\n if (!hasObjectValue(card)) return '';\n const id = card.id;\n return id === undefined || id === null ? '' : String(id);\n}\n\nexport function moveCardsInColumns<TColumn, TCard>(\n columns: TColumn[],\n cardIds: string[],\n targetColumnId: string,\n resolvers: Partial<MoveCardsResolvers<TColumn, TCard>> = {}\n): TColumn[] {\n const getColumnId = resolvers.getColumnId ?? defaultGetColumnId<TColumn>;\n const getCards = resolvers.getCards ?? defaultGetCards<TColumn, TCard>;\n const setCards = resolvers.setCards ?? defaultSetCards<TColumn, TCard>;\n const getCardId = resolvers.getCardId ?? defaultGetCardId<TCard>;\n\n const selectedIds = new Set(cardIds);\n if (selectedIds.size === 0) return columns;\n\n const cardsToMove: TCard[] = [];\n let didRemoveCards = false;\n\n const columnsWithoutMovedCards = columns.map((column) => {\n const currentCards = getCards(column);\n const remainingCards = currentCards.filter((card) => {\n if (selectedIds.has(getCardId(card))) {\n cardsToMove.push(card);\n return false;\n }\n\n return true;\n });\n\n if (remainingCards.length === currentCards.length) {\n return column;\n }\n\n didRemoveCards = true;\n return setCards(column, remainingCards);\n });\n\n if (cardsToMove.length === 0) return columns;\n\n let didAddCards = false;\n\n const nextColumns = columnsWithoutMovedCards.map((column) => {\n const currentCards = getCards(column);\n\n if (getColumnId(column) === targetColumnId) {\n const existingIds = new Set(currentCards.map((card) => getCardId(card)));\n const incomingCards = cardsToMove.filter(\n (card) => !existingIds.has(getCardId(card))\n );\n\n if (incomingCards.length === 0) {\n return column;\n }\n\n didAddCards = true;\n return setCards(column, [...currentCards, ...incomingCards]);\n }\n\n return column;\n });\n\n return didRemoveCards || didAddCards ? nextColumns : columns;\n}\n","'use client';\n\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { combine } from '@atlaskit/pragmatic-drag-and-drop/combine';\nimport { monitorForElements } from '@atlaskit/pragmatic-drag-and-drop/element/adapter';\nimport { reorder } from '@atlaskit/pragmatic-drag-and-drop/reorder';\nimport { autoScrollForElements } from '@atlaskit/pragmatic-drag-and-drop-auto-scroll/element';\nimport { unsafeOverflowAutoScrollForElements } from '@atlaskit/pragmatic-drag-and-drop-auto-scroll/unsafe-overflow/element';\nimport { DEFAULT_AUTO_SCROLL_OVERFLOW } from './constants';\nimport { KanbanDndProvider } from './context';\nimport { moveCardsInColumns } from './move-cards';\nimport type { DropTarget, KanbanDndMonitorProps } from './types';\nimport { getTargetColumnId } from './utils';\n\nfunction areSameCardSet(a: string[], b: string[]) {\n if (a.length !== b.length) return false;\n const aSet = new Set(a.map(String));\n if (aSet.size !== b.length) return false;\n return b.every((id) => aSet.has(String(id)));\n}\n\nfunction defaultGetColumnId<TColumn>(column: TColumn): string {\n const maybeColumn = column as Record<string, unknown>;\n const id = maybeColumn?.id;\n return id === undefined || id === null ? '' : String(id);\n}\n\nexport function KanbanDndMonitor<TColumn>({\n onCardsMove,\n onColumnReorder,\n scrollContainerId,\n setColumns,\n children,\n getColumnId,\n moveCards,\n getCardsFromColumn,\n setCardsInColumn,\n getCardId,\n getSelectedCardIds,\n setSelectedCardIds,\n addSelectedCardId,\n clearSelectedCards,\n onSelectionChange,\n setIsDragging,\n autoScrollOverflow,\n isAutoScrollEnabled = true,\n renderIdleLayer,\n}: KanbanDndMonitorProps<TColumn>) {\n const [isDragging, setLocalIsDragging] = useState(false);\n const isDraggingRef = useRef(false);\n const selectedCardIdsRef = useRef<string[]>([]);\n const selectableItemMapRef = useRef(new Map<string, HTMLElement>());\n const selectionListenersRef = useRef(new Set<() => void>());\n\n const notifySelectionListeners = useCallback(() => {\n selectionListenersRef.current.forEach((listener) => listener());\n }, []);\n\n const subscribeSelection = useCallback((listener: () => void) => {\n selectionListenersRef.current.add(listener);\n return () => {\n selectionListenersRef.current.delete(listener);\n };\n }, []);\n const getColumnIdSafe = useCallback(\n (column: TColumn) =>\n getColumnId ? getColumnId(column) : defaultGetColumnId(column),\n [getColumnId]\n );\n\n const getSelectedCardIdsSafe = useCallback(\n () => getSelectedCardIds?.() ?? selectedCardIdsRef.current,\n [getSelectedCardIds]\n );\n\n const setInternalSelectedCardIdsSafe = useCallback(\n (nextIds: string[]) => {\n selectedCardIdsRef.current = nextIds;\n notifySelectionListeners();\n onSelectionChange?.(nextIds);\n },\n [notifySelectionListeners, onSelectionChange]\n );\n\n const addSelectedCardIdSafe = useCallback(\n (cardId: string) => {\n const selectedIds = getSelectedCardIdsSafe();\n if (selectedIds.includes(cardId)) {\n return;\n }\n\n const nextIds = [...selectedIds, cardId];\n\n if (addSelectedCardId) {\n addSelectedCardId(cardId);\n notifySelectionListeners();\n onSelectionChange?.(nextIds);\n return;\n }\n\n setInternalSelectedCardIdsSafe(nextIds);\n },\n [\n addSelectedCardId,\n getSelectedCardIdsSafe,\n notifySelectionListeners,\n onSelectionChange,\n setInternalSelectedCardIdsSafe,\n ]\n );\n\n const clearSelectedCardsSafe = useCallback(() => {\n const currentIds = getSelectedCardIdsSafe();\n if (currentIds.length === 0) {\n return;\n }\n\n if (clearSelectedCards) {\n clearSelectedCards();\n notifySelectionListeners();\n onSelectionChange?.([]);\n return;\n }\n\n setInternalSelectedCardIdsSafe([]);\n }, [\n clearSelectedCards,\n getSelectedCardIdsSafe,\n notifySelectionListeners,\n onSelectionChange,\n setInternalSelectedCardIdsSafe,\n ]);\n\n const setSelectedCardIdsSafe = useCallback(\n (cardIds: string[]) => {\n const nextIds = Array.from(new Set(cardIds.map(String)));\n const currentIds = getSelectedCardIdsSafe();\n\n if (areSameCardSet(nextIds, currentIds)) {\n return;\n }\n\n if (setSelectedCardIds) {\n setSelectedCardIds(nextIds);\n notifySelectionListeners();\n onSelectionChange?.(nextIds);\n return;\n }\n\n if (getSelectedCardIds && clearSelectedCards && addSelectedCardId) {\n clearSelectedCards();\n nextIds.forEach((cardId) => addSelectedCardId(cardId));\n notifySelectionListeners();\n onSelectionChange?.(nextIds);\n return;\n }\n\n setInternalSelectedCardIdsSafe(nextIds);\n },\n [\n addSelectedCardId,\n clearSelectedCards,\n getSelectedCardIdsSafe,\n getSelectedCardIds,\n notifySelectionListeners,\n onSelectionChange,\n setSelectedCardIds,\n setInternalSelectedCardIdsSafe,\n ]\n );\n\n const toggleSelectedCardIdSafe = useCallback(\n (cardId: string) => {\n const selectedIds = getSelectedCardIdsSafe();\n if (selectedIds.includes(cardId)) {\n setSelectedCardIdsSafe(\n selectedIds.filter((selectedId) => selectedId !== cardId)\n );\n return;\n }\n\n addSelectedCardIdSafe(cardId);\n },\n [addSelectedCardIdSafe, getSelectedCardIdsSafe, setSelectedCardIdsSafe]\n );\n\n const registerSelectableItem = useCallback(\n (id: string, element: HTMLElement | null) => {\n if (!element) {\n selectableItemMapRef.current.delete(id);\n return;\n }\n\n selectableItemMapRef.current.set(id, element);\n },\n []\n );\n\n const getSelectableItems = useCallback(\n () =>\n Array.from(selectableItemMapRef.current.entries()).map(\n ([id, element]) => ({\n id,\n element,\n })\n ),\n []\n );\n\n const contextValue = useMemo(\n () => ({\n getIsDragging: () => isDraggingRef.current,\n getSelectedCardIds: getSelectedCardIdsSafe,\n subscribeSelection,\n setSelectedCardIds: setSelectedCardIdsSafe,\n addSelectedCardId: addSelectedCardIdSafe,\n clearSelectedCards: clearSelectedCardsSafe,\n toggleSelectedCardId: toggleSelectedCardIdSafe,\n registerSelectableItem,\n getSelectableItems,\n }),\n [\n addSelectedCardIdSafe,\n clearSelectedCardsSafe,\n getSelectableItems,\n getSelectedCardIdsSafe,\n registerSelectableItem,\n setSelectedCardIdsSafe,\n subscribeSelection,\n toggleSelectedCardIdSafe,\n ]\n );\n\n const setDraggingState = useCallback(\n (value: boolean) => {\n isDraggingRef.current = value;\n if (renderIdleLayer) {\n setLocalIsDragging(value);\n }\n },\n [renderIdleLayer]\n );\n\n const finishDrag = () => {\n setDraggingState(false);\n setIsDragging?.(false);\n clearSelectedCardsSafe();\n };\n\n const startDrag = (source: { data: Record<string, unknown> }) => {\n if (source.data.type !== 'column' && source.data.type !== 'card') return;\n\n if (source.data.type === 'card') {\n const cardId = String(source.data.cardId ?? '');\n const selectedIds = getSelectedCardIdsSafe();\n if (!selectedIds.includes(cardId)) {\n addSelectedCardIdSafe(cardId);\n }\n }\n\n setIsDragging?.(true);\n setDraggingState(true);\n };\n\n const dropColumn = (sourceColumnId: string, targetColumnId: string) => {\n if (!sourceColumnId || sourceColumnId === targetColumnId) return;\n\n let nextOrder: number | null = null;\n\n setColumns((prev) => {\n const oldIndex = prev.findIndex(\n (col) => getColumnIdSafe(col) === sourceColumnId\n );\n const newIndex = prev.findIndex(\n (col) => getColumnIdSafe(col) === targetColumnId\n );\n\n if (oldIndex < 0 || newIndex < 0 || oldIndex === newIndex) {\n return prev;\n }\n\n nextOrder = newIndex + 1;\n return reorder({\n list: prev,\n startIndex: oldIndex,\n finishIndex: newIndex,\n });\n });\n\n if (nextOrder !== null) {\n onColumnReorder?.({ columnId: sourceColumnId, order: nextOrder });\n }\n };\n\n const dropCard = (cardId: string, targetColumnId: string) => {\n if (!cardId || !targetColumnId) return;\n\n const selectedIds = getSelectedCardIdsSafe();\n const idsToMove = selectedIds.length > 0 ? selectedIds : [cardId];\n\n setColumns((prev) => {\n if (moveCards) {\n return moveCards(prev, idsToMove, targetColumnId);\n }\n\n return moveCardsInColumns(prev, idsToMove, targetColumnId, {\n getColumnId: getColumnIdSafe,\n getCards: getCardsFromColumn as\n | ((column: TColumn) => unknown[])\n | undefined,\n setCards: setCardsInColumn as\n | ((column: TColumn, cards: unknown[]) => TColumn)\n | undefined,\n getCardId,\n });\n });\n onCardsMove?.({ cardIds: idsToMove, targetColumnId });\n };\n\n useEffect(() => {\n const monitorCleanup = monitorForElements({\n onDragStart: ({ source }) => startDrag(source),\n onDrop: ({ source, location }) => {\n const dropTargets = location.current.dropTargets as DropTarget[];\n\n if (source.data.type === 'column') {\n dropColumn(\n String(source.data.columnId ?? ''),\n getTargetColumnId(dropTargets, 'column')\n );\n finishDrag();\n return;\n }\n\n if (source.data.type === 'card') {\n dropCard(\n String(source.data.cardId ?? ''),\n getTargetColumnId(dropTargets, 'column-drop')\n );\n finishDrag();\n return;\n }\n\n finishDrag();\n },\n });\n\n if (!isAutoScrollEnabled || !scrollContainerId) {\n return monitorCleanup;\n }\n\n const scrollContainer = document.getElementById(scrollContainerId);\n if (!scrollContainer) {\n return monitorCleanup;\n }\n\n return combine(\n monitorCleanup,\n autoScrollForElements({\n element: scrollContainer,\n canScroll: ({ source }) =>\n source.data.type === 'card' || source.data.type === 'column',\n getAllowedAxis: () => 'horizontal',\n }),\n unsafeOverflowAutoScrollForElements({\n element: scrollContainer,\n canScroll: ({ source }) =>\n source.data.type === 'card' || source.data.type === 'column',\n getAllowedAxis: () => 'horizontal',\n getOverflow: () => autoScrollOverflow ?? DEFAULT_AUTO_SCROLL_OVERFLOW,\n })\n );\n }, [\n addSelectedCardIdSafe,\n autoScrollOverflow,\n clearSelectedCardsSafe,\n getCardId,\n getCardsFromColumn,\n getColumnIdSafe,\n getSelectedCardIdsSafe,\n isAutoScrollEnabled,\n moveCards,\n onCardsMove,\n onColumnReorder,\n setCardsInColumn,\n scrollContainerId,\n setSelectedCardIds,\n setColumns,\n setIsDragging,\n ]);\n\n return (\n <KanbanDndProvider value={contextValue}>\n <div className=\"contain-layout h-full\" id=\"draggable-area\">\n {!isDragging && renderIdleLayer}\n {children}\n </div>\n </KanbanDndProvider>\n );\n}\n","'use client';\n\nimport { useEffect, useRef, useState } from 'react';\n\nimport { cn } from '@/lib/utils';\nimport { dropTargetForElements } from '@atlaskit/pragmatic-drag-and-drop/element/adapter';\nimport type { KanbanDropZoneProps } from './types';\n\nexport function KanbanDropZone({\n children,\n id,\n className,\n isOverClassName,\n}: KanbanDropZoneProps) {\n const [isOver, setIsOver] = useState(false);\n const ref = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const element = ref.current;\n if (!element) return;\n\n return dropTargetForElements({\n element,\n canDrop: ({ source }) => source.data.type === 'card',\n getData: () => ({\n type: 'column-drop',\n columnId: String(id),\n }),\n onDragEnter: () => setIsOver(true),\n onDragLeave: () => setIsOver(false),\n onDrop: () => setIsOver(false),\n });\n }, [id]);\n\n return (\n <div\n className={cn(\n 'border flex-1 border-transparent rounded-xl transition-colors',\n isOver && (isOverClassName ?? 'border-border'),\n className\n )}\n id={`kanban-drop-zone-${id}`}\n ref={ref}\n >\n {children}\n </div>\n );\n}\n","'use client';\n\nimport type { MutableRefObject } from 'react';\nimport { useEffect, useMemo, useRef } from 'react';\n\nimport {\n boxesIntersect,\n useSelectionContainer,\n} from '@air/react-drag-to-select';\nimport { useKanbanDndContext } from './context';\nimport type { KanbanSelectorProps } from './types';\n\nconst DEFAULT_DRAG_AREA_ID = 'draggable-area';\nconst DEFAULT_AUTO_SCROLL_MARGIN = 120;\nconst DEFAULT_IGNORED_SLOTS = [\n 'sheet-content',\n 'popover-content',\n 'select-content',\n 'dialog-content',\n 'dialog-overlay',\n];\n\nconst clampDelta = (delta: number, current: number, max: number) =>\n delta > 0 ? Math.min(delta, max - current) : Math.max(delta, -current);\n\nconst hasSameCardSet = (a: string[], b: string[]) => {\n if (a.length !== b.length) return false;\n const aSet = new Set(a.map(String));\n if (aSet.size !== b.length) return false;\n return b.every((id) => aSet.has(String(id)));\n};\n\nconst edgeDelta = (\n pointer: number,\n start: number,\n end: number,\n margin: number,\n dt: number\n) => {\n if (pointer < start + margin)\n return ((pointer - (start + margin)) / margin) * dt;\n if (pointer > end - margin) return ((pointer - (end - margin)) / margin) * dt;\n return 0;\n};\n\nfunction findScrollable(\n node: HTMLElement | null,\n axis: 'x' | 'y'\n): HTMLElement | null {\n if (!node) return null;\n\n const style = window.getComputedStyle(node);\n const canScrollX =\n /(auto|scroll)/.test(style.overflowX) &&\n node.scrollWidth > node.clientWidth;\n const canScrollY =\n /(auto|scroll)/.test(style.overflowY) &&\n node.scrollHeight > node.clientHeight;\n\n if ((axis === 'x' && canScrollX) || (axis === 'y' && canScrollY)) return node;\n return findScrollable(node.parentElement, axis);\n}\n\nfunction getContainerBounds(container: HTMLElement | null) {\n if (\n !container ||\n container === document.documentElement ||\n container === document.body\n ) {\n return {\n left: 0,\n right: window.innerWidth,\n top: 0,\n bottom: window.innerHeight,\n };\n }\n\n const rect = container.getBoundingClientRect();\n return {\n left: Math.max(0, rect.left),\n right: Math.min(window.innerWidth, rect.right),\n top: Math.max(0, rect.top),\n bottom: Math.min(window.innerHeight, rect.bottom),\n };\n}\n\nfunction shouldStartSelecting(\n target: EventTarget | null,\n ignoredSlots: string[]\n): boolean {\n if (!(target instanceof Element)) return false;\n\n return !(\n target.closest('[data-draggable=\"true\"]') ||\n ignoredSlots.some((slot) => target.closest(`[data-slot=\"${slot}\"]`))\n );\n}\n\nfunction useAutoScroll({\n isSelectingRef,\n dragAreaId,\n autoScrollMargin,\n}: {\n isSelectingRef: MutableRefObject<boolean>;\n dragAreaId: string;\n autoScrollMargin: number;\n}) {\n useEffect(() => {\n let raf = 0;\n let lastTime = performance.now();\n const pos = { x: 0, y: 0 };\n let xContainer: HTMLElement | null = null;\n let yContainer: HTMLElement | null = null;\n let xMax = 0;\n let yMax = 0;\n let useWindowY = false;\n\n const onMove = (e: PointerEvent) => (\n (pos.x = e.clientX), (pos.y = e.clientY)\n );\n\n window.addEventListener('pointermove', onMove, { passive: true });\n\n const reset = () => {\n xContainer = null;\n yContainer = null;\n xMax = 0;\n yMax = 0;\n useWindowY = false;\n };\n\n const step = (time: number) => {\n const dt = time - lastTime;\n lastTime = time;\n\n if (!isSelectingRef.current) {\n reset();\n raf = requestAnimationFrame(step);\n return;\n }\n\n if (!xContainer && !yContainer && xMax === 0 && yMax === 0) {\n const startNode =\n document.getElementById(dragAreaId)?.parentElement ?? null;\n xContainer = findScrollable(startNode, 'x');\n yContainer = findScrollable(startNode, 'y');\n useWindowY = !yContainer;\n xMax = xContainer ? xContainer.scrollWidth - xContainer.clientWidth : 0;\n yMax = useWindowY\n ? document.documentElement.scrollHeight - window.innerHeight\n : yContainer\n ? yContainer.scrollHeight - yContainer.clientHeight\n : 0;\n }\n\n const xBounds = getContainerBounds(xContainer);\n const yBounds = useWindowY\n ? { top: 0, bottom: window.innerHeight }\n : getContainerBounds(yContainer);\n\n const dx = edgeDelta(\n pos.x,\n xBounds.left,\n xBounds.right,\n autoScrollMargin,\n dt\n );\n const dy = edgeDelta(\n pos.y,\n yBounds.top,\n yBounds.bottom,\n autoScrollMargin,\n dt\n );\n\n let didScroll = false;\n\n if (dx && xContainer && xMax > 0) {\n const clampedDx = clampDelta(dx, xContainer.scrollLeft, xMax);\n if (clampedDx) {\n xContainer.scrollBy(clampedDx, 0);\n didScroll = true;\n }\n }\n\n if (dy && yMax > 0) {\n if (useWindowY) {\n const clampedDy = clampDelta(\n dy,\n window.scrollY || document.documentElement.scrollTop,\n yMax\n );\n if (clampedDy) {\n window.scrollBy(0, clampedDy);\n didScroll = true;\n }\n } else if (yContainer) {\n const clampedDy = clampDelta(dy, yContainer.scrollTop, yMax);\n if (clampedDy) {\n yContainer.scrollBy(0, clampedDy);\n didScroll = true;\n }\n }\n }\n\n if (didScroll) {\n document.body.dispatchEvent(\n new MouseEvent('mousemove', {\n clientX: pos.x,\n clientY: pos.y,\n bubbles: true,\n cancelable: true,\n })\n );\n }\n\n raf = requestAnimationFrame(step);\n };\n\n raf = requestAnimationFrame(step);\n\n return () => {\n window.removeEventListener('pointermove', onMove);\n cancelAnimationFrame(raf);\n };\n }, [autoScrollMargin, dragAreaId, isSelectingRef]);\n}\n\nexport function KanbanSelector({\n dragAreaId = DEFAULT_DRAG_AREA_ID,\n autoScrollMargin = DEFAULT_AUTO_SCROLL_MARGIN,\n ignoredSlots = DEFAULT_IGNORED_SLOTS,\n}: KanbanSelectorProps) {\n const context = useKanbanDndContext();\n const isSelectingRef = useRef(false);\n\n useAutoScroll({ isSelectingRef, dragAreaId, autoScrollMargin });\n\n const shouldStart = useMemo(\n () => (target: EventTarget | null) =>\n shouldStartSelecting(target, ignoredSlots),\n [ignoredSlots]\n );\n\n const { DragSelection } = useSelectionContainer({\n shouldStartSelecting: shouldStart,\n onSelectionChange: (selection: Parameters<typeof boxesIntersect>[0]) => {\n if (!context) return;\n\n const selectedIds: string[] = [];\n\n context.getSelectableItems().forEach((item) => {\n if (!item.element) return;\n\n const rect = item.element.getBoundingClientRect();\n const cardRect = {\n ...rect,\n left: rect.left + window.scrollX,\n top: rect.top,\n width: rect.width,\n height: rect.height,\n };\n\n if (boxesIntersect(selection, cardRect)) {\n selectedIds.push(String(item.id));\n }\n });\n\n if (hasSameCardSet(selectedIds, context.getSelectedCardIds())) {\n return;\n }\n\n context.setSelectedCardIds(selectedIds);\n },\n onSelectionEnd: () => {\n isSelectingRef.current = false;\n },\n onSelectionStart: () => {\n isSelectingRef.current = true;\n },\n selectionProps: {\n style: {\n pointerEvents: 'none',\n position: 'fixed',\n inset: 0,\n zIndex: 50,\n },\n },\n });\n\n useEffect(() => {\n if (!context) return;\n\n const handlePointerUp = (e: PointerEvent) => {\n const target = e.target as Element | null;\n if (\n !isSelectingRef.current &&\n !context.getIsDragging() &&\n !target?.closest('[data-draggable=\"true\"]')\n ) {\n context.clearSelectedCards();\n }\n };\n\n document.addEventListener('pointerup', handlePointerUp);\n return () => document.removeEventListener('pointerup', handlePointerUp);\n }, [context]);\n\n if (!context) return null;\n\n return <DragSelection />;\n}\n","'use client';\n\nimport { useEffect } from 'react';\n\nimport { combine } from '@atlaskit/pragmatic-drag-and-drop/combine';\nimport {\n draggable,\n dropTargetForElements,\n} from '@atlaskit/pragmatic-drag-and-drop/element/adapter';\nimport type { UseKanbanColumnDnDProps } from './types';\n\nexport function useKanbanColumnDnD({\n columnId,\n elementRef,\n dragHandleRef,\n}: UseKanbanColumnDnDProps) {\n useEffect(() => {\n const element = elementRef.current;\n if (!element) return;\n\n return combine(\n draggable({\n element,\n dragHandle: dragHandleRef?.current ?? undefined,\n getInitialData: () => ({\n type: 'column',\n columnId: String(columnId),\n }),\n }),\n dropTargetForElements({\n element,\n canDrop: ({ source }) =>\n source.data.type === 'column' &&\n String(source.data.columnId) !== String(columnId),\n getData: () => ({\n type: 'column',\n columnId: String(columnId),\n }),\n })\n );\n }, [columnId, dragHandleRef, elementRef]);\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import * as react_jsx_runtime8 from "react/jsx-runtime";
1
+ import * as react_jsx_runtime0 from "react/jsx-runtime";
2
2
 
3
3
  //#region src/components/page-header/page-header.d.ts
4
4
  interface PageHeaderProps {
@@ -10,7 +10,7 @@ declare function PageHeader({
10
10
  title,
11
11
  help,
12
12
  description
13
- }: PageHeaderProps): react_jsx_runtime8.JSX.Element;
13
+ }: PageHeaderProps): react_jsx_runtime0.JSX.Element;
14
14
  //#endregion
15
15
  export { PageHeader, type PageHeaderProps };
16
16
  //# sourceMappingURL=page-header.d.ts.map
@@ -1,5 +1,5 @@
1
1
  import { FieldPath, FieldPathValue, FieldValues, UseControllerProps } from "react-hook-form";
2
- import * as react_jsx_runtime6 from "react/jsx-runtime";
2
+ import * as react_jsx_runtime7 from "react/jsx-runtime";
3
3
  import { Options } from "nuqs";
4
4
  import { PopoverProps } from "@radix-ui/react-popover";
5
5
 
@@ -76,7 +76,7 @@ declare function RemoteSelectorField<T, TFieldValues extends FieldValues = Field
76
76
  ...props
77
77
  }: RemoteSelectorFieldProps<TFieldValues, TFieldName> & BaseRemoteSelectorProps<T> & {
78
78
  withPortal?: boolean;
79
- }): react_jsx_runtime6.JSX.Element;
79
+ }): react_jsx_runtime7.JSX.Element;
80
80
  interface RemoteSelectorQueryProps<T> extends BaseRemoteSelectorProps<T> {
81
81
  name: string;
82
82
  defaultValue?: string;
@@ -96,7 +96,7 @@ declare function RemoteSelectorQuery<T>({
96
96
  fieldLabel,
97
97
  type,
98
98
  ...props
99
- }: RemoteSelectorQueryProps<T>): react_jsx_runtime6.JSX.Element;
99
+ }: RemoteSelectorQueryProps<T>): react_jsx_runtime7.JSX.Element;
100
100
  //#endregion
101
101
  export { type BaseRemoteSelectorProps, RemoteSelectorField as RemoteSelector, RemoteSelectorField, type RemoteSelectorFieldProps, RemoteSelectorQuery, type RemoteSelectorQueryProps, type TUseData };
102
102
  //# sourceMappingURL=remote-selector.d.ts.map
@@ -1,5 +1,5 @@
1
1
  import * as React$1 from "react";
2
- import * as react_jsx_runtime10 from "react/jsx-runtime";
2
+ import * as react_jsx_runtime9 from "react/jsx-runtime";
3
3
  import { Item, Root } from "@radix-ui/react-toggle-group";
4
4
  import { VariantProps } from "class-variance-authority";
5
5
  import * as class_variance_authority_types0 from "class-variance-authority/types";
@@ -28,7 +28,7 @@ declare function ToggleGroup({
28
28
  transition,
29
29
  activeClassName,
30
30
  ...props
31
- }: ToggleGroupProps): react_jsx_runtime10.JSX.Element;
31
+ }: ToggleGroupProps): react_jsx_runtime9.JSX.Element;
32
32
  //#endregion
33
33
  //#region src/components/toggle-field/ToggleField.d.ts
34
34
  type ToggleOption = {
@@ -1 +1 @@
1
- {"version":3,"file":"toggle-field.d.ts","names":[],"sources":["../src/components/toggle-field/ToggleGroup.tsx","../src/components/toggle-field/ToggleField.tsx"],"sourcesContent":[],"mappings":";;;;;;;;cAiBa,sBAuCX;;;;EAvCW,SAAA,CAAA,EAAA,YA8BZ,GAAA,UAAA,GAAA,IAAA,GAAA,SAAA;AAAC,CAAA,GAAD,+BAAA,CAAA,SASC,CAAA,GAAA,SAAA,EAAA,GAAA,MAAA;cAPI,mBA4Be,EAAA,CAAA,KAAS,CAAT,EAAA,CAAA;EAA+B,SAAA,CAAA,EAAA,YAAA,GAAA,UAAA,GAAA,IAAA,GAAA,SAAA;CAA5B,GArBtB,+BAAA,CAAA,SAqB4B,CAAA,GAAA,SAAA,EAAA,GAAA,MAAA;KAAzB,gBAAA,GAAmB,OAAA,CAAM,cACH,CAAA,OADyB,IACzB,CAAA,GAAzB,IAAyB,CAApB,YAAoB,CAAA,OAAA,cAAA,CAAA,EAAA,MAAA,CAAA,GACzB,YADyB,CAAA,OACL,mBADK,CAAA,GAAA;EAApB,UAAA,CAAA,EAEU,UAFV;EAAL,eAAA,CAAA,EAAA,MAAA;CACoB;iBAKb,WAAA,CALP;EAAA,SAAA;EAAA,OAAA;EAAA,SAAA;EAAA,IAAA;EAAA,QAAA;EAAA,UAAA;EAAA,eAAA;EAAA,GAAA;AAAA,CAAA,EAcC,gBAdD,CAAA,EAciB,mBAAA,CAAA,GAAA,CAAA,OAdjB;;;KCrEU,YAAA;;kBAAgD,KAAA,CAAM;;KAEtD,gBAAA,GAAmB,KAC7B,KAAA,CAAM,sBAAsB;;WAInB;EDAE,IAAA,CAAA,EAAA,QAAA,GA8BZ,UAAA;EAEK,IAAA,EAAA,MAAA;EA4BD,YAAA,CAAA,ECzDY,YDyDI,GCzDW,YDyDX,EAAA;EAA+B,kBAAA,CAAA,EAAA,OAAA;CAA5B;cCrDlB,WDsDqB,ECtDR,KAAA,CAAM,EDsDE,CCtDC,gBDsDD,CAAA"}
1
+ {"version":3,"file":"toggle-field.d.ts","names":[],"sources":["../src/components/toggle-field/ToggleGroup.tsx","../src/components/toggle-field/ToggleField.tsx"],"sourcesContent":[],"mappings":";;;;;;;;cAiBa,sBAuCX;;;;EAvCW,SAAA,CAAA,EAAA,YA8BZ,GAAA,UAAA,GAAA,IAAA,GAAA,SAAA;AAAC,CAAA,GAAD,+BAAA,CAAA,SASC,CAAA,GAAA,SAAA,EAAA,GAAA,MAAA;cAPI,mBA4Be,EAAA,CAAA,KAAS,CAAT,EAAA,CAAA;EAA+B,SAAA,CAAA,EAAA,YAAA,GAAA,UAAA,GAAA,IAAA,GAAA,SAAA;CAA5B,GArBtB,+BAAA,CAAA,SAqB4B,CAAA,GAAA,SAAA,EAAA,GAAA,MAAA;KAAzB,gBAAA,GAAmB,OAAA,CAAM,cACH,CAAA,OADyB,IACzB,CAAA,GAAzB,IAAyB,CAApB,YAAoB,CAAA,OAAA,cAAA,CAAA,EAAA,MAAA,CAAA,GACzB,YADyB,CAAA,OACL,mBADK,CAAA,GAAA;EAApB,UAAA,CAAA,EAEU,UAFV;EAAL,eAAA,CAAA,EAAA,MAAA;CACoB;iBAKb,WAAA,CALP;EAAA,SAAA;EAAA,OAAA;EAAA,SAAA;EAAA,IAAA;EAAA,QAAA;EAAA,UAAA;EAAA,eAAA;EAAA,GAAA;AAAA,CAAA,EAcC,gBAdD,CAAA,EAciB,kBAAA,CAAA,GAAA,CAAA,OAdjB;;;KCrEU,YAAA;;kBAAgD,KAAA,CAAM;;KAEtD,gBAAA,GAAmB,KAC7B,KAAA,CAAM,sBAAsB;;WAInB;EDAE,IAAA,CAAA,EAAA,QAAA,GA8BZ,UAAA;EAEK,IAAA,EAAA,MAAA;EA4BD,YAAA,CAAA,ECzDY,YDyDI,GCzDW,YDyDX,EAAA;EAA+B,kBAAA,CAAA,EAAA,OAAA;CAA5B;cCrDlB,WDsDqB,ECtDR,KAAA,CAAM,EDsDE,CCtDC,gBDsDD,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "maquinaweb-ui",
3
- "version": "2.48.0",
3
+ "version": "2.49.0",
4
4
  "description": "A minimal React component library",
5
5
  "type": "module",
6
6
  "sideEffects": false,