uikit 3.9.5-dev.e48c5e252 → 3.10.1-dev.6b26facf9

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 (103) hide show
  1. package/CHANGELOG.md +24 -8
  2. package/CONTRIBUTING.md +1 -1
  3. package/README.md +4 -2
  4. package/build/.eslintrc.json +10 -1
  5. package/build/build.js +5 -5
  6. package/build/less.js +29 -11
  7. package/build/publishDev.js +2 -1
  8. package/build/scss.js +1 -1
  9. package/build/util.js +1 -20
  10. package/dist/css/uikit-core-rtl.css +24 -13
  11. package/dist/css/uikit-core-rtl.min.css +1 -1
  12. package/dist/css/uikit-core.css +21 -10
  13. package/dist/css/uikit-core.min.css +1 -1
  14. package/dist/css/uikit-rtl.css +24 -13
  15. package/dist/css/uikit-rtl.min.css +1 -1
  16. package/dist/css/uikit.css +21 -10
  17. package/dist/css/uikit.min.css +1 -1
  18. package/dist/js/components/countdown.js +1 -1
  19. package/dist/js/components/countdown.min.js +1 -1
  20. package/dist/js/components/filter.js +5 -5
  21. package/dist/js/components/filter.min.js +1 -1
  22. package/dist/js/components/lightbox-panel.js +2 -2
  23. package/dist/js/components/lightbox-panel.min.js +1 -1
  24. package/dist/js/components/lightbox.js +2 -2
  25. package/dist/js/components/lightbox.min.js +1 -1
  26. package/dist/js/components/notification.js +1 -1
  27. package/dist/js/components/notification.min.js +1 -1
  28. package/dist/js/components/parallax.js +2 -2
  29. package/dist/js/components/parallax.min.js +1 -1
  30. package/dist/js/components/slider-parallax.js +2 -2
  31. package/dist/js/components/slider-parallax.min.js +1 -1
  32. package/dist/js/components/slider.js +2 -2
  33. package/dist/js/components/slider.min.js +1 -1
  34. package/dist/js/components/slideshow-parallax.js +2 -2
  35. package/dist/js/components/slideshow-parallax.min.js +1 -1
  36. package/dist/js/components/slideshow.js +6 -2
  37. package/dist/js/components/slideshow.min.js +1 -1
  38. package/dist/js/components/sortable.js +6 -6
  39. package/dist/js/components/sortable.min.js +1 -1
  40. package/dist/js/components/tooltip.js +3 -2
  41. package/dist/js/components/tooltip.min.js +1 -1
  42. package/dist/js/components/upload.js +1 -1
  43. package/dist/js/components/upload.min.js +1 -1
  44. package/dist/js/uikit-core.js +72 -80
  45. package/dist/js/uikit-core.min.js +1 -1
  46. package/dist/js/uikit-icons.js +1 -1
  47. package/dist/js/uikit-icons.min.js +1 -1
  48. package/dist/js/uikit.js +85 -88
  49. package/dist/js/uikit.min.js +1 -1
  50. package/package.json +9 -11
  51. package/src/js/api/component.js +3 -3
  52. package/src/js/api/state.js +3 -3
  53. package/src/js/components/slideshow.js +4 -0
  54. package/src/js/components/sortable.js +1 -1
  55. package/src/js/components/tooltip.js +2 -1
  56. package/src/js/core/cover.js +1 -2
  57. package/src/js/core/img.js +40 -57
  58. package/src/js/core/sticky.js +1 -1
  59. package/src/js/core/toggle.js +4 -3
  60. package/src/js/mixin/animate.js +4 -4
  61. package/src/js/mixin/internal/slideshow-animations.js +1 -1
  62. package/src/js/mixin/parallax.js +1 -1
  63. package/src/js/util/dom.js +5 -8
  64. package/src/js/util/selector.js +4 -2
  65. package/src/js/util/viewport.js +3 -3
  66. package/src/less/components/cover.less +5 -4
  67. package/src/less/components/divider.less +1 -1
  68. package/src/less/components/list.less +1 -1
  69. package/src/less/components/search.less +9 -6
  70. package/src/less/components/utility.less +5 -3
  71. package/src/less/components/width.less +7 -0
  72. package/src/scss/components/cover.scss +5 -4
  73. package/src/scss/components/divider.scss +1 -1
  74. package/src/scss/components/list.scss +1 -1
  75. package/src/scss/components/search.scss +9 -6
  76. package/src/scss/components/utility.scss +5 -3
  77. package/src/scss/components/width.scss +7 -0
  78. package/src/scss/variables-theme.scss +4 -0
  79. package/src/scss/variables.scss +4 -0
  80. package/tests/base.html +12 -12
  81. package/tests/button.html +1 -1
  82. package/tests/cover.html +5 -5
  83. package/tests/drop.html +2 -2
  84. package/tests/dropdown.html +1 -1
  85. package/tests/flex.html +1 -1
  86. package/tests/grid-masonry.html +1 -1
  87. package/tests/grid-parallax.html +1 -1
  88. package/tests/grid.html +1 -1
  89. package/tests/height.html +2 -2
  90. package/tests/margin.html +1 -1
  91. package/tests/modal.html +2 -2
  92. package/tests/navbar.html +2 -2
  93. package/tests/padding.html +1 -1
  94. package/tests/parallax.html +1 -1
  95. package/tests/search.html +1 -1
  96. package/tests/slider.html +1 -1
  97. package/tests/slideshow.html +2 -2
  98. package/tests/sticky.html +2 -2
  99. package/tests/switcher.html +1 -1
  100. package/tests/tab.html +1 -1
  101. package/tests/utility.html +1 -1
  102. package/tests/video.html +3 -3
  103. package/tests/width.html +1 -1
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.9.5-dev.e48c5e252",
5
+ "version": "3.10.1-dev.6b26facf9",
6
6
  "main": "dist/js/uikit.js",
