@intlayer/docs 8.10.0-canary.0 → 8.10.0-canary.1

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: Pelajari cara mendeklarasikan dan menggunakan konten Markdown di situs web multibahasa Anda dengan Intlayer. Ikuti langkah-langkah dalam dokumentasi online ini untuk mengintegrasikan Markdown secara mulus ke dalam proyek Anda.
5
+ description: Pelajari cara mendeklarasikan dan menggunakan konten Markdown di situs web multibahasa Anda dengan Intlayer. Ikuti langkah-langkah dalam dokumentasi online ini untuk mengintegrasikan Markdown dengan mulus ke dalam proyek Anda.
6
6
  keywords:
7
7
  - Markdown
8
8
  - Internasionalisasi
@@ -19,19 +19,19 @@ slugs:
19
19
  history:
20
20
  - version: 8.10.0
21
21
  date: 2026-05-19
22
- changes: "Menambahkan dukungan file `.content.md`"
22
+ changes: "Menambahkan dukungan untuk file `.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: "Menambahkan objek plugin `intlayerMarkdown`; gunakan `app.use(intlayerMarkdown)` sebagai ganti `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: "Memindahkan impor dari `{{framework}}-intlayer` ke `{{framework}}-intlayer/markdown`"
29
29
  - version: 8.0.0
30
30
  date: 2026-01-22
31
31
  changes: "Menambahkan utilitas MarkdownRenderer / useMarkdownRenderer / renderMarkdown dan opsi forceInline"
32
32
  - version: 8.0.0
33
33
  date: 2026-01-18
34
- changes: "Dekorasi otomatis konten markdown, dukungan MDX dan SSR"
34
+ changes: "Dekorasi otomatis dari konten markdown, dukungan MDX dan SSR"
35
35
  - version: 5.5.10
36
36
  date: 2025-06-29
37
37
  changes: "Inisialisasi riwayat"
@@ -39,21 +39,21 @@ history:
39
39
 
40
40
  # Markdown / Konten Teks Kaya
41
41
 
42
- Intlayer mendukung konten teks kaya yang didefinisikan menggunakan sintaks Markdown. Ini memungkinkan Anda menulis dan memelihara konten dengan format kaya secara mudah, seperti blog, artikel, dan lainnya.
42
+ Intlayer mendukung konten teks kaya yang didefinisikan menggunakan sintaks Markdown. Ini memungkinkan Anda dengan mudah menulis dan memelihara konten berformat kaya seperti blog, artikel, dan lainnya.
43
43
 
44
44
  ## Mendeklarasikan Konten Markdown
45
45
 
46
- Anda dapat menyatakan konten Markdown menggunakan fungsi `md` atau cukup sebagai string (jika mengandung sintaks Markdown).
46
+ Anda dapat mendeklarasikan konten Markdown menggunakan fungsi `md` atau cukup sebagai string (jika mengandung sintaks Markdown).
47
47
 
48
48
  <Tabs>
49
49
  <Tab label=".content.md" value=".content.md">
50
- Sejak versi `8.10.0`, Anda dapat mendeklarasikan konten Markdown secara langsung di file `.content.md`. Intlayer akan secara otomatis mendeteksi dan mengurai konten Markdown tersebut.
50
+ Mulai dari versi `8.10.0`, Anda dapat mendeklarasikan konten Markdown langsung di dalam file `.content.md`. Intlayer akan secara otomatis mendeteksi dan mem-parsing konten Markdown.
51
51
 
52
- ```md fileName="markdown-file.id.content.md"
52
+ ```md fileName="markdown-file.en.content.md"
53
53
  ---
54
54
  key: my-markdown-content
55
55
  description: Konten saya
56
- locale: id
56
+ locale: en
57
57
  ---
58
58
 
59
59
  # Konten saya
@@ -61,7 +61,7 @@ Anda dapat menyatakan konten Markdown menggunakan fungsi `md` atau cukup sebagai
61
61
  Berikut adalah contoh konten markdown
62
62
  ```
63
63
 
64
- Bidang frontmatter `locale` adalah bidang yang menentukan lokal (bahasa) dari konten. Bidang ini opsional. Jika tidak disediakan, Intlayer akan menggunakan lokal default, yang juga digunakan sebagai lokal cadangan (fallback) jika tidak ada terjemahan yang tersedia untuk lokal tertentu.
64
+ Bidang `locale` pada front-matter adalah bidang yang mendefinisikan bahasa konten. Ini bersifat opsional. Jika tidak diberikan, Intlayer akan menggunakan bahasa default, yang juga digunakan sebagai bahasa cadangan jika tidak ada terjemahan yang tersedia untuk bahasa tertentu.
65
65
 
