Skip to content

Commerce kit

The Commerce kit (@qazana/strata/commerce) is a standalone storefront layer built directly on base.css and the token foundation. Load site.css + commerce.css + qazana.js — no app.css dependency. All components are scoped under .shop so they compose cleanly alongside any other kit.

Grid, filter rail, badges, price display, star ratings, wishlist toggle, skeleton state and pagination:

Open “Commerce — catalog” in a new tab ↗

Gallery (reuses [data-tabs]), variant chip and colour-swatch pickers ([data-variant]), quantity stepper ([data-stepper]), stock states, and a quick-view dialog:

Open “Commerce — product detail” in a new tab ↗

Cart lines with inline steppers, mini-cart drawer, order summary, promo code (idle + applied), and the empty-cart state:

Open “Commerce — cart” in a new tab ↗

Checkout progress steps, shipping-method and payment-method option cards, credit card field group, and order summary recap:

Open “Commerce — checkout” in a new tab ↗

Confirmation header, shipment-status timeline, order summary, and order history table:

Open “Commerce — order” in a new tab ↗
ComponentClass / hookNotes
Product grid.product-gridauto-fill, min 260 px
Product card.productlink element, hover lift
Price display.price · .saletabular-nums, --danger on sale
Badges.badge.sale/.new/.low/.oossemantic tokens only
Stock status.stock.in-stock/.low-stock/.out-of-stockdot via ::before
Star rating.starsrole="img" + aria-label; glyphs aria-hidden
Qty stepper[data-stepper] + .qtyclamps min/max/step; disables at bounds
Variant picker[data-variant] + .vchips/.swatchesarrow-key radiogroup; skips .oos
PDP gallery.gallery + [data-tabs]tabs controller drives thumb/panel sync
Quick-view.quickview + [data-modal-open]reuses modal controller
Cart line.cart-linethumb + info + price grid
Mini-cart.minicart-scrim + .minicartdrawer; aria-live count badge
Order summary.order-summary.os-row.discount/.free colour modifiers
Promo code.promo · .promo-appliedidle + applied states
Checkout steps.checkout-steps + .step.done/.activeresponsive (labels hidden narrow)
Pay/ship option.pay-opt + :has(input:checked)baseline 2023 :has()
Card field.card-fieldgrouped number/expiry/CVC rows
Filter rail.filters + .facet (<details>)native open/close, chevron CSS
Active chips.fchips + .fchipremove button per chip
Pagination.pager.active = current page
Skeleton.skeleton + .skel-lineskel-pulse animation; reduced-motion off
Empty cart.cart-emptyicon + heading + CTA
Order confirm.order-confirm + .order-refmono badge
Timeline.timeline + .tl-item.done/.active::before vertical connector
<!-- storefront page -->
<link rel="stylesheet" href="@qazana/strata/site">
<link rel="stylesheet" href="@qazana/strata/commerce">
<script type="module" src="@qazana/strata"></script>
<body class="shop">
<!-- all commerce components live inside .shop -->
</body>