uikit 3.16.7-dev.fcb5a4616 → 3.16.8-dev.dc18e16fb

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/dist/css/uikit-core-rtl.css +33 -19
  3. package/dist/css/uikit-core-rtl.min.css +1 -1
  4. package/dist/css/uikit-core.css +33 -19
  5. package/dist/css/uikit-core.min.css +1 -1
  6. package/dist/css/uikit-rtl.css +33 -19
  7. package/dist/css/uikit-rtl.min.css +1 -1
  8. package/dist/css/uikit.css +33 -19
  9. package/dist/css/uikit.min.css +1 -1
  10. package/dist/js/components/countdown.js +1 -1
  11. package/dist/js/components/countdown.min.js +1 -1
  12. package/dist/js/components/filter.js +1 -1
  13. package/dist/js/components/filter.min.js +1 -1
  14. package/dist/js/components/lightbox-panel.js +16 -37
  15. package/dist/js/components/lightbox-panel.min.js +1 -1
  16. package/dist/js/components/lightbox.js +16 -37
  17. package/dist/js/components/lightbox.min.js +1 -1
  18. package/dist/js/components/notification.js +1 -1
  19. package/dist/js/components/notification.min.js +1 -1
  20. package/dist/js/components/parallax.js +2 -2
  21. package/dist/js/components/parallax.min.js +1 -1
  22. package/dist/js/components/slider-parallax.js +1 -1
  23. package/dist/js/components/slider-parallax.min.js +1 -1
  24. package/dist/js/components/slider.js +15 -36
  25. package/dist/js/components/slider.min.js +1 -1
  26. package/dist/js/components/slideshow-parallax.js +1 -1
  27. package/dist/js/components/slideshow-parallax.min.js +1 -1
  28. package/dist/js/components/slideshow.js +15 -36
  29. package/dist/js/components/slideshow.min.js +1 -1
  30. package/dist/js/components/sortable.js +1 -1
  31. package/dist/js/components/sortable.min.js +1 -1
  32. package/dist/js/components/tooltip.js +1 -1
  33. package/dist/js/components/tooltip.min.js +1 -1
  34. package/dist/js/components/upload.js +1 -1
  35. package/dist/js/components/upload.min.js +1 -1
  36. package/dist/js/uikit-core.js +45 -22
  37. package/dist/js/uikit-core.min.js +1 -1
  38. package/dist/js/uikit-icons.js +1 -1
  39. package/dist/js/uikit-icons.min.js +1 -1
  40. package/dist/js/uikit.js +59 -57
  41. package/dist/js/uikit.min.js +1 -1
  42. package/package.json +1 -1
  43. package/src/js/api/boot.js +10 -1
  44. package/src/js/api/observables.js +1 -1
  45. package/src/js/api/watch.js +1 -1
  46. package/src/js/core/accordion.js +4 -0
  47. package/src/js/core/dropnav.js +5 -6
  48. package/src/js/core/navbar.js +14 -4
  49. package/src/js/core/sticky.js +7 -2
  50. package/src/js/mixin/slider-autoplay.js +13 -42
  51. package/src/js/mixin/slider-nav.js +6 -1
  52. package/src/js/util/fastdom.js +2 -2
  53. package/src/js/util/scroll.js +2 -1
  54. package/src/less/components/base.less +0 -1
  55. package/src/less/components/dropbar.less +6 -0
  56. package/src/less/components/dropdown.less +5 -0
  57. package/src/less/components/navbar.less +5 -0
  58. package/src/less/components/visibility.less +25 -5
  59. package/src/scss/components/dropbar.scss +6 -0
  60. package/src/scss/components/dropdown.scss +5 -0
  61. package/src/scss/components/navbar.scss +5 -0
  62. package/src/scss/components/visibility.scss +25 -5
  63. package/src/scss/mixins-theme.scss +0 -1
  64. package/src/scss/mixins.scss +0 -1
  65. package/src/scss/variables-theme.scss +3 -0
  66. package/src/scss/variables.scss +3 -0
  67. package/tests/js/index.js +4 -3
  68. package/tests/navbar.html +2 -2
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "uikit",
3
3
  "title": "UIkit",
