Gebaut auf Vercels UI SDK 0.1.0-beta.2. Die API kann sich ändern.
Number input
Ein Zahlenfeld auf Vercels UI SDK mit Schaltern, die beim Halten wiederholen, Währungs-, Prozent- und Einheitenformaten in jeder Locale und einem Ziehgriff.
- Formularkomponenten
- 8 Teilen
- 13 Beispielen
@tabler/icons-react@ui-sdk/core@ui-sdk/reactclass-variance-authority
pnpm dlx shadcn@latest add https://hextaui.com/r/ui-sdk-number-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 @tabler/icons-react class-variance-authority cnKopiere den folgenden Code und füge ihn in dein Projekt ein.
components/ui/ui-sdk-number-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 Zahl oder null, wenn das Feld leer ist, und das Feld zeigt ihn formatiert an. Tippen aktualisiert den Wert, sobald der Text eine gültige Zahl ist. Enter oder das Verlassen des Felds übernimmt ihn: Der Text wird gelesen, zwischen min und max gehalten, auf den Schritt gerundet und neu formatiert.
Ein Schalter wird an seiner Grenze deaktiviert. Ein eingegebener Wert außerhalb der Grenzen wird beim Übernehmen zurückgeholt.
step ist der übliche Schritt. Shift, Bild auf und Bild ab ändern um largeStep, Alt oder Option mit einer Pfeiltaste um smallStep. Halte einen Schalter gedrückt, um zu wiederholen.
format nimmt Optionen von Intl.NumberFormat. Eingaben im selben Format funktionieren, und ein Prozentwert ist ein Bruch, also ist 15 % gleich 0.15. Die Gruppe variant="stacked" setzt kleine Pfeile ans Ende.
locale wählt Trennzeichen, Symbole und Zifferngruppierung für Anzeige und Eingabe. Ohne sie folgt das Feld der Sprache der Seite, sobald es interaktiv ist, und der Server rendert Englisch.
Ziehe einen NumberInputScrubArea seitwärts, um den Wert zu ändern, wie in einem Designtool. Wo der Browser Pointer Lock erlaubt, kann das Ziehen über den Bildschirmrand hinausgehen, und NumberInputScrubAreaCursor zeichnet den Cursor.
Mit wheel ändert Scrollen über dem fokussierten Feld den Wert. Standardmäßig ist es aus, damit Scrollen über die Seite das Feld nie verändert.
onValueChange läuft bei jeder gültigen Änderung und onValueCommit am Ende einer Interaktion, das ist der Moment zum Speichern. Ein Controller ändert oder setzt den Wert von jedem Schalter aus.
Mit einem name wird die Zahl unverändert gesendet, etwa 1250, nie formatiert. required blockiert ein leeres Feld, und ein Zurücksetzen des Formulars stellt den Standardwert her.
invalid markiert das Feld und setzt aria-invalid am Eingabefeld, für eigene Prüfungen wie den Lagerbestand.
Ein deaktiviertes Feld kann nicht fokussiert oder geändert werden und wird nicht gesendet.
Ein schreibgeschütztes Feld kann fokussiert werden und wird gesendet, aber Schalter, Ziehen und Tippen ändern es nicht.
Die Schalter tauschen die Seiten, und die Locale bestimmt Ziffern und Währung.
| Taste | Aktion |
|---|---|
| ↑↓ | Ändert den Wert um step. |
| ShiftPageUpPageDown | Ändert um largeStep, standardmäßig zehn Schritte. Shift wirkt bei den Pfeilen, den Schaltern, dem Mausrad und beim Ziehen. |
| Alt | Mit einer Pfeiltaste um smallStep, standardmäßig ein Zehntel Schritt. |
| HomeEnd | Springt zum Minimum oder Maximum, falls gesetzt. |
| Enter | Übernimmt und formatiert die Eingabe. |
Das Feld folgt der Tastatur des WAI-ARIA-Spinbutton-Musters auf einem nativen Texteingabefeld, sodass normales Bearbeiten weiter funktioniert. Benenne das Feld mit einem Label oder aria-label. Die Schalter heißen standardmäßig „Increase“ und „Decrease“, verweisen auf das Feld und bleiben außerhalb der Tab-Reihenfolge, weil die Pfeiltasten dasselbe tun.
Ein Feld mit Dezimalstellen fordert auf Handys eine Dezimaltastatur an, und die Schalter werden auf Touchscreens größer. Sie schrumpfen beim Drücken nur, wenn Bewegung erlaubt ist.
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 | number | null | – |
defaultValue | number | null | – |
onValueChange | (value: number | null, details) => void | – |
onValueCommitLäuft, sobald eine Interaktion endet. Zum Speichern. | (value: number | null, details) => void | – |
min | number | – |
max | number | – |
step | number | 1 |
largeStep | number | step × 10 |
smallStep | number | step ÷ 10 |
format | Intl.NumberFormatOptions | – |
localeStandardmäßig die Sprache der Seite. | string | – |
wheel | boolean | false |
invalid | boolean | false |
disabled | boolean | false |
readOnly | boolean | false |
required | boolean | false |
name | string | – |
form | string | – |
controllerAus createNumberInputController(). | NumberInputController | – |
| Attribut | Beschreibung |
|---|---|
data-slot="number-input" | Zum Ansprechen des Zahlenfelds in CSS. |
data-scrubbing | Vorhanden, während Ziehen den Wert ändert. |
data-invalid | Vorhanden, wenn ungültig. |
data-disabled | Vorhanden, wenn deaktiviert. |
data-readonly | Vorhanden, wenn schreibgeschützt. |
data-required | Vorhanden, wenn erforderlich. |
| Prop | Typ | Standard |
|---|---|---|
variantSchalter auf beiden Seiten, gestapelte Pfeile am Ende oder keine Schalter, für einen Ziehgriff. | "split" | "stacked" | "plain" | "split" |
render | ReactElement | (props, state) => ReactElement | – |
| Attribut | Beschreibung |
|---|---|
data-slot="number-input-group" | Zum Ansprechen des Feldrahmens in CSS. |
data-variant | Die Variante: split, stacked oder plain. |
| Prop | Typ | Standard |
|---|---|---|
id | string | – |
placeholder | string | – |
render | ReactElement | (props, state) => ReactElement | – |
| Prop | Typ | Standard |
|---|---|---|
aria-label | string | "Increase" |
disabledDeaktiviert nur diesen Schalter. | boolean | – |
childrenStandardmäßig ein Plus, in der Variante stacked ein Pfeil. | ReactNode | (state) => ReactNode | – |
render | ReactElement | (props, state) => ReactElement | – |
| Attribut | Beschreibung |
|---|---|
data-slot="number-input-increment" | Den Button per CSS ansprechen. |
data-at-bound | Vorhanden, wenn der Wert bei max liegt. |
data-disabled | Vorhanden, wenn der Schalter nicht weiterzählen kann. |
| Prop | Typ | Standard |
|---|---|---|
aria-label | string | "Decrease" |
disabledDeaktiviert nur diesen Schalter. | boolean | – |
render | ReactElement | (props, state) => ReactElement | – |
| Attribut | Beschreibung |
|---|---|
data-slot="number-input-decrement" | Den Button per CSS ansprechen. |
data-at-bound | Vorhanden, wenn der Wert bei min liegt. |
Stapelt den Plus- über den Minus-Schalter am Ende einer stacked-Gruppe.
| Prop | Typ | Standard |
|---|---|---|
orientationRechts und oben erhöhen den Wert. | "horizontal" | "vertical" | "horizontal" |
pixelsPerStepWie weit sich der Zeiger für einen Schritt bewegt. | number | – |
controllerVerbindet einen Ziehbereich außerhalb des Zahlenfelds, etwa ein Symbol in einer Werkzeugleiste. | NumberInputController | – |
| Attribut | Beschreibung |
|---|---|
data-slot="number-input-scrub-area" | Zum Ansprechen des Ziehbereichs in CSS. |
data-orientation | horizontal oder vertical. |
data-scrubbing | Vorhanden, während eine Ziehbewegung den Wert ändert. |
| Prop | Typ | Standard |
|---|---|---|
childrenStandardmäßig ein waagerechter Pfeil, mittig auf dem Zeiger. | ReactNode | – |
- 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.