66
66
  Contoh struktur file:
67
67
 
@@ -75,11 +75,11 @@ Anda dapat menyatakan konten Markdown menggunakan fungsi `md` atau cukup sebagai
75
75
  └── markdown-file.es.content.md
76
76
  ```
77
77
 
78
- Anda dapat menambahkan properti apa pun yang didefinisikan dalam [definisi Kamus (Dictionary)](https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/dictionary/content_file.md) ke dalam front-matter.
78
+ Anda dapat menambahkan properti apa pun yang didefinisikan dalam [Definisi Kamus](https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/dictionary/content_file.md) ke dalam front-matter
79
79
 
80
80
  </Tab>
81
81
  <Tab label="Pembungkusan Manual" value="manual-wrapping">
82
- Gunakan fungsi `md` untuk menyatakan konten Markdown secara eksplisit. Ini berguna jika Anda ingin memastikan sebuah string diperlakukan sebagai Markdown meskipun tidak mengandung sintaks yang jelas.
82
+ Gunakan fungsi `md` untuk mendeklarasikan konten Markdown secara eksplisit. Ini berguna jika Anda ingin memastikan sebuah string diperlakukan sebagai Markdown bahkan jika tidak mengandung sintaks yang jelas.
83
83
 
84
84
  ```typescript fileName="markdownDictionary.content.ts"
85
85
  import { md, type Dictionary } from "intlayer";
@@ -87,7 +87,7 @@ Anda dapat menyatakan konten Markdown menggunakan fungsi `md` atau cukup sebagai
87
87
  const markdownDictionary = {
88
88
  key: "app",
89
89
  content: {
90
- myMarkdownContent: md("## My title \n\nLorem Ipsum"),
90
+ myMarkdownContent: md("## Judul saya \n\nLorem Ipsum"),
91
91
  },
92
92
  } satisfies Dictionary;
93
93
 
@@ -96,19 +96,20 @@ Anda dapat menyatakan konten Markdown menggunakan fungsi `md` atau cukup sebagai
96
96
 
97
97
  </Tab>
98
98
  <Tab label="Deteksi Otomatis" value="automatic-detection">
99
- Jika string mengandung indikator Markdown umum (seperti header, daftar, tautan, dll.), Intlayer akan secara otomatis mengubahnya.
99
+ Jika string mengandung indikator Markdown umum (seperti judul, daftar, tautan, dll.), Intlayer akan secara otomatis mengubahnya.
100
100
 
101
101
  ```typescript fileName="markdownDictionary.content.ts"
102
102
  export default {
103
103
  key: "app",
104
- contentAutoTransformation: true, // Aktifkan deteksi otomatis konten Markdown - Dapat diatur secara global di intlayer.config.ts
104
+ contentAutoTransformation: true, // Mengaktifkan deteksi otomatis dari konten Markdown - Dapat diatur secara global di intlayer.config.ts
105
105
  content: {
106
- myMarkdownContent: "## My title \n\nLorem Ipsum",
106
+ myMarkdownContent: "## Judul saya \n\nLorem Ipsum",
107
107
  },
108
108
  };
109
109
  ```
110
110
 
111
111
  </Tab>
112
+
112
113
  <Tab label="File Eksternal" value="external-files">
113
114
  Impor file `.md` secara langsung menggunakan fungsi `file`.
114
115
 
@@ -120,7 +121,7 @@ Anda dapat menyatakan konten Markdown menggunakan fungsi `md` atau cukup sebagai
120
121
  content: {
121
122
  content: t({
122
123
  en: md(file("./myMarkdown.en.md")),
123
- fr: md(file("./myMarkdown.fr.md")),
124
+ id: md(file("./myMarkdown.id.md")),
124
125
  }),
125
126
  },
126
127
  };
@@ -133,36 +134,72 @@ Anda dapat menyatakan konten Markdown menggunakan fungsi `md` atau cukup sebagai
133
134
 
134
135
  ## Merender Markdown
135
136
 
