@intlayer/docs 8.10.0-canary.0 → 8.10.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.
@@ -2,7 +2,7 @@
2
2
  createdAt: 2025-02-07
3
3
  updatedAt: 2026-05-19
4
4
  title: Markdown
5
- description: Дізнайтеся, як оголошувати та використовувати контент Markdown на вашому багатомовному веб-сайті за допомогою Intlayer. Дотримуйтесь кроків у цій онлайн-документації, щоб легко інтегрувати Markdown у ваш проєкт.
5
+ description: Дізнайтеся, як оголошувати та використовувати вміст Markdown на вашому багатомовному веб-сайті за допомогою Intlayer. Дотримуйтесь інструкцій у цій онлайн-документації, щоб безперешкодно інтегрувати Markdown у ваш проект.
6
6
  keywords:
7
7
  - Markdown
8
8
  - Інтернаціоналізація
@@ -22,46 +22,46 @@ history:
22
22
  changes: "Додано підтримку файлів `.content.md`"
23
23
  - version: 8.5.0
24
24
  date: 2026-03-24
25
- changes: "Add `intlayerMarkdown` plugin object; use `app.use(intlayerMarkdown)` instead of `app.use(installIntlayerMarkdown)`"
25
+ changes: "Додано об'єкт плагіна `intlayerMarkdown`; використовуйте `app.use(intlayerMarkdown)` замість `app.use(installIntlayerMarkdown)`"
26
26
  - version: 8.5.0
27
27
  date: 2026-03-24
28
- changes: "move import from `{{framework}}-intlayer` to `{{framework}}-intlayer/markdown`"
28
+ changes: "Імпорт переміщено з `{{framework}}-intlayer` до `{{framework}}-intlayer/markdown`"
29
29
  - version: 8.0.0
30
30
  date: 2026-01-22
31
- changes: "Додано MarkdownRenderer / useMarkdownRenderer / утиліту renderMarkdown та опцію forceInline"
31
+ changes: "Додано утиліту MarkdownRenderer / useMarkdownRenderer / renderMarkdown та опцію forceInline"
32
32
  - version: 8.0.0
33
33
  date: 2026-01-18
34
- changes: "Автоматичне оформлення контенту markdown, підтримка MDX та SSR"
34
+ changes: "Автоматичне оформлення вмісту markdown, підтримка MDX та SSR"
35
35
  - version: 5.5.10
36
36
  date: 2025-06-29
37
37
  changes: "Ініціалізація історії"
38
38
  ---
39
39
 
40
- # Markdown / Форматований текст
40
+ # Markdown / Вміст форматованого тексту
41
41
 
42
- Intlayer підтримує контент rich text, визначений за допомогою синтаксису Markdown. Це дозволяє легко писати та підтримувати контент із багатим форматуванням, таким як блоги, статті та інше.
42
+ Intlayer підтримує вміст форматованого тексту, визначений за допомогою синтаксису Markdown. Це дозволяє легко створювати та підтримувати форматований вміст, такий як блоги, статті тощо.
43
43
 
44
- ## Оголошення контенту Markdown
44
+ ## Оголошення вмісту Markdown
45
45
 
46
- Ви можете оголосити контент Markdown за допомогою функції `md` або просто як рядок (якщо він містить синтаксис Markdown).
46
+ Ви можете оголосити вміст Markdown за допомогою функції `md` або просто як рядок (якщо він містить синтаксис Markdown).
47
47
 
48
48
  <Tabs>
49
49
  <Tab label=".content.md" value=".content.md">
50
- Починаючи з версії `8.10.0`, ви можете оголошувати контент Markdown безпосередньо у файлах `.content.md`. Intlayer автоматично виявить та розбере контент Markdown.
50
+ Починаючи з версії `8.10.0`, ви можете оголошувати вміст Markdown безпосередньо у файлах `.content.md`. Intlayer автоматично виявлятиме та аналізуватиме вміст Markdown.
51
51
 
52
- ```md fileName="markdown-file.uk.content.md"
52
+ ```md fileName="markdown-file.en.content.md"
53
53
  ---
54
54
  key: my-markdown-content
55
- description: Мій контент
56
- locale: uk
55
+ description: Мій вміст
56
+ locale: en
57
57
  ---
58
58
 
59
- # Мій контент
59
+ # Мій вміст
60
60
 
61
- Ось приклад контенту markdown
61
+ Ось приклад вмісту markdown
62
62
  ```
63
63
 
64
- Поле `locale` у frontmatter визначає локаль контенту. Це поле є необов'язковим. Якщо його не вказано, Intlayer використовуватиме локаль за замовчуванням, яка також використовується як резервна (fallback) локаль, якщо переклад для конкретної локалі відсутній.
64
+ Поле front-matter `locale` визначає локаль вмісту. Воно є необов'язковим. Якщо його не вказано, Intlayer використовуватиме локаль за замовчуванням, яка також слугуватиме резервною, якщо переклад для конкретної локалі недоступний.
65
65
 
66
66
  Приклад структури файлів:
67
67
 
@@ -75,11 +75,11 @@ Intlayer підтримує контент rich text, визначений за
75
75
  └── markdown-file.es.content.md
76
76
  ```
