uikit 3.15.2 → 3.15.3-dev.45f4472ed

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 (57) hide show
  1. package/CHANGELOG.md +11 -1
  2. package/dist/css/uikit-core-rtl.css +2 -2
  3. package/dist/css/uikit-core-rtl.min.css +1 -1
  4. package/dist/css/uikit-core.css +2 -2
  5. package/dist/css/uikit-core.min.css +1 -1
  6. package/dist/css/uikit-rtl.css +2 -2
  7. package/dist/css/uikit-rtl.min.css +1 -1
  8. package/dist/css/uikit.css +2 -2
  9. package/dist/css/uikit.min.css +1 -1
  10. package/dist/js/components/countdown.js +1 -1
  11. package/dist/js/components/countdown.min.js +1 -1
  12. package/dist/js/components/filter.js +102 -109
  13. package/dist/js/components/filter.min.js +1 -1
  14. package/dist/js/components/lightbox-panel.js +2 -4
  15. package/dist/js/components/lightbox-panel.min.js +1 -1
  16. package/dist/js/components/lightbox.js +2 -4
  17. package/dist/js/components/lightbox.min.js +1 -1
  18. package/dist/js/components/notification.js +1 -1
  19. package/dist/js/components/notification.min.js +1 -1
  20. package/dist/js/components/parallax.js +1 -1
  21. package/dist/js/components/parallax.min.js +1 -1
  22. package/dist/js/components/slider-parallax.js +1 -1
  23. package/dist/js/components/slider-parallax.min.js +1 -1
  24. package/dist/js/components/slider.js +4 -2
  25. package/dist/js/components/slider.min.js +1 -1
  26. package/dist/js/components/slideshow-parallax.js +1 -1
  27. package/dist/js/components/slideshow-parallax.min.js +1 -1
  28. package/dist/js/components/slideshow.js +4 -2
  29. package/dist/js/components/slideshow.min.js +1 -1
  30. package/dist/js/components/sortable.js +90 -96
  31. package/dist/js/components/sortable.min.js +1 -1
  32. package/dist/js/components/tooltip.js +1 -3
  33. package/dist/js/components/tooltip.min.js +1 -1
  34. package/dist/js/components/upload.js +1 -1
  35. package/dist/js/components/upload.min.js +1 -1
  36. package/dist/js/uikit-core.js +4 -8
  37. package/dist/js/uikit-core.min.js +2 -2
  38. package/dist/js/uikit-icons.js +1 -1
  39. package/dist/js/uikit-icons.min.js +1 -1
  40. package/dist/js/uikit.js +109 -118
  41. package/dist/js/uikit.min.js +2 -2
  42. package/package.json +1 -1
  43. package/src/js/api/state.js +1 -1
  44. package/src/js/components/filter.js +12 -14
  45. package/src/js/core/cover.js +1 -1
  46. package/src/js/core/scrollspy.js +0 -2
  47. package/src/js/mixin/internal/animate-fade.js +50 -51
  48. package/src/js/mixin/internal/animate-slide.js +52 -57
  49. package/src/js/mixin/slider-reactive.js +2 -0
  50. package/src/js/mixin/slider.js +1 -1
  51. package/src/js/mixin/togglable.js +0 -2
  52. package/src/less/components/nav.less +1 -1
  53. package/src/less/components/navbar.less +2 -1
  54. package/src/scss/components/nav.scss +1 -1
  55. package/src/scss/components/navbar.scss +2 -1
  56. package/src/scss/variables-theme.scss +1 -0
  57. package/src/scss/variables.scss +1 -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.15.2",
5
+ "version": "3.15.3-dev.45f4472ed",
6
6
  "main": "dist/js/uikit.js",
7
7
  "style": "dist/css/uikit.css",
