UNPKG

react-intlayer

Version:

Easily internationalize i18n your React applications with type-safe multilingual content management.

88 lines (85 loc) 3.03 kB
'use client'; Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); const require_runtime = require('../_virtual/_rolldown/runtime.cjs'); const require_markdown_processor = require('./processor.cjs'); let react = require("react"); let react_jsx_runtime = require("react/jsx-runtime"); //#region src/markdown/MarkdownProvider.tsx const MarkdownContext = (0, react.createContext)(void 0); /** * Returns the raw `MarkdownProvider` context value — the active * `renderMarkdown` function plus any provider-level component overrides. * Returns `undefined` when called outside a `<MarkdownProvider>`. * Prefer `useMarkdownRenderer` for most use cases; use this hook only when * you need direct access to the context object itself. */ const useMarkdownContext = () => (0, react.useContext)(MarkdownContext); const mergeOptions = (baseOptions, options = {}, components = {}, wrapper) => { return { ...baseOptions, ...options, forceBlock: options.forceBlock ?? baseOptions.forceBlock, forceInline: options.forceInline ?? baseOptions.forceInline, preserveFrontmatter: options.preserveFrontmatter ?? baseOptions.preserveFrontmatter, tagfilter: options.tagfilter ?? baseOptions.tagfilter, wrapper: wrapper || baseOptions.wrapper, forceWrapper: !!(wrapper || baseOptions.wrapper), components: { ...baseOptions.components, ...components } }; }; /** * Provider for the MarkdownRenderer component. * * It will provide the `renderMarkdown` function to the context, which can be used to render markdown. * * ```tsx * const content = useIntlayer('app'); * * return ( * <div> * {content.markdown} // Will be rendered with the components and options provided to the MarkdownProvider * </div> * ); * ``` * * @example * ```tsx * <MarkdownProvider components={{ h1: CustomHeading }}> * <MarkdownRenderer> * {markdownContent} * </MarkdownRenderer> * </MarkdownProvider> * ``` */ const MarkdownProvider = ({ children, components, wrapper, forceBlock, forceInline, preserveFrontmatter, tagfilter, renderMarkdown: customRenderFn }) => { const baseOptions = { components, forceBlock, forceInline, wrapper, forceWrapper: !!wrapper, preserveFrontmatter, tagfilter }; const defaultRenderMarkdown = (markdown, options, components, wrapper) => { return require_markdown_processor.compileMarkdown(markdown, mergeOptions(baseOptions, options, components, wrapper)); }; const customRenderMarkdownWrapper = (markdown, options, components, wrapper) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(MarkdownContext.Provider, { value: void 0, children: customRenderFn?.(markdown, options, components, wrapper) }); return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(MarkdownContext.Provider, { value: { components, renderMarkdown: customRenderFn ? customRenderMarkdownWrapper : defaultRenderMarkdown }, children }); }; //#endregion exports.MarkdownProvider = MarkdownProvider; exports.useMarkdownContext = useMarkdownContext; //# sourceMappingURL=MarkdownProvider.cjs.map