{"version":3,"file":"runtime.cjs","names":[],"sources":["../../../src/markdown/runtime.ts"],"sourcesContent":["import type { HTMLTag, MarkdownRuntime } from '@intlayer/core/markdown';\nimport {\n  cloneElement,\n  createElement,\n  Fragment,\n  type ReactElement,\n  type ReactNode,\n} from 'react';\n\n/**\n * React-specific runtime for the markdown processor.\n * Implements the MarkdownRuntime interface using React's primitives.\n */\nexport const reactRuntime: MarkdownRuntime = {\n  /**\n   * Creates a React element.\n   * Handles the conversion of props and children to React format.\n   */\n  createElement: (\n    type: string | any,\n    props: Record<string, any> | null,\n    ...children: any[]\n  ): ReactNode => {\n    // React accepts children as rest args or as a single array\n    // If there's only one child, pass it directly to avoid unnecessary array\n    if (children.length === 0) {\n      return createElement(type, props);\n    }\n    if (children.length === 1) {\n      return createElement(type, props, children[0]);\n    }\n    return createElement(type, props, ...children);\n  },\n\n  /**\n   * Clones a React element with new props.\n   */\n  cloneElement: (\n    element: unknown,\n    props: Record<string, any>,\n    ...children: any[]\n  ): ReactNode => {\n    if (children.length === 0) {\n      return cloneElement(element as ReactElement, props);\n    }\n    return cloneElement(element as ReactElement, props, ...children);\n  },\n\n  /**\n   * React Fragment component.\n   */\n  Fragment,\n\n  /**\n   * React-specific prop normalization.\n   * React uses className instead of class, htmlFor instead of for, etc.\n   * The core processor already handles ATTRIBUTE_TO_NODE_PROP_MAP,\n   * so this is mostly a no-op but can be used for additional React-specific transforms.\n   */\n  normalizeProps: (\n    _tag: HTMLTag,\n    props: Record<string, any>\n  ): Record<string, any> => {\n    // The core already handles class -> className and for -> htmlFor\n    // via ATTRIBUTE_TO_NODE_PROP_MAP in the attrStringToMap function.\n    // This hook is available for any additional React-specific transforms.\n    return props;\n  },\n};\n\n/**\n * Creates a React runtime with custom createElement for advanced use cases.\n * Useful for wrapping elements or adding middleware.\n */\nexport const createReactRuntime = (\n  options: {\n    onCreateElement?: (\n      type: string | any,\n      props: Record<string, any> | null,\n      children: any[]\n    ) => ReactNode;\n  } = {}\n): MarkdownRuntime => {\n  const { onCreateElement } = options;\n\n  if (onCreateElement) {\n    return {\n      ...reactRuntime,\n      createElement: (\n        type: string | any,\n        props: Record<string, any> | null,\n        ...children: any[]\n      ): ReactNode => {\n        return onCreateElement(type, props, children);\n      },\n    };\n  }\n\n  return reactRuntime;\n};\n"],"mappings":";;;;;;;;;AAaA,MAAa,eAAgC;;;;;CAK3C,gBACE,MACA,OACA,GAAG,aACW;AAGd,MAAI,SAAS,WAAW,EACtB,iCAAqB,MAAM,MAAM;AAEnC,MAAI,SAAS,WAAW,EACtB,iCAAqB,MAAM,OAAO,SAAS,GAAG;AAEhD,kCAAqB,MAAM,OAAO,GAAG,SAAS;;;;;CAMhD,eACE,SACA,OACA,GAAG,aACW;AACd,MAAI,SAAS,WAAW,EACtB,gCAAoB,SAAyB,MAAM;AAErD,iCAAoB,SAAyB,OAAO,GAAG,SAAS;;;;;CAMlE;;;;;;;CAQA,iBACE,MACA,UACwB;AAIxB,SAAO;;CAEV;;;;;AAMD,MAAa,sBACX,UAMI,EAAE,KACc;CACpB,MAAM,EAAE,oBAAoB;AAE5B,KAAI,gBACF,QAAO;EACL,GAAG;EACH,gBACE,MACA,OACA,GAAG,aACW;AACd,UAAO,gBAAgB,MAAM,OAAO,SAAS;;EAEhD;AAGH,QAAO"}