react-intlayer 8.1.2 → 8.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (291) hide show
  1. package/dist/cjs/IntlayerNode.cjs +1 -17
  2. package/dist/cjs/IntlayerNode.cjs.map +1 -1
  3. package/dist/cjs/UI/ContentSelector.cjs +1 -96
  4. package/dist/cjs/UI/ContentSelector.cjs.map +1 -1
  5. package/dist/cjs/_virtual/_rolldown/runtime.cjs +1 -29
  6. package/dist/cjs/client/IntlayerProvider.cjs +1 -92
  7. package/dist/cjs/client/IntlayerProvider.cjs.map +1 -1
  8. package/dist/cjs/client/format/index.cjs +1 -20
  9. package/dist/cjs/client/format/useCompact.cjs +1 -29
  10. package/dist/cjs/client/format/useCompact.cjs.map +1 -1
  11. package/dist/cjs/client/format/useCurrency.cjs +1 -43
  12. package/dist/cjs/client/format/useCurrency.cjs.map +1 -1
  13. package/dist/cjs/client/format/useDate.cjs +1 -45
  14. package/dist/cjs/client/format/useDate.cjs.map +1 -1
  15. package/dist/cjs/client/format/useIntl.cjs +1 -45
  16. package/dist/cjs/client/format/useIntl.cjs.map +1 -1
  17. package/dist/cjs/client/format/useList.cjs +1 -40
  18. package/dist/cjs/client/format/useList.cjs.map +1 -1
  19. package/dist/cjs/client/format/useNumber.cjs +1 -41
  20. package/dist/cjs/client/format/useNumber.cjs.map +1 -1
  21. package/dist/cjs/client/format/usePercentage.cjs +1 -37
  22. package/dist/cjs/client/format/usePercentage.cjs.map +1 -1
  23. package/dist/cjs/client/format/useRelativeTime.cjs +1 -37
  24. package/dist/cjs/client/format/useRelativeTime.cjs.map +1 -1
  25. package/dist/cjs/client/format/useUnit.cjs +1 -36
  26. package/dist/cjs/client/format/useUnit.cjs.map +1 -1
  27. package/dist/cjs/client/index.cjs +1 -34
  28. package/dist/cjs/client/t.cjs +1 -40
  29. package/dist/cjs/client/t.cjs.map +1 -1
  30. package/dist/cjs/client/useDictionary.cjs +1 -27
  31. package/dist/cjs/client/useDictionary.cjs.map +1 -1
  32. package/dist/cjs/client/useDictionaryAsync.cjs +1 -24
  33. package/dist/cjs/client/useDictionaryAsync.cjs.map +1 -1
  34. package/dist/cjs/client/useDictionaryDynamic.cjs +1 -25
  35. package/dist/cjs/client/useDictionaryDynamic.cjs.map +1 -1
  36. package/dist/cjs/client/useI18n.cjs +1 -45
  37. package/dist/cjs/client/useI18n.cjs.map +1 -1
  38. package/dist/cjs/client/useIntlayer.cjs +1 -42
  39. package/dist/cjs/client/useIntlayer.cjs.map +1 -1
  40. package/dist/cjs/client/useLoadDynamic.cjs +1 -27
  41. package/dist/cjs/client/useLoadDynamic.cjs.map +1 -1
  42. package/dist/cjs/client/useLocale.cjs +1 -60
  43. package/dist/cjs/client/useLocale.cjs.map +1 -1
  44. package/dist/cjs/client/useLocaleBase.cjs +1 -26
  45. package/dist/cjs/client/useLocaleBase.cjs.map +1 -1
  46. package/dist/cjs/client/useLocaleStorage.cjs +1 -61
  47. package/dist/cjs/client/useLocaleStorage.cjs.map +1 -1
  48. package/dist/cjs/client/useRewriteURL.cjs +1 -42
  49. package/dist/cjs/client/useRewriteURL.cjs.map +1 -1
  50. package/dist/cjs/client/useTraduction.cjs +1 -35
  51. package/dist/cjs/client/useTraduction.cjs.map +1 -1
  52. package/dist/cjs/editor/ContentSelectorWrapper.cjs +1 -55
  53. package/dist/cjs/editor/ContentSelectorWrapper.cjs.map +1 -1
  54. package/dist/cjs/editor/IntlayerEditorProvider.cjs +1 -61
  55. package/dist/cjs/editor/IntlayerEditorProvider.cjs.map +1 -1
  56. package/dist/cjs/editor/index.cjs +1 -4
  57. package/dist/cjs/editor/useEditedContentRenderer.cjs +1 -40
  58. package/dist/cjs/editor/useEditedContentRenderer.cjs.map +1 -1
  59. package/dist/cjs/getDictionary.cjs +1 -19
  60. package/dist/cjs/getDictionary.cjs.map +1 -1
  61. package/dist/cjs/getIntlayer.cjs +1 -19
  62. package/dist/cjs/getIntlayer.cjs.map +1 -1
  63. package/dist/cjs/html/HTMLProvider.cjs +1 -18
  64. package/dist/cjs/html/HTMLProvider.cjs.map +1 -1
  65. package/dist/cjs/html/HTMLRenderer.cjs +1 -59
  66. package/dist/cjs/html/HTMLRenderer.cjs.map +1 -1
  67. package/dist/cjs/html/HTMLRendererPlugin.cjs +1 -36
  68. package/dist/cjs/html/HTMLRendererPlugin.cjs.map +1 -1
  69. package/dist/cjs/html/index.cjs +1 -12
  70. package/dist/cjs/index.cjs +1 -52
  71. package/dist/cjs/markdown/MarkdownProvider.cjs +1 -77
  72. package/dist/cjs/markdown/MarkdownProvider.cjs.map +1 -1
  73. package/dist/cjs/markdown/MarkdownRenderer.cjs +1 -199
  74. package/dist/cjs/markdown/MarkdownRenderer.cjs.map +1 -1
  75. package/dist/cjs/markdown/MarkdownRendererPlugin.cjs +1 -33
  76. package/dist/cjs/markdown/MarkdownRendererPlugin.cjs.map +1 -1
  77. package/dist/cjs/markdown/index.cjs +1 -25
  78. package/dist/cjs/markdown/processor.cjs +1 -66
  79. package/dist/cjs/markdown/processor.cjs.map +1 -1
  80. package/dist/cjs/markdown/runtime.cjs +1 -43
  81. package/dist/cjs/markdown/runtime.cjs.map +1 -1
  82. package/dist/cjs/plugins.cjs +1 -179
  83. package/dist/cjs/plugins.cjs.map +1 -1
  84. package/dist/cjs/reactElement/renderReactElement.cjs +1 -52
  85. package/dist/cjs/reactElement/renderReactElement.cjs.map +1 -1
  86. package/dist/cjs/server/IntlayerServerProvider.cjs +1 -34
  87. package/dist/cjs/server/IntlayerServerProvider.cjs.map +1 -1
  88. package/dist/cjs/server/format/index.cjs +1 -18
  89. package/dist/cjs/server/format/useCompact.cjs +1 -27
  90. package/dist/cjs/server/format/useCompact.cjs.map +1 -1
  91. package/dist/cjs/server/format/useCurrency.cjs +1 -38
  92. package/dist/cjs/server/format/useCurrency.cjs.map +1 -1
  93. package/dist/cjs/server/format/useDate.cjs +1 -43
  94. package/dist/cjs/server/format/useDate.cjs.map +1 -1
  95. package/dist/cjs/server/format/useIntl.cjs +1 -44
  96. package/dist/cjs/server/format/useIntl.cjs.map +1 -1
  97. package/dist/cjs/server/format/useList.cjs +1 -35
  98. package/dist/cjs/server/format/useList.cjs.map +1 -1
  99. package/dist/cjs/server/format/useNumber.cjs +1 -39
  100. package/dist/cjs/server/format/useNumber.cjs.map +1 -1
  101. package/dist/cjs/server/format/usePercentage.cjs +1 -35
  102. package/dist/cjs/server/format/usePercentage.cjs.map +1 -1
  103. package/dist/cjs/server/format/useRelativeTime.cjs +1 -35
  104. package/dist/cjs/server/format/useRelativeTime.cjs.map +1 -1
  105. package/dist/cjs/server/format/useUnit.cjs +1 -34
  106. package/dist/cjs/server/format/useUnit.cjs.map +1 -1
  107. package/dist/cjs/server/index.cjs +1 -24
  108. package/dist/cjs/server/serverContext.cjs +1 -58
  109. package/dist/cjs/server/serverContext.cjs.map +1 -1
  110. package/dist/cjs/server/t.cjs +1 -35
  111. package/dist/cjs/server/t.cjs.map +1 -1
  112. package/dist/cjs/server/useDictionary.cjs +1 -17
  113. package/dist/cjs/server/useDictionary.cjs.map +1 -1
  114. package/dist/cjs/server/useDictionaryAsync.cjs +1 -21
  115. package/dist/cjs/server/useDictionaryAsync.cjs.map +1 -1
  116. package/dist/cjs/server/useDictionaryDynamic.cjs +1 -22
  117. package/dist/cjs/server/useDictionaryDynamic.cjs.map +1 -1
  118. package/dist/cjs/server/useI18n.cjs +1 -38
  119. package/dist/cjs/server/useI18n.cjs.map +1 -1
  120. package/dist/cjs/server/useIntlayer.cjs +1 -17
  121. package/dist/cjs/server/useIntlayer.cjs.map +1 -1
  122. package/dist/cjs/server/useLoadDynamic.cjs +1 -14
  123. package/dist/cjs/server/useLoadDynamic.cjs.map +1 -1
  124. package/dist/cjs/server/useLocale.cjs +1 -24
  125. package/dist/cjs/server/useLocale.cjs.map +1 -1
  126. package/dist/esm/IntlayerNode.mjs +1 -15
  127. package/dist/esm/IntlayerNode.mjs.map +1 -1
  128. package/dist/esm/UI/ContentSelector.mjs +1 -94
  129. package/dist/esm/UI/ContentSelector.mjs.map +1 -1
  130. package/dist/esm/client/IntlayerProvider.mjs +1 -86
  131. package/dist/esm/client/IntlayerProvider.mjs.map +1 -1
  132. package/dist/esm/client/format/index.mjs +1 -11
  133. package/dist/esm/client/format/useCompact.mjs +1 -27
  134. package/dist/esm/client/format/useCompact.mjs.map +1 -1
  135. package/dist/esm/client/format/useCurrency.mjs +1 -41
  136. package/dist/esm/client/format/useCurrency.mjs.map +1 -1
  137. package/dist/esm/client/format/useDate.mjs +1 -43
  138. package/dist/esm/client/format/useDate.mjs.map +1 -1
  139. package/dist/esm/client/format/useIntl.mjs +1 -43
  140. package/dist/esm/client/format/useIntl.mjs.map +1 -1
  141. package/dist/esm/client/format/useList.mjs +1 -38
  142. package/dist/esm/client/format/useList.mjs.map +1 -1
  143. package/dist/esm/client/format/useNumber.mjs +1 -39
  144. package/dist/esm/client/format/useNumber.mjs.map +1 -1
  145. package/dist/esm/client/format/usePercentage.mjs +1 -35
  146. package/dist/esm/client/format/usePercentage.mjs.map +1 -1
  147. package/dist/esm/client/format/useRelativeTime.mjs +1 -35
  148. package/dist/esm/client/format/useRelativeTime.mjs.map +1 -1
  149. package/dist/esm/client/format/useUnit.mjs +1 -34
  150. package/dist/esm/client/format/useUnit.mjs.map +1 -1
  151. package/dist/esm/client/index.mjs +1 -14
  152. package/dist/esm/client/t.mjs +1 -38
  153. package/dist/esm/client/t.mjs.map +1 -1
  154. package/dist/esm/client/useDictionary.mjs +1 -25
  155. package/dist/esm/client/useDictionary.mjs.map +1 -1
  156. package/dist/esm/client/useDictionaryAsync.mjs +1 -21
  157. package/dist/esm/client/useDictionaryAsync.mjs.map +1 -1
  158. package/dist/esm/client/useDictionaryDynamic.mjs +1 -22
  159. package/dist/esm/client/useDictionaryDynamic.mjs.map +1 -1
  160. package/dist/esm/client/useI18n.mjs +1 -43
  161. package/dist/esm/client/useI18n.mjs.map +1 -1
  162. package/dist/esm/client/useIntlayer.mjs +1 -40
  163. package/dist/esm/client/useIntlayer.mjs.map +1 -1
  164. package/dist/esm/client/useLoadDynamic.mjs +1 -25
  165. package/dist/esm/client/useLoadDynamic.mjs.map +1 -1
  166. package/dist/esm/client/useLocale.mjs +1 -57
  167. package/dist/esm/client/useLocale.mjs.map +1 -1
  168. package/dist/esm/client/useLocaleBase.mjs +1 -23
  169. package/dist/esm/client/useLocaleBase.mjs.map +1 -1
  170. package/dist/esm/client/useLocaleStorage.mjs +1 -54
  171. package/dist/esm/client/useLocaleStorage.mjs.map +1 -1
  172. package/dist/esm/client/useRewriteURL.mjs +1 -39
  173. package/dist/esm/client/useRewriteURL.mjs.map +1 -1
  174. package/dist/esm/client/useTraduction.mjs +1 -33
  175. package/dist/esm/client/useTraduction.mjs.map +1 -1
  176. package/dist/esm/editor/ContentSelectorWrapper.mjs +1 -53
  177. package/dist/esm/editor/ContentSelectorWrapper.mjs.map +1 -1
  178. package/dist/esm/editor/IntlayerEditorProvider.mjs +1 -58
  179. package/dist/esm/editor/IntlayerEditorProvider.mjs.map +1 -1
  180. package/dist/esm/editor/index.mjs +1 -3
  181. package/dist/esm/editor/useEditedContentRenderer.mjs +1 -37
  182. package/dist/esm/editor/useEditedContentRenderer.mjs.map +1 -1
  183. package/dist/esm/getDictionary.mjs +1 -17
  184. package/dist/esm/getDictionary.mjs.map +1 -1
  185. package/dist/esm/getIntlayer.mjs +1 -17
  186. package/dist/esm/getIntlayer.mjs.map +1 -1
  187. package/dist/esm/html/HTMLProvider.mjs +1 -15
  188. package/dist/esm/html/HTMLProvider.mjs.map +1 -1
  189. package/dist/esm/html/HTMLRenderer.mjs +1 -54
  190. package/dist/esm/html/HTMLRenderer.mjs.map +1 -1
  191. package/dist/esm/html/HTMLRendererPlugin.mjs +1 -34
  192. package/dist/esm/html/HTMLRendererPlugin.mjs.map +1 -1
  193. package/dist/esm/html/index.mjs +1 -5
  194. package/dist/esm/index.mjs +1 -21
  195. package/dist/esm/markdown/MarkdownProvider.mjs +1 -74
  196. package/dist/esm/markdown/MarkdownProvider.mjs.map +1 -1
  197. package/dist/esm/markdown/MarkdownRenderer.mjs +1 -195
  198. package/dist/esm/markdown/MarkdownRenderer.mjs.map +1 -1
  199. package/dist/esm/markdown/MarkdownRendererPlugin.mjs +1 -30
  200. package/dist/esm/markdown/MarkdownRendererPlugin.mjs.map +1 -1
  201. package/dist/esm/markdown/index.mjs +1 -7
  202. package/dist/esm/markdown/processor.mjs +1 -58
  203. package/dist/esm/markdown/processor.mjs.map +1 -1
  204. package/dist/esm/markdown/runtime.mjs +1 -39
  205. package/dist/esm/markdown/runtime.mjs.map +1 -1
  206. package/dist/esm/plugins.mjs +1 -172
  207. package/dist/esm/plugins.mjs.map +1 -1
  208. package/dist/esm/reactElement/renderReactElement.mjs +1 -50
  209. package/dist/esm/reactElement/renderReactElement.mjs.map +1 -1
  210. package/dist/esm/server/IntlayerServerProvider.mjs +1 -28
  211. package/dist/esm/server/IntlayerServerProvider.mjs.map +1 -1
  212. package/dist/esm/server/format/index.mjs +1 -10
  213. package/dist/esm/server/format/useCompact.mjs +1 -25
  214. package/dist/esm/server/format/useCompact.mjs.map +1 -1
  215. package/dist/esm/server/format/useCurrency.mjs +1 -36
  216. package/dist/esm/server/format/useCurrency.mjs.map +1 -1
  217. package/dist/esm/server/format/useDate.mjs +1 -41
  218. package/dist/esm/server/format/useDate.mjs.map +1 -1
  219. package/dist/esm/server/format/useIntl.mjs +1 -41
  220. package/dist/esm/server/format/useIntl.mjs.map +1 -1
  221. package/dist/esm/server/format/useList.mjs +1 -33
  222. package/dist/esm/server/format/useList.mjs.map +1 -1
  223. package/dist/esm/server/format/useNumber.mjs +1 -37
  224. package/dist/esm/server/format/useNumber.mjs.map +1 -1
  225. package/dist/esm/server/format/usePercentage.mjs +1 -33
  226. package/dist/esm/server/format/usePercentage.mjs.map +1 -1
  227. package/dist/esm/server/format/useRelativeTime.mjs +1 -33
  228. package/dist/esm/server/format/useRelativeTime.mjs.map +1 -1
  229. package/dist/esm/server/format/useUnit.mjs +1 -32
  230. package/dist/esm/server/format/useUnit.mjs.map +1 -1
  231. package/dist/esm/server/index.mjs +1 -12
  232. package/dist/esm/server/serverContext.mjs +1 -54
  233. package/dist/esm/server/serverContext.mjs.map +1 -1
  234. package/dist/esm/server/t.mjs +1 -33
  235. package/dist/esm/server/t.mjs.map +1 -1
  236. package/dist/esm/server/useDictionary.mjs +1 -16
  237. package/dist/esm/server/useDictionary.mjs.map +1 -1
  238. package/dist/esm/server/useDictionaryAsync.mjs +1 -18
  239. package/dist/esm/server/useDictionaryAsync.mjs.map +1 -1
  240. package/dist/esm/server/useDictionaryDynamic.mjs +1 -19
  241. package/dist/esm/server/useDictionaryDynamic.mjs.map +1 -1
  242. package/dist/esm/server/useI18n.mjs +1 -37
  243. package/dist/esm/server/useI18n.mjs.map +1 -1
  244. package/dist/esm/server/useIntlayer.mjs +1 -16
  245. package/dist/esm/server/useIntlayer.mjs.map +1 -1
  246. package/dist/esm/server/useLoadDynamic.mjs +1 -11
  247. package/dist/esm/server/useLoadDynamic.mjs.map +1 -1
  248. package/dist/esm/server/useLocale.mjs +1 -21
  249. package/dist/esm/server/useLocale.mjs.map +1 -1
  250. package/dist/types/IntlayerNode.d.ts +1 -1
  251. package/dist/types/client/format/useDate.d.ts +1 -1
  252. package/dist/types/client/useDictionary.d.ts +2 -2
  253. package/dist/types/client/useDictionary.d.ts.map +1 -1
  254. package/dist/types/client/useDictionaryDynamic.d.ts +2 -2
  255. package/dist/types/client/useDictionaryDynamic.d.ts.map +1 -1
  256. package/dist/types/client/useI18n.d.ts +3 -3
  257. package/dist/types/client/useI18n.d.ts.map +1 -1
  258. package/dist/types/client/useIntlayer.d.ts +2 -2
  259. package/dist/types/client/useIntlayer.d.ts.map +1 -1
  260. package/dist/types/editor/ContentSelectorWrapper.d.ts +1 -1
  261. package/dist/types/editor/ContentSelectorWrapper.d.ts.map +1 -1
  262. package/dist/types/getDictionary.d.ts +1 -1
  263. package/dist/types/getIntlayer.d.ts +1 -1
  264. package/dist/types/getIntlayer.d.ts.map +1 -1
  265. package/dist/types/html/HTMLComponentTypes.d.ts +1 -1
  266. package/dist/types/html/HTMLRenderer.d.ts.map +1 -1
  267. package/dist/types/index.d.ts +1 -1
  268. package/dist/types/markdown/MarkdownRendererPlugin.d.ts.map +1 -1
  269. package/dist/types/markdown/processor.d.ts +1 -1
  270. package/dist/types/markdown/runtime.d.ts +1 -1
  271. package/dist/types/plugins.d.ts +1 -1
  272. package/dist/types/plugins.d.ts.map +1 -1
  273. package/dist/types/server/format/useCompact.d.ts +1 -1
  274. package/dist/types/server/format/useCurrency.d.ts +1 -1
  275. package/dist/types/server/format/useDate.d.ts +1 -1
  276. package/dist/types/server/format/useList.d.ts +1 -1
  277. package/dist/types/server/format/useNumber.d.ts +1 -1
  278. package/dist/types/server/format/usePercentage.d.ts +1 -1
  279. package/dist/types/server/format/useRelativeTime.d.ts +1 -1
  280. package/dist/types/server/format/useUnit.d.ts +1 -1
  281. package/dist/types/server/useDictionary.d.ts +2 -2
  282. package/dist/types/server/useDictionary.d.ts.map +1 -1
  283. package/dist/types/server/useDictionaryAsync.d.ts +2 -2
  284. package/dist/types/server/useDictionaryAsync.d.ts.map +1 -1
  285. package/dist/types/server/useDictionaryDynamic.d.ts +2 -2
  286. package/dist/types/server/useDictionaryDynamic.d.ts.map +1 -1
  287. package/dist/types/server/useI18n.d.ts +3 -3
  288. package/dist/types/server/useI18n.d.ts.map +1 -1
  289. package/dist/types/server/useIntlayer.d.ts +2 -2
  290. package/dist/types/server/useIntlayer.d.ts.map +1 -1
  291. package/package.json +9 -9