77
77
 
78
- Ви можете додати у front-matter будь-які властивості, визначені у [Визначенні словника (Dictionary definition)](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/dictionary/content_file.md)
78
+ У front-matter ви можете додати будь-які властивості, визначені у [Визначенні словника](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/dictionary/content_file.md)
79
79
 
80
80
  </Tab>
81
81
  <Tab label="Ручне обгортання" value="manual-wrapping">
82
- Використовуйте функцію `md` для явного оголошення контенту Markdown. Це корисно, якщо ви хочете переконатися, що рядок розглядається як Markdown, навіть якщо він не містить очевидного синтаксису.
82
+ Використовуйте функцію `md` для явного оголошення вмісту Markdown. Це корисно, якщо ви хочете переконатися, що рядок обробляється як Markdown, навіть якщо він не містить очевидного синтаксису.
83
83
 
84
84
  ```typescript fileName="markdownDictionary.content.ts"
85
85
  import { md, type Dictionary } from "intlayer";
@@ -95,33 +95,34 @@ Intlayer підтримує контент rich text, визначений за
95
95
  ```
96
96
 
97
97
  </Tab>
98
- <Tab label="Автоматичне виявлення">
99
- Якщо рядок містить загальні індикатори Markdown (наприклад, заголовки, списки, посилання тощо), Intlayer автоматично перетворить його.
98
+ <Tab label="Зовнішні файли" value="external-files">
99
+ Імпортуйте файли `.md` безпосередньо за допомогою функції `file`.
100
100
 
101
101
  ```typescript fileName="markdownDictionary.content.ts"
102
+ import { md, file, t } from "intlayer";
103
+
102
104
  export default {
103
105
  key: "app",
104
- contentAutoTransformation: true, // Увімкнути автоматичне виявлення контенту Markdown - Можна встановити глобально в intlayer.config.ts
105
106
  content: {
106
- myMarkdownContent: "## Мій заголовок \n\nLorem Ipsum",
107
+ content: t({
108
+ en: md(file("./myMarkdown.en.md")),
109
+ uk: md(file("./myMarkdown.uk.md")),
110
+ }),
107
111
  },
108
112
  };
109
113
  ```
110
114
 
111
115
  </Tab>
112
- <Tab label="Зовнішні файли" value="external-files">
113
- Імпортуйте файли `.md` безпосередньо за допомогою функції `file`.
114
116
 
115
- ```typescript fileName="markdownDictionary.content.ts"
116
- import { md, file, t } from "intlayer";
117
+ <Tab label="Автоматичне виявлення" value="automatic-detection">
118
+ Якщо рядок містить типові індикатори Markdown (наприклад, заголовки, списки, посилання тощо), Intlayer автоматично перетворить його.
117
119
 
120
+ ```typescript fileName="markdownDictionary.content.ts"
118
121
  export default {
119
122
  key: "app",
123
+ contentAutoTransformation: true, // Увімкнути автоматичне виявлення вмісту Markdown - Можна налаштувати глобально в intlayer.config.ts
120
124
  content: {
121
- content: t({
122
- en: md(file("./myMarkdown.en.md")),
123
- fr: md(file("./myMarkdown.fr.md")),
124
- }),
125
+ myMarkdownContent: "## Мій заголовок \n\nLorem Ipsum",
125
126
  },
126
127
  };
127
128
  ```
@@ -131,38 +132,74 @@ Intlayer підтримує контент rich text, визначений за
131
132
 
132
133
  ---
133
134
 
134
- ## Відтворення Markdown
135
+ ## Рендеринг Markdown
136
+
137
+ Intlayer надає два незалежні способи рендерингу Markdown:
135
138
 
136
- Відтворення може виконуватися автоматично системою контенту Intlayer або вручну за допомогою спеціалізованих інструментів.
139
+ 1. **Через `useIntlayer`**
140
+ — Intlayer автоматично перетворює вузол `md` у нативний вихідний формат фреймворку (JSX, VNode, HTML-рядок).
141
+ - Frontmatter аналізується та надається як `.metadata`. Ви можете перевизначити рендеринг на двох рівнях — глобально за допомогою `MarkdownProvider` (або еквівалента фреймворку) та локально для кожного вузла за допомогою `.use()`. Обидва підходи можна комбінувати; `.use()` має пріоритет над `MarkdownProvider`, який має пріоритет над поведінкою за замовчуванням.
137
142
 
138
- ### 1. Автоматичне відтворення (за допомогою `useIntlayer`)
143
+ 2. **Допоміжні утиліти** — `<MarkdownRenderer />`, `useMarkdownRenderer()` та `renderMarkdown()` є самостійними інструментами, які приймають **тільки необроблені рядки Markdown**. Вони не залежать від `useIntlayer` і не працюють з оформленими вузлами, які він повертає.
139
144
 
140
- Коли ви отримуєте доступ до контенту через `useIntlayer`, вузли Markdown вже підготовлені до відтворення.
145
+ Рендеринг Markdown підтримує **MDX** використовуйте будь-який компонент JSX/фреймворку за назвою безпосередньо у вашому Markdown.
146
+
147
+ ### 1. Автоматичний рендеринг (через `useIntlayer`)
141
148
 
142
149
  <Tabs group="framework">
143
- <Tab label="React / Next.js">
144
- Вузли Markdown можна відтворювати безпосередньо як JSX.
150
+ <Tab label="React / Next.js" value="react">
151
+ Вузли Markdown можна рендерити безпосередньо як JSX.
145
152
 
146
153
  ```tsx fileName="App.tsx"
