Zum Hauptinhalt springen

Ihre Meinung ist uns wichtig! Gemeinsam mit Ihnen möchten wir KoliBri stetig verbessern. Teilen Sie uns Ihre Ideen, Wünsche oder Anregungen mit – schnell und unkompliziert.

InputFile

Synonyme: Datei-Eingabefeld, Dateiauswahl, Datei-Upload, File Input, File Upload

Beschreibung: Mit InputFile können Dateien ausgewählt und zur weiteren Verarbeitung bereitgestellt werden.

Die Komponente basiert auf dem nativen HTML5-Eingabetyp file und profitiert dadurch von dessen Semantik, dem Dateiauswahldialog des Betriebssystems sowie der standardisierten Unterstützung durch Browser und assistive Technologien. Sie unterstützt die Auswahl einzelner oder mehrerer Dateien sowie die Einschränkung zulässiger Dateitypen.

Anstelle der browserspezifischen Darstellung des nativen Elements zeigt die Komponente eine einheitliche Schaltfläche „Datei auswählen“ sowie die Namen der ausgewählten Dateien an. Zusätzlich können Dateien per Drag & Drop auf dem Feld abgelegt werden.

Beispiel​

Standard-Datei-Eingabefeld ohne optional gesetzte Felder:

<KolInputFile _label="Datei hochladen" />

Barrierefreiheit​

  • Das Eingabefeld muss mit einer aussagekräftigen Beschriftung versehen werden. Es darf visuell ausgeblendet werden, wenn der Zweck des Eingabefeldes durch den direkten visuellen Kontext absolut unmissverständlich ist.

  • Im Fehlerfall wird die Fehlermeldung direkt an der Komponente dargestellt und automatisch mit ihr verknüpft, sodass sie auch assistiven Technologien zur Verfügung steht.

Konkrete Designentscheidungen​

EntscheidungBegründung
Verwendung des nativen HTML5-Eingabetyps fileDie Komponente nutzt bewusst den nativen HTML5-Eingabetyp file und profitiert dadurch von dessen standardisierter Unterstützung durch Browser, Betriebssystem-Dateidialoge und assistive Technologien.
Einheitliche Darstellung statt browserspezifischem DateifeldAnstelle der browserspezifischen Darstellung zeigt die Komponente eine Schaltfläche „Datei auswählen“ und die Namen der gewählten Dateien an (siehe Dateiauswahl und Drag & Drop). Fokus, Tastaturbedienung und Screenreader-Ausgabe entsprechen dem nativen Dateifeld.
Drag & Drop als ZusatzinteraktionDie Auswahl per Drag & Drop ergänzt die Auswahl über den Dateiauswahldialog, ersetzt diese jedoch nicht. Dadurch bleibt die vollständige Bedienbarkeit über Tastatur und Betriebssystem-Dateidialog erhalten.

Verwendung​

  • Schränken Sie die zulässigen Dateitypen über _accept ein.
  • Aktivieren Sie die Auswahl mehrerer Dateien über _multiple.
  • Kennzeichnen Sie Pflichtfelder über _required.
  • Setzen Sie eine getroffene Auswahl bei Bedarf über die Methode reset() zurück. Dabei werden die ausgewählten Dateien entfernt und der Hinweistext im Feld wiederhergestellt.

Tastatursteuerung​

Die Tastaturbedienung wird durch den Browser und das Betriebssystem bestimmt. Daher können sich einzelne Tastaturfunktionen je nach Browser und Endgerät unterscheiden.

Typischerweise werden folgende Funktionen unterstützt:

TasteFunktion
TabFokus auf das Eingabefeld bzw. das nächste fokussierbare Element setzen.
Shift+TabFokus auf das vorherige fokussierbare Element setzen.
Enter / LeertasteÖffnet den nativen Dateiauswahldialog.

Die Bedienung innerhalb des Dateiauswahldialogs wird durch das Betriebssystem bestimmt.

Best Practices / Empfehlungen​

  • Nutzen Sie _accept, um die Dateiauswahl auf die für den Anwendungsfall zulässigen Dateitypen einzuschränken und die Benutzerführung zu verbessern.
  • Verlassen Sie sich nicht ausschließlich auf _accept. Prüfen Sie Dateitypen und Dateigrößen zusätzlich serverseitig, da die clientseitige Einschränkung umgangen werden kann und beim Ablegen per Drag & Drop nicht greift.
  • Verwenden Sie _multiple nur, wenn die Auswahl mehrerer Dateien für den Anwendungsfall erforderlich ist.
  • Formulieren Sie aussagekräftige Beschriftungen (_label), die den Zweck des Datei-Uploads eindeutig beschreiben.
  • Nutzen Sie _hint, um zulässige Dateiformate oder maximale Dateigrößen verständlich zu kommunizieren.
  • Geben Sie Validierungsfehler über _msg aus und beschreiben Sie verständlich, wie Nutzende den Fehler beheben können.