@@ -1,196 +1,2 @@
1
- import { compiler } from "./processor.mjs";
2
- import { useMarkdownContext } from "./MarkdownProvider.mjs";
3
- import { Fragment, jsx } from "react/jsx-runtime";
4
-
5
- //#region src/markdown/MarkdownRenderer.tsx
6
- /**
7
- * Renders markdown content to JSX with the provided components and options.
8
- *
9
- * This function does not use context from MarkdownProvider. Use `useMarkdownRenderer`
10
- * hook if you want to leverage provider context.
11
- *
12
- * @param content - The markdown string to render
13
- * @param props - Configuration options for rendering
14
- * @param props.components - Component overrides for HTML tags
15
- * @param props.wrapper - Wrapper component for multiple children
16
- * @returns JSX element representing the rendered markdown
17
- *
18
- * @example
19
- * ```tsx
20
- * import { renderMarkdown } from '@intlayer/react-intlayer/markdown';
21
- *
22
- * const markdown = '# Hello World\n\nThis is **bold** text.';
23
- * const jsx = renderMarkdown(markdown, {
24
- * components: {
25
- * h1: ({ children }) => <h1 className="title">{children}</h1>,
26
- * },
27
- * forceBlock: true,
28
- * });
29
- * ```
30
- */
31
- const renderMarkdown = (content, { components, wrapper, forceBlock, forceInline, preserveFrontmatter, tagfilter } = {}) => {
32
- return compiler(content, {
33
- components,
34
- forceBlock,
35
- forceInline,
36
- wrapper,
37
- forceWrapper: !!wrapper,
38
- preserveFrontmatter,
39
- tagfilter
40
- });
41
- };
42
- /**
43
- * Hook that returns a function to render markdown content.
44
- *
45
- * This hook considers the configuration from the `MarkdownProvider` context if available,
46
- * falling back to the provided props or default behavior.
47
- *
48
- * @param props - Optional configuration that will override context values
49
- * @param props.components - Component overrides for HTML tags (overrides context)
50
- * @param props.wrapper - Wrapper component (overrides context)
51
- * @returns A function that takes markdown content and returns JSX
52
- *
53
- * @example
54
- * ```tsx
55
- * import { useMarkdownRenderer } from '@intlayer/react-intlayer/markdown';
56
- *
57
- * function MyComponent() {
58
- * const renderMarkdown = useMarkdownRenderer({
59
- * components: {
60
- * h1: ({ children }) => <h1 className="custom">{children}</h1>,
61
- * },
62
- * });
63
- *
64
- * return (
65
- * <div>
66
- * {renderMarkdown('# Hello\n\nThis is **markdown**')}
67
- * </div>
68
- * );
69
- * }
70
- * ```
71
- *
72
- * @example
73
- * ```tsx
74
- * // With MarkdownProvider context
75
- * function App() {
76
- * return (
77
- * <MarkdownProvider
78
- * components={{ h1: CustomHeading }}
79
- * forceBlock={true}
80
- * >
81
- * <MyComponent />
82
- * </MarkdownProvider>
83
- * );
84
- * }
85
- * ```
86
- */
87
- const useMarkdownRenderer = ({ components, wrapper, forceBlock, forceInline, preserveFrontmatter, tagfilter } = {}) => {
88
- const context = useMarkdownContext();
89
- return (content) => {
90
- if (context) return context.renderMarkdown(content, {
91
- forceBlock,
92
- forceInline,
93
- preserveFrontmatter,
94
- tagfilter
95
- }, components, wrapper);
96
- return renderMarkdown(content, {
97
- components,
98
- wrapper,
99
- forceBlock,
100
- forceInline,
101
- preserveFrontmatter,
102
- tagfilter
103
- });
104
- };
105
- };
106
- /**
107
- * React component that renders markdown content to JSX.
108
- *
109
- * This component uses the `renderMarkdown` function from the `MarkdownProvider` context
110
- * if available. Otherwise, it falls back to the default compiler with provided components
111
- * and options. You can also provide a custom `renderMarkdown` function prop to override
112
- * all rendering behavior.
113
- *
114
- * @example
115
- * ```tsx
116
- * import { MarkdownRenderer } from '@intlayer/react-intlayer/markdown';
117
- *
118
- * function MyComponent() {
119
- * return (
120
- * <MarkdownRenderer>
121
- * {`# Hello World
122
- *
123
- * This is a paragraph with **bold** and *italic* text.
124
- *
125
- * - List item 1
126
- * - List item 2`}
127
- * </MarkdownRenderer>
128
- * );
129
- * }
130
- * ```
131
- *
132
- * @example
133
- * ```tsx
134
- * // With custom components
135
- * <MarkdownRenderer
136
- * components={{
137
- * h1: ({ children }) => <h1 className="text-4xl font-bold">{children}</h1>,
138
- * a: ({ href, children }) => (
139
- * <a href={href} className="text-blue-500 hover:underline">
140
- * {children}
141
- * </a>
142
- * ),
143
- * }}
144
- * forceBlock={true}
145
- * >
146
- * {markdownContent}
147
- * </MarkdownRenderer>
148
- * ```
149
- *
150
- * @example
151
- * ```tsx
152
- * // With MarkdownProvider context
153
- * function App() {
154
- * return (
155
- * <MarkdownProvider
156
- * components={{ h1: CustomHeading }}
157
- * forceBlock={true}
158
- * >
159
- * <MarkdownRenderer>
160
- * {markdownContent}
161
- * </MarkdownRenderer>
162
- * </MarkdownProvider>
163
- * );
164
- * }
165
- * ```
166
- */
167
- const MarkdownRenderer = ({ children = "", components, wrapper, forceBlock, forceInline, preserveFrontmatter, tagfilter, renderMarkdown }) => {
168
- const context = useMarkdownContext();
169
- if (renderMarkdown) return /* @__PURE__ */ jsx(Fragment, { children: renderMarkdown(children, {
170
- components,
171
- wrapper,
172
- forceBlock,
173
- forceInline,
174
- preserveFrontmatter,
175
- tagfilter
176
- }) });
177
- if (context) return /* @__PURE__ */ jsx(Fragment, { children: context.renderMarkdown(children, {
178
- forceBlock,
179
- forceInline,
180
- preserveFrontmatter,
181
- tagfilter
182
- }, components, wrapper) });
183
- return /* @__PURE__ */ jsx(Fragment, { children: compiler(children, {
184
- components,
185
- forceBlock,
186
- forceInline,
187
- wrapper,
188
- forceWrapper: !!wrapper,
189
- preserveFrontmatter,
190
- tagfilter
191
- }) });
192
- };
193
-
194
- //#endregion
195
- export { MarkdownRenderer, renderMarkdown, useMarkdownRenderer };
1
+ import{compiler as e}from"./processor.mjs";import{useMarkdownContext as t}from"./MarkdownProvider.mjs";import{Fragment as n,jsx as r}from"react/jsx-runtime";const i=(t,{components:n,wrapper:r,forceBlock:i,forceInline:a,preserveFrontmatter:o,tagfilter:s}={})=>e(t,{components:n,forceBlock:i,forceInline:a,wrapper:r,forceWrapper:!!r,preserveFrontmatter:o,tagfilter:s}),a=({components:e,wrapper:n,forceBlock:r,forceInline:a,preserveFrontmatter:o,tagfilter:s}={})=>{let c=t();return t=>c?c.renderMarkdown(t,{forceBlock:r,forceInline:a,preserveFrontmatter:o,tagfilter:s},e,n):i(t,{components:e,wrapper:n,forceBlock:r,forceInline:a,preserveFrontmatter:o,tagfilter:s})},o=({children:i=``,components:a,wrapper:o,forceBlock:s,forceInline:c,preserveFrontmatter:l,tagfilter:u,renderMarkdown:d})=>{let f=t();return d?r(n,{children:d(i,{components:a,wrapper:o,forceBlock:s,forceInline:c,preserveFrontmatter:l,tagfilter:u})}):f?r(n,{children:f.renderMarkdown(i,{forceBlock:s,forceInline:c,preserveFrontmatter:l,tagfilter:u},a,o)}):r(n,{children:e(i,{components:a,forceBlock:s,forceInline:c,wrapper:o,forceWrapper:!!o,preserveFrontmatter:l,tagfilter:u})})};export{o as MarkdownRenderer,i as renderMarkdown,a as useMarkdownRenderer};
196
2
  //# sourceMappingURL=MarkdownRenderer.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"MarkdownRenderer.mjs","names":[],"sources":["../../../src/markdown/MarkdownRenderer.tsx"],"sourcesContent":["import type { FC, HTMLAttributes, JSX, ReactNode } from 'react';\nimport type { HTMLComponents } from '../html/HTMLComponentTypes';\nimport {\n type MarkdownProviderOptions,\n useMarkdownContext,\n} from './MarkdownProvider';\nimport { compiler, type MarkdownRendererOptions } from './processor';\n\n/**\n * Props for rendering markdown content.\n *\n * @example\n * ```tsx\n * const props: RenderMarkdownProps = {\n * components: {\n * h1: ({ children }) => <h1 className=\"text-3xl\">{children}</h1>,\n * p: ({ children }) => <p className=\"text-gray-700\">{children}</p>,\n * },\n * wrapper: ({ children }) => <article>{children}</article>,\n * options: {\n * forceBlock: true,\n * preserveFrontmatter: false,\n * tagfilter: true,\n * },\n * };\n * ```\n */\nexport type RenderMarkdownProps = MarkdownProviderOptions & {\n /**\n * Component overrides for HTML tags.\n * Allows you to customize how specific HTML elements are rendered.\n * Only used if not wrapped in a MarkdownProvider.\n *\n * @example\n * ```tsx\n * components={{\n * h1: ({ children }) => <h1 className=\"title\">{children}</h1>,\n * a: ({ href, children }) => <Link to={href}>{children}</Link>,\n * }}\n * ```\n */\n components?: HTMLComponents<'permissive', {}>;\n /**\n * Wrapper element or component to be used when there are multiple children.\n * Only used if not wrapped in a MarkdownProvider.\n *\n * @example\n * ```tsx\n * wrapper={({ children }) => <div className=\"markdown-content\">{children}</div>}\n * ```\n */\n wrapper?: FC<HTMLAttributes<HTMLElement>>;\n};\n\n/**\n * Renders markdown content to JSX with the provided components and options.\n *\n * This function does not use context from MarkdownProvider. Use `useMarkdownRenderer`\n * hook if you want to leverage provider context.\n *\n * @param content - The markdown string to render\n * @param props - Configuration options for rendering\n * @param props.components - Component overrides for HTML tags\n * @param props.wrapper - Wrapper component for multiple children\n * @returns JSX element representing the rendered markdown\n *\n * @example\n * ```tsx\n * import { renderMarkdown } from '@intlayer/react-intlayer/markdown';\n *\n * const markdown = '# Hello World\\n\\nThis is **bold** text.';\n * const jsx = renderMarkdown(markdown, {\n * components: {\n * h1: ({ children }) => <h1 className=\"title\">{children}</h1>,\n * },\n * forceBlock: true,\n * });\n * ```\n */\nexport const renderMarkdown = (\n content: string,\n {\n components,\n wrapper,\n forceBlock,\n forceInline,\n preserveFrontmatter,\n tagfilter,\n }: RenderMarkdownProps = {}\n): JSX.Element => {\n // Map public options to internal processor options\n const internalOptions: MarkdownRendererOptions = {\n components,\n forceBlock,\n forceInline,\n wrapper,\n forceWrapper: !!wrapper,\n preserveFrontmatter,\n tagfilter,\n };\n\n return compiler(content, internalOptions);\n};\n\n/**\n * Hook that returns a function to render markdown content.\n *\n * This hook considers the configuration from the `MarkdownProvider` context if available,\n * falling back to the provided props or default behavior.\n *\n * @param props - Optional configuration that will override context values\n * @param props.components - Component overrides for HTML tags (overrides context)\n * @param props.wrapper - Wrapper component (overrides context)\n * @returns A function that takes markdown content and returns JSX\n *\n * @example\n * ```tsx\n * import { useMarkdownRenderer } from '@intlayer/react-intlayer/markdown';\n *\n * function MyComponent() {\n * const renderMarkdown = useMarkdownRenderer({\n * components: {\n * h1: ({ children }) => <h1 className=\"custom\">{children}</h1>,\n * },\n * });\n *\n * return (\n * <div>\n * {renderMarkdown('# Hello\\n\\nThis is **markdown**')}\n * </div>\n * );\n * }\n * ```\n *\n * @example\n * ```tsx\n * // With MarkdownProvider context\n * function App() {\n * return (\n * <MarkdownProvider\n * components={{ h1: CustomHeading }}\n * forceBlock={true}\n * >\n * <MyComponent />\n * </MarkdownProvider>\n * );\n * }\n * ```\n */\nexport const useMarkdownRenderer = ({\n components,\n wrapper,\n forceBlock,\n forceInline,\n preserveFrontmatter,\n tagfilter,\n}: RenderMarkdownProps = {}) => {\n const context = useMarkdownContext();\n\n return (content: string) => {\n if (context) {\n return context.renderMarkdown(\n content,\n {\n forceBlock,\n forceInline,\n preserveFrontmatter,\n tagfilter,\n },\n components,\n wrapper\n );\n }\n\n return renderMarkdown(content, {\n components,\n wrapper,\n forceBlock,\n forceInline,\n preserveFrontmatter,\n tagfilter,\n });\n };\n};\n\n/**\n * Props for the MarkdownRenderer component.\n *\n * @example\n * ```tsx\n * const props: MarkdownRendererProps = {\n * children: '# Hello World\\n\\nThis is **bold** text.',\n * components: {\n * h1: ({ children }) => <h1 className=\"title\">{children}</h1>,\n * },\n * wrapper: ({ children }) => <article>{children}</article>,\n * forceBlock: true,\n * };\n * ```\n */\nexport type MarkdownRendererProps = RenderMarkdownProps & {\n /**\n * The markdown content to render as a string.\n *\n * @example\n * ```tsx\n * <MarkdownRenderer>\n * {`# Title\\n\\nParagraph with **bold** text.`}\n * </MarkdownRenderer>\n * ```\n */\n children: string;\n /**\n * Custom render function for markdown.\n * If provided, it will overwrite context and default rendering.\n *\n * @param markdown - The markdown string to render\n * @param options - Optional rendering options\n * @returns React node representing the rendered markdown\n *\n * @example\n * ```tsx\n * <MarkdownRenderer\n * renderMarkdown={(md, opts) => {\n * // Custom rendering logic\n * return <div dangerouslySetInnerHTML={{ __html: customParser(md) }} />;\n * }}\n * >\n * {markdownContent}\n * </MarkdownRenderer>\n * ```\n */\n renderMarkdown?: (\n markdown: string,\n options?: {\n components?: HTMLComponents<'permissive', {}>;\n wrapper?: FC;\n forceBlock?: boolean;\n forceInline?: boolean;\n preserveFrontmatter?: boolean;\n tagfilter?: boolean;\n }\n ) => ReactNode;\n};\n\n/**\n * React component that renders markdown content to JSX.\n *\n * This component uses the `renderMarkdown` function from the `MarkdownProvider` context\n * if available. Otherwise, it falls back to the default compiler with provided components\n * and options. You can also provide a custom `renderMarkdown` function prop to override\n * all rendering behavior.\n *\n * @example\n * ```tsx\n * import { MarkdownRenderer } from '@intlayer/react-intlayer/markdown';\n *\n * function MyComponent() {\n * return (\n * <MarkdownRenderer>\n * {`# Hello World\n *\n * This is a paragraph with **bold** and *italic* text.\n *\n * - List item 1\n * - List item 2`}\n * </MarkdownRenderer>\n * );\n * }\n * ```\n *\n * @example\n * ```tsx\n * // With custom components\n * <MarkdownRenderer\n * components={{\n * h1: ({ children }) => <h1 className=\"text-4xl font-bold\">{children}</h1>,\n * a: ({ href, children }) => (\n * <a href={href} className=\"text-blue-500 hover:underline\">\n * {children}\n * </a>\n * ),\n * }}\n * forceBlock={true}\n * >\n * {markdownContent}\n * </MarkdownRenderer>\n * ```\n *\n * @example\n * ```tsx\n * // With MarkdownProvider context\n * function App() {\n * return (\n * <MarkdownProvider\n * components={{ h1: CustomHeading }}\n * forceBlock={true}\n * >\n * <MarkdownRenderer>\n * {markdownContent}\n * </MarkdownRenderer>\n * </MarkdownProvider>\n * );\n * }\n * ```\n */\nexport const MarkdownRenderer: FC<MarkdownRendererProps> = ({\n children = '',\n components,\n wrapper,\n forceBlock,\n forceInline,\n preserveFrontmatter,\n tagfilter,\n renderMarkdown,\n}) => {\n const context = useMarkdownContext();\n\n if (renderMarkdown) {\n return (\n <>\n {renderMarkdown(children, {\n components,\n wrapper,\n forceBlock,\n forceInline,\n preserveFrontmatter,\n tagfilter,\n })}\n </>\n );\n }\n\n if (context) {\n return (\n <>\n {context.renderMarkdown(\n children,\n {\n forceBlock,\n forceInline,\n preserveFrontmatter,\n tagfilter,\n },\n components,\n wrapper\n )}\n </>\n );\n }\n\n // Map public options to internal processor options\n const internalOptions: MarkdownRendererOptions = {\n components,\n forceBlock,\n forceInline,\n wrapper,\n forceWrapper: !!wrapper,\n preserveFrontmatter,\n tagfilter,\n };\n\n return <>{compiler(children, internalOptions)}</>;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+EA,MAAa,kBACX,SACA,EACE,YACA,SACA,YACA,aACA,qBACA,cACuB,EAAE,KACX;AAYhB,QAAO,SAAS,SAViC;EAC/C;EACA;EACA;EACA;EACA,cAAc,CAAC,CAAC;EAChB;EACA;EACD,CAEwC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgD3C,MAAa,uBAAuB,EAClC,YACA,SACA,YACA,aACA,qBACA,cACuB,EAAE,KAAK;CAC9B,MAAM,UAAU,oBAAoB;AAEpC,SAAQ,YAAoB;AAC1B,MAAI,QACF,QAAO,QAAQ,eACb,SACA;GACE;GACA;GACA;GACA;GACD,EACD,YACA,QACD;AAGH,SAAO,eAAe,SAAS;GAC7B;GACA;GACA;GACA;GACA;GACA;GACD,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6HN,MAAa,oBAA+C,EAC1D,WAAW,IACX,YACA,SACA,YACA,aACA,qBACA,WACA,qBACI;CACJ,MAAM,UAAU,oBAAoB;AAEpC,KAAI,eACF,QACE,0CACG,eAAe,UAAU;EACxB;EACA;EACA;EACA;EACA;EACA;EACD,CAAC,GACD;AAIP,KAAI,QACF,QACE,0CACG,QAAQ,eACP,UACA;EACE;EACA;EACA;EACA;EACD,EACD,YACA,QACD,GACA;AAeP,QAAO,0CAAG,SAAS,UAV8B;EAC/C;EACA;EACA;EACA;EACA,cAAc,CAAC,CAAC;EAChB;EACA;EACD,CAE4C,GAAI"}
