Diwa Design System

Input URL

A URL input with native browser URL validation. Provides an optimised keyboard on mobile and supports autocomplete for web addresses.

Keyboard interaction

KeyAction
TabMove focus to the input.
Shift + TabMove focus away from the input to the previous element.
TypeEnter a URL directly into the field.
EnterSubmit the enclosing form (if any).

Screen reader behaviour

The following ARIA attributes are managed internally by the component:

PropertyValueNote
aria-required"true" when required is setCommunicates the required state to assistive technologies.
aria-invalid"true" when state="error"Signals a validation failure. Paired with aria-describedby pointing at the error message.
aria-describedbyID of the message or description elementLinks the error or description text to the input so screen readers announce it on focus.
aria-label / aria-labelledbyFrom label propAssociates the visible label with the inner <input type="url"> via Shadow DOM id association.

Label association

The label is paired with the inner <input type="url"> via Shadow DOM id association. Use hideLabel to visually hide it while retaining its accessible name.

Input type semantics

type="url" enables native URL format validation (requires a scheme such as https://). Mobile browsers may present a keyboard layout optimised for URL entry with / and . shortcuts.

Required fields

required adds a visual asterisk and aria-required="true" on the inner input.

Validation state

state="error" sets aria-invalid="true". The message is linked via aria-describedby and announced by screen readers after the field label.

Focus management

delegatesFocus: true forwards host focus to the inner input. Reduced-motion styles respect prefers-reduced-motion.

WCAG 2.2 compliance

1.3.1 Info and Relationships — APass

Label, required indicator, and error message are all programmatically associated with the input via ARIA attributes.

1.4.3 Contrast (Minimum) — AAPass

Input text and label foreground colours meet the 4.5:1 minimum contrast ratio against the field background in both themes.

2.1.1 Keyboard — APass

All functionality is operable via keyboard.

2.4.7 Focus Visible — AAPass

A visible focus ring is applied on keyboard focus using :focus-visible styles.

3.3.1 Error Identification — APass

When state="error", the error message is linked via aria-describedby so screen readers announce it on focus.

4.1.2 Name, Role, Value — APass

The inner <input type="url"> exposes correct name, role, and value to assistive technologies via delegated focus and ARIA labelling.

Best practices

  • Reduced motion — all CSS transitions inside the shadow DOM respond to prefers-reduced-motion: reduce and are suppressed automatically.
  • URL format guidance — inform users of the expected format using the description prop. Browsers require a scheme such as https:// — omitting it may cause confusing validation errors.
  • Error messaging — always pair state="error" with a meaningful message prop. Colour alone is insufficient for users who cannot distinguish red from other colours.