maquinaweb-ui 2.52.0 → 2.53.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 { ComponentProps, ElementType } from "react";
2
- import * as react_jsx_runtime0 from "react/jsx-runtime";
2
+ import * as react_jsx_runtime1 from "react/jsx-runtime";
3
3
 
4
4
  //#region src/components/container-animation/container-animation.d.ts
5
5
  type ContainerAnimationProps<T extends ElementType = 'div'> = ComponentProps<'div'> & ComponentProps<T> & {
@@ -23,7 +23,7 @@ declare const ContainerAnimation: <T extends ElementType = "div">({
23
23
  distance,
24
24
  hideNotInView,
25
25
  ...props
26
- }: ContainerAnimationProps<T>) => react_jsx_runtime0.JSX.Element;
26
+ }: ContainerAnimationProps<T>) => react_jsx_runtime1.JSX.Element;
27
27
  //#endregion
28
28
  export { ContainerAnimation, type ContainerAnimationProps };
29
29
  //# sourceMappingURL=container-animation.d.ts.map
@@ -1,5 +1,5 @@
1
1
  import { FieldPath, FieldValues, UseControllerProps } from "react-hook-form";
2
- import * as react_jsx_runtime6 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_runtime6.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_runtime5 from "react/jsx-runtime";
4
+ import * as react_jsx_runtime3 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_runtime5.JSX.Element;
74
+ }: InputSuggestProps<TFieldValues, TFieldName> & PopoverProps): react_jsx_runtime3.JSX.Element;
75
75
  //#endregion
76
76
  export { InputSuggest, type InputSuggestProps };
77
77
  //# sourceMappingURL=input-suggest.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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"}
@@ -556,29 +556,31 @@ const DEFAULT_IGNORED_SLOTS = [
556
556
  "dialog-content",
557
557
  "dialog-overlay"
558
558
  ];
559
+ const SELECTION_STYLE = {
560
+ pointerEvents: "none",
561
+ position: "fixed",
562
+ inset: 0,
563
+ zIndex: 50
564
+ };
559
565
  const clampDelta = (delta, current, max) => delta > 0 ? Math.min(delta, max - current) : Math.max(delta, -current);
566
+ const uniqueIds = (ids) => Array.from(new Set(ids.map(String)));
560
567
  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)));
568
+ const aIds = uniqueIds(a);
569
+ const bIds = uniqueIds(b);
570
+ if (aIds.length !== bIds.length) return false;
571
+ const aSet = new Set(aIds);
572
+ return bIds.every((id) => aSet.has(id));
565
573
  };