147
154
  import { useIntlayer } from "react-intlayer";
155
+ import { MarkdownProvider } from "react-intlayer/markdown";
148
156
 
149
157
  const AppContent = () => {
150
158
  const { myMarkdownContent } = useIntlayer("app");
159
+
151
160
  return <div>{myMarkdownContent}</div>;
152
161
  };
162
+
163
+ const App = () => (
164
+ <MarkdownProvider
165
+ components={{
166
+ h1: ({ children }) => <h1 style={{ color: "red" }}>{children}</h1>,
167
+ MyButton: (props) => <button {...props} />, // MDX-компонент
168
+ }}
169
+ >
170
+ <AppContent />
171
+ </MarkdownProvider>
172
+ );
153
173
  ```
154
174
 
175
+ > Якщо `MarkdownProvider` відсутній, Intlayer рендеритиме markdown, використовуючи стандартний парсер Markdown у JSX.
176
+
155
177
  Ви також можете надати локальні перевизначення для конкретних вузлів за допомогою методу `.use()`:
156
178
 
157
179
  ```tsx
158
180
  {myMarkdownContent.use({
159
- h1: ({ children }) => <h1 className="text-3xl font-bold">{children}</h1>,
181
+ h1: ({ children }) => <h1 style={{ color: "red" }}>{children}</h1>,
160
182
  })}
161
183
  ```
162
184
 
185
+ Ви можете отримати Markdown як рядок:
186
+
187
+ ```tsx
188
+ {myMarkdownContent.value}
189
+ {String(myMarkdownContent)}
190
+ {myMarkdownContent.toString()}
191
+ ```
192
+
193
+ І ви можете отримати доступ до метаданих markdown наступним чином:
194
+
195
+ ```tsx
196
+ {myMarkdownContent.metadata}
197
+ {myMarkdownContent.metadata.title}
198
+ ```
199
+
163
200
  </Tab>
164
201
  <Tab label="Vue" value="vue">
165
- У Vue контент Markdown можна відтворити за допомогою вбудованого компонента `component` або безпосередньо як вузол.
202
+ У Vue вміст Markdown можна рендерити за допомогою вбудованого тегу `component` або безпосередньо як вузол.
166
203
 
167
204
  ```vue fileName="App.vue"
168
205
  <script setup>
@@ -175,48 +212,188 @@ Intlayer підтримує контент rich text, визначений за
175
212
  </template>