7
7
  "style": "dist/css/uikit.css",
8
8
  "sideEffects": [
@@ -20,7 +20,7 @@
20
20
  "prefix": "node build/prefix",
21
21
  "scope": "node build/scope",
22
22
  "release": "node build/release",
23
- "watch": "watch-run -i -p 'src/less/**/*.less' yarn compile-less",
23
+ "watch": "watch-run -i -p '**/*.less' yarn compile-less",
24
24
  "eslint": "eslint src/js",
25
25
  "eslint-fix": "eslint --fix src/js"
26
26
  },
@@ -34,15 +34,15 @@
34
34
  },
35
35
  "homepage": "https://getuikit.com",
36
36
  "devDependencies": {
37
- "@rollup/plugin-alias": "^3.1.8",
37
+ "@rollup/plugin-alias": "^3.1.9",
38
38
  "@rollup/plugin-buble": "^0.21.3",
39
- "@rollup/plugin-replace": "^3.0.0",
39
+ "@rollup/plugin-replace": "^3.0.1",
40
40
  "archiver": "^5.3.0",
41
- "camelcase": "^6.2.1",
41
+ "camelcase": "^6.3.0",
42
42
  "clean-css": "^5.2.2",
43
43
  "dateformat": "^5.0.2",
44
- "esbuild": "^0.13.14",
45
- "eslint": "^8.2.0",
44
+ "esbuild": "^0.14.11",
45
+ "eslint": "^8.6.0",
46
46
  "fs-extra": "^10.0.0",
47
47
  "glob": "^7.2.0",
48
48
  "inquirer": "^8.2.0",
@@ -50,10 +50,8 @@
50
50
  "minimist": "^1.2.5",
51
51
  "number-precision": "^1.5.1",
52
52
  "p-limit": "^4.0.0",
53
- "postcss": "^8.3.11",
54
- "prettier": "^2.4.1",
55
- "rollup": "^2.60.0",
56
- "rollup-plugin-esbuild": "^4.7.1",
53
+ "rollup": "^2.63.0",
54
+ "rollup-plugin-esbuild": "^4.8.2",
57
55
  "rollup-plugin-html": "^0.2.1",
58
56
  "rollup-plugin-modify": "^3.0.0",
59
57
  "rtlcss": "^3.5.0",
@@ -35,10 +35,10 @@ export default function (UIkit) {
35
35
  const instance = UIkit.getComponent(element, name);
36
36
 
37
37
  if (instance) {
38
- if (!data) {
39
- return instance;
40
- } else {
38
+ if (data) {
41
39
  instance.$destroy();
40
+ } else {
41
+ return instance;
42
42
  }
43
43
  }
44
44
 
@@ -87,12 +87,12 @@ export default function (UIkit) {
87
87
 
88
88
  events.forEach(event => {
89
89
 
90
- if (!hasOwn(event, 'handler')) {
90
+ if (hasOwn(event, 'handler')) {
91
+ registerEvent(this, event);
92
+ } else {
91
93
  for (const key in event) {
92
94
  registerEvent(this, event[key], key);
93
95
  }
94
- } else {
95
- registerEvent(this, event);
96
96
  }
97
97
 
98
98
  });
@@ -28,6 +28,10 @@ export default {
28
28
 
29
29
  read() {
30
30
 
31
+ if (!this.list) {
32
+ return false;
33
+ }
34
+
31
35
  let [width, height] = this.ratio.split(':').map(Number);
32
36
 
33
37
  height = height * this.list.offsetWidth / width || 0;
@@ -300,7 +300,7 @@ function trackScroll(pos) {
300
300
  const dist = (Date.now() - last) * .3;
301
301
  last = Date.now();
302
302
 
303
- scrollParents(document.elementFromPoint(x, pos.y)).reverse().some(scrollEl => {
303
+ scrollParents(document.elementFromPoint(x, pos.y), /auto|scroll/).reverse().some(scrollEl => {
304
304
 
305
305
  let {scrollTop: scroll, scrollHeight} = scrollEl;
306
306
 
@@ -67,7 +67,8 @@ export default {
67
67
  }
68
68
 
69
69
  this.toggleElement(this.tooltip, false, false).then(() => {
70
- this.tooltip = remove(this.tooltip);
70
+ remove(this.tooltip);
71
+ this.tooltip = null;
71
72
  this._unbind();
72
73
  });
73
74
  },
@@ -1,10 +1,9 @@
1
1
  import Video from './video';
2
- import Class from '../mixin/class';
3
2
  import {css, Dimensions, parent} from 'uikit-util';
4
3
 
5
4
  export default {
6
5
 
7
- mixins: [Class, Video],
6
+ mixins: [Video],
8
7
 
9
8
  props: {
10
9
  width: Number,
@@ -1,4 +1,4 @@
1
- import {$, attr, children, createEvent, css, data, Dimensions, escape, getImage, includes, isUndefined, once, parent, 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,6 +6,8 @@ export default {
6
6
 
7
7
  props: {
8
8
  dataSrc: String,
9
+ dataSrcset: Boolean,
10
+ sizes: String,
9
11
  width: Number,
10
12
  height: Number,
11
13
  offsetTop: String,
@@ -15,6 +17,8 @@ export default {
15
17
 
16
18
  data: {
17
19
  dataSrc: '',
20
+ dataSrcset: false,
21
+ sizes: false,
18
22
  width: false,
19
23
  height: false,
20
24
  offsetTop: '50vh',
@@ -28,6 +32,22 @@ export default {
28
32
  return `${this.$name}.${dataSrc}`;
29
33
  },
30
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
+
31
51
  target: {
32
52
 
33
53
  get({target}) {
@@ -53,14 +73,14 @@ export default {
53
73
  connected() {
54
74
 
55
75
  if (!window.IntersectionObserver) {
56
- setSrcAttrs(this.$el);
76
+ setSrcAttrs(this.$el, this.dataSrc, this.dataSrcset, this.sizes);
57
77
  return;
58
78
  }
59
79
 
60
80
  if (storage[this.cacheKey]) {
61
- setSrcAttrs(this.$el, storage[this.cacheKey]);
62
- } else if (isImg(this.$el) && this.width && this.height) {
63
- attr(this.$el, 'src', getPlaceholderImage(this.$el));
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));
64
84
  }
65
85
 
66
86
  this.observer = new IntersectionObserver(this.load, {
@@ -87,7 +107,7 @@ export default {
87
107
  this.load(this.observer.takeRecords());
88
108
  }
89
109
 
90
- if (isImg(this.$el)) {
110
+ if (this.isImg) {
91
111
  return false;
92
112
  }
93
113
 
@@ -95,15 +115,14 @@ export default {
95
115
 
96
116
  },
97
117
 
98
- write(store) {
118
+ write(data) {
99
119
 
100
- const srcset = data(this.$el, 'data-srcset');
101
- if (srcset && window.devicePixelRatio !== 1) {
120
+ if (this.dataSrcset && window.devicePixelRatio !== 1) {
102
121
 
103
122
  const bgSize = css(this.$el, 'backgroundSize');
104
- if (bgSize.match(/^(auto\s?)+$/) || toFloat(bgSize) === store.bgSize) {
105
- store.bgSize = getSourceSize(srcset, data(this.$el, 'sizes'));
106
- 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`);
107
126
  }
108
127
 
109
128
  }
@@ -123,9 +142,9 @@ export default {
123
142
  return;
124
143
  }
125
144
 
126
- this._data.image = getImageFromElement(this.$el, this.dataSrc).then(img => {
145
+ this._data.image = getImage(this.dataSrc, this.dataSrcset, this.sizes).then(img => {
127
146
 
128
- setSrcAttrs(this.$el, currentSrc(img));
147
+ setSrcAttrs(this.$el, currentSrc(img), img.srcset, img.sizes);
129
148
  storage[this.cacheKey] = currentSrc(img);
130
149
  return img;
131
150
 
@@ -144,20 +163,13 @@ export default {
144
163
 
145
164
  };
146
165
 
147
- const srcProps = ['data-src', 'data-srcset', 'sizes'];
148
- function setSrcAttrs(el, src) {
166
+ function setSrcAttrs(el, src, srcset, sizes) {
149
167
 
150
- const parentNode = parent(el);
151
168
  if (isImg(el)) {
152
- (isPicture(parentNode) ? children(parentNode) : [el]).forEach(el =>
153
- srcProps.forEach(prop => {
154
- const value = data(el, prop);
155
- if (value) {
156
- attr(el, prop.replace(/^(data-)+/, ''), value);
157
- }
158
- })
159
- );
160
- src && attr(el, 'src', src);
169
+ const set = (prop, val) => val && val !== el[prop] && (el[prop] = val);
170
+ set('sizes', sizes);
171
+ set('srcset', srcset);
172
+ set('src', src);
161
173
  } else if (src) {
162
174
 
163
175
  const change = !includes(el.style.backgroundImage, src);
@@ -170,10 +182,7 @@ function setSrcAttrs(el, src) {
170
182
 
171
183
  }
172
184
 
173
- function getPlaceholderImage(el) {
174
- const sizes = data(el, 'sizes');
175
- let width = data(el, 'width');
176
- let height = data(el, 'height');
185
+ function getPlaceholderImage(width, height, sizes) {
177
186
 
178
187
  if (sizes) {
179
188
  ({width, height} = Dimensions.ratio({width, height}, 'width', toPx(sizesToPixel(sizes))));
@@ -198,24 +207,6 @@ function sizesToPixel(sizes) {
198
207
  return matches || '100vw';
199
208
  }
200
209
 
201
- function getImageFromElement(el, src) {
202
- const parentNode = parent(el);
203
-
204
- if (!src) {
205
- return Promise.reject(createEvent('error', false));
206
- }
207
-
208
- if (!isPicture(parentNode)) {
209
- return getImage(src, ...srcProps.slice(1).map(prop => data(el, prop)));
210
- }
211
-
212
- return new Promise((resolve, reject) => {
213
- const picture = parentNode.cloneNode(true);
214
- once(picture, 'load error', e => e.type === 'error' ? reject(e) : resolve(e.target), true);
215
- setSrcAttrs($('img', picture));
216
- });
217
- }
218
-
219
210
  const sizeRe = /\d+(?:\w+|%)/g;
220
211
  const additionRe = /[+-]?(\d+)/g;
221
212
  function evaluateSize(size) {
@@ -237,16 +228,8 @@ function getSourceSize(srcset, sizes) {
237
228
  return descriptors.filter(size => size >= srcSize)[0] || descriptors.pop() || '';
238
229
  }
239
230
 
240
- function isPicture(el) {
241
- return isA(el, 'PICTURE');
242
- }
243
-
244
231
  function isImg(el) {
245
- return isA(el, 'IMG');
246
- }
247
-
248
- function isA(el, tagName) {
249
- return el && el.tagName === tagName;
232
+ return el.tagName === 'IMG';
250
233
  }
251
234
 
252
235
  function currentSrc(el) {
@@ -144,7 +144,7 @@ export default {
144
144
  this.show();
145
145
  }
146
146
 
147
- height = !this.isActive ? this.$el.offsetHeight : height;
147
+ height = this.isActive ? height : this.$el.offsetHeight;
148
148
 
149
149
  if (height + this.offset > getHeight(window)) {
150
150
  this.inactive = true;
@@ -2,6 +2,8 @@ import Media from '../mixin/media';
2
2
  import Togglable from '../mixin/togglable';
3
3
  import {attr, closest, hasClass, includes, isBoolean, isFocusable, isTouch, matches, once, pointerDown, pointerEnter, pointerLeave, queryAll, trigger, within} from 'uikit-util';
4
4
 
5
+ const KEY_SPACE = 32;
6
+
5
7
  export default {
6
8
 
7
9
  mixins: [Media, Togglable],
@@ -119,12 +121,11 @@ export default {
119
121
  name: 'keydown',
120
122
 
121
123
  filter() {
122
- return includes(this.mode, 'click');
124
+ return includes(this.mode, 'click') && this.$el.tagName !== 'INPUT';
123
125
  },
124
126
 
125
127
  handler(e) {
126
- // Space
127
- if (e.keyCode === 32) {
128
+ if (e.keyCode === KEY_SPACE) {
128
129
  e.preventDefault();
129
130
  this.$el.click();
130
131
  }
@@ -23,12 +23,12 @@ export default {
23
23
  ? fade
24
24
  : name === 'delayed-fade'
25
25
  ? (...args) => fade(...args, 40)
26
- : !name
27
- ? () => {
26
+ : name
27
+ ? slide
28
+ : () => {
28
29
  action();
29
30
  return Promise.resolve();
30
- }
31
- : slide;
31
+ };
32
32
 
33
33
  return animationFn(action, target, this.duration)
34
34
  .then(() => this.$update(target, 'resize'), noop);
@@ -32,7 +32,7 @@ export function translated(el) {
32
32
 
33
33
  export function translate(value = 0, unit = '%') {
34
34
  value += value ? unit : '';
35
- return isIE ? `translateX(${value})` : `translate3d(${value}, 0, 0)`; // currently not translate3d in IE, translate3d within translate3d does not work while transitioning
35
+ return isIE ? `translateX(${value})` : `translate3d(${value}, 0, 0)`; // currently, not translate3d in IE, translate3d within translate3d does not work while transitioning
36
36
  }
37
37
 
38
38
  export function scale3d(value) {
@@ -254,7 +254,7 @@ export default {
254
254
 
255
255
  css[prop] = `rgba(${
256
256
  start.map((value, i) => {
257
- value = value + p * (end[i] - value);
257
+ value += p * (end[i] - value);
258
258
  return i === 3 ? toFloat(value) : parseInt(value, 10);
259
259
  }).join(',')
260
260
  })`;
@@ -1,4 +1,4 @@
1
- import {on} from './event';
1
+ import {once} from './event';
2
2
  import {parent} from './filter';
3
3
  import {find, findAll} from './selector';
4
4
  import {isElement, isString, isUndefined, toNode, toNodes} from './lang';
@@ -10,10 +10,7 @@ export function ready(fn) {
10
10
  return;
11
11
  }
12
12
 
13
- const unbind = on(document, 'DOMContentLoaded', function () {
14
- unbind();
15
- fn();
16
- });
13
+ once(document, 'DOMContentLoaded', fn);
17
14
  }
18
15
 
19
16
  export function empty(element) {
@@ -33,10 +30,10 @@ export function prepend(parent, element) {
33
30
 
34
31
  parent = $(parent);
35
32
 
36
- if (!parent.hasChildNodes()) {
37
- return append(parent, element);
38
- } else {
33
+ if (parent.hasChildNodes()) {
39
34
  return insertNodes(element, element => parent.insertBefore(element, parent.firstChild));
35
+ } else {
36
+ return append(parent, element);
40
37
  }
41
38
  }
42
39
 
@@ -1,3 +1,4 @@
1
+ import {attr} from './attr';
1
2
  import {inBrowser} from './env';
2
3
  import {closest, index, matches, parent} from './filter';
3
4
  import {isDocument, isString, memoize, toNode, toNodes} from './lang';
@@ -95,8 +96,9 @@ const splitSelector = memoize(selector =>
95
96
  function domPath(element) {
96
97
  const names = [];
97
98
  while (element.parentNode) {
98
- if (element.id) {
99
- names.unshift(`#${escape(element.id)}`);
99
+ const id = attr(element, 'id');
100
+ if (id) {
101
+ names.unshift(`#${escape(id)}`);
100
102
  break;
101
103
  } else {
102
104
  let {tagName} = element;
@@ -82,10 +82,10 @@ export function scrollIntoView(element, {offset: offsetBy = 0} = {}) {
82
82
  scrollTop(element, scroll + top * percent);
83
83
 
84
84
  // scroll more if we have not reached our destination
85
- if (percent !== 1) {
86
- requestAnimationFrame(step);
87
- } else {
85
+ if (percent === 1) {
88
86
  resolve();
87
+ } else {
88
+ requestAnimationFrame(step);
89
89
  }
90
90
 
91
91
  })();
@@ -14,16 +14,16 @@
14
14
 
15
15
  /*
16
16
  * Works with iframes and embedded content
17
- * 1. Apply transform instantly. Needed if transform is transitioned.
17
+ * 1. Use attribute to apply transform instantly. Needed if transform is transitioned.
18
18
  * 2. Reset responsiveness for embedded content
19
19
  * 3. Center object
20
20
  * Note: Percent values on the `top` property only works if this element
21
21
  * is absolute positioned or if the container has a height
22
22
  */
23
23
 
24
- .uk-cover,
25
24
  /* 1 */
26
- [uk-cover] {
25
+ [uk-cover],
26
+ [data-uk-cover] {
27
27
  /* 2 */
28
28
  max-width: none;
29
29
  /* 3 */
@@ -35,7 +35,8 @@
35
35
  transform: translate(var(--uk-position-translate-x), var(--uk-position-translate-y));
36
36
  }
37
37
 
38
- iframe.uk-cover { pointer-events: none; }
38
+ iframe[uk-cover],
39
+ iframe[data-uk-cover] { pointer-events: none; }
39
40
 
40
41
 
41
42
  /* Container
@@ -114,7 +114,7 @@
114
114
  ========================================================================== */
115
115
 
116
116
  .uk-divider-vertical {
117
- width: 1px;
117
+ width: max-content;
118
118
  height: @divider-vertical-height;
119
119
  margin-left: auto;
120
120
  margin-right: auto;
@@ -95,7 +95,7 @@
95
95
  .uk-list-decimal > * { counter-increment: decimal; }
96
96
 
97
97
  [class*='uk-list'] > ::before {
98
- content: '';
98
+ content: "";
99
99
  position: relative;
100
100
  left: -@list-padding-left;
101
101
  width: @list-padding-left;
@@ -30,6 +30,7 @@
30
30
  @search-default-focus-background: darken(@search-default-background, 5%);
31
31
 
32
32
  @search-default-icon-width: @global-control-height;
33
+ @search-default-icon-padding: 0;
33
34
 
34
35
  @search-navbar-width: 400px;
35
36
  @search-navbar-height: 40px;
@@ -37,6 +38,7 @@
37
38
  @search-navbar-font-size: @global-large-font-size;
38
39
 
39
40
  @search-navbar-icon-width: 40px;
41
+ @search-navbar-icon-padding: 0;
40
42
 
41
43
  @search-large-width: 500px;
42
44
  @search-large-height: 80px;
@@ -44,6 +46,7 @@
44
46
  @search-large-font-size: @global-2xlarge-font-size;
45
47
 
46
48
  @search-large-icon-width: 80px;
49
+ @search-large-icon-padding: 0;
47
50
 
48
51
  @search-toggle-color: @global-muted-color;
49
52
  @search-toggle-hover-color: @global-color;
@@ -205,8 +208,8 @@
205
208
 
206
209
  .uk-search-default .uk-search-icon { width: @search-default-icon-width; }
207
210
 
208
- .uk-search-default .uk-search-icon:not(.uk-search-icon-flip) ~ .uk-search-input { padding-left: (@search-default-icon-width); }
209
- .uk-search-default .uk-search-icon-flip ~ .uk-search-input { padding-right: (@search-default-icon-width); }
211
+ .uk-search-default .uk-search-icon:not(.uk-search-icon-flip) ~ .uk-search-input { padding-left: (@search-default-icon-width + @search-default-icon-padding); }
212
+ .uk-search-default .uk-search-icon-flip ~ .uk-search-input { padding-right: (@search-default-icon-width + @search-default-icon-padding); }
210
213
 
211
214
 
212
215
  /* Navbar modifier
@@ -236,8 +239,8 @@
236
239
 
237
240
  .uk-search-navbar .uk-search-icon { width: @search-navbar-icon-width; }
238
241
 
239
- .uk-search-navbar .uk-search-icon:not(.uk-search-icon-flip) ~ .uk-search-input { padding-left: (@search-navbar-icon-width); }
240
- .uk-search-navbar .uk-search-icon-flip ~ .uk-search-input { padding-right: (@search-navbar-icon-width); }
242
+ .uk-search-navbar .uk-search-icon:not(.uk-search-icon-flip) ~ .uk-search-input { padding-left: (@search-navbar-icon-width + @search-navbar-icon-padding); }
243
+ .uk-search-navbar .uk-search-icon-flip ~ .uk-search-input { padding-right: (@search-navbar-icon-width + @search-navbar-icon-padding); }
241
244
 
242
245
 
243
246
  /* Large modifier
@@ -267,8 +270,8 @@
267
270
 
268
271
  .uk-search-large .uk-search-icon { width: @search-large-icon-width; }
269
272
 
270
- .uk-search-large .uk-search-icon:not(.uk-search-icon-flip) ~ .uk-search-input { padding-left: (@search-large-icon-width); }
271
- .uk-search-large .uk-search-icon-flip ~ .uk-search-input { padding-right: (@search-large-icon-width); }
273
+ .uk-search-large .uk-search-icon:not(.uk-search-icon-flip) ~ .uk-search-input { padding-left: (@search-large-icon-width + @search-large-icon-padding); }
274
+ .uk-search-large .uk-search-icon-flip ~ .uk-search-input { padding-right: (@search-large-icon-width + @search-large-icon-padding); }
272
275
 
273
276
 
274
277
  /* Toggle
@@ -40,6 +40,7 @@
40
40
  @box-shadow-duration: 0.1s;
41
41
 
42
42
  @box-shadow-bottom-height: 30px;
43
+ @box-shadow-bottom-bottom: -@box-shadow-bottom-height;
43
44
  @box-shadow-bottom-border-radius: 100%;
44
45
  @box-shadow-bottom-background: #444;
45
46
  @box-shadow-bottom-blur: 20px;
@@ -246,7 +247,8 @@
246
247
  * Fix initial iframe width. Without the viewport is expanded on iOS devices
247
248
  */
248
249
 
249
- [uk-responsive] { max-width: 100%; }
250
+ [uk-responsive],
251
+ [data-uk-responsive] { max-width: 100%; }
250
252
 
251
253
 
252
254
  /* Border
@@ -303,10 +305,10 @@
303
305
  }
304
306
 
305
307
  .uk-box-shadow-bottom::after {
306
- content: '';
308
+ content: "";
307
309
  /* 1 */
308
310
  position: absolute;
309
- bottom: -@box-shadow-bottom-height;
311
+ bottom: @box-shadow-bottom-bottom;
310
312
  left: 0;
311
313
  right: 0;
312
314
  z-index: -1;
@@ -360,6 +360,13 @@
360
360
 
361
361
  }
362
362
 
363
+ /* Intrinsic Widths
364
+ ========================================================================== */
365
+
366
+ .uk-width-max-content { width: max-content; }
367
+
368
+ .uk-width-min-content { width: min-content; }
369
+
363
370
 
364
371
  // Hooks
365
372
  // ========================================================================
@@ -14,16 +14,16 @@
14
14
 
15
15
  /*
16
16
  * Works with iframes and embedded content
17
- * 1. Apply transform instantly. Needed if transform is transitioned.
17
+ * 1. Use attribute to apply transform instantly. Needed if transform is transitioned.
18
18
  * 2. Reset responsiveness for embedded content
19
19
  * 3. Center object
20
20
  * Note: Percent values on the `top` property only works if this element
21
21
  * is absolute positioned or if the container has a height
22
22
  */
23
23
 
24
- .uk-cover,
25
24
  /* 1 */
26
- [uk-cover] {
25
+ [uk-cover],
26
+ [data-uk-cover] {
27
27
  /* 2 */
28
28
  max-width: none;
29
29
  /* 3 */
@@ -35,7 +35,8 @@
35
35
  transform: translate(var(--uk-position-translate-x), var(--uk-position-translate-y));
36
36
  }
37
37
 
38
- iframe.uk-cover { pointer-events: none; }
38
+ iframe[uk-cover],
39
+ iframe[data-uk-cover] { pointer-events: none; }
39
40
 
40
41
 
41
42
  /* Container
@@ -114,7 +114,7 @@ $divider-vertical-border: $global-border !default;
114
114
  ========================================================================== */
115
115
 
116
116
  .uk-divider-vertical {
117
- width: 1px;
117
+ width: max-content;
118
118
  height: $divider-vertical-height;
119
119
  margin-left: auto;
120
120
  margin-right: auto;
@@ -95,7 +95,7 @@ $internal-list-bullet-image: "data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D
95
95
  .uk-list-decimal > * { counter-increment: decimal; }
96
96
 
97
97
  [class*='uk-list'] > ::before {
98
- content: '';
98
+ content: "";
99
99
  position: relative;
100
100
  left: (-$list-padding-left);
101
101
  width: $list-padding-left;