{"version":3,"sources":["../src/core/cell.ts","../src/core/row.ts"],"names":[],"mappings":"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","file":"chunk-LFXKTTCP.cjs","sourcesContent":["// @zvndev/yable-core — Cell Model\n\nimport type {\n  RowData,\n  Cell,\n  Column,\n  ColumnDef,\n  ColumnDefExtensions,\n  Row,\n  Table,\n  CellContext,\n} from '../types'\n\nexport function createCell<TData extends RowData, TValue = unknown>(\n  table: Table<TData>,\n  row: Row<TData>,\n  column: Column<TData, TValue>,\n  columnId: string,\n): Cell<TData, TValue> {\n  const cell: Cell<TData, TValue> = {\n    id: `${row.id}_${columnId}`,\n    row,\n    column,\n\n    getValue: () => {\n      // Check for formula computed value first\n      const rawValue = row.getValue(columnId)\n      if (\n        typeof rawValue === 'string' &&\n        rawValue.startsWith('=') &&\n        typeof table.getFormula === 'function'\n      ) {\n        // Formula cell: get computed value from pending values\n        const pendingValue = table.getPendingValue(row.id, columnId)\n        if (pendingValue !== undefined) {\n          return pendingValue as TValue\n        }\n      }\n      return rawValue as TValue\n    },\n\n    renderValue: () => {\n      return cell.getValue()\n    },\n\n    getContext: (): CellContext<TData, TValue> => ({\n      table,\n      column,\n      row,\n      cell,\n      getValue: cell.getValue,\n      renderValue: cell.renderValue,\n    }),\n\n    getIsEditing: () => {\n      const editing = table.getState().editing\n      return editing?.activeCell?.rowId === row.id && editing?.activeCell?.columnId === columnId\n    },\n    getIsAlwaysEditable: () => {\n      return !!column.columnDef.meta?.alwaysEditable\n    },\n\n    getRowSpan: () => {\n      // Row span is resolved externally via resolveRowSpans and\n      // consumed by the renderer. This method provides a hook\n      // for the column def's rowSpan callback if present.\n      const rowSpanFn = (\n        column.columnDef as ColumnDef<TData, TValue> & ColumnDefExtensions<TData, TValue>\n      ).rowSpan\n      if (typeof rowSpanFn === 'function') {\n        const rows = table.getRowModel().rows\n        const rowIndex = rows.findIndex((r) => r.id === row.id)\n        if (rowIndex >= 0) {\n          // Wrap user-supplied rowSpanFn callback in try/catch so a\n          // throwing implementation cannot crash the renderer.\n          try {\n            return rowSpanFn(row, rows, rowIndex)\n          } catch (e) {\n            console.error('[yable] rowSpan threw', e)\n            return undefined\n          }\n        }\n      }\n      return undefined\n    },\n  }\n\n  return cell\n}\n","// @zvndev/yable-core — Row Model\n\nimport type { RowData, Row, Table, RowPinningPosition } from '../types'\nimport { createCell } from './cell'\n\n/** Tree data metadata attached to rows by treeData.ts via flattenTree. */\ninterface TreeRowMeta {\n  _treeDepth?: number\n  _isLeaf?: boolean\n}\n\nexport function createRow<TData extends RowData>(\n  table: Table<TData>,\n  id: string,\n  original: TData,\n  rowIndex: number,\n  depth: number,\n  subRows?: Row<TData>[],\n  parentId?: string,\n): Row<TData> {\n  const row: Row<TData> = {\n    id,\n    index: rowIndex,\n    original,\n    depth,\n    parentId,\n    subRows: subRows ?? [],\n\n    // Value access\n    getValue: <TValue = unknown>(columnId: string): TValue => {\n      const column = table.getColumn(columnId)\n      if (!column?.accessorFn) return undefined as TValue\n      // T1-09: Wrap accessorFn in try-catch\n      try {\n        return column.accessorFn(original, rowIndex) as TValue\n      } catch (err) {\n        console.error(`[yable E009] accessorFn threw for column \"${columnId}\", row \"${id}\":`, err)\n        return undefined as TValue\n      }\n    },\n    renderValue: <TValue = unknown>(columnId: string): TValue => {\n      return row.getValue(columnId)\n    },\n    getAllCells: () => {\n      return table.getAllLeafColumns().map((column) => createCell(table, row, column, column.id))\n    },\n    getVisibleCells: () => {\n      return table\n        .getVisibleFlatColumns()\n        .map((column) => createCell(table, row, column, column.id))\n    },\n    getLeftVisibleCells: () => {\n      return table\n        .getLeftVisibleLeafColumns()\n        .map((column) => createCell(table, row, column, column.id))\n    },\n    getRightVisibleCells: () => {\n      return table\n        .getRightVisibleLeafColumns()\n        .map((column) => createCell(table, row, column, column.id))\n    },\n    getCenterVisibleCells: () => {\n      return table\n        .getCenterVisibleLeafColumns()\n        .map((column) => createCell(table, row, column, column.id))\n    },\n\n    // Selection\n    getIsSelected: () => {\n      return table.getState().rowSelection?.[id] ?? false\n    },\n    getIsSomeSelected: () => {\n      if (row.subRows.length === 0) return false\n      const allSelected = row.subRows.every((sub) => sub.getIsSelected())\n      if (allSelected) return false\n      return row.subRows.some((sub) => sub.getIsSelected() || sub.getIsSomeSelected())\n    },\n    getIsAllSubRowsSelected: () => {\n      if (row.subRows.length === 0) return false\n      return row.subRows.every((sub) => sub.getIsSelected())\n    },\n    getCanSelect: () => {\n      const opts = table.options\n      if (typeof opts.enableRowSelection === 'function') {\n        return opts.enableRowSelection(row)\n      }\n      return opts.enableRowSelection !== false\n    },\n    getCanMultiSelect: () => {\n      return table.options.enableMultiRowSelection !== false\n    },\n    getCanSelectSubRows: () => {\n      return table.options.enableSubRowSelection !== false\n    },\n    toggleSelected: (value?: boolean, opts?: { selectChildren?: boolean }) => {\n      const isSelected = value ?? !row.getIsSelected()\n      table.setRowSelection((old) => {\n        const next = { ...old }\n        if (isSelected) {\n          next[id] = true\n        } else {\n          delete next[id]\n        }\n\n        if (opts?.selectChildren !== false && row.subRows.length > 0) {\n          for (const subRow of row.subRows) {\n            if (isSelected) {\n              next[subRow.id] = true\n            } else {\n              delete next[subRow.id]\n            }\n          }\n        }\n\n        return next\n      })\n    },\n    getToggleSelectedHandler: () => {\n      return (_e: unknown) => {\n        row.toggleSelected()\n      }\n    },\n\n    // Expanding\n    getIsExpanded: () => {\n      const expanded = table.getState().expanded\n      if (expanded === true) return true\n      return (expanded as Record<string, boolean>)?.[id] ?? false\n    },\n    getCanExpand: () => {\n      return row.subRows.length > 0 || (table.options.getRowCanExpand?.(row) ?? false)\n    },\n    getIsGrouped: () => {\n      return !!row.groupingColumnId\n    },\n    toggleExpanded: (expanded?: boolean) => {\n      table.setExpanded((old) => {\n        const prev = old === true ? {} : { ...(old as Record<string, boolean>) }\n        const isExpanded = expanded ?? !row.getIsExpanded()\n        if (isExpanded) {\n          prev[id] = true\n        } else {\n          delete prev[id]\n        }\n        return prev\n      })\n    },\n    getToggleExpandedHandler: () => {\n      return (_e: unknown) => {\n        row.toggleExpanded()\n      }\n    },\n\n    // Pinning\n    getIsPinned: () => {\n      const pinning = table.getState().rowPinning\n      if (pinning?.top?.includes(id)) return 'top'\n      if (pinning?.bottom?.includes(id)) return 'bottom'\n      return false\n    },\n    getCanPin: () => {\n      return table.options.enableRowPinning !== false\n    },\n    pin: (\n      position: RowPinningPosition,\n      _includeLeafRows?: boolean,\n      _includeParentRows?: boolean,\n    ) => {\n      table.setRowPinning((old) => {\n        const top = (old.top ?? []).filter((r) => r !== id)\n        const bottom = (old.bottom ?? []).filter((r) => r !== id)\n\n        if (position === 'top') top.push(id)\n        if (position === 'bottom') bottom.push(id)\n\n        return { top, bottom }\n      })\n    },\n\n    // Grouping\n    groupingColumnId: undefined,\n    groupingValue: undefined,\n    getGroupingValue: (columnId: string) => {\n      return row.getValue(columnId)\n    },\n    getLeafRows: () => {\n      const leaves: Row<TData>[] = []\n      const collect = (rows: Row<TData>[]) => {\n        for (const r of rows) {\n          if (r.subRows.length === 0) {\n            leaves.push(r)\n          } else {\n            collect(r.subRows)\n          }\n        }\n      }\n      collect(row.subRows)\n      return leaves\n    },\n\n    // Tree data extensions\n    getParentRow: () => {\n      if (!parentId) return undefined\n      try {\n        return table.getRow(parentId, true)\n      } catch {\n        return undefined\n      }\n    },\n    getTreeDepth: () => {\n      return (row as Row<TData> & TreeRowMeta)._treeDepth ?? depth\n    },\n    isLeaf: () => {\n      return (row as Row<TData> & TreeRowMeta)._isLeaf ?? row.subRows.length === 0\n    },\n  }\n\n  return row\n}\n"]}