176
213
  ```
177
214
 
215
+ Глобальне налаштування через плагін `intlayerMarkdown` (підтримує власні компоненти MDX):
216
+
217
+ ```ts fileName="main.ts"
218
+ import { intlayerMarkdown } from "vue-intlayer/markdown";
219
+
220
+ app.use(intlayerMarkdown, {
221
+ components: {
222
+ h1: (props) => h('h1', { style: { color: 'green' } }, props.children),
223
+ MyButton: (props) => h('button', props), // MDX-компонент
224
+ },
225
+ });
226
+ ```
227
+
228
+ > Якщо плагін `intlayerMarkdown` не встановлено, Intlayer рендеритиме за допомогою компілятора за замовчуванням.
229
+
230
+ Ви також можете надати локальні перевизначення для конкретних вузлів за допомогою методу `.use()`:
231
+
232
+ ```vue
233
+ <component :is="myMarkdownContent.use({
234
+ h1: (props) => h('h1', { style: { color: 'red' } }, props.children),
235
+ })" />
236
+ ```
237
+
238
+ Ви можете отримати Markdown як рядок:
239
+
240
+ ```vue
241
+ {{ myMarkdownContent.value }}
242
+ {{ String(myMarkdownContent) }}
243
+ {{ myMarkdownContent.toString() }}
244
+ ```
245
+
246
+ І ви можете отримати доступ до метаданих markdown наступним чином:
247
+
248
+ ```vue
249
+ <component :is="myMarkdownContent.metadata" />
250
+ <component :is="myMarkdownContent.metadata.title" />
251
+ ```
252
+
178
253
  </Tab>
179
254
  <Tab label="Svelte" value="svelte">
180
- Svelte відтворює Markdown як рядок HTML за замовчуванням. Використовуйте `{@html}` для його відображення.
255
+ Svelte за замовчуванням рендерить Markdown як HTML-рядок. Використовуйте `{@html}`, щоб його відрендерити.
181
256
 
182
- ```svelte
257
+ ```svelte fileName="App.svelte"
183
258
  <script lang="ts">
184
259
  import { useIntlayer } from "svelte-intlayer";
260
+ import { MarkdownProvider } from "svelte-intlayer/markdown";
261
+ import MyHeading from "./MyHeading.svelte";
262
+
185
263
  const content = useIntlayer("app");
186
264
  </script>
187
265
 
188
- {@html $content.myMarkdownContent}
266
+ <MarkdownProvider components={{ h1: MyHeading }}>
267
+ {@html $content.myMarkdownContent}
268
+ </MarkdownProvider>
269
+ ```
270
+
271
+ > Якщо `MarkdownProvider` відсутній, Intlayer рендеритиме markdown за допомогою компілятора за замовчуванням.
272
+
273
+ Ви також можете надати локальні перевизначення для конкретних вузлів за допомогою методу `.use()`:
274
+
275
+ ```svelte
276
+ {@html $content.myMarkdownContent.use({ ... })}
277
+ ```
278
+
279
+ Ви можете отримати Markdown як рядок:
280
+
281
+ ```svelte
282
+ {$content.myMarkdownContent.value}
283
+ {String($content.myMarkdownContent)}
284
+ {$content.myMarkdownContent.toString()}
285
+ ```
286
+
287
+ І ви можете отримати доступ до метаданих markdown наступним чином:
288
+
289
+ ```svelte
290
+ {$content.myMarkdownContent.metadata}
291
+ {$content.myMarkdownContent.metadata.title}
189
292
  ```
190
293
 
191
294
  </Tab>
192
295
  <Tab label="Preact" value="preact">
193
- Preact підтримує вузли Markdown безпосередньо в JSX.
296
+ Preact підтримує вузли Markdown безпосередньо у JSX.
194
297
 
195
298
  ```tsx fileName="App.tsx"
196
299
  import { useIntlayer } from "preact-intlayer";
300
+ import { MarkdownProvider } from "preact-intlayer/markdown";
197
301
 
198
302
  const AppContent = () => {
199
303
  const { myMarkdownContent } = useIntlayer("app");
200
304
  return <div>{myMarkdownContent}</div>;
201
305
  };
306
+
307
+ const App = () => (
308
+ <MarkdownProvider
309
+ components={{
310
+ h1: ({ children }) => <h1 style={{ color: "red" }}>{children}</h1>,
311
+ MyButton: (props) => <button {...props} />, // MDX-компонент
312
+ }}
313
+ >
314
+ <AppContent />
315
+ </MarkdownProvider>
316
+ );
317
+ ```
318
+
319
+ > Якщо `MarkdownProvider` відсутній, Intlayer рендеритиме markdown, використовуючи стандартний парсер Markdown у JSX.
320
+
321
+ Ви також можете надати локальні перевизначення для конкретних вузлів за допомогою методу `.use()`:
322
+
323
+ ```tsx
324
+ {myMarkdownContent.use({
325
+ h1: ({ children }) => <h1 style={{ color: "red" }}>{children}</h1>,
326
+ })}
327
+ ```
328
+
329
+ Ви можете отримати Markdown як рядок:
330
+
331
+ ```tsx
332
+ {myMarkdownContent.value}
333
+ {String(myMarkdownContent)}
334
+ {myMarkdownContent.toString()}
335
+ ```
336
+
337
+ І ви можете отримати доступ до метаданих markdown наступним чином:
338
+
339
+ ```tsx
340
+ {myMarkdownContent.metadata}
341
+ {myMarkdownContent.metadata.title}
202
342
  ```
203
343
 
204
344
  </Tab>
205
- <Tab label="Solid">
206
- Solid підтримує вузли Markdown безпосередньо в JSX.
345
+ <Tab label="Solid" value="solid">
346
+ Solid підтримує вузли Markdown безпосередньо у JSX.
207
347
 