136
- Proses merender dapat ditangani secara otomatis oleh sistem konten Intlayer atau secara manual menggunakan alat khusus.
137
+ Intlayer menyediakan dua cara independen untuk merender Markdown:
138
+
139
+ 1. **Melalui `useIntlayer`**
140
+ — Intlayer secara otomatis mengubah simpul `md` menjadi keluaran asli kerangka kerja (JSX, VNode, string HTML).
141
+ - Frontmatter diparsing dan diekspos sebagai `.metadata`. Anda dapat mengesampingkan rendering pada dua tingkat — secara global dengan `MarkdownProvider` (atau yang setara di kerangka kerja) dan secara lokal per simpul dengan `.use()`. Keduanya dapat digabungkan; `.use()` diutamakan daripada `MarkdownProvider`, yang pada gilirannya diutamakan daripada nilai default.
137
142
 
138
- ### 1. Perenderan Otomatis (menggunakan `useIntlayer`)
143
+ 2. **Utilitas Pembantu** — `<MarkdownRenderer />`, `useMarkdownRenderer()`, dan `renderMarkdown()` adalah alat mandiri yang menerima **hanya string Markdown mentah**. Alat-alat ini independen dari `useIntlayer` dan tidak bekerja dengan simpul dekoratif yang dikembalikannya.
139
144
 
140
- Saat Anda mengakses konten melalui `useIntlayer`, node Markdown sudah disiapkan untuk dirender.
145
+ Rendering Markdown mendukung **MDX** gunakan komponen JSX/kerangka kerja apa pun berdasarkan namanya langsung di dalam Markdown Anda.
146
+
147
+ ### 1. Rendering Otomatis (melalui `useIntlayer`)
141
148
 
142
149
  <Tabs group="framework">
143
150
  <Tab label="React / Next.js" value="react">
144
- Node Markdown dapat dirender langsung sebagai JSX.
151
+ Simpul Markdown dapat dirender langsung sebagai 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} />, // Komponen MDX
168
+ }}
169
+ >
170
+ <AppContent />
171
+ </MarkdownProvider>
172
+ );
153
173
  ```
154
174
 
155
- Anda juga dapat memberikan override lokal untuk node tertentu menggunakan metode `.use()`:
175
+ > Jika `MarkdownProvider` tidak ada, Intlayer akan merender markdown menggunakan parser default Markdown ke JSX.
176
+
177
+ Anda juga dapat memberikan pengesampingan lokal untuk simpul tertentu menggunakan metode `.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
+ Anda dapat mengambil Markdown sebagai sebuah string:
186
+
187
+ ```tsx
188
+ {myMarkdownContent.value}
189
+ {String(myMarkdownContent)}
190
+ {myMarkdownContent.toString()}
191
+ ```
192
+
193
+ Dan Anda dapat mengakses metadata markdown Anda seperti ini:
194
+
195
+ ```tsx
196
+ {myMarkdownContent.metadata}
197
+ {myMarkdownContent.metadata.title}
198
+ ```
199
+
163
200
  </Tab>
164
201
  <Tab label="Vue" value="vue">
165
- Di Vue, konten Markdown dapat dirender menggunakan built-in `component` atau langsung sebagai node.
202
+ Di Vue, konten Markdown dapat dirender menggunakan tag `component` bawaan atau langsung sebagai sebuah simpul.
166
203
 
167
204
  ```vue fileName="App.vue"
168
205
  <script setup>
@@ -175,43 +212,183 @@ Saat Anda mengakses konten melalui `useIntlayer`, node Markdown sudah disiapkan
175
212
  </template>
176
213
  ```
177
214
 
