maquinaweb-ui 2.47.7 → 2.48.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
  import { ComponentProps, ElementType } from "react";
2
- import * as react_jsx_runtime0 from "react/jsx-runtime";
2
+ import * as react_jsx_runtime5 from "react/jsx-runtime";
3
3
 
4
4
  //#region src/components/container-animation/container-animation.d.ts
5
5
  type ContainerAnimationProps<T extends ElementType = 'div'> = ComponentProps<'div'> & ComponentProps<T> & {
@@ -23,7 +23,7 @@ declare const ContainerAnimation: <T extends ElementType = "div">({
23
23
  distance,
24
24
  hideNotInView,
25
25
  ...props
26
- }: ContainerAnimationProps<T>) => react_jsx_runtime0.JSX.Element;
26
+ }: ContainerAnimationProps<T>) => react_jsx_runtime5.JSX.Element;
27
27
  //#endregion
28
28
  export { ContainerAnimation, type ContainerAnimationProps };
29
29
  //# sourceMappingURL=container-animation.d.ts.map
@@ -1,7 +1,7 @@
1
1
  import { n as Options, t as Mask } from "./with-mask-Chm8kVE1.js";
2
2
  import { FieldPath, FieldValues, UseControllerProps } from "react-hook-form";
3
3
  import { Dispatch, SetStateAction } from "react";
4
- import * as react_jsx_runtime0 from "react/jsx-runtime";
4
+ import * as react_jsx_runtime4 from "react/jsx-runtime";
5
5
  import { PopoverProps } from "@radix-ui/react-popover";
6
6
 
7
7
  //#region src/components/input-suggest/input-suggest.d.ts
@@ -71,7 +71,7 @@ declare function InputSuggest<TFieldValues extends FieldValues = FieldValues, TF
71
71
  debounceTime,
72
72
  maxWait,
73
73
  ...props
74
- }: InputSuggestProps<TFieldValues, TFieldName> & PopoverProps): react_jsx_runtime0.JSX.Element;
74
+ }: InputSuggestProps<TFieldValues, TFieldName> & PopoverProps): react_jsx_runtime4.JSX.Element;
75
75
  //#endregion
76
76
  export { InputSuggest, type InputSuggestProps };
77
77
  //# sourceMappingURL=input-suggest.d.ts.map