208
348
  ```tsx fileName="App.tsx"
209
349
  import { useIntlayer } from "solid-intlayer";
350
+ import { MarkdownProvider } from "solid-intlayer/markdown";
210
351
 
211
352
  const AppContent = () => {
212
353
  const { myMarkdownContent } = useIntlayer("app");
213
354
  return <div>{myMarkdownContent}</div>;
214
355
  };
356
+
357
+ const App = () => (
358
+ <MarkdownProvider
359
+ components={{
360
+ h1: (props) => <h1 style={{ color: "red" }}>{props.children}</h1>,
361
+ MyButton: (props) => <button {...props} />, // MDX-компонент
362
+ }}
363
+ >
364
+ <AppContent />
365
+ </MarkdownProvider>
366
+ );
367
+ ```
368
+
369
+ > Якщо `MarkdownProvider` відсутній, Intlayer рендеритиме markdown, використовуючи стандартний парсер Markdown у JSX.
370
+
371
+ Ви також можете надати локальні перевизначення для конкретних вузлів за допомогою методу `.use()`:
372
+
373
+ ```tsx
374
+ {myMarkdownContent.use({
375
+ h1: (props) => <h1 style={{ color: "red" }}>{props.children}</h1>,
376
+ })}
377
+ ```
378
+
379
+ Ви можете отримати Markdown як рядок:
380
+
381
+ ```tsx
382
+ {myMarkdownContent.value}
383
+ {String(myMarkdownContent)}
384
+ {myMarkdownContent.toString()}
385
+ ```
386
+
387
+ І ви можете отримати доступ до метаданих markdown наступним чином:
388
+
389
+ ```tsx
390
+ {myMarkdownContent.metadata}
391
+ {myMarkdownContent.metadata.title}
215
392
  ```
216
393
 
217
394
  </Tab>
218
395
  <Tab label="Angular" value="angular">
219
- Angular використовує директиву `[innerHTML]` для відтворення контенту Markdown.
396
+ Angular використовує директиву `[innerHTML]` для рендерингу вмісту Markdown.
220
397
 
221
398
  ```typescript fileName="app.component.ts"
222
399
  import { Component } from "@angular/core";
@@ -231,6 +408,8 @@ Intlayer підтримує контент rich text, визначений за
231
408
  }
232
409
  ```
233
410
 
411
+ > Якщо провайдер IntlayerMarkdown не налаштовано, Intlayer рендеритиме за допомогою компілятора за замовчуванням.
412
+
234
413
  Ви також можете надати локальні перевизначення для конкретних вузлів за допомогою методу `.use()`:
235
414
 
236
415
  ```typescript
@@ -239,31 +418,46 @@ Intlayer підтримує контент rich text, визначений за
239
418
  })
240
419
  ```
241
420
 
421
+ Ви можете отримати Markdown як рядок:
422
+
423
+ ```typescript
424
+ content().myMarkdownContent.value
425
+ String(content().myMarkdownContent)
426
+ content().myMarkdownContent.toString()
427
+ ```
428
+
429
+ І ви можете отримати доступ до метаданих markdown наступним чином:
430
+
431
+ ```typescript
432
+ content().myMarkdownContent.metadata
433
+ content().myMarkdownContent.metadata.title
434
+ ```
435
+
242
436
  </Tab>
243
437
  </Tabs>
244
438
 
245
- ### 2. Ручне відтворення та розширені інструменти
439
+ ### 2. Допоміжні утиліти (тільки рядки Markdown)
246
440
 
247
- Якщо вам потрібно відтворити сирі рядки Markdown або мати більше контролю над процесом відтворення, використовуйте наступні інструменти.
441
+ Ці утиліти рендерять **тільки необроблені рядки Markdown** і не залежать від `useIntlayer`. Використовуйте їх, коли вам потрібно відрендерити Markdown з джерел, відмінних від ваших словників.
248
442
 
249
443
  <Tabs group="framework">
250
- <Tab label="React / Next.js">
444
+ <Tab label="React / Next.js" value="react">
251
445
 
252
446
  #### Компонент `<MarkdownRenderer />`
253
447
 
254
- Відтворіть рядок Markdown із конкретними параметрами.
448
+ Рендерить рядок Markdown з певними опціями.
255
449
 
256
450
  ```tsx
257
451
  import { MarkdownRenderer } from "react-intlayer/markdown";
258
452
 
259
453
  <MarkdownRenderer forceBlock={true} tagfilter={true}>
260
- {"# Мій заголовок"}
454
+ {"# Мій Заголовок"}
261
455
  </MarkdownRenderer>
262
456
  ```
263
457
 
264
458
  #### Хук `useMarkdownRenderer()`
265
459
 
266
- Отримайте попередньо налаштовану функцію рендерера.
460
+ Отримайте попередньо налаштовану функцію рендерингу.
267
461
 
268
462
  ```tsx
269
463
  import { useMarkdownRenderer } from "react-intlayer/markdown";
@@ -273,16 +467,16 @@ Intlayer підтримує контент rich text, визначений за
273
467
  components: { h1: (props) => <h1 {...props} className="custom" /> }
274
468
  });
275
469
 
276
- return renderMarkdown("# Мій заголовок");
470
+ return renderMarkdown("# Мій Заголовок");
277
471
  ```
278
472
 
279
473
  #### Утиліта `renderMarkdown()`
280
- Автономна утиліта для відтворення поза компонентами.
474
+ Окрема утиліта для рендерингу поза компонентами.
281
475
 
282
476
  ```tsx
283
477
  import { renderMarkdown } from "react-intlayer/markdown";
284
478
 
285
- const jsx = renderMarkdown("# Мій заголовок", { forceBlock: true });
479
+ const jsx = renderMarkdown("# Мій Заголовок", { forceBlock: true });
286
480
  ```
287
481
 
