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