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