- Prop
item- Type
CartItem- Default
- —
- Requirement
- required
Docs Components Commerce
CartLineItem
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 cartLineItemFixture = { id: "cart-line-item", item: { id: "trowel", name: "Forged steel trowel", variant: "Carbon steel / Medium", price: 3200, quantity: 2, }, currency: "USD",} satisfies { id: string; item: { id: string; name: string; variant: string; price: number; quantity: number }; currency: string;}; import { CartLineItem } from "@grassroot/ui-react"; export default function CartLineItemDemo() { const [item, setItem] = React.useState<typeof cartLineItemFixture.item | null>( cartLineItemFixture.item, ); if (!item) return ( <div> <p className="text-muted">Removed from cart.</p> </div> ); return ( <div> <CartLineItem item={item} currency={cartLineItemFixture.currency} onQuantityChange={(quantity) => setItem((current) => (current ? { ...current, quantity } : current)) } onRemove={() => setItem(null)} /> </div> );}- parts
- —
- nodes
- —
- size
- —
- part
- —
ts
<script setup lang="ts">import { ref } from "vue";const cartLineItemFixture = { id: "cart-line-item", item: { id: "trowel", name: "Forged steel trowel", variant: "Carbon steel / Medium", price: 3200, quantity: 2, }, currency: "USD",} satisfies { id: string; item: { id: string; name: string; variant: string; price: number; quantity: number }; currency: string;}; import { CartLineItem } from "@grassroot/ui-vue"; const item = ref<typeof cartLineItemFixture.item | null>(cartLineItemFixture.item);</script> <template> <div> <CartLineItem v-if="item" :item="item" :currency="cartLineItemFixture.currency" @quantity-change="item = { ...item!, quantity: $event }" @remove="item = null" /> <p v-else class="text-muted">Removed from cart.</p> </div></template>- parts
- —
- nodes
- —
- size
- —
- part
- —
ts
import { Component, signal } from "@angular/core";const cartLineItemFixture = { id: "cart-line-item", item: { id: "trowel", name: "Forged steel trowel", variant: "Carbon steel / Medium", price: 3200, quantity: 2, }, currency: "USD",} satisfies { id: string; item: { id: string; name: string; variant: string; price: number; quantity: number }; currency: string;}; import { GrassrootCartLineItem } from "@grassroot/ui-angular"; @Component({ selector: "app-cart-line-item-demo", standalone: true, imports: [GrassrootCartLineItem], template: ` <div> @if (item(); as current) { <grassroot-cart-line-item [item]="current" [currency]="fixture.currency" (quantityChange)="item.set({ ...current, quantity: $event })" (remove)="item.set(null)" /> } @else { <p class="text-muted">Removed from cart.</p> } </div> `,})export class CartLineItemDemoComponent { protected readonly fixture = cartLineItemFixture; readonly item = signal<typeof cartLineItemFixture.item | null>(cartLineItemFixture.item);} export default CartLineItemDemoComponent;- parts
- —
- nodes
- —
- size
- —
- part
- —
ts
<script lang="ts"> import { CartLineItem } from "@grassroot/ui-svelte"; const cartLineItemFixture = { id: "cart-line-item", item: { id: "trowel", name: "Forged steel trowel", variant: "Carbon steel / Medium", price: 3200, quantity: 2, }, currency: "USD", } satisfies { id: string; item: { id: string; name: string; variant: string; price: number; quantity: number }; currency: string; }; let item = $state<typeof cartLineItemFixture.item | null>(cartLineItemFixture.item);</script> <div> {#if item} <CartLineItem {item} currency={cartLineItemFixture.currency} onQuantityChange={(quantity) => (item = { ...item!, quantity })} onRemove={() => (item = null)} /> {:else} <p class="text-muted">Removed from cart.</p> {/if}</div>- parts
- —
- nodes
- —
- size
- —
- part
- —
ts
/** @jsxImportSource solid-js */import { createSignal, Show } from "solid-js";const cartLineItemFixture = { id: "cart-line-item", item: { id: "trowel", name: "Forged steel trowel", variant: "Carbon steel / Medium", price: 3200, quantity: 2, }, currency: "USD",} satisfies { id: string; item: { id: string; name: string; variant: string; price: number; quantity: number }; currency: string;}; import { CartLineItem } from "@grassroot/ui-solid"; export default function CartLineItemDemo() { const [item, setItem] = createSignal<typeof cartLineItemFixture.item | null>( cartLineItemFixture.item, ); return ( <div> <Show when={item()} fallback={<p class="text-muted">Removed from cart.</p>}> {(current) => ( <CartLineItem item={current()} currency={cartLineItemFixture.currency} onQuantityChange={(quantity) => setItem((prev) => (prev ? { ...prev, quantity } : prev)) } onRemove={() => setItem(null)} /> )} </Show> </div> );}Installation
API Reference
Import
import * as React from "react";
import { CartLineItem } from "@grassroot/ui-react";
Props
Prop
Type
Default
Requirement
itemCartItem—
required
currencystring | undefined"USD"optional
onQuantityChange((quantity: number) => void) | undefined—
optional
onRemove(() => void) | undefined—
optional
classNamestring | undefined—
optional
- Prop
currency- Type
string | undefined- Default
"USD"- Requirement
- optional
- Prop
onQuantityChange- Type
((quantity: number) => void) | undefined- Default
- —
- Requirement
- optional
- Prop
onRemove- Type
(() => void) | undefined- Default
- —
- Requirement
- optional
- Prop
className- Type
string | undefined- Default
- —
- Requirement
- optional
Events
| Event | Payload |
|---|---|
onQuantityChange | ((quantity: number) => void) | undefined |
onRemove | (() => void) | undefined |
Import
import { ref } from "vue";
import { CartLineItem } from "@grassroot/ui-vue";
Props
Prop
Type
Default
Requirement
itemCartItem—
required
currencystring | undefined"USD"optional
- Prop
item- Type
CartItem- Default
- —
- Requirement
- required
- Prop
currency- Type
string | undefined- Default
"USD"- Requirement
- optional
Events
| Event | Payload |
|---|---|
quantityChange | [quantity: number] |
remove | [] |
Import
import { Component, signal } from "@angular/core";
import { GrassrootCartLineItem } from "@grassroot/ui-angular";
Props
Prop
Type
Default
Requirement
itemCartItem—
required
currencystring"USD"optional
- Prop
item- Type
CartItem- Default
- —
- Requirement
- required
- Prop
currency- Type
string- Default
"USD"- Requirement
- optional
Events
| Event | Payload |
|---|---|
quantityChange | number |
remove | void |
Import
import { CartLineItem } from "@grassroot/ui-svelte";
Props
Prop
Type
Default
Requirement
itemCartItem—
required
currencystring"USD"optional
onQuantityChange(quantity: number) => void—
optional
onRemove() => void—
optional
classNamestring—
optional
- Prop
item- Type
CartItem- Default
- —
- Requirement
- required
- Prop
currency- Type
string- Default
"USD"- Requirement
- optional
- Prop
onQuantityChange- Type
(quantity: number) => void- Default
- —
- Requirement
- optional
- Prop
onRemove- Type
() => void- Default
- —
- Requirement
- optional
- Prop
className- Type
string- Default
- —
- Requirement
- optional
Events
| Event | Payload |
|---|---|
onQuantityChange | (quantity: number) => void |
onRemove | () => void |
Import
import { createSignal, Show } from "solid-js";
import { CartLineItem } from "@grassroot/ui-solid";
Props
Prop
Type
Default
Requirement
itemCartItem—
required
currencystring"USD"optional
onQuantityChange(quantity: number) => void—
optional
onRemove() => void—
optional
classNamestring—
optional
- Prop
item- Type
CartItem- Default
- —
- Requirement
- required
- Prop
currency- Type
string- Default
"USD"- Requirement
- optional
- Prop
onQuantityChange- Type
(quantity: number) => void- Default
- —
- Requirement
- optional
- Prop
onRemove- Type
() => void- Default
- —
- Requirement
- optional
- Prop
className- Type
string- Default
- —
- Requirement
- optional
Events
| Event | Payload |
|---|---|
onQuantityChange | (quantity: number) => void |
onRemove | () => void |