maquinaweb-ui 2.49.1 → 2.51.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/container-animation.d.ts +2 -2
- package/dist/date-field.d.ts +2 -2
- package/dist/kanban-dnd.d.ts +3 -1
- package/dist/kanban-dnd.d.ts.map +1 -1
- package/dist/kanban-dnd.js +47 -5
- package/dist/kanban-dnd.js.map +1 -1
- package/dist/remote-selector.d.ts +3 -3
- package/dist/split-text-poor.d.ts.map +1 -1
- package/dist/text-field.d.ts +5 -5
- package/dist/toggle-field.d.ts +2 -2
- package/dist/toggle-field.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ComponentProps, ElementType } from "react";
|
|
2
|
-
import * as
|
|
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>) =>
|
|
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
|
package/dist/date-field.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { FieldPath, FieldValues, UseControllerProps } from "react-hook-form";
|
|
2
|
-
import * as
|
|
2
|
+
import * as react_jsx_runtime0 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>):
|
|
32
|
+
}: DateFieldProps<TFieldValues, TFieldName>): react_jsx_runtime0.JSX.Element;
|
|
33
33
|
//#endregion
|
|
34
34
|
export { DateField, type DateFieldProps };
|
|
35
35
|
//# sourceMappingURL=date-field.d.ts.map
|
package/dist/kanban-dnd.d.ts
CHANGED
|
@@ -62,6 +62,7 @@ type KanbanDndMonitorProps<TColumn> = {
|
|
|
62
62
|
isAutoScrollEnabled?: boolean;
|
|
63
63
|
renderIdleLayer?: ReactNode;
|
|
64
64
|
onSelectionChange?: (cardIds: string[]) => void;
|
|
65
|
+
className?: string;
|
|
65
66
|
};
|
|
66
67
|
type KanbanSelectorProps = {
|
|
67
68
|
dragAreaId?: string;
|
|
@@ -115,7 +116,8 @@ declare function KanbanDndMonitor<TColumn>({
|
|
|
115
116
|
setIsDragging,
|
|
116
117
|
autoScrollOverflow,
|
|
117
118
|
isAutoScrollEnabled,
|
|
118
|
-
renderIdleLayer
|
|
119
|
+
renderIdleLayer,
|
|
120
|
+
className
|
|
119
121
|
}: KanbanDndMonitorProps<TColumn>): react_jsx_runtime13.JSX.Element;
|
|
120
122
|
//#endregion
|
|
121
123
|
//#region src/components/kanban-dnd/kanban-dropzone.d.ts
|
package/dist/kanban-dnd.d.ts.map
CHANGED
|
@@ -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":";;;;KAEY,oBAAA;;YAEA;AAFZ,CAAA;AAKY,KAAA,cAAA,GAAc;EAiBd,WAAA,CAAA,EAAA;IAOA,IAAA,EAAA,MAAA;IAEY,GAAA,EAAA,MAAA;IAAV,MAAA,EAAA,MAAA;EACc,CAAA;EAAV,YAAA,CAAA,EAAA;IAAS,KAAA,EAAA,MAAA;IAGf,GAAA,EAAA,MAAA;IAgBA,MAAA,EAAA,MAAA;EACC,CAAA;CACyB;AAGzB,KAlCD,mBAAA,GAkCC;EAGN,QAAA,EApCK,SAoCL;EACyB,EAAA,EAAA,MAAA;EACF,SAAA,CAAA,EAAA,MAAA;EAA8B,eAAA,CAAA,EAAA,MAAA;CAUrC;AAEH,KA5CR,uBAAA,GA4CQ;EAAS,QAAA,EAAA,MAAA;
|
|
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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"}
|
package/dist/kanban-dnd.js
CHANGED
|
@@ -277,7 +277,7 @@ function defaultGetColumnId(column) {
|
|
|
277
277
|
const id = column?.id;
|
|
278
278
|
return id === void 0 || id === null ? "" : String(id);
|
|
279
279
|
}
|
|
280
|
-
function KanbanDndMonitor({ onCardsMove, onColumnReorder, scrollContainerId, setColumns, children, getColumnId, moveCards, getCardsFromColumn, setCardsInColumn, getCardId, getSelectedCardIds, setSelectedCardIds, addSelectedCardId, clearSelectedCards, onSelectionChange, setIsDragging, autoScrollOverflow, isAutoScrollEnabled = true, renderIdleLayer }) {
|
|
280
|
+
function KanbanDndMonitor({ onCardsMove, onColumnReorder, scrollContainerId, setColumns, children, getColumnId, moveCards, getCardsFromColumn, setCardsInColumn, getCardId, getSelectedCardIds, setSelectedCardIds, addSelectedCardId, clearSelectedCards, onSelectionChange, setIsDragging, autoScrollOverflow, isAutoScrollEnabled = true, renderIdleLayer, className }) {
|
|
281
281
|
const [isDragging, setLocalIsDragging] = useState(false);
|
|
282
282
|
const isDraggingRef = useRef(false);
|
|
283
283
|
const selectedCardIdsRef = useRef([]);
|
|
@@ -510,7 +510,7 @@ function KanbanDndMonitor({ onCardsMove, onColumnReorder, scrollContainerId, set
|
|
|
510
510
|
return /* @__PURE__ */ jsx(KanbanDndProvider, {
|
|
511
511
|
value: contextValue,
|
|
512
512
|
children: /* @__PURE__ */ jsxs("div", {
|
|
513
|
-
className: "contain-layout h-full",
|
|
513
|
+
className: cn("contain-layout h-full", className),
|
|
514
514
|
id: "draggable-area",
|
|
515
515
|
children: [!isDragging && renderIdleLayer, children]
|
|
516
516
|
})
|
|
@@ -563,6 +563,23 @@ const hasSameCardSet = (a, b) => {
|
|
|
563
563
|
if (aSet.size !== b.length) return false;
|
|
564
564
|
return b.every((id) => aSet.has(String(id)));
|
|
565
565
|
};
|
|
566
|
+
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);
|
|
576
|
+
return;
|
|
577
|
+
}
|
|
578
|
+
baseSet.add(normalizedId);
|
|
579
|
+
nextSelection.push(normalizedId);
|
|
580
|
+
});
|
|
581
|
+
return nextSelection;
|
|
582
|
+
};
|
|
566
583
|
const edgeDelta = (pointer, start, end, margin, dt) => {
|
|
567
584
|
if (pointer < start + margin) return (pointer - (start + margin)) / margin * dt;
|
|
568
585
|
if (pointer > end - margin) return (pointer - (end - margin)) / margin * dt;
|
|
@@ -685,6 +702,9 @@ function useAutoScroll({ isSelectingRef, dragAreaId, autoScrollMargin }) {
|
|
|
685
702
|
function KanbanSelector({ dragAreaId = DEFAULT_DRAG_AREA_ID, autoScrollMargin = DEFAULT_AUTO_SCROLL_MARGIN, ignoredSlots = DEFAULT_IGNORED_SLOTS }) {
|
|
686
703
|
const context = useKanbanDndContext();
|
|
687
704
|
const isSelectingRef = useRef(false);
|
|
705
|
+
const isShiftPressedRef = useRef(false);
|
|
706
|
+
const shouldToggleFromBaseRef = useRef(false);
|
|
707
|
+
const baseSelectedCardIdsRef = useRef([]);
|
|
688
708
|
useAutoScroll({
|
|
689
709
|
isSelectingRef,
|
|
690
710
|
dragAreaId,
|
|
@@ -706,14 +726,19 @@ function KanbanSelector({ dragAreaId = DEFAULT_DRAG_AREA_ID, autoScrollMargin =
|
|
|
706
726
|
height: rect.height
|
|
707
727
|
})) selectedIds.push(String(item.id));
|
|
708
728
|
});
|
|
709
|
-
|
|
710
|
-
context.
|
|
729
|
+
const nextIds = shouldToggleFromBaseRef.current ? toggleSelectionByArea(baseSelectedCardIdsRef.current, selectedIds) : selectedIds;
|
|
730
|
+
if (hasSameCardSet(nextIds, context.getSelectedCardIds())) return;
|
|
731
|
+
context.setSelectedCardIds(nextIds);
|
|
711
732
|
},
|
|
712
733
|
onSelectionEnd: () => {
|
|
713
734
|
isSelectingRef.current = false;
|
|
735
|
+
shouldToggleFromBaseRef.current = false;
|
|
736
|
+
baseSelectedCardIdsRef.current = [];
|
|
714
737
|
},
|
|
715
738
|
onSelectionStart: () => {
|
|
716
739
|
isSelectingRef.current = true;
|
|
740
|
+
shouldToggleFromBaseRef.current = isShiftPressedRef.current;
|
|
741
|
+
baseSelectedCardIdsRef.current = context?.getSelectedCardIds() ?? [];
|
|
717
742
|
},
|
|
718
743
|
selectionProps: { style: {
|
|
719
744
|
pointerEvents: "none",
|
|
@@ -724,12 +749,29 @@ function KanbanSelector({ dragAreaId = DEFAULT_DRAG_AREA_ID, autoScrollMargin =
|
|
|
724
749
|
});
|
|
725
750
|
useEffect(() => {
|
|
726
751
|
if (!context) return;
|
|
752
|
+
const handleKeyDown = (e) => {
|
|
753
|
+
if (e.key === "Shift") isShiftPressedRef.current = true;
|
|
754
|
+
};
|
|
755
|
+
const handleKeyUp = (e) => {
|
|
756
|
+
if (e.key === "Shift") isShiftPressedRef.current = false;
|
|
757
|
+
};
|
|
758
|
+
const handleWindowBlur = () => {
|
|
759
|
+
isShiftPressedRef.current = false;
|
|
760
|
+
};
|
|
727
761
|
const handlePointerUp = (e) => {
|
|
728
762
|
const target = e.target;
|
|
729
763
|
if (!isSelectingRef.current && !context.getIsDragging() && !target?.closest("[data-draggable=\"true\"]")) context.clearSelectedCards();
|
|
730
764
|
};
|
|
765
|
+
document.addEventListener("keydown", handleKeyDown);
|
|
766
|
+
document.addEventListener("keyup", handleKeyUp);
|
|
767
|
+
window.addEventListener("blur", handleWindowBlur);
|
|
731
768
|
document.addEventListener("pointerup", handlePointerUp);
|
|
732
|
-
return () =>
|
|
769
|
+
return () => {
|
|
770
|
+
document.removeEventListener("keydown", handleKeyDown);
|
|
771
|
+
document.removeEventListener("keyup", handleKeyUp);
|
|
772
|
+
window.removeEventListener("blur", handleWindowBlur);
|
|
773
|
+
document.removeEventListener("pointerup", handlePointerUp);
|
|
774
|
+
};
|
|
733
775
|
}, [context]);
|
|
734
776
|
if (!context) return null;
|
|
735
777
|
return /* @__PURE__ */ jsx(DragSelection, {});
|
package/dist/kanban-dnd.js.map
CHANGED
|
@@ -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 { combine } from '@atlaskit/pragmatic-drag-and-drop/combine';\nimport { monitorForElements } from '@atlaskit/pragmatic-drag-and-drop/element/adapter';\nimport { reorder } from '@atlaskit/pragmatic-drag-and-drop/reorder';\nimport { autoScrollForElements } from '@atlaskit/pragmatic-drag-and-drop-auto-scroll/element';\nimport { unsafeOverflowAutoScrollForElements } from '@atlaskit/pragmatic-drag-and-drop-auto-scroll/unsafe-overflow/element';\nimport { DEFAULT_AUTO_SCROLL_OVERFLOW } from './constants';\nimport { KanbanDndProvider } from './context';\nimport { moveCardsInColumns } from './move-cards';\nimport type { DropTarget, KanbanDndMonitorProps } from './types';\nimport { getTargetColumnId } from './utils';\n\nfunction areSameCardSet(a: string[], b: string[]) {\n if (a.length !== b.length) return false;\n const aSet = new Set(a.map(String));\n if (aSet.size !== b.length) return false;\n return b.every((id) => aSet.has(String(id)));\n}\n\nfunction defaultGetColumnId<TColumn>(column: TColumn): string {\n const maybeColumn = column as Record<string, unknown>;\n const id = maybeColumn?.id;\n return id === undefined || id === null ? '' : String(id);\n}\n\nexport function KanbanDndMonitor<TColumn>({\n onCardsMove,\n onColumnReorder,\n scrollContainerId,\n setColumns,\n children,\n getColumnId,\n moveCards,\n getCardsFromColumn,\n setCardsInColumn,\n getCardId,\n getSelectedCardIds,\n setSelectedCardIds,\n addSelectedCardId,\n clearSelectedCards,\n onSelectionChange,\n setIsDragging,\n autoScrollOverflow,\n isAutoScrollEnabled = true,\n renderIdleLayer,\n}: KanbanDndMonitorProps<TColumn>) {\n const [isDragging, setLocalIsDragging] = useState(false);\n const isDraggingRef = useRef(false);\n const selectedCardIdsRef = useRef<string[]>([]);\n const selectableItemMapRef = useRef(new Map<string, HTMLElement>());\n const selectionListenersRef = useRef(new Set<() => void>());\n\n const notifySelectionListeners = useCallback(() => {\n selectionListenersRef.current.forEach((listener) => listener());\n }, []);\n\n const subscribeSelection = useCallback((listener: () => void) => {\n selectionListenersRef.current.add(listener);\n return () => {\n selectionListenersRef.current.delete(listener);\n };\n }, []);\n const getColumnIdSafe = useCallback(\n (column: TColumn) =>\n getColumnId ? getColumnId(column) : defaultGetColumnId(column),\n [getColumnId]\n );\n\n const getSelectedCardIdsSafe = useCallback(\n () => getSelectedCardIds?.() ?? selectedCardIdsRef.current,\n [getSelectedCardIds]\n );\n\n const setInternalSelectedCardIdsSafe = useCallback(\n (nextIds: string[]) => {\n selectedCardIdsRef.current = nextIds;\n notifySelectionListeners();\n onSelectionChange?.(nextIds);\n },\n [notifySelectionListeners, onSelectionChange]\n );\n\n const addSelectedCardIdSafe = useCallback(\n (cardId: string) => {\n const selectedIds = getSelectedCardIdsSafe();\n if (selectedIds.includes(cardId)) {\n return;\n }\n\n const nextIds = [...selectedIds, cardId];\n\n if (addSelectedCardId) {\n addSelectedCardId(cardId);\n notifySelectionListeners();\n onSelectionChange?.(nextIds);\n return;\n }\n\n setInternalSelectedCardIdsSafe(nextIds);\n },\n [\n addSelectedCardId,\n getSelectedCardIdsSafe,\n notifySelectionListeners,\n onSelectionChange,\n setInternalSelectedCardIdsSafe,\n ]\n );\n\n const clearSelectedCardsSafe = useCallback(() => {\n const currentIds = getSelectedCardIdsSafe();\n if (currentIds.length === 0) {\n return;\n }\n\n if (clearSelectedCards) {\n clearSelectedCards();\n notifySelectionListeners();\n onSelectionChange?.([]);\n return;\n }\n\n setInternalSelectedCardIdsSafe([]);\n }, [\n clearSelectedCards,\n getSelectedCardIdsSafe,\n notifySelectionListeners,\n onSelectionChange,\n setInternalSelectedCardIdsSafe,\n ]);\n\n const setSelectedCardIdsSafe = useCallback(\n (cardIds: string[]) => {\n const nextIds = Array.from(new Set(cardIds.map(String)));\n const currentIds = getSelectedCardIdsSafe();\n\n if (areSameCardSet(nextIds, currentIds)) {\n return;\n }\n\n if (setSelectedCardIds) {\n setSelectedCardIds(nextIds);\n notifySelectionListeners();\n onSelectionChange?.(nextIds);\n return;\n }\n\n if (getSelectedCardIds && clearSelectedCards && addSelectedCardId) {\n clearSelectedCards();\n nextIds.forEach((cardId) => addSelectedCardId(cardId));\n notifySelectionListeners();\n onSelectionChange?.(nextIds);\n return;\n }\n\n setInternalSelectedCardIdsSafe(nextIds);\n },\n [\n addSelectedCardId,\n clearSelectedCards,\n getSelectedCardIdsSafe,\n getSelectedCardIds,\n notifySelectionListeners,\n onSelectionChange,\n setSelectedCardIds,\n setInternalSelectedCardIdsSafe,\n ]\n );\n\n const toggleSelectedCardIdSafe = useCallback(\n (cardId: string) => {\n const selectedIds = getSelectedCardIdsSafe();\n if (selectedIds.includes(cardId)) {\n setSelectedCardIdsSafe(\n selectedIds.filter((selectedId) => selectedId !== cardId)\n );\n return;\n }\n\n addSelectedCardIdSafe(cardId);\n },\n [addSelectedCardIdSafe, getSelectedCardIdsSafe, setSelectedCardIdsSafe]\n );\n\n const registerSelectableItem = useCallback(\n (id: string, element: HTMLElement | null) => {\n if (!element) {\n selectableItemMapRef.current.delete(id);\n return;\n }\n\n selectableItemMapRef.current.set(id, element);\n },\n []\n );\n\n const getSelectableItems = useCallback(\n () =>\n Array.from(selectableItemMapRef.current.entries()).map(\n ([id, element]) => ({\n id,\n element,\n })\n ),\n []\n );\n\n const contextValue = useMemo(\n () => ({\n getIsDragging: () => isDraggingRef.current,\n getSelectedCardIds: getSelectedCardIdsSafe,\n subscribeSelection,\n setSelectedCardIds: setSelectedCardIdsSafe,\n addSelectedCardId: addSelectedCardIdSafe,\n clearSelectedCards: clearSelectedCardsSafe,\n toggleSelectedCardId: toggleSelectedCardIdSafe,\n registerSelectableItem,\n getSelectableItems,\n }),\n [\n addSelectedCardIdSafe,\n clearSelectedCardsSafe,\n getSelectableItems,\n getSelectedCardIdsSafe,\n registerSelectableItem,\n setSelectedCardIdsSafe,\n subscribeSelection,\n toggleSelectedCardIdSafe,\n ]\n );\n\n const setDraggingState = useCallback(\n (value: boolean) => {\n isDraggingRef.current = value;\n if (renderIdleLayer) {\n setLocalIsDragging(value);\n }\n },\n [renderIdleLayer]\n );\n\n const finishDrag = () => {\n setDraggingState(false);\n setIsDragging?.(false);\n clearSelectedCardsSafe();\n };\n\n const startDrag = (source: { data: Record<string, unknown> }) => {\n if (source.data.type !== 'column' && source.data.type !== 'card') return;\n\n if (source.data.type === 'card') {\n const cardId = String(source.data.cardId ?? '');\n const selectedIds = getSelectedCardIdsSafe();\n if (!selectedIds.includes(cardId)) {\n addSelectedCardIdSafe(cardId);\n }\n }\n\n setIsDragging?.(true);\n setDraggingState(true);\n };\n\n const dropColumn = (sourceColumnId: string, targetColumnId: string) => {\n if (!sourceColumnId || sourceColumnId === targetColumnId) return;\n\n let nextOrder: number | null = null;\n\n setColumns((prev) => {\n const oldIndex = prev.findIndex(\n (col) => getColumnIdSafe(col) === sourceColumnId\n );\n const newIndex = prev.findIndex(\n (col) => getColumnIdSafe(col) === targetColumnId\n );\n\n if (oldIndex < 0 || newIndex < 0 || oldIndex === newIndex) {\n return prev;\n }\n\n nextOrder = newIndex + 1;\n return reorder({\n list: prev,\n startIndex: oldIndex,\n finishIndex: newIndex,\n });\n });\n\n if (nextOrder !== null) {\n onColumnReorder?.({ columnId: sourceColumnId, order: nextOrder });\n }\n };\n\n const dropCard = (cardId: string, targetColumnId: string) => {\n if (!cardId || !targetColumnId) return;\n\n const selectedIds = getSelectedCardIdsSafe();\n const idsToMove = selectedIds.length > 0 ? selectedIds : [cardId];\n\n setColumns((prev) => {\n if (moveCards) {\n return moveCards(prev, idsToMove, targetColumnId);\n }\n\n return moveCardsInColumns(prev, idsToMove, targetColumnId, {\n getColumnId: getColumnIdSafe,\n getCards: getCardsFromColumn as\n | ((column: TColumn) => unknown[])\n | undefined,\n setCards: setCardsInColumn as\n | ((column: TColumn, cards: unknown[]) => TColumn)\n | undefined,\n getCardId,\n });\n });\n onCardsMove?.({ cardIds: idsToMove, targetColumnId });\n };\n\n useEffect(() => {\n const monitorCleanup = monitorForElements({\n onDragStart: ({ source }) => startDrag(source),\n onDrop: ({ source, location }) => {\n const dropTargets = location.current.dropTargets as DropTarget[];\n\n if (source.data.type === 'column') {\n dropColumn(\n String(source.data.columnId ?? ''),\n getTargetColumnId(dropTargets, 'column')\n );\n finishDrag();\n return;\n }\n\n if (source.data.type === 'card') {\n dropCard(\n String(source.data.cardId ?? ''),\n getTargetColumnId(dropTargets, 'column-drop')\n );\n finishDrag();\n return;\n }\n\n finishDrag();\n },\n });\n\n if (!isAutoScrollEnabled || !scrollContainerId) {\n return monitorCleanup;\n }\n\n const scrollContainer = document.getElementById(scrollContainerId);\n if (!scrollContainer) {\n return monitorCleanup;\n }\n\n return combine(\n monitorCleanup,\n autoScrollForElements({\n element: scrollContainer,\n canScroll: ({ source }) =>\n source.data.type === 'card' || source.data.type === 'column',\n getAllowedAxis: () => 'horizontal',\n }),\n unsafeOverflowAutoScrollForElements({\n element: scrollContainer,\n canScroll: ({ source }) =>\n source.data.type === 'card' || source.data.type === 'column',\n getAllowedAxis: () => 'horizontal',\n getOverflow: () => autoScrollOverflow ?? DEFAULT_AUTO_SCROLL_OVERFLOW,\n })\n );\n }, [\n addSelectedCardIdSafe,\n autoScrollOverflow,\n clearSelectedCardsSafe,\n getCardId,\n getCardsFromColumn,\n getColumnIdSafe,\n getSelectedCardIdsSafe,\n isAutoScrollEnabled,\n moveCards,\n onCardsMove,\n onColumnReorder,\n setCardsInColumn,\n scrollContainerId,\n setSelectedCardIds,\n setColumns,\n setIsDragging,\n ]);\n\n return (\n <KanbanDndProvider value={contextValue}>\n <div className=\"contain-layout h-full\" id=\"draggable-area\">\n {!isDragging && renderIdleLayer}\n {children}\n </div>\n </KanbanDndProvider>\n );\n}\n","'use client';\n\nimport { useEffect, useRef, useState } from 'react';\n\nimport { cn } from '@/lib/utils';\nimport { dropTargetForElements } from '@atlaskit/pragmatic-drag-and-drop/element/adapter';\nimport type { KanbanDropZoneProps } from './types';\n\nexport function KanbanDropZone({\n children,\n id,\n className,\n isOverClassName,\n}: KanbanDropZoneProps) {\n const [isOver, setIsOver] = useState(false);\n const ref = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const element = ref.current;\n if (!element) return;\n\n return dropTargetForElements({\n element,\n canDrop: ({ source }) => source.data.type === 'card',\n getData: () => ({\n type: 'column-drop',\n columnId: String(id),\n }),\n onDragEnter: () => setIsOver(true),\n onDragLeave: () => setIsOver(false),\n onDrop: () => setIsOver(false),\n });\n }, [id]);\n\n return (\n <div\n className={cn(\n 'border flex-1 border-transparent rounded-xl transition-colors',\n isOver && (isOverClassName ?? 'border-border'),\n className\n )}\n id={`kanban-drop-zone-${id}`}\n ref={ref}\n >\n {children}\n </div>\n );\n}\n","'use client';\n\nimport type { MutableRefObject } from 'react';\nimport { useEffect, useMemo, useRef } from 'react';\n\nimport {\n boxesIntersect,\n useSelectionContainer,\n} from '@air/react-drag-to-select';\nimport { useKanbanDndContext } from './context';\nimport type { KanbanSelectorProps } from './types';\n\nconst DEFAULT_DRAG_AREA_ID = 'draggable-area';\nconst DEFAULT_AUTO_SCROLL_MARGIN = 120;\nconst DEFAULT_IGNORED_SLOTS = [\n 'sheet-content',\n 'popover-content',\n 'select-content',\n 'dialog-content',\n 'dialog-overlay',\n];\n\nconst clampDelta = (delta: number, current: number, max: number) =>\n delta > 0 ? Math.min(delta, max - current) : Math.max(delta, -current);\n\nconst hasSameCardSet = (a: string[], b: string[]) => {\n if (a.length !== b.length) return false;\n const aSet = new Set(a.map(String));\n if (aSet.size !== b.length) return false;\n return b.every((id) => aSet.has(String(id)));\n};\n\nconst edgeDelta = (\n pointer: number,\n start: number,\n end: number,\n margin: number,\n dt: number\n) => {\n if (pointer < start + margin)\n return ((pointer - (start + margin)) / margin) * dt;\n if (pointer > end - margin) return ((pointer - (end - margin)) / margin) * dt;\n return 0;\n};\n\nfunction findScrollable(\n node: HTMLElement | null,\n axis: 'x' | 'y'\n): HTMLElement | null {\n if (!node) return null;\n\n const style = window.getComputedStyle(node);\n const canScrollX =\n /(auto|scroll)/.test(style.overflowX) &&\n node.scrollWidth > node.clientWidth;\n const canScrollY =\n /(auto|scroll)/.test(style.overflowY) &&\n node.scrollHeight > node.clientHeight;\n\n if ((axis === 'x' && canScrollX) || (axis === 'y' && canScrollY)) return node;\n return findScrollable(node.parentElement, axis);\n}\n\nfunction getContainerBounds(container: HTMLElement | null) {\n if (\n !container ||\n container === document.documentElement ||\n container === document.body\n ) {\n return {\n left: 0,\n right: window.innerWidth,\n top: 0,\n bottom: window.innerHeight,\n };\n }\n\n const rect = container.getBoundingClientRect();\n return {\n left: Math.max(0, rect.left),\n right: Math.min(window.innerWidth, rect.right),\n top: Math.max(0, rect.top),\n bottom: Math.min(window.innerHeight, rect.bottom),\n };\n}\n\nfunction shouldStartSelecting(\n target: EventTarget | null,\n ignoredSlots: string[]\n): boolean {\n if (!(target instanceof Element)) return false;\n\n return !(\n target.closest('[data-draggable=\"true\"]') ||\n ignoredSlots.some((slot) => target.closest(`[data-slot=\"${slot}\"]`))\n );\n}\n\nfunction useAutoScroll({\n isSelectingRef,\n dragAreaId,\n autoScrollMargin,\n}: {\n isSelectingRef: MutableRefObject<boolean>;\n dragAreaId: string;\n autoScrollMargin: number;\n}) {\n useEffect(() => {\n let raf = 0;\n let lastTime = performance.now();\n const pos = { x: 0, y: 0 };\n let xContainer: HTMLElement | null = null;\n let yContainer: HTMLElement | null = null;\n let xMax = 0;\n let yMax = 0;\n let useWindowY = false;\n\n const onMove = (e: PointerEvent) => (\n (pos.x = e.clientX), (pos.y = e.clientY)\n );\n\n window.addEventListener('pointermove', onMove, { passive: true });\n\n const reset = () => {\n xContainer = null;\n yContainer = null;\n xMax = 0;\n yMax = 0;\n useWindowY = false;\n };\n\n const step = (time: number) => {\n const dt = time - lastTime;\n lastTime = time;\n\n if (!isSelectingRef.current) {\n reset();\n raf = requestAnimationFrame(step);\n return;\n }\n\n if (!xContainer && !yContainer && xMax === 0 && yMax === 0) {\n const startNode =\n document.getElementById(dragAreaId)?.parentElement ?? null;\n xContainer = findScrollable(startNode, 'x');\n yContainer = findScrollable(startNode, 'y');\n useWindowY = !yContainer;\n xMax = xContainer ? xContainer.scrollWidth - xContainer.clientWidth : 0;\n yMax = useWindowY\n ? document.documentElement.scrollHeight - window.innerHeight\n : yContainer\n ? yContainer.scrollHeight - yContainer.clientHeight\n : 0;\n }\n\n const xBounds = getContainerBounds(xContainer);\n const yBounds = useWindowY\n ? { top: 0, bottom: window.innerHeight }\n : getContainerBounds(yContainer);\n\n const dx = edgeDelta(\n pos.x,\n xBounds.left,\n xBounds.right,\n autoScrollMargin,\n dt\n );\n const dy = edgeDelta(\n pos.y,\n yBounds.top,\n yBounds.bottom,\n autoScrollMargin,\n dt\n );\n\n let didScroll = false;\n\n if (dx && xContainer && xMax > 0) {\n const clampedDx = clampDelta(dx, xContainer.scrollLeft, xMax);\n if (clampedDx) {\n xContainer.scrollBy(clampedDx, 0);\n didScroll = true;\n }\n }\n\n if (dy && yMax > 0) {\n if (useWindowY) {\n const clampedDy = clampDelta(\n dy,\n window.scrollY || document.documentElement.scrollTop,\n yMax\n );\n if (clampedDy) {\n window.scrollBy(0, clampedDy);\n didScroll = true;\n }\n } else if (yContainer) {\n const clampedDy = clampDelta(dy, yContainer.scrollTop, yMax);\n if (clampedDy) {\n yContainer.scrollBy(0, clampedDy);\n didScroll = true;\n }\n }\n }\n\n if (didScroll) {\n document.body.dispatchEvent(\n new MouseEvent('mousemove', {\n clientX: pos.x,\n clientY: pos.y,\n bubbles: true,\n cancelable: true,\n })\n );\n }\n\n raf = requestAnimationFrame(step);\n };\n\n raf = requestAnimationFrame(step);\n\n return () => {\n window.removeEventListener('pointermove', onMove);\n cancelAnimationFrame(raf);\n };\n }, [autoScrollMargin, dragAreaId, isSelectingRef]);\n}\n\nexport function KanbanSelector({\n dragAreaId = DEFAULT_DRAG_AREA_ID,\n autoScrollMargin = DEFAULT_AUTO_SCROLL_MARGIN,\n ignoredSlots = DEFAULT_IGNORED_SLOTS,\n}: KanbanSelectorProps) {\n const context = useKanbanDndContext();\n const isSelectingRef = useRef(false);\n\n useAutoScroll({ isSelectingRef, dragAreaId, autoScrollMargin });\n\n const shouldStart = useMemo(\n () => (target: EventTarget | null) =>\n shouldStartSelecting(target, ignoredSlots),\n [ignoredSlots]\n );\n\n const { DragSelection } = useSelectionContainer({\n shouldStartSelecting: shouldStart,\n onSelectionChange: (selection: Parameters<typeof boxesIntersect>[0]) => {\n if (!context) return;\n\n const selectedIds: string[] = [];\n\n context.getSelectableItems().forEach((item) => {\n if (!item.element) return;\n\n const rect = item.element.getBoundingClientRect();\n const cardRect = {\n ...rect,\n left: rect.left + window.scrollX,\n top: rect.top,\n width: rect.width,\n height: rect.height,\n };\n\n if (boxesIntersect(selection, cardRect)) {\n selectedIds.push(String(item.id));\n }\n });\n\n if (hasSameCardSet(selectedIds, context.getSelectedCardIds())) {\n return;\n }\n\n context.setSelectedCardIds(selectedIds);\n },\n onSelectionEnd: () => {\n isSelectingRef.current = false;\n },\n onSelectionStart: () => {\n isSelectingRef.current = true;\n },\n selectionProps: {\n style: {\n pointerEvents: 'none',\n position: 'fixed',\n inset: 0,\n zIndex: 50,\n },\n },\n });\n\n useEffect(() => {\n if (!context) return;\n\n const handlePointerUp = (e: PointerEvent) => {\n const target = e.target as Element | null;\n if (\n !isSelectingRef.current &&\n !context.getIsDragging() &&\n !target?.closest('[data-draggable=\"true\"]')\n ) {\n context.clearSelectedCards();\n }\n };\n\n document.addEventListener('pointerup', handlePointerUp);\n return () => document.removeEventListener('pointerup', handlePointerUp);\n }, [context]);\n\n if (!context) return null;\n\n return <DragSelection />;\n}\n","'use client';\n\nimport { useEffect } from 'react';\n\nimport { combine } from '@atlaskit/pragmatic-drag-and-drop/combine';\nimport {\n draggable,\n dropTargetForElements,\n} from '@atlaskit/pragmatic-drag-and-drop/element/adapter';\nimport type { UseKanbanColumnDnDProps } from './types';\n\nexport function useKanbanColumnDnD({\n columnId,\n elementRef,\n dragHandleRef,\n}: UseKanbanColumnDnDProps) {\n useEffect(() => {\n const element = elementRef.current;\n if (!element) return;\n\n return combine(\n draggable({\n element,\n dragHandle: dragHandleRef?.current ?? undefined,\n getInitialData: () => ({\n type: 'column',\n columnId: String(columnId),\n }),\n }),\n dropTargetForElements({\n element,\n canDrop: ({ source }) =>\n source.data.type === 'column' &&\n String(source.data.columnId) !== String(columnId),\n getData: () => ({\n type: 'column',\n columnId: String(columnId),\n }),\n })\n );\n }, [columnId, dragHandleRef, elementRef]);\n}\n"],"mappings":"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"}
|
|
1
|
+
{"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 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 = 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 };\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 window.addEventListener('blur', handleWindowBlur);\n document.addEventListener('pointerup', handlePointerUp);\n return () => {\n document.removeEventListener('keydown', handleKeyDown);\n document.removeEventListener('keyup', handleKeyUp);\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,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,UAAU,kBAAkB;AACpD,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;;EAG9B,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,SAAO,iBAAiB,QAAQ,iBAAiB;AACjD,WAAS,iBAAiB,aAAa,gBAAgB;AACvD,eAAa;AACX,YAAS,oBAAoB,WAAW,cAAc;AACtD,YAAS,oBAAoB,SAAS,YAAY;AAClD,UAAO,oBAAoB,QAAQ,iBAAiB;AACpD,YAAS,oBAAoB,aAAa,gBAAgB;;IAE3D,CAAC,QAAQ,CAAC;AAEb,KAAI,CAAC,QAAS,QAAO;AAErB,QAAO,oBAAC,kBAAgB;;;;;ACxW1B,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,5 +1,5 @@
|
|
|
1
1
|
import { FieldPath, FieldPathValue, FieldValues, UseControllerProps } from "react-hook-form";
|
|
2
|
-
import * as
|
|
2
|
+
import * as react_jsx_runtime3 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
|
-
}):
|
|
79
|
+
}): react_jsx_runtime3.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>):
|
|
99
|
+
}: RemoteSelectorQueryProps<T>): react_jsx_runtime3.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,
|
|
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"}
|
package/dist/text-field.d.ts
CHANGED
|
@@ -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
|
|
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):
|
|
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'>):
|
|
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):
|
|
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):
|
|
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
|
package/dist/toggle-field.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as React$1 from "react";
|
|
2
|
-
import * as
|
|
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):
|
|
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,
|
|
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"}
|