{"version":3,"file":"tabs.mjs","sources":["../../src/tabs/tabs.tsx"],"sourcesContent":["import { ComponentPublicInstance, defineComponent, provide, Ref, toRefs } from 'vue';\nimport TTabPanel from './tab-panel';\nimport TTabNav from './tab-nav';\nimport { TabValue, TdTabsProps } from './type';\nimport props from './props';\n\nimport { useTNodeJSX } from '../hooks/tnode';\nimport { usePrefixClass } from '../hooks/useConfig';\nimport useVModel from '../hooks/useVModel';\nimport isArray from 'lodash/isArray';\n\nexport interface InjectTabs {\n  value: Ref<TabValue>;\n}\n\nexport default defineComponent({\n  name: 'XTabs',\n\n  props,\n\n  setup(props) {\n    const COMPONENT_NAME = usePrefixClass('tabs');\n    const classPrefix = usePrefixClass();\n    const renderTNodeJSX = useTNodeJSX();\n\n    const { value, modelValue } = toRefs(props);\n    const [tabValue, setTabValue] = useVModel(value, modelValue, props.defaultValue || '', props.onChange);\n\n    provide<InjectTabs>('tabs', { value: tabValue });\n\n    // methods\n    const onTabAdd = (context: { e: MouseEvent }) => {\n      props.onAdd?.({ e: context.e });\n    };\n    const onTabChange = (value: TabValue) => {\n      setTabValue(value);\n    };\n    const onTabRemove = ({ e, value, index }: Parameters<TdTabsProps['onRemove']>[0]) => {\n      props.onRemove({ value, index, e });\n    };\n\n    // render\n    const getSlotPanels = () => {\n      let content = renderTNodeJSX('default');\n      if (!content) return [];\n      content = content\n        .map((item: ComponentPublicInstance) => {\n          if (item.children && isArray(item.children)) return item.children;\n          return item;\n        })\n        .flat()\n        .filter((item: ComponentPublicInstance) => {\n          return item.type.name === 'XTabPanel';\n        });\n\n      return content;\n    };\n    const renderHeader = () => {\n      const panels = (props.list?.length ? props.list : getSlotPanels()) || [];\n      const panelsData = panels.map((item: ComponentPublicInstance) => {\n        const selfItem = item;\n\n        if (item.props) {\n          Object.keys(item.props).forEach((key) => {\n            selfItem[key] = item.props[key];\n          });\n        }\n\n        return selfItem;\n      });\n      const tabNavProps = {\n        theme: props.theme,\n        value: tabValue.value,\n        size: props.size,\n        disabled: props.disabled,\n        placement: props.placement,\n        addable: props.addable,\n        panels: panelsData,\n        dragSort: props.dragSort,\n      };\n      return (\n        <div\n          class={{\n            [`${classPrefix.value}-tabs__header`]: true,\n            [`${classPrefix.value}-is-${props.placement}`]: true,\n          }}\n        >\n          <TTabNav\n            {...tabNavProps}\n            onDragSort={props.onDragSort}\n            onChange={onTabChange}\n            onAdd={onTabAdd}\n            onRemove={onTabRemove}\n          />\n        </div>\n      );\n    };\n    const renderContent = () => {\n      const panels = getSlotPanels();\n      if (props.list?.length) {\n        return props.list.map((item) => <TTabPanel {...item} onRemove={onTabRemove} />);\n      }\n      if (panels && panels.length) {\n        return <div class={[`${classPrefix.value}-tabs__content`]}>{panels}</div>;\n      }\n    };\n\n    return () => {\n      return (\n        <div class={[COMPONENT_NAME.value]}>\n          {props.placement !== 'bottom' ? [renderHeader(), renderContent()] : [renderContent(), renderHeader()]}\n        </div>\n      );\n    };\n  },\n});\n"],"names":["name","props","tabValue","setTabValue","value","index","e","content","isArray","Object","panels","_createVNode","_mergeProps","TTabPanel"],"mappings":"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"}