{"version":3,"file":"tab.mjs","sources":["../../../../../../packages/components/tab/src/tab.ts"],"sourcesContent":["import {\r\n  defineComponent,\r\n  Fragment,\r\n  getCurrentInstance,\r\n  h,\r\n  nextTick,\r\n  onMounted,\r\n  onUpdated,\r\n  provide,\r\n  ref,\r\n  renderSlot,\r\n  watch,\r\n} from 'vue'\r\nimport { isPromise, NOOP } from '@vue/shared'\r\nimport { buildProps, definePropType } from '@sgui-plus/utils/props'\r\nimport { UPDATE_MODEL_EVENT } from '@sgui-plus/utils/constants'\r\nimport { Awaitable } from '@sgui-plus/utils/types'\r\nimport { isString, isNumber } from '@sgui-plus/utils/util'\r\nimport { TabRootContextKey } from './constants'\r\nimport TabNav from './tab-nav'\r\nimport type { TabPaneContext } from './constants'\r\n\r\nimport type {\r\n  Component,\r\n  ComponentInternalInstance,\r\n  VNode,\r\n  ExtractPropTypes,\r\n  Ref,\r\n} from 'vue'\r\n\r\nexport type TabPaneName = string | number\r\n\r\nexport const tabProps = buildProps({\r\n  type: {\r\n    type: String,\r\n    values: ['card', 'border-card', 'button', 'button-round', ''],\r\n    default: '',\r\n  },\r\n  activeName: {\r\n    type: [String, Number],\r\n    default: '',\r\n  },\r\n  closable: Boolean,\r\n  modelValue: {\r\n    type: [String, Number],\r\n    default: '',\r\n  },\r\n  tabPosition: {\r\n    type: String,\r\n    values: ['top', 'right', 'bottom', 'left'],\r\n    default: 'top',\r\n  },\r\n  beforeLeave: {\r\n    type: definePropType<\r\n      (newTabName: TabPaneName, oldTabName: TabPaneName) => Awaitable<void | boolean>\r\n    >(Function),\r\n    default: () => true,\r\n  },\r\n  stretch: Boolean,\r\n  labelWidth: {\r\n    type: definePropType<number | string>([Number, String])\r\n  }\r\n} as const)\r\nexport type TabProps = ExtractPropTypes<typeof tabProps>\r\n\r\nconst isPaneName = (value: unknown): value is string | number => isString(value) || isNumber(value)\r\n\r\nexport const tabEmits = {\r\n  [UPDATE_MODEL_EVENT]: (tabName: TabPaneName) => isPaneName(tabName),\r\n  'tab-change': (tabName: TabPaneName) => isPaneName(tabName),\r\n  'tab-click': (tabName: TabPaneName, pane: TabPaneContext, ev: Event) => ev instanceof Event,\r\n  'tab-dblclick': (tabName: TabPaneName, pane: TabPaneContext, ev: Event) => ev instanceof Event,\r\n  'tab-remove': (tabName: TabPaneName) => isPaneName(tabName),\r\n  'tab-add': () => true,\r\n}\r\nexport type TabEmits = typeof tabEmits\r\n\r\nconst getPaneInstanceFromSlot = (\r\n  vnode: VNode,\r\n  paneInstanceList: ComponentInternalInstance[] = []\r\n) => {\r\n  const children = (vnode.children || []) as ArrayLike<VNode>\r\n  Array.from(children).forEach((node) => {\r\n    let type = node.type\r\n    type = (type as Component).name || type\r\n    if (type === 'SgTabPane' && node.component) {\r\n      paneInstanceList.push(node.component)\r\n    } else if (type === Fragment || type === 'template') {\r\n      getPaneInstanceFromSlot(node, paneInstanceList)\r\n    }\r\n  })\r\n  return paneInstanceList\r\n}\r\n\r\nexport default defineComponent({\r\n  name: 'SgTab',\r\n\r\n  props: tabProps,\r\n  emits: tabEmits,\r\n\r\n  setup(props, { emit, slots, expose }) {\r\n    const instance = getCurrentInstance()!\r\n    const nav$ = ref<InstanceType<typeof TabNav>>()\r\n\r\n    const panes: Ref<TabPaneContext[]> = ref([])\r\n    const currentName = ref(props.modelValue || props.activeName || '0')\r\n\r\n    const paneStatesMap: Record<number, TabPaneContext> = {}\r\n\r\n    const updatePaneInstances = (isForceUpdate = false) => {\r\n      if (slots.default) {\r\n        const children = instance.subTree.children as ArrayLike<VNode>\r\n        const content = Array.from(children).find(\r\n          ({ props }) => props?.class === 'sg-tab__content'\r\n        )\r\n        if (!content) return\r\n\r\n        const paneInstanceList: TabPaneContext[] = getPaneInstanceFromSlot(\r\n          content\r\n        ).map((paneComponent) => paneStatesMap[paneComponent.uid])\r\n\r\n        const panesChanged = !(\r\n          paneInstanceList.length === panes.value.length &&\r\n          paneInstanceList.every(\r\n            (pane, index) => pane.uid === panes.value[index].uid\r\n          )\r\n        )\r\n\r\n        if (isForceUpdate || panesChanged) {\r\n          panes.value = paneInstanceList\r\n        }\r\n      } else if (panes.value.length !== 0) {\r\n        panes.value = []\r\n      }\r\n    }\r\n\r\n    const changeCurrentName = (value: TabPaneName) => {\r\n      currentName.value = value\r\n      emit(UPDATE_MODEL_EVENT, value)\r\n      emit('tab-change', value)\r\n    }\r\n\r\n    const setCurrentName = (value: TabPaneName) => {\r\n      // should do nothing.\r\n      if (currentName.value === value) return\r\n\r\n      const canLeave = props.beforeLeave?.(value, currentName.value)\r\n      if (isPromise(canLeave)) {\r\n        canLeave.then(\r\n          () => {\r\n            changeCurrentName(value)\r\n\r\n            // call exposed function, Vue doesn't support expose in typescript yet.\r\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\r\n            // @ts-expect-error\r\n            nav$.value?.removeFocus?.()\r\n          },\r\n          // ignore promise rejection in `before-leave` hook\r\n          NOOP\r\n        )\r\n      } else if (canLeave !== false) {\r\n        changeCurrentName(value)\r\n      }\r\n    }\r\n\r\n    const handleTabClick = (\r\n      tab: TabPaneContext,\r\n      tabName: TabPaneName,\r\n      event: Event\r\n    ) => {\r\n      if (tab.props.disabled) return\r\n      setCurrentName(tabName)\r\n      emit('tab-click', tabName, tab, event)\r\n    }\r\n\r\n    const handleTabDblclick = (\r\n      tab: TabPaneContext,\r\n      tabName: TabPaneName,\r\n      event: Event\r\n    ) => {\r\n      if (tab.props.disabled) return\r\n      emit('tab-dblclick', tabName, tab, event)\r\n    }\r\n\r\n    const handleTabRemove = (pane: TabPaneContext, ev: Event) => {\r\n      if (pane.props.disabled) return\r\n      ev.stopPropagation()\r\n      emit('tab-remove', pane.props.name)\r\n    }\r\n\r\n    onUpdated(() => updatePaneInstances())\r\n    onMounted(() => updatePaneInstances())\r\n\r\n    watch(\r\n      () => props.activeName,\r\n      (modelValue) => setCurrentName(modelValue)\r\n    )\r\n\r\n    watch(\r\n      () => props.modelValue,\r\n      (modelValue) => setCurrentName(modelValue)\r\n    )\r\n\r\n    watch(currentName, async () => {\r\n      updatePaneInstances(true)\r\n      await nextTick()\r\n      await nav$.value?.$nextTick()\r\n\r\n      // call exposed function, Vue doesn't support expose in typescript yet.\r\n      // eslint-disable-next-line @typescript-eslint/ban-ts-comment\r\n      // @ts-expect-error\r\n      nav$.value?.scrollToActiveTab()\r\n    })\r\n\r\n    provide(TabRootContextKey, {\r\n      props,\r\n      currentName,\r\n      updatePaneState: (pane) => (paneStatesMap[pane.uid] = pane),\r\n    })\r\n\r\n    expose({\r\n      currentName,\r\n    })\r\n\r\n    return () => {\r\n      const header = h(\r\n        'div',\r\n        { class: ['sg-tab__header', `is-${props.tabPosition}`] },\r\n        [\r\n          h(TabNav, {\r\n            currentName: currentName.value,\r\n            closable: props.closable,\r\n            type: props.type,\r\n            panes: panes.value,\r\n            stretch: props.stretch,\r\n            labelWidth: props.labelWidth,\r\n            ref: nav$,\r\n            onTabClick: handleTabClick,\r\n            onTabDblclick: handleTabDblclick,\r\n            onTabRemove: handleTabRemove,\r\n          }),\r\n        ]\r\n      )\r\n\r\n      const panels = h('div', { class: 'sg-tab__content' }, [\r\n        renderSlot(slots, 'default'),\r\n      ])\r\n\r\n      return h(\r\n        'div',\r\n        {\r\n          class: {\r\n            'sg-tab': true,\r\n            [`sg-tab--${props.type}`]: props.type,\r\n            [`sg-tab--${props.tabPosition}`]: true\r\n          },\r\n        },\r\n        props.tabPosition !== 'bottom' ? [header, panels] : [panels, header]\r\n      )\r\n    }\r\n  },\r\n})\r\n"],"names":[],"mappings":"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"}