Docs Components Commerce

MiniCart

React example follows below.
ts
import * as React from "react";
const miniCartFixture = {
id: "mini-cart",
triggerLabel: "Open cart",
items: [
{ id: "tee", name: "Heavyweight tee", price: 3200, quantity: 1 },
{ id: "cap", name: "Corduroy cap", price: 2400, quantity: 2 },
],
shipping: 800,
taxRate: 0.2,
} satisfies {
id: string;
triggerLabel: string;
items: Array<{ id: string; name: string; price: number; quantity: number }>;
shipping: number;
taxRate: number;
};
import { Button, MiniCart } from "@grassroot/ui-react";
export default function MiniCartDemo() {
const [open, setOpen] = React.useState(false);
return (
<div>
<Button variant="secondary" onClick={() => setOpen(true)}>
{miniCartFixture.triggerLabel}
</Button>
<MiniCart
open={open}
onClose={() => setOpen(false)}
items={miniCartFixture.items}
shipping={miniCartFixture.shipping}
taxRate={miniCartFixture.taxRate}
onCheckout={() => setOpen(false)}
/>
</div>
);
}
ts
<script setup lang="ts">
import { ref } from "vue";
const miniCartFixture = {
id: "mini-cart",
triggerLabel: "Open cart",
items: [
{ id: "tee", name: "Heavyweight tee", price: 3200, quantity: 1 },
{ id: "cap", name: "Corduroy cap", price: 2400, quantity: 2 },
],
shipping: 800,
taxRate: 0.2,
} satisfies {
id: string;
triggerLabel: string;
items: Array<{ id: string; name: string; price: number; quantity: number }>;
shipping: number;
taxRate: number;
};
import { Button, MiniCart } from "@grassroot/ui-vue";
const open = ref(false);
</script>
<template>
<div>
<Button variant="secondary" @click="open = true">{{ miniCartFixture.triggerLabel }}</Button>
<MiniCart
v-model:open="open"
:items="miniCartFixture.items"
:shipping="miniCartFixture.shipping"
:tax-rate="miniCartFixture.taxRate"
@checkout="open = false"
/>
</div>
</template>
ts
import { Component, signal } from "@angular/core";
const miniCartFixture = {
id: "mini-cart",
triggerLabel: "Open cart",
items: [
{ id: "tee", name: "Heavyweight tee", price: 3200, quantity: 1 },
{ id: "cap", name: "Corduroy cap", price: 2400, quantity: 2 },
],
shipping: 800,
taxRate: 0.2,
} satisfies {
id: string;
triggerLabel: string;
items: Array<{ id: string; name: string; price: number; quantity: number }>;
shipping: number;
taxRate: number;
};
import { GrassrootButton, GrassrootMiniCart } from "@grassroot/ui-angular";
@Component({
selector: "app-mini-cart-demo",
standalone: true,
imports: [GrassrootButton, GrassrootMiniCart],
template: `
<div>
<grassroot-button variant="secondary" (click)="open.set(true)">{{
fixture.triggerLabel
}}</grassroot-button>
<grassroot-mini-cart
[open]="open()"
(openChange)="open.set($event)"
[items]="fixture.items"
[shipping]="fixture.shipping"
[taxRate]="fixture.taxRate"
(checkout)="open.set(false)"
/>
</div>
`,
})
export class MiniCartDemoComponent {
protected readonly fixture = miniCartFixture;
readonly open = signal(false);
}
export default MiniCartDemoComponent;
ts
<script lang="ts">
import { Button, MiniCart } from "@grassroot/ui-svelte";
const miniCartFixture = {
id: "mini-cart",
triggerLabel: "Open cart",
items: [
{ id: "tee", name: "Heavyweight tee", price: 3200, quantity: 1 },
{ id: "cap", name: "Corduroy cap", price: 2400, quantity: 2 },
],
shipping: 800,
taxRate: 0.2,
} satisfies {
id: string;
triggerLabel: string;
items: Array<{ id: string; name: string; price: number; quantity: number }>;
shipping: number;
taxRate: number;
};
let open = $state(false);
</script>
<div>
<Button variant="secondary" onClick={() => (open = true)}>{miniCartFixture.triggerLabel}</Button>
<MiniCart
{open}
onClose={() => (open = false)}
items={miniCartFixture.items}
shipping={miniCartFixture.shipping}
taxRate={miniCartFixture.taxRate}
onCheckout={() => (open = false)}
/>
</div>
ts
/** @jsxImportSource solid-js */
import { createSignal } from "solid-js";
import { Button, MiniCart } from "@grassroot/ui-solid";
const miniCartFixture = {
id: "mini-cart",
triggerLabel: "Open cart",
items: [
{ id: "tee", name: "Heavyweight tee", price: 3200, quantity: 1 },
{ id: "cap", name: "Corduroy cap", price: 2400, quantity: 2 },
],
shipping: 800,
taxRate: 0.2,
} satisfies {
id: string;
triggerLabel: string;
items: Array<{ id: string; name: string; price: number; quantity: number }>;
shipping: number;
taxRate: number;
};
export default function MiniCartDemo() {
const [open, setOpen] = createSignal(false);
return (
<div>
<Button variant="secondary" onClick={() => setOpen(true)}>
{miniCartFixture.triggerLabel}
</Button>
<MiniCart
open={open()}
onClose={() => setOpen(false)}
items={miniCartFixture.items}
shipping={miniCartFixture.shipping}
taxRate={miniCartFixture.taxRate}
onCheckout={() => setOpen(false)}
/>
</div>
);
}