215
+ Konfigurasikan secara global melalui plugin `intlayerMarkdown` (mendukung komponen kustom 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), // Komponen MDX
224
+ },
225
+ });
226
+ ```
227
+
228
+ > Jika plugin `intlayerMarkdown` tidak diinstal, Intlayer akan merender menggunakan kompilator default.
229
+
230
+ Anda juga dapat memberikan pengesampingan lokal untuk simpul tertentu menggunakan metode `.use()`:
231
+
232
+ ```vue
233
+ <component :is="myMarkdownContent.use({
234
+ h1: (props) => h('h1', { style: { color: 'red' } }, props.children),
235
+ })" />
236
+ ```
237
+
238
+ Anda dapat mengambil Markdown sebagai sebuah string:
239
+
240
+ ```vue
241
+ {{ myMarkdownContent.value }}
242
+ {{ String(myMarkdownContent) }}
243
+ {{ myMarkdownContent.toString() }}
244
+ ```
245
+
246
+ Dan Anda dapat mengakses metadata markdown Anda seperti ini:
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
255
  Svelte merender Markdown sebagai string HTML secara default. Gunakan `{@html}` untuk merendernya.
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
+ > Jika `MarkdownProvider` tidak ada, Intlayer akan merender markdown menggunakan kompilator default.
272
+
273
+ Anda juga dapat memberikan pengesampingan lokal untuk simpul tertentu menggunakan metode `.use()`:
274
+
275
+ ```svelte
276
+ {@html $content.myMarkdownContent.use({ ... })}
277
+ ```
278
+
279
+ Anda dapat mengambil Markdown sebagai sebuah string:
280
+
281
+ ```svelte
282
+ {$content.myMarkdownContent.value}
283
+ {String($content.myMarkdownContent)}
284
+ {$content.myMarkdownContent.toString()}
285
+ ```
286
+
287
+ Dan Anda dapat mengakses metadata markdown Anda seperti ini:
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 mendukung node Markdown secara langsung di JSX.
296
+ Preact mendukung simpul Markdown secara langsung di 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} />, // Komponen MDX
312
+ }}
313
+ >
314
+ <AppContent />
315
+ </MarkdownProvider>
316
+ );
317
+ ```
318
+
319
+ > Jika `MarkdownProvider` tidak ada, Intlayer akan merender markdown menggunakan parser default Markdown ke JSX.
320
+
321
+ Anda juga dapat memberikan pengesampingan lokal untuk simpul tertentu menggunakan metode `.use()`:
322
+
323
+ ```tsx
324
+ {myMarkdownContent.use({
325
+ h1: ({ children }) => <h1 style={{ color: "red" }}>{children}</h1>,
326
+ })}
327
+ ```
328
+
329
+ Anda dapat mengambil Markdown sebagai sebuah string:
330
+
331
+ ```tsx
332
+ {myMarkdownContent.value}
333
+ {String(myMarkdownContent)}
334
+ {myMarkdownContent.toString()}
335
+ ```
336
+
337
+ Dan Anda dapat mengakses metadata markdown Anda seperti ini:
338
+
339
+ ```tsx
340
+ {myMarkdownContent.metadata}
341
+ {myMarkdownContent.metadata.title}
202
342
  ```
203
343
 
204
344
  </Tab>
205
345
  <Tab label="Solid" value="solid">
206
- Solid mendukung node Markdown secara langsung di JSX.
346
+ Solid mendukung simpul Markdown secara langsung di 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} />, // Komponen MDX
362
+ }}
363
+ >
364
+ <AppContent />
365
+ </MarkdownProvider>
366
+ );
367
+ ```
368
+
369
+ > Jika `MarkdownProvider` tidak ada, Intlayer akan merender markdown menggunakan parser default Markdown ke JSX.
370
+
371
+ Anda juga dapat memberikan pengesampingan lokal untuk simpul tertentu menggunakan metode `.use()`:
372
+
373
+ ```tsx
374
+ {myMarkdownContent.use({
375
+ h1: (props) => <h1 style={{ color: "red" }}>{props.children}</h1>,
376
+ })}
377
+ ```
378
+
379
+ Anda dapat mengambil Markdown sebagai sebuah string:
380
+
381
+ ```tsx
382
+ {myMarkdownContent.value}
383
+ {String(myMarkdownContent)}
384
+ {myMarkdownContent.toString()}
385
+ ```
386
+
387
+ Dan Anda dapat mengakses metadata markdown Anda seperti ini:
388
+
389
+ ```tsx
390
+ {myMarkdownContent.metadata}
391
+ {myMarkdownContent.metadata.title}
215
392
  ```
216
393
 
217
394
  </Tab>
@@ -231,7 +408,9 @@ Saat Anda mengakses konten melalui `useIntlayer`, node Markdown sudah disiapkan
231
408
  }
232
409
  ```
233
410
 
234
- Anda juga dapat memberikan override lokal untuk node tertentu menggunakan metode `.use()`:
411
+ > Jika penyedia IntlayerMarkdown tidak dikonfigurasi, Intlayer akan merender menggunakan kompilator default.
412
+
413
+ Anda juga dapat memberikan pengesampingan lokal untuk simpul tertentu menggunakan metode `.use()`:
235
414
 
