uikit 3.9.5-dev.13c625552 → 3.9.5-dev.4be822584

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 +13 -1
  2. package/README.md +4 -4
  3. package/dist/css/uikit-core-rtl.css +17 -6
  4. package/dist/css/uikit-core-rtl.min.css +1 -1
  5. package/dist/css/uikit-core.css +17 -6
  6. package/dist/css/uikit-core.min.css +1 -1
  7. package/dist/css/uikit-rtl.css +17 -6
  8. package/dist/css/uikit-rtl.min.css +1 -1
  9. package/dist/css/uikit.css +17 -6
  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 +1 -1
  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 +53 -120
  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 +53 -120
  42. package/dist/js/uikit.min.js +1 -1
  43. package/package.json +1 -1
  44. package/src/js/core/cover.js +1 -2
  45. package/src/js/core/drop.js +3 -2
  46. package/src/js/core/img.js +40 -99
  47. package/src/js/core/sticky.js +6 -1
  48. package/src/less/components/cover.less +1 -2
  49. package/src/less/components/link.less +6 -3
  50. package/src/less/components/search.less +31 -6
  51. package/src/less/components/utility.less +6 -0
  52. package/src/less/theme/search.less +6 -0
  53. package/src/scss/components/cover.scss +1 -2
  54. package/src/scss/components/link.scss +6 -3
  55. package/src/scss/components/search.scss +23 -6
  56. package/src/scss/components/utility.scss +6 -0
  57. package/src/scss/mixins-theme.scss +12 -0
  58. package/src/scss/mixins.scss +12 -0
  59. package/src/scss/theme/search.scss +6 -0
  60. package/src/scss/variables-theme.scss +3 -0
  61. package/src/scss/variables.scss +3 -0
  62. package/tests/image.html +14 -40
  63. package/tests/search.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.13c625552",
5
+ "version": "3.9.5-dev.4be822584",
6
6
  "main": "dist/js/uikit.js",
7
7
  "style": "dist/css/uikit.css",
8
8
  "sideEffects": [
@@ -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,7 +1,7 @@
1
1
  import Container from '../mixin/container';
2
2
  import Position from '../mixin/position';
3
3
  import Togglable from '../mixin/togglable';
4
- import {addClass, append, apply, css, hasClass, includes, isTouch, matches, MouseTracker, offset, on, once, parent, pointerCancel, pointerDown, pointerEnter, pointerLeave, pointerUp, query, removeClass, toggleClass, within} from 'uikit-util';
4
+ import {addClass, append, apply, attr, css, hasClass, includes, isTouch, matches, MouseTracker, offset, on, once, parent, pointerCancel, pointerDown, pointerEnter, pointerLeave, pointerUp, query, removeClass, toggleClass, within} from 'uikit-util';
5
5
 
6
6
  export let active;
7
7
 
@@ -62,7 +62,8 @@ export default {
62
62
  this.target = this.$create('toggle', query(this.toggle, this.$el), {
63
63
  target: this.$el,
64
64
  mode: this.mode
65
- });
65
+ }).$el;
66
+ attr(this.target, 'aria-haspopup', true);
66
67
  }
67
68
 
68
69
  },
@@ -1,18 +1,18 @@
1
- import {attr, children, createEvent, css, data, Dimensions, escape, getImage, includes, isUndefined, once, parent, queryAll, startsWith, toFloat, toPx, trigger} from 'uikit-util';
1
+ import {attr, children, createEvent, css, data, escape, includes, isUndefined, parent, queryAll, startsWith, toFloat, toPx, trigger} from 'uikit-util';
2
2
 