288
482
  </Tab>
@@ -296,7 +490,7 @@ Intlayer підтримує контент rich text, визначений за
296
490
  </script>
297
491
 
298
492
  <template>
299
- <MarkdownRenderer :forceBlock="true" content="# Мій заголовок" />
493
+ <MarkdownRenderer :forceBlock="true" content="# Мій Заголовок" />
300
494
  </template>
301
495
  ```
302
496
 
@@ -310,7 +504,7 @@ Intlayer підтримує контент rich text, визначений за
310
504
  import { MarkdownRenderer } from "svelte-intlayer/markdown";
311
505
  </script>
312
506
 
313
- <MarkdownRenderer forceBlock={true} value="# Мій заголовок" />
507
+ <MarkdownRenderer forceBlock={true} value="# Мій Заголовок" />
314
508
  ```
315
509
 
316
510
  #### Хук `useMarkdownRenderer()`
@@ -321,7 +515,7 @@ Intlayer підтримує контент rich text, визначений за
321
515
  const render = useMarkdownRenderer();
322
516
  </script>
323
517
 
324
- {@html render("# Мій заголовок")}
518
+ {@html render("# Мій Заголовок")}
325
519
  ```
326
520
 
327
521
  #### Утиліта `renderMarkdown()`
@@ -331,7 +525,7 @@ Intlayer підтримує контент rich text, визначений за
331
525
  import { renderMarkdown } from "svelte-intlayer/markdown";
332
526
  </script>
333
527
 
334
- {@html renderMarkdown("# Мій заголовок")}
528
+ {@html renderMarkdown("# Мій Заголовок")}
335
529
  ```
336
530
 
337
531
  </Tab>
@@ -342,7 +536,7 @@ Intlayer підтримує контент rich text, визначений за
342
536
  import { MarkdownRenderer } from "preact-intlayer/markdown";
343
537
 
344
538
  <MarkdownRenderer forceBlock={true}>
345
- {"# Мій заголовок"}
539
+ {"# Мій Заголовок"}
346
540
  </MarkdownRenderer>
347
541
  ```
348
542
 
@@ -353,7 +547,7 @@ Intlayer підтримує контент rich text, визначений за
353
547
 
354
548
  const render = useMarkdownRenderer();
355
549
 
356
- return <div>{render("# Мій заголовок")}</div>;
550
+ return <div>{render("# Мій Заголовок")}</div>;
357
551
  ```
358
552
 
359
553
  #### Утиліта `renderMarkdown()`
@@ -361,18 +555,18 @@ Intlayer підтримує контент rich text, визначений за
361
555
  ```tsx
362
556
  import { renderMarkdown } from "preact-intlayer/markdown";
363
557
 
364
- return <div>{renderMarkdown("# Мій заголовок")}</div>;
558
+ return <div>{renderMarkdown("# Мій Заголовок")}</div>;
365
559
  ```
366
560
 
367
561
  </Tab>
368
- <Tab label="Solid">
562
+ <Tab label="Solid" value="solid">
369
563
  #### Компонент `<MarkdownRenderer />`
370
564
 
371
565
  ```tsx
372
566
  import { MarkdownRenderer } from "solid-intlayer/markdown";
373
567
 
374
568
  <MarkdownRenderer forceBlock={true}>
375
- {"# Мій заголовок"}
569
+ {"# Мій Заголовок"}
376
570
  </MarkdownRenderer>
377
571
  ```
378
572
 
@@ -383,7 +577,7 @@ Intlayer підтримує контент rich text, визначений за
383
577
 
384
578
  const render = useMarkdownRenderer();
385
579
 
386
- return <div>{render("# Мій заголовок")}</div>;
580
+ return <div>{render("# Мій Заголовок")}</div>;
387
581
  ```
388
582
 
389
583
  #### Утиліта `renderMarkdown()`
@@ -391,16 +585,16 @@ Intlayer підтримує контент rich text, визначений за
391
585
  ```tsx
392
586
  import { renderMarkdown } from "solid-intlayer/markdown";
393
587
 
394
- return <div>{renderMarkdown("# Мій заголовок")}</div>;
588
+ return <div>{renderMarkdown("# Мій Заголовок")}</div>;
395
589
  ```
396
590
 
397
591
  </Tab>
398
592
  <Tab label="Angular" value="angular">
399
593
  #### Сервіс `IntlayerMarkdownService`
400
- Відтворіть рядок Markdown за допомогою сервісу.
594
+ Рендерить рядок Markdown за допомогою сервісу.
401
595
 
402
596
  ```typescript
403
- import { IntlayerMarkdownService } from "angular-intlayer";
597
+ import { IntlayerMarkdownService } from "angular-intlayer/markdown";
404
598
 