Anwendungsfälle​

  • Hochladen von Profilbildern oder Avataren
  • Bereitstellen von Anhängen in Formularen, beispielsweise Bewerbungsunterlagen oder Nachweisen
  • Upload von Dokumenten zur Identifikation oder Verifizierung
  • Hochladen mehrerer Dateien, beispielsweise Bilder oder Dokumentensammlungen
  • Bereitstellen von Dateien für Import- oder Verarbeitungsprozesse

FAQ​

Kann ich die Auswahl auf bestimmte Dateitypen beschränken?
Ja. Über _accept legen Sie fest, welche Dateitypen im Dateiauswahldialog angeboten werden. Diese Einschränkung dient der Benutzerführung und ersetzt keine serverseitige Validierung.

Wie kann ich mehrere Dateien auswählen?
Aktivieren Sie _multiple, damit mehrere Dateien in einem Arbeitsgang ausgewählt werden können.

Kann ich die maximale Dateigröße begrenzen?
Nein. Die maximale Dateigröße kann nicht über die Komponente begrenzt werden und muss durch die Anwendung bzw. serverseitig geprüft werden.

Unterstützt die Komponente Drag & Drop?
Ja. Dateien können zusätzlich zum nativen Dateiauswahldialog per Drag & Drop auf dem Feld abgelegt werden. Diese Funktion ergänzt die Dateiauswahl, ersetzt sie jedoch nicht. Abgelegte Dateien werden nicht gegen _accept und _multiple geprüft.

Wie setze ich die Auswahl zurück?
Rufen Sie die Methode reset() der Komponente auf. Sie entfernt die ausgewählten Dateien und stellt den Hinweistext im Feld wieder her.

Playground​

Testen Sie die verschiedenen Eigenschaften der InputFile-Komponente:

Icons
Message
<KolInputFile _label="Datei hochladen" />

Funktionalitäten​

Einfaches Eingabefeld​

Jedes Feld benötigt mindestens ein Label (_label), um für alle Nutzenden verständlich und zugänglich zu sein. Das Label wird als natives label-Element mit dem Feld verknüpft.

<KolInputFile _label="Dokument hochladen" />

Dateiauswahl und Drag & Drop​

Die Komponente zeigt eine Schaltfläche „Datei auswählen“ an. Ein Klick an beliebiger Stelle des Feldes öffnet den Dateiauswahldialog des Betriebssystems; per Tastatur öffnen Enter bzw. Leertaste den Dialog, sobald das Feld fokussiert ist.

Die Namen der ausgewählten Dateien werden als Text im Feld angezeigt. Solange keine Datei ausgewählt ist, erscheint dort der Hinweis „Datei auswählen oder hier ablegen...“. Wählen Sie im Beispiel eine Datei aus, um die Anzeige zu sehen.

Zusätzlich können Dateien per Drag & Drop auf dem Feld abgelegt werden. Diese Komfortfunktion ergänzt die tastaturbedienbare Auswahl über den Dateiauswahldialog, ersetzt sie jedoch nicht.

Hinweis: Beim Ablegen per Drag & Drop werden _accept und _multiple derzeit nicht berücksichtigt – es werden alle abgelegten Dateien übernommen (siehe ). Prüfen Sie Anzahl, Typ und Größe der Dateien daher immer auf Anwendungsebene bzw. serverseitig.

<KolInputFile _label="Dokument hochladen" />

Formularattribute​

Mit den folgenden Properties passen Sie das Feld an gängige Formularanforderungen an:

  • _disabled: Deaktiviert das Feld. Deaktivierte Felder sind nicht fokussierbar und können nicht bearbeitet werden (mit Bedacht verwenden!).

  • _required: Kennzeichnet das Feld als Pflichtfeld.

Die Properties werden 1:1 auf die gleichnamigen nativen HTML-Attribute des input-Elements übertragen. Mit _disabled wird zusätzlich die Schaltfläche „Datei auswählen“ deaktiviert.

<KolInputFile _label="Dokument hochladen" />

Dateitypbeschränkung​

Mit _accept legen Sie fest, welche Dateitypen im Dateiauswahldialog angeboten werden. Der Wert wird auf das native accept-Attribut übertragen und kann Dateiendungen und MIME-Typen enthalten.

