maquinaweb-ui 2.57.0 → 2.57.2

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_runtime1 from "react/jsx-runtime";
2
+ import * as react_jsx_runtime3 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_runtime1.JSX.Element;
26
+ }: ContainerAnimationProps<T>) => react_jsx_runtime3.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_runtime8 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_runtime8.JSX.Element;
75
75
  //#endregion
76
76
  export { InputSuggest, type InputSuggestProps };
77
77
  //# sourceMappingURL=input-suggest.d.ts.map
@@ -219,6 +219,7 @@ function KanbanCardItem({ id, children, className, getSelectedCardIds, getSelect
219
219
  const DROP_ANIMATION_DURATION_MS = 405;
220
220
  const DROP_ANIMATION_EASING = "cubic-bezier(0.2, 0.8, 0.2, 1)";
221
221
  const DROP_PREVIEW_Z_INDEX = "9999";
222
+ const DROP_PREVIEW_MIN_DELTA_PX = 6;
222
223
  function getCardIdFromElementId(elementId) {
223
224
  if (!elementId.startsWith("kanban-card-item-")) return "";
224
225
  return elementId.slice(17);
@@ -319,6 +320,9 @@ function animateCardDropToFinalPosition({ cardId, sourceElement, targetElement,
319
320
  requestAnimationFrame(() => {
320
321
  const finalCardElement = document.getElementById(`kanban-card-item-${cardId}`);
321
322
  const destinationRect = finalCardElement instanceof HTMLElement ? finalCardElement.getBoundingClientRect() : targetElement.getBoundingClientRect();
323
+ const dx = Math.abs(destinationRect.left - sourceRect.left);
324
+ const dy = Math.abs(destinationRect.top - sourceRect.top);
325
+ if (dx < DROP_PREVIEW_MIN_DELTA_PX && dy < DROP_PREVIEW_MIN_DELTA_PX) return;
322
326
  animateDropPreviewToColumn({
323
327
  cardId,
324
328
  sourceElement,
@@ -1 +1 @@
1
- {"version":3,"file":"kanban-dnd.js","names":["STACKED_CLONE_BASE_STYLE: Partial<CSSStyleDeclaration>","defaultGetColumnId","cardsToMove: TCard[]","nextOrder: number | null","state: {\n xContainer: HTMLElement | null;\n yContainer: HTMLElement | null;\n xMax: number;\n yMax: number;\n useWindowY: boolean;\n } | null"],"sources":["../src/components/kanban-dnd/context.tsx","../src/components/kanban-dnd/constants.ts","../src/components/kanban-dnd/utils.ts","../src/components/kanban-dnd/drag-preview.ts","../src/components/kanban-dnd/kanban-card-item.tsx","../src/components/kanban-dnd/drop-animation.ts","../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/use-kanban-selector-auto-scroll.ts","../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(\n original: HTMLElement,\n index: number,\n widthPx: string\n) {\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 width: widthPx,\n minWidth: widthPx,\n maxWidth: widthPx,\n boxSizing: 'border-box',\n });\n\n return clone;\n}\n\nfunction createFallbackClone(sourceElement: HTMLElement, widthPx: string) {\n const fallback = sourceElement.cloneNode(true) as HTMLElement;\n\n applyStyles(fallback, {\n pointerEvents: 'none',\n margin: '0',\n width: widthPx,\n minWidth: widthPx,\n maxWidth: widthPx,\n boxSizing: 'border-box',\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 const widthPx = `${sourceElement.getBoundingClientRect().width}px`;\n\n applyStyles(root, {\n position: 'relative',\n width: widthPx,\n minWidth: widthPx,\n maxWidth: widthPx,\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, widthPx));\n });\n\n if (!root.childElementCount) {\n root.appendChild(createFallbackClone(sourceElement, widthPx));\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","import { buildDragPreview } from './drag-preview';\nimport type { KanbanSelectableItem } from './types';\nimport { applyStyles } from './utils';\n\nconst DROP_ANIMATION_DURATION_MS = 405;\nconst DROP_ANIMATION_EASING = 'cubic-bezier(0.2, 0.8, 0.2, 1)';\nconst DROP_PREVIEW_Z_INDEX = '9999';\n\nfunction getCardIdFromElementId(elementId: string) {\n const prefix = 'kanban-card-item-';\n if (!elementId.startsWith(prefix)) return '';\n return elementId.slice(prefix.length);\n}\n\nfunction getDropDestinationPoint({\n targetElement,\n movingCardIds,\n}: {\n targetElement: HTMLElement;\n movingCardIds: Set<string>;\n}) {\n const targetRect = targetElement.getBoundingClientRect();\n const cardsInTarget = Array.from(\n targetElement.querySelectorAll<HTMLElement>('[id^=\"kanban-card-item-\"]')\n );\n\n const remainingCards = cardsInTarget.filter((cardElement) => {\n const cardId = getCardIdFromElementId(cardElement.id);\n return cardId && !movingCardIds.has(cardId);\n });\n\n if (remainingCards.length === 0) {\n return {\n x: targetRect.left + Math.min(20, targetRect.width * 0.1),\n y: targetRect.top + Math.min(16, targetRect.height * 0.08),\n };\n }\n\n const lastCardRect =\n remainingCards[remainingCards.length - 1]?.getBoundingClientRect();\n\n return {\n x: lastCardRect?.left ?? targetRect.left,\n y: lastCardRect?.bottom ?? targetRect.bottom + 8,\n };\n}\n\nexport function animateDropPreviewToColumn({\n cardId,\n sourceElement,\n targetElement,\n getSelectableItems,\n getSelectedCardIds,\n sourceRect,\n destinationPoint,\n}: {\n cardId: string;\n sourceElement: HTMLElement;\n targetElement: HTMLElement;\n getSelectableItems?: () => KanbanSelectableItem[];\n getSelectedCardIds?: () => string[];\n sourceRect?: Pick<DOMRect, 'left' | 'top' | 'width' | 'height'>;\n destinationPoint?: { x: number; y: number };\n}) {\n if (window.matchMedia('(prefers-reduced-motion: reduce)').matches) {\n return;\n }\n\n const originRect = sourceRect ?? sourceElement.getBoundingClientRect();\n const selectedIds = getSelectedCardIds?.() ?? [];\n const movingCardIds = new Set<string>([\n ...selectedIds.map(String),\n String(cardId),\n ]);\n\n if (!originRect.width || !originRect.height) {\n return;\n }\n\n const preview = buildDragPreview({\n cardId,\n sourceElement,\n getSelectableItems,\n getSelectedCardIds,\n });\n\n applyStyles(preview, {\n position: 'fixed',\n left: `${originRect.left}px`,\n top: `${originRect.top}px`,\n width: `${originRect.width}px`,\n pointerEvents: 'none',\n zIndex: DROP_PREVIEW_Z_INDEX,\n margin: '0',\n transformOrigin: 'top left',\n willChange: 'transform, opacity',\n });\n\n document.body.appendChild(preview);\n\n const destination =\n destinationPoint ??\n getDropDestinationPoint({\n targetElement,\n movingCardIds,\n });\n\n const targetX = destination.x;\n const targetY = destination.y;\n const translateX = targetX - originRect.left;\n const translateY = targetY - originRect.top;\n\n const animation = preview.animate(\n [\n {\n transform: 'translate3d(0, 0, 0) scale(1)',\n opacity: 1,\n },\n {\n transform: `translate3d(${translateX}px, ${translateY}px, 0) scale(0.88)`,\n opacity: 0,\n },\n ],\n {\n duration: DROP_ANIMATION_DURATION_MS,\n easing: DROP_ANIMATION_EASING,\n fill: 'forwards',\n }\n );\n\n const cleanup = () => {\n if (preview.parentElement) {\n preview.parentElement.removeChild(preview);\n }\n };\n\n animation.addEventListener('finish', cleanup, { once: true });\n animation.addEventListener('cancel', cleanup, { once: true });\n}\n\nfunction animateContainerReorder(container: HTMLElement, mutate: () => void) {\n if (window.matchMedia('(prefers-reduced-motion: reduce)').matches) {\n mutate();\n return;\n }\n\n const beforeRects = new Map<string, DOMRect>();\n const beforeElements = Array.from(\n container.querySelectorAll<HTMLElement>('[id^=\"kanban-card-item-\"]')\n );\n\n beforeElements.forEach((element) => {\n beforeRects.set(element.id, element.getBoundingClientRect());\n });\n\n mutate();\n\n requestAnimationFrame(() => {\n const afterElements = Array.from(\n container.querySelectorAll<HTMLElement>('[id^=\"kanban-card-item-\"]')\n );\n\n afterElements.forEach((element) => {\n const before = beforeRects.get(element.id);\n if (!before) return;\n\n const after = element.getBoundingClientRect();\n const dx = before.left - after.left;\n const dy = before.top - after.top;\n\n if (Math.abs(dx) < 0.5 && Math.abs(dy) < 0.5) {\n return;\n }\n\n element.animate(\n [\n { transform: `translate(${dx}px, ${dy}px)` },\n { transform: 'translate(0, 0)' },\n ],\n {\n duration: 278,\n easing: 'cubic-bezier(0.2, 0.8, 0.2, 1)',\n }\n );\n });\n });\n}\n\nexport function animateCardDropToFinalPosition({\n cardId,\n sourceElement,\n targetElement,\n performDrop,\n getSelectableItems,\n getSelectedCardIds,\n}: {\n cardId: string;\n sourceElement: HTMLElement;\n targetElement: HTMLElement;\n performDrop: () => void;\n getSelectableItems?: () => KanbanSelectableItem[];\n getSelectedCardIds?: () => string[];\n}) {\n const sourceRect = sourceElement.getBoundingClientRect();\n\n animateContainerReorder(targetElement, performDrop);\n\n requestAnimationFrame(() => {\n const finalCardElement = document.getElementById(\n `kanban-card-item-${cardId}`\n );\n const destinationRect =\n finalCardElement instanceof HTMLElement\n ? finalCardElement.getBoundingClientRect()\n : targetElement.getBoundingClientRect();\n\n animateDropPreviewToColumn({\n cardId,\n sourceElement,\n targetElement,\n getSelectableItems,\n getSelectedCardIds,\n sourceRect,\n destinationPoint: {\n x: destinationRect.left,\n y: destinationRect.top,\n },\n });\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 { animateCardDropToFinalPosition } from './drop-animation';\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 const cardId = String(source.data.cardId ?? '');\n const targetColumnId = getTargetColumnId(dropTargets, 'column-drop');\n const targetDrop = dropTargets.find(\n (item) => item.data.type === 'column-drop'\n );\n\n if (source.element instanceof HTMLElement) {\n const targetElement =\n targetDrop?.element instanceof HTMLElement\n ? targetDrop.element\n : targetColumnId\n ? document.getElementById(\n `kanban-drop-zone-${targetColumnId}`\n )\n : null;\n\n if (targetElement instanceof HTMLElement) {\n animateCardDropToFinalPosition({\n cardId,\n sourceElement: source.element,\n targetElement,\n performDrop: () => {\n dropCard(cardId, targetColumnId);\n },\n getSelectableItems,\n getSelectedCardIds: getSelectedCardIdsSafe,\n });\n\n finishDrag();\n return;\n }\n }\n\n dropCard(cardId, targetColumnId);\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 getSelectableItems,\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","import type { MutableRefObject } from 'react';\nimport { useEffect } from 'react';\n\nexport function useKanbanSelectorAutoScroll({\n isSelectingRef,\n dragAreaId,\n autoScrollMargin,\n}: {\n isSelectingRef: MutableRefObject<boolean>;\n dragAreaId: string;\n autoScrollMargin: number;\n}) {\n useEffect(() => {\n const clamp = (delta: number, current: number, max: number) =>\n delta > 0 ? Math.min(delta, max - current) : Math.max(delta, -current);\n\n const edge = (\n point: number,\n start: number,\n end: number,\n margin: number,\n dt: number\n ) => {\n if (point < start + margin)\n return ((point - (start + margin)) / margin) * dt;\n if (point > end - margin) return ((point - (end - margin)) / margin) * dt;\n return 0;\n };\n\n const bounds = (el: HTMLElement | null) => {\n if (!el || el === document.documentElement || el === document.body) {\n return {\n left: 0,\n right: window.innerWidth,\n top: 0,\n bottom: window.innerHeight,\n };\n }\n\n const rect = el.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\n const findScrollable = (node: HTMLElement | null, axis: 'x' | 'y') => {\n let current = node;\n while (current) {\n const style = window.getComputedStyle(current);\n const canScroll =\n axis === 'x'\n ? /(auto|scroll)/.test(style.overflowX) &&\n current.scrollWidth > current.clientWidth\n : /(auto|scroll)/.test(style.overflowY) &&\n current.scrollHeight > current.clientHeight;\n if (canScroll) return current;\n current = current.parentElement;\n }\n\n return null;\n };\n\n let raf = 0;\n let lastTime = performance.now();\n const pointer = { x: 0, y: 0 };\n let state: {\n xContainer: HTMLElement | null;\n yContainer: HTMLElement | null;\n xMax: number;\n yMax: number;\n useWindowY: boolean;\n } | null = null;\n\n const onPointerMove = (e: PointerEvent) => {\n pointer.x = e.clientX;\n pointer.y = e.clientY;\n };\n\n const getState = () => {\n const startNode =\n document.getElementById(dragAreaId)?.parentElement ?? null;\n const xContainer = findScrollable(startNode, 'x');\n const yContainer = findScrollable(startNode, 'y');\n const useWindowY = !yContainer;\n\n return {\n xContainer,\n yContainer,\n useWindowY,\n xMax: xContainer ? xContainer.scrollWidth - xContainer.clientWidth : 0,\n yMax: useWindowY\n ? document.documentElement.scrollHeight - window.innerHeight\n : yContainer\n ? yContainer.scrollHeight - yContainer.clientHeight\n : 0,\n };\n };\n\n const tick = (now: number) => {\n const dt = now - lastTime;\n lastTime = now;\n\n if (!isSelectingRef.current) {\n state = null;\n raf = requestAnimationFrame(tick);\n return;\n }\n\n state ??= getState();\n const scrollState = state;\n if (!scrollState) {\n raf = requestAnimationFrame(tick);\n return;\n }\n\n const xBounds = bounds(scrollState.xContainer);\n const yBounds = scrollState.useWindowY\n ? { top: 0, bottom: window.innerHeight }\n : bounds(scrollState.yContainer);\n\n const dx = edge(\n pointer.x,\n xBounds.left,\n xBounds.right,\n autoScrollMargin,\n dt\n );\n const dy = edge(\n pointer.y,\n yBounds.top,\n yBounds.bottom,\n autoScrollMargin,\n dt\n );\n\n let didScroll = false;\n\n if (dx && scrollState.xContainer && scrollState.xMax > 0) {\n const nextDx = clamp(\n dx,\n scrollState.xContainer.scrollLeft,\n scrollState.xMax\n );\n if (nextDx) {\n scrollState.xContainer.scrollBy(nextDx, 0);\n didScroll = true;\n }\n }\n\n if (dy && scrollState.yMax > 0) {\n if (scrollState.useWindowY) {\n const top = window.scrollY || document.documentElement.scrollTop;\n const nextDy = clamp(dy, top, scrollState.yMax);\n if (nextDy) {\n window.scrollBy(0, nextDy);\n didScroll = true;\n }\n } else if (scrollState.yContainer) {\n const nextDy = clamp(\n dy,\n scrollState.yContainer.scrollTop,\n scrollState.yMax\n );\n if (nextDy) {\n scrollState.yContainer.scrollBy(0, nextDy);\n didScroll = true;\n }\n }\n }\n\n if (didScroll) {\n document.body.dispatchEvent(\n new MouseEvent('mousemove', {\n clientX: pointer.x,\n clientY: pointer.y,\n bubbles: true,\n cancelable: true,\n })\n );\n }\n\n raf = requestAnimationFrame(tick);\n };\n\n window.addEventListener('pointermove', onPointerMove, { passive: true });\n raf = requestAnimationFrame(tick);\n\n return () => {\n window.removeEventListener('pointermove', onPointerMove);\n cancelAnimationFrame(raf);\n };\n }, [autoScrollMargin, dragAreaId, isSelectingRef]);\n}\n","'use client';\n\nimport { useEffect, 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';\nimport { useKanbanSelectorAutoScroll } from './use-kanban-selector-auto-scroll';\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];\nconst SELECTION_STYLE = {\n pointerEvents: 'none',\n position: 'fixed',\n inset: 0,\n zIndex: 50,\n} as const;\n\ntype SelectionBox = Parameters<typeof boxesIntersect>[0];\nfunction shouldStartSelecting(\n target: EventTarget | null,\n ignoredSlots: string[]\n): boolean {\n if (!(target instanceof Element)) return false;\n return !(\n target.closest('[data-draggable=\"true\"]') ||\n ignoredSlots.some((slot) => target.closest(`[data-slot=\"${slot}\"]`))\n );\n}\nconst toUniqueStringIds = (ids: Array<string | number>) =>\n Array.from(new Set(ids.map(String)));\nconst haveSameIds = (a: string[], b: string[]) => {\n if (a.length !== b.length) return false;\n const set = new Set(a);\n return b.every((id) => set.has(id));\n};\nconst xorSelection = (base: string[], ids: string[]) => {\n const next = new Set(base);\n ids.forEach((id) => (next.has(id) ? next.delete(id) : next.add(id)));\n return Array.from(next);\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 shiftOnPointerDownRef = useRef(false);\n const sessionRef = useRef<{ toggle: boolean; base: string[] }>({\n toggle: false,\n base: [],\n });\n\n useKanbanSelectorAutoScroll({ isSelectingRef, dragAreaId, autoScrollMargin });\n\n const { DragSelection } = useSelectionContainer({\n shouldStartSelecting: (target) =>\n shouldStartSelecting(target, ignoredSlots),\n onSelectionChange: (selection: SelectionBox) => {\n if (!context) return;\n const selectedIds = toUniqueStringIds(\n context.getSelectableItems().flatMap((item) => {\n const element = item.element;\n if (!element) return [];\n const rect = element.getBoundingClientRect();\n const intersects = boxesIntersect(selection, {\n ...rect,\n left: rect.left + window.scrollX,\n top: rect.top,\n width: rect.width,\n height: rect.height,\n });\n return intersects ? [String(item.id)] : [];\n })\n );\n const nextIds = sessionRef.current.toggle\n ? xorSelection(sessionRef.current.base, selectedIds)\n : selectedIds;\n if (haveSameIds(nextIds, context.getSelectedCardIds())) return;\n context.setSelectedCardIds(nextIds);\n },\n onSelectionEnd: () => {\n isSelectingRef.current = false;\n sessionRef.current = { toggle: false, base: [] };\n },\n onSelectionStart: () => {\n isSelectingRef.current = true;\n sessionRef.current = {\n toggle: shiftOnPointerDownRef.current,\n base: context?.getSelectedCardIds() ?? [],\n };\n },\n selectionProps: { style: SELECTION_STYLE },\n });\n\n useEffect(() => {\n if (!context) return;\n\n const handlePointerDown = (e: PointerEvent) => {\n shiftOnPointerDownRef.current = e.shiftKey;\n };\n\n const handlePointerUp = (e: PointerEvent) => {\n const target = e.target as Element | null;\n if (\n !isSelectingRef.current &&\n !context.getIsDragging() &&\n !target?.closest('[data-draggable=\"true\"]')\n ) {\n context.clearSelectedCards();\n }\n shiftOnPointerDownRef.current = false;\n };\n\n document.addEventListener('pointerdown', handlePointerDown);\n document.addEventListener('pointerup', handlePointerUp);\n\n return () => {\n document.removeEventListener('pointerdown', handlePointerDown);\n document.removeEventListener('pointerup', handlePointerUp);\n };\n }, [context]);\n\n if (!context) return null;\n\n return <DragSelection />;\n}\n","'use client';\n\nimport { useEffect } from 'react';\n\nimport { combine } from '@atlaskit/pragmatic-drag-and-drop/combine';\nimport {\n draggable,\n dropTargetForElements,\n} from '@atlaskit/pragmatic-drag-and-drop/element/adapter';\nimport type { UseKanbanColumnDnDProps } from './types';\n\nexport function useKanbanColumnDnD({\n columnId,\n elementRef,\n dragHandleRef,\n}: UseKanbanColumnDnDProps) {\n useEffect(() => {\n const element = elementRef.current;\n if (!element) return;\n\n return combine(\n draggable({\n element,\n dragHandle: dragHandleRef?.current ?? undefined,\n getInitialData: () => ({\n type: 'column',\n columnId: String(columnId),\n }),\n }),\n dropTargetForElements({\n element,\n canDrop: ({ source }) =>\n source.data.type === 'column' &&\n String(source.data.columnId) !== String(columnId),\n getData: () => ({\n type: 'column',\n columnId: String(columnId),\n }),\n })\n );\n }, [columnId, dragHandleRef, elementRef]);\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"kanban-dnd.js","names":["STACKED_CLONE_BASE_STYLE: Partial<CSSStyleDeclaration>","defaultGetColumnId","cardsToMove: TCard[]","nextOrder: number | null","state: {\n xContainer: HTMLElement | null;\n yContainer: HTMLElement | null;\n xMax: number;\n yMax: number;\n useWindowY: boolean;\n } | null"],"sources":["../src/components/kanban-dnd/context.tsx","../src/components/kanban-dnd/constants.ts","../src/components/kanban-dnd/utils.ts","../src/components/kanban-dnd/drag-preview.ts","../src/components/kanban-dnd/kanban-card-item.tsx","../src/components/kanban-dnd/drop-animation.ts","../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/use-kanban-selector-auto-scroll.ts","../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(\n original: HTMLElement,\n index: number,\n widthPx: string\n) {\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 width: widthPx,\n minWidth: widthPx,\n maxWidth: widthPx,\n boxSizing: 'border-box',\n });\n\n return clone;\n}\n\nfunction createFallbackClone(sourceElement: HTMLElement, widthPx: string) {\n const fallback = sourceElement.cloneNode(true) as HTMLElement;\n\n applyStyles(fallback, {\n pointerEvents: 'none',\n margin: '0',\n width: widthPx,\n minWidth: widthPx,\n maxWidth: widthPx,\n boxSizing: 'border-box',\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 const widthPx = `${sourceElement.getBoundingClientRect().width}px`;\n\n applyStyles(root, {\n position: 'relative',\n width: widthPx,\n minWidth: widthPx,\n maxWidth: widthPx,\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, widthPx));\n });\n\n if (!root.childElementCount) {\n root.appendChild(createFallbackClone(sourceElement, widthPx));\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","import { buildDragPreview } from './drag-preview';\nimport type { KanbanSelectableItem } from './types';\nimport { applyStyles } from './utils';\n\nconst DROP_ANIMATION_DURATION_MS = 405;\nconst DROP_ANIMATION_EASING = 'cubic-bezier(0.2, 0.8, 0.2, 1)';\nconst DROP_PREVIEW_Z_INDEX = '9999';\nconst DROP_PREVIEW_MIN_DELTA_PX = 6;\n\nfunction getCardIdFromElementId(elementId: string) {\n const prefix = 'kanban-card-item-';\n if (!elementId.startsWith(prefix)) return '';\n return elementId.slice(prefix.length);\n}\n\nfunction getDropDestinationPoint({\n targetElement,\n movingCardIds,\n}: {\n targetElement: HTMLElement;\n movingCardIds: Set<string>;\n}) {\n const targetRect = targetElement.getBoundingClientRect();\n const cardsInTarget = Array.from(\n targetElement.querySelectorAll<HTMLElement>('[id^=\"kanban-card-item-\"]')\n );\n\n const remainingCards = cardsInTarget.filter((cardElement) => {\n const cardId = getCardIdFromElementId(cardElement.id);\n return cardId && !movingCardIds.has(cardId);\n });\n\n if (remainingCards.length === 0) {\n return {\n x: targetRect.left + Math.min(20, targetRect.width * 0.1),\n y: targetRect.top + Math.min(16, targetRect.height * 0.08),\n };\n }\n\n const lastCardRect =\n remainingCards[remainingCards.length - 1]?.getBoundingClientRect();\n\n return {\n x: lastCardRect?.left ?? targetRect.left,\n y: lastCardRect?.bottom ?? targetRect.bottom + 8,\n };\n}\n\nexport function animateDropPreviewToColumn({\n cardId,\n sourceElement,\n targetElement,\n getSelectableItems,\n getSelectedCardIds,\n sourceRect,\n destinationPoint,\n}: {\n cardId: string;\n sourceElement: HTMLElement;\n targetElement: HTMLElement;\n getSelectableItems?: () => KanbanSelectableItem[];\n getSelectedCardIds?: () => string[];\n sourceRect?: Pick<DOMRect, 'left' | 'top' | 'width' | 'height'>;\n destinationPoint?: { x: number; y: number };\n}) {\n if (window.matchMedia('(prefers-reduced-motion: reduce)').matches) {\n return;\n }\n\n const originRect = sourceRect ?? sourceElement.getBoundingClientRect();\n const selectedIds = getSelectedCardIds?.() ?? [];\n const movingCardIds = new Set<string>([\n ...selectedIds.map(String),\n String(cardId),\n ]);\n\n if (!originRect.width || !originRect.height) {\n return;\n }\n\n const preview = buildDragPreview({\n cardId,\n sourceElement,\n getSelectableItems,\n getSelectedCardIds,\n });\n\n applyStyles(preview, {\n position: 'fixed',\n left: `${originRect.left}px`,\n top: `${originRect.top}px`,\n width: `${originRect.width}px`,\n pointerEvents: 'none',\n zIndex: DROP_PREVIEW_Z_INDEX,\n margin: '0',\n transformOrigin: 'top left',\n willChange: 'transform, opacity',\n });\n\n document.body.appendChild(preview);\n\n const destination =\n destinationPoint ??\n getDropDestinationPoint({\n targetElement,\n movingCardIds,\n });\n\n const targetX = destination.x;\n const targetY = destination.y;\n const translateX = targetX - originRect.left;\n const translateY = targetY - originRect.top;\n\n const animation = preview.animate(\n [\n {\n transform: 'translate3d(0, 0, 0) scale(1)',\n opacity: 1,\n },\n {\n transform: `translate3d(${translateX}px, ${translateY}px, 0) scale(0.88)`,\n opacity: 0,\n },\n ],\n {\n duration: DROP_ANIMATION_DURATION_MS,\n easing: DROP_ANIMATION_EASING,\n fill: 'forwards',\n }\n );\n\n const cleanup = () => {\n if (preview.parentElement) {\n preview.parentElement.removeChild(preview);\n }\n };\n\n animation.addEventListener('finish', cleanup, { once: true });\n animation.addEventListener('cancel', cleanup, { once: true });\n}\n\nfunction animateContainerReorder(container: HTMLElement, mutate: () => void) {\n if (window.matchMedia('(prefers-reduced-motion: reduce)').matches) {\n mutate();\n return;\n }\n\n const beforeRects = new Map<string, DOMRect>();\n const beforeElements = Array.from(\n container.querySelectorAll<HTMLElement>('[id^=\"kanban-card-item-\"]')\n );\n\n beforeElements.forEach((element) => {\n beforeRects.set(element.id, element.getBoundingClientRect());\n });\n\n mutate();\n\n requestAnimationFrame(() => {\n const afterElements = Array.from(\n container.querySelectorAll<HTMLElement>('[id^=\"kanban-card-item-\"]')\n );\n\n afterElements.forEach((element) => {\n const before = beforeRects.get(element.id);\n if (!before) return;\n\n const after = element.getBoundingClientRect();\n const dx = before.left - after.left;\n const dy = before.top - after.top;\n\n if (Math.abs(dx) < 0.5 && Math.abs(dy) < 0.5) {\n return;\n }\n\n element.animate(\n [\n { transform: `translate(${dx}px, ${dy}px)` },\n { transform: 'translate(0, 0)' },\n ],\n {\n duration: 278,\n easing: 'cubic-bezier(0.2, 0.8, 0.2, 1)',\n }\n );\n });\n });\n}\n\nexport function animateCardDropToFinalPosition({\n cardId,\n sourceElement,\n targetElement,\n performDrop,\n getSelectableItems,\n getSelectedCardIds,\n}: {\n cardId: string;\n sourceElement: HTMLElement;\n targetElement: HTMLElement;\n performDrop: () => void;\n getSelectableItems?: () => KanbanSelectableItem[];\n getSelectedCardIds?: () => string[];\n}) {\n const sourceRect = sourceElement.getBoundingClientRect();\n\n animateContainerReorder(targetElement, performDrop);\n\n requestAnimationFrame(() => {\n const finalCardElement = document.getElementById(\n `kanban-card-item-${cardId}`\n );\n const destinationRect =\n finalCardElement instanceof HTMLElement\n ? finalCardElement.getBoundingClientRect()\n : targetElement.getBoundingClientRect();\n\n const dx = Math.abs(destinationRect.left - sourceRect.left);\n const dy = Math.abs(destinationRect.top - sourceRect.top);\n if (dx < DROP_PREVIEW_MIN_DELTA_PX && dy < DROP_PREVIEW_MIN_DELTA_PX) {\n return;\n }\n\n animateDropPreviewToColumn({\n cardId,\n sourceElement,\n targetElement,\n getSelectableItems,\n getSelectedCardIds,\n sourceRect,\n destinationPoint: {\n x: destinationRect.left,\n y: destinationRect.top,\n },\n });\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 { animateCardDropToFinalPosition } from './drop-animation';\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 const cardId = String(source.data.cardId ?? '');\n const targetColumnId = getTargetColumnId(dropTargets, 'column-drop');\n const targetDrop = dropTargets.find(\n (item) => item.data.type === 'column-drop'\n );\n\n if (source.element instanceof HTMLElement) {\n const targetElement =\n targetDrop?.element instanceof HTMLElement\n ? targetDrop.element\n : targetColumnId\n ? document.getElementById(\n `kanban-drop-zone-${targetColumnId}`\n )\n : null;\n\n if (targetElement instanceof HTMLElement) {\n animateCardDropToFinalPosition({\n cardId,\n sourceElement: source.element,\n targetElement,\n performDrop: () => {\n dropCard(cardId, targetColumnId);\n },\n getSelectableItems,\n getSelectedCardIds: getSelectedCardIdsSafe,\n });\n\n finishDrag();\n return;\n }\n }\n\n dropCard(cardId, targetColumnId);\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 getSelectableItems,\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","import type { MutableRefObject } from 'react';\nimport { useEffect } from 'react';\n\nexport function useKanbanSelectorAutoScroll({\n isSelectingRef,\n dragAreaId,\n autoScrollMargin,\n}: {\n isSelectingRef: MutableRefObject<boolean>;\n dragAreaId: string;\n autoScrollMargin: number;\n}) {\n useEffect(() => {\n const clamp = (delta: number, current: number, max: number) =>\n delta > 0 ? Math.min(delta, max - current) : Math.max(delta, -current);\n\n const edge = (\n point: number,\n start: number,\n end: number,\n margin: number,\n dt: number\n ) => {\n if (point < start + margin)\n return ((point - (start + margin)) / margin) * dt;\n if (point > end - margin) return ((point - (end - margin)) / margin) * dt;\n return 0;\n };\n\n const bounds = (el: HTMLElement | null) => {\n if (!el || el === document.documentElement || el === document.body) {\n return {\n left: 0,\n right: window.innerWidth,\n top: 0,\n bottom: window.innerHeight,\n };\n }\n\n const rect = el.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\n const findScrollable = (node: HTMLElement | null, axis: 'x' | 'y') => {\n let current = node;\n while (current) {\n const style = window.getComputedStyle(current);\n const canScroll =\n axis === 'x'\n ? /(auto|scroll)/.test(style.overflowX) &&\n current.scrollWidth > current.clientWidth\n : /(auto|scroll)/.test(style.overflowY) &&\n current.scrollHeight > current.clientHeight;\n if (canScroll) return current;\n current = current.parentElement;\n }\n\n return null;\n };\n\n let raf = 0;\n let lastTime = performance.now();\n const pointer = { x: 0, y: 0 };\n let state: {\n xContainer: HTMLElement | null;\n yContainer: HTMLElement | null;\n xMax: number;\n yMax: number;\n useWindowY: boolean;\n } | null = null;\n\n const onPointerMove = (e: PointerEvent) => {\n pointer.x = e.clientX;\n pointer.y = e.clientY;\n };\n\n const getState = () => {\n const startNode =\n document.getElementById(dragAreaId)?.parentElement ?? null;\n const xContainer = findScrollable(startNode, 'x');\n const yContainer = findScrollable(startNode, 'y');\n const useWindowY = !yContainer;\n\n return {\n xContainer,\n yContainer,\n useWindowY,\n xMax: xContainer ? xContainer.scrollWidth - xContainer.clientWidth : 0,\n yMax: useWindowY\n ? document.documentElement.scrollHeight - window.innerHeight\n : yContainer\n ? yContainer.scrollHeight - yContainer.clientHeight\n : 0,\n };\n };\n\n const tick = (now: number) => {\n const dt = now - lastTime;\n lastTime = now;\n\n if (!isSelectingRef.current) {\n state = null;\n raf = requestAnimationFrame(tick);\n return;\n }\n\n state ??= getState();\n const scrollState = state;\n if (!scrollState) {\n raf = requestAnimationFrame(tick);\n return;\n }\n\n const xBounds = bounds(scrollState.xContainer);\n const yBounds = scrollState.useWindowY\n ? { top: 0, bottom: window.innerHeight }\n : bounds(scrollState.yContainer);\n\n const dx = edge(\n pointer.x,\n xBounds.left,\n xBounds.right,\n autoScrollMargin,\n dt\n );\n const dy = edge(\n pointer.y,\n yBounds.top,\n yBounds.bottom,\n autoScrollMargin,\n dt\n );\n\n let didScroll = false;\n\n if (dx && scrollState.xContainer && scrollState.xMax > 0) {\n const nextDx = clamp(\n dx,\n scrollState.xContainer.scrollLeft,\n scrollState.xMax\n );\n if (nextDx) {\n scrollState.xContainer.scrollBy(nextDx, 0);\n didScroll = true;\n }\n }\n\n if (dy && scrollState.yMax > 0) {\n if (scrollState.useWindowY) {\n const top = window.scrollY || document.documentElement.scrollTop;\n const nextDy = clamp(dy, top, scrollState.yMax);\n if (nextDy) {\n window.scrollBy(0, nextDy);\n didScroll = true;\n }\n } else if (scrollState.yContainer) {\n const nextDy = clamp(\n dy,\n scrollState.yContainer.scrollTop,\n scrollState.yMax\n );\n if (nextDy) {\n scrollState.yContainer.scrollBy(0, nextDy);\n didScroll = true;\n }\n }\n }\n\n if (didScroll) {\n document.body.dispatchEvent(\n new MouseEvent('mousemove', {\n clientX: pointer.x,\n clientY: pointer.y,\n bubbles: true,\n cancelable: true,\n })\n );\n }\n\n raf = requestAnimationFrame(tick);\n };\n\n window.addEventListener('pointermove', onPointerMove, { passive: true });\n raf = requestAnimationFrame(tick);\n\n return () => {\n window.removeEventListener('pointermove', onPointerMove);\n cancelAnimationFrame(raf);\n };\n }, [autoScrollMargin, dragAreaId, isSelectingRef]);\n}\n","'use client';\n\nimport { useEffect, 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';\nimport { useKanbanSelectorAutoScroll } from './use-kanban-selector-auto-scroll';\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];\nconst SELECTION_STYLE = {\n pointerEvents: 'none',\n position: 'fixed',\n inset: 0,\n zIndex: 50,\n} as const;\n\ntype SelectionBox = Parameters<typeof boxesIntersect>[0];\nfunction shouldStartSelecting(\n target: EventTarget | null,\n ignoredSlots: string[]\n): boolean {\n if (!(target instanceof Element)) return false;\n return !(\n target.closest('[data-draggable=\"true\"]') ||\n ignoredSlots.some((slot) => target.closest(`[data-slot=\"${slot}\"]`))\n );\n}\nconst toUniqueStringIds = (ids: Array<string | number>) =>\n Array.from(new Set(ids.map(String)));\nconst haveSameIds = (a: string[], b: string[]) => {\n if (a.length !== b.length) return false;\n const set = new Set(a);\n return b.every((id) => set.has(id));\n};\nconst xorSelection = (base: string[], ids: string[]) => {\n const next = new Set(base);\n ids.forEach((id) => (next.has(id) ? next.delete(id) : next.add(id)));\n return Array.from(next);\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 shiftOnPointerDownRef = useRef(false);\n const sessionRef = useRef<{ toggle: boolean; base: string[] }>({\n toggle: false,\n base: [],\n });\n\n useKanbanSelectorAutoScroll({ isSelectingRef, dragAreaId, autoScrollMargin });\n\n const { DragSelection } = useSelectionContainer({\n shouldStartSelecting: (target) =>\n shouldStartSelecting(target, ignoredSlots),\n onSelectionChange: (selection: SelectionBox) => {\n if (!context) return;\n const selectedIds = toUniqueStringIds(\n context.getSelectableItems().flatMap((item) => {\n const element = item.element;\n if (!element) return [];\n const rect = element.getBoundingClientRect();\n const intersects = boxesIntersect(selection, {\n ...rect,\n left: rect.left + window.scrollX,\n top: rect.top,\n width: rect.width,\n height: rect.height,\n });\n return intersects ? [String(item.id)] : [];\n })\n );\n const nextIds = sessionRef.current.toggle\n ? xorSelection(sessionRef.current.base, selectedIds)\n : selectedIds;\n if (haveSameIds(nextIds, context.getSelectedCardIds())) return;\n context.setSelectedCardIds(nextIds);\n },\n onSelectionEnd: () => {\n isSelectingRef.current = false;\n sessionRef.current = { toggle: false, base: [] };\n },\n onSelectionStart: () => {\n isSelectingRef.current = true;\n sessionRef.current = {\n toggle: shiftOnPointerDownRef.current,\n base: context?.getSelectedCardIds() ?? [],\n };\n },\n selectionProps: { style: SELECTION_STYLE },\n });\n\n useEffect(() => {\n if (!context) return;\n\n const handlePointerDown = (e: PointerEvent) => {\n shiftOnPointerDownRef.current = e.shiftKey;\n };\n\n const handlePointerUp = (e: PointerEvent) => {\n const target = e.target as Element | null;\n if (\n !isSelectingRef.current &&\n !context.getIsDragging() &&\n !target?.closest('[data-draggable=\"true\"]')\n ) {\n context.clearSelectedCards();\n }\n shiftOnPointerDownRef.current = false;\n };\n\n document.addEventListener('pointerdown', handlePointerDown);\n document.addEventListener('pointerup', handlePointerUp);\n\n return () => {\n document.removeEventListener('pointerdown', handlePointerDown);\n document.removeEventListener('pointerup', handlePointerUp);\n };\n }, [context]);\n\n if (!context) return null;\n\n return <DragSelection />;\n}\n","'use client';\n\nimport { useEffect } from 'react';\n\nimport { combine } from '@atlaskit/pragmatic-drag-and-drop/combine';\nimport {\n draggable,\n dropTargetForElements,\n} from '@atlaskit/pragmatic-drag-and-drop/element/adapter';\nimport type { UseKanbanColumnDnDProps } from './types';\n\nexport function useKanbanColumnDnD({\n columnId,\n elementRef,\n dragHandleRef,\n}: UseKanbanColumnDnDProps) {\n useEffect(() => {\n const element = elementRef.current;\n if (!element) return;\n\n return combine(\n draggable({\n element,\n dragHandle: dragHandleRef?.current ?? undefined,\n getInitialData: () => ({\n type: 'column',\n columnId: String(columnId),\n }),\n }),\n dropTargetForElements({\n element,\n canDrop: ({ source }) =>\n source.data.type === 'column' &&\n String(source.data.columnId) !== String(columnId),\n getData: () => ({\n type: 'column',\n columnId: String(columnId),\n }),\n })\n );\n }, [columnId, dragHandleRef, elementRef]);\n}\n"],"mappings":";;;;;;;;;;;;;;;;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,mBACP,UACA,OACA,SACA;CACA,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;EACxB,OAAO;EACP,UAAU;EACV,UAAU;EACV,WAAW;EACZ,CAAC;AAEF,QAAO;;AAGT,SAAS,oBAAoB,eAA4B,SAAiB;CACxE,MAAM,WAAW,cAAc,UAAU,KAAK;AAE9C,aAAY,UAAU;EACpB,eAAe;EACf,QAAQ;EACR,OAAO;EACP,UAAU;EACV,UAAU;EACV,WAAW;EACZ,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;CAC1C,MAAM,UAAU,GAAG,cAAc,uBAAuB,CAAC,MAAM;AAE/D,aAAY,MAAM;EAChB,UAAU;EACV,OAAO;EACP,UAAU;EACV,UAAU;EACX,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,OAAO,QAAQ,CAAC;GAC9D;AAEF,KAAI,CAAC,KAAK,kBACR,MAAK,YAAY,oBAAoB,eAAe,QAAQ,CAAC;AAG/D,QAAO;;;;;AC/ET,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;;;;;AC7EV,MAAM,6BAA6B;AACnC,MAAM,wBAAwB;AAC9B,MAAM,uBAAuB;AAC7B,MAAM,4BAA4B;AAElC,SAAS,uBAAuB,WAAmB;AAEjD,KAAI,CAAC,UAAU,WADA,oBACkB,CAAE,QAAO;AAC1C,QAAO,UAAU,MAAM,GAAc;;AAGvC,SAAS,wBAAwB,EAC/B,eACA,iBAIC;CACD,MAAM,aAAa,cAAc,uBAAuB;CAKxD,MAAM,iBAJgB,MAAM,KAC1B,cAAc,iBAA8B,8BAA4B,CACzE,CAEoC,QAAQ,gBAAgB;EAC3D,MAAM,SAAS,uBAAuB,YAAY,GAAG;AACrD,SAAO,UAAU,CAAC,cAAc,IAAI,OAAO;GAC3C;AAEF,KAAI,eAAe,WAAW,EAC5B,QAAO;EACL,GAAG,WAAW,OAAO,KAAK,IAAI,IAAI,WAAW,QAAQ,GAAI;EACzD,GAAG,WAAW,MAAM,KAAK,IAAI,IAAI,WAAW,SAAS,IAAK;EAC3D;CAGH,MAAM,eACJ,eAAe,eAAe,SAAS,IAAI,uBAAuB;AAEpE,QAAO;EACL,GAAG,cAAc,QAAQ,WAAW;EACpC,GAAG,cAAc,UAAU,WAAW,SAAS;EAChD;;AAGH,SAAgB,2BAA2B,EACzC,QACA,eACA,eACA,oBACA,oBACA,YACA,oBASC;AACD,KAAI,OAAO,WAAW,mCAAmC,CAAC,QACxD;CAGF,MAAM,aAAa,cAAc,cAAc,uBAAuB;CACtE,MAAM,cAAc,sBAAsB,IAAI,EAAE;CAChD,MAAM,gBAAgB,IAAI,IAAY,CACpC,GAAG,YAAY,IAAI,OAAO,EAC1B,OAAO,OAAO,CACf,CAAC;AAEF,KAAI,CAAC,WAAW,SAAS,CAAC,WAAW,OACnC;CAGF,MAAM,UAAU,iBAAiB;EAC/B;EACA;EACA;EACA;EACD,CAAC;AAEF,aAAY,SAAS;EACnB,UAAU;EACV,MAAM,GAAG,WAAW,KAAK;EACzB,KAAK,GAAG,WAAW,IAAI;EACvB,OAAO,GAAG,WAAW,MAAM;EAC3B,eAAe;EACf,QAAQ;EACR,QAAQ;EACR,iBAAiB;EACjB,YAAY;EACb,CAAC;AAEF,UAAS,KAAK,YAAY,QAAQ;CAElC,MAAM,cACJ,oBACA,wBAAwB;EACtB;EACA;EACD,CAAC;CAEJ,MAAM,UAAU,YAAY;CAC5B,MAAM,UAAU,YAAY;CAC5B,MAAM,aAAa,UAAU,WAAW;CACxC,MAAM,aAAa,UAAU,WAAW;CAExC,MAAM,YAAY,QAAQ,QACxB,CACE;EACE,WAAW;EACX,SAAS;EACV,EACD;EACE,WAAW,eAAe,WAAW,MAAM,WAAW;EACtD,SAAS;EACV,CACF,EACD;EACE,UAAU;EACV,QAAQ;EACR,MAAM;EACP,CACF;CAED,MAAM,gBAAgB;AACpB,MAAI,QAAQ,cACV,SAAQ,cAAc,YAAY,QAAQ;;AAI9C,WAAU,iBAAiB,UAAU,SAAS,EAAE,MAAM,MAAM,CAAC;AAC7D,WAAU,iBAAiB,UAAU,SAAS,EAAE,MAAM,MAAM,CAAC;;AAG/D,SAAS,wBAAwB,WAAwB,QAAoB;AAC3E,KAAI,OAAO,WAAW,mCAAmC,CAAC,SAAS;AACjE,UAAQ;AACR;;CAGF,MAAM,8BAAc,IAAI,KAAsB;AAK9C,CAJuB,MAAM,KAC3B,UAAU,iBAA8B,8BAA4B,CACrE,CAEc,SAAS,YAAY;AAClC,cAAY,IAAI,QAAQ,IAAI,QAAQ,uBAAuB,CAAC;GAC5D;AAEF,SAAQ;AAER,6BAA4B;AAK1B,EAJsB,MAAM,KAC1B,UAAU,iBAA8B,8BAA4B,CACrE,CAEa,SAAS,YAAY;GACjC,MAAM,SAAS,YAAY,IAAI,QAAQ,GAAG;AAC1C,OAAI,CAAC,OAAQ;GAEb,MAAM,QAAQ,QAAQ,uBAAuB;GAC7C,MAAM,KAAK,OAAO,OAAO,MAAM;GAC/B,MAAM,KAAK,OAAO,MAAM,MAAM;AAE9B,OAAI,KAAK,IAAI,GAAG,GAAG,MAAO,KAAK,IAAI,GAAG,GAAG,GACvC;AAGF,WAAQ,QACN,CACE,EAAE,WAAW,aAAa,GAAG,MAAM,GAAG,MAAM,EAC5C,EAAE,WAAW,mBAAmB,CACjC,EACD;IACE,UAAU;IACV,QAAQ;IACT,CACF;IACD;GACF;;AAGJ,SAAgB,+BAA+B,EAC7C,QACA,eACA,eACA,aACA,oBACA,sBAQC;CACD,MAAM,aAAa,cAAc,uBAAuB;AAExD,yBAAwB,eAAe,YAAY;AAEnD,6BAA4B;EAC1B,MAAM,mBAAmB,SAAS,eAChC,oBAAoB,SACrB;EACD,MAAM,kBACJ,4BAA4B,cACxB,iBAAiB,uBAAuB,GACxC,cAAc,uBAAuB;EAE3C,MAAM,KAAK,KAAK,IAAI,gBAAgB,OAAO,WAAW,KAAK;EAC3D,MAAM,KAAK,KAAK,IAAI,gBAAgB,MAAM,WAAW,IAAI;AACzD,MAAI,KAAK,6BAA6B,KAAK,0BACzC;AAGF,6BAA2B;GACzB;GACA;GACA;GACA;GACA;GACA;GACA,kBAAkB;IAChB,GAAG,gBAAgB;IACnB,GAAG,gBAAgB;IACpB;GACF,CAAC;GACF;;;;;AClOJ,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;;;;;AClFvD,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;KAC/B,MAAM,SAAS,OAAO,OAAO,KAAK,UAAU,GAAG;KAC/C,MAAM,iBAAiB,kBAAkB,aAAa,cAAc;KACpE,MAAM,aAAa,YAAY,MAC5B,SAAS,KAAK,KAAK,SAAS,cAC9B;AAED,SAAI,OAAO,mBAAmB,aAAa;MACzC,MAAM,gBACJ,YAAY,mBAAmB,cAC3B,WAAW,UACX,iBACE,SAAS,eACP,oBAAoB,iBACrB,GACD;AAER,UAAI,yBAAyB,aAAa;AACxC,sCAA+B;QAC7B;QACA,eAAe,OAAO;QACtB;QACA,mBAAmB;AACjB,kBAAS,QAAQ,eAAe;;QAElC;QACA,oBAAoB;QACrB,CAAC;AAEF,mBAAY;AACZ;;;AAIJ,cAAS,QAAQ,eAAe;AAChC,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;EACA;EACD,CAAC;AAEF,QACE,oBAAC;EAAkB,OAAO;YACxB,qBAAC;GACC,WAAW,GAAG,yBAAyB,UAAU;GACjD,IAAG;cAEF,CAAC,cAAc,iBACf;IACG;GACY;;;;;AC3axB,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;;;;;AC1CV,SAAgB,4BAA4B,EAC1C,gBACA,YACA,oBAKC;AACD,iBAAgB;EACd,MAAM,SAAS,OAAe,SAAiB,QAC7C,QAAQ,IAAI,KAAK,IAAI,OAAO,MAAM,QAAQ,GAAG,KAAK,IAAI,OAAO,CAAC,QAAQ;EAExE,MAAM,QACJ,OACA,OACA,KACA,QACA,OACG;AACH,OAAI,QAAQ,QAAQ,OAClB,SAAS,SAAS,QAAQ,WAAW,SAAU;AACjD,OAAI,QAAQ,MAAM,OAAQ,SAAS,SAAS,MAAM,WAAW,SAAU;AACvE,UAAO;;EAGT,MAAM,UAAU,OAA2B;AACzC,OAAI,CAAC,MAAM,OAAO,SAAS,mBAAmB,OAAO,SAAS,KAC5D,QAAO;IACL,MAAM;IACN,OAAO,OAAO;IACd,KAAK;IACL,QAAQ,OAAO;IAChB;GAGH,MAAM,OAAO,GAAG,uBAAuB;AACvC,UAAO;IACL,MAAM,KAAK,IAAI,GAAG,KAAK,KAAK;IAC5B,OAAO,KAAK,IAAI,OAAO,YAAY,KAAK,MAAM;IAC9C,KAAK,KAAK,IAAI,GAAG,KAAK,IAAI;IAC1B,QAAQ,KAAK,IAAI,OAAO,aAAa,KAAK,OAAO;IAClD;;EAGH,MAAM,kBAAkB,MAA0B,SAAoB;GACpE,IAAI,UAAU;AACd,UAAO,SAAS;IACd,MAAM,QAAQ,OAAO,iBAAiB,QAAQ;AAO9C,QALE,SAAS,MACL,gBAAgB,KAAK,MAAM,UAAU,IACrC,QAAQ,cAAc,QAAQ,cAC9B,gBAAgB,KAAK,MAAM,UAAU,IACrC,QAAQ,eAAe,QAAQ,aACtB,QAAO;AACtB,cAAU,QAAQ;;AAGpB,UAAO;;EAGT,IAAI,MAAM;EACV,IAAI,WAAW,YAAY,KAAK;EAChC,MAAM,UAAU;GAAE,GAAG;GAAG,GAAG;GAAG;EAC9B,IAAIC,QAMO;EAEX,MAAM,iBAAiB,MAAoB;AACzC,WAAQ,IAAI,EAAE;AACd,WAAQ,IAAI,EAAE;;EAGhB,MAAM,iBAAiB;GACrB,MAAM,YACJ,SAAS,eAAe,WAAW,EAAE,iBAAiB;GACxD,MAAM,aAAa,eAAe,WAAW,IAAI;GACjD,MAAM,aAAa,eAAe,WAAW,IAAI;GACjD,MAAM,aAAa,CAAC;AAEpB,UAAO;IACL;IACA;IACA;IACA,MAAM,aAAa,WAAW,cAAc,WAAW,cAAc;IACrE,MAAM,aACF,SAAS,gBAAgB,eAAe,OAAO,cAC/C,aACE,WAAW,eAAe,WAAW,eACrC;IACP;;EAGH,MAAM,QAAQ,QAAgB;GAC5B,MAAM,KAAK,MAAM;AACjB,cAAW;AAEX,OAAI,CAAC,eAAe,SAAS;AAC3B,YAAQ;AACR,UAAM,sBAAsB,KAAK;AACjC;;AAGF,aAAU,UAAU;GACpB,MAAM,cAAc;AACpB,OAAI,CAAC,aAAa;AAChB,UAAM,sBAAsB,KAAK;AACjC;;GAGF,MAAM,UAAU,OAAO,YAAY,WAAW;GAC9C,MAAM,UAAU,YAAY,aACxB;IAAE,KAAK;IAAG,QAAQ,OAAO;IAAa,GACtC,OAAO,YAAY,WAAW;GAElC,MAAM,KAAK,KACT,QAAQ,GACR,QAAQ,MACR,QAAQ,OACR,kBACA,GACD;GACD,MAAM,KAAK,KACT,QAAQ,GACR,QAAQ,KACR,QAAQ,QACR,kBACA,GACD;GAED,IAAI,YAAY;AAEhB,OAAI,MAAM,YAAY,cAAc,YAAY,OAAO,GAAG;IACxD,MAAM,SAAS,MACb,IACA,YAAY,WAAW,YACvB,YAAY,KACb;AACD,QAAI,QAAQ;AACV,iBAAY,WAAW,SAAS,QAAQ,EAAE;AAC1C,iBAAY;;;AAIhB,OAAI,MAAM,YAAY,OAAO,GAC3B;QAAI,YAAY,YAAY;KAE1B,MAAM,SAAS,MAAM,IADT,OAAO,WAAW,SAAS,gBAAgB,WACzB,YAAY,KAAK;AAC/C,SAAI,QAAQ;AACV,aAAO,SAAS,GAAG,OAAO;AAC1B,kBAAY;;eAEL,YAAY,YAAY;KACjC,MAAM,SAAS,MACb,IACA,YAAY,WAAW,WACvB,YAAY,KACb;AACD,SAAI,QAAQ;AACV,kBAAY,WAAW,SAAS,GAAG,OAAO;AAC1C,kBAAY;;;;AAKlB,OAAI,UACF,UAAS,KAAK,cACZ,IAAI,WAAW,aAAa;IAC1B,SAAS,QAAQ;IACjB,SAAS,QAAQ;IACjB,SAAS;IACT,YAAY;IACb,CAAC,CACH;AAGH,SAAM,sBAAsB,KAAK;;AAGnC,SAAO,iBAAiB,eAAe,eAAe,EAAE,SAAS,MAAM,CAAC;AACxE,QAAM,sBAAsB,KAAK;AAEjC,eAAa;AACX,UAAO,oBAAoB,eAAe,cAAc;AACxD,wBAAqB,IAAI;;IAE1B;EAAC;EAAkB;EAAY;EAAe,CAAC;;;;;ACtLpD,MAAM,uBAAuB;AAC7B,MAAM,6BAA6B;AACnC,MAAM,wBAAwB;CAC5B;CACA;CACA;CACA;CACA;CACD;AACD,MAAM,kBAAkB;CACtB,eAAe;CACf,UAAU;CACV,OAAO;CACP,QAAQ;CACT;AAGD,SAAS,qBACP,QACA,cACS;AACT,KAAI,EAAE,kBAAkB,SAAU,QAAO;AACzC,QAAO,EACL,OAAO,QAAQ,4BAA0B,IACzC,aAAa,MAAM,SAAS,OAAO,QAAQ,eAAe,KAAK,IAAI,CAAC;;AAGxE,MAAM,qBAAqB,QACzB,MAAM,KAAK,IAAI,IAAI,IAAI,IAAI,OAAO,CAAC,CAAC;AACtC,MAAM,eAAe,GAAa,MAAgB;AAChD,KAAI,EAAE,WAAW,EAAE,OAAQ,QAAO;CAClC,MAAM,MAAM,IAAI,IAAI,EAAE;AACtB,QAAO,EAAE,OAAO,OAAO,IAAI,IAAI,GAAG,CAAC;;AAErC,MAAM,gBAAgB,MAAgB,QAAkB;CACtD,MAAM,OAAO,IAAI,IAAI,KAAK;AAC1B,KAAI,SAAS,OAAQ,KAAK,IAAI,GAAG,GAAG,KAAK,OAAO,GAAG,GAAG,KAAK,IAAI,GAAG,CAAE;AACpE,QAAO,MAAM,KAAK,KAAK;;AAGzB,SAAgB,eAAe,EAC7B,aAAa,sBACb,mBAAmB,4BACnB,eAAe,yBACO;CACtB,MAAM,UAAU,qBAAqB;CACrC,MAAM,iBAAiB,OAAO,MAAM;CACpC,MAAM,wBAAwB,OAAO,MAAM;CAC3C,MAAM,aAAa,OAA4C;EAC7D,QAAQ;EACR,MAAM,EAAE;EACT,CAAC;AAEF,6BAA4B;EAAE;EAAgB;EAAY;EAAkB,CAAC;CAE7E,MAAM,EAAE,kBAAkB,sBAAsB;EAC9C,uBAAuB,WACrB,qBAAqB,QAAQ,aAAa;EAC5C,oBAAoB,cAA4B;AAC9C,OAAI,CAAC,QAAS;GACd,MAAM,cAAc,kBAClB,QAAQ,oBAAoB,CAAC,SAAS,SAAS;IAC7C,MAAM,UAAU,KAAK;AACrB,QAAI,CAAC,QAAS,QAAO,EAAE;IACvB,MAAM,OAAO,QAAQ,uBAAuB;AAQ5C,WAPmB,eAAe,WAAW;KAC3C,GAAG;KACH,MAAM,KAAK,OAAO,OAAO;KACzB,KAAK,KAAK;KACV,OAAO,KAAK;KACZ,QAAQ,KAAK;KACd,CAAC,GACkB,CAAC,OAAO,KAAK,GAAG,CAAC,GAAG,EAAE;KAC1C,CACH;GACD,MAAM,UAAU,WAAW,QAAQ,SAC/B,aAAa,WAAW,QAAQ,MAAM,YAAY,GAClD;AACJ,OAAI,YAAY,SAAS,QAAQ,oBAAoB,CAAC,CAAE;AACxD,WAAQ,mBAAmB,QAAQ;;EAErC,sBAAsB;AACpB,kBAAe,UAAU;AACzB,cAAW,UAAU;IAAE,QAAQ;IAAO,MAAM,EAAE;IAAE;;EAElD,wBAAwB;AACtB,kBAAe,UAAU;AACzB,cAAW,UAAU;IACnB,QAAQ,sBAAsB;IAC9B,MAAM,SAAS,oBAAoB,IAAI,EAAE;IAC1C;;EAEH,gBAAgB,EAAE,OAAO,iBAAiB;EAC3C,CAAC;AAEF,iBAAgB;AACd,MAAI,CAAC,QAAS;EAEd,MAAM,qBAAqB,MAAoB;AAC7C,yBAAsB,UAAU,EAAE;;EAGpC,MAAM,mBAAmB,MAAoB;GAC3C,MAAM,SAAS,EAAE;AACjB,OACE,CAAC,eAAe,WAChB,CAAC,QAAQ,eAAe,IACxB,CAAC,QAAQ,QAAQ,4BAA0B,CAE3C,SAAQ,oBAAoB;AAE9B,yBAAsB,UAAU;;AAGlC,WAAS,iBAAiB,eAAe,kBAAkB;AAC3D,WAAS,iBAAiB,aAAa,gBAAgB;AAEvD,eAAa;AACX,YAAS,oBAAoB,eAAe,kBAAkB;AAC9D,YAAS,oBAAoB,aAAa,gBAAgB;;IAE3D,CAAC,QAAQ,CAAC;AAEb,KAAI,CAAC,QAAS,QAAO;AAErB,QAAO,oBAAC,kBAAgB;;;;;AC9H1B,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,4 +1,4 @@
1
- import * as react_jsx_runtime0 from "react/jsx-runtime";
1
+ import * as react_jsx_runtime7 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_runtime0.JSX.Element;
13
+ }: PageHeaderProps): react_jsx_runtime7.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_runtime2 from "react/jsx-runtime";
2
+ import * as react_jsx_runtime5 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_runtime2.JSX.Element;
79
+ }): react_jsx_runtime5.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_runtime2.JSX.Element;
99
+ }: RemoteSelectorQueryProps<T>): react_jsx_runtime5.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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "maquinaweb-ui",
3
- "version": "2.57.0",
3
+ "version": "2.57.2",
4
4
  "description": "A minimal React component library",
5
5
  "type": "module",
6
6
  "sideEffects": false,
@@ -48,7 +48,7 @@
48
48
  "README.md"
49
49
  ],
50
50
  "scripts": {
51
- "dev": "concurrently \"cosmos --expose-imports\" \"next dev\"",
51
+ "dev": "concurrently \"cosmos --expose-imports\" \"next dev --port 3421\"",
52
52
  "build": "tsdown && bun run postbuild",
53
53
  "postbuild": "bun scripts/update-exports.ts",
54
54
  "build:vercel": "cosmos-export --expose-imports && next build && cp -R ./out/_next ./cosmos-export && cp -R ./out/cosmos ./cosmos-export",