1
+ {"version":3,"file":"MarkdownRenderer.mjs","names":[],"sources":["../../../src/markdown/MarkdownRenderer.tsx"],"sourcesContent":["import type { FC, HTMLAttributes, JSX, ReactNode } from 'react';\nimport type { HTMLComponents } from '../html/HTMLComponentTypes';\nimport {\n type MarkdownProviderOptions,\n useMarkdownContext,\n} from './MarkdownProvider';\nimport { compiler, type MarkdownRendererOptions } from './processor';\n\n/**\n * Props for rendering markdown content.\n *\n * @example\n * ```tsx\n * const props: RenderMarkdownProps = {\n * components: {\n * h1: ({ children }) => <h1 className=\"text-3xl\">{children}</h1>,\n * p: ({ children }) => <p className=\"text-gray-700\">{children}</p>,\n * },\n * wrapper: ({ children }) => <article>{children}</article>,\n * options: {\n * forceBlock: true,\n * preserveFrontmatter: false,\n * tagfilter: true,\n * },\n * };\n * ```\n */\nexport type RenderMarkdownProps = MarkdownProviderOptions & {\n /**\n * Component overrides for HTML tags.\n * Allows you to customize how specific HTML elements are rendered.\n * Only used if not wrapped in a MarkdownProvider.\n *\n * @example\n * ```tsx\n * components={{\n * h1: ({ children }) => <h1 className=\"title\">{children}</h1>,\n * a: ({ href, children }) => <Link to={href}>{children}</Link>,\n * }}\n * ```\n */\n components?: HTMLComponents<'permissive', {}>;\n /**\n * Wrapper element or component to be used when there are multiple children.\n * Only used if not wrapped in a MarkdownProvider.\n *\n * @example\n * ```tsx\n * wrapper={({ children }) => <div className=\"markdown-content\">{children}</div>}\n * ```\n */\n wrapper?: FC<HTMLAttributes<HTMLElement>>;\n};\n\n/**\n * Renders markdown content to JSX with the provided components and options.\n *\n * This function does not use context from MarkdownProvider. Use `useMarkdownRenderer`\n * hook if you want to leverage provider context.\n *\n * @param content - The markdown string to render\n * @param props - Configuration options for rendering\n * @param props.components - Component overrides for HTML tags\n * @param props.wrapper - Wrapper component for multiple children\n * @returns JSX element representing the rendered markdown\n *\n * @example\n * ```tsx\n * import { renderMarkdown } from '@intlayer/react-intlayer/markdown';\n *\n * const markdown = '# Hello World\\n\\nThis is **bold** text.';\n * const jsx = renderMarkdown(markdown, {\n * components: {\n * h1: ({ children }) => <h1 className=\"title\">{children}</h1>,\n * },\n * forceBlock: true,\n * });\n * ```\n */\nexport const renderMarkdown = (\n content: string,\n {\n components,\n wrapper,\n forceBlock,\n forceInline,\n preserveFrontmatter,\n tagfilter,\n }: RenderMarkdownProps = {}\n): JSX.Element => {\n // Map public options to internal processor options\n const internalOptions: MarkdownRendererOptions = {\n components,\n forceBlock,\n forceInline,\n wrapper,\n forceWrapper: !!wrapper,\n preserveFrontmatter,\n tagfilter,\n };\n\n return compiler(content, internalOptions);\n};\n\n/**\n * Hook that returns a function to render markdown content.\n *\n * This hook considers the configuration from the `MarkdownProvider` context if available,\n * falling back to the provided props or default behavior.\n *\n * @param props - Optional configuration that will override context values\n * @param props.components - Component overrides for HTML tags (overrides context)\n * @param props.wrapper - Wrapper component (overrides context)\n * @returns A function that takes markdown content and returns JSX\n *\n * @example\n * ```tsx\n * import { useMarkdownRenderer } from '@intlayer/react-intlayer/markdown';\n *\n * function MyComponent() {\n * const renderMarkdown = useMarkdownRenderer({\n * components: {\n * h1: ({ children }) => <h1 className=\"custom\">{children}</h1>,\n * },\n * });\n *\n * return (\n * <div>\n * {renderMarkdown('# Hello\\n\\nThis is **markdown**')}\n * </div>\n * );\n * }\n * ```\n *\n * @example\n * ```tsx\n * // With MarkdownProvider context\n * function App() {\n * return (\n * <MarkdownProvider\n * components={{ h1: CustomHeading }}\n * forceBlock={true}\n * >\n * <MyComponent />\n * </MarkdownProvider>\n * );\n * }\n * ```\n */\nexport const useMarkdownRenderer = ({\n components,\n wrapper,\n forceBlock,\n forceInline,\n preserveFrontmatter,\n tagfilter,\n}: RenderMarkdownProps = {}) => {\n const context = useMarkdownContext();\n\n return (content: string) => {\n if (context) {\n return context.renderMarkdown(\n content,\n {\n forceBlock,\n forceInline,\n preserveFrontmatter,\n tagfilter,\n },\n components,\n wrapper\n );\n }\n\n return renderMarkdown(content, {\n components,\n wrapper,\n forceBlock,\n forceInline,\n preserveFrontmatter,\n tagfilter,\n });\n };\n};\n\n/**\n * Props for the MarkdownRenderer component.\n *\n * @example\n * ```tsx\n * const props: MarkdownRendererProps = {\n * children: '# Hello World\\n\\nThis is **bold** text.',\n * components: {\n * h1: ({ children }) => <h1 className=\"title\">{children}</h1>,\n * },\n * wrapper: ({ children }) => <article>{children}</article>,\n * forceBlock: true,\n * };\n * ```\n */\nexport type MarkdownRendererProps = RenderMarkdownProps & {\n /**\n * The markdown content to render as a string.\n *\n * @example\n * ```tsx\n * <MarkdownRenderer>\n * {`# Title\\n\\nParagraph with **bold** text.`}\n * </MarkdownRenderer>\n * ```\n */\n children: string;\n /**\n * Custom render function for markdown.\n * If provided, it will overwrite context and default rendering.\n *\n * @param markdown - The markdown string to render\n * @param options - Optional rendering options\n * @returns React node representing the rendered markdown\n *\n * @example\n * ```tsx\n * <MarkdownRenderer\n * renderMarkdown={(md, opts) => {\n * // Custom rendering logic\n * return <div dangerouslySetInnerHTML={{ __html: customParser(md) }} />;\n * }}\n * >\n * {markdownContent}\n * </MarkdownRenderer>\n * ```\n */\n renderMarkdown?: (\n markdown: string,\n options?: {\n components?: HTMLComponents<'permissive', {}>;\n wrapper?: FC;\n forceBlock?: boolean;\n forceInline?: boolean;\n preserveFrontmatter?: boolean;\n tagfilter?: boolean;\n }\n ) => ReactNode;\n};\n\n/**\n * React component that renders markdown content to JSX.\n *\n * This component uses the `renderMarkdown` function from the `MarkdownProvider` context\n * if available. Otherwise, it falls back to the default compiler with provided components\n * and options. You can also provide a custom `renderMarkdown` function prop to override\n * all rendering behavior.\n *\n * @example\n * ```tsx\n * import { MarkdownRenderer } from '@intlayer/react-intlayer/markdown';\n *\n * function MyComponent() {\n * return (\n * <MarkdownRenderer>\n * {`# Hello World\n *\n * This is a paragraph with **bold** and *italic* text.\n *\n * - List item 1\n * - List item 2`}\n * </MarkdownRenderer>\n * );\n * }\n * ```\n *\n * @example\n * ```tsx\n * // With custom components\n * <MarkdownRenderer\n * components={{\n * h1: ({ children }) => <h1 className=\"text-4xl font-bold\">{children}</h1>,\n * a: ({ href, children }) => (\n * <a href={href} className=\"text-blue-500 hover:underline\">\n * {children}\n * </a>\n * ),\n * }}\n * forceBlock={true}\n * >\n * {markdownContent}\n * </MarkdownRenderer>\n * ```\n *\n * @example\n * ```tsx\n * // With MarkdownProvider context\n * function App() {\n * return (\n * <MarkdownProvider\n * components={{ h1: CustomHeading }}\n * forceBlock={true}\n * >\n * <MarkdownRenderer>\n * {markdownContent}\n * </MarkdownRenderer>\n * </MarkdownProvider>\n * );\n * }\n * ```\n */\nexport const MarkdownRenderer: FC<MarkdownRendererProps> = ({\n children = '',\n components,\n wrapper,\n forceBlock,\n forceInline,\n preserveFrontmatter,\n tagfilter,\n renderMarkdown,\n}) => {\n const context = useMarkdownContext();\n\n if (renderMarkdown) {\n return (\n <>\n {renderMarkdown(children, {\n components,\n wrapper,\n forceBlock,\n forceInline,\n preserveFrontmatter,\n tagfilter,\n })}\n </>\n );\n }\n\n if (context) {\n return (\n <>\n {context.renderMarkdown(\n children,\n {\n forceBlock,\n forceInline,\n preserveFrontmatter,\n tagfilter,\n },\n components,\n wrapper\n )}\n </>\n );\n }\n\n // Map public options to internal processor options\n const internalOptions: MarkdownRendererOptions = {\n components,\n forceBlock,\n forceInline,\n wrapper,\n forceWrapper: !!wrapper,\n preserveFrontmatter,\n tagfilter,\n };\n\n return <>{compiler(children, internalOptions)}</>;\n};\n"],"mappings":"6JA+EA,MAAa,GACX,EACA,CACE,aACA,UACA,aACA,cACA,sBACA,aACuB,EAAE,GAapB,EAAS,EAViC,CAC/C,aACA,aACA,cACA,UACA,aAAc,CAAC,CAAC,EAChB,sBACA,YACD,CAEwC,CAgD9B,GAAuB,CAClC,aACA,UACA,aACA,cACA,sBACA,aACuB,EAAE,GAAK,CAC9B,IAAM,EAAU,GAAoB,CAEpC,MAAQ,IACF,EACK,EAAQ,eACb,EACA,CACE,aACA,cACA,sBACA,YACD,CACD,EACA,EACD,CAGI,EAAe,EAAS,CAC7B,aACA,UACA,aACA,cACA,sBACA,YACD,CAAC,EA6HO,GAA+C,CAC1D,WAAW,GACX,aACA,UACA,aACA,cACA,sBACA,YACA,oBACI,CACJ,IAAM,EAAU,GAAoB,CA8CpC,OA5CI,EAEA,EAAA,EAAA,CAAA,SACG,EAAe,EAAU,CACxB,aACA,UACA,aACA,cACA,sBACA,YACD,CAAC,CAAA,CACD,CAIH,EAEA,EAAA,EAAA,CAAA,SACG,EAAQ,eACP,EACA,CACE,aACA,cACA,sBACA,YACD,CACD,EACA,EACD,CAAA,CACA,CAeA,EAAA,EAAA,CAAA,SAAG,EAAS,EAV8B,CAC/C,aACA,aACA,cACA,UACA,aAAc,CAAC,CAAC,EAChB,sBACA,YACD,CAE4C,CAAA,CAAI"}
@@ -1,31 +1,2 @@
1
- 'use client';
2
-
3
- import { useEditedContentRenderer } from "../editor/useEditedContentRenderer.mjs";
4
- import { useMarkdownContext } from "./MarkdownProvider.mjs";
5
- import { getContentNodeByKeyPath, getMarkdownMetadata } from "@intlayer/core";
6
- import { useEditorLocale } from "@intlayer/editor-react";
7
-
8
- //#region src/markdown/MarkdownRendererPlugin.tsx
9
- const MarkdownRendererPlugin = (props) => {
10
- const { dictionaryKey, keyPath, children, locale, ...components } = props;
11
- const renderMarkdown = useMarkdownContext()?.renderMarkdown ?? ((md) => md);
12
- const editedContentContext = useEditedContentRenderer({
13
- dictionaryKey,
14
- keyPath,
15
- children
16
- });
17
- return renderMarkdown(typeof editedContentContext === "string" ? editedContentContext : children, components);
18
- };
19
- const MarkdownMetadataRenderer = ({ dictionaryKey, keyPath, children, metadataKeyPath }) => {
20
- const editedContentContext = useEditedContentRenderer({
21
- dictionaryKey,
22
- keyPath,
23
- children
24
- });
25
- const currentLocale = useEditorLocale();
26
- return getContentNodeByKeyPath(getMarkdownMetadata(editedContentContext), metadataKeyPath, currentLocale);
27
- };
28
-
29
- //#endregion
30
- export { MarkdownMetadataRenderer, MarkdownRendererPlugin };
1
+ "use client";import{useEditedContentRenderer as e}from"../editor/useEditedContentRenderer.mjs";import{useMarkdownContext as t}from"./MarkdownProvider.mjs";import{getMarkdownMetadata as n}from"@intlayer/core/markdown";import{useEditorLocale as r}from"@intlayer/editor-react";import{getContentNodeByKeyPath as i}from"@intlayer/core/dictionaryManipulator";const a=n=>{let{dictionaryKey:r,keyPath:i,children:a,locale:o,...s}=n,c=t()?.renderMarkdown??(e=>e),l=e({dictionaryKey:r,keyPath:i,children:a});return c(typeof l==`string`?l:a,s)},o=({dictionaryKey:t,keyPath:a,children:o,metadataKeyPath:s})=>{let c=e({dictionaryKey:t,keyPath:a,children:o}),l=r();return i(n(c),s,l)};export{o as MarkdownMetadataRenderer,a as MarkdownRendererPlugin};
31
2
  //# sourceMappingURL=MarkdownRendererPlugin.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"MarkdownRendererPlugin.mjs","names":[],"sources":["../../../src/markdown/MarkdownRendererPlugin.tsx"],"sourcesContent":["'use client';\n\nimport { getContentNodeByKeyPath, getMarkdownMetadata } from '@intlayer/core';\nimport { useEditorLocale } from '@intlayer/editor-react';\nimport type { ContentNode, KeyPath, LocalesValues } from '@intlayer/types';\nimport type { FC, ReactNode } from 'react';\nimport { useEditedContentRenderer } from '../editor/useEditedContentRenderer';\nimport { useMarkdownContext } from './MarkdownProvider';\n\ntype MarkdownRendererPluginProps = {\n dictionaryKey: string;\n keyPath: KeyPath[];\n locale?: LocalesValues;\n children: string;\n [key: string]: any;\n};\n\nexport const MarkdownRendererPlugin: FC<MarkdownRendererPluginProps> = (\n props\n): ReactNode => {\n const { dictionaryKey, keyPath, children, locale, ...components } = props;\n const context = useMarkdownContext();\n const renderMarkdown = context?.renderMarkdown ?? ((md) => md);\n const editedContentContext = useEditedContentRenderer({\n dictionaryKey,\n keyPath,\n children,\n });\n\n const contentToRender =\n typeof editedContentContext === 'string' ? editedContentContext : children;\n\n return renderMarkdown(contentToRender, components);\n};\n\ntype MarkdownMetadataRendererProps = MarkdownRendererPluginProps & {\n metadataKeyPath: KeyPath[];\n};\n\nexport const MarkdownMetadataRenderer: FC<MarkdownMetadataRendererProps> = ({\n dictionaryKey,\n keyPath,\n children,\n metadataKeyPath,\n}): ReactNode => {\n const editedContentContext = useEditedContentRenderer({\n dictionaryKey,\n keyPath,\n children,\n });\n const currentLocale = useEditorLocale();\n\n const metadata = getMarkdownMetadata(editedContentContext);\n\n const metadataEl = getContentNodeByKeyPath(\n metadata as ContentNode,\n metadataKeyPath,\n currentLocale\n );\n\n return metadataEl as ReactNode;\n};\n"],"mappings":";;;;;;;;AAiBA,MAAa,0BACX,UACc;CACd,MAAM,EAAE,eAAe,SAAS,UAAU,QAAQ,GAAG,eAAe;CAEpE,MAAM,iBADU,oBAAoB,EACJ,oBAAoB,OAAO;CAC3D,MAAM,uBAAuB,yBAAyB;EACpD;EACA;EACA;EACD,CAAC;AAKF,QAAO,eAFL,OAAO,yBAAyB,WAAW,uBAAuB,UAE7B,WAAW;;AAOpD,MAAa,4BAA+D,EAC1E,eACA,SACA,UACA,sBACe;CACf,MAAM,uBAAuB,yBAAyB;EACpD;EACA;EACA;EACD,CAAC;CACF,MAAM,gBAAgB,iBAAiB;AAUvC,QANmB,wBAFF,oBAAoB,qBAAqB,EAIxD,iBACA,cACD"}