Beispiele für _accept-Werte:

  • image/*: Alle Bildformate
  • .pdf: Nur PDF-Dateien
  • .doc,.docx: Microsoft-Word-Dokumente
  • .csv,.xlsx: Tabellendaten
  • * oder leer: Alle Dateitypen (Standard)

Die Einschränkung zulässiger Dateitypen über _accept wird von Browsern und assistiven Technologien unterstützt.

Hinweis: Die Einschränkung wirkt nur im Dateiauswahldialog. Per Drag & Drop abgelegte Dateien werden derzeit nicht gegen _accept geprüft (siehe ).

<KolInputFile _accept="image/*" _label="Bild hochladen" />

Mehrfachauswahl​

Mit _multiple ermöglichen Sie die Auswahl mehrerer Dateien in einem Arbeitsgang. Die Namen aller ausgewählten Dateien werden kommagetrennt im Feld angezeigt.

<KolInputFile _label="Anhänge hochladen" _multiple={true} />

Hinweistexte und Fehlermeldungen​

Mit _hint und _msg geben Sie Nutzenden zusätzliche Orientierung zur Eingabe und machen Validierungsfehler unmittelbar am Feld sichtbar:

  • _hint: Ergänzende Hinweise zur Eingabe (wird immer angezeigt und über aria-describedby mit dem Feld verknüpft)
  • _msg: Fehlermeldungen oder Validierungshinweise (wird nur in Verbindung mit _touched angezeigt)
  • _touched: Zeigt an, ob das Feld von Nutzenden bereits angefasst wurde, und steuert damit, ob _msg sichtbar wird
  • _hideMsg: Unterdrückt die Fehlermeldung am Feld, wenn sie an anderer Stelle dargestellt wird

Hinweis: _msg wird erst dann eingeblendet, wenn _touched auf true gesetzt ist. So werden Validierungsfehler nicht bereits beim ersten Rendern, sondern erst nach einer Interaktion mit dem Feld angezeigt. Handelt es sich um eine Fehlermeldung, wird das Feld zusätzlich über aria-invalid als ungültig gekennzeichnet.

Anwendungsfall für _hideMsg: Besteht eine fachliche Einheit aus mehreren Eingabefeldern innerhalb eines Field-Sets, beispielsweise ein sechsstelliger Bestätigungscode mit einem einzelnen Feld je Stelle, kann eine gemeinsame Fehlermeldung für die gesamte Gruppe sinnvoller sein als eine Meldung je Einzelfeld. In diesem Fall unterdrücken Sie die Fehlermeldung an den einzelnen Feldern über _hideMsg und stellen sie stattdessen einmalig am Field-Set dar.

Wichtig: _hideMsg blendet die Fehlermeldung nicht nur visuell aus. Die Meldung wird weder gerendert noch über aria-describedby mit dem Feld verknüpft – lediglich die Kennzeichnung über aria-invalid bleibt erhalten. Stellen Sie daher sicher, dass die gemeinsame Fehlermeldung auf Anwendungsebene für alle Nutzenden, auch für Nutzende assistiver Technologien, wahrnehmbar ist.

Message
<KolInputFile _hideMsg={false} _hint="Akzeptierte Formate: PDF, DOC, DOCX. Maximale Größe: 10 MB." _label="Dokument hochladen" _msg={{ "_description": "Bitte laden Sie eine PDF-Datei mit maximal 10 MB hoch." }} _touched={true} />

Label ausblenden​

Mit _hideLabel blenden Sie das Label visuell aus, um das Feld kompakter zu gestalten. Für assistive Technologien bleibt die Beschriftung als zugänglicher Name (aria-label) weiterhin verfügbar; sehende Nutzende erhalten sie bei Maus-Hover und Tastaturfokus als Tooltip.

<KolInputFile _hideLabel={false} _label="Dokument hochladen" />

Icons​

Mit _icons versehen Sie das Feld links und/oder rechts mit zusätzlichen Icons, um visuellen Kontext zu geben.

Verfügbare Positionen sind:

  • left: Icon links vom Feld
  • right: Icon rechts vom Feld

Wird ein Icon nur über seine Icon-Klasse angegeben, gilt es als dekorativ und wird vor assistiven Technologien verborgen. Trägt ein Icon eine Information, die nicht bereits aus Label oder Hinweis hervorgeht, übergeben Sie es als Objekt mit label – das Icon erhält dann eine zugängliche Beschriftung.

Icons
<KolInputFile _icons={{ "left": "kolicon-kolibri" }} _label="Dokument hochladen" />

SmartButton​

Mit _smartButton platzieren Sie einen Button mit beliebiger Aktion direkt im Eingabefeld, etwa um eine zugehörige Funktion griffbereit anzubieten. Der SmartButton wird immer als Icon-Button ohne sichtbare Beschriftung dargestellt; sein _label dient als zugänglicher Name und muss die Aktion daher eindeutig beschreiben. Der SmartButton ist per Tastatur erreichbar und wird zusammen mit dem Feld deaktiviert (_disabled).

<KolInputFile _label="Mit SmartButton" _smartButton={{ "_label": "Action" }} />

API​

Events​

Zur Behandlung von Events bzw. Callbacks siehe .

EventAuslöserValue
clickEingabefeld wird angeklickt-
focusEingabefeld wird fokussiert-
blurEingabefeld verliert Fokus-
keydownTaste wird im Eingabefeld gedrückt-
inputDateien werden über den Dialog ausgewählt oder per Drag & Drop abgelegtAusgewählte Dateien als FileList
changeDateien werden über den Dialog ausgewählt oder per Drag & Drop abgelegtAusgewählte Dateien als FileList

Overview​

The File input type creates an input field for file uploads. One or multiple files can be selected and submitted with a form.

Properties​

PropertyAttributeDescriptionTypeDefault
_accept_acceptDefines which file formats are accepted.string | undefinedundefined
_accessKey_access-keyDefines the key combination that can be used to trigger or focus the component's interactive element.string | undefinedundefined
_ariaDetails_aria-detailsReferences an external element by ID that provides accessible details for this input. Uses ElementInternals.ariaDetailsElements to cross the Shadow DOM boundary. Supported by desktop screen readers (NVDA, JAWS with Chrome/Firefox). Not yet supported by mobile screen readers (TalkBack, VoiceOver iOS).string | undefinedundefined
_disabled_disabledMakes the element not focusable and ignore all events.boolean | undefinedfalse
_hideLabel_hide-labelHides the caption by default and displays the caption text with a tooltip when the interactive element is focused or the mouse is over it.boolean | undefinedfalse
_hideMsg_hide-msgHides the error message but leaves it in the DOM for the input's aria-describedby.boolean | undefinedfalse
_hint_hintDefines the hint text.string | undefined''
_icons_iconsDefines the icon classnames.string | undefined | { right?: IconOrIconClass | undefined; left?: IconOrIconClass | undefined; }undefined
_infoPopover_info-popoverDefines the informational popover after the label.anyundefined
_label (required)_labelDefines the visible or semantic label of the component (e.g. aria-label, label, headline, caption, summary, etc.). Set to false to enable the expert slot.stringundefined
_msg_msgDefines the properties for a message rendered as Alert component.Omit<AlertProps, "_on" | "_label" | "_level" | "_variant" | "_hasCloser"> & { _description: string; } | string | undefinedundefined
_multiple_multipleMakes the input accept multiple inputs.boolean | undefinedfalse
_name_nameDefines the technical name of an input field.string | undefinedundefined
_on--Gibt die EventCallback-Funktionen für das Input-Event an.InputTypeOnBlur & InputTypeOnClick & InputTypeOnChange & InputTypeOnFocus & InputTypeOnInput & InputTypeOnKeyDown | undefinedundefined
_required_requiredMakes the input element required.boolean | undefinedfalse
_shortKey_short-keyAdds a visual shortcut hint after the label and instructs the screen reader to read the shortcut aloud.string | undefinedundefined
_smartButton_smart-buttonAllows to add a button with an arbitrary action within the element (_hide-label only).string | undefined | { _label: string; } & { _ariaExpanded?: boolean | undefined; _tabIndex?: number | undefined; _value?: StencilUnknown; _accessKey?: string | undefined; _role?: "tab" | "treeitem" | undefined; _ariaControls?: string | undefined; _ariaDescription?: string | undefined; _ariaSelected?: boolean | undefined; _on?: ButtonCallbacksPropType<StencilUnknown> | undefined; _type?: "button" | "reset" | "submit" | undefined; _variant?: VariantClassNamePropType | undefined; _customClass?: string | undefined; _disabled?: boolean | undefined; _hideLabel?: boolean | undefined; _icons?: IconsPropType | undefined; _id?: string | undefined; _inline?: boolean | undefined; _name?: string | undefined; _shortKey?: string | undefined; _syncValueBySelector?: string | undefined; _tooltipAlign?: AlignPropType | undefined; }undefined
_tooltipAlign_tooltip-alignDefines where to show the Tooltip preferably: top, right, bottom or left."bottom" | "left" | "right" | "top" | undefined'top'
_touched_touchedShows if the input was touched by a user.boolean | undefinedfalse
_variant_variantDefines which variant should be used for presentation.string | string[] | undefinedundefined

Methods​

click​

click() => Promise<void>

Clicks the primary interactive element inside this component.

Returns​

Type: Promise<void>

focus(options?: KolFocusOptions) => Promise<void>​

Sets focus on the internal element.

Parameters​
NameTypeDescription
optionsKolFocusOptions | undefined
Returns​

Type: Promise<void>

getValue() => Promise<FileList | null | undefined>​

Returns the current value.

Returns​

Type: Promise<FileList | null | undefined>

reset() => Promise<void>​

Resets the component's value.

Returns​

Type: Promise<void>

Slots​

SlotDescription
The label of the input field.