{"version":3,"sources":["../src/features/rowDragging.ts"],"names":[],"mappings":"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","file":"chunk-7T32GIF5.cjs","sourcesContent":["// @zvndev/yable-core — Row Dragging Feature\n// Provides row reorder logic and drag state management.\n\nimport type { RowData, Table, Updater, YableEventMap } from '../types'\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface RowDragState {\n  /** The row id currently being dragged, or null */\n  draggingRowId: string | null\n  /** The row id that is the current drop target (row being hovered over) */\n  overRowId: string | null\n  /** Position of the drop indicator relative to the target row */\n  dropPosition: 'before' | 'after' | null\n}\n\nexport interface RowDragStartEvent<TData extends RowData> {\n  rowId: string\n  rowIndex: number\n  row: import('../types').Row<TData>\n}\n\nexport interface RowDragEndEvent<TData extends RowData> {\n  rowId: string\n  row: import('../types').Row<TData>\n  cancelled: boolean\n}\n\nexport interface RowReorderEvent {\n  fromIndex: number\n  toIndex: number\n  rowId: string\n}\n\n// ---------------------------------------------------------------------------\n// Initial State\n// ---------------------------------------------------------------------------\n\nexport function getInitialRowDragState(): RowDragState {\n  return {\n    draggingRowId: null,\n    overRowId: null,\n    dropPosition: null,\n  }\n}\n\n// ---------------------------------------------------------------------------\n// moveRow — core reorder logic\n// ---------------------------------------------------------------------------\n\n/**\n * Returns a new data array with the row at `fromIndex` moved to `toIndex`.\n * Does NOT mutate the original array.\n */\nexport function moveRow<TData>(data: TData[], fromIndex: number, toIndex: number): TData[] {\n  if (fromIndex === toIndex) return data\n  if (fromIndex < 0 || fromIndex >= data.length) return data\n  if (toIndex < 0 || toIndex >= data.length) return data\n\n  const next = [...data]\n  const [removed] = next.splice(fromIndex, 1)\n  next.splice(toIndex, 0, removed!)\n  return next\n}\n\n// ---------------------------------------------------------------------------\n// Table integration helpers\n// ---------------------------------------------------------------------------\n\n/**\n * Wire row dragging capabilities onto a table instance.\n * Call this after createTable() to add drag methods and state.\n */\nexport function createRowDragIntegration<TData extends RowData>(\n  table: Table<TData>,\n  options: {\n    onReorder?: (data: TData[], event: RowReorderEvent) => void\n    getData: () => TData[]\n    setData: (data: TData[]) => void\n  },\n): {\n  getRowDragState: () => RowDragState\n  setRowDragState: (updater: Updater<RowDragState>) => void\n  startDrag: (rowId: string) => void\n  updateDragOver: (overRowId: string, position: 'before' | 'after') => void\n  endDrag: () => void\n  cancelDrag: () => void\n  moveRow: (fromIndex: number, toIndex: number) => void\n} {\n  let dragState = getInitialRowDragState()\n\n  const getRowDragState = () => dragState\n\n  const setRowDragState = (updater: Updater<RowDragState>) => {\n    if (typeof updater === 'function') {\n      dragState = (updater as (prev: RowDragState) => RowDragState)(dragState)\n    } else {\n      dragState = updater\n    }\n  }\n\n  const startDrag = (rowId: string) => {\n    const row = table.getRow(rowId, true)\n    dragState = {\n      draggingRowId: rowId,\n      overRowId: null,\n      dropPosition: null,\n    }\n    table.events.emit('row:drag:start', {\n      rowId,\n      rowIndex: row.index,\n      row,\n    } as YableEventMap<TData>['row:drag:start'])\n  }\n\n  const updateDragOver = (overRowId: string, position: 'before' | 'after') => {\n    dragState = {\n      ...dragState,\n      overRowId,\n      dropPosition: position,\n    }\n  }\n\n  const endDrag = () => {\n    const { draggingRowId, overRowId, dropPosition } = dragState\n    if (!draggingRowId || !overRowId || !dropPosition) {\n      cancelDrag()\n      return\n    }\n\n    const data = options.getData()\n    const fromIndex = data.findIndex((_, i) => {\n      const rowId = table.options.getRowId ? table.options.getRowId(data[i]!, i) : String(i)\n      return rowId === draggingRowId\n    })\n\n    const toIndex = data.findIndex((_, i) => {\n      const rowId = table.options.getRowId ? table.options.getRowId(data[i]!, i) : String(i)\n      return rowId === overRowId\n    })\n\n    if (fromIndex === -1 || toIndex === -1) {\n      cancelDrag()\n      return\n    }\n\n    const adjustedToIndex = dropPosition === 'after' ? toIndex + 1 : toIndex\n    const finalToIndex = fromIndex < adjustedToIndex ? adjustedToIndex - 1 : adjustedToIndex\n\n    const newData = moveRow(data, fromIndex, finalToIndex)\n    options.setData(newData)\n\n    const reorderEvent: RowReorderEvent = {\n      fromIndex,\n      toIndex: finalToIndex,\n      rowId: draggingRowId,\n    }\n\n    options.onReorder?.(newData, reorderEvent)\n    table.events.emit('row:reorder', reorderEvent)\n\n    const row = table.getRow(draggingRowId, true)\n    table.events.emit('row:drag:end', {\n      rowId: draggingRowId,\n      row,\n      cancelled: false,\n    } as YableEventMap<TData>['row:drag:end'])\n\n    dragState = getInitialRowDragState()\n  }\n\n  const cancelDrag = () => {\n    const { draggingRowId } = dragState\n    if (draggingRowId) {\n      try {\n        const row = table.getRow(draggingRowId, true)\n        table.events.emit('row:drag:end', {\n          rowId: draggingRowId,\n          row,\n          cancelled: true,\n        } as YableEventMap<TData>['row:drag:end'])\n      } catch {\n        // Row may no longer exist\n      }\n    }\n    dragState = getInitialRowDragState()\n  }\n\n  const moveRowFn = (fromIndex: number, toIndex: number) => {\n    const data = options.getData()\n    const newData = moveRow(data, fromIndex, toIndex)\n    options.setData(newData)\n\n    const rowId = table.options.getRowId\n      ? table.options.getRowId(data[fromIndex]!, fromIndex)\n      : String(fromIndex)\n\n    table.events.emit('row:reorder', {\n      fromIndex,\n      toIndex,\n      rowId,\n    })\n  }\n\n  return {\n    getRowDragState,\n    setRowDragState,\n    startDrag,\n    updateDragOver,\n    endDrag,\n    cancelDrag,\n    moveRow: moveRowFn,\n  }\n}\n"]}