1
+ {"version":3,"file":"MarkdownRendererPlugin.mjs","names":[],"sources":["../../../src/markdown/MarkdownRendererPlugin.tsx"],"sourcesContent":["'use client';\n\nimport { getContentNodeByKeyPath } from '@intlayer/core/dictionaryManipulator';\nimport { getMarkdownMetadata } from '@intlayer/core/markdown';\nimport { useEditorLocale } from '@intlayer/editor-react';\nimport type { ContentNode, KeyPath, LocalesValues } from '@intlayer/types';\nimport type { FC, ReactNode } from 'react';\nimport { useEditedContentRenderer } from '../editor/useEditedContentRenderer';\nimport { useMarkdownContext } from './MarkdownProvider';\n\ntype MarkdownRendererPluginProps = {\n dictionaryKey: string;\n keyPath: KeyPath[];\n locale?: LocalesValues;\n children: string;\n [key: string]: any;\n};\n\nexport const MarkdownRendererPlugin: FC<MarkdownRendererPluginProps> = (\n props\n): ReactNode => {\n const { dictionaryKey, keyPath, children, locale, ...components } = props;\n const context = useMarkdownContext();\n const renderMarkdown = context?.renderMarkdown ?? ((md) => md);\n const editedContentContext = useEditedContentRenderer({\n dictionaryKey,\n keyPath,\n children,\n });\n\n const contentToRender =\n typeof editedContentContext === 'string' ? editedContentContext : children;\n\n return renderMarkdown(contentToRender, components);\n};\n\ntype MarkdownMetadataRendererProps = MarkdownRendererPluginProps & {\n metadataKeyPath: KeyPath[];\n};\n\nexport const MarkdownMetadataRenderer: FC<MarkdownMetadataRendererProps> = ({\n dictionaryKey,\n keyPath,\n children,\n metadataKeyPath,\n}): ReactNode => {\n const editedContentContext = useEditedContentRenderer({\n dictionaryKey,\n keyPath,\n children,\n });\n const currentLocale = useEditorLocale();\n\n const metadata = getMarkdownMetadata(editedContentContext);\n\n const metadataEl = getContentNodeByKeyPath(\n metadata as ContentNode,\n metadataKeyPath,\n currentLocale\n );\n\n return metadataEl as ReactNode;\n};\n"],"mappings":"iWAkBA,MAAa,EACX,GACc,CACd,GAAM,CAAE,gBAAe,UAAS,WAAU,SAAQ,GAAG,GAAe,EAE9D,EADU,GAAoB,EACJ,iBAAoB,GAAO,GACrD,EAAuB,EAAyB,CACpD,gBACA,UACA,WACD,CAAC,CAKF,OAAO,EAFL,OAAO,GAAyB,SAAW,EAAuB,EAE7B,EAAW,EAOvC,GAA+D,CAC1E,gBACA,UACA,WACA,qBACe,CACf,IAAM,EAAuB,EAAyB,CACpD,gBACA,UACA,WACD,CAAC,CACI,EAAgB,GAAiB,CAUvC,OANmB,EAFF,EAAoB,EAAqB,CAIxD,EACA,EACD"}
@@ -1,7 +1 @@
1
- import { LegacyMarkdownRenderer, RuleType, compile, compileMarkdown, compiler, sanitizer as defaultSanitizer, slugify as defaultSlugify } from "./processor.mjs";
2
- import { MarkdownProvider, useMarkdownContext } from "./MarkdownProvider.mjs";
3
- import { MarkdownRenderer, renderMarkdown, useMarkdownRenderer } from "./MarkdownRenderer.mjs";
4
- import { MarkdownMetadataRenderer, MarkdownRendererPlugin } from "./MarkdownRendererPlugin.mjs";
5
- import reactRuntime, { createReactRuntime } from "./runtime.mjs";
6
-
7
- export { LegacyMarkdownRenderer, MarkdownMetadataRenderer, MarkdownProvider, MarkdownRenderer, MarkdownRendererPlugin, RuleType, compile, compileMarkdown, compiler, createReactRuntime, reactRuntime, renderMarkdown, defaultSanitizer as sanitizer, defaultSlugify as slugify, useMarkdownContext, useMarkdownRenderer };
1
+ import{LegacyMarkdownRenderer as e,RuleType as t,compile as n,compileMarkdown as r,compiler as i,sanitizer as a,slugify as o}from"./processor.mjs";import{MarkdownProvider as s,useMarkdownContext as c}from"./MarkdownProvider.mjs";import{MarkdownRenderer as l,renderMarkdown as u,useMarkdownRenderer as d}from"./MarkdownRenderer.mjs";import{MarkdownMetadataRenderer as f,MarkdownRendererPlugin as p}from"./MarkdownRendererPlugin.mjs";import m,{createReactRuntime as h}from"./runtime.mjs";export{e as LegacyMarkdownRenderer,f as MarkdownMetadataRenderer,s as MarkdownProvider,l as MarkdownRenderer,p as MarkdownRendererPlugin,t as RuleType,n as compile,r as compileMarkdown,i as compiler,h as createReactRuntime,m as reactRuntime,u as renderMarkdown,a as sanitizer,o as slugify,c as useMarkdownContext,d as useMarkdownRenderer};
@@ -1,59 +1,2 @@
1
- import { Fragment, cloneElement, createElement } from "react";
2
- import { RuleType, compile as compile$1, sanitizer as defaultSanitizer, slugify as defaultSlugify } from "@intlayer/core";
3
-
4
- //#region src/markdown/processor.tsx
5
- /**
6
- * it's a fork
7
- * [markdown-to-jsx v7.7.14](https://github.com/quantizor/markdown-to-jsx) from quantizor
8
- * [simple-markdown v0.2.2](https://github.com/Khan/simple-markdown) from Khan Academy.
9
- */
10
- /**
11
- * Default React runtime for markdown rendering.
12
- */
13
- const DEFAULT_RUNTIME = {
14
- createElement,
15
- cloneElement,
16
- Fragment,
17
- normalizeProps: (_tag, props) => props
18
- };
19
- /**
20
- * Compile markdown to React elements.
21
- * This is the primary export - use this for new code.
22
- */
23
- const compileMarkdown = (markdown = "", options = {}) => {
24
- const { createElement: customCreateElement, disableAutoLink, disableParsingRawHTML, enforceAtxHeadings, forceBlock, forceInline, forceWrapper, namedCodesToUnicode, components, renderRule, sanitizer, slugify, wrapper, preserveFrontmatter, tagfilter } = options;
25
- return compile$1(markdown, {
26
- runtime: customCreateElement ? {
27
- ...DEFAULT_RUNTIME,
28
- createElement: customCreateElement
29
- } : DEFAULT_RUNTIME,
30
- components,
31
- namedCodesToUnicode,
32
- sanitizer,
33
- slugify
34
- }, {
35
- disableAutoLink,
36
- disableParsingRawHTML,
37
- enforceAtxHeadings,
38
- forceBlock,
39
- forceInline,
40
- forceWrapper,
41
- renderRule,
42
- wrapper,
43
- preserveFrontmatter,
44
- tagfilter
45
- });
46
- };
47
- const compiler = compileMarkdown;
48
- const compile = compileMarkdown;
49
- /**
50
- * React component that renders markdown to JSX (legacy).
51
- */
52
- const LegacyMarkdownRenderer = ({ children = "", options, ...props }) => {
53
- if (process.env.NODE_ENV !== "production" && typeof children !== "string") console.error("intlayer: <Markdown> component only accepts a single string as a child, received:", children);
54
- return cloneElement(compiler(children, options), props);
55
- };
56
-
57
- //#endregion
58
- export { LegacyMarkdownRenderer, RuleType, compile, compileMarkdown, compiler, defaultSanitizer as sanitizer, defaultSlugify as slugify };
1
+ import{Fragment as e,cloneElement as t,createElement as n}from"react";import{RuleType as r,compile as i,sanitizer as a,slugify as o}from"@intlayer/core/markdown";const s={createElement:n,cloneElement:t,Fragment:e,normalizeProps:(e,t)=>t},c=(e=``,t={})=>{let{createElement:n,disableAutoLink:r,disableParsingRawHTML:a,enforceAtxHeadings:o,forceBlock:c,forceInline:l,forceWrapper:u,namedCodesToUnicode:d,components:f,renderRule:p,sanitizer:m,slugify:h,wrapper:g,preserveFrontmatter:_,tagfilter:v}=t;return i(e,{runtime:n?{...s,createElement:n}:s,components:f,namedCodesToUnicode:d,sanitizer:m,slugify:h},{disableAutoLink:r,disableParsingRawHTML:a,enforceAtxHeadings:o,forceBlock:c,forceInline:l,forceWrapper:u,renderRule:p,wrapper:g,preserveFrontmatter:_,tagfilter:v})},l=c,u=c,d=({children:e=``,options:n,...r})=>(process.env.NODE_ENV!==`production`&&typeof e!=`string`&&console.error(`intlayer: <Markdown> component only accepts a single string as a child, received:`,e),t(l(e,n),r));export{d as LegacyMarkdownRenderer,r as RuleType,u as compile,c as compileMarkdown,l as compiler,a as sanitizer,o as slugify};
59
2
  //# sourceMappingURL=processor.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"processor.mjs","names":["coreCompile"],"sources":["../../../src/markdown/processor.tsx"],"sourcesContent":["/**\n * it's a fork\n * [markdown-to-jsx v7.7.14](https://github.com/quantizor/markdown-to-jsx) from quantizor\n * [simple-markdown v0.2.2](https://github.com/Khan/simple-markdown) from Khan Academy.\n */\n\nimport {\n compile as coreCompile,\n sanitizer as defaultSanitizer,\n slugify as defaultSlugify,\n type MarkdownContext,\n type MarkdownOptions,\n type MarkdownRuntime,\n type RenderRuleHook,\n RuleType,\n} from '@intlayer/core';\nimport {\n cloneElement,\n createElement,\n type FC,\n Fragment,\n type HTMLAttributes,\n type JSX,\n type ReactNode,\n} from 'react';\nimport type { HTMLComponents } from '../html/HTMLComponentTypes';\n\n// Re-export RuleType for compatibility\nexport { RuleType };\n\n// Re-export utilities for compatibility\nexport { defaultSlugify as slugify, defaultSanitizer as sanitizer };\n\ntype HTMLTags = keyof JSX.IntrinsicElements;\n\n/**\n * Refined MarkdownRendererOptions type.\n */\nexport type MarkdownRendererOptions = Partial<{\n /**\n * Ultimate control over the output of all rendered JSX.\n */\n createElement: (\n tag: Parameters<typeof createElement>[0],\n props: JSX.IntrinsicAttributes,\n ...children: ReactNode[]\n ) => ReactNode;\n\n /**\n * The library automatically generates an anchor tag for bare URLs included in the markdown\n * document, but this behavior can be disabled if desired.\n */\n disableAutoLink: boolean;\n\n /**\n * Disable the compiler's best-effort transcription of provided raw HTML\n * into JSX-equivalent.\n */\n disableParsingRawHTML: boolean;\n\n /**\n * Forces the compiler to have space between hash sign and the header text.\n */\n enforceAtxHeadings: boolean;\n\n /**\n * Forces the compiler to always output content with a block-level wrapper.\n */\n forceBlock: boolean;\n\n /**\n * Forces the compiler to always output content with an inline wrapper.\n */\n forceInline: boolean;\n\n /**\n * Forces the compiler to wrap results, even if there is only a single child.\n */\n forceWrapper: boolean;\n\n /**\n * Supply additional HTML entity: unicode replacement mappings.\n */\n namedCodesToUnicode: {\n [key: string]: string;\n };\n\n /**\n * Selectively control the output of particular HTML tags.\n */\n components: HTMLComponents;\n\n /**\n * Allows for full control over rendering of particular rules.\n */\n renderRule: RenderRuleHook;\n\n /**\n * Override the built-in sanitizer function for URLs.\n */\n sanitizer: (value: string, tag: HTMLTags, attribute: string) => string | null;\n\n /**\n * Override normalization of non-URI-safe characters for anchor linking.\n */\n slugify: (input: string) => string;\n\n /**\n * Declare the type of the wrapper to be used when there are multiple children.\n */\n wrapper: any | null;\n\n /**\n * Whether to preserve frontmatter in the markdown content.\n */\n preserveFrontmatter: boolean;\n\n /**\n * Whether to use the GitHub Tag Filter.\n */\n tagfilter: boolean;\n}>;\n\n/**\n * Default React runtime for markdown rendering.\n */\nconst DEFAULT_RUNTIME: MarkdownRuntime = {\n createElement: createElement as any,\n cloneElement,\n Fragment,\n normalizeProps: (_tag, props) => props,\n};\n\n/**\n * Compile markdown to React elements.\n * This is the primary export - use this for new code.\n */\nexport const compileMarkdown = (\n markdown: string = '',\n options: MarkdownRendererOptions = {}\n): JSX.Element => {\n const {\n createElement: customCreateElement,\n disableAutoLink,\n disableParsingRawHTML,\n enforceAtxHeadings,\n forceBlock,\n forceInline,\n forceWrapper,\n namedCodesToUnicode,\n components,\n renderRule,\n sanitizer,\n slugify,\n wrapper,\n preserveFrontmatter,\n tagfilter,\n } = options;\n\n const runtime = customCreateElement\n ? { ...DEFAULT_RUNTIME, createElement: customCreateElement as any }\n : DEFAULT_RUNTIME;\n\n const ctx: MarkdownContext<HTMLComponents> = {\n runtime,\n components,\n namedCodesToUnicode,\n sanitizer: sanitizer as any,\n slugify,\n };\n\n const compilerOptions: MarkdownOptions = {\n disableAutoLink,\n disableParsingRawHTML,\n enforceAtxHeadings,\n forceBlock,\n forceInline,\n forceWrapper,\n renderRule,\n wrapper,\n preserveFrontmatter,\n tagfilter,\n };\n\n return coreCompile(markdown, ctx, compilerOptions) as JSX.Element;\n};\n\n// Backward compatibility aliases\nexport const compiler = compileMarkdown;\nexport const compile = compileMarkdown;\n\n/**\n * React component that renders markdown to JSX (legacy).\n */\nexport const LegacyMarkdownRenderer: FC<\n Omit<HTMLAttributes<Element>, 'children'> & {\n children: string;\n options?: MarkdownRendererOptions;\n }\n> = ({ children = '', options, ...props }) => {\n if (process.env.NODE_ENV !== 'production' && typeof children !== 'string') {\n console.error(\n 'intlayer: <Markdown> component only accepts a single string as a child, received:',\n children\n );\n }\n\n return cloneElement(\n compiler(children, options),\n props as JSX.IntrinsicAttributes\n );\n};\n"],"mappings":";;;;;;;;;;;;AA8HA,MAAM,kBAAmC;CACxB;CACf;CACA;CACA,iBAAiB,MAAM,UAAU;CAClC;;;;;AAMD,MAAa,mBACX,WAAmB,IACnB,UAAmC,EAAE,KACrB;CAChB,MAAM,EACJ,eAAe,qBACf,iBACA,uBACA,oBACA,YACA,aACA,cACA,qBACA,YACA,YACA,WACA,SACA,SACA,qBACA,cACE;AA2BJ,QAAOA,UAAY,UArB0B;EAC3C,SALc,sBACZ;GAAE,GAAG;GAAiB,eAAe;GAA4B,GACjE;EAIF;EACA;EACW;EACX;EACD,EAEwC;EACvC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CAEiD;;AAIpD,MAAa,WAAW;AACxB,MAAa,UAAU;;;;AAKvB,MAAa,0BAKR,EAAE,WAAW,IAAI,SAAS,GAAG,YAAY;AAC5C,KAAI,QAAQ,IAAI,aAAa,gBAAgB,OAAO,aAAa,SAC/D,SAAQ,MACN,qFACA,SACD;AAGH,QAAO,aACL,SAAS,UAAU,QAAQ,EAC3B,MACD"}
