// copied from react-children-utilities // @see https://github.com/fernandopasik/react-children-utilities/tree/main import type * as React from 'react'; import { Children, isValidElement } from 'react'; export const childToString = (child?: React.ReactNode): string => { if (typeof child === 'undefined' || child === null || typeof child === 'boolean') { return ''; } if (JSON.stringify(child) === '{}') { return ''; } return (child as number | string).toString(); }; export const getTextFromChildren = (children: React.ReactNode | React.ReactNode[]): string => { if (!(children instanceof Array) && !isValidElement(children)) { return childToString(children); } return Children.toArray(children).reduce((text: string, child: React.ReactNode): string => { let newText = ''; const isValidElementResult = isValidElement<{ children?: React.ReactNode | React.ReactNode[] }>( child, ); const hasChildren = isValidElementResult && 'children' in child.props; if (isValidElementResult && hasChildren) { newText = getTextFromChildren(child.props.children); } else if (isValidElementResult && !hasChildren) { newText = ''; } else { newText = childToString(child); } return text.concat(newText); }, ''); };