feat(GlFormDate): Add component

What does this MR do?

Create GlFormDate component to implement <input type="date"> as an accessible replacement for date-picker.

  • Adds min/max` date validation and invalid feedback handling to restrict users from adding an out-of-bounds date.
  • Used Date type for prop values to align with GlDatepicker implementation for ease of migration.
  • Emits change event with date as YYYY-MM-DD value.

Why GlFormDate?

  • Implement a new component to migrate to with similiar prop API (or at lease migration plan for deprecated/obsolete props)
  • Moving from Pikaday in GlDatePicker to <input type="date"> removes a significant amount of the component props and implementation details.
  • Clear button and calendar handled by browsers.
  • Purpose is to enter a date, calendar is conditional to pointer/mouse usage, does not necessarily display for keyboard users.
  • <input> requires <label> to be given an accessible name, should use <gl-form-group>.
  • Promote semantic meaning of input as part of wider form context.

Other examples: Date input and Datepicker

Links

Notes:

  • Calendar and clear buttons are implemented by browsers and will conditionally render if using keyboard/screen-reader or preference keybaord Backspace instead of clearing the whole field.
    • Custom clear button and showClearButton prop not implemented.
  • Removed methods that emit events for calendar open/close.
  • Don't think we can enforce calendar to be open by default.
  • iOS Safari has partial support with minimal implementation of min/max attributes, provides validation to form submission but does not update calendar dates etc.

Does this MR meet the acceptance criteria?

Conformity

  • Code review guidelines.
  • GitLab UI's contributing guidlines.
  • If it changes a Pajamas-compliant component's look & feel, the MR has been reviewed by a UX designer.
  • If it changes GitLab UI's documentation guidelines, the MR has been reviewed by a Technical Writer.
  • If the MR changes a component's API, integration MR(s) have been opened in the following projects to ensure that the @gitlab/ui package can be upgraded quickly after the changes are released:
  • Added the ~"component:*" label(s) if applicable.

Security

If this MR contains changes to processing or storing of credentials or tokens, authorization and authentication methods and other items described in the security review guidelines:

  • Label as security and @ mention @gitlab-com/gl-security/appsec
  • Security reports checked/validated by a reviewer from the AppSec team

Accessibility

If this MR adds or modifies a component, take a few moments to review the following:

  • All actions and functionality can be done with a keyboard.
  • Links, buttons, and controls have a visible focus state.
  • All content is presented in text or with a text equivalent. For example, alt text for SVG, or aria-label for icons that have meaning or perform actions.
  • Changes in a component’s state are announced by a screen reader. For example, changing aria-expanded="false" to aria-expanded="true" when an accordion is expanded.
  • Color combinations have sufficient contrast.

Closes #1890 (closed)

Edited by Scott de Jonge

Merge request reports

Loading