From 621ab48e409769a44b08e81c593de6ef1001b7c5 Mon Sep 17 00:00:00 2001 From: GU Yiling Date: Tue, 6 Mar 2018 11:33:30 +0800 Subject: [PATCH] * add `.veui-sr-only` (#249) * fix backward tabbing by adding focus ward on both directions * add aria support for DatePicker --- packages/veui-theme-one/common.less | 4 ++ .../veui-theme-one/components/calendar.less | 6 +-- .../components/date-picker.less | 11 ++++- packages/veui-theme-one/mixins.less | 11 +++++ packages/veui/src/components/Calendar.vue | 5 ++- packages/veui/src/components/DatePicker.vue | 33 +++++++++++--- packages/veui/src/managers/focus.js | 44 ++++++++++++------- packages/veui/src/utils/dom.js | 24 +++++++--- 8 files changed, 104 insertions(+), 34 deletions(-) diff --git a/packages/veui-theme-one/common.less b/packages/veui-theme-one/common.less index 0d84e66d6..cb21b878f 100644 --- a/packages/veui-theme-one/common.less +++ b/packages/veui-theme-one/common.less @@ -53,6 +53,10 @@ button { cursor: not-allowed !important; } +.veui-sr-only { + .veui-invisible(); +} + a { text-decoration: none; } diff --git a/packages/veui-theme-one/components/calendar.less b/packages/veui-theme-one/components/calendar.less index 0f8b9f2cd..195cdc783 100644 --- a/packages/veui-theme-one/components/calendar.less +++ b/packages/veui-theme-one/components/calendar.less @@ -5,11 +5,7 @@ overflow: hidden; border: 1px solid @veui-gray-color-6; background-color: #fff; - - &-invisible { - .size(0); - opacity: 0; - } + outline: none; button { .veui-button-transition(); diff --git a/packages/veui-theme-one/components/date-picker.less b/packages/veui-theme-one/components/date-picker.less index 70d3e3dae..37abf8348 100644 --- a/packages/veui-theme-one/components/date-picker.less +++ b/packages/veui-theme-one/components/date-picker.less @@ -33,7 +33,6 @@ } &-clear { - display: none; .absolute(10px, 10px, _, _); .size(16px); background: #fff; @@ -44,10 +43,20 @@ cursor: pointer; .veui-button-transition(); + .veui-date-picker:hover &, + &.focus-visible { + .size(16px); + clip: auto; + } + &:hover { color: @veui-text-color-normal; } + &.focus-visible { + color: @veui-brand-color; + } + .veui-icon { display: block; } diff --git a/packages/veui-theme-one/mixins.less b/packages/veui-theme-one/mixins.less index 5ef24f772..170b7c772 100644 --- a/packages/veui-theme-one/mixins.less +++ b/packages/veui-theme-one/mixins.less @@ -1,6 +1,17 @@ @import "~less-plugin-est/src/all.less"; @import "./variables.less"; +// https://github.com/twbs/bootstrap/blob/e43f97304eac2b276c755267e29de70ae2ac7afd/scss/mixins/_screen-reader.scss#L6-L15 +.veui-invisible() { + position: absolute; + .size(1px); + padding: 0; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border: 0; +} + .veui-button-transition() { transition-property: border-color, background-color, color, opacity; transition-duration: .2s; diff --git a/packages/veui/src/components/Calendar.vue b/packages/veui/src/components/Calendar.vue index fa21a2fc0..db0a00060 100644 --- a/packages/veui/src/components/Calendar.vue +++ b/packages/veui/src/components/Calendar.vue @@ -15,7 +15,7 @@ ref="prev" :class="{ 'veui-calendar-prev': true, - 'veui-calendar-invisible': pIndex !== 0 && p.view === 'days' + 'veui-sr-only': pIndex !== 0 && p.view === 'days' }" :disabled="disabled || readonly" @click="step(false, p.view)" @@ -64,7 +64,7 @@ ref="next" :class="{ 'veui-calendar-next': true, - 'veui-calendar-invisible': pIndex !== panels.length - 1 && p.view === 'days' + 'veui-sr-only': pIndex !== panels.length - 1 && p.view === 'days' }" :disabled="disabled || readonly" @click="step(true, p.view)" @@ -96,6 +96,7 @@ @keydown.right.prevent="moveFocus(p.view, 1)" @keydown.down.prevent="moveFocus(p.view, 7)" @keydown.left.prevent="moveFocus(p.view, -1)" + :autofocus="day.isFocus" :aria-label="getLocaleString(day)" :tabindex="day.isFocus ? null : '-1'"> - + - - - + +