@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: Aprenda a declarar y usar contenido Markdown en su sitio web multilingüe con Intlayer. Siga los pasos de esta documentación en línea para integrar Markdown de manera fluida en su proyecto.
5
+ description: Aprenda cómo declarar y usar contenido Markdown en su sitio web multilingüe con Intlayer. Siga los pasos de esta documentación en línea para integrar Markdown sin problemas en su proyecto.
6
6
  keywords:
7
7
  - Markdown
8
8
  - Internacionalización
@@ -19,49 +19,49 @@ slugs:
19
19
  history:
20
20
  - version: 8.10.0
21
21
  date: 2026-05-19
22
- changes: "Agregar soporte para archivos `.content.md`"
22
+ changes: "Se agregó soporte para archivos `.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: "Se agregó el objeto plugin `intlayerMarkdown`; use `app.use(intlayerMarkdown)` en lugar de `app.use(installIntlayerMarkdown)`"
26
26
  - version: 8.5.0
27
27
  date: 2026-03-24
28
- changes: "mover la importación de {{framework}}-intlayer a {{framework}}-intlayer/markdown"
28
+ changes: "Se movió la importación de `{{framework}}-intlayer` a `{{framework}}-intlayer/markdown`"
29
29
  - version: 8.0.0
30
30
  date: 2026-01-22
31
- changes: "Agregar MarkdownRenderer / useMarkdownRenderer / utilidad renderMarkdown y opción forceInline"
31
+ changes: "Se agregó la utilidad MarkdownRenderer / useMarkdownRenderer / renderMarkdown y la opción forceInline"
32
32
  - version: 8.0.0
33
33
  date: 2026-01-18
34
34
  changes: "Decoración automática de contenido markdown, soporte para MDX y SSR"
35
35
  - version: 5.5.10
36
36
  date: 2025-06-29
37
- changes: "Inicializar historial"
37
+ changes: "Historial inicializado"
38
38
  ---
39
39
 
40
40
  # Markdown / Contenido de Texto Enriquecido
41
41
 
42
- Intlayer admite contenido de texto enriquecido definido mediante la sintaxis Markdown. Esto le permite escribir y mantener fácilmente contenido con un formato enriquecido, como blogs, artículos y más.
42
+ Intlayer admite contenido de texto enriquecido definido mediante la sintaxis Markdown. Esto le permite escribir y mantener fácilmente contenido con formato enriquecido, como blogs, artículos y mucho más.
43
43
 
44
44
  ## Declarar Contenido Markdown
45
45
 
46
- Puede declarar contenido Markdown mediante la función `md` o simplemente como una cadena (si contiene sintaxis Markdown).
46
+ Puede declarar contenido Markdown usando la función `md` o simplemente como una cadena de texto (si contiene sintaxis Markdown).
47
47
 
48
48
  <Tabs>
49
49
  <Tab label=".content.md" value=".content.md">
50
50
  A partir de la versión `8.10.0`, puede declarar contenido Markdown directamente en archivos `.content.md`. Intlayer detectará y analizará automáticamente el contenido Markdown.
51
51
 
52
- ```md fileName="markdown-file.es.content.md"
52
+ ```md fileName="markdown-file.en.content.md"
53
53
  ---
54
54
  key: my-markdown-content
55
55
  description: Mi contenido
56
- locale: es
56
+ locale: en
57
57
  ---
58
58
 
59
59
  # Mi contenido
60
60
 
61
- Aquí un ejemplo de contenido Markdown
61
+ Aquí hay un ejemplo de contenido markdown
62
62
  ```
63
63
 
64
- El campo frontmatter `locale` es el campo que define la configuración regional del contenido. Es opcional. Si no se proporciona, Intlayer utilizará la configuración regional predeterminada, que también se utiliza como configuración regional de respaldo si no hay traducción disponible para una configuración regional específica.
64
+ El campo `locale` en el front-matter es el campo que define el idioma del contenido. Es opcional. Si no se proporciona, Intlayer utilizará el idioma por defecto, que también se usa como idioma de respaldo si no hay traducción disponible para un idioma específico.
65
65
 
66
66
  Ejemplo de estructura de archivos:
67
67
 
@@ -75,11 +75,11 @@ Puede declarar contenido Markdown mediante la función `md` o simplemente como u
75
75
  └── markdown-file.es.content.md
76
76
  ```
77
77
 