236
415
  ```typescript
237
416
  content().myMarkdownContent.use({
@@ -239,12 +418,27 @@ Saat Anda mengakses konten melalui `useIntlayer`, node Markdown sudah disiapkan
239
418
  })
240
419
  ```
241
420
 
421
+ Anda dapat mengambil Markdown sebagai sebuah string:
422
+
423
+ ```typescript
424
+ content().myMarkdownContent.value
425
+ String(content().myMarkdownContent)
426
+ content().myMarkdownContent.toString()
427
+ ```
428
+
429
+ Dan Anda dapat mengakses metadata markdown Anda seperti ini:
430
+
431
+ ```typescript
432
+ content().myMarkdownContent.metadata
433
+ content().myMarkdownContent.metadata.title
434
+ ```
435
+
242
436
  </Tab>
243
437
  </Tabs>
244
438
 
245
- ### 2. Merender Manual & Alat Lanjutan
439
+ ### 2. Utilitas Pembantu (Hanya String Markdown)
246
440
 
247
- Jika Anda perlu merender string Markdown mentah atau memiliki kontrol lebih atas proses rendering, gunakan alat berikut.
441
+ Utilitas ini merender **hanya string Markdown mentah** dan independen dari `useIntlayer`. Gunakan utilitas ini saat Anda perlu merender Markdown dari sumber selain dari kamus Anda.
248
442
 
249
443
  <Tabs group="framework">
250
444
  <Tab label="React / Next.js" value="react">
@@ -257,13 +451,13 @@ Jika Anda perlu merender string Markdown mentah atau memiliki kontrol lebih atas
257
451
  import { MarkdownRenderer } from "react-intlayer/markdown";
258
452
 
259
453
  <MarkdownRenderer forceBlock={true} tagfilter={true}>
260
- {"# My Title"}
454
+ {"# Judul Saya"}
261
455
  </MarkdownRenderer>
262
456
  ```
263
457
 
264
- #### `useMarkdownRenderer()` Hook
458
+ #### Hook `useMarkdownRenderer()`
265
459
 
266
- Dapatkan fungsi renderer yang telah dikonfigurasi sebelumnya.
460
+ Mendapatkan fungsi perender yang sudah dikonfigurasi sebelumnya.
267
461
 
268
462
  ```tsx
269
463
  import { useMarkdownRenderer } from "react-intlayer/markdown";
@@ -273,16 +467,16 @@ Jika Anda perlu merender string Markdown mentah atau memiliki kontrol lebih atas
273
467
  components: { h1: (props) => <h1 {...props} className="custom" /> }
274
468
  });
275
469
 
276
- return renderMarkdown("# My Title");
470
+ return renderMarkdown("# Judul Saya");
277
471
  ```
278
472
 
279
473
  #### Utilitas `renderMarkdown()`
280
- Utilitas mandiri untuk merender di luar komponen.
474
+ Utilitas mandiri untuk rendering di luar komponen.
281
475
 
282
476
  ```tsx
283
477
  import { renderMarkdown } from "react-intlayer/markdown";
284
478
 
285
- const jsx = renderMarkdown("# My Title", { forceBlock: true });
479
+ const jsx = renderMarkdown("# Judul Saya", { forceBlock: true });
286
480
  ```
287
481
 
288
482
  </Tab>
@@ -296,7 +490,7 @@ Jika Anda perlu merender string Markdown mentah atau memiliki kontrol lebih atas
296
490
  </script>
297
491
 
298
492
  <template>
299
- <MarkdownRenderer :forceBlock="true" content="# My Title" />
493
+ <MarkdownRenderer :forceBlock="true" content="# Judul Saya" />
300
494
  </template>
301
495
  ```
302
496
 
@@ -310,10 +504,10 @@ Jika Anda perlu merender string Markdown mentah atau memiliki kontrol lebih atas
310
504
  import { MarkdownRenderer } from "svelte-intlayer/markdown";
311
505
  </script>
312
506
 
313
- <MarkdownRenderer forceBlock={true} value="# My Title" />
507
+ <MarkdownRenderer forceBlock={true} value="# Judul Saya" />
314
508
  ```
315
509
 
316
- #### `useMarkdownRenderer()` Hook
510
+ #### Hook `useMarkdownRenderer()`
317
511
 
318
512
  ```svelte
319
513
  <script lang="ts">
