preact-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.
- package/dist/cjs/IntlayerNode.cjs +1 -16
- package/dist/cjs/IntlayerNode.cjs.map +1 -1
- package/dist/cjs/UI/ContentSelector.cjs +1 -98
- package/dist/cjs/UI/ContentSelector.cjs.map +1 -1
- package/dist/cjs/_virtual/_rolldown/runtime.cjs +1 -29
- package/dist/cjs/client/IntlayerProvider.cjs +1 -91
- package/dist/cjs/client/IntlayerProvider.cjs.map +1 -1
- package/dist/cjs/client/format/index.cjs +1 -18
- package/dist/cjs/client/format/useCompact.cjs +1 -29
- package/dist/cjs/client/format/useCompact.cjs.map +1 -1
- package/dist/cjs/client/format/useCurrency.cjs +1 -43
- package/dist/cjs/client/format/useCurrency.cjs.map +1 -1
- package/dist/cjs/client/format/useDate.cjs +1 -45
- package/dist/cjs/client/format/useDate.cjs.map +1 -1
- package/dist/cjs/client/format/useIntl.cjs +1 -33
- package/dist/cjs/client/format/useIntl.cjs.map +1 -1
- package/dist/cjs/client/format/useList.cjs +1 -40
- package/dist/cjs/client/format/useList.cjs.map +1 -1
- package/dist/cjs/client/format/useNumber.cjs +1 -41
- package/dist/cjs/client/format/useNumber.cjs.map +1 -1
- package/dist/cjs/client/format/usePercentage.cjs +1 -37
- package/dist/cjs/client/format/usePercentage.cjs.map +1 -1
- package/dist/cjs/client/format/useRelativeTime.cjs +1 -37
- package/dist/cjs/client/format/useRelativeTime.cjs.map +1 -1
- package/dist/cjs/client/format/useUnit.cjs +1 -36
- package/dist/cjs/client/format/useUnit.cjs.map +1 -1
- package/dist/cjs/client/index.cjs +1 -32
- package/dist/cjs/client/t.cjs +1 -21
- package/dist/cjs/client/t.cjs.map +1 -1
- package/dist/cjs/client/useContent.cjs +1 -19
- package/dist/cjs/client/useContent.cjs.map +1 -1
- package/dist/cjs/client/useDictionary.cjs +1 -27
- package/dist/cjs/client/useDictionary.cjs.map +1 -1
- package/dist/cjs/client/useDictionaryAsync.cjs +1 -24
- package/dist/cjs/client/useDictionaryAsync.cjs.map +1 -1
- package/dist/cjs/client/useDictionaryDynamic.cjs +1 -23
- package/dist/cjs/client/useDictionaryDynamic.cjs.map +1 -1
- package/dist/cjs/client/useIntlayer.cjs +1 -42
- package/dist/cjs/client/useIntlayer.cjs.map +1 -1
- package/dist/cjs/client/useLoadDynamic.cjs +1 -27
- package/dist/cjs/client/useLoadDynamic.cjs.map +1 -1
- package/dist/cjs/client/useLocale.cjs +1 -56
- package/dist/cjs/client/useLocale.cjs.map +1 -1
- package/dist/cjs/client/useLocaleBase.cjs +1 -26
- package/dist/cjs/client/useLocaleBase.cjs.map +1 -1
- package/dist/cjs/client/useLocaleStorage.cjs +1 -58
- package/dist/cjs/client/useLocaleStorage.cjs.map +1 -1
- package/dist/cjs/client/useTraduction.cjs +1 -35
- package/dist/cjs/client/useTraduction.cjs.map +1 -1
- package/dist/cjs/editor/CommunicatorContext.cjs +1 -39
- package/dist/cjs/editor/CommunicatorContext.cjs.map +1 -1
- package/dist/cjs/editor/ConfigurationContext.cjs +1 -26
- package/dist/cjs/editor/ConfigurationContext.cjs.map +1 -1
- package/dist/cjs/editor/ContentSelectorWrapper.cjs +1 -58
- package/dist/cjs/editor/ContentSelectorWrapper.cjs.map +1 -1
- package/dist/cjs/editor/DictionariesRecordContext.cjs +1 -48
- package/dist/cjs/editor/DictionariesRecordContext.cjs.map +1 -1
- package/dist/cjs/editor/EditedContentContext.cjs +1 -163
- package/dist/cjs/editor/EditedContentContext.cjs.map +1 -1
- package/dist/cjs/editor/EditorEnabledContext.cjs +1 -34
- package/dist/cjs/editor/EditorEnabledContext.cjs.map +1 -1
- package/dist/cjs/editor/EditorProvider.cjs +1 -64
- package/dist/cjs/editor/EditorProvider.cjs.map +1 -1
- package/dist/cjs/editor/FocusDictionaryContext.cjs +1 -54
- package/dist/cjs/editor/FocusDictionaryContext.cjs.map +1 -1
- package/dist/cjs/editor/IntlayerEditorProvider.cjs +1 -63
- package/dist/cjs/editor/IntlayerEditorProvider.cjs.map +1 -1
- package/dist/cjs/editor/index.cjs +1 -4
- package/dist/cjs/editor/useCrossFrameMessageListener.cjs +1 -78
- package/dist/cjs/editor/useCrossFrameMessageListener.cjs.map +1 -1
- package/dist/cjs/editor/useCrossFrameState.cjs +1 -108
- package/dist/cjs/editor/useCrossFrameState.cjs.map +1 -1
- package/dist/cjs/editor/useCrossURLPathState.cjs +1 -67
- package/dist/cjs/editor/useCrossURLPathState.cjs.map +1 -1
- package/dist/cjs/editor/useEditedContentRenderer.cjs +1 -29
- package/dist/cjs/editor/useEditedContentRenderer.cjs.map +1 -1
- package/dist/cjs/editor/useIframeClickInterceptor.cjs +1 -24
- package/dist/cjs/editor/useIframeClickInterceptor.cjs.map +1 -1
- package/dist/cjs/getDictionary.cjs +1 -19
- package/dist/cjs/getDictionary.cjs.map +1 -1
- package/dist/cjs/getIntlayer.cjs +1 -19
- package/dist/cjs/getIntlayer.cjs.map +1 -1
- package/dist/cjs/html/HTMLProvider.cjs +1 -19
- package/dist/cjs/html/HTMLProvider.cjs.map +1 -1
- package/dist/cjs/html/HTMLRenderer.cjs +1 -61
- package/dist/cjs/html/HTMLRenderer.cjs.map +1 -1
- package/dist/cjs/html/index.cjs +1 -10
- package/dist/cjs/index.cjs +1 -57
- package/dist/cjs/markdown/MarkdownProvider.cjs +1 -49
- package/dist/cjs/markdown/MarkdownProvider.cjs.map +1 -1
- package/dist/cjs/markdown/MarkdownRenderer.cjs +1 -77
- package/dist/cjs/markdown/MarkdownRenderer.cjs.map +1 -1
- package/dist/cjs/markdown/MarkdownRendererPlugin.cjs +1 -31
- package/dist/cjs/markdown/MarkdownRendererPlugin.cjs.map +1 -1
- package/dist/cjs/markdown/compiler.cjs +1 -24
- package/dist/cjs/markdown/compiler.cjs.map +1 -1
- package/dist/cjs/markdown/index.cjs +1 -23
- package/dist/cjs/markdown/runtime.cjs +1 -18
- package/dist/cjs/markdown/runtime.cjs.map +1 -1
- package/dist/cjs/plugins.cjs +1 -197
- package/dist/cjs/plugins.cjs.map +1 -1
- package/dist/cjs/preactElement/renderPreactElement.cjs +1 -42
- package/dist/cjs/preactElement/renderPreactElement.cjs.map +1 -1
- package/dist/esm/IntlayerNode.mjs +1 -14
- package/dist/esm/IntlayerNode.mjs.map +1 -1
- package/dist/esm/UI/ContentSelector.mjs +1 -96
- package/dist/esm/UI/ContentSelector.mjs.map +1 -1
- package/dist/esm/client/IntlayerProvider.mjs +1 -85
- package/dist/esm/client/IntlayerProvider.mjs.map +1 -1
- package/dist/esm/client/format/index.mjs +1 -10
- package/dist/esm/client/format/useCompact.mjs +1 -27
- package/dist/esm/client/format/useCompact.mjs.map +1 -1
- package/dist/esm/client/format/useCurrency.mjs +1 -41
- package/dist/esm/client/format/useCurrency.mjs.map +1 -1
- package/dist/esm/client/format/useDate.mjs +1 -43
- package/dist/esm/client/format/useDate.mjs.map +1 -1
- package/dist/esm/client/format/useIntl.mjs +1 -31
- package/dist/esm/client/format/useIntl.mjs.map +1 -1
- package/dist/esm/client/format/useList.mjs +1 -38
- package/dist/esm/client/format/useList.mjs.map +1 -1
- package/dist/esm/client/format/useNumber.mjs +1 -39
- package/dist/esm/client/format/useNumber.mjs.map +1 -1
- package/dist/esm/client/format/usePercentage.mjs +1 -35
- package/dist/esm/client/format/usePercentage.mjs.map +1 -1
- package/dist/esm/client/format/useRelativeTime.mjs +1 -35
- package/dist/esm/client/format/useRelativeTime.mjs.map +1 -1
- package/dist/esm/client/format/useUnit.mjs +1 -34
- package/dist/esm/client/format/useUnit.mjs.map +1 -1
- package/dist/esm/client/index.mjs +1 -13
- package/dist/esm/client/t.mjs +1 -19
- package/dist/esm/client/t.mjs.map +1 -1
- package/dist/esm/client/useContent.mjs +1 -18
- package/dist/esm/client/useContent.mjs.map +1 -1
- package/dist/esm/client/useDictionary.mjs +1 -25
- package/dist/esm/client/useDictionary.mjs.map +1 -1
- package/dist/esm/client/useDictionaryAsync.mjs +1 -21
- package/dist/esm/client/useDictionaryAsync.mjs.map +1 -1
- package/dist/esm/client/useDictionaryDynamic.mjs +1 -21
- package/dist/esm/client/useDictionaryDynamic.mjs.map +1 -1
- package/dist/esm/client/useIntlayer.mjs +1 -40
- package/dist/esm/client/useIntlayer.mjs.map +1 -1
- package/dist/esm/client/useLoadDynamic.mjs +1 -25
- package/dist/esm/client/useLoadDynamic.mjs.map +1 -1
- package/dist/esm/client/useLocale.mjs +1 -53
- package/dist/esm/client/useLocale.mjs.map +1 -1
- package/dist/esm/client/useLocaleBase.mjs +1 -23
- package/dist/esm/client/useLocaleBase.mjs.map +1 -1
- package/dist/esm/client/useLocaleStorage.mjs +1 -51
- package/dist/esm/client/useLocaleStorage.mjs.map +1 -1
- package/dist/esm/client/useTraduction.mjs +1 -33
- package/dist/esm/client/useTraduction.mjs.map +1 -1
- package/dist/esm/editor/CommunicatorContext.mjs +1 -35
- package/dist/esm/editor/CommunicatorContext.mjs.map +1 -1
- package/dist/esm/editor/ConfigurationContext.mjs +1 -22
- package/dist/esm/editor/ConfigurationContext.mjs.map +1 -1
- package/dist/esm/editor/ContentSelectorWrapper.mjs +1 -56
- package/dist/esm/editor/ContentSelectorWrapper.mjs.map +1 -1
- package/dist/esm/editor/DictionariesRecordContext.mjs +1 -44
- package/dist/esm/editor/DictionariesRecordContext.mjs.map +1 -1
- package/dist/esm/editor/EditedContentContext.mjs +1 -157
- package/dist/esm/editor/EditedContentContext.mjs.map +1 -1
- package/dist/esm/editor/EditorEnabledContext.mjs +1 -28
- package/dist/esm/editor/EditorEnabledContext.mjs.map +1 -1
- package/dist/esm/editor/EditorProvider.mjs +1 -62
- package/dist/esm/editor/EditorProvider.mjs.map +1 -1
- package/dist/esm/editor/FocusDictionaryContext.mjs +1 -50
- package/dist/esm/editor/FocusDictionaryContext.mjs.map +1 -1
- package/dist/esm/editor/IntlayerEditorProvider.mjs +1 -60
- package/dist/esm/editor/IntlayerEditorProvider.mjs.map +1 -1
- package/dist/esm/editor/index.mjs +1 -3
- package/dist/esm/editor/useCrossFrameMessageListener.mjs +1 -76
- package/dist/esm/editor/useCrossFrameMessageListener.mjs.map +1 -1
- package/dist/esm/editor/useCrossFrameState.mjs +1 -106
- package/dist/esm/editor/useCrossFrameState.mjs.map +1 -1
- package/dist/esm/editor/useCrossURLPathState.mjs +1 -64
- package/dist/esm/editor/useCrossURLPathState.mjs.map +1 -1
- package/dist/esm/editor/useEditedContentRenderer.mjs +1 -26
- package/dist/esm/editor/useEditedContentRenderer.mjs.map +1 -1
- package/dist/esm/editor/useIframeClickInterceptor.mjs +1 -21
- package/dist/esm/editor/useIframeClickInterceptor.mjs.map +1 -1
- package/dist/esm/getDictionary.mjs +1 -17
- package/dist/esm/getDictionary.mjs.map +1 -1
- package/dist/esm/getIntlayer.mjs +1 -17
- package/dist/esm/getIntlayer.mjs.map +1 -1
- package/dist/esm/html/HTMLProvider.mjs +1 -16
- package/dist/esm/html/HTMLProvider.mjs.map +1 -1
- package/dist/esm/html/HTMLRenderer.mjs +1 -56
- package/dist/esm/html/HTMLRenderer.mjs.map +1 -1
- package/dist/esm/html/index.mjs +1 -4
- package/dist/esm/index.mjs +1 -22
- package/dist/esm/markdown/MarkdownProvider.mjs +1 -46
- package/dist/esm/markdown/MarkdownProvider.mjs.map +1 -1
- package/dist/esm/markdown/MarkdownRenderer.mjs +1 -73
- package/dist/esm/markdown/MarkdownRenderer.mjs.map +1 -1
- package/dist/esm/markdown/MarkdownRendererPlugin.mjs +1 -28
- package/dist/esm/markdown/MarkdownRendererPlugin.mjs.map +1 -1
- package/dist/esm/markdown/compiler.mjs +1 -17
- package/dist/esm/markdown/compiler.mjs.map +1 -1
- package/dist/esm/markdown/index.mjs +1 -7
- package/dist/esm/markdown/runtime.mjs +1 -15
- package/dist/esm/markdown/runtime.mjs.map +1 -1
- package/dist/esm/plugins.mjs +1 -190
- package/dist/esm/plugins.mjs.map +1 -1
- package/dist/esm/preactElement/renderPreactElement.mjs +1 -40
- package/dist/esm/preactElement/renderPreactElement.mjs.map +1 -1
- package/dist/types/IntlayerNode.d.ts +1 -1
- package/dist/types/client/format/useDate.d.ts +1 -1
- package/dist/types/client/useDictionary.d.ts +2 -2
- package/dist/types/client/useDictionary.d.ts.map +1 -1
- package/dist/types/client/useDictionaryDynamic.d.ts +2 -2
- package/dist/types/client/useDictionaryDynamic.d.ts.map +1 -1
- package/dist/types/editor/ContentSelectorWrapper.d.ts +1 -1
- package/dist/types/editor/ContentSelectorWrapper.d.ts.map +1 -1
- package/dist/types/editor/EditedContentContext.d.ts.map +1 -1
- package/dist/types/getDictionary.d.ts +1 -1
- package/dist/types/getIntlayer.d.ts +1 -1
- package/dist/types/getIntlayer.d.ts.map +1 -1
- package/dist/types/html/HTMLRenderer.d.ts.map +1 -1
- package/dist/types/html/types.d.ts +1 -1
- package/dist/types/html/types.d.ts.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/markdown/MarkdownRendererPlugin.d.ts.map +1 -1
- package/dist/types/markdown/compiler.d.ts +1 -1
- package/dist/types/markdown/runtime.d.ts +1 -1
- package/dist/types/plugins.d.ts +2 -2
- package/dist/types/plugins.d.ts.map +1 -1
- package/package.json +8 -8
|
@@ -1,78 +1,2 @@
|
|
|
1
|
-
Object.defineProperty(exports,
|
|
2
|
-
const require_runtime = require('../_virtual/_rolldown/runtime.cjs');
|
|
3
|
-
const require_markdown_compiler = require('./compiler.cjs');
|
|
4
|
-
const require_markdown_MarkdownProvider = require('./MarkdownProvider.cjs');
|
|
5
|
-
let preact_jsx_runtime = require("preact/jsx-runtime");
|
|
6
|
-
|
|
7
|
-
//#region src/markdown/MarkdownRenderer.tsx
|
|
8
|
-
const renderMarkdown = (content, { components, wrapper, forceBlock, forceInline, preserveFrontmatter, tagfilter } = {}) => {
|
|
9
|
-
return require_markdown_compiler.compileMarkdown(content, {
|
|
10
|
-
components,
|
|
11
|
-
forceBlock,
|
|
12
|
-
forceInline,
|
|
13
|
-
wrapper,
|
|
14
|
-
forceWrapper: !!wrapper,
|
|
15
|
-
preserveFrontmatter,
|
|
16
|
-
tagfilter
|
|
17
|
-
});
|
|
18
|
-
};
|
|
19
|
-
const useMarkdownRenderer = ({ components, wrapper, forceBlock, forceInline, preserveFrontmatter, tagfilter } = {}) => {
|
|
20
|
-
const context = require_markdown_MarkdownProvider.useMarkdownContext();
|
|
21
|
-
return (content) => {
|
|
22
|
-
if (context) return context.renderMarkdown(content, {
|
|
23
|
-
components,
|
|
24
|
-
wrapper,
|
|
25
|
-
forceBlock,
|
|
26
|
-
forceInline,
|
|
27
|
-
preserveFrontmatter,
|
|
28
|
-
tagfilter
|
|
29
|
-
});
|
|
30
|
-
return renderMarkdown(content, {
|
|
31
|
-
components,
|
|
32
|
-
wrapper,
|
|
33
|
-
forceBlock,
|
|
34
|
-
forceInline,
|
|
35
|
-
preserveFrontmatter,
|
|
36
|
-
tagfilter
|
|
37
|
-
});
|
|
38
|
-
};
|
|
39
|
-
};
|
|
40
|
-
/**
|
|
41
|
-
* Preact component that renders markdown to JSX.
|
|
42
|
-
*
|
|
43
|
-
* It uses the renderMarkdown function from the MarkdownProvider context if available.
|
|
44
|
-
* Otherwise, it falls back to the default compiler with provided components and options.
|
|
45
|
-
*/
|
|
46
|
-
const MarkdownRenderer = ({ children = "", components, wrapper, forceBlock, forceInline, preserveFrontmatter, tagfilter, renderMarkdown: customRenderMarkdown }) => {
|
|
47
|
-
const context = require_markdown_MarkdownProvider.useMarkdownContext();
|
|
48
|
-
if (customRenderMarkdown) return /* @__PURE__ */ (0, preact_jsx_runtime.jsx)(preact_jsx_runtime.Fragment, { children: customRenderMarkdown(children, {
|
|
49
|
-
components,
|
|
50
|
-
wrapper,
|
|
51
|
-
forceBlock,
|
|
52
|
-
forceInline,
|
|
53
|
-
preserveFrontmatter,
|
|
54
|
-
tagfilter
|
|
55
|
-
}) });
|
|
56
|
-
if (context) return /* @__PURE__ */ (0, preact_jsx_runtime.jsx)(preact_jsx_runtime.Fragment, { children: context.renderMarkdown(children, {
|
|
57
|
-
components,
|
|
58
|
-
wrapper,
|
|
59
|
-
forceBlock,
|
|
60
|
-
forceInline,
|
|
61
|
-
preserveFrontmatter,
|
|
62
|
-
tagfilter
|
|
63
|
-
}) });
|
|
64
|
-
return renderMarkdown(children, {
|
|
65
|
-
components,
|
|
66
|
-
wrapper,
|
|
67
|
-
forceBlock,
|
|
68
|
-
forceInline,
|
|
69
|
-
preserveFrontmatter,
|
|
70
|
-
tagfilter
|
|
71
|
-
});
|
|
72
|
-
};
|
|
73
|
-
|
|
74
|
-
//#endregion
|
|
75
|
-
exports.MarkdownRenderer = MarkdownRenderer;
|
|
76
|
-
exports.renderMarkdown = renderMarkdown;
|
|
77
|
-
exports.useMarkdownRenderer = useMarkdownRenderer;
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`../_virtual/_rolldown/runtime.cjs`);const e=require(`./compiler.cjs`),t=require(`./MarkdownProvider.cjs`);let n=require(`preact/jsx-runtime`);const r=(t,{components:n,wrapper:r,forceBlock:i,forceInline:a,preserveFrontmatter:o,tagfilter:s}={})=>e.compileMarkdown(t,{components:n,forceBlock:i,forceInline:a,wrapper:r,forceWrapper:!!r,preserveFrontmatter:o,tagfilter:s}),i=({components:e,wrapper:n,forceBlock:i,forceInline:a,preserveFrontmatter:o,tagfilter:s}={})=>{let c=t.useMarkdownContext();return t=>c?c.renderMarkdown(t,{components:e,wrapper:n,forceBlock:i,forceInline:a,preserveFrontmatter:o,tagfilter:s}):r(t,{components:e,wrapper:n,forceBlock:i,forceInline:a,preserveFrontmatter:o,tagfilter:s})},a=({children:e=``,components:i,wrapper:a,forceBlock:o,forceInline:s,preserveFrontmatter:c,tagfilter:l,renderMarkdown:u})=>{let d=t.useMarkdownContext();return u?(0,n.jsx)(n.Fragment,{children:u(e,{components:i,wrapper:a,forceBlock:o,forceInline:s,preserveFrontmatter:c,tagfilter:l})}):d?(0,n.jsx)(n.Fragment,{children:d.renderMarkdown(e,{components:i,wrapper:a,forceBlock:o,forceInline:s,preserveFrontmatter:c,tagfilter:l})}):r(e,{components:i,wrapper:a,forceBlock:o,forceInline:s,preserveFrontmatter:c,tagfilter:l})};exports.MarkdownRenderer=a,exports.renderMarkdown=r,exports.useMarkdownRenderer=i;
|
|
78
2
|
//# sourceMappingURL=MarkdownRenderer.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MarkdownRenderer.cjs","names":["compileMarkdown","useMarkdownContext"],"sources":["../../../src/markdown/MarkdownRenderer.tsx"],"sourcesContent":["import type { ComponentChildren, FunctionComponent, JSX } from 'preact';\nimport type { HTMLComponents } from '../html/types';\nimport { compileMarkdown, type MarkdownCompilerOptions } from './compiler';\nimport {\n type MarkdownProviderOptions,\n useMarkdownContext,\n} from './MarkdownProvider';\n\nexport type RenderMarkdownProps = MarkdownProviderOptions & {\n /**\n * Component overrides for HTML tags.\n * Only used if not wrapped in a MarkdownProvider.\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 wrapper?: FunctionComponent<any>;\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: MarkdownCompilerOptions = {\n components,\n forceBlock,\n forceInline,\n wrapper: wrapper as any,\n forceWrapper: !!wrapper,\n preserveFrontmatter,\n tagfilter,\n };\n\n return compileMarkdown(content, internalOptions) as JSX.Element;\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(content, {\n components,\n wrapper,\n forceBlock,\n forceInline,\n preserveFrontmatter,\n tagfilter,\n });\n }\n\n return renderMarkdown(content, {\n components,\n wrapper,\n forceBlock,\n forceInline,\n preserveFrontmatter,\n tagfilter,\n });\n };\n};\n\ntype MarkdownRendererProps = RenderMarkdownProps & {\n /**\n * The markdown content to render.\n */\n children: string;\n /**\n * Custom render function for markdown.\n * If provided, it will overwrite context and default rendering.\n */\n renderMarkdown?: (\n markdown: string,\n options?: {\n components?: HTMLComponents<'permissive', {}>;\n wrapper?: FunctionComponent<any>;\n forceBlock?: boolean;\n forceInline?: boolean;\n preserveFrontmatter?: boolean;\n tagfilter?: boolean;\n }\n ) => ComponentChildren;\n};\n\n/**\n * Preact component that renders markdown to JSX.\n *\n * It uses the renderMarkdown function from the MarkdownProvider context if available.\n * Otherwise, it falls back to the default compiler with provided components and options.\n */\nexport const MarkdownRenderer: FunctionComponent<MarkdownRendererProps> = ({\n children = '',\n components,\n wrapper,\n forceBlock,\n forceInline,\n preserveFrontmatter,\n tagfilter,\n renderMarkdown: customRenderMarkdown,\n}) => {\n const context = useMarkdownContext();\n\n if (customRenderMarkdown) {\n return (\n <>\n {customRenderMarkdown(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(children, {\n components,\n wrapper,\n forceBlock,\n forceInline,\n preserveFrontmatter,\n tagfilter,\n })}\n </>\n );\n }\n\n return renderMarkdown(children, {\n components,\n wrapper,\n forceBlock,\n forceInline,\n preserveFrontmatter,\n tagfilter,\n });\n};\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"MarkdownRenderer.cjs","names":["compileMarkdown","useMarkdownContext"],"sources":["../../../src/markdown/MarkdownRenderer.tsx"],"sourcesContent":["import type { ComponentChildren, FunctionComponent, JSX } from 'preact';\nimport type { HTMLComponents } from '../html/types';\nimport { compileMarkdown, type MarkdownCompilerOptions } from './compiler';\nimport {\n type MarkdownProviderOptions,\n useMarkdownContext,\n} from './MarkdownProvider';\n\nexport type RenderMarkdownProps = MarkdownProviderOptions & {\n /**\n * Component overrides for HTML tags.\n * Only used if not wrapped in a MarkdownProvider.\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 wrapper?: FunctionComponent<any>;\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: MarkdownCompilerOptions = {\n components,\n forceBlock,\n forceInline,\n wrapper: wrapper as any,\n forceWrapper: !!wrapper,\n preserveFrontmatter,\n tagfilter,\n };\n\n return compileMarkdown(content, internalOptions) as JSX.Element;\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(content, {\n components,\n wrapper,\n forceBlock,\n forceInline,\n preserveFrontmatter,\n tagfilter,\n });\n }\n\n return renderMarkdown(content, {\n components,\n wrapper,\n forceBlock,\n forceInline,\n preserveFrontmatter,\n tagfilter,\n });\n };\n};\n\ntype MarkdownRendererProps = RenderMarkdownProps & {\n /**\n * The markdown content to render.\n */\n children: string;\n /**\n * Custom render function for markdown.\n * If provided, it will overwrite context and default rendering.\n */\n renderMarkdown?: (\n markdown: string,\n options?: {\n components?: HTMLComponents<'permissive', {}>;\n wrapper?: FunctionComponent<any>;\n forceBlock?: boolean;\n forceInline?: boolean;\n preserveFrontmatter?: boolean;\n tagfilter?: boolean;\n }\n ) => ComponentChildren;\n};\n\n/**\n * Preact component that renders markdown to JSX.\n *\n * It uses the renderMarkdown function from the MarkdownProvider context if available.\n * Otherwise, it falls back to the default compiler with provided components and options.\n */\nexport const MarkdownRenderer: FunctionComponent<MarkdownRendererProps> = ({\n children = '',\n components,\n wrapper,\n forceBlock,\n forceInline,\n preserveFrontmatter,\n tagfilter,\n renderMarkdown: customRenderMarkdown,\n}) => {\n const context = useMarkdownContext();\n\n if (customRenderMarkdown) {\n return (\n <>\n {customRenderMarkdown(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(children, {\n components,\n wrapper,\n forceBlock,\n forceInline,\n preserveFrontmatter,\n tagfilter,\n })}\n </>\n );\n }\n\n return renderMarkdown(children, {\n components,\n wrapper,\n forceBlock,\n forceInline,\n preserveFrontmatter,\n tagfilter,\n });\n};\n"],"mappings":"0NAqBA,MAAa,GACX,EACA,CACE,aACA,UACA,aACA,cACA,sBACA,aACuB,EAAE,GAapBA,EAAAA,gBAAgB,EAV0B,CAC/C,aACA,aACA,cACS,UACT,aAAc,CAAC,CAAC,EAChB,sBACA,YACD,CAE+C,CAGrC,GAAuB,CAClC,aACA,UACA,aACA,cACA,sBACA,aACuB,EAAE,GAAK,CAC9B,IAAM,EAAUC,EAAAA,oBAAoB,CAEpC,MAAQ,IACF,EACK,EAAQ,eAAe,EAAS,CACrC,aACA,UACA,aACA,cACA,sBACA,YACD,CAAC,CAGG,EAAe,EAAS,CAC7B,aACA,UACA,aACA,cACA,sBACA,YACD,CAAC,EAgCO,GAA8D,CACzE,WAAW,GACX,aACA,UACA,aACA,cACA,sBACA,YACA,eAAgB,KACZ,CACJ,IAAM,EAAUA,EAAAA,oBAAoB,CAgCpC,OA9BI,GAEA,EAAA,EAAA,KAAA,EAAA,SAAA,CAAA,SACG,EAAqB,EAAU,CAC9B,aACA,UACA,aACA,cACA,sBACA,YACD,CAAC,CAAA,CACD,CAIH,GAEA,EAAA,EAAA,KAAA,EAAA,SAAA,CAAA,SACG,EAAQ,eAAe,EAAU,CAChC,aACA,UACA,aACA,cACA,sBACA,YACD,CAAC,CAAA,CACD,CAIA,EAAe,EAAU,CAC9B,aACA,UACA,aACA,cACA,sBACA,YACD,CAAC"}
|
|
@@ -1,32 +1,2 @@
|
|
|
1
|
-
Object.defineProperty(exports,
|
|
2
|
-
const require_runtime = require('../_virtual/_rolldown/runtime.cjs');
|
|
3
|
-
const require_client_useLocale = require('../client/useLocale.cjs');
|
|
4
|
-
const require_editor_useEditedContentRenderer = require('../editor/useEditedContentRenderer.cjs');
|
|
5
|
-
const require_markdown_MarkdownProvider = require('./MarkdownProvider.cjs');
|
|
6
|
-
let _intlayer_core = require("@intlayer/core");
|
|
7
|
-
|
|
8
|
-
//#region src/markdown/MarkdownRendererPlugin.tsx
|
|
9
|
-
const MarkdownRendererPlugin = (props) => {
|
|
10
|
-
const { dictionaryKey, keyPath, children, locale, ...components } = props;
|
|
11
|
-
const renderMarkdown = require_markdown_MarkdownProvider.useMarkdownContext()?.renderMarkdown ?? ((md) => md);
|
|
12
|
-
const editedContentContext = require_editor_useEditedContentRenderer.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 = require_editor_useEditedContentRenderer.useEditedContentRenderer({
|
|
21
|
-
dictionaryKey,
|
|
22
|
-
keyPath,
|
|
23
|
-
children
|
|
24
|
-
});
|
|
25
|
-
const { locale: currentLocale } = require_client_useLocale.useLocale();
|
|
26
|
-
return (0, _intlayer_core.getContentNodeByKeyPath)((0, _intlayer_core.getMarkdownMetadata)(editedContentContext), metadataKeyPath, currentLocale);
|
|
27
|
-
};
|
|
28
|
-
|
|
29
|
-
//#endregion
|
|
30
|
-
exports.MarkdownMetadataRenderer = MarkdownMetadataRenderer;
|
|
31
|
-
exports.MarkdownRendererPlugin = MarkdownRendererPlugin;
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`../_virtual/_rolldown/runtime.cjs`);const e=require(`../client/useLocale.cjs`),t=require(`../editor/useEditedContentRenderer.cjs`),n=require(`./MarkdownProvider.cjs`);let r=require(`@intlayer/core/markdown`),i=require(`@intlayer/core/dictionaryManipulator`);const a=e=>{let{dictionaryKey:r,keyPath:i,children:a,locale:o,...s}=e,c=n.useMarkdownContext()?.renderMarkdown??(e=>e),l=t.useEditedContentRenderer({dictionaryKey:r,keyPath:i,children:a});return c(typeof l==`string`?l:a,s)},o=({dictionaryKey:n,keyPath:a,children:o,metadataKeyPath:s})=>{let c=t.useEditedContentRenderer({dictionaryKey:n,keyPath:a,children:o}),{locale:l}=e.useLocale();return(0,i.getContentNodeByKeyPath)((0,r.getMarkdownMetadata)(c),s,l)};exports.MarkdownMetadataRenderer=o,exports.MarkdownRendererPlugin=a;
|
|
32
2
|
//# sourceMappingURL=MarkdownRendererPlugin.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MarkdownRendererPlugin.cjs","names":["useMarkdownContext","useEditedContentRenderer","useLocale"],"sources":["../../../src/markdown/MarkdownRendererPlugin.tsx"],"sourcesContent":["import { getContentNodeByKeyPath
|
|
1
|
+
{"version":3,"file":"MarkdownRendererPlugin.cjs","names":["useMarkdownContext","useEditedContentRenderer","useLocale"],"sources":["../../../src/markdown/MarkdownRendererPlugin.tsx"],"sourcesContent":["import { getContentNodeByKeyPath } from '@intlayer/core/dictionaryManipulator';\nimport { getMarkdownMetadata } from '@intlayer/core/markdown';\nimport type { ContentNode, KeyPath, LocalesValues } from '@intlayer/types';\nimport type { ComponentChildren, FunctionComponent } from 'preact';\nimport { useLocale } from '../client/useLocale';\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: FunctionComponent<\n MarkdownRendererPluginProps\n> = (props) => {\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) as ComponentChildren;\n};\n\ntype MarkdownMetadataRendererProps = MarkdownRendererPluginProps & {\n metadataKeyPath: KeyPath[];\n};\n\nexport const MarkdownMetadataRenderer: FunctionComponent<\n MarkdownMetadataRendererProps\n> = ({ dictionaryKey, keyPath, children, metadataKeyPath }) => {\n const editedContentContext = useEditedContentRenderer({\n dictionaryKey,\n keyPath,\n children,\n });\n const { locale: currentLocale } = useLocale();\n\n const metadata = getMarkdownMetadata(editedContentContext as string);\n\n const metadataEl = getContentNodeByKeyPath(\n metadata as ContentNode,\n metadataKeyPath,\n currentLocale as any\n );\n\n return metadataEl as ComponentChildren;\n};\n"],"mappings":"8UAgBA,MAAa,EAER,GAAU,CACb,GAAM,CAAE,gBAAe,UAAS,WAAU,SAAQ,GAAG,GAAe,EAE9D,EADUA,EAAAA,oBAAoB,EACJ,iBAAoB,GAAO,GACrD,EAAuBC,EAAAA,yBAAyB,CACpD,gBACA,UACA,WACD,CAAC,CAKF,OAAO,EAFL,OAAO,GAAyB,SAAW,EAAuB,EAE7B,EAAW,EAOvC,GAER,CAAE,gBAAe,UAAS,WAAU,qBAAsB,CAC7D,IAAM,EAAuBA,EAAAA,yBAAyB,CACpD,gBACA,UACA,WACD,CAAC,CACI,CAAE,OAAQ,GAAkBC,EAAAA,WAAW,CAU7C,OAAA,EAAA,EAAA,0BAAA,EAAA,EAAA,qBARqC,EAA+B,CAIlE,EACA,EACD"}
|
|
@@ -1,25 +1,2 @@
|
|
|
1
|
-
Object.defineProperty(exports,
|
|
2
|
-
const require_runtime = require('../_virtual/_rolldown/runtime.cjs');
|
|
3
|
-
const require_markdown_runtime = require('./runtime.cjs');
|
|
4
|
-
let _intlayer_core = require("@intlayer/core");
|
|
5
|
-
|
|
6
|
-
//#region src/markdown/compiler.ts
|
|
7
|
-
/**
|
|
8
|
-
* Preact adapter for the framework-agnostic markdown processor.
|
|
9
|
-
*/
|
|
10
|
-
/**
|
|
11
|
-
* Compile markdown to Preact VNodes.
|
|
12
|
-
* This is the primary export - use this for new code.
|
|
13
|
-
*/
|
|
14
|
-
const compileMarkdown = (markdown = "", options = {}) => (0, _intlayer_core.compileWithOptions)(markdown, require_markdown_runtime.default, options);
|
|
15
|
-
const compiler = compileMarkdown;
|
|
16
|
-
const compile = compileMarkdown;
|
|
17
|
-
|
|
18
|
-
//#endregion
|
|
19
|
-
exports.RuleType = _intlayer_core.RuleType;
|
|
20
|
-
exports.compile = compile;
|
|
21
|
-
exports.compileMarkdown = compileMarkdown;
|
|
22
|
-
exports.compiler = compiler;
|
|
23
|
-
exports.sanitizer = _intlayer_core.sanitizer;
|
|
24
|
-
exports.slugify = _intlayer_core.slugify;
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`../_virtual/_rolldown/runtime.cjs`);const e=require(`./runtime.cjs`);let t=require(`@intlayer/core/markdown`);const n=(n=``,r={})=>(0,t.compileWithOptions)(n,e.default,r),r=n,i=n;exports.RuleType=t.RuleType,exports.compile=i,exports.compileMarkdown=n,exports.compiler=r,exports.sanitizer=t.sanitizer,exports.slugify=t.slugify;
|
|
25
2
|
//# sourceMappingURL=compiler.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compiler.cjs","names":["preactRuntime"],"sources":["../../../src/markdown/compiler.ts"],"sourcesContent":["/**\n * Preact adapter for the framework-agnostic markdown processor.\n */\n\nimport {\n type CompileOptions,\n compileWithOptions,\n sanitizer as defaultSanitizer,\n slugify as defaultSlugify,\n RuleType,\n} from '@intlayer/core';\nimport { preactRuntime } from './runtime';\n\n// Re-export RuleType and utilities for compatibility\nexport { RuleType };\nexport { defaultSlugify as slugify, defaultSanitizer as sanitizer };\n\nexport type MarkdownCompilerOptions = CompileOptions;\n\n/**\n * Compile markdown to Preact VNodes.\n * This is the primary export - use this for new code.\n */\nexport const compileMarkdown = (\n markdown: string = '',\n options: MarkdownCompilerOptions = {}\n) => compileWithOptions(markdown, preactRuntime, options);\n\n// Aliases for consistency with React adapter\nexport const compiler = compileMarkdown;\nexport const compile = compileMarkdown;\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"compiler.cjs","names":["preactRuntime"],"sources":["../../../src/markdown/compiler.ts"],"sourcesContent":["/**\n * Preact adapter for the framework-agnostic markdown processor.\n */\n\nimport {\n type CompileOptions,\n compileWithOptions,\n sanitizer as defaultSanitizer,\n slugify as defaultSlugify,\n RuleType,\n} from '@intlayer/core/markdown';\nimport { preactRuntime } from './runtime';\n\n// Re-export RuleType and utilities for compatibility\nexport { RuleType };\nexport { defaultSlugify as slugify, defaultSanitizer as sanitizer };\n\nexport type MarkdownCompilerOptions = CompileOptions;\n\n/**\n * Compile markdown to Preact VNodes.\n * This is the primary export - use this for new code.\n */\nexport const compileMarkdown = (\n markdown: string = '',\n options: MarkdownCompilerOptions = {}\n) => compileWithOptions(markdown, preactRuntime, options);\n\n// Aliases for consistency with React adapter\nexport const compiler = compileMarkdown;\nexport const compile = compileMarkdown;\n"],"mappings":"0LAuBA,MAAa,GACX,EAAmB,GACnB,EAAmC,EAAE,IAAA,EAAA,EAAA,oBACf,EAAUA,EAAAA,QAAe,EAAQ,CAG5C,EAAW,EACX,EAAU"}
|
|
@@ -1,23 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,
|
|
2
|
-
const require_runtime = require('../_virtual/_rolldown/runtime.cjs');
|
|
3
|
-
const require_markdown_runtime = require('./runtime.cjs');
|
|
4
|
-
const require_markdown_compiler = require('./compiler.cjs');
|
|
5
|
-
const require_markdown_MarkdownProvider = require('./MarkdownProvider.cjs');
|
|
6
|
-
const require_markdown_MarkdownRenderer = require('./MarkdownRenderer.cjs');
|
|
7
|
-
const require_markdown_MarkdownRendererPlugin = require('./MarkdownRendererPlugin.cjs');
|
|
8
|
-
let _intlayer_core = require("@intlayer/core");
|
|
9
|
-
|
|
10
|
-
exports.MarkdownMetadataRenderer = require_markdown_MarkdownRendererPlugin.MarkdownMetadataRenderer;
|
|
11
|
-
exports.MarkdownProvider = require_markdown_MarkdownProvider.MarkdownProvider;
|
|
12
|
-
exports.MarkdownRenderer = require_markdown_MarkdownRenderer.MarkdownRenderer;
|
|
13
|
-
exports.MarkdownRendererPlugin = require_markdown_MarkdownRendererPlugin.MarkdownRendererPlugin;
|
|
14
|
-
exports.RuleType = _intlayer_core.RuleType;
|
|
15
|
-
exports.compile = require_markdown_compiler.compile;
|
|
16
|
-
exports.compileMarkdown = require_markdown_compiler.compileMarkdown;
|
|
17
|
-
exports.compiler = require_markdown_compiler.compiler;
|
|
18
|
-
exports.preactRuntime = require_markdown_runtime;
|
|
19
|
-
exports.renderMarkdown = require_markdown_MarkdownRenderer.renderMarkdown;
|
|
20
|
-
exports.sanitizer = _intlayer_core.sanitizer;
|
|
21
|
-
exports.slugify = _intlayer_core.slugify;
|
|
22
|
-
exports.useMarkdownContext = require_markdown_MarkdownProvider.useMarkdownContext;
|
|
23
|
-
exports.useMarkdownRenderer = require_markdown_MarkdownRenderer.useMarkdownRenderer;
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`../_virtual/_rolldown/runtime.cjs`);const e=require(`./runtime.cjs`),t=require(`./compiler.cjs`),n=require(`./MarkdownProvider.cjs`),r=require(`./MarkdownRenderer.cjs`),i=require(`./MarkdownRendererPlugin.cjs`);let a=require(`@intlayer/core/markdown`);exports.MarkdownMetadataRenderer=i.MarkdownMetadataRenderer,exports.MarkdownProvider=n.MarkdownProvider,exports.MarkdownRenderer=r.MarkdownRenderer,exports.MarkdownRendererPlugin=i.MarkdownRendererPlugin,exports.RuleType=a.RuleType,exports.compile=t.compile,exports.compileMarkdown=t.compileMarkdown,exports.compiler=t.compiler,exports.preactRuntime=e,exports.renderMarkdown=r.renderMarkdown,exports.sanitizer=a.sanitizer,exports.slugify=a.slugify,exports.useMarkdownContext=n.useMarkdownContext,exports.useMarkdownRenderer=r.useMarkdownRenderer;
|
|
@@ -1,19 +1,2 @@
|
|
|
1
|
-
Object.defineProperties(exports,
|
|
2
|
-
const require_runtime = require('../_virtual/_rolldown/runtime.cjs');
|
|
3
|
-
let preact = require("preact");
|
|
4
|
-
|
|
5
|
-
//#region src/markdown/runtime.ts
|
|
6
|
-
/**
|
|
7
|
-
* Preact-specific runtime for the markdown processor.
|
|
8
|
-
*/
|
|
9
|
-
const preactRuntime = {
|
|
10
|
-
createElement: (type, props, ...children) => (0, preact.createElement)(type, props, ...children),
|
|
11
|
-
cloneElement: (element, props, ...children) => (0, preact.cloneElement)(element, props, ...children),
|
|
12
|
-
Fragment: preact.Fragment,
|
|
13
|
-
normalizeProps: (_tag, props) => props
|
|
14
|
-
};
|
|
15
|
-
|
|
16
|
-
//#endregion
|
|
17
|
-
exports.default = preactRuntime;
|
|
18
|
-
exports.preactRuntime = preactRuntime;
|
|
1
|
+
Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}}),require(`../_virtual/_rolldown/runtime.cjs`);let e=require(`preact`);const t={createElement:(t,n,...r)=>(0,e.createElement)(t,n,...r),cloneElement:(t,n,...r)=>(0,e.cloneElement)(t,n,...r),Fragment:e.Fragment,normalizeProps:(e,t)=>t};exports.default=t,exports.preactRuntime=t;
|
|
19
2
|
//# sourceMappingURL=runtime.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.cjs","names":[],"sources":["../../../src/markdown/runtime.ts"],"sourcesContent":["/**\n * Preact-specific MarkdownRuntime implementation.\n */\n\nimport type { HTMLTag, MarkdownRuntime } from '@intlayer/core';\nimport {\n type Component,\n cloneElement,\n createElement,\n Fragment,\n type VNode,\n} from 'preact';\n\n/**\n * Preact-specific runtime for the markdown processor.\n */\nexport const preactRuntime: MarkdownRuntime = {\n createElement: (\n type: string | Component,\n props: Record<string, any> | null,\n ...children: any[]\n ): any => createElement(type as any, props, ...children),\n\n cloneElement: (\n element: unknown,\n props: Record<string, any>,\n ...children: any[]\n ): any => cloneElement(element as VNode, props, ...children),\n\n Fragment,\n\n normalizeProps: (\n _tag: HTMLTag,\n props: Record<string, any>\n ): Record<string, any> => props,\n};\n\nexport default preactRuntime;\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"runtime.cjs","names":[],"sources":["../../../src/markdown/runtime.ts"],"sourcesContent":["/**\n * Preact-specific MarkdownRuntime implementation.\n */\n\nimport type { HTMLTag, MarkdownRuntime } from '@intlayer/core/markdown';\nimport {\n type Component,\n cloneElement,\n createElement,\n Fragment,\n type VNode,\n} from 'preact';\n\n/**\n * Preact-specific runtime for the markdown processor.\n */\nexport const preactRuntime: MarkdownRuntime = {\n createElement: (\n type: string | Component,\n props: Record<string, any> | null,\n ...children: any[]\n ): any => createElement(type as any, props, ...children),\n\n cloneElement: (\n element: unknown,\n props: Record<string, any>,\n ...children: any[]\n ): any => cloneElement(element as VNode, props, ...children),\n\n Fragment,\n\n normalizeProps: (\n _tag: HTMLTag,\n props: Record<string, any>\n ): Record<string, any> => props,\n};\n\nexport default preactRuntime;\n"],"mappings":"oKAgBA,MAAa,EAAiC,CAC5C,eACE,EACA,EACA,GAAG,KAAA,EAAA,EAAA,eACmB,EAAa,EAAO,GAAG,EAAS,CAExD,cACE,EACA,EACA,GAAG,KAAA,EAAA,EAAA,cACkB,EAAkB,EAAO,GAAG,EAAS,CAE5D,SAAA,EAAA,SAEA,gBACE,EACA,IACwB,EAC3B"}
|
package/dist/cjs/plugins.cjs
CHANGED
|
@@ -1,198 +1,2 @@
|
|
|
1
|
-
Object.defineProperty(exports,
|
|
2
|
-
const require_runtime = require('./_virtual/_rolldown/runtime.cjs');
|
|
3
|
-
const require_IntlayerNode = require('./IntlayerNode.cjs');
|
|
4
|
-
const require_editor_ContentSelectorWrapper = require('./editor/ContentSelectorWrapper.cjs');
|
|
5
|
-
const require_editor_useEditedContentRenderer = require('./editor/useEditedContentRenderer.cjs');
|
|
6
|
-
const require_html_HTMLRenderer = require('./html/HTMLRenderer.cjs');
|
|
7
|
-
const require_markdown_MarkdownRenderer = require('./markdown/MarkdownRenderer.cjs');
|
|
8
|
-
const require_markdown_MarkdownRendererPlugin = require('./markdown/MarkdownRendererPlugin.cjs');
|
|
9
|
-
const require_preactElement_renderPreactElement = require('./preactElement/renderPreactElement.cjs');
|
|
10
|
-
let preact = require("preact");
|
|
11
|
-
let _intlayer_core = require("@intlayer/core");
|
|
12
|
-
let _intlayer_types = require("@intlayer/types");
|
|
13
|
-
let preact_jsx_runtime = require("preact/jsx-runtime");
|
|
14
|
-
|
|
15
|
-
//#region src/plugins.tsx
|
|
16
|
-
/** Translation plugin. Replaces node with a locale string if nodeType = Translation. */
|
|
17
|
-
const intlayerNodePlugins = {
|
|
18
|
-
id: "intlayer-node-plugin",
|
|
19
|
-
canHandle: (node) => typeof node === "bigint" || typeof node === "string" || typeof node === "number",
|
|
20
|
-
transform: (_node, { plugins, ...rest }) => require_IntlayerNode.renderIntlayerNode({
|
|
21
|
-
...rest,
|
|
22
|
-
value: rest.children,
|
|
23
|
-
children: /* @__PURE__ */ (0, preact.createElement)(require_editor_ContentSelectorWrapper.ContentSelectorRenderer, {
|
|
24
|
-
...rest,
|
|
25
|
-
key: rest.children
|
|
26
|
-
}, /* @__PURE__ */ (0, preact_jsx_runtime.jsx)(require_editor_useEditedContentRenderer.EditedContentRenderer, {
|
|
27
|
-
...rest,
|
|
28
|
-
children: rest.children
|
|
29
|
-
}))
|
|
30
|
-
})
|
|
31
|
-
};
|
|
32
|
-
/** Translation plugin. Replaces node with a locale string if nodeType = Translation. */
|
|
33
|
-
const preactNodePlugins = {
|
|
34
|
-
id: "preact-node-plugin",
|
|
35
|
-
canHandle: (node) => typeof node === "object" && typeof node.props !== "undefined" && typeof node.key !== "undefined",
|
|
36
|
-
transform: (node, { plugins, ...rest }) => require_IntlayerNode.renderIntlayerNode({
|
|
37
|
-
...rest,
|
|
38
|
-
value: "[[preact-element]]",
|
|
39
|
-
children: /* @__PURE__ */ (0, preact_jsx_runtime.jsx)(require_editor_ContentSelectorWrapper.ContentSelectorRenderer, {
|
|
40
|
-
...rest,
|
|
41
|
-
children: require_preactElement_renderPreactElement.renderPreactElement(node)
|
|
42
|
-
})
|
|
43
|
-
})
|
|
44
|
-
};
|
|
45
|
-
/**
|
|
46
|
-
* Check if a value is a Preact VNode
|
|
47
|
-
*/
|
|
48
|
-
const isVNode = (value) => {
|
|
49
|
-
return value !== null && value !== void 0 && typeof value !== "string" && typeof value !== "number" && typeof value !== "boolean";
|
|
50
|
-
};
|
|
51
|
-
/**
|
|
52
|
-
* Split insertion string and join with Preact VNodes
|
|
53
|
-
*/
|
|
54
|
-
const splitAndJoinInsertion = (template, values) => {
|
|
55
|
-
if (!Object.values(values).some(isVNode)) return template.replace(/\{\{\s*(.*?)\s*\}\}/g, (_, key) => {
|
|
56
|
-
return (values[key.trim()] ?? "").toString();
|
|
57
|
-
});
|
|
58
|
-
const parts = [];
|
|
59
|
-
let lastIndex = 0;
|
|
60
|
-
const regex = /\{\{\s*(.*?)\s*\}\}/g;
|
|
61
|
-
let match = regex.exec(template);
|
|
62
|
-
while (match !== null) {
|
|
63
|
-
if (match.index > lastIndex) parts.push(template.substring(lastIndex, match.index));
|
|
64
|
-
const value = values[match[1].trim()];
|
|
65
|
-
if (value !== void 0 && value !== null) parts.push(typeof value === "number" ? String(value) : value);
|
|
66
|
-
lastIndex = match.index + match[0].length;
|
|
67
|
-
match = regex.exec(template);
|
|
68
|
-
}
|
|
69
|
-
if (lastIndex < template.length) parts.push(template.substring(lastIndex));
|
|
70
|
-
return (0, preact.h)(preact.Fragment, null, ...parts.map((part, index) => (0, preact.h)(preact.Fragment, { key: index }, part)));
|
|
71
|
-
};
|
|
72
|
-
/** Insertion plugin for Preact. Handles component/node insertion. */
|
|
73
|
-
const insertionPlugin = {
|
|
74
|
-
id: "insertion-plugin",
|
|
75
|
-
canHandle: (node) => typeof node === "object" && node?.nodeType === _intlayer_types.NodeType.Insertion,
|
|
76
|
-
transform: (node, props, deepTransformNode) => {
|
|
77
|
-
const newKeyPath = [...props.keyPath, { type: _intlayer_types.NodeType.Insertion }];
|
|
78
|
-
const children = node[_intlayer_types.NodeType.Insertion];
|
|
79
|
-
/** Insertion string plugin. Replaces string node with a component that render the insertion. */
|
|
80
|
-
const insertionStringPlugin = {
|
|
81
|
-
id: "insertion-string-plugin",
|
|
82
|
-
canHandle: (node) => typeof node === "string",
|
|
83
|
-
transform: (node, subProps, deepTransformNode) => {
|
|
84
|
-
const transformedResult = deepTransformNode(node, {
|
|
85
|
-
...subProps,
|
|
86
|
-
children: node,
|
|
87
|
-
plugins: [...(props.plugins ?? []).filter((plugin) => plugin.id !== "intlayer-node-plugin")]
|
|
88
|
-
});
|
|
89
|
-
return (values) => {
|
|
90
|
-
const result = splitAndJoinInsertion(transformedResult, values);
|
|
91
|
-
return deepTransformNode(result, {
|
|
92
|
-
...subProps,
|
|
93
|
-
plugins: props.plugins,
|
|
94
|
-
children: result
|
|
95
|
-
});
|
|
96
|
-
};
|
|
97
|
-
}
|
|
98
|
-
};
|
|
99
|
-
return deepTransformNode(children, {
|
|
100
|
-
...props,
|
|
101
|
-
children,
|
|
102
|
-
keyPath: newKeyPath,
|
|
103
|
-
plugins: [insertionStringPlugin, ...props.plugins ?? []]
|
|
104
|
-
});
|
|
105
|
-
}
|
|
106
|
-
};
|
|
107
|
-
/** Markdown string plugin. Replaces string node with a component that render the markdown. */
|
|
108
|
-
const markdownStringPlugin = {
|
|
109
|
-
id: "markdown-string-plugin",
|
|
110
|
-
canHandle: (node) => typeof node === "string",
|
|
111
|
-
transform: (node, props, deepTransformNode) => {
|
|
112
|
-
const { plugins, ...rest } = props;
|
|
113
|
-
const metadataNodes = deepTransformNode((0, _intlayer_core.getMarkdownMetadata)(node), {
|
|
114
|
-
plugins: [{
|
|
115
|
-
id: "markdown-metadata-plugin",
|
|
116
|
-
canHandle: (metadataNode) => typeof metadataNode === "string" || typeof metadataNode === "number" || typeof metadataNode === "boolean" || !metadataNode,
|
|
117
|
-
transform: (metadataNode, props) => require_IntlayerNode.renderIntlayerNode({
|
|
118
|
-
...props,
|
|
119
|
-
value: metadataNode,
|
|
120
|
-
children: /* @__PURE__ */ (0, preact_jsx_runtime.jsx)(require_editor_ContentSelectorWrapper.ContentSelectorRenderer, {
|
|
121
|
-
...rest,
|
|
122
|
-
children: /* @__PURE__ */ (0, preact_jsx_runtime.jsx)(require_markdown_MarkdownRendererPlugin.MarkdownMetadataRenderer, {
|
|
123
|
-
...rest,
|
|
124
|
-
metadataKeyPath: props.keyPath,
|
|
125
|
-
children: node
|
|
126
|
-
})
|
|
127
|
-
})
|
|
128
|
-
})
|
|
129
|
-
}],
|
|
130
|
-
dictionaryKey: rest.dictionaryKey,
|
|
131
|
-
keyPath: []
|
|
132
|
-
});
|
|
133
|
-
const render = (components) => require_IntlayerNode.renderIntlayerNode({
|
|
134
|
-
...props,
|
|
135
|
-
value: node,
|
|
136
|
-
children: /* @__PURE__ */ (0, preact_jsx_runtime.jsx)(require_editor_ContentSelectorWrapper.ContentSelectorRenderer, {
|
|
137
|
-
...rest,
|
|
138
|
-
children: /* @__PURE__ */ (0, preact_jsx_runtime.jsx)(require_markdown_MarkdownRenderer.MarkdownRenderer, {
|
|
139
|
-
...rest,
|
|
140
|
-
...components,
|
|
141
|
-
children: node
|
|
142
|
-
})
|
|
143
|
-
}),
|
|
144
|
-
additionalProps: { metadata: metadataNodes }
|
|
145
|
-
});
|
|
146
|
-
const element = render();
|
|
147
|
-
return new Proxy(element, { get(target, prop) {
|
|
148
|
-
if (prop === "value") return node;
|
|
149
|
-
if (prop === "metadata") return metadataNodes;
|
|
150
|
-
if (prop === "use") return (components) => render(components);
|
|
151
|
-
return Reflect.get(target, prop);
|
|
152
|
-
} });
|
|
153
|
-
}
|
|
154
|
-
};
|
|
155
|
-
const markdownPlugin = {
|
|
156
|
-
id: "markdown-plugin",
|
|
157
|
-
canHandle: (node) => typeof node === "object" && node?.nodeType === _intlayer_types.NodeType.Markdown,
|
|
158
|
-
transform: (node, props, deepTransformNode) => {
|
|
159
|
-
const newKeyPath = [...props.keyPath, { type: _intlayer_types.NodeType.Markdown }];
|
|
160
|
-
const children = node[_intlayer_types.NodeType.Markdown];
|
|
161
|
-
return deepTransformNode(children, {
|
|
162
|
-
...props,
|
|
163
|
-
children,
|
|
164
|
-
keyPath: newKeyPath,
|
|
165
|
-
plugins: [markdownStringPlugin, ...props.plugins ?? []]
|
|
166
|
-
});
|
|
167
|
-
}
|
|
168
|
-
};
|
|
169
|
-
/** HTML plugin. Replaces node with a function that takes components => VNode. */
|
|
170
|
-
const htmlPlugin = {
|
|
171
|
-
id: "html-plugin",
|
|
172
|
-
canHandle: (node) => typeof node === "object" && node?.nodeType === _intlayer_types.NodeType.HTML,
|
|
173
|
-
transform: (node, props) => {
|
|
174
|
-
const html = node[_intlayer_types.NodeType.HTML];
|
|
175
|
-
node.tags;
|
|
176
|
-
const { plugins, ...rest } = props;
|
|
177
|
-
const render = (userComponents) => (0, preact.h)(require_html_HTMLRenderer.HTMLRenderer, {
|
|
178
|
-
...rest,
|
|
179
|
-
html,
|
|
180
|
-
userComponents
|
|
181
|
-
});
|
|
182
|
-
const element = render();
|
|
183
|
-
return new Proxy(element, { get(target, prop) {
|
|
184
|
-
if (prop === "value") return html;
|
|
185
|
-
if (prop === "use") return (userComponents) => render(userComponents);
|
|
186
|
-
return Reflect.get(target, prop);
|
|
187
|
-
} });
|
|
188
|
-
}
|
|
189
|
-
};
|
|
190
|
-
|
|
191
|
-
//#endregion
|
|
192
|
-
exports.htmlPlugin = htmlPlugin;
|
|
193
|
-
exports.insertionPlugin = insertionPlugin;
|
|
194
|
-
exports.intlayerNodePlugins = intlayerNodePlugins;
|
|
195
|
-
exports.markdownPlugin = markdownPlugin;
|
|
196
|
-
exports.markdownStringPlugin = markdownStringPlugin;
|
|
197
|
-
exports.preactNodePlugins = preactNodePlugins;
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./_virtual/_rolldown/runtime.cjs`);const e=require(`./IntlayerNode.cjs`),t=require(`./editor/ContentSelectorWrapper.cjs`),n=require(`./editor/useEditedContentRenderer.cjs`),r=require(`./html/HTMLRenderer.cjs`),i=require(`./markdown/MarkdownRenderer.cjs`),a=require(`./markdown/MarkdownRendererPlugin.cjs`),o=require(`./preactElement/renderPreactElement.cjs`);let s=require(`preact`),c=require(`@intlayer/core/markdown`),l=require(`@intlayer/types`),u=require(`preact/jsx-runtime`);const d={id:`intlayer-node-plugin`,canHandle:e=>typeof e==`bigint`||typeof e==`string`||typeof e==`number`,transform:(r,{plugins:i,...a})=>e.renderIntlayerNode({...a,value:a.children,children:(0,s.createElement)(t.ContentSelectorRenderer,{...a,key:a.children},(0,u.jsx)(n.EditedContentRenderer,{...a,children:a.children}))})},f={id:`preact-node-plugin`,canHandle:e=>typeof e==`object`&&e.props!==void 0&&e.key!==void 0,transform:(n,{plugins:r,...i})=>e.renderIntlayerNode({...i,value:`[[preact-element]]`,children:(0,u.jsx)(t.ContentSelectorRenderer,{...i,children:o.renderPreactElement(n)})})},p=e=>e!=null&&typeof e!=`string`&&typeof e!=`number`&&typeof e!=`boolean`,m=(e,t)=>{if(!Object.values(t).some(p))return e.replace(/\{\{\s*(.*?)\s*\}\}/g,(e,n)=>(t[n.trim()]??``).toString());let n=[],r=0,i=/\{\{\s*(.*?)\s*\}\}/g,a=i.exec(e);for(;a!==null;){a.index>r&&n.push(e.substring(r,a.index));let o=t[a[1].trim()];o!=null&&n.push(typeof o==`number`?String(o):o),r=a.index+a[0].length,a=i.exec(e)}return r<e.length&&n.push(e.substring(r)),(0,s.h)(s.Fragment,null,...n.map((e,t)=>(0,s.h)(s.Fragment,{key:t},e)))},h={id:`insertion-plugin`,canHandle:e=>typeof e==`object`&&e?.nodeType===l.NodeType.Insertion,transform:(e,t,n)=>{let r=[...t.keyPath,{type:l.NodeType.Insertion}],i=e[l.NodeType.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=m(i,e);return r(a,{...n,plugins:t.plugins,children:a})}}};return n(i,{...t,children:i,keyPath:r,plugins:[a,...t.plugins??[]]})}},g={id:`markdown-string-plugin`,canHandle:e=>typeof e==`string`,transform:(n,r,o)=>{let{plugins:s,...l}=r,d=o((0,c.getMarkdownMetadata)(n),{plugins:[{id:`markdown-metadata-plugin`,canHandle:e=>typeof e==`string`||typeof e==`number`||typeof e==`boolean`||!e,transform:(r,i)=>e.renderIntlayerNode({...i,value:r,children:(0,u.jsx)(t.ContentSelectorRenderer,{...l,children:(0,u.jsx)(a.MarkdownMetadataRenderer,{...l,metadataKeyPath:i.keyPath,children:n})})})}],dictionaryKey:l.dictionaryKey,keyPath:[]}),f=a=>e.renderIntlayerNode({...r,value:n,children:(0,u.jsx)(t.ContentSelectorRenderer,{...l,children:(0,u.jsx)(i.MarkdownRenderer,{...l,...a,children:n})}),additionalProps:{metadata:d}}),p=f();return new Proxy(p,{get(e,t){return t===`value`?n:t===`metadata`?d:t===`use`?e=>f(e):Reflect.get(e,t)}})}},_={id:`markdown-plugin`,canHandle:e=>typeof e==`object`&&e?.nodeType===l.NodeType.Markdown,transform:(e,t,n)=>{let r=[...t.keyPath,{type:l.NodeType.Markdown}],i=e[l.NodeType.Markdown];return n(i,{...t,children:i,keyPath:r,plugins:[g,...t.plugins??[]]})}},v={id:`html-plugin`,canHandle:e=>typeof e==`object`&&e?.nodeType===l.NodeType.HTML,transform:(e,t)=>{let n=e[l.NodeType.HTML];e.tags;let{plugins:i,...a}=t,o=e=>(0,s.h)(r.HTMLRenderer,{...a,html:n,userComponents:e}),c=o();return new Proxy(c,{get(e,t){return t===`value`?n:t===`use`?e=>o(e):Reflect.get(e,t)}})}};exports.htmlPlugin=v,exports.insertionPlugin=h,exports.intlayerNodePlugins=d,exports.markdownPlugin=_,exports.markdownStringPlugin=g,exports.preactNodePlugins=f;
|
|
198
2
|
//# sourceMappingURL=plugins.cjs.map
|
package/dist/cjs/plugins.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugins.cjs","names":["renderIntlayerNode","ContentSelectorRenderer","EditedContentRenderer","renderPreactElement","Fragment","NodeType","MarkdownMetadataRenderer","MarkdownRenderer","HTMLRenderer"],"sources":["../../src/plugins.tsx"],"sourcesContent":["import {\n type DeepTransformContent as DeepTransformContentCore,\n getMarkdownMetadata,\n type HTMLContent,\n type IInterpreterPluginState as IInterpreterPluginStateCore,\n type InsertionContent,\n type MarkdownContent,\n type Plugins,\n} from '@intlayer/core';\nimport type { DeclaredLocales, KeyPath, LocalesValues } from '@intlayer/types';\nimport { NodeType } from '@intlayer/types';\nimport { Fragment, h, type VNode } from 'preact';\nimport { ContentSelectorRenderer } from './editor';\nimport { EditedContentRenderer } from './editor/useEditedContentRenderer';\nimport { HTMLRenderer } from './html/HTMLRenderer';\nimport type { HTMLComponents } from './html/types';\nimport { type IntlayerNode, renderIntlayerNode } from './IntlayerNode';\nimport { MarkdownMetadataRenderer, MarkdownRenderer } from './markdown';\nimport { renderPreactElement } from './preactElement/renderPreactElement';\n\n/** ---------------------------------------------\n * INTLAYER NODE PLUGIN\n * --------------------------------------------- */\n\nexport type IntlayerNodeCond<T> = T extends number | string\n ? IntlayerNode<T>\n : never;\n\n/** Translation plugin. Replaces node with a locale string if nodeType = Translation. */\nexport const intlayerNodePlugins: Plugins = {\n id: 'intlayer-node-plugin',\n canHandle: (node) =>\n typeof node === 'bigint' ||\n typeof node === 'string' ||\n typeof node === 'number',\n transform: (\n _node,\n {\n plugins, // Removed to avoid next error - Functions cannot be passed directly to Client Components\n ...rest\n }\n ) =>\n renderIntlayerNode({\n ...rest,\n value: rest.children,\n children: (\n <ContentSelectorRenderer {...rest} key={rest.children}>\n <EditedContentRenderer {...rest}>\n {rest.children}\n </EditedContentRenderer>\n </ContentSelectorRenderer>\n ),\n }),\n};\n\n/** ---------------------------------------------\n * PREACT NODE PLUGIN\n * --------------------------------------------- */\n\nexport type PreactNodeCond<T> = T extends {\n props: any;\n key: any;\n}\n ? VNode\n : never;\n\n/** Translation plugin. Replaces node with a locale string if nodeType = Translation. */\nexport const preactNodePlugins: Plugins = {\n id: 'preact-node-plugin',\n canHandle: (node) =>\n typeof node === 'object' &&\n typeof node.props !== 'undefined' &&\n typeof node.key !== 'undefined',\n\n transform: (\n node,\n {\n plugins, // Removed to avoid next error - Functions cannot be passed directly to Client Components\n ...rest\n }\n ) =>\n renderIntlayerNode({\n ...rest,\n value: '[[preact-element]]',\n children: (\n <ContentSelectorRenderer {...rest}>\n {renderPreactElement(node)}\n </ContentSelectorRenderer>\n ),\n }),\n};\n\n/** ---------------------------------------------\n * INSERTION PLUGIN\n * --------------------------------------------- */\n\nexport type InsertionCond<T, _S, _L> = T extends {\n nodeType: NodeType | string;\n [NodeType.Insertion]: string;\n fields: readonly string[];\n}\n ? <V extends { [K in T['fields'][number]]: VNode }>(\n values: V\n ) => V[keyof V] extends string | number\n ? IntlayerNode<string>\n : IntlayerNode<VNode>\n : never;\n\n/**\n * Check if a value is a Preact VNode\n */\nconst isVNode = (value: any): value is VNode => {\n return (\n value !== null &&\n value !== undefined &&\n typeof value !== 'string' &&\n typeof value !== 'number' &&\n typeof value !== 'boolean'\n );\n};\n\n/**\n * Split insertion string and join with Preact VNodes\n */\nconst splitAndJoinInsertion = (\n template: string,\n values: Record<string, string | number | VNode>\n): VNode => {\n // Check if any value is a VNode\n const hasVNode = Object.values(values).some(isVNode);\n\n if (!hasVNode) {\n // Simple string replacement\n return template.replace(/\\{\\{\\s*(.*?)\\s*\\}\\}/g, (_, key) => {\n const trimmedKey = key.trim();\n return (values[trimmedKey] ?? '').toString();\n }) as any;\n }\n\n // Split the template by placeholders while keeping the structure\n const parts: (string | VNode)[] = [];\n let lastIndex = 0;\n const regex = /\\{\\{\\s*(.*?)\\s*\\}\\}/g;\n let match: RegExpExecArray | null = regex.exec(template);\n\n while (match !== null) {\n // Add text before the placeholder\n if (match.index > lastIndex) {\n parts.push(template.substring(lastIndex, match.index));\n }\n\n // Add the replaced value\n const key = match[1].trim();\n const value = values[key];\n if (value !== undefined && value !== null) {\n parts.push(typeof value === 'number' ? String(value) : value);\n }\n\n lastIndex = match.index + match[0].length;\n match = regex.exec(template);\n }\n\n // Add remaining text\n if (lastIndex < template.length) {\n parts.push(template.substring(lastIndex));\n }\n\n // Return as Fragment\n return h(\n Fragment,\n null,\n ...parts.map((part, index) => h(Fragment, { key: index }, part))\n );\n};\n\n/** Insertion plugin for Preact. Handles component/node insertion. */\nexport const insertionPlugin: Plugins = {\n id: 'insertion-plugin',\n canHandle: (node) =>\n typeof node === 'object' && node?.nodeType === NodeType.Insertion,\n transform: (node: InsertionContent, props, deepTransformNode) => {\n const newKeyPath: KeyPath[] = [\n ...props.keyPath,\n {\n type: NodeType.Insertion,\n },\n ];\n\n const children = node[NodeType.Insertion];\n\n /** Insertion string plugin. Replaces string node with a component that render the insertion. */\n const insertionStringPlugin: Plugins = {\n id: 'insertion-string-plugin',\n canHandle: (node) => typeof node === 'string',\n transform: (node: string, subProps, deepTransformNode) => {\n const transformedResult = deepTransformNode(node, {\n ...subProps,\n children: node,\n plugins: [\n ...(props.plugins ?? ([] as Plugins[])).filter(\n (plugin) => plugin.id !== 'intlayer-node-plugin'\n ),\n ],\n });\n\n return (\n values: {\n [K in InsertionContent['fields'][number]]: string | number | VNode;\n }\n ) => {\n const result = splitAndJoinInsertion(transformedResult, values);\n\n return deepTransformNode(result, {\n ...subProps,\n plugins: props.plugins,\n children: result as any,\n });\n };\n },\n };\n\n return deepTransformNode(children, {\n ...props,\n children,\n keyPath: newKeyPath,\n plugins: [insertionStringPlugin, ...(props.plugins ?? [])],\n });\n },\n};\n\n/**\n * MARKDOWN PLUGIN\n */\n\nexport type MarkdownStringCond<T> = T extends string\n ? IntlayerNode<\n string,\n {\n metadata: DeepTransformContent<string>;\n use: (components?: HTMLComponents<'permissive', {}>) => VNode;\n }\n >\n : never;\n\n/** Markdown string plugin. Replaces string node with a component that render the markdown. */\nexport const markdownStringPlugin: Plugins = {\n id: 'markdown-string-plugin',\n canHandle: (node) => typeof node === 'string',\n transform: (node: string, props, deepTransformNode) => {\n const {\n plugins, // Removed to avoid next error - Functions cannot be passed directly to Client Components\n ...rest\n } = props;\n\n const metadata = getMarkdownMetadata(node);\n\n const metadataPlugins: Plugins = {\n id: 'markdown-metadata-plugin',\n canHandle: (metadataNode) =>\n typeof metadataNode === 'string' ||\n typeof metadataNode === 'number' ||\n typeof metadataNode === 'boolean' ||\n !metadataNode,\n transform: (metadataNode, props) =>\n renderIntlayerNode({\n ...props,\n value: metadataNode,\n children: (\n <ContentSelectorRenderer {...rest}>\n <MarkdownMetadataRenderer\n {...rest}\n metadataKeyPath={props.keyPath}\n >\n {node}\n </MarkdownMetadataRenderer>\n </ContentSelectorRenderer>\n ),\n }),\n };\n\n // Transform metadata while keeping the same structure\n const metadataNodes = deepTransformNode(metadata, {\n plugins: [metadataPlugins],\n dictionaryKey: rest.dictionaryKey,\n keyPath: [],\n });\n\n const render = (components?: any) =>\n renderIntlayerNode({\n ...props,\n value: node,\n children: (\n <ContentSelectorRenderer {...rest}>\n <MarkdownRenderer {...rest} {...components}>\n {node}\n </MarkdownRenderer>\n </ContentSelectorRenderer>\n ),\n additionalProps: {\n metadata: metadataNodes,\n },\n });\n\n const element = render() as any;\n\n return new Proxy(element, {\n get(target, prop) {\n if (prop === 'value') {\n return node;\n }\n if (prop === 'metadata') {\n return metadataNodes;\n }\n\n if (prop === 'use') {\n return (components?: any) => render(components);\n }\n\n return Reflect.get(target, prop);\n },\n }) as any;\n },\n};\n\nexport type MarkdownCond<T> = T extends {\n nodeType: NodeType | string;\n [NodeType.Markdown]: infer M;\n metadata?: infer U;\n tags?: infer U;\n}\n ? {\n use: (components?: HTMLComponents<'permissive', U>) => VNode;\n metadata: DeepTransformContent<U>;\n }\n : never;\n\nexport const markdownPlugin: Plugins = {\n id: 'markdown-plugin',\n canHandle: (node) =>\n typeof node === 'object' && node?.nodeType === NodeType.Markdown,\n transform: (node: MarkdownContent, props, deepTransformNode) => {\n const newKeyPath: KeyPath[] = [\n ...props.keyPath,\n {\n type: NodeType.Markdown,\n },\n ];\n\n const children = node[NodeType.Markdown];\n\n return deepTransformNode(children, {\n ...props,\n children,\n keyPath: newKeyPath,\n plugins: [markdownStringPlugin, ...(props.plugins ?? [])],\n });\n },\n};\n\n/** ---------------------------------------------\n * HTML PLUGIN\n * --------------------------------------------- */\n\nexport type HTMLPluginCond<T> = T extends {\n nodeType: NodeType | string;\n [NodeType.HTML]: infer I;\n tags?: infer U;\n}\n ? {\n use: (components?: HTMLComponents<'permissive', U>) => IntlayerNode<I>;\n }\n : never;\n\n/** HTML plugin. Replaces node with a function that takes components => VNode. */\nexport const htmlPlugin: Plugins = {\n id: 'html-plugin',\n canHandle: (node) =>\n typeof node === 'object' && node?.nodeType === NodeType.HTML,\n transform: (node: HTMLContent<string>, props) => {\n const html = node[NodeType.HTML];\n const tags = node.tags ?? [];\n const { plugins, ...rest } = props;\n\n // Type-safe render function that accepts properly typed components\n const render = (userComponents?: HTMLComponents): VNode =>\n h(HTMLRenderer as any, { ...rest, html, userComponents } as any);\n\n const element = render() as any;\n\n const proxy = new Proxy(element, {\n get(target, prop) {\n if (prop === 'value') {\n return html;\n }\n\n if (prop === 'use') {\n return (userComponents?: HTMLComponents) => render(userComponents);\n }\n\n return Reflect.get(target, prop);\n },\n });\n\n return proxy;\n },\n};\n\n/** ---------------------------------------------\n * PLUGINS RESULT\n * --------------------------------------------- */\n\nexport interface IInterpreterPluginPreact<T, _S, _L extends LocalesValues> {\n preactNode: PreactNodeCond<T>;\n preactIntlayerNode: IntlayerNodeCond<T>;\n preactInsertion: InsertionCond<T>;\n preactMarkdown: MarkdownCond<T>;\n preactHtml: HTMLPluginCond<T>;\n}\n\n/**\n * Insert this type as param of `DeepTransformContent` to avoid `intlayer` package pollution.\n *\n * Otherwise the the `preact-intlayer` plugins will override the types of `intlayer` functions.\n */\nexport type IInterpreterPluginState = Omit<\n IInterpreterPluginStateCore,\n 'insertion' // Remove insertion type from core package\n> & {\n preactNode: true;\n preactIntlayerNode: true;\n preactInsertion: true;\n preactMarkdown: true;\n preactHtml: true;\n};\n\nexport type DeepTransformContent<\n T,\n L extends LocalesValues = DeclaredLocales,\n> = DeepTransformContentCore<T, IInterpreterPluginState, L>;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"plugins.cjs","names":["renderIntlayerNode","ContentSelectorRenderer","EditedContentRenderer","renderPreactElement","Fragment","NodeType","MarkdownMetadataRenderer","MarkdownRenderer","HTMLRenderer"],"sources":["../../src/plugins.tsx"],"sourcesContent":["import type {\n DeepTransformContent as DeepTransformContentCore,\n IInterpreterPluginState as IInterpreterPluginStateCore,\n Plugins,\n} from '@intlayer/core/interpreter';\nimport { getMarkdownMetadata } from '@intlayer/core/markdown';\nimport type {\n HTMLContent,\n InsertionContent,\n MarkdownContent,\n} from '@intlayer/core/transpiler';\nimport type { DeclaredLocales, KeyPath, LocalesValues } from '@intlayer/types';\nimport { NodeType } from '@intlayer/types';\nimport { Fragment, h, type VNode } from 'preact';\nimport { ContentSelectorRenderer } from './editor';\nimport { EditedContentRenderer } from './editor/useEditedContentRenderer';\nimport { HTMLRenderer } from './html/HTMLRenderer';\nimport type { HTMLComponents } from './html/types';\nimport { type IntlayerNode, renderIntlayerNode } from './IntlayerNode';\nimport { MarkdownMetadataRenderer, MarkdownRenderer } from './markdown';\nimport { renderPreactElement } from './preactElement/renderPreactElement';\n\n/** ---------------------------------------------\n * INTLAYER NODE PLUGIN\n * --------------------------------------------- */\n\nexport type IntlayerNodeCond<T> = T extends number | string\n ? IntlayerNode<T>\n : never;\n\n/** Translation plugin. Replaces node with a locale string if nodeType = Translation. */\nexport const intlayerNodePlugins: Plugins = {\n id: 'intlayer-node-plugin',\n canHandle: (node) =>\n typeof node === 'bigint' ||\n typeof node === 'string' ||\n typeof node === 'number',\n transform: (\n _node,\n {\n plugins, // Removed to avoid next error - Functions cannot be passed directly to Client Components\n ...rest\n }\n ) =>\n renderIntlayerNode({\n ...rest,\n value: rest.children,\n children: (\n <ContentSelectorRenderer {...rest} key={rest.children}>\n <EditedContentRenderer {...rest}>\n {rest.children}\n </EditedContentRenderer>\n </ContentSelectorRenderer>\n ),\n }),\n};\n\n/** ---------------------------------------------\n * PREACT NODE PLUGIN\n * --------------------------------------------- */\n\nexport type PreactNodeCond<T> = T extends {\n props: any;\n key: any;\n}\n ? VNode\n : never;\n\n/** Translation plugin. Replaces node with a locale string if nodeType = Translation. */\nexport const preactNodePlugins: Plugins = {\n id: 'preact-node-plugin',\n canHandle: (node) =>\n typeof node === 'object' &&\n typeof node.props !== 'undefined' &&\n typeof node.key !== 'undefined',\n\n transform: (\n node,\n {\n plugins, // Removed to avoid next error - Functions cannot be passed directly to Client Components\n ...rest\n }\n ) =>\n renderIntlayerNode({\n ...rest,\n value: '[[preact-element]]',\n children: (\n <ContentSelectorRenderer {...rest}>\n {renderPreactElement(node)}\n </ContentSelectorRenderer>\n ),\n }),\n};\n\n/** ---------------------------------------------\n * INSERTION PLUGIN\n * --------------------------------------------- */\n\nexport type InsertionCond<T, _S, _L> = T extends {\n nodeType: NodeType | string;\n [NodeType.Insertion]: string;\n fields: readonly string[];\n}\n ? <V extends { [K in T['fields'][number]]: VNode }>(\n values: V\n ) => V[keyof V] extends string | number\n ? IntlayerNode<string>\n : IntlayerNode<VNode>\n : never;\n\n/**\n * Check if a value is a Preact VNode\n */\nconst isVNode = (value: any): value is VNode => {\n return (\n value !== null &&\n value !== undefined &&\n typeof value !== 'string' &&\n typeof value !== 'number' &&\n typeof value !== 'boolean'\n );\n};\n\n/**\n * Split insertion string and join with Preact VNodes\n */\nconst splitAndJoinInsertion = (\n template: string,\n values: Record<string, string | number | VNode>\n): VNode => {\n // Check if any value is a VNode\n const hasVNode = Object.values(values).some(isVNode);\n\n if (!hasVNode) {\n // Simple string replacement\n return template.replace(/\\{\\{\\s*(.*?)\\s*\\}\\}/g, (_, key) => {\n const trimmedKey = key.trim();\n return (values[trimmedKey] ?? '').toString();\n }) as any;\n }\n\n // Split the template by placeholders while keeping the structure\n const parts: (string | VNode)[] = [];\n let lastIndex = 0;\n const regex = /\\{\\{\\s*(.*?)\\s*\\}\\}/g;\n let match: RegExpExecArray | null = regex.exec(template);\n\n while (match !== null) {\n // Add text before the placeholder\n if (match.index > lastIndex) {\n parts.push(template.substring(lastIndex, match.index));\n }\n\n // Add the replaced value\n const key = match[1].trim();\n const value = values[key];\n if (value !== undefined && value !== null) {\n parts.push(typeof value === 'number' ? String(value) : value);\n }\n\n lastIndex = match.index + match[0].length;\n match = regex.exec(template);\n }\n\n // Add remaining text\n if (lastIndex < template.length) {\n parts.push(template.substring(lastIndex));\n }\n\n // Return as Fragment\n return h(\n Fragment,\n null,\n ...parts.map((part, index) => h(Fragment, { key: index }, part))\n );\n};\n\n/** Insertion plugin for Preact. Handles component/node insertion. */\nexport const insertionPlugin: Plugins = {\n id: 'insertion-plugin',\n canHandle: (node) =>\n typeof node === 'object' && node?.nodeType === NodeType.Insertion,\n transform: (node: InsertionContent, props, deepTransformNode) => {\n const newKeyPath: KeyPath[] = [\n ...props.keyPath,\n {\n type: NodeType.Insertion,\n },\n ];\n\n const children = node[NodeType.Insertion];\n\n /** Insertion string plugin. Replaces string node with a component that render the insertion. */\n const insertionStringPlugin: Plugins = {\n id: 'insertion-string-plugin',\n canHandle: (node) => typeof node === 'string',\n transform: (node: string, subProps, deepTransformNode) => {\n const transformedResult = deepTransformNode(node, {\n ...subProps,\n children: node,\n plugins: [\n ...(props.plugins ?? ([] as Plugins[])).filter(\n (plugin) => plugin.id !== 'intlayer-node-plugin'\n ),\n ],\n });\n\n return (\n values: {\n [K in InsertionContent['fields'][number]]: string | number | VNode;\n }\n ) => {\n const result = splitAndJoinInsertion(transformedResult, values);\n\n return deepTransformNode(result, {\n ...subProps,\n plugins: props.plugins,\n children: result as any,\n });\n };\n },\n };\n\n return deepTransformNode(children, {\n ...props,\n children,\n keyPath: newKeyPath,\n plugins: [insertionStringPlugin, ...(props.plugins ?? [])],\n });\n },\n};\n\n/**\n * MARKDOWN PLUGIN\n */\n\nexport type MarkdownStringCond<T> = T extends string\n ? IntlayerNode<\n string,\n {\n metadata: DeepTransformContent<string>;\n use: (components?: HTMLComponents<'permissive', {}>) => VNode;\n }\n >\n : never;\n\n/** Markdown string plugin. Replaces string node with a component that render the markdown. */\nexport const markdownStringPlugin: Plugins = {\n id: 'markdown-string-plugin',\n canHandle: (node) => typeof node === 'string',\n transform: (node: string, props, deepTransformNode) => {\n const {\n plugins, // Removed to avoid next error - Functions cannot be passed directly to Client Components\n ...rest\n } = props;\n\n const metadata = getMarkdownMetadata(node);\n\n const metadataPlugins: Plugins = {\n id: 'markdown-metadata-plugin',\n canHandle: (metadataNode) =>\n typeof metadataNode === 'string' ||\n typeof metadataNode === 'number' ||\n typeof metadataNode === 'boolean' ||\n !metadataNode,\n transform: (metadataNode, props) =>\n renderIntlayerNode({\n ...props,\n value: metadataNode,\n children: (\n <ContentSelectorRenderer {...rest}>\n <MarkdownMetadataRenderer\n {...rest}\n metadataKeyPath={props.keyPath}\n >\n {node}\n </MarkdownMetadataRenderer>\n </ContentSelectorRenderer>\n ),\n }),\n };\n\n // Transform metadata while keeping the same structure\n const metadataNodes = deepTransformNode(metadata, {\n plugins: [metadataPlugins],\n dictionaryKey: rest.dictionaryKey,\n keyPath: [],\n });\n\n const render = (components?: any) =>\n renderIntlayerNode({\n ...props,\n value: node,\n children: (\n <ContentSelectorRenderer {...rest}>\n <MarkdownRenderer {...rest} {...components}>\n {node}\n </MarkdownRenderer>\n </ContentSelectorRenderer>\n ),\n additionalProps: {\n metadata: metadataNodes,\n },\n });\n\n const element = render() as any;\n\n return new Proxy(element, {\n get(target, prop) {\n if (prop === 'value') {\n return node;\n }\n if (prop === 'metadata') {\n return metadataNodes;\n }\n\n if (prop === 'use') {\n return (components?: any) => render(components);\n }\n\n return Reflect.get(target, prop);\n },\n }) as any;\n },\n};\n\nexport type MarkdownCond<T> = T extends {\n nodeType: NodeType | string;\n [NodeType.Markdown]: infer _M;\n metadata?: infer U;\n tags?: infer U;\n}\n ? {\n use: (components?: HTMLComponents<'permissive', U>) => VNode;\n metadata: DeepTransformContent<U>;\n }\n : never;\n\nexport const markdownPlugin: Plugins = {\n id: 'markdown-plugin',\n canHandle: (node) =>\n typeof node === 'object' && node?.nodeType === NodeType.Markdown,\n transform: (node: MarkdownContent, props, deepTransformNode) => {\n const newKeyPath: KeyPath[] = [\n ...props.keyPath,\n {\n type: NodeType.Markdown,\n },\n ];\n\n const children = node[NodeType.Markdown];\n\n return deepTransformNode(children, {\n ...props,\n children,\n keyPath: newKeyPath,\n plugins: [markdownStringPlugin, ...(props.plugins ?? [])],\n });\n },\n};\n\n/** ---------------------------------------------\n * HTML PLUGIN\n * --------------------------------------------- */\n\nexport type HTMLPluginCond<T> = T extends {\n nodeType: NodeType | string;\n [NodeType.HTML]: infer I;\n tags?: infer U;\n}\n ? {\n use: (components?: HTMLComponents<'permissive', U>) => IntlayerNode<I>;\n }\n : never;\n\n/** HTML plugin. Replaces node with a function that takes components => VNode. */\nexport const htmlPlugin: Plugins = {\n id: 'html-plugin',\n canHandle: (node) =>\n typeof node === 'object' && node?.nodeType === NodeType.HTML,\n transform: (node: HTMLContent<string>, props) => {\n const html = node[NodeType.HTML];\n const _tags = node.tags ?? [];\n const { plugins, ...rest } = props;\n\n // Type-safe render function that accepts properly typed components\n const render = (userComponents?: HTMLComponents): VNode =>\n h(HTMLRenderer as any, { ...rest, html, userComponents } as any);\n\n const element = render() as any;\n\n const proxy = new Proxy(element, {\n get(target, prop) {\n if (prop === 'value') {\n return html;\n }\n\n if (prop === 'use') {\n return (userComponents?: HTMLComponents) => render(userComponents);\n }\n\n return Reflect.get(target, prop);\n },\n });\n\n return proxy;\n },\n};\n\n/** ---------------------------------------------\n * PLUGINS RESULT\n * --------------------------------------------- */\n\nexport interface IInterpreterPluginPreact<T, _S, _L extends LocalesValues> {\n preactNode: PreactNodeCond<T>;\n preactIntlayerNode: IntlayerNodeCond<T>;\n preactInsertion: InsertionCond<T>;\n preactMarkdown: MarkdownCond<T>;\n preactHtml: HTMLPluginCond<T>;\n}\n\n/**\n * Insert this type as param of `DeepTransformContent` to avoid `intlayer` package pollution.\n *\n * Otherwise the the `preact-intlayer` plugins will override the types of `intlayer` functions.\n */\nexport type IInterpreterPluginState = Omit<\n IInterpreterPluginStateCore,\n 'insertion' // Remove insertion type from core package\n> & {\n preactNode: true;\n preactIntlayerNode: true;\n preactInsertion: true;\n preactMarkdown: true;\n preactHtml: true;\n};\n\nexport type DeepTransformContent<\n T,\n L extends LocalesValues = DeclaredLocales,\n> = DeepTransformContentCore<T, IInterpreterPluginState, L>;\n"],"mappings":"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"}
|
|
@@ -1,43 +1,2 @@
|
|
|
1
|
-
Object.defineProperty(exports,
|
|
2
|
-
const require_runtime = require('../_virtual/_rolldown/runtime.cjs');
|
|
3
|
-
let preact = require("preact");
|
|
4
|
-
|
|
5
|
-
//#region src/preactElement/renderPreactElement.ts
|
|
6
|
-
const renderPreactElement = (element) => {
|
|
7
|
-
if (element === null || typeof element !== "object") return element;
|
|
8
|
-
const convertChildrenAsArray = (element) => {
|
|
9
|
-
const children = element.props?.children;
|
|
10
|
-
if (Array.isArray(children)) {
|
|
11
|
-
const childrenResult = children.map((child) => renderPreactElement(child));
|
|
12
|
-
return {
|
|
13
|
-
...element,
|
|
14
|
-
props: {
|
|
15
|
-
...element.props,
|
|
16
|
-
children: childrenResult
|
|
17
|
-
}
|
|
18
|
-
};
|
|
19
|
-
} else if (typeof children !== "undefined" && children !== null) {
|
|
20
|
-
const renderedChild = renderPreactElement(children);
|
|
21
|
-
return {
|
|
22
|
-
...element,
|
|
23
|
-
props: {
|
|
24
|
-
...element.props,
|
|
25
|
-
children: [renderedChild]
|
|
26
|
-
}
|
|
27
|
-
};
|
|
28
|
-
}
|
|
29
|
-
return {
|
|
30
|
-
...element,
|
|
31
|
-
props: {
|
|
32
|
-
...element.props,
|
|
33
|
-
children: []
|
|
34
|
-
}
|
|
35
|
-
};
|
|
36
|
-
};
|
|
37
|
-
const { type, props } = convertChildrenAsArray(element);
|
|
38
|
-
return (0, preact.createElement)(type ?? "span", props, ...props.children);
|
|
39
|
-
};
|
|
40
|
-
|
|
41
|
-
//#endregion
|
|
42
|
-
exports.renderPreactElement = renderPreactElement;
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`../_virtual/_rolldown/runtime.cjs`);let e=require(`preact`);const t=n=>{if(typeof n!=`object`||!n)return n;let{type:r,props:i}=(e=>{let n=e.props?.children;if(Array.isArray(n)){let r=n.map(e=>t(e));return{...e,props:{...e.props,children:r}}}else if(n!=null){let r=t(n);return{...e,props:{...e.props,children:[r]}}}return{...e,props:{...e.props,children:[]}}})(n);return(0,e.createElement)(r??`span`,i,...i.children)};exports.renderPreactElement=t;
|
|
43
2
|
//# sourceMappingURL=renderPreactElement.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderPreactElement.cjs","names":[],"sources":["../../../src/preactElement/renderPreactElement.ts"],"sourcesContent":["import { type ComponentChild, createElement, type VNode } from 'preact';\n\n// This function recursively creates Preact elements from a given JSON-like structure\nexport const renderPreactElement = (element: VNode<any>): any => {\n if (element === null || typeof element !== 'object') {\n return element;\n }\n\n const convertChildrenAsArray = (\n element: VNode<{ children?: ComponentChild | ComponentChild[] }>\n ): VNode<{ children?: ComponentChild | ComponentChild[] }> => {\n const children = element.props?.children;\n\n if (Array.isArray(children)) {\n const childrenResult: ComponentChild[] = children.map((child) =>\n renderPreactElement(child as VNode<any>)\n );\n\n return {\n ...element,\n props: { ...element.props, children: childrenResult },\n };\n } else if (typeof children !== 'undefined' && children !== null) {\n const renderedChild = renderPreactElement(children as VNode<any>);\n return {\n ...element,\n props: { ...element.props, children: [renderedChild] },\n };\n }\n\n return {\n ...element,\n props: { ...element.props, children: [] },\n };\n };\n\n const fixedElement = convertChildrenAsArray(\n element as VNode<{ children?: ComponentChild | ComponentChild[] }>\n );\n\n const { type, props } = fixedElement;\n\n // Create and return the Preact element\n return createElement(\n (type as any) ?? 'span',\n props as any,\n ...(props.children as ComponentChild[])\n );\n};\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"renderPreactElement.cjs","names":[],"sources":["../../../src/preactElement/renderPreactElement.ts"],"sourcesContent":["import { type ComponentChild, createElement, type VNode } from 'preact';\n\n// This function recursively creates Preact elements from a given JSON-like structure\nexport const renderPreactElement = (element: VNode<any>): any => {\n if (element === null || typeof element !== 'object') {\n return element;\n }\n\n const convertChildrenAsArray = (\n element: VNode<{ children?: ComponentChild | ComponentChild[] }>\n ): VNode<{ children?: ComponentChild | ComponentChild[] }> => {\n const children = element.props?.children;\n\n if (Array.isArray(children)) {\n const childrenResult: ComponentChild[] = children.map((child) =>\n renderPreactElement(child as VNode<any>)\n );\n\n return {\n ...element,\n props: { ...element.props, children: childrenResult },\n };\n } else if (typeof children !== 'undefined' && children !== null) {\n const renderedChild = renderPreactElement(children as VNode<any>);\n return {\n ...element,\n props: { ...element.props, children: [renderedChild] },\n };\n }\n\n return {\n ...element,\n props: { ...element.props, children: [] },\n };\n };\n\n const fixedElement = convertChildrenAsArray(\n element as VNode<{ children?: ComponentChild | ComponentChild[] }>\n );\n\n const { type, props } = fixedElement;\n\n // Create and return the Preact element\n return createElement(\n (type as any) ?? 'span',\n props as any,\n ...(props.children as ComponentChild[])\n );\n};\n"],"mappings":"wIAGA,MAAa,EAAuB,GAA6B,CAC/D,GAAwB,OAAO,GAAY,WAAvC,EACF,OAAO,EAmCT,GAAM,CAAE,OAAM,UA/BZ,GAC4D,CAC5D,IAAM,EAAW,EAAQ,OAAO,SAEhC,GAAI,MAAM,QAAQ,EAAS,CAAE,CAC3B,IAAM,EAAmC,EAAS,IAAK,GACrD,EAAoB,EAAoB,CACzC,CAED,MAAO,CACL,GAAG,EACH,MAAO,CAAE,GAAG,EAAQ,MAAO,SAAU,EAAgB,CACtD,SACe,GAAyC,KAAM,CAC/D,IAAM,EAAgB,EAAoB,EAAuB,CACjE,MAAO,CACL,GAAG,EACH,MAAO,CAAE,GAAG,EAAQ,MAAO,SAAU,CAAC,EAAc,CAAE,CACvD,CAGH,MAAO,CACL,GAAG,EACH,MAAO,CAAE,GAAG,EAAQ,MAAO,SAAU,EAAE,CAAE,CAC1C,GAID,EACD,CAKD,OAAA,EAAA,EAAA,eACG,GAAgB,OACjB,EACA,GAAI,EAAM,SACX"}
|
|
@@ -1,15 +1,2 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
//#region src/IntlayerNode.tsx
|
|
4
|
-
const renderIntlayerNode = ({ children, value, additionalProps }) => {
|
|
5
|
-
const element = isValidElement(children) ? children : h(Fragment, {}, children);
|
|
6
|
-
return new Proxy(element, { get(target, prop, receiver) {
|
|
7
|
-
if (prop === "value") return value;
|
|
8
|
-
if (additionalProps && Object.keys(additionalProps).includes(prop)) return additionalProps[prop];
|
|
9
|
-
return Reflect.get(target, prop, receiver);
|
|
10
|
-
} });
|
|
11
|
-
};
|
|
12
|
-
|
|
13
|
-
//#endregion
|
|
14
|
-
export { renderIntlayerNode };
|
|
1
|
+
import{Fragment as e,h as t,isValidElement as n}from"preact";const r=({children:r,value:i,additionalProps:a})=>{let o=n(r)?r:t(e,{},r);return new Proxy(o,{get(e,t,n){return t===`value`?i:a&&Object.keys(a).includes(t)?a[t]:Reflect.get(e,t,n)}})};export{r as renderIntlayerNode};
|
|
15
2
|
//# sourceMappingURL=IntlayerNode.mjs.map
|