78
- Puede agregar en front-matter cualquier propiedad definida en la [definición del Diccionario](https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/dictionary/content_file.md)
78
+ Puede agregar en el front-matter cualquier propiedad definida en la [Definición del Diccionario](https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/dictionary/content_file.md)
79
79
 
80
80
  </Tab>
81
81
  <Tab label="Envoltura Manual" value="manual-wrapping">
82
- Utilice la función `md` para declarar explícitamente contenido Markdown. Esto es útil si desea asegurarse de que una cadena se trate como Markdown incluso si no contiene una sintaxis obvia.
82
+ Use la función `md` para declarar explícitamente contenido Markdown. Esto es útil si desea asegurarse de que una cadena se trate como Markdown incluso si no contiene sintaxis evidente.
83
83
 
84
84
  ```typescript fileName="markdownDictionary.content.ts"
85
85
  import { md, type Dictionary } from "intlayer";
@@ -87,7 +87,7 @@ Puede declarar contenido Markdown mediante la función `md` o simplemente como u
87
87
  const markdownDictionary = {
88
88
  key: "app",
89
89
  content: {
90
- myMarkdownContent: md("## My title \n\nLorem Ipsum"),
90
+ myMarkdownContent: md("## Mi título \n\nLorem Ipsum"),
91
91
  },
92
92
  } satisfies Dictionary;
93
93
 
@@ -101,16 +101,17 @@ Puede declarar contenido Markdown mediante la función `md` o simplemente como u
101
101
  ```typescript fileName="markdownDictionary.content.ts"
102
102
  export default {
103
103
  key: "app",
104
- contentAutoTransformation: true, // Habilitar la detección automática de contenido Markdown - Se puede configurar globalmente en intlayer.config.ts
104
+ contentAutoTransformation: true, // Habilitar detección automática de contenido Markdown - Se puede configurar globalmente en intlayer.config.ts
105
105
  content: {
106
- myMarkdownContent: "## My title \n\nLorem Ipsum",
106
+ myMarkdownContent: "## Mi título \n\nLorem Ipsum",
107
107
  },
108
108
  };
109
109
  ```
110
110
 
111
111
  </Tab>
112
+
112
113
  <Tab label="Archivos Externos" value="external-files">
113
- Importe archivos `.md` directamente mediante la función `file`.
114
+ Importe archivos `.md` directamente usando la función `file`.
114
115
 
115
116
  ```typescript fileName="markdownDictionary.content.ts"
116
117
  import { md, file, t } from "intlayer";
@@ -120,7 +121,7 @@ Puede declarar contenido Markdown mediante la función `md` o simplemente como u
120
121
  content: {
121
122
  content: t({
122
123
  en: md(file("./myMarkdown.en.md")),
123
- fr: md(file("./myMarkdown.fr.md")),
124
+ es: md(file("./myMarkdown.es.md")),
124
125
  }),
125
126
  },
126
127
  };
@@ -131,13 +132,19 @@ Puede declarar contenido Markdown mediante la función `md` o simplemente como u
131
132
 
132
133
  ---
133
134
 
134
- ## Renderizado de Markdown
135
+ ## Renderización de Markdown
136
+
137
+ Intlayer proporciona dos formas independientes de renderizar Markdown:
138
+
139
+ 1. **A través de `useIntlayer`**
140
+ — Intlayer transforma automáticamente el nodo `md` en la salida nativa del framework (JSX, VNode, cadena HTML).
141
+ - El Frontmatter se analiza y expone como `.metadata`. Puede anular la renderización en dos niveles — globalmente con `MarkdownProvider` (o el equivalente en el framework) y localmente por nodo con `.use()`. Ambos pueden combinarse; `.use()` tiene prioridad sobre `MarkdownProvider`, el cual tiene prioridad sobre el predeterminado.
135
142
 
136
- El renderizado puede ser gestionado automáticamente por el sistema de contenido de Intlayer o manualmente mediante herramientas especializadas.
143
+ 2. **Utilidades auxiliares** `<MarkdownRenderer />`, `useMarkdownRenderer()`, y `renderMarkdown()` son herramientas independientes que aceptan **únicamente cadenas Markdown puras**. Son independientes de `useIntlayer` y no funcionan con los nodos decorados que este retorna.
137
144
 
138
- ### 1. Renderizado Automático (usando `useIntlayer`)
145
+ La renderización de Markdown admite **MDX** — use cualquier componente JSX/framework por su nombre directamente dentro de su Markdown.
139
146
 
