import React, { memo, forwardRef, type ReactNode, type CSSProperties } from "react"; import { symToStr } from "tsafe/symToStr"; import { assert } from "tsafe/assert"; import type { Equals } from "tsafe"; import type { FrClassName } from "./fr/generatedFromCss/classNames"; import { cx } from "./tools/cx"; import { fr } from "./fr"; import { useAnalyticsId } from "./tools/useAnalyticsId"; export type QuoteProps = { id?: string; className?: string; text: ReactNode; author?: ReactNode; source?: ReactNode; sourceUrl?: string; imageUrl?: string; size?: "medium" | "large" | "xlarge"; accentColor?: QuoteProps.AccentColor; classes?: Partial>; style?: CSSProperties; }; export namespace QuoteProps { type ExtractAccentColor = FrClassName extends `fr-quote--${infer AccentColor}` ? AccentColor : never; export type AccentColor = ExtractAccentColor; } /** @see */ export const Quote = memo( forwardRef((props, ref) => { const { id: id_props, className, text, author, source, sourceUrl, imageUrl, size = "xlarge", accentColor, classes = {}, style, ...rest } = props; assert>(); const id = useAnalyticsId({ "defaultIdPrefix": "fr-quote", "explicitlyProvidedId": id_props }); return (

« {text} »

{author !== undefined && (

{author}

)} {source !== undefined && (
    {source}
)} {imageUrl !== undefined && (
)}
); }) ); Quote.displayName = symToStr({ Quote }); export default Quote;