68 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			68 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
import { ref, watch, onMounted, defineComponent, createVNode as _createVNode } from "vue";
 | 
						|
import { numericProp, makeRequiredProp, createNamespace } from "../utils/index.mjs";
 | 
						|
import { Swipe } from "../swipe/index.mjs";
 | 
						|
import { useExpose } from "../composables/use-expose.mjs";
 | 
						|
const [name, bem] = createNamespace("tabs");
 | 
						|
var stdin_default = defineComponent({
 | 
						|
  name,
 | 
						|
  props: {
 | 
						|
    count: makeRequiredProp(Number),
 | 
						|
    inited: Boolean,
 | 
						|
    animated: Boolean,
 | 
						|
    duration: makeRequiredProp(numericProp),
 | 
						|
    swipeable: Boolean,
 | 
						|
    lazyRender: Boolean,
 | 
						|
    currentIndex: makeRequiredProp(Number)
 | 
						|
  },
 | 
						|
  emits: ["change"],
 | 
						|
  setup(props, {
 | 
						|
    emit,
 | 
						|
    slots
 | 
						|
  }) {
 | 
						|
    const swipeRef = ref();
 | 
						|
    const onChange = (index) => emit("change", index);
 | 
						|
    const renderChildren = () => {
 | 
						|
      var _a;
 | 
						|
      const Content = (_a = slots.default) == null ? void 0 : _a.call(slots);
 | 
						|
      if (props.animated || props.swipeable) {
 | 
						|
        return _createVNode(Swipe, {
 | 
						|
          "ref": swipeRef,
 | 
						|
          "loop": false,
 | 
						|
          "class": bem("track"),
 | 
						|
          "duration": +props.duration * 1e3,
 | 
						|
          "touchable": props.swipeable,
 | 
						|
          "lazyRender": props.lazyRender,
 | 
						|
          "showIndicators": false,
 | 
						|
          "onChange": onChange
 | 
						|
        }, {
 | 
						|
          default: () => [Content]
 | 
						|
        });
 | 
						|
      }
 | 
						|
      return Content;
 | 
						|
    };
 | 
						|
    const swipeToCurrentTab = (index) => {
 | 
						|
      const swipe = swipeRef.value;
 | 
						|
      if (swipe && swipe.state.active !== index) {
 | 
						|
        swipe.swipeTo(index, {
 | 
						|
          immediate: !props.inited
 | 
						|
        });
 | 
						|
      }
 | 
						|
    };
 | 
						|
    watch(() => props.currentIndex, swipeToCurrentTab);
 | 
						|
    onMounted(() => {
 | 
						|
      swipeToCurrentTab(props.currentIndex);
 | 
						|
    });
 | 
						|
    useExpose({
 | 
						|
      swipeRef
 | 
						|
    });
 | 
						|
    return () => _createVNode("div", {
 | 
						|
      "class": bem("content", {
 | 
						|
        animated: props.animated || props.swipeable
 | 
						|
      })
 | 
						|
    }, [renderChildren()]);
 | 
						|
  }
 | 
						|
});
 | 
						|
export {
 | 
						|
  stdin_default as default
 | 
						|
};
 |