@extclp/vexip-ui
Version:
A Vue 3 UI library, Highly customizability, full TypeScript, performance pretty good
1 lines • 18.1 kB
Source Map (JSON)
{"version":3,"file":"symbol.mjs","sources":["../../../components/table/symbol.ts"],"sourcesContent":["import type { InjectionKey, Slots } from 'vue'\r\nimport type { ClassType, ComponentSize, LocaleConfig, StyleType } from '@vexip-ui/config'\r\nimport type { BITree } from '@vexip-ui/utils'\r\nimport type { TooltipTheme } from '@/components/tooltip'\r\nimport type { TableStore } from './store'\r\n\r\nexport type Key = string | number | symbol\r\nexport type Data = any\r\n\r\nexport type MouseEventType = 'Enter' | 'Leave' | 'Click' | 'Dblclick' | 'Contextmenu'\r\nexport type MoveEventType = 'Start' | 'Move' | 'End'\r\n\r\nexport type TableIconName = 'filter' | 'asc' | 'desc' | 'dragger' | 'expand' | 'plus' | 'minus'\r\nexport type TableRowPropFn<P = any> = (data: Data, index: number) => P\r\nexport type TableRowDropType = 'before' | 'after' | 'inner'\r\nexport type TableTextAlign = 'left' | 'center' | 'right'\r\nexport type TableColumnType = 'order' | 'selection' | 'expand' | 'drag'\r\nexport type TableColResizeType = 'lazy' | 'responsive'\r\n\r\nexport type TableIcons = Partial<Record<TableIconName, Record<string, any> | (() => any)>>\r\n\r\nexport const enum DropType {\r\n BEFORE = 'before',\r\n INNER = 'inner',\r\n AFTER = 'after',\r\n}\r\n\r\nexport interface CellSpanResult {\r\n colSpan?: number,\r\n rowSpan?: number,\r\n}\r\n\r\nexport interface TableKeyConfig {\r\n id?: string,\r\n children?: string,\r\n checked?: string,\r\n height?: string,\r\n expanded?: string,\r\n treeExpanded?: string,\r\n}\r\n\r\nexport interface TableSlots {\r\n /**\r\n * @internal\r\n */\r\n default?: () => any,\r\n empty?: (params: { isFixed: boolean }) => any,\r\n}\r\n\r\nexport type Accessor<D = Data, Val extends string | number = string | number> = (\r\n data: D,\r\n index: number,\r\n) => Val\r\nexport type ExpandRenderFn<D = Data> = (data: {\r\n /** @deprecated */\r\n leftFixed: number,\r\n /** @deprecated */\r\n rightFixed: number,\r\n row: D,\r\n rowIndex: number,\r\n}) => any\r\nexport type ColumnCellSpanFn<D = Data> = (data: {\r\n row: D,\r\n index: number,\r\n fixed?: 'left' | 'right',\r\n}) => CellSpanResult | void\r\nexport type SummaryCellSpanFn<D = Data, Val extends string | number = string | number> = (data: {\r\n column: TableColumnOptions<D, Val>,\r\n index: number,\r\n fixed?: 'left' | 'right',\r\n}) => CellSpanResult | void\r\n\r\nexport type TableFilterOptions<D = Data, Val extends string | number = string | number> =\r\n | {\r\n able?: boolean,\r\n custom?: false,\r\n options?: (string | { value: Val, label?: string, active?: boolean })[],\r\n multiple?: false,\r\n active?: null | Val,\r\n method?: null | ((active: Val, data: D) => boolean),\r\n meta?: any,\r\n }\r\n | {\r\n able?: boolean,\r\n custom?: false,\r\n options?: (string | { value: Val, label?: string, active?: boolean })[],\r\n multiple: true,\r\n active?: null | Val[],\r\n method?: null | ((active: Val[], data: D) => boolean),\r\n meta?: any,\r\n }\r\n | {\r\n able?: boolean,\r\n custom: true,\r\n options?: never,\r\n multiple?: false,\r\n active?: null | Val | Val[],\r\n method?: null | ((active: any, data: D) => boolean),\r\n meta?: any,\r\n }\r\n\r\nexport interface ParsedFilterOptions extends Omit<Required<TableFilterOptions>, 'options'> {\r\n options: { value: string | number, label: string, active: boolean }[],\r\n}\r\n\r\nexport interface TableSorterOptions<D = Data> {\r\n able?: boolean,\r\n type?: null | 'asc' | 'desc',\r\n order?: number, // 优先级\r\n method?: null | ((prev: D, next: D) => number),\r\n}\r\n\r\nexport type ParsedTableSorterOptions = Required<TableSorterOptions>\r\n\r\nexport interface TableSummaryData {\r\n sum: number,\r\n min: number,\r\n max: number,\r\n}\r\n\r\nexport type SummaryRenderFn<D = Data, Val extends string | number = string | number> = (data: {\r\n column: TableColumnOptions<D, Val>,\r\n index: number,\r\n rows: D[],\r\n meta: TableSummaryData,\r\n}) => any\r\n\r\nexport type ColumnSummaryRenderFn<\r\n D = Data,\r\n Val extends string | number = string | number,\r\n> = (data: {\r\n column: TableColumnOptions<D, Val>,\r\n index: number,\r\n rows: D[],\r\n meta: TableSummaryData,\r\n summary: TableSummaryOptions<D, Val>,\r\n}) => any\r\n\r\nexport interface TableBaseColumn<D = Data, Val extends string | number = string | number> {\r\n key: keyof D,\r\n name?: string,\r\n type?: never,\r\n meta?: any,\r\n fixed?: boolean | 'left' | 'right',\r\n class?: ClassType,\r\n style?: StyleType,\r\n attrs?: Record<string, any>,\r\n width?: number | `${number}%`,\r\n minWidth?: number,\r\n maxWidth?: number,\r\n filter?: TableFilterOptions<D, Val>,\r\n sorter?: boolean | TableSorterOptions<D>,\r\n order?: number,\r\n ellipsis?: boolean | null,\r\n textAlign?: TableTextAlign,\r\n headSpan?: number,\r\n noSummary?: boolean,\r\n indented?: boolean,\r\n accessor?: Accessor<D, Val>,\r\n formatter?: (value: Val) => unknown,\r\n cellSpan?: ColumnCellSpanFn<D>,\r\n renderer?: ColumnRenderFn<D, Val>,\r\n headRenderer?: HeadRenderFn,\r\n filterRenderer?: FilterRenderFn,\r\n summaryRenderer?: ColumnSummaryRenderFn<D, Val>,\r\n}\r\n\r\nexport interface TableOrderColumn<D = Data, Val extends string | number = string | number>\r\n extends Omit<TableBaseColumn<D, Val>, 'key' | 'type' | 'renderer'> {\r\n key?: keyof D,\r\n type: 'order',\r\n truthIndex?: boolean,\r\n orderLabel?: (index: number) => string | number,\r\n}\r\n\r\nexport interface TableSelectionColumn<D = Data, Val extends string | number = string | number>\r\n extends Omit<TableBaseColumn<D, Val>, 'key' | 'type' | 'renderer' | 'headRenderer'> {\r\n key?: keyof D,\r\n type: 'selection',\r\n /**\r\n * @deprecated Use `selectionSize` instead.\r\n */\r\n checkboxSize?: ComponentSize,\r\n selectionSize?: ComponentSize,\r\n singleSelect?: boolean,\r\n disableRow?: (data: Data) => boolean,\r\n}\r\n\r\nexport interface TableExpandColumn<D = Data, Val extends string | number = string | number>\r\n extends Omit<TableBaseColumn<D, Val>, 'key' | 'type' | 'renderer'> {\r\n key?: keyof D,\r\n type: 'expand',\r\n disableRow?: (data: Data) => boolean,\r\n renderer?: ExpandRenderFn<D>,\r\n}\r\n\r\nexport interface TableDragColumn<D = Data, Val extends string | number = string | number>\r\n extends Omit<TableBaseColumn<D, Val>, 'key' | 'type' | 'renderer'> {\r\n key?: keyof D,\r\n type: 'drag',\r\n disableRow?: (data: Data) => boolean,\r\n}\r\n\r\nexport type TableTypeColumn<D = Data, Val extends string | number = string | number> =\r\n | TableOrderColumn<D, Val>\r\n | TableSelectionColumn<D, Val>\r\n | TableExpandColumn<D, Val>\r\n | TableDragColumn<D, Val>\r\nexport type TableColumnOptions<D = Data, Val extends string | number = string | number> =\r\n | TableBaseColumn<D, Val>\r\n | TableTypeColumn<D, Val>\r\n\r\nexport type ColumnWithKey<\r\n D = Data,\r\n Val extends string | number = string | number,\r\n> = TableColumnOptions<D, Val> & {\r\n key: Key,\r\n rowSpan: number,\r\n /** @internal */\r\n index: number,\r\n /** @internal */\r\n colIndex: number,\r\n /** @internal */\r\n first?: boolean,\r\n /** @internal */\r\n last?: boolean,\r\n}\r\n\r\nexport interface TableColumnGroupOptions {\r\n name?: string,\r\n fixed?: boolean | 'left' | 'right',\r\n order?: number,\r\n ellipsis?: boolean,\r\n textAlign?: TableTextAlign,\r\n renderer?: () => any,\r\n children: TableColumnOptions<any, any>[],\r\n}\r\nexport interface ColumnGroupWithKey extends TableColumnGroupOptions {\r\n key: Key,\r\n headSpan: number,\r\n rowSpan: number,\r\n /** @internal */\r\n colIndex: number,\r\n /** @internal */\r\n last?: boolean,\r\n}\r\n\r\nexport type ColumnRenderFn<D = Data, Val extends string | number = string | number> = (data: {\r\n row: D,\r\n rowIndex: number,\r\n column: TableBaseColumn<D, Val>,\r\n columnIndex: number,\r\n}) => any\r\nexport type HeadRenderFn<D = Data, Val extends string | number = string | number> = (data: {\r\n column: TableColumnOptions<D, Val>,\r\n index: number,\r\n}) => any\r\nexport type FilterRenderFn<D = Data, Val extends string | number = string | number> = (data: {\r\n column: TableColumnOptions<D, Val>,\r\n index: number,\r\n filter: Required<TableFilterOptions<D, Val>>,\r\n handleFilter: (active: any) => void,\r\n}) => any\r\n\r\nexport type TableCellSpanFn<D = Data, Val extends string | number = string | number> = (data: {\r\n row: D,\r\n rowIndex: number,\r\n column: TableColumnOptions<D, Val>,\r\n columnIndex: number,\r\n fixed?: 'left' | 'right',\r\n}) => CellSpanResult | undefined\r\n\r\nexport type TableCellPropFn<D = Data, P = any> = (data: {\r\n row: D,\r\n rowIndex: number,\r\n column: ColumnWithKey,\r\n columnIndex: number,\r\n}) => P\r\nexport type TableHeadPropFn<P = any> = (data: {\r\n column: ColumnWithKey,\r\n index: number,\r\n rowIndex: number,\r\n}) => P\r\nexport type TableFootPropFn<P = any> = (data: {\r\n column: ColumnWithKey,\r\n columnIndex: number,\r\n summary: SummaryWithKey,\r\n summaryIndex: number,\r\n}) => P\r\n\r\nexport type ColumnProfile<D = Data, Val extends string | number = string | number> = Pick<\r\n ColumnWithKey<D, Val>,\r\n 'name' | 'key' | 'meta'\r\n>\r\nexport type TableFilterProfile<\r\n D = Data,\r\n Val extends string | number = string | number,\r\n> = ColumnProfile<D, Val> & {\r\n active: Val | Val[],\r\n}\r\nexport type TableSorterProfile<\r\n D = Data,\r\n Val extends string | number = string | number,\r\n> = ColumnProfile<D, Val> & {\r\n type: 'asc' | 'desc',\r\n order: number,\r\n}\r\n\r\nexport interface TableSummaryOptions<D = Data, Val extends string | number = string | number> {\r\n name: string,\r\n key: keyof D,\r\n class?: ClassType,\r\n style?: StyleType,\r\n attrs?: Record<string, any>,\r\n order?: number,\r\n above?: boolean,\r\n meta?: Record<any, any>,\r\n cellSpan?: SummaryCellSpanFn<D, Val>,\r\n renderer?: SummaryRenderFn<D, Val>,\r\n}\r\n\r\nexport type SummaryWithKey<\r\n D = Data,\r\n Val extends string | number = string | number,\r\n> = TableSummaryOptions<D, Val> & { key: Key }\r\n\r\n/** @internal */\r\nexport interface TableRowState {\r\n key: Key,\r\n index: number,\r\n hidden: boolean,\r\n hover: boolean,\r\n checked: boolean,\r\n height: number,\r\n // borderHeight: number,\r\n expanded: boolean,\r\n expandHeight: number,\r\n parent?: Key,\r\n children: TableRowState[],\r\n depth: number,\r\n treeExpanded: boolean,\r\n partial: boolean,\r\n dragging: boolean,\r\n listIndex: number,\r\n cellHeights: Record<Key, number>,\r\n last: boolean,\r\n expandAnimate: boolean,\r\n data: Data,\r\n}\r\n\r\nexport interface StoreOptions {\r\n columns: TableColumnRawOptions[],\r\n summaries: TableSummaryOptions[],\r\n data: Data[],\r\n dataKey: string,\r\n rowClass: ClassType | TableRowPropFn<ClassType>,\r\n rowStyle: StyleType | TableRowPropFn<StyleType>,\r\n rowAttrs: Record<string, any> | TableRowPropFn<Record<string, any>>,\r\n cellClass: ClassType | TableCellPropFn<ClassType>,\r\n cellStyle: StyleType | TableCellPropFn<StyleType>,\r\n cellAttrs: Record<string, any> | TableCellPropFn<Record<string, any>>,\r\n headClass: ClassType | TableHeadPropFn<ClassType>,\r\n headStyle: StyleType | TableHeadPropFn<StyleType>,\r\n headAttrs: Record<string, any> | TableHeadPropFn<Record<string, any>>,\r\n footClass: ClassType | TableFootPropFn<ClassType>,\r\n footStyle: StyleType | TableFootPropFn<StyleType>,\r\n footAttrs: Record<string, any> | TableFootPropFn<Record<string, any>>,\r\n border: boolean,\r\n stripe: boolean,\r\n highlight: boolean,\r\n currentPage: number,\r\n pageSize: number,\r\n rowHeight: number,\r\n rowMinHeight: number,\r\n virtual: boolean,\r\n rowDraggable: boolean,\r\n locale: LocaleConfig['table'],\r\n tooltipTheme: TooltipTheme,\r\n tooltipWidth: number | string,\r\n singleSorter: boolean,\r\n singleFilter: boolean,\r\n customSorter: boolean,\r\n customFilter: boolean,\r\n keyConfig: Required<TableKeyConfig>,\r\n disabledTree: boolean,\r\n noCascaded: boolean,\r\n colResizable: false | TableColResizeType,\r\n expandRenderer: ExpandRenderFn | null,\r\n cellSpan: TableCellSpanFn | null,\r\n sidePadding: number[],\r\n borderWidth: number,\r\n dataFilter: (data: Data) => boolean,\r\n ellipsis: boolean,\r\n}\r\n\r\nexport type TableColumnRawOptions = TableColumnOptions<any, any> | TableColumnGroupOptions\r\nexport type ColumnRawWithKey = ColumnGroupWithKey | ColumnWithKey\r\n\r\nexport interface StoreState extends StoreOptions {\r\n columns: ColumnWithKey[],\r\n normalColumns: ColumnWithKey[],\r\n allColumns: ColumnRawWithKey[][],\r\n summaries: SummaryWithKey[],\r\n rowData: TableRowState[],\r\n treeRowData: TableRowState[],\r\n width: number,\r\n rightFixedColumns: ColumnWithKey[],\r\n leftFixedColumns: ColumnWithKey[],\r\n aboveSummaries: SummaryWithKey[],\r\n belowSummaries: SummaryWithKey[],\r\n columnMap: Map<Key, ColumnRawWithKey>,\r\n rowMap: Map<Key, TableRowState>,\r\n summaryMap: Map<Key, SummaryWithKey>,\r\n idMaps: WeakMap<Data, Key>,\r\n checkedAll: boolean,\r\n partial: boolean,\r\n widths: Map<Key, number>,\r\n sorters: Map<Key, ParsedTableSorterOptions>,\r\n filters: Map<Key, ParsedFilterOptions>,\r\n resized: Set<Key>,\r\n bodyYScroll: number,\r\n bodyXScroll: number,\r\n padTop: number,\r\n startRow: number,\r\n endRow: number,\r\n dragging: boolean,\r\n heightBITree: BITree,\r\n virtualData: TableRowState[],\r\n totalHeight: number,\r\n colResizing: boolean,\r\n resizeLeft: number,\r\n cellSpanMap: Map<'left' | 'default' | 'right', Map<string, Required<CellSpanResult>>>,\r\n collapseMap: Map<'left' | 'default' | 'right', Map<string, Set<string>>>,\r\n locked: boolean,\r\n barScrolling: boolean,\r\n heightTrigger: number,\r\n hoveredRowKey: Key | null,\r\n}\r\n\r\nexport interface TableRowInstance {\r\n el?: HTMLElement | null,\r\n row: TableRowState,\r\n}\r\n\r\nexport interface TableRowPayload {\r\n row: Data,\r\n key: Key,\r\n index: number,\r\n event: Event,\r\n checked?: boolean,\r\n expanded?: boolean,\r\n}\r\n\r\nexport interface TableCellPayload {\r\n row: Data,\r\n key: Key,\r\n rowIndex: number,\r\n column: TableColumnOptions,\r\n columnIndex: number,\r\n event: Event,\r\n}\r\n\r\nexport interface TableHeadPayload {\r\n column: TableColumnOptions,\r\n index: number,\r\n event: Event,\r\n}\r\n\r\nexport interface TableColResizePayload extends TableHeadPayload {\r\n width: number,\r\n}\r\n\r\nexport interface TableFootPayload {\r\n column: TableColumnOptions,\r\n columnIndex: number,\r\n summary: TableSummaryOptions,\r\n summaryIndex: number,\r\n event: Event,\r\n}\r\n\r\nexport interface TableActions {\r\n increaseColumn(column: TableColumnRawOptions): void,\r\n decreaseColumn(column: TableColumnRawOptions): void,\r\n increaseSummary(column: TableSummaryOptions): void,\r\n decreaseSummary(column: TableSummaryOptions): void,\r\n getTableElement(): HTMLElement | undefined,\r\n refreshXScroll(): void,\r\n emitRowCheck(payload: TableRowPayload & { checked: boolean }): void,\r\n emitAllRowCheck(checked: boolean, partial: boolean): void,\r\n emitRowExpand(payload: TableRowPayload & { expanded: boolean }): void,\r\n emitRowTreeExpand(payload: TableRowPayload & { expanded: boolean }): void,\r\n emitRowFilter(): void,\r\n emitRowSort(): void,\r\n handleRowDragStart(rowInstance: TableRowInstance, event: DragEvent): void,\r\n handleRowDragOver(rowInstance: TableRowInstance, event: DragEvent): void,\r\n handleRowDrop(rowInstance: TableRowInstance, event: DragEvent): void,\r\n handleRowDragEnd(event: DragEvent): void,\r\n emitRowEvent(type: MouseEventType, payload: TableRowPayload): void,\r\n emitCellEvent(type: MouseEventType, payload: TableCellPayload): void,\r\n emitHeadEvent(type: MouseEventType, payload: TableHeadPayload): void,\r\n emitFootEvent(type: MouseEventType, payload: TableFootPayload): void,\r\n emitColResize(type: MoveEventType, payload: TableColResizePayload): void,\r\n hasIcon(name: TableIconName): boolean,\r\n getIcon(name: TableIconName): TableIcons[TableIconName],\r\n renderTableSlot(payload: { name: string }): any,\r\n runInLocked(handler?: (...args: any[]) => any, delay?: number): Promise<void>,\r\n updateColumns(): void,\r\n setColumnProp(key: Key, prop: string, value: any): void,\r\n updateSummaries(): void,\r\n setSummaryProp(key: Key, prop: string, value: any): void,\r\n}\r\n\r\nexport interface ColumnGroupActions {\r\n increaseColumn(column: TableColumnRawOptions): void,\r\n decreaseColumn(column: TableColumnRawOptions): void,\r\n}\r\n\r\nexport const DEFAULT_KEY_FIELD = 'id'\r\n/**\r\n * 表格状态管理\r\n */\r\nexport const TABLE_STORE = '__VXP_TABLE_STORE' as unknown as InjectionKey<TableStore>\r\n/**\r\n * 表格组件的顶层 Api\r\n */\r\nexport const TABLE_ACTIONS = '__VXP_TABLE_ACTIONS' as unknown as InjectionKey<TableActions>\r\nexport const TABLE_SLOTS = '__VXP_TABLE_SLOTS' as unknown as InjectionKey<Slots>\r\nexport const TABLE_HEAD_PREFIX = '__vxp-table-head-'\r\nexport const TABLE_FOOT_PREFIX = '__vxp-table-foot-'\r\n\r\nexport const COLUMN_GROUP_ACTIONS =\r\n '__VXP_TABLE_COLUMN_GROUP_ACTIONS' as unknown as InjectionKey<ColumnGroupActions>\r\n\r\nexport const columnTypes: TableColumnType[] = ['order', 'selection', 'expand', 'drag']\r\n\r\nexport const noopFormatter = (v: any) => v\r\n"],"names":["DropType","DEFAULT_KEY_FIELD","TABLE_STORE","TABLE_ACTIONS","TABLE_SLOTS","TABLE_HEAD_PREFIX","TABLE_FOOT_PREFIX","COLUMN_GROUP_ACTIONS","columnTypes","noopFormatter","v"],"mappings":"AAqBkB,IAAAA,sBAAAA,OAChBA,EAAA,SAAS,UACTA,EAAA,QAAQ,SACRA,EAAA,QAAQ,SAHQA,IAAAA,KAAA,CAAA,CAAA;AAgfX,MAAMC,IAAoB,MAIpBC,IAAc,qBAIdC,IAAgB,uBAChBC,IAAc,qBACdC,IAAoB,qBACpBC,IAAoB,qBAEpBC,IACX,oCAEWC,IAAiC,CAAC,SAAS,aAAa,UAAU,MAAM,GAExEC,IAAgB,CAACC,MAAWA;"}