405
599
  export class MyComponent {
406
600
  constructor(private markdownService: IntlayerMarkdownService) {}
@@ -416,12 +610,12 @@ Intlayer підтримує контент rich text, визначений за
416
610
 
417
611
  ---
418
612
 
419
- ## Глобальна конфігурація за допомогою `MarkdownProvider`
613
+ ## Глобальне налаштування за допомогою `MarkdownProvider`
420
614
 
421
- Ви можете налаштувати відтворення Markdown глобально для всього застосунку. Це дозволяє уникнути передачі однакових пропсів кожному рендереру.
615
+ `MarkdownProvider` (або його еквівалент у фреймворку) налаштовує конвеєр рендерингу Markdown для всього вашого додатку. Це стосується як автоматичного рендерингу `useIntlayer`, так і допоміжних утиліт. Налаштування, вказані тут, є значеннями за замовчуванням — `.use()` перевизначає їх на рівні вузла.
422
616
 
423
617
  <Tabs group="framework">
424
- <Tab label="React / Next.js">
618
+ <Tab label="React / Next.js" value="react">
425
619
 
426
620
  ```tsx fileName="AppProvider.tsx"
427
621
  import { MarkdownProvider } from "react-intlayer/markdown";
@@ -429,8 +623,9 @@ Intlayer підтримує контент rich text, визначений за
429
623
  export const AppProvider = ({ children }) => (
430
624
  <MarkdownProvider
431
625
  components={{
432
- h1: ({ children }) => <h1 className="text-2xl font-bold">{children}</h1>,
433
- a: ({ href, children }) => <Link to={href}>{children}</Link>,
626
+ h1: (props) => <h1 style={{color: 'green'}} {...props} />,
627
+ a: ({ href, ...props }) => <a style={{color: 'red'}} {...props} />,
628
+ MyCustomJSXComponent: (props) => <span style={{color: 'red'}} {...props} />,
434
629
  }}
435
630
  >
436
631
  {children}
@@ -438,6 +633,28 @@ Intlayer підтримує контент rich text, визначений за
438
633
  );
439
634
  ```
440
635
 
636
+ > Підтримується MDX — будь-яка назва компонента, яка використовується всередині вашого Markdown (наприклад, `<MyCustomJSXComponent />`), розпізнається відповідно до карти `components`.
637
+
638
+ Ви також можете використовувати власний рендерер markdown:
639
+
640
+ ```tsx fileName="AppProvider.tsx"
641
+ import { MarkdownProvider } from "react-intlayer/markdown";
642
+
643
+ export const AppProvider = ({ children }) => (
644
+ <MarkdownProvider
645
+ renderMarkdown={async (md) => {
646
+ // Use dynamic import to reduce the bundle size of your application
647
+ const { renderMarkdown } = await import('react-intlayer/markdown');
648
+ return renderMarkdown(md);
649
+ }}
650
+ >
651
+ {children}
652
+ </MarkdownProvider>
653
+ );
654
+ ```
655
+
656
+ > Динамічний імпорт вашого рендерера Markdown — чудовий спосіб зменшити розмір бандлу вашого додатка.
657
+
441
658
  </Tab>
442
659
  <Tab label="Vue" value="vue">
443
660
 
@@ -463,6 +680,29 @@ Intlayer підтримує контент rich text, визначений за
463
680
  app.mount("#app");
464
681
  ```
465
682
 
683
+ Ви також можете використовувати власний рендерер markdown:
684
+
685
+ ```typescript fileName="main.ts"
686
+ import { createApp } from "vue";
687
+ import { intlayer } from "vue-intlayer";
688
+ import { intlayerMarkdown } from "vue-intlayer/markdown";
689
+ import App from "./App.vue";
690
+
691
+ const app = createApp(App);
692
+
693
+ app.use(intlayer);
694
+ app.use(intlayerMarkdown, {
695
+ renderMarkdown: async (md) => {
696
+ const { renderMarkdown } = await import('vue-intlayer/markdown');
697
+ return renderMarkdown(md);
698
+ },
699
+ });
700
+
701
+ app.mount("#app");
702
+ ```
703
+
704
+ > Динамічний імпорт вашого рендерера Markdown — чудовий спосіб зменшити розмір бандлу вашого додатка.
705
+
466
706
  </Tab>
467
707
  <Tab label="Svelte" value="svelte">
468
708
 
@@ -481,6 +721,25 @@ Intlayer підтримує контент rich text, визначений за
481
721
  </MarkdownProvider>
482
722
  ```
483
723
 
724
+ Ви також можете використовувати власний рендерер markdown:
725
+
726
+ ```svelte fileName="App.svelte"
727
+ <script lang="ts">
728
+ import { MarkdownProvider } from "svelte-intlayer/markdown";
729
+ </script>
730
+
731
+ <MarkdownProvider
732
+ renderMarkdown={async (md) => {
733
+ const { renderMarkdown } = await import('svelte-intlayer/markdown');
734
+ return renderMarkdown(md);
735
+ }}
736
+ >
737
+ <slot />
738
+ </MarkdownProvider>
739
+ ```
740
+
741
+ > Динамічний імпорт вашого рендерера Markdown — чудовий спосіб зменшити розмір бандлу вашого додатка.
742
+
484
743
  </Tab>
485
744
  <Tab label="Preact" value="preact">
486
745
 
@@ -498,8 +757,27 @@ Intlayer підтримує контент rich text, визначений за
498
757
  );