@@ -321,7 +515,7 @@ Jika Anda perlu merender string Markdown mentah atau memiliki kontrol lebih atas
321
515
  const render = useMarkdownRenderer();
322
516
  </script>
323
517
 
324
- {@html render("# My Title")}
518
+ {@html render("# Judul Saya")}
325
519
  ```
326
520
 
327
521
  #### Utilitas `renderMarkdown()`
@@ -331,7 +525,7 @@ Jika Anda perlu merender string Markdown mentah atau memiliki kontrol lebih atas
331
525
  import { renderMarkdown } from "svelte-intlayer/markdown";
332
526
  </script>
333
527
 
334
- {@html renderMarkdown("# My Title")}
528
+ {@html renderMarkdown("# Judul Saya")}
335
529
  ```
336
530
 
337
531
  </Tab>
@@ -342,18 +536,18 @@ Jika Anda perlu merender string Markdown mentah atau memiliki kontrol lebih atas
342
536
  import { MarkdownRenderer } from "preact-intlayer/markdown";
343
537
 
344
538
  <MarkdownRenderer forceBlock={true}>
345
- {"# My Title"}
539
+ {"# Judul Saya"}
346
540
  </MarkdownRenderer>
347
541
  ```
348
542
 
349
- #### `useMarkdownRenderer()` Hook
543
+ #### Hook `useMarkdownRenderer()`
350
544
 
351
545
  ```tsx
352
546
  import { useMarkdownRenderer } from "preact-intlayer/markdown";
353
547
 
354
548
  const render = useMarkdownRenderer();
355
549
 
356
- return <div>{render("# My Title")}</div>;
550
+ return <div>{render("# Judul Saya")}</div>;
357
551
  ```
358
552
 
359
553
  #### Utilitas `renderMarkdown()`
@@ -361,7 +555,7 @@ Jika Anda perlu merender string Markdown mentah atau memiliki kontrol lebih atas
361
555
  ```tsx
362
556
  import { renderMarkdown } from "preact-intlayer/markdown";
363
557
 
364
- return <div>{renderMarkdown("# My Title")}</div>;
558
+ return <div>{renderMarkdown("# Judul Saya")}</div>;
365
559
  ```
366
560
 
367
561
  </Tab>
@@ -372,18 +566,18 @@ Jika Anda perlu merender string Markdown mentah atau memiliki kontrol lebih atas
372
566
  import { MarkdownRenderer } from "solid-intlayer/markdown";
373
567
 
374
568
  <MarkdownRenderer forceBlock={true}>
375
- {"# My Title"}
569
+ {"# Judul Saya"}
376
570
  </MarkdownRenderer>
377
571
  ```
378
572
 
379
- #### `useMarkdownRenderer()` Hook
573
+ #### Hook `useMarkdownRenderer()`
380
574
 
381
575
  ```tsx
382
576
  import { useMarkdownRenderer } from "solid-intlayer/markdown";
383
577
 
384
578
  const render = useMarkdownRenderer();
385
579
 
386
- return <div>{render("# My Title")}</div>;
580
+ return <div>{render("# Judul Saya")}</div>;
387
581
  ```
388
582
 
389
583
  #### Utilitas `renderMarkdown()`
@@ -391,16 +585,16 @@ Jika Anda perlu merender string Markdown mentah atau memiliki kontrol lebih atas
391
585
  ```tsx
392
586
  import { renderMarkdown } from "solid-intlayer/markdown";
393
587
 
394
- return <div>{renderMarkdown("# My Title")}</div>;
588
+ return <div>{renderMarkdown("# Judul Saya")}</div>;
395
589
  ```
396
590
 
397
591
  </Tab>
398
592
  <Tab label="Angular" value="angular">
399
593
  #### Layanan `IntlayerMarkdownService`
400
- Render string Markdown menggunakan layanan tersebut.
594
+ Merender string Markdown menggunakan layanan.
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) {}
@@ -418,7 +612,7 @@ Jika Anda perlu merender string Markdown mentah atau memiliki kontrol lebih atas
418
612
 
419
613
  ## Konfigurasi Global dengan `MarkdownProvider`
420
614
 
421
- Anda dapat mengonfigurasi perenderan Markdown secara global untuk seluruh aplikasi Anda. Ini menghindari pengiriman prop yang sama ke setiap renderer.
615
+ `MarkdownProvider` (atau padanan kerangka kerjanya) mengonfigurasi jalur rendering Markdown untuk seluruh aplikasi Anda. Ini berlaku baik untuk rendering `useIntlayer` otomatis maupun utilitas pembantu. Opsi yang ditetapkan di sini adalah default — `.use()` mengesampingkannya di tingkat simpul.
422
616
 
