{"version":3,"file":"use-style.mjs","sources":["../../../../../../packages/components/data-table/src/hooks/use-style.ts"],"sourcesContent":["import { useConfig } from '@element-ultra/hooks'\nimport {\n  computed,\n  CSSProperties,\n  shallowReactive,\n  shallowRef,\n  watch,\n  onBeforeUnmount\n} from 'vue'\nimport type { DataTableColumn, DataTableProps } from '../data-table'\nimport type { TableHeader } from '../utils'\nimport type { DomRefs } from './use-dom-ref'\n\nexport default function useStyle(props: DataTableProps, refs: DomRefs) {\n  /**\n   * 获取单元格的通用样式\n   * @param column 列\n   */\n  const getCellStyle = (column: DataTableColumn) => {\n    const { width, minWidth } = column\n    const { columnMinWidth } = props\n    // minWidth的优先级大于width, 同时指定width和minWidth时需要判断:\n    // 当width > minWidth时以width为宽度, 当width < minWidth时, 以minWidth为宽度\n    //\n    let style: Record<string, any> = {}\n    if (width) {\n      style.width = width + 'px'\n    }\n    if (minWidth) {\n      style.minWidth = minWidth + 'px'\n      if (width && width < minWidth) {\n        style.width = style.minWidth\n      }\n    }\n    if (!minWidth && !width) {\n      style.minWidth = columnMinWidth + 'px'\n    }\n    return style\n  }\n\n  /** 表格大小尺寸映射 */\n  const [config] = useConfig()\n\n  const sizeMapper = {\n    small: 32,\n    default: 40,\n    large: 48\n  }\n  /** 表格项尺寸 */\n  const itemSize = computed(() => {\n    const size = props.size || config.size || 'default'\n\n    return sizeMapper[size] || 32\n  })\n\n  /**\n   * 获取表头单元格的样式\n   * @param header 表头\n   */\n  const getHeaderCellStyle = (header: TableHeader) => {\n    const style: CSSProperties = {\n      textAlign: header.data.align || 'left'\n    }\n    // 叶子节点会有宽度和最小宽度的样式\n    if (header.isLeaf) {\n      Object.assign(style, getCellStyle(header.data))\n    }\n    return style\n  }\n\n  /** 获取额外列的单元格样式 */\n  const getExtraCellStyle = (column: DataTableColumn) => {\n    return Object.assign(\n      {\n        textAlign: column.align\n      },\n      getCellStyle(column)\n    )\n  }\n\n  const scrollState = shallowReactive({\n    scrollLeft: 0,\n    scrollWidth: 0,\n    offsetWidth: 0\n  })\n\n  const showLeftFixedShadow = shallowRef(false)\n  const showRightFixedShadow = shallowRef(false)\n\n  /** 计算表格固定栏的阴影 */\n  watch(scrollState, ({ scrollLeft, scrollWidth, offsetWidth }) => {\n    showLeftFixedShadow.value = scrollLeft > 0 && scrollWidth > offsetWidth\n    showRightFixedShadow.value = scrollWidth - offsetWidth > scrollLeft\n  })\n\n  // 表头和表底的引用, 用以计算表体的高度\n  const { headerRef, footerRef } = refs\n\n  let bodyHeight = shallowRef('100%')\n\n  let o: ResizeObserver\n\n  watch(\n    [() => headerRef.value, () => footerRef.value],\n    ([header, footer], [oHeader, oFooter]) => {\n      if (header || footer) {\n        if (!o) {\n          o = new ResizeObserver(e => {\n            bodyHeight.value = `calc(100% - ${\n              (headerRef.value?.offsetHeight ?? 0) +\n              (footerRef.value?.offsetHeight ?? 0)\n            }px)`\n          })\n        }\n      } else {\n        o?.disconnect()\n      }\n\n      if (header) {\n        o.observe(header)\n      } else {\n        oHeader && o.unobserve(oHeader)\n      }\n      if (footer) {\n        o.observe(footer)\n      } else {\n        oFooter && o.unobserve(oFooter)\n      }\n    }\n  )\n\n  onBeforeUnmount(() => {\n    o.disconnect()\n  })\n\n  return {\n    /** 滚动状态 */\n    scrollState,\n\n    /** 行高大小 */\n    itemSize,\n\n    /** 显示左侧固定栏的阴影 */\n    showLeftFixedShadow,\n\n    /** 显示右侧固定栏的阴影 */\n    showRightFixedShadow,\n\n    /** 获取单元格的通用样式 */\n    getCellStyle,\n\n    /** 获取表头单元格的样式 */\n    getHeaderCellStyle,\n\n    /** 获取额外列的单元格样式 */\n    getExtraCellStyle,\n\n    /** 表体的高度 */\n    bodyHeight\n  }\n}\n\nexport type UseStyleReturned = ReturnType<typeof useStyle>\n"],"names":[],"mappings":"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"}