140
- Cuando accede al contenido a través de `useIntlayer`, los nodos Markdown ya están preparados para el renderizado.
147
+ ### 1. Renderización Automática (a través de `useIntlayer`)
141
148
 
142
149
  <Tabs group="framework">
143
150
  <Tab label="React / Next.js" value="react">
@@ -145,24 +152,54 @@ Cuando accede al contenido a través de `useIntlayer`, los nodos Markdown ya est
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} />, // Componente MDX
168
+ }}
169
+ >
170
+ <AppContent />
171
+ </MarkdownProvider>
172
+ );
153
173
  ```
154
174
 
155
- También puede proporcionar sobrescrituras locales para nodos específicos mediante el método `.use()`:
175
+ > Si `MarkdownProvider` no está presente, Intlayer renderizará el markdown usando el analizador por defecto de Markdown a JSX.
176
+
177
+ También puede proporcionar anulaciones locales para nodos específicos utilizando el método `.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
+ Puede recuperar el Markdown como cadena:
186
+
187
+ ```tsx
188
+ {myMarkdownContent.value}
189
+ {String(myMarkdownContent)}
190
+ {myMarkdownContent.toString()}
191
+ ```
192
+
193
+ Y puede acceder a los metadatos de su markdown así:
194
+
195
+ ```tsx
196
+ {myMarkdownContent.metadata}
197
+ {myMarkdownContent.metadata.title}
198
+ ```
199
+
163
200
  </Tab>
164
201
  <Tab label="Vue" value="vue">
165
- En Vue, el contenido Markdown se puede renderizar mediante el componente integrado `component` o directamente como un nodo.
202
+ En Vue, el contenido Markdown se puede renderizar usando la etiqueta incorporada `component` o directamente como un nodo.
166
203
 
167
204
  ```vue fileName="App.vue"
168
205
  <script setup>
@@ -175,43 +212,183 @@ Cuando accede al contenido a través de `useIntlayer`, los nodos Markdown ya est
175
212
  </template>
176
213
  ```
177
214
 
215
+ Configure globalmente a través del plugin `intlayerMarkdown` (admite componentes MDX personalizados):
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), // Componente MDX
224
+ },
225
+ });
226
+ ```
227
+
228
+ > Si el plugin `intlayerMarkdown` no está instalado, Intlayer renderizará utilizando el compilador predeterminado.
229
+
230
+ También puede proporcionar anulaciones locales para nodos específicos usando el método `.use()`:
231
+
232
+ ```vue
233
+ <component :is="myMarkdownContent.use({
234
+ h1: (props) => h('h1', { style: { color: 'red' } }, props.children),
235
+ })" />
236
+ ```
237
+
238
+ Puede recuperar el Markdown como cadena:
239
+
240
+ ```vue
241
+ {{ myMarkdownContent.value }}
242
+ {{ String(myMarkdownContent) }}
243
+ {{ myMarkdownContent.toString() }}
244
+ ```
245
+
246
+ Y puede acceder a los metadatos de su markdown así:
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 renderiza Markdown como una cadena HTML por defecto. Utilice `{@html}` para renderizarlo.
255
+ Svelte renderiza el Markdown como una cadena HTML por defecto. Use `{@html}` para renderizarlo.
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
+ > Si `MarkdownProvider` no está presente, Intlayer renderizará el markdown usando el compilador por defecto.
272
+
273
+ También puede proporcionar anulaciones locales para nodos específicos usando el método `.use()`:
274
+
275
+ ```svelte
276
+ {@html $content.myMarkdownContent.use({ ... })}
277
+ ```
278
+
279
+ Puede recuperar el Markdown como cadena:
280
+
281
+ ```svelte
282
+ {$content.myMarkdownContent.value}
283
+ {String($content.myMarkdownContent)}
284
+ {$content.myMarkdownContent.toString()}
285
+ ```
286
+
287
+ Y puede acceder a los metadatos de su markdown así:
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 admite nodos Markdown directamente en el JSX.
296
+ Preact soporta los nodos Markdown directamente en 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} />, // Componente MDX
312
+ }}
313
+ >
314
+ <AppContent />
315
+ </MarkdownProvider>
316
+ );
317
+ ```
318
+
319
+ > Si `MarkdownProvider` no está presente, Intlayer renderizará el markdown usando el analizador predeterminado de Markdown a JSX.
320
+
321
+ También puede proporcionar anulaciones locales para nodos específicos usando el método `.use()`:
322
+
323
+ ```tsx
324
+ {myMarkdownContent.use({
325
+ h1: ({ children }) => <h1 style={{ color: "red" }}>{children}</h1>,
326
+ })}
327
+ ```
328
+
329
+ Puede recuperar el Markdown como cadena:
330
+
331
+ ```tsx
332
+ {myMarkdownContent.value}
333
+ {String(myMarkdownContent)}
334
+ {myMarkdownContent.toString()}
335
+ ```
336
+
337
+ Y puede acceder a los metadatos de su markdown así:
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 admite nodos Markdown directamente en el JSX.
346
+ Solid soporta los nodos Markdown directamente en 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} />, // Componente MDX
362
+ }}
363
+ >
364
+ <AppContent />
365
+ </MarkdownProvider>
366
+ );
367
+ ```
368
+
369
+ > Si `MarkdownProvider` no está presente, Intlayer renderizará el markdown usando el analizador predeterminado de Markdown a JSX.
370
+
371
+ También puede proporcionar anulaciones locales para nodos específicos usando el método `.use()`:
372
+
373
+ ```tsx
374
+ {myMarkdownContent.use({
375
+ h1: (props) => <h1 style={{ color: "red" }}>{props.children}</h1>,
376
+ })}
377
+ ```
378
+
379
+ Puede recuperar el Markdown como cadena:
380
+
381
+ ```tsx
382
+ {myMarkdownContent.value}
383
+ {String(myMarkdownContent)}
384
+ {myMarkdownContent.toString()}
385
+ ```
386
+
387
+ Y puede acceder a los metadatos de su markdown así:
388
+
389
+ ```tsx
390
+ {myMarkdownContent.metadata}
391
+ {myMarkdownContent.metadata.title}
215
392
  ```
216
393
 
217
394
  </Tab>
@@ -231,7 +408,9 @@ Cuando accede al contenido a través de `useIntlayer`, los nodos Markdown ya est
231
408
  }
232
409
  ```