Installation

API Reference

Import

import * as React from "react";
import { Button, MiniCart } from "@grassroot/ui-react";

Props

Prop
Type
Default
Requirement
Description
open
boolean
—
required
—
onClose
() => void
—
required
—
items
CartItem[]
—
required
—
currency
string | undefined
"USD"
optional
—
shipping
number | undefined
—
optional
—
taxRate
number | undefined
—
optional
—
discount
number | undefined
—
optional
—
onQuantityChange
((id: string, quantity: number) => void) | undefined
—
optional
—
onRemove
((id: string) => void) | undefined
—
optional
—
onCheckout
(() => void) | undefined
—
optional
—
side
"top" | "bottom" | "right" | "left" | undefined
"right"
optional
Drawer edge.
Prop
open
Type
boolean
Default
—
Requirement
required
Description
—
Prop
onClose
Type
() => void
Default
—
Requirement
required
Description
—
Prop
items
Type
CartItem[]
Default
—
Requirement
required
Description
—
Prop
currency
Type
string | undefined
Default
"USD"
Requirement
optional
Description
—
Prop
shipping
Type
number | undefined
Default
—
Requirement
optional
Description
—
Prop
taxRate
Type
number | undefined
Default
—
Requirement
optional
Description
—
Prop
discount
Type
number | undefined
Default
—
Requirement
optional
Description
—
Prop
onQuantityChange
Type
((id: string, quantity: number) => void) | undefined
Default
—
Requirement
optional
Description
—
Prop
onRemove
Type
((id: string) => void) | undefined
Default
—
Requirement
optional
Description
—
Prop
onCheckout
Type
(() => void) | undefined
Default
—
Requirement
optional
Description
—
Prop
side
Type
"top" | "bottom" | "right" | "left" | undefined
Default
"right"
Requirement
optional
Description
Drawer edge.

Events

EventPayload
onClose() => void
onQuantityChange((id: string, quantity: number) => void) | undefined
onRemove((id: string) => void) | undefined
onCheckout(() => void) | undefined

Import

import { ref } from "vue";
import { Button, MiniCart } from "@grassroot/ui-vue";

Props

Prop
Type
Default
Requirement
open
boolean
—
required
items
CartItem[]
—
required
currency
string | undefined
"USD"
optional
shipping
number | undefined
—
optional
taxRate
number | undefined
—
optional
discount
number | undefined
—
optional
side
"bottom" | "top" | "left" | "right" | undefined
"right"
optional
Prop
open
Type
boolean
Default
—
Requirement
required
Prop
items
Type
CartItem[]
Default
—
Requirement
required
Prop
currency
Type
string | undefined
Default
"USD"
Requirement
optional
Prop
shipping
Type
number | undefined
Default
—
Requirement
optional
Prop
taxRate
Type
number | undefined
Default
—
Requirement
optional
Prop
discount
Type
number | undefined
Default
—
Requirement
optional
Prop
side
Type
"bottom" | "top" | "left" | "right" | undefined
Default
"right"
Requirement
optional

