- Prop
open- Type
boolean- Default
- —
- Requirement
- required
- Description
- —
Docs Components Commerce
MiniCart
React example follows below.
Vue example follows below.
Angular example follows below.
Svelte example follows below.
Solid example follows below.
- parts
- —
- nodes
- —
- size
- —
- part
- —
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> );}- parts
- —
- nodes
- —
- size
- —
- part
- —
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>- parts
- —
- nodes
- —
- size
- —
- part
- —
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;- parts
- —
- nodes
- —
- size
- —
- part
- —
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>- parts
- —
- nodes
- —
- size
- —
- part
- —
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
openboolean—
required
—
onClose() => void—
required
—
itemsCartItem[]—
required
—
currencystring | undefined"USD"optional
—
shippingnumber | undefined—
optional
—
taxRatenumber | undefined—
optional
—
discountnumber | 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
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
| Event | Payload |
|---|---|
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
openboolean—
required
itemsCartItem[]—
required
currencystring | undefined"USD"optional
shippingnumber | undefined—
optional
taxRatenumber | undefined—
optional
discountnumber | 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
| Event | Payload |
|---|---|
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
openboolean—
required
itemsCartItem[]—
required
currencystring"USD"optional
shippingnumber—
optional
taxRatenumber—
optional
discountnumber—
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
| Event | Payload |
|---|---|
openChange | boolean |
quantityChange | { id: string; quantity: number } |
remove | string |
checkout | void |
Import
import { Button, MiniCart } from "@grassroot/ui-svelte";
Props
Prop
Type
Default
Requirement
openboolean—
required
itemsCartItem[]—
required
currencystring"USD"optional
shippingnumber—
optional
taxRatenumber—
optional
discountnumber—
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
| Event | Payload |
|---|---|
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
openboolean—
required
onClose() => void—
required
itemsCartItem[]—
required
currencystring—
optional
shippingnumber—
optional
taxRatenumber—
optional
discountnumber—
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
| Event | Payload |
|---|---|
onClose | () => void |
onQuantityChange | (id: string, quantity: number) => void |
onRemove | (id: string) => void |
onCheckout | () => void |