import { PartPreprocessedData } from '../utils/preprocess-part-data.js'; export interface PartDataDigit { data: string[]; /** * 这是数字的第几位 * @example 1024 -> 4 是第 1 位, 2 是第 2 位, 0 是第 3 位, 1 是第 4 位 */ place: number; } export interface PartData { /** * 每个数字数位用于过渡动画的数据. * @example 1 -> 10 * [ * ["0", "1"], // 第一个数位 * ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0"], // 第二个数位 * ] */ digits: PartDataDigit[]; /** * 运动方向的头部数字. 向下运动时该值为数组的最后一个元素. 向上运动时该值为数组的第一个元素. * @deprecated */ headNumber?: number; /** * 运动方向的尾部数字. @deprecated */ tailNumber?: number; } /** * 1. T: 单个数值. 为所有 part 下的 digit 使用 T. * 2. T[]: 数组数值. 为第 `i` 个 part 下的所有 digit 使用 `T[i]` 值. * 3. T[][]: 二维数组数值. 为第 `i` 个 part 下的第 `j` 个 digit 使用 `T[i][j]` 值. * 4. (data: PartData[]) => T | T[] | T[][]: 同上 */ export type GroupValue = T | undefined; export interface GroupGetterOptions { /** * 用于生成滚动列表的数据. */ data: PartData[]; /** * 滚动方向. */ direction: 'up' | 'down'; /** * 导致这次滚动发生的值. [新值, 旧值]. */ value: [unknown, unknown]; preprocessData: PartPreprocessedData[][]; } export type GroupGetter = (options: GroupGetterOptions) => GroupValue; export type GroupValueOrGetter = GroupValue | GroupGetter; export type PartValue = GroupValue | GroupValue; export type PartGetter = GroupGetter | GroupGetter; export type PartValueOrGetter = PartValue | PartGetter; export type PartDigitValue = PartValue | PartValue; export type PartDigitGetter = PartGetter | PartGetter; export type PartDigitValueOrGetter = PartDigitValue | PartDigitGetter; export type PartDigitCellValue = PartValue | PartValue; export type PartDigitCellGetter = PartGetter | PartGetter; export type PartDigitCellValueOrGetter = PartDigitCellValue | PartDigitCellGetter; export type ExtractGroupValue = T extends GroupValueOrGetter ? U extends Array ? V : U : never; export type ExtractPartValue = T extends PartValueOrGetter ? U extends Array ? ExtractGroupValue : U : never; export type ExtractPartDigitValue = T extends PartDigitValueOrGetter ? U extends Array ? ExtractPartValue : U : never; export type ExtractPartDigitCellValue = T extends PartDigitCellValueOrGetter ? U extends Array ? ExtractPartDigitValue : U : never;