{"version":3,"file":"only-child.mjs","sources":["../../../../../packages/components/slot/src/only-child.ts"],"sourcesContent":["import {\n  cloneVNode,\n  Comment,\n  defineComponent,\n  Fragment,\n  h,\n  Text,\n  withDirectives,\n  inject,\n} from 'vue'\nimport { NOOP, isObject } from '@vue/shared'\nimport {\n  FORWARD_REF_INJECTION_KEY,\n  useForwardRefDirective,\n} from '@element-ultra/hooks'\nimport { debugWarn } from '@element-ultra/utils'\n\nimport type { VNode } from 'vue'\n\nconst NAME = 'ElOnlyChild'\n\nconst OnlyChild = defineComponent({\n  name: NAME,\n  setup(_, { slots, attrs }) {\n    const forwardRefInjection = inject(FORWARD_REF_INJECTION_KEY, undefined)!\n    const forwardRefDirective = useForwardRefDirective(\n      forwardRefInjection.setForwardRef ?? NOOP\n    )\n    return () => {\n      const defaultSlot = slots.default?.(attrs)\n      if (!defaultSlot) return null\n\n      if (defaultSlot.length > 1) {\n        debugWarn(NAME, 'ElOnlyChild requires exact only one valid child.')\n        return null\n      }\n\n      const firstLegitNode = findFirstLegitChild(defaultSlot)\n      if (!firstLegitNode) {\n        debugWarn(NAME, 'no valid child node found')\n        return null\n      }\n\n      return withDirectives(cloneVNode(firstLegitNode, attrs), [\n        [forwardRefDirective],\n      ])\n    }\n  },\n})\n\nfunction findFirstLegitChild(node: VNode[] | undefined) {\n  if (!node) return null\n  const children = node as VNode[]\n  for (let i = 0; i < children.length; i++) {\n    /**\n     * when user uses h(Fragment, [text]) to render plain string,\n     * this switch case just cannot handle, when the value is primitives\n     * we should just return the wrapped string\n     */\n    const child = children[i]\n    if (isObject(child)) {\n      switch (child.type) {\n        case Comment:\n          continue\n        case Text:\n          return wrapTextContent(child)\n        case 'svg':\n          return wrapTextContent(child)\n        case Fragment:\n          return findFirstLegitChild(child.children as VNode[])\n        default:\n          return child\n      }\n    }\n    return wrapTextContent(child)\n  }\n  return null\n}\n\nfunction wrapTextContent(s: string | VNode) {\n  return h('span', { class: 'el-only-child__content' }, [s])\n}\n\nexport default OnlyChild\n"],"names":["_a"],"mappings":";;;;;;;AAmBA,MAAM,IAAO,GAAA,aAAA,CAAA;AAEb,MAAM,YAAY,eAAgB,CAAA;AAAA,EAChC,IAAM,EAAA,IAAA;AAAA,EACN,KAAM,CAAA,CAAA,EAAG,EAAE,KAAA,EAAO,OAAS,EAAA;AAvB7B,IAAA,IAAA,EAAA,CAAA;AAwBI,IAAM,MAAA,mBAAA,GAAsB,MAAO,CAAA,yBAAA,EAA2B,KAAS,CAAA,CAAA,CAAA;AACvE,IAAA,MAAM,mBAAsB,GAAA,sBAAA;AAAA,MAC1B,CAAA,EAAA,GAAA,mBAAA,CAAoB,kBAApB,IAAqC,GAAA,EAAA,GAAA,IAAA;AAAA,KACvC,CAAA;AACA,IAAA,OAAO,MAAM;AA5BjB,MAAAA,IAAAA,GAAAA,CAAAA;AA6BM,MAAA,MAAM,eAAcA,GAAA,GAAA,KAAA,CAAM,OAAN,KAAA,IAAA,GAAA,KAAA,CAAA,GAAAA,IAAA,IAAgB,CAAA,KAAA,EAAA,KAAA,CAAA,CAAA;AACpC,MAAA,IAAI,CAAC,WAAA;AAAa,QAAO,OAAA,IAAA,CAAA;AAEzB,MAAI,IAAA,WAAA,CAAY,SAAS,CAAG,EAAA;AAC1B,QAAA,SAAA,CAAU,MAAM,kDAAkD,CAAA,CAAA;AAClE,QAAO,OAAA,IAAA,CAAA;AAAA,OACT;AAEA,MAAM,MAAA,cAAA,GAAiB,oBAAoB,WAAW,CAAA,CAAA;AACtD,MAAA,IAAI,CAAC,cAAgB,EAAA;AACnB,QAAA,SAAA,CAAU,MAAM,2BAA2B,CAAA,CAAA;AAC3C,QAAO,OAAA,IAAA,CAAA;AAAA,OACT;AAEA,MAAA,OAAO,cAAe,CAAA,UAAA,CAAW,cAAgB,EAAA,KAAK,CAAG,EAAA;AAAA,QACvD,CAAC,mBAAmB,CAAA;AAAA,OACrB,CAAA,CAAA;AAAA,KACH,CAAA;AAAA,GACF;AACF,CAAC,EAAA;AAED,SAAS,oBAAoB,IAA2B,EAAA;AACtD,EAAA,IAAI,CAAC,IAAA;AAAM,IAAO,OAAA,IAAA,CAAA;AAClB,EAAA,MAAM,QAAW,GAAA,IAAA,CAAA;AACjB,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,QAAA,CAAS,QAAQ,CAAK,EAAA,EAAA;AAMxC,IAAM,MAAA,KAAA,GAAQ,SAAS,CAAC,CAAA,CAAA;AACxB,IAAI,IAAA,QAAA,CAAS,KAAK,CAAG,EAAA;AACnB,MAAA,QAAQ,MAAM,IAAM;AAAA,QAClB,KAAK,OAAA;AACH,UAAA,SAAA;AAAA,QACF,KAAK,IAAA;AACH,UAAA,OAAO,gBAAgB,KAAK,CAAA,CAAA;AAAA,QAC9B,KAAK,KAAA;AACH,UAAA,OAAO,gBAAgB,KAAK,CAAA,CAAA;AAAA,QAC9B,KAAK,QAAA;AACH,UAAO,OAAA,mBAAA,CAAoB,MAAM,QAAmB,CAAA,CAAA;AAAA,QACtD;AACE,UAAO,OAAA,KAAA,CAAA;AAAA,OACX;AAAA,KACF;AACA,IAAA,OAAO,gBAAgB,KAAK,CAAA,CAAA;AAAA,GAC9B;AACA,EAAO,OAAA,IAAA,CAAA;AACT,CAAA;AAEA,SAAS,gBAAgB,CAAmB,EAAA;AAC1C,EAAO,OAAA,CAAA,CAAE,QAAQ,EAAE,KAAA,EAAO,0BAA4B,EAAA,CAAC,CAAC,CAAC,CAAA,CAAA;AAC3D;;;;"}