uikit 3.11.2-dev.9433cd5fd → 3.11.2-dev.ae39176f2

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 (63) hide show
  1. package/CHANGELOG.md +3 -11
  2. package/build/scss.js +1 -1
  3. package/dist/css/uikit-core-rtl.css +42 -17
  4. package/dist/css/uikit-core-rtl.min.css +1 -1
  5. package/dist/css/uikit-core.css +42 -17
  6. package/dist/css/uikit-core.min.css +1 -1
  7. package/dist/css/uikit-rtl.css +42 -17
  8. package/dist/css/uikit-rtl.min.css +1 -1
  9. package/dist/css/uikit.css +42 -17
  10. package/dist/css/uikit.min.css +1 -1
  11. package/dist/js/components/countdown.js +1 -1
  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 +1 -1
  16. package/dist/js/components/lightbox-panel.min.js +1 -1
  17. package/dist/js/components/lightbox.js +1 -1
  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 +1 -1
  22. package/dist/js/components/parallax.min.js +1 -1
  23. package/dist/js/components/slider-parallax.js +1 -1
  24. package/dist/js/components/slider-parallax.min.js +1 -1
  25. package/dist/js/components/slider.js +1 -1
  26. package/dist/js/components/slider.min.js +1 -1
  27. package/dist/js/components/slideshow-parallax.js +1 -1
  28. package/dist/js/components/slideshow-parallax.min.js +1 -1
  29. package/dist/js/components/slideshow.js +1 -1
  30. package/dist/js/components/slideshow.min.js +1 -1
  31. package/dist/js/components/sortable.js +5 -4
  32. package/dist/js/components/sortable.min.js +1 -1
  33. package/dist/js/components/tooltip.js +1 -1
  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 +147 -124
  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 +151 -127
  42. package/dist/js/uikit.min.js +1 -1
  43. package/package.json +1 -1
  44. package/src/js/api/component.js +1 -1
  45. package/src/js/api/state.js +16 -20
  46. package/src/js/components/sortable.js +4 -3
  47. package/src/js/core/img.js +99 -96
  48. package/src/js/core/sticky.js +6 -4
  49. package/src/js/util/options.js +4 -4
  50. package/src/less/components/flex.less +0 -9
  51. package/src/less/components/navbar.less +0 -7
  52. package/src/less/components/utility.less +22 -0
  53. package/src/scss/components/flex.scss +0 -9
  54. package/src/scss/components/form.scss +3 -3
  55. package/src/scss/components/icon.scss +2 -2
  56. package/src/scss/components/navbar.scss +0 -7
  57. package/src/scss/components/search.scss +1 -1
  58. package/src/scss/components/utility.scss +22 -0
  59. package/src/scss/variables-theme.scss +6 -6
  60. package/src/scss/variables.scss +6 -6
  61. package/tests/image.html +38 -22
  62. package/tests/images/test.avif +0 -0
  63. package/tests/images/test.webp +0 -0
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.11.2-dev.9433cd5fd",
5
+ "version": "3.11.2-dev.ae39176f2",
6
6
  "main": "dist/js/uikit.js",
7
7
  "style": "dist/css/uikit.css",