423
617
  <Tabs group="framework">
424
618
  <Tab label="React / Next.js" value="react">
@@ -429,8 +623,28 @@ Anda dapat mengonfigurasi perenderan Markdown secara global untuk seluruh aplika
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} />,
629
+ }}
630
+ >
631
+ {children}
632
+ </MarkdownProvider>
633
+ );
634
+ ```
635
+
636
+ > MDX didukung — nama komponen apa pun yang digunakan di dalam Markdown Anda (misalnya `<MyCustomJSXComponent />`) diselesaikan terhadap peta `components`.
637
+
638
+ Anda juga dapat menggunakan perender markdown Anda sendiri:
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
+ const { renderMarkdown } = await import('react-intlayer/markdown');
647
+ return renderMarkdown(md);
434
648
  }}
435
649
  >
436
650
  {children}
@@ -438,6 +652,8 @@ Anda dapat mengonfigurasi perenderan Markdown secara global untuk seluruh aplika
438
652
  );
439
653
  ```
440
654
 
655
+ > Mengimpor perender Markdown Anda secara dinamis adalah cara yang bagus untuk mengurangi ukuran bundel aplikasi Anda.
656
+
441
657
  </Tab>
442
658
  <Tab label="Vue" value="vue">
443
659
 
@@ -463,6 +679,29 @@ Anda dapat mengonfigurasi perenderan Markdown secara global untuk seluruh aplika
463
679
  app.mount("#app");
464
680
  ```
465
681
 
682
+ Anda juga dapat menggunakan perender markdown Anda sendiri:
683
+
684
+ ```typescript fileName="main.ts"
685
+ import { createApp } from "vue";
686
+ import { intlayer } from "vue-intlayer";
687
+ import { intlayerMarkdown } from "vue-intlayer/markdown";
688
+ import App from "./App.vue";
689
+
690
+ const app = createApp(App);
691
+
692
+ app.use(intlayer);
693
+ app.use(intlayerMarkdown, {
694
+ renderMarkdown: async (md) => {
695
+ const { renderMarkdown } = await import('vue-intlayer/markdown');
696
+ return renderMarkdown(md);
697
+ },
698
+ });
699
+
700
+ app.mount("#app");
701
+ ```
702
+
703
+ > Mengimpor perender Markdown Anda secara dinamis adalah cara yang bagus untuk mengurangi ukuran bundel aplikasi Anda.
704
+
466
705
  </Tab>
467
706
  <Tab label="Svelte" value="svelte">
468
707
 
@@ -481,6 +720,25 @@ Anda dapat mengonfigurasi perenderan Markdown secara global untuk seluruh aplika
481
720
  </MarkdownProvider>
482
721
  ```
483
722
 
723
+ Anda juga dapat menggunakan perender markdown Anda sendiri:
724
+
725
+ ```svelte fileName="App.svelte"
726
+ <script lang="ts">
727
+ import { MarkdownProvider } from "svelte-intlayer/markdown";
728
+ </script>
729
+
730
+ <MarkdownProvider
731
+ renderMarkdown={async (md) => {
732
+ const { renderMarkdown } = await import('svelte-intlayer/markdown');
733
+ return renderMarkdown(md);
734
+ }}
735
+ >
736
+ <slot />
737
+ </MarkdownProvider>
738
+ ```
739
+
740
+ > Mengimpor perender Markdown Anda secara dinamis adalah cara yang bagus untuk mengurangi ukuran bundel aplikasi Anda.
741
+
484
742
  </Tab>
485
743
  <Tab label="Preact" value="preact">
486
744
 
@@ -498,6 +756,25 @@ Anda dapat mengonfigurasi perenderan Markdown secara global untuk seluruh aplika
498
756
  );
