uikit 3.20.9-dev.50e5c71c4 → 3.20.9-dev.76ecfef9e

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 (55) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/dist/css/uikit-core-rtl.css +1 -1
  3. package/dist/css/uikit-core-rtl.min.css +1 -1
  4. package/dist/css/uikit-core.css +1 -1
  5. package/dist/css/uikit-core.min.css +1 -1
  6. package/dist/css/uikit-rtl.css +1 -1
  7. package/dist/css/uikit-rtl.min.css +1 -1
  8. package/dist/css/uikit.css +1 -1
  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 +1 -1
  13. package/dist/js/components/filter.min.js +1 -1
  14. package/dist/js/components/lightbox-panel.js +4 -1
  15. package/dist/js/components/lightbox-panel.min.js +1 -1
  16. package/dist/js/components/lightbox.js +4 -1
  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 +11 -5
  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 +10 -4
  29. package/dist/js/components/slideshow.min.js +1 -1
  30. package/dist/js/components/sortable.js +1 -1
  31. package/dist/js/components/sortable.min.js +1 -1
  32. package/dist/js/components/tooltip.js +1 -1
  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 +63 -62
  37. package/dist/js/uikit-core.min.js +1 -1
  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 +81 -71
  41. package/dist/js/uikit.min.js +1 -1
  42. package/package.json +1 -1
  43. package/src/js/api/component.js +1 -1
  44. package/src/js/components/internal/slider-transitioner.js +4 -0
  45. package/src/js/components/slider.js +1 -1
  46. package/src/js/core/grid.js +4 -7
  47. package/src/js/core/inverse.js +30 -3
  48. package/src/js/core/modal.js +1 -1
  49. package/src/js/core/scrollspy-nav.js +2 -2
  50. package/src/js/core/scrollspy.js +1 -1
  51. package/src/js/core/sticky.js +16 -22
  52. package/src/js/mixin/internal/slideshow-transitioner.js +4 -0
  53. package/src/js/mixin/slider-parallax.js +7 -3
  54. package/src/js/util/viewport.js +8 -8
  55. package/tests/modal.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.20.9-dev.50e5c71c4",
5
+ "version": "3.20.9-dev.76ecfef9e",
6
6
  "main": "dist/js/uikit.js",
7
7
  "style": "dist/css/uikit.css",