1
+ {"version":3,"file":"processor.mjs","names":["coreCompile"],"sources":["../../../src/markdown/processor.tsx"],"sourcesContent":["/**\n * it's a fork\n * [markdown-to-jsx v7.7.14](https://github.com/quantizor/markdown-to-jsx) from quantizor\n * [simple-markdown v0.2.2](https://github.com/Khan/simple-markdown) from Khan Academy.\n */\n\nimport {\n compile as coreCompile,\n sanitizer as defaultSanitizer,\n slugify as defaultSlugify,\n type MarkdownContext,\n type MarkdownOptions,\n type MarkdownRuntime,\n type RenderRuleHook,\n RuleType,\n} from '@intlayer/core/markdown';\nimport {\n cloneElement,\n createElement,\n type FC,\n Fragment,\n type HTMLAttributes,\n type JSX,\n type ReactNode,\n} from 'react';\nimport type { HTMLComponents } from '../html/HTMLComponentTypes';\n\n// Re-export RuleType for compatibility\nexport { RuleType };\n\n// Re-export utilities for compatibility\nexport { defaultSlugify as slugify, defaultSanitizer as sanitizer };\n\ntype HTMLTags = keyof JSX.IntrinsicElements;\n\n/**\n * Refined MarkdownRendererOptions type.\n */\nexport type MarkdownRendererOptions = Partial<{\n /**\n * Ultimate control over the output of all rendered JSX.\n */\n createElement: (\n tag: Parameters<typeof createElement>[0],\n props: JSX.IntrinsicAttributes,\n ...children: ReactNode[]\n ) => ReactNode;\n\n /**\n * The library automatically generates an anchor tag for bare URLs included in the markdown\n * document, but this behavior can be disabled if desired.\n */\n disableAutoLink: boolean;\n\n /**\n * Disable the compiler's best-effort transcription of provided raw HTML\n * into JSX-equivalent.\n */\n disableParsingRawHTML: boolean;\n\n /**\n * Forces the compiler to have space between hash sign and the header text.\n */\n enforceAtxHeadings: boolean;\n\n /**\n * Forces the compiler to always output content with a block-level wrapper.\n */\n forceBlock: boolean;\n\n /**\n * Forces the compiler to always output content with an inline wrapper.\n */\n forceInline: boolean;\n\n /**\n * Forces the compiler to wrap results, even if there is only a single child.\n */\n forceWrapper: boolean;\n\n /**\n * Supply additional HTML entity: unicode replacement mappings.\n */\n namedCodesToUnicode: {\n [key: string]: string;\n };\n\n /**\n * Selectively control the output of particular HTML tags.\n */\n components: HTMLComponents;\n\n /**\n * Allows for full control over rendering of particular rules.\n */\n renderRule: RenderRuleHook;\n\n /**\n * Override the built-in sanitizer function for URLs.\n */\n sanitizer: (value: string, tag: HTMLTags, attribute: string) => string | null;\n\n /**\n * Override normalization of non-URI-safe characters for anchor linking.\n */\n slugify: (input: string) => string;\n\n /**\n * Declare the type of the wrapper to be used when there are multiple children.\n */\n wrapper: any | null;\n\n /**\n * Whether to preserve frontmatter in the markdown content.\n */\n preserveFrontmatter: boolean;\n\n /**\n * Whether to use the GitHub Tag Filter.\n */\n tagfilter: boolean;\n}>;\n\n/**\n * Default React runtime for markdown rendering.\n */\nconst DEFAULT_RUNTIME: MarkdownRuntime = {\n createElement: createElement as any,\n cloneElement,\n Fragment,\n normalizeProps: (_tag, props) => props,\n};\n\n/**\n * Compile markdown to React elements.\n * This is the primary export - use this for new code.\n */\nexport const compileMarkdown = (\n markdown: string = '',\n options: MarkdownRendererOptions = {}\n): JSX.Element => {\n const {\n createElement: customCreateElement,\n disableAutoLink,\n disableParsingRawHTML,\n enforceAtxHeadings,\n forceBlock,\n forceInline,\n forceWrapper,\n namedCodesToUnicode,\n components,\n renderRule,\n sanitizer,\n slugify,\n wrapper,\n preserveFrontmatter,\n tagfilter,\n } = options;\n\n const runtime = customCreateElement\n ? { ...DEFAULT_RUNTIME, createElement: customCreateElement as any }\n : DEFAULT_RUNTIME;\n\n const ctx: MarkdownContext<HTMLComponents> = {\n runtime,\n components,\n namedCodesToUnicode,\n sanitizer: sanitizer as any,\n slugify,\n };\n\n const compilerOptions: MarkdownOptions = {\n disableAutoLink,\n disableParsingRawHTML,\n enforceAtxHeadings,\n forceBlock,\n forceInline,\n forceWrapper,\n renderRule,\n wrapper,\n preserveFrontmatter,\n tagfilter,\n };\n\n return coreCompile(markdown, ctx, compilerOptions) as JSX.Element;\n};\n\n// Backward compatibility aliases\nexport const compiler = compileMarkdown;\nexport const compile = compileMarkdown;\n\n/**\n * React component that renders markdown to JSX (legacy).\n */\nexport const LegacyMarkdownRenderer: FC<\n Omit<HTMLAttributes<Element>, 'children'> & {\n children: string;\n options?: MarkdownRendererOptions;\n }\n> = ({ children = '', options, ...props }) => {\n if (process.env.NODE_ENV !== 'production' && typeof children !== 'string') {\n console.error(\n 'intlayer: <Markdown> component only accepts a single string as a child, received:',\n children\n );\n }\n\n return cloneElement(\n compiler(children, options),\n props as JSX.IntrinsicAttributes\n );\n};\n"],"mappings":"kKA8HA,MAAM,EAAmC,CACxB,gBACf,eACA,WACA,gBAAiB,EAAM,IAAU,EAClC,CAMY,GACX,EAAmB,GACnB,EAAmC,EAAE,GACrB,CAChB,GAAM,CACJ,cAAe,EACf,kBACA,wBACA,qBACA,aACA,cACA,eACA,sBACA,aACA,aACA,YACA,UACA,UACA,sBACA,aACE,EA2BJ,OAAOA,EAAY,EArB0B,CAC3C,QALc,EACZ,CAAE,GAAG,EAAiB,cAAe,EAA4B,CACjE,EAIF,aACA,sBACW,YACX,UACD,CAEwC,CACvC,kBACA,wBACA,qBACA,aACA,cACA,eACA,aACA,UACA,sBACA,YACD,CAEiD,EAIvC,EAAW,EACX,EAAU,EAKV,GAKR,CAAE,WAAW,GAAI,UAAS,GAAG,MAC5B,QAAQ,IAAI,WAAa,cAAgB,OAAO,GAAa,UAC/D,QAAQ,MACN,oFACA,EACD,CAGI,EACL,EAAS,EAAU,EAAQ,CAC3B,EACD"}
@@ -1,40 +1,2 @@
1
- import { Fragment, cloneElement, createElement } from "react";
2
-
3
- //#region src/markdown/runtime.ts
4
- /**
5
- * React-specific runtime for the markdown processor.
6
- * Implements the MarkdownRuntime interface using React's primitives.
7
- */
8
- const reactRuntime = {
9
- createElement: (type, props, ...children) => {
10
- if (children.length === 0) return createElement(type, props);
11
- if (children.length === 1) return createElement(type, props, children[0]);
12
- return createElement(type, props, ...children);
13
- },
14
- cloneElement: (element, props, ...children) => {
15
- if (children.length === 0) return cloneElement(element, props);
16
- return cloneElement(element, props, ...children);
17
- },
18
- Fragment,
19
- normalizeProps: (_tag, props) => {
20
- return props;
21
- }
22
- };
23
- /**
24
- * Creates a React runtime with custom createElement for advanced use cases.
25
- * Useful for wrapping elements or adding middleware.
26
- */
27
- const createReactRuntime = (options = {}) => {
28
- const { onCreateElement } = options;
29
- if (onCreateElement) return {
30
- ...reactRuntime,
31
- createElement: (type, props, ...children) => {
32
- return onCreateElement(type, props, children);
33
- }
34
- };
35
- return reactRuntime;
36
- };
37
-
38
- //#endregion
39
- export { createReactRuntime, reactRuntime as default, reactRuntime };
1
+ import{Fragment as e,cloneElement as t,createElement as n}from"react";const r={createElement:(e,t,...r)=>r.length===0?n(e,t):r.length===1?n(e,t,r[0]):n(e,t,...r),cloneElement:(e,n,...r)=>r.length===0?t(e,n):t(e,n,...r),Fragment:e,normalizeProps:(e,t)=>t},i=(e={})=>{let{onCreateElement:t}=e;return t?{...r,createElement:(e,n,...r)=>t(e,n,r)}:r};export{i as createReactRuntime,r as default,r as reactRuntime};
40
2
  //# sourceMappingURL=runtime.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.mjs","names":[],"sources":["../../../src/markdown/runtime.ts"],"sourcesContent":["import type { HTMLTag, MarkdownRuntime } from '@intlayer/core';\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\nexport default reactRuntime;\n"],"mappings":";;;;;;;AAaA,MAAa,eAAgC;CAK3C,gBACE,MACA,OACA,GAAG,aACW;AAGd,MAAI,SAAS,WAAW,EACtB,QAAO,cAAc,MAAM,MAAM;AAEnC,MAAI,SAAS,WAAW,EACtB,QAAO,cAAc,MAAM,OAAO,SAAS,GAAG;AAEhD,SAAO,cAAc,MAAM,OAAO,GAAG,SAAS;;CAMhD,eACE,SACA,OACA,GAAG,aACW;AACd,MAAI,SAAS,WAAW,EACtB,QAAO,aAAa,SAAyB,MAAM;AAErD,SAAO,aAAa,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"}