233
410
 
234
- También puede proporcionar sobrescrituras locales para nodos específicos mediante el método `.use()`:
411
+ > Si el proveedor IntlayerMarkdown no está configurado, Intlayer renderizará utilizando el compilador predeterminado.
412
+
413
+ También puede proporcionar anulaciones locales para nodos específicos usando el método `.use()`:
235
414
 
236
415
  ```typescript
237
416
  content().myMarkdownContent.use({
@@ -239,21 +418,40 @@ Cuando accede al contenido a través de `useIntlayer`, los nodos Markdown ya est
239
418
  })
240
419
  ```
241
420
 
421
+ Puede recuperar el Markdown como cadena:
422
+
423
+ ```typescript
424
+ content().myMarkdownContent.value
425
+ String(content().myMarkdownContent)
426
+ content().myMarkdownContent.toString()
427
+ ```
428
+
429
+ Y puede acceder a los metadatos de su markdown así:
430
+
431
+ ```typescript
432
+ content().myMarkdownContent.metadata
433
+ content().myMarkdownContent.metadata.title
434
+ ```
435
+
242
436
  </Tab>
243
437
  </Tabs>
244
438
 
245
- ### 2. Renderizado Manual y Herramientas Avanzadas
439
+ ### 2. Utilidades Auxiliares (Solo Cadenas Markdown)
246
440
 
247
- Si necesita renderizar cadenas de Markdown sin procesar o tener más control sobre el proceso de renderizado, utilice las siguientes herramientas.
441
+ Estas utilidades renderizan **únicamente cadenas Markdown puras** y son independientes de `useIntlayer`. Úselas cuando necesite renderizar Markdown de fuentes que no sean sus diccionarios.
248
442
 
249
443
  <Tabs group="framework">
250
444
  <Tab label="React / Next.js" value="react">
251
445
 
446
+ #### Componente `<MarkdownRenderer />`
447
+
448
+ Renderiza una cadena Markdown con opciones específicas.
449
+
252
450
  ```tsx
253
451
  import { MarkdownRenderer } from "react-intlayer/markdown";
254
452
 
255
453
  <MarkdownRenderer forceBlock={true} tagfilter={true}>
256
- {"# My Title"}
454
+ {"# Mi Título"}
257
455
  </MarkdownRenderer>
258
456
  ```
