{"version":3,"file":"table-foot-cell.vue2.mjs","sources":["../../../components/table/table-foot-cell.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { Ellipsis } from '@/components/ellipsis'\r\nimport { Renderer } from '@/components/renderer'\r\nimport { ResizeObserver } from '@/components/resize-observer'\r\n\r\nimport { computed, inject, ref } from 'vue'\r\n\r\nimport { useNameHelper } from '@vexip-ui/config'\r\nimport { useRtl } from '@vexip-ui/hooks'\r\nimport { getLast, isFunction } from '@vexip-ui/utils'\r\nimport { TABLE_ACTIONS, TABLE_STORE, columnTypes } from './symbol'\r\n\r\nimport type { PropType, StyleValue } from 'vue'\r\nimport type { ColumnWithKey, SummaryWithKey, TableRowState, TableTypeColumn } from './symbol'\r\n\r\ndefineOptions({ name: 'TableFootCell' })\r\n\r\nconst props = defineProps({\r\n  row: {\r\n    type: Object as PropType<TableRowState>,\r\n    default: () => ({}),\r\n  },\r\n  column: {\r\n    type: Object as PropType<ColumnWithKey>,\r\n    default: () => ({}),\r\n  },\r\n  colIndex: {\r\n    type: Number,\r\n    default: -1,\r\n  },\r\n  summary: {\r\n    type: Object as PropType<SummaryWithKey>,\r\n    default: () => ({}),\r\n  },\r\n  summaryIndex: {\r\n    type: Number,\r\n    default: -1,\r\n  },\r\n  fixed: {\r\n    type: String as PropType<'left' | 'right' | undefined>,\r\n    default: null,\r\n  },\r\n  above: {\r\n    type: Boolean,\r\n    default: false,\r\n  },\r\n})\r\n\r\nconst { state, getters, mutations } = inject(TABLE_STORE)!\r\nconst tableActions = inject(TABLE_ACTIONS)!\r\n\r\nconst nh = useNameHelper('table')\r\nconst { isRtl } = useRtl()\r\n\r\nconst wrapper = ref<HTMLElement>()\r\n\r\nconst inLast = computed(() => {\r\n  return props.column.index + cellSpan.value.colSpan >= state.columns.length\r\n})\r\nconst columns = computed(() => {\r\n  return props.fixed === 'left'\r\n    ? state.leftFixedColumns\r\n    : props.fixed === 'right'\r\n      ? state.rightFixedColumns\r\n      : state.normalColumns\r\n})\r\n// We use 'a' and 'b' to distinguish above and below\r\nconst prefix = computed(() => (props.above ? 'af' : 'bf'))\r\nconst summaries = computed(() => (props.above ? state.aboveSummaries : state.belowSummaries))\r\nconst heights = computed(() => (props.above ? getters.topFixedHeights : getters.bottomFixedHeights))\r\nconst className = computed(() => {\r\n  let customClass = null\r\n\r\n  if (typeof state.footClass === 'function') {\r\n    customClass = state.footClass({\r\n      column: props.column,\r\n      columnIndex: props.column.index,\r\n      summary: props.summary,\r\n      summaryIndex: props.summaryIndex,\r\n    })\r\n  } else {\r\n    customClass = state.footClass\r\n  }\r\n\r\n  const typed = columnTypes.includes((props.column as TableTypeColumn).type)\r\n\r\n  return [\r\n    nh.be('foot-cell'),\r\n    {\r\n      [nh.bem('foot-cell', 'typed')]: typed,\r\n      [nh.bem('foot-cell', 'center')]: typed || props.column.textAlign === 'center',\r\n      [nh.bem('foot-cell', 'right')]: props.column.textAlign === 'right',\r\n      [nh.bem('foot-cell', 'last')]: inLast.value,\r\n    },\r\n    props.column.class,\r\n    customClass,\r\n  ]\r\n})\r\nconst cellSpan = computed(() => {\r\n  return (\r\n    state.cellSpanMap\r\n      .get(props.fixed || 'default')!\r\n      .get(`${prefix.value}${props.summaryIndex},${props.column.index}`) || {\r\n      colSpan: 1,\r\n      rowSpan: 1,\r\n    }\r\n  )\r\n})\r\nconst customStyle = computed(() => {\r\n  if (typeof state.footStyle === 'function') {\r\n    return state.footStyle({\r\n      column: props.column,\r\n      columnIndex: props.column.index,\r\n      summary: props.summary,\r\n      summaryIndex: props.summaryIndex,\r\n    })\r\n  }\r\n\r\n  return state.cellStyle\r\n})\r\nconst style = computed(() => {\r\n  const totalWidths =\r\n    props.fixed === 'left'\r\n      ? getters.leftFixedWidths\r\n      : props.fixed === 'right'\r\n        ? getters.rightFixedWidths\r\n        : getters.normalWidths\r\n  const { colSpan, rowSpan } = cellSpan.value\r\n  const padLeft = columns.value[0]?.fixed === 'left' ? state.sidePadding[0] || 0 : 0\r\n  const padRight = getLast(columns.value)?.fixed === 'right' ? state.sidePadding[1] || 0 : 0\r\n  const width = totalWidths[props.colIndex + colSpan] - totalWidths[props.colIndex]\r\n\r\n  let height: number | undefined\r\n\r\n  if (rowSpan > 1) {\r\n    height = heights.value[props.summaryIndex + rowSpan] - heights.value[props.summaryIndex]\r\n  }\r\n\r\n  return [\r\n    props.column.style || '',\r\n    customStyle.value,\r\n    {\r\n      display: !colSpan || !rowSpan ? 'none' : undefined,\r\n      width: `${(props.column.index ? 0 : padLeft) + (inLast.value ? padRight : 0) + width}px`,\r\n      height: height ? `${height}px` : undefined,\r\n      visibility: props.column.fixed && !props.fixed ? 'hidden' : undefined,\r\n      borderRightWidth:\r\n        !state.border && colSpan > 1 && props.colIndex + colSpan >= totalWidths.length - 1\r\n          ? 0\r\n          : undefined,\r\n      borderBottomWidth:\r\n        rowSpan > 1 && props.summaryIndex + rowSpan >= summaries.value.length ? 0 : undefined,\r\n      transform: `translate3d(${isRtl.value ? '-' : ''}${\r\n        (props.column.index ? padLeft : 0) + totalWidths[props.colIndex]\r\n      }px, 0, 0)`,\r\n    },\r\n  ] as StyleValue\r\n})\r\nconst attrs = computed(() => {\r\n  let customAttrs: Record<string, any>\r\n\r\n  if (typeof state.footAttrs === 'function') {\r\n    customAttrs = state.footAttrs({\r\n      column: props.column,\r\n      columnIndex: props.column.index,\r\n      summary: props.summary,\r\n      summaryIndex: props.summaryIndex,\r\n    })\r\n  } else {\r\n    customAttrs = state.footAttrs\r\n  }\r\n\r\n  return { ...(props.column.attrs || {}), ...(customAttrs || {}) }\r\n})\r\nconst summaryData = computed(() => getters.summaryData.get(props.column.key))\r\n\r\nfunction buildEventPayload(event: Event) {\r\n  return {\r\n    column: props.column,\r\n    columnIndex: props.column.index,\r\n    summary: props.summary,\r\n    summaryIndex: props.summaryIndex,\r\n    event,\r\n  }\r\n}\r\n\r\nfunction handleMouseEnter(event: MouseEvent) {\r\n  tableActions?.emitFootEvent('Enter', buildEventPayload(event))\r\n}\r\n\r\nfunction handleMouseLeave(event: MouseEvent) {\r\n  tableActions?.emitFootEvent('Leave', buildEventPayload(event))\r\n}\r\n\r\nfunction handleClick(event: MouseEvent) {\r\n  tableActions?.emitFootEvent('Click', buildEventPayload(event))\r\n}\r\n\r\nfunction handleDblclick(event: MouseEvent) {\r\n  tableActions?.emitFootEvent('Dblclick', buildEventPayload(event))\r\n}\r\n\r\nfunction handleContextmenu(event: MouseEvent) {\r\n  tableActions?.emitFootEvent('Contextmenu', buildEventPayload(event))\r\n}\r\n\r\nfunction handleCellResize(entry: ResizeObserverEntry) {\r\n  mutations.setCellHeight(\r\n    props.row.key,\r\n    props.column.key,\r\n    (entry.borderBoxSize?.[0]?.blockSize ?? entry.contentRect.height) + state.borderWidth,\r\n  )\r\n}\r\n</script>\r\n\r\n<template>\r\n  <div\r\n    v-bind=\"attrs\"\r\n    ref=\"wrapper\"\r\n    :class=\"className\"\r\n    role=\"cell\"\r\n    :scope=\"column.first ? 'row' : undefined\"\r\n    :colspan=\"cellSpan.colSpan !== 1 ? cellSpan.colSpan : undefined\"\r\n    :rowspan=\"cellSpan.rowSpan !== 1 ? cellSpan.rowSpan : undefined\"\r\n    :style=\"style\"\r\n    @mouseenter=\"handleMouseEnter\"\r\n    @mouseleave=\"handleMouseLeave\"\r\n    @click=\"handleClick\"\r\n    @dblclick=\"handleDblclick\"\r\n    @contextmenu=\"handleContextmenu\"\r\n  >\r\n    <div\r\n      v-if=\"column.index === 0\"\r\n      :class=\"nh.be('side-pad')\"\r\n      role=\"none\"\r\n      aria-hidden\r\n    ></div>\r\n    <ResizeObserver\r\n      v-if=\"isFunction(summary.renderer)\"\r\n      :disabled=\"column.ellipsis ?? state.ellipsis\"\r\n      :on-resize=\"handleCellResize\"\r\n    >\r\n      <span :class=\"nh.be('content')\">\r\n        <Ellipsis\r\n          v-if=\"column.ellipsis ?? state.ellipsis\"\r\n          inherit\r\n          :class=\"nh.be('ellipsis')\"\r\n          :tooltip-theme=\"state.tooltipTheme\"\r\n          :tip-max-width=\"state.tooltipWidth\"\r\n        >\r\n          <Renderer\r\n            :renderer=\"summary.renderer\"\r\n            :data=\"{\r\n              column,\r\n              index: column.index,\r\n              rows: state.data,\r\n              meta: summaryData\r\n            }\"\r\n          ></Renderer>\r\n        </Ellipsis>\r\n        <Renderer\r\n          v-else\r\n          :renderer=\"summary.renderer\"\r\n          :data=\"{\r\n            column,\r\n            index: column.index,\r\n            rows: state.data,\r\n            meta: summaryData\r\n          }\"\r\n        ></Renderer>\r\n      </span>\r\n    </ResizeObserver>\r\n    <div\r\n      v-if=\"inLast\"\r\n      :class=\"[nh.be('side-pad'), nh.bem('side-pad', 'right')]\"\r\n      role=\"none\"\r\n      aria-hidden\r\n    ></div>\r\n  </div>\r\n</template>\r\n"],"names":["props","__props","state","getters","mutations","inject","TABLE_STORE","tableActions","TABLE_ACTIONS","nh","useNameHelper","isRtl","useRtl","wrapper","ref","inLast","computed","cellSpan","columns","prefix","summaries","heights","className","customClass","typed","columnTypes","customStyle","style","totalWidths","colSpan","rowSpan","padLeft","_a","padRight","_b","getLast","width","height","attrs","customAttrs","summaryData","buildEventPayload","event","handleMouseEnter","handleMouseLeave","handleClick","handleDblclick","handleContextmenu","handleCellResize","entry","_createElementBlock","_mergeProps","_normalizeClass","_unref","isFunction","_createBlock","ResizeObserver","_createElementVNode","Ellipsis","_createVNode","Renderer"],"mappings":"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"}