Carousel Widget (React)
A React component widget that displays a horizontal scroll of recommended items, designed to increase engagement through visually appealing item rotation.
Use this library when you want to render a widget and you are using React and JSX in your project.
This widget library is version 0.0.5 and the API can change. Please specify exact version when installing.
Installation
Install @recombee/carousel-widget-react@0.0.5
and recombee-js-api-client
packages using your preferred NPM package manager. This example is using
pnpm
.
pnpm add @recombee/carousel-widget-react@0.0.5 recombee-js-api-client
Client Initialization
The widget loads recommendation data using Recombee API Client. Here is how to initialize the client with necessary configuration for a specific database:
import { class ApiClient
Client for sending requests to Recombee and getting repliesApiClient } from "recombee-js-api-client";
const const DATABASE_ID: "[database-id]"
DATABASE_ID = "[database-id]";
const const PUBLIC_TOKEN: "[database-public-token]"
PUBLIC_TOKEN = "[database-public-token]";
const const REGION: "[database-region]"
REGION = "[database-region]";
export const const apiClient: ApiClient
apiClient = new new ApiClient(databaseId: string, publicToken: string, options?: ApiClientOptions): ApiClient
ApiClient(const DATABASE_ID: "[database-id]"
DATABASE_ID, const PUBLIC_TOKEN: "[database-public-token]"
PUBLIC_TOKEN, {
region?: string | undefined
region: const REGION: "[database-region]"
REGION,
});
The Database Public Token can be found in the Admin UI Database Settings Page.
The widget also needs to be provided a createRequest
function, which
instantiates a client request class to define which data to pull from the
database. Use Scenario ID which can be found on Admin GUI
Database Scenarios Page.
import { type type CreateRequestFunction = (options: FetchContentOptions) => Request
Factory for creating Recombee API Request to load data into a Widget.CreateRequestFunction } from "@recombee/carousel-widget-react";
import { class RecommendItemsToUser
Based on the user's past interactions (purchases, ratings, etc.) with the items, recommends top-N items that are most likely to be of high value for the given user.
The most typical use cases are recommendations on the homepage, in some "Picked just for you" section, or in email.
The returned items are sorted by relevance (the first item being the most relevant).
Besides the recommended items, also a unique `recommId` is returned in the response. It can be used to:
- Let Recombee know that this recommendation was successful (e.g., user clicked one of the recommended items). See [Reported metrics](https://docs.recombee.com/admin_ui.html#reported-metrics).
- Get subsequent recommended items when the user scrolls down (*infinite scroll*) or goes to the next page. See [Recommend Next Items](https://docs.recombee.com/api.html#recommend-next-items).
It is also possible to use POST HTTP method (for example in the case of a very long ReQL filter) - query parameters then become body parameters.RecommendItemsToUser } from "recombee-js-api-client";
const const createRequest: CreateRequestFunction
createRequest: type CreateRequestFunction = (options: FetchContentOptions) => Request
Factory for creating Recombee API Request to load data into a Widget.CreateRequestFunction = ({ count: number
Number of items to fetch for the widget. Pass it to the appropriate
Request constructor.count }) => {
const const SCENARIO_ID: "recommend-items-to-user"
SCENARIO_ID = "recommend-items-to-user";
return new new RecommendItemsToUser(userId: string, count: number, optional?: {
scenario?: string;
cascadeCreate?: boolean;
returnProperties?: boolean;
includedProperties?: string[];
filter?: string;
booster?: string;
logic?: string | object;
diversity?: number;
minRelevance?: string;
rotationRate?: number;
rotationTime?: number;
expertSettings?: {
[key: string]: unknown;
};
returnAbGroup?: boolean;
}): RecommendItemsToUser
RecommendItemsToUser(userId, count: number
Number of items to fetch for the widget. Pass it to the appropriate
Request constructor.count, {
scenario?: string | undefined
Scenario defines a particular application of recommendations. It can be, for example, "homepage", "cart", or "emailing".scenario: const SCENARIO_ID: "recommend-items-to-user"
SCENARIO_ID,
cascadeCreate?: boolean | undefined
If the user does not exist in the database, returns a list of non-personalized recommendations and creates the user in the database. This allows, for example, rotations in the following recommendations for that user, as the user will be already known to the system.cascadeCreate: true,
returnProperties?: boolean | undefined
With `returnProperties=true`, property values of the recommended items are returned along with their IDs in a JSON dictionary. The acquired property values can be used to easily display the recommended items to the user.returnProperties: true,
});
};
Please ensure that you provide the user ID (typically obtained from your existing user tracking system), along with other relevant parameters - such as an item ID or Item Segment ID - depending on the specific type of recommendation request.
Basic Example
The widget in this example uses the DefaultItem component to render each recommendation in a consistent layout.
The resulting widget is inserted into the element specified by the
container
field.
Values of the recommended items - such as title, image URL, or link URL - are
obtained from the API response and accessed via props.result?.values
.
Ensure that returnProperties: true is set in the request, and optionally use includedProperties to control which item properties are returned.
import {
const CarouselWidget: React.FunctionComponent<CarouselWidgetProps>
Carousel widget React Component. See
{@link
CarouselWidgetProps
}
for
configuration options.CarouselWidget,
const DefaultItem: ((props: DefaultItemProps) => React.JSX.Element) & {
displayName: string;
}
Default Item component provided for basic usage.DefaultItem,
const ItemImage: React.FunctionComponent<ItemImageProps>
Item image componentItemImage,
function addRecommIdQueryParam(url: string, recommId: string | undefined): string
Utility function to append `recombee_recomm_id` parameter to an url string.
For usage in widget template to construct item link URL.addRecommIdQueryParam,
} from "@recombee/carousel-widget-react";
import "@recombee/carousel-widget-react/dist/styles.css";
export default () => {
return (
<const CarouselWidget: React.FunctionComponent<CarouselWidgetProps>
Carousel widget React Component. See
{@link
CarouselWidgetProps
}
for
configuration options.CarouselWidget
WidgetConfigurationBase<CreateRequestFunction>.apiClient: ApiClient
Instance of Recombee JS API Client. See
{@link
file://./#client-initialization Example
}
.apiClient={const apiClient: ApiClient
apiClient}
WidgetConfigurationBase<CreateRequestFunction>.createRequest: CreateRequestFunction
Request factory function. See
{@link
file://./#client-initialization Quick Example
}
or visit
{@link
file:///api API Reference
}
for overview of available requests.createRequest={const createRequest: CreateRequestFunction
createRequest}
type ItemComponent: (props: {
state: CarouselWidgetState;
result?: Recommendation;
}) => React.ReactNode
A component rendering a single recommended item.ItemComponent={(props: {
state: CarouselWidgetState;
result?: Recommendation;
}
props) => (
<const DefaultItem: ((props: DefaultItemProps) => React.JSX.Element) & {
displayName: string;
}
Default Item component provided for basic usage.DefaultItem
DefaultItemProps.href?: string | null | undefined
Item link URL.href={function addRecommIdQueryParam(url: string, recommId: string | undefined): string
Utility function to append `recombee_recomm_id` parameter to an url string.
For usage in widget template to construct item link URL.addRecommIdQueryParam(
`${props: {
state: CarouselWidgetState;
result?: Recommendation;
}
props.result?: Recommendation | undefined
result?.values?: {
[key: string]: any;
} | undefined
Item propertiesvalues?.link}`,
props: {
state: CarouselWidgetState;
result?: Recommendation;
}
props.state: CarouselWidgetState
state.CarouselWidgetState.recommId: string | undefined
Id of recommendation response from which the items originated.recommId,
)}
DefaultItemProps.image?: React.ReactNode
Item Image element.image={
<const ItemImage: React.FunctionComponent<ItemImageProps>
Item image componentItemImage
src?: string | null | undefined
Image URLsrc={`${props: {
state: CarouselWidgetState;
result?: Recommendation;
}
props.result?: Recommendation | undefined
result?.values?: {
[key: string]: any;
} | undefined
Item propertiesvalues?.images?.[0]}`}
width?: number | undefined
Image width in pixelswidth={600}
height?: number | undefined
Image height in pixelsheight={400}
/>
}
DefaultItemProps.labelContent?: React.ReactNode
Item content above title. Sets the entire content of an item aside from
an image.labelContent={`${props: {
state: CarouselWidgetState;
result?: Recommendation;
}
props.result?: Recommendation | undefined
result?.values?: {
[key: string]: any;
} | undefined
Item propertiesvalues?.genres?.join(", ")}`}
DefaultItemProps.title?: React.ReactNode
Item title.title={`${props: {
state: CarouselWidgetState;
result?: Recommendation;
}
props.result?: Recommendation | undefined
result?.values?: {
[key: string]: any;
} | undefined
Item propertiesvalues?.title}`}
DefaultItemProps.highlightedContent?: React.ReactNode
Item content under title. Sets the entire content of an item aside from
an image.highlightedContent={`${props: {
state: CarouselWidgetState;
result?: Recommendation;
}
props.result?: Recommendation | undefined
result?.values?: {
[key: string]: any;
} | undefined
Item propertiesvalues?.year}`}
/>
)}
/>
);
};
The addRecommIdQueryParam utility function is used to append the
recommendation ID to the item's URL as the recombee_recomm_id
query
parameter.
This enables you to report successful (clicked) recommendations back to Recombee for improved tracking and performance optimization.
Custom CSS
Recombee Widgets are designed to be styling-agnostic. You can fully customize their appearance using your own CSS by passing class names through customization properties.
In these docs examples, we use utility classes from Tailwind CSS for styling.
Class names for internal elements and custom components are passed as props and applied by the widget during rendering. The default structure of the Basic Example widget is illustrated below (pseudo-code):
<div class="{className}">
<div class="{contentClassName}">
<div class="{itemWrapperClassName}">
<ItemComponent />
</div>
<div class="{itemWrapperClassName}">
<ItemComponent />
</div>
<div class="{itemWrapperClassName}">
<ItemComponent />
</div>
... more items ...
</div>
<ArrowComponent arrowDirection="left" />
<ArrowComponent arrowDirection="right" />
</div>
This is handy to understand how to customize the widget to full potential.
Setting own classes
import {
const CarouselWidget: React.FunctionComponent<CarouselWidgetProps>
Carousel widget React Component. See
{@link
CarouselWidgetProps
}
for
configuration options.CarouselWidget,
const DefaultItem: ((props: DefaultItemProps) => React.JSX.Element) & {
displayName: string;
}
Default Item component provided for basic usage.DefaultItem,
const ItemImage: React.FunctionComponent<ItemImageProps>
Item image componentItemImage,
function addRecommIdQueryParam(url: string, recommId: string | undefined): string
Utility function to append `recombee_recomm_id` parameter to an url string.
For usage in widget template to construct item link URL.addRecommIdQueryParam,
} from "@recombee/carousel-widget-react";
import "@recombee/carousel-widget-react/dist/styles.css";
export default () => {
return (
<const CarouselWidget: React.FunctionComponent<CarouselWidgetProps>
Carousel widget React Component. See
{@link
CarouselWidgetProps
}
for
configuration options.CarouselWidget
WidgetConfigurationBase<CreateRequestFunction>.apiClient: ApiClient
Instance of Recombee JS API Client. See
{@link
file://./#client-initialization Example
}
.apiClient={const apiClient: ApiClient
apiClient}
WidgetConfigurationBase<CreateRequestFunction>.createRequest: CreateRequestFunction
Request factory function. See
{@link
file://./#client-initialization Quick Example
}
or visit
{@link
file:///api API Reference
}
for overview of available requests.createRequest={const createRequest: CreateRequestFunction
createRequest}
className?: string | undefined
Custom classes of widget wrapper element. See
{@link
file://./#custom-css Custom CSS
}
.className="overflow-hidden rounded-lg border-[#ededed] bg-white text-[#282b30] dark:border-none dark:bg-transparent dark:text-white"
type ItemComponent: (props: {
state: CarouselWidgetState;
result?: Recommendation;
}) => React.ReactNode
A component rendering a single recommended item.ItemComponent={(props: {
state: CarouselWidgetState;
result?: Recommendation;
}
props) => (
<const DefaultItem: ((props: DefaultItemProps) => React.JSX.Element) & {
displayName: string;
}
Default Item component provided for basic usage.DefaultItem
DefaultItemProps.classNameDisableBase?: boolean | undefined
Disables default classes of item wrapper element.
There are some default class names with essential styles applied to the
item wrapper element. This setting disables them as an escape hatch for
customization. See
{@link
file://./#custom-css Custom CSS
}
.classNameDisableBase
DefaultItemProps.className?: string | undefined
Custom classes of item wrapper element. See
{@link
file://./#custom-css Custom CSS
}
.className="border-b border-slate-600"
DefaultItemProps.contentWrapperClassName?: string | undefined
Custom classes of item content element. See
{@link
file://./#custom-css Custom CSS
}
.contentWrapperClassName="text-center"
DefaultItemProps.href?: string | null | undefined
Item link URL.href={function addRecommIdQueryParam(url: string, recommId: string | undefined): string
Utility function to append `recombee_recomm_id` parameter to an url string.
For usage in widget template to construct item link URL.addRecommIdQueryParam(
`${props: {
state: CarouselWidgetState;
result?: Recommendation;
}
props.result?: Recommendation | undefined
result?.values?: {
[key: string]: any;
} | undefined
Item propertiesvalues?.link}`,
props: {
state: CarouselWidgetState;
result?: Recommendation;
}
props.state: CarouselWidgetState
state.CarouselWidgetState.recommId: string | undefined
Id of recommendation response from which the items originated.recommId,
)}
DefaultItemProps.image?: React.ReactNode
Item Image element.image={
<const ItemImage: React.FunctionComponent<ItemImageProps>
Item image componentItemImage
src?: string | null | undefined
Image URLsrc={`${props: {
state: CarouselWidgetState;
result?: Recommendation;
}
props.result?: Recommendation | undefined
result?.values?: {
[key: string]: any;
} | undefined
Item propertiesvalues?.images?.[0]}`}
width?: number | undefined
Image width in pixelswidth={600}
height?: number | undefined
Image height in pixelsheight={400}
/>
}
DefaultItemProps.labelContent?: React.ReactNode
Item content above title. Sets the entire content of an item aside from
an image.labelContent={`${props: {
state: CarouselWidgetState;
result?: Recommendation;
}
props.result?: Recommendation | undefined
result?.values?: {
[key: string]: any;
} | undefined
Item propertiesvalues?.genres?.join(", ")}`}
DefaultItemProps.title?: React.ReactNode
Item title.title={`${props: {
state: CarouselWidgetState;
result?: Recommendation;
}
props.result?: Recommendation | undefined
result?.values?: {
[key: string]: any;
} | undefined
Item propertiesvalues?.title}`}
DefaultItemProps.highlightedContent?: React.ReactNode
Item content under title. Sets the entire content of an item aside from
an image.highlightedContent={`${props: {
state: CarouselWidgetState;
result?: Recommendation;
}
props.result?: Recommendation | undefined
result?.values?: {
[key: string]: any;
} | undefined
Item propertiesvalues?.year}`}
/>
)}
/>
);
};
Custom Templates
Recombee Widgets support full customization of internal components such as the appearance of the recommended items.
You can provide your own components via props like ItemComponent to control the structure, styling, and behavior of the widget.
This flexibility allows you to adapt the widget's appearance and functionality to match your design and user experience requirements.
Custom Item
import { const CarouselWidget: React.FunctionComponent<CarouselWidgetProps>
Carousel widget React Component. See
{@link
CarouselWidgetProps
}
for
configuration options.CarouselWidget, const ItemImage: React.FunctionComponent<ItemImageProps>
Item image componentItemImage } from "@recombee/carousel-widget-react";
import "@recombee/carousel-widget-react/dist/styles.css";
export default () => {
return (
<const CarouselWidget: React.FunctionComponent<CarouselWidgetProps>
Carousel widget React Component. See
{@link
CarouselWidgetProps
}
for
configuration options.CarouselWidget
WidgetConfigurationBase<CreateRequestFunction>.apiClient: ApiClient
Instance of Recombee JS API Client. See
{@link
file://./#client-initialization Example
}
.apiClient={const apiClient: ApiClient
apiClient}
WidgetConfigurationBase<CreateRequestFunction>.createRequest: CreateRequestFunction
Request factory function. See
{@link
file://./#client-initialization Quick Example
}
or visit
{@link
file:///api API Reference
}
for overview of available requests.createRequest={const createRequest: CreateRequestFunction
createRequest}
itemWrapperClassName?: string | undefined
Custom classes of item wrapper element. See
{@link
file://./#custom-css Custom CSS
}
.itemWrapperClassName="min-h-[240px] w-[200px]"
type ItemComponent: (props: {
state: CarouselWidgetState;
result?: Recommendation;
}) => React.ReactNode
A component rendering a single recommended item.ItemComponent={(props: {
state: CarouselWidgetState;
result?: Recommendation;
}
props) => (
<React.JSX.IntrinsicElements.div: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>
div React.HTMLAttributes<HTMLDivElement>.className?: string | undefined
className="overflow-hidden rounded-lg border-[#ededed] bg-white text-[#282b30] dark:border-none dark:bg-transparent dark:text-white">
<React.JSX.IntrinsicElements.div: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>
div React.HTMLAttributes<HTMLDivElement>.className?: string | undefined
className="relative overflow-hidden bg-cover bg-no-repeat">
<const ItemImage: React.FunctionComponent<ItemImageProps>
Item image componentItemImage
src?: string | null | undefined
Image URLsrc={`${props: {
state: CarouselWidgetState;
result?: Recommendation;
}
props.result?: Recommendation | undefined
result?.values?: {
[key: string]: any;
} | undefined
Item propertiesvalues?.images?.[0]}`}
width?: number | undefined
Image width in pixelswidth={600}
height?: number | undefined
Image height in pixelsheight={400}
/>
{props: {
state: CarouselWidgetState;
result?: Recommendation;
}
props.result?: Recommendation | undefined
result?.values?: {
[key: string]: any;
} | undefined
Item propertiesvalues?.["genres"]?.includes("drama") && (
<React.JSX.IntrinsicElements.div: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>
div React.HTMLAttributes<HTMLDivElement>.className?: string | undefined
className="absolute top-3 left-3 bg-[#3f91ff] px-2 text-xs/[1.67] font-semibold text-white">
Drama
</React.JSX.IntrinsicElements.div: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>
div>
)}
{props: {
state: CarouselWidgetState;
result?: Recommendation;
}
props.result?: Recommendation | undefined
result?.values?: {
[key: string]: any;
} | undefined
Item propertiesvalues?.["genres"]?.includes("science_fiction") && (
<React.JSX.IntrinsicElements.div: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>
div React.HTMLAttributes<HTMLDivElement>.className?: string | undefined
className="absolute top-3 left-3 bg-[#36c696] px-2 text-xs/[1.67] font-semibold text-white">
Sci-Fi
</React.JSX.IntrinsicElements.div: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>
div>
)}
</React.JSX.IntrinsicElements.div: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>
div>
<React.JSX.IntrinsicElements.div: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>
div React.HTMLAttributes<HTMLDivElement>.className?: string | undefined
className="p-3">
<React.JSX.IntrinsicElements.div: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>
div React.HTMLAttributes<HTMLDivElement>.className?: string | undefined
className="mb-1 line-clamp-4 overflow-hidden text-[14px]/[1.43] text-nowrap text-ellipsis text-[#80868f]">
{`${props: {
state: CarouselWidgetState;
result?: Recommendation;
}
props.result?: Recommendation | undefined
result?.values?: {
[key: string]: any;
} | undefined
Item propertiesvalues?.genres?.join(", ")}`}
</React.JSX.IntrinsicElements.div: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>
div>
<React.JSX.IntrinsicElements.div: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>
div React.HTMLAttributes<HTMLDivElement>.className?: string | undefined
className="text-md mb-1 overflow-hidden text-nowrap text-ellipsis">
{`${props: {
state: CarouselWidgetState;
result?: Recommendation;
}
props.result?: Recommendation | undefined
result?.values?: {
[key: string]: any;
} | undefined
Item propertiesvalues?.title}`}
</React.JSX.IntrinsicElements.div: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>
div>
<React.JSX.IntrinsicElements.div: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>
div React.HTMLAttributes<HTMLDivElement>.className?: string | undefined
className="line-clamp-4 pb-3 text-base text-[#3f91ff]">
{`${props: {
state: CarouselWidgetState;
result?: Recommendation;
}
props.result?: Recommendation | undefined
result?.values?: {
[key: string]: any;
} | undefined
Item propertiesvalues?.year}`}
</React.JSX.IntrinsicElements.div: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>
div>
<React.JSX.IntrinsicElements.button: React.DetailedHTMLProps<React.ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>
button React.HTMLAttributes<T>.className?: string | undefined
className="w-full rounded-lg border border-[#ededed] py-2 text-center text-[14px]/[1.43] font-medium text-[#80868f]">
Play
</React.JSX.IntrinsicElements.button: React.DetailedHTMLProps<React.ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>
button>
</React.JSX.IntrinsicElements.div: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>
div>
</React.JSX.IntrinsicElements.div: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>
div>
)}
/>
);
};
Custom Arrows
import {
const CarouselWidget: React.FunctionComponent<CarouselWidgetProps>
Carousel widget React Component. See
{@link
CarouselWidgetProps
}
for
configuration options.CarouselWidget,
const DefaultItem: ((props: DefaultItemProps) => React.JSX.Element) & {
displayName: string;
}
Default Item component provided for basic usage.DefaultItem,
const ItemImage: React.FunctionComponent<ItemImageProps>
Item image componentItemImage,
function addRecommIdQueryParam(url: string, recommId: string | undefined): string
Utility function to append `recombee_recomm_id` parameter to an url string.
For usage in widget template to construct item link URL.addRecommIdQueryParam,
} from "@recombee/carousel-widget-react";
import "@recombee/carousel-widget-react/dist/styles.css";
export default () => {
return (
<const CarouselWidget: React.FunctionComponent<CarouselWidgetProps>
Carousel widget React Component. See
{@link
CarouselWidgetProps
}
for
configuration options.CarouselWidget
WidgetConfigurationBase<CreateRequestFunction>.apiClient: ApiClient
Instance of Recombee JS API Client. See
{@link
file://./#client-initialization Example
}
.apiClient={const apiClient: ApiClient
apiClient}
WidgetConfigurationBase<CreateRequestFunction>.createRequest: CreateRequestFunction
Request factory function. See
{@link
file://./#client-initialization Quick Example
}
or visit
{@link
file:///api API Reference
}
for overview of available requests.createRequest={const createRequest: CreateRequestFunction
createRequest}
itemWrapperClassName?: string | undefined
Custom classes of item wrapper element. See
{@link
file://./#custom-css Custom CSS
}
.itemWrapperClassName="min-h-[400px] w-[400px]"
ArrowComponent?: ((props: CarouselArrowProps) => React.ReactNode) | undefined
A component rendering either left or right carousel arrowArrowComponent={(props: CarouselArrowProps
props) => {
if (
props: CarouselArrowProps
props.arrowDirection: "left" | "right"
The direction of an arrow to render.arrowDirection === "left" &&
props: CarouselArrowProps
props.state: CarouselWidgetState
Carousel state.state.CarouselWidgetState.leftArrow: ArrowState
Current state of left Carousel arrowleftArrow.isVisible: boolean
isVisible
) {
return (
<React.JSX.IntrinsicElements.button: React.DetailedHTMLProps<React.ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>
button
React.HTMLAttributes<HTMLButtonElement>.className?: string | undefined
className="absolute top-1/2 left-4 -translate-y-6 rounded-lg rounded-sm border border-[#ededed] bg-white px-3 py-2 text-center text-[14px]/[1.43] font-medium text-[#80868f]"
React.ButtonHTMLAttributes<HTMLButtonElement>.type?: "button" | "submit" | "reset" | undefined
type="button"
React.DOMAttributes<HTMLButtonElement>.onClick?: React.MouseEventHandler<HTMLButtonElement> | undefined
onClick={props: CarouselArrowProps
props.state: CarouselWidgetState
Carousel state.state.CarouselWidgetState.leftArrow: ArrowState
Current state of left Carousel arrowleftArrow.handleClick: () => void
handleClick}
>
prev
</React.JSX.IntrinsicElements.button: React.DetailedHTMLProps<React.ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>
button>
);
}
if (
props: CarouselArrowProps
props.arrowDirection: "left" | "right"
The direction of an arrow to render.arrowDirection === "right" &&
props: CarouselArrowProps
props.state: CarouselWidgetState
Carousel state.state.CarouselWidgetState.rightArrow: ArrowState
Current state of right Carousel arrowrightArrow.isVisible: boolean
isVisible
) {
return (
<React.JSX.IntrinsicElements.button: React.DetailedHTMLProps<React.ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>
button
React.HTMLAttributes<HTMLButtonElement>.className?: string | undefined
className="absolute top-1/2 right-4 -translate-y-6 rounded-lg rounded-sm border border-[#ededed] bg-white px-3 py-2 text-center text-[14px]/[1.43] font-medium text-[#80868f]"
React.ButtonHTMLAttributes<HTMLButtonElement>.type?: "button" | "submit" | "reset" | undefined
type="button"
React.DOMAttributes<HTMLButtonElement>.onClick?: React.MouseEventHandler<HTMLButtonElement> | undefined
onClick={props: CarouselArrowProps
props.state: CarouselWidgetState
Carousel state.state.CarouselWidgetState.rightArrow: ArrowState
Current state of right Carousel arrowrightArrow.handleClick: () => void
handleClick}
>
next
</React.JSX.IntrinsicElements.button: React.DetailedHTMLProps<React.ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>
button>
);
}
}}
type ItemComponent: (props: {
state: CarouselWidgetState;
result?: Recommendation;
}) => React.ReactNode
A component rendering a single recommended item.ItemComponent={(props: {
state: CarouselWidgetState;
result?: Recommendation;
}
props) => (
<const DefaultItem: ((props: DefaultItemProps) => React.JSX.Element) & {
displayName: string;
}
Default Item component provided for basic usage.DefaultItem
DefaultItemProps.href?: string | null | undefined
Item link URL.href={function addRecommIdQueryParam(url: string, recommId: string | undefined): string
Utility function to append `recombee_recomm_id` parameter to an url string.
For usage in widget template to construct item link URL.addRecommIdQueryParam(
`${props: {
state: CarouselWidgetState;
result?: Recommendation;
}
props.result?: Recommendation | undefined
result?.values?: {
[key: string]: any;
} | undefined
Item propertiesvalues?.link}`,
props: {
state: CarouselWidgetState;
result?: Recommendation;
}
props.state: CarouselWidgetState
state.CarouselWidgetState.recommId: string | undefined
Id of recommendation response from which the items originated.recommId,
)}
DefaultItemProps.image?: React.ReactNode
Item Image element.image={
<const ItemImage: React.FunctionComponent<ItemImageProps>
Item image componentItemImage
src?: string | null | undefined
Image URLsrc={`${props: {
state: CarouselWidgetState;
result?: Recommendation;
}
props.result?: Recommendation | undefined
result?.values?: {
[key: string]: any;
} | undefined
Item propertiesvalues?.images?.[0]}`}
width?: number | undefined
Image width in pixelswidth={600}
height?: number | undefined
Image height in pixelsheight={400}
/>
}
DefaultItemProps.labelContent?: React.ReactNode
Item content above title. Sets the entire content of an item aside from
an image.labelContent={`${props: {
state: CarouselWidgetState;
result?: Recommendation;
}
props.result?: Recommendation | undefined
result?.values?: {
[key: string]: any;
} | undefined
Item propertiesvalues?.genres?.join(", ")}`}
DefaultItemProps.title?: React.ReactNode
Item title.title={`${props: {
state: CarouselWidgetState;
result?: Recommendation;
}
props.result?: Recommendation | undefined
result?.values?: {
[key: string]: any;
} | undefined
Item propertiesvalues?.title}`}
DefaultItemProps.highlightedContent?: React.ReactNode
Item content under title. Sets the entire content of an item aside from
an image.highlightedContent={`${props: {
state: CarouselWidgetState;
result?: Recommendation;
}
props.result?: Recommendation | undefined
result?.values?: {
[key: string]: any;
} | undefined
Item propertiesvalues?.year}`}
/>
)}
/>
);
};
Full Customization
import {
const CarouselWidget: React.FunctionComponent<CarouselWidgetProps>
Carousel widget React Component. See
{@link
CarouselWidgetProps
}
for
configuration options.CarouselWidget,
const DefaultCarousel: ((props: DefaultCarouselProps) => React.JSX.Element) & {
displayName: string;
}
Default visual component used to render carousel containerDefaultCarousel,
const ItemImage: React.FunctionComponent<ItemImageProps>
Item image componentItemImage,
function clsx(...inputs: ClassValue[]): string
clsx,
} from "@recombee/carousel-widget-react";
import "@recombee/carousel-widget-react/dist/styles.css";
export default () => (
<const CarouselWidget: React.FunctionComponent<CarouselWidgetProps>
Carousel widget React Component. See
{@link
CarouselWidgetProps
}
for
configuration options.CarouselWidget
WidgetConfigurationBase<CreateRequestFunction>.apiClient: ApiClient
Instance of Recombee JS API Client. See
{@link
file://./#client-initialization Example
}
.apiClient={const apiClient: ApiClient
apiClient}
WidgetConfigurationBase<CreateRequestFunction>.createRequest: CreateRequestFunction
Request factory function. See
{@link
file://./#client-initialization Quick Example
}
or visit
{@link
file:///api API Reference
}
for overview of available requests.createRequest={const createRequest: CreateRequestFunction
createRequest}
ArrowComponent?: ((props: CarouselArrowProps) => React.ReactNode) | undefined
A component rendering either left or right carousel arrowArrowComponent={() => null}
CarouselComponent?: ((props: DefaultCarouselProps) => React.ReactNode) | undefined
Component responsible for rendering the widget markup.
Example in which the passed component wraps the default carousel
component with additional custom HTML.
```tsx|-react
import React from "react";
import {
CarouselWidget,
DefaultCarousel,
} from "@recombee/carousel-widget-react";
//CarouselComponent={(props: DefaultCarouselProps<React.ReactNode>
props) => (
<React.JSX.IntrinsicElements.div: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>
div React.HTMLAttributes<HTMLDivElement>.className?: string | undefined
className="p-4">
<const DefaultCarousel: ((props: DefaultCarouselProps) => React.JSX.Element) & {
displayName: string;
}
Default visual component used to render carousel containerDefaultCarousel
{...props: DefaultCarouselProps<React.ReactNode>
props}
DefaultCarouselProps<React.ReactNode>.contentClassName?: string | undefined
Custom classes of content wrapper element. See
{@link
file://./#custom-css Custom CSS
}
.contentClassName="gap-1"
DefaultCarouselProps<React.ReactNode>.itemWrapperClassName?: string | undefined
Custom classes of item wrapper element. See
{@link
file://./#custom-css Custom CSS
}
.itemWrapperClassName="min-h-[240px] w-[200px]"
/>
<React.JSX.IntrinsicElements.div: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>
div React.HTMLAttributes<HTMLDivElement>.className?: string | undefined
className="flex justify-end gap-2 pt-4">
<React.JSX.IntrinsicElements.div: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>
div React.HTMLAttributes<HTMLDivElement>.className?: string | undefined
className="flex gap-2">
<function CarouselButton(props: any): React.JSX.Element
CarouselButton
disabled: boolean
disabled={!props: DefaultCarouselProps<React.ReactNode>
props.DefaultCarouselProps<React.ReactNode>.state: CarouselWidgetState
Carousel state.state.CarouselWidgetState.leftArrow: ArrowState
Current state of left Carousel arrowleftArrow.isVisible: boolean
isVisible}
onClick: () => void
onClick={props: DefaultCarouselProps<React.ReactNode>
props.DefaultCarouselProps<React.ReactNode>.state: CarouselWidgetState
Carousel state.state.CarouselWidgetState.leftArrow: ArrowState
Current state of left Carousel arrowleftArrow.handleClick: () => void
handleClick}
>
PREV
</function CarouselButton(props: any): React.JSX.Element
CarouselButton>
<function CarouselButton(props: any): React.JSX.Element
CarouselButton
disabled: boolean
disabled={!props: DefaultCarouselProps<React.ReactNode>
props.DefaultCarouselProps<React.ReactNode>.state: CarouselWidgetState
Carousel state.state.CarouselWidgetState.rightArrow: ArrowState
Current state of right Carousel arrowrightArrow.isVisible: boolean
isVisible}
onClick: () => void
onClick={props: DefaultCarouselProps<React.ReactNode>
props.DefaultCarouselProps<React.ReactNode>.state: CarouselWidgetState
Carousel state.state.CarouselWidgetState.rightArrow: ArrowState
Current state of right Carousel arrowrightArrow.handleClick: () => void
handleClick}
>
NEXT
</function CarouselButton(props: any): React.JSX.Element
CarouselButton>
</React.JSX.IntrinsicElements.div: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>
div>
</React.JSX.IntrinsicElements.div: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>
div>
</React.JSX.IntrinsicElements.div: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>
div>
)}
type ItemComponent: (props: {
state: CarouselWidgetState;
result?: Recommendation;
}) => React.ReactNode
A component rendering a single recommended item.ItemComponent={(props: {
state: CarouselWidgetState;
result?: Recommendation;
}
props) => (
<React.JSX.IntrinsicElements.div: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>
div React.HTMLAttributes<HTMLDivElement>.className?: string | undefined
className="overflow-hidden rounded-lg border-[#ededed] bg-white text-[#282b30] dark:border-none dark:bg-transparent dark:text-white">
<React.JSX.IntrinsicElements.div: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>
div React.HTMLAttributes<HTMLDivElement>.className?: string | undefined
className="relative overflow-hidden bg-cover bg-no-repeat">
<const ItemImage: React.FunctionComponent<ItemImageProps>
Item image componentItemImage
src?: string | null | undefined
Image URLsrc={`${props: {
state: CarouselWidgetState;
result?: Recommendation;
}
props.result?: Recommendation | undefined
result?.values?: {
[key: string]: any;
} | undefined
Item propertiesvalues?.images?.[0]}`}
width?: number | undefined
Image width in pixelswidth={600}
height?: number | undefined
Image height in pixelsheight={400}
/>
{props: {
state: CarouselWidgetState;
result?: Recommendation;
}
props.result?: Recommendation | undefined
result?.values?: {
[key: string]: any;
} | undefined
Item propertiesvalues?.["genres"]?.includes("drama") && (
<React.JSX.IntrinsicElements.div: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>
div React.HTMLAttributes<HTMLDivElement>.className?: string | undefined
className="absolute top-3 left-3 bg-[#3f91ff] px-2 text-xs/[1.67] font-semibold text-white">
Drama
</React.JSX.IntrinsicElements.div: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>
div>
)}
{props: {
state: CarouselWidgetState;
result?: Recommendation;
}
props.result?: Recommendation | undefined
result?.values?: {
[key: string]: any;
} | undefined
Item propertiesvalues?.["genres"]?.includes("science_fiction") && (
<React.JSX.IntrinsicElements.div: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>
div React.HTMLAttributes<HTMLDivElement>.className?: string | undefined
className="absolute top-3 left-3 bg-[#36c696] px-2 text-xs/[1.67] font-semibold text-white">
Sci-Fi
</React.JSX.IntrinsicElements.div: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>
div>
)}
</React.JSX.IntrinsicElements.div: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>
div>
<React.JSX.IntrinsicElements.div: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>
div React.HTMLAttributes<HTMLDivElement>.className?: string | undefined
className="p-3">
<React.JSX.IntrinsicElements.div: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>
div React.HTMLAttributes<HTMLDivElement>.className?: string | undefined
className="mb-1 line-clamp-4 overflow-hidden text-[14px]/[1.43] text-nowrap text-ellipsis text-[#80868f]">
{`${props: {
state: CarouselWidgetState;
result?: Recommendation;
}
props.result?: Recommendation | undefined
result?.values?: {
[key: string]: any;
} | undefined
Item propertiesvalues?.genres?.join(", ")}`}
</React.JSX.IntrinsicElements.div: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>
div>
<React.JSX.IntrinsicElements.div: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>
div React.HTMLAttributes<HTMLDivElement>.className?: string | undefined
className="text-md mb-1 overflow-hidden text-nowrap text-ellipsis">
{`${props: {
state: CarouselWidgetState;
result?: Recommendation;
}
props.result?: Recommendation | undefined
result?.values?: {
[key: string]: any;
} | undefined
Item propertiesvalues?.title}`}
</React.JSX.IntrinsicElements.div: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>
div>
<React.JSX.IntrinsicElements.div: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>
div React.HTMLAttributes<HTMLDivElement>.className?: string | undefined
className="line-clamp-4 pb-3 text-base text-[#3f91ff]">
{`${props: {
state: CarouselWidgetState;
result?: Recommendation;
}
props.result?: Recommendation | undefined
result?.values?: {
[key: string]: any;
} | undefined
Item propertiesvalues?.year}`}
</React.JSX.IntrinsicElements.div: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>
div>
<React.JSX.IntrinsicElements.button: React.DetailedHTMLProps<React.ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>
button React.HTMLAttributes<T>.className?: string | undefined
className="w-full rounded-lg border border-[#ededed] py-2 text-center text-[14px]/[1.43] font-medium text-[#80868f]">
Play
</React.JSX.IntrinsicElements.button: React.DetailedHTMLProps<React.ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>
button>
</React.JSX.IntrinsicElements.div: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>
div>
</React.JSX.IntrinsicElements.div: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>
div>
)}
/>
);
function function CarouselButton(props: any): React.JSX.Element
CarouselButton(props: any
props: any) {
const const buttonClassName: "w-full rounded-lg border border-[#ededed] py-2 px-3 text-center text-[14px]/[1.43] font-medium text-[#80868f]"
buttonClassName = `w-full rounded-lg border border-[#ededed] py-2 px-3 text-center text-[14px]/[1.43] font-medium text-[#80868f]`;
return (
<React.JSX.IntrinsicElements.button: React.DetailedHTMLProps<React.ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>
button
React.HTMLAttributes<T>.className?: string | undefined
className={function clsx(...inputs: ClassValue[]): string
clsx(const buttonClassName: "w-full rounded-lg border border-[#ededed] py-2 px-3 text-center text-[14px]/[1.43] font-medium text-[#80868f]"
buttonClassName, {
"opacity-50": props: any
props.disabled,
})}
{...props: any
props}
/>
);
}
Overriding Base Classes
Some base styles are always applied to ensure the widget maintains the structural shape of a carousel.
However, these can be disabled or overridden if needed. Use the CarouselWidgetProps.classNameDisableDefault and related options to opt out of default styling.
import {
const CarouselWidget: React.FunctionComponent<CarouselWidgetProps>
Carousel widget React Component. See
{@link
CarouselWidgetProps
}
for
configuration options.CarouselWidget,
const DefaultItem: ((props: DefaultItemProps) => React.JSX.Element) & {
displayName: string;
}
Default Item component provided for basic usage.DefaultItem,
const ItemImage: React.FunctionComponent<ItemImageProps>
Item image componentItemImage,
function addRecommIdQueryParam(url: string, recommId: string | undefined): string
Utility function to append `recombee_recomm_id` parameter to an url string.
For usage in widget template to construct item link URL.addRecommIdQueryParam,
} from "@recombee/carousel-widget-react";
import "@recombee/carousel-widget-react/dist/styles.css";
export default () => {
return (
<React.JSX.IntrinsicElements.div: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>
div React.HTMLAttributes<HTMLDivElement>.className?: string | undefined
className="flex justify-center">
<React.JSX.IntrinsicElements.div: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>
div React.HTMLAttributes<HTMLDivElement>.className?: string | undefined
className="w-[40%]">
<const CarouselWidget: React.FunctionComponent<CarouselWidgetProps>
Carousel widget React Component. See
{@link
CarouselWidgetProps
}
for
configuration options.CarouselWidget
WidgetConfigurationBase<CreateRequestFunction>.apiClient: ApiClient
Instance of Recombee JS API Client. See
{@link
file://./#client-initialization Example
}
.apiClient={const apiClient: ApiClient
apiClient}
WidgetConfigurationBase<CreateRequestFunction>.createRequest: CreateRequestFunction
Request factory function. See
{@link
file://./#client-initialization Quick Example
}
or visit
{@link
file:///api API Reference
}
for overview of available requests.createRequest={const createRequest: CreateRequestFunction
createRequest}
contentClassNameDisableDefault?: boolean | undefined
Disables default classes of content wrapper element.
There are some default class names with essential styles applied to the
content wrapper element. This setting disables them as an escape hatch
for customization. See
{@link
file://./#custom-css Custom CSS
}
.contentClassNameDisableDefault
contentClassName?: string | undefined
Custom classes of content wrapper element. See
{@link
file://./#custom-css Custom CSS
}
.contentClassName="rb:no-scrollbar flex min-h-[420px] snap-x snap-mandatory content-stretch gap-1 overflow-x-auto p-6"
itemWrapperClassNameDisableDefault?: boolean | undefined
Disables default classes of item wrapper element.
There are some default class names with essential styles applied to the
item wrapper element. This setting disables them as an escape hatch for
customization. See
{@link
file://./#custom-css Custom CSS
}
.itemWrapperClassNameDisableDefault
itemWrapperClassName?: string | undefined
Custom classes of item wrapper element. See
{@link
file://./#custom-css Custom CSS
}
.itemWrapperClassName="flex min-w-full flex-grow basis-full snap-center"
type ItemComponent: (props: {
state: CarouselWidgetState;
result?: Recommendation;
}) => React.ReactNode
A component rendering a single recommended item.ItemComponent={(props: {
state: CarouselWidgetState;
result?: Recommendation;
}
props) => (
<const DefaultItem: ((props: DefaultItemProps) => React.JSX.Element) & {
displayName: string;
}
Default Item component provided for basic usage.DefaultItem
DefaultItemProps.href?: string | null | undefined
Item link URL.href={function addRecommIdQueryParam(url: string, recommId: string | undefined): string
Utility function to append `recombee_recomm_id` parameter to an url string.
For usage in widget template to construct item link URL.addRecommIdQueryParam(
`${props: {
state: CarouselWidgetState;
result?: Recommendation;
}
props.result?: Recommendation | undefined
result?.values?: {
[key: string]: any;
} | undefined
Item propertiesvalues?.link}`,
props: {
state: CarouselWidgetState;
result?: Recommendation;
}
props.state: CarouselWidgetState
state.CarouselWidgetState.recommId: string | undefined
Id of recommendation response from which the items originated.recommId,
)}
DefaultItemProps.image?: React.ReactNode
Item Image element.image={
<const ItemImage: React.FunctionComponent<ItemImageProps>
Item image componentItemImage
src?: string | null | undefined
Image URLsrc={`${props: {
state: CarouselWidgetState;
result?: Recommendation;
}
props.result?: Recommendation | undefined
result?.values?: {
[key: string]: any;
} | undefined
Item propertiesvalues?.images?.[0]}`}
width?: number | undefined
Image width in pixelswidth={600}
height?: number | undefined
Image height in pixelsheight={400}
/>
}
DefaultItemProps.labelContent?: React.ReactNode
Item content above title. Sets the entire content of an item aside from
an image.labelContent={`${props: {
state: CarouselWidgetState;
result?: Recommendation;
}
props.result?: Recommendation | undefined
result?.values?: {
[key: string]: any;
} | undefined
Item propertiesvalues?.genres?.join(", ")}`}
DefaultItemProps.title?: React.ReactNode
Item title.title={`${props: {
state: CarouselWidgetState;
result?: Recommendation;
}
props.result?: Recommendation | undefined
result?.values?: {
[key: string]: any;
} | undefined
Item propertiesvalues?.title}`}
DefaultItemProps.highlightedContent?: React.ReactNode
Item content under title. Sets the entire content of an item aside from
an image.highlightedContent={`${props: {
state: CarouselWidgetState;
result?: Recommendation;
}
props.result?: Recommendation | undefined
result?.values?: {
[key: string]: any;
} | undefined
Item propertiesvalues?.year}`}
/>
)}
/>
</React.JSX.IntrinsicElements.div: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>
div>
</React.JSX.IntrinsicElements.div: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>
div>
);
};
API Reference
CarouselWidget
Carousel widget React Component. See CarouselWidgetProps for configuration options.
CarouselWidgetProps
Carousel Widget React Component configuration properties
Properties
createRequest
Request factory function. See Quick Example or visit API Reference for overview of available requests.
onRecommResponse
Callback function allowing to intercept and inspect recommendation request+response made by widget.
import React from "react";
import { const CarouselWidget: React.FunctionComponent<CarouselWidgetProps>
Carousel widget React Component. See
{@link
CarouselWidgetProps
}
for
configuration options.CarouselWidget } from "@recombee/carousel-widget-react";
<const CarouselWidget: React.FunctionComponent<CarouselWidgetProps>
Carousel widget React Component. See
{@link
CarouselWidgetProps
}
for
configuration options.CarouselWidget
// ...ommited code...
WidgetConfigurationBase<CreateRequestFunction>.onRecommResponse?: WidgetRecommResponseCallback | undefined
Callback function allowing to intercept and inspect recommendation
request+response made by widget.
```tsx|-react
import React from "react";
import { CarouselWidget } from "@recombee/carousel-widget-react";
//onRecommResponse={({ recombeeRequest: Request
recombeeRequest, recombeeResponse: any
recombeeResponse }) => {
// use data from request and response for any purpose, i.e. internal tracking
}}
/>;
deduplicationPartitionKey
A string key specifying a group of widgets, in which recommendation results will be deduplicated. By default, all widgets belong to a single group so all results from the same database are deduplicated.
initialItemsCount
Number of items to load immediately. Adjust to have more items loaded ahead of user scrolling.
classNameDisableDefault
Disables default classes of widget wrapper element.
There are some default class names with essential styles applied to the widget wrapper element. This setting disables them as an escape hatch for customization. See Custom CSS.
contentClassNameDisableDefault
Disables default classes of content wrapper element.
There are some default class names with essential styles applied to the content wrapper element. This setting disables them as an escape hatch for customization. See Custom CSS.
itemWrapperClassNameDisableDefault
Disables default classes of item wrapper element.
There are some default class names with essential styles applied to the item wrapper element. This setting disables them as an escape hatch for customization. See Custom CSS.
ItemComponent
A component rendering a single recommended item.
ArrowComponent
A component rendering either left or right carousel arrow
CarouselComponent
Component responsible for rendering the widget markup.
Example in which the passed component wraps the default carousel component with additional custom HTML.
import React from "react";
import {
const CarouselWidget: React.FunctionComponent<CarouselWidgetProps>
Carousel widget React Component. See
{@link
CarouselWidgetProps
}
for
configuration options.CarouselWidget,
const DefaultCarousel: ((props: DefaultCarouselProps) => React.JSX.Element) & {
displayName: string;
}
Default visual component used to render carousel containerDefaultCarousel,
} from "@recombee/carousel-widget-react";
<const CarouselWidget: React.FunctionComponent<CarouselWidgetProps>
Carousel widget React Component. See
{@link
CarouselWidgetProps
}
for
configuration options.CarouselWidget
// ...ommited code...
CarouselComponent?: ((props: DefaultCarouselProps) => React.ReactNode) | undefined
Component responsible for rendering the widget markup.
Example in which the passed component wraps the default carousel
component with additional custom HTML.
```tsx|-react
import React from "react";
import {
CarouselWidget,
DefaultCarousel,
} from "@recombee/carousel-widget-react";
//CarouselComponent={(carouselProps: DefaultCarouselProps<React.ReactNode>
carouselProps) => {
return (
<React.JSX.IntrinsicElements.div: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>
div>
<React.JSX.IntrinsicElements.h1: React.DetailedHTMLProps<React.HTMLAttributes<HTMLHeadingElement>, HTMLHeadingElement>
h1>Recommended</React.JSX.IntrinsicElements.h1: React.DetailedHTMLProps<React.HTMLAttributes<HTMLHeadingElement>, HTMLHeadingElement>
h1>
<const DefaultCarousel: ((props: DefaultCarouselProps) => React.JSX.Element) & {
displayName: string;
}
Default visual component used to render carousel containerDefaultCarousel {...carouselProps: DefaultCarouselProps<React.ReactNode>
carouselProps} />
</React.JSX.IntrinsicElements.div: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>
div>
);
}}
/>;
This property also allows to fully cutomize the carousel HTML in extreme cases.
import React from "react";
import { const CarouselWidget: React.FunctionComponent<CarouselWidgetProps>
Carousel widget React Component. See
{@link
CarouselWidgetProps
}
for
configuration options.CarouselWidget } from "@recombee/carousel-widget-react";
<const CarouselWidget: React.FunctionComponent<CarouselWidgetProps>
Carousel widget React Component. See
{@link
CarouselWidgetProps
}
for
configuration options.CarouselWidget
// ...ommited code...
CarouselComponent?: ((props: DefaultCarouselProps) => React.ReactNode) | undefined
Component responsible for rendering the widget markup.
Example in which the passed component wraps the default carousel
component with additional custom HTML.
```tsx|-react
import React from "react";
import {
CarouselWidget,
DefaultCarousel,
} from "@recombee/carousel-widget-react";
//CarouselComponent={(carouselProps: DefaultCarouselProps<React.ReactNode>
carouselProps) => {
return (
<React.JSX.IntrinsicElements.div: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>
div React.RefAttributes<HTMLDivElement>.ref?: React.Ref<HTMLDivElement> | undefined
Allows getting a ref to the component instance.
Once the component unmounts, React will set `ref.current` to `null`
(or call the ref with `null` if you passed a callback ref).ref={carouselProps: DefaultCarouselProps<React.ReactNode>
carouselProps.DefaultCarouselProps<React.ReactNode>.state: CarouselWidgetState
Carousel state.state.CarouselWidgetState.wrapperRef: ObservableRef<HTMLElement>
React ref necessary to control the carousel wrapper element. See
{@link
CarouselWidgetProps.CarouselComponent
Customization Example
}
.wrapperRef.ObservableRef<HTMLElement>.handle(element: HTMLElement | null): void
handle}>
<React.JSX.IntrinsicElements.h1: React.DetailedHTMLProps<React.HTMLAttributes<HTMLHeadingElement>, HTMLHeadingElement>
h1>Recommended</React.JSX.IntrinsicElements.h1: React.DetailedHTMLProps<React.HTMLAttributes<HTMLHeadingElement>, HTMLHeadingElement>
h1>
<React.JSX.IntrinsicElements.div: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>
div React.RefAttributes<HTMLDivElement>.ref?: React.Ref<HTMLDivElement> | undefined
Allows getting a ref to the component instance.
Once the component unmounts, React will set `ref.current` to `null`
(or call the ref with `null` if you passed a callback ref).ref={carouselProps: DefaultCarouselProps<React.ReactNode>
carouselProps.DefaultCarouselProps<React.ReactNode>.state: CarouselWidgetState
Carousel state.state.CarouselWidgetState.contentRef: ObservableRef<HTMLElement>
React ref necessary to control the carousel content element. See
{@link
CarouselWidgetProps.CarouselComponent
Customization Example
}
.contentRef.ObservableRef<HTMLElement>.handle(element: HTMLElement | null): void
handle}>
// Use carouselProps.state.items array to loop over items
</React.JSX.IntrinsicElements.div: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>
div>
</React.JSX.IntrinsicElements.div: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>
div>
);
}}
/>;
CarouselWidgetState
Exposes internal state data of the widget to be used in customizable components
Properties
wrapperRef
React ref necessary to control the carousel wrapper element. See CarouselWidgetProps.CarouselComponent.
contentRef
React ref necessary to control the carousel content element. See CarouselWidgetProps.CarouselComponent.
items
Array of items to show in the carousel.
recommId
Id of recommendation response from which the items originated.
leftArrow
Current state of left Carousel arrow
rightArrow
Current state of right Carousel arrow
DefaultItem
Default Item component provided for basic usage.
DefaultItemProps
Recommended item component properties.
Properties
classNameDisableBase
Disables default classes of item wrapper element.
There are some default class names with essential styles applied to the item wrapper element. This setting disables them as an escape hatch for customization. See Custom CSS.
imageWrapperClassName
Custom classes of item image wrapper element. See Custom CSS.
imageWrapperClassNameDisableBase
Disables default classes of item image wrapper element.
There are some default class names with essential styles applied to the item image wrapper element. This setting disables them as an escape hatch for customization. See Custom CSS.
result
A single item recommedation.
href
Item link URL.
image
Item Image element.
labelContent
Item content above title. Sets the entire content of an item aside from an image.
labelContentWrapperClassName
Custom classes of label content wrapper element. See Custom CSS.
labelContentWrapperClassNameDisableBase
Disables default classes of label content wrapper element.
There are some default class names with essential styles applied to the label content wrapper element. This setting disables them as an escape hatch for customization. See Custom CSS.
title
Item title.
titleWrapperClassNameDisableBase
Disables default classes of title wrapper element.
There are some default class names with essential styles applied to the title wrapper element. This setting disables them as an escape hatch for customization. See Custom CSS.
highlightedContent
Item content under title. Sets the entire content of an item aside from an image.
highlightedContentWrapperClassName
Custom classes of highlighted content wrapper element. See Custom CSS.
highlightedContentWrapperClassNameDisableBase
Disables default classes of highlighted content wrapper element.
There are some default class names with essential styles applied to the highlighted content wrapper element. This setting disables them as an escape hatch for customization. See Custom CSS.
bottomContent
Any custom content to display at the bottom of the item.
ItemImage
Item image component
ItemImageProps
Item Image properties
Properties
src
Image URL
missingImageSrc
URL of an image to display when the main image could not be loaded.
className
Image wrapper class name
imgClassName
Image class name
width
Image width in pixels
height
Image height in pixels
verticalAlignment
Image vertical alignment
horizontalAlignment
Image horizontal alignment
fittingAlgorithm
Image fitting algorithm
Recommendation
Single recommendation item
Properties
id
Item ID
values
Item properties
addRecommIdQueryParam
Utility function to append recombee_recomm_id
parameter to an url string.
For usage in widget template to construct item link URL.
DefaultCarousel
Default visual component used to render carousel container
DefaultCarouselProps
Carousel Properties
Properties
state
Carousel state.
classNameDisableDefault
Disables default classes of widget wrapper element.
There are some default class names with essential styles applied to the widget wrapper element. This setting disables them as an escape hatch for customization. See Custom CSS.
contentClassNameDisableDefault
Disables default classes of content wrapper element.
There are some default class names with essential styles applied to the content wrapper element. This setting disables them as an escape hatch for customization. See Custom CSS.
itemWrapperClassNameDisableDefault
Disables default classes of item wrapper element.
There are some default class names with essential styles applied to the item wrapper element. This setting disables them as an escape hatch for customization. See Custom CSS.
ItemComponent
A component rendering a single recommended item.
ArrowComponent
A component rendering either left or right carousel arrow
DefaultCarouselArrow
Default Carousel arrow component
CarouselArrowProps
Carousel Arrow configuration options
Properties
arrowDirection
The direction of an arrow to render.
state
Carousel state.
CreateRequestFunction
Factory for creating Recombee API Request to load data into a Widget.
FetchContentOptions
CreateRequestFunction parameter
Properties
count
Number of items to fetch for the widget. Pass it to the appropriate Request constructor.