{"version":3,"sources":["../src/aggregationFns.ts","../src/features/pivot.ts"],"names":["createRow"],"mappings":"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","file":"chunk-3YEBVTKM.cjs","sourcesContent":["// @zvndev/yable-core — Built-in aggregation functions\n\nimport type { RowData, Row, AggregationFn } from './types'\n\nfunction getLeafValues<TData extends RowData>(columnId: string, leafRows: Row<TData>[]): unknown[] {\n  return leafRows.map((row) => row.getValue(columnId))\n}\n\nfunction getNumericValues<TData extends RowData>(\n  columnId: string,\n  leafRows: Row<TData>[],\n): number[] {\n  return getLeafValues(columnId, leafRows)\n    .map(Number)\n    .filter((v) => !isNaN(v))\n}\n\nexport const aggregationFns = {\n  sum: <TData extends RowData>(\n    columnId: string,\n    leafRows: Row<TData>[],\n    _childRows: Row<TData>[],\n  ): number => {\n    return getNumericValues(columnId, leafRows).reduce((sum, val) => sum + val, 0)\n  },\n\n  min: <TData extends RowData>(\n    columnId: string,\n    leafRows: Row<TData>[],\n    _childRows: Row<TData>[],\n  ): number => {\n    const nums = getNumericValues(columnId, leafRows)\n    return nums.length ? Math.min(...nums) : 0\n  },\n\n  max: <TData extends RowData>(\n    columnId: string,\n    leafRows: Row<TData>[],\n    _childRows: Row<TData>[],\n  ): number => {\n    const nums = getNumericValues(columnId, leafRows)\n    return nums.length ? Math.max(...nums) : 0\n  },\n\n  extent: <TData extends RowData>(\n    columnId: string,\n    leafRows: Row<TData>[],\n    _childRows: Row<TData>[],\n  ): [number, number] => {\n    const nums = getNumericValues(columnId, leafRows)\n    return nums.length ? [Math.min(...nums), Math.max(...nums)] : [0, 0]\n  },\n\n  mean: <TData extends RowData>(\n    columnId: string,\n    leafRows: Row<TData>[],\n    _childRows: Row<TData>[],\n  ): number => {\n    const nums = getNumericValues(columnId, leafRows)\n    return nums.length ? nums.reduce((s, v) => s + v, 0) / nums.length : 0\n  },\n\n  median: <TData extends RowData>(\n    columnId: string,\n    leafRows: Row<TData>[],\n    _childRows: Row<TData>[],\n  ): number => {\n    const nums = getNumericValues(columnId, leafRows).sort((a, b) => a - b)\n    if (nums.length === 0) return 0\n    const mid = Math.floor(nums.length / 2)\n    return nums.length % 2 !== 0 ? nums[mid]! : (nums[mid - 1]! + nums[mid]!) / 2\n  },\n\n  unique: <TData extends RowData>(\n    columnId: string,\n    leafRows: Row<TData>[],\n    _childRows: Row<TData>[],\n  ): unknown[] => {\n    return [...new Set(getLeafValues(columnId, leafRows))]\n  },\n\n  uniqueCount: <TData extends RowData>(\n    columnId: string,\n    leafRows: Row<TData>[],\n    _childRows: Row<TData>[],\n  ): number => {\n    return new Set(getLeafValues(columnId, leafRows)).size\n  },\n\n  count: <TData extends RowData>(\n    _columnId: string,\n    leafRows: Row<TData>[],\n    _childRows: Row<TData>[],\n  ): number => {\n    return leafRows.length\n  },\n} as const satisfies Record<string, AggregationFn<RowData>>\n\nexport type BuiltInAggregationFn = keyof typeof aggregationFns\n","// @zvndev/yable-core — Pivot Mode Feature\n// Full pivot tables with auto-generated columns.\n// User selects row fields, column fields, value fields (with aggregation).\n// Generates cross-tabulation: row groups -> rows, column groups -> dynamic columns.\n\nimport type { RowData, Row, Table, RowModel, ColumnDef, AggregationFn } from '../types'\nimport { aggregationFns } from '../aggregationFns'\nimport { createRow } from '../core/row'\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface PivotFieldConfig {\n  /** The column/field id */\n  field: string\n  /** Optional label override for display */\n  label?: string\n}\n\nexport interface PivotValueConfig {\n  /** The column/field id to aggregate */\n  field: string\n  /** Aggregation function name or custom function */\n  aggregation: keyof typeof aggregationFns | AggregationFn<RowData>\n  /** Optional label override */\n  label?: string\n}\n\nexport interface PivotConfig {\n  /** Fields to use as row groups (left-side grouping) */\n  rowFields: PivotFieldConfig[]\n  /** Fields to use as column groups (generate dynamic columns) */\n  columnFields: PivotFieldConfig[]\n  /** Fields to aggregate as values in the cross-tab cells */\n  valueFields: PivotValueConfig[]\n  /** Whether to show row subtotals */\n  showRowSubtotals?: boolean\n  /** Whether to show column subtotals */\n  showColumnSubtotals?: boolean\n  /** Whether to show grand total row */\n  showGrandTotal?: boolean\n}\n\nexport interface PivotState {\n  /** Whether pivot mode is active */\n  enabled: boolean\n  /** Pivot configuration */\n  config: PivotConfig\n  /** Expanded row groups (by path key) */\n  expandedRowGroups: Record<string, boolean>\n  /** Expanded column groups (by path key) */\n  expandedColumnGroups: Record<string, boolean>\n}\n\nexport interface PivotColumn {\n  /** Unique column id */\n  id: string\n  /** Display header */\n  header: string\n  /** Path of column group values */\n  path: string[]\n  /** Which value field this column represents */\n  valueField: string\n  /** Aggregation function for this column */\n  aggregation: keyof typeof aggregationFns | AggregationFn<RowData>\n  /** Whether this is a subtotal column */\n  isSubtotal?: boolean\n}\n\nexport interface PivotRow {\n  /** Unique row id */\n  id: string\n  /** Row group path */\n  path: string[]\n  /** Display label for the row group */\n  label: string\n  /** Depth in the row grouping hierarchy */\n  depth: number\n  /** Whether this row has children (more specific groupings) */\n  hasChildren: boolean\n  /** Whether this is a subtotal row */\n  isSubtotal?: boolean\n  /** Whether this is the grand total row */\n  isGrandTotal?: boolean\n  /** Aggregated values keyed by pivot column id */\n  values: Record<string, unknown>\n  /** Original data rows that feed into this pivot row */\n  sourceRows: unknown[]\n}\n\n// ---------------------------------------------------------------------------\n// PivotEngine\n// ---------------------------------------------------------------------------\n\nexport class PivotEngine<TData extends RowData> {\n  private config: PivotConfig\n  private data: TData[]\n  private getValueFn: (row: TData, field: string) => unknown\n\n  constructor(\n    data: TData[],\n    config: PivotConfig,\n    getValueFn: (row: TData, field: string) => unknown,\n  ) {\n    this.data = data\n    this.config = config\n    this.getValueFn = getValueFn\n  }\n\n  // -----------------------------------------------------------------------\n  // Generate pivot columns\n  // -----------------------------------------------------------------------\n\n  generateColumns(): PivotColumn[] {\n    const { columnFields, valueFields } = this.config\n    const columns: PivotColumn[] = []\n\n    if (columnFields.length === 0) {\n      // No column fields — just create value columns directly\n      for (const vf of valueFields) {\n        columns.push({\n          id: `pivot_val_${vf.field}`,\n          header:\n            vf.label ??\n            `${vf.field} (${typeof vf.aggregation === 'string' ? vf.aggregation : 'custom'})`,\n          path: [],\n          valueField: vf.field,\n          aggregation: vf.aggregation,\n        })\n      }\n      return columns\n    }\n\n    // Collect unique column group paths\n    const columnPaths = this.getUniqueColumnPaths()\n\n    for (const path of columnPaths) {\n      for (const vf of valueFields) {\n        const pathLabel = path.join(' / ')\n        const aggLabel = typeof vf.aggregation === 'string' ? vf.aggregation : 'custom'\n        columns.push({\n          id: `pivot_${path.join('_')}_${vf.field}`,\n          header:\n            valueFields.length > 1\n              ? `${pathLabel} - ${vf.label ?? vf.field} (${aggLabel})`\n              : pathLabel,\n          path,\n          valueField: vf.field,\n          aggregation: vf.aggregation,\n        })\n      }\n    }\n\n    // Add subtotal columns if configured\n    if (this.config.showColumnSubtotals && columnFields.length > 1) {\n      for (const vf of valueFields) {\n        columns.push({\n          id: `pivot_subtotal_${vf.field}`,\n          header: `Total - ${vf.label ?? vf.field}`,\n          path: [],\n          valueField: vf.field,\n          aggregation: vf.aggregation,\n          isSubtotal: true,\n        })\n      }\n    }\n\n    return columns\n  }\n\n  // -----------------------------------------------------------------------\n  // Generate pivot rows\n  // -----------------------------------------------------------------------\n\n  generateRows(): PivotRow[] {\n    const { rowFields } = this.config\n    const pivotColumns = this.generateColumns()\n\n    if (rowFields.length === 0) {\n      // No row fields — single row with all data\n      const values: Record<string, unknown> = {}\n      for (const col of pivotColumns) {\n        values[col.id] = this.aggregate(this.filterByColumnPath(this.data, col.path), col)\n      }\n\n      return [\n        {\n          id: 'pivot_all',\n          path: [],\n          label: 'All',\n          depth: 0,\n          hasChildren: false,\n          values,\n          sourceRows: this.data,\n        },\n      ]\n    }\n\n    const rows: PivotRow[] = []\n    this.buildRowGroups(this.data, rowFields, 0, [], pivotColumns, rows)\n\n    // Add grand total\n    if (this.config.showGrandTotal) {\n      const values: Record<string, unknown> = {}\n      for (const col of pivotColumns) {\n        values[col.id] = this.aggregate(this.filterByColumnPath(this.data, col.path), col)\n      }\n\n      rows.push({\n        id: 'pivot_grand_total',\n        path: ['__grand_total__'],\n        label: 'Grand Total',\n        depth: 0,\n        hasChildren: false,\n        isGrandTotal: true,\n        values,\n        sourceRows: this.data,\n      })\n    }\n\n    return rows\n  }\n\n  // -----------------------------------------------------------------------\n  // Private helpers\n  // -----------------------------------------------------------------------\n\n  private getUniqueColumnPaths(): string[][] {\n    const { columnFields } = this.config\n    const pathSet = new Set<string>()\n    const paths: string[][] = []\n\n    for (const row of this.data) {\n      const path = columnFields.map((cf) => String(this.getValueFn(row, cf.field) ?? ''))\n      const key = path.join('|||')\n      if (!pathSet.has(key)) {\n        pathSet.add(key)\n        paths.push(path)\n      }\n    }\n\n    // Sort paths lexicographically\n    paths.sort((a, b) => {\n      for (let i = 0; i < Math.max(a.length, b.length); i++) {\n        const cmp = (a[i] ?? '').localeCompare(b[i] ?? '')\n        if (cmp !== 0) return cmp\n      }\n      return 0\n    })\n\n    return paths\n  }\n\n  private buildRowGroups(\n    data: TData[],\n    rowFields: PivotFieldConfig[],\n    depth: number,\n    parentPath: string[],\n    pivotColumns: PivotColumn[],\n    result: PivotRow[],\n  ): void {\n    if (depth >= rowFields.length) return\n\n    const field = rowFields[depth]!\n    const groups = new Map<string, TData[]>()\n\n    for (const item of data) {\n      const value = String(this.getValueFn(item, field.field) ?? '')\n      if (!groups.has(value)) {\n        groups.set(value, [])\n      }\n      groups.get(value)!.push(item)\n    }\n\n    // Sort group keys\n    const sortedKeys = [...groups.keys()].sort()\n\n    for (const key of sortedKeys) {\n      const groupData = groups.get(key)!\n      const path = [...parentPath, key]\n      const hasMoreFields = depth < rowFields.length - 1\n\n      // Aggregate values for this row group\n      const values: Record<string, unknown> = {}\n      for (const col of pivotColumns) {\n        // Filter data by column path if applicable\n        const filteredData = this.filterByColumnPath(groupData, col.path)\n        values[col.id] = this.aggregate(filteredData, col)\n      }\n\n      result.push({\n        id: `pivot_row_${path.join('_')}`,\n        path,\n        label: key,\n        depth,\n        hasChildren: hasMoreFields,\n        values,\n        sourceRows: groupData,\n      })\n\n      // Recurse into sub-groups\n      if (hasMoreFields) {\n        this.buildRowGroups(groupData, rowFields, depth + 1, path, pivotColumns, result)\n\n        // Add subtotal row\n        if (this.config.showRowSubtotals) {\n          const subtotalValues: Record<string, unknown> = {}\n          for (const col of pivotColumns) {\n            const filteredData = this.filterByColumnPath(groupData, col.path)\n            subtotalValues[col.id] = this.aggregate(filteredData, col)\n          }\n\n          result.push({\n            id: `pivot_subtotal_${path.join('_')}`,\n            path: [...path, '__subtotal__'],\n            label: `${key} Total`,\n            depth,\n            hasChildren: false,\n            isSubtotal: true,\n            values: subtotalValues,\n            sourceRows: groupData,\n          })\n        }\n      }\n    }\n  }\n\n  private filterByColumnPath(data: TData[], columnPath: string[]): TData[] {\n    if (columnPath.length === 0) return data\n\n    const { columnFields } = this.config\n    return data.filter((item) => {\n      for (let i = 0; i < columnPath.length && i < columnFields.length; i++) {\n        const value = String(this.getValueFn(item, columnFields[i]!.field) ?? '')\n        if (value !== columnPath[i]) return false\n      }\n      return true\n    })\n  }\n\n  private aggregate(data: TData[], pivotCol: PivotColumn): unknown {\n    if (data.length === 0) return null\n\n    const { aggregation, valueField } = pivotCol\n\n    if (typeof aggregation === 'function') {\n      // Custom aggregation function — adapt the signature\n      // Cast needed: AggregationFn<RowData> expects Row<RowData>[] but Row<TData> is structurally compatible at runtime\n      return aggregation(\n        valueField,\n        [] as unknown as Row<RowData>[],\n        [] as unknown as Row<RowData>[],\n      )\n    }\n\n    // Use built-in aggregation function\n    const aggFn = aggregationFns[aggregation as keyof typeof aggregationFns]\n    if (!aggFn) return null\n\n    // Create mock rows to pass to aggregation fn\n    const mockRows = data.map((item, i) => ({\n      id: String(i),\n      index: i,\n      original: item,\n      depth: 0,\n      subRows: [],\n      getValue: (colId: string) => this.getValueFn(item, colId),\n      renderValue: (colId: string) => this.getValueFn(item, colId),\n      getAllCells: () => [],\n      getVisibleCells: () => [],\n      getLeftVisibleCells: () => [],\n      getRightVisibleCells: () => [],\n      getCenterVisibleCells: () => [],\n      getIsSelected: () => false,\n      getIsSomeSelected: () => false,\n      getIsAllSubRowsSelected: () => false,\n      getCanSelect: () => false,\n      getCanMultiSelect: () => false,\n      getCanSelectSubRows: () => false,\n      toggleSelected: () => {},\n      getToggleSelectedHandler: () => () => {},\n      getIsExpanded: () => false,\n      getCanExpand: () => false,\n      getIsGrouped: () => false,\n      toggleExpanded: () => {},\n      getToggleExpandedHandler: () => () => {},\n      getIsPinned: () => false as const,\n      getCanPin: () => false,\n      pin: () => {},\n      getGroupingValue: (colId: string) => this.getValueFn(item, colId),\n      getLeafRows: () => [],\n    })) as unknown as Row<TData>[]\n\n    return aggFn(valueField, mockRows, mockRows)\n  }\n}\n\n// ---------------------------------------------------------------------------\n// getPivotRowModel — integrates with table pipeline\n// ---------------------------------------------------------------------------\n\n/**\n * Generate a RowModel from pivot configuration.\n * Replaces the normal pipeline when pivot mode is active.\n */\nexport function getPivotRowModel<TData extends RowData>(\n  table: Table<TData>,\n  data: TData[],\n  config: PivotConfig,\n): {\n  rowModel: RowModel<TData>\n  columns: PivotColumn[]\n} {\n  const getValueFn = (item: TData, field: string): unknown => {\n    const column = table.getColumn(field)\n    if (column?.accessorFn) {\n      return column.accessorFn(item, 0)\n    }\n    // Fallback: direct property access\n    return (item as Record<string, unknown>)[field]\n  }\n\n  const engine = new PivotEngine(data, config, getValueFn)\n  const pivotColumns = engine.generateColumns()\n  const pivotRows = engine.generateRows()\n\n  // Convert PivotRows to Row<TData>\n  const rows: Row<TData>[] = pivotRows.map((pr, index) => {\n    const pivotData = {\n      ...pr.values,\n      _pivotLabel: pr.label,\n      _pivotPath: pr.path,\n      _pivotDepth: pr.depth,\n      _pivotIsSubtotal: pr.isSubtotal,\n      _pivotIsGrandTotal: pr.isGrandTotal,\n      _pivotHasChildren: pr.hasChildren,\n    } as unknown as TData\n\n    const row = createRow(table, pr.id, pivotData, index, pr.depth)\n    ;(row as Row<TData> & { _pivotRow?: PivotRow })._pivotRow = pr\n    return row\n  })\n\n  const flatRows = rows\n  const rowsById: Record<string, Row<TData>> = {}\n  for (const row of flatRows) {\n    rowsById[row.id] = row\n  }\n\n  return {\n    rowModel: { rows, flatRows, rowsById },\n    columns: pivotColumns,\n  }\n}\n\n// ---------------------------------------------------------------------------\n// generatePivotColumnDefs — Convert PivotColumns to ColumnDefs\n// ---------------------------------------------------------------------------\n\n/**\n * Generate ColumnDef array from PivotColumns for rendering.\n * Includes a row label column plus all generated value columns.\n */\nexport function generatePivotColumnDefs<TData extends RowData>(\n  config: PivotConfig,\n  pivotColumns: PivotColumn[],\n): ColumnDef<TData, unknown>[] {\n  const columnDefs: ColumnDef<TData, unknown>[] = []\n\n  // Row label column (shows the row group value)\n  if (config.rowFields.length > 0) {\n    columnDefs.push({\n      id: '_pivotLabel',\n      header: config.rowFields.map((f) => f.label ?? f.field).join(' / '),\n      accessorFn: (row: TData) => (row as Record<string, unknown>)._pivotLabel ?? '',\n    } as ColumnDef<TData, unknown>)\n  }\n\n  // Value columns\n  for (const pc of pivotColumns) {\n    columnDefs.push({\n      id: pc.id,\n      header: pc.header,\n      accessorFn: (row: TData) => (row as Record<string, unknown>)[pc.id] ?? null,\n    } as ColumnDef<TData, unknown>)\n  }\n\n  return columnDefs\n}\n\n// ---------------------------------------------------------------------------\n// Initial state\n// ---------------------------------------------------------------------------\n\nexport function getInitialPivotState(): PivotState {\n  return {\n    enabled: false,\n    config: {\n      rowFields: [],\n      columnFields: [],\n      valueFields: [],\n    },\n    expandedRowGroups: {},\n    expandedColumnGroups: {},\n  }\n}\n"]}