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