It's very straightforward to use web components with VanJS.
Here we use the excellent web component library Shoelace
import van from "./van.js"
const {
div,
h2,
br,
img,
strong,
small,
hr,
"sl-rating": SlRating,
"sl-button": SlButton,
"sl-card": SlCard,
"sl-input": SlInput
} = van.tags
const target = document.getElementById("app");
function GroupButtons(){
const variant = van.state("...");
const handleClick = e => variant.val = (e.target.getAttribute("variant"));
const view = div(
h2("Buttons : ", variant),
div(
SlButton({
variant: "default"
}, "one"),
SlButton({
variant: "primary"
}, "two"),
SlButton({
variant: "danger"
}, "three")
),
)
view.onclick = handleClick;
return view;
}
function Card(){
return SlCard({
class: "card-overview"
},
img({
slot: "image",
src: "https://images.unsplash.com/photo-1559209172-0ff8f6d49ff7?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=500&q=80",
alt: "A kitten sits patiently between a terracotta pot and decorative grasses."
}),
strong("Mitten"), br(),
"This kitten is as cute as he is playful. Bring him home today!", br(),
small("6 weeks old"),
div({
slot: "footer"
},
SlButton({
variant: "primary",
pill: ""
}, "More Info "),
SlRating()
)
)
}
function Input(){
const value = van.state("input text...")
const dom = div(
div(value),
br(),
SlInput({placeholder:"Enter text"})
)
const input = dom.querySelector("sl-input")
input.oninput = () => value.val = input.value
return dom
}
van.add(
target,
GroupButtons(), br(),
h2("Card"),
Card(), br(),
h2("Input"),
Input(), br()
)
Top comments (2)
nit: do you want to remove the blank line after
function GroupButtons() {
?Done :-)