12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- 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
- };
|