{"version":3,"file":"tabs.mjs","sources":["../../../../../packages/components/tabs/src/tabs.jsx"],"sourcesContent":["// components/Tabs/index.jsx\r\nimport { defineComponent, provide, ref, reactive, watchEffect } from \"vue\";\r\nimport { TAB_KEY } from \"../constant\";\r\nimport { useNamespace } from \"@ui-library/hook\";\r\nimport { X } from \"song-ui-pro-icon\";\r\nimport { XIcon } from \"@ui-library/components\";\r\n\r\nexport default defineComponent({\r\n  name: \"x-tabs\",\r\n  props: {\r\n    modelValue: {\r\n      type: String,\r\n      required: true,\r\n    },\r\n    position: {\r\n      type: String,\r\n      default: \"top\",\r\n    },\r\n    type: {\r\n      type: String,\r\n      default: \"\",\r\n    },\r\n    editable: {\r\n      type: Boolean,\r\n      default: false,\r\n    },\r\n  },\r\n  emits: [\"update:modelValue\", \"tab-click\", \"tab-remove\"],\r\n\r\n  setup(props, { emit, slots }) {\r\n    const activeName = ref(props.modelValue);\r\n\r\n    const panes = reactive([]);\r\n\r\n    const ns = useNamespace(\"tabs\");\r\n\r\n    const registerPane = (pane) => {\r\n      panes.push(pane);\r\n    };\r\n\r\n    const handleTabClick = (name) => {\r\n      activeName.value = name;\r\n      emit(\"update:modelValue\", name);\r\n      emit(\"tab-click\", name);\r\n    };\r\n\r\n    const handelRem = (pane, e) => {\r\n      e.stopPropagation();\r\n      if (panes.length === 1) return;\r\n\r\n      const currentIndex = panes.indexOf(pane);\r\n      panes.splice(currentIndex, 1);\r\n\r\n      // 根据不同情况设置新的激活项\r\n      if (currentIndex === panes.length) {\r\n        // 如果删除的是最后一项，激活前一项\r\n        emit(\"update:modelValue\", panes[currentIndex - 1].name);\r\n      } else if (currentIndex === 0) {\r\n        // 如果删除的是第一项，保持激活第一项\r\n        emit(\"update:modelValue\", panes[0].name);\r\n      } else {\r\n        // 其他情况激活下一项\r\n        emit(\"update:modelValue\", panes[currentIndex].name);\r\n      }\r\n\r\n      emit(\"tab-remove\", pane);\r\n    };\r\n\r\n    watchEffect(() => {\r\n      activeName.value = props.modelValue;\r\n    });\r\n\r\n    provide(TAB_KEY, {\r\n      activeName,\r\n      registerPane,\r\n      handleTabClick,\r\n      props,\r\n    });\r\n\r\n    return () => (\r\n      <div class={[ns.b(), ns.m(\"position-body\", props.position)]}>\r\n        <div class={[ns.e(\"header\"), ns.m(\"position-header\", props.position)]}>\r\n          {panes.map((pane, index) => (\r\n            <div\r\n              class={[\r\n                ns.is(\"active\", activeName.value == pane.name),\r\n                ns.m(\"type\", props.type),\r\n              ]}\r\n              onClick={() => handleTabClick(pane.name)}\r\n            >\r\n              {pane.label}\r\n              {props.editable && activeName.value === pane.name && (\r\n                <XIcon onClick={(e) => handelRem(pane, e)}>\r\n                  <X />\r\n                </XIcon>\r\n              )}\r\n            </div>\r\n          ))}\r\n        </div>\r\n\r\n        <div class={[ns.e(\"content\")]}>{slots.default?.()}</div>\r\n      </div>\r\n    );\r\n  },\r\n});\r\n"],"names":["name","props","modelValue","type","String","required","position","default","editable","Boolean","emits","setup","emit","slots","activeName","ref","panes","reactive","ns","useNamespace","registerPane","pane","push","handleTabClick","value","handelRem","e","stopPropagation","length","currentIndex","indexOf","splice","watchEffect","provide","TAB_KEY","_createVNode","b","m","map","index","is","onClick","label","XIcon","X"],"mappings":"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"}