4
4
  "description": "UIkit is a lightweight and modular front-end framework for developing fast and powerful web interfaces.",
5
- "version": "3.16.7-dev.fcb5a4616",
5
+ "version": "3.16.8-dev.dc18e16fb",
6
6
  "main": "dist/js/uikit.js",
7
7
  "style": "dist/css/uikit.css",
8
8
  "sideEffects": [
@@ -4,7 +4,16 @@ import { apply, hasAttr, inBrowser, isPlainObject, startsWith, trigger } from 'u
4
4
 
5
5
  export default function (App) {
6
6
  if (inBrowser && window.MutationObserver) {
7
- requestAnimationFrame(() => init(App));
7
+ if (document.readyState === 'interactive') {
8
+ requestAnimationFrame(() => init(App));
9
+ } else {
10
+ new MutationObserver((records, observer) => {
11
+ if (document.body) {
12
+ init(App);
13
+ observer.disconnect();
14
+ }
15
+ }).observe(document.documentElement, { childList: true });
16
+ }
8
17
  }
9
18
  }
10
19
 
@@ -61,7 +61,7 @@ export function scroll(options) {
61
61
  };
62
62
  },
63
63
  {
64
- target: window,
64
+ target: () => window,
65
65
  ...options,
66
66
  },
67
67
  'scroll'
@@ -13,7 +13,7 @@ export function callWatches(instance) {
13
13
  runWatches(instance, initial);
14
14
  }
15
15
  instance._watch = null;
16
- });
16
+ }, true);
17
17
  }
18
18
 
19
19
  function runWatches(instance, initial) {
@@ -7,6 +7,7 @@ import {
7
7
  $,
8
8
  $$,
9
9
  attr,
10
+ children,
10
11
  css,
11
12
  dimensions,
12
13
  filter,
@@ -171,6 +172,9 @@ export default {
171
172
  });
172
173
 
173
174
  attr(content, { role: 'region', 'aria-labelledby': toggle.id });
175
+ if (isTag(content, 'ul')) {
176
+ attr(children(content), 'role', 'presentation');
177
+ }
174
178
  }
175
179
  },
176
180
 