@@ -0,0 +1,146 @@
1
+ import { Dispatch, ReactNode, RefObject, SetStateAction } from "react";
2
+ import * as react_jsx_runtime13 from "react/jsx-runtime";
3
+
4
+ //#region src/components/kanban-dnd/types.d.ts
5
+ type KanbanSelectableItem = {
6
+ id: string | number;
7
+ element?: HTMLElement | null;
8
+ };
9
+ type KanbanOverflow = {
10
+ forLeftEdge?: {
11
+ left: number;
12
+ top: number;
13
+ bottom: number;
14
+ };
15
+ forRightEdge?: {
16
+ right: number;
17
+ top: number;
18
+ bottom: number;
19
+ };
20
+ };
21
+ type KanbanDropZoneProps = {
22
+ children: ReactNode;
23
+ id: string;
24
+ className?: string;
25
+ isOverClassName?: string;
26
+ };
27
+ type UseKanbanColumnDnDProps = {
28
+ columnId: string;
29
+ elementRef: RefObject<HTMLElement | null>;
30
+ dragHandleRef?: RefObject<HTMLElement | null>;
31
+ };
32
+ type KanbanCardItemProps = {
33
+ id: string;
34
+ children?: ReactNode;
35
+ className?: string;
36
+ getSelectedCardIds?: () => string[];
37
+ getSelectableItems?: () => KanbanSelectableItem[];
38
+ };
39
+ type KanbanDndMonitorProps<TColumn> = {
40
+ children?: ReactNode;
41
+ setColumns: Dispatch<SetStateAction<TColumn[]>>;
42
+ getColumnId?: (column: TColumn) => string;
43
+ moveCards?: (columns: TColumn[], cardIds: string[], targetColumnId: string) => TColumn[];
44
+ getCardsFromColumn?: (column: TColumn) => unknown[];
45
+ setCardsInColumn?: (column: TColumn, cards: unknown[]) => TColumn;
46
+ getCardId?: (card: unknown) => string;
47
+ getSelectedCardIds?: () => string[];
48
+ setSelectedCardIds?: (cardIds: string[]) => void;
49
+ addSelectedCardId?: (cardId: string) => void;
50
+ clearSelectedCards?: () => void;
51
+ setIsDragging?: (isDragging: boolean) => void;
52
+ onCardsMove?: (args: {
53
+ cardIds: string[];
54
+ targetColumnId: string;
55
+ }) => void;
56
+ onColumnReorder?: (args: {
57
+ columnId: string;
58
+ order: number;
59
+ }) => void;
60
+ scrollContainerId?: string;
61
+ autoScrollOverflow?: KanbanOverflow;
62
+ isAutoScrollEnabled?: boolean;
63
+ renderIdleLayer?: ReactNode;
64
+ onSelectionChange?: (cardIds: string[]) => void;
65
+ };
66
+ type KanbanSelectorProps = {
67
+ dragAreaId?: string;
68
+ autoScrollMargin?: number;
69
+ ignoredSlots?: string[];
70
+ };
71
+ //#endregion
72
+ //#region src/components/kanban-dnd/context.d.ts
73
+ declare function useKanbanSelection(): {
74
+ selectedCardIds: string[];
75
+ isSelected: (cardId: string) => boolean;
76
+ setSelectedCardIds: (cardIds: string[]) => void;
77
+ addSelectedCardId: (cardId: string) => void;
78
+ clearSelectedCards: () => void;
79
+ toggleSelectedCardId: (cardId: string) => void;
80
+ };
81
+ //#endregion
82
+ //#region src/components/kanban-dnd/kanban-card-item.d.ts
83
+ declare function KanbanCardItem({
84
+ id,
85
+ children,
86
+ className,
87
+ getSelectedCardIds,
88
+ getSelectableItems
89
+ }: KanbanCardItemProps): react_jsx_runtime13.JSX.Element;
90
+ //#endregion
91
+ //#region src/components/kanban-dnd/kanban-dnd-monitor.d.ts
92
+ declare function KanbanDndMonitor<TColumn>({
93
+ onCardsMove,
94
+ onColumnReorder,
95
+ scrollContainerId,
96
+ setColumns,
97
+ children,
98
+ getColumnId,
99
+ moveCards,
100
+ getCardsFromColumn,
101
+ setCardsInColumn,
102
+ getCardId,
103
+ getSelectedCardIds,
104
+ setSelectedCardIds,
105
+ addSelectedCardId,
106
+ clearSelectedCards,
107
+ onSelectionChange,
108
+ setIsDragging,
109
+ autoScrollOverflow,
110
+ isAutoScrollEnabled,
111
+ renderIdleLayer
112
+ }: KanbanDndMonitorProps<TColumn>): react_jsx_runtime13.JSX.Element;
113
+ //#endregion
114
+ //#region src/components/kanban-dnd/kanban-dropzone.d.ts
115
+ declare function KanbanDropZone({
116
+ children,
117
+ id,
118
+ className,
119
+ isOverClassName
120
+ }: KanbanDropZoneProps): react_jsx_runtime13.JSX.Element;
121
+ //#endregion
122
+ //#region src/components/kanban-dnd/kanban-selector.d.ts
123
+ declare function KanbanSelector({
124
+ dragAreaId,
125
+ autoScrollMargin,
126
+ ignoredSlots
127
+ }: KanbanSelectorProps): react_jsx_runtime13.JSX.Element | null;
128
+ //#endregion
129
+ //#region src/components/kanban-dnd/move-cards.d.ts
130
+ type MoveCardsResolvers<TColumn, TCard> = {
131
+ getColumnId: (column: TColumn) => string;
132
+ getCards: (column: TColumn) => TCard[];
133
+ setCards: (column: TColumn, cards: TCard[]) => TColumn;
134
+ getCardId: (card: TCard) => string;
135
+ };
136
+ declare function moveCardsInColumns<TColumn, TCard>(columns: TColumn[], cardIds: string[], targetColumnId: string, resolvers?: Partial<MoveCardsResolvers<TColumn, TCard>>): TColumn[];
137
+ //#endregion
138
+ //#region src/components/kanban-dnd/use-kanban-column-dnd.d.ts
139
+ declare function useKanbanColumnDnD({
140
+ columnId,
141
+ elementRef,
142
+ dragHandleRef
143
+ }: UseKanbanColumnDnDProps): void;
144
+ //#endregion
145
+ export { KanbanCardItem, type KanbanCardItemProps, KanbanDndMonitor, type KanbanDndMonitorProps, KanbanDropZone, type KanbanDropZoneProps, type KanbanOverflow, type KanbanSelectableItem, KanbanSelector, type KanbanSelectorProps, type UseKanbanColumnDnDProps, moveCardsInColumns, useKanbanColumnDnD, useKanbanSelection };
146
+ //# sourceMappingURL=kanban-dnd.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kanban-dnd.d.ts","names":[],"sources":["../src/components/kanban-dnd/types.ts","../src/components/kanban-dnd/context.tsx","../src/components/kanban-dnd/kanban-card-item.tsx","../src/components/kanban-dnd/kanban-dnd-monitor.tsx","../src/components/kanban-dnd/kanban-dropzone.tsx","../src/components/kanban-dnd/kanban-selector.tsx","../src/components/kanban-dnd/move-cards.ts","../src/components/kanban-dnd/use-kanban-column-dnd.ts"],"sourcesContent":[],"mappings":"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"}
@@ -0,0 +1,673 @@
1
+ 'use client';
2
+
3
+
4
+ import { t as cn } from "./utils-C8_amEgK.js";
5
+ import { createContext, useCallback, useContext, useEffect, useMemo, useRef, useState } from "react";
6
+ import { jsx, jsxs } from "react/jsx-runtime";
7
+ import { draggable, dropTargetForElements, monitorForElements } from "@atlaskit/pragmatic-drag-and-drop/element/adapter";
8
+ import { preserveOffsetOnSource } from "@atlaskit/pragmatic-drag-and-drop/element/preserve-offset-on-source";
9
+ import { setCustomNativeDragPreview } from "@atlaskit/pragmatic-drag-and-drop/element/set-custom-native-drag-preview";
10
+ import { combine } from "@atlaskit/pragmatic-drag-and-drop/combine";
11
+ import { reorder } from "@atlaskit/pragmatic-drag-and-drop/reorder";
12
+ import { autoScrollForElements } from "@atlaskit/pragmatic-drag-and-drop-auto-scroll/element";
13
+ import { unsafeOverflowAutoScrollForElements } from "@atlaskit/pragmatic-drag-and-drop-auto-scroll/unsafe-overflow/element";
14
+ import { boxesIntersect, useSelectionContainer } from "@air/react-drag-to-select";
15
+
16
+ //#region src/components/kanban-dnd/context.tsx
17
+ const KanbanDndContext = createContext(null);
18
+ function KanbanDndProvider({ children, value }) {
19
+ return /* @__PURE__ */ jsx(KanbanDndContext.Provider, {
20
+ value,
21
+ children
22
+ });
23
+ }
24
+ function useKanbanDndContext() {
25
+ return useContext(KanbanDndContext);
26
+ }
27
+ function useKanbanSelection() {
28
+ const context = useKanbanDndContext();
29
+ if (!context) return {
30
+ selectedCardIds: [],
31
+ isSelected: () => false,
32
+ setSelectedCardIds: () => {},
33
+ addSelectedCardId: () => {},
34
+ clearSelectedCards: () => {},
35
+ toggleSelectedCardId: () => {}
36
+ };
37
+ const selectedCardIds = context.getSelectedCardIds();
38
+ return {
39
+ selectedCardIds,
40
+ isSelected: (cardId) => selectedCardIds.includes(cardId),
41
+ setSelectedCardIds: context.setSelectedCardIds,
42
+ addSelectedCardId: context.addSelectedCardId,
43
+ clearSelectedCards: context.clearSelectedCards,
44
+ toggleSelectedCardId: context.toggleSelectedCardId
45
+ };
46
+ }
47
+
48
+ //#endregion
49
+ //#region src/components/kanban-dnd/constants.ts
50
+ const PREVIEW_STACK_LIMIT = 10;
51
+ const PREVIEW_STACK_X_OFFSET = 10;
52
+ const PREVIEW_STACK_Y_OFFSET = 8;
53
+ const PREVIEW_STACK_MIN_OPACITY = .75;
54
+ const STACKED_CLONE_BASE_STYLE = {
55
+ pointerEvents: "none",
56
+ margin: "0",
57
+ width: "100%",
58
+ top: "0",
59
+ left: "0"
60
+ };
61
+ const DEFAULT_AUTO_SCROLL_OVERFLOW = {
62
+ forLeftEdge: {
63
+ left: 320,
64
+ top: 160,
65
+ bottom: 160
66
+ },
67
+ forRightEdge: {
68
+ right: 160,
69
+ top: 120,
70
+ bottom: 120
71
+ }
72
+ };
73
+
74
+ //#endregion
75
+ //#region src/components/kanban-dnd/utils.ts
76
+ function applyStyles(element, styles) {
77
+ Object.assign(element.style, styles);
78
+ }
79
+ function getTargetColumnId(dropTargets, targetType) {
80
+ const target = dropTargets.find((item) => item.data.type === targetType);
81
+ return target ? String(target.data.columnId ?? "") : "";
82
+ }
83
+
84
+ //#endregion
85
+ //#region src/components/kanban-dnd/drag-preview.ts
86
+ function createStackedClone(original, index) {
87
+ const clone = original.cloneNode(true);
88
+ const xOffset = index * PREVIEW_STACK_X_OFFSET;
89
+ const yOffset = index * PREVIEW_STACK_Y_OFFSET;
90
+ const opacity = Math.max(1 - index * .1, PREVIEW_STACK_MIN_OPACITY);
91
+ applyStyles(clone, {
92
+ ...STACKED_CLONE_BASE_STYLE,
93
+ position: index === 0 ? "relative" : "absolute",
94
+ transform: `translate(${xOffset}px, ${yOffset}px)`,
95
+ opacity: String(opacity)
96
+ });
97
+ return clone;
98
+ }
99
+ function createFallbackClone(sourceElement) {
100
+ const fallback = sourceElement.cloneNode(true);
101
+ applyStyles(fallback, {
102
+ pointerEvents: "none",
103
+ margin: "0"
104
+ });
105
+ return fallback;
106
+ }
107
+ function buildDragPreview({ cardId, sourceElement, getSelectableItems, getSelectedCardIds }) {
108
+ const selectedIds = getSelectedCardIds?.() ?? [];
109
+ const idsToPreview = Array.from(new Set([...selectedIds, String(cardId)]));
110
+ const root = document.createElement("div");
111
+ applyStyles(root, { position: "relative" });
112
+ const selectableItems = getSelectableItems?.() ?? [];
113
+ const itemElementById = new Map(selectableItems.filter((item) => item.element).map((item) => [String(item.id), item.element]));
114
+ idsToPreview.slice(0, PREVIEW_STACK_LIMIT).forEach((previewId, index) => {
115
+ const original = itemElementById.get(String(previewId));
116
+ if (!original) return;
117
+ root.appendChild(createStackedClone(original, index));
118
+ });
119
+ if (!root.childElementCount) root.appendChild(createFallbackClone(sourceElement));
120
+ return root;
121
+ }
122
+
123
+ //#endregion
124
+ //#region src/components/kanban-dnd/kanban-card-item.tsx
125
+ function KanbanCardItem({ id, children, className, getSelectedCardIds, getSelectableItems }) {
126
+ const ref = useRef(null);
127
+ const context = useKanbanDndContext();
128
+ const getSelectedCardIdsSafe = getSelectedCardIds ?? context?.getSelectedCardIds;
129
+ const getSelectableItemsSafe = getSelectableItems ?? context?.getSelectableItems;
130
+ useEffect(() => {
131
+ context?.registerSelectableItem(String(id), ref.current);
132
+ return () => {
133
+ context?.registerSelectableItem(String(id), null);
134
+ };
135
+ }, [context, id]);
136
+ useEffect(() => {
137
+ const element = ref.current;
138
+ if (!element) return;
139
+ return draggable({
140
+ element,
141
+ getInitialData: () => ({
142
+ type: "card",
143
+ cardId: String(id)
144
+ }),
145
+ onGenerateDragPreview: ({ nativeSetDragImage, source, location }) => {
146
+ setCustomNativeDragPreview({
147
+ getOffset: preserveOffsetOnSource({
148
+ element: source.element,
149
+ input: location.current.input
150
+ }),
151
+ render({ container }) {
152
+ const root = buildDragPreview({
153
+ cardId: String(id),
154
+ sourceElement: source.element,
155
+ getSelectableItems: getSelectableItemsSafe,
156
+ getSelectedCardIds: getSelectedCardIdsSafe
157
+ });
158
+ container.appendChild(root);
159
+ return () => {
160
+ if (root.parentElement === container) container.removeChild(root);
161
+ };
162
+ },
163
+ nativeSetDragImage
164
+ });
165
+ }
166
+ });
167
+ }, [
168
+ getSelectableItemsSafe,
169
+ getSelectedCardIdsSafe,
170
+ id
171
+ ]);
172
+ return /* @__PURE__ */ jsx("div", {
173
+ className,
174
+ "data-draggable": "true",
175
+ id: `kanban-card-item-${id}`,
176
+ ref,
177
+ suppressHydrationWarning: true,
178
+ children
179
+ });
180
+ }
181
+
182
+ //#endregion
183
+ //#region src/components/kanban-dnd/move-cards.ts
184
+ function hasObjectValue(value) {
185
+ return typeof value === "object" && value !== null;
186
+ }
187
+ function defaultGetColumnId$1(column) {
188
+ if (!hasObjectValue(column)) return "";
189
+ const id = column.id;
190
+ return id === void 0 || id === null ? "" : String(id);
191
+ }
192
+ function defaultGetCards(column) {
193
+ if (!hasObjectValue(column)) return [];
194
+ const cards = column.cards;
195
+ return Array.isArray(cards) ? cards : [];
196
+ }
197
+ function defaultSetCards(column, cards) {
198
+ if (!hasObjectValue(column)) return column;
199
+ return {
200
+ ...column,
201
+ cards
202
+ };
203
+ }
204
+ function defaultGetCardId(card) {
205
+ if (!hasObjectValue(card)) return "";
206
+ const id = card.id;
207
+ return id === void 0 || id === null ? "" : String(id);
208
+ }
209
+ function moveCardsInColumns(columns, cardIds, targetColumnId, resolvers = {}) {
210
+ const getColumnId = resolvers.getColumnId ?? defaultGetColumnId$1;
211
+ const getCards = resolvers.getCards ?? defaultGetCards;
212
+ const setCards = resolvers.setCards ?? defaultSetCards;
213
+ const getCardId = resolvers.getCardId ?? defaultGetCardId;
214
+ const selectedIds = new Set(cardIds);
215
+ if (selectedIds.size === 0) return columns;
216
+ const cardsToMove = columns.flatMap((column) => getCards(column).filter((card) => selectedIds.has(getCardId(card))));
217
+ if (cardsToMove.length === 0) return columns;
218
+ return columns.map((column) => {
219
+ const currentCards = getCards(column);
220
+ if (getColumnId(column) === targetColumnId) {
221
+ const existingIds = new Set(currentCards.map((card) => getCardId(card)));
222
+ const incomingCards = cardsToMove.filter((card) => !existingIds.has(getCardId(card)));
223
+ return setCards(column, [...currentCards, ...incomingCards]);
224
+ }
225
+ return setCards(column, currentCards.filter((card) => !selectedIds.has(getCardId(card))));
226
+ });
227
+ }
228
+
229
+ //#endregion
230
+ //#region src/components/kanban-dnd/kanban-dnd-monitor.tsx
231
+ function defaultGetColumnId(column) {
232
+ const id = column?.id;
233
+ return id === void 0 || id === null ? "" : String(id);
234
+ }
235
+ function KanbanDndMonitor({ onCardsMove, onColumnReorder, scrollContainerId, setColumns, children, getColumnId, moveCards, getCardsFromColumn, setCardsInColumn, getCardId, getSelectedCardIds, setSelectedCardIds, addSelectedCardId, clearSelectedCards, onSelectionChange, setIsDragging, autoScrollOverflow, isAutoScrollEnabled = true, renderIdleLayer }) {
236
+ const [isDragging, setLocalIsDragging] = useState(false);
237
+ const [internalSelectedCardIds, setInternalSelectedCardIds] = useState([]);
238
+ const selectableItemMapRef = useRef(/* @__PURE__ */ new Map());
239
+ const getColumnIdSafe = useCallback((column) => getColumnId ? getColumnId(column) : defaultGetColumnId(column), [getColumnId]);
240
+ const getSelectedCardIdsSafe = useCallback(() => getSelectedCardIds?.() ?? internalSelectedCardIds, [getSelectedCardIds, internalSelectedCardIds]);
241
+ const addSelectedCardIdSafe = useCallback((cardId) => {
242
+ if (addSelectedCardId) {
243
+ addSelectedCardId(cardId);
244
+ return;
245
+ }
246
+ setInternalSelectedCardIds((prev) => prev.includes(cardId) ? prev : [...prev, cardId]);
247
+ }, [addSelectedCardId]);
248
+ const clearSelectedCardsSafe = useCallback(() => {
249
+ if (clearSelectedCards) {
250
+ clearSelectedCards();
251
+ return;
252
+ }
253
+ setInternalSelectedCardIds([]);
254
+ }, [clearSelectedCards]);
255
+ const setSelectedCardIdsSafe = useCallback((cardIds) => {
256
+ if (setSelectedCardIds) {
257
+ setSelectedCardIds(cardIds);
258
+ return;
259
+ }
260
+ if (getSelectedCardIds && clearSelectedCards && addSelectedCardId) {
261
+ clearSelectedCards();
262
+ cardIds.forEach((cardId) => addSelectedCardId(cardId));
263
+ return;
264
+ }
265
+ setInternalSelectedCardIds(cardIds);
266
+ }, [
267
+ addSelectedCardId,
268
+ clearSelectedCards,
269
+ getSelectedCardIds,
270
+ setSelectedCardIds
271
+ ]);
272
+ const toggleSelectedCardIdSafe = useCallback((cardId) => {
273
+ if (getSelectedCardIdsSafe().includes(cardId)) {
274
+ if (!getSelectedCardIds) setInternalSelectedCardIds((prev) => prev.filter((id) => id !== cardId));
275
+ return;
276
+ }
277
+ addSelectedCardIdSafe(cardId);
278
+ }, [
279
+ addSelectedCardIdSafe,
280
+ getSelectedCardIds,
281
+ getSelectedCardIdsSafe
282
+ ]);
283
+ const registerSelectableItem = useCallback((id, element) => {
284
+ if (!element) {
285
+ selectableItemMapRef.current.delete(id);
286
+ return;
287
+ }
288
+ selectableItemMapRef.current.set(id, element);
289
+ }, []);
290
+ const getSelectableItems = useCallback(() => Array.from(selectableItemMapRef.current.entries()).map(([id, element]) => ({
291
+ id,
292
+ element
293
+ })), []);
294
+ useEffect(() => {
295
+ onSelectionChange?.(getSelectedCardIdsSafe());
296
+ }, [
297
+ getSelectedCardIdsSafe,
298
+ internalSelectedCardIds,
299
+ onSelectionChange
300
+ ]);
301
+ const contextValue = useMemo(() => ({
302
+ isDragging,
303
+ getSelectedCardIds: getSelectedCardIdsSafe,
304
+ setSelectedCardIds: setSelectedCardIdsSafe,
305
+ addSelectedCardId: addSelectedCardIdSafe,
306
+ clearSelectedCards: clearSelectedCardsSafe,
307
+ toggleSelectedCardId: toggleSelectedCardIdSafe,
308
+ registerSelectableItem,
309
+ getSelectableItems
310
+ }), [
311
+ addSelectedCardIdSafe,
312
+ clearSelectedCardsSafe,
313
+ getSelectableItems,
314
+ getSelectedCardIdsSafe,
315
+ isDragging,
316
+ registerSelectableItem,
317
+ setSelectedCardIdsSafe,
318
+ toggleSelectedCardIdSafe
319
+ ]);
320
+ const finishDrag = () => {
321
+ setLocalIsDragging(false);
322
+ setTimeout(() => {
323
+ setIsDragging?.(false);
324
+ clearSelectedCardsSafe();
325
+ }, 100);
326
+ };
327
+ const startDrag = (source) => {
328
+ if (source.data.type !== "column" && source.data.type !== "card") return;
329
+ if (source.data.type === "card") {
330
+ const cardId = String(source.data.cardId ?? "");
331
+ if (!getSelectedCardIdsSafe().includes(cardId)) addSelectedCardIdSafe(cardId);
332
+ }
333
+ setIsDragging?.(true);
334
+ setLocalIsDragging(true);
335
+ };
336
+ const dropColumn = (sourceColumnId, targetColumnId) => {
337
+ if (!sourceColumnId || sourceColumnId === targetColumnId) return;
338
+ let nextOrder = null;
339
+ setColumns((prev) => {
340
+ const oldIndex = prev.findIndex((col) => getColumnIdSafe(col) === sourceColumnId);
341
+ const newIndex = prev.findIndex((col) => getColumnIdSafe(col) === targetColumnId);
342
+ if (oldIndex < 0 || newIndex < 0 || oldIndex === newIndex) return prev;
343
+ nextOrder = newIndex + 1;
344
+ return reorder({
345
+ list: prev,
346
+ startIndex: oldIndex,
347
+ finishIndex: newIndex
348
+ });
349
+ });
350
+ if (nextOrder !== null) onColumnReorder?.({
351
+ columnId: sourceColumnId,
352
+ order: nextOrder
353
+ });
354
+ };
355
+ const dropCard = (cardId, targetColumnId) => {
356
+ if (!cardId || !targetColumnId) return;
357
+ const selectedIds = getSelectedCardIdsSafe();
358
+ const idsToMove = selectedIds.length > 0 ? selectedIds : [cardId];
359
+ setColumns((prev) => {
360
+ if (moveCards) return moveCards(prev, idsToMove, targetColumnId);
361
+ return moveCardsInColumns(prev, idsToMove, targetColumnId, {
362
+ getColumnId: getColumnIdSafe,
363
+ getCards: getCardsFromColumn,
364
+ setCards: setCardsInColumn,
365
+ getCardId
366
+ });
367
+ });
368
+ onCardsMove?.({
369
+ cardIds: idsToMove,
370
+ targetColumnId
371
+ });
372
+ };
373
+ useEffect(() => {
374
+ const monitorCleanup = monitorForElements({
375
+ onDragStart: ({ source }) => startDrag(source),
376
+ onDrop: ({ source, location }) => {
377
+ const dropTargets = location.current.dropTargets;
378
+ if (source.data.type === "column") {
379
+ dropColumn(String(source.data.columnId ?? ""), getTargetColumnId(dropTargets, "column"));
380
+ finishDrag();
381
+ return;
382
+ }
383
+ if (source.data.type === "card") {
384
+ dropCard(String(source.data.cardId ?? ""), getTargetColumnId(dropTargets, "column-drop"));
385
+ finishDrag();
386
+ return;
387
+ }
388
+ finishDrag();
389
+ }
390
+ });
391
+ if (!isAutoScrollEnabled || !scrollContainerId) return monitorCleanup;
392
+ const scrollContainer = document.getElementById(scrollContainerId);
393
+ if (!scrollContainer) return monitorCleanup;
394
+ return combine(monitorCleanup, autoScrollForElements({
395
+ element: scrollContainer,
396
+ canScroll: ({ source }) => source.data.type === "card" || source.data.type === "column",
397
+ getAllowedAxis: () => "horizontal"
398
+ }), unsafeOverflowAutoScrollForElements({
399
+ element: scrollContainer,
400
+ canScroll: ({ source }) => source.data.type === "card" || source.data.type === "column",
401
+ getAllowedAxis: () => "horizontal",
402
+ getOverflow: () => autoScrollOverflow ?? DEFAULT_AUTO_SCROLL_OVERFLOW
403
+ }));
404
+ }, [
405
+ addSelectedCardIdSafe,
406
+ autoScrollOverflow,
407
+ clearSelectedCardsSafe,
408
+ getCardId,
409
+ getCardsFromColumn,
410
+ getColumnIdSafe,
411
+ getSelectedCardIdsSafe,
412
+ isAutoScrollEnabled,
413
+ moveCards,
414
+ onCardsMove,
415
+ onColumnReorder,
416
+ setCardsInColumn,
417
+ scrollContainerId,
418
+ setSelectedCardIds,
419
+ setColumns,
420
+ setIsDragging
421
+ ]);
422
+ return /* @__PURE__ */ jsx(KanbanDndProvider, {
423
+ value: contextValue,
424
+ children: /* @__PURE__ */ jsxs("div", {
425
+ className: "contain-layout h-full",
426
+ id: "draggable-area",
427
+ children: [!isDragging && renderIdleLayer, children]
428
+ })
429
+ });
430
+ }
431
+
432
+ //#endregion
433
+ //#region src/components/kanban-dnd/kanban-dropzone.tsx
434
+ function KanbanDropZone({ children, id, className, isOverClassName }) {
435
+ const [isOver, setIsOver] = useState(false);
436
+ const ref = useRef(null);
437
+ useEffect(() => {
438
+ const element = ref.current;
439
+ if (!element) return;
440
+ return dropTargetForElements({
441
+ element,
442
+ canDrop: ({ source }) => source.data.type === "card",
443
+ getData: () => ({
444
+ type: "column-drop",
445
+ columnId: String(id)
446
+ }),
447
+ onDragEnter: () => setIsOver(true),
448
+ onDragLeave: () => setIsOver(false),
449
+ onDrop: () => setIsOver(false)
450
+ });
451
+ }, [id]);
452
+ return /* @__PURE__ */ jsx("div", {
453
+ className: cn("border flex-1 border-transparent rounded-xl transition-colors", isOver && (isOverClassName ?? "border-border"), className),
454
+ id: `kanban-drop-zone-${id}`,
455
+ ref,
456
+ children
457
+ });
458
+ }
459
+
460
+ //#endregion
461
+ //#region src/components/kanban-dnd/kanban-selector.tsx
462
+ const DEFAULT_DRAG_AREA_ID = "draggable-area";
463
+ const DEFAULT_AUTO_SCROLL_MARGIN = 120;
464
+ const DEFAULT_IGNORED_SLOTS = [
465
+ "sheet-content",
466
+ "popover-content",
467
+ "select-content",
468
+ "dialog-content",
469
+ "dialog-overlay"
470
+ ];
471
+ const clampDelta = (delta, current, max) => delta > 0 ? Math.min(delta, max - current) : Math.max(delta, -current);
472
+ const edgeDelta = (pointer, start, end, margin, dt) => {
473
+ if (pointer < start + margin) return (pointer - (start + margin)) / margin * dt;
474
+ if (pointer > end - margin) return (pointer - (end - margin)) / margin * dt;
475
+ return 0;
476
+ };
477
+ function findScrollable(node, axis) {
478
+ if (!node) return null;
479
+ const style = window.getComputedStyle(node);
480
+ const canScrollX = /(auto|scroll)/.test(style.overflowX) && node.scrollWidth > node.clientWidth;
481
+ const canScrollY = /(auto|scroll)/.test(style.overflowY) && node.scrollHeight > node.clientHeight;
482
+ if (axis === "x" && canScrollX || axis === "y" && canScrollY) return node;
483
+ return findScrollable(node.parentElement, axis);
484
+ }
485
+ function getContainerBounds(container) {
486
+ if (!container || container === document.documentElement || container === document.body) return {
487
+ left: 0,
488
+ right: window.innerWidth,
489
+ top: 0,
490
+ bottom: window.innerHeight
491
+ };
492
+ const rect = container.getBoundingClientRect();
493
+ return {
494
+ left: Math.max(0, rect.left),
495
+ right: Math.min(window.innerWidth, rect.right),
496
+ top: Math.max(0, rect.top),
497
+ bottom: Math.min(window.innerHeight, rect.bottom)
498
+ };
499
+ }
500
+ function shouldStartSelecting(target, ignoredSlots) {
501
+ if (!(target instanceof Element)) return false;
502
+ return !(target.closest("[data-draggable=\"true\"]") || ignoredSlots.some((slot) => target.closest(`[data-slot="${slot}"]`)));
503
+ }
504
+ function useAutoScroll({ isSelectingRef, dragAreaId, autoScrollMargin }) {
505
+ useEffect(() => {
506
+ let raf = 0;
507
+ let lastTime = performance.now();
508
+ const pos = {
509
+ x: 0,
510
+ y: 0
511
+ };
512
+ let xContainer = null;
513
+ let yContainer = null;
514
+ let xMax = 0;
515
+ let yMax = 0;
516
+ let useWindowY = false;
517
+ const onMove = (e) => (pos.x = e.clientX, pos.y = e.clientY);
518
+ window.addEventListener("pointermove", onMove, { passive: true });
519
+ const reset = () => {
520
+ xContainer = null;
521
+ yContainer = null;
522
+ xMax = 0;
523
+ yMax = 0;
524
+ useWindowY = false;
525
+ };
526
+ const step = (time) => {
527
+ const dt = time - lastTime;
528
+ lastTime = time;
529
+ if (!isSelectingRef.current) {
530
+ reset();
531
+ raf = requestAnimationFrame(step);
532
+ return;
533
+ }
534
+ if (!xContainer && !yContainer && xMax === 0 && yMax === 0) {
535
+ const startNode = document.getElementById(dragAreaId)?.parentElement ?? null;
536
+ xContainer = findScrollable(startNode, "x");
537
+ yContainer = findScrollable(startNode, "y");
538
+ useWindowY = !yContainer;
539
+ xMax = xContainer ? xContainer.scrollWidth - xContainer.clientWidth : 0;
540
+ yMax = useWindowY ? document.documentElement.scrollHeight - window.innerHeight : yContainer ? yContainer.scrollHeight - yContainer.clientHeight : 0;
541
+ }
542
+ const xBounds = getContainerBounds(xContainer);
543
+ const yBounds = useWindowY ? {
544
+ top: 0,
545
+ bottom: window.innerHeight
546
+ } : getContainerBounds(yContainer);
547
+ const dx = edgeDelta(pos.x, xBounds.left, xBounds.right, autoScrollMargin, dt);
548
+ const dy = edgeDelta(pos.y, yBounds.top, yBounds.bottom, autoScrollMargin, dt);
549
+ let didScroll = false;
550
+ if (dx && xContainer && xMax > 0) {
551
+ const clampedDx = clampDelta(dx, xContainer.scrollLeft, xMax);
552
+ if (clampedDx) {
553
+ xContainer.scrollBy(clampedDx, 0);
554
+ didScroll = true;
555
+ }
556
+ }
557
+ if (dy && yMax > 0) {
558
+ if (useWindowY) {
559
+ const clampedDy = clampDelta(dy, window.scrollY || document.documentElement.scrollTop, yMax);
560
+ if (clampedDy) {
561
+ window.scrollBy(0, clampedDy);
562
+ didScroll = true;
563
+ }
564
+ } else if (yContainer) {
565
+ const clampedDy = clampDelta(dy, yContainer.scrollTop, yMax);
566
+ if (clampedDy) {
567
+ yContainer.scrollBy(0, clampedDy);
568
+ didScroll = true;
569
+ }
570
+ }
571
+ }
572
+ if (didScroll) document.body.dispatchEvent(new MouseEvent("mousemove", {
573
+ clientX: pos.x,
574
+ clientY: pos.y,
575
+ bubbles: true,
576
+ cancelable: true
577
+ }));
578
+ raf = requestAnimationFrame(step);
579
+ };
580
+ raf = requestAnimationFrame(step);
581
+ return () => {
582
+ window.removeEventListener("pointermove", onMove);
583
+ cancelAnimationFrame(raf);
584
+ };
585
+ }, [
586
+ autoScrollMargin,
587
+ dragAreaId,
588
+ isSelectingRef
589
+ ]);
590
+ }
591
+ function KanbanSelector({ dragAreaId = DEFAULT_DRAG_AREA_ID, autoScrollMargin = DEFAULT_AUTO_SCROLL_MARGIN, ignoredSlots = DEFAULT_IGNORED_SLOTS }) {
592
+ const context = useKanbanDndContext();
593
+ const isSelectingRef = useRef(false);
594
+ useAutoScroll({
595
+ isSelectingRef,
596
+ dragAreaId,
597
+ autoScrollMargin
598
+ });
599
+ const { DragSelection } = useSelectionContainer({
600
+ shouldStartSelecting: useMemo(() => (target) => shouldStartSelecting(target, ignoredSlots), [ignoredSlots]),
601
+ onSelectionChange: (selection) => {
602
+ if (!context) return;
603
+ const selectedIds = [];
604
+ context.getSelectableItems().forEach((item) => {
605
+ if (!item.element) return;
606
+ const rect = item.element.getBoundingClientRect();
607
+ if (boxesIntersect(selection, {
608
+ ...rect,
609
+ left: rect.left + window.scrollX,
610
+ top: rect.top,
611
+ width: rect.width,
612
+ height: rect.height
613
+ })) selectedIds.push(String(item.id));
614
+ });
615
+ context.setSelectedCardIds(selectedIds);
616
+ },
617
+ onSelectionEnd: () => {
618
+ isSelectingRef.current = false;
619
+ },
620
+ onSelectionStart: () => {
621
+ isSelectingRef.current = true;
622
+ },
623
+ selectionProps: { style: {
624
+ pointerEvents: "none",
625
+ position: "fixed",
626
+ inset: 0,
627
+ zIndex: 50
628
+ } }
629
+ });
630
+ useEffect(() => {
631
+ if (!context) return;
632
+ const handlePointerUp = (e) => {
633
+ const target = e.target;
634
+ if (!isSelectingRef.current && !context.isDragging && !target?.closest("[data-draggable=\"true\"]")) context.clearSelectedCards();
635
+ };
636
+ document.addEventListener("pointerup", handlePointerUp);
637
+ return () => document.removeEventListener("pointerup", handlePointerUp);
638
+ }, [context]);
639
+ if (!context) return null;
640
+ return /* @__PURE__ */ jsx(DragSelection, {});
641
+ }
642
+
643
+ //#endregion
644
+ //#region src/components/kanban-dnd/use-kanban-column-dnd.ts
645
+ function useKanbanColumnDnD({ columnId, elementRef, dragHandleRef }) {
646
+ useEffect(() => {
647
+ const element = elementRef.current;
648
+ if (!element) return;
649
+ return combine(draggable({
650
+ element,
651
+ dragHandle: dragHandleRef?.current ?? void 0,
652
+ getInitialData: () => ({
653
+ type: "column",
654
+ columnId: String(columnId)
655
+ })
656
+ }), dropTargetForElements({
657
+ element,
658
+ canDrop: ({ source }) => source.data.type === "column" && String(source.data.columnId) !== String(columnId),
659
+ getData: () => ({
660
+ type: "column",
661
+ columnId: String(columnId)
662
+ })
663
+ }));
664
+ }, [
665
+ columnId,
666
+ dragHandleRef,
667
+ elementRef
668
+ ]);
669
+ }
670
+
671
+ //#endregion
672
+ export { KanbanCardItem, KanbanDndMonitor, KanbanDropZone, KanbanSelector, moveCardsInColumns, useKanbanColumnDnD, useKanbanSelection };
673
+ //# sourceMappingURL=kanban-dnd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kanban-dnd.js","names":["STACKED_CLONE_BASE_STYLE: Partial<CSSStyleDeclaration>","defaultGetColumnId","nextOrder: number | null","xContainer: HTMLElement | null","yContainer: HTMLElement | null","selectedIds: string[]"],"sources":["../src/components/kanban-dnd/context.tsx","../src/components/kanban-dnd/constants.ts","../src/components/kanban-dnd/utils.ts","../src/components/kanban-dnd/drag-preview.ts","../src/components/kanban-dnd/kanban-card-item.tsx","../src/components/kanban-dnd/move-cards.ts","../src/components/kanban-dnd/kanban-dnd-monitor.tsx","../src/components/kanban-dnd/kanban-dropzone.tsx","../src/components/kanban-dnd/kanban-selector.tsx","../src/components/kanban-dnd/use-kanban-column-dnd.ts"],"sourcesContent":["'use client';\n\nimport { createContext, useContext } from 'react';\n\nimport type { KanbanSelectableItem } from './types';\n\ntype KanbanDndContextValue = {\n isDragging: boolean;\n getSelectedCardIds: () => string[];\n setSelectedCardIds: (cardIds: string[]) => void;\n addSelectedCardId: (cardId: string) => void;\n clearSelectedCards: () => void;\n toggleSelectedCardId: (cardId: string) => void;\n registerSelectableItem: (id: string, element: HTMLElement | null) => void;\n getSelectableItems: () => KanbanSelectableItem[];\n};\n\nconst KanbanDndContext = createContext<KanbanDndContextValue | null>(null);\n\nexport function KanbanDndProvider({\n children,\n value,\n}: {\n children: React.ReactNode;\n value: KanbanDndContextValue;\n}) {\n return (\n <KanbanDndContext.Provider value={value}>\n {children}\n </KanbanDndContext.Provider>\n );\n}\n\nexport function useKanbanDndContext() {\n return useContext(KanbanDndContext);\n}\n\nexport function useKanbanSelection() {\n const context = useKanbanDndContext();\n\n if (!context) {\n return {\n selectedCardIds: [] as string[],\n isSelected: () => false,\n setSelectedCardIds: () => {},\n addSelectedCardId: () => {},\n clearSelectedCards: () => {},\n toggleSelectedCardId: () => {},\n };\n }\n\n const selectedCardIds = context.getSelectedCardIds();\n\n return {\n selectedCardIds,\n isSelected: (cardId: string) => selectedCardIds.includes(cardId),\n setSelectedCardIds: context.setSelectedCardIds,\n addSelectedCardId: context.addSelectedCardId,\n clearSelectedCards: context.clearSelectedCards,\n toggleSelectedCardId: context.toggleSelectedCardId,\n };\n}\n","export const PREVIEW_STACK_LIMIT = 10;\nexport const PREVIEW_STACK_X_OFFSET = 10;\nexport const PREVIEW_STACK_Y_OFFSET = 8;\nexport const PREVIEW_STACK_MIN_OPACITY = 0.75;\n\nexport const STACKED_CLONE_BASE_STYLE: Partial<CSSStyleDeclaration> = {\n pointerEvents: 'none',\n margin: '0',\n width: '100%',\n top: '0',\n left: '0',\n};\n\nexport const DEFAULT_AUTO_SCROLL_OVERFLOW = {\n forLeftEdge: {\n left: 320,\n top: 160,\n bottom: 160,\n },\n forRightEdge: {\n right: 160,\n top: 120,\n bottom: 120,\n },\n};\n","import type { DropTarget } from './types';\n\nexport function applyStyles(\n element: HTMLElement,\n styles: Partial<CSSStyleDeclaration>\n) {\n Object.assign(element.style, styles);\n}\n\nexport function getTargetColumnId(\n dropTargets: DropTarget[],\n targetType: string\n) {\n const target = dropTargets.find((item) => item.data.type === targetType);\n return target ? String(target.data.columnId ?? '') : '';\n}\n","import {\n PREVIEW_STACK_LIMIT,\n PREVIEW_STACK_MIN_OPACITY,\n PREVIEW_STACK_X_OFFSET,\n PREVIEW_STACK_Y_OFFSET,\n STACKED_CLONE_BASE_STYLE,\n} from './constants';\nimport type { KanbanSelectableItem } from './types';\nimport { applyStyles } from './utils';\n\nfunction createStackedClone(original: HTMLElement, index: number) {\n const clone = original.cloneNode(true) as HTMLElement;\n const xOffset = index * PREVIEW_STACK_X_OFFSET;\n const yOffset = index * PREVIEW_STACK_Y_OFFSET;\n const opacity = Math.max(1 - index * 0.1, PREVIEW_STACK_MIN_OPACITY);\n\n applyStyles(clone, {\n ...STACKED_CLONE_BASE_STYLE,\n position: index === 0 ? 'relative' : 'absolute',\n transform: `translate(${xOffset}px, ${yOffset}px)`,\n opacity: String(opacity),\n });\n\n return clone;\n}\n\nfunction createFallbackClone(sourceElement: HTMLElement) {\n const fallback = sourceElement.cloneNode(true) as HTMLElement;\n\n applyStyles(fallback, {\n pointerEvents: 'none',\n margin: '0',\n });\n\n return fallback;\n}\n\nexport function buildDragPreview({\n cardId,\n sourceElement,\n getSelectableItems,\n getSelectedCardIds,\n}: {\n cardId: string;\n sourceElement: HTMLElement;\n getSelectableItems?: () => KanbanSelectableItem[];\n getSelectedCardIds?: () => string[];\n}) {\n const selectedIds = getSelectedCardIds?.() ?? [];\n const idsToPreview = Array.from(new Set([...selectedIds, String(cardId)]));\n const root = document.createElement('div');\n\n applyStyles(root, {\n position: 'relative',\n });\n\n const selectableItems = getSelectableItems?.() ?? [];\n const itemElementById = new Map(\n selectableItems\n .filter((item) => item.element)\n .map((item) => [String(item.id), item.element as HTMLElement])\n );\n\n idsToPreview.slice(0, PREVIEW_STACK_LIMIT).forEach((previewId, index) => {\n const original = itemElementById.get(String(previewId));\n if (!original) return;\n\n root.appendChild(createStackedClone(original, index));\n });\n\n if (!root.childElementCount) {\n root.appendChild(createFallbackClone(sourceElement));\n }\n\n return root;\n}\n","'use client';\n\nimport { useEffect, useRef } from 'react';\n\nimport { draggable } from '@atlaskit/pragmatic-drag-and-drop/element/adapter';\nimport { preserveOffsetOnSource } from '@atlaskit/pragmatic-drag-and-drop/element/preserve-offset-on-source';\nimport { setCustomNativeDragPreview } from '@atlaskit/pragmatic-drag-and-drop/element/set-custom-native-drag-preview';\nimport { useKanbanDndContext } from './context';\nimport { buildDragPreview } from './drag-preview';\nimport type { KanbanCardItemProps } from './types';\n\nexport function KanbanCardItem({\n id,\n children,\n className,\n getSelectedCardIds,\n getSelectableItems,\n}: KanbanCardItemProps) {\n const ref = useRef<HTMLDivElement>(null);\n const context = useKanbanDndContext();\n\n const getSelectedCardIdsSafe =\n getSelectedCardIds ?? context?.getSelectedCardIds;\n const getSelectableItemsSafe =\n getSelectableItems ?? context?.getSelectableItems;\n\n useEffect(() => {\n context?.registerSelectableItem(String(id), ref.current);\n\n return () => {\n context?.registerSelectableItem(String(id), null);\n };\n }, [context, id]);\n\n useEffect(() => {\n const element = ref.current;\n if (!element) return;\n\n return draggable({\n element,\n getInitialData: () => ({\n type: 'card',\n cardId: String(id),\n }),\n onGenerateDragPreview: ({ nativeSetDragImage, source, location }) => {\n setCustomNativeDragPreview({\n getOffset: preserveOffsetOnSource({\n element: source.element,\n input: location.current.input,\n }),\n render({ container }) {\n const root = buildDragPreview({\n cardId: String(id),\n sourceElement: source.element,\n getSelectableItems: getSelectableItemsSafe,\n getSelectedCardIds: getSelectedCardIdsSafe,\n });\n\n container.appendChild(root);\n\n return () => {\n if (root.parentElement === container) {\n container.removeChild(root);\n }\n };\n },\n nativeSetDragImage,\n });\n },\n });\n }, [getSelectableItemsSafe, getSelectedCardIdsSafe, id]);\n\n return (\n <div\n className={className}\n data-draggable=\"true\"\n id={`kanban-card-item-${id}`}\n ref={ref}\n suppressHydrationWarning\n >\n {children}\n </div>\n );\n}\n","type AnyObject = Record<string, unknown>;\n\ntype MoveCardsResolvers<TColumn, TCard> = {\n getColumnId: (column: TColumn) => string;\n getCards: (column: TColumn) => TCard[];\n setCards: (column: TColumn, cards: TCard[]) => TColumn;\n getCardId: (card: TCard) => string;\n};\n\nfunction hasObjectValue(value: unknown): value is AnyObject {\n return typeof value === 'object' && value !== null;\n}\n\nfunction defaultGetColumnId<TColumn>(column: TColumn): string {\n if (!hasObjectValue(column)) return '';\n const id = column.id;\n return id === undefined || id === null ? '' : String(id);\n}\n\nfunction defaultGetCards<TColumn, TCard>(column: TColumn): TCard[] {\n if (!hasObjectValue(column)) return [];\n const cards = column.cards;\n return Array.isArray(cards) ? (cards as TCard[]) : [];\n}\n\nfunction defaultSetCards<TColumn, TCard>(\n column: TColumn,\n cards: TCard[]\n): TColumn {\n if (!hasObjectValue(column)) return column;\n return { ...column, cards } as TColumn;\n}\n\nfunction defaultGetCardId<TCard>(card: TCard): string {\n if (!hasObjectValue(card)) return '';\n const id = card.id;\n return id === undefined || id === null ? '' : String(id);\n}\n\nexport function moveCardsInColumns<TColumn, TCard>(\n columns: TColumn[],\n cardIds: string[],\n targetColumnId: string,\n resolvers: Partial<MoveCardsResolvers<TColumn, TCard>> = {}\n): TColumn[] {\n const getColumnId = resolvers.getColumnId ?? defaultGetColumnId<TColumn>;\n const getCards = resolvers.getCards ?? defaultGetCards<TColumn, TCard>;\n const setCards = resolvers.setCards ?? defaultSetCards<TColumn, TCard>;\n const getCardId = resolvers.getCardId ?? defaultGetCardId<TCard>;\n\n const selectedIds = new Set(cardIds);\n if (selectedIds.size === 0) return columns;\n\n const cardsToMove = columns.flatMap((column) =>\n getCards(column).filter((card) => selectedIds.has(getCardId(card)))\n );\n\n if (cardsToMove.length === 0) return columns;\n\n return columns.map((column) => {\n const currentCards = getCards(column);\n\n if (getColumnId(column) === targetColumnId) {\n const existingIds = new Set(currentCards.map((card) => getCardId(card)));\n const incomingCards = cardsToMove.filter(\n (card) => !existingIds.has(getCardId(card))\n );\n return setCards(column, [...currentCards, ...incomingCards]);\n }\n\n return setCards(\n column,\n currentCards.filter((card) => !selectedIds.has(getCardId(card)))\n );\n });\n}\n","'use client';\n\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { combine } from '@atlaskit/pragmatic-drag-and-drop/combine';\nimport { monitorForElements } from '@atlaskit/pragmatic-drag-and-drop/element/adapter';\nimport { reorder } from '@atlaskit/pragmatic-drag-and-drop/reorder';\nimport { autoScrollForElements } from '@atlaskit/pragmatic-drag-and-drop-auto-scroll/element';\nimport { unsafeOverflowAutoScrollForElements } from '@atlaskit/pragmatic-drag-and-drop-auto-scroll/unsafe-overflow/element';\nimport { DEFAULT_AUTO_SCROLL_OVERFLOW } from './constants';\nimport { KanbanDndProvider } from './context';\nimport { moveCardsInColumns } from './move-cards';\nimport type { DropTarget, KanbanDndMonitorProps } from './types';\nimport { getTargetColumnId } from './utils';\n\nfunction defaultGetColumnId<TColumn>(column: TColumn): string {\n const maybeColumn = column as Record<string, unknown>;\n const id = maybeColumn?.id;\n return id === undefined || id === null ? '' : String(id);\n}\n\nexport function KanbanDndMonitor<TColumn>({\n onCardsMove,\n onColumnReorder,\n scrollContainerId,\n setColumns,\n children,\n getColumnId,\n moveCards,\n getCardsFromColumn,\n setCardsInColumn,\n getCardId,\n getSelectedCardIds,\n setSelectedCardIds,\n addSelectedCardId,\n clearSelectedCards,\n onSelectionChange,\n setIsDragging,\n autoScrollOverflow,\n isAutoScrollEnabled = true,\n renderIdleLayer,\n}: KanbanDndMonitorProps<TColumn>) {\n const [isDragging, setLocalIsDragging] = useState(false);\n const [internalSelectedCardIds, setInternalSelectedCardIds] = useState<\n string[]\n >([]);\n const selectableItemMapRef = useRef(new Map<string, HTMLElement>());\n const getColumnIdSafe = useCallback(\n (column: TColumn) =>\n getColumnId ? getColumnId(column) : defaultGetColumnId(column),\n [getColumnId]\n );\n\n const getSelectedCardIdsSafe = useCallback(\n () => getSelectedCardIds?.() ?? internalSelectedCardIds,\n [getSelectedCardIds, internalSelectedCardIds]\n );\n\n const addSelectedCardIdSafe = useCallback(\n (cardId: string) => {\n if (addSelectedCardId) {\n addSelectedCardId(cardId);\n return;\n }\n\n setInternalSelectedCardIds((prev) =>\n prev.includes(cardId) ? prev : [...prev, cardId]\n );\n },\n [addSelectedCardId]\n );\n\n const clearSelectedCardsSafe = useCallback(() => {\n if (clearSelectedCards) {\n clearSelectedCards();\n return;\n }\n\n setInternalSelectedCardIds([]);\n }, [clearSelectedCards]);\n\n const setSelectedCardIdsSafe = useCallback(\n (cardIds: string[]) => {\n if (setSelectedCardIds) {\n setSelectedCardIds(cardIds);\n return;\n }\n\n if (getSelectedCardIds && clearSelectedCards && addSelectedCardId) {\n clearSelectedCards();\n cardIds.forEach((cardId) => addSelectedCardId(cardId));\n return;\n }\n\n setInternalSelectedCardIds(cardIds);\n },\n [\n addSelectedCardId,\n clearSelectedCards,\n getSelectedCardIds,\n setSelectedCardIds,\n ]\n );\n\n const toggleSelectedCardIdSafe = useCallback(\n (cardId: string) => {\n const selectedIds = getSelectedCardIdsSafe();\n if (selectedIds.includes(cardId)) {\n if (!getSelectedCardIds) {\n setInternalSelectedCardIds((prev) =>\n prev.filter((id) => id !== cardId)\n );\n }\n return;\n }\n\n addSelectedCardIdSafe(cardId);\n },\n [addSelectedCardIdSafe, getSelectedCardIds, getSelectedCardIdsSafe]\n );\n\n const registerSelectableItem = useCallback(\n (id: string, element: HTMLElement | null) => {\n if (!element) {\n selectableItemMapRef.current.delete(id);\n return;\n }\n\n selectableItemMapRef.current.set(id, element);\n },\n []\n );\n\n const getSelectableItems = useCallback(\n () =>\n Array.from(selectableItemMapRef.current.entries()).map(\n ([id, element]) => ({\n id,\n element,\n })\n ),\n []\n );\n\n useEffect(() => {\n onSelectionChange?.(getSelectedCardIdsSafe());\n }, [getSelectedCardIdsSafe, internalSelectedCardIds, onSelectionChange]);\n\n const contextValue = useMemo(\n () => ({\n isDragging,\n getSelectedCardIds: getSelectedCardIdsSafe,\n setSelectedCardIds: setSelectedCardIdsSafe,\n addSelectedCardId: addSelectedCardIdSafe,\n clearSelectedCards: clearSelectedCardsSafe,\n toggleSelectedCardId: toggleSelectedCardIdSafe,\n registerSelectableItem,\n getSelectableItems,\n }),\n [\n addSelectedCardIdSafe,\n clearSelectedCardsSafe,\n getSelectableItems,\n getSelectedCardIdsSafe,\n isDragging,\n registerSelectableItem,\n setSelectedCardIdsSafe,\n toggleSelectedCardIdSafe,\n ]\n );\n\n const finishDrag = () => {\n setLocalIsDragging(false);\n setTimeout(() => {\n setIsDragging?.(false);\n clearSelectedCardsSafe();\n }, 100);\n };\n\n const startDrag = (source: { data: Record<string, unknown> }) => {\n if (source.data.type !== 'column' && source.data.type !== 'card') return;\n\n if (source.data.type === 'card') {\n const cardId = String(source.data.cardId ?? '');\n const selectedIds = getSelectedCardIdsSafe();\n if (!selectedIds.includes(cardId)) {\n addSelectedCardIdSafe(cardId);\n }\n }\n\n setIsDragging?.(true);\n setLocalIsDragging(true);\n };\n\n const dropColumn = (sourceColumnId: string, targetColumnId: string) => {\n if (!sourceColumnId || sourceColumnId === targetColumnId) return;\n\n let nextOrder: number | null = null;\n\n setColumns((prev) => {\n const oldIndex = prev.findIndex(\n (col) => getColumnIdSafe(col) === sourceColumnId\n );\n const newIndex = prev.findIndex(\n (col) => getColumnIdSafe(col) === targetColumnId\n );\n\n if (oldIndex < 0 || newIndex < 0 || oldIndex === newIndex) {\n return prev;\n }\n\n nextOrder = newIndex + 1;\n return reorder({\n list: prev,\n startIndex: oldIndex,\n finishIndex: newIndex,\n });\n });\n\n if (nextOrder !== null) {\n onColumnReorder?.({ columnId: sourceColumnId, order: nextOrder });\n }\n };\n\n const dropCard = (cardId: string, targetColumnId: string) => {\n if (!cardId || !targetColumnId) return;\n\n const selectedIds = getSelectedCardIdsSafe();\n const idsToMove = selectedIds.length > 0 ? selectedIds : [cardId];\n\n setColumns((prev) => {\n if (moveCards) {\n return moveCards(prev, idsToMove, targetColumnId);\n }\n\n return moveCardsInColumns(prev, idsToMove, targetColumnId, {\n getColumnId: getColumnIdSafe,\n getCards: getCardsFromColumn as\n | ((column: TColumn) => unknown[])\n | undefined,\n setCards: setCardsInColumn as\n | ((column: TColumn, cards: unknown[]) => TColumn)\n | undefined,\n getCardId,\n });\n });\n onCardsMove?.({ cardIds: idsToMove, targetColumnId });\n };\n\n useEffect(() => {\n const monitorCleanup = monitorForElements({\n onDragStart: ({ source }) => startDrag(source),\n onDrop: ({ source, location }) => {\n const dropTargets = location.current.dropTargets as DropTarget[];\n\n if (source.data.type === 'column') {\n dropColumn(\n String(source.data.columnId ?? ''),\n getTargetColumnId(dropTargets, 'column')\n );\n finishDrag();\n return;\n }\n\n if (source.data.type === 'card') {\n dropCard(\n String(source.data.cardId ?? ''),\n getTargetColumnId(dropTargets, 'column-drop')\n );\n finishDrag();\n return;\n }\n\n finishDrag();\n },\n });\n\n if (!isAutoScrollEnabled || !scrollContainerId) {\n return monitorCleanup;\n }\n\n const scrollContainer = document.getElementById(scrollContainerId);\n if (!scrollContainer) {\n return monitorCleanup;\n }\n\n return combine(\n monitorCleanup,\n autoScrollForElements({\n element: scrollContainer,\n canScroll: ({ source }) =>\n source.data.type === 'card' || source.data.type === 'column',\n getAllowedAxis: () => 'horizontal',\n }),\n unsafeOverflowAutoScrollForElements({\n element: scrollContainer,\n canScroll: ({ source }) =>\n source.data.type === 'card' || source.data.type === 'column',\n getAllowedAxis: () => 'horizontal',\n getOverflow: () => autoScrollOverflow ?? DEFAULT_AUTO_SCROLL_OVERFLOW,\n })\n );\n }, [\n addSelectedCardIdSafe,\n autoScrollOverflow,\n clearSelectedCardsSafe,\n getCardId,\n getCardsFromColumn,\n getColumnIdSafe,\n getSelectedCardIdsSafe,\n isAutoScrollEnabled,\n moveCards,\n onCardsMove,\n onColumnReorder,\n setCardsInColumn,\n scrollContainerId,\n setSelectedCardIds,\n setColumns,\n setIsDragging,\n ]);\n\n return (\n <KanbanDndProvider value={contextValue}>\n <div className=\"contain-layout h-full\" id=\"draggable-area\">\n {!isDragging && renderIdleLayer}\n {children}\n </div>\n </KanbanDndProvider>\n );\n}\n","'use client';\n\nimport { useEffect, useRef, useState } from 'react';\n\nimport { cn } from '@/lib/utils';\nimport { dropTargetForElements } from '@atlaskit/pragmatic-drag-and-drop/element/adapter';\nimport type { KanbanDropZoneProps } from './types';\n\nexport function KanbanDropZone({\n children,\n id,\n className,\n isOverClassName,\n}: KanbanDropZoneProps) {\n const [isOver, setIsOver] = useState(false);\n const ref = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const element = ref.current;\n if (!element) return;\n\n return dropTargetForElements({\n element,\n canDrop: ({ source }) => source.data.type === 'card',\n getData: () => ({\n type: 'column-drop',\n columnId: String(id),\n }),\n onDragEnter: () => setIsOver(true),\n onDragLeave: () => setIsOver(false),\n onDrop: () => setIsOver(false),\n });\n }, [id]);\n\n return (\n <div\n className={cn(\n 'border flex-1 border-transparent rounded-xl transition-colors',\n isOver && (isOverClassName ?? 'border-border'),\n className\n )}\n id={`kanban-drop-zone-${id}`}\n ref={ref}\n >\n {children}\n </div>\n );\n}\n","'use client';\n\nimport type { MutableRefObject } from 'react';\nimport { useEffect, useMemo, useRef } from 'react';\n\nimport {\n boxesIntersect,\n useSelectionContainer,\n} from '@air/react-drag-to-select';\nimport { useKanbanDndContext } from './context';\nimport type { KanbanSelectorProps } from './types';\n\nconst DEFAULT_DRAG_AREA_ID = 'draggable-area';\nconst DEFAULT_AUTO_SCROLL_MARGIN = 120;\nconst DEFAULT_IGNORED_SLOTS = [\n 'sheet-content',\n 'popover-content',\n 'select-content',\n 'dialog-content',\n 'dialog-overlay',\n];\n\nconst clampDelta = (delta: number, current: number, max: number) =>\n delta > 0 ? Math.min(delta, max - current) : Math.max(delta, -current);\n\nconst edgeDelta = (\n pointer: number,\n start: number,\n end: number,\n margin: number,\n dt: number\n) => {\n if (pointer < start + margin)\n return ((pointer - (start + margin)) / margin) * dt;\n if (pointer > end - margin) return ((pointer - (end - margin)) / margin) * dt;\n return 0;\n};\n\nfunction findScrollable(\n node: HTMLElement | null,\n axis: 'x' | 'y'\n): HTMLElement | null {\n if (!node) return null;\n\n const style = window.getComputedStyle(node);\n const canScrollX =\n /(auto|scroll)/.test(style.overflowX) &&\n node.scrollWidth > node.clientWidth;\n const canScrollY =\n /(auto|scroll)/.test(style.overflowY) &&\n node.scrollHeight > node.clientHeight;\n\n if ((axis === 'x' && canScrollX) || (axis === 'y' && canScrollY)) return node;\n return findScrollable(node.parentElement, axis);\n}\n\nfunction getContainerBounds(container: HTMLElement | null) {\n if (\n !container ||\n container === document.documentElement ||\n container === document.body\n ) {\n return {\n left: 0,\n right: window.innerWidth,\n top: 0,\n bottom: window.innerHeight,\n };\n }\n\n const rect = container.getBoundingClientRect();\n return {\n left: Math.max(0, rect.left),\n right: Math.min(window.innerWidth, rect.right),\n top: Math.max(0, rect.top),\n bottom: Math.min(window.innerHeight, rect.bottom),\n };\n}\n\nfunction shouldStartSelecting(\n target: EventTarget | null,\n ignoredSlots: string[]\n): boolean {\n if (!(target instanceof Element)) return false;\n\n return !(\n target.closest('[data-draggable=\"true\"]') ||\n ignoredSlots.some((slot) => target.closest(`[data-slot=\"${slot}\"]`))\n );\n}\n\nfunction useAutoScroll({\n isSelectingRef,\n dragAreaId,\n autoScrollMargin,\n}: {\n isSelectingRef: MutableRefObject<boolean>;\n dragAreaId: string;\n autoScrollMargin: number;\n}) {\n useEffect(() => {\n let raf = 0;\n let lastTime = performance.now();\n const pos = { x: 0, y: 0 };\n let xContainer: HTMLElement | null = null;\n let yContainer: HTMLElement | null = null;\n let xMax = 0;\n let yMax = 0;\n let useWindowY = false;\n\n const onMove = (e: PointerEvent) => (\n (pos.x = e.clientX), (pos.y = e.clientY)\n );\n\n window.addEventListener('pointermove', onMove, { passive: true });\n\n const reset = () => {\n xContainer = null;\n yContainer = null;\n xMax = 0;\n yMax = 0;\n useWindowY = false;\n };\n\n const step = (time: number) => {\n const dt = time - lastTime;\n lastTime = time;\n\n if (!isSelectingRef.current) {\n reset();\n raf = requestAnimationFrame(step);\n return;\n }\n\n if (!xContainer && !yContainer && xMax === 0 && yMax === 0) {\n const startNode =\n document.getElementById(dragAreaId)?.parentElement ?? null;\n xContainer = findScrollable(startNode, 'x');\n yContainer = findScrollable(startNode, 'y');\n useWindowY = !yContainer;\n xMax = xContainer ? xContainer.scrollWidth - xContainer.clientWidth : 0;\n yMax = useWindowY\n ? document.documentElement.scrollHeight - window.innerHeight\n : yContainer\n ? yContainer.scrollHeight - yContainer.clientHeight\n : 0;\n }\n\n const xBounds = getContainerBounds(xContainer);\n const yBounds = useWindowY\n ? { top: 0, bottom: window.innerHeight }\n : getContainerBounds(yContainer);\n\n const dx = edgeDelta(\n pos.x,\n xBounds.left,\n xBounds.right,\n autoScrollMargin,\n dt\n );\n const dy = edgeDelta(\n pos.y,\n yBounds.top,\n yBounds.bottom,\n autoScrollMargin,\n dt\n );\n\n let didScroll = false;\n\n if (dx && xContainer && xMax > 0) {\n const clampedDx = clampDelta(dx, xContainer.scrollLeft, xMax);\n if (clampedDx) {\n xContainer.scrollBy(clampedDx, 0);\n didScroll = true;\n }\n }\n\n if (dy && yMax > 0) {\n if (useWindowY) {\n const clampedDy = clampDelta(\n dy,\n window.scrollY || document.documentElement.scrollTop,\n yMax\n );\n if (clampedDy) {\n window.scrollBy(0, clampedDy);\n didScroll = true;\n }\n } else if (yContainer) {\n const clampedDy = clampDelta(dy, yContainer.scrollTop, yMax);\n if (clampedDy) {\n yContainer.scrollBy(0, clampedDy);\n didScroll = true;\n }\n }\n }\n\n if (didScroll) {\n document.body.dispatchEvent(\n new MouseEvent('mousemove', {\n clientX: pos.x,\n clientY: pos.y,\n bubbles: true,\n cancelable: true,\n })\n );\n }\n\n raf = requestAnimationFrame(step);\n };\n\n raf = requestAnimationFrame(step);\n\n return () => {\n window.removeEventListener('pointermove', onMove);\n cancelAnimationFrame(raf);\n };\n }, [autoScrollMargin, dragAreaId, isSelectingRef]);\n}\n\nexport function KanbanSelector({\n dragAreaId = DEFAULT_DRAG_AREA_ID,\n autoScrollMargin = DEFAULT_AUTO_SCROLL_MARGIN,\n ignoredSlots = DEFAULT_IGNORED_SLOTS,\n}: KanbanSelectorProps) {\n const context = useKanbanDndContext();\n const isSelectingRef = useRef(false);\n\n useAutoScroll({ isSelectingRef, dragAreaId, autoScrollMargin });\n\n const shouldStart = useMemo(\n () => (target: EventTarget | null) =>\n shouldStartSelecting(target, ignoredSlots),\n [ignoredSlots]\n );\n\n const { DragSelection } = useSelectionContainer({\n shouldStartSelecting: shouldStart,\n onSelectionChange: (selection: Parameters<typeof boxesIntersect>[0]) => {\n if (!context) return;\n\n const selectedIds: string[] = [];\n\n context.getSelectableItems().forEach((item) => {\n if (!item.element) return;\n\n const rect = item.element.getBoundingClientRect();\n const cardRect = {\n ...rect,\n left: rect.left + window.scrollX,\n top: rect.top,\n width: rect.width,\n height: rect.height,\n };\n\n if (boxesIntersect(selection, cardRect)) {\n selectedIds.push(String(item.id));\n }\n });\n\n context.setSelectedCardIds(selectedIds);\n },\n onSelectionEnd: () => {\n isSelectingRef.current = false;\n },\n onSelectionStart: () => {\n isSelectingRef.current = true;\n },\n selectionProps: {\n style: {\n pointerEvents: 'none',\n position: 'fixed',\n inset: 0,\n zIndex: 50,\n },\n },\n });\n\n useEffect(() => {\n if (!context) return;\n\n const handlePointerUp = (e: PointerEvent) => {\n const target = e.target as Element | null;\n if (\n !isSelectingRef.current &&\n !context.isDragging &&\n !target?.closest('[data-draggable=\"true\"]')\n ) {\n context.clearSelectedCards();\n }\n };\n\n document.addEventListener('pointerup', handlePointerUp);\n return () => document.removeEventListener('pointerup', handlePointerUp);\n }, [context]);\n\n if (!context) return null;\n\n return <DragSelection />;\n}\n","'use client';\n\nimport { useEffect } from 'react';\n\nimport { combine } from '@atlaskit/pragmatic-drag-and-drop/combine';\nimport {\n draggable,\n dropTargetForElements,\n} from '@atlaskit/pragmatic-drag-and-drop/element/adapter';\nimport type { UseKanbanColumnDnDProps } from './types';\n\nexport function useKanbanColumnDnD({\n columnId,\n elementRef,\n dragHandleRef,\n}: UseKanbanColumnDnDProps) {\n useEffect(() => {\n const element = elementRef.current;\n if (!element) return;\n\n return combine(\n draggable({\n element,\n dragHandle: dragHandleRef?.current ?? undefined,\n getInitialData: () => ({\n type: 'column',\n columnId: String(columnId),\n }),\n }),\n dropTargetForElements({\n element,\n canDrop: ({ source }) =>\n source.data.type === 'column' &&\n String(source.data.columnId) !== String(columnId),\n getData: () => ({\n type: 'column',\n columnId: String(columnId),\n }),\n })\n );\n }, [columnId, dragHandleRef, elementRef]);\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import * as react_jsx_runtime4 from "react/jsx-runtime";
1
+ import * as react_jsx_runtime8 from "react/jsx-runtime";
2
2
 
