@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.
- package/docs/ar/dictionary/markdown.md +402 -82
- package/docs/de/dictionary/markdown.md +269 -98
- package/docs/en/dictionary/markdown.md +221 -25
- package/docs/en-GB/dictionary/markdown.md +351 -67
- package/docs/es/dictionary/markdown.md +286 -115
- package/docs/fr/dictionary/markdown.md +292 -121
- package/docs/hi/dictionary/markdown.md +366 -81
- package/docs/id/dictionary/markdown.md +368 -83
- package/docs/it/dictionary/markdown.md +288 -122
- package/docs/ko/dictionary/markdown.md +297 -126
- package/docs/pl/dictionary/markdown.md +276 -106
- package/docs/pt/dictionary/markdown.md +276 -106
- package/docs/ru/dictionary/markdown.md +70 -505
- package/docs/tr/dictionary/markdown.md +291 -122
- package/docs/uk/dictionary/markdown.md +377 -92
- package/docs/vi/dictionary/markdown.md +377 -92
- package/docs/zh/dictionary/markdown.md +284 -117
- package/package.json +7 -7
- package/docs/ja/dictionary/markdown.md +0 -666
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
createdAt: 2025-02-07
|
|
3
3
|
updatedAt: 2026-05-19
|
|
4
4
|
title: Markdown
|
|
5
|
-
description: Intlayer를 사용하여 다국어 웹사이트에서 Markdown 콘텐츠를 선언하고 사용하는 방법을 알아보세요. 이 온라인 문서의 단계를 따라
|
|
5
|
+
description: Intlayer를 사용하여 다국어 웹사이트에서 Markdown 콘텐츠를 선언하고 사용하는 방법을 알아보세요. 이 온라인 문서의 단계를 따라 Markdown을 프로젝트에 원활하게 통합하세요.
|
|
6
6
|
keywords:
|
|
7
7
|
- Markdown
|
|
8
|
-
-
|
|
9
|
-
-
|
|
8
|
+
- Internationalization
|
|
9
|
+
- Documentation
|
|
10
10
|
- Intlayer
|
|
11
11
|
- Next.js
|
|
12
12
|
- JavaScript
|
|
@@ -22,46 +22,46 @@ history:
|
|
|
22
22
|
changes: "`.content.md` 파일 지원 추가"
|
|
23
23
|
- version: 8.5.0
|
|
24
24
|
date: 2026-03-24
|
|
25
|
-
changes: "
|
|
25
|
+
changes: "`intlayerMarkdown` 플러그인 객체 추가; `app.use(installIntlayerMarkdown)` 대신 `app.use(intlayerMarkdown)` 사용"
|
|
26
26
|
- version: 8.5.0
|
|
27
27
|
date: 2026-03-24
|
|
28
|
-
changes: "{{framework}}-intlayer
|
|
28
|
+
changes: "가져오기를 `{{framework}}-intlayer`에서 `{{framework}}-intlayer/markdown`으로 이동"
|
|
29
29
|
- version: 8.0.0
|
|
30
30
|
date: 2026-01-22
|
|
31
31
|
changes: "MarkdownRenderer / useMarkdownRenderer / renderMarkdown 유틸리티 및 forceInline 옵션 추가"
|
|
32
32
|
- version: 8.0.0
|
|
33
33
|
date: 2026-01-18
|
|
34
|
-
changes: "
|
|
34
|
+
changes: "Markdown 콘텐츠의 자동 장식, MDX 및 SSR 지원"
|
|
35
35
|
- version: 5.5.10
|
|
36
36
|
date: 2025-06-29
|
|
37
|
-
changes: "
|
|
37
|
+
changes: "초기 기록 생성"
|
|
38
38
|
---
|
|
39
39
|
|
|
40
|
-
#
|
|
40
|
+
# Markdown / 서식 있는 텍스트 콘텐츠
|
|
41
41
|
|
|
42
|
-
Intlayer는
|
|
42
|
+
Intlayer는 Markdown 구문을 사용하여 정의된 서식 있는 텍스트 콘텐츠를 지원합니다. 이를 통해 블로그, 기사 등과 같이 서식이 풍부한 콘텐츠를 쉽게 작성하고 유지 관리할 수 있습니다.
|
|
43
43
|
|
|
44
|
-
##
|
|
44
|
+
## Markdown 콘텐츠 선언
|
|
45
45
|
|
|
46
|
-
|
|
46
|
+
`md` 함수를 사용하거나 (Markdown 구문이 포함된 경우) 단순한 문자열로 Markdown 콘텐츠를 선언할 수 있습니다.
|
|
47
47
|
|
|
48
48
|
<Tabs>
|
|
49
49
|
<Tab label=".content.md" value=".content.md">
|
|
50
|
-
버전 `8.10.0`부터 `.content.md`
|
|
50
|
+
버전 `8.10.0`부터 `.content.md` 파일에서 직접 Markdown 콘텐츠를 선언할 수 있습니다. Intlayer가 Markdown 콘텐츠를 자동으로 감지하고 구문 분석합니다.
|
|
51
51
|
|
|
52
|
-
```md fileName="markdown-file.
|
|
52
|
+
```md fileName="markdown-file.en.content.md"
|
|
53
53
|
---
|
|
54
54
|
key: my-markdown-content
|
|
55
|
-
description:
|
|
56
|
-
locale:
|
|
55
|
+
description: 내 콘텐츠
|
|
56
|
+
locale: en
|
|
57
57
|
---
|
|
58
58
|
|
|
59
|
-
#
|
|
59
|
+
# 내 콘텐츠
|
|
60
60
|
|
|
61
|
-
|
|
61
|
+
여기에 마크다운 콘텐츠 예시가 있습니다.
|
|
62
62
|
```
|
|
63
63
|
|
|
64
|
-
`locale`
|
|
64
|
+
`locale` 프런트매터 필드는 콘텐츠의 로캘을 정의하는 필드입니다. 선택 사항입니다. 제공되지 않으면 Intlayer는 기본 로캘을 사용하며, 특정 로캘에 대한 번역이 없을 때 대체 로캘로도 사용됩니다.
|
|
65
65
|
|
|
66
66
|
파일 구조 예시:
|
|
67
67
|
|
|
@@ -75,11 +75,11 @@ Intlayer는 마크다운 문법을 사용하여 정의된 리치 텍스트 콘
|
|
|
75
75
|
└── markdown-file.es.content.md
|
|
76
76
|
```
|
|
77
77
|
|
|
78
|
-
|
|
78
|
+
[사전 정의](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/dictionary/content_file.md)에 정의된 속성을 프런트매터에 추가할 수 있습니다.
|
|
79
79
|
|
|
80
80
|
</Tab>
|
|
81
81
|
<Tab label="수동 래핑" value="manual-wrapping">
|
|
82
|
-
|
|
82
|
+
`md` 함수를 사용하여 Markdown 콘텐츠를 명시적으로 선언하세요. 이는 명백한 구문이 포함되어 있지 않더라도 문자열이 Markdown으로 처리되도록 하려는 경우에 유용합니다.
|
|
83
83
|
|
|
84
84
|
```typescript fileName="markdownDictionary.content.ts"
|
|
85
85
|
import { md, type Dictionary } from "intlayer";
|
|
@@ -87,7 +87,7 @@ Intlayer는 마크다운 문법을 사용하여 정의된 리치 텍스트 콘
|
|
|
87
87
|
const markdownDictionary = {
|
|
88
88
|
key: "app",
|
|
89
89
|
content: {
|
|
90
|
-
myMarkdownContent: md("##
|
|
90
|
+
myMarkdownContent: md("## 내 제목 \n\nLorem Ipsum"),
|
|
91
91
|
},
|
|
92
92
|
} satisfies Dictionary;
|
|
93
93
|
|
|
@@ -96,19 +96,20 @@ Intlayer는 마크다운 문법을 사용하여 정의된 리치 텍스트 콘
|
|
|
96
96
|
|
|
97
97
|
</Tab>
|
|
98
98
|
<Tab label="자동 감지" value="automatic-detection">
|
|
99
|
-
문자열에 일반적인
|
|
99
|
+
문자열에 일반적인 Markdown 표시기(예: 제목, 목록, 링크 등)가 포함된 경우 Intlayer가 자동으로 이를 변환합니다.
|
|
100
100
|
|
|
101
101
|
```typescript fileName="markdownDictionary.content.ts"
|
|
102
102
|
export default {
|
|
103
103
|
key: "app",
|
|
104
|
-
contentAutoTransformation: true, //
|
|
104
|
+
contentAutoTransformation: true, // Markdown 콘텐츠의 자동 감지 활성화 - intlayer.config.ts에서 전역으로 설정할 수 있습니다
|
|
105
105
|
content: {
|
|
106
|
-
myMarkdownContent: "##
|
|
106
|
+
myMarkdownContent: "## 내 제목 \n\nLorem Ipsum",
|
|
107
107
|
},
|
|
108
108
|
};
|
|
109
109
|
```
|
|
110
110
|
|
|
111
111
|
</Tab>
|
|
112
|
+
|
|
112
113
|
<Tab label="외부 파일" value="external-files">
|
|
113
114
|
`file` 함수를 사용하여 `.md` 파일을 직접 가져옵니다.
|
|
114
115
|
|
|
@@ -120,7 +121,7 @@ Intlayer는 마크다운 문법을 사용하여 정의된 리치 텍스트 콘
|
|
|
120
121
|
content: {
|
|
121
122
|
content: t({
|
|
122
123
|
en: md(file("./myMarkdown.en.md")),
|
|
123
|
-
|
|
124
|
+
ko: md(file("./myMarkdown.ko.md")),
|
|
124
125
|
}),
|
|
125
126
|
},
|
|
126
127
|
};
|
|
@@ -131,38 +132,74 @@ Intlayer는 마크다운 문법을 사용하여 정의된 리치 텍스트 콘
|
|
|
131
132
|
|
|
132
133
|
---
|
|
133
134
|
|
|
134
|
-
##
|
|
135
|
+
## Markdown 렌더링
|
|
136
|
+
|
|
137
|
+
Intlayer는 Markdown을 렌더링하는 두 가지 독립적인 방법을 제공합니다:
|
|
138
|
+
|
|
139
|
+
1. **`useIntlayer`를 통한 방식**
|
|
140
|
+
— Intlayer는 프레임워크의 네이티브 출력(JSX, VNode, HTML 문자열)으로 `md` 노드를 자동으로 변환합니다.
|
|
141
|
+
- 프런트매터는 분석되어 `.metadata`로 노출됩니다. 렌더링은 두 가지 수준에서 재정의할 수 있습니다. `MarkdownProvider`(또는 프레임워크 동등 기능)를 통한 전역 설정과 `.use()`를 통한 노드별 로컬 설정입니다. 두 가지를 결합할 수 있으며, `.use()`가 `MarkdownProvider`보다 우선하고, `MarkdownProvider`가 기본값보다 우선합니다.
|
|
135
142
|
|
|
136
|
-
|
|
143
|
+
2. **도우미 유틸리티** — `<MarkdownRenderer />`, `useMarkdownRenderer()`, 및 `renderMarkdown()`은 **순수 Markdown 문자열만** 허용하는 독립 실행형 도구입니다. 이들은 `useIntlayer`와 독립적이며 반환되는 장식된 노드와 작동하지 않습니다.
|
|
137
144
|
|
|
138
|
-
|
|
145
|
+
Markdown 렌더링은 **MDX**를 지원합니다 — Markdown 내에서 이름으로 직접 JSX/프레임워크 컴포넌트를 사용할 수 있습니다.
|
|
139
146
|
|
|
140
|
-
|
|
147
|
+
### 1. 자동 렌더링 (`useIntlayer`를 통한 방식)
|
|
141
148
|
|
|
142
149
|
<Tabs group="framework">
|
|
143
150
|
<Tab label="React / Next.js" value="react">
|
|
144
|
-
|
|
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
|
|
|
155
|
-
|
|
175
|
+
> `MarkdownProvider`가 없는 경우 Intlayer는 기본 Markdown to JSX 파서를 사용하여 마크다운을 렌더링합니다.
|
|
176
|
+
|
|
177
|
+
`.use()` 메서드를 사용하여 특정 노드에 대한 로컬 재정의를 제공할 수도 있습니다:
|
|
156
178
|
|
|
157
179
|
```tsx
|
|
158
180
|
{myMarkdownContent.use({
|
|
159
|
-
h1: ({ 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
|
+
그리고 다음과 같이 마크다운 메타데이터에 접근할 수 있습니다:
|
|
194
|
+
|
|
195
|
+
```tsx
|
|
196
|
+
{myMarkdownContent.metadata}
|
|
197
|
+
{myMarkdownContent.metadata.title}
|
|
198
|
+
```
|
|
199
|
+
|
|
163
200
|
</Tab>
|
|
164
201
|
<Tab label="Vue" value="vue">
|
|
165
|
-
Vue
|
|
202
|
+
Vue에서 Markdown 콘텐츠는 내장 `component`를 사용하거나 노드로서 직접 렌더링될 수 있습니다.
|
|
166
203
|
|
|
167
204
|
```vue fileName="App.vue"
|
|
168
205
|
<script setup>
|
|
@@ -175,48 +212,188 @@ Intlayer는 마크다운 문법을 사용하여 정의된 리치 텍스트 콘
|
|
|
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
|
+
그리고 다음과 같이 마크다운 메타데이터에 접근할 수 있습니다:
|
|
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는 기본적으로
|
|
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
|
-
{
|
|
266
|
+
<MarkdownProvider components={{ h1: MyHeading }}>
|
|
267
|
+
{@html $content.myMarkdownContent}
|
|
268
|
+
</MarkdownProvider>
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
> `MarkdownProvider`가 없는 경우 Intlayer는 기본 컴파일러를 사용하여 마크다운을 렌더링합니다.
|
|
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
|
+
그리고 다음과 같이 마크다운 메타데이터에 접근할 수 있습니다:
|
|
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는 JSX에서
|
|
296
|
+
Preact는 JSX에서 Markdown 노드를 직접 지원합니다.
|
|
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 to 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
|
+
그리고 다음과 같이 마크다운 메타데이터에 접근할 수 있습니다:
|
|
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는 JSX에서
|
|
346
|
+
Solid는 JSX에서 Markdown 노드를 직접 지원합니다.
|
|
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 to 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
|
+
그리고 다음과 같이 마크다운 메타데이터에 접근할 수 있습니다:
|
|
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는
|
|
396
|
+
Angular는 `[innerHTML]` 지시문을 사용하여 Markdown 콘텐츠를 렌더링합니다.
|
|
220
397
|
|
|
221
398
|
```typescript fileName="app.component.ts"
|
|
222
399
|
import { Component } from "@angular/core";
|
|
@@ -231,7 +408,9 @@ Intlayer는 마크다운 문법을 사용하여 정의된 리치 텍스트 콘
|
|
|
231
408
|
}
|
|
232
409
|
```
|
|
233
410
|
|
|
234
|
-
|
|
411
|
+
> IntlayerMarkdown 공급자가 구성되지 않은 경우 Intlayer는 기본 컴파일러를 사용하여 렌더링합니다.
|
|
412
|
+
|
|
413
|
+
`.use()` 메서드를 사용하여 특정 노드에 대한 로컬 재정의를 제공할 수도 있습니다:
|
|
235
414
|
|
|
236
415
|
```typescript
|
|
237
416
|
content().myMarkdownContent.use({
|
|
@@ -239,27 +418,46 @@ Intlayer는 마크다운 문법을 사용하여 정의된 리치 텍스트 콘
|
|
|
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
|
+
그리고 다음과 같이 마크다운 메타데이터에 접근할 수 있습니다:
|
|
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
|
-
|
|
441
|
+
이러한 유틸리티는 **순수 Markdown 문자열만** 렌더링하며 `useIntlayer`와 독립적입니다. 사전 외의 출처에서 Markdown을 렌더링해야 할 때 사용하세요.
|
|
248
442
|
|
|
249
443
|
<Tabs group="framework">
|
|
250
444
|
<Tab label="React / Next.js" value="react">
|
|
251
445
|
|
|
446
|
+
#### `<MarkdownRenderer />` 컴포넌트
|
|
447
|
+
|
|
448
|
+
특정 옵션으로 Markdown 문자열을 렌더링합니다.
|
|
449
|
+
|
|
252
450
|
```tsx
|
|
253
451
|
import { MarkdownRenderer } from "react-intlayer/markdown";
|
|
254
452
|
|
|
255
453
|
<MarkdownRenderer forceBlock={true} tagfilter={true}>
|
|
256
|
-
{"#
|
|
454
|
+
{"# 내 제목"}
|
|
257
455
|
</MarkdownRenderer>
|
|
258
456
|
```
|
|
259
457
|
|
|
260
458
|
#### `useMarkdownRenderer()` 훅
|
|
261
459
|
|
|
262
|
-
|
|
460
|
+
사전 구성된 렌더러 함수를 가져옵니다.
|
|
263
461
|
|
|
264
462
|
```tsx
|
|
265
463
|
import { useMarkdownRenderer } from "react-intlayer/markdown";
|
|
@@ -269,16 +467,16 @@ Intlayer는 마크다운 문법을 사용하여 정의된 리치 텍스트 콘
|
|
|
269
467
|
components: { h1: (props) => <h1 {...props} className="custom" /> }
|
|
270
468
|
});
|
|
271
469
|
|
|
272
|
-
return renderMarkdown("#
|
|
470
|
+
return renderMarkdown("# 내 제목");
|
|
273
471
|
```
|
|
274
472
|
|
|
275
473
|
#### `renderMarkdown()` 유틸리티
|
|
276
|
-
컴포넌트
|
|
474
|
+
컴포넌트 외부 렌더링용 독립 실행형 유틸리티.
|
|
277
475
|
|
|
278
476
|
```tsx
|
|
279
477
|
import { renderMarkdown } from "react-intlayer/markdown";
|
|
280
478
|
|
|
281
|
-
const jsx = renderMarkdown("#
|
|
479
|
+
const jsx = renderMarkdown("# 내 제목", { forceBlock: true });
|
|
282
480
|
```
|
|
283
481
|
|
|
284
482
|
</Tab>
|
|
@@ -292,7 +490,7 @@ Intlayer는 마크다운 문법을 사용하여 정의된 리치 텍스트 콘
|
|
|
292
490
|
</script>
|
|
293
491
|
|
|
294
492
|
<template>
|
|
295
|
-
<MarkdownRenderer :forceBlock="true" content="#
|
|
493
|
+
<MarkdownRenderer :forceBlock="true" content="# 내 제목" />
|
|
296
494
|
</template>
|
|
297
495
|
```
|
|
298
496
|
|
|
@@ -306,7 +504,7 @@ Intlayer는 마크다운 문법을 사용하여 정의된 리치 텍스트 콘
|
|
|
306
504
|
import { MarkdownRenderer } from "svelte-intlayer/markdown";
|
|
307
505
|
</script>
|
|
308
506
|
|
|
309
|
-
<MarkdownRenderer forceBlock={true} value="#
|
|
507
|
+
<MarkdownRenderer forceBlock={true} value="# 내 제목" />
|
|
310
508
|
```
|
|
311
509
|
|
|
312
510
|
#### `useMarkdownRenderer()` 훅
|
|
@@ -317,7 +515,7 @@ Intlayer는 마크다운 문법을 사용하여 정의된 리치 텍스트 콘
|
|
|
317
515
|
const render = useMarkdownRenderer();
|
|
318
516
|
</script>
|
|
319
517
|
|
|
320
|
-
{@html render("#
|
|
518
|
+
{@html render("# 내 제목")}
|
|
321
519
|
```
|
|
322
520
|
|
|
323
521
|
#### `renderMarkdown()` 유틸리티
|
|
@@ -327,7 +525,7 @@ Intlayer는 마크다운 문법을 사용하여 정의된 리치 텍스트 콘
|
|
|
327
525
|
import { renderMarkdown } from "svelte-intlayer/markdown";
|
|
328
526
|
</script>
|
|
329
527
|
|
|
330
|
-
{@html renderMarkdown("#
|
|
528
|
+
{@html renderMarkdown("# 내 제목")}
|
|
331
529
|
```
|
|
332
530
|
|
|
333
531
|
</Tab>
|
|
@@ -338,7 +536,7 @@ Intlayer는 마크다운 문법을 사용하여 정의된 리치 텍스트 콘
|
|
|
338
536
|
import { MarkdownRenderer } from "preact-intlayer/markdown";
|
|
339
537
|
|
|
340
538
|
<MarkdownRenderer forceBlock={true}>
|
|
341
|
-
{"#
|
|
539
|
+
{"# 내 제목"}
|
|
342
540
|
</MarkdownRenderer>
|
|
343
541
|
```
|
|
344
542
|
|
|
@@ -349,7 +547,7 @@ Intlayer는 마크다운 문법을 사용하여 정의된 리치 텍스트 콘
|
|
|
349
547
|
|
|
350
548
|
const render = useMarkdownRenderer();
|
|
351
549
|
|
|
352
|
-
return <div>{render("#
|
|
550
|
+
return <div>{render("# 내 제목")}</div>;
|
|
353
551
|
```
|
|
354
552
|
|
|
355
553
|
#### `renderMarkdown()` 유틸리티
|
|
@@ -357,7 +555,7 @@ Intlayer는 마크다운 문법을 사용하여 정의된 리치 텍스트 콘
|
|
|
357
555
|
```tsx
|
|
358
556
|
import { renderMarkdown } from "preact-intlayer/markdown";
|
|
359
557
|
|
|
360
|
-
return <div>{renderMarkdown("#
|
|
558
|
+
return <div>{renderMarkdown("# 내 제목")}</div>;
|
|
361
559
|
```
|
|
362
560
|
|
|
363
561
|
</Tab>
|
|
@@ -368,7 +566,7 @@ Intlayer는 마크다운 문법을 사용하여 정의된 리치 텍스트 콘
|
|
|
368
566
|
import { MarkdownRenderer } from "solid-intlayer/markdown";
|
|
369
567
|
|
|
370
568
|
<MarkdownRenderer forceBlock={true}>
|
|
371
|
-
{"#
|
|
569
|
+
{"# 내 제목"}
|
|
372
570
|
</MarkdownRenderer>
|
|
373
571
|
```
|
|
374
572
|
|
|
@@ -379,7 +577,7 @@ Intlayer는 마크다운 문법을 사용하여 정의된 리치 텍스트 콘
|
|
|
379
577
|
|
|
380
578
|
const render = useMarkdownRenderer();
|
|
381
579
|
|
|
382
|
-
return <div>{render("#
|
|
580
|
+
return <div>{render("# 내 제목")}</div>;
|
|
383
581
|
```
|
|
384
582
|
|
|
385
583
|
#### `renderMarkdown()` 유틸리티
|
|
@@ -387,13 +585,13 @@ Intlayer는 마크다운 문법을 사용하여 정의된 리치 텍스트 콘
|
|
|
387
585
|
```tsx
|
|
388
586
|
import { renderMarkdown } from "solid-intlayer/markdown";
|
|
389
587
|
|
|
390
|
-
return <div>{renderMarkdown("#
|
|
588
|
+
return <div>{renderMarkdown("# 내 제목")}</div>;
|
|
391
589
|
```
|
|
392
590
|
|
|
393
591
|
</Tab>
|
|
394
592
|
<Tab label="Angular" value="angular">
|
|
395
593
|
#### `IntlayerMarkdownService` 서비스
|
|
396
|
-
서비스를 사용하여
|
|
594
|
+
서비스를 사용하여 Markdown 문자열을 렌더링합니다.
|
|
397
595
|
|
|
398
596
|
```typescript
|
|
399
597
|
import { IntlayerMarkdownService } from "angular-intlayer/markdown";
|
|
@@ -412,9 +610,9 @@ Intlayer는 마크다운 문법을 사용하여 정의된 리치 텍스트 콘
|
|
|
412
610
|
|
|
413
611
|
---
|
|
414
612
|
|
|
415
|
-
## `MarkdownProvider`를
|
|
613
|
+
## `MarkdownProvider`를 통한 전역 구성
|
|
416
614
|
|
|
417
|
-
|
|
615
|
+
`MarkdownProvider`(또는 해당 프레임워크 기능)는 전체 애플리케이션의 Markdown 렌더링 파이프라인을 구성합니다. 이는 자동 `useIntlayer` 렌더링과 도우미 유틸리티 모두에 적용됩니다. 여기서 설정된 옵션이 기본값이며, `.use()`는 노드 수준에서 이를 덮어씁니다.
|
|
418
616
|
|
|
419
617
|
<Tabs group="framework">
|
|
420
618
|
<Tab label="React / Next.js" value="react">
|
|
@@ -425,8 +623,9 @@ Intlayer는 마크다운 문법을 사용하여 정의된 리치 텍스트 콘
|
|
|
425
623
|
export const AppProvider = ({ children }) => (
|
|
426
624
|
<MarkdownProvider
|
|
427
625
|
components={{
|
|
428
|
-
h1: (
|
|
429
|
-
a: ({ href,
|
|
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 @@ Intlayer는 마크다운 문법을 사용하여 정의된 리치 텍스트 콘
|
|
|
434
633
|
);
|
|
435
634
|
```
|
|
436
635
|
|
|
437
|
-
|
|
636
|
+
> MDX 지원 — Markdown 내부에서 사용된 모든 컴포넌트 이름(예: `<MyCustomJSXComponent />`)은 `components` 맵에서 확인됩니다.
|
|
637
|
+
|
|
638
|
+
자체 마크다운 렌더러를 사용할 수도 있습니다:
|
|
438
639
|
|
|
439
640
|
```tsx fileName="AppProvider.tsx"
|
|
440
641
|
import { MarkdownProvider } from "react-intlayer/markdown";
|
|
@@ -442,8 +643,8 @@ Intlayer는 마크다운 문법을 사용하여 정의된 리치 텍스트 콘
|
|
|
442
643
|
export const AppProvider = ({ children }) => (
|
|
443
644
|
<MarkdownProvider
|
|
444
645
|
renderMarkdown={async (md) => {
|
|
445
|
-
const {
|
|
446
|
-
return
|
|
646
|
+
const { renderMarkdown } = await import('react-intlayer/markdown');
|
|
647
|
+
return renderMarkdown(md);
|
|
447
648
|
}}
|
|
448
649
|
>
|
|
449
650
|
{children}
|
|
@@ -451,7 +652,7 @@ Intlayer는 마크다운 문법을 사용하여 정의된 리치 텍스트 콘
|
|
|
451
652
|
);
|
|
452
653
|
```
|
|
453
654
|
|
|
454
|
-
> Markdown 렌더러를 동적으로 가져오는 것은
|
|
655
|
+
> Markdown 렌더러를 동적으로 가져오는 것은 애플리케이션 번들 크기를 줄이는 좋은 방법입니다.
|
|
455
656
|
|
|
456
657
|
</Tab>
|
|
457
658
|
<Tab label="Vue" value="vue">
|
|
@@ -478,7 +679,7 @@ Intlayer는 마크다운 문법을 사용하여 정의된 리치 텍스트 콘
|
|
|
478
679
|
app.mount("#app");
|
|
479
680
|
```
|
|
480
681
|
|
|
481
|
-
|
|
682
|
+
자체 마크다운 렌더러를 사용할 수도 있습니다:
|
|
482
683
|
|
|
483
684
|
```typescript fileName="main.ts"
|
|
484
685
|
import { createApp } from "vue";
|
|
@@ -491,15 +692,15 @@ Intlayer는 마크다운 문법을 사용하여 정의된 리치 텍스트 콘
|
|
|
491
692
|
app.use(intlayer);
|
|
492
693
|
app.use(intlayerMarkdown, {
|
|
493
694
|
renderMarkdown: async (md) => {
|
|
494
|
-
const {
|
|
495
|
-
return
|
|
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
|
-
> Markdown 렌더러를 동적으로 가져오는 것은
|
|
703
|
+
> Markdown 렌더러를 동적으로 가져오는 것은 애플리케이션 번들 크기를 줄이는 좋은 방법입니다.
|
|
503
704
|
|
|
504
705
|
</Tab>
|
|
505
706
|
<Tab label="Svelte" value="svelte">
|
|
@@ -519,7 +720,7 @@ Intlayer는 마크다운 문법을 사용하여 정의된 리치 텍스트 콘
|
|
|
519
720
|
</MarkdownProvider>
|
|
520
721
|
```
|
|
521
722
|
|
|
522
|
-
|
|
723
|
+
자체 마크다운 렌더러를 사용할 수도 있습니다:
|
|
523
724
|
|
|
524
725
|
```svelte fileName="App.svelte"
|
|
525
726
|
<script lang="ts">
|
|
@@ -528,15 +729,15 @@ Intlayer는 마크다운 문법을 사용하여 정의된 리치 텍스트 콘
|
|
|
528
729
|
|
|
529
730
|
<MarkdownProvider
|
|
530
731
|
renderMarkdown={async (md) => {
|
|
531
|
-
const {
|
|
532
|
-
return
|
|
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
|
-
> Markdown 렌더러를 동적으로 가져오는 것은
|
|
740
|
+
> Markdown 렌더러를 동적으로 가져오는 것은 애플리케이션 번들 크기를 줄이는 좋은 방법입니다.
|
|
540
741
|
|
|
541
742
|
</Tab>
|
|
542
743
|
<Tab label="Preact" value="preact">
|
|
@@ -555,7 +756,7 @@ Intlayer는 마크다운 문법을 사용하여 정의된 리치 텍스트 콘
|
|
|
555
756
|
);
|
|
556
757
|
```
|
|
557
758
|
|
|
558
|
-
|
|
759
|
+
자체 마크다운 렌더러를 사용할 수도 있습니다:
|
|
559
760
|
|
|
560
761
|
```tsx fileName="AppProvider.tsx"
|
|
561
762
|
import { MarkdownProvider } from "preact-intlayer/markdown";
|
|
@@ -563,8 +764,8 @@ Intlayer는 마크다운 문법을 사용하여 정의된 리치 텍스트 콘
|
|
|
563
764
|
export const AppProvider = ({ children }) => (
|
|
564
765
|
<MarkdownProvider
|
|
565
766
|
renderMarkdown={async (md) => {
|
|
566
|
-
const {
|
|
567
|
-
return
|
|
767
|
+
const { renderMarkdown } = await import('preact-intlayer/markdown');
|
|
768
|
+
return renderMarkdown(md);
|
|
568
769
|
}}
|
|
569
770
|
>
|
|
570
771
|
{children}
|
|
@@ -572,7 +773,7 @@ Intlayer는 마크다운 문법을 사용하여 정의된 리치 텍스트 콘
|
|
|
572
773
|
);
|
|
573
774
|
```
|
|
574
775
|
|
|
575
|
-
> Markdown 렌더러를 동적으로 가져오는 것은
|
|
776
|
+
> Markdown 렌더러를 동적으로 가져오는 것은 애플리케이션 번들 크기를 줄이는 좋은 방법입니다.
|
|
576
777
|
|
|
577
778
|
</Tab>
|
|
578
779
|
<Tab label="Solid" value="solid">
|
|
@@ -591,7 +792,7 @@ Intlayer는 마크다운 문법을 사용하여 정의된 리치 텍스트 콘
|
|
|
591
792
|
);
|
|
592
793
|
```
|
|
593
794
|
|
|
594
|
-
|
|
795
|
+
자체 마크다운 렌더러를 사용할 수도 있습니다:
|
|
595
796
|
|
|
596
797
|
```tsx fileName="AppProvider.tsx"
|
|
597
798
|
import { MarkdownProvider } from "solid-intlayer/markdown";
|
|
@@ -599,8 +800,8 @@ Intlayer는 마크다운 문법을 사용하여 정의된 리치 텍스트 콘
|
|
|
599
800
|
export const AppProvider = (props) => (
|
|
600
801
|
<MarkdownProvider
|
|
601
802
|
renderMarkdown={async (md) => {
|
|
602
|
-
const {
|
|
603
|
-
return
|
|
803
|
+
const { renderMarkdown } = await import('solid-intlayer/markdown');
|
|
804
|
+
return renderMarkdown(md);
|
|
604
805
|
}}
|
|
605
806
|
>
|
|
606
807
|
{props.children}
|
|
@@ -608,59 +809,29 @@ Intlayer는 마크다운 문법을 사용하여 정의된 리치 텍스트 콘
|
|
|
608
809
|
);
|
|
609
810
|
```
|
|
610
811
|
|
|
611
|
-
> Markdown 렌더러를 동적으로 가져오는 것은
|
|
812
|
+
> Markdown 렌더러를 동적으로 가져오는 것은 애플리케이션 번들 크기를 줄이는 좋은 방법입니다.
|
|
612
813
|
|
|
613
814
|
</Tab>
|
|
614
815
|
<Tab label="Angular" value="angular">
|
|
615
816
|
|
|
616
|
-
```typescript fileName="app.
|
|
617
|
-
import {
|
|
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
|
-
나만의 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
|
-
|
|
636
|
-
|
|
637
|
-
|
|
821
|
+
@NgModule({
|
|
822
|
+
imports: [
|
|
823
|
+
IntlayerMarkdownModule.forRoot({
|
|
638
824
|
renderMarkdown: async (md) => {
|
|
639
|
-
const {
|
|
640
|
-
return
|
|
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
|
-
> Markdown 렌더러를 동적으로 가져오는 것은
|
|
834
|
+
> Markdown 렌더러를 동적으로 가져오는 것은 애플리케이션 번들 크기를 줄이는 좋은 방법입니다.
|
|
648
835
|
|
|
649
836
|
</Tab>
|
|
650
837
|
</Tabs>
|
|
651
|
-
|
|
652
|
-
---
|
|
653
|
-
|
|
654
|
-
## 옵션 참조
|
|
655
|
-
|
|
656
|
-
이 옵션들은 `MarkdownProvider`, `MarkdownRenderer`, `useMarkdownRenderer`, 및 `renderMarkdown`에 전달할 수 있습니다.
|
|
657
|
-
|
|
658
|
-
| 옵션 | 타입 | 기본값 | 설명 |
|
|
659
|
-
| :-------------------- | :---------- | :------ | :---------------------------------------------------------------------------- |
|
|
660
|
-
| `forceBlock` | `boolean` | `false` | 출력을 블록 수준 요소(예: `<div>`)로 감싸도록 강제합니다. |
|
|
661
|
-
| `forceInline` | `boolean` | `false` | 출력을 인라인 요소(예: `<span>`)로 감싸도록 강제합니다. |
|
|
662
|
-
| `tagfilter` | `boolean` | `true` | 위험한 HTML 태그를 제거하여 보안을 강화하는 GitHub Tag Filter를 활성화합니다. |
|
|
663
|
-
| `preserveFrontmatter` | `boolean` | `false` | `true`인 경우 마크다운 문자열 시작 부분의 frontmatter가 제거되지 않습니다. |
|
|
664
|
-
| `components` | `Overrides` | `{}` | HTML 태그를 커스텀 컴포넌트에 매핑하는 맵(예: `{ h1: MyHeading }`). |
|
|
665
|
-
| `wrapper` | `Component` | `null` | 렌더링된 마크다운을 감싸는 커스텀 컴포넌트입니다. |
|
|
666
|
-
| `renderMarkdown` | `Function` | `null` | 기본 마크다운 컴파일러를 완전히 대체하는 커스텀 렌더링 함수입니다. |
|