499
758
  ```
500
759
 
760
+ Ви також можете використовувати власний рендерер markdown:
761
+
762
+ ```tsx fileName="AppProvider.tsx"
763
+ import { MarkdownProvider } from "preact-intlayer/markdown";
764
+
765
+ export const AppProvider = ({ children }) => (
766
+ <MarkdownProvider
767
+ renderMarkdown={async (md) => {
768
+ const { renderMarkdown } = await import('preact-intlayer/markdown');
769
+ return renderMarkdown(md);
770
+ }}
771
+ >
772
+ {children}
773
+ </MarkdownProvider>
774
+ );
775
+ ```
776
+
777
+ > Динамічний імпорт вашого рендерера Markdown — чудовий спосіб зменшити розмір бандлу вашого додатка.
778
+
501
779
  </Tab>
502
- <Tab label="Solid">
780
+ <Tab label="Solid" value="solid">
503
781
 
504
782
  ```tsx fileName="AppProvider.tsx"
505
783
  import { MarkdownProvider } from "solid-intlayer/markdown";
@@ -515,38 +793,46 @@ Intlayer підтримує контент rich text, визначений за
515
793
  );
516
794
  ```
517
795
 
518
- </Tab>
519
- <Tab label="Angular" value="angular">
796
+ Ви також можете використовувати власний рендерер markdown:
520
797
 
521
- ```typescript fileName="app.config.ts"
522
- import { createIntlayerMarkdownProvider } from "angular-intlayer/markdown";
798
+ ```tsx fileName="AppProvider.tsx"
799
+ import { MarkdownProvider } from "solid-intlayer/markdown";
523
800
 
524
- export const appConfig: ApplicationConfig = {
525
- providers: [
526
- createIntlayerMarkdownProvider({
527
- components: {
528
- h1: { class: "text-2xl font-bold" },
529
- },
530
- }),
531
- ],
532
- };
801
+ export const AppProvider = (props) => (
802
+ <MarkdownProvider
803
+ renderMarkdown={async (md) => {
804
+ const { renderMarkdown } = await import('solid-intlayer/markdown');
805
+ return renderMarkdown(md);
806
+ }}
807
+ >
808
+ {props.children}
809
+ </MarkdownProvider>
810
+ );
533
811
  ```
534
812
 
535
- </Tab>
536
- </Tabs>
813
+ > Динамічний імпорт вашого рендерера Markdown — чудовий спосіб зменшити розмір бандлу вашого додатка.
537
814
 
538
- ---
815
+ </Tab>
816
+ <Tab label="Angular" value="angular">
539
817
 
540
- ## Довідник опцій
818
+ ```typescript fileName="app.module.ts"
819
+ import { NgModule } from '@angular/core';
820
+ import { IntlayerMarkdownModule } from 'angular-intlayer/markdown';
821
+
822
+ @NgModule({
823
+ imports: [
824
+ IntlayerMarkdownModule.forRoot({
825
+ renderMarkdown: async (md) => {
826
+ const { renderMarkdown } = await import('angular-intlayer/markdown');
827
+ return renderMarkdown(md);
828
+ }
829
+ })
830
+ ]
831
+ })
832
+ export class AppModule {}
833
+ ```
541
834
 
542
- Ці опції можна передавати в `MarkdownProvider`, `MarkdownRenderer`, `useMarkdownRenderer` та `renderMarkdown`.
835
+ > Динамічний імпорт вашого рендерера Markdown чудовий спосіб зменшити розмір бандлу вашого додатка.
543
836
 
544
- | Опція | Тип | Типово | Опис |
545
- | :-------------------- | :---------- | :------ | :----------------------------------------------------------------------------------------- |
546
- | `forceBlock` | `boolean` | `false` | Змушує вивід бути загорнутим у елемент блочного рівня (наприклад, `<div>`). |
547
- | `forceInline` | `boolean` | `false` | Змушує вивід бути загорнутим у рядковий елемент (наприклад, `<span>`). |
548
- | `tagfilter` | `boolean` | `true` | Вмикає фільтр тегів GitHub для підвищення безпеки шляхом видалення небезпечних HTML-тегів. |
549
- | `preserveFrontmatter` | `boolean` | `false` | Якщо `true`, frontmatter на початку рядка Markdown не буде видалено. |
550
- | `components` | `Overrides` | `{}` | Мапа HTML-тегів до користувацьких компонентів (наприклад, `{ h1: MyHeading }`). |
551
- | `wrapper` | `Component` | `null` | Користувацький компонент для обгортання відтвореного Markdown. |
552
- | `renderMarkdown` | `Function` | `null` | Користувацька функція відтворення для повної заміни стандартного компілятора Markdown. |
837
+ </Tab>
838
+ </Tabs>