Using the `hsx` macro, you can implement HTML in S-expressions.
```
(hsx
(div :id "greeting" :class "flex"
(h1 "Hello World")
(p
"This is"
(strong "example!"))))
↓ ↓ ↓
<divid="greeting"class="flex">
<h1>Hello World</h1>
<p>
This is
<strong>example!</strong>
</p>
</div>
```
Elements in HSX are essentially functions, so you can freely compose them and embed CL code to them.
```
(hsx
(div
(p :id (+ 1 1))
(ul
(loop
:for i :from 1 :to 3
:collect (li (format nil "item~a" i))))
(if t
(p "true")
(p "false"))))
↓ ↓ ↓
<div>
<pid="2"></p>
<ul>
<li>item1</li>
<li>item2</li>
<li>item3</li>
</ul>
<p>true</p>
</div>
```
To define a component, just define a function that takes keyword arguments or property list or both, and define hsx expression of it with `defhsx` macro.