Events

EventPayload
update:open[open: boolean]
quantityChange[id: string, quantity: number]
remove[id: string]
checkout[]

Import

import { Component, signal } from "@angular/core";
import { GrassrootButton, GrassrootMiniCart } from "@grassroot/ui-angular";

Props

Prop
Type
Default
Requirement
open
boolean
—
required
items
CartItem[]
—
required
currency
string
"USD"
optional
shipping
number
—
optional
taxRate
number
—
optional
discount
number
—
optional
side
"bottom" | "top" | "left" | "right"
"right"
optional
Prop
open
Type
boolean
Default
—
Requirement
required
Prop
items
Type
CartItem[]
Default
—
Requirement
required
Prop
currency
Type
string
Default
"USD"
Requirement
optional
Prop
shipping
Type
number
Default
—
Requirement
optional
Prop
taxRate
Type
number
Default
—
Requirement
optional
Prop
discount
Type
number
Default
—
Requirement
optional
Prop
side
Type
"bottom" | "top" | "left" | "right"
Default
"right"
Requirement
optional

Events

EventPayload
openChangeboolean
quantityChange{ id: string; quantity: number }
removestring
checkoutvoid

Import

import { Button, MiniCart } from "@grassroot/ui-svelte";

Props

Prop
Type
Default
Requirement
open
boolean
—
required
items
CartItem[]
—
required
currency
string
"USD"
optional
shipping
number
—
optional
taxRate
number
—
optional
discount
number
—
optional
side
"bottom" | "top" | "left" | "right"
"right"
optional
onClose
() => void
—
required
onQuantityChange
(id: string, quantity: number) => void
—
optional
onRemove
(id: string) => void
—
optional
onCheckout
() => void
—
optional
Prop
open
Type
boolean
Default
—
Requirement
required
Prop
items
Type
CartItem[]
Default
—
Requirement
required
Prop
currency
Type
string
Default
"USD"
Requirement
optional
Prop
shipping
Type
number
Default
—
Requirement
optional
Prop
taxRate
Type
number
Default
—
Requirement
optional
Prop
discount
Type
number
Default
—
Requirement
optional
Prop
side
Type
"bottom" | "top" | "left" | "right"
Default
"right"
Requirement
optional
Prop
onClose
Type
() => void
Default
—
Requirement
required
Prop
onQuantityChange
Type
(id: string, quantity: number) => void
Default
—
Requirement
optional
Prop
onRemove
Type
(id: string) => void
Default
—
Requirement
optional
Prop
onCheckout
Type
() => void
Default
—
Requirement
optional

Events

EventPayload
onClose() => void
onQuantityChange(id: string, quantity: number) => void
onRemove(id: string) => void
onCheckout() => void

Import

import { createSignal } from "solid-js";
import { Button, MiniCart } from "@grassroot/ui-solid";

Props

Prop
Type
Default
Requirement
open
boolean
—
required
onClose
() => void
—
required
items
CartItem[]
—
required
currency
string
—
optional
shipping
number
—
optional
taxRate
number
—
optional
discount
number
—
optional
onQuantityChange
(id: string, quantity: number) => void
—
optional
onRemove
(id: string) => void
—
optional
onCheckout
() => void
—
optional
side
"bottom" | "top" | "left" | "right"
"right"
optional
Prop
open
Type
boolean
Default
—
Requirement
required
Prop
onClose
Type
() => void
Default
—
Requirement
required
Prop
items
Type
CartItem[]
Default
—
Requirement
required
Prop
currency
Type
string
Default
—
Requirement
optional
Prop
shipping
Type
number
Default
—
Requirement
optional
Prop
taxRate
Type
number
Default
—
Requirement
optional
Prop
discount
Type
number
Default
—
Requirement
optional
Prop
onQuantityChange
Type
(id: string, quantity: number) => void
Default
—
Requirement
optional
Prop
onRemove
Type
(id: string) => void
Default
—
Requirement
optional
Prop
onCheckout
Type
() => void
Default
—
Requirement
optional
Prop
side
Type
"bottom" | "top" | "left" | "right"
Default
"right"
Requirement
optional

Events

EventPayload
onClose() => void
onQuantityChange(id: string, quantity: number) => void
onRemove(id: string) => void
onCheckout() => void