vanilla-intlayer 9.7.0 → 9.7.2
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/_virtual/_rolldown/runtime.cjs +1 -2
- package/dist/cjs/client/index.cjs +8 -8
- package/dist/cjs/client/installIntlayer.cjs +3 -4
- package/dist/cjs/client/useDictionary.cjs +3 -4
- package/dist/cjs/client/useDictionary.cjs.map +1 -1
- package/dist/cjs/client/useDictionaryDynamic.cjs +4 -5
- package/dist/cjs/client/useIntlayer.cjs +3 -4
- package/dist/cjs/client/useLocale.cjs +3 -4
- package/dist/cjs/client/useLocaleStorage.cjs +1 -2
- package/dist/cjs/client/usePathname.cjs +1 -2
- package/dist/cjs/client/useRewriteURL.cjs +2 -3
- package/dist/cjs/editor/useEditor.cjs +3 -4
- package/dist/cjs/format/index.cjs +9 -9
- package/dist/cjs/format/useCompact.cjs +2 -3
- package/dist/cjs/format/useCurrency.cjs +2 -3
- package/dist/cjs/format/useDate.cjs +2 -3
- package/dist/cjs/format/useIntl.cjs +2 -3
- package/dist/cjs/format/useList.cjs +2 -3
- package/dist/cjs/format/useNumber.cjs +2 -3
- package/dist/cjs/format/usePercentage.cjs +2 -3
- package/dist/cjs/format/useRelativeTime.cjs +2 -3
- package/dist/cjs/format/useUnit.cjs +2 -3
- package/dist/cjs/getDictionary.cjs +2 -3
- package/dist/cjs/getDictionary.cjs.map +1 -1
- package/dist/cjs/getIntlayer.cjs +2 -3
- package/dist/cjs/html/HTMLRenderer.cjs +2 -3
- package/dist/cjs/html/HTMLRenderer.cjs.map +1 -1
- package/dist/cjs/html/index.cjs +2 -2
- package/dist/cjs/html/installIntlayerHTML.cjs +1 -2
- package/dist/cjs/index.cjs +12 -12
- package/dist/cjs/markdown/MarkdownRenderer.cjs +3 -4
- package/dist/cjs/markdown/compiler.cjs +2 -3
- package/dist/cjs/markdown/index.cjs +3 -3
- package/dist/cjs/markdown/installIntlayerMarkdown.cjs +2 -3
- package/dist/cjs/markdown/runtime.cjs +1 -2
- package/dist/cjs/plugins.cjs +4 -5
- package/dist/cjs/plugins.cjs.map +1 -1
- package/dist/cjs/renderIntlayerNode.cjs +1 -2
- package/dist/esm/client/index.mjs +1 -1
- package/dist/esm/client/installIntlayer.mjs +2 -3
- package/dist/esm/client/useDictionary.mjs +1 -2
- package/dist/esm/client/useDictionary.mjs.map +1 -1
- package/dist/esm/client/useDictionaryDynamic.mjs +2 -3
- package/dist/esm/client/useIntlayer.mjs +1 -2
- package/dist/esm/client/useLocale.mjs +2 -3
- package/dist/esm/client/useLocaleStorage.mjs +1 -2
- package/dist/esm/client/usePathname.mjs +1 -2
- package/dist/esm/client/useRewriteURL.mjs +1 -2
- package/dist/esm/editor/useEditor.mjs +2 -3
- package/dist/esm/format/index.mjs +5 -5
- package/dist/esm/format/useCompact.mjs +1 -2
- package/dist/esm/format/useCurrency.mjs +1 -2
- package/dist/esm/format/useDate.mjs +1 -2
- package/dist/esm/format/useIntl.mjs +1 -2
- package/dist/esm/format/useList.mjs +1 -2
- package/dist/esm/format/useNumber.mjs +1 -2
- package/dist/esm/format/usePercentage.mjs +1 -2
- package/dist/esm/format/useRelativeTime.mjs +1 -2
- package/dist/esm/format/useUnit.mjs +1 -2
- package/dist/esm/getDictionary.mjs +1 -2
- package/dist/esm/getDictionary.mjs.map +1 -1
- package/dist/esm/getIntlayer.mjs +1 -2
- package/dist/esm/html/HTMLRenderer.mjs +1 -2
- package/dist/esm/html/HTMLRenderer.mjs.map +1 -1
- package/dist/esm/html/index.mjs +1 -1
- package/dist/esm/html/installIntlayerHTML.mjs +1 -2
- package/dist/esm/index.mjs +3 -3
- package/dist/esm/markdown/MarkdownRenderer.mjs +1 -2
- package/dist/esm/markdown/compiler.mjs +1 -2
- package/dist/esm/markdown/installIntlayerMarkdown.mjs +1 -2
- package/dist/esm/markdown/runtime.mjs +1 -2
- package/dist/esm/plugins.mjs +2 -3
- package/dist/esm/plugins.mjs.map +1 -1
- package/dist/esm/renderIntlayerNode.mjs +1 -2
- package/dist/types/client/installIntlayer.d.ts +1 -2
- package/dist/types/client/installIntlayer.d.ts.map +1 -1
- package/dist/types/client/useDictionary.d.ts +0 -2
- package/dist/types/client/useDictionary.d.ts.map +1 -1
- package/dist/types/client/useDictionaryDynamic.d.ts +0 -2
- package/dist/types/client/useDictionaryDynamic.d.ts.map +1 -1
- package/dist/types/client/useIntlayer.d.ts +0 -2
- package/dist/types/client/useIntlayer.d.ts.map +1 -1
- package/dist/types/client/useLocale.d.ts +0 -2
- package/dist/types/client/useLocale.d.ts.map +1 -1
- package/dist/types/client/useLocaleStorage.d.ts +0 -2
- package/dist/types/client/useLocaleStorage.d.ts.map +1 -1
- package/dist/types/client/usePathname.d.ts +0 -2
- package/dist/types/client/usePathname.d.ts.map +1 -1
- package/dist/types/client/useRewriteURL.d.ts +0 -2
- package/dist/types/client/useRewriteURL.d.ts.map +1 -1
- package/dist/types/editor/useEditor.d.ts +0 -2
- package/dist/types/editor/useEditor.d.ts.map +1 -1
- package/dist/types/format/useCompact.d.ts +0 -2
- package/dist/types/format/useCompact.d.ts.map +1 -1
- package/dist/types/format/useCurrency.d.ts +0 -2
- package/dist/types/format/useCurrency.d.ts.map +1 -1
- package/dist/types/format/useDate.d.ts +0 -2
- package/dist/types/format/useDate.d.ts.map +1 -1
- package/dist/types/format/useIntl.d.ts +0 -2
- package/dist/types/format/useIntl.d.ts.map +1 -1
- package/dist/types/format/useList.d.ts +0 -2
- package/dist/types/format/useList.d.ts.map +1 -1
- package/dist/types/format/useNumber.d.ts +0 -2
- package/dist/types/format/useNumber.d.ts.map +1 -1
- package/dist/types/format/usePercentage.d.ts +0 -2
- package/dist/types/format/usePercentage.d.ts.map +1 -1
- package/dist/types/format/useRelativeTime.d.ts +0 -2
- package/dist/types/format/useRelativeTime.d.ts.map +1 -1
- package/dist/types/format/useUnit.d.ts +0 -2
- package/dist/types/format/useUnit.d.ts.map +1 -1
- package/dist/types/getDictionary.d.ts +0 -2
- package/dist/types/getDictionary.d.ts.map +1 -1
- package/dist/types/getIntlayer.d.ts +0 -2
- package/dist/types/getIntlayer.d.ts.map +1 -1
- package/dist/types/html/HTMLRenderer.d.ts +0 -2
- package/dist/types/html/HTMLRenderer.d.ts.map +1 -1
- package/dist/types/html/index.d.ts +1 -1
- package/dist/types/html/installIntlayerHTML.d.ts +0 -2
- package/dist/types/html/installIntlayerHTML.d.ts.map +1 -1
- package/dist/types/html/types.d.ts +1 -2
- package/dist/types/html/types.d.ts.map +1 -1
- package/dist/types/index.d.ts +1 -3
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/markdown/MarkdownRenderer.d.ts +0 -2
- package/dist/types/markdown/MarkdownRenderer.d.ts.map +1 -1
- package/dist/types/markdown/compiler.d.ts +6 -2
- package/dist/types/markdown/compiler.d.ts.map +1 -1
- package/dist/types/markdown/installIntlayerMarkdown.d.ts +0 -2
- package/dist/types/markdown/installIntlayerMarkdown.d.ts.map +1 -1
- package/dist/types/markdown/runtime.d.ts +6 -2
- package/dist/types/markdown/runtime.d.ts.map +1 -1
- package/dist/types/plugins.d.ts +0 -2
- package/dist/types/plugins.d.ts.map +1 -1
- package/dist/types/renderIntlayerNode.d.ts +1 -2
- package/dist/types/renderIntlayerNode.d.ts.map +1 -1
- package/package.json +48 -48
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
|
-
const require_markdown_compiler = require(
|
|
2
|
+
const require_markdown_compiler = require("./compiler.cjs");
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
// src/markdown/installIntlayerMarkdown.ts
|
|
5
5
|
/**
|
|
6
6
|
* Singleton instance
|
|
7
7
|
*/
|
|
@@ -91,7 +91,6 @@ const installIntlayerMarkdownDynamic = async (loader) => {
|
|
|
91
91
|
return installIntlayerMarkdown(pluginOptions);
|
|
92
92
|
};
|
|
93
93
|
|
|
94
|
-
//#endregion
|
|
95
94
|
exports.createIntlayerMarkdownClient = createIntlayerMarkdownClient;
|
|
96
95
|
exports.installIntlayerMarkdown = installIntlayerMarkdown;
|
|
97
96
|
exports.installIntlayerMarkdownDynamic = installIntlayerMarkdownDynamic;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: 'Module' } });
|
|
2
|
-
|
|
2
|
+
// src/markdown/runtime.ts
|
|
3
3
|
const SELF_CLOSING_TAGS = /* @__PURE__ */ new Set([
|
|
4
4
|
"area",
|
|
5
5
|
"base",
|
|
@@ -79,7 +79,6 @@ const createVanillaRuntime = (options = {}) => {
|
|
|
79
79
|
return vanillaRuntime;
|
|
80
80
|
};
|
|
81
81
|
|
|
82
|
-
//#endregion
|
|
83
82
|
exports.createVanillaRuntime = createVanillaRuntime;
|
|
84
83
|
exports.default = vanillaRuntime;
|
|
85
84
|
exports.vanillaRuntime = vanillaRuntime;
|
package/dist/cjs/plugins.cjs
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
|
-
const require_runtime = require(
|
|
3
|
-
const require_renderIntlayerNode = require(
|
|
4
|
-
let _intlayer_core_interpreter = require("@intlayer/core/interpreter");
|
|
2
|
+
const require_runtime = require("./_virtual/_rolldown/runtime.cjs");
|
|
3
|
+
const require_renderIntlayerNode = require("./renderIntlayerNode.cjs");
|
|
5
4
|
let _intlayer_config_built = require("@intlayer/config/built");
|
|
5
|
+
let _intlayer_core_interpreter = require("@intlayer/core/interpreter");
|
|
6
6
|
let _intlayer_core_markdown = require("@intlayer/core/markdown");
|
|
7
7
|
let _intlayer_types_nodeType = require("@intlayer/types/nodeType");
|
|
8
8
|
_intlayer_types_nodeType = require_runtime.__toESM(_intlayer_types_nodeType);
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
// src/plugins.ts
|
|
11
11
|
const escapeHtmlAttr = (str) => str.replace(/&/g, "&").replace(/"/g, """);
|
|
12
12
|
const escapeHtmlText = (str) => str.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">");
|
|
13
13
|
const intlayerNodePlugins = {
|
|
@@ -228,7 +228,6 @@ const getPlugins = (locale, fallback = true) => {
|
|
|
228
228
|
return enabledPlugins;
|
|
229
229
|
};
|
|
230
230
|
|
|
231
|
-
//#endregion
|
|
232
231
|
exports.getPlugins = getPlugins;
|
|
233
232
|
exports.htmlPlugin = htmlPlugin;
|
|
234
233
|
exports.insertionPlugin = insertionPlugin;
|
package/dist/cjs/plugins.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugins.cjs","names":["editor","renderIntlayerNode","fallbackPlugin","NodeTypes","isInterpolableWrapperNode","transformInterpolableNode","splitInsertionTemplate","resolveInsertedSelector","getMarkdownMetadata","compileWithOptions","getHTML","resolveInterpreterLocale","translationPlugin","internationalization","enumerationPlugin","pluralPlugin","conditionPlugin","nestedPlugin","filePlugin","genderPlugin","selectPlugin"],"sources":["../../src/plugins.ts"],"sourcesContent":["import { editor, internationalization } from '@intlayer/config/built';\nimport {\n conditionPlugin,\n type DeepTransformContent as DeepTransformContentCore,\n enumerationPlugin,\n fallbackPlugin,\n filePlugin,\n genderPlugin,\n getHTML,\n type IInterpreterPluginState as IInterpreterPluginStateCore,\n isInterpolableWrapperNode,\n nestedPlugin,\n type Plugins,\n pluralPlugin,\n resolveInsertedSelector,\n resolveInterpreterLocale,\n selectPlugin,\n splitInsertionTemplate,\n transformInterpolableNode,\n translationPlugin,\n} from '@intlayer/core/interpreter';\nimport {\n compileWithOptions,\n getMarkdownMetadata,\n} from '@intlayer/core/markdown';\nimport type {\n HTMLContent,\n InsertionContent,\n MarkdownContent,\n} from '@intlayer/core/transpiler';\nimport type { KeyPath } from '@intlayer/types/keyPath';\nimport type {\n DeclaredLocales,\n LocalesValues,\n} from '@intlayer/types/module_augmentation';\nimport type { NodeType } from '@intlayer/types/nodeType';\nimport * as NodeTypes from '@intlayer/types/nodeType';\nimport type { HTMLComponents } from './html/types';\nimport {\n type IntlayerNode as IntlayerNodeCore,\n renderIntlayerNode,\n} from './renderIntlayerNode';\n\n/** ---------------------------------------------\n * INTLAYER NODE PLUGIN\n * --------------------------------------------- */\n\nexport type IntlayerNodeCond<T> = T extends number | string\n ? IntlayerNode<T>\n : never;\n\nexport type IntlayerNode<T, P = {}> = IntlayerNodeCore<T> & P;\n\nconst escapeHtmlAttr = (str: string): string =>\n str.replace(/&/g, '&').replace(/\"/g, '"');\n\nconst escapeHtmlText = (str: string): string =>\n str.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');\n\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: (_node, { children, keyPath, dictionaryKey }) => {\n if (process.env.INTLAYER_EDITOR_ENABLED !== 'false' && editor.enabled) {\n const rawStr = String(children ?? '');\n const keyPathJson = JSON.stringify(keyPath ?? []);\n const dictKey = String(dictionaryKey ?? '');\n\n /**\n * In editor mode, string coercion returns the wrapper HTML so that\n * `element.innerHTML = content.title` automatically inserts the\n * `<intlayer-content-selector-wrapper>` into the DOM.\n */\n const htmlStr = `<intlayer-content-selector-wrapper key-path=\"${escapeHtmlAttr(keyPathJson)}\" dictionary-key=\"${escapeHtmlAttr(dictKey)}\">${escapeHtmlText(rawStr)}</intlayer-content-selector-wrapper>`;\n\n return renderIntlayerNode({\n value: children as string,\n children: htmlStr,\n keyPath,\n dictionaryKey,\n additionalProps: {\n toElement: (): HTMLElement => {\n const wrapper = document.createElement(\n 'intlayer-content-selector-wrapper'\n );\n wrapper.setAttribute('key-path', keyPathJson);\n wrapper.setAttribute('dictionary-key', dictKey);\n wrapper.textContent = rawStr;\n return wrapper;\n },\n },\n });\n }\n\n return renderIntlayerNode({\n value: children as string,\n children,\n });\n },\n};\n\n/** ---------------------------------------------\n * INSERTION PLUGIN\n * --------------------------------------------- */\n\nexport type InsertionCond<T, _S, L extends LocalesValues> = T extends {\n nodeType: NodeType | string;\n [NodeTypes.INSERTION]: infer I;\n fields: readonly (infer F)[];\n}\n ? <V extends { [K in Extract<F, string>]: string | number }>(\n values: V\n ) => I extends string ? IntlayerNode<string> : DeepTransformContent<I, L>\n : never;\n\nexport const insertionPlugin: Plugins =\n process.env.INTLAYER_NODE_TYPE_INSERTION === 'false'\n ? fallbackPlugin\n : {\n id: 'insertion-plugin',\n canHandle: (node) =>\n typeof node === 'object' && node?.nodeType === NodeTypes.INSERTION,\n transform: (node: InsertionContent, props, deepTransformNode) => {\n const newKeyPath: KeyPath[] = [\n ...props.keyPath,\n { type: NodeTypes.INSERTION },\n ];\n\n const children = node[NodeTypes.INSERTION];\n\n const insertionStringPlugin: Plugins = {\n id: 'insertion-string-plugin',\n canHandle: (node) =>\n typeof node === 'string' || isInterpolableWrapperNode(node),\n transform: (node, subProps, deepTransformNode) => {\n // `html()`/`markdown()` nodes carry their `{{ … }}` placeholders\n // inside a raw string. Interpolate into that string, then re-run\n // the transform so the html/markdown renderer applies afterwards.\n if (isInterpolableWrapperNode(node)) {\n return (\n values: {\n [K in InsertionContent['fields'][number]]: string | number;\n }\n ) =>\n transformInterpolableNode(\n node,\n values,\n subProps,\n props.plugins,\n deepTransformNode\n );\n }\n\n const transformedResult = deepTransformNode(node, {\n ...subProps,\n children: node,\n plugins: (props.plugins ?? ([] as Plugins[])).filter(\n (plugin) => plugin.id !== 'intlayer-node-plugin'\n ),\n });\n\n return (\n values: {\n [K in InsertionContent['fields'][number]]: string | number;\n }\n ) => {\n const result = splitInsertionTemplate(\n transformedResult,\n values\n );\n const resultStr = result.isSimple\n ? (result.parts as string)\n : (result.parts as string[]).join('');\n\n return deepTransformNode(resultStr, {\n ...subProps,\n plugins: props.plugins,\n children: resultStr,\n });\n };\n },\n };\n\n const transformed = deepTransformNode(children, {\n ...props,\n children,\n keyPath: newKeyPath,\n plugins: [insertionStringPlugin, ...(props.plugins ?? [])],\n });\n\n return resolveInsertedSelector(children, transformed);\n },\n };\n\n/** ---------------------------------------------\n * MARKDOWN PLUGIN\n * --------------------------------------------- */\n\nconst vanillaRuntime = {\n createElement: (tag: string, props: any, ...children: any[]) => {\n const attrs = Object.entries(props || {})\n .filter(\n ([key]) => key !== 'children' && key !== 'key' && key !== '_innerHTML'\n )\n .map(([key, value]) => `${key}=\"${value}\"`)\n .join(' ');\n const innerHTML = props?._innerHTML;\n const childrenStr =\n innerHTML !== undefined ? innerHTML : children.flat(Infinity).join('');\n return `<${tag}${attrs ? ` ${attrs}` : ''}>${childrenStr}</${tag}>`;\n },\n normalizeProps: (_tag: string, props: Record<string, any>) => {\n const normalized: Record<string, any> = {};\n for (const [key, value] of Object.entries(props)) {\n if (key === 'className') {\n normalized.class = value;\n } else if (key === 'htmlFor') {\n normalized.for = value;\n } else if (key === 'dangerouslySetInnerHTML' && (value as any)?.__html) {\n normalized._innerHTML = (value as any).__html;\n } else {\n normalized[key] = value;\n }\n }\n return normalized;\n },\n};\n\nexport type MarkdownStringCond<T> = T extends string\n ? IntlayerNode<\n string,\n {\n metadata: DeepTransformContent<string>;\n /** Returns the rendered markdown; render with .use(). */\n use: (components?: HTMLComponents<'permissive', {}>) => string;\n }\n >\n : never;\n\nexport const markdownStringPlugin: Plugins =\n process.env.INTLAYER_NODE_TYPE_MARKDOWN === 'false'\n ? fallbackPlugin\n : {\n id: 'markdown-string-plugin',\n canHandle: (node) => typeof node === 'string',\n transform: (node: string, props, deepTransformNode) => {\n const { plugins: _plugins, ...rest } = props;\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, subProps) =>\n renderIntlayerNode({\n ...subProps,\n value: metadataNode,\n children: node,\n }),\n };\n\n const metadataNodes = deepTransformNode(metadata, {\n plugins: [metadataPlugins],\n dictionaryKey: rest.dictionaryKey,\n keyPath: [],\n });\n\n const compile = (components: any = {}) =>\n compileWithOptions(\n node,\n {\n ...vanillaRuntime,\n createElement: (tag: any, props: any, ...children: any[]) => {\n const override = components[tag];\n if (typeof override === 'function') {\n return override({ ...props, children: children.join('') });\n }\n return vanillaRuntime.createElement(tag, props, ...children);\n },\n },\n {}\n ) as any;\n\n const value = compile();\n let children = node;\n\n if (\n process.env.INTLAYER_EDITOR_ENABLED !== 'false' &&\n editor.enabled\n ) {\n const keyPathJson = JSON.stringify(props.keyPath ?? []);\n const dictKey = String(props.dictionaryKey ?? '');\n children = `<intlayer-content-selector-wrapper key-path=\"${escapeHtmlAttr(keyPathJson)}\" dictionary-key=\"${escapeHtmlAttr(dictKey)}\">${escapeHtmlText(value)}</intlayer-content-selector-wrapper>`;\n }\n\n return renderIntlayerNode({\n ...props,\n value,\n children,\n additionalProps: {\n metadata: metadataNodes,\n use: (components?: any) => compile(components),\n },\n }) as any;\n },\n };\n\nexport type MarkdownCond<T> = T extends {\n nodeType: NodeType | string;\n [NodeTypes.MARKDOWN]: infer M;\n metadata?: infer U;\n tags?: infer U;\n}\n ? {\n use: (components?: HTMLComponents<'permissive', U>) => IntlayerNode<M>;\n metadata: DeepTransformContent<U>;\n }\n : never;\n\nexport const markdownPlugin: Plugins =\n process.env.INTLAYER_NODE_TYPE_MARKDOWN === 'false'\n ? fallbackPlugin\n : {\n id: 'markdown-plugin',\n canHandle: (node) =>\n typeof node === 'object' && node?.nodeType === NodeTypes.MARKDOWN,\n transform: (node: MarkdownContent, props, deepTransformNode) => {\n const newKeyPath: KeyPath[] = [\n ...props.keyPath,\n { type: NodeTypes.MARKDOWN },\n ];\n const children = node[NodeTypes.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 [NodeTypes.HTML]: infer I;\n tags?: infer U;\n}\n ? {\n use: (components?: HTMLComponents<'permissive', U>) => IntlayerNode<I>;\n }\n : never;\n\nexport const htmlPlugin: Plugins =\n process.env.INTLAYER_NODE_TYPE_HTML === 'false'\n ? fallbackPlugin\n : {\n id: 'html-plugin',\n canHandle: (node) =>\n typeof node === 'object' && node?.nodeType === NodeTypes.HTML,\n transform: (node: HTMLContent<string>, props) => {\n const htmlStr = node[NodeTypes.HTML];\n\n const use = (components: Record<string, any> = {}) => {\n const wrappedComponents = new Proxy(components, {\n get(target, prop) {\n if (typeof prop === 'string' && prop in target) {\n const Component = target[prop];\n return (props: any) => {\n const children = Array.isArray(props.children)\n ? props.children.join('')\n : props.children;\n return Component({ ...props, children });\n };\n }\n if (typeof prop === 'string' && /^[a-z][a-z0-9]*$/.test(prop)) {\n return (props: any) => {\n const attrs = Object.entries(props)\n .filter(([key]) => key !== 'children' && key !== 'key')\n .map(([key, value]) => `${key}=\"${value}\"`)\n .join(' ');\n const children = Array.isArray(props.children)\n ? props.children.join('')\n : props.children;\n return `<${prop}${attrs ? ` ${attrs}` : ''}>${children}</${prop}>`;\n };\n }\n return undefined;\n },\n });\n\n const result = getHTML(htmlStr, wrappedComponents as any);\n return Array.isArray(result) ? result.join('') : result;\n };\n\n const value = use();\n let children = htmlStr;\n\n if (\n process.env.INTLAYER_EDITOR_ENABLED !== 'false' &&\n editor.enabled\n ) {\n const keyPathJson = JSON.stringify(props.keyPath ?? []);\n const dictKey = String(props.dictionaryKey ?? '');\n children = `<intlayer-content-selector-wrapper key-path=\"${escapeHtmlAttr(keyPathJson)}\" dictionary-key=\"${escapeHtmlAttr(dictKey)}\">${escapeHtmlText(value)}</intlayer-content-selector-wrapper>`;\n }\n\n return renderIntlayerNode({\n ...props,\n value,\n children,\n additionalProps: {\n use: (components?: any) => use(components),\n },\n });\n },\n };\n\n/** ---------------------------------------------\n * PLUGINS RESULT\n * --------------------------------------------- */\n\nexport interface IInterpreterPluginVanilla<T, S, L extends LocalesValues> {\n vanillaIntlayerNode: IntlayerNodeCond<T>;\n vanillaInsertion: InsertionCond<T, S, L>;\n vanillaMarkdown: MarkdownCond<T>;\n vanillaHtml: HTMLPluginCond<T>;\n}\n\n/**\n * Insert this type as param of `DeepTransformContent` to avoid `intlayer` package pollution.\n *\n * Otherwise the `vanilla-intlayer` plugins will override the types of `intlayer` functions.\n * Use `getIntlayer` from `vanilla-intlayer` (not from `intlayer`) to get properly typed\n * `IntlayerNode` wrappers with `.value` access on string/number content.\n */\nexport type IInterpreterPluginState = Omit<\n IInterpreterPluginStateCore,\n 'insertion'\n> & {\n vanillaIntlayerNode: true;\n vanillaInsertion: true;\n vanillaMarkdown: true;\n vanillaHtml: true;\n};\n\nexport type DeepTransformContent<\n T,\n L extends LocalesValues = DeclaredLocales,\n> = DeepTransformContentCore<T, IInterpreterPluginState, L>;\n\nconst pluginsCache = new Map<string, Plugins[]>();\n\n/**\n * Get the plugins array for Vanilla content transformation.\n * This function is used by both getIntlayer and getDictionary to ensure consistent plugin configuration.\n */\nexport const getPlugins = (\n locale?: LocalesValues,\n fallback = true\n): Plugins[] => {\n const currentLocale = resolveInterpreterLocale(locale);\n const cacheKey = `${currentLocale}_${fallback}`;\n\n if (pluginsCache.has(cacheKey)) {\n return pluginsCache.get(cacheKey)!;\n }\n\n const plugins = [\n // First: most nodes are plain strings, which every other plugin rejects\n intlayerNodePlugins,\n translationPlugin(\n currentLocale,\n fallback ? internationalization.defaultLocale : undefined\n ),\n enumerationPlugin,\n pluralPlugin(currentLocale),\n conditionPlugin,\n nestedPlugin(currentLocale),\n filePlugin,\n genderPlugin,\n selectPlugin,\n insertionPlugin,\n markdownPlugin,\n htmlPlugin,\n ] as Plugins[];\n\n // Plugins disabled at build time never match: skip them on every node\n const enabledPlugins = plugins.filter((plugin) => plugin !== fallbackPlugin);\n\n pluginsCache.set(cacheKey, enabledPlugins);\n\n return enabledPlugins;\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"plugins.cjs","names":["editor","renderIntlayerNode","fallbackPlugin","NodeTypes","isInterpolableWrapperNode","transformInterpolableNode","splitInsertionTemplate","resolveInsertedSelector","getMarkdownMetadata","compileWithOptions","getHTML","resolveInterpreterLocale","translationPlugin","internationalization","enumerationPlugin","pluralPlugin","conditionPlugin","nestedPlugin","filePlugin","genderPlugin","selectPlugin"],"sources":["../../src/plugins.ts"],"sourcesContent":["import { editor, internationalization } from '@intlayer/config/built';\nimport {\n conditionPlugin,\n type DeepTransformContent as DeepTransformContentCore,\n enumerationPlugin,\n fallbackPlugin,\n filePlugin,\n genderPlugin,\n getHTML,\n type IInterpreterPluginState as IInterpreterPluginStateCore,\n isInterpolableWrapperNode,\n nestedPlugin,\n type Plugins,\n pluralPlugin,\n resolveInsertedSelector,\n resolveInterpreterLocale,\n selectPlugin,\n splitInsertionTemplate,\n transformInterpolableNode,\n translationPlugin,\n} from '@intlayer/core/interpreter';\nimport {\n compileWithOptions,\n getMarkdownMetadata,\n} from '@intlayer/core/markdown';\nimport type {\n HTMLContent,\n InsertionContent,\n MarkdownContent,\n} from '@intlayer/core/transpiler';\nimport type { KeyPath } from '@intlayer/types/keyPath';\nimport type {\n DeclaredLocales,\n LocalesValues,\n} from '@intlayer/types/module_augmentation';\nimport type { NodeType } from '@intlayer/types/nodeType';\nimport * as NodeTypes from '@intlayer/types/nodeType';\nimport type { HTMLComponents } from './html/types';\nimport {\n type IntlayerNode as IntlayerNodeCore,\n renderIntlayerNode,\n} from './renderIntlayerNode';\n\n/** ---------------------------------------------\n * INTLAYER NODE PLUGIN\n * --------------------------------------------- */\n\nexport type IntlayerNodeCond<T> = T extends number | string\n ? IntlayerNode<T>\n : never;\n\nexport type IntlayerNode<T, P = {}> = IntlayerNodeCore<T> & P;\n\nconst escapeHtmlAttr = (str: string): string =>\n str.replace(/&/g, '&').replace(/\"/g, '"');\n\nconst escapeHtmlText = (str: string): string =>\n str.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');\n\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: (_node, { children, keyPath, dictionaryKey }) => {\n if (process.env.INTLAYER_EDITOR_ENABLED !== 'false' && editor.enabled) {\n const rawStr = String(children ?? '');\n const keyPathJson = JSON.stringify(keyPath ?? []);\n const dictKey = String(dictionaryKey ?? '');\n\n /**\n * In editor mode, string coercion returns the wrapper HTML so that\n * `element.innerHTML = content.title` automatically inserts the\n * `<intlayer-content-selector-wrapper>` into the DOM.\n */\n const htmlStr = `<intlayer-content-selector-wrapper key-path=\"${escapeHtmlAttr(keyPathJson)}\" dictionary-key=\"${escapeHtmlAttr(dictKey)}\">${escapeHtmlText(rawStr)}</intlayer-content-selector-wrapper>`;\n\n return renderIntlayerNode({\n value: children as string,\n children: htmlStr,\n keyPath,\n dictionaryKey,\n additionalProps: {\n toElement: (): HTMLElement => {\n const wrapper = document.createElement(\n 'intlayer-content-selector-wrapper'\n );\n wrapper.setAttribute('key-path', keyPathJson);\n wrapper.setAttribute('dictionary-key', dictKey);\n wrapper.textContent = rawStr;\n return wrapper;\n },\n },\n });\n }\n\n return renderIntlayerNode({\n value: children as string,\n children,\n });\n },\n};\n\n/** ---------------------------------------------\n * INSERTION PLUGIN\n * --------------------------------------------- */\n\nexport type InsertionCond<T, _S, L extends LocalesValues> = T extends {\n nodeType: NodeType | string;\n [NodeTypes.INSERTION]: infer I;\n fields: readonly (infer F)[];\n}\n ? <V extends { [K in Extract<F, string>]: string | number }>(\n values: V\n ) => I extends string ? IntlayerNode<string> : DeepTransformContent<I, L>\n : never;\n\nexport const insertionPlugin: Plugins =\n process.env.INTLAYER_NODE_TYPE_INSERTION === 'false'\n ? fallbackPlugin\n : {\n id: 'insertion-plugin',\n canHandle: (node) =>\n typeof node === 'object' && node?.nodeType === NodeTypes.INSERTION,\n transform: (node: InsertionContent, props, deepTransformNode) => {\n const newKeyPath: KeyPath[] = [\n ...props.keyPath,\n { type: NodeTypes.INSERTION },\n ];\n\n const children = node[NodeTypes.INSERTION];\n\n const insertionStringPlugin: Plugins = {\n id: 'insertion-string-plugin',\n canHandle: (node) =>\n typeof node === 'string' || isInterpolableWrapperNode(node),\n transform: (node, subProps, deepTransformNode) => {\n // `html()`/`markdown()` nodes carry their `{{ … }}` placeholders\n // inside a raw string. Interpolate into that string, then re-run\n // the transform so the html/markdown renderer applies afterwards.\n if (isInterpolableWrapperNode(node)) {\n return (values: {\n [K in InsertionContent['fields'][number]]: string | number;\n }) =>\n transformInterpolableNode(\n node,\n values,\n subProps,\n props.plugins,\n deepTransformNode\n );\n }\n\n const transformedResult = deepTransformNode(node, {\n ...subProps,\n children: node,\n plugins: (props.plugins ?? ([] as Plugins[])).filter(\n (plugin) => plugin.id !== 'intlayer-node-plugin'\n ),\n });\n\n return (values: {\n [K in InsertionContent['fields'][number]]: string | number;\n }) => {\n const result = splitInsertionTemplate(\n transformedResult,\n values\n );\n const resultStr = result.isSimple\n ? (result.parts as string)\n : (result.parts as string[]).join('');\n\n return deepTransformNode(resultStr, {\n ...subProps,\n plugins: props.plugins,\n children: resultStr,\n });\n };\n },\n };\n\n const transformed = deepTransformNode(children, {\n ...props,\n children,\n keyPath: newKeyPath,\n plugins: [insertionStringPlugin, ...(props.plugins ?? [])],\n });\n\n return resolveInsertedSelector(children, transformed);\n },\n };\n\n/** ---------------------------------------------\n * MARKDOWN PLUGIN\n * --------------------------------------------- */\n\nconst vanillaRuntime = {\n createElement: (tag: string, props: any, ...children: any[]) => {\n const attrs = Object.entries(props || {})\n .filter(\n ([key]) => key !== 'children' && key !== 'key' && key !== '_innerHTML'\n )\n .map(([key, value]) => `${key}=\"${value}\"`)\n .join(' ');\n const innerHTML = props?._innerHTML;\n const childrenStr =\n innerHTML !== undefined ? innerHTML : children.flat(Infinity).join('');\n return `<${tag}${attrs ? ` ${attrs}` : ''}>${childrenStr}</${tag}>`;\n },\n normalizeProps: (_tag: string, props: Record<string, any>) => {\n const normalized: Record<string, any> = {};\n for (const [key, value] of Object.entries(props)) {\n if (key === 'className') {\n normalized.class = value;\n } else if (key === 'htmlFor') {\n normalized.for = value;\n } else if (key === 'dangerouslySetInnerHTML' && (value as any)?.__html) {\n normalized._innerHTML = (value as any).__html;\n } else {\n normalized[key] = value;\n }\n }\n return normalized;\n },\n};\n\nexport type MarkdownStringCond<T> = T extends string\n ? IntlayerNode<\n string,\n {\n metadata: DeepTransformContent<string>;\n /** Returns the rendered markdown; render with .use(). */\n use: (components?: HTMLComponents<'permissive', {}>) => string;\n }\n >\n : never;\n\nexport const markdownStringPlugin: Plugins =\n process.env.INTLAYER_NODE_TYPE_MARKDOWN === 'false'\n ? fallbackPlugin\n : {\n id: 'markdown-string-plugin',\n canHandle: (node) => typeof node === 'string',\n transform: (node: string, props, deepTransformNode) => {\n const { plugins: _plugins, ...rest } = props;\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, subProps) =>\n renderIntlayerNode({\n ...subProps,\n value: metadataNode,\n children: node,\n }),\n };\n\n const metadataNodes = deepTransformNode(metadata, {\n plugins: [metadataPlugins],\n dictionaryKey: rest.dictionaryKey,\n keyPath: [],\n });\n\n const compile = (components: any = {}) =>\n compileWithOptions(\n node,\n {\n ...vanillaRuntime,\n createElement: (tag: any, props: any, ...children: any[]) => {\n const override = components[tag];\n if (typeof override === 'function') {\n return override({ ...props, children: children.join('') });\n }\n return vanillaRuntime.createElement(tag, props, ...children);\n },\n },\n {}\n ) as any;\n\n const value = compile();\n let children = node;\n\n if (\n process.env.INTLAYER_EDITOR_ENABLED !== 'false' &&\n editor.enabled\n ) {\n const keyPathJson = JSON.stringify(props.keyPath ?? []);\n const dictKey = String(props.dictionaryKey ?? '');\n children = `<intlayer-content-selector-wrapper key-path=\"${escapeHtmlAttr(keyPathJson)}\" dictionary-key=\"${escapeHtmlAttr(dictKey)}\">${escapeHtmlText(value)}</intlayer-content-selector-wrapper>`;\n }\n\n return renderIntlayerNode({\n ...props,\n value,\n children,\n additionalProps: {\n metadata: metadataNodes,\n use: (components?: any) => compile(components),\n },\n }) as any;\n },\n };\n\nexport type MarkdownCond<T> = T extends {\n nodeType: NodeType | string;\n [NodeTypes.MARKDOWN]: infer M;\n metadata?: infer U;\n tags?: infer U;\n}\n ? {\n use: (components?: HTMLComponents<'permissive', U>) => IntlayerNode<M>;\n metadata: DeepTransformContent<U>;\n }\n : never;\n\nexport const markdownPlugin: Plugins =\n process.env.INTLAYER_NODE_TYPE_MARKDOWN === 'false'\n ? fallbackPlugin\n : {\n id: 'markdown-plugin',\n canHandle: (node) =>\n typeof node === 'object' && node?.nodeType === NodeTypes.MARKDOWN,\n transform: (node: MarkdownContent, props, deepTransformNode) => {\n const newKeyPath: KeyPath[] = [\n ...props.keyPath,\n { type: NodeTypes.MARKDOWN },\n ];\n const children = node[NodeTypes.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 [NodeTypes.HTML]: infer I;\n tags?: infer U;\n}\n ? {\n use: (components?: HTMLComponents<'permissive', U>) => IntlayerNode<I>;\n }\n : never;\n\nexport const htmlPlugin: Plugins =\n process.env.INTLAYER_NODE_TYPE_HTML === 'false'\n ? fallbackPlugin\n : {\n id: 'html-plugin',\n canHandle: (node) =>\n typeof node === 'object' && node?.nodeType === NodeTypes.HTML,\n transform: (node: HTMLContent<string>, props) => {\n const htmlStr = node[NodeTypes.HTML];\n\n const use = (components: Record<string, any> = {}) => {\n const wrappedComponents = new Proxy(components, {\n get(target, prop) {\n if (typeof prop === 'string' && prop in target) {\n const Component = target[prop];\n return (props: any) => {\n const children = Array.isArray(props.children)\n ? props.children.join('')\n : props.children;\n return Component({ ...props, children });\n };\n }\n if (typeof prop === 'string' && /^[a-z][a-z0-9]*$/.test(prop)) {\n return (props: any) => {\n const attrs = Object.entries(props)\n .filter(([key]) => key !== 'children' && key !== 'key')\n .map(([key, value]) => `${key}=\"${value}\"`)\n .join(' ');\n const children = Array.isArray(props.children)\n ? props.children.join('')\n : props.children;\n return `<${prop}${attrs ? ` ${attrs}` : ''}>${children}</${prop}>`;\n };\n }\n return undefined;\n },\n });\n\n const result = getHTML(htmlStr, wrappedComponents as any);\n return Array.isArray(result) ? result.join('') : result;\n };\n\n const value = use();\n let children = htmlStr;\n\n if (\n process.env.INTLAYER_EDITOR_ENABLED !== 'false' &&\n editor.enabled\n ) {\n const keyPathJson = JSON.stringify(props.keyPath ?? []);\n const dictKey = String(props.dictionaryKey ?? '');\n children = `<intlayer-content-selector-wrapper key-path=\"${escapeHtmlAttr(keyPathJson)}\" dictionary-key=\"${escapeHtmlAttr(dictKey)}\">${escapeHtmlText(value)}</intlayer-content-selector-wrapper>`;\n }\n\n return renderIntlayerNode({\n ...props,\n value,\n children,\n additionalProps: {\n use: (components?: any) => use(components),\n },\n });\n },\n };\n\n/** ---------------------------------------------\n * PLUGINS RESULT\n * --------------------------------------------- */\n\nexport interface IInterpreterPluginVanilla<T, S, L extends LocalesValues> {\n vanillaIntlayerNode: IntlayerNodeCond<T>;\n vanillaInsertion: InsertionCond<T, S, L>;\n vanillaMarkdown: MarkdownCond<T>;\n vanillaHtml: HTMLPluginCond<T>;\n}\n\n/**\n * Insert this type as param of `DeepTransformContent` to avoid `intlayer` package pollution.\n *\n * Otherwise the `vanilla-intlayer` plugins will override the types of `intlayer` functions.\n * Use `getIntlayer` from `vanilla-intlayer` (not from `intlayer`) to get properly typed\n * `IntlayerNode` wrappers with `.value` access on string/number content.\n */\nexport type IInterpreterPluginState = Omit<\n IInterpreterPluginStateCore,\n 'insertion'\n> & {\n vanillaIntlayerNode: true;\n vanillaInsertion: true;\n vanillaMarkdown: true;\n vanillaHtml: true;\n};\n\nexport type DeepTransformContent<\n T,\n L extends LocalesValues = DeclaredLocales,\n> = DeepTransformContentCore<T, IInterpreterPluginState, L>;\n\nconst pluginsCache = new Map<string, Plugins[]>();\n\n/**\n * Get the plugins array for Vanilla content transformation.\n * This function is used by both getIntlayer and getDictionary to ensure consistent plugin configuration.\n */\nexport const getPlugins = (\n locale?: LocalesValues,\n fallback = true\n): Plugins[] => {\n const currentLocale = resolveInterpreterLocale(locale);\n const cacheKey = `${currentLocale}_${fallback}`;\n\n if (pluginsCache.has(cacheKey)) {\n return pluginsCache.get(cacheKey)!;\n }\n\n const plugins = [\n // First: most nodes are plain strings, which every other plugin rejects\n intlayerNodePlugins,\n translationPlugin(\n currentLocale,\n fallback ? internationalization.defaultLocale : undefined\n ),\n enumerationPlugin,\n pluralPlugin(currentLocale),\n conditionPlugin,\n nestedPlugin(currentLocale),\n filePlugin,\n genderPlugin,\n selectPlugin,\n insertionPlugin,\n markdownPlugin,\n htmlPlugin,\n ] as Plugins[];\n\n // Plugins disabled at build time never match: skip them on every node\n const enabledPlugins = plugins.filter((plugin) => plugin !== fallbackPlugin);\n\n pluginsCache.set(cacheKey, enabledPlugins);\n\n return enabledPlugins;\n};\n"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
2
|
let _intlayer_core_utils = require("@intlayer/core/utils");
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
// src/renderIntlayerNode.ts
|
|
5
5
|
const renderIntlayerNode = ({ value, children, additionalProps = {} }) => {
|
|
6
6
|
let _value = value;
|
|
7
7
|
const displayOverride = typeof children === "string" && children !== String(value ?? "") ? children : null;
|
|
@@ -27,6 +27,5 @@ const renderIntlayerNode = ({ value, children, additionalProps = {} }) => {
|
|
|
27
27
|
};
|
|
28
28
|
};
|
|
29
29
|
|
|
30
|
-
//#endregion
|
|
31
30
|
exports.renderIntlayerNode = renderIntlayerNode;
|
|
32
31
|
//# sourceMappingURL=renderIntlayerNode.cjs.map
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { getLocaleInStorage, localeCookie, localeInStorage, setLocaleCookie, setLocaleInStorage, useLocaleCookie, useLocaleStorage } from "./useLocaleStorage.mjs";
|
|
2
1
|
import { IntlayerClient, createIntlayerClient, getIntlayerClient, installIntlayer } from "./installIntlayer.mjs";
|
|
3
2
|
import { useDictionary } from "./useDictionary.mjs";
|
|
4
3
|
import { useDictionaryDynamic } from "./useDictionaryDynamic.mjs";
|
|
5
4
|
import { useIntlayer } from "./useIntlayer.mjs";
|
|
6
5
|
import { useLocale } from "./useLocale.mjs";
|
|
6
|
+
import { getLocaleInStorage, localeCookie, localeInStorage, setLocaleCookie, setLocaleInStorage, useLocaleCookie, useLocaleStorage } from "./useLocaleStorage.mjs";
|
|
7
7
|
import { usePathname } from "./usePathname.mjs";
|
|
8
8
|
import { useRewriteURL } from "./useRewriteURL.mjs";
|
|
9
9
|
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { getLocaleInStorage } from "./useLocaleStorage.mjs";
|
|
2
1
|
import { useEditor } from "../editor/useEditor.mjs";
|
|
2
|
+
import { getLocaleInStorage } from "./useLocaleStorage.mjs";
|
|
3
3
|
import { internationalization } from "@intlayer/config/built";
|
|
4
4
|
import { setIntlayerIdentifier } from "@intlayer/config/client";
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
// src/client/installIntlayer.ts
|
|
7
7
|
var IntlayerClient = class {
|
|
8
8
|
_locale;
|
|
9
9
|
_variant;
|
|
@@ -109,6 +109,5 @@ const installIntlayer = ({ locale, isCookieEnabled, variant } = {}) => {
|
|
|
109
109
|
return client;
|
|
110
110
|
};
|
|
111
111
|
|
|
112
|
-
//#endregion
|
|
113
112
|
export { IntlayerClient, createIntlayerClient, getIntlayerClient, installIntlayer };
|
|
114
113
|
//# sourceMappingURL=installIntlayer.mjs.map
|
|
@@ -2,7 +2,7 @@ import { getDictionary } from "../getDictionary.mjs";
|
|
|
2
2
|
import { getIntlayerClient } from "./installIntlayer.mjs";
|
|
3
3
|
import { resolveDictionaryArgument } from "@intlayer/core/dictionaryManipulator";
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
// src/client/useDictionary.ts
|
|
6
6
|
/**
|
|
7
7
|
* Get the content for a raw dictionary (or qualified dictionary group) and
|
|
8
8
|
* optionally subscribe to locale changes via the chainable `.onChange()`
|
|
@@ -34,6 +34,5 @@ const useDictionary = (dictionary, localeOrSelector) => {
|
|
|
34
34
|
return content;
|
|
35
35
|
};
|
|
36
36
|
|
|
37
|
-
//#endregion
|
|
38
37
|
export { useDictionary };
|
|
39
38
|
//# sourceMappingURL=useDictionary.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDictionary.mjs","names":[],"sources":["../../../src/client/useDictionary.ts"],"sourcesContent":["import { resolveDictionaryArgument } from '@intlayer/core/dictionaryManipulator';\nimport type {\n Dictionary,\n DictionarySelector,\n DictionarySelectorForGroup,\n QualifiedDictionaryGroup,\n ResolveQualifiedDictionaryContent,\n} from '@intlayer/types/dictionary';\nimport type {\n DeclaredLocales,\n ExtractSelectorLocale,\n LocalesValues,\n} from '@intlayer/types/module_augmentation';\nimport { getDictionary } from '../getDictionary';\nimport type { DeepTransformContent } from '../plugins';\nimport { getIntlayerClient } from './installIntlayer';\n\nexport type WithOnChange<T> = T & {\n /**\n * Subscribe to locale changes. The callback receives the fresh content\n * whenever the active locale changes. Returns the content object itself\n * for convenient one-liner patterns:\n *\n * ```ts\n * const content = useDictionary(myDict).onChange((c) => {\n * document.querySelector('p')!.textContent = String(c.greeting);\n * });\n * ```\n */\n onChange: (callback: (content: any) => void) => WithOnChange<T>;\n};\n\n/**\n * Get the content for a raw dictionary (or qualified dictionary group) and\n * optionally subscribe to locale changes via the chainable `.onChange()`\n * method — mirroring the API of `react-intlayer`.\n *\n * The second argument is either a locale or a selector object (`{ item }`,\n * `{ variant }`, optionally combined with `locale`).\n *\n * @param dictionary - The raw dictionary (or qualified group) object.\n * @param localeOrSelector - Optional locale or selector.\n * @returns The current content with an `.onChange()` method.\n */\nexport const useDictionary = <\n const T extends Dictionary | QualifiedDictionaryGroup,\n const A extends
|
|
1
|
+
{"version":3,"file":"useDictionary.mjs","names":[],"sources":["../../../src/client/useDictionary.ts"],"sourcesContent":["import { resolveDictionaryArgument } from '@intlayer/core/dictionaryManipulator';\nimport type {\n Dictionary,\n DictionarySelector,\n DictionarySelectorForGroup,\n QualifiedDictionaryGroup,\n ResolveQualifiedDictionaryContent,\n} from '@intlayer/types/dictionary';\nimport type {\n DeclaredLocales,\n ExtractSelectorLocale,\n LocalesValues,\n} from '@intlayer/types/module_augmentation';\nimport { getDictionary } from '../getDictionary';\nimport type { DeepTransformContent } from '../plugins';\nimport { getIntlayerClient } from './installIntlayer';\n\nexport type WithOnChange<T> = T & {\n /**\n * Subscribe to locale changes. The callback receives the fresh content\n * whenever the active locale changes. Returns the content object itself\n * for convenient one-liner patterns:\n *\n * ```ts\n * const content = useDictionary(myDict).onChange((c) => {\n * document.querySelector('p')!.textContent = String(c.greeting);\n * });\n * ```\n */\n onChange: (callback: (content: any) => void) => WithOnChange<T>;\n};\n\n/**\n * Get the content for a raw dictionary (or qualified dictionary group) and\n * optionally subscribe to locale changes via the chainable `.onChange()`\n * method — mirroring the API of `react-intlayer`.\n *\n * The second argument is either a locale or a selector object (`{ item }`,\n * `{ variant }`, optionally combined with `locale`).\n *\n * @param dictionary - The raw dictionary (or qualified group) object.\n * @param localeOrSelector - Optional locale or selector.\n * @returns The current content with an `.onChange()` method.\n */\nexport const useDictionary = <\n const T extends Dictionary | QualifiedDictionaryGroup,\n const A extends LocalesValues | DictionarySelectorForGroup<T> =\n DeclaredLocales,\n>(\n dictionary: T,\n localeOrSelector?: A\n): WithOnChange<\n DeepTransformContent<\n ResolveQualifiedDictionaryContent<T, A>,\n ExtractSelectorLocale<A>\n >\n> => {\n const client = getIntlayerClient();\n\n const isSelector =\n process.env.INTLAYER_DICTIONARY_SELECTOR !== 'false' &&\n typeof localeOrSelector === 'object' &&\n localeOrSelector !== null;\n const explicitLocale = isSelector\n ? (localeOrSelector as DictionarySelector).locale\n : (localeOrSelector as LocalesValues | undefined);\n\n // Layers the client's ambient variant under the call-site argument. Resolved\n // per read so a `setVariant` between reads is picked up.\n const read = (locale: LocalesValues | undefined) =>\n process.env.INTLAYER_DICTIONARY_SELECTOR !== 'false'\n ? getDictionary(\n dictionary,\n resolveDictionaryArgument({\n localeOrSelector,\n contextLocale: locale,\n contextVariant: client.variant,\n dictionaryKey: dictionary.key,\n }) as A\n )\n : getDictionary(dictionary, locale as A);\n\n const content = read(explicitLocale ?? client.locale) as WithOnChange<any>;\n\n // A selector can resolve to null/array; only objects carry `.onChange`.\n if (content != null && typeof content === 'object') {\n content.onChange = (callback) => {\n client.subscribe((newLocale) => {\n callback(read(explicitLocale ?? newLocale));\n });\n return content;\n };\n }\n\n return content;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;AA4CA,MAAa,iBAKX,YACA,qBAMG;CACH,MAAM,SAAS,kBAAkB;CAMjC,MAAM,iBAHJ,QAAQ,IAAI,iCAAiC,WAC7C,OAAO,qBAAqB,YAC5B,qBAAqB,OAElB,iBAAwC,SACxC;CAIL,MAAM,QAAQ,WACZ,QAAQ,IAAI,iCAAiC,UACzC,cACE,YACA,0BAA0B;EACxB;EACA,eAAe;EACf,gBAAgB,OAAO;EACvB,eAAe,WAAW;CAC5B,CAAC,CACH,IACA,cAAc,YAAY,MAAW;CAE3C,MAAM,UAAU,KAAK,kBAAkB,OAAO,MAAM;CAGpD,IAAI,WAAW,QAAQ,OAAO,YAAY,UACxC,QAAQ,YAAY,aAAa;EAC/B,OAAO,WAAW,cAAc;GAC9B,SAAS,KAAK,kBAAkB,SAAS,CAAC;EAC5C,CAAC;EACD,OAAO;CACT;CAGF,OAAO;AACT"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { getDictionary as getDictionary$1 } from "../getDictionary.mjs";
|
|
2
2
|
import { getIntlayerClient } from "./installIntlayer.mjs";
|
|
3
|
-
import { resolveInterpreterLocale } from "@intlayer/core/interpreter";
|
|
4
3
|
import { getDictionarySelectorCacheKey, getPreloadedDictionary, isQualifiedDynamicLoaderMap, parseDictionarySelector, resolveDictionaryArgument, resolveQualifiedDynamicContentAsync } from "@intlayer/core/dictionaryManipulator";
|
|
4
|
+
import { resolveInterpreterLocale } from "@intlayer/core/interpreter";
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
// src/client/useDictionaryDynamic.ts
|
|
7
7
|
/** Simple in-memory cache shared across all calls in the same page. */
|
|
8
8
|
const cache = /* @__PURE__ */ new Map();
|
|
9
9
|
/** Tracks in-flight loads to avoid duplicate fetches. */
|
|
@@ -126,6 +126,5 @@ const useDictionaryDynamic = (dictionaryLoaders, key, localeOrSelector) => {
|
|
|
126
126
|
return recursiveProxy;
|
|
127
127
|
};
|
|
128
128
|
|
|
129
|
-
//#endregion
|
|
130
129
|
export { useDictionaryDynamic };
|
|
131
130
|
//# sourceMappingURL=useDictionaryDynamic.mjs.map
|
|
@@ -2,7 +2,7 @@ import { getIntlayer } from "../getIntlayer.mjs";
|
|
|
2
2
|
import { getIntlayerClient } from "./installIntlayer.mjs";
|
|
3
3
|
import { resolveDictionaryArgument } from "@intlayer/core/dictionaryManipulator";
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
// src/client/useIntlayer.ts
|
|
6
6
|
/**
|
|
7
7
|
* Get the translated content for the given key and optionally subscribe to
|
|
8
8
|
* locale changes via the chainable `.onChange()` method — mirroring the API
|
|
@@ -49,6 +49,5 @@ const useIntlayer = (key, localeOrSelector) => {
|
|
|
49
49
|
return content;
|
|
50
50
|
};
|
|
51
51
|
|
|
52
|
-
//#endregion
|
|
53
52
|
export { useIntlayer };
|
|
54
53
|
//# sourceMappingURL=useIntlayer.mjs.map
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { setLocaleInStorage } from "./useLocaleStorage.mjs";
|
|
2
1
|
import { getIntlayerClient } from "./installIntlayer.mjs";
|
|
2
|
+
import { setLocaleInStorage } from "./useLocaleStorage.mjs";
|
|
3
3
|
import { internationalization } from "@intlayer/config/built";
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
// src/client/useLocale.ts
|
|
6
6
|
const { defaultLocale, locales: availableLocales } = internationalization ?? {};
|
|
7
7
|
/**
|
|
8
8
|
* Get the current locale state and locale management utilities.
|
|
@@ -51,6 +51,5 @@ const useLocale = (props = {}) => {
|
|
|
51
51
|
};
|
|
52
52
|
};
|
|
53
53
|
|
|
54
|
-
//#endregion
|
|
55
54
|
export { useLocale };
|
|
56
55
|
//# sourceMappingURL=useLocale.mjs.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { LocaleStorageClient, getCachedLocaleFromStorageClient, getLocaleFromStorageClient, localeStorageOptions, setLocaleInStorageClient } from "@intlayer/core/utils";
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
// src/client/useLocaleStorage.ts
|
|
4
4
|
/**
|
|
5
5
|
* Reads the locale persisted in the browser storage (cookie, localStorage…).
|
|
6
6
|
*
|
|
@@ -48,6 +48,5 @@ const useLocaleStorage = (isCookieEnabled) => {
|
|
|
48
48
|
*/
|
|
49
49
|
const useLocaleCookie = useLocaleStorage;
|
|
50
50
|
|
|
51
|
-
//#endregion
|
|
52
51
|
export { getLocaleInStorage, localeCookie, localeInStorage, setLocaleCookie, setLocaleInStorage, useLocaleCookie, useLocaleStorage };
|
|
53
52
|
//# sourceMappingURL=useLocaleStorage.mjs.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { getPathWithoutLocale } from "@intlayer/core/localization";
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
// src/client/usePathname.ts
|
|
4
4
|
/**
|
|
5
5
|
* Returns the current pathname with the locale segment removed, plus a
|
|
6
6
|
* `subscribe` function to react to browser navigation changes.
|
|
@@ -34,6 +34,5 @@ const usePathname = () => {
|
|
|
34
34
|
};
|
|
35
35
|
};
|
|
36
36
|
|
|
37
|
-
//#endregion
|
|
38
37
|
export { usePathname };
|
|
39
38
|
//# sourceMappingURL=usePathname.mjs.map
|
|
@@ -2,7 +2,7 @@ import { getIntlayerClient } from "./installIntlayer.mjs";
|
|
|
2
2
|
import { routing } from "@intlayer/config/built";
|
|
3
3
|
import { getRewritePath } from "@intlayer/core/localization";
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
// src/client/useRewriteURL.ts
|
|
6
6
|
const rewrite = (locale) => {
|
|
7
7
|
if (typeof window === "undefined" || !routing?.rewrite) return;
|
|
8
8
|
const pathname = window.location.pathname;
|
|
@@ -39,6 +39,5 @@ const useRewriteURL = () => {
|
|
|
39
39
|
});
|
|
40
40
|
};
|
|
41
41
|
|
|
42
|
-
//#endregion
|
|
43
42
|
export { useRewriteURL };
|
|
44
43
|
//# sourceMappingURL=useRewriteURL.mjs.map
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { setLocaleInStorage } from "../client/useLocaleStorage.mjs";
|
|
2
1
|
import { getIntlayerClient } from "../client/installIntlayer.mjs";
|
|
2
|
+
import { setLocaleInStorage } from "../client/useLocaleStorage.mjs";
|
|
3
3
|
import { isEnabled } from "@intlayer/editor/isEnabled";
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
// src/editor/useEditor.ts
|
|
6
6
|
/**
|
|
7
7
|
* Initialises the Intlayer visual editor client.
|
|
8
8
|
*
|
|
@@ -49,6 +49,5 @@ const useEditor = () => {
|
|
|
49
49
|
};
|
|
50
50
|
};
|
|
51
51
|
|
|
52
|
-
//#endregion
|
|
53
52
|
export { useEditor };
|
|
54
53
|
//# sourceMappingURL=useEditor.mjs.map
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { usePercentage } from "./usePercentage.mjs";
|
|
2
|
-
import { useUnit } from "./useUnit.mjs";
|
|
3
1
|
import { useCompact } from "./useCompact.mjs";
|
|
4
|
-
import { useNumber } from "./useNumber.mjs";
|
|
5
|
-
import { useIntl } from "./useIntl.mjs";
|
|
6
|
-
import { useList } from "./useList.mjs";
|
|
7
2
|
import { useCurrency } from "./useCurrency.mjs";
|
|
8
3
|
import { useDate } from "./useDate.mjs";
|
|
4
|
+
import { useIntl } from "./useIntl.mjs";
|
|
5
|
+
import { useList } from "./useList.mjs";
|
|
6
|
+
import { useNumber } from "./useNumber.mjs";
|
|
7
|
+
import { usePercentage } from "./usePercentage.mjs";
|
|
9
8
|
import { useRelativeTime } from "./useRelativeTime.mjs";
|
|
9
|
+
import { useUnit } from "./useUnit.mjs";
|
|
10
10
|
|
|
11
11
|
export { useCompact, useCurrency, useDate, useIntl, useList, useNumber, usePercentage, useRelativeTime, useUnit };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { getIntlayerClient } from "../client/installIntlayer.mjs";
|
|
2
2
|
import { compact } from "@intlayer/core/formatters";
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
// src/format/useCompact.ts
|
|
5
5
|
const useCompact = () => {
|
|
6
6
|
const client = getIntlayerClient();
|
|
7
7
|
return (...args) => compact(args[0], {
|
|
@@ -10,6 +10,5 @@ const useCompact = () => {
|
|
|
10
10
|
});
|
|
11
11
|
};
|
|
12
12
|
|
|
13
|
-
//#endregion
|
|
14
13
|
export { useCompact };
|
|
15
14
|
//# sourceMappingURL=useCompact.mjs.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { getIntlayerClient } from "../client/installIntlayer.mjs";
|
|
2
2
|
import { currency } from "@intlayer/core/formatters";
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
// src/format/useCurrency.ts
|
|
5
5
|
const useCurrency = () => {
|
|
6
6
|
const client = getIntlayerClient();
|
|
7
7
|
return (...args) => currency(args[0], {
|
|
@@ -10,6 +10,5 @@ const useCurrency = () => {
|
|
|
10
10
|
});
|
|
11
11
|
};
|
|
12
12
|
|
|
13
|
-
//#endregion
|
|
14
13
|
export { useCurrency };
|
|
15
14
|
//# sourceMappingURL=useCurrency.mjs.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { getIntlayerClient } from "../client/installIntlayer.mjs";
|
|
2
2
|
import { date, presets } from "@intlayer/core/formatters";
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
// src/format/useDate.ts
|
|
5
5
|
/**
|
|
6
6
|
* Vanilla JS hook that provides a localized date/time formatter.
|
|
7
7
|
*/
|
|
@@ -19,6 +19,5 @@ const useDate = () => {
|
|
|
19
19
|
};
|
|
20
20
|
};
|
|
21
21
|
|
|
22
|
-
//#endregion
|
|
23
22
|
export { useDate };
|
|
24
23
|
//# sourceMappingURL=useDate.mjs.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { getIntlayerClient } from "../client/installIntlayer.mjs";
|
|
2
2
|
import { bindIntl } from "@intlayer/core/utils";
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
// src/format/useIntl.ts
|
|
5
5
|
/**
|
|
6
6
|
* Get a locale-bound `Intl` object and subscribe to locale changes.
|
|
7
7
|
*
|
|
@@ -37,6 +37,5 @@ const useIntl = (locale) => {
|
|
|
37
37
|
};
|
|
38
38
|
};
|
|
39
39
|
|
|
40
|
-
//#endregion
|
|
41
40
|
export { useIntl };
|
|
42
41
|
//# sourceMappingURL=useIntl.mjs.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { getIntlayerClient } from "../client/installIntlayer.mjs";
|
|
2
2
|
import { list } from "@intlayer/core/formatters";
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
// src/format/useList.ts
|
|
5
5
|
const useList = () => {
|
|
6
6
|
const client = getIntlayerClient();
|
|
7
7
|
return (...args) => list(args[0], {
|
|
@@ -10,6 +10,5 @@ const useList = () => {
|
|
|
10
10
|
});
|
|
11
11
|
};
|
|
12
12
|
|
|
13
|
-
//#endregion
|
|
14
13
|
export { useList };
|
|
15
14
|
//# sourceMappingURL=useList.mjs.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { getIntlayerClient } from "../client/installIntlayer.mjs";
|
|
2
2
|
import { number } from "@intlayer/core/formatters";
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
// src/format/useNumber.ts
|
|
5
5
|
/**
|
|
6
6
|
* Vanilla JS hook that provides a localized number formatter.
|
|
7
7
|
*/
|
|
@@ -13,6 +13,5 @@ const useNumber = () => {
|
|
|
13
13
|
});
|
|
14
14
|
};
|
|
15
15
|
|
|
16
|
-
//#endregion
|
|
17
16
|
export { useNumber };
|
|
18
17
|
//# sourceMappingURL=useNumber.mjs.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { getIntlayerClient } from "../client/installIntlayer.mjs";
|
|
2
2
|
import { percentage } from "@intlayer/core/formatters";
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
// src/format/usePercentage.ts
|
|
5
5
|
const usePercentage = () => {
|
|
6
6
|
const client = getIntlayerClient();
|
|
7
7
|
return (...args) => percentage(args[0], {
|
|
@@ -10,6 +10,5 @@ const usePercentage = () => {
|
|
|
10
10
|
});
|
|
11
11
|
};
|
|
12
12
|
|
|
13
|
-
//#endregion
|
|
14
13
|
export { usePercentage };
|
|
15
14
|
//# sourceMappingURL=usePercentage.mjs.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { getIntlayerClient } from "../client/installIntlayer.mjs";
|
|
2
2
|
import { relativeTime } from "@intlayer/core/formatters";
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
// src/format/useRelativeTime.ts
|
|
5
5
|
const useRelativeTime = () => {
|
|
6
6
|
const client = getIntlayerClient();
|
|
7
7
|
return (...args) => relativeTime(args[0], args[1], {
|
|
@@ -10,6 +10,5 @@ const useRelativeTime = () => {
|
|
|
10
10
|
});
|
|
11
11
|
};
|
|
12
12
|
|
|
13
|
-
//#endregion
|
|
14
13
|
export { useRelativeTime };
|
|
15
14
|
//# sourceMappingURL=useRelativeTime.mjs.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { getIntlayerClient } from "../client/installIntlayer.mjs";
|
|
2
2
|
import { units } from "@intlayer/core/formatters";
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
// src/format/useUnit.ts
|
|
5
5
|
const useUnit = () => {
|
|
6
6
|
const client = getIntlayerClient();
|
|
7
7
|
return (...args) => units(args[0], {
|
|
@@ -10,6 +10,5 @@ const useUnit = () => {
|
|
|
10
10
|
});
|
|
11
11
|
};
|
|
12
12
|
|
|
13
|
-
//#endregion
|
|
14
13
|
export { useUnit };
|
|
15
14
|
//# sourceMappingURL=useUnit.mjs.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { getPlugins } from "./plugins.mjs";
|
|
2
2
|
import { getDictionary as getDictionary$1 } from "@intlayer/core/interpreter";
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
// src/getDictionary.ts
|
|
5
5
|
/**
|
|
6
6
|
* Transforms a dictionary (or qualified dictionary group) and returns its
|
|
7
7
|
* content for the given locale or selector (`{ item }`, `{ variant }`,
|
|
@@ -12,6 +12,5 @@ const getDictionary = (dictionary, localeOrSelector) => {
|
|
|
12
12
|
return getDictionary$1(dictionary, localeOrSelector, getPlugins(locale));
|
|
13
13
|
};
|
|
14
14
|
|
|
15
|
-
//#endregion
|
|
16
15
|
export { getDictionary };
|
|
17
16
|
//# sourceMappingURL=getDictionary.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getDictionary.mjs","names":["getDictionaryCore"],"sources":["../../src/getDictionary.ts"],"sourcesContent":["import { getDictionary as getDictionaryCore } from '@intlayer/core/interpreter';\nimport type {\n Dictionary,\n DictionarySelectorForGroup,\n QualifiedDictionaryGroup,\n ResolveQualifiedDictionaryContent,\n} from '@intlayer/types/dictionary';\nimport type {\n DeclaredLocales,\n ExtractSelectorLocale,\n LocalesValues,\n} from '@intlayer/types/module_augmentation';\nimport { type DeepTransformContent, getPlugins } from './plugins';\n\n/**\n * Transforms a dictionary (or qualified dictionary group) and returns its\n * content for the given locale or selector (`{ item }`, `{ variant }`,\n * optionally combined with `locale`).\n */\nexport const getDictionary = <\n const T extends Dictionary | QualifiedDictionaryGroup,\n const A extends
|
|
1
|
+
{"version":3,"file":"getDictionary.mjs","names":["getDictionaryCore"],"sources":["../../src/getDictionary.ts"],"sourcesContent":["import { getDictionary as getDictionaryCore } from '@intlayer/core/interpreter';\nimport type {\n Dictionary,\n DictionarySelectorForGroup,\n QualifiedDictionaryGroup,\n ResolveQualifiedDictionaryContent,\n} from '@intlayer/types/dictionary';\nimport type {\n DeclaredLocales,\n ExtractSelectorLocale,\n LocalesValues,\n} from '@intlayer/types/module_augmentation';\nimport { type DeepTransformContent, getPlugins } from './plugins';\n\n/**\n * Transforms a dictionary (or qualified dictionary group) and returns its\n * content for the given locale or selector (`{ item }`, `{ variant }`,\n * optionally combined with `locale`).\n */\nexport const getDictionary = <\n const T extends Dictionary | QualifiedDictionaryGroup,\n const A extends LocalesValues | DictionarySelectorForGroup<T> =\n DeclaredLocales,\n>(\n dictionary: T,\n localeOrSelector?: A\n): DeepTransformContent<\n ResolveQualifiedDictionaryContent<T, A>,\n ExtractSelectorLocale<A>\n> => {\n const locale = (\n typeof localeOrSelector === 'object' && localeOrSelector !== null\n ? localeOrSelector.locale\n : localeOrSelector\n ) as LocalesValues | undefined;\n\n return getDictionaryCore(\n dictionary,\n localeOrSelector,\n getPlugins(locale)\n ) as any;\n};\n"],"mappings":";;;;;;;;;AAmBA,MAAa,iBAKX,YACA,qBAIG;CACH,MAAM,SACJ,OAAO,qBAAqB,YAAY,qBAAqB,OACzD,iBAAiB,SACjB;CAGN,OAAOA,gBACL,YACA,kBACA,WAAW,MAAM,CACnB;AACF"}
|
package/dist/esm/getIntlayer.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { getPlugins } from "./plugins.mjs";
|
|
2
2
|
import { getIntlayer as getIntlayer$1 } from "@intlayer/core/interpreter";
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
// src/getIntlayer.ts
|
|
5
5
|
/**
|
|
6
6
|
* Picks one dictionary by its key and returns its content for the given
|
|
7
7
|
* locale or selector (`{ item }`, `{ variant }`,
|
|
@@ -12,6 +12,5 @@ const getIntlayer = (key, localeOrSelector) => {
|
|
|
12
12
|
return getIntlayer$1(key, localeOrSelector, getPlugins(locale));
|
|
13
13
|
};
|
|
14
14
|
|
|
15
|
-
//#endregion
|
|
16
15
|
export { getIntlayer };
|
|
17
16
|
//# sourceMappingURL=getIntlayer.mjs.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { useHTML } from "./installIntlayerHTML.mjs";
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
// src/html/HTMLRenderer.ts
|
|
4
4
|
/**
|
|
5
5
|
* Renders an HTML string directly, without a global provider.
|
|
6
6
|
* Returns the raw string unchanged.
|
|
@@ -15,6 +15,5 @@ const useHTMLRenderer = ({ components } = {}) => {
|
|
|
15
15
|
return (content) => context.renderHTML(content, { components });
|
|
16
16
|
};
|
|
17
17
|
|
|
18
|
-
//#endregion
|
|
19
18
|
export { renderHTML, useHTMLRenderer };
|
|
20
19
|
//# sourceMappingURL=HTMLRenderer.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HTMLRenderer.mjs","names":[],"sources":["../../../src/html/HTMLRenderer.ts"],"sourcesContent":["import { type RenderHTMLOptions, useHTML } from './installIntlayerHTML';\nimport type { HTMLComponents } from './types';\n\nexport type RenderHTMLProps = {\n components?: HTMLComponents<'permissive', {}>;\n};\n\n/**\n * Renders an HTML string directly, without a global provider.\n * Returns the raw string unchanged.\n */\nexport const renderHTML = (\n content: string,\n _props: RenderHTMLProps = {}\n): string => content;\n\n/**\n * Returns a render function that uses the global provider's configuration\n * (installed via `installIntlayerHTML`), falling back to identity.\n */\nexport const useHTMLRenderer = ({
|
|
1
|
+
{"version":3,"file":"HTMLRenderer.mjs","names":[],"sources":["../../../src/html/HTMLRenderer.ts"],"sourcesContent":["import { type RenderHTMLOptions, useHTML } from './installIntlayerHTML';\nimport type { HTMLComponents } from './types';\n\nexport type RenderHTMLProps = {\n components?: HTMLComponents<'permissive', {}>;\n};\n\n/**\n * Renders an HTML string directly, without a global provider.\n * Returns the raw string unchanged.\n */\nexport const renderHTML = (\n content: string,\n _props: RenderHTMLProps = {}\n): string => content;\n\n/**\n * Returns a render function that uses the global provider's configuration\n * (installed via `installIntlayerHTML`), falling back to identity.\n */\nexport const useHTMLRenderer = ({ components }: RenderHTMLProps = {}): ((\n content: string\n) => string) => {\n const context = useHTML();\n\n return (content: string) =>\n context.renderHTML(content, { components } as RenderHTMLOptions);\n};\n"],"mappings":";;;;;;;AAWA,MAAa,cACX,SACA,SAA0B,CAAC,MAChB;;;;;AAMb,MAAa,mBAAmB,EAAE,eAAgC,CAAC,MAEnD;CACd,MAAM,UAAU,QAAQ;CAExB,QAAQ,YACN,QAAQ,WAAW,SAAS,EAAE,WAAW,CAAsB;AACnE"}
|