Skip to main content

Example Menu

Menue items

Handelbars for Menu Example

In this example, we show how to select the QNTY, when clicking Add to Cart

{{#each items}}
<div class="lux-menu-card" data-id="{{id}}">
<div class="lux-card-inner">
<div class="lux-card-imgwrap">
<img src="{{url}}" alt="Image for {{name}}" class="lux-card-img" />
<div class="lux-price-badge">
<span class="lux-price-icon">${{price}}</span>
</div>
</div>
<div class="lux-card-detail">
<div class="lux-card-title">{{name}}</div>
<div class="lux-card-tags">
<span class="lux-tag lux-cat">{{category}}</span>
{{#if glutenFree}}
<span class="lux-tag lux-gf" title="Gluten Free">GF</span>
{{/if}} {{#if nutAllergy}}
<span class="lux-tag lux-nut" title="Contains Nuts">Nuts</span>
{{/if}}
<span class="lux-tag lux-cal" title="Calories">{{calories}} cal</span>
</div>
<div class="lux-card-desc">{{description}}</div>
<div class="lux-action-row">
<label for="qnty-{{@index}}" class="lux-qty-label">Qty:</label>
<select id="qnty-{{@index}}" name="qnty" class="lux-qty-select">
{{#each (range 0 10)}}
<option value="{{this}}">{{this}}</option>
{{/each}}
</select>
<button
class="lux-add-btn"
onclick="addToCart(this, '{{name}}', {{price}})"
>
ADD TO CART
</button>
</div>
</div>
</div>
</div>
{{/each}}

Javascript Function

Only add to the Control, within the tab Script, not to handlebars template and not in a seperate js file. ai12z runs in the Shadow DOM.

function addToCart(button, name, price) {
var select = button.parentNode.querySelector('select[name="qnty"]')
var qty = select ? select.value : 0
if (qty > 0) {
alert(
"Added to cart: " +
name +
"\nQuantity: " +
qty +
"\nTotal: $" +
price * qty
)
} else {
alert("Please select a quantity.")
}
}

Note is the function above uses the button.parentNode refers to the button's immediate parent, which contains the select.

.lux-menu-card {
background: #fff;
border-radius: 2.2rem;
box-shadow:
0 10px 38px 0 rgba(52, 78, 134, 0.13),
0 1.5px 8px 0 rgba(40, 30, 70, 0.04);
overflow: hidden;
margin-bottom: 2.5rem;
max-width: 540px;
min-width: 300px;
padding: 0;
display: flex;
align-items: stretch;
}

.lux-card-inner {
display: flex;
flex-direction: row;
width: 100%;
padding: 0;
}

.lux-card-imgwrap {
flex: 1 1 40%;
position: relative;
background: linear-gradient(135deg, #ffe6f2 0%, #e0e7ff 100%);
display: flex;
align-items: flex-start;
justify-content: center;
min-width: 170px;
min-height: 220px;
max-width: 260px;
border-top-left-radius: 2.2rem;
border-bottom-left-radius: 2.2rem;
overflow: hidden;
}

.lux-card-img {
width: 100%;
height: 210px;
object-fit: cover;
border-radius: 0 0 2rem 0;
margin: 0;
box-shadow: 0 4px 24px rgba(50, 30, 60, 0.1);
background: #fafbfc;
}

.lux-price-badge {
position: absolute;
top: 18px;
left: 18px;
background: #fff;
border-radius: 50%;
box-shadow: 0 4px 18px rgba(252, 92, 125, 0.11);
width: 54px;
height: 54px;
display: flex;
align-items: center;
justify-content: center;
}

.lux-price-icon {
color: #fc5c7d;
font-size: 1.45rem;
font-weight: 700;
font-family: system-ui, sans-serif;
}

.lux-card-detail {
flex: 1 1 60%;
padding: 2.2rem 2rem 2.2rem 1.2rem;
display: flex;
flex-direction: column;
justify-content: center;
}

.lux-card-title {
font-size: 1.6rem;
font-weight: 800;
color: #1e293b;
margin-bottom: 1.2rem;
font-family: "Inter", Arial, sans-serif;
}

.lux-card-tags {
display: flex;
flex-wrap: wrap;
gap: 0.4rem 0.6rem;
margin-bottom: 1.2rem;
}
.lux-tag {
background: #f1f5f9;
color: #64748b;
font-size: 1.05rem;
border-radius: 1.3rem;
padding: 0.2em 1em;
font-weight: 600;
letter-spacing: 0.01em;
}
.lux-tag.lux-gf {
background: #e0fce6;
color: #0db858;
}
.lux-tag.lux-nut {
background: #fef3c7;
color: #db7806;
}
.lux-tag.lux-cal {
background: #dbeafe;
color: #2563eb;
}
.lux-tag.lux-cat {
background: #fff7ed;
color: #f97316;
}

.lux-card-desc {
color: #334155;
font-size: 1.13rem;
margin-bottom: 1.9rem;
line-height: 1.55;
font-family: "Inter", Arial, sans-serif;
}

.lux-action-row {
display: flex;
align-items: center;
gap: 1.2rem;
margin-top: auto;
margin-bottom: 0.1em;
}
.lux-qty-label {
font-size: 1.07rem;
color: #334155;
font-weight: 500;
margin-right: 0.4em;
}
.lux-qty-select {
font-size: 1.5rem;
padding: 0.5em 1.2em 0.5em 1em;
border-radius: 1.2rem;
border: 1.4px solid #e2e8f0;
background: #f8fafc;
color: #22223b;
min-width: 54px;
outline: none;
box-shadow: 0 1.5px 7px rgba(100, 100, 150, 0.04);
appearance: none;
transition:
border 0.16s,
box-shadow 0.14s;
margin-right: 0.2em;
}
.lux-qty-select:focus {
border-color: #fc5c7d;
box-shadow: 0 0 0 2px #fde68a80;
}

.lux-add-btn {
background: linear-gradient(135deg, #fc5c7d 0%, #fd6f5e 100%);
color: #fff;
font-weight: 800;
letter-spacing: 0.09em;
text-transform: uppercase;
font-size: 1.01rem;
padding: 0.8em 1.4em;
border-radius: 1.2em 1.2em 2em 2em;
border: none;
box-shadow: 0 4px 16px rgba(252, 128, 191, 0.15);
cursor: pointer;
transition:
background 0.21s,
box-shadow 0.16s,
transform 0.12s;
margin-left: 0.7rem;
min-width: 98px;
min-height: 46px;
display: flex;
align-items: center;
justify-content: center;
font-family: "Inter", Arial, sans-serif;
line-height: 1.15;
}
.lux-add-btn:hover,
.lux-add-btn:focus {
background: linear-gradient(135deg, #ff4181 0%, #fd994b 100%);
box-shadow: 0 8px 24px rgba(252, 128, 191, 0.18);
transform: scale(1.04);
}

/* Responsive */
@media (max-width: 700px) {
.lux-menu-card {
max-width: 99vw;
min-width: 0;
flex-direction: column;
border-radius: 1.1rem;
}
.lux-card-inner {
flex-direction: column;
padding: 0;
}
.lux-card-imgwrap {
border-radius: 1.1rem 1.1rem 0 0;
min-width: 0;
max-width: 100%;
}
.lux-card-img {
height: 170px;
border-radius: 1.1rem 1.1rem 0 0;
}
.lux-card-detail {
padding: 1.5rem 1.1rem 1.4rem 1.1rem;
}
.lux-add-btn {
width: 100%;
min-width: 0;
min-height: 62px;
font-size: 1.1rem;
padding: 1.2em 0;
border-radius: 1.2em 1.2em 2em 2em;
margin-top: 1.1rem;
margin-left: 0;
}
}

/* This is rest-card */
.lux-card.lux-card--rest {
display: flex;
flex-direction: row;
border-radius: 1.7rem;
background: #fff;
box-shadow: 0 8px 38px 0 rgba(52, 78, 134, 0.1);
overflow: hidden;
max-width: 660px;
min-width: 320px;
margin: 2rem auto;
font-family: "Inter", Arial, sans-serif;
transition: box-shadow 0.18s;
padding: 0;
}

.lux-card-imgcol {
flex: 0 0 170px;
position: relative;
background: #f5f6fa;
display: flex;
align-items: center;
justify-content: center;
}

.lux-card-img {
width: 170px;
height: 170px;
object-fit: cover;
border-radius: 1.1rem 0 0 1.1rem;
box-shadow: 0 2px 10px rgba(52, 78, 134, 0.08);
background: #eaecef;
display: block;
}

.lux-badge--price {
position: absolute;
top: 16px;
left: 14px;
background: #fff0f3;
color: #ff3370;
font-weight: 800;
font-size: 1.2rem;
padding: 0.18em 1.1em;
border-radius: 1em;
box-shadow: 0 2px 8px rgba(252, 92, 125, 0.07);
}

.lux-card-contentcol {
flex: 1 1 auto;
padding: 1.5rem 2rem 1.5rem 1.2rem;
display: flex;
flex-direction: column;
justify-content: flex-start;
}

.lux-card-title-row {
margin-bottom: 0.75rem;
}

.lux-card-title {
font-size: 1.35rem;
font-weight: 800;
color: #1e2535;
letter-spacing: -0.01em;
margin-bottom: 0.2rem;
line-height: 1.17;
}

.lux-badges-row {
display: flex;
flex-wrap: wrap;
gap: 0.45rem 0.5rem;
margin-bottom: 0.85rem;
overflow-x: auto;
scrollbar-width: none;
}
.lux-badges-row::-webkit-scrollbar {
display: none;
}

.lux-badge {
font-size: 1.01rem;
font-weight: 600;
padding: 0.18em 1em;
border-radius: 1.1em;
background: #f1f5f9;
color: #617199;
letter-spacing: 0.01em;
display: inline-block;
white-space: nowrap;
}
.lux-badge--cuisine {
background: #e0f2fe;
color: #0891b2;
}
.lux-badge--city {
background: #e0e7ff;
color: #6366f1;
}
.lux-badge--price {
background: #ffe4ec;
color: #f43f5e;
}
.lux-badge--rating {
background: #fef7e0;
color: #f59e42;
font-weight: 700;
}
.lux-badge--reviews {
background: #e6fcef;
color: #16a34a;
}
.lux-badge--distance {
background: #e0f2f1;
color: #38bdf8;
}
.lux-badge--pricedesc {
background: #f4ffe4;
color: #5fc423;
font-weight: 700;
}

.lux-info-block {
margin-bottom: 0.62rem;
}
.lux-info-row {
display: flex;
align-items: center;
font-size: 1.06rem;
margin-bottom: 0.13rem;
color: #44566c;
gap: 0.35em;
line-height: 1.3;
}
.lux-info-icon {
font-size: 1.07em;
color: #94a3b8;
margin-right: 0.08em;
}
.lux-info-link {
color: #20a1e1;
text-decoration: underline dotted;
font-weight: 600;
transition: color 0.13s;
}
.lux-info-link:hover {
color: #ff3370;
}

.lux-card-desc {
color: #4b5c72;
font-size: 1.08rem;
margin-top: 0.9rem;
line-height: 1.5;
max-width: 480px;
word-break: break-word;
}

@media (max-width: 700px) {
.lux-card.lux-card--rest {
flex-direction: column;
max-width: 97vw;
border-radius: 1rem;
}
.lux-card-imgcol {
flex: none;
width: 100%;
}
.lux-card-img {
border-radius: 1rem 1rem 0 0;
width: 100%;
height: 160px;
}
.lux-card-contentcol {
padding: 1.15rem 1.1rem 1.2rem 1.1rem;
}
}