3
3
  //#region src/components/page-header/page-header.d.ts
4
4
  interface PageHeaderProps {
@@ -10,7 +10,7 @@ declare function PageHeader({
10
10
  title,
11
11
  help,
12
12
  description
13
- }: PageHeaderProps): react_jsx_runtime4.JSX.Element;
13
+ }: PageHeaderProps): react_jsx_runtime8.JSX.Element;
14
14
  //#endregion
15
15
  export { PageHeader, type PageHeaderProps };
16
16
  //# sourceMappingURL=page-header.d.ts.map
@@ -1,5 +1,5 @@
1
1
  import { FieldPath, FieldPathValue, FieldValues, UseControllerProps } from "react-hook-form";
2
- import * as react_jsx_runtime1 from "react/jsx-runtime";
2
+ import * as react_jsx_runtime6 from "react/jsx-runtime";
3
3
  import { Options } from "nuqs";
4
4
  import { PopoverProps } from "@radix-ui/react-popover";
5
5
 
@@ -76,7 +76,7 @@ declare function RemoteSelectorField<T, TFieldValues extends FieldValues = Field
76
76
  ...props
77
77
  }: RemoteSelectorFieldProps<TFieldValues, TFieldName> & BaseRemoteSelectorProps<T> & {
78
78
  withPortal?: boolean;
79
- }): react_jsx_runtime1.JSX.Element;
79
+ }): react_jsx_runtime6.JSX.Element;
80
80
  interface RemoteSelectorQueryProps<T> extends BaseRemoteSelectorProps<T> {
81
81
  name: string;
82
82
  defaultValue?: string;
@@ -96,7 +96,7 @@ declare function RemoteSelectorQuery<T>({
96
96
  fieldLabel,
97
97
  type,
98
98
  ...props
99
- }: RemoteSelectorQueryProps<T>): react_jsx_runtime1.JSX.Element;
99
+ }: RemoteSelectorQueryProps<T>): react_jsx_runtime6.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,6 +1,6 @@
1
1
  import { n as Options$1 } from "./with-mask-Chm8kVE1.js";