259
457
 
@@ -269,7 +467,7 @@ Si necesita renderizar cadenas de Markdown sin procesar o tener más control sob
269
467
  components: { h1: (props) => <h1 {...props} className="custom" /> }
270
468
  });
271
469
 
272
- return renderMarkdown("# My Title");
470
+ return renderMarkdown("# Mi Título");
273
471
  ```
274
472
 
275
473
  #### Utilidad `renderMarkdown()`
@@ -278,7 +476,7 @@ Si necesita renderizar cadenas de Markdown sin procesar o tener más control sob
278
476
  ```tsx
279
477
  import { renderMarkdown } from "react-intlayer/markdown";
280
478
 
281
- const jsx = renderMarkdown("# My Title", { forceBlock: true });
479
+ const jsx = renderMarkdown("# Mi Título", { forceBlock: true });
282
480
  ```
283
481
 
284
482
  </Tab>
@@ -292,7 +490,7 @@ Si necesita renderizar cadenas de Markdown sin procesar o tener más control sob
292
490
  </script>
293
491
 
294
492
  <template>
295
- <MarkdownRenderer :forceBlock="true" content="# My Title" />
493
+ <MarkdownRenderer :forceBlock="true" content="# Mi Título" />
296
494
  </template>
297
495
  ```
298
496
 
@@ -306,7 +504,7 @@ Si necesita renderizar cadenas de Markdown sin procesar o tener más control sob
306
504
  import { MarkdownRenderer } from "svelte-intlayer/markdown";
307
505
  </script>
308
506
 
309
- <MarkdownRenderer forceBlock={true} value="# My Title" />
507
+ <MarkdownRenderer forceBlock={true} value="# Mi Título" />
310
508
  ```
311
509
 
312
510
  #### Hook `useMarkdownRenderer()`
@@ -317,7 +515,7 @@ Si necesita renderizar cadenas de Markdown sin procesar o tener más control sob
317
515
  const render = useMarkdownRenderer();
318
516
  </script>
319
517
 
320
- {@html render("# My Title")}
518
+ {@html render("# Mi Título")}
321
519
  ```
322
520
 
323
521
  #### Utilidad `renderMarkdown()`
@@ -327,7 +525,7 @@ Si necesita renderizar cadenas de Markdown sin procesar o tener más control sob
327
525
  import { renderMarkdown } from "svelte-intlayer/markdown";
328
526
  </script>
329
527
 
330
- {@html renderMarkdown("# My Title")}
528
+ {@html renderMarkdown("# Mi Título")}
331
529
  ```
332
530
 
333
531
  </Tab>
@@ -338,7 +536,7 @@ Si necesita renderizar cadenas de Markdown sin procesar o tener más control sob
338
536
  import { MarkdownRenderer } from "preact-intlayer/markdown";
339
537
 
340
538
  <MarkdownRenderer forceBlock={true}>
341
- {"# My Title"}
539
+ {"# Mi Título"}
342
540
  </MarkdownRenderer>
343
541
  ```
344
542
 
@@ -349,7 +547,7 @@ Si necesita renderizar cadenas de Markdown sin procesar o tener más control sob
349
547
 
350
548
  const render = useMarkdownRenderer();
351
549
 
352
- return <div>{render("# My Title")}</div>;
550
+ return <div>{render("# Mi Título")}</div>;
353
551
  ```
354
552
 
355
553
  #### Utilidad `renderMarkdown()`
@@ -357,7 +555,7 @@ Si necesita renderizar cadenas de Markdown sin procesar o tener más control sob
357
555
  ```tsx
358
556
  import { renderMarkdown } from "preact-intlayer/markdown";
359
557
 
360
- return <div>{renderMarkdown("# My Title")}</div>;
558
+ return <div>{renderMarkdown("# Mi Título")}</div>;
361
559
  ```
362
560
 
363
561
  </Tab>
@@ -368,7 +566,7 @@ Si necesita renderizar cadenas de Markdown sin procesar o tener más control sob
368
566
  import { MarkdownRenderer } from "solid-intlayer/markdown";
369
567
 
370
568
  <MarkdownRenderer forceBlock={true}>
371
- {"# My Title"}
569
+ {"# Mi Título"}
372
570
  </MarkdownRenderer>
373
571
  ```
374
572
 