8
8
  "sideEffects": [
@@ -267,7 +267,7 @@ function normalizeData({ data = {} }, { args = [], props = {} }) {
267
267
  function initChildListObserver(component) {
268
268
  const { el } = component.$options;
269
269
 
270
- const observer = new MutationObserver(() => component.$emit());
270
+ const observer = new MutationObserver(() => component._callWatches());
271
271
  observer.observe(el, {
272
272
  childList: true,
273
273
  subtree: true,
@@ -5,7 +5,6 @@ import {
5
5
  css,
6
6
  data,
7
7
  each,
8
- fastdom,
9
8
  children as getChildren,
10
9
  hasClass,
11
10
  includes,
@@ -43,7 +42,7 @@ export default {
43
42
  },
44
43
 
45
44
  watch() {
46
- this.updateState();
45
+ this.$emit();
47
46
 
48
47
  if (this.selActive !== false) {
49
48
  const actives = $$(this.selActive, this.$el);
@@ -61,7 +60,7 @@ export default {
61
60
 
62
61
  watch(list, old) {
63
62
  if (old && !isEqualList(list, old)) {
64
- this.updateState();
63
+ this.$emit();
65
64
  }
66
65
  },
67
66
 
@@ -69,6 +68,12 @@ export default {
69
68
  },
70
69
  },
71
70
 
71
+ update: {
72
+ write() {
73
+ this.setState(this.getState(), false);
74
+ },
75
+ },
76
+
72
77
  events: [
73
78
  {
74
79
  name: 'click',
@@ -108,26 +113,19 @@ export default {
108
113
 
109
114
  trigger(this.$el, 'beforeFilter', [this, state]);
110
115
 
111
- this.toggles.forEach((el) =>
112
- toggleClass(el, this.cls, !!matchFilter(el, this.attrItem, state))
113
- );
116
+ for (const el of this.toggles) {
117
+ toggleClass(el, this.cls, !!matchFilter(el, this.attrItem, state));
118
+ }
114
119
 
115
120
  await Promise.all(
116
121
  $$(this.target, this.$el).map((target) => {
117
- const filterFn = () => {
118
- applyState(state, target, getChildren(target));
119
- this.$update(this.$el);
120
- };
122
+ const filterFn = () => applyState(state, target, getChildren(target));
121
123
  return animate ? this.animate(filterFn, target) : filterFn();
122
124
  })
123
125
  );
124
126
 
125
127
  trigger(this.$el, 'afterFilter', [this]);
126
128
  },
127
-
128
- updateState() {
129
- fastdom.write(() => this.setState(this.getState(), false));
130
- },
131
129
  },
132
130
  };
133
131
 
@@ -21,7 +21,7 @@ export default {
21
21
  },
22
22
 
23
23
  resizeTargets() {
24
- return [this.$el, parent(this.$el)];
24
+ return [this.$el, getPositionedParent(this.$el) || parent(this.$el)];
25
25
  },
26
26
 
27
27
  update: {
@@ -151,8 +151,6 @@ export default {
151
151
  trigger(el, inview ? 'inview' : 'outview');
152
152
 
153
153
  state.inview = inview;
154
-
155
- this.$update(el);
156
154
  },
157
155
  },
158
156
  };
@@ -23,10 +23,10 @@ export default function fade(action, target, duration, stagger = 0) {
23
23
 
24
24
  const wrapIndexFn = (fn) => () => index === transitionIndex(target) ? fn() : Promise.reject();
25
25
 
26
- const leaveFn = wrapIndexFn(() => {
26
+ const leaveFn = wrapIndexFn(async () => {
27
27
  addClass(target, clsLeave);
28
28
 
29
- return Promise.all(
29
+ await Promise.all(
30
30
  getTransitionNodes(target).map(
31
31
  (child, i) =>
32
32
  new Promise((resolve) =>
@@ -39,10 +39,12 @@ export default function fade(action, target, duration, stagger = 0) {
39
39
  )
40
40
  )
41
41
  )
42
- ).then(() => removeClass(target, clsLeave));
42
+ );
43
+
44
+ removeClass(target, clsLeave);
43
45
  });
44
46
 
45
- const enterFn = wrapIndexFn(() => {
47
+ const enterFn = wrapIndexFn(async () => {
46
48
  const oldHeight = height(target);
47
49
 
48
50
  addClass(target, clsEnter);
@@ -51,53 +53,42 @@ export default function fade(action, target, duration, stagger = 0) {
51
53
  css(children(target), { opacity: 0 });
52
54
 
53
55
  // Ensure UIkit updates have propagated
54
- return new Promise((resolve) =>
55
- requestAnimationFrame(() => {
56
- const nodes = children(target);
57
- const newHeight = height(target);
58
-
59
- // Ensure Grid cells do not stretch when height is applied
60
- css(target, 'alignContent', 'flex-start');
61
- height(target, oldHeight);
62
-
63
- const transitionNodes = getTransitionNodes(target);
64
- css(nodes, propsOut);
65
-
66
- const transitions = transitionNodes.map(
67
- (child, i) =>
68
- new Promise((resolve) =>
69
- setTimeout(
70
- () =>
71
- Transition.start(child, propsIn, duration / 2, 'ease').then(
72
- resolve
73
- ),
74
- i * stagger
75
- )
76
- )
77
- );
78
-
79
- if (oldHeight !== newHeight) {
80
- transitions.push(
81
- Transition.start(
82
- target,
83
- { height: newHeight },
84
- duration / 2 + transitionNodes.length * stagger,
85
- 'ease'
86
- )
87
- );
88
- }
89
-
90
- Promise.all(transitions).then(() => {
91
- removeClass(target, clsEnter);
92
- if (index === transitionIndex(target)) {
93
- css(target, { height: '', alignContent: '' });
94
- css(nodes, { opacity: '' });
95
- delete target.dataset.transition;
96
- }
97
- resolve();
98
- });
99
- })
100
- );
56
+ await awaitFrame();
57
+
58
+ const nodes = children(target);
59
+ const newHeight = height(target);
60
+
61
+ // Ensure Grid cells do not stretch when height is applied
62
+ css(target, 'alignContent', 'flex-start');
63
+ height(target, oldHeight);
64
+
65
+ const transitionNodes = getTransitionNodes(target);
66
+ css(nodes, propsOut);
67
+
68
+ const transitions = transitionNodes.map(async (child, i) => {
69
+ await awaitTimeout(i * stagger);
70
+ await Transition.start(child, propsIn, duration / 2, 'ease');
71
+ });
72
+
73
+ if (oldHeight !== newHeight) {
74
+ transitions.push(
75
+ Transition.start(
76
+ target,
77
+ { height: newHeight },
78
+ duration / 2 + transitionNodes.length * stagger,
79
+ 'ease'
80
+ )
81
+ );
82
+ }
83
+
84
+ await Promise.all(transitions).then(() => {
85
+ removeClass(target, clsEnter);
86
+ if (index === transitionIndex(target)) {
87
+ css(target, { height: '', alignContent: '' });
88
+ css(nodes, { opacity: '' });
89
+ delete target.dataset.transition;
90
+ }
91
+ });
101
92
  });
102
93
 
103
94
  return hasClass(target, clsLeave)
@@ -138,3 +129,11 @@ function getTransitionNodes(target) {
138
129
  []
139
130
  );
140
131
  }
132
+
133
+ function awaitFrame() {
134
+ return new Promise((resolve) => requestAnimationFrame(resolve));
135
+ }
136
+
137
+ function awaitTimeout(timeout) {
138
+ return new Promise((resolve) => setTimeout(resolve, timeout));
139
+ }
@@ -12,63 +12,54 @@ import {
12
12
  Transition,
13
13
  } from 'uikit-util';
14
14
 
15
- export default function (action, target, duration) {
16
- return new Promise((resolve) =>
17
- requestAnimationFrame(() => {
18
- let nodes = children(target);
19
-
20
- // Get current state
21
- const currentProps = nodes.map((el) => getProps(el, true));
22
- const targetProps = css(target, ['height', 'padding']);
23
-
24
- // Cancel previous animations
25
- Transition.cancel(target);
26
- nodes.forEach(Transition.cancel);
27
- reset(target);
28
-
29
- // Adding, sorting, removing nodes
30
- action();
31
-
32
- // Find new nodes
33
- nodes = nodes.concat(children(target).filter((el) => !includes(nodes, el)));
34
-
35
- // Wait for update to propagate
36
- Promise.resolve().then(() => {
37
- // Force update
38
- fastdom.flush();
39
-
40
- // Get new state
41
- const targetPropsTo = css(target, ['height', 'padding']);
42
- const [propsTo, propsFrom] = getTransitionProps(target, nodes, currentProps);
43
-
44
- // Reset to previous state
45
- nodes.forEach((el, i) => propsFrom[i] && css(el, propsFrom[i]));
46
- css(target, { display: 'block', ...targetProps });
47
-
48
- // Start transitions on next frame
49
- requestAnimationFrame(() => {
50
- const transitions = nodes
51
- .map(
52
- (el, i) =>
53
- parent(el) === target &&
54
- Transition.start(el, propsTo[i], duration, 'ease')
55
- )
56
- .concat(Transition.start(target, targetPropsTo, duration, 'ease'));
57
-
58
- Promise.all(transitions)
59
- .then(() => {
60
- nodes.forEach(
61
- (el, i) =>
62
- parent(el) === target &&
63
- css(el, 'display', propsTo[i].opacity === 0 ? 'none' : '')
64
- );
65
- reset(target);
66
- }, noop)
67
- .then(resolve);
68
- });
69
- });
70
- })
71
- );
15
+ export default async function (action, target, duration) {
16
+ await awaitFrame();
17
+
18
+ let nodes = children(target);
19
+
20
+ // Get current state
21
+ const currentProps = nodes.map((el) => getProps(el, true));
22
+ const targetProps = css(target, ['height', 'padding']);
23
+
24
+ // Cancel previous animations
25
+ Transition.cancel(target);
26
+ nodes.forEach(Transition.cancel);
27
+ reset(target);
28
+
29
+ // Adding, sorting, removing nodes
30
+ action();
31
+
32
+ // Find new nodes
33
+ nodes = nodes.concat(children(target).filter((el) => !includes(nodes, el)));
34
+
35
+ // Wait for update to propagate
36
+ await Promise.resolve();
37
+
38
+ // Force update
39
+ fastdom.flush();
40
+
41
+ // Get new state
42
+ const targetPropsTo = css(target, ['height', 'padding']);
43
+ const [propsTo, propsFrom] = getTransitionProps(target, nodes, currentProps);
44
+
45
+ // Reset to previous state
46
+ nodes.forEach((el, i) => propsFrom[i] && css(el, propsFrom[i]));
47
+ css(target, { display: 'block', ...targetProps });
48
+
49
+ // Start transitions on next frame
50
+ await awaitFrame();
51
+
52
+ const transitions = nodes
53
+ .map((el, i) => parent(el) === target && Transition.start(el, propsTo[i], duration, 'ease'))
54
+ .concat(Transition.start(target, targetPropsTo, duration, 'ease'));
55
+
56
+ await Promise.all(transitions).then(() => {
57
+ nodes.forEach(
58
+ (el, i) =>
59
+ parent(el) === target && css(el, 'display', propsTo[i].opacity === 0 ? 'none' : '')
60
+ );
61
+ reset(target);
62
+ }, noop);
72
63
  }
73
64
 
74
65
  function getProps(el, opacity) {
@@ -146,3 +137,7 @@ function getPositionWithMargin(el) {
146
137
 
147
138
  return { top, left, height, width, marginLeft, marginTop, transform: '' };
148
139
  }
140
+
141
+ function awaitFrame() {
142
+ return new Promise((resolve) => requestAnimationFrame(resolve));
143
+ }
@@ -9,6 +9,8 @@ export default {
9
9
 
10
10
  if (!~this.prevIndex || this.index !== index) {
11
11
  this.show(index);
12
+ } else {
13
+ this._translate(1, this.prevIndex, this.index);
12
14
  }
13
15
  },
14
16
 
@@ -74,7 +74,7 @@ export default {
74
74
  },
75
75
 
76
76
  watch() {
77
- this.$reset();
77
+ this.$emit('resize');
78
78
  },
79
79
  },
80
80
 
@@ -82,7 +82,6 @@ export default {
82
82
  const done = () => {
83
83
  removeClass(el, cls);
84
84
  trigger(el, show ? 'shown' : 'hidden', [this]);
85
- this.$update(el);
86
85
  };
87
86
 
88
87
  return promise
@@ -127,7 +126,6 @@ export default {
127
126
 
128
127
  if (changed) {
129
128
  trigger(el, 'toggled', [toggled, this]);
130
- this.$update(el);
131
129
  }
132
130
  },
133
131
  },
@@ -454,7 +454,7 @@ ul.uk-nav-sub {
454
454
  * Naming is in plural to prevent conflicts with divider sub object.
455
455
  */
456
456
 
457
- .uk-nav.uk-nav-divider > :not(.uk-nav-divider) + :not(.uk-nav-header, .uk-nav-divider) {
457
+ .uk-nav.uk-nav-divider > :not(.uk-nav-header, .uk-nav-divider) + :not(.uk-nav-header, .uk-nav-divider) {
458
458
  margin-top: @nav-dividers-margin-top;
459
459
  padding-top: @nav-dividers-margin-top;
460
460
  border-top: @nav-dividers-border-width solid @nav-dividers-border;
@@ -77,6 +77,7 @@
77
77
  @navbar-dropdown-large-shift-margin: 0;
78
78
  @navbar-dropdown-large-padding: 40px;
79
79
 
80
+ @navbar-dropdown-dropbar-margin: 0;
80
81
  @navbar-dropdown-dropbar-shift-margin: 0;
81
82
  @navbar-dropdown-dropbar-padding-top: @navbar-dropdown-padding;
82
83
  @navbar-dropdown-dropbar-padding-bottom: @navbar-dropdown-dropbar-padding-top;
@@ -462,7 +463,7 @@
462
463
  background: transparent;
463
464
  /* 3 */
464
465
  padding: @navbar-dropdown-dropbar-padding-top 0 @navbar-dropdown-dropbar-padding-bottom 0;
465
- --uk-position-offset: 0;
466
+ --uk-position-offset: @navbar-dropdown-dropbar-margin;
466
467
  --uk-position-shift-offset: @navbar-dropdown-dropbar-shift-margin;
467
468
  --uk-position-viewport-offset: @navbar-dropdown-dropbar-viewport-margin;
468
469
  .hook-navbar-dropdown-dropbar();
@@ -454,7 +454,7 @@ ul.uk-nav-sub {
454
454
  * Naming is in plural to prevent conflicts with divider sub object.
455
455
  */
456
456
 
457
- .uk-nav.uk-nav-divider > :not(.uk-nav-divider) + :not(.uk-nav-header, .uk-nav-divider) {
457
+ .uk-nav.uk-nav-divider > :not(.uk-nav-header, .uk-nav-divider) + :not(.uk-nav-header, .uk-nav-divider) {
458
458
  margin-top: $nav-dividers-margin-top;
459
459
  padding-top: $nav-dividers-margin-top;
460
460
  border-top: $nav-dividers-border-width solid $nav-dividers-border;
@@ -77,6 +77,7 @@ $navbar-dropdown-grid-gutter-vertical: $navbar-dropdown-grid-gutter-ho
77
77
  $navbar-dropdown-large-shift-margin: 0 !default;
78
78
  $navbar-dropdown-large-padding: 40px !default;
79
79
 
80
+ $navbar-dropdown-dropbar-margin: 0 !default;
80
81
  $navbar-dropdown-dropbar-shift-margin: 0 !default;
81
82
  $navbar-dropdown-dropbar-padding-top: $navbar-dropdown-padding !default;
82
83
  $navbar-dropdown-dropbar-padding-bottom: $navbar-dropdown-dropbar-padding-top !default;
@@ -462,7 +463,7 @@ $navbar-dropbar-z-index: $global-z-index - 20 !default;
462
463
  background: transparent;
463
464
  /* 3 */
464
465
  padding: $navbar-dropdown-dropbar-padding-top 0 $navbar-dropdown-dropbar-padding-bottom 0;
465
- --uk-position-offset: 0;
466
+ --uk-position-offset: #{$navbar-dropdown-dropbar-margin};
466
467
  --uk-position-shift-offset: #{$navbar-dropdown-dropbar-shift-margin};
467
468
  --uk-position-viewport-offset: #{$navbar-dropdown-dropbar-viewport-margin};
468
469
  @if(mixin-exists(hook-navbar-dropdown-dropbar)) {@include hook-navbar-dropdown-dropbar();}
@@ -809,6 +809,7 @@ $navbar-dropdown-grid-gutter-horizontal: $global-gutter !default;
809
809
  $navbar-dropdown-grid-gutter-vertical: $navbar-dropdown-grid-gutter-horizontal !default;
810
810
  $navbar-dropdown-large-shift-margin: 0 !default;
811
811
  $navbar-dropdown-large-padding: 40px !default;
812
+ $navbar-dropdown-dropbar-margin: 0 !default;
812
813
  $navbar-dropdown-dropbar-shift-margin: 0 !default;
813
814
  $navbar-dropdown-dropbar-padding-top: $navbar-dropdown-padding !default;
814
815
  $navbar-dropdown-dropbar-padding-bottom: $navbar-dropdown-dropbar-padding-top !default;
@@ -807,6 +807,7 @@ $navbar-dropdown-grid-gutter-horizontal: $global-gutter !default;
807
807
  $navbar-dropdown-grid-gutter-vertical: $navbar-dropdown-grid-gutter-horizontal !default;
808
808
  $navbar-dropdown-large-shift-margin: 0 !default;
809
809
  $navbar-dropdown-large-padding: 40px !default;
810
+ $navbar-dropdown-dropbar-margin: 0 !default;
810
811
  $navbar-dropdown-dropbar-shift-margin: 0 !default;
811
812
  $navbar-dropdown-dropbar-padding-top: $navbar-dropdown-padding !default;
812
813
  $navbar-dropdown-dropbar-padding-bottom: $navbar-dropdown-dropbar-padding-top !default;