@intlayer/engine 9.5.7 → 9.5.9-canary.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (178) hide show
  1. package/dist/assets/installSkills/skills/angular.md +19 -68
  2. package/dist/assets/installSkills/skills/astro.md +38 -4
  3. package/dist/assets/installSkills/skills/backend.md +113 -0
  4. package/dist/assets/installSkills/skills/cli.md +29 -25
  5. package/dist/assets/installSkills/skills/compat.md +87 -0
  6. package/dist/assets/installSkills/skills/compiler.md +14 -4
  7. package/dist/assets/installSkills/skills/config.md +15 -5
  8. package/dist/assets/installSkills/skills/content.md +80 -6
  9. package/dist/assets/installSkills/skills/dev-tools.md +82 -0
  10. package/dist/assets/installSkills/skills/lit.md +115 -0
  11. package/dist/assets/installSkills/skills/markdown.md +96 -0
  12. package/dist/assets/installSkills/skills/next-js.md +21 -38
  13. package/dist/assets/installSkills/skills/preact.md +18 -0
  14. package/dist/assets/installSkills/skills/react.md +21 -4
  15. package/dist/assets/installSkills/skills/remix.md +95 -0
  16. package/dist/assets/installSkills/skills/remote-content.md +1 -1
  17. package/dist/assets/installSkills/skills/solid.md +21 -1
  18. package/dist/assets/installSkills/skills/svelte.md +22 -1
  19. package/dist/assets/installSkills/skills/usage.md +28 -0
  20. package/dist/assets/installSkills/skills/vanilla.md +108 -0
  21. package/dist/assets/installSkills/skills/vue.md +22 -0
  22. package/dist/cjs/_virtual/_utils_asset.cjs +1 -1
  23. package/dist/cjs/build.cjs +4 -4
  24. package/dist/cjs/buildIntlayerDictionary/writeDynamicDictionary.cjs +2 -2
  25. package/dist/cjs/buildIntlayerDictionary/writeFetchDictionary.cjs +3 -3
  26. package/dist/cjs/buildIntlayerDictionary/writeMergedDictionary.cjs +1 -1
  27. package/dist/cjs/buildIntlayerDictionary/writeNestedDictionary.cjs +3 -3
  28. package/dist/cjs/buildIntlayerDictionary/writeRemoteDictionary.cjs +2 -2
  29. package/dist/cjs/buildIntlayerDictionary/writeUnmergedDictionary.cjs +2 -2
  30. package/dist/cjs/cleanOutputDir.cjs +1 -1
  31. package/dist/cjs/cleanRemovedContentDeclaration.cjs +1 -1
  32. package/dist/cjs/cli.cjs +5 -3
  33. package/dist/cjs/createDictionaryEntryPoint/createDictionaryEntryPoint.cjs +1 -1
  34. package/dist/cjs/createDictionaryEntryPoint/getBuiltDictionariesPath.cjs +2 -2
  35. package/dist/cjs/createDictionaryEntryPoint/getBuiltDynamicDictionariesPath.cjs +2 -2
  36. package/dist/cjs/createDictionaryEntryPoint/getBuiltFetchDictionariesPath.cjs +2 -2
  37. package/dist/cjs/createDictionaryEntryPoint/getBuiltRemoteDictionariesPath.cjs +2 -2
  38. package/dist/cjs/createDictionaryEntryPoint/getBuiltUnmergedDictionariesPath.cjs +2 -2
  39. package/dist/cjs/createType/createModuleAugmentation.cjs +3 -3
  40. package/dist/cjs/createType/createType.cjs +1 -1
  41. package/dist/cjs/docReview/index.cjs +5 -5
  42. package/dist/cjs/docReview/pipeline.cjs +4 -4
  43. package/dist/cjs/fetchDistantDictionaries.cjs +1 -1
  44. package/dist/cjs/handleContentDeclarationFileChange.cjs +2 -2
  45. package/dist/cjs/handleUnlinkedContentDeclarationFile.cjs +1 -1
  46. package/dist/cjs/init/frameworkSetup/nextAppRouter/restructure.cjs +1 -1
  47. package/dist/cjs/init/frameworkSetup/tanstackStart/restructure.cjs +1 -1
  48. package/dist/cjs/init/index.cjs +305 -300
  49. package/dist/cjs/init/index.cjs.map +1 -1
  50. package/dist/cjs/init/upgradeIntlayerPackages.cjs +60 -0
  51. package/dist/cjs/init/upgradeIntlayerPackages.cjs.map +1 -0
  52. package/dist/cjs/init/utils/fileSystem.cjs +1 -1
  53. package/dist/cjs/init/utils/githubActions.cjs +1 -1
  54. package/dist/cjs/init/utils/index.cjs +13 -4
  55. package/dist/cjs/init/utils/intlayerDependencies.cjs +119 -0
  56. package/dist/cjs/init/utils/intlayerDependencies.cjs.map +1 -0
  57. package/dist/cjs/init/utils/packageManager.cjs +146 -95
  58. package/dist/cjs/init/utils/packageManager.cjs.map +1 -1
  59. package/dist/cjs/initConfig/index.cjs +1 -1
  60. package/dist/cjs/installLSP.cjs +1 -1
  61. package/dist/cjs/installMCP/installMCP.cjs +1 -1
  62. package/dist/cjs/installSkills/index.cjs +111 -20
  63. package/dist/cjs/installSkills/index.cjs.map +1 -1
  64. package/dist/cjs/listDictionariesPath.cjs +1 -1
  65. package/dist/cjs/listGitFiles.cjs +1 -1
  66. package/dist/cjs/loadDictionaries/getIntlayerBundle.cjs +2 -2
  67. package/dist/cjs/loadDictionaries/index.cjs +1 -1
  68. package/dist/cjs/loadDictionaries/loadContentDeclaration.cjs +2 -2
  69. package/dist/cjs/loadDictionaries/loadDictionaries.cjs +1 -1
  70. package/dist/cjs/loadDictionaries/loadLocalDictionaries.cjs +1 -1
  71. package/dist/cjs/loadDictionaries/loadMarkdownContentDeclaration.cjs +1 -1
  72. package/dist/cjs/logConfigDetails.cjs +1 -1
  73. package/dist/cjs/prepareIntlayer.cjs +4 -4
  74. package/dist/cjs/scan/index.cjs +1 -1
  75. package/dist/cjs/scan/scanWebsite.cjs +1 -1
  76. package/dist/cjs/syncPluginKit/createFileAdapter.cjs +1 -1
  77. package/dist/cjs/syncPluginKit/index.cjs +1 -1
  78. package/dist/cjs/utils/buildComponentFilesList.cjs +1 -1
  79. package/dist/cjs/utils/contentWatcherLock.cjs +2 -2
  80. package/dist/cjs/utils/index.cjs +4 -4
  81. package/dist/cjs/utils/readDictionariesFromDisk.cjs +1 -1
  82. package/dist/cjs/utils/runOnce.cjs +1 -1
  83. package/dist/cjs/utils/runParallel/pidTree.cjs +1 -1
  84. package/dist/cjs/utils/withFileLock.cjs +1 -1
  85. package/dist/cjs/watcher.cjs +6 -6
  86. package/dist/cjs/writeConfiguration/index.cjs +1 -1
  87. package/dist/cjs/writeContentDeclaration/processContentDeclarationContent.cjs +2 -2
  88. package/dist/cjs/writeContentDeclaration/transformJSFile.cjs +1 -1
  89. package/dist/cjs/writeContentDeclaration/writeContentDeclaration.cjs +4 -4
  90. package/dist/cjs/writeContentDeclaration/writeJSFile.cjs +3 -3
  91. package/dist/cjs/writeContentDeclaration/writeMarkdownFile.cjs +1 -1
  92. package/dist/cjs/writeContentDeclaration/writeYamlFile.cjs +1 -1
  93. package/dist/cjs/writeFileIfChanged.cjs +1 -1
  94. package/dist/esm/_virtual/_utils_asset.mjs +1 -1
  95. package/dist/esm/build.mjs +4 -4
  96. package/dist/esm/buildIntlayerDictionary/writeDynamicDictionary.mjs +2 -2
  97. package/dist/esm/buildIntlayerDictionary/writeFetchDictionary.mjs +3 -3
  98. package/dist/esm/buildIntlayerDictionary/writeMergedDictionary.mjs +1 -1
  99. package/dist/esm/buildIntlayerDictionary/writeNestedDictionary.mjs +3 -3
  100. package/dist/esm/buildIntlayerDictionary/writeRemoteDictionary.mjs +2 -2
  101. package/dist/esm/buildIntlayerDictionary/writeUnmergedDictionary.mjs +2 -2
  102. package/dist/esm/cleanOutputDir.mjs +1 -1
  103. package/dist/esm/cleanRemovedContentDeclaration.mjs +1 -1
  104. package/dist/esm/cli.mjs +5 -4
  105. package/dist/esm/createDictionaryEntryPoint/createDictionaryEntryPoint.mjs +1 -1
  106. package/dist/esm/createDictionaryEntryPoint/getBuiltDictionariesPath.mjs +2 -2
  107. package/dist/esm/createDictionaryEntryPoint/getBuiltDynamicDictionariesPath.mjs +2 -2
  108. package/dist/esm/createDictionaryEntryPoint/getBuiltFetchDictionariesPath.mjs +2 -2
  109. package/dist/esm/createDictionaryEntryPoint/getBuiltRemoteDictionariesPath.mjs +2 -2
  110. package/dist/esm/createDictionaryEntryPoint/getBuiltUnmergedDictionariesPath.mjs +2 -2
  111. package/dist/esm/createType/createModuleAugmentation.mjs +3 -3
  112. package/dist/esm/createType/createType.mjs +1 -1
  113. package/dist/esm/docReview/index.mjs +5 -5
  114. package/dist/esm/docReview/pipeline.mjs +4 -4
  115. package/dist/esm/fetchDistantDictionaries.mjs +1 -1
  116. package/dist/esm/handleContentDeclarationFileChange.mjs +2 -2
  117. package/dist/esm/handleUnlinkedContentDeclarationFile.mjs +1 -1
  118. package/dist/esm/init/frameworkSetup/nextAppRouter/restructure.mjs +1 -1
  119. package/dist/esm/init/frameworkSetup/tanstackStart/restructure.mjs +1 -1
  120. package/dist/esm/init/index.mjs +306 -301
  121. package/dist/esm/init/index.mjs.map +1 -1
  122. package/dist/esm/init/upgradeIntlayerPackages.mjs +57 -0
  123. package/dist/esm/init/upgradeIntlayerPackages.mjs.map +1 -0
  124. package/dist/esm/init/utils/fileSystem.mjs +1 -1
  125. package/dist/esm/init/utils/githubActions.mjs +1 -1
  126. package/dist/esm/init/utils/index.mjs +3 -2
  127. package/dist/esm/init/utils/intlayerDependencies.mjs +110 -0
  128. package/dist/esm/init/utils/intlayerDependencies.mjs.map +1 -0
  129. package/dist/esm/init/utils/packageManager.mjs +143 -93
  130. package/dist/esm/init/utils/packageManager.mjs.map +1 -1
  131. package/dist/esm/initConfig/index.mjs +1 -1
  132. package/dist/esm/installLSP.mjs +1 -1
  133. package/dist/esm/installMCP/installMCP.mjs +1 -1
  134. package/dist/esm/installSkills/index.mjs +111 -20
  135. package/dist/esm/installSkills/index.mjs.map +1 -1
  136. package/dist/esm/listDictionariesPath.mjs +1 -1
  137. package/dist/esm/listGitFiles.mjs +1 -1
  138. package/dist/esm/loadDictionaries/getIntlayerBundle.mjs +2 -2
  139. package/dist/esm/loadDictionaries/index.mjs +1 -1
  140. package/dist/esm/loadDictionaries/loadContentDeclaration.mjs +2 -2
  141. package/dist/esm/loadDictionaries/loadDictionaries.mjs +1 -1
  142. package/dist/esm/loadDictionaries/loadLocalDictionaries.mjs +1 -1
  143. package/dist/esm/loadDictionaries/loadMarkdownContentDeclaration.mjs +1 -1
  144. package/dist/esm/logConfigDetails.mjs +1 -1
  145. package/dist/esm/prepareIntlayer.mjs +4 -4
  146. package/dist/esm/scan/index.mjs +1 -1
  147. package/dist/esm/scan/scanWebsite.mjs +1 -1
  148. package/dist/esm/syncPluginKit/createFileAdapter.mjs +1 -1
  149. package/dist/esm/syncPluginKit/index.mjs +1 -1
  150. package/dist/esm/utils/buildComponentFilesList.mjs +1 -1
  151. package/dist/esm/utils/contentWatcherLock.mjs +2 -2
  152. package/dist/esm/utils/index.mjs +4 -4
  153. package/dist/esm/utils/readDictionariesFromDisk.mjs +1 -1
  154. package/dist/esm/utils/runOnce.mjs +1 -1
  155. package/dist/esm/utils/runParallel/pidTree.mjs +1 -1
  156. package/dist/esm/utils/withFileLock.mjs +1 -1
  157. package/dist/esm/watcher.mjs +6 -6
  158. package/dist/esm/writeConfiguration/index.mjs +1 -1
  159. package/dist/esm/writeContentDeclaration/processContentDeclarationContent.mjs +2 -2
  160. package/dist/esm/writeContentDeclaration/transformJSFile.mjs +1 -1
  161. package/dist/esm/writeContentDeclaration/writeContentDeclaration.mjs +4 -4
  162. package/dist/esm/writeContentDeclaration/writeJSFile.mjs +3 -3
  163. package/dist/esm/writeContentDeclaration/writeMarkdownFile.mjs +1 -1
  164. package/dist/esm/writeContentDeclaration/writeYamlFile.mjs +1 -1
  165. package/dist/esm/writeFileIfChanged.mjs +1 -1
  166. package/dist/types/cli.d.ts +2 -1
  167. package/dist/types/init/index.d.ts +9 -6
  168. package/dist/types/init/index.d.ts.map +1 -1
  169. package/dist/types/init/upgradeIntlayerPackages.d.ts +26 -0
  170. package/dist/types/init/upgradeIntlayerPackages.d.ts.map +1 -0
  171. package/dist/types/init/utils/index.d.ts +3 -2
  172. package/dist/types/init/utils/intlayerDependencies.d.ts +66 -0
  173. package/dist/types/init/utils/intlayerDependencies.d.ts.map +1 -0
  174. package/dist/types/init/utils/packageManager.d.ts +44 -19
  175. package/dist/types/init/utils/packageManager.d.ts.map +1 -1
  176. package/dist/types/installSkills/index.d.ts +16 -3
  177. package/dist/types/installSkills/index.d.ts.map +1 -1
  178. package/package.json +7 -7
