{"version":3,"file":"only-child.mjs","sources":["../../../../../../packages/components/slot/src/only-child.ts"],"sourcesContent":["import {\r\n  cloneVNode,\r\n  Comment,\r\n  defineComponent,\r\n  Fragment,\r\n  h,\r\n  Text,\r\n  withDirectives,\r\n  inject,\r\n} from 'vue'\r\nimport { NOOP, isObject } from '@vue/shared'\r\nimport {\r\n  FORWARD_REF_INJECTION_KEY,\r\n  useForwardRefDirective\r\n} from '@sgui-plus/hooks'\r\nimport { debugWarn } from '@sgui-plus/utils/error'\r\n\r\nimport type { VNode } from 'vue'\r\n\r\nconst NAME = 'SgOnlyChild'\r\n\r\nconst OnlyChild = defineComponent({\r\n  name: NAME,\r\n  setup(_, { slots, attrs }) {\r\n    const forwardRefInjection = inject(FORWARD_REF_INJECTION_KEY, undefined)!\r\n    const forwardRefDirective = useForwardRefDirective(\r\n      forwardRefInjection.setForwardRef ?? NOOP\r\n    )\r\n    return () => {\r\n      const defaultSlot = slots.default?.(attrs)\r\n      if (!defaultSlot) return null\r\n\r\n      if (defaultSlot.length > 1) {\r\n        debugWarn(NAME, 'SgOnlyChild requires exact only one valid child.')\r\n        return null\r\n      }\r\n\r\n      const firstLegitNode = findFirstLegitChild(defaultSlot)\r\n      if (!firstLegitNode) {\r\n        debugWarn(NAME, 'no valid child node found')\r\n        return null\r\n      }\r\n\r\n      return withDirectives(cloneVNode(firstLegitNode, attrs), [\r\n        [forwardRefDirective],\r\n      ])\r\n    }\r\n  },\r\n})\r\n\r\nfunction findFirstLegitChild(node: VNode[] | undefined) {\r\n  if (!node) return null\r\n  const children = node as VNode[]\r\n  for (let i = 0; i < children.length; i++) {\r\n    /**\r\n     * when user uses h(Fragment, [text]) to render plain string,\r\n     * this switch case just cannot handle, when the value is primitives\r\n     * we should just return the wrapped string\r\n     */\r\n    const child = children[i]\r\n    if (isObject(child)) {\r\n      switch (child.type) {\r\n        case Comment:\r\n          continue\r\n        case Text:\r\n          return wrapTextContent(child)\r\n        case Fragment:\r\n          return findFirstLegitChild(child.children as VNode[])\r\n        default:\r\n          return child\r\n      }\r\n    }\r\n    return wrapTextContent(child)\r\n  }\r\n  return null\r\n}\r\n\r\nfunction wrapTextContent(s: string | VNode) {\r\n  return h('span', { class: 'sg-only-child__content' }, [s])\r\n}\r\n\r\nexport default OnlyChild\r\n"],"names":[],"mappings":";;;;;;AAgBA,MAAM,IAAI,GAAG,aAAa,CAAC;AACtB,MAAC,SAAS,GAAG,eAAe,CAAC;AAClC,EAAE,IAAI,EAAE,IAAI;AACZ,EAAE,KAAK,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;AAC7B,IAAI,IAAI,EAAE,CAAC;AACX,IAAI,MAAM,mBAAmB,GAAG,MAAM,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC,CAAC;AAC1E,IAAI,MAAM,mBAAmB,GAAG,sBAAsB,CAAC,CAAC,EAAE,GAAG,mBAAmB,CAAC,aAAa,KAAK,IAAI,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;AACrH,IAAI,OAAO,MAAM;AACjB,MAAM,IAAI,GAAG,CAAC;AACd,MAAM,MAAM,WAAW,GAAG,CAAC,GAAG,GAAG,KAAK,CAAC,OAAO,KAAK,IAAI,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAC1F,MAAM,IAAI,CAAC,WAAW;AACtB,QAAQ,OAAO,IAAI,CAAC;AACpB,MAAM,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;AAClC,QAAQ,SAAS,CAAC,IAAI,EAAE,kDAAkD,CAAC,CAAC;AAC5E,QAAQ,OAAO,IAAI,CAAC;AACpB,OAAO;AACP,MAAM,MAAM,cAAc,GAAG,mBAAmB,CAAC,WAAW,CAAC,CAAC;AAC9D,MAAM,IAAI,CAAC,cAAc,EAAE;AAC3B,QAAQ,SAAS,CAAC,IAAI,EAAE,2BAA2B,CAAC,CAAC;AACrD,QAAQ,OAAO,IAAI,CAAC;AACpB,OAAO;AACP,MAAM,OAAO,cAAc,CAAC,UAAU,CAAC,cAAc,EAAE,KAAK,CAAC,EAAE;AAC/D,QAAQ,CAAC,mBAAmB,CAAC;AAC7B,OAAO,CAAC,CAAC;AACT,KAAK,CAAC;AACN,GAAG;AACH,CAAC,EAAE;AACH,SAAS,mBAAmB,CAAC,IAAI,EAAE;AACnC,EAAE,IAAI,CAAC,IAAI;AACX,IAAI,OAAO,IAAI,CAAC;AAChB,EAAE,MAAM,QAAQ,GAAG,IAAI,CAAC;AACxB,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC5C,IAAI,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC9B,IAAI,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE;AACzB,MAAM,QAAQ,KAAK,CAAC,IAAI;AACxB,QAAQ,KAAK,OAAO;AACpB,UAAU,SAAS;AACnB,QAAQ,KAAK,IAAI;AACjB,UAAU,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;AACxC,QAAQ,KAAK,QAAQ;AACrB,UAAU,OAAO,mBAAmB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AACrD,QAAQ;AACR,UAAU,OAAO,KAAK,CAAC;AACvB,OAAO;AACP,KAAK;AACL,IAAI,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;AAClC,GAAG;AACH,EAAE,OAAO,IAAI,CAAC;AACd,CAAC;AACD,SAAS,eAAe,CAAC,CAAC,EAAE;AAC5B,EAAE,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,wBAAwB,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7D;;;;"}