diff --git a/src/Breadcrumb.tsx b/src/Breadcrumb.tsx index 2d3a79bc5..771196151 100644 --- a/src/Breadcrumb.tsx +++ b/src/Breadcrumb.tsx @@ -1,61 +1,58 @@ -import React, { memo, forwardRef, useId } from "react"; +import React, { memo, forwardRef, useId, ReactNode } from "react"; import { symToStr } from "tsafe/symToStr"; +import { assert } from "tsafe/assert"; +import type { Equals } from "tsafe"; + import { RegisteredLinkProps, useLink } from "./lib/routing"; +import { createComponentI18nApi } from "./lib/i18n"; import { fr } from "./lib"; import { cx } from "./lib/tools/cx"; -// We make users import dsfr.css, so we don't need to import the scoped CSS -// but in the future if we have a complete component coverage it -// we could stop requiring users to import the hole CSS and only import on a -// per component basis. import "./dsfr/component/breadcrumb/breadcrumb.css"; export type BreadcrumbProps = { className?: string; links: BreadcrumbProps.Link[]; + classes?: Partial>; }; export namespace BreadcrumbProps { export type Link = { - text: string; + text: ReactNode; linkProps: RegisteredLinkProps; isActive?: boolean; }; } -//Longueur et lisibilité : Afin qu’il reste lisible, évitez que le fil d’Ariane soit trop long et passe sur plusieurs lignes. -// Si les titres de page de votre site sont longs, nous conseillons de n’afficher que les 4 premiers mots du nom de la page courante et d’indiquer que l’élément est tronqué par l’affichage de “…” -const trimText = (label: string) => { - if (label && label.split(" ").length > 4) { - return label.split(" ").slice(0, 4).join(" ") + "..."; - } - return label; -}; - /** @see */ export const Breadcrumb = memo( forwardRef((props, ref) => { - const { links, className, ...rest } = props; + const { links, className, classes = {}, ...rest } = props; + + assert>(); + + const { t } = useTranslation(); const { Link } = useLink(); const breadcrumbId = useId(); + return (