uikit 3.12.2 → 3.12.3-dev.8ce29ae1a

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 (90) hide show
  1. package/CHANGELOG.md +24 -2
  2. package/build/scss.js +9 -17
  3. package/dist/css/uikit-core-rtl.css +9 -81
  4. package/dist/css/uikit-core-rtl.min.css +1 -1
  5. package/dist/css/uikit-core.css +9 -81
  6. package/dist/css/uikit-core.min.css +1 -1
  7. package/dist/css/uikit-rtl.css +9 -81
  8. package/dist/css/uikit-rtl.min.css +1 -1
  9. package/dist/css/uikit.css +9 -81
  10. package/dist/css/uikit.min.css +1 -1
  11. package/dist/js/components/countdown.js +2 -2
  12. package/dist/js/components/countdown.min.js +1 -1
  13. package/dist/js/components/filter.js +1 -1
  14. package/dist/js/components/filter.min.js +1 -1
  15. package/dist/js/components/lightbox-panel.js +13 -2
  16. package/dist/js/components/lightbox-panel.min.js +1 -1
  17. package/dist/js/components/lightbox.js +15 -4
  18. package/dist/js/components/lightbox.min.js +1 -1
  19. package/dist/js/components/notification.js +1 -1
  20. package/dist/js/components/notification.min.js +1 -1
  21. package/dist/js/components/parallax.js +34 -8
  22. package/dist/js/components/parallax.min.js +1 -1
  23. package/dist/js/components/slider-parallax.js +30 -13
  24. package/dist/js/components/slider-parallax.min.js +1 -1
  25. package/dist/js/components/slider.js +14 -3
  26. package/dist/js/components/slider.min.js +1 -1
  27. package/dist/js/components/slideshow-parallax.js +30 -13
  28. package/dist/js/components/slideshow-parallax.min.js +1 -1
  29. package/dist/js/components/slideshow.js +13 -2
  30. package/dist/js/components/slideshow.min.js +1 -1
  31. package/dist/js/components/sortable.js +1 -1
  32. package/dist/js/components/sortable.min.js +1 -1
  33. package/dist/js/components/tooltip.js +12 -20
  34. package/dist/js/components/tooltip.min.js +1 -1
  35. package/dist/js/components/upload.js +1 -1
  36. package/dist/js/components/upload.min.js +1 -1
  37. package/dist/js/uikit-core.js +248 -199
  38. package/dist/js/uikit-core.min.js +1 -1
  39. package/dist/js/uikit-icons.js +1 -1
  40. package/dist/js/uikit-icons.min.js +1 -1
  41. package/dist/js/uikit.js +262 -211
  42. package/dist/js/uikit.min.js +1 -1
  43. package/package.json +1 -1
  44. package/src/js/api/hooks.js +3 -3
  45. package/src/js/api/state.js +25 -15
  46. package/src/js/components/countdown.js +1 -1
  47. package/src/js/components/lightbox.js +1 -1
  48. package/src/js/components/parallax.js +2 -1
  49. package/src/js/components/slider-parallax.js +6 -4
  50. package/src/js/components/slider.js +1 -1
  51. package/src/js/core/core.js +2 -17
  52. package/src/js/core/cover.js +3 -6
  53. package/src/js/core/drop.js +5 -10
  54. package/src/js/core/form-custom.js +6 -7
  55. package/src/js/core/gif.js +5 -3
  56. package/src/js/core/height-match.js +21 -1
  57. package/src/js/core/height-viewport.js +1 -6
  58. package/src/js/core/img.js +1 -2
  59. package/src/js/core/leader.js +7 -13
  60. package/src/js/core/margin.js +18 -1
  61. package/src/js/core/overflow-auto.js +8 -7
  62. package/src/js/core/scroll.js +6 -2
  63. package/src/js/core/scrollspy-nav.js +16 -16
  64. package/src/js/core/scrollspy.js +9 -15
  65. package/src/js/core/sticky.js +7 -3
  66. package/src/js/core/svg.js +16 -14
  67. package/src/js/core/toggle.js +16 -13
  68. package/src/js/core/video.js +2 -8
  69. package/src/js/mixin/media.js +29 -5
  70. package/src/js/mixin/position.js +10 -18
  71. package/src/js/mixin/resize.js +13 -0
  72. package/src/js/mixin/slider.js +2 -1
  73. package/src/js/util/class.js +1 -6
  74. package/src/js/util/mouse.js +1 -1
  75. package/src/js/util/observer.js +57 -20
  76. package/src/js/util/style.js +1 -1
  77. package/src/less/components/base.less +0 -19
  78. package/src/less/components/form.less +1 -9
  79. package/src/less/components/icon.less +6 -0
  80. package/src/less/components/list.less +1 -0
  81. package/src/less/components/search.less +0 -3
  82. package/src/less/components/utility.less +0 -9
  83. package/src/scss/components/base.scss +0 -19
  84. package/src/scss/components/form.scss +1 -7
  85. package/src/scss/components/icon.scss +6 -0
  86. package/src/scss/components/list.scss +1 -0
  87. package/src/scss/components/search.scss +0 -1
  88. package/src/scss/components/utility.scss +0 -9
  89. package/src/scss/mixins-theme.scss +0 -4
  90. package/src/scss/mixins.scss +0 -4
