Docs Components Commerce

CartLineItem

React example follows below.
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>
);
}
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>
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;
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>
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
item
CartItem
—
required
currency
string | undefined
"USD"
optional
onQuantityChange
((quantity: number) => void) | undefined
—
optional
onRemove
(() => void) | undefined
—
optional
className
string | undefined
—
optional
Prop
item
Type
CartItem
Default
—
Requirement
required
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

EventPayload
onQuantityChange((quantity: number) => void) | undefined
onRemove(() => void) | undefined

Import

import { ref } from "vue";
import { CartLineItem } from "@grassroot/ui-vue";

Props

Prop
Type
Default
Requirement
item
CartItem
—
required
currency
string | undefined
"USD"
optional
Prop
item
Type
CartItem
Default
—
Requirement
required
Prop
currency
Type
string | undefined
Default
"USD"
Requirement
optional

Events

EventPayload
quantityChange[quantity: number]
remove[]

Import

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

Props

Prop
Type
Default
Requirement
item
CartItem
—
required
currency
string
"USD"
optional
Prop
item
Type
CartItem
Default
—
Requirement
required
Prop
currency
Type
string
Default
"USD"
Requirement
optional

Events

EventPayload
quantityChangenumber
removevoid

Import

import { CartLineItem } from "@grassroot/ui-svelte";

Props

Prop
Type
Default
Requirement
item
CartItem
—
required
currency
string
"USD"
optional
onQuantityChange
(quantity: number) => void
—
optional
onRemove
() => void
—
optional
className
string
—
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

EventPayload
onQuantityChange(quantity: number) => void
onRemove() => void

Import

import { createSignal, Show } from "solid-js";
import { CartLineItem } from "@grassroot/ui-solid";

Props

Prop
Type
Default
Requirement
item
CartItem
—
required
currency
string
"USD"
optional
onQuantityChange
(quantity: number) => void
—
optional
onRemove
() => void
—
optional
className
string
—
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

EventPayload
onQuantityChange(quantity: number) => void
onRemove() => void