tdesign-vue-next
Version:
TDesign Component for vue-next
1 lines • 29.9 kB
Source Map (JSON)
{"version":3,"file":"tab-nav.mjs","sources":["../../../common/js/tabs/base.ts","../../../components/tabs/tab-nav.tsx"],"sourcesContent":["const getDomWidth = (dom: HTMLElement): number => dom?.offsetWidth || 0;\nconst getDomOffsetLeft = (dom: HTMLElement): number => dom?.offsetLeft || 0;\n\ntype scrollPosition = 'auto' | 'start' | 'center' | 'end';\n\nexport interface allElementDeps {\n activeTab?: HTMLElement;\n navsContainer?: HTMLElement;\n navsWrap?: HTMLElement;\n leftOperations?: HTMLElement;\n toLeftBtn?: HTMLElement;\n rightOperations?: HTMLElement;\n toRightBtn?: HTMLElement;\n}\n\nexport function calculateOffset(depElement: allElementDeps, offset: number, scrollPosition: scrollPosition): number {\n // 计算当前 activeTab 应该滚动到的位置\n const { navsContainer, activeTab, rightOperations, leftOperations } = depElement;\n const tabWidth = getDomWidth(activeTab);\n const wrapWidth = getDomWidth(navsContainer);\n const tabOffset = getDomOffsetLeft(activeTab);\n const rightOperationsWidth = getDomWidth(rightOperations);\n const leftOperationsWidth = getDomWidth(leftOperations);\n\n if (scrollPosition === 'auto') {\n if (tabOffset - leftOperationsWidth < offset) {\n return tabOffset - leftOperationsWidth;\n }\n if (tabOffset + tabWidth > offset + wrapWidth - rightOperationsWidth) {\n return tabOffset + tabWidth - wrapWidth + rightOperationsWidth;\n }\n } else if (scrollPosition === 'start') {\n return tabOffset - leftOperationsWidth;\n } else if (scrollPosition === 'center') {\n return tabOffset + (tabWidth - wrapWidth) / 2;\n } else if (scrollPosition === 'end') {\n return tabOffset + tabWidth - wrapWidth + rightOperationsWidth;\n }\n return offset;\n}\n\n/**\n * 计算上一页或下一页偏移量\n * @param elements 计算时依赖的元素\n * @returns number\n */\nexport function calcPrevOrNextOffset(elements: allElementDeps, offset: number, action: 'next' | 'prev'): number {\n const { navsContainer, activeTab } = elements;\n const navsContainerWidth = getDomWidth(navsContainer);\n const activeTabWidth = getDomWidth(activeTab);\n /**\n * 计算当前 activeTab 与 navsContainer 的宽度差,\n * 注意 activeTab 的宽度可能大于 navsContainer 的宽度,\n * 所以需要取绝对值\n */\n const diffWidth = Math.abs(navsContainerWidth - activeTabWidth);\n if (action === 'next') {\n return offset + diffWidth;\n }\n return offset - diffWidth;\n}\n\n/**\n * 计算最大偏移量\n * @param elements 计算时依赖的元素\n * @returns number\n */\nexport function calcMaxOffset(elements: allElementDeps): number {\n const { navsWrap, navsContainer, rightOperations, toRightBtn } = elements;\n const wrapWidth = getDomWidth(navsWrap);\n const containerWidth = getDomWidth(navsContainer);\n const rightOperationsWidth = getDomWidth(rightOperations);\n const toRightBtnWidth = getDomWidth(toRightBtn);\n return wrapWidth - containerWidth + rightOperationsWidth - toRightBtnWidth;\n}\n\n/**\n * 计算合法偏移量\n * @param offset 偏移值\n * @param maxOffset 最大偏移值\n * @returns number\n */\nexport function calcValidOffset(offset: number, maxOffset: number): number {\n return Math.max(0, Math.min(offset, maxOffset));\n}\n","import { h, defineComponent, Transition, ref, computed, watch, onMounted, nextTick } from 'vue';\nimport { debounce, isFunction } from 'lodash-es';\nimport {\n ChevronLeftIcon as TdChevronLeftIcon,\n ChevronRightIcon as TdChevronRightIcon,\n AddIcon as TdAddIcon,\n} from 'tdesign-icons-vue-next';\nimport { TdTabsProps } from './type';\nimport tabProps from './props';\nimport { calcMaxOffset, calcValidOffset, calculateOffset, calcPrevOrNextOffset } from '@tdesign/common-js/tabs/base';\n\n// 子组件\nimport TTabPanel from './tab-panel';\nimport TTabNavItem from './tab-nav-item';\nimport TTabNavBar from './tab-nav-bar';\n\n// hooks\nimport { useResize, useDragSort, useGlobalIcon, usePrefixClass, useCommonClassName } from '@tdesign/shared-hooks';\n\nexport default defineComponent({\n name: 'TTabNav',\n resizeObserver: null,\n props: {\n theme: tabProps.theme,\n panels: {\n type: Array as { new (): Array<InstanceType<typeof TTabPanel>> },\n default: (): Array<InstanceType<typeof TTabPanel>> => [] as Array<InstanceType<typeof TTabPanel>>,\n },\n action: Array,\n value: tabProps.value,\n placement: tabProps.placement,\n scrollPosition: tabProps.scrollPosition,\n size: tabProps.size,\n disabled: tabProps.disabled,\n addable: tabProps.addable,\n onChange: tabProps.onChange,\n onAdd: tabProps.onAdd,\n onRemove: tabProps.onRemove,\n dragSort: tabProps.dragSort,\n // 在 useDragSort 里会被调用\n onDragSort: tabProps.onDragSort,\n },\n setup(props) {\n const componentName = usePrefixClass('tabs');\n const { ChevronLeftIcon, ChevronRightIcon, AddIcon } = useGlobalIcon({\n ChevronLeftIcon: TdChevronLeftIcon,\n ChevronRightIcon: TdChevronRightIcon,\n AddIcon: TdAddIcon,\n });\n const classPrefix = usePrefixClass();\n\n const { SIZE } = useCommonClassName();\n\n const scrollLeft = ref(0);\n\n // refs\n const navsContainerRef = ref();\n const navsWrapRef = ref();\n const leftOperationsRef = ref();\n const rightOperationsRef = ref();\n const toRightBtnRef = ref();\n const activeTabRef = ref();\n const maxScrollLeft = ref(0);\n const showAction = computed(() => {\n return ['top', 'bottom'].includes(props?.placement?.toLowerCase());\n });\n\n const getRefs = () => ({\n navsContainer: navsContainerRef.value,\n navsWrap: navsWrapRef.value,\n leftOperations: leftOperationsRef.value,\n rightOperations: rightOperationsRef.value,\n toRightBtn: toRightBtnRef.value,\n activeTab: activeTabRef.value,\n });\n\n // left right位置 选项卡的位置是在左右侧垂直方向铺开的\n const isVerticalPlacement = computed(() => ['left', 'right'].includes(props.placement.toLowerCase()));\n\n // 展示操作按钮\n const canToLeft = computed(() => scrollLeft.value > 1);\n const canToRight = computed(() => scrollLeft.value < maxScrollLeft.value - 1);\n\n // style\n const wrapTransformStyle = computed(() => {\n if (isVerticalPlacement.value) return {};\n return {\n transform: `translate3d(${-scrollLeft.value}px, 0, 0)`,\n };\n });\n const navsContainerStyle = computed(() => {\n return props.addable ? { 'min-height': '48px' } : null;\n });\n\n // class\n const iconBaseClass = computed(() => {\n return {\n [`${componentName.value}__btn`]: true,\n [SIZE.value.medium]: props.size === 'medium',\n [SIZE.value.large]: props.size === 'large',\n };\n });\n const leftIconClass = computed(() => {\n return {\n [`${componentName.value}__btn--left`]: true,\n ...iconBaseClass.value,\n };\n });\n const rightIconClass = computed(() => {\n return {\n [`${componentName.value}__btn--right`]: true,\n ...iconBaseClass.value,\n };\n });\n const addIconClass = computed(() => {\n return {\n [`${componentName.value}__add-btn`]: true,\n ...iconBaseClass.value,\n };\n });\n const navContainerClass = computed(() => {\n return {\n [`${componentName.value}__nav-container`]: true,\n [`${componentName.value}__nav--card`]: props.theme === 'card',\n [`${classPrefix.value}-is-${props.placement}`]: true,\n [`${classPrefix.value}-is-addable`]: props.addable,\n };\n });\n const navScrollContainerClass = computed(() => {\n return {\n [`${componentName.value}__nav-scroll`]: true,\n [`${classPrefix.value}-is-scrollable`]: canToLeft.value || canToRight.value,\n };\n });\n\n const navsWrapClass = computed(() => {\n return [\n `${componentName.value}__nav-wrap`,\n `${classPrefix.value}-is-smooth`,\n { [`${classPrefix.value}-is-vertical`]: isVerticalPlacement.value },\n ];\n });\n\n const setOffset = (offset: number) => {\n scrollLeft.value = calcValidOffset(offset, maxScrollLeft.value);\n };\n\n const handleScroll = (action: 'prev' | 'next') => {\n setOffset(calcPrevOrNextOffset(getRefs(), scrollLeft.value, action));\n };\n\n const handleWheel = (event: WheelEvent) => {\n if (!canToLeft.value && !canToRight.value) return;\n\n event.preventDefault();\n const { deltaX, deltaY } = event;\n\n if (Math.abs(deltaX) > Math.abs(deltaY)) {\n setOffset(scrollLeft.value + deltaX);\n } else {\n setOffset(scrollLeft.value + deltaY);\n }\n };\n\n const handleActiveTabScroll = () => {\n setTimeout(() => {\n setOffset(calculateOffset(getRefs(), scrollLeft.value, props.scrollPosition));\n }, 0);\n };\n\n const getMaxScrollLeft = () => {\n nextTick(() => {\n maxScrollLeft.value = calcMaxOffset(getRefs());\n // fix https://github.com/Tencent/tdesign-vue-next/issues/6292\n if (maxScrollLeft.value - scrollLeft.value <= 0) setOffset(maxScrollLeft.value);\n });\n };\n\n // watch\n watch([() => props.placement, () => props.panels], getMaxScrollLeft);\n watch([() => props.scrollPosition], handleActiveTabScroll);\n\n // life times\n useResize(debounce(getMaxScrollLeft), navsContainerRef.value);\n\n const handleAddTab = (e: MouseEvent) => {\n props.onAdd?.({ e });\n };\n\n const tabClick = (event: MouseEvent, nav: Partial<InstanceType<typeof TTabPanel>>) => {\n const { value, disabled } = nav;\n if (disabled || props.value === value) {\n return false;\n }\n props.onChange(value);\n };\n const onTabRemove = ({ e, value, index }: Parameters<TdTabsProps['onRemove']>[0]) => {\n props.onRemove({ e, value, index });\n };\n const setActiveTab = (ref: any) => {\n if (!ref?.$el) return;\n if (ref?.value === props.value && activeTabRef.value !== ref.$el) {\n activeTabRef.value = ref.$el;\n handleActiveTabScroll();\n }\n };\n\n const { setNavsWrap } = useDragSort(props);\n\n onMounted(() => {\n setNavsWrap(navsWrapRef.value);\n getMaxScrollLeft();\n handleActiveTabScroll();\n });\n // renders\n const renderNavsContent = () => {\n return props.panels.map((panel, index) => {\n let label;\n // @ts-ignore\n if (panel?.children?.label) {\n // @ts-ignore\n label = panel.children.label();\n } else if (isFunction(panel.label)) {\n label = panel.label(h);\n } else {\n label = panel.label || `选项卡${index + 1}`;\n }\n let draggable = props.dragSort;\n if (draggable && panel.draggable === false) {\n draggable = panel.draggable;\n }\n return (\n <TTabNavItem\n ref={setActiveTab}\n draggable={draggable}\n key={panel.value}\n index={index}\n theme={props.theme}\n size={props.size}\n placement={props.placement}\n label={label}\n active={panel.value === props.value}\n disabled={props.disabled || panel.disabled}\n removable={panel.removable}\n value={panel.value}\n onClick={(e: MouseEvent) => tabClick(e, panel)}\n onTabRemove={onTabRemove}\n onTabPanelRemove={panel.onRemove}\n />\n );\n });\n };\n const renderArrows = () => {\n return [\n <div\n ref={leftOperationsRef}\n class={[`${componentName.value}__operations`, `${componentName.value}__operations--left`]}\n >\n <Transition name=\"fade\" mode=\"out-in\" appear>\n {canToLeft.value ? (\n <div class={leftIconClass.value} onClick={() => handleScroll('prev')}>\n <ChevronLeftIcon />\n </div>\n ) : null}\n </Transition>\n </div>,\n <div\n ref={rightOperationsRef}\n class={[`${componentName.value}__operations`, `${componentName.value}__operations--right`]}\n >\n <Transition name=\"fade\" mode=\"out-in\" appear>\n {canToRight.value ? (\n <div ref={toRightBtnRef} class={rightIconClass.value} onClick={() => handleScroll('next')}>\n <ChevronRightIcon></ChevronRightIcon>\n </div>\n ) : null}\n </Transition>\n {props.addable ? (\n <div class={addIconClass.value} onClick={handleAddTab}>\n <AddIcon></AddIcon>\n </div>\n ) : null}\n {showAction.value && props.action}\n </div>,\n ];\n };\n const renderNavs = () => {\n const navContent = renderNavsContent();\n return (\n <div class={navContainerClass.value}>\n <div class={navScrollContainerClass.value} onWheel={handleWheel}>\n <div ref={navsWrapRef} class={navsWrapClass.value} style={wrapTransformStyle.value}>\n {props.theme !== 'card' && (\n <TTabNavBar placement={props.placement} value={props.value} navs={navContent} />\n )}\n {navContent}\n </div>\n </div>\n </div>\n );\n };\n\n return () => {\n return (\n <div ref={navsContainerRef} class={[`${componentName.value}__nav`]} style={navsContainerStyle.value}>\n {renderArrows()}\n {renderNavs()}\n </div>\n );\n };\n },\n});\n"],"names":["getDomWidth","dom","offsetWidth","getDomOffsetLeft","offsetLeft","calculateOffset","depElement","offset","scrollPosition","navsContainer","activeTab","rightOperations","leftOperations","tabWidth","wrapWidth","tabOffset","rightOperationsWidth","leftOperationsWidth","calcPrevOrNextOffset","elements","action","navsContainerWidth","activeTabWidth","diffWidth","Math","abs","calcMaxOffset","navsWrap","toRightBtn","containerWidth","toRightBtnWidth","calcValidOffset","maxOffset","max","min","defineComponent","name","resizeObserver","props","theme","tabProps","panels","type","Array","default","value","placement","size","disabled","addable","onChange","onAdd","onRemove","dragSort","onDragSort","setup","componentName","usePrefixClass","_useGlobalIcon","useGlobalIcon","ChevronLeftIcon","TdChevronLeftIcon","ChevronRightIcon","TdChevronRightIcon","AddIcon","TdAddIcon","classPrefix","_useCommonClassName","useCommonClassName","SIZE","scrollLeft","ref","navsContainerRef","navsWrapRef","leftOperationsRef","rightOperationsRef","toRightBtnRef","activeTabRef","maxScrollLeft","showAction","computed","_props$placement","includes","toLowerCase","getRefs","isVerticalPlacement","canToLeft","canToRight","wrapTransformStyle","transform","concat","navsContainerStyle","iconBaseClass","_defineProperty","medium","large","leftIconClass","_objectSpread","rightIconClass","addIconClass","navContainerClass","navScrollContainerClass","navsWrapClass","setOffset","handleScroll","handleWheel","event","preventDefault","deltaX","deltaY","handleActiveTabScroll","setTimeout","getMaxScrollLeft","nextTick","watch","useResize","debounce","handleAddTab","e","_props$onAdd","call","tabClick","nav","onTabRemove","_ref5","index","setActiveTab","$el","_useDragSort","useDragSort","setNavsWrap","onMounted","renderNavsContent","map","panel","_panel$children","label","children","isFunction","h","draggable","_createVNode","TTabNavItem","removable","onClick","renderArrows","Transition","_default","renderNavs","navContent","TTabNavBar"],"mappings":"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"}