@@ -1,5 +1,6 @@
1
1
  import Class from '../mixin/class';
2
2
  import Media from '../mixin/media';
3
+ import Resize from '../mixin/resize';
3
4
  import {
4
5
  $,
5
6
  addClass,
@@ -32,7 +33,7 @@ import {
32
33
  } from 'uikit-util';
33
34
 
34
35
  export default {
35
- mixins: [Class, Media],
36
+ mixins: [Class, Media, Resize],
36
37
 
37
38
  props: {
38
39
  position: String,
@@ -75,6 +76,10 @@ export default {
75
76
  return query(widthElement, $el) || this.placeholder;
76
77
  },
77
78
 
79
+ resizeTargets() {
80
+ return document.documentElement;
81
+ },
82
+
78
83
  isActive: {
79
84
  get() {
80
85
  return hasClass(this.selTarget, this.clsActive);
@@ -186,7 +191,6 @@ export default {
186
191
 
187
192
  const overflow = Math.max(0, height + offset - windowHeight);
188
193
  const topOffset = getOffset(referenceElement).top;
189
- const offsetParentTop = getOffset(referenceElement.offsetParent).top;
190
194
 
191
195
  const top = parseProp(this.top, this.$el, topOffset);
192
196
  const bottom = parseProp(this.bottom, this.$el, topOffset + height, true);
@@ -202,7 +206,6 @@ export default {
202
206
  offset,
203
207
  overflow,
204
208
  topOffset,
205
- offsetParentTop,
206
209
  height,
207
210
  margin,
208
211
  width: dimensions(isVisible(this.widthElement) ? this.widthElement : this.$el)
@@ -244,6 +247,7 @@ export default {
244
247
  prevDir,
245
248
  scroll,
246
249
  prevScroll,
250
+ offsetParentTop: getOffset(this.$el.offsetParent).top,
247
251
  overflowScroll: clamp(
248
252
  overflowScroll + clamp(scroll, start, end) - clamp(prevScroll, start, end),
249
253
  0,
@@ -6,10 +6,10 @@ import {
6
6
  attr,
7
7
  includes,
8
8
  isTag,
9
- isVisible,
10
9
  isVoidElement,
11
10
  memoize,
12
11
  noop,
12
+ observeIntersection,
13
13
  once,
14
14
  remove,
15
15
  removeAttr,
@@ -59,10 +59,24 @@ export default {
59
59
  }
60
60
 
61
61
  this.applyAttributes(svg, el);
62
- this.$emit();
62
+
63
63
  return (this.svgEl = svg);
64
64
  }
65
65
  }, noop);
66
+
67
+ if (this.strokeAnimation) {
68
+ this.svg.then((el) => {
69
+ if (this._connected) {
70
+ applyAnimation(el);
71
+ this.registerObserver(
72
+ observeIntersection(el, (records, observer) => {
73
+ applyAnimation(el);
74
+ observer.disconnect();
75
+ })
76
+ );
77
+ }
78
+ });
79
+ }
66
80
  },
67
81
 
68
82
  disconnected() {
@@ -82,18 +96,6 @@ export default {
82
96
  this.svg = null;
83
97
  },
84
98
 
85
- update: {
86
- read() {
87
- return !!(this.strokeAnimation && this.svgEl && isVisible(this.svgEl));
88
- },
89
-
90
- write() {
91
- applyAnimation(this.svgEl);
92
- },
93
-
94
- type: ['resize'],
95
- },
96
-
97
99
  methods: {
98
100
  async getSvg() {
99
101
  if (isTag(this.$el, 'img') && !this.$el.complete && this.$el.loading === 'lazy') {
@@ -189,22 +189,25 @@ export default {
189
189
  }
190
190
  },
191
191
  },
192
- ],
193
192
 
194
- update: {
195
- read() {
196
- return includes(this.mode, 'media') && this.media ? { match: this.matchMedia } : false;
197
- },
193
+ {
194
+ name: 'mediachange',
198
195
 
199
- write({ match }) {
200
- const toggled = this.isToggled(this.target);
201
- if (match ? !toggled : toggled) {
202
- this.toggle();
203
- }
204
- },
196
+ filter() {
197
+ return includes(this.mode, 'media');
198
+ },
205
199
 
206
- events: ['resize'],
207
- },
200
+ el() {
201
+ return this.target;
202
+ },
203
+
204
+ handler(e, mediaObj) {
205
+ if (mediaObj.matches ^ this.isToggled(this.target)) {
206
+ this.toggle();
207
+ }
208
+ },
209
+ },
210
+ ],
208
211
 
209
212
  methods: {
210
213
  async toggle(type) {
@@ -23,13 +23,9 @@ export default {
23
23
  autoplay: true,
24
24
  },
25
25
 
26
- computed: {
27
- inView({ autoplay }) {
28
- return autoplay === 'inview';
29
- },
30
- },
31
-
32
26
  connected() {
27
+ this.inView = this.autoplay === 'inview';
28
+
33
29
  if (this.inView && !hasAttr(this.$el, 'preload')) {
34
30
  this.$el.preload = 'none';
35
31
  }
@@ -60,7 +56,5 @@ export default {
60
56
  play(this.$el);
61
57
  }
62
58
  },
63
-
64
- events: ['resize', 'scroll'],
65
59
  },
66
60
  };
@@ -1,4 +1,13 @@
1
- import { getCssVar, isString, toFloat } from 'uikit-util';
1
+ import {
2
+ getCssVar,
3
+ isString,
4
+ on,
5
+ trigger,
6
+ toFloat,
7
+ startsWith,
8
+ isNumeric,
9
+ createEvent,
10
+ } from 'uikit-util';
2
11
 
3
12
  export default {
4
13
  props: {
@@ -11,15 +20,30 @@ export default {
11
20
 
12
21
  computed: {
13
22
  matchMedia() {
14
- const media = toMedia(this.media);
15
- return !media || window.matchMedia(media).matches;
23
+ return this.mediaObj?.matches;
16
24
  },
17
25
  },
26
+
27
+ connected() {
28
+ const media = toMedia(this.media);
29
+ this.mediaObj = window.matchMedia(media);
30
+ const handler = () =>
31
+ trigger(this.$el, createEvent('mediachange', false, true, [this.mediaObj]));
32
+ this.offMediaObj = on(this.mediaObj, 'change', () => {
33
+ handler();
34
+ this.$emit('resize');
35
+ });
36
+ handler();
37
+ },
38
+
39
+ disconnected() {
40
+ this.offMediaObj?.();
41
+ },
18
42
  };
19
43
 
20
44
  function toMedia(value) {
21
45
  if (isString(value)) {
22
- if (value[0] === '@') {
46
+ if (startsWith(value, '@')) {
23
47
  const name = `breakpoint-${value.substr(1)}`;
24
48
  value = toFloat(getCssVar(name));
25
49
  } else if (isNaN(value)) {
@@ -27,5 +51,5 @@ function toMedia(value) {
27
51
  }
28
52
  }
29
53
 
30
- return value && !isNaN(value) ? `(min-width: ${value}px)` : false;
54
+ return value && isNumeric(value) ? `(min-width: ${value}px)` : '';
31
55
  }
@@ -24,18 +24,10 @@ export default {
24
24
  clsPos: '',
25
25
  },
26
26
 
27
- computed: {
28
- pos({ pos }) {
29
- return pos.split('-').concat('center').slice(0, 2);
30
- },
31
-
32
- dir() {
33
- return this.pos[0];
34
- },
35
-
36
- align() {
37
- return this.pos[1];
38
- },
27
+ connected() {
28
+ this.pos = this.pos.split('-').concat('center').slice(0, 2);
29
+ this.dir = this.pos[0];
30
+ this.align = this.pos[1];
39
31
  },
40
32
 
41
33
  methods: {
@@ -44,6 +36,8 @@ export default {
44
36
 
45
37
  let { offset } = this;
46
38
  const axis = this.getAxis();
39
+ const dir = this.pos[0];
40
+ const align = this.pos[1];
47
41
 
48
42
  if (!isNumeric(offset)) {
49
43
  const node = $(offset);
@@ -56,13 +50,11 @@ export default {
56
50
  const { x, y } = positionAt(
57
51
  element,
58
52
  target,
53
+ axis === 'x' ? `${flipPosition(dir)} ${align}` : `${align} ${flipPosition(dir)}`,
54
+ axis === 'x' ? `${dir} ${align}` : `${align} ${dir}`,
59
55
  axis === 'x'
60
- ? `${flipPosition(this.dir)} ${this.align}`
61
- : `${this.align} ${flipPosition(this.dir)}`,
62
- axis === 'x' ? `${this.dir} ${this.align}` : `${this.align} ${this.dir}`,
63
- axis === 'x'
64
- ? `${this.dir === 'left' ? -offset : offset}`
65
- : ` ${this.dir === 'top' ? -offset : offset}`,
56
+ ? `${dir === 'left' ? -offset : offset}`
57
+ : ` ${dir === 'top' ? -offset : offset}`,
66
58
  null,
67
59
  this.flip,
68
60
  boundary
@@ -0,0 +1,13 @@
1
+ import { observeResize } from 'uikit-util';
2
+
3
+ export default {
4
+ computed: {
5
+ resizeTargets() {
6
+ return this.$el;
7
+ },
8
+ },
9
+
10
+ connected() {
11
+ this.registerObserver(observeResize(this.resizeTargets, () => this.$emit('resize')));
12
+ },
13
+ };
@@ -1,3 +1,4 @@
1
+ import Resize from './resize';
1
2
  import SliderAutoplay from './slider-autoplay';
2
3
  import SliderDrag from './slider-drag';
3
4
  import SliderNav from './slider-nav';
@@ -15,7 +16,7 @@ import {
15
16
  } from 'uikit-util';
16
17
 
17
18
  export default {
18
- mixins: [SliderAutoplay, SliderDrag, SliderNav],
19
+ mixins: [SliderAutoplay, SliderDrag, SliderNav, Resize],
19
20
 
20
21
  props: {
21
22
  clsActivated: Boolean,
@@ -20,12 +20,7 @@ export function replaceClass(element, ...args) {
20
20
 
21
21
  export function hasClass(element, cls) {
22
22
  [cls] = getClasses(cls);
23
- for (const node of toNodes(element)) {
24
- if (cls && node.classList.contains(cls)) {
25
- return true;
26
- }
27
- }
28
- return false;
23
+ return !!cls && toNodes(element).some((node) => node.classList.contains(cls));
29
24
  }
30
25
 
31
26
  export function toggleClass(element, cls, force) {
@@ -25,7 +25,7 @@ MouseTracker.prototype = {
25
25
  },
26
26
 
27
27
  cancel() {
28
- this.unbind && this.unbind();
28
+ this.unbind?.();
29
29
  this.interval && clearInterval(this.interval);
30
30
  },
31
31
 
@@ -1,33 +1,70 @@
1
+ import { on } from './event';
1
2
  import { toNodes } from './lang';
3
+ import { fastdom } from './fastdom';
2
4
 
3
- // Old chromium based browsers (UC Browser) did not implement `isIntersecting`
4
- export const hasIntersectionObserver =
5
- window.IntersectionObserver && 'isIntersecting' in IntersectionObserverEntry.prototype;
6
5
  export function observeIntersection(targets, cb, options, intersecting = true) {
7
- if (!hasIntersectionObserver) {
8
- return;
9
- }
10
-
11
- const observer = new IntersectionObserver((entries, observer) => {
12
- if (!intersecting || entries.some((entry) => entry.isIntersecting)) {
13
- cb(entries, observer);
14
- }
15
- }, options);
16
- for (const el of toNodes(targets)) {
17
- observer.observe(el);
18
- }
19
- return observer;
6
+ return observe(
7
+ IntersectionObserver,
8
+ targets,
9
+ intersecting
10
+ ? (entries, observer) => {
11
+ if (entries.some((entry) => entry.isIntersecting)) {
12
+ cb(entries, observer);
13
+ }
14
+ }
15
+ : cb,
16
+ options
17
+ );
20
18
  }
21
19
 
22
20
  const hasResizeObserver = window.ResizeObserver;
23
21
  export function observeResize(targets, cb, options = { box: 'border-box' }) {
24
- if (!hasResizeObserver) {
22
+ if (hasResizeObserver) {
23
+ return observe(ResizeObserver, targets, cb, options);
24
+ }
25
+
26
+ // Fallback Safari < 13.1
27
+ initResizeListener();
28
+ listeners.add(cb);
29
+
30
+ return {
31
+ disconnect() {
32
+ listeners.delete(cb);
33
+ },
34
+ };
35
+ }
36
+
37
+ let listeners;
38
+ function initResizeListener() {
39
+ if (listeners) {
25
40
  return;
26
41
  }
27
42
 
28
- const observer = new ResizeObserver((entries, observer) => {
29
- cb(entries, observer);
30
- });
43
+ listeners = new Set();
44
+
45
+ // throttle 'resize'
46
+ let pendingResize;
47
+ const handleResize = () => {
48
+ if (pendingResize) {
49
+ return;
50
+ }
51
+ pendingResize = true;
52
+ fastdom.read(() => (pendingResize = false));
53
+ for (const listener of listeners) {
54
+ listener();
55
+ }
56
+ };
57
+
58
+ on(window, 'load resize', handleResize);
59
+ on(document, 'loadedmetadata load', handleResize, true);
60
+ }
61
+
62
+ export function observeMutation(targets, cb, options) {
63
+ return observe(MutationObserver, targets, cb, options);
64
+ }
65
+
66
+ function observe(Observer, targets, cb, options) {
67
+ const observer = new Observer(cb);
31
68
  for (const el of toNodes(targets)) {
32
69
  observer.observe(el, options);
33
70
  }
@@ -80,7 +80,7 @@ export function getCssVar(name) {
80
80
  // https://drafts.csswg.org/cssom/#dom-cssstyledeclaration-setproperty
81
81
  export const propName = memoize((name) => vendorPropName(name));
82
82
 
83
- const cssPrefixes = ['webkit', 'moz', 'ms'];
83
+ const cssPrefixes = ['webkit', 'moz'];
84
84
 
85
85
  function vendorPropName(name) {
86
86
  name = hyphenate(name);
@@ -504,27 +504,8 @@ pre code { font-family: @base-pre-font-family; }
504
504
  /* Focus
505
505
  ========================================================================== */
506
506
 
507
- /*
508
- * Safari doesn't support `:focus-visible` yet. It also doesn't set focus if clicking a button or anchor.
509
- * 1. Fallback: Remove `:focus` for a negative tabindexes.
510
- * 2. Fallback: Set `:focus` style but not for negative tabindexes.
511
- * 3. Fallback: Remove `:focus` style for browsers which support `:focus-visible`.
512
- * 4. Set `:focus-visible` style for browsers which support it.
513
- */
514
-
515
- /* 1 */
516
507
  :focus { outline: none; }
517
508
 
518
- /* 2 */
519
- :focus:not([tabindex^='-']) {
520
- outline: @base-focus-outline-width @base-focus-outline-style @base-focus-outline;
521
- outline-offset: @base-focus-outline-offset;
522
- }
523
-
524
- /* 3 */
525
- :focus:not(:focus-visible) { outline: none; }
526
-
527
- /* 4 */
528
509
  :focus-visible { outline: @base-focus-outline-width @base-focus-outline-style @base-focus-outline; }
529
510
 
530
511
 
@@ -310,10 +310,8 @@
310
310
  * Placeholder
311
311
  */
312
312
 
313
- .uk-input::-ms-input-placeholder { color: @form-placeholder-color !important; }
314
313
  .uk-input::placeholder { color: @form-placeholder-color; }
315
314
 
316
- .uk-textarea::-ms-input-placeholder { color: @form-placeholder-color !important; }
317
315
  .uk-textarea::placeholder { color: @form-placeholder-color; }
318
316
 
319
317
 
@@ -423,8 +421,7 @@ select.uk-form-width-xsmall { width: (@form-width-xsmall + 25px); }
423
421
  /*
424
422
  * 1. Remove default style. Also works in Firefox
425
423
  * 2. Style
426
- * 3. Remove default style in IE 10/11
427
- * 4. Set `color` for options in the select dropdown, because the inherited `color` might be too light.
424
+ * 3. Set `color` for options in the select dropdown, because the inherited `color` might be too light.
428
425
  */
429
426
 
430
427
  .uk-select:not([multiple]):not([size]) {
@@ -439,9 +436,6 @@ select.uk-form-width-xsmall { width: (@form-width-xsmall + 25px); }
439
436
  }
440
437
 
441
438
  /* 3 */
442
- .uk-select:not([multiple]):not([size])::-ms-expand { display: none; }
443
-
444
- /* 4 */
445
439
  .uk-select:not([multiple]):not([size]) option { color: @form-select-option-color; }
446
440
 
447
441
  /*
@@ -820,10 +814,8 @@ select.uk-form-width-xsmall { width: (@form-width-xsmall + 25px); }
820
814
  // Placeholder
821
815
  //
822
816
 
823
- .uk-input::-ms-input-placeholder { color: @inverse-form-placeholder-color !important; }
824
817
  .uk-input::placeholder { color: @inverse-form-placeholder-color; }
825
818
 
826
- .uk-textarea::-ms-input-placeholder { color: @inverse-form-placeholder-color !important; }
827
819
  .uk-textarea::placeholder { color: @inverse-form-placeholder-color; }
828
820
 
829
821
  //
@@ -107,15 +107,21 @@ button.uk-icon:not(:disabled) { cursor: pointer; }
107
107
 
108
108
  /*
109
109
  * Display images in icon dimensions
110
+ * 1. Required for `span` with background image
111
+ * 2. Required for `image`
110
112
  */
111
113
 
112
114
  .uk-icon-image {
113
115
  width: @icon-image-size;
114
116
  height: @icon-image-size;
117
+ /* 1 */
115
118
  background-position: 50% 50%;
116
119
  background-repeat: no-repeat;
117
120
  background-size: contain;
118
121
  vertical-align: middle;
122
+ /* 2 */
123
+ object-fit: scale-down;
124
+ max-width: none;
119
125
  }
120
126
 
121
127
 
@@ -133,6 +133,7 @@
133
133
 
134
134
  .uk-list-bullet > ::before {
135
135
  content: "";
136
+ display: list-item;
136
137
  position: relative;
137
138
  left: -@list-padding-left;
138
139
  width: @list-padding-left;
@@ -129,7 +129,6 @@
129
129
  .uk-search-input:focus { outline: none; }
130
130
 
131
131
  /* Placeholder */
132
- .uk-search-input:-ms-input-placeholder { color: @search-placeholder-color !important; }
133
132
  .uk-search-input::placeholder { color: @search-placeholder-color; }
134
133
 
135
134
 
@@ -334,10 +333,8 @@
334
333
 
335
334
  .uk-search-input { color: @inverse-search-color; }
336
335
 
337
- .uk-search-input:-ms-input-placeholder { color: @inverse-search-placeholder-color !important; }
338
336
  .uk-search-input::placeholder { color: @inverse-search-placeholder-color; }
339
337
 
340
-
341
338
  //
342
339
  // Icon
343
340
  //
@@ -358,8 +358,6 @@
358
358
  * https://bugzilla.mozilla.org/show_bug.cgi?id=214004
359
359
  * 2. In Firefox, a floating `::first-letter` doesn't have a line box and there for no `line-height`
360
360
  * https://bugzilla.mozilla.org/show_bug.cgi?id=317933
361
- * 3. Caused by 1.: Edge creates two nested `::first-letter` containers, one for each selector
362
- * This doubles the `font-size` exponential when using the `em` unit.
363
361
  */
364
362
 
365
363
  .uk-dropcap::first-letter,
@@ -381,13 +379,6 @@
381
379
 
382
380
  }
383
381
 
384
- /* 3 */
385
- @supports (-ms-ime-align: auto) {
386
-
387
- .uk-dropcap > p:first-of-type::first-letter { font-size: 1em; }
388
-
389
- }
390
-
391
382
 
392
383
  /* Logo
393
384
  ========================================================================== */
@@ -504,27 +504,8 @@ pre code { font-family: $base-pre-font-family; }
504
504
  /* Focus
505
505
  ========================================================================== */
506
506
 
507
- /*
508
- * Safari doesn't support `:focus-visible` yet. It also doesn't set focus if clicking a button or anchor.
509
- * 1. Fallback: Remove `:focus` for a negative tabindexes.
510
- * 2. Fallback: Set `:focus` style but not for negative tabindexes.
511
- * 3. Fallback: Remove `:focus` style for browsers which support `:focus-visible`.
512
- * 4. Set `:focus-visible` style for browsers which support it.
513
- */
514
-
515
- /* 1 */
516
507
  :focus { outline: none; }
517
508
 
518
- /* 2 */
519
- :focus:not([tabindex^='-']) {
520
- outline: $base-focus-outline-width $base-focus-outline-style $base-focus-outline;
521
- outline-offset: $base-focus-outline-offset;
522
- }
523
-
524
- /* 3 */
525
- :focus:not(:focus-visible) { outline: none; }
526
-
527
- /* 4 */
528
509
  :focus-visible { outline: $base-focus-outline-width $base-focus-outline-style $base-focus-outline; }
529
510
 
530
511
 
@@ -310,10 +310,8 @@ $internal-form-checkbox-indeterminate-image: "data:image/svg+xml;charset=UTF-8,%
310
310
  * Placeholder
311
311
  */
312
312
 
313
- .uk-input::-ms-input-placeholder { color: $form-placeholder-color !important; }
314
313
  .uk-input::placeholder { color: $form-placeholder-color; }
315
314
 
316
- .uk-textarea::-ms-input-placeholder { color: $form-placeholder-color !important; }
317
315
  .uk-textarea::placeholder { color: $form-placeholder-color; }
318
316
 
319
317
 
@@ -423,8 +421,7 @@ select.uk-form-width-xsmall { width: ($form-width-xsmall + 25px); }
423
421
  /*
424
422
  * 1. Remove default style. Also works in Firefox
425
423
  * 2. Style
426
- * 3. Remove default style in IE 10/11
427
- * 4. Set `color` for options in the select dropdown, because the inherited `color` might be too light.
424
+ * 3. Set `color` for options in the select dropdown, because the inherited `color` might be too light.
428
425
  */
429
426
 
430
427
  .uk-select:not([multiple]):not([size]) {
@@ -439,9 +436,6 @@ select.uk-form-width-xsmall { width: ($form-width-xsmall + 25px); }
439
436
  }
440
437
 
441
438
  /* 3 */
442
- .uk-select:not([multiple]):not([size])::-ms-expand { display: none; }
443
-
444
- /* 4 */
445
439
  .uk-select:not([multiple]):not([size]) option { color: $form-select-option-color; }
446
440
 
447
441
  /*
@@ -107,15 +107,21 @@ button.uk-icon:not(:disabled) { cursor: pointer; }
107
107
 
108
108
  /*
109
109
  * Display images in icon dimensions
110
+ * 1. Required for `span` with background image
111
+ * 2. Required for `image`
110
112
  */
111
113
 
112
114
  .uk-icon-image {
113
115
  width: $icon-image-size;
114
116
  height: $icon-image-size;
117
+ /* 1 */
115
118
  background-position: 50% 50%;
116
119
  background-repeat: no-repeat;
117
120
  background-size: contain;
118
121
  vertical-align: middle;
122
+ /* 2 */
123
+ object-fit: scale-down;
124
+ max-width: none;
119
125
  }
120
126
 
121
127
 
@@ -133,6 +133,7 @@ $internal-list-bullet-image: "data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D
133
133
 
134
134
  .uk-list-bullet > ::before {
135
135
  content: "";
136
+ display: list-item;
136
137
  position: relative;
137
138
  left: (-$list-padding-left);
138
139
  width: $list-padding-left;
@@ -129,7 +129,6 @@ $search-toggle-hover-color: $global-color !default;
129
129
  .uk-search-input:focus { outline: none; }
130
130
 
131
131
  /* Placeholder */
132
- .uk-search-input:-ms-input-placeholder { color: $search-placeholder-color !important; }
133
132
  .uk-search-input::placeholder { color: $search-placeholder-color; }
134
133
 
135
134