@@ -379,7 +577,7 @@ Si necesita renderizar cadenas de Markdown sin procesar o tener más control sob
379
577
 
380
578
  const render = useMarkdownRenderer();
381
579
 
382
- return <div>{render("# My Title")}</div>;
580
+ return <div>{render("# Mi Título")}</div>;
383
581
  ```
384
582
 
385
583
  #### Utilidad `renderMarkdown()`
@@ -387,13 +585,13 @@ Si necesita renderizar cadenas de Markdown sin procesar o tener más control sob
387
585
  ```tsx
388
586
  import { renderMarkdown } from "solid-intlayer/markdown";
389
587
 
390
- return <div>{renderMarkdown("# My Title")}</div>;
588
+ return <div>{renderMarkdown("# Mi Título")}</div>;
391
589
  ```
392
590
 
393
591
  </Tab>
394
592
  <Tab label="Angular" value="angular">
395
593
  #### Servicio `IntlayerMarkdownService`
396
- Renderiza una cadena Markdown mediante el servicio.
594
+ Renderiza una cadena Markdown usando el servicio.
397
595
 
398
596
  ```typescript
399
597
  import { IntlayerMarkdownService } from "angular-intlayer/markdown";
@@ -414,7 +612,7 @@ Si necesita renderizar cadenas de Markdown sin procesar o tener más control sob
414
612
 
415
613
  ## Configuración Global con `MarkdownProvider`
416
614
 
417
- Puede configurar el renderizado de Markdown de forma global para toda su aplicación. Esto evita pasar las mismas props a cada renderizador.
615
+ `MarkdownProvider` (o su equivalente en el framework) configura el proceso de renderización Markdown para toda su aplicación. Esto se aplica tanto a la renderización automática de `useIntlayer` como a las utilidades auxiliares. Las opciones configuradas aquí son las predeterminadas — `.use()` las anula a nivel de nodo.
418
616
 
419
617
  <Tabs group="framework">
420
618
  <Tab label="React / Next.js" value="react">
@@ -425,8 +623,9 @@ Puede configurar el renderizado de Markdown de forma global para toda su aplicac
425
623
  export const AppProvider = ({ children }) => (
426
624
  <MarkdownProvider
427
625
  components={{
428
- h1: ({ children }) => <h1 className="text-2xl font-bold">{children}</h1>,
429
- 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} />,
430
629
  }}
431
630
  >
432
631
  {children}
@@ -434,7 +633,9 @@ Puede configurar el renderizado de Markdown de forma global para toda su aplicac
434
633
  );
435
634
  ```
436
635
 
437
- También puede utilizar su propio motor de renderizado de markdown:
636
+ > MDX es compatible cualquier nombre de componente usado dentro de su Markdown (ej. `<MyCustomJSXComponent />`) se resuelve contra el mapeo de `components`.
637
+
638
+ También puede usar su propio renderizador de markdown:
438
639
 
439
640
  ```tsx fileName="AppProvider.tsx"
440
641
  import { MarkdownProvider } from "react-intlayer/markdown";
@@ -442,8 +643,8 @@ Puede configurar el renderizado de Markdown de forma global para toda su aplicac
442
643
  export const AppProvider = ({ children }) => (
443
644
  <MarkdownProvider
444
645
  renderMarkdown={async (md) => {
445
- const { compileMarkdown } = await import('react-intlayer/markdown');
446
- return compileMarkdown(md);
646
+ const { renderMarkdown } = await import('react-intlayer/markdown');
647
+ return renderMarkdown(md);
447
648
  }}
448
649
  >
449
650
  {children}
@@ -451,7 +652,7 @@ Puede configurar el renderizado de Markdown de forma global para toda su aplicac
451
652
  );
452
653
  ```
453
654
 
454
- > Importar dinámicamente su renderizador de Markdown es una buena manera de reducir el tamaño del paquete de su aplicación.
655
+ > Importar su renderizador de Markdown dinámicamente es una buena manera de reducir el tamaño del paquete de su aplicación.
455
656
 
456
657
  </Tab>
457
658
  <Tab label="Vue" value="vue">
@@ -478,7 +679,7 @@ Puede configurar el renderizado de Markdown de forma global para toda su aplicac
478
679
  app.mount("#app");
479
680
  ```
480
681
 
481
- También puede utilizar su propio motor de renderizado de markdown:
682
+ También puede usar su propio renderizador de markdown:
482
683
 
