{"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;"}