{"version":3,"file":"only-child.mjs","sources":["../../../../../../packages/components/slot/src/only-child.tsx"],"sourcesContent":["import {\n  Comment,\n  Fragment,\n  Text,\n  cloneVNode,\n  defineComponent,\n  inject,\n  withDirectives,\n} from 'vue'\nimport { NOOP, isObject } from '@vue/shared'\nimport {\n  FORWARD_REF_INJECTION_KEY,\n  useForwardRefDirective,\n  useNamespace,\n} from '@vuesax-plus/hooks'\nimport { debugWarn } from '@vuesax-plus/utils'\n\nimport type { Ref, VNode } from 'vue'\n\nconst NAME = 'VsOnlyChild'\n\nexport const OnlyChild = defineComponent({\n  name: NAME,\n  setup(_, { slots, attrs }) {\n    const forwardRefInjection = inject(FORWARD_REF_INJECTION_KEY)\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, '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): VNode | null {\n  if (!node) return null\n  const children = node as VNode[]\n  for (const child of children) {\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    if (isObject(child)) {\n      switch (child.type) {\n        case Comment:\n          continue\n        case Text:\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  const ns = useNamespace('only-child')\n  return <span class={ns.e('content')}>{s}</span>\n}\n\nexport type OnlyChildExpose = {\n  forwardRef: Ref<HTMLElement>\n}\n"],"names":["NAME","OnlyChild","defineComponent","name","setup","_","slots","attrs","forwardRefInjection","inject","FORWARD_REF_INJECTION_KEY","forwardRefDirective","useForwardRefDirective","setForwardRef","NOOP","defaultSlot","default","length","debugWarn","firstLegitNode","findFirstLegitChild","withDirectives","cloneVNode","node","children","child","isObject","type","Comment","Text","wrapTextContent","Fragment","s","ns","useNamespace","_createVNode","e"],"mappings":";;;;;;;;AAmBA,MAAMA,IAAO,GAAA,aAAA,CAAA;AAEN,MAAMC,YAAYC,eAAgB,CAAA;AAAA,EACvCC,IAAMH,EAAAA,IAAAA;AAAAA,EACNI,MAAMC,CAAG,EAAA;AAAA,IAAEC,KAAAA;AAAAA,IAAOC,KAAAA;AAAAA,GAAS,EAAA;;AACzB,IAAMC,MAAAA,mBAAAA,GAAsBC,OAAOC,yBAAyB,CAAA,CAAA;AAC5D,IAAA,MAAMC,mBAAsBC,GAAAA,sBAAAA,CAAAA,CAC1BJ,EAAqBK,GAAAA,mBAAAA,IAAAA,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,mBAAAA,CAAAA,aAAAA,KAArBL,YAAsCM,IAAI,CAAA,CAAA;AAE5C,IAAA,OAAO,MAAM;;AACX,MAAA,MAAMC,eAAcT,GAAAA,GAAAA,KAAAA,CAAMU,OAANV,KAAAA,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,IAAAA,IAAgBC,CAAAA,KAAAA,EAAAA,KAAAA,CAAAA,CAAAA;AACpC,MAAA,IAAI,CAACQ,WAAAA;AAAa,QAAO,OAAA,IAAA,CAAA;AAEzB,MAAIA,IAAAA,WAAAA,CAAYE,SAAS,CAAG,EAAA;AAC1BC,QAAAA,SAAAA,CAAUlB,MAAM,sCAAsC,CAAA,CAAA;AACtD,QAAO,OAAA,IAAA,CAAA;AAAA,OACT;AAEA,MAAMmB,MAAAA,cAAAA,GAAiBC,oBAAoBL,WAAW,CAAA,CAAA;AACtD,MAAA,IAAI,CAACI,cAAgB,EAAA;AACnBD,QAAAA,SAAAA,CAAUlB,MAAM,2BAA2B,CAAA,CAAA;AAC3C,QAAO,OAAA,IAAA,CAAA;AAAA,OACT;AAEA,MAAOqB,OAAAA,cAAAA,CAAeC,WAAWH,cAAiBZ,EAAAA,KAAK,GAAG,CACxD,CAACI,mBAAmB,CAAC,CACtB,CAAA,CAAA;AAAA,KACH,CAAA;AAAA,GACF;AACF,CAAC,EAAA;AAED,SAASS,oBAAoBG,IAAyC,EAAA;AACpE,EAAA,IAAI,CAACA,IAAAA;AAAM,IAAO,OAAA,IAAA,CAAA;AAClB,EAAA,MAAMC,QAAWD,GAAAA,IAAAA,CAAAA;AACjB,EAAA,KAAA,MAAWE,SAASD,QAAU,EAAA;AAM5B,IAAIE,IAAAA,QAAAA,CAASD,KAAK,CAAG,EAAA;AACnB,MAAA,QAAQA,KAAME,CAAAA,IAAAA;AAAAA,QACPC,KAAAA,OAAAA;AACH,UAAA,SAAA;AAAA,QACGC,KAAAA,IAAAA,CAAAA;AAAAA,QACA,KAAA,KAAA;AACH,UAAA,OAAOC,gBAAgBL,KAAK,CAAA,CAAA;AAAA,QACzBM,KAAAA,QAAAA;AACH,UAAOX,OAAAA,mBAAAA,CAAoBK,MAAMD,QAAQ,CAAA,CAAA;AAAA,QAAA;AAEzC,UAAOC,OAAAA,KAAAA,CAAAA;AAAAA,OAAAA;AAAAA,KAEb;AACA,IAAA,OAAOK,gBAAgBL,KAAK,CAAA,CAAA;AAAA,GAC9B;AACA,EAAO,OAAA,IAAA,CAAA;AACT,CAAA;AAEA,SAASK,gBAAgBE,CAAmB,EAAA;AAC1C,EAAMC,MAAAA,EAAAA,GAAKC,aAAa,YAAY,CAAA,CAAA;AACpC,EAAA,OAAAC,YAAA,MAAA,EAAA;AAAA,IAAA,OAAA,EAAoBF,EAAGG,CAAAA,CAAAA,CAAE,SAAS,CAAA;AAAA,GAAC,EAAA,CAAGJ,CAAC,CAAA,CAAA,CAAA;AACzC;;;;"}