Marker
Leise Hinweise zwischen Inhalten, etwa Datumstrenner und Systemereignisse, mit Sticky-Datums- und Zeitangaben, die als Heute oder Gestern gelesen werden.
pnpm dlx shadcn@latest add https://hextaui.com/r/marker.jsonFügt die Komponente, die HextaUI-Theme-Tokens und alle HextaUI-Komponenten hinzu, von denen sie abhängt.
Füge die Theme-Tokens zu deinem globalen CSS hinzu, falls du das noch nicht getan hast.
Installiere die Abhängigkeiten.
pnpm add @base-ui/react class-variance-authority cnKopiere den folgenden Code und füge ihn in dein Projekt ein.
components/ui/marker.tsx Passe die Importpfade an dein Projekt-Setup an.
Varianten
default ist eine ruhige Notiz, separator zentriert sie zwischen zwei feinen Linien, und border unterstreicht sie wie eine Abschnittsüberschrift.
Haftende Datumsangaben
Mit sticky bleibt ein Marker oben in seinem Scrollbereich. Sobald er haftet, blenden seine Linien aus und das Label wird zu einer schwebenden Pille, damit es über Nachrichten lesbar bleibt. Setze jeden Tag in einen eigenen Abschnitt, damit das nächste Datum das vorherige verdrängt.
Relative Datumsangaben
<MarkerTime /> rendert ein <time>, das Heute, Gestern, einen Wochentag der letzten Woche und danach ein kurzes Datum anzeigt. Es aktualisiert sich um Mitternacht selbst. Übergib format für eigene Formulierungen.
Aktivität
Rendere Marker als Listeneinträge für ein Aktivitätsprotokoll. Links darin sind unterstrichen, bis du sie hoverst.
Langer Inhalt
Notizen umbrechen, und ununterbrochene Zeichenketten werden getrennt, statt das Layout zu verbreitern. Trennlinien behalten auf beiden Seiten eine Mindestlänge.
Rechts nach links
Icons und Text folgen der Leserichtung.
- Marker sind einfacher Text, daher lesen Screenreader sie an Ort und Stelle vor. Icons werden für sie ausgeblendet.
<MarkerTime />behält den exakten Zeitpunkt indateTimeund zeigt dabei ein lesbares Label.- Die haftende Pille erscheint ohne Bewegung, wenn reduzierte Bewegung aktiv ist.
| Prop | Typ | Standard |
|---|---|---|
variant | "default" | "separator" | "border" | "default" |
stickyHaftet oben am Scrollbereich und wird zur Pille, solange er haftet. | boolean | false |
render | ReactElement | (props, state) => ReactElement | <div> |
| Attribut | Beschreibung |
|---|---|
data-slot="marker" | Marker per CSS ansprechen. |
data-variant | Die aktuelle Variante. |
data-sticky | Vorhanden, wenn sticky aktiv ist. |
data-stuck | Vorhanden, solange der Marker oben haftet. |
--marker-sticky-top | Abstand nach oben, solange der Marker haftet. Standard ist 0.5rem. |
| Attribut | Beschreibung |
|---|---|
data-slot="marker-content" | Der Text. Wird zur Pille, solange er haftet. |
| Attribut | Beschreibung |
|---|---|
data-slot="marker-icon" | Eine 16px große Icon-Box, für Screenreader ausgeblendet. |
| Prop | Typ | Standard |
|---|---|---|
dateErforderlich. Alles, was new Date() akzeptiert. | Date | string | number | – |
localeStandardmäßig fest, damit Server und Browser übereinstimmen. | Intl.LocalesArgument | "en-US" |
formatErsetze das relative Label durch dein eigenes. | (date: Date) => ReactNode | – |
| Attribut | Beschreibung |
|---|---|
data-slot="marker-time" | Das time-Element mit einem ISO-dateTime. |
- AttachmentDatei- und Bildkarten für Uploads, mit Fortschritt, Zuständen, Aktionen, einem Trigger über die ganze Karte und Namen, die ihre Dateiendung behalten.
- BubbleChat-Nachrichten-Bubbles mit Varianten, gruppierten Ecken, Reaktionen und Platz für interaktive Inhalte.
- MessageEine Chat-Nachrichtenzeile mit Avatar, Name, Bubbles und Status, in der neue Nachrichten von der Seite des Absenders hereinsteigen.
- Message scrollerEin Chat-Scrollbereich, der neuen Nachrichten folgt, beim Zurücklesen deine Position hält und auf dem Sprung-Button zählt, was du verpasst hast.