@@ -35,7 +35,6 @@ export default {
35
35
  mixins: [Class, Container],
36
36
 
37
37
  props: {
38
- dropdown: String,
39
38
  align: String,
40
39
  clsDrop: String,
41
40
  boundary: Boolean,
@@ -55,7 +54,6 @@ export default {
55
54
  },
56
55
 
57
56
  data: {
58
- dropdown: '> li > a, > ul > li > a',
59
57
  align: isRtl ? 'right' : 'left',
60
58
  clsDrop: 'uk-dropdown',
61
59
  clsDropbar: 'uk-dropnav-dropbar',
@@ -64,6 +62,7 @@ export default {
64
62
  dropbarAnchor: false,
65
63
  duration: 200,
66
64
  container: false,
65
+ selNavItem: '> li > a, > ul > li > a',
67
66
  },
68
67
 
69
68
  computed: {
@@ -136,8 +135,8 @@ export default {
136
135
  },
137
136
 
138
137
  items: {
139
- get({ dropdown }, $el) {
140
- return $$(dropdown, $el);
138
+ get({ selNavItem }, $el) {
139
+ return $$(selNavItem, $el);
141
140
  },
142
141
 
143
142
  watch(items) {
@@ -164,7 +163,7 @@ export default {
164
163
  name: 'mouseover focusin',
165
164
 
166
165
  delegate() {
167
- return this.dropdown;
166
+ return this.selNavItem;
168
167
  },
169
168
 
170
169
  handler({ current, type }) {
@@ -191,7 +190,7 @@ export default {
191
190
  name: 'keydown',
192
191
 
193
192
  delegate() {
194
- return this.dropdown;
193
+ return this.selNavItem;
195
194
  },
196
195
 
197
196
  handler(e) {
@@ -5,14 +5,15 @@ export default {
5
5
  extends: Dropnav,
6
6
 
7
7
  data: {
8
- dropdown: '.uk-navbar-nav > li > a, .uk-navbar-item, .uk-navbar-toggle',
9
8
  clsDrop: 'uk-navbar-dropdown',
9
+ selNavItem:
10
+ '.uk-navbar-nav > li > a,a.uk-navbar-item,button.uk-navbar-item,.uk-navbar-item a,.uk-navbar-item button,.uk-navbar-toggle', // Simplify with :where() selector once browser target is Safari 14+
10
11
  },
11
12
 
12
13
  computed: {
13
14
  items: {
14
- get({ dropdown }, $el) {
15
- return $$(dropdown, $el);
15
+ get({ selNavItem }, $el) {
16
+ return $$(selNavItem, $el);
16
17
  },
17
18
 
18
19
  watch(items) {
@@ -21,7 +22,16 @@ export default {
21
22
  '.uk-navbar-nav, .uk-navbar-left, .uk-navbar-right',
22
23
  this.$el
23
24
  )) {
24
- css(container, 'flexGrow', justify ? $$(this.dropdown, container).length : '');
25
+ css(
26
+ container,
27
+ 'flexGrow',
28
+ justify
29
+ ? $$(
30
+ '.uk-navbar-nav > li > a, .uk-navbar-item, .uk-navbar-toggle',
31
+ container
32
+ ).length
33
+ : ''
34
+ );
25
35
  }
26
36
 
27
37
  attr($$('.uk-navbar-nav', this.$el), 'role', 'group');
@@ -163,7 +163,7 @@ export default {
163
163
 
164
164
  const hide = this.isFixed && types.has('resize') && !sticky;
165
165
  if (hide) {
166
- css(this.selTarget, 'transition', '0s');
166
+ preventTransition(this.selTarget);
167
167
  this.hide();
168
168
  }
169
169
 
@@ -174,7 +174,6 @@ export default {
174
174
 
175
175
  if (hide) {
176
176
  this.show();
177
- requestAnimationFrame(() => css(this.selTarget, 'transition', ''));
178
177
  }
179
178
 
180
179
  const viewport = toPx('100vh', 'height');
@@ -359,6 +358,7 @@ export default {
359
358
  this.show();
360
359
  Animation.in(this.$el, this.animation).catch(noop);
361
360
  } else {
361
+ preventTransition(this.selTarget);
362
362
  this.show();
363
363
  }
364
364
  },
@@ -480,3 +480,8 @@ function coerce(value) {
480
480
  function reset(el) {
481
481
  css(el, { position: '', top: '', marginTop: '', width: '' });
482
482
  }
483
+
484
+ function preventTransition(el) {
485
+ css(el, 'transition', '0s');
486
+ requestAnimationFrame(() => css(el, 'transition', ''));
487
+ }
@@ -1,4 +1,4 @@
1
- import { attr, matches, pointerEnter, pointerLeave } from 'uikit-util';
1
+ import { attr, matches } from 'uikit-util';
2
2
 
3
3
  export default {
4
4
  props: {
@@ -14,7 +14,7 @@ export default {
14
14
  },
15
15
 
16
16
  connected() {
17
- attr(this.list, 'aria-live', 'polite');
17
+ attr(this.list, 'aria-live', this.autoplay ? 'off' : 'polite');
18
18
  this.autoplay && this.startAutoplay();
19
19
  },
20
20
 
@@ -46,56 +46,27 @@ export default {
46
46
  }
47
47
  },
48
48
  },
49
- {
50
- name: `${pointerEnter} focusin`,
51
-
52
- filter() {
53
- return this.autoplay;
54
- },
55
-
56
- handler(e) {
57
- if (e.type !== pointerEnter || this.pauseOnHover) {
58
- this.stopAutoplay();
59
- }
60
- },
61
- },
62
- {
63
- name: `${pointerLeave} focusout`,
64
-
65
- filter() {
66
- return this.autoplay;
67
- },
68
-
69
- handler(e) {
70
- if (e.type !== pointerLeave || this.pauseOnHover) {
71
- this.startAutoplay();
72
- }
73
- },
74
- },
75
49
  ],
76
50
 
77
51
  methods: {
78
52
  startAutoplay() {
79
- if (
80
- (this.draggable && matches(this.$el, ':focus-within')) ||
81
- (this.pauseOnHover && matches(this.$el, ':hover'))
82
- ) {
83
- return;
84
- }
85
-
86
53
  this.stopAutoplay();
87
54
 
88
- this.interval = setInterval(
89
- () => !this.stack.length && this.show('next'),
90
- this.autoplayInterval
91
- );
92
-
93
- attr(this.list, 'aria-live', 'off');
55
+ this.interval = setInterval(() => {
56
+ if (
57
+ !(
58
+ this.stack.length ||
59
+ (this.draggable && matches(this.$el, ':focus-within')) ||
60
+ (this.pauseOnHover && matches(this.$el, ':hover'))
61
+ )
62
+ ) {
63
+ this.show('next');
64
+ }
65
+ }, this.autoplayInterval);
94
66
  },
95
67
 
96
68
  stopAutoplay() {
97
69
  clearInterval(this.interval);
98
- attr(this.list, 'aria-live', 'polite');
99
70
  },
100
71
  },
101
72
  };
@@ -21,10 +21,12 @@ export default {
21
21
  previous: 'Previous slide',
22
22
  slideX: 'Slide %s',
23
23
  slideLabel: '%s of %s',
24
+ role: 'String',
24
25
  },
25
26
 
26
27
  data: {
27
28
  selNav: false,
29
+ role: 'region',
28
30
  },
29
31
 
30
32
  computed: {
@@ -60,7 +62,10 @@ export default {
60
62
  },
61
63
 
62
64
  connected() {
63
- attr(this.$el, 'aria-roledescription', 'carousel');
65
+ attr(this.$el, {
66
+ role: this.role,
67
+ ariaRoleDescription: 'carousel',
68
+ });
64
69
  },
65
70
 
66
71
  update: [
@@ -8,8 +8,8 @@ export const fastdom = {
8
8
  reads: [],
9
9
  writes: [],
10
10
 
11
- read(task) {
12
- this.reads.push(task);
11
+ read(task, prepend) {
12
+ this.reads[prepend ? 'unshift' : 'push'](task);
13
13
  scheduleFlush();
14
14
  return task;
15
15
  },
@@ -1,5 +1,6 @@
1
1
  import { width } from './dimensions';
2
2
  import { on } from './event';
3
+ import { matches } from './filter';
3
4
  import { css } from './style';
4
5
  import { scrollParents } from './viewport';
5
6
 
@@ -10,7 +11,7 @@ export function preventBackgroundScroll(el) {
10
11
  el,
11
12
  'touchmove',
12
13
  (e) => {
13
- if (e.targetTouches.length !== 1) {
14
+ if (e.targetTouches.length !== 1 || matches(e.target, 'input[type="range"')) {
14
15
  return;
15
16
  }
16
17
 
@@ -703,7 +703,6 @@ template { display: none; }
703
703
  // Focus
704
704
  //
705
705
 
706
- :focus { outline-color: @inverse-base-focus-outline; }
707
706
  :focus-visible { outline-color: @inverse-base-focus-outline; }
708
707
 
709
708
  }
@@ -24,6 +24,7 @@
24
24
  @dropbar-background: @global-muted-background;
25
25
  @dropbar-color: @global-color;
26
26
  @dropbar-color-mode: none;
27
+ @dropbar-focus-outline: @base-focus-outline;
27
28
 
28
29
  @dropbar-large-padding-top: 40px;
29
30
  @dropbar-large-padding-bottom: @dropbar-large-padding-top;
@@ -82,6 +83,11 @@
82
83
  .uk-dropbar:extend(.uk-light all) when (@dropbar-color-mode = light) {}
83
84
  .uk-dropbar:extend(.uk-dark all) when (@dropbar-color-mode = dark) {}
84
85
 
86
+ .uk-dropbar :focus-visible {
87
+ outline-color: @dropbar-focus-outline !important;
88
+ }
89
+
90
+
85
91
  /* Size modifier
86
92
  ========================================================================== */
87
93
 
@@ -22,6 +22,7 @@
22
22
  @dropdown-background: @global-muted-background;
23
23
  @dropdown-color: @global-color;
24
24
  @dropdown-color-mode: none;
25
+ @dropdown-focus-outline: @base-focus-outline;
25
26
 
26
27
  @dropdown-large-padding: 40px;
27
28
 
@@ -79,6 +80,10 @@
79
80
  .uk-dropdown:extend(.uk-light all) when (@dropdown-color-mode = light) {}
80
81
  .uk-dropdown:extend(.uk-dark all) when (@dropdown-color-mode = dark) {}
81
82
 
83
+ .uk-dropdown :focus-visible {
84
+ outline-color: @dropdown-focus-outline !important;
85
+ }
86
+
82
87
 
83
88
  /* Size modifier
84
89
  ========================================================================== */
@@ -67,6 +67,7 @@
67
67
  @navbar-dropdown-background: @global-muted-background;
68
68
  @navbar-dropdown-color: @global-color;
69
69
  @navbar-dropdown-color-mode: none;
70
+ @navbar-dropdown-focus-outline: @base-focus-outline;
70
71
  @navbar-dropdown-grid-gutter-horizontal: @global-gutter;
71
72
  @navbar-dropdown-grid-gutter-vertical: @navbar-dropdown-grid-gutter-horizontal;
72
73
 
@@ -401,6 +402,10 @@
401
402
  .uk-navbar-dropdown:extend(.uk-light all) when (@navbar-dropdown-color-mode = light) {}
402
403
  .uk-navbar-dropdown:extend(.uk-dark all) when (@navbar-dropdown-color-mode = dark) {}
403
404
 
405
+ .uk-navbar-dropdown :focus-visible {
406
+ outline-color: @navbar-dropdown-focus-outline !important;
407
+ }
408
+
404
409
  /*
405
410
  * Grid
406
411
  * Adopts `uk-grid`
@@ -4,6 +4,7 @@
4
4
  // Component: `uk-hidden-*`
5
5
  // `uk-visible-*`
6
6
  // `uk-invisible`
7
+ // `uk-hidden-visually`
7
8
  // `uk-visible-toggle`
8
9
  // `uk-hidden-hover`
9
10
  // `uk-invisible-hover`
@@ -96,28 +97,47 @@
96
97
  ========================================================================== */
97
98
 
98
99
  /*
99
- * Can't use `display: none` nor `visibility: hidden` because both are not focusable.
100
+ * Mind that `display: none`, `visibility: hidden` and `opacity: 0`
101
+ * remove the element from the accessibility tree and that
102
+ * `display: none` and `visibility: hidden` are not focusable.
103
+ *
100
104
  * The target stays visible if any element within receives focus through keyboard.
101
105
  */
102
106
 
103
107
  /*
104
- * Discard space when hidden.
108
+ * Remove space when hidden.
109
+ * 1. Remove from document flow.
110
+ * 2. Hide element and shrink its dimension. Can't use zero dimensions together
111
+ * with `overflow: hidden` it would remove it from the accessibility tree.
112
+ * 3. Hide the single rendered pixel.
113
+ * 4. Prevent text wrapping caused by `width: 1px` because it has side effects on vocalisation
114
+ * by screen readers and the visual tracking indicator of other assistive technologies.
105
115
  */
106
116
 
117
+ .uk-hidden-visually:not(:focus):not(:active):not(:focus-within),
107
118
  .uk-visible-toggle:not(:hover):not(:focus) .uk-hidden-hover:not(:focus-within) {
119
+ /* 1 */
108
120
  position: absolute !important;
109
- width: 0 !important;
110
- height: 0 !important;
121
+ /* 2 */
122
+ width: 1px !important;
123
+ height: 1px !important;
111
124
  padding: 0 !important;
125
+ border: 0 !important;
112
126
  margin: 0 !important;
113
127
  overflow: hidden !important;
128
+ /* 3 */
129
+ clip-path: inset(50%) !important;
130
+ /* 4 */
131
+ white-space: nowrap !important;
132
+
114
133
  }
115
134
 
116
135
  /*
117
136
  * Keep space when hidden.
137
+ * Hide element without shrinking its dimension.
118
138
  */
119
139
 
120
- .uk-visible-toggle:not(:hover):not(:focus) .uk-invisible-hover:not(:focus-within) { opacity: 0 !important; }
140
+ .uk-visible-toggle:not(:hover):not(:focus) .uk-invisible-hover:not(:focus-within) { clip-path: inset(50%) !important; }
121
141
 
122
142
 
123
143
  /* Based on Hover Capability of the Pointing Device
@@ -24,6 +24,7 @@ $dropbar-padding-horizontal-m: $global-medium-gutter !default;
24
24
  $dropbar-background: $global-muted-background !default;
25
25
  $dropbar-color: $global-color !default;
26
26
  $dropbar-color-mode: none !default;
27
+ $dropbar-focus-outline: $base-focus-outline !default;
27
28
 
28
29
  $dropbar-large-padding-top: 40px !default;
29
30
  $dropbar-large-padding-bottom: $dropbar-large-padding-top !default;
@@ -82,6 +83,11 @@ $dropbar-large-padding-bottom: $dropbar-large-padding-top !def
82
83
  @if ( $dropbar-color-mode == light ) { .uk-dropbar { @extend .uk-light !optional;} }
83
84
  @if ( $dropbar-color-mode == dark ) { .uk-dropbar { @extend .uk-dark !optional;} }
84
85
 
86
+ .uk-dropbar :focus-visible {
87
+ outline-color: $dropbar-focus-outline !important;
88
+ }
89
+
90
+
85
91
  /* Size modifier
86
92
  ========================================================================== */
87
93
 
@@ -22,6 +22,7 @@ $dropdown-padding: 15px !default;
22
22
  $dropdown-background: $global-muted-background !default;
23
23
  $dropdown-color: $global-color !default;
24
24
  $dropdown-color-mode: none !default;
25
+ $dropdown-focus-outline: $base-focus-outline !default;
25
26
 
26
27
  $dropdown-large-padding: 40px !default;
27
28
 
@@ -79,6 +80,10 @@ $dropdown-nav-sublist-item-hover-color: $global-color !default;
79
80
  @if ( $dropdown-color-mode == light ) { .uk-dropdown { @extend .uk-light !optional;} }
80
81
  @if ( $dropdown-color-mode == dark ) { .uk-dropdown { @extend .uk-dark !optional;} }
81
82
 
83
+ .uk-dropdown :focus-visible {
84
+ outline-color: $dropdown-focus-outline !important;
85
+ }
86
+
82
87
 
83
88
  /* Size modifier
84
89
  ========================================================================== */
@@ -67,6 +67,7 @@ $navbar-dropdown-padding: 15px !default;
67
67
  $navbar-dropdown-background: $global-muted-background !default;
68
68
  $navbar-dropdown-color: $global-color !default;
69
69
  $navbar-dropdown-color-mode: none !default;
70
+ $navbar-dropdown-focus-outline: $base-focus-outline !default;
70
71
  $navbar-dropdown-grid-gutter-horizontal: $global-gutter !default;
71
72
  $navbar-dropdown-grid-gutter-vertical: $navbar-dropdown-grid-gutter-horizontal !default;
72
73
 
@@ -401,6 +402,10 @@ $navbar-dropdown-nav-sublist-item-active-color: $global-emphasis-color !default
401
402
  @if ( $navbar-dropdown-color-mode == light ) { .uk-navbar-dropdown { @extend .uk-light !optional;} }
402
403
  @if ( $navbar-dropdown-color-mode == dark ) { .uk-navbar-dropdown { @extend .uk-dark !optional;} }
403
404
 
405
+ .uk-navbar-dropdown :focus-visible {
406
+ outline-color: $navbar-dropdown-focus-outline !important;
407
+ }
408
+
404
409
  /*
405
410
  * Grid
406
411
  * Adopts `uk-grid`
@@ -4,6 +4,7 @@
4
4
  // Component: `uk-hidden-*`
5
5
  // `uk-visible-*`
6
6
  // `uk-invisible`
7
+ // `uk-hidden-visually`
7
8
  // `uk-visible-toggle`
8
9
  // `uk-hidden-hover`
9
10
  // `uk-invisible-hover`
@@ -96,28 +97,47 @@
96
97
  ========================================================================== */
97
98
 
98
99
  /*
99
- * Can't use `display: none` nor `visibility: hidden` because both are not focusable.
100
+ * Mind that `display: none`, `visibility: hidden` and `opacity: 0`
101
+ * remove the element from the accessibility tree and that
102
+ * `display: none` and `visibility: hidden` are not focusable.
103
+ *
100
104
  * The target stays visible if any element within receives focus through keyboard.
101
105
  */
102
106
 
103
107
  /*
104
- * Discard space when hidden.
108
+ * Remove space when hidden.
109
+ * 1. Remove from document flow.
110
+ * 2. Hide element and shrink its dimension. Can't use zero dimensions together
111
+ * with `overflow: hidden` it would remove it from the accessibility tree.
112
+ * 3. Hide the single rendered pixel.
113
+ * 4. Prevent text wrapping caused by `width: 1px` because it has side effects on vocalisation
114
+ * by screen readers and the visual tracking indicator of other assistive technologies.
105
115
  */
106
116
 
117
+ .uk-hidden-visually:not(:focus):not(:active):not(:focus-within),
107
118
  .uk-visible-toggle:not(:hover):not(:focus) .uk-hidden-hover:not(:focus-within) {
119
+ /* 1 */
108
120
  position: absolute !important;
109
- width: 0 !important;
110
- height: 0 !important;
121
+ /* 2 */
122
+ width: 1px !important;
123
+ height: 1px !important;
111
124
  padding: 0 !important;
125
+ border: 0 !important;
112
126
  margin: 0 !important;
113
127
  overflow: hidden !important;
128
+ /* 3 */
129
+ clip-path: inset(50%) !important;
130
+ /* 4 */
131
+ white-space: nowrap !important;
132
+
114
133
  }
115
134
 
116
135
  /*
117
136
  * Keep space when hidden.
137
+ * Hide element without shrinking its dimension.
118
138
  */
119
139
 
120
- .uk-visible-toggle:not(:hover):not(:focus) .uk-invisible-hover:not(:focus-within) { opacity: 0 !important; }
140
+ .uk-visible-toggle:not(:hover):not(:focus) .uk-invisible-hover:not(:focus-within) { clip-path: inset(50%) !important; }
121
141
 
122
142
 
123
143
  /* Based on Hover Capability of the Pointing Device
@@ -273,7 +273,6 @@
273
273
  // Focus
274
274
  //
275
275
 
276
- :focus { outline-color: $inverse-base-focus-outline; }
277
276
  :focus-visible { outline-color: $inverse-base-focus-outline; }
278
277
 
279
278
  }
@@ -210,7 +210,6 @@
210
210
  // Focus
211
211
  //
212
212
 
213
- :focus { outline-color: $inverse-base-focus-outline; }
214
213
  :focus-visible { outline-color: $inverse-base-focus-outline; }
215
214
 
216
215
  }
@@ -379,6 +379,7 @@ $dropbar-padding-horizontal-m: $global-medium-gutter !default;
379
379
  $dropbar-background: $global-background !default;
380
380
  $dropbar-color: $global-color !default;
381
381
  $dropbar-color-mode: none !default;
382
+ $dropbar-focus-outline: $base-focus-outline !default;
382
383
  $dropbar-large-padding-top: 40px !default;
383
384
  $dropbar-large-padding-bottom: $dropbar-large-padding-top !default;
384
385
  $dropdown-margin: $global-small-margin !default;
@@ -388,6 +389,7 @@ $dropdown-padding: 25px !default;
388
389
  $dropdown-background: $global-background !default;
389
390
  $dropdown-color: $global-color !default;
390
391
  $dropdown-color-mode: none !default;
392
+ $dropdown-focus-outline: $base-focus-outline !default;
391
393
  $dropdown-large-padding: 40px !default;
392
394
  $dropdown-dropbar-padding-top: 5px !default;
393
395
  $dropdown-dropbar-padding-bottom: $dropdown-padding !default;
@@ -811,6 +813,7 @@ $navbar-dropdown-padding: 25px !default;
811
813
  $navbar-dropdown-background: $global-background !default;
812
814
  $navbar-dropdown-color: $global-color !default;
813
815
  $navbar-dropdown-color-mode: none !default;
816
+ $navbar-dropdown-focus-outline: $base-focus-outline !default;
814
817
  $navbar-dropdown-grid-gutter-horizontal: $global-gutter !default;
815
818
  $navbar-dropdown-grid-gutter-vertical: $navbar-dropdown-grid-gutter-horizontal !default;
816
819
  $navbar-dropdown-large-shift-margin: 0 !default;
@@ -378,6 +378,7 @@ $dropbar-padding-horizontal-m: $global-medium-gutter !default;
378
378
  $dropbar-background: $global-muted-background !default;
379
379
  $dropbar-color: $global-color !default;
380
380
  $dropbar-color-mode: none !default;
381
+ $dropbar-focus-outline: $base-focus-outline !default;
381
382
  $dropbar-large-padding-top: 40px !default;
382
383
  $dropbar-large-padding-bottom: $dropbar-large-padding-top !default;
383
384
  $dropdown-margin: $global-small-margin !default;
@@ -387,6 +388,7 @@ $dropdown-padding: 15px !default;
387
388
  $dropdown-background: $global-muted-background !default;
388
389
  $dropdown-color: $global-color !default;
389
390
  $dropdown-color-mode: none !default;
391
+ $dropdown-focus-outline: $base-focus-outline !default;
390
392
  $dropdown-large-padding: 40px !default;
391
393
  $dropdown-dropbar-padding-top: $dropdown-padding !default;
392
394
  $dropdown-dropbar-padding-bottom: $dropdown-padding !default;
@@ -809,6 +811,7 @@ $navbar-dropdown-padding: 15px !default;
809
811
  $navbar-dropdown-background: $global-muted-background !default;
810
812
  $navbar-dropdown-color: $global-color !default;
811
813
  $navbar-dropdown-color-mode: none !default;
814
+ $navbar-dropdown-focus-outline: $base-focus-outline !default;
812
815
  $navbar-dropdown-grid-gutter-horizontal: $global-gutter !default;
813
816
  $navbar-dropdown-grid-gutter-vertical: $navbar-dropdown-grid-gutter-horizontal !default;
814
817
  $navbar-dropdown-large-shift-margin: 0 !default;
package/tests/js/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /* global TESTS */
2
- import { addClass, css, on, prepend, removeClass, ucfirst } from 'uikit-util';
2
+ import { $$, addClass, css, on, prepend, removeClass, ucfirst } from 'uikit-util';
3
3
 
4
4
  const tests = TESTS;
5
5
  const storage = window.sessionStorage;
@@ -125,8 +125,7 @@ on(window, 'load', () =>
125
125
 
126
126
  if ($inverse.value) {
127
127
  removeClass(
128
- document.querySelectorAll('*'),
129
- 'uk-navbar-container',
128
+ $$('*'),
130
129
  'uk-card-default',
131
130
  'uk-card-muted',
132
131
  'uk-card-primary',
@@ -143,6 +142,8 @@ on(window, 'load', () =>
143
142
  'uk-overlay-primary'
144
143
  );
145
144
 
145
+ addClass($$('.uk-navbar-container'), 'uk-navbar-transparent');
146
+
146
147
  css(docEl, 'background', $inverse.value === 'dark' ? '#fff' : '#222');
147
148
  addClass($body, `uk-${$inverse.value}`);
148
149
  }