566
574
  const toggleSelectionByArea = (baseSelection, intersectingIds) => {
567
- const dedupedBase = Array.from(new Set(baseSelection.map(String)));
568
- const baseSet = new Set(dedupedBase);
569
- const nextSelection = [...dedupedBase];
570
- intersectingIds.forEach((id) => {
571
- const normalizedId = String(id);
572
- if (baseSet.has(normalizedId)) {
573
- baseSet.delete(normalizedId);
574
- const index = nextSelection.indexOf(normalizedId);
575
- if (index >= 0) nextSelection.splice(index, 1);
575
+ const nextSelection = new Set(uniqueIds(baseSelection));
576
+ uniqueIds(intersectingIds).forEach((id) => {
577
+ if (nextSelection.has(id)) {
578
+ nextSelection.delete(id);
576
579
  return;
577
580
  }
578
- baseSet.add(normalizedId);
579
- nextSelection.push(normalizedId);
581
+ nextSelection.add(id);
580
582
  });
581
- return nextSelection;
583
+ return Array.from(nextSelection);
582
584
  };
583
585
  const edgeDelta = (pointer, start, end, margin, dt) => {
584
586
  if (pointer < start + margin) return (pointer - (start + margin)) / margin * dt;
@@ -612,6 +614,21 @@ function shouldStartSelecting(target, ignoredSlots) {
612
614
  if (!(target instanceof Element)) return false;
613
615
  return !(target.closest("[data-draggable=\"true\"]") || ignoredSlots.some((slot) => target.closest(`[data-slot="${slot}"]`)));
614
616
  }
617
+ function getIntersectingCardIds(selection, getSelectableItems) {
618
+ const selectedIds = [];
619
+ getSelectableItems().forEach((item) => {
620
+ if (!item.element) return;
621
+ const rect = item.element.getBoundingClientRect();
622
+ if (boxesIntersect(selection, {
623
+ ...rect,
624
+ left: rect.left + window.scrollX,
625
+ top: rect.top,
626
+ width: rect.width,
627
+ height: rect.height
628
+ })) selectedIds.push(String(item.id));
629
+ });
630
+ return uniqueIds(selectedIds);
631
+ }
615
632
  function useAutoScroll({ isSelectingRef, dragAreaId, autoScrollMargin }) {
616
633
  useEffect(() => {
617
634
  let raf = 0;
@@ -620,62 +637,57 @@ function useAutoScroll({ isSelectingRef, dragAreaId, autoScrollMargin }) {
620
637
  x: 0,
621
638
  y: 0
622
639
  };
623
- let xContainer = null;
624
- let yContainer = null;
625
- let xMax = 0;
626
- let yMax = 0;
627
- let useWindowY = false;
640
+ let scrollState = null;
628
641
  const onMove = (e) => (pos.x = e.clientX, pos.y = e.clientY);
629
642
  window.addEventListener("pointermove", onMove, { passive: true });
630
- const reset = () => {
631
- xContainer = null;
632
- yContainer = null;
633
- xMax = 0;
634
- yMax = 0;
635
- useWindowY = false;
643
+ const buildScrollState = () => {
644
+ const startNode = document.getElementById(dragAreaId)?.parentElement ?? null;
645
+ const xContainer = findScrollable(startNode, "x");
646
+ const yContainer = findScrollable(startNode, "y");
647
+ const useWindowY = !yContainer;
648
+ return {
649
+ xContainer,
650
+ yContainer,
651
+ useWindowY,
652
+ xMax: xContainer ? xContainer.scrollWidth - xContainer.clientWidth : 0,
653
+ yMax: useWindowY ? document.documentElement.scrollHeight - window.innerHeight : yContainer ? yContainer.scrollHeight - yContainer.clientHeight : 0
654
+ };
636
655
  };
637
656
  const step = (time) => {
638
657
  const dt = time - lastTime;
639
658
  lastTime = time;
640
659
  if (!isSelectingRef.current) {
641
- reset();
660
+ scrollState = null;
642
661
  raf = requestAnimationFrame(step);
643
662
  return;
644
663
  }
645
- if (!xContainer && !yContainer && xMax === 0 && yMax === 0) {
646
- const startNode = document.getElementById(dragAreaId)?.parentElement ?? null;
647
- xContainer = findScrollable(startNode, "x");
648
- yContainer = findScrollable(startNode, "y");
649
- useWindowY = !yContainer;
650
- xMax = xContainer ? xContainer.scrollWidth - xContainer.clientWidth : 0;
651
- yMax = useWindowY ? document.documentElement.scrollHeight - window.innerHeight : yContainer ? yContainer.scrollHeight - yContainer.clientHeight : 0;
652
- }
653
- const xBounds = getContainerBounds(xContainer);
654
- const yBounds = useWindowY ? {
664
+ if (!scrollState) scrollState = buildScrollState();
665
+ const xBounds = getContainerBounds(scrollState.xContainer);
666
+ const yBounds = scrollState.useWindowY ? {
655
667
  top: 0,
656
668
  bottom: window.innerHeight
657
- } : getContainerBounds(yContainer);
669
+ } : getContainerBounds(scrollState.yContainer);
658
670
  const dx = edgeDelta(pos.x, xBounds.left, xBounds.right, autoScrollMargin, dt);
659
671
  const dy = edgeDelta(pos.y, yBounds.top, yBounds.bottom, autoScrollMargin, dt);
660
672
  let didScroll = false;
661
- if (dx && xContainer && xMax > 0) {
662
- const clampedDx = clampDelta(dx, xContainer.scrollLeft, xMax);
673
+ if (dx && scrollState.xContainer && scrollState.xMax > 0) {
674
+ const clampedDx = clampDelta(dx, scrollState.xContainer.scrollLeft, scrollState.xMax);
663
675
  if (clampedDx) {
664
- xContainer.scrollBy(clampedDx, 0);
676
+ scrollState.xContainer.scrollBy(clampedDx, 0);
665
677
  didScroll = true;
666
678
  }
667
679
  }
668
- if (dy && yMax > 0) {
669
- if (useWindowY) {
670
- const clampedDy = clampDelta(dy, window.scrollY || document.documentElement.scrollTop, yMax);
680
+ if (dy && scrollState.yMax > 0) {
681
+ if (scrollState.useWindowY) {
682
+ const clampedDy = clampDelta(dy, window.scrollY || document.documentElement.scrollTop, scrollState.yMax);
671
683
  if (clampedDy) {
672
684
  window.scrollBy(0, clampedDy);
673
685
  didScroll = true;
674
686
  }
675
- } else if (yContainer) {
676
- const clampedDy = clampDelta(dy, yContainer.scrollTop, yMax);
687
+ } else if (scrollState.yContainer) {
688
+ const clampedDy = clampDelta(dy, scrollState.yContainer.scrollTop, scrollState.yMax);
677
689
  if (clampedDy) {
678
- yContainer.scrollBy(0, clampedDy);
690
+ scrollState.yContainer.scrollBy(0, clampedDy);
679
691
  didScroll = true;
680
692
  }
681
693
  }
@@ -702,7 +714,6 @@ function useAutoScroll({ isSelectingRef, dragAreaId, autoScrollMargin }) {
702
714
  function KanbanSelector({ dragAreaId = DEFAULT_DRAG_AREA_ID, autoScrollMargin = DEFAULT_AUTO_SCROLL_MARGIN, ignoredSlots = DEFAULT_IGNORED_SLOTS }) {
703
715
  const context = useKanbanDndContext();
704
716
  const isSelectingRef = useRef(false);
705
- const isShiftPressedRef = useRef(false);
706
717
  const isShiftPressedOnPointerDownRef = useRef(false);
707
718
  const shouldToggleFromBaseRef = useRef(false);
708
719
  const baseSelectedCardIdsRef = useRef([]);
@@ -715,18 +726,7 @@ function KanbanSelector({ dragAreaId = DEFAULT_DRAG_AREA_ID, autoScrollMargin =
715
726
  shouldStartSelecting: useMemo(() => (target) => shouldStartSelecting(target, ignoredSlots), [ignoredSlots]),
716
727
  onSelectionChange: (selection) => {
717
728
  if (!context) return;
718
- const selectedIds = [];
719
- context.getSelectableItems().forEach((item) => {
720
- if (!item.element) return;
721
- const rect = item.element.getBoundingClientRect();
722
- if (boxesIntersect(selection, {
723
- ...rect,
724
- left: rect.left + window.scrollX,
725
- top: rect.top,
726
- width: rect.width,
727
- height: rect.height
728
- })) selectedIds.push(String(item.id));
729
- });
729
+ const selectedIds = getIntersectingCardIds(selection, context.getSelectableItems);
730
730
  const nextIds = shouldToggleFromBaseRef.current ? toggleSelectionByArea(baseSelectedCardIdsRef.current, selectedIds) : selectedIds;
731
731
  if (hasSameCardSet(nextIds, context.getSelectedCardIds())) return;
732
732
  context.setSelectedCardIds(nextIds);
@@ -738,45 +738,25 @@ function KanbanSelector({ dragAreaId = DEFAULT_DRAG_AREA_ID, autoScrollMargin =
738
738
  },
739
739
  onSelectionStart: () => {
740
740
  isSelectingRef.current = true;
741
- shouldToggleFromBaseRef.current = isShiftPressedOnPointerDownRef.current || isShiftPressedRef.current;
741
+ shouldToggleFromBaseRef.current = isShiftPressedOnPointerDownRef.current;
742
742
  baseSelectedCardIdsRef.current = context?.getSelectedCardIds() ?? [];
743
743
  },
744
- selectionProps: { style: {
745
- pointerEvents: "none",
746
- position: "fixed",
747
- inset: 0,
748
- zIndex: 50
749
- } }
744
+ selectionProps: { style: SELECTION_STYLE }
750
745
  });
751
746
  useEffect(() => {
752
747
  if (!context) return;
753
- const handleKeyDown = (e) => {
754
- if (e.key === "Shift") isShiftPressedRef.current = true;
755
- };
756
- const handleKeyUp = (e) => {
757
- if (e.key === "Shift") isShiftPressedRef.current = false;
758
- };
759
- const handleWindowBlur = () => {
760
- isShiftPressedRef.current = false;
761
- isShiftPressedOnPointerDownRef.current = false;
762
- };
763
748
  const handlePointerDown = (e) => {
764
749
  isShiftPressedOnPointerDownRef.current = e.shiftKey;
765
750
  };
766
751
  const handlePointerUp = (e) => {
767
752
  const target = e.target;
768
753
  if (!isSelectingRef.current && !context.getIsDragging() && !target?.closest("[data-draggable=\"true\"]")) context.clearSelectedCards();
754
+ isShiftPressedOnPointerDownRef.current = false;
769
755
  };
770
- document.addEventListener("keydown", handleKeyDown);
771
- document.addEventListener("keyup", handleKeyUp);
772
756
  document.addEventListener("pointerdown", handlePointerDown);
773
- window.addEventListener("blur", handleWindowBlur);
774
757
  document.addEventListener("pointerup", handlePointerUp);
775
758
  return () => {
776
- document.removeEventListener("keydown", handleKeyDown);
777
- document.removeEventListener("keyup", handleKeyUp);
778
759
  document.removeEventListener("pointerdown", handlePointerDown);
779
- window.removeEventListener("blur", handleWindowBlur);
780
760
  document.removeEventListener("pointerup", handlePointerUp);
781
761
  };
782
762
  }, [context]);
@@ -1 +1 @@
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 { cn } from '@/lib/utils';\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 className,\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\n className={cn('contain-layout h-full', className)}\n id=\"draggable-area\"\n >\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 toggleSelectionByArea = (\n baseSelection: string[],\n intersectingIds: string[]\n) => {\n const dedupedBase = Array.from(new Set(baseSelection.map(String)));\n const baseSet = new Set(dedupedBase);\n const nextSelection = [...dedupedBase];\n\n intersectingIds.forEach((id) => {\n const normalizedId = String(id);\n if (baseSet.has(normalizedId)) {\n baseSet.delete(normalizedId);\n const index = nextSelection.indexOf(normalizedId);\n if (index >= 0) {\n nextSelection.splice(index, 1);\n }\n return;\n }\n\n baseSet.add(normalizedId);\n nextSelection.push(normalizedId);\n });\n\n return nextSelection;\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 const isShiftPressedRef = useRef(false);\n const isShiftPressedOnPointerDownRef = useRef(false);\n const shouldToggleFromBaseRef = useRef(false);\n const baseSelectedCardIdsRef = useRef<string[]>([]);\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 const nextIds = shouldToggleFromBaseRef.current\n ? toggleSelectionByArea(baseSelectedCardIdsRef.current, selectedIds)\n : selectedIds;\n\n if (hasSameCardSet(nextIds, context.getSelectedCardIds())) {\n return;\n }\n\n context.setSelectedCardIds(nextIds);\n },\n onSelectionEnd: () => {\n isSelectingRef.current = false;\n shouldToggleFromBaseRef.current = false;\n baseSelectedCardIdsRef.current = [];\n },\n onSelectionStart: () => {\n isSelectingRef.current = true;\n shouldToggleFromBaseRef.current =\n isShiftPressedOnPointerDownRef.current || isShiftPressedRef.current;\n baseSelectedCardIdsRef.current = context?.getSelectedCardIds() ?? [];\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 handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Shift') {\n isShiftPressedRef.current = true;\n }\n };\n\n const handleKeyUp = (e: KeyboardEvent) => {\n if (e.key === 'Shift') {\n isShiftPressedRef.current = false;\n }\n };\n\n const handleWindowBlur = () => {\n isShiftPressedRef.current = false;\n isShiftPressedOnPointerDownRef.current = false;\n };\n\n const handlePointerDown = (e: PointerEvent) => {\n isShiftPressedOnPointerDownRef.current = e.shiftKey;\n };\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('keydown', handleKeyDown);\n document.addEventListener('keyup', handleKeyUp);\n document.addEventListener('pointerdown', handlePointerDown);\n window.addEventListener('blur', handleWindowBlur);\n document.addEventListener('pointerup', handlePointerUp);\n return () => {\n document.removeEventListener('keydown', handleKeyDown);\n document.removeEventListener('keyup', handleKeyUp);\n document.removeEventListener('pointerdown', handlePointerDown);\n window.removeEventListener('blur', handleWindowBlur);\n document.removeEventListener('pointerup', handlePointerUp);\n };\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":";;;;;;;;;;;;;;;;AAkBA,MAAM,mBAAmB,cAA4C,KAAK;AAE1E,SAAgB,kBAAkB,EAChC,UACA,SAIC;AACD,QACE,oBAAC,iBAAiB;EAAgB;EAC/B;GACyB;;AAIhC,SAAgB,sBAAsB;AACpC,QAAO,WAAW,iBAAiB;;AAGrC,SAAgB,qBAAqB;CACnC,MAAM,UAAU,qBAAqB;AAErC,KAAI,CAAC,QACH,QAAO;EACL,iBAAiB,EAAE;EACnB,kBAAkB;EAClB,0BAA0B;EAC1B,yBAAyB;EACzB,0BAA0B;EAC1B,4BAA4B;EAC7B;CAGH,MAAM,kBAAkB,qBACtB,QAAQ,oBACR,QAAQ,0BACF,EAAE,CACT;AAED,QAAO;EACL;EACA,aAAa,WAAmB,gBAAgB,SAAS,OAAO;EAChE,oBAAoB,QAAQ;EAC5B,mBAAmB,QAAQ;EAC3B,oBAAoB,QAAQ;EAC5B,sBAAsB,QAAQ;EAC/B;;AAGH,SAAgB,sBAAsB,QAAyB;CAC7D,MAAM,UAAU,qBAAqB;AAErC,KAAI,CAAC,QAAS,QAAO;CAErB,MAAM,eAAe,OAAO,OAAO;AAEnC,QAAO,qBACL,QAAQ,0BACF,QAAQ,oBAAoB,CAAC,SAAS,aAAa,QACnD,MACP;;AAGH,SAAgB,4BAA4B;CAC1C,MAAM,UAAU,qBAAqB;AAErC,KAAI,CAAC,QACH,QAAO;EACL,qBAAqB,aAAuB;EAC5C,oBAAoB,YAAoB;EACxC,0BAA0B;EAC1B,uBAAuB,YAAoB;EAC5C;AAGH,QAAO;EACL,oBAAoB,QAAQ;EAC5B,mBAAmB,QAAQ;EAC3B,oBAAoB,QAAQ;EAC5B,sBAAsB,QAAQ;EAC/B;;;;;ACnGH,MAAa,sBAAsB;AACnC,MAAa,yBAAyB;AACtC,MAAa,yBAAyB;AACtC,MAAa,4BAA4B;AAEzC,MAAaA,2BAAyD;CACpE,eAAe;CACf,QAAQ;CACR,OAAO;CACP,KAAK;CACL,MAAM;CACP;AAED,MAAa,+BAA+B;CAC1C,aAAa;EACX,MAAM;EACN,KAAK;EACL,QAAQ;EACT;CACD,cAAc;EACZ,OAAO;EACP,KAAK;EACL,QAAQ;EACT;CACF;;;;ACtBD,SAAgB,YACd,SACA,QACA;AACA,QAAO,OAAO,QAAQ,OAAO,OAAO;;AAGtC,SAAgB,kBACd,aACA,YACA;CACA,MAAM,SAAS,YAAY,MAAM,SAAS,KAAK,KAAK,SAAS,WAAW;AACxE,QAAO,SAAS,OAAO,OAAO,KAAK,YAAY,GAAG,GAAG;;;;;ACJvD,SAAS,mBAAmB,UAAuB,OAAe;CAChE,MAAM,QAAQ,SAAS,UAAU,KAAK;CACtC,MAAM,UAAU,QAAQ;CACxB,MAAM,UAAU,QAAQ;CACxB,MAAM,UAAU,KAAK,IAAI,IAAI,QAAQ,IAAK,0BAA0B;AAEpE,aAAY,OAAO;EACjB,GAAG;EACH,UAAU,UAAU,IAAI,aAAa;EACrC,WAAW,aAAa,QAAQ,MAAM,QAAQ;EAC9C,SAAS,OAAO,QAAQ;EACzB,CAAC;AAEF,QAAO;;AAGT,SAAS,oBAAoB,eAA4B;CACvD,MAAM,WAAW,cAAc,UAAU,KAAK;AAE9C,aAAY,UAAU;EACpB,eAAe;EACf,QAAQ;EACT,CAAC;AAEF,QAAO;;AAGT,SAAgB,iBAAiB,EAC/B,QACA,eACA,oBACA,sBAMC;CACD,MAAM,cAAc,sBAAsB,IAAI,EAAE;CAChD,MAAM,eAAe,MAAM,KAAK,IAAI,IAAI,CAAC,GAAG,aAAa,OAAO,OAAO,CAAC,CAAC,CAAC;CAC1E,MAAM,OAAO,SAAS,cAAc,MAAM;AAE1C,aAAY,MAAM,EAChB,UAAU,YACX,CAAC;CAEF,MAAM,kBAAkB,sBAAsB,IAAI,EAAE;CACpD,MAAM,kBAAkB,IAAI,IAC1B,gBACG,QAAQ,SAAS,KAAK,QAAQ,CAC9B,KAAK,SAAS,CAAC,OAAO,KAAK,GAAG,EAAE,KAAK,QAAuB,CAAC,CACjE;AAED,cAAa,MAAM,GAAG,oBAAoB,CAAC,SAAS,WAAW,UAAU;EACvE,MAAM,WAAW,gBAAgB,IAAI,OAAO,UAAU,CAAC;AACvD,MAAI,CAAC,SAAU;AAEf,OAAK,YAAY,mBAAmB,UAAU,MAAM,CAAC;GACrD;AAEF,KAAI,CAAC,KAAK,kBACR,MAAK,YAAY,oBAAoB,cAAc,CAAC;AAGtD,QAAO;;;;;AC/DT,SAAgB,eAAe,EAC7B,IACA,UACA,WACA,oBACA,sBACsB;CACtB,MAAM,MAAM,OAAuB,KAAK;CACxC,MAAM,UAAU,qBAAqB;CAErC,MAAM,yBACJ,sBAAsB,SAAS;CACjC,MAAM,yBACJ,sBAAsB,SAAS;AAEjC,iBAAgB;AACd,WAAS,uBAAuB,OAAO,GAAG,EAAE,IAAI,QAAQ;AAExD,eAAa;AACX,YAAS,uBAAuB,OAAO,GAAG,EAAE,KAAK;;IAElD,CAAC,SAAS,GAAG,CAAC;AAEjB,iBAAgB;EACd,MAAM,UAAU,IAAI;AACpB,MAAI,CAAC,QAAS;AAEd,SAAO,UAAU;GACf;GACA,uBAAuB;IACrB,MAAM;IACN,QAAQ,OAAO,GAAG;IACnB;GACD,wBAAwB,EAAE,oBAAoB,QAAQ,eAAe;AACnE,+BAA2B;KACzB,WAAW,uBAAuB;MAChC,SAAS,OAAO;MAChB,OAAO,SAAS,QAAQ;MACzB,CAAC;KACF,OAAO,EAAE,aAAa;MACpB,MAAM,OAAO,iBAAiB;OAC5B,QAAQ,OAAO,GAAG;OAClB,eAAe,OAAO;OACtB,oBAAoB;OACpB,oBAAoB;OACrB,CAAC;AAEF,gBAAU,YAAY,KAAK;AAE3B,mBAAa;AACX,WAAI,KAAK,kBAAkB,UACzB,WAAU,YAAY,KAAK;;;KAIjC;KACD,CAAC;;GAEL,CAAC;IACD;EAAC;EAAwB;EAAwB;EAAG,CAAC;AAExD,QACE,oBAAC;EACY;EACX,kBAAe;EACf,IAAI,oBAAoB;EACnB;EACL;EAEC;GACG;;;;;ACxEV,SAAS,eAAe,OAAoC;AAC1D,QAAO,OAAO,UAAU,YAAY,UAAU;;AAGhD,SAASC,qBAA4B,QAAyB;AAC5D,KAAI,CAAC,eAAe,OAAO,CAAE,QAAO;CACpC,MAAM,KAAK,OAAO;AAClB,QAAO,OAAO,UAAa,OAAO,OAAO,KAAK,OAAO,GAAG;;AAG1D,SAAS,gBAAgC,QAA0B;AACjE,KAAI,CAAC,eAAe,OAAO,CAAE,QAAO,EAAE;CACtC,MAAM,QAAQ,OAAO;AACrB,QAAO,MAAM,QAAQ,MAAM,GAAI,QAAoB,EAAE;;AAGvD,SAAS,gBACP,QACA,OACS;AACT,KAAI,CAAC,eAAe,OAAO,CAAE,QAAO;AACpC,QAAO;EAAE,GAAG;EAAQ;EAAO;;AAG7B,SAAS,iBAAwB,MAAqB;AACpD,KAAI,CAAC,eAAe,KAAK,CAAE,QAAO;CAClC,MAAM,KAAK,KAAK;AAChB,QAAO,OAAO,UAAa,OAAO,OAAO,KAAK,OAAO,GAAG;;AAG1D,SAAgB,mBACd,SACA,SACA,gBACA,YAAyD,EAAE,EAChD;CACX,MAAM,cAAc,UAAU,eAAeA;CAC7C,MAAM,WAAW,UAAU,YAAY;CACvC,MAAM,WAAW,UAAU,YAAY;CACvC,MAAM,YAAY,UAAU,aAAa;CAEzC,MAAM,cAAc,IAAI,IAAI,QAAQ;AACpC,KAAI,YAAY,SAAS,EAAG,QAAO;CAEnC,MAAMC,cAAuB,EAAE;CAC/B,IAAI,iBAAiB;CAErB,MAAM,2BAA2B,QAAQ,KAAK,WAAW;EACvD,MAAM,eAAe,SAAS,OAAO;EACrC,MAAM,iBAAiB,aAAa,QAAQ,SAAS;AACnD,OAAI,YAAY,IAAI,UAAU,KAAK,CAAC,EAAE;AACpC,gBAAY,KAAK,KAAK;AACtB,WAAO;;AAGT,UAAO;IACP;AAEF,MAAI,eAAe,WAAW,aAAa,OACzC,QAAO;AAGT,mBAAiB;AACjB,SAAO,SAAS,QAAQ,eAAe;GACvC;AAEF,KAAI,YAAY,WAAW,EAAG,QAAO;CAErC,IAAI,cAAc;CAElB,MAAM,cAAc,yBAAyB,KAAK,WAAW;EAC3D,MAAM,eAAe,SAAS,OAAO;AAErC,MAAI,YAAY,OAAO,KAAK,gBAAgB;GAC1C,MAAM,cAAc,IAAI,IAAI,aAAa,KAAK,SAAS,UAAU,KAAK,CAAC,CAAC;GACxE,MAAM,gBAAgB,YAAY,QAC/B,SAAS,CAAC,YAAY,IAAI,UAAU,KAAK,CAAC,CAC5C;AAED,OAAI,cAAc,WAAW,EAC3B,QAAO;AAGT,iBAAc;AACd,UAAO,SAAS,QAAQ,CAAC,GAAG,cAAc,GAAG,cAAc,CAAC;;AAG9D,SAAO;GACP;AAEF,QAAO,kBAAkB,cAAc,cAAc;;;;;ACnFvD,SAAS,eAAe,GAAa,GAAa;AAChD,KAAI,EAAE,WAAW,EAAE,OAAQ,QAAO;CAClC,MAAM,OAAO,IAAI,IAAI,EAAE,IAAI,OAAO,CAAC;AACnC,KAAI,KAAK,SAAS,EAAE,OAAQ,QAAO;AACnC,QAAO,EAAE,OAAO,OAAO,KAAK,IAAI,OAAO,GAAG,CAAC,CAAC;;AAG9C,SAAS,mBAA4B,QAAyB;CAE5D,MAAM,KADc,QACI;AACxB,QAAO,OAAO,UAAa,OAAO,OAAO,KAAK,OAAO,GAAG;;AAG1D,SAAgB,iBAA0B,EACxC,aACA,iBACA,mBACA,YACA,UACA,aACA,WACA,oBACA,kBACA,WACA,oBACA,oBACA,mBACA,oBACA,mBACA,eACA,oBACA,sBAAsB,MACtB,iBACA,aACiC;CACjC,MAAM,CAAC,YAAY,sBAAsB,SAAS,MAAM;CACxD,MAAM,gBAAgB,OAAO,MAAM;CACnC,MAAM,qBAAqB,OAAiB,EAAE,CAAC;CAC/C,MAAM,uBAAuB,uBAAO,IAAI,KAA0B,CAAC;CACnE,MAAM,wBAAwB,uBAAO,IAAI,KAAiB,CAAC;CAE3D,MAAM,2BAA2B,kBAAkB;AACjD,wBAAsB,QAAQ,SAAS,aAAa,UAAU,CAAC;IAC9D,EAAE,CAAC;CAEN,MAAM,qBAAqB,aAAa,aAAyB;AAC/D,wBAAsB,QAAQ,IAAI,SAAS;AAC3C,eAAa;AACX,yBAAsB,QAAQ,OAAO,SAAS;;IAE/C,EAAE,CAAC;CACN,MAAM,kBAAkB,aACrB,WACC,cAAc,YAAY,OAAO,GAAG,mBAAmB,OAAO,EAChE,CAAC,YAAY,CACd;CAED,MAAM,yBAAyB,kBACvB,sBAAsB,IAAI,mBAAmB,SACnD,CAAC,mBAAmB,CACrB;CAED,MAAM,iCAAiC,aACpC,YAAsB;AACrB,qBAAmB,UAAU;AAC7B,4BAA0B;AAC1B,sBAAoB,QAAQ;IAE9B,CAAC,0BAA0B,kBAAkB,CAC9C;CAED,MAAM,wBAAwB,aAC3B,WAAmB;EAClB,MAAM,cAAc,wBAAwB;AAC5C,MAAI,YAAY,SAAS,OAAO,CAC9B;EAGF,MAAM,UAAU,CAAC,GAAG,aAAa,OAAO;AAExC,MAAI,mBAAmB;AACrB,qBAAkB,OAAO;AACzB,6BAA0B;AAC1B,uBAAoB,QAAQ;AAC5B;;AAGF,iCAA+B,QAAQ;IAEzC;EACE;EACA;EACA;EACA;EACA;EACD,CACF;CAED,MAAM,yBAAyB,kBAAkB;AAE/C,MADmB,wBAAwB,CAC5B,WAAW,EACxB;AAGF,MAAI,oBAAoB;AACtB,uBAAoB;AACpB,6BAA0B;AAC1B,uBAAoB,EAAE,CAAC;AACvB;;AAGF,iCAA+B,EAAE,CAAC;IACjC;EACD;EACA;EACA;EACA;EACA;EACD,CAAC;CAEF,MAAM,yBAAyB,aAC5B,YAAsB;EACrB,MAAM,UAAU,MAAM,KAAK,IAAI,IAAI,QAAQ,IAAI,OAAO,CAAC,CAAC;AAGxD,MAAI,eAAe,SAFA,wBAAwB,CAEJ,CACrC;AAGF,MAAI,oBAAoB;AACtB,sBAAmB,QAAQ;AAC3B,6BAA0B;AAC1B,uBAAoB,QAAQ;AAC5B;;AAGF,MAAI,sBAAsB,sBAAsB,mBAAmB;AACjE,uBAAoB;AACpB,WAAQ,SAAS,WAAW,kBAAkB,OAAO,CAAC;AACtD,6BAA0B;AAC1B,uBAAoB,QAAQ;AAC5B;;AAGF,iCAA+B,QAAQ;IAEzC;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CACF;CAED,MAAM,2BAA2B,aAC9B,WAAmB;EAClB,MAAM,cAAc,wBAAwB;AAC5C,MAAI,YAAY,SAAS,OAAO,EAAE;AAChC,0BACE,YAAY,QAAQ,eAAe,eAAe,OAAO,CAC1D;AACD;;AAGF,wBAAsB,OAAO;IAE/B;EAAC;EAAuB;EAAwB;EAAuB,CACxE;CAED,MAAM,yBAAyB,aAC5B,IAAY,YAAgC;AAC3C,MAAI,CAAC,SAAS;AACZ,wBAAqB,QAAQ,OAAO,GAAG;AACvC;;AAGF,uBAAqB,QAAQ,IAAI,IAAI,QAAQ;IAE/C,EAAE,CACH;CAED,MAAM,qBAAqB,kBAEvB,MAAM,KAAK,qBAAqB,QAAQ,SAAS,CAAC,CAAC,KAChD,CAAC,IAAI,cAAc;EAClB;EACA;EACD,EACF,EACH,EAAE,CACH;CAED,MAAM,eAAe,eACZ;EACL,qBAAqB,cAAc;EACnC,oBAAoB;EACpB;EACA,oBAAoB;EACpB,mBAAmB;EACnB,oBAAoB;EACpB,sBAAsB;EACtB;EACA;EACD,GACD;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CACF;CAED,MAAM,mBAAmB,aACtB,UAAmB;AAClB,gBAAc,UAAU;AACxB,MAAI,gBACF,oBAAmB,MAAM;IAG7B,CAAC,gBAAgB,CAClB;CAED,MAAM,mBAAmB;AACvB,mBAAiB,MAAM;AACvB,kBAAgB,MAAM;AACtB,0BAAwB;;CAG1B,MAAM,aAAa,WAA8C;AAC/D,MAAI,OAAO,KAAK,SAAS,YAAY,OAAO,KAAK,SAAS,OAAQ;AAElE,MAAI,OAAO,KAAK,SAAS,QAAQ;GAC/B,MAAM,SAAS,OAAO,OAAO,KAAK,UAAU,GAAG;AAE/C,OAAI,CADgB,wBAAwB,CAC3B,SAAS,OAAO,CAC/B,uBAAsB,OAAO;;AAIjC,kBAAgB,KAAK;AACrB,mBAAiB,KAAK;;CAGxB,MAAM,cAAc,gBAAwB,mBAA2B;AACrE,MAAI,CAAC,kBAAkB,mBAAmB,eAAgB;EAE1D,IAAIC,YAA2B;AAE/B,cAAY,SAAS;GACnB,MAAM,WAAW,KAAK,WACnB,QAAQ,gBAAgB,IAAI,KAAK,eACnC;GACD,MAAM,WAAW,KAAK,WACnB,QAAQ,gBAAgB,IAAI,KAAK,eACnC;AAED,OAAI,WAAW,KAAK,WAAW,KAAK,aAAa,SAC/C,QAAO;AAGT,eAAY,WAAW;AACvB,UAAO,QAAQ;IACb,MAAM;IACN,YAAY;IACZ,aAAa;IACd,CAAC;IACF;AAEF,MAAI,cAAc,KAChB,mBAAkB;GAAE,UAAU;GAAgB,OAAO;GAAW,CAAC;;CAIrE,MAAM,YAAY,QAAgB,mBAA2B;AAC3D,MAAI,CAAC,UAAU,CAAC,eAAgB;EAEhC,MAAM,cAAc,wBAAwB;EAC5C,MAAM,YAAY,YAAY,SAAS,IAAI,cAAc,CAAC,OAAO;AAEjE,cAAY,SAAS;AACnB,OAAI,UACF,QAAO,UAAU,MAAM,WAAW,eAAe;AAGnD,UAAO,mBAAmB,MAAM,WAAW,gBAAgB;IACzD,aAAa;IACb,UAAU;IAGV,UAAU;IAGV;IACD,CAAC;IACF;AACF,gBAAc;GAAE,SAAS;GAAW;GAAgB,CAAC;;AAGvD,iBAAgB;EACd,MAAM,iBAAiB,mBAAmB;GACxC,cAAc,EAAE,aAAa,UAAU,OAAO;GAC9C,SAAS,EAAE,QAAQ,eAAe;IAChC,MAAM,cAAc,SAAS,QAAQ;AAErC,QAAI,OAAO,KAAK,SAAS,UAAU;AACjC,gBACE,OAAO,OAAO,KAAK,YAAY,GAAG,EAClC,kBAAkB,aAAa,SAAS,CACzC;AACD,iBAAY;AACZ;;AAGF,QAAI,OAAO,KAAK,SAAS,QAAQ;AAC/B,cACE,OAAO,OAAO,KAAK,UAAU,GAAG,EAChC,kBAAkB,aAAa,cAAc,CAC9C;AACD,iBAAY;AACZ;;AAGF,gBAAY;;GAEf,CAAC;AAEF,MAAI,CAAC,uBAAuB,CAAC,kBAC3B,QAAO;EAGT,MAAM,kBAAkB,SAAS,eAAe,kBAAkB;AAClE,MAAI,CAAC,gBACH,QAAO;AAGT,SAAO,QACL,gBACA,sBAAsB;GACpB,SAAS;GACT,YAAY,EAAE,aACZ,OAAO,KAAK,SAAS,UAAU,OAAO,KAAK,SAAS;GACtD,sBAAsB;GACvB,CAAC,EACF,oCAAoC;GAClC,SAAS;GACT,YAAY,EAAE,aACZ,OAAO,KAAK,SAAS,UAAU,OAAO,KAAK,SAAS;GACtD,sBAAsB;GACtB,mBAAmB,sBAAsB;GAC1C,CAAC,CACH;IACA;EACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CAAC;AAEF,QACE,oBAAC;EAAkB,OAAO;YACxB,qBAAC;GACC,WAAW,GAAG,yBAAyB,UAAU;GACjD,IAAG;cAEF,CAAC,cAAc,iBACf;IACG;GACY;;;;;AC3YxB,SAAgB,eAAe,EAC7B,UACA,IACA,WACA,mBACsB;CACtB,MAAM,CAAC,QAAQ,aAAa,SAAS,MAAM;CAC3C,MAAM,MAAM,OAAuB,KAAK;AAExC,iBAAgB;EACd,MAAM,UAAU,IAAI;AACpB,MAAI,CAAC,QAAS;AAEd,SAAO,sBAAsB;GAC3B;GACA,UAAU,EAAE,aAAa,OAAO,KAAK,SAAS;GAC9C,gBAAgB;IACd,MAAM;IACN,UAAU,OAAO,GAAG;IACrB;GACD,mBAAmB,UAAU,KAAK;GAClC,mBAAmB,UAAU,MAAM;GACnC,cAAc,UAAU,MAAM;GAC/B,CAAC;IACD,CAAC,GAAG,CAAC;AAER,QACE,oBAAC;EACC,WAAW,GACT,iEACA,WAAW,mBAAmB,kBAC9B,UACD;EACD,IAAI,oBAAoB;EACnB;EAEJ;GACG;;;;;ACjCV,MAAM,uBAAuB;AAC7B,MAAM,6BAA6B;AACnC,MAAM,wBAAwB;CAC5B;CACA;CACA;CACA;CACA;CACD;AAED,MAAM,cAAc,OAAe,SAAiB,QAClD,QAAQ,IAAI,KAAK,IAAI,OAAO,MAAM,QAAQ,GAAG,KAAK,IAAI,OAAO,CAAC,QAAQ;AAExE,MAAM,kBAAkB,GAAa,MAAgB;AACnD,KAAI,EAAE,WAAW,EAAE,OAAQ,QAAO;CAClC,MAAM,OAAO,IAAI,IAAI,EAAE,IAAI,OAAO,CAAC;AACnC,KAAI,KAAK,SAAS,EAAE,OAAQ,QAAO;AACnC,QAAO,EAAE,OAAO,OAAO,KAAK,IAAI,OAAO,GAAG,CAAC,CAAC;;AAG9C,MAAM,yBACJ,eACA,oBACG;CACH,MAAM,cAAc,MAAM,KAAK,IAAI,IAAI,cAAc,IAAI,OAAO,CAAC,CAAC;CAClE,MAAM,UAAU,IAAI,IAAI,YAAY;CACpC,MAAM,gBAAgB,CAAC,GAAG,YAAY;AAEtC,iBAAgB,SAAS,OAAO;EAC9B,MAAM,eAAe,OAAO,GAAG;AAC/B,MAAI,QAAQ,IAAI,aAAa,EAAE;AAC7B,WAAQ,OAAO,aAAa;GAC5B,MAAM,QAAQ,cAAc,QAAQ,aAAa;AACjD,OAAI,SAAS,EACX,eAAc,OAAO,OAAO,EAAE;AAEhC;;AAGF,UAAQ,IAAI,aAAa;AACzB,gBAAc,KAAK,aAAa;GAChC;AAEF,QAAO;;AAGT,MAAM,aACJ,SACA,OACA,KACA,QACA,OACG;AACH,KAAI,UAAU,QAAQ,OACpB,SAAS,WAAW,QAAQ,WAAW,SAAU;AACnD,KAAI,UAAU,MAAM,OAAQ,SAAS,WAAW,MAAM,WAAW,SAAU;AAC3E,QAAO;;AAGT,SAAS,eACP,MACA,MACoB;AACpB,KAAI,CAAC,KAAM,QAAO;CAElB,MAAM,QAAQ,OAAO,iBAAiB,KAAK;CAC3C,MAAM,aACJ,gBAAgB,KAAK,MAAM,UAAU,IACrC,KAAK,cAAc,KAAK;CAC1B,MAAM,aACJ,gBAAgB,KAAK,MAAM,UAAU,IACrC,KAAK,eAAe,KAAK;AAE3B,KAAK,SAAS,OAAO,cAAgB,SAAS,OAAO,WAAa,QAAO;AACzE,QAAO,eAAe,KAAK,eAAe,KAAK;;AAGjD,SAAS,mBAAmB,WAA+B;AACzD,KACE,CAAC,aACD,cAAc,SAAS,mBACvB,cAAc,SAAS,KAEvB,QAAO;EACL,MAAM;EACN,OAAO,OAAO;EACd,KAAK;EACL,QAAQ,OAAO;EAChB;CAGH,MAAM,OAAO,UAAU,uBAAuB;AAC9C,QAAO;EACL,MAAM,KAAK,IAAI,GAAG,KAAK,KAAK;EAC5B,OAAO,KAAK,IAAI,OAAO,YAAY,KAAK,MAAM;EAC9C,KAAK,KAAK,IAAI,GAAG,KAAK,IAAI;EAC1B,QAAQ,KAAK,IAAI,OAAO,aAAa,KAAK,OAAO;EAClD;;AAGH,SAAS,qBACP,QACA,cACS;AACT,KAAI,EAAE,kBAAkB,SAAU,QAAO;AAEzC,QAAO,EACL,OAAO,QAAQ,4BAA0B,IACzC,aAAa,MAAM,SAAS,OAAO,QAAQ,eAAe,KAAK,IAAI,CAAC;;AAIxE,SAAS,cAAc,EACrB,gBACA,YACA,oBAKC;AACD,iBAAgB;EACd,IAAI,MAAM;EACV,IAAI,WAAW,YAAY,KAAK;EAChC,MAAM,MAAM;GAAE,GAAG;GAAG,GAAG;GAAG;EAC1B,IAAIC,aAAiC;EACrC,IAAIC,aAAiC;EACrC,IAAI,OAAO;EACX,IAAI,OAAO;EACX,IAAI,aAAa;EAEjB,MAAM,UAAU,OACb,IAAI,IAAI,EAAE,SAAW,IAAI,IAAI,EAAE;AAGlC,SAAO,iBAAiB,eAAe,QAAQ,EAAE,SAAS,MAAM,CAAC;EAEjE,MAAM,cAAc;AAClB,gBAAa;AACb,gBAAa;AACb,UAAO;AACP,UAAO;AACP,gBAAa;;EAGf,MAAM,QAAQ,SAAiB;GAC7B,MAAM,KAAK,OAAO;AAClB,cAAW;AAEX,OAAI,CAAC,eAAe,SAAS;AAC3B,WAAO;AACP,UAAM,sBAAsB,KAAK;AACjC;;AAGF,OAAI,CAAC,cAAc,CAAC,cAAc,SAAS,KAAK,SAAS,GAAG;IAC1D,MAAM,YACJ,SAAS,eAAe,WAAW,EAAE,iBAAiB;AACxD,iBAAa,eAAe,WAAW,IAAI;AAC3C,iBAAa,eAAe,WAAW,IAAI;AAC3C,iBAAa,CAAC;AACd,WAAO,aAAa,WAAW,cAAc,WAAW,cAAc;AACtE,WAAO,aACH,SAAS,gBAAgB,eAAe,OAAO,cAC/C,aACE,WAAW,eAAe,WAAW,eACrC;;GAGR,MAAM,UAAU,mBAAmB,WAAW;GAC9C,MAAM,UAAU,aACZ;IAAE,KAAK;IAAG,QAAQ,OAAO;IAAa,GACtC,mBAAmB,WAAW;GAElC,MAAM,KAAK,UACT,IAAI,GACJ,QAAQ,MACR,QAAQ,OACR,kBACA,GACD;GACD,MAAM,KAAK,UACT,IAAI,GACJ,QAAQ,KACR,QAAQ,QACR,kBACA,GACD;GAED,IAAI,YAAY;AAEhB,OAAI,MAAM,cAAc,OAAO,GAAG;IAChC,MAAM,YAAY,WAAW,IAAI,WAAW,YAAY,KAAK;AAC7D,QAAI,WAAW;AACb,gBAAW,SAAS,WAAW,EAAE;AACjC,iBAAY;;;AAIhB,OAAI,MAAM,OAAO,GACf;QAAI,YAAY;KACd,MAAM,YAAY,WAChB,IACA,OAAO,WAAW,SAAS,gBAAgB,WAC3C,KACD;AACD,SAAI,WAAW;AACb,aAAO,SAAS,GAAG,UAAU;AAC7B,kBAAY;;eAEL,YAAY;KACrB,MAAM,YAAY,WAAW,IAAI,WAAW,WAAW,KAAK;AAC5D,SAAI,WAAW;AACb,iBAAW,SAAS,GAAG,UAAU;AACjC,kBAAY;;;;AAKlB,OAAI,UACF,UAAS,KAAK,cACZ,IAAI,WAAW,aAAa;IAC1B,SAAS,IAAI;IACb,SAAS,IAAI;IACb,SAAS;IACT,YAAY;IACb,CAAC,CACH;AAGH,SAAM,sBAAsB,KAAK;;AAGnC,QAAM,sBAAsB,KAAK;AAEjC,eAAa;AACX,UAAO,oBAAoB,eAAe,OAAO;AACjD,wBAAqB,IAAI;;IAE1B;EAAC;EAAkB;EAAY;EAAe,CAAC;;AAGpD,SAAgB,eAAe,EAC7B,aAAa,sBACb,mBAAmB,4BACnB,eAAe,yBACO;CACtB,MAAM,UAAU,qBAAqB;CACrC,MAAM,iBAAiB,OAAO,MAAM;CACpC,MAAM,oBAAoB,OAAO,MAAM;CACvC,MAAM,iCAAiC,OAAO,MAAM;CACpD,MAAM,0BAA0B,OAAO,MAAM;CAC7C,MAAM,yBAAyB,OAAiB,EAAE,CAAC;AAEnD,eAAc;EAAE;EAAgB;EAAY;EAAkB,CAAC;CAQ/D,MAAM,EAAE,kBAAkB,sBAAsB;EAC9C,sBAPkB,eACX,WACL,qBAAqB,QAAQ,aAAa,EAC5C,CAAC,aAAa,CACf;EAIC,oBAAoB,cAAoD;AACtE,OAAI,CAAC,QAAS;GAEd,MAAMC,cAAwB,EAAE;AAEhC,WAAQ,oBAAoB,CAAC,SAAS,SAAS;AAC7C,QAAI,CAAC,KAAK,QAAS;IAEnB,MAAM,OAAO,KAAK,QAAQ,uBAAuB;AASjD,QAAI,eAAe,WARF;KACf,GAAG;KACH,MAAM,KAAK,OAAO,OAAO;KACzB,KAAK,KAAK;KACV,OAAO,KAAK;KACZ,QAAQ,KAAK;KACd,CAEsC,CACrC,aAAY,KAAK,OAAO,KAAK,GAAG,CAAC;KAEnC;GAEF,MAAM,UAAU,wBAAwB,UACpC,sBAAsB,uBAAuB,SAAS,YAAY,GAClE;AAEJ,OAAI,eAAe,SAAS,QAAQ,oBAAoB,CAAC,CACvD;AAGF,WAAQ,mBAAmB,QAAQ;;EAErC,sBAAsB;AACpB,kBAAe,UAAU;AACzB,2BAAwB,UAAU;AAClC,0BAAuB,UAAU,EAAE;;EAErC,wBAAwB;AACtB,kBAAe,UAAU;AACzB,2BAAwB,UACtB,+BAA+B,WAAW,kBAAkB;AAC9D,0BAAuB,UAAU,SAAS,oBAAoB,IAAI,EAAE;;EAEtE,gBAAgB,EACd,OAAO;GACL,eAAe;GACf,UAAU;GACV,OAAO;GACP,QAAQ;GACT,EACF;EACF,CAAC;AAEF,iBAAgB;AACd,MAAI,CAAC,QAAS;EAEd,MAAM,iBAAiB,MAAqB;AAC1C,OAAI,EAAE,QAAQ,QACZ,mBAAkB,UAAU;;EAIhC,MAAM,eAAe,MAAqB;AACxC,OAAI,EAAE,QAAQ,QACZ,mBAAkB,UAAU;;EAIhC,MAAM,yBAAyB;AAC7B,qBAAkB,UAAU;AAC5B,kCAA+B,UAAU;;EAG3C,MAAM,qBAAqB,MAAoB;AAC7C,kCAA+B,UAAU,EAAE;;EAG7C,MAAM,mBAAmB,MAAoB;GAC3C,MAAM,SAAS,EAAE;AACjB,OACE,CAAC,eAAe,WAChB,CAAC,QAAQ,eAAe,IACxB,CAAC,QAAQ,QAAQ,4BAA0B,CAE3C,SAAQ,oBAAoB;;AAIhC,WAAS,iBAAiB,WAAW,cAAc;AACnD,WAAS,iBAAiB,SAAS,YAAY;AAC/C,WAAS,iBAAiB,eAAe,kBAAkB;AAC3D,SAAO,iBAAiB,QAAQ,iBAAiB;AACjD,WAAS,iBAAiB,aAAa,gBAAgB;AACvD,eAAa;AACX,YAAS,oBAAoB,WAAW,cAAc;AACtD,YAAS,oBAAoB,SAAS,YAAY;AAClD,YAAS,oBAAoB,eAAe,kBAAkB;AAC9D,UAAO,oBAAoB,QAAQ,iBAAiB;AACpD,YAAS,oBAAoB,aAAa,gBAAgB;;IAE3D,CAAC,QAAQ,CAAC;AAEb,KAAI,CAAC,QAAS,QAAO;AAErB,QAAO,oBAAC,kBAAgB;;;;;ACjX1B,SAAgB,mBAAmB,EACjC,UACA,YACA,iBAC0B;AAC1B,iBAAgB;EACd,MAAM,UAAU,WAAW;AAC3B,MAAI,CAAC,QAAS;AAEd,SAAO,QACL,UAAU;GACR;GACA,YAAY,eAAe,WAAW;GACtC,uBAAuB;IACrB,MAAM;IACN,UAAU,OAAO,SAAS;IAC3B;GACF,CAAC,EACF,sBAAsB;GACpB;GACA,UAAU,EAAE,aACV,OAAO,KAAK,SAAS,YACrB,OAAO,OAAO,KAAK,SAAS,KAAK,OAAO,SAAS;GACnD,gBAAgB;IACd,MAAM;IACN,UAAU,OAAO,SAAS;IAC3B;GACF,CAAC,CACH;IACA;EAAC;EAAU;EAAe;EAAW,CAAC"}
1
+ {"version":3,"file":"kanban-dnd.js","names":["STACKED_CLONE_BASE_STYLE: Partial<CSSStyleDeclaration>","defaultGetColumnId","cardsToMove: TCard[]","nextOrder: number | null","selectedIds: string[]","scrollState: {\n xContainer: HTMLElement | null;\n yContainer: HTMLElement | null;\n xMax: number;\n yMax: number;\n useWindowY: boolean;\n } | null"],"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 { cn } from '@/lib/utils';\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 className,\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\n className={cn('contain-layout h-full', className)}\n id=\"draggable-area\"\n >\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 { KanbanSelectableItem, 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 SELECTION_STYLE = {\n pointerEvents: 'none',\n position: 'fixed',\n inset: 0,\n zIndex: 50,\n} as const;\n\ntype SelectionBox = Parameters<typeof boxesIntersect>[0];\n\nconst clampDelta = (delta: number, current: number, max: number) =>\n delta > 0 ? Math.min(delta, max - current) : Math.max(delta, -current);\n\nconst uniqueIds = (ids: Array<string | number>) =>\n Array.from(new Set(ids.map(String)));\n\nconst hasSameCardSet = (a: string[], b: string[]) => {\n const aIds = uniqueIds(a);\n const bIds = uniqueIds(b);\n if (aIds.length !== bIds.length) return false;\n\n const aSet = new Set(aIds);\n return bIds.every((id) => aSet.has(id));\n};\n\nconst toggleSelectionByArea = (\n baseSelection: string[],\n intersectingIds: string[]\n) => {\n const nextSelection = new Set(uniqueIds(baseSelection));\n\n uniqueIds(intersectingIds).forEach((id) => {\n if (nextSelection.has(id)) {\n nextSelection.delete(id);\n return;\n }\n\n nextSelection.add(id);\n });\n\n return Array.from(nextSelection);\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 getIntersectingCardIds(\n selection: SelectionBox,\n getSelectableItems: () => KanbanSelectableItem[]\n) {\n const selectedIds: string[] = [];\n\n 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 return uniqueIds(selectedIds);\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 scrollState: {\n xContainer: HTMLElement | null;\n yContainer: HTMLElement | null;\n xMax: number;\n yMax: number;\n useWindowY: boolean;\n } | null = null;\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 buildScrollState = () => {\n const startNode =\n document.getElementById(dragAreaId)?.parentElement ?? null;\n const xContainer = findScrollable(startNode, 'x');\n const yContainer = findScrollable(startNode, 'y');\n const useWindowY = !yContainer;\n\n return {\n xContainer,\n yContainer,\n useWindowY,\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\n const step = (time: number) => {\n const dt = time - lastTime;\n lastTime = time;\n\n if (!isSelectingRef.current) {\n scrollState = null;\n raf = requestAnimationFrame(step);\n return;\n }\n\n if (!scrollState) {\n scrollState = buildScrollState();\n }\n\n const xBounds = getContainerBounds(scrollState.xContainer);\n const yBounds = scrollState.useWindowY\n ? { top: 0, bottom: window.innerHeight }\n : getContainerBounds(scrollState.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 && scrollState.xContainer && scrollState.xMax > 0) {\n const clampedDx = clampDelta(\n dx,\n scrollState.xContainer.scrollLeft,\n scrollState.xMax\n );\n if (clampedDx) {\n scrollState.xContainer.scrollBy(clampedDx, 0);\n didScroll = true;\n }\n }\n\n if (dy && scrollState.yMax > 0) {\n if (scrollState.useWindowY) {\n const clampedDy = clampDelta(\n dy,\n window.scrollY || document.documentElement.scrollTop,\n scrollState.yMax\n );\n if (clampedDy) {\n window.scrollBy(0, clampedDy);\n didScroll = true;\n }\n } else if (scrollState.yContainer) {\n const clampedDy = clampDelta(\n dy,\n scrollState.yContainer.scrollTop,\n scrollState.yMax\n );\n if (clampedDy) {\n scrollState.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 const isShiftPressedOnPointerDownRef = useRef(false);\n const shouldToggleFromBaseRef = useRef(false);\n const baseSelectedCardIdsRef = useRef<string[]>([]);\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: SelectionBox) => {\n if (!context) return;\n\n const selectedIds = getIntersectingCardIds(\n selection,\n context.getSelectableItems\n );\n\n const nextIds = shouldToggleFromBaseRef.current\n ? toggleSelectionByArea(baseSelectedCardIdsRef.current, selectedIds)\n : selectedIds;\n\n if (hasSameCardSet(nextIds, context.getSelectedCardIds())) {\n return;\n }\n\n context.setSelectedCardIds(nextIds);\n },\n onSelectionEnd: () => {\n isSelectingRef.current = false;\n shouldToggleFromBaseRef.current = false;\n baseSelectedCardIdsRef.current = [];\n },\n onSelectionStart: () => {\n isSelectingRef.current = true;\n shouldToggleFromBaseRef.current = isShiftPressedOnPointerDownRef.current;\n baseSelectedCardIdsRef.current = context?.getSelectedCardIds() ?? [];\n },\n selectionProps: {\n style: SELECTION_STYLE,\n },\n });\n\n useEffect(() => {\n if (!context) return;\n\n const handlePointerDown = (e: PointerEvent) => {\n isShiftPressedOnPointerDownRef.current = e.shiftKey;\n };\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 isShiftPressedOnPointerDownRef.current = false;\n };\n\n document.addEventListener('pointerdown', handlePointerDown);\n document.addEventListener('pointerup', handlePointerUp);\n return () => {\n document.removeEventListener('pointerdown', handlePointerDown);\n document.removeEventListener('pointerup', handlePointerUp);\n };\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_runtime4 from "react/jsx-runtime";
1
+ import * as react_jsx_runtime2 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_runtime4.JSX.Element;
13
+ }: PageHeaderProps): react_jsx_runtime2.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_runtime7 from "react/jsx-runtime";
2
+ import * as react_jsx_runtime0 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_runtime7.JSX.Element;
79
+ }): react_jsx_runtime0.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_runtime7.JSX.Element;
99
+ }: RemoteSelectorQueryProps<T>): react_jsx_runtime0.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 +1 @@
1
- {"version":3,"file":"split-text-poor.d.ts","names":[],"sources":["../src/components/split-text-poor/split-text-poor.tsx"],"sourcesContent":[],"mappings":";cAwBM;EAAA,EAAA,EAAA;;;;;;IAoBM,OAAA,EAAA,CAAA;MAAA,KAAkB;MAAA;KAAA,EAClB;MAQN,KAAA,EAAA,MAuDL;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAhEW,kBAAA;YACA,KAAA,CAAM;;wBAEM;;;;;cAMlB,eAAe,KAAA,CAAM,GAAG"}
1
+ {"version":3,"file":"split-text-poor.d.ts","names":[],"sources":["../src/components/split-text-poor/split-text-poor.tsx"],"sourcesContent":[],"mappings":";cAwBM;EAAA,EAAA,EAAA;;;;;;IAoBM,OAAA,EAAA,CAAA;MAAA,KAAkB;MAAA;KAAA,EAAA;MASxB,KAAA,EAAA,MAuDL;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAhEW,kBAAA;YACA,KAAA,CAAM;;wBAEM;;;;;cAMlB,eAAe,KAAA,CAAM,GAAG"}
@@ -1,6 +1,6 @@
1
1
  import { n as Options$1 } from "./with-mask-Chm8kVE1.js";
2
2
  import { FieldPath, FieldPathValue, FieldValues, UseControllerProps } from "react-hook-form";
3
- import * as react_jsx_runtime0 from "react/jsx-runtime";
3
+ import * as react_jsx_runtime5 from "react/jsx-runtime";
4
4
  import { Options } from "nuqs";
5
5
 
6
6
  //#region src/components/text-field/TextField.d.ts
@@ -57,7 +57,7 @@ declare function InputText({
57
57
  name,
58
58
  onChange,
59
59
  ...props
60
- }: InputTextProps): react_jsx_runtime0.JSX.Element;
60
+ }: InputTextProps): react_jsx_runtime5.JSX.Element;
61
61
  interface TextFieldProps<TFieldValues extends FieldValues = FieldValues, TFieldName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>> extends UseControllerProps<TFieldValues, TFieldName> {
62
62
  disabled?: boolean;
63
63
  required?: boolean;
@@ -75,7 +75,7 @@ declare function TextField<TFieldValues extends FieldValues = FieldValues, TFiel
75
75
  transform,
76
76
  prefix,
77
77
  ...props
78
- }: TextFieldProps<TFieldValues, TFieldName> & Omit<InputTextProps, 'onChange'>): react_jsx_runtime0.JSX.Element;
78
+ }: TextFieldProps<TFieldValues, TFieldName> & Omit<InputTextProps, 'onChange'>): react_jsx_runtime5.JSX.Element;
79
79
  interface QueryTextFieldProps extends Omit<InputTextProps, 'onChange'> {
80
80
  name: string;
81
81
  defaultValue?: string;
@@ -87,7 +87,7 @@ declare function QueryTextField({
87
87
  defaultValue,
88
88
  options,
89
89
  ...props
90
- }: QueryTextFieldProps): react_jsx_runtime0.JSX.Element;
90
+ }: QueryTextFieldProps): react_jsx_runtime5.JSX.Element;
91
91
  interface CookieTextFieldProps extends InputTextProps {
92
92
  name: string;
93
93
  maxAge?: number;
@@ -97,7 +97,7 @@ declare function CookieTextField({
97
97
  maxAge,
98
98
  onChange,
99
99
  ...inputProps
100
- }: CookieTextFieldProps): react_jsx_runtime0.JSX.Element;
100
+ }: CookieTextFieldProps): react_jsx_runtime5.JSX.Element;
101
101
  //#endregion
102
102
  export { CookieTextField, type CookieTextFieldProps, InputText, type InputTextProps, QueryTextField, type QueryTextFieldProps, TextField, type TextFieldProps };
103
103
  //# sourceMappingURL=text-field.d.ts.map
@@ -1,5 +1,5 @@
1
1
  import * as React$1 from "react";
2
- import * as react_jsx_runtime9 from "react/jsx-runtime";
2
+ import * as react_jsx_runtime10 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_runtime9.JSX.Element;
31
+ }: ToggleGroupProps): react_jsx_runtime10.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,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"}
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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "maquinaweb-ui",
3
- "version": "2.52.0",
3
+ "version": "2.53.0",
4
4
  "description": "A minimal React component library",
5
5
  "type": "module",
6
6
  "sideEffects": false,