import { JSX } from "solid-js";
import { CustomEmoji, RE_ANY_EMOJI, UnicodeEmoji } from ".";
/**
* Convert any arbitrary text to rich text with emoji
*/
export function TextWithEmoji(props: { content?: string }) {
/**
* Render the actual content
* @param content Content
* @returns Elements
*/
function render(content?: string) {
if (!content) return null;
const components: JSX.Element[] = [];
let lastIndex = 0;
/**
* Push content up to given index
* @param index Index
*/
function pushToIndex(index: number) {
if (lastIndex === index) return;
components.push(<>{content!.slice(lastIndex, index)}>);
}
RE_ANY_EMOJI.lastIndex = 0;
let match = RE_ANY_EMOJI.exec(content);
while (match) {
pushToIndex(match.index);
lastIndex = match.index + match[0].length;
components.push(
match[0].length === 28 ? (
) : (
),
);
match = RE_ANY_EMOJI.exec(content);
}
pushToIndex(content.length);
return components;
}
return <>{render(props.content)}>;
}