{"version":3,"file":"styles.mjs","sources":["../../../../../../src/components/ivue-table/table/styles.ts"],"sourcesContent":["import { computed, ref, watch, unref, watchEffect } from 'vue';\r\nimport { useResizeObserver, useEventListener } from '@vueuse/core';\r\n\r\n// ts\r\nimport type { Table, TableProps, RenderExpanded } from './defaults';\r\nimport type TableLayout from '../table-layout';\r\nimport type { Store } from '../store';\r\n\r\nfunction useStyle(\r\n  props: TableProps,\r\n  layout: TableLayout,\r\n  store: Store,\r\n  table: Table\r\n) {\r\n  // 滚动组件样式\r\n  const scrollbarContentStyle = {\r\n    display: 'inline-block',\r\n    verticalAlign: 'middle',\r\n  };\r\n\r\n  // data\r\n\r\n  // 拖动中\r\n  const dragging = ref<boolean>(false);\r\n\r\n  // 是否可以展开\r\n  const renderExpanded = ref<RenderExpanded | null>(null);\r\n\r\n  // 表格可滚动高度\r\n  const tableScrollHeight = ref<number>(0);\r\n\r\n  // 中间内容的高度\r\n  const bodyScrollHeight = ref<number>(0);\r\n\r\n  // 表格头部滚动高度\r\n  const headerScrollHeight = ref<number>(0);\r\n\r\n  // 表格底部滚动高度\r\n  const footerScrollHeight = ref<number>(0);\r\n\r\n  // 表格缩放\r\n  const resizeState = ref<{\r\n    width: null | number;\r\n    height: null | number;\r\n    headerHeight: null | number;\r\n  }>({\r\n    width: null,\r\n    height: null,\r\n    headerHeight: null,\r\n  });\r\n\r\n  // 表格宽度\r\n  const tableWidth = ref<number>(0);\r\n\r\n  // 是否拥有多级表头\r\n  const isGroup = ref<boolean>(false);\r\n\r\n  // computed\r\n\r\n  // table-layout布局方式\r\n  const tableLayout = computed(() => {\r\n    // 有最大高度\r\n    if (props.maxHeight) {\r\n      return 'fixed';\r\n    }\r\n\r\n    return props.tableLayout;\r\n  });\r\n\r\n  // 内容样式\r\n  const contentStyles = computed(() => {\r\n    let obj = {};\r\n\r\n    // 有固定高度\r\n    if (props.height) {\r\n      obj = {\r\n        height: !Number.isNaN(Number(props.height))\r\n          ? `${props.height}px`\r\n          : props.height,\r\n      };\r\n    }\r\n\r\n    // 有最大高度\r\n    if (props.maxHeight) {\r\n      obj = {\r\n        maxHeight: !Number.isNaN(Number(props.maxHeight))\r\n          ? `${props.maxHeight}px`\r\n          : props.maxHeight,\r\n      };\r\n    }\r\n\r\n    return obj;\r\n  });\r\n\r\n  // 表格内容宽度\r\n  const tableStyles = computed(() => {\r\n    const { scrollY, gutterWidth } = layout;\r\n\r\n    return {\r\n      width: layout.bodyWidth.value\r\n        ? `${\r\n            (layout.bodyWidth.value as number) -\r\n            (scrollY.value ? gutterWidth : 0)\r\n          }px`\r\n        : '',\r\n    };\r\n  });\r\n\r\n  // 高度是否有变化\r\n  const shouldUpdateHeight = computed(() => {\r\n    return (\r\n      props.height ||\r\n      props.maxHeight ||\r\n      store.states.fixedColumns.value.length > 0 ||\r\n      store.states.rightFixedColumns.value.length > 0\r\n    );\r\n  });\r\n\r\n  // 提示样式\r\n  const placeholderStyle = computed(() => {\r\n    if (props.data && props.data.length) {\r\n      return null;\r\n    }\r\n\r\n    let height = '100%';\r\n\r\n    // 中间内容的高度\r\n    if (props.height && bodyScrollHeight.value) {\r\n      height = `${bodyScrollHeight.value}px`;\r\n    }\r\n\r\n    const width = tableWidth.value;\r\n\r\n    return {\r\n      width: width ? `${width}px` : '',\r\n      height,\r\n    };\r\n  });\r\n\r\n  // 内容宽度\r\n  const tableBodyStyle = computed(() => {\r\n    const { bodyWidth } = layout;\r\n\r\n    const obj: any = {\r\n      tableLayout: tableLayout.value,\r\n    };\r\n\r\n    if (bodyWidth.value) {\r\n      obj.width = `${bodyWidth.value as number}px`;\r\n    }\r\n\r\n    return obj;\r\n  });\r\n\r\n  // 滚动组件样式\r\n  const scrollbarWrapperStyle = computed(() => {\r\n    // 有设置高度\r\n    if (props.height) {\r\n      return {\r\n        height: '100%',\r\n      };\r\n    }\r\n\r\n    // 有最大高度\r\n    if (props.maxHeight) {\r\n      // number\r\n      if (!Number.isNaN(Number(props.maxHeight))) {\r\n        const headerHeight = table.refs.header?.scrollHeight || 0;\r\n        const maxHeight = props.maxHeight;\r\n\r\n        // 超过最大高度\r\n        const reachMaxHeight = tableScrollHeight.value >= Number(maxHeight);\r\n\r\n        // 表格内容高度\r\n        if (reachMaxHeight) {\r\n          return {\r\n            maxHeight: `${tableScrollHeight.value - headerHeight}px`,\r\n          };\r\n        }\r\n      }\r\n      // string\r\n      else {\r\n        return {\r\n          maxHeight: `calc(${props.maxHeight} - ${headerScrollHeight.value}px)`,\r\n        };\r\n      }\r\n    }\r\n\r\n    return {};\r\n  });\r\n\r\n  // methods\r\n\r\n  // 绑定事件\r\n  const handleBindEvents = () => {\r\n    const scrollbar = table.refs.scrollbar;\r\n\r\n    // 没有滚动条\r\n    if (!scrollbar) {\r\n      return;\r\n    }\r\n\r\n    // 有滚动条\r\n    if (scrollbar.scrollbarWrapper) {\r\n      useEventListener(\r\n        scrollbar.scrollbarWrapper,\r\n        'scroll',\r\n        handleScrollbarScroll,\r\n        {\r\n          passive: true,\r\n        }\r\n      );\r\n    }\r\n\r\n    // 列的宽度自撑开\r\n    if (props.fit) {\r\n      // 绑定resize\r\n      useResizeObserver(table.vnode.el as HTMLElement, handleResizeListener);\r\n    }\r\n    // 表格大小改变\r\n    else {\r\n      useEventListener(window, 'resize', handleResizeListener);\r\n    }\r\n  };\r\n\r\n  // 鼠标离开\r\n  const handleMouseLeave = () => {\r\n    // 清除列hover\r\n    table.store.commit('setHoverRow', null);\r\n\r\n    // 清除列hover\r\n    if (table.hoverState) {\r\n      table.hoverState = null;\r\n    }\r\n  };\r\n\r\n  // 鼠标滚轮\r\n  const handleMousewheel = (event, data) => {\r\n    const { pixelX, pixelY } = data;\r\n\r\n    // x 大于 y table横向滚动\r\n    if (Math.abs(pixelX) >= Math.abs(pixelY)) {\r\n      table.refs.bodyWrapper.scrollLeft += data.pixelX / 5;\r\n    }\r\n  };\r\n\r\n  // 拖拽显示\r\n  const handleDragVisible = (visible: boolean) => {\r\n    dragging.value = visible;\r\n  };\r\n\r\n  // 更新布局\r\n  const updateLayout = () => {\r\n    // 高度是否有变化更新高度\r\n    if (shouldUpdateHeight.value) {\r\n      layout.updateTableContentHeight();\r\n    }\r\n\r\n    // 更新列的宽度\r\n    layout.updateColumnsWidth();\r\n\r\n    // 滚动条滚动\r\n    requestAnimationFrame(handleScrollbarScroll);\r\n  };\r\n\r\n  // 表格大小改变\r\n  const handleResizeListener = () => {\r\n    // 表格是否渲染完成\r\n    if (!table.$ready) {\r\n      return;\r\n    }\r\n\r\n    // 更新布局\r\n    let shouldUpdateLayout = false;\r\n\r\n    // 当前el\r\n    const el = table.vnode.el!;\r\n\r\n    // 当前改变的值\r\n    const {\r\n      width: oldWidth,\r\n      height: oldHeight,\r\n      headerHeight: oldHeaderHeight,\r\n    } = resizeState.value;\r\n\r\n    // 当前表格宽度\r\n    const width = (tableWidth.value = el.offsetWidth);\r\n\r\n    // 有改变表格宽度\r\n    if (oldWidth !== width) {\r\n      shouldUpdateLayout = true;\r\n    }\r\n\r\n    // 监听高度变化\r\n    const height = el.offsetHeight;\r\n    if ((props.height || shouldUpdateHeight.value) && oldHeight !== height) {\r\n      shouldUpdateLayout = true;\r\n    }\r\n\r\n    // 监听表格头部是否显示\r\n    const tableHeader: HTMLElement = table.refs.header || {};\r\n\r\n    if (\r\n      tableHeader &&\r\n      props.showHeader &&\r\n      tableHeader.offsetHeight !== oldHeaderHeight\r\n    ) {\r\n      shouldUpdateLayout = true;\r\n    }\r\n\r\n    // 表格可滚动高度\r\n    tableScrollHeight.value = table.refs.tableWrapper.scrollHeight;\r\n\r\n    // 表格头部滚动高度\r\n    headerScrollHeight.value = table.refs.header?.scrollHeight || 0;\r\n\r\n    // 表格底部滚动高度\r\n    footerScrollHeight.value = table.refs.footer?.scrollHeight || 0;\r\n\r\n    // 中间内容的高度 = 表格可滚动高度 - 表格头部滚动高度 - 表格底部滚动高度\r\n    bodyScrollHeight.value =\r\n      tableScrollHeight.value -\r\n      headerScrollHeight.value -\r\n      footerScrollHeight.value;\r\n\r\n    if (shouldUpdateLayout) {\r\n      resizeState.value = {\r\n        width,\r\n        height,\r\n        headerHeight: props.showHeader ? tableHeader.offsetHeight : null,\r\n      };\r\n\r\n      // 更新布局\r\n      updateLayout();\r\n    }\r\n  };\r\n\r\n  // 滚动条滚动\r\n  const handleScrollbarScroll = () => {\r\n    const scrollbar = table.refs.scrollbar;\r\n\r\n    // 没有滚动\r\n    if (!scrollbar) {\r\n      return;\r\n    }\r\n\r\n    // 是否可以滚动\r\n    if (!layout.scrollX.value) {\r\n      const scrollingNoneClass = 'is-scrolling-none';\r\n\r\n      if (!hasClass(scrollingNoneClass)) {\r\n        setTableClass(scrollingNoneClass);\r\n      }\r\n    }\r\n\r\n    const scrollContainer = scrollbar.scrollbarWrapper;\r\n\r\n    // 没有滚动条\r\n    if (!scrollContainer) {\r\n      return;\r\n    }\r\n\r\n    const { scrollLeft, offsetWidth, scrollWidth } = scrollContainer;\r\n    const { header, footer } = table.refs;\r\n\r\n    // 设置头部滚动位置\r\n    if (header) {\r\n      header.scrollLeft = scrollLeft;\r\n    }\r\n\r\n    // 设置底部滚动位置\r\n    if (footer) {\r\n      footer.scrollLeft = scrollLeft;\r\n    }\r\n\r\n    // 最大滚动位置\r\n    const maxScrollLeftPosition = scrollWidth - offsetWidth - 1;\r\n\r\n    // 最右边\r\n    if (scrollLeft >= maxScrollLeftPosition) {\r\n      setTableClass('is-scrolling-right');\r\n    }\r\n    // 滚动到最左边\r\n    else if (scrollLeft === 0) {\r\n      setTableClass('is-scrolling-left');\r\n    }\r\n    // 滚动到中间\r\n    else {\r\n      setTableClass('is-scrolling-middle');\r\n    }\r\n  };\r\n\r\n  // 是否有当前样式\r\n  const hasClass = (className: string) => {\r\n    const { tableWrapper } = table.refs;\r\n\r\n    return !!(tableWrapper && tableWrapper.classList.contains(className));\r\n  };\r\n\r\n  // 设置表格样式\r\n  const setTableClass = (className: string) => {\r\n    const { tableWrapper } = table.refs;\r\n\r\n    if (!tableWrapper) {\r\n      return;\r\n    }\r\n\r\n    const classList = Array.from(tableWrapper.classList).filter(\r\n      (item) => !item.startsWith('is-scrolling-')\r\n    );\r\n\r\n    classList.push(layout.scrollX.value ? className : 'is-scrolling-none');\r\n\r\n    tableWrapper.className = classList.join(' ');\r\n  };\r\n\r\n  // 监听数据变化\r\n  watch(\r\n    () => props.data,\r\n    (data) => {\r\n      table.store.commit('setData', data);\r\n    },\r\n    {\r\n      immediate: true,\r\n      deep: true,\r\n    }\r\n  );\r\n\r\n  // 监听行key\r\n  watch(\r\n    () => [store.states.rowKey],\r\n    ([currentRowKey, rowKey]) => {\r\n      if (!unref(rowKey)) {\r\n        return;\r\n      }\r\n\r\n      // 设置当前行的key\r\n      store.setCurrentRowKey(`${currentRowKey}`);\r\n    },\r\n    {\r\n      immediate: true,\r\n    }\r\n  );\r\n\r\n  // watchEffect\r\n\r\n  // 监听高度变化设置表格高度\r\n  watchEffect(() => {\r\n    props.height && layout.setHeight(props.height);\r\n  });\r\n\r\n  // 监听高度变化设置表格最大高度\r\n  watchEffect(() => {\r\n    props.maxHeight && layout.setMaxHeight(props.maxHeight);\r\n  });\r\n\r\n  // 以通过该属性设置 Table 目前的展开行\r\n  watchEffect(() => {\r\n    if (props.expandRowKeys) {\r\n      store.setExpandRowKeysAdapter(props.expandRowKeys);\r\n    }\r\n  });\r\n\r\n  return {\r\n    // data\r\n    dragging,\r\n    renderExpanded,\r\n    resizeState,\r\n    tableWidth,\r\n    isGroup,\r\n\r\n    // computed\r\n    tableLayout,\r\n    contentStyles,\r\n    tableStyles,\r\n    placeholderStyle,\r\n    tableBodyStyle,\r\n    scrollbarWrapperStyle,\r\n    scrollbarContentStyle,\r\n\r\n    // methods\r\n    handleMouseLeave,\r\n    handleMousewheel,\r\n    handleDragVisible,\r\n    updateLayout,\r\n    handleBindEvents,\r\n  };\r\n}\r\n\r\nexport default useStyle;\r\n"],"names":[],"mappings":"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"}