Gebaut auf Vercels UI SDK 0.1.0-beta.2. Die API kann sich ändern.
Time input
Ein Zeitfeld auf Vercels UI SDK, das Teil für Teil getippt wird, mit 12- oder 24-Stunden-Uhr, optionalen Sekunden, Minimum und Maximum und einem 24-Stunden-Wert für Formulare.
- Formularkomponenten
- 3 Teilen
- 10 Beispielen
@ui-sdk/core@ui-sdk/react
pnpm dlx shadcn@latest add https://hextaui.com/r/ui-sdk-time-input.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 @ui-sdk/react@0.1.0-beta.2 @ui-sdk/core@0.1.0-beta.2 cnKopiere den folgenden Code und füge ihn in dein Projekt ein.
components/ui/ui-sdk-time-input.tsx Passe die Importpfade an dein Projekt-Setup an.
UI SDK bringt etwas eigenes CSS in einem Cascade Layer namens ui-sdk mit. Deklariere diesen Layer ganz oben im globalen Stylesheet, über dem Tailwind-Import, damit deine Klassen gewinnen.
Der Wert ist eine 24-Stunden-Zeit wie "14:30", wie bei einem nativen Zeitfeld, egal welche Uhr das Feld zeigt. Er bleibt null, bis jeder Teil etwas enthält. Jeder Teil ist ein eigenes kleines Eingabefeld: Tippe Ziffern und es springt weiter, oder drücke A oder P für die Tageshälfte.
Das Feld ist eine Gruppe, also benenne es mit aria-labelledby oder aria-label. Ein Klick irgendwo in den Rahmen fokussiert den nächstgelegenen Teil.
TimeInput rendert seine Teile selbst. Füge TimeInputSegments selbst ein, um ein Symbol oder anderen Inhalt daneben zu setzen.
Das Feld zeigt die Uhr der Locale. hourCycle wählt 12 oder 24 Stunden, und granularity fügt Sekunden hinzu oder zeigt nur die Stunde. Alle senden 24-Stunden-Werte.
Eine Zeit vor min oder nach max markiert das Feld als ungültig, und sein Formular wird nicht gesendet.
invalid markiert das Feld für eigene Prüfungen, etwa eine Endzeit vor dem Beginn.
locale bestimmt Reihenfolge, Trennzeichen und die Namen der Tageshälften. Ohne sie folgt das Feld der Sprache der Seite, sobald es interaktiv ist.
Ein verstecktes Feld sendet die Zeit unter name. required stoppt eine leere oder halb getippte Zeit, und ein Zurücksetzen stellt den Standardwert her.
createTimeInputController() setzt, leert oder fokussiert das Feld von überall. Fokussiere einen Teil über seine Einheit, etwa "minute".
Ein deaktiviertes Feld wird beim Fokussieren übersprungen und nicht gesendet.
Ein schreibgeschütztes Feld nimmt den Fokus an und wird gesendet, aber Tasten und Tippen ändern es nicht.
Die Teile behalten die Reihenfolge der Locale, und die Pfeiltasten folgen ihnen auf dem Bildschirm.
| Taste | Aktion |
|---|---|
| 0–9 | Füllt den Teil und springt zum nächsten. |
| ↑↓ | Ändert den Teil um eins und läuft im Kreis. Ein leerer Teil beginnt bei der aktuellen Uhrzeit. |
| PageUpPageDown | Ändert in größeren Schritten, etwa 15 Minuten. |
| HomeEnd | Springt zum ersten oder letzten Wert des Teils. |
| ←→ | Wechselt zum vorherigen oder nächsten Teil. |
| Backspace | Löscht die letzte Ziffer, leert dann den Teil und springt dann zurück. |
| AP | Wählt AM oder PM bei einer 12-Stunden-Uhr. |
| Enter | Sendet das Formular mit der Eingabe ab. |
Die Wurzel ist eine Gruppe. Jeder Teil ist ein Spinbutton, benannt nach seiner Einheit wie „hour“, mit Wert und Bereich, und ein leerer Teil wird als „Empty“ vorgelesen. Der Text zwischen den Teilen ist für Screenreader verborgen.
Die Teile sind echte Eingabefelder, daher zeigen Handys einen Ziffernblock und Tippen funktioniert, bevor das Skript der Seite läuft. Auf Touchscreens wachsen sie auf 16px, damit Handys nicht zoomen, und der fokussierte Teil wird hervorgehoben statt eine Einfügemarke zu zeigen.
Jeder Teil umhüllt den gleichnamigen UI-SDK-Teil und nimmt alle seine Props an, auch render und einen className, der eine Funktion des Zustands sein kann.
| Prop | Typ | Standard |
|---|---|---|
value | string | null | – |
defaultValue | string | null | – |
onValueChangeLäuft, sobald jeder Teil etwas enthält, und mit null, wenn einer geleert wird. | (value: string | null, details) => void | – |
hourCycleStandardmäßig die Uhr der Locale. | 12 | 24 | – |
granularity | "hour" | "minute" | "second" | "minute" |
min | string | – |
max | string | – |
localeStandardmäßig die Sprache der Seite. | string | – |
invalid | boolean | false |
disabled | boolean | false |
readOnly | boolean | false |
required | boolean | false |
name | string | – |
form | string | – |
controllerAus createTimeInputController(). | TimeInputController | – |
childrenStandardmäßig TimeInputSegments. | ReactNode | (state) => ReactNode | – |
render | ReactElement | (props, state) => ReactElement | – |
| Attribut | Beschreibung |
|---|---|
data-slot="time-input" | Zum Ansprechen des Zeitfelds in CSS. |
data-invalid | Vorhanden, wenn die Zeit außerhalb von min und max liegt oder invalid gesetzt ist. |
data-empty | Vorhanden, solange alle Teile leer sind. |
data-disabled | Vorhanden, wenn deaktiviert. |
data-readonly | Vorhanden, wenn schreibgeschützt. |
data-required | Vorhanden, wenn erforderlich. |
Rendert für jeden Teil ein TimeInputSegment in der Reihenfolge der Locale, mit dem Text dazwischen.
| Prop | Typ | Standard |
|---|---|---|
segmentEines der segments aus dem Zustand der Wurzel. | TimeInputSegmentData | – |
render | ReactElement | (props, state) => ReactElement | – |
| Attribut | Beschreibung |
|---|---|
data-slot="time-input-segment" | Zum Ansprechen eines Teils in CSS. |
data-type | hour, minute, second, dayPeriod oder literal für den Text zwischen den Teilen. |
data-empty | Vorhanden, solange der Teil leer ist. |
- CalendarEin Datumsraster für Einzel-, Bereichs- und Mehrfachauswahl, mit gleitenden Monaten, Bereichsvorschau und Tagen in Touch-Größe.
- CheckboxEine Checkbox, deren Häkchen sich einzeichnet, mit unbestimmten übergeordneten Elementen, Gruppen und Labels, die ihren Hover teilen.
- ComboboxEin filterbares Select mit Chips, Gruppen und asynchronen Ergebnissen, in einem Popup, das sich beim Tippen anpasst.
- Date pickerEin Button, der einen Kalender in einem Popover öffnet, auf Smartphones als Bottom Sheet, für einzelne Daten und Zeiträume.
- FieldLabels, Beschreibungen und Fehler, mit ihrem Steuerelement verbunden, mit Validierungszuständen und Layouts für Formulare.
- InputEin Texteingabefeld mit drei Größen, ungültigen und schreibgeschützten Zuständen, nativem Validierungsstyling und einer 16-px-Schrift für Touch, damit Smartphones nie hineinzoomen.