483
684
  ```typescript fileName="main.ts"
484
685
  import { createApp } from "vue";
@@ -491,15 +692,15 @@ Puede configurar el renderizado de Markdown de forma global para toda su aplicac
491
692
  app.use(intlayer);
492
693
  app.use(intlayerMarkdown, {
493
694
  renderMarkdown: async (md) => {
494
- const { compileMarkdown } = await import('vue-intlayer/markdown');
495
- return compileMarkdown(md);
695
+ const { renderMarkdown } = await import('vue-intlayer/markdown');
696
+ return renderMarkdown(md);
496
697
  },
497
698
  });
498
699
 
499
700
  app.mount("#app");
500
701
  ```
501
702
 
502
- > Importar dinámicamente su renderizador de Markdown es una buena manera de reducir el tamaño del paquete de su aplicación.
703
+ > Importar su renderizador de Markdown dinámicamente es una buena manera de reducir el tamaño del paquete de su aplicación.
503
704
 
504
705
  </Tab>
505
706
  <Tab label="Svelte" value="svelte">
@@ -519,7 +720,7 @@ Puede configurar el renderizado de Markdown de forma global para toda su aplicac
519
720
  </MarkdownProvider>
520
721
  ```
521
722
 
522
- También puede utilizar su propio motor de renderizado de markdown:
723
+ También puede usar su propio renderizador de markdown:
523
724
 
524
725
  ```svelte fileName="App.svelte"
525
726
  <script lang="ts">
@@ -528,15 +729,15 @@ Puede configurar el renderizado de Markdown de forma global para toda su aplicac
528
729
 
529
730
  <MarkdownProvider
530
731
  renderMarkdown={async (md) => {
531
- const { compileMarkdown } = await import('svelte-intlayer/markdown');
532
- return compileMarkdown(md);
732
+ const { renderMarkdown } = await import('svelte-intlayer/markdown');
733
+ return renderMarkdown(md);
533
734
  }}
534
735
  >
535
736
  <slot />
536
737
  </MarkdownProvider>
537
738
  ```
538
739
 
539
- > Importar dinámicamente su renderizador de Markdown es una buena manera de reducir el tamaño del paquete de su aplicación.
740
+ > Importar su renderizador de Markdown dinámicamente es una buena manera de reducir el tamaño del paquete de su aplicación.
540
741
 
541
742
  </Tab>
542
743
  <Tab label="Preact" value="preact">
@@ -555,7 +756,7 @@ Puede configurar el renderizado de Markdown de forma global para toda su aplicac
555
756
  );
556
757
  ```
557
758
 
558
- También puede utilizar su propio motor de renderizado de markdown:
759
+ También puede usar su propio renderizador de markdown:
559
760
 
560
761
  ```tsx fileName="AppProvider.tsx"
561
762
  import { MarkdownProvider } from "preact-intlayer/markdown";
@@ -563,8 +764,8 @@ Puede configurar el renderizado de Markdown de forma global para toda su aplicac
563
764
  export const AppProvider = ({ children }) => (
564
765
  <MarkdownProvider
565
766
  renderMarkdown={async (md) => {
566
- const { compileMarkdown } = await import('preact-intlayer/markdown');
567
- return compileMarkdown(md);
767
+ const { renderMarkdown } = await import('preact-intlayer/markdown');
768
+ return renderMarkdown(md);
568
769
  }}
569
770
  >
570
771
  {children}
@@ -572,7 +773,7 @@ Puede configurar el renderizado de Markdown de forma global para toda su aplicac
572
773
  );
573
774
  ```
574
775
 
575
- > Importar dinámicamente su renderizador de Markdown es una buena manera de reducir el tamaño del paquete de su aplicación.
776
+ > Importar su renderizador de Markdown dinámicamente es una buena manera de reducir el tamaño del paquete de su aplicación.
576
777
 
577
778
  </Tab>
578
779
  <Tab label="Solid" value="solid">
@@ -591,7 +792,7 @@ Puede configurar el renderizado de Markdown de forma global para toda su aplicac
591
792
  );
592
793
  ```
593
794
 
594
- También puede utilizar su propio motor de renderizado de markdown:
795
+ También puede usar su propio renderizador de markdown:
595
796
 
596
797
  ```tsx fileName="AppProvider.tsx"
597
798
  import { MarkdownProvider } from "solid-intlayer/markdown";