2
2
  import { FieldPath, FieldPathValue, FieldValues, UseControllerProps } from "react-hook-form";
3
- import * as react_jsx_runtime5 from "react/jsx-runtime";
3
+ import * as react_jsx_runtime0 from "react/jsx-runtime";
4
4
  import { Options } from "nuqs";
5
5
 
6
6
  //#region src/components/text-field/TextField.d.ts
@@ -57,7 +57,7 @@ declare function InputText({
57
57
  name,
58
58
  onChange,
59
59
  ...props
60
- }: InputTextProps): react_jsx_runtime5.JSX.Element;
60
+ }: InputTextProps): react_jsx_runtime0.JSX.Element;
61
61
  interface TextFieldProps<TFieldValues extends FieldValues = FieldValues, TFieldName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>> extends UseControllerProps<TFieldValues, TFieldName> {
62
62
  disabled?: boolean;
63
63
  required?: boolean;
@@ -75,7 +75,7 @@ declare function TextField<TFieldValues extends FieldValues = FieldValues, TFiel
75
75
  transform,
76
76
  prefix,
77
77
  ...props
78
- }: TextFieldProps<TFieldValues, TFieldName> & Omit<InputTextProps, 'onChange'>): react_jsx_runtime5.JSX.Element;
78
+ }: TextFieldProps<TFieldValues, TFieldName> & Omit<InputTextProps, 'onChange'>): react_jsx_runtime0.JSX.Element;
79
79
  interface QueryTextFieldProps extends Omit<InputTextProps, 'onChange'> {
80
80
  name: string;
81
81
  defaultValue?: string;
@@ -87,7 +87,7 @@ declare function QueryTextField({
87
87
  defaultValue,
88
88
  options,
89
89
  ...props
90
- }: QueryTextFieldProps): react_jsx_runtime5.JSX.Element;
90
+ }: QueryTextFieldProps): react_jsx_runtime0.JSX.Element;
91
91
  interface CookieTextFieldProps extends InputTextProps {
92
92
  name: string;
93
93
  maxAge?: number;
@@ -97,7 +97,7 @@ declare function CookieTextField({
97
97
  maxAge,
98
98
  onChange,
99
99
  ...inputProps
100
- }: CookieTextFieldProps): react_jsx_runtime5.JSX.Element;
100
+ }: CookieTextFieldProps): react_jsx_runtime0.JSX.Element;
101
101
  //#endregion