8
8
  "sideEffects": [
@@ -78,7 +78,7 @@ export function attachToElement(element, instance) {
78
78
  export function detachFromElement(element, instance) {
79
79
  delete element[DATA]?.[instance.$options.name];
80
80
 
81
- if (!isEmpty(element[DATA])) {
81
+ if (isEmpty(element[DATA])) {
82
82
  delete element[DATA];
83
83
  }
84
84
  }
@@ -69,6 +69,10 @@ export default function (prev, next, dir, { center, easing, list }) {
69
69
  },
70
70
 
71
71
  translate(percent) {
72
+ if (percent === this.percent()) {
73
+ return;
74
+ }
75
+
72
76
  const distance = this.getDistance() * dir * (isRtl ? -1 : 1);
73
77
 
74
78
  css(
@@ -219,7 +219,7 @@ export default {
219
219
  ),
220
220
  );
221
221
 
222
- if (!this.center) {
222
+ if (!this.center || !this.length) {
223
223
  return;
224
224
  }
225
225
 
@@ -123,14 +123,11 @@ export default {
123
123
 
124
124
  {
125
125
  read({ rows, scrollColumns, parallaxStart, parallaxEnd }) {
126
- if (scrollColumns && positionedAbsolute(rows)) {
127
- return false;
128
- }
129
-
130
126
  return {
131
- scrolled: scrollColumns
132
- ? scrolledOver(this.$el, parallaxStart, parallaxEnd)
133
- : false,
127
+ scrolled:
128
+ scrollColumns && !positionedAbsolute(rows)
129
+ ? scrolledOver(this.$el, parallaxStart, parallaxEnd)
130
+ : false,
134
131
  };
135
132
  },
136
133
 
@@ -1,4 +1,14 @@
1
- import { $$, css, dimensions, matches, observeResize, on, replaceClass, toNodes } from 'uikit-util';
1
+ import {
2
+ $$,
3
+ css,
4
+ dimensions,
5
+ matches,
6
+ observeResize,
7
+ on,
8
+ parent,
9
+ replaceClass,
10
+ toNodes,
11
+ } from 'uikit-util';
2
12
  import { intersection, mutation } from '../api/observables';
3
13
 
4
14
  export default {
@@ -91,13 +101,14 @@ function findTargetColor(target) {
91
101
  let last;
92
102
  for (const percent of [0.25, 0.5, 0.75]) {
93
103
  const elements = target.ownerDocument.elementsFromPoint(
94
- Math.max(0, left) + width * percent,
95
- Math.max(0, top) + height / 2,
104
+ Math.max(0, left + width * percent),
105
+ Math.max(0, top + height / 2),
96
106
  );
97
107
 
98
108
  for (const element of elements) {
99
109
  if (
100
110
  target.contains(element) ||
111
+ !isVisible(element) ||
101
112
  (element.closest('[class*="-leave"]') &&
102
113
  elements.some((el) => element !== el && matches(el, '[class*="-enter"]')))
103
114
  ) {
@@ -118,3 +129,19 @@ function findTargetColor(target) {
118
129
 
119
130
  return last ? `uk-${last}` : '';
120
131
  }
132
+
133
+ // TODO: once it becomes Baseline `element.checkVisibility({ opacityProperty: true, visibilityProperty: true })`
134
+ function isVisible(element) {
135
+ if (css(element, 'visibility') !== 'visible') {
136
+ return false;
137
+ }
138
+
139
+ while (element) {
140
+ if (css(element, 'opacity') === '0') {
141
+ return false;
142
+ }
143
+ element = parent(element);
144
+ }
145
+
146
+ return true;
147
+ }
@@ -126,7 +126,7 @@ function install({ modal }) {
126
126
  ({ i18n }) => `<form class="uk-form-stacked">
127
127
  <div class="uk-modal-body">
128
128
  <label>${isString(message) ? message : html(message)}</label>
129
- <input class="uk-input" value="" autofocus>
129
+ <input class="uk-input" autofocus>
130
130
  </div>
131
131
  <div class="uk-modal-footer uk-text-right">
132
132
  <button class="uk-button uk-button-default uk-modal-close" type="button">${
@@ -68,9 +68,9 @@ export default {
68
68
  if (scrollTop === max) {
69
69
  active = length - 1;
70
70
  } else {
71
+ const offsetBy = this.offset + offset(getCoveringElement()).height;
72
+
71
73
  for (let i = 0; i < targets.length; i++) {
72
- const fixedEl = getCoveringElement(targets[i]);
73
- const offsetBy = this.offset + (fixedEl ? offset(fixedEl).height : 0);
74
74
  if (offset(targets[i]).top - viewport.top - offsetBy > 0) {
75
75
  break;
76
76
  }
@@ -108,7 +108,7 @@ export default {
108
108
 
109
109
  methods: {
110
110
  toggle(el, inview) {
111
- const state = this.elementData.get(el);
111
+ const state = this.elementData?.get(el);
112
112
 
113
113
  if (!state) {
114
114
  return;
@@ -16,7 +16,6 @@ import {
16
16
  isVisible,
17
17
  noop,
18
18
  offsetPosition,
19
- once,
20
19
  parent,
21
20
  query,
22
21
  remove,
@@ -97,15 +96,19 @@ export default {
97
96
  },
98
97
 
99
98
  observe: [
100
- viewport({
101
- handler() {
102
- if (toPx('100vh', 'height') !== this._data.viewport) {
103
- this.$emit('resize');
104
- }
99
+ viewport(),
100
+ scroll({ target: () => document.scrollingElement }),
101
+ resize({
102
+ target: ({ $el }) => [$el, parent($el), document.scrollingElement],
103
+ handler(entries) {
104
+ this.$emit(
105
+ this._data.resized && entries.some(({ target }) => target === parent(this.$el))
106
+ ? 'update'
107
+ : 'resize',
108
+ );
109
+ this._data.resized = true;
105
110
  },
106
111
  }),
107
- scroll({ target: () => document.scrollingElement }),
108
- resize({ target: ({ $el }) => [$el, document.scrollingElement] }),
109
112
  ],
110
113
 
111
114
  events: [
@@ -142,29 +145,18 @@ export default {
142
145
  });
143
146
  },
144
147
  },
145
- {
146
- name: 'transitionstart',
147
-
148
- handler() {
149
- this.transitionInProgress = once(
150
- this.$el,
151
- 'transitionend transitioncancel',
152
- () => (this.transitionInProgress = null),
153
- );
154
- },
155
- },
156
148
  ],
157
149
 
158
150
  update: [
159
151
  {
160
- read({ height, width, margin, sticky }) {
152
+ read({ height, width, margin, sticky }, types) {
161
153
  this.inactive = !this.matchMedia || !isVisible(this.$el);
162
154
 
163
155
  if (this.inactive) {
164
156
  return;
165
157
  }
166
158
 
167
- const hide = this.isFixed && !this.transitionInProgress;
159
+ const hide = this.isFixed && types.has('update');
168
160
  if (hide) {
169
161
  preventTransition(this.target);
170
162
  this.hide();
@@ -239,6 +231,7 @@ export default {
239
231
  top: offsetPosition(referenceElement)[0],
240
232
  sticky,
241
233
  viewport,
234
+ maxScrollHeight,
242
235
  };
243
236
  },
244
237
 
@@ -283,8 +276,9 @@ export default {
283
276
  elHeight,
284
277
  height,
285
278
  sticky,
279
+ maxScrollHeight,
286
280
  }) {
287
- const scroll = document.scrollingElement.scrollTop;
281
+ const scroll = Math.min(document.scrollingElement.scrollTop, maxScrollHeight);
288
282
  const dir = prevScroll <= scroll ? 'down' : 'up';
289
283
  const referenceElement = this.isFixed ? this.placeholder : this.$el;
290
284
 
@@ -46,6 +46,10 @@ export default function Transitioner(prev, next, dir, { animation, easing }) {
46
46
  },
47
47
 
48
48
  translate(percent) {
49
+ if (percent === this.percent()) {
50
+ return;
51
+ }
52
+
49
53
  this.reset();
50
54
 
51
55
  const props = translate(percent, dir);
@@ -34,9 +34,9 @@ export default {
34
34
  },
35
35
 
36
36
  update: {
37
- write() {
37
+ read() {
38
38
  if (!this.parallax) {
39
- return;
39
+ return false;
40
40
  }
41
41
 
42
42
  const target = this.parallaxTarget;
@@ -44,7 +44,11 @@ export default {
44
44
  const end = toPx(this.parallaxEnd, 'height', target, true);
45
45
  const percent = ease(scrolledOver(target, start, end), this.parallaxEasing);
46
46
 
47
- const [prevIndex, slidePercent] = this.getIndexAt(percent);
47
+ return { parallax: this.getIndexAt(percent) };
48
+ },
49
+
50
+ write({ parallax }) {
51
+ const [prevIndex, slidePercent] = parallax;
48
52
 
49
53
  const nextIndex = this.getValidIndex(prevIndex + Math.ceil(slidePercent));
50
54
 
@@ -184,7 +184,7 @@ export function offsetViewport(scrollElement) {
184
184
  ]) {
185
185
  if (isWindow(viewportElement)) {
186
186
  // iOS 12 returns <body> as scrollingElement
187
- viewportElement = scrollElement.ownerDocument;
187
+ viewportElement = viewportElement.document;
188
188
  } else {
189
189
  rect[start] += toFloat(css(viewportElement, `border-${start}-width`));
190
190
  }
@@ -199,9 +199,9 @@ export function offsetViewport(scrollElement) {
199
199
 
200
200
  export function getCoveringElement(target) {
201
201
  const { left, width, top } = dimensions(target);
202
- for (const topPosition of [0, top]) {
203
- const coverEl = target.ownerDocument.elementsFromPoint(left + width / 2, topPosition).find(
204
- (el) =>
202
+ for (const position of top ? [0, top] : [0]) {
203
+ for (const el of toWindow(target).document.elementsFromPoint(left + width / 2, position)) {
204
+ if (
205
205
  !el.contains(target) &&
206
206
  // If e.g. Offcanvas is not yet closed
207
207
  !hasClass(el, 'uk-togglable-leave') &&
@@ -213,10 +213,10 @@ export function getCoveringElement(target) {
213
213
  (parent) => !parent.contains(el) && !hasPosition(parent, 'static'),
214
214
  ),
215
215
  ) < zIndex(el)) ||
216
- (hasPosition(el, 'sticky') && parent(el).contains(target))),
217
- );
218
- if (coverEl) {
219
- return coverEl;
216
+ (hasPosition(el, 'sticky') && parent(el).contains(target)))
217
+ ) {
218
+ return el;
219
+ }
220
220
  }
221
221
  }
222
222
  }
package/tests/modal.html CHANGED
@@ -487,7 +487,7 @@
487
487
  on('#js-modal-prompt', 'click', async e => {
488
488
  e.preventDefault();
489
489
  e.target.blur();
490
- const name = await modal.prompt('Name:', 'Your "name"');
490
+ const name = await modal.prompt('Name:', 'Your name');
491
491
  console.log('Prompted:', name);
492
492
  });
493
493