@@ -599,8 +800,8 @@ Puede configurar el renderizado de Markdown de forma global para toda su aplicac
599
800
  export const AppProvider = (props) => (
600
801
  <MarkdownProvider
601
802
  renderMarkdown={async (md) => {
602
- const { compileMarkdown } = await import('solid-intlayer/markdown');
603
- return compileMarkdown(md);
803
+ const { renderMarkdown } = await import('solid-intlayer/markdown');
804
+ return renderMarkdown(md);
604
805
  }}
605
806
  >
606
807
  {props.children}
@@ -608,59 +809,29 @@ Puede configurar el renderizado de Markdown de forma global para toda su aplicac
608
809
  );
609
810
  ```
610
811
 
611
- > Importar dinámicamente su renderizador de Markdown es una buena manera de reducir el tamaño del paquete de su aplicación.
812
+ > Importar su renderizador de Markdown dinámicamente es una buena manera de reducir el tamaño del paquete de su aplicación.
612
813
 
613
814
  </Tab>
614
815
  <Tab label="Angular" value="angular">
615
816
 
616
- ```typescript fileName="app.config.ts"
617
- import { createIntlayerMarkdownProvider } from "angular-intlayer/markdown";
618
-
619
- export const appConfig: ApplicationConfig = {
620
- providers: [
621
- createIntlayerMarkdownProvider({
622
- components: {
623
- h1: { class: "text-2xl font-bold" },
624
- },
625
- }),
626
- ],
627
- };
628
- ```
629
-
630
- También puede utilizar su propio motor de renderizado de markdown:
631
-
632
- ```typescript fileName="app.config.ts"
633
- import { createIntlayerMarkdownProvider } from "angular-intlayer/markdown";
817
+ ```typescript fileName="app.module.ts"
818
+ import { NgModule } from '@angular/core';
819
+ import { IntlayerMarkdownModule } from 'angular-intlayer/markdown';
634
820
 
635
- export const appConfig: ApplicationConfig = {
636
- providers: [
637
- createIntlayerMarkdownProvider({
821
+ @NgModule({
822
+ imports: [
823
+ IntlayerMarkdownModule.forRoot({
638
824
  renderMarkdown: async (md) => {
639
- const { compileMarkdown } = await import('angular-intlayer/markdown');
640
- return compileMarkdown(md);
641
- },
642
- }),
643
- ],
644
- };
825
+ const { renderMarkdown } = await import('angular-intlayer/markdown');
826
+ return renderMarkdown(md);
827
+ }
828
+ })
829
+ ]
830
+ })
831
+ export class AppModule {}
645
832
  ```
646
833
 
647
- > Importar dinámicamente su renderizador de Markdown es una buena manera de reducir el tamaño del paquete de su aplicación.
834
+ > Importar su renderizador de Markdown dinámicamente es una buena manera de reducir el tamaño del paquete de su aplicación.
648
835
 
649
836
  </Tab>
650
837
  </Tabs>
651
-
652
- ---
653
-
654
- ## Referencia de Opciones
655
-
656
- Estas opciones se pueden pasar a `MarkdownProvider`, `MarkdownRenderer`, `useMarkdownRenderer` y `renderMarkdown`.
657
-
658
- | Opción | Tipo | Por Defecto | Descripción |
659
- | :-------------------- | :---------- | :---------- | :------------------------------------------------------------------------------------------------------------ |
660
- | `forceBlock` | `boolean` | `false` | Obliga a que la salida esté envuelta en un elemento de nivel de bloque (p. ej., `<div>`). |
661
- | `forceInline` | `boolean` | `false` | Obliga a que la salida esté envuelta en un elemento en línea (p. ej., `<span>`). |
662
- | `tagfilter` | `boolean` | `true` | Habilita el filtro de etiquetas de GitHub para mejorar la seguridad al eliminar etiquetas HTML peligrosas. |
663
- | `preserveFrontmatter` | `boolean` | `false` | Si es `true`, no se eliminará el frontmatter al principio de la cadena Markdown. |
664
- | `components` | `Overrides` | `{}` | Un mapa de etiquetas HTML a componentes personalizados (p. ej., `{ h1: MyHeading }`). |
665
- | `wrapper` | `Component` | `null` | Un componente personalizado para envolver el Markdown renderizado. |
666
- | `renderMarkdown` | `Function` | `null` | Una función de renderizado personalizada para reemplazar completamente el compilador de Markdown por defecto. |