TabsContent.mjs 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import { ref, watch, onMounted, defineComponent, createVNode as _createVNode } from "vue";
  2. import { numericProp, makeRequiredProp, createNamespace } from "../utils/index.mjs";
  3. import { Swipe } from "../swipe/index.mjs";
  4. import { useExpose } from "../composables/use-expose.mjs";
  5. const [name, bem] = createNamespace("tabs");
  6. var stdin_default = defineComponent({
  7. name,
  8. props: {
  9. count: makeRequiredProp(Number),
  10. inited: Boolean,
  11. animated: Boolean,
  12. duration: makeRequiredProp(numericProp),
  13. swipeable: Boolean,
  14. lazyRender: Boolean,
  15. currentIndex: makeRequiredProp(Number)
  16. },
  17. emits: ["change"],
  18. setup(props, {
  19. emit,
  20. slots
  21. }) {
  22. const swipeRef = ref();
  23. const onChange = (index) => emit("change", index);
  24. const renderChildren = () => {
  25. var _a;
  26. const Content = (_a = slots.default) == null ? void 0 : _a.call(slots);
  27. if (props.animated || props.swipeable) {
  28. return _createVNode(Swipe, {
  29. "ref": swipeRef,
  30. "loop": false,
  31. "class": bem("track"),
  32. "duration": +props.duration * 1e3,
  33. "touchable": props.swipeable,
  34. "lazyRender": props.lazyRender,
  35. "showIndicators": false,
  36. "onChange": onChange
  37. }, {
  38. default: () => [Content]
  39. });
  40. }
  41. return Content;
  42. };
  43. const swipeToCurrentTab = (index) => {
  44. const swipe = swipeRef.value;
  45. if (swipe && swipe.state.active !== index) {
  46. swipe.swipeTo(index, {
  47. immediate: !props.inited
  48. });
  49. }
  50. };
  51. watch(() => props.currentIndex, swipeToCurrentTab);
  52. onMounted(() => {
  53. swipeToCurrentTab(props.currentIndex);
  54. });
  55. useExpose({
  56. swipeRef
  57. });
  58. return () => _createVNode("div", {
  59. "class": bem("content", {
  60. animated: props.animated || props.swipeable
  61. })
  62. }, [renderChildren()]);
  63. }
  64. });
  65. export {
  66. stdin_default as default
  67. };