8
8
  "sideEffects": [
@@ -28,7 +28,7 @@ export default function (UIkit) {
28
28
 
29
29
  return component.options.functional
30
30
  ? new component({data: isPlainObject(element) ? element : [...arguments]})
31
- : !element ? init(element) : $$(element).map(init)[0];
31
+ : element ? $$(element).map(init)[0] : init();
32
32
 
33
33
  function init(element) {
34
34
 
@@ -1,4 +1,4 @@
1
- import {assign, camelize, data as getData, hasOwn, hyphenate, isArray, isEmpty, isFunction, isNumeric, isPlainObject, isString, isUndefined, mergeOptions, on, parseOptions, startsWith, toBoolean, toNumber} from 'uikit-util';
1
+ import {assign, camelize, data as getData, hasOwn, hyphenate, isArray, isFunction, isNumeric, isPlainObject, isString, isUndefined, mergeOptions, on, parseOptions, startsWith, toBoolean, toNumber} from 'uikit-util';
2
2
 
3
3
  export default function (UIkit) {
4
4
 
@@ -250,27 +250,23 @@ export default function (UIkit) {
250
250
  : [value];
251
251
  }
252
252
 
253
- function normalizeData({data}, {args, props = {}}) {
254
- data = isArray(data)
255
- ? !isEmpty(args)
256
- ? data.slice(0, args.length).reduce((data, value, index) => {
257
- if (isPlainObject(value)) {
258
- assign(data, value);
259
- } else {
260
- data[args[index]] = value;
261
- }
262
- return data;
263
- }, {})
264
- : undefined
265
- : data;
266
-
267
- if (data) {
268
- for (const key in data) {
269
- if (isUndefined(data[key])) {
270
- delete data[key];
253
+ function normalizeData({data = {}}, {args = [], props = {}}) {
254
+ if (isArray(data)) {
255
+ data = data.slice(0, args.length).reduce((data, value, index) => {
256
+ if (isPlainObject(value)) {
257
+ assign(data, value);
271
258
  } else {
272
- data[key] = props[key] ? coerce(props[key], data[key]) : data[key];
259
+ data[args[index]] = value;
273
260
  }
261
+ return data;
262
+ }, {});
263
+ }
264
+
265
+ for (const key in data) {
266
+ if (isUndefined(data[key])) {
267
+ delete data[key];
268
+ } else if (props[key]) {
269
+ data[key] = coerce(props[key], data[key]);
274
270
  }
275
271
  }
276
272
 
@@ -332,11 +332,12 @@ function appendDrag(container, element) {
332
332
  const clone = append(container, element.outerHTML.replace(/(^<)(?:li|tr)|(?:li|tr)(\/>$)/g, '$1div$2'));
333
333
 
334
334
  css(clone, 'margin', '0', 'important');
335
- css(clone, assign({
335
+ css(clone, {
336
336
  boxSizing: 'border-box',
337
337
  width: element.offsetWidth,
338
- height: element.offsetHeight
339
- }, css(element, ['paddingLeft', 'paddingRight', 'paddingTop', 'paddingBottom'])));
338
+ height: element.offsetHeight,
339
+ padding: css(element, 'padding')
340
+ });
340
341
 
341
342
  height(clone.firstElementChild, height(element.firstElementChild));
342
343
 
@@ -1,4 +1,4 @@
1
- import {append, attr, children, createEvent, css, data, escape, fragment, includes, isArray, isEmpty, isUndefined, parent, parseOptions, queryAll, startsWith, toFloat, toPx, trigger} from 'uikit-util';
1
+ import {createEvent, css, Dimensions, escape, getImage, includes, isUndefined, queryAll, startsWith, toFloat, toPx, trigger} from 'uikit-util';
2
2
 
3
3
  export default {
4
4
 
@@ -6,7 +6,10 @@ export default {
6
6
 
7
7
  props: {
8
8
  dataSrc: String,
9
- dataSources: String,
9
+ dataSrcset: Boolean,
10
+ sizes: String,
11
+ width: Number,
12
+ height: Number,
10
13
  offsetTop: String,
11
14
  offsetLeft: String,
12
15
  target: String
@@ -14,7 +17,10 @@ export default {
14
17
 
15
18
  data: {
16
19
  dataSrc: '',
17
- dataSources: [],
20
+ dataSrcset: false,
21
+ sizes: false,
22
+ width: false,
23
+ height: false,
18
24
  offsetTop: '50vh',
19
25
  offsetLeft: '50vw',
20
26
  target: false
@@ -22,6 +28,26 @@ export default {
22
28
 
23
29
  computed: {
24
30
 
31
+ cacheKey({dataSrc}) {
32
+ return `${this.$name}.${dataSrc}`;
33
+ },
34
+
35
+ width({width, dataWidth}) {
36
+ return width || dataWidth;
37
+ },
38
+
39
+ height({height, dataHeight}) {
40
+ return height || dataHeight;
41
+ },
42
+
43
+ sizes({sizes, dataSizes}) {
44
+ return sizes || dataSizes;
45
+ },
46
+
47
+ isImg(_, $el) {
48
+ return isImg($el);
49
+ },
50
+
25
51
  target: {
26
52
 
27
53
  get({target}) {
@@ -32,6 +58,14 @@ export default {
32
58
  this.observe();
33
59
  }
34
60
 
61
+ },
62
+
63
+ offsetTop({offsetTop}) {
64
+ return toPx(offsetTop, 'height');
65
+ },
66
+
67
+ offsetLeft({offsetLeft}) {
68
+ return toPx(offsetLeft, 'width');
35
69
  }
36
70
 
37
71
  },
@@ -39,13 +73,21 @@ export default {
39
73
  connected() {
40
74
 
41
75
  if (!window.IntersectionObserver) {
42
- setSrcAttrs(this.$el, this.dataSrc);
76
+ setSrcAttrs(this.$el, this.dataSrc, this.dataSrcset, this.sizes);
43
77
  return;
44
78
  }
45
79
 
46
- const rootMargin = `${toPx(this.offsetTop, 'height')}px ${toPx(this.offsetLeft, 'width')}px`;
47
- this.observer = new IntersectionObserver(this.load, {rootMargin});
48
- this.observe();
80
+ if (storage[this.cacheKey]) {
81
+ setSrcAttrs(this.$el, storage[this.cacheKey], this.dataSrcset, this.sizes);
82
+ } else if (this.isImg && this.width && this.height) {
83
+ setSrcAttrs(this.$el, getPlaceholderImage(this.width, this.height, this.sizes));
84
+ }
85
+
86
+ this.observer = new IntersectionObserver(this.load, {
87
+ rootMargin: `${this.offsetTop}px ${this.offsetLeft}px`
88
+ });
89
+
90
+ requestAnimationFrame(this.observe);
49
91
 
50
92
  },
51
93
 
@@ -55,17 +97,32 @@ export default {
55
97
 
56
98
  update: {
57
99
 
58
- write(store) {
59
- if (!this.observer || isImg(this.$el)) {
100
+ read({image}) {
101
+
102
+ if (!this.observer) {
60
103
  return false;
61
104
  }
62
- const srcset = data(this.$el, 'data-srcset');
63
- if (srcset && window.devicePixelRatio !== 1) {
105
+
106
+ if (!image && document.readyState === 'complete') {
107
+ this.load(this.observer.takeRecords());
108
+ }
109
+
110
+ if (this.isImg) {
111
+ return false;
112
+ }
113
+
114
+ image && image.then(img => img && img.currentSrc !== '' && setSrcAttrs(this.$el, currentSrc(img)));
115
+
116
+ },
117
+
118
+ write(data) {
119
+
120
+ if (this.dataSrcset && window.devicePixelRatio !== 1) {
64
121
 
65
122
  const bgSize = css(this.$el, 'backgroundSize');
66
- if (bgSize.match(/^(auto\s?)+$/) || toFloat(bgSize) === store.bgSize) {
67
- store.bgSize = getSourceSize(srcset, data(this.$el, 'sizes'));
68
- css(this.$el, 'backgroundSize', `${store.bgSize}px`);
123
+ if (bgSize.match(/^(auto\s?)+$/) || toFloat(bgSize) === data.bgSize) {
124
+ data.bgSize = getSourceSize(this.dataSrcset, this.sizes);
125
+ css(this.$el, 'backgroundSize', `${data.bgSize}px`);
69
126
  }
70
127
 
71
128
  }
@@ -85,20 +142,13 @@ export default {
85
142
  return;
86
143
  }
87
144
 
88
- if (this._data.image) {
89
- return this._data.image;
90
- }
145
+ this._data.image = getImage(this.dataSrc, this.dataSrcset, this.sizes).then(img => {
91
146
 
92
- const image = isImg(this.$el)
93
- ? this.$el
94
- : getImageFromElement(
95
- this.$el,
96
- this.dataSrc,
97
- this.dataSources
98
- );
147
+ setSrcAttrs(this.$el, currentSrc(img), img.srcset, img.sizes);
148
+ storage[this.cacheKey] = currentSrc(img);
149
+ return img;
99
150
 
100
- this._data.image = image;
101
- setSrcAttrs(this.$el, image.currentSrc);
151
+ }, e => trigger(this.$el, new e.constructor(e.type, e)));
102
152
 
103
153
  this.observer.disconnect();
104
154
  },
@@ -113,15 +163,13 @@ export default {
113
163
 
114
164
  };
115
165
 
116
- function setSrcAttrs(el, src) {
166
+ function setSrcAttrs(el, src, srcset, sizes) {
117
167
 
118
168
  if (isImg(el)) {
119
-
120
- const parentNode = parent(el);
121
- const elements = isPicture(parentNode) ? children(parentNode) : [el];
122
- elements.forEach(el => setSourceProps(el, el));
123
- src && attr(el, 'src', src);
124
-
169
+ const set = (prop, val) => val && val !== el[prop] && (el[prop] = val);
170
+ set('sizes', sizes);
171
+ set('srcset', srcset);
172
+ set('src', src);
125
173
  } else if (src) {
126
174
 
127
175
  const change = !includes(el.style.backgroundImage, src);
@@ -134,66 +182,13 @@ function setSrcAttrs(el, src) {
134
182
 
135
183
  }
136
184
 
137
- const srcProps = ['data-src', 'data-srcset', 'sizes'];
138
- function setSourceProps(sourceEl, targetEl) {
139
- srcProps.forEach(prop => {
140
- const value = data(sourceEl, prop);
141
- if (value) {
142
- attr(targetEl, prop.replace(/^(data-)+/, ''), value);
143
- }
144
- });
145
- }
146
-
147
- function getImageFromElement(el, src, sources) {
185
+ function getPlaceholderImage(width, height, sizes) {
148
186
 
149
- if (!src) {
150
- return false;
187
+ if (sizes) {
188
+ ({width, height} = Dimensions.ratio({width, height}, 'width', toPx(sizesToPixel(sizes))));
151
189
  }
152
190
 
153
- const img = new Image();
154
-
155
- wrapInPicture(img, sources);
156
- setSourceProps(el, img);
157
- img.onload = () => setSrcAttrs(el, img.currentSrc);
158
- attr(img, 'src', src);
159
- return img;
160
- }
161
-
162
- function wrapInPicture(img, sources) {
163
-
164
- sources = parseSources(sources);
165
-
166
- if (sources.length) {
167
- const picture = fragment('<picture>');
168
- sources.forEach(attrs => {
169
- const source = fragment('<source>');
170
- attr(source, attrs);
171
- append(picture, source);
172
- });
173
- append(picture, img);
174
- }
175
- }
176
-
177
- function parseSources(sources) {
178
- if (!sources) {
179
- return [];
180
- }
181
-
182
- if (startsWith(sources, '[')) {
183
- try {
184
- sources = JSON.parse(sources);
185
- } catch (e) {
186
- sources = [];
187
- }
188
- } else {
189
- sources = parseOptions(sources);
190
- }
191
-
192
- if (!isArray(sources)) {
193
- sources = [sources];
194
- }
195
-
196
- return sources.filter(source => !isEmpty(source));
191
+ return `data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="${width}" height="${height}"></svg>`;
197
192
  }
198
193
 
199
194
  const sizesRe = /\s*(.*?)\s*(\w+|calc\(.*?\))\s*(?:,|$)/g;
@@ -233,14 +228,22 @@ function getSourceSize(srcset, sizes) {
233
228
  return descriptors.filter(size => size >= srcSize)[0] || descriptors.pop() || '';
234
229
  }
235
230
 
236
- function isPicture(el) {
237
- return isA(el, 'PICTURE');
231
+ function isImg(el) {
232
+ return el.tagName === 'IMG';
238
233
  }
239
234
 
240
- function isImg(el) {
241
- return isA(el, 'IMG');
235
+ function currentSrc(el) {
236
+ return el.currentSrc || el.src;
242
237
  }
243
238
 
244
- function isA(el, tagName) {
245
- return el && el.tagName === tagName;
239
+ const key = '__test__';
240
+ let storage;
241
+
242
+ // workaround for Safari's private browsing mode and accessing sessionStorage in Blink
243
+ try {
244
+ storage = window.sessionStorage || {};
245
+ storage[key] = 1;
246
+ delete storage[key];
247
+ } catch (e) {
248
+ storage = {};
246
249
  }
@@ -1,6 +1,6 @@
1
1
  import Class from '../mixin/class';
2
2
  import Media from '../mixin/media';
3
- import {$, addClass, after, Animation, clamp, css, dimensions, fastdom, height as getHeight, getScrollingElement, hasClass, isNumeric, isString, isVisible, noop, offset, offsetPosition, parent, query, remove, removeClass, replaceClass, scrollTop, toggleClass, toPx, trigger, within} from 'uikit-util';
3
+ import {$, addClass, after, Animation, clamp, css, dimensions, fastdom, height as getHeight, getScrollingElement, hasClass, isNumeric, isString, isVisible, noop, offset, offsetPosition, parent, query, remove, removeClass, replaceClass, scrollTop, toFloat, toggleClass, toPx, trigger, within} from 'uikit-util';
4
4
 
5
5
  export default {
6
6
 
@@ -172,7 +172,7 @@ export default {
172
172
  const offsetParentTop = offset(referenceElement.offsetParent).top;
173
173
 
174
174
  const top = parseProp(this.top, this.$el, topOffset);
175
- const bottom = parseProp(this.bottom, this.$el, topOffset + height);
175
+ const bottom = parseProp(this.bottom, this.$el, topOffset + height, true);
176
176
 
177
177
  const start = Math.max(top, topOffset) - this.offset;
178
178
  const end = bottom
@@ -349,7 +349,7 @@ export default {
349
349
 
350
350
  };
351
351
 
352
- function parseProp(value, el, propOffset) {
352
+ function parseProp(value, el, propOffset, padding) {
353
353
 
354
354
  if (!value) {
355
355
  return 0;
@@ -361,7 +361,9 @@ function parseProp(value, el, propOffset) {
361
361
 
362
362
  } else {
363
363
 
364
- return offset(value === true ? parent(el) : query(value, el)).bottom;
364
+ const refElement = value === true ? parent(el) : query(value, el);
365
+ return offset(refElement).bottom
366
+ - (padding && refElement && within(el, refElement) ? toFloat(css(refElement, 'paddingBottom')) : 0);
365
367
 
366
368
  }
367
369
  }
@@ -134,8 +134,9 @@ export function parseOptions(options, args = []) {
134
134
 
135
135
  try {
136
136
 
137
- return options
138
- ? startsWith(options, '{')
137
+ return !options
138
+ ? {}
139
+ : startsWith(options, '{')
139
140
  ? JSON.parse(options)
140
141
  : args.length && !includes(options, ':')
141
142
  ? ({[args[0]]: options})
@@ -145,8 +146,7 @@ export function parseOptions(options, args = []) {
145
146
  options[key.trim()] = value.trim();
146
147
  }
147
148
  return options;
148
- }, {})
149
- : {};
149
+ }, {});
150
150
 
151
151
  } catch (e) {
152
152
  return {};
@@ -13,15 +13,6 @@
13
13
  .uk-flex { display: flex; }
14
14
  .uk-flex-inline { display: inline-flex; }
15
15
 
16
- /*
17
- * Remove pseudo elements created by micro clearfix as precaution
18
- */
19
-
20
- .uk-flex::before,
21
- .uk-flex::after,
22
- .uk-flex-inline::before,
23
- .uk-flex-inline::after { display: none; }
24
-
25
16
 
26
17
  /* Alignment
27
18
  ========================================================================== */
@@ -109,13 +109,6 @@
109
109
  .uk-navbar-container:not(.uk-navbar-transparent):extend(.uk-light all) when (@navbar-color-mode = light) {}
110
110
  .uk-navbar-container:not(.uk-navbar-transparent):extend(.uk-dark all) when (@navbar-color-mode = dark) {}
111
111
 
112
- /*
113
- * Remove pseudo elements created by micro clearfix as precaution (if Container component is used)
114
- */
115
-
116
- .uk-navbar-container > ::before,
117
- .uk-navbar-container > ::after { display: none !important; }
118
-
119
112
 
120
113
  /* Groups
121
114
  ========================================================================== */
@@ -251,6 +251,28 @@
251
251
  [data-uk-responsive] { max-width: 100%; }
252
252
 
253
253
 
254
+ /* Object
255
+ ========================================================================== */
256
+
257
+ .uk-object-fit-none { object-fit: none; }
258
+ .uk-object-fit-cover { object-fit: cover; }
259
+ .uk-object-fit-contain { object-fit: contain; }
260
+
261
+ /*
262
+ * Position
263
+ */
264
+
265
+ .uk-object-top-left { object-position: 0 0; }
266
+ .uk-object-top-center { object-position: 50% 0; }
267
+ .uk-object-top-right { object-position: 100% 0; }
268
+ .uk-object-center-left { object-position: 0 50%; }
269
+ .uk-object-center-center { object-position: 50% 50%; }
270
+ .uk-object-center-right { object-position: 100% 50%; }
271
+ .uk-object-bottom-left { object-position: 0 100%; }
272
+ .uk-object-bottom-center { object-position: 50% 100%; }
273
+ .uk-object-bottom-right { object-position: 100% 100%; }
274
+
275
+
254
276
  /* Border
255
277
  ========================================================================== */
256
278
 
@@ -13,15 +13,6 @@
13
13
  .uk-flex { display: flex; }
14
14
  .uk-flex-inline { display: inline-flex; }
15
15
 
16
- /*
17
- * Remove pseudo elements created by micro clearfix as precaution
18
- */
19
-
20
- .uk-flex::before,
21
- .uk-flex::after,
22
- .uk-flex-inline::before,
23
- .uk-flex-inline::after { display: none; }
24
-
25
16
 
26
17
  /* Alignment
27
18
  ========================================================================== */
@@ -780,7 +780,7 @@ select.uk-form-width-xsmall { width: ($form-width-xsmall + 25px); }
780
780
 
781
781
  $inverse-form-background: $inverse-global-muted-background !default;
782
782
  $inverse-form-color: $inverse-global-color !default;
783
- $inverse-form-focus-background: fadein($inverse-form-background, 5%) !default;
783
+ $inverse-form-focus-background: fade-in($inverse-form-background, 0.05) !default;
784
784
  $inverse-form-focus-color: $inverse-global-color !default;
785
785
  $inverse-form-placeholder-color: $inverse-global-muted-color !default;
786
786
 
@@ -790,12 +790,12 @@ $inverse-form-datalist-icon-color: $inverse-global-color !default;
790
790
 
791
791
  $inverse-form-radio-background: $inverse-global-muted-background !default;
792
792
 
793
- $inverse-form-radio-focus-background: fadein($inverse-form-radio-background, 5%) !default;
793
+ $inverse-form-radio-focus-background: fade-in($inverse-form-radio-background, 0.05) !default;
794
794
 
795
795
  $inverse-form-radio-checked-background: $inverse-global-primary-background !default;
796
796
  $inverse-form-radio-checked-icon-color: $inverse-global-inverse-color !default;
797
797
 
798
- $inverse-form-radio-checked-focus-background: fadein($inverse-global-primary-background, 10%) !default;
798
+ $inverse-form-radio-checked-focus-background: fade-in($inverse-global-primary-background, 0.1) !default;
799
799
 
800
800
  $inverse-form-icon-color: $inverse-global-muted-color !default;
801
801
  $inverse-form-icon-hover-color: $inverse-global-color !default;
@@ -201,9 +201,9 @@ $inverse-icon-link-hover-color: $inverse-global-color !default;
201
201
  $inverse-icon-link-active-color: $inverse-global-color !default;
202
202
  $inverse-icon-button-background: $inverse-global-muted-background !default;
203
203
  $inverse-icon-button-color: $inverse-global-muted-color !default;
204
- $inverse-icon-button-hover-background: fadein($inverse-icon-button-background, 5%) !default;
204
+ $inverse-icon-button-hover-background: fade-in($inverse-icon-button-background, 0.05) !default;
205
205
  $inverse-icon-button-hover-color: $inverse-global-color !default;
206
- $inverse-icon-button-active-background: fadein($inverse-icon-button-background, 10%) !default;
206
+ $inverse-icon-button-active-background: fade-in($inverse-icon-button-background, 0.1) !default;
207
207
  $inverse-icon-button-active-color: $inverse-global-color !default;
208
208
 
209
209
 
@@ -109,13 +109,6 @@ $navbar-dropbar-z-index: $global-z-index - 20 !default;
109
109
  @if ( $navbar-color-mode == light ) { .uk-navbar-container:not(.uk-navbar-transparent) { @extend .uk-light !optional;} }
110
110
  @if ( $navbar-color-mode == dark ) { .uk-navbar-container:not(.uk-navbar-transparent) { @extend .uk-dark !optional;} }
111
111
 
112
- /*
113
- * Remove pseudo elements created by micro clearfix as precaution (if Container component is used)
114
- */
115
-
116
- .uk-navbar-container > ::before,
117
- .uk-navbar-container > ::after { display: none !important; }
118
-
119
112
 
120
113
  /* Groups
121
114
  ========================================================================== */
@@ -317,7 +317,7 @@ $inverse-search-placeholder-color: $inverse-global-muted-color !def
317
317
  $inverse-search-icon-color: $inverse-global-muted-color !default;
318
318
 
319
319
  $inverse-search-default-background: $inverse-global-muted-background !default;
320
- $inverse-search-default-focus-background: fadein($inverse-search-default-background, 5%) !default;
320
+ $inverse-search-default-focus-background: fade-in($inverse-search-default-background, 0.05) !default;
321
321
 
322
322
  $inverse-search-navbar-background: transparent !default;
323
323
 
@@ -251,6 +251,28 @@ $dragover-box-shadow: 0 0 20px rgba(100,100,100,0.3)
251
251
  [data-uk-responsive] { max-width: 100%; }
252
252
 
253
253
 
254
+ /* Object
255
+ ========================================================================== */
256
+
257
+ .uk-object-fit-none { object-fit: none; }
258
+ .uk-object-fit-cover { object-fit: cover; }
259
+ .uk-object-fit-contain { object-fit: contain; }
260
+
261
+ /*
262
+ * Position
263
+ */
264
+
265
+ .uk-object-top-left { object-position: 0 0; }
266
+ .uk-object-top-center { object-position: 50% 0; }
267
+ .uk-object-top-right { object-position: 100% 0; }
268
+ .uk-object-center-left { object-position: 0 50%; }
269
+ .uk-object-center-center { object-position: 50% 50%; }
270
+ .uk-object-center-right { object-position: 100% 50%; }
271
+ .uk-object-bottom-left { object-position: 0 100%; }
272
+ .uk-object-bottom-center { object-position: 50% 100%; }
273
+ .uk-object-bottom-right { object-position: 100% 100%; }
274
+
275
+
254
276
  /* Border
255
277
  ========================================================================== */
256
278
 
@@ -449,16 +449,16 @@ $internal-form-checkbox-indeterminate-image: "data:image/svg+xml;charset=UTF-8,%
449
449
  $inverse-global-muted-background: rgba($global-inverse-color, 0.1) !default;
450
450
  $inverse-form-background: $inverse-global-muted-background !default;
451
451
  $inverse-form-color: $inverse-global-color !default;
452
- $inverse-form-focus-background: fadein($inverse-form-background, 5%) !default;
452
+ $inverse-form-focus-background: fade-in($inverse-form-background, 0.05) !default;
453
453
  $inverse-form-focus-color: $inverse-global-color !default;
454
454
  $inverse-form-placeholder-color: $inverse-global-muted-color !default;
455
455
  $inverse-form-select-icon-color: $inverse-global-color !default;
456
456
  $inverse-form-datalist-icon-color: $inverse-global-color !default;
457
457
  $inverse-form-radio-background: $inverse-global-muted-background !default;
458
- $inverse-form-radio-focus-background: fadein($inverse-form-radio-background, 5%) !default;
458
+ $inverse-form-radio-focus-background: fade-in($inverse-form-radio-background, 0.05) !default;
459
459
  $inverse-form-radio-checked-background: $inverse-global-primary-background !default;
460
460
  $inverse-form-radio-checked-icon-color: $inverse-global-inverse-color !default;
461
- $inverse-form-radio-checked-focus-background: fadein($inverse-global-primary-background, 10%) !default;
461
+ $inverse-form-radio-checked-focus-background: fade-in($inverse-global-primary-background, 0.1) !default;
462
462
  $inverse-form-icon-color: $inverse-global-muted-color !default;
463
463
  $inverse-form-icon-hover-color: $inverse-global-color !default;
464
464
  $grid-gutter-horizontal: $global-gutter !default;
@@ -543,9 +543,9 @@ $inverse-icon-link-hover-color: $inverse-global-color !default;
543
543
  $inverse-icon-link-active-color: $inverse-global-color !default;
544
544
  $inverse-icon-button-background: $inverse-global-muted-background !default;
545
545
  $inverse-icon-button-color: $inverse-global-muted-color !default;
546
- $inverse-icon-button-hover-background: fadein($inverse-icon-button-background, 5%) !default;
546
+ $inverse-icon-button-hover-background: fade-in($inverse-icon-button-background, 0.05) !default;
547
547
  $inverse-icon-button-hover-color: $inverse-global-color !default;
548
- $inverse-icon-button-active-background: fadein($inverse-icon-button-background, 10%) !default;
548
+ $inverse-icon-button-active-background: fade-in($inverse-icon-button-background, 0.1) !default;
549
549
  $inverse-icon-button-active-color: $inverse-global-color !default;
550
550
  $iconnav-margin-horizontal: $global-small-margin !default;
551
551
  $iconnav-margin-vertical: $iconnav-margin-horizontal !default;
@@ -855,7 +855,7 @@ $inverse-search-color: $inverse-global-color !default;
855
855
  $inverse-search-placeholder-color: $inverse-global-muted-color !default;
856
856
  $inverse-search-icon-color: $inverse-global-muted-color !default;
857
857
  $inverse-search-default-background: transparent !default;
858
- $inverse-search-default-focus-background: fadein($inverse-search-default-background, 5%) !default;
858
+ $inverse-search-default-focus-background: fade-in($inverse-search-default-background, 0.05) !default;
859
859
  $inverse-search-navbar-background: transparent !default;
860
860
  $inverse-search-large-background: transparent !default;
861
861
  $inverse-search-toggle-color: $inverse-global-muted-color !default;