499
757
  ```
500
758
 
759
+ Anda juga dapat menggunakan perender markdown Anda sendiri:
760
+
761
+ ```tsx fileName="AppProvider.tsx"
762
+ import { MarkdownProvider } from "preact-intlayer/markdown";
763
+
764
+ export const AppProvider = ({ children }) => (
765
+ <MarkdownProvider
766
+ renderMarkdown={async (md) => {
767
+ const { renderMarkdown } = await import('preact-intlayer/markdown');
768
+ return renderMarkdown(md);
769
+ }}
770
+ >
771
+ {children}
772
+ </MarkdownProvider>
773
+ );
774
+ ```
775
+
776
+ > Mengimpor perender Markdown Anda secara dinamis adalah cara yang bagus untuk mengurangi ukuran bundel aplikasi Anda.
777
+
501
778
  </Tab>
502
779
  <Tab label="Solid" value="solid">
503
780
 
@@ -515,38 +792,46 @@ Anda dapat mengonfigurasi perenderan Markdown secara global untuk seluruh aplika
515
792
  );
516
793
  ```
517
794
 
518
- </Tab>
519
- <Tab label="Angular" value="angular">
795
+ Anda juga dapat menggunakan perender markdown Anda sendiri:
520
796
 
521
- ```typescript fileName="app.config.ts"
522
- import { createIntlayerMarkdownProvider } from "angular-intlayer/markdown";
797
+ ```tsx fileName="AppProvider.tsx"
798
+ import { MarkdownProvider } from "solid-intlayer/markdown";
523
799
 
524
- export const appConfig: ApplicationConfig = {
525
- providers: [
526
- createIntlayerMarkdownProvider({
527
- components: {
528
- h1: { class: "text-2xl font-bold" },
529
- },
530
- }),
531
- ],
532
- };
800
+ export const AppProvider = (props) => (
801
+ <MarkdownProvider
802
+ renderMarkdown={async (md) => {
803
+ const { renderMarkdown } = await import('solid-intlayer/markdown');
804
+ return renderMarkdown(md);
805
+ }}
806
+ >
807
+ {props.children}
808
+ </MarkdownProvider>
809
+ );
533
810
  ```
534
811
 
535
- </Tab>
536
- </Tabs>
812
+ > Mengimpor perender Markdown Anda secara dinamis adalah cara yang bagus untuk mengurangi ukuran bundel aplikasi Anda.
537
813
 
538
- ---
814
+ </Tab>
815
+ <Tab label="Angular" value="angular">
539
816
 
540
- ## Referensi Opsi
817
+ ```typescript fileName="app.module.ts"
818
+ import { NgModule } from '@angular/core';
819
+ import { IntlayerMarkdownModule } from 'angular-intlayer/markdown';
820
+
821
+ @NgModule({
822
+ imports: [
823
+ IntlayerMarkdownModule.forRoot({
824
+ renderMarkdown: async (md) => {
825
+ const { renderMarkdown } = await import('angular-intlayer/markdown');
826
+ return renderMarkdown(md);
827
+ }
828
+ })
829
+ ]
830
+ })
831
+ export class AppModule {}
832
+ ```
541
833
 
542
- Opsi-opsi ini dapat diteruskan ke `MarkdownProvider`, `MarkdownRenderer`, `useMarkdownRenderer`, dan `renderMarkdown`.
834
+ > Mengimpor perender Markdown Anda secara dinamis adalah cara yang bagus untuk mengurangi ukuran bundel aplikasi Anda.
543
835
 
544
- | Opsi | Tipe | Default | Deskripsi |
545
- | :-------------------- | :---------- | :------ | :------------------------------------------------------------------------------------------------------ |
546
- | `forceBlock` | `boolean` | `false` | Memaksa output untuk dibungkus dalam elemen tingkat blok (misalnya, `<div>`). |
547
- | `forceInline` | `boolean` | `false` | Memaksa output untuk dibungkus dalam elemen inline (misalnya, `<span>`). |
548
- | `tagfilter` | `boolean` | `true` | Mengaktifkan Filter Tag GitHub untuk keamanan yang lebih baik dengan menghapus tag HTML yang berbahaya. |
549
- | `preserveFrontmatter` | `boolean` | `false` | Jika `true`, frontmatter di awal string Markdown tidak akan dihapus. |
550
- | `components` | `Overrides` | `{}` | Peta tag HTML ke komponen kustom (misalnya, `{ h1: MyHeading }`). |
551
- | `wrapper` | `Component` | `null` | Komponen kustom untuk membungkus Markdown yang dirender. |
552
- | `renderMarkdown` | `Function` | `null` | Fungsi render kustom untuk menggantikan sepenuhnya kompiler Markdown default. |
836
+ </Tab>
837
+ </Tabs>