{"version":3,"file":"swiper.mjs","sources":["../../src/swiper/swiper.tsx"],"sourcesContent":["import { defineComponent, ref, computed, watch, isVNode, onMounted, cloneVNode } from 'vue';\n\nimport { usePrefixClass } from '../hooks/useConfig';\nimport { useChildComponentSlots } from '../hooks';\nimport props from './props';\nimport { SwiperNavigation, SwiperChangeSource } from './type';\nimport TSwiperItem from './swiper-item';\nimport { useTNodeJSX } from '../hooks/tnode';\n\nconst defaultNavigation: SwiperNavigation = {\n  placement: 'inside',\n  showSlideBtn: 'always',\n  size: 'medium',\n  type: 'bars',\n};\n\nexport default defineComponent({\n  name: 'XSwiper',\n  props: { ...props },\n  emits: ['update:current'],\n  setup(props, { emit }) {\n    const prefix = usePrefixClass();\n    const renderTNodeJSX = useTNodeJSX();\n\n    let swiperTimer: ReturnType<typeof setTimeout> | null = null;\n    let swiperSwitchingTimer = 0;\n    let isBeginToEnd = false;\n    let isEndToBegin = false;\n    const currentIndex = ref(props.current || props.defaultCurrent);\n    const navActiveIndex = ref(props.current || props.defaultCurrent);\n    const isHovering = ref(false);\n    const isSwitching = ref(false);\n    const showArrow = ref(false);\n    const swiperWrap = ref<HTMLElement>();\n    const getChildComponentByName = useChildComponentSlots();\n\n    const swiperItemLength = ref(0);\n    const navigationConfig = computed(() => {\n      return {\n        ...defaultNavigation,\n        ...(isVNode(props.navigation) ? {} : (props.navigation as object)),\n      };\n    });\n    const isEnd = computed(() => {\n      if (props.type === 'card') {\n        return !props.loop && currentIndex.value + 1 >= swiperItemLength.value;\n      }\n      return !props.loop && currentIndex.value + 2 >= swiperItemLength.value;\n    });\n    const propsToUpdateSetTimer = computed(() => {\n      return [props.autoplay, currentIndex.value, props.duration, props.interval];\n    });\n    const swiperWrapClass = computed(() => {\n      return {\n        [`${prefix.value}-swiper__wrap`]: true,\n        [`${prefix.value}-swiper--inside`]: navigationConfig.value.placement === 'inside',\n        [`${prefix.value}-swiper--outside`]: navigationConfig.value.placement === 'outside',\n        [`${prefix.value}-swiper--vertical`]: props.direction === 'vertical',\n        [`${prefix.value}-swiper--large`]: navigationConfig.value.size === 'large',\n        [`${prefix.value}-swiper--small`]: navigationConfig.value.size === 'small',\n      };\n    });\n    const containerStyle = computed(() => {\n      const offsetHeight = props.height ? `${props.height}px` : `${getWrapAttribute('offsetHeight')}px`;\n      if (props.type === 'card' || props.animation === 'fade') {\n        return {\n          height: offsetHeight,\n        };\n      }\n      if (props.animation === 'slide') {\n        const style: Record<string, number | string> = {\n          transition: isSwitching.value ? `transform ${props.duration / 1000}s ease` : '',\n        };\n        let active = currentIndex.value;\n        if (swiperItemLength.value > 1) {\n          active += 1;\n          if (isBeginToEnd || isEndToBegin) {\n            style.transition = '';\n          }\n        }\n        if (props.direction === 'vertical') {\n          style.height = offsetHeight;\n          style.transform = `translate3d(0, -${active * 100}%, 0px)`;\n        } else {\n          style.transform = `translate3d(-${active * 100}%, 0px, 0px)`;\n        }\n        ['msTransform', 'WebkitTransform'].forEach((key) => {\n          style[key] = style.transform;\n        });\n        return style;\n      }\n      return {};\n    });\n    const swiperItems = () => {\n      const swiperItemList = getChildComponentByName('SwiperItem');\n      swiperItemLength.value = swiperItemList.length;\n      const items = swiperItemList.map((swiperItem: any, index) => {\n        const p = { ...props, ...swiperItem.props };\n        return (\n          <TSwiperItem\n            index={index}\n            currentIndex={currentIndex.value}\n            isSwitching={isSwitching.value}\n            getWrapAttribute={getWrapAttribute}\n            swiperItemLength={swiperItemLength.value}\n            {...p}\n          >\n            {swiperItem.children.default()}\n          </TSwiperItem>\n        );\n      });\n      if (props.animation === 'slide' && items.length > 1) {\n        const first = cloneVNode(items[0], {\n          key: `swiper-item-append-${0}`,\n        });\n        const last = cloneVNode(items[items.length - 1], {\n          key: `swiper-item-prepend-${items.length - 1}`,\n        });\n        items.unshift(last);\n        items.push(first);\n      }\n      return items;\n    };\n\n    const swiperTo = (index: number, context: { source: SwiperChangeSource }) => {\n      let targetIndex = index % swiperItemLength.value;\n      navActiveIndex.value = targetIndex;\n      emit('update:current', targetIndex);\n      props.onChange?.(targetIndex, context);\n      isSwitching.value = true;\n      if (props.animation === 'slide' && swiperItemLength.value > 1 && props.type !== 'card') {\n        targetIndex = index;\n        isBeginToEnd = false;\n        isEndToBegin = false;\n        if (index >= swiperItemLength.value) {\n          clearTimer();\n          setTimeout(() => {\n            isEndToBegin = true;\n            currentIndex.value = 0;\n          }, props.duration);\n        }\n        if (currentIndex.value === 0) {\n          if (\n            (swiperItemLength.value > 2 && index === swiperItemLength.value - 1) ||\n            (swiperItemLength.value === 2 && index === 0)\n          ) {\n            targetIndex = -1;\n            navActiveIndex.value = swiperItemLength.value - 1;\n            clearTimer();\n            setTimeout(() => {\n              isBeginToEnd = true;\n              currentIndex.value = swiperItemLength.value - 1;\n            }, props.duration);\n          }\n        }\n      }\n      currentIndex.value = targetIndex;\n    };\n    const clearTimer = () => {\n      if (swiperTimer) {\n        clearTimeout(swiperTimer);\n        swiperTimer = null;\n      }\n    };\n    const setTimer = () => {\n      if (props.autoplay && props.interval > 0) {\n        clearTimer();\n        swiperTimer = setTimeout(\n          () => {\n            swiperTo(currentIndex.value + 1, { source: 'autoplay' });\n          },\n          currentIndex.value === 0 ? props.interval - (props.duration + 50) : props.interval, // 当 index 为 0 的时候，表明刚从克隆的最后一项跳转过来，已经经历了duration + 50 的间隔时间，减去即可\n        );\n      }\n    };\n\n    const onMouseEnter = () => {\n      isHovering.value = true;\n      if (props.stopOnHover) {\n        clearTimer();\n      }\n      if (navigationConfig.value.showSlideBtn === 'hover') {\n        showArrow.value = true;\n      }\n    };\n    const onMouseLeave = () => {\n      isHovering.value = false;\n      if (!isEnd.value) {\n        setTimer();\n      }\n      if (navigationConfig.value.showSlideBtn === 'hover') {\n        showArrow.value = false;\n      }\n    };\n    const onMouseEnterNavigationItem = (i: number) => {\n      if (props.trigger === 'hover') {\n        swiperTo(i, { source: 'hover' });\n      }\n    };\n    const onClickNavigationItem = (i: number) => {\n      if (props.trigger === 'click') {\n        swiperTo(i, { source: 'click' });\n      }\n    };\n    const goNext = (context: { source: SwiperChangeSource }) => {\n      if (isSwitching.value) return;\n      if (props.type === 'card') {\n        return swiperTo(currentIndex.value + 1 >= swiperItemLength.value ? 0 : currentIndex.value + 1, context);\n      }\n      return swiperTo(currentIndex.value + 1, context);\n    };\n    const goPrevious = (context: { source: SwiperChangeSource }) => {\n      if (isSwitching.value) return;\n      if (currentIndex.value - 1 < 0) {\n        if (props.animation === 'slide' && swiperItemLength.value === 2) {\n          return swiperTo(0, context);\n        }\n        return swiperTo(swiperItemLength.value - 1, context);\n      }\n      return swiperTo(currentIndex.value - 1, context);\n    };\n    const getWrapAttribute = (attr: string) => {\n      return swiperWrap.value?.parentNode?.[attr];\n    };\n    const renderPagination = () => {\n      const fractionIndex = currentIndex.value + 1 > swiperItemLength.value ? 1 : currentIndex.value + 1;\n      return (\n        <div class={`${prefix.value}-swiper__arrow`}>\n          <div class={`${prefix.value}-swiper__arrow-left`} onClick={() => goPrevious({ source: 'click' })}>\n            <icon-ri-arrow-left-s-line />\n          </div>\n          <div class={`${prefix.value}-swiper__navigation-text-fraction`}>\n            {fractionIndex}/{swiperItemLength.value}\n          </div>\n          <div class={`${prefix.value}-swiper__arrow-right`} onClick={() => goNext({ source: 'click' })}>\n            <icon-ri-arrow-right-s-line />\n          </div>\n        </div>\n      );\n    };\n    const renderArrow = () => {\n      if (!showArrow.value) return null;\n      return (\n        <div class={[`${prefix.value}-swiper__arrow`, `${prefix.value}-swiper__arrow--default`]}>\n          <div class={`${prefix.value}-swiper__arrow-left`} onClick={() => goPrevious({ source: 'click' })}>\n            <icon-ri-arrow-left-s-line />\n          </div>\n          <div class={`${prefix.value}-swiper__arrow-right`} onClick={() => goNext({ source: 'click' })}>\n            <icon-ri-arrow-right-s-line />\n          </div>\n        </div>\n      );\n    };\n    const renderNavigation = () => {\n      if (isVNode(props.navigation)) return props.navigation;\n      const navigationSlot = renderTNodeJSX('navigation');\n      if (navigationSlot && isVNode(navigationSlot?.[0])) return navigationSlot;\n\n      if (navigationConfig.value.type === 'fraction') {\n        return (\n          <div class={[`${prefix.value}-swiper__navigation`, `${prefix.value}-swiper__navigation--fraction`]}>\n            {renderPagination()}\n          </div>\n        );\n      }\n      const swiperItemList = getChildComponentByName('SwiperItem');\n      return (\n        <ul\n          class={[\n            `${prefix.value}-swiper__navigation`,\n            {\n              [`${prefix.value}-swiper__navigation-bars`]: navigationConfig.value.type === 'bars',\n              [`${prefix.value}-swiper__navigation-dots`]: navigationConfig.value.type === 'dots',\n              [`${prefix.value}-swiper__navigation-dots-bar`]: navigationConfig.value.type === 'dots-bar',\n            },\n          ]}\n        >\n          {swiperItemList.map((_, i: number) => (\n            <li\n              key={i}\n              class={[\n                `${prefix.value}-swiper__navigation-item`,\n                {\n                  [`${prefix.value}-is-active`]: i === navActiveIndex.value,\n                },\n              ]}\n              onMouseenter={() => onMouseEnterNavigationItem(i)}\n              onClick={() => onClickNavigationItem(i)}\n            >\n              <span></span>\n            </li>\n          ))}\n        </ul>\n      );\n    };\n    const renderSwiperItems = () => {\n      return swiperItems();\n    };\n\n    watch(\n      () => propsToUpdateSetTimer.value,\n      () => {\n        setTimer();\n      },\n    );\n    watch(\n      () => isSwitching.value,\n      () => {\n        if (isSwitching.value) {\n          if (swiperSwitchingTimer) clearTimeout(swiperSwitchingTimer);\n          swiperSwitchingTimer = setTimeout(() => {\n            isSwitching.value = false;\n            swiperSwitchingTimer = 0;\n            if (isEnd.value) {\n              clearTimer();\n            }\n          }, props.duration + 50) as unknown as number;\n        }\n      },\n    );\n    watch(\n      () => props.current,\n      () => {\n        swiperTo(props.current, { source: 'autoplay' });\n      },\n    );\n\n    onMounted(() => {\n      setTimer();\n      showArrow.value = navigationConfig.value.showSlideBtn === 'always';\n    });\n\n    return () => (\n      <div class={[`${prefix.value}-swiper`]} onMouseenter={onMouseEnter} onMouseleave={onMouseLeave} ref={swiperWrap}>\n        <div class={swiperWrapClass.value}>\n          <div\n            class={[\n              `${prefix.value}-swiper__content`,\n              {\n                [`${prefix.value}-swiper-fade`]: props.animation === 'fade',\n                [`${prefix.value}-swiper-card`]: props.type === 'card',\n              },\n            ]}\n          >\n            <div class={`${prefix.value}-swiper__container`} style={containerStyle.value}>\n              {renderSwiperItems()}\n            </div>\n          </div>\n          {renderNavigation()}\n          {renderArrow()}\n        </div>\n      </div>\n    );\n  },\n});\n"],"names":["_isVNode","placement","showSlideBtn","size","type","name","props","setup","height","transition","active","style","swiperItemLength","_createVNode","TSwiperItem","_mergeProps","key","items","emit","targetIndex","isBeginToEnd","isEndToBegin","clearTimer","setTimeout","navActiveIndex","currentIndex","swiperTimer","swiperTo","source","setTimer","watch","swiperSwitchingTimer","onMounted"],"mappings":"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"}