{"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, debugWarn, isObject } from '@lit-element/utils'\nimport {\n  FORWARD_REF_INJECTION_KEY,\n  useForwardRefDirective,\n  useNamespace,\n} from '@lit-element/hooks'\n\nimport type { Ref, VNode } from 'vue'\n\nconst NAME = 'LtOnlyChild'\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","forwardRefDirective","useForwardRefDirective","defaultSlot","debugWarn","findFirstLegitChild","children","child","type","Text","wrapTextContent","s","_createVNode"],"mappings":";;;;;;;;AAkBA,MAAMA,IAAI,GAAG,aAAa,CAAA;AAEbC,MAAAA,SAAS,GAAGC,eAAe,CAAC;AACvCC,EAAAA,IAAI,EAAEH,IAAI;EACVI,KAAKA,CAACC,CAAC,EAAE;IAAEC,KAAK;AAAEC,IAAAA,KAAAA;AAAM,GAAC,EAAE;AACzB,IAAA,IAAA,EAAMC,CAAmB;IACzB,MAAMC,mBAAmB,GAAGC,MAAsB,CAAA;AAGlD,IAAA,MAAA,mBAAa,GAAA,sBAAA,CAAA,CAAA,EAAA,GAAA,mBAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,mBAAA,CAAA,aAAA,KAAA,IAAA,GAAA,EAAA,GAAA,IAAA,CAAA,CAAA;AACX,IAAA,OAAA;AACA,MAAA,IAAI,GAACC,CAAAA;AAEL,MAAA,MAAe,WAAO,GAAA,CAAA,GAAA,GAAM,KAAA,CAAA,OAAA,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,GAAA,CAAA,IAAA,CAAA,KAAA,EAAA,KAAA,CAAA,CAAA;AAC1BC,MAAAA,IAAAA,CAAAA,WAAc;AACd,QAAA,OAAO,IAAI,CAAA;AACb,MAAA,IAAA,WAAA,CAAA,MAAA,GAAA,CAAA,EAAA;AAEA,QAAA,SAAoB,CAAA,IAAA,EAAA,sCAAmC,CAAA,CAAA;QACnD;AACFA,OAAAA;AACA,MAAA,MAAA,cAAW,GAAA,mBAAA,CAAA,WAAA,CAAA,CAAA;AACb,MAAA,IAAA,CAAA,cAAA,EAAA;AAEA,QAAA,SAAqB,CAAA,IAAA,EAAA,6BAA0B;QAGhD,OAAA,IAAA,CAAA;AACH,OAAA;AACF,MAAE,OAAA,cAAA,CAAA,UAAA,CAAA,cAAA,EAAA,KAAA,CAAA,EAAA,CAAA,CAAA,mBAAA,CAAA,CAAA,CAAA,CAAA;AAEF,KAASC,CAAAA;AACP,GAAA;GACMC;AACN,SAAWC,mBAASD,CAAAA,IAAU,EAAA;AAC5B,EAAA,IAAA,CAAA,IAAA;AACJ,IAAA,OAAA,IAAA,CAAA;AACA,EAAA,MAAA,QAAA,GAAA,IAAA,CAAA;AACA,EAAA,KAAA,MAAA,KAAA,IAAA,QAAA,EAAA;AACA,IAAA,IAAA,QAAA,CAAA,KAAA,CAAA,EAAA;AACI,MAAA,QAAY,KAAM,CAAA,IAAG;QACXC,KAAAA,OAAMC;AACZ,UAAA,SAAY;AACV,QAAA,KAAA,IAAA,CAAA;AACF,QAAA,KAAKC,KAAI;AACT,UAAA,OAAU,eAAA,CAAA,KAAA,CAAA,CAAA;aACDC,QAAAA;AACT,UAAA,OAAa,mBAAA,CAAA,KAAA,CAAA,QAAA,CAAA,CAAA;AACX,QAAA;AACF,UAAA,OAAA,KAAA,CAAA;AACE,OAAA;AACJ,KAAA;AACF,IAAA,OAAA,eAAA,CAAA,KAAA,CAAA,CAAA;;AAEF,EAAA,OAAA,IAAA,CAAA;AACA,CAAA;AACF,SAAA,eAAA,CAAA,CAAA,EAAA;AAEA,EAASA,MAAAA,EAAAA,GAAAA,YAAgBC,CAAiB,YAAE,CAAA,CAAA;AAC1C,EAAA,OAAQC,WAAe,CAAA;AACvB,IAAA,OAAA,EAAA,EAAA,CAAA,CAAA,CAAA,SAAA,CAAA;AAAA,GAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAmC;;;;"}