1
+ {"version":3,"file":"runtime.mjs","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\nexport default reactRuntime;\n"],"mappings":"sEAaA,MAAa,EAAgC,CAK3C,eACE,EACA,EACA,GAAG,IAIC,EAAS,SAAW,EACf,EAAc,EAAM,EAAM,CAE/B,EAAS,SAAW,EACf,EAAc,EAAM,EAAO,EAAS,GAAG,CAEzC,EAAc,EAAM,EAAO,GAAG,EAAS,CAMhD,cACE,EACA,EACA,GAAG,IAEC,EAAS,SAAW,EACf,EAAa,EAAyB,EAAM,CAE9C,EAAa,EAAyB,EAAO,GAAG,EAAS,CAMlE,WAQA,gBACE,EACA,IAKO,EAEV,CAMY,GACX,EAMI,EAAE,GACc,CACpB,GAAM,CAAE,mBAAoB,EAe5B,OAbI,EACK,CACL,GAAG,EACH,eACE,EACA,EACA,GAAG,IAEI,EAAgB,EAAM,EAAO,EAAS,CAEhD,CAGI"}
@@ -1,173 +1,2 @@
1
- import { renderIntlayerNode } from "./IntlayerNode.mjs";
2
- import { ContentSelectorRenderer } from "./editor/ContentSelectorWrapper.mjs";
3
- import { EditedContentRenderer } from "./editor/useEditedContentRenderer.mjs";
4
- import { HTMLRendererPlugin } from "./html/HTMLRendererPlugin.mjs";
5
- import { MarkdownMetadataRenderer, MarkdownRendererPlugin } from "./markdown/MarkdownRendererPlugin.mjs";
6
- import { renderReactElement } from "./reactElement/renderReactElement.mjs";
7
- import { Fragment, createElement } from "react";
8
- import { jsx } from "react/jsx-runtime";
9
- import { getMarkdownMetadata, splitInsertionTemplate } from "@intlayer/core";
10
- import { NodeType } from "@intlayer/types";
11
-
12
- //#region src/plugins.tsx
13
- /** Translation plugin. Replaces node with a locale string if nodeType = Translation. */
14
- const intlayerNodePlugins = {
15
- id: "intlayer-node-plugin",
16
- canHandle: (node) => typeof node === "bigint" || typeof node === "string" || typeof node === "number",
17
- transform: (_node, { plugins, ...rest }) => renderIntlayerNode({
18
- ...rest,
19
- value: rest.children,
20
- children: /* @__PURE__ */ jsx(EditedContentRenderer, {
21
- ...rest,
22
- children: rest.children
23
- })
24
- })
25
- };
26
- /** Translation plugin. Replaces node with a locale string if nodeType = Translation. */
27
- const reactNodePlugins = {
28
- id: "react-node-plugin",
29
- canHandle: (node) => typeof node === "object" && typeof node?.props !== "undefined" && typeof node.key !== "undefined",
30
- transform: (node, { plugins, ...rest }) => renderIntlayerNode({
31
- ...rest,
32
- value: "[[react-element]]",
33
- children: /* @__PURE__ */ jsx(ContentSelectorRenderer, {
34
- ...rest,
35
- children: renderReactElement(node)
36
- })
37
- })
38
- };
39
- /**
40
- * Split insertion string and join with React nodes using shared core logic
41
- */
42
- const splitAndJoinInsertion = (template, values) => {
43
- const result = splitInsertionTemplate(template, values);
44
- if (result.isSimple) return result.parts;
45
- return createElement(Fragment, null, ...result.parts.map((part, index) => createElement(Fragment, { key: index }, part)));
46
- };
47
- /** Insertion plugin for React. Handles component/node insertion. */
48
- const insertionPlugin = {
49
- id: "insertion-plugin",
50
- canHandle: (node) => typeof node === "object" && node?.nodeType === NodeType.Insertion,
51
- transform: (node, props, deepTransformNode) => {
52
- const newKeyPath = [...props.keyPath, { type: NodeType.Insertion }];
53
- const children = node[NodeType.Insertion];
54
- /** Insertion string plugin. Replaces string node with a component that render the insertion. */
55
- const insertionStringPlugin = {
56
- id: "insertion-string-plugin",
57
- canHandle: (node) => typeof node === "string",
58
- transform: (node, subProps, deepTransformNode) => {
59
- const transformedResult = deepTransformNode(node, {
60
- ...subProps,
61
- children: node,
62
- plugins: [...(props.plugins ?? []).filter((plugin) => plugin.id !== "intlayer-node-plugin")]
63
- });
64
- return (values) => {
65
- const result = splitAndJoinInsertion(transformedResult, values);
66
- return deepTransformNode(result, {
67
- ...subProps,
68
- plugins: props.plugins,
69
- children: result
70
- });
71
- };
72
- }
73
- };
74
- const result = deepTransformNode(children, {
75
- ...props,
76
- children,
77
- keyPath: newKeyPath,
78
- plugins: [insertionStringPlugin, ...props.plugins ?? []]
79
- });
80
- if (typeof children === "object" && children !== null && "nodeType" in children && [NodeType.Enumeration, NodeType.Condition].includes(children.nodeType)) return (values) => (arg) => {
81
- const inner = result(arg);
82
- if (typeof inner === "function") return inner(values);
83
- return inner;
84
- };
85
- return result;
86
- }
87
- };
88
- /** Markdown string plugin. Replaces string node with a component that render the markdown. */
89
- const markdownStringPlugin = {
90
- id: "markdown-string-plugin",
91
- canHandle: (node) => typeof node === "string",
92
- transform: (node, props, deepTransformNode) => {
93
- const { plugins, ...rest } = props;
94
- const metadataNodes = deepTransformNode(getMarkdownMetadata(node), {
95
- plugins: [{
96
- id: "markdown-metadata-plugin",
97
- canHandle: (metadataNode) => typeof metadataNode === "string" || typeof metadataNode === "number" || typeof metadataNode === "boolean" || !metadataNode,
98
- transform: (metadataNode, props) => renderIntlayerNode({
99
- ...props,
100
- value: metadataNode,
101
- children: /* @__PURE__ */ jsx(ContentSelectorRenderer, {
102
- ...rest,
103
- children: /* @__PURE__ */ jsx(MarkdownMetadataRenderer, {
104
- ...rest,
105
- metadataKeyPath: props.keyPath,
106
- children: node
107
- })
108
- })
109
- })
110
- }],
111
- dictionaryKey: rest.dictionaryKey,
112
- keyPath: []
113
- });
114
- const render = (components) => renderIntlayerNode({
115
- ...props,
116
- value: node,
117
- children: /* @__PURE__ */ jsx(ContentSelectorRenderer, {
118
- ...rest,
119
- children: /* @__PURE__ */ jsx(MarkdownRendererPlugin, {
120
- ...rest,
121
- ...components ?? {},
122
- children: node
123
- })
124
- }),
125
- additionalProps: { metadata: metadataNodes }
126
- });
127
- const element = render();
128
- return new Proxy(element, { get(target, prop, receiver) {
129
- if (prop === "value") return node;
130
- if (prop === "metadata") return metadataNodes;
131
- if (prop === "use") return (components) => render(components);
132
- return Reflect.get(target, prop, receiver);
133
- } });
134
- }
135
- };
136
- const markdownPlugin = {
137
- id: "markdown-plugin",
138
- canHandle: (node) => typeof node === "object" && node?.nodeType === NodeType.Markdown,
139
- transform: (node, props, deepTransformNode) => {
140
- const newKeyPath = [...props.keyPath, { type: NodeType.Markdown }];
141
- const children = node[NodeType.Markdown];
142
- return deepTransformNode(children, {
143
- ...props,
144
- children,
145
- keyPath: newKeyPath,
146
- plugins: [markdownStringPlugin, ...props.plugins ?? []]
147
- });
148
- }
149
- };
150
- /** HTML plugin. Replaces node with a function that takes components => ReactNode. */
151
- const htmlPlugin = {
152
- id: "html-plugin",
153
- canHandle: (node) => typeof node === "object" && node?.nodeType === NodeType.HTML,
154
- transform: (node, props) => {
155
- const html = node[NodeType.HTML];
156
- const { plugins, ...rest } = props;
157
- const render = (userComponents) => createElement(HTMLRendererPlugin, {
158
- ...rest,
159
- html,
160
- userComponents
161
- });
162
- const element = render();
163
- return new Proxy(element, { get(target, prop, receiver) {
164
- if (prop === "value") return html;
165
- if (prop === "use") return (userComponents) => render(userComponents);
166
- return Reflect.get(target, prop, receiver);
167
- } });
168
- }
169
- };
170
-
171
- //#endregion
172
- export { htmlPlugin, insertionPlugin, intlayerNodePlugins, markdownPlugin, markdownStringPlugin, reactNodePlugins };
1
+ import{renderIntlayerNode as e}from"./IntlayerNode.mjs";import{ContentSelectorRenderer as t}from"./editor/ContentSelectorWrapper.mjs";import{EditedContentRenderer as n}from"./editor/useEditedContentRenderer.mjs";import{HTMLRendererPlugin as r}from"./html/HTMLRendererPlugin.mjs";import{MarkdownMetadataRenderer as i,MarkdownRendererPlugin as a}from"./markdown/MarkdownRendererPlugin.mjs";import{renderReactElement as o}from"./reactElement/renderReactElement.mjs";import{Fragment as s,createElement as c}from"react";import{jsx as l}from"react/jsx-runtime";import{splitInsertionTemplate as u}from"@intlayer/core/interpreter";import{getMarkdownMetadata as d}from"@intlayer/core/markdown";import{NodeType as f}from"@intlayer/types";const p={id:`intlayer-node-plugin`,canHandle:e=>typeof e==`bigint`||typeof e==`string`||typeof e==`number`,transform:(t,{plugins:r,...i})=>e({...i,value:i.children,children:l(n,{...i,children:i.children})})},m={id:`react-node-plugin`,canHandle:e=>typeof e==`object`&&e?.props!==void 0&&e.key!==void 0,transform:(n,{plugins:r,...i})=>e({...i,value:`[[react-element]]`,children:l(t,{...i,children:o(n)})})},h=(e,t)=>{let n=u(e,t);return n.isSimple?n.parts:c(s,null,...n.parts.map((e,t)=>c(s,{key:t},e)))},g={id:`insertion-plugin`,canHandle:e=>typeof e==`object`&&e?.nodeType===f.Insertion,transform:(e,t,n)=>{let r=[...t.keyPath,{type:f.Insertion}],i=e[f.Insertion],a={id:`insertion-string-plugin`,canHandle:e=>typeof e==`string`,transform:(e,n,r)=>{let i=r(e,{...n,children:e,plugins:[...(t.plugins??[]).filter(e=>e.id!==`intlayer-node-plugin`)]});return e=>{let a=h(i,e);return r(a,{...n,plugins:t.plugins,children:a})}}},o=n(i,{...t,children:i,keyPath:r,plugins:[a,...t.plugins??[]]});return typeof i==`object`&&i&&`nodeType`in i&&[f.Enumeration,f.Condition].includes(i.nodeType)?e=>t=>{let n=o(t);return typeof n==`function`?n(e):n}:o}},_={id:`markdown-string-plugin`,canHandle:e=>typeof e==`string`,transform:(n,r,o)=>{let{plugins:s,...c}=r,u=o(d(n),{plugins:[{id:`markdown-metadata-plugin`,canHandle:e=>typeof e==`string`||typeof e==`number`||typeof e==`boolean`||!e,transform:(r,a)=>e({...a,value:r,children:l(t,{...c,children:l(i,{...c,metadataKeyPath:a.keyPath,children:n})})})}],dictionaryKey:c.dictionaryKey,keyPath:[]}),f=i=>e({...r,value:n,children:l(t,{...c,children:l(a,{...c,...i??{},children:n})}),additionalProps:{metadata:u}}),p=f();return new Proxy(p,{get(e,t,r){return t===`value`?n:t===`metadata`?u:t===`use`?e=>f(e):Reflect.get(e,t,r)}})}},v={id:`markdown-plugin`,canHandle:e=>typeof e==`object`&&e?.nodeType===f.Markdown,transform:(e,t,n)=>{let r=[...t.keyPath,{type:f.Markdown}],i=e[f.Markdown];return n(i,{...t,children:i,keyPath:r,plugins:[_,...t.plugins??[]]})}},y={id:`html-plugin`,canHandle:e=>typeof e==`object`&&e?.nodeType===f.HTML,transform:(e,t)=>{let n=e[f.HTML],{plugins:i,...a}=t,o=e=>c(r,{...a,html:n,userComponents:e}),s=o();return new Proxy(s,{get(e,t,r){return t===`value`?n:t===`use`?e=>o(e):Reflect.get(e,t,r)}})}};export{y as htmlPlugin,g as insertionPlugin,p as intlayerNodePlugins,v as markdownPlugin,_ as markdownStringPlugin,m as reactNodePlugins};
173
2
  //# sourceMappingURL=plugins.mjs.map