@@ -0,0 +1,82 @@
1
+ ---
2
+ name: intlayer-dev-tools
3
+ description: Sets up Intlayer developer tooling - ESLint / oxlint rules, the Language Server (LSP), the VS Code extension, the MCP server, CI/CD automation and the Chrome extension. Use when the user asks to "lint hardcoded strings", "setup Go-to-Definition for dictionary keys", "install the Intlayer MCP", or "automate translations in CI".
4
+ metadata:
5
+ author: Intlayer
6
+ url: https://intlayer.org
7
+ license: Apache-2.0
8
+ mcp-server: "@intlayer/mcp"
9
+ category: productivity
10
+ tags: [i18n, eslint, lsp, mcp, ci, devtools]
11
+ documentation: https://intlayer.org/doc
12
+ support: contact@intlayer.org
13
+ ---
14
+
15
+ # Intlayer Dev Tools
16
+
17
+ ## Lint (ESLint / oxlint)
18
+
19
+ `eslint-plugin-intlayer` catches hardcoded strings, dynamic calls the Intlayer compiler cannot optimize, and unused dictionary content.
20
+
21
+ ```bash
22
+ npm install --save-dev eslint-plugin-intlayer
23
+ ```
24
+
25
+ Then spread `intlayer.configs.recommended` in your `eslint.config.mjs` (oxlint is also supported).
26
+
27
+ | Config | `no-raw-text` | `static-dictionary-key` | `no-dynamic-field-access` |
28
+ | --------------- | ------------- | ----------------------- | ------------------------- |
29
+ | `recommended` | warn | error | error |
30
+ | `strict` | error | error | error |
31
+ | `contract-only` | off | error | error |
32
+
33
+ ## Language Server (LSP)
34
+
35
+ `@intlayer/lsp` (binary `intlayer-lsp`) brings Go-to-Definition from a `useIntlayer("key")` call to its `.content` file, Find References, hover previews, key autocompletion and diagnostics.
36
+
37
+ ```bash
38
+ npm install --save-dev @intlayer/lsp
39
+ ```
40
+
41
+ ## VS Code Extension
42
+
43
+ Jump from a dictionary key to its content file, extract content from a component, and run build, fill, test, push and pull from the command palette.
44
+
45
+ ## MCP Server
46
+
47
+ Gives AI assistants access to the Intlayer documentation and CLI.
48
+
49
+ ```bash
50
+ npx intlayer init mcp
51
+ ```
52
+
53
+ This writes the MCP configuration for your IDE (local `@intlayer/mcp` over stdio, or the hosted `https://mcp.intlayer.org`).
54
+
55
+ A WebMCP is also available for the main website and documentation at `https://intlayer.org`.
56
+
57
+ ## CI/CD
58
+
59
+ Fill missing translations with AI on each change, and fail the build on missing ones:
60
+
61
+ ```bash
62
+ npx intlayer fill --git-diff --mode complete
63
+ npx intlayer test
64
+ ```
65
+
66
+ ## Chrome Extension
67
+
68
+ Inspect the i18n setup of any website: framework, i18n library, locales, hreflang and SEO tags.
69
+
70
+ ## References
71
+
72
+ - [Website](https://intlayer.org)
73
+ - [Doc](https://intlayer.org/doc)
74
+
75
+ ### Tools
76
+
77
+ - [ESLint Plugin](https://intlayer.org/doc/eslint.md)
78
+ - [Language Server (LSP)](https://intlayer.org/doc/lsp.md)
79
+ - [VS Code Extension](https://intlayer.org/doc/vs-code-extension.md)
80
+ - [MCP Server](https://intlayer.org/doc/mcp-server.md)
81
+ - [CI/CD](https://intlayer.org/doc/concept/ci-cd.md)
82
+ - [Chrome Extension](https://intlayer.org/doc/chrome-extension.md)
@@ -0,0 +1,115 @@
1
+ ---
2
+ name: intlayer-lit
3
+ description: Integrates Intlayer internationalization with Lit web components. Use when the user asks to "setup Lit i18n", create a translated LitElement, use the "useIntlayer" controller, or switch locale in a Lit application.
4
+ metadata:
5
+ author: Intlayer
6
+ url: https://intlayer.org
7
+ license: Apache-2.0
8
+ mcp-server: "@intlayer/mcp"
9
+ category: productivity
10
+ tags: [i18n, lit, web-components, vite]
11
+ documentation: https://intlayer.org/doc
12
+ support: contact@intlayer.org
13
+ ---
14
+
15
+ # Intlayer Lit Usage
16
+
17
+ ## Core Philosophy
18
+
19
+ Intlayer promotes **Component-Level Content Declaration**. Instead of a massive global translation file, content is declared in `*.content.ts` files adjacent to the Lit elements that use them.
20
+
21
+ ## Workflow
22
+
23
+ To create a translated element, you need two files:
24
+
25
+ 1. **Declaration:** A content file (e.g., `myElement.content.ts`) defining the dictionary.
26
+ 2. **Implementation:** A `LitElement` (e.g., `my-element.ts`) using the `useIntlayer` controller.
27
+
28
+ ### Declare Content
29
+
30
+ Create a content file using `t()` for translations.
31
+ **File:** `src/components/myElement.content.ts`
32
+
33
+ ```typescript
34
+ import { t, type Dictionary } from "intlayer";
35
+
36
+ const content = {
37
+ // The 'key' must be unique and matches what you pass to useIntlayer()
38
+ key: "my-element",
39
+ content: {
40
+ title: t({
41
+ en: "Welcome",
42
+ fr: "Bienvenue",
43
+ es: "Hola",
44
+ }),
45
+ },
46
+ } satisfies Dictionary;
47
+
48
+ export default content;
49
+ ```
50
+
51
+ ## Setup
52
+
53
+ - [Vite and Lit](https://intlayer.org/doc/environment/vite-and-lit.md)
54
+
55
+ Call `installIntlayer()` from `lit-intlayer` before any custom element is registered (see the [Vite and Lit guide](https://intlayer.org/doc/environment/vite-and-lit.md)).
56
+
57
+ ## useIntlayer Controller
58
+
59
+ > [!IMPORTANT]
60
+ > In Lit, `useIntlayer` takes the host element as first argument. It registers itself as a `ReactiveController`, so the element re-renders automatically when the locale changes.
61
+
62
+ ```typescript
63
+ import { LitElement, html } from "lit";
64
+ import { customElement } from "lit/decorators.js";
65
+ import { useIntlayer } from "lit-intlayer";
66
+
67
+ @customElement("my-element")
68
+ export class MyElement extends LitElement {
69
+ private content = useIntlayer(this, "my-element");
70
+
71
+ override render() {
72
+ return html`
73
+ <h1>${this.content.title}</h1>
74
+ <!-- Return string (.value) for native attributes -->
75
+ <img alt=${this.content.title.value} />
76
+ `;
77
+ }
78
+ }
79
+ ```
80
+
81
+ ## useLocale Controller
82
+
83
+ ```typescript
84
+ import { useLocale } from "lit-intlayer";
85
+
86
+ // Inside a LitElement
87
+ private locale = useLocale(this);
88
+
89
+ // this.locale.locale, this.locale.availableLocales, this.locale.setLocale("fr")
90
+ ```
91
+
92
+ ## Compiler
93
+
94
+ The [Intlayer Compiler](https://intlayer.org/doc/compiler.md) can extract all your content keys from your components, using one CLI command (`npx intlayer extract`) or automatically at app build.
95
+
96
+ ## References
97
+
98
+ - [Website](https://intlayer.org)
99
+ - [Doc](https://intlayer.org/doc)
100
+
101
+ ### Environments
102
+
103
+ - [Vite and Lit](https://intlayer.org/doc/environment/vite-and-lit.md)
104
+ - [Astro and Lit](https://intlayer.org/doc/environment/astro/lit.md)
105
+
106
+ ### Concepts
107
+
108
+ - [Variants](https://intlayer.org/doc/concept/variants.md)
109
+ - [Collections](https://intlayer.org/doc/concept/collections.md)
110
+ - [Compiler](https://intlayer.org/doc/compiler.md)
111
+ - [Formatters (number, currency, date, …)](https://intlayer.org/doc/formatters.md)
112
+
113
+ ### Packages
114
+
115
+ - [Intlayer Exports](https://intlayer.org/doc/packages/intlayer/exports.md)
@@ -0,0 +1,96 @@
1
+ ---
2
+ name: intlayer-markdown
3
+ description: Declares and renders Markdown / rich text content with Intlayer (md(), .content.md files, MDX components, MarkdownProvider, SSR parsing). Use when the user asks to "add markdown content", "render rich text", "customize markdown components", or "render a markdown string".
4
+ metadata:
5
+ author: Intlayer
6
+ url: https://intlayer.org
7
+ license: Apache-2.0
8
+ mcp-server: "@intlayer/mcp"
9
+ category: productivity
10
+ tags: [i18n, markdown, mdx, rich-text]
11
+ documentation: https://intlayer.org/doc
12
+ support: contact@intlayer.org
13
+ ---
14
+
15
+ # Intlayer Markdown
16
+
17
+ ## Declaring Markdown Content
18
+
19
+ ```typescript
20
+ import { file, md, t, type Dictionary } from "intlayer";
21
+
22
+ const content = {
23
+ key: "app",
24
+ content: {
25
+ // Explicit markdown
26
+ intro: md("## My title \n\nLorem Ipsum"),
27
+ // Per-locale external files
28
+ article: t({
29
+ en: md(file("./article.en.md")),
30
+ fr: md(file("./article.fr.md")),
31
+ }),
32
+ },
33
+ } satisfies Dictionary;
34
+
35
+ export default content;
36
+ ```
37
+
38
+ Other ways to declare it:
39
+
40
+ - **`.content.md` files** (since v8.10): a Markdown file with `key` (and optional `locale`) in its front-matter, e.g. `article.en.content.md`, `article.fr.content.md`.
41
+ - **Automatic detection**: set `contentAutoTransformation: true` (per dictionary or globally in `intlayer.config.ts`) and plain strings containing Markdown syntax are transformed.
42
+
43
+ ## Rendering via `useIntlayer`
44
+
45
+ An `md` node renders directly as the framework's native output (JSX, VNode, HTML string). MDX is supported: component names used in the Markdown resolve against the `components` map.
46
+
47
+ ```tsx
48
+ const { intro } = useIntlayer("app");
49
+
50
+ <div>{intro}</div>; // Rendered markdown
51
+ intro.use({ h1: (props) => <h1 className="title" {...props} /> }); // Local override
52
+ intro.value; // Raw markdown string
53
+ intro.metadata.title; // Parsed front-matter
54
+ ```
55
+
56
+ Priority: `.use()` > global provider > default renderer.
57
+
58
+ ## Global Configuration
59
+
60
+ Set default `components` and options once for the whole app:
61
+
62
+ | Framework | Global configuration |
63
+ | ------------------------------------- | --------------------------------------------------------------------- |
64
+ | React, Next.js, Preact, Solid, Svelte | `MarkdownProvider` from `<package>/markdown` |
65
+ | Vue | `app.use(intlayerMarkdown, options)` from `vue-intlayer/markdown` |
66
+ | Angular | `createIntlayerMarkdownProvider(options)` in `ApplicationConfig` |
67
+ | Astro | `installIntlayerMarkdown(options)` in the middleware and a `<script>` |
68
+ | Lit, Vanilla | `installIntlayerMarkdown()` next to `installIntlayer()` |
69
+
70
+ ## Rendering Raw Markdown Strings
71
+
72
+ For Markdown that does not come from a dictionary, use the helpers from `<package>/markdown`: `<MarkdownRenderer />`, `useMarkdownRenderer()` and `renderMarkdown()`. They accept raw strings only, not `useIntlayer` nodes.
73
+
74
+ ## Performance
75
+
76
+ - **Suspense (React)**: the parser (~55kb) is loaded lazily. Wrap components rendering Markdown in a `<Suspense>` boundary, otherwise React suspends at the root.
77
+ - **SSR**: call `parseMarkdown()` on the server and pass the serializable AST to the client; every rendering helper accepts it, so the browser skips parsing.
78
+
79
+ ## Options
80
+
81
+ Accepted by the global configuration and the helpers: `forceBlock`, `forceInline`, `tagfilter` (default `true`, strips dangerous HTML), `preserveFrontmatter`, `components`, `wrapper`, `renderMarkdown`.
82
+
83
+ ## References
84
+
85
+ - [Website](https://intlayer.org)
86
+ - [Doc](https://intlayer.org/doc)
87
+
88
+ ### Concepts
89
+
90
+ - [Markdown](https://intlayer.org/doc/concept/content/markdown.md)
91
+ - [HTML](https://intlayer.org/doc/concept/content/html.md)
92
+ - [File](https://intlayer.org/doc/concept/content/file.md)
93
+
94
+ ### Packages
95
+
96
+ - [React Intlayer MarkdownRenderer](https://intlayer.org/doc/packages/react-intlayer/MarkdownRenderer.md)
@@ -53,59 +53,32 @@ export default content;
53
53
  - [Next.js](https://intlayer.org/doc/environment/nextjs.md)
54
54
  - [Next.js 14](https://intlayer.org/doc/environment/nextjs/14.md)
55
55
  - [Next.js 15](https://intlayer.org/doc/environment/nextjs/15.md)
56
- - [No Locale Path](https://intlayer.org/doc/environment/nextjs/no-locale-path.md)
57
56
  - [Page Router](https://intlayer.org/doc/environment/nextjs/next-with-page-router.md)
58
57
 
59
- ## Server Components
58
+ ## Provider
60
59
 
61
- To use Intlayer in Server Components, use `IntlayerServerProvider` to provide the locale and `useIntlayer` from `next-intlayer/server`.
60
+ Mount one `IntlayerProvider` (from `next-intlayer/server`) in the `[locale]` layout. It serves both server and client components, so pages don't wrap themselves (see the [Next.js guide](https://intlayer.org/doc/environment/nextjs.md)).
62
61
 
63
- ```tsx
64
- import { IntlayerServerProvider, useIntlayer } from "next-intlayer/server";
65
-
66
- const MyServerComponent = () => {
67
- const content = useIntlayer("my-component");
68
- return (
69
- <div>
70
- <h1>{content.text}</h1>
71
- </div>
72
- );
73
- };
74
-
75
- const Page = async ({ params }) => {
76
- const { locale } = await params;
77
- return (
78
- <IntlayerServerProvider locale={locale}>
79
- <MyServerComponent />
80
- </IntlayerServerProvider>
81
- );
82
- };
83
-
84
- export default Page;
85
- ```
86
-
87
- ## Client Components
62
+ ## useIntlayer Hook
88
63
 
89
- For Client Components, add the `"use client"` directive and use `useIntlayer` from `next-intlayer`. Ensure the component is wrapped in an `IntlayerClientProvider`.
64
+ `next-intlayer` is isomorphic: the same `useIntlayer` import works in Server Components and in `"use client"` components.
90
65
 
91
66
  ```tsx
92
- "use client";
93
-
94
67
  import { useIntlayer } from "next-intlayer";
95
68
 
96
- export const MyClientComponent = () => {
69
+ export const MyComponent = () => {
97
70
  const content = useIntlayer("my-component");
98
71
 
99
- return (
100
- <div>
101
- <h1>{content.text}</h1>
102
- </div>
103
- );
72
+ return <h1>{content.text}</h1>;
104
73
  };
105
74
  ```
106
75
 
107
76
  [Next.js package Documentation](https://intlayer.org/doc/packages/next-intlayer/exports.md)
108
77
 
78
+ ## Compiler
79
+
80
+ The [Intlayer Compiler](https://intlayer.org/doc/compiler.md) can extract all your content keys from your components, using one CLI command (`npx intlayer extract`) or automatically at app build.
81
+
109
82
  ## References
110
83
 
111
84
  - [Website](https://intlayer.org)
@@ -116,8 +89,16 @@ export const MyClientComponent = () => {
116
89
  - [Next.js](https://intlayer.org/doc/environment/nextjs.md)
117
90
  - [Next.js 14](https://intlayer.org/doc/environment/nextjs/14.md)
118
91
  - [Next.js 15](https://intlayer.org/doc/environment/nextjs/15.md)
119
- - [Next.js No Locale Path](https://intlayer.org/doc/environment/nextjs/no-locale-path.md)
120
92
  - [Next.js with Page Router](https://intlayer.org/doc/environment/nextjs/next-with-page-router.md)
93
+ - [Intlayer with next-intl](https://intlayer.org/doc/next-intl.md)
94
+ - [Intlayer with next-i18next](https://intlayer.org/doc/next-i18next.md)
95
+
96
+ ### Concepts
97
+
98
+ - [Variants](https://intlayer.org/doc/concept/variants.md)
99
+ - [Collections](https://intlayer.org/doc/concept/collections.md)
100
+ - [Compiler](https://intlayer.org/doc/compiler.md)
101
+ - [Formatters (number, currency, date, …)](https://intlayer.org/doc/formatters.md)
121
102
 
122
103
  ### Packages
123
104
 
@@ -128,3 +109,5 @@ export const MyClientComponent = () => {
128
109
  - [Next Intlayer useDictionary](https://intlayer.org/doc/packages/next-intlayer/useDictionary.md)
129
110
  - [Next Intlayer useIntlayer](https://intlayer.org/doc/packages/next-intlayer/useIntlayer.md)
130
111
  - [Next Intlayer useLocale](https://intlayer.org/doc/packages/next-intlayer/useLocale.md)
112
+ - [next-intlayer usePathname](https://intlayer.org/doc/packages/next-intlayer/usePathname.md)
113
+ - [next-intlayer useRewriteURL](https://intlayer.org/doc/packages/next-intlayer/useRewriteURL.md)
@@ -73,11 +73,29 @@ const MyComponent = () => {
73
73
  };
74
74
  ```
75
75
 
76
+ ## Compiler
77
+
78
+ The [Intlayer Compiler](https://intlayer.org/doc/compiler.md) can extract all your content keys from your components, using one CLI command (`npx intlayer extract`) or automatically at app build.
79
+
76
80
  ## References
77
81
 
78
82
  - [Website](https://intlayer.org)
79
83
  - [Doc](https://intlayer.org/doc)
80
84
 
85
+ ### Environments
86
+
81
87
  - [Vite and Preact](https://intlayer.org/doc/environment/vite-and-preact.md)
88
+ - [Astro and Preact](https://intlayer.org/doc/environment/astro/preact.md)
89
+
90
+ ### Concepts
91
+
92
+ - [Variants](https://intlayer.org/doc/concept/variants.md)
93
+ - [Collections](https://intlayer.org/doc/concept/collections.md)
94
+ - [Compiler](https://intlayer.org/doc/compiler.md)
95
+ - [Formatters (number, currency, date, …)](https://intlayer.org/doc/formatters.md)
96
+
97
+ ### Packages
98
+
82
99
  - [Intlayer Exports](https://intlayer.org/doc/packages/intlayer/exports.md)
83
100
  - [Preact Intlayer Exports](https://intlayer.org/doc/packages/preact-intlayer/exports.md)
101
+ - [preact-intlayer usePathname](https://intlayer.org/doc/packages/preact-intlayer/usePathname.md)
@@ -49,17 +49,15 @@ const content = {
49
49
  export default content;
50
50
  ```
51
51
 
52
- # Intlayer React Usage
53
-
54
52
  ## Setup
55
53
 
56
54
  - [Vite and React](https://intlayer.org/doc/environment/vite-and-react.md)
57
55
  - [Create React App](https://intlayer.org/doc/environment/create-react-app.md)
58
56
  - [React Router v7](https://intlayer.org/doc/environment/vite-and-react/react-router-v7.md)
59
- - [React Router v7 (fs routes)](https://intlayer.org/doc/environment/vite-and-react/react-router-v7-fs-routes.md)
60
57
  - [Tanstack Start](https://intlayer.org/doc/environment/tanstack-start.md)
61
58
  - [React Native and Expo](https://intlayer.org/doc/environment/react-native-and-expo.md)
62
59
  - [Lynx and React](https://intlayer.org/doc/environment/lynx-and-react.md)
60
+ - [Storybook](https://intlayer.org/doc/storybook.md)
63
61
 
64
62
  ## useIntlayer Hook
65
63
 
@@ -80,6 +78,10 @@ const MyComponent = () => {
80
78
  };
81
79
  ```
82
80
 
81
+ ## Compiler
82
+
83
+ The [Intlayer Compiler](https://intlayer.org/doc/compiler.md) can extract all your content keys from your components, using one CLI command (`npx intlayer extract`) or automatically at app build.
84
+
83
85
  ## References
84
86
 
85
87
  - [Website](https://intlayer.org)
@@ -90,7 +92,18 @@ const MyComponent = () => {
90
92
  - [Vite and React](https://intlayer.org/doc/environment/vite-and-react.md)
91
93
  - [Create React App](https://intlayer.org/doc/environment/create-react-app.md)
92
94
  - [Vite and React (React Router v7)](https://intlayer.org/doc/environment/vite-and-react/react-router-v7.md)
93
- - [Vite and React (React Router v7 FS Routes)](https://intlayer.org/doc/environment/vite-and-react/react-router-v7-fs-routes.md)
95
+ - [Tanstack Start](https://intlayer.org/doc/environment/tanstack-start.md)
96
+ - [React Native and Expo](https://intlayer.org/doc/environment/react-native-and-expo.md)
97
+ - [Lynx and React](https://intlayer.org/doc/environment/lynx-and-react.md)
98
+ - [Astro and React](https://intlayer.org/doc/environment/astro/react.md)
99
+ - [Storybook](https://intlayer.org/doc/storybook.md)
100
+
101
+ ### Concepts
102
+
103
+ - [Variants](https://intlayer.org/doc/concept/variants.md)
104
+ - [Collections](https://intlayer.org/doc/concept/collections.md)
105
+ - [Compiler](https://intlayer.org/doc/compiler.md)
106
+ - [Formatters (number, currency, date, …)](https://intlayer.org/doc/formatters.md)
94
107
 
95
108
  ### Packages
96
109
 
@@ -103,3 +116,7 @@ const MyComponent = () => {
103
116
  - [React Intlayer useI18n](https://intlayer.org/doc/packages/react-intlayer/useI18n.md)
104
117
  - [React Intlayer useIntlayer](https://intlayer.org/doc/packages/react-intlayer/useIntlayer.md)
105
118
  - [React Intlayer useLocale](https://intlayer.org/doc/packages/react-intlayer/useLocale.md)
119
+ - [lynx-intlayer Exports](https://intlayer.org/doc/packages/lynx-intlayer/exports.md)
120
+ - [react-intlayer usePathname](https://intlayer.org/doc/packages/react-intlayer/usePathname.md)
121
+ - [react-intlayer useRewriteURL](https://intlayer.org/doc/packages/react-intlayer/useRewriteURL.md)
122
+ - [react-native-intlayer Exports](https://intlayer.org/doc/packages/react-native-intlayer/exports.md)
@@ -0,0 +1,95 @@
1
+ ---
2
+ name: intlayer-remix
3
+ description: Integrates Intlayer internationalization with Remix 3 applications. Use when the user asks to "setup Remix i18n", register the Intlayer router middleware, or use the "useIntlayer" / "useLocale" hooks in Remix route handlers and views.
4
+ metadata:
5
+ author: Intlayer
6
+ url: https://intlayer.org
7
+ license: Apache-2.0
8
+ mcp-server: "@intlayer/mcp"
9
+ category: productivity
10
+ tags: [i18n, remix]
11
+ documentation: https://intlayer.org/doc
12
+ support: contact@intlayer.org
13
+ ---
14
+
15
+ # Intlayer Remix Usage
16
+
17
+ ## Core Philosophy
18
+
19
+ Intlayer promotes **Component-Level Content Declaration**. Instead of a massive global translation file, content is declared in `*.content.ts` files adjacent to the views that use them.
20
+
21
+ ### Declare Content
22
+
23
+ **File:** `src/views/home.content.ts`
24
+
25
+ ```typescript
26
+ import { t, type Dictionary } from "intlayer";
27
+
28
+ const content = {
29
+ key: "home",
30
+ content: {
31
+ title: t({
32
+ en: "Welcome",
33
+ fr: "Bienvenue",
34
+ es: "Hola",
35
+ }),
36
+ },
37
+ } satisfies Dictionary;
38
+
39
+ export default content;
40
+ ```
41
+
42
+ ## Setup
43
+
44
+ - [Remix 3](https://intlayer.org/doc/environment/remix-3.md)
45
+
46
+ Register the `intlayer()` [router middleware](https://intlayer.org/doc/packages/remix-intlayer/intlayerMiddleware.md) in `createRouter()`, before `render()`. It strips the locale prefix before route matching, so routes are declared once without a `:locale` segment.
47
+
48
+ ## Hooks
49
+
50
+ `useIntlayer`, `useDictionary` and `useLocale` read the request locale with no argument, anywhere downstream of the middleware (route handlers and `remix/ui` views).
51
+
52
+ ```tsx
53
+ import { useIntlayer, useLocale } from "remix-intlayer";
54
+
55
+ export const HomePage = () => () => {
56
+ const { locale, availableLocales } = useLocale();
57
+ const home = useIntlayer("home");
58
+
59
+ return <h1>{home.title}</h1>;
60
+ };
61
+ ```
62
+
63
+ > - `useIntlayer("home", "fr")` overrides the request locale for one call.
64
+ > - Remix JSX is not React: `class` is written as-is, and re-renders are triggered with `handle.update()`.
65
+ > - Outside of a request, the hooks fall back to the default locale.
66
+
67
+ ## Compiler
68
+
69
+ The [Intlayer Compiler](https://intlayer.org/doc/compiler.md) can extract all your content keys from your components, using one CLI command (`npx intlayer extract`) or automatically at app build.
70
+
71
+ ## References
72
+
73
+ - [Website](https://intlayer.org)
74
+ - [Doc](https://intlayer.org/doc)
75
+
76
+ ### Environments
77
+
78
+ - [Remix 3](https://intlayer.org/doc/environment/remix-3.md)
79
+
80
+ ### Concepts
81
+
82
+ - [Variants](https://intlayer.org/doc/concept/variants.md)
83
+ - [Collections](https://intlayer.org/doc/concept/collections.md)
84
+ - [Compiler](https://intlayer.org/doc/compiler.md)
85
+ - [Formatters (number, currency, date, …)](https://intlayer.org/doc/formatters.md)
86
+
87
+ ### Packages
88
+
89
+ - [Intlayer Exports](https://intlayer.org/doc/packages/intlayer/exports.md)
90
+ - [Remix Intlayer Exports](https://intlayer.org/doc/packages/remix-intlayer/exports.md)
91
+ - [remix-intlayer Intlayer](https://intlayer.org/doc/packages/remix-intlayer/Intlayer.md)
92
+ - [remix-intlayer intlayerMiddleware](https://intlayer.org/doc/packages/remix-intlayer/intlayerMiddleware.md)
93
+ - [remix-intlayer useDictionary](https://intlayer.org/doc/packages/remix-intlayer/useDictionary.md)
94
+ - [remix-intlayer useIntlayer](https://intlayer.org/doc/packages/remix-intlayer/useIntlayer.md)
95
+ - [remix-intlayer useLocale](https://intlayer.org/doc/packages/remix-intlayer/useLocale.md)
@@ -1,5 +1,5 @@
1
1
  ---
2
- name: intlayer-cms
2
+ name: intlayer-remote-content
3
3
  description: Manages remote content and server-side dictionaries using the Intlayer CMS. Use when the user asks to "fetch remote translations", "use Intlayer CMS", or "handle server-side content".
4
4
  metadata:
5
5
  author: Intlayer
@@ -1,5 +1,5 @@
1
1
  ---
2
- name: intlayer-solid-js
2
+ name: intlayer-solid
3
3
  description: Integrates Intlayer internationalization with SolidJS components. Use when the user asks to "setup SolidJS i18n", create a new translated component, use the "useIntlayer" hook in Solid, or configure providers.
4
4
  metadata:
5
5
  author: Intlayer
@@ -51,6 +51,8 @@ export default content;
51
51
  ## Setup
52
52
 
53
53
  - [Vite and Solid](https://intlayer.org/doc/environment/vite-and-solid.md)
54
+ - [SolidStart](https://intlayer.org/doc/environment/solid-start.md)
55
+ - [TanStack Start and Solid](https://intlayer.org/doc/environment/tanstack-start/solid.md)
54
56
 
55
57
  ## useIntlayer Hook
56
58
 
@@ -76,6 +78,10 @@ const MyComponent = () => {
76
78
  };
77
79
  ```
78
80
 
81
+ ## Compiler
82
+
83
+ The [Intlayer Compiler](https://intlayer.org/doc/compiler.md) can extract all your content keys from your components, using one CLI command (`npx intlayer extract`) or automatically at app build.
84
+
79
85
  ## References
80
86
 
81
87
  - [Website](https://intlayer.org)
@@ -84,7 +90,21 @@ const MyComponent = () => {
84
90
  ### Environments
85
91
 
86
92
  - [Vite and Solid](https://intlayer.org/doc/environment/vite-and-solid.md)
93
+ - [SolidStart](https://intlayer.org/doc/environment/solid-start.md)
94
+ - [TanStack Start and Solid](https://intlayer.org/doc/environment/tanstack-start/solid.md)
95
+
96
+ ### Concepts
97
+
98
+ - [Variants](https://intlayer.org/doc/concept/variants.md)
99
+ - [Collections](https://intlayer.org/doc/concept/collections.md)
100
+ - [Compiler](https://intlayer.org/doc/compiler.md)
101
+ - [Formatters (number, currency, date, …)](https://intlayer.org/doc/formatters.md)
87
102
 
88
103
  ### Packages
89
104
 
90
105
  - [Solid Intlayer Exports](https://intlayer.org/doc/packages/solid-intlayer/exports.md)
106
+ - [solid-intlayer IntlayerProvider](https://intlayer.org/doc/packages/solid-intlayer/IntlayerProvider.md)
107
+ - [solid-intlayer useIntlayer](https://intlayer.org/doc/packages/solid-intlayer/useIntlayer.md)
108
+ - [solid-intlayer useLocale](https://intlayer.org/doc/packages/solid-intlayer/useLocale.md)
109
+ - [solid-intlayer usePathname](https://intlayer.org/doc/packages/solid-intlayer/usePathname.md)
110
+ - [solid-intlayer useRewriteURL](https://intlayer.org/doc/packages/solid-intlayer/useRewriteURL.md)
@@ -73,12 +73,33 @@ In Svelte, `useIntlayer` returns a **store**. You must use the `$` prefix to acc
73
73
  </div>
74
74
  ```
75
75
 
76
+ ## Compiler
77
+
78
+ The [Intlayer Compiler](https://intlayer.org/doc/compiler.md) can extract all your content keys from your components, using one CLI command (`npx intlayer extract`) or automatically at app build.
79
+
80
+ It activates once `compiler.enabled` and `compiler.output` are set: `.svelte` files additionally require `@intlayer/svelte-compiler`.
81
+
76
82
  ## References
77
83
 
78
84
  - [Website](https://intlayer.org)
79
85
  - [Doc](https://intlayer.org/doc)
80
86
 
81
- - [Intlayer Exports](https://intlayer.org/doc/packages/intlayer/exports.md)
87
+ ### Environments
88
+
82
89
  - [Vite and Svelte](https://intlayer.org/doc/environment/vite-and-svelte.md)
83
90
  - [SvelteKit](https://intlayer.org/doc/environment/sveltekit.md)
91
+ - [Astro and Svelte](https://intlayer.org/doc/environment/astro/svelte.md)
92
+
93
+ ### Concepts
94
+
95
+ - [Variants](https://intlayer.org/doc/concept/variants.md)
96
+ - [Collections](https://intlayer.org/doc/concept/collections.md)
97
+ - [Compiler](https://intlayer.org/doc/compiler.md)
98
+ - [Formatters (number, currency, date, …)](https://intlayer.org/doc/formatters.md)
99
+
100
+ ### Packages
101
+
102
+ - [Intlayer Exports](https://intlayer.org/doc/packages/intlayer/exports.md)
84
103
  - [Svelte Intlayer Exports](https://intlayer.org/doc/packages/svelte-intlayer/exports.md)
104
+ - [svelte-intlayer usePathname](https://intlayer.org/doc/packages/svelte-intlayer/usePathname.md)
105
+ - [svelte-intlayer useRewriteURL](https://intlayer.org/doc/packages/svelte-intlayer/useRewriteURL.md)