import { Column, TableKey, TableTreeRow } from './types.js'; export declare const flattenColumns: (columns: Column[]) => Column[]; export declare const countColumnLeaves: (column: Column) => number; /** * 分组表头父列上的 `fixed` 向下继承给整棵子树。kui-react 与 kui-vue 的 * `components/table/utils.ts` 里是逐字节相同的副本,改一边必须同步另一边, * 否则同一份列配置在两个框架里会固定出不同的列。 * * `colgroup` 与 sticky 偏移都只按叶子列累加,所以父列上写的 `fixed` 必须落到它的每个叶子列上, * 「固定整组」这种配置才不会整体失效。叶子自己显式写的 `fixed` 优先,只在没写时补继承值; * 一个方向都没继承到的列返回原来的对象引用,整棵子树都没变时连数组都复用同一个引用, * 免得每次渲染都给列树新建对象,把 `visibleColumns → leaves → headerInfo` 的 memo 打回原形。 */ export declare const inheritColumnFixed: (columns: C[], inherited?: "left" | "right") => C[]; /** * 按列 `key` 从记录里取单元格值,`rowKey` 与 `childrenColumnName` 的字段名也走这同一个读取器。 * kui-react 与 kui-vue 的 `components/table/utils.ts` 里是逐字节相同的副本,改一边必须同步另一边, * 否则同一份数据在两个框架里会渲染出不同内容、排出不同顺序。 * * 取值规则: * - 整名优先:`key` 本身就是记录上的属性时直接取它,所以字段名自带点号(`{ "a.b": 1 }`)不会被误当成路径; * - 整名没命中且 `key` 含点号时按 `.` 逐段下钻,任意一段走到非对象(含 `null`)就返回 `undefined`, * 所以 `{ user: null }` 配 `key="user.name"` 渲染成空而不是抛错;数字段天然能取数组元素(`"tags.0"`); * - `__proto__`/`constructor`/`prototype` 这三段一律取不到值,避免列名顺着原型链摸到全局对象。 */ export declare const getRecordValue: (record: T, key: string) => unknown; export declare const getTreeChildren: (record: T, childrenColumnName: string) => T[]; /** * 表头排序的共享比较器。kui-react 与 kui-vue 的 `components/table/utils.ts` 里是逐字节相同的副本, * 改一边必须同步另一边,否则同一份数据在两个框架下会排出不同顺序。 * * 规则: * - 两侧都是 number(含 `Date` 之外的数值)时按数值比较,`NaN` 排在最前; * - 其余情况(字符串、数字与字符串混排、布尔、`null`/`undefined`)统一转成字符串, * 用带数字感知的字典序比较,所以 `"9"` 排在 `"10"` 前面,`null`/`undefined` 视作空串。 */ export declare const compareSortValues: (first: unknown, second: unknown) => number; export declare const getSyntheticRowKey: (record: object) => string; /** * 解析一行的 key,kui-react 与 kui-vue 行为一致:`rowKey` 可以是字段名,也可以是取值函数; * 两者都拿不到 `string`/`number` 时回退到 `getSyntheticRowKey` 生成的兜底 key。 * * 字段名走 `getRecordValue`,所以和列 `key` 一样支持 `"user.uid"` 这种点路径。 * 本函数与上面的 `getSyntheticRowKey` 在两个仓库里是逐字节相同的副本,改一边必须同步另一边。 */ export declare const resolveRowKey: (record: T, rowKey: string | ((record: T) => TableKey)) => TableKey; interface FlattenTreeOptions { data: T[]; childrenColumnName: string; expandedKeys?: Set; getKey: (record: T) => TableKey; sortRecords?: (records: T[]) => T[]; } export declare const flattenTreeData: ({ data, childrenColumnName, expandedKeys, getKey, sortRecords, }: FlattenTreeOptions) => TableTreeRow[]; /** * `expandAllRows` 期间 `data` 异步变化时,把“数据里新出现的父行”补进展开集合, * 已经在数据里的行保持用户手动展开或折叠的结果。kui-react 与 kui-vue 的 * `components/table/utils.ts` 里是逐字节相同的副本,改一边必须同步另一边。 * * `knownParentKeys` 是上一次看到的数据里的父行 key 集合,`nextParentKeys` 是本次的, * 所以从数据里消失又回来的父行算“新出现”、会被重新展开,两仓都不记住它曾被折叠。 * `changed` 只回答“展开集合要不要加新 key”:调用方每轮都要把 `nextParentKeys` 记回去, * 但不能无条件写回展开状态,否则 `data` 每轮都是新数组,渲染期同步状态会直接死循环。 */ export declare const mergeExpandAllRows: (knownParentKeys: Set, nextParentKeys: Set, expandedKeys: Set) => { keys: Set; changed: boolean; }; /** * 单元格省略号配置的归一:列上写了 `ellipsis` 就以列为准,没写才跟着表格级的 `ellipsis` 走, * 所以表格级全开时某一列还能用 `ellipsis: false` 单独关掉。`true` 是单行,数字是行数, * 对象可以另给 `rows` 与 `tooltip`。返回 `null` 表示这一列不截断。 * `tooltip` 在这里只当不透明值传下去,节点类型由各自的框架决定,因此两仓的 * `components/table/utils.ts` 里这一段是逐字节相同的副本,改一边必须同步另一边。 */ export declare const resolveCellEllipsis: (columnValue: boolean | number | { rows?: number; tooltip?: TooltipValue | false; } | undefined, tableValue: boolean | number | { rows?: number; tooltip?: TooltipValue | false; } | undefined) => { rows: number; tooltip?: TooltipValue | false; } | null; export {};