Skip to content

Commit 1e6df5b

Browse files
committed
Add a very basic markdown component
1 parent 0e03027 commit 1e6df5b

File tree

4 files changed

+74
-0
lines changed

4 files changed

+74
-0
lines changed

test/ui/markdown/index.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
const { Markdown } = require("../../../ui")
2+
3+
module.exports = () => {
4+
return Markdown(`
5+
# h1
6+
## h2
7+
### h3
8+
#### h4
9+
##### h5
10+
###### h6
11+
12+
paragraph
13+
14+
> blockquote
15+
`)
16+
}

test/ui/markdown/index.test.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
const test = require("node:test")
2+
const assert = require("node:assert")
3+
const { compile } = require("../../..")
4+
5+
test("renders children", async () => {
6+
const { template } = await compile(__dirname)
7+
const html = template()
8+
assert(html.includes("<h1>h1</h1>"))
9+
assert(html.includes("<h2>h2</h2>"))
10+
assert(html.includes("<h3>h3</h3>"))
11+
assert(html.includes("<h4>h4</h4>"))
12+
assert(html.includes("<h5>h5</h5>"))
13+
assert(html.includes("<h6>h6</h6>"))
14+
assert(html.includes("<p>paragraph</p>"))
15+
assert(html.includes("<blockquote>blockquote</blockquote>"), html)
16+
})

ui/index.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,13 @@ const Container = require("./container")
33
const Grid = require("./grid")
44
const Group = require("./group")
55
const Stack = require("./stack")
6+
const Markdown = require("./markdown")
67

78
module.exports = {
89
Center,
910
Container,
1011
Grid,
1112
Group,
1213
Stack,
14+
Markdown,
1315
}

ui/markdown/index.js

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
const { component, H1, H2, H3, H4, H5, H6, P, Blockquote } = require("../..")
2+
3+
function Markdown(params, children) {
4+
if (typeof children === "string") {
5+
const lines = children
6+
.trim()
7+
.split("\n")
8+
.map((line) => line.trim())
9+
.filter(Boolean)
10+
11+
return lines.map((line) => {
12+
if (line.startsWith("# ")) {
13+
const text = line.substring(2)
14+
return H1(text)
15+
} else if (line.startsWith("## ")) {
16+
const text = line.substring(3)
17+
return H2(text)
18+
} else if (line.startsWith("### ")) {
19+
const text = line.substring(4)
20+
return H3(text)
21+
} else if (line.startsWith("#### ")) {
22+
const text = line.substring(5)
23+
return H4(text)
24+
} else if (line.startsWith("##### ")) {
25+
const text = line.substring(6)
26+
return H5(text)
27+
} else if (line.startsWith("###### ")) {
28+
const text = line.substring(7)
29+
return H6(text)
30+
} else if (line.startsWith("> ")) {
31+
const text = line.substring(2)
32+
return Blockquote(text)
33+
}
34+
35+
return P(line)
36+
})
37+
}
38+
}
39+
40+
module.exports = component(Markdown)

0 commit comments

Comments
 (0)