import { renderIntlayerNode } from "./IntlayerNode.mjs";
import { getMarkdownMetadata } from "./@intlayer/core/dist/esm/transpiler/markdown/getMarkdownMetadata.mjs";
import { NodeType } from "./@intlayer/types/dist/esm/nodeType.mjs";
import { ContentSelectorRenderer } from "./editor/ContentSelectorWrapper.mjs";
import { EditedContentRenderer } from "./editor/useEditedContentRenderer.mjs";
import { MarkdownMetadataRenderer, MarkdownRenderer } from "./markdown/MarkdownRenderer.mjs";
import { renderReactElement } from "./reactElement/renderReactElement.mjs";
import { jsx } from "react/jsx-runtime";

//#region ../react-intlayer/dist/esm/plugins.mjs
/** Translation plugin. Replaces node with a locale string if nodeType = Translation. */
const intlayerNodePlugins = {
	id: "intlayer-node-plugin",
	canHandle: (node) => typeof node === "bigint" || typeof node === "string" || typeof node === "number",
	transform: (_node, { plugins,...rest }) => renderIntlayerNode({
		...rest,
		value: rest.children,
		children: /* @__PURE__ */ jsx(EditedContentRenderer, {
			...rest,
			children: rest.children
		})
	})
};
/** Translation plugin. Replaces node with a locale string if nodeType = Translation. */
const reactNodePlugins = {
	id: "react-node-plugin",
	canHandle: (node) => typeof node === "object" && typeof node?.props !== "undefined" && typeof node.key !== "undefined",
	transform: (node, { plugins,...rest }) => renderIntlayerNode({
		...rest,
		value: "[[react-element]]",
		children: /* @__PURE__ */ jsx(ContentSelectorRenderer, {
			...rest,
			children: renderReactElement(node)
		})
	})
};
/** Markdown string plugin. Replaces string node with a component that render the markdown. */
const markdownStringPlugin = {
	id: "markdown-string-plugin",
	canHandle: (node) => typeof node === "string",
	transform: (node, props, deepTransformNode) => {
		const { plugins,...rest } = props;
		const metadataNodes = deepTransformNode(getMarkdownMetadata(node), {
			plugins: [{
				id: "markdown-metadata-plugin",
				canHandle: (metadataNode) => typeof metadataNode === "string" || typeof metadataNode === "number" || typeof metadataNode === "boolean" || !metadataNode,
				transform: (metadataNode, props$1) => renderIntlayerNode({
					...props$1,
					value: metadataNode,
					children: /* @__PURE__ */ jsx(ContentSelectorRenderer, {
						...rest,
						children: /* @__PURE__ */ jsx(MarkdownMetadataRenderer, {
							...rest,
							metadataKeyPath: props$1.keyPath,
							children: node
						})
					})
				})
			}],
			dictionaryKey: rest.dictionaryKey,
			keyPath: []
		});
		return renderIntlayerNode({
			...props,
			value: node,
			children: /* @__PURE__ */ jsx(ContentSelectorRenderer, {
				...rest,
				children: /* @__PURE__ */ jsx(MarkdownRenderer, {
					...rest,
					children: node
				})
			}),
			additionalProps: { metadata: metadataNodes }
		});
	}
};
const markdownPlugin = {
	id: "markdown-plugin",
	canHandle: (node) => typeof node === "object" && node?.nodeType === NodeType.Markdown,
	transform: (node, props, deepTransformNode) => {
		const newKeyPath = [...props.keyPath, { type: NodeType.Markdown }];
		const children = node[NodeType.Markdown];
		return deepTransformNode(children, {
			...props,
			children,
			keyPath: newKeyPath,
			plugins: [markdownStringPlugin, ...props.plugins ?? []]
		});
	}
};

//#endregion
export { intlayerNodePlugins, markdownPlugin, reactNodePlugins };
//# sourceMappingURL=plugins.mjs.map