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