3
3
  export default {
4
4
 
5
+ args: 'dataSrc',
6
+
5
7
  props: {
6
- width: Number,
7
- height: Number,
8
+ dataSrc: String,
8
9
  offsetTop: String,
9
10
  offsetLeft: String,
10
11
  target: String
11
12
  },
12
13
 
13
14
  data: {
14
- width: false,
15
- height: false,
15
+ dataSrc: '',
16
16
  offsetTop: '50vh',
17
17
  offsetLeft: '50vw',
18
18
  target: false
@@ -20,18 +20,6 @@ export default {
20
20
 
21
21
  computed: {
22
22
 
23
- cacheKey() {
24
- return `${this.$name}.${data(this.$el, 'data-src')}`;
25
- },
26
-
27
- width({width, dataWidth}) {
28
- return width || dataWidth;
29
- },
30
-
31
- height({height, dataHeight}) {
32
- return height || dataHeight;
33
- },
34
-
35
23
  target: {
36
24
 
37
25
  get({target}) {
@@ -42,14 +30,6 @@ export default {
42
30
  this.observe();
43
31
  }
44
32
 
45
- },
46
-
47
- offsetTop({offsetTop}) {
48
- return toPx(offsetTop, 'height');
49
- },
50
-
51
- offsetLeft({offsetLeft}) {
52
- return toPx(offsetLeft, 'width');
53
33
  }
54
34
 
55
35
  },
@@ -57,21 +37,13 @@ export default {
57
37
  connected() {
58
38
 
59
39
  if (!window.IntersectionObserver) {
60
- setSrcAttrs(this.$el);
40
+ setSrcAttrs(this.$el, this.dataSrc);
61
41
  return;
62
42
  }
63
43
 
64
- if (storage[this.cacheKey]) {
65
- setSrcAttrs(this.$el, storage[this.cacheKey]);
66
- } else if (isImg(this.$el) && this.width && this.height) {
67
- attr(this.$el, 'src', getPlaceholderImage(this.$el));
68
- }
69
-
70
- this.observer = new IntersectionObserver(this.load, {
71
- rootMargin: `${this.offsetTop}px ${this.offsetLeft}px`
72
- });
73
-
74
- requestAnimationFrame(this.observe);
44
+ const rootMargin = `${toPx(this.offsetTop, 'height')}px ${toPx(this.offsetLeft, 'width')}px`;
45
+ this.observer = new IntersectionObserver(this.load, {rootMargin});
46
+ this.observe();
75
47
 
76
48
  },
77
49
 
@@ -83,19 +55,11 @@ export default {
83
55
 
84
56
  read({image}) {
85
57
 
86
- if (!this.observer) {
87
- return false;
88
- }
89
-
90
- if (!image && document.readyState === 'complete') {
91
- this.load(this.observer.takeRecords());
92
- }
93
-
94
- if (isImg(this.$el)) {
58
+ if (!this.observer || isImg(this.$el)) {
95
59
  return false;
96
60
  }
97
61
 
98
- image && image.then(img => img && img.currentSrc !== '' && setSrcAttrs(this.$el, currentSrc(img)));
62
+ setSrcAttrs(this.$el, image && image.currentSrc);
99
63
 
100
64
  },
101
65
 
@@ -127,13 +91,13 @@ export default {
127
91
  return;
128
92
  }
129
93
 
130
- this._data.image = getImageFromElement(this.$el).then(img => {
131
-
132
- setSrcAttrs(this.$el, currentSrc(img));
133
- storage[this.cacheKey] = currentSrc(img);
134
- return img;
94
+ if (this._data.image) {
95
+ return this._data.image;
96
+ }
135
97
 
136
- }, e => trigger(this.$el, new e.constructor(e.type, e)));
98
+ const image = isImg(this.$el) ? this.$el : getImageFromElement(this.$el, this.dataSrc);
99
+ this._data.image = image;
100
+ setSrcAttrs(this.$el, image.currentSrc || this.dataSrc);
137
101
 
138
102
  this.observer.disconnect();
139
103
  },
@@ -148,19 +112,15 @@ export default {
148
112
 
149
113
  };
150
114
 
151
- const srcProps = ['data-src', 'data-srcset', 'sizes'];
152
115
  function setSrcAttrs(el, src) {
153
116
 
154
- const parentNode = parent(el);
155
117
  if (isImg(el)) {
156
- (isPicture(parentNode) ? children(parentNode) : [el]).forEach(el =>
157
- srcProps.forEach(prop => {
158
- const value = data(el, prop);
159
- if (value) {
160
- attr(el, prop.replace(/^(data-)+/, ''), value);
161
- }
162
- })
163
- );
118
+
119
+ const parentNode = parent(el);
120
+ const elements = isPicture(parentNode) ? children(parentNode) : [el];
121
+ elements.forEach(el => setSourceProps(el, el));
122
+ src && attr(el, 'src', src);
123
+
164
124
  } else if (src) {
165
125
 
166
126
  const change = !includes(el.style.backgroundImage, src);
@@ -173,16 +133,26 @@ function setSrcAttrs(el, src) {
173
133
 
174
134
  }
175
135
 
176
- function getPlaceholderImage(el) {
177
- const sizes = data(el, 'sizes');
178
- let width = data(el, 'width');
179
- let height = data(el, 'height');
136
+ const srcProps = ['data-src', 'data-srcset', 'sizes'];
137
+ function setSourceProps(sourceEl, targetEl) {
138
+ srcProps.forEach(prop => {
139
+ const value = data(sourceEl, prop);
140
+ if (value) {
141
+ attr(targetEl, prop.replace(/^(data-)+/, ''), value);
142
+ }
143
+ });
144
+ }
145
+
146
+ function getImageFromElement(el, src) {
180
147
 
181
- if (sizes) {
182
- ({width, height} = Dimensions.ratio({width, height}, 'width', toPx(sizesToPixel(sizes))));
148
+ if (!src) {
149
+ return false;
183
150
  }
184
151
 
185
- return `data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="${width}" height="${height}"></svg>`;
152
+ const img = new Image();
153
+ setSourceProps(el, img);
154
+ attr(img, 'src', src);
155
+ return img;
186
156
  }
187
157
 
188
158
  const sizesRe = /\s*(.*?)\s*(\w+|calc\(.*?\))\s*(?:,|$)/g;
@@ -201,19 +171,6 @@ function sizesToPixel(sizes) {
201
171
  return matches || '100vw';
202
172
  }
203
173
 
204
- function getImageFromElement(el) {
205
- const parentNode = parent(el);
206
- if (!isPicture(parentNode)) {
207
- return getImage(...srcProps.map(prop => data(el, prop)));
208
- }
209
-
210
- return new Promise((resolve, reject) => {
211
- const picture = parentNode.cloneNode(true);
212
- once(picture, 'load error', e => e.type === 'error' ? reject(e) : resolve(e.target), true);
213
- setSrcAttrs(el);
214
- });
215
- }
216
-
217
174
  const sizeRe = /\d+(?:\w+|%)/g;
218
175
  const additionRe = /[+-]?(\d+)/g;
219
176
  function evaluateSize(size) {
@@ -246,19 +203,3 @@ function isImg(el) {
246
203
  function isA(el, tagName) {
247
204
  return el && el.tagName === tagName;
248
205
  }
249
-
250
- function currentSrc(el) {
251
- return el.currentSrc || el.src;
252
- }
253
-
254
- const key = '__test__';
255
- let storage;
256
-
257
- // workaround for Safari's private browsing mode and accessing sessionStorage in Blink
258
- try {
259
- storage = window.sessionStorage || {};
260
- storage[key] = 1;
261
- delete storage[key];
262
- } catch (e) {
263
- storage = {};
264
- }
@@ -1,6 +1,6 @@
1
1
  import Class from '../mixin/class';
2
2
  import Media from '../mixin/media';
3
- import {$, addClass, after, Animation, assign, css, dimensions, fastdom, hasClass, isNumeric, isString, isVisible, noop, offset, offsetPosition, parent, query, remove, removeClass, replaceClass, scrollTop, toFloat, toggleClass, toPx, trigger, within} from 'uikit-util';
3
+ import {$, addClass, after, Animation, assign, css, dimensions, fastdom, height as getHeight, 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
 
@@ -146,6 +146,11 @@ export default {
146
146
 
147
147
  height = !this.isActive ? this.$el.offsetHeight : height;
148
148
 
149
+ if (height + this.offset > getHeight(window)) {
150
+ this.inactive = true;
151
+ return false;
152
+ }
153
+
149
154
  const referenceElement = this.isFixed ? this.placeholder : this.$el;
150
155
  this.topOffset = offset(referenceElement).top;
151
156
  this.bottomOffset = this.topOffset + height;
@@ -14,14 +14,13 @@
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
25
  [uk-cover] {
27
26
  /* 2 */
@@ -32,7 +32,8 @@
32
32
  ========================================================================== */
33
33
 
34
34
  a.uk-link-muted,
35
- .uk-link-muted a {
35
+ .uk-link-muted a,
36
+ .uk-link-toggle .uk-link-muted {
36
37
  color: @link-muted-color;
37
38
  .hook-link-muted();
38
39
  }
@@ -49,7 +50,8 @@ a.uk-link-muted:hover,
49
50
  ========================================================================== */
50
51
 
51
52
  a.uk-link-text,
52
- .uk-link-text a {
53
+ .uk-link-text a,
54
+ .uk-link-toggle .uk-link-text {
53
55
  color: inherit;
54
56
  .hook-link-text();
55
57
  }
@@ -66,7 +68,8 @@ a.uk-link-text:hover,
66
68
  ========================================================================== */
67
69
 
68
70
  a.uk-link-heading,
69
- .uk-link-heading a {
71
+ .uk-link-heading a,
72
+ .uk-link-toggle .uk-link-heading {
70
73
  color: inherit;
71
74
  .hook-link-heading();
72
75
  }
@@ -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
@@ -225,14 +228,19 @@
225
228
  .hook-search-navbar-input();
226
229
  }
227
230
 
231
+ /* Focus */
232
+ .uk-search-navbar .uk-search-input:focus {
233
+ .hook-search-navbar-input-focus();
234
+ }
235
+
228
236
  /*
229
237
  * Icon
230
238
  */
231
239
 
232
240
  .uk-search-navbar .uk-search-icon { width: @search-navbar-icon-width; }
233
241
 
234
- .uk-search-navbar .uk-search-icon:not(.uk-search-icon-flip) ~ .uk-search-input { padding-left: (@search-navbar-icon-width); }
235
- .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); }
236
244
 
237
245
 
238
246
  /* Large modifier
@@ -251,14 +259,19 @@
251
259
  .hook-search-large-input();
252
260
  }
253
261
 
262
+ /* Focus */
263
+ .uk-search-large .uk-search-input:focus {
264
+ .hook-search-large-input-focus();
265
+ }
266
+
254
267
  /*
255
268
  * Icon
256
269
  */
257
270
 
258
271
  .uk-search-large .uk-search-icon { width: @search-large-icon-width; }
259
272
 
260
- .uk-search-large .uk-search-icon:not(.uk-search-icon-flip) ~ .uk-search-input { padding-left: (@search-large-icon-width); }
261
- .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); }
262
275
 
263
276
 
264
277
  /* Toggle
@@ -285,7 +298,9 @@
285
298
  .hook-search-default-input() {}
286
299
  .hook-search-default-input-focus() {}
287
300
  .hook-search-navbar-input() {}
301
+ .hook-search-navbar-input-focus() {}
288
302
  .hook-search-large-input() {}
303
+ .hook-search-large-input-focus() {}
289
304
 
290
305
  .hook-search-toggle() {}
291
306
  .hook-search-toggle-hover() {}
@@ -349,11 +364,19 @@
349
364
  .hook-inverse-search-navbar-input();
350
365
  }
351
366
 
367
+ .uk-search-navbar .uk-search-input:focus {
368
+ .hook-inverse-search-navbar-input-focus();
369
+ }
370
+
352
371
  .uk-search-large .uk-search-input {
353
372
  background-color: @inverse-search-large-background;
354
373
  .hook-inverse-search-large-input();
355
374
  }
356
375
 
376
+ .uk-search-large .uk-search-input:focus {
377
+ .hook-inverse-search-large-input-focus();
378
+ }
379
+
357
380
  //
358
381
  // Toggle
359
382
  //
@@ -373,6 +396,8 @@
373
396
  .hook-inverse-search-default-input() {}
374
397
  .hook-inverse-search-default-input-focus() {}
375
398
  .hook-inverse-search-navbar-input() {}
399
+ .hook-inverse-search-navbar-input-focus() {}
376
400
  .hook-inverse-search-large-input() {}
401
+ .hook-inverse-search-large-input-focus() {}
377
402
  .hook-inverse-search-toggle() {}
378
403
  .hook-inverse-search-toggle-hover() {}
@@ -242,6 +242,12 @@
242
242
  max-width: none;
243
243
  }
244
244
 
245
+ /*
246
+ * Fix initial iframe width. Without the viewport is expanded on iOS devices
247
+ */
248
+
249
+ [uk-responsive] { max-width: 100%; }
250
+
245
251
 
246
252
  /* Border
247
253
  ========================================================================== */
@@ -38,12 +38,16 @@
38
38
 
39
39
  .hook-search-navbar-input() {}
40
40
 
41
+ .hook-search-navbar-input-focus() {}
42
+
41
43
 
42
44
  // Large modifiers
43
45
  // ========================================================================
44
46
 
45
47
  .hook-search-large-input() {}
46
48
 
49
+ .hook-search-large-input-focus() {}
50
+
47
51
 
48
52
  // Toggle
49
53
  // ========================================================================
@@ -68,8 +72,10 @@
68
72
  .hook-inverse-search-default-input-focus() {}
69
73
 
70
74
  .hook-inverse-search-navbar-input() {}
75
+ .hook-inverse-search-navbar-input-focus() {}
71
76
 
72
77
  .hook-inverse-search-large-input() {}
78
+ .hook-inverse-search-large-input-focus() {}
73
79
 
74
80
  .hook-inverse-search-toggle() {}
75
81
  .hook-inverse-search-toggle-hover() {}
@@ -14,14 +14,13 @@
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
25
  [uk-cover] {
27
26
  /* 2 */
@@ -32,7 +32,8 @@ $link-heading-hover-text-decoration: none !default;
32
32
  ========================================================================== */
33
33
 
34
34
  a.uk-link-muted,
35
- .uk-link-muted a {
35
+ .uk-link-muted a,
36
+ .uk-link-toggle .uk-link-muted {
36
37
  color: $link-muted-color;
37
38
  @if(mixin-exists(hook-link-muted)) {@include hook-link-muted();}
38
39
  }
@@ -49,7 +50,8 @@ a.uk-link-muted:hover,
49
50
  ========================================================================== */
50
51
 
51
52
  a.uk-link-text,
52
- .uk-link-text a {
53
+ .uk-link-text a,
54
+ .uk-link-toggle .uk-link-text {
53
55
  color: inherit;
54
56
  @if(mixin-exists(hook-link-text)) {@include hook-link-text();}
55
57
  }
@@ -66,7 +68,8 @@ a.uk-link-text:hover,
66
68
  ========================================================================== */
67
69
 
68
70
  a.uk-link-heading,
69
- .uk-link-heading a {
71
+ .uk-link-heading a,
72
+ .uk-link-toggle .uk-link-heading {
70
73
  color: inherit;
71
74
  @if(mixin-exists(hook-link-heading)) {@include hook-link-heading();}
72
75
  }
@@ -30,6 +30,7 @@ $search-default-background: $global-muted-background !d
30
30
  $search-default-focus-background: darken($search-default-background, 5%) !default;
31
31
 
32
32
  $search-default-icon-width: $global-control-height !default;
33
+ $search-default-icon-padding: 0 !default;
33
34
 
34
35
  $search-navbar-width: 400px !default;
35
36
  $search-navbar-height: 40px !default;
@@ -37,6 +38,7 @@ $search-navbar-background: transparent !default;
37
38
  $search-navbar-font-size: $global-large-font-size !default;
38
39
 
39
40
  $search-navbar-icon-width: 40px !default;
41
+ $search-navbar-icon-padding: 0 !default;
40
42
 
41
43
  $search-large-width: 500px !default;
42
44
  $search-large-height: 80px !default;
@@ -44,6 +46,7 @@ $search-large-background: transparent !default;
44
46
  $search-large-font-size: $global-2xlarge-font-size !default;
45
47
 
46
48
  $search-large-icon-width: 80px !default;
49
+ $search-large-icon-padding: 0 !default;
47
50
 
48
51
  $search-toggle-color: $global-muted-color !default;
49
52
  $search-toggle-hover-color: $global-color !default;
@@ -205,8 +208,8 @@ $search-toggle-hover-color: $global-color !default;
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
@@ -225,14 +228,19 @@ $search-toggle-hover-color: $global-color !default;
225
228
  @if(mixin-exists(hook-search-navbar-input)) {@include hook-search-navbar-input();}
226
229
  }
227
230
 
231
+ /* Focus */
232
+ .uk-search-navbar .uk-search-input:focus {
233
+ @if(mixin-exists(hook-search-navbar-input-focus)) {@include hook-search-navbar-input-focus();}
234
+ }
235
+
228
236
  /*
229
237
  * Icon
230
238
  */
231
239
 
232
240
  .uk-search-navbar .uk-search-icon { width: $search-navbar-icon-width; }
233
241
 
234
- .uk-search-navbar .uk-search-icon:not(.uk-search-icon-flip) ~ .uk-search-input { padding-left: ($search-navbar-icon-width); }
235
- .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); }
236
244
 
237
245
 
238
246
  /* Large modifier
@@ -251,14 +259,19 @@ $search-toggle-hover-color: $global-color !default;
251
259
  @if(mixin-exists(hook-search-large-input)) {@include hook-search-large-input();}
252
260
  }
253
261
 
262
+ /* Focus */
263
+ .uk-search-large .uk-search-input:focus {
264
+ @if(mixin-exists(hook-search-large-input-focus)) {@include hook-search-large-input-focus();}
265
+ }
266
+
254
267
  /*
255
268
  * Icon
256
269
  */
257
270
 
258
271
  .uk-search-large .uk-search-icon { width: $search-large-icon-width; }
259
272
 
260
- .uk-search-large .uk-search-icon:not(.uk-search-icon-flip) ~ .uk-search-input { padding-left: ($search-large-icon-width); }
261
- .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); }
262
275
 
263
276
 
264
277
  /* Toggle
@@ -285,7 +298,9 @@ $search-toggle-hover-color: $global-color !default;
285
298
  // @mixin hook-search-default-input(){}
286
299
  // @mixin hook-search-default-input-focus(){}
287
300
  // @mixin hook-search-navbar-input(){}
301
+ // @mixin hook-search-navbar-input-focus(){}
288
302
  // @mixin hook-search-large-input(){}
303
+ // @mixin hook-search-large-input-focus(){}
289
304
 
290
305
  // @mixin hook-search-toggle(){}
291
306
  // @mixin hook-search-toggle-hover(){}
@@ -316,6 +331,8 @@ $inverse-search-toggle-hover-color: $inverse-global-color !default;
316
331
  // @mixin hook-inverse-search-default-input(){}
317
332
  // @mixin hook-inverse-search-default-input-focus(){}
318
333
  // @mixin hook-inverse-search-navbar-input(){}
334
+ // @mixin hook-inverse-search-navbar-input-focus(){}
319
335
  // @mixin hook-inverse-search-large-input(){}
336
+ // @mixin hook-inverse-search-large-input-focus(){}
320
337
  // @mixin hook-inverse-search-toggle(){}
321
338
  // @mixin hook-inverse-search-toggle-hover(){}
@@ -242,6 +242,12 @@ $dragover-box-shadow: 0 0 20px rgba(100,100,100,0.3)
242
242
  max-width: none;
243
243
  }
244
244
 
245
+ /*
246
+ * Fix initial iframe width. Without the viewport is expanded on iOS devices
247
+ */
248
+
249
+ [uk-responsive] { max-width: 100%; }
250
+
245
251
 
246
252
  /* Border
247
253
  ========================================================================== */