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
Datetype for prop values to align withGlDatepickerimplementation for ease of migration. - Emits
changeevent with date asYYYY-MM-DDvalue.
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
GlDatePickerto<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
- Browser support: 75.89% (complete) + 20.97% (partial) = 96.86%
- Research insights and usability considerations in Issue #1890 (closed).
- Datepicker comparison spreadsheet: Google sheet
- Input type experiments: CodePen (Edit view)
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
showClearButtonprop not implemented.
- Custom clear button and
- 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/maxattributes, 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/uipackage can be upgraded quickly after the changes are released:-
GitLab: mr_url -
CustomersDot: mr_url -
Status Page: mr_url
-
-
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-labelfor 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"toaria-expanded="true"when an accordion is expanded. -
Color combinations have sufficient contrast.
Closes #1890 (closed)
Edited by Scott de Jonge