{"version":3,"file":"table-head-cell.vue2.mjs","sources":["../../../components/table/table-head-cell.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { Button } from '@/components/button'\nimport { Checkbox } from '@/components/checkbox'\nimport { Ellipsis } from '@/components/ellipsis'\nimport { Renderer } from '@/components/renderer'\nimport { ResizeObserver } from '@/components/resize-observer'\nimport { Tooltip } from '@/components/tooltip'\n\nimport { computed, inject, ref, toRef } from 'vue'\n\nimport { useIcons, useNameHelper } from '@vexip-ui/config'\nimport TableIcon from './table-icon.vue'\nimport { useMoving, useRtl } from '@vexip-ui/hooks'\nimport { getLast, isFunction, nextFrameOnce } from '@vexip-ui/utils'\nimport { TABLE_ACTIONS, TABLE_HEAD_PREFIX, TABLE_STORE, columnTypes } from './symbol'\n\nimport type { PropType, StyleValue } from 'vue'\nimport type { MovingState } from '@vexip-ui/hooks'\nimport type {\n  ColumnWithKey,\n  ParsedFilterOptions,\n  ParsedTableSorterOptions,\n  TableRowState,\n  TableSelectionColumn,\n  TableTypeColumn\n} from './symbol'\n\ndefineOptions({ name: 'TableHeadCell' })\n\nconst props = defineProps({\n  column: {\n    type: Object as PropType<ColumnWithKey>,\n    default: () => ({})\n  },\n  index: {\n    type: Number,\n    default: -1\n  },\n  row: {\n    type: Object as PropType<TableRowState>,\n    default: () => ({})\n  },\n  rowIndex: {\n    type: Number,\n    default: 0\n  },\n  fixed: {\n    type: String as PropType<'left' | 'right' | undefined>,\n    default: null\n  }\n})\n\nconst { state, getters, mutations } = inject(TABLE_STORE)!\nconst tableActions = inject(TABLE_ACTIONS)!\n\nconst nh = useNameHelper('table')\nconst locale = toRef(state, 'locale')\nconst icons = useIcons()\nconst { isRtl } = useRtl()\n\nconst filterVisible = ref(false)\nconst resizable = toRef(state, 'colResizable')\nconst resizing = computed(() => state.colResizing)\n\nconst wrapper = ref<HTMLElement>()\n\nconst isGroup = computed(() => mutations.isGroupColumn(props.column))\nconst columns = computed(() => {\n  return props.fixed === 'left'\n    ? state.leftFixedColumns\n    : props.fixed === 'right'\n      ? state.rightFixedColumns\n      : state.normalColumns\n})\nconst cellSpan = computed(() => {\n  return (\n    state.cellSpanMap.get(props.fixed || 'default')!.get(`h${props.rowIndex},${props.index}`) || {\n      colSpan: 1,\n      rowSpan: 1\n    }\n  )\n})\nconst inLast = computed(() => {\n  return isGroup.value\n    ? props.column.last\n    : props.column.index + cellSpan.value.colSpan >= state.columns.length\n})\n\nconst minWidth = 10\n\nlet currentWidth = 0\n\nfunction processColResize(payload: MovingState, lazy = false) {\n  const width = Math.max(currentWidth + (payload.isRtl ? -1 : 1) * payload.deltaX, minWidth)\n\n  !lazy &&\n    mutations.handleColumnResize(\n      state.columns\n        .slice(props.column.index, props.column.index + cellSpan.value.colSpan)\n        .map(column => column.key),\n      width\n    )\n\n  return width\n}\n\nconst { target: resizer } = useMoving({\n  capture: false,\n  onStart: (payload, event) => {\n    if (!resizable.value || resizing.value || isGroup.value) return false\n\n    const table = tableActions.getTableElement()\n\n    if (!table || !wrapper.value) return false\n\n    payload.xStart = payload.clientX - table.getBoundingClientRect().left\n    payload.isRtl = isRtl.value\n    currentWidth = wrapper.value.getBoundingClientRect().width\n\n    mutations.setColumnResizing(true)\n    mutations.setResizeLeft(payload.xStart)\n    tableActions.emitColResize('Start', {\n      ...buildEventPayload(event),\n      width: currentWidth\n    })\n  },\n  onMove: (payload, event) => {\n    payload.xEnd = Math.max(payload.xStart - currentWidth + minWidth, payload.xEnd)\n\n    mutations.setResizeLeft(payload.xEnd)\n    tableActions.emitColResize('Move', {\n      ...buildEventPayload(event),\n      width: processColResize(payload, state.colResizable !== 'responsive')\n    })\n  },\n  onEnd: (payload, event) => {\n    mutations.setColumnResizing(false)\n    tableActions.emitColResize('End', {\n      ...buildEventPayload(event),\n      width: processColResize(payload)\n    })\n  }\n})\n\nconst typed = computed(() => columnTypes.includes((props.column as TableTypeColumn).type))\nconst className = computed(() => {\n  let customClass = null\n\n  if (typeof state.headClass === 'function') {\n    customClass = state.headClass({\n      column: props.column,\n      index: props.column.colIndex,\n      rowIndex: props.rowIndex\n    })\n  } else {\n    customClass = state.headClass\n  }\n\n  return [\n    nh.be('head-cell'),\n    {\n      [nh.bem('head-cell', 'group')]: isGroup.value,\n      [nh.bem('head-cell', 'typed')]: typed.value,\n      [nh.bem('head-cell', 'center')]: typed.value || props.column.textAlign === 'center',\n      [nh.bem('head-cell', 'right')]: props.column.textAlign === 'right',\n      [nh.bem('head-cell', 'last')]: inLast.value\n    },\n    props.column.class,\n    customClass\n  ]\n})\nconst customStyle = computed(() => {\n  if (typeof state.headStyle === 'function') {\n    return state.headStyle({\n      column: props.column,\n      index: props.column.colIndex,\n      rowIndex: props.rowIndex\n    })\n  }\n\n  return state.headStyle\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 noFixed = !getters.hasFixedColumn\n  const padLeft = noFixed || columns.value[0]?.fixed === 'left' ? state.sidePadding[0] || 0 : 0\n  const padRight =\n    noFixed || getLast(columns.value)?.fixed === 'right' ? state.sidePadding[1] || 0 : 0\n  const width = totalWidths[props.index + colSpan] - totalWidths[props.index]\n\n  let height: number | undefined\n\n  if (rowSpan > 1) {\n    height = 0\n\n    for (let i = 0; i < rowSpan; ++i) {\n      height += state.rowMap.get(`${TABLE_HEAD_PREFIX}${props.rowIndex + i}`)?.height ?? 0\n    }\n  }\n\n  return [\n    props.column.style || '',\n    customStyle.value,\n    {\n      display: !colSpan ? '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.index + colSpan >= totalWidths.length - 1\n          ? 0\n          : undefined,\n      transform: `translate3d(${isRtl.value ? '-' : ''}${\n        (props.column.index ? padLeft : 0) + totalWidths[props.index]\n      }px, 0, 0)`\n    }\n  ] as StyleValue\n})\nconst attrs = computed(() => {\n  let customAttrs: Record<string, any>\n\n  if (typeof state.headAttrs === 'function') {\n    customAttrs = state.headAttrs({\n      column: props.column,\n      index: props.column.colIndex,\n      rowIndex: props.rowIndex\n    })\n  } else {\n    customAttrs = state.headAttrs\n  }\n\n  return { ...(props.column.attrs || {}), ...(customAttrs || {}) }\n})\nconst sorter = computed(() => {\n  return state.sorters.get(props.column.key) || ({} as ParsedTableSorterOptions)\n})\nconst filter = computed(() => {\n  return state.filters.get(props.column.key) || ({} as ParsedFilterOptions)\n})\nconst hasFilterActive = computed(() => {\n  const options = filter.value.options ?? []\n\n  for (let i = 0, len = options.length; i < len; ++i) {\n    if (options[i].active) {\n      return true\n    }\n  }\n\n  return false\n})\nconst checkboxDisabled = computed(() => {\n  if (!isSelection(props.column)) {\n    return false\n  }\n\n  const records = Object.values(getters.disableCheckRows)\n\n  return (\n    getters.processedData.length === records.length &&\n    !Object.values(getters.disableCheckRows).includes(false)\n  )\n})\n\nconst refreshXScroll = () => nextFrameOnce(tableActions.refreshXScroll)\n\nfunction isSelection(column: unknown): column is TableSelectionColumn {\n  return !isGroup.value && (column as TableTypeColumn).type === 'selection'\n}\n\nfunction buildEventPayload(event: Event) {\n  return {\n    column: props.column,\n    index: props.column.colIndex,\n    event\n  }\n}\n\nfunction handleMouseEnter(event: MouseEvent) {\n  tableActions?.emitHeadEvent('Enter', buildEventPayload(event))\n}\n\nfunction handleMouseLeave(event: MouseEvent) {\n  tableActions?.emitHeadEvent('Leave', buildEventPayload(event))\n}\n\nfunction handleClick(event: MouseEvent) {\n  tableActions?.emitHeadEvent('Click', buildEventPayload(event))\n}\n\nfunction handleDblclick(event: MouseEvent) {\n  tableActions?.emitHeadEvent('Dblclick', buildEventPayload(event))\n}\n\nfunction handleContextmenu(event: MouseEvent) {\n  tableActions?.emitHeadEvent('Contextmenu', buildEventPayload(event))\n}\n\nfunction handleSortAsc() {\n  const key = props.column.key\n  const type = sorter.value.type === 'asc' ? null : 'asc'\n\n  mutations.handleSort(key, type)\n  tableActions.emitRowSort()\n}\n\nfunction handleSortDesc() {\n  const key = props.column.key\n  const type = sorter.value.type === 'desc' ? null : 'desc'\n\n  mutations.handleSort(key, type)\n  tableActions.emitRowSort()\n}\n\nfunction handleFilter(value: ParsedFilterOptions['active']) {\n  mutations.handleFilter(props.column.key, value)\n}\n\nfunction handleFilterItemSelect(value: string | number, active: boolean) {\n  mutations.toggleFilterItemActive({\n    key: props.column.key,\n    value,\n    active,\n    disableOthers: true\n  })\n  handleFilter(value)\n  filterVisible.value = false\n  tableActions.emitRowFilter()\n}\n\nfunction handleFilterCheck(value: string | number, checked: boolean) {\n  mutations.toggleFilterItemActive({\n    key: props.column.key,\n    value,\n    active: checked\n  })\n}\n\nfunction handleFilterMultiple() {\n  const options = filter.value.options ?? []\n  const activeValues = []\n\n  for (let i = 0, len = options.length; i < len; ++i) {\n    const option = options[i]\n\n    if (option.active) {\n      activeValues.push(option.value)\n    }\n  }\n\n  handleFilter(activeValues)\n  filterVisible.value = false\n  tableActions.emitRowFilter()\n}\n\nfunction handleResetFilter() {\n  filterVisible.value = false\n  handleFilter(null)\n  mutations.toggleFilterItemActive({\n    key: props.column.key,\n    value: null,\n    disableOthers: true\n  })\n  tableActions.emitRowFilter()\n}\n\nfunction handleCheckAllRow() {\n  mutations.handleCheckAll()\n  tableActions.emitAllRowCheck(state.checkedAll, state.partial)\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=\"columnheader\"\n    scope=\"col\"\n    :colspan=\"cellSpan.colSpan !== 1 ? cellSpan.colSpan : undefined\"\n    :rowspan=\"cellSpan.rowSpan !== 1 ? cellSpan.rowSpan : undefined\"\n    :style=\"style\"\n    :aria-sort=\"\n      !isGroup && sorter.able\n        ? sorter.type\n          ? sorter.type === 'asc'\n            ? 'ascending'\n            : 'descending'\n          : 'none'\n        : undefined\n    \"\n    @mouseenter=\"handleMouseEnter\"\n    @mouseleave=\"handleMouseLeave\"\n    @click=\"handleClick\"\n    @dblclick=\"handleDblclick\"\n    @contextmenu=\"handleContextmenu\"\n    @transitionend=\"refreshXScroll\"\n  >\n    <div\n      v-if=\"column.index === 0\"\n      :class=\"nh.be('side-pad')\"\n      role=\"none\"\n      aria-hidden\n    ></div>\n    <template v-if=\"isSelection(column)\">\n      <div v-if=\"!column.singleSelect\" :class=\"nh.be('content')\">\n        <Checkbox\n          inherit\n          control\n          :class=\"nh.be('selection')\"\n          :checked=\"state.checkedAll\"\n          :partial=\"state.partial\"\n          :disabled=\"checkboxDisabled\"\n          :size=\"column.selectionSize || 'default'\"\n          @click.prevent=\"handleCheckAllRow\"\n        ></Checkbox>\n      </div>\n    </template>\n    <ResizeObserver\n      v-else\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            v-if=\"isGroup && isFunction((column as any).renderer)\"\n            :renderer=\"(column as any).renderer\"\n          ></Renderer>\n          <Renderer\n            v-else-if=\"isFunction(column.headRenderer)\"\n            :renderer=\"column.headRenderer\"\n            :data=\"{ column, index }\"\n          ></Renderer>\n          <template v-else>\n            {{ column.name }}\n          </template>\n        </Ellipsis>\n        <template v-else>\n          <Renderer\n            v-if=\"isGroup && isFunction((column as any).renderer)\"\n            :renderer=\"(column as any).renderer\"\n          ></Renderer>\n          <Renderer\n            v-else-if=\"isFunction(column.headRenderer)\"\n            :renderer=\"column.headRenderer\"\n            :data=\"{ column, index }\"\n          ></Renderer>\n          <template v-else>\n            {{ column.name }}\n          </template>\n        </template>\n        <template v-if=\"!isGroup\">\n          <div v-if=\"sorter.able\" :class=\"nh.be('sorter')\">\n            <span\n              :class=\"{\n                [nh.bem('sorter', 'asc')]: true,\n                [nh.bem('sorter', 'active')]: sorter.type === 'asc'\n              }\"\n              @click=\"handleSortAsc()\"\n            >\n              <TableIcon name=\"asc\" :origin=\"icons.angleUp\"></TableIcon>\n            </span>\n            <span\n              :class=\"{\n                [nh.bem('sorter', 'desc')]: true,\n                [nh.bem('sorter', 'active')]: sorter.type === 'desc'\n              }\"\n              @click=\"handleSortDesc()\"\n            >\n              <TableIcon name=\"desc\" :origin=\"icons.angleDown\"></TableIcon>\n            </span>\n          </div>\n          <template v-if=\"filter.able\">\n            <Renderer\n              v-if=\"isFunction(column.filterRenderer)\"\n              :renderer=\"column.filterRenderer\"\n              :data=\"{ column, index, filter, handleFilter }\"\n            ></Renderer>\n            <Tooltip\n              v-else\n              v-model:visible=\"filterVisible\"\n              transfer\n              placement=\"bottom\"\n              trigger=\"click\"\n              :class=\"{\n                [nh.be('filter')]: true,\n                [nh.bem('filter', 'visible')]: filterVisible,\n                [nh.bem('filter', 'active')]: filter.active\n              }\"\n              :tip-class=\"{\n                [nh.be('filter-wrapper')]: true,\n                [nh.bs('vars')]: true,\n                [nh.bem('filter-wrapper', 'multiple')]: filter.multiple\n              }\"\n            >\n              <template #trigger>\n                <div :class=\"nh.be('filter-trigger')\">\n                  <TableIcon name=\"filter\" :origin=\"icons.filter\"></TableIcon>\n                </div>\n              </template>\n              <template v-if=\"filter.multiple\" #default>\n                <div vertical :class=\"nh.be('filter-group')\">\n                  <Checkbox\n                    v-for=\"item in filter.options\"\n                    :key=\"item.value\"\n                    inherit\n                    :checked=\"item.active\"\n                    :label=\"item.label\"\n                    :value=\"item.value\"\n                    @change=\"handleFilterCheck(item.value, $event)\"\n                  ></Checkbox>\n                </div>\n                <div :class=\"nh.be('filter-actions')\">\n                  <Button\n                    inherit\n                    text\n                    size=\"small\"\n                    :disabled=\"!hasFilterActive\"\n                    @click=\"handleFilterMultiple()\"\n                  >\n                    {{ locale.filterConfirm }}\n                  </Button>\n                  <Button\n                    inherit\n                    text\n                    size=\"small\"\n                    @click=\"handleResetFilter\"\n                  >\n                    {{ locale.filterReset }}\n                  </Button>\n                </div>\n              </template>\n              <template v-else #default>\n                <div\n                  :class=\"{\n                    [nh.be('filter-item')]: true,\n                    [nh.bem('filter-item', 'active')]: !filter.active\n                  }\"\n                  @click=\"handleResetFilter\"\n                >\n                  {{ locale.filterAll }}\n                </div>\n                <div\n                  v-for=\"item in filter.options\"\n                  :key=\"item.value\"\n                  :class=\"{\n                    [nh.be('filter-item')]: true,\n                    [nh.bem('filter-item', 'active')]: item.active\n                  }\"\n                  @click=\"handleFilterItemSelect(item.value, !item.active)\"\n                >\n                  {{ item.label }}\n                </div>\n              </template>\n            </Tooltip>\n          </template>\n        </template>\n      </span>\n    </ResizeObserver>\n    <div\n      v-if=\"!isGroup && resizable && !typed && !column.last\"\n      ref=\"resizer\"\n      :class=\"nh.be('resizer')\"\n    ></div>\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":["minWidth","props","__props","state","getters","mutations","inject","TABLE_STORE","tableActions","TABLE_ACTIONS","nh","useNameHelper","locale","toRef","icons","useIcons","isRtl","useRtl","filterVisible","ref","resizable","resizing","computed","wrapper","isGroup","columns","cellSpan","inLast","currentWidth","processColResize","payload","lazy","width","column","resizer","useMoving","event","table","buildEventPayload","typed","columnTypes","className","customClass","customStyle","style","totalWidths","colSpan","rowSpan","noFixed","padLeft","_a","padRight","_b","getLast","height","i","_c","TABLE_HEAD_PREFIX","attrs","customAttrs","sorter","filter","hasFilterActive","options","len","checkboxDisabled","isSelection","records","refreshXScroll","nextFrameOnce","handleMouseEnter","handleMouseLeave","handleClick","handleDblclick","handleContextmenu","handleSortAsc","key","type","handleSortDesc","handleFilter","value","handleFilterItemSelect","active","handleFilterCheck","checked","handleFilterMultiple","activeValues","option","handleResetFilter","handleCheckAllRow","handleCellResize","entry"],"mappings":"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"}