102
102
  export { CookieTextField, type CookieTextFieldProps, InputText, type InputTextProps, QueryTextField, type QueryTextFieldProps, TextField, type TextFieldProps };
103
103
  //# sourceMappingURL=text-field.d.ts.map
@@ -1,5 +1,5 @@
1
1
  import * as React$1 from "react";
2
- import * as react_jsx_runtime9 from "react/jsx-runtime";
2
+ import * as react_jsx_runtime10 from "react/jsx-runtime";
3
3
  import { Item, Root } from "@radix-ui/react-toggle-group";
4
4
  import { VariantProps } from "class-variance-authority";
5
5
  import * as class_variance_authority_types0 from "class-variance-authority/types";
@@ -28,7 +28,7 @@ declare function ToggleGroup({
28
28
  transition,
29
29
  activeClassName,
30
30
  ...props
31
- }: ToggleGroupProps): react_jsx_runtime9.JSX.Element;
31
+ }: ToggleGroupProps): react_jsx_runtime10.JSX.Element;
32
32
  //#endregion
33
33
  //#region src/components/toggle-field/ToggleField.d.ts
34
34
  type ToggleOption = {
@@ -1 +1 @@
1
- {"version":3,"file":"toggle-field.d.ts","names":[],"sources":["../src/components/toggle-field/ToggleGroup.tsx","../src/components/toggle-field/ToggleField.tsx"],"sourcesContent":[],"mappings":";;;;;;;;cAiBa,sBAuCX;;;;EAvCW,SAAA,CAAA,EAAA,YA8BZ,GAAA,UAAA,GAAA,IAAA,GAAA,SAAA;AAAC,CAAA,GAAD,+BAAA,CAAA,SASC,CAAA,GAAA,SAAA,EAAA,GAAA,MAAA;cAPI,mBA4Be,EAAA,CAAA,KAAS,CAAT,EAAA,CAAA;EAA+B,SAAA,CAAA,EAAA,YAAA,GAAA,UAAA,GAAA,IAAA,GAAA,SAAA;CAA5B,GArBtB,+BAAA,CAAA,SAqB4B,CAAA,GAAA,SAAA,EAAA,GAAA,MAAA;KAAzB,gBAAA,GAAmB,OAAA,CAAM,cACH,CAAA,OADyB,IACzB,CAAA,GAAzB,IAAyB,CAApB,YAAoB,CAAA,OAAA,cAAA,CAAA,EAAA,MAAA,CAAA,GACzB,YADyB,CAAA,OACL,mBADK,CAAA,GAAA;EAApB,UAAA,CAAA,EAEU,UAFV;EAAL,eAAA,CAAA,EAAA,MAAA;CACoB;iBAKb,WAAA,CALP;EAAA,SAAA;EAAA,OAAA;EAAA,SAAA;EAAA,IAAA;EAAA,QAAA;EAAA,UAAA;EAAA,eAAA;EAAA,GAAA;AAAA,CAAA,EAcC,gBAdD,CAAA,EAciB,kBAAA,CAAA,GAAA,CAAA,OAdjB;;;KCrEU,YAAA;;kBAAgD,KAAA,CAAM;;KAEtD,gBAAA,GAAmB,KAC7B,KAAA,CAAM,sBAAsB;;WAInB;EDAE,IAAA,CAAA,EAAA,QAAA,GA8BZ,UAAA;EAEK,IAAA,EAAA,MAAA;EA4BD,YAAA,CAAA,ECzDY,YDyDI,GCzDW,YDyDX,EAAA;EAA+B,kBAAA,CAAA,EAAA,OAAA;CAA5B;cCrDlB,WDsDqB,ECtDR,KAAA,CAAM,EDsDE,CCtDC,gBDsDD,CAAA"}
1
+ {"version":3,"file":"toggle-field.d.ts","names":[],"sources":["../src/components/toggle-field/ToggleGroup.tsx","../src/components/toggle-field/ToggleField.tsx"],"sourcesContent":[],"mappings":";;;;;;;;cAiBa,sBAuCX;;;;EAvCW,SAAA,CAAA,EAAA,YA8BZ,GAAA,UAAA,GAAA,IAAA,GAAA,SAAA;AAAC,CAAA,GAAD,+BAAA,CAAA,SASC,CAAA,GAAA,SAAA,EAAA,GAAA,MAAA;cAPI,mBA4Be,EAAA,CAAA,KAAS,CAAT,EAAA,CAAA;EAA+B,SAAA,CAAA,EAAA,YAAA,GAAA,UAAA,GAAA,IAAA,GAAA,SAAA;CAA5B,GArBtB,+BAAA,CAAA,SAqB4B,CAAA,GAAA,SAAA,EAAA,GAAA,MAAA;KAAzB,gBAAA,GAAmB,OAAA,CAAM,cACH,CAAA,OADyB,IACzB,CAAA,GAAzB,IAAyB,CAApB,YAAoB,CAAA,OAAA,cAAA,CAAA,EAAA,MAAA,CAAA,GACzB,YADyB,CAAA,OACL,mBADK,CAAA,GAAA;EAApB,UAAA,CAAA,EAEU,UAFV;EAAL,eAAA,CAAA,EAAA,MAAA;CACoB;iBAKb,WAAA,CALP;EAAA,SAAA;EAAA,OAAA;EAAA,SAAA;EAAA,IAAA;EAAA,QAAA;EAAA,UAAA;EAAA,eAAA;EAAA,GAAA;AAAA,CAAA,EAcC,gBAdD,CAAA,EAciB,mBAAA,CAAA,GAAA,CAAA,OAdjB;;;KCrEU,YAAA;;kBAAgD,KAAA,CAAM;;KAEtD,gBAAA,GAAmB,KAC7B,KAAA,CAAM,sBAAsB;;WAInB;EDAE,IAAA,CAAA,EAAA,QAAA,GA8BZ,UAAA;EAEK,IAAA,EAAA,MAAA;EA4BD,YAAA,CAAA,ECzDY,YDyDI,GCzDW,YDyDX,EAAA;EAA+B,kBAAA,CAAA,EAAA,OAAA;CAA5B;cCrDlB,WDsDqB,ECtDR,KAAA,CAAM,EDsDE,CCtDC,gBDsDD,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "maquinaweb-ui",
3
- "version": "2.47.7",
3
+ "version": "2.48.0",
4
4
  "description": "A minimal React component library",
5
5
  "type": "module",
6
6
  "sideEffects": false,
@@ -13,6 +13,10 @@
13
13
  "import": "./dist/remote-selector.js",
14
14
  "types": "./dist/remote-selector.d.ts"
15
15
  },
16
+ "./kanban-dnd": {
17
+ "import": "./dist/kanban-dnd.js",
18
+ "types": "./dist/kanban-dnd.d.ts"
19
+ },
16
20
  "./split-text-poor": {
17
21
  "import": "./dist/split-text-poor.js",
18
22
  "types": "./dist/split-text-poor.d.ts"
@@ -62,10 +66,22 @@
62
66
  ]
63
67
  },
64
68
  "peerDependencies": {
69
+ "@air/react-drag-to-select": "^5.0.5",
70
+ "@atlaskit/pragmatic-drag-and-drop": "^1.7.9",
71
+ "@atlaskit/pragmatic-drag-and-drop-auto-scroll": "^2.1.5",
65
72
  "react": "^18.0.0 || ^19.0.0",
66
73
  "react-dom": "^18.0.0 || ^19.0.0"
67
74
  },
68
75
  "peerDependenciesMeta": {
76
+ "@air/react-drag-to-select": {
77
+ "optional": true
78
+ },
79
+ "@atlaskit/pragmatic-drag-and-drop": {
80
+ "optional": true
81
+ },
82
+ "@atlaskit/pragmatic-drag-and-drop-auto-scroll": {
83
+ "optional": true
84
+ },
69
85
  "react-hook-form": {
70
86
  "optional": true
71
87
  },
@@ -102,13 +118,16 @@
102
118
  "use-debounce": "^10.0.6"
103
119
  },
104
120
  "devDependencies": {
121
+ "@air/react-drag-to-select": "^5.0.5",
105
122
  "@biomejs/biome": "^2.3.2",
123
+ "@atlaskit/pragmatic-drag-and-drop": "^1.7.9",
124
+ "@atlaskit/pragmatic-drag-and-drop-auto-scroll": "^2.1.5",
106
125
  "@semantic-release/changelog": "^6.0.3",
107
126
  "@semantic-release/git": "^10.0.1",
108
127
  "@tailwindcss/postcss": "^4.1.16",
109
128
  "@types/inputmask": "^5.0.7",
110
- "@types/react": "^19.2.1",
111
- "@types/react-dom": "^19.2.1",
129
+ "@types/react": "^19.2.14",
130
+ "@types/react-dom": "^19.2.3",
112
131
  "cmdk": "^1.1.1",
113
132
  "concurrently": "^9.0.0",
114
133
  "cookies-next": "^6.1.1",
@@ -119,12 +138,12 @@
119
138
  "motion": "^12.23.22",
120
139
  "next": "^16.2.0-canary.35",
121
140
  "nuqs": "^2.7.0",
122
- "react": "^19.2.1",
141
+ "react": "^19.2.4",
123
142
  "react-cosmos": "^7.0.0",
124
143
  "react-cosmos-next": "^7.0.0",
125
144
  "react-cosmos-plugin-open-fixture": "^7.0.0",
126
- "react-dom": "^19.2.1",
127
- "react-hook-form": "^7.63.0",
145
+ "react-dom": "^19.2.4",
146
+ "react-hook-form": "^7.71.2",
128
147
  "tailwindcss": "^4.1.14",
129
148
  "tsdown": "^0.15.6",
130
149
  "tw-animate-css": "^1.4.0",