uikit 3.13.10 → 3.13.11-dev.eb080f280

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 (92) hide show
  1. package/CHANGELOG.md +29 -1
  2. package/dist/css/uikit-core-rtl.css +46 -8
  3. package/dist/css/uikit-core-rtl.min.css +1 -1
  4. package/dist/css/uikit-core.css +46 -8
  5. package/dist/css/uikit-core.min.css +1 -1
  6. package/dist/css/uikit-rtl.css +46 -6
  7. package/dist/css/uikit-rtl.min.css +1 -1
  8. package/dist/css/uikit.css +46 -6
  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 +7 -3
  15. package/dist/js/components/lightbox-panel.min.js +1 -1
  16. package/dist/js/components/lightbox.js +7 -3
  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 +18 -11
  21. package/dist/js/components/parallax.min.js +1 -1
  22. package/dist/js/components/slider-parallax.js +18 -11
  23. package/dist/js/components/slider-parallax.min.js +1 -1
  24. package/dist/js/components/slider.js +1 -1
  25. package/dist/js/components/slider.min.js +1 -1
  26. package/dist/js/components/slideshow-parallax.js +18 -11
  27. package/dist/js/components/slideshow-parallax.min.js +1 -1
  28. package/dist/js/components/slideshow.js +1 -1
  29. package/dist/js/components/slideshow.min.js +1 -1
  30. package/dist/js/components/sortable.js +2 -2
  31. package/dist/js/components/sortable.min.js +1 -1
  32. package/dist/js/components/tooltip.js +62 -30
  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 +349 -253
  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 +392 -259
  41. package/dist/js/uikit.min.js +1 -1
  42. package/package.json +1 -1
  43. package/src/js/components/sortable.js +2 -3
  44. package/src/js/components/tooltip.js +38 -3
  45. package/src/js/core/drop.js +20 -10
  46. package/src/js/core/navbar.js +18 -6
  47. package/src/js/core/scrollspy-nav.js +4 -9
  48. package/src/js/core/sticky.js +55 -21
  49. package/src/js/mixin/media.js +12 -9
  50. package/src/js/mixin/modal.js +6 -2
  51. package/src/js/mixin/parallax.js +5 -1
  52. package/src/js/mixin/position.js +24 -24
  53. package/src/js/uikit-core.js +0 -4
  54. package/src/js/util/lang.js +0 -4
  55. package/src/js/util/position.js +180 -125
  56. package/src/js/util/viewport.js +42 -22
  57. package/src/less/components/drop.less +0 -1
  58. package/src/less/components/dropdown.less +11 -1
  59. package/src/less/components/icon.less +3 -0
  60. package/src/less/components/nav.less +22 -0
  61. package/src/less/components/navbar.less +26 -2
  62. package/src/less/components/search.less +2 -0
  63. package/src/less/components/sticky.less +8 -3
  64. package/src/less/theme/dropdown.less +4 -0
  65. package/src/less/theme/nav.less +6 -0
  66. package/src/less/theme/navbar.less +4 -0
  67. package/src/less/theme/search.less +6 -0
  68. package/src/scss/components/drop.scss +0 -1
  69. package/src/scss/components/dropdown.scss +11 -1
  70. package/src/scss/components/icon.scss +3 -0
  71. package/src/scss/components/nav.scss +22 -0
  72. package/src/scss/components/navbar.scss +26 -2
  73. package/src/scss/components/search.scss +2 -0
  74. package/src/scss/components/sticky.scss +8 -3
  75. package/src/scss/mixins-theme.scss +5 -0
  76. package/src/scss/mixins.scss +5 -0
  77. package/src/scss/theme/dropdown.scss +4 -0
  78. package/src/scss/theme/nav.scss +6 -0
  79. package/src/scss/theme/navbar.scss +4 -0
  80. package/src/scss/theme/search.scss +6 -0
  81. package/src/scss/variables-theme.scss +5 -1
  82. package/src/scss/variables.scss +5 -1
  83. package/tests/animation.html +216 -214
  84. package/tests/dropdown.html +16 -2
  85. package/tests/nav.html +27 -0
  86. package/tests/navbar.html +55 -4
  87. package/tests/parallax.html +4 -4
  88. package/tests/position.html +38 -39
  89. package/tests/sticky-navbar.html +6 -6
  90. package/tests/sticky-parallax.html +23 -7
  91. package/tests/sticky.html +300 -49
  92. package/src/js/core/core.js +0 -25
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.13.10",
5
+ "version": "3.13.11-dev.eb080f280",
6
6
  "main": "dist/js/uikit.js",
7
7
  "style": "dist/css/uikit.css",
8
8
  "sideEffects": [
@@ -10,14 +10,13 @@ import {
10
10
  css,
11
11
  findIndex,
12
12
  getEventPos,
13
- getViewport,
14
13
  hasTouch,
15
14
  height,
16
15
  index,
17
16
  isEmpty,
18
17
  isInput,
19
18
  off,
20
- offset,
19
+ offsetViewport,
21
20
  on,
22
21
  parent,
23
22
  pointerDown,
@@ -324,7 +323,7 @@ function trackScroll(pos) {
324
323
  .some((scrollEl) => {
325
324
  let { scrollTop: scroll, scrollHeight } = scrollEl;
326
325
 
327
- const { top, bottom, height } = offset(getViewport(scrollEl));
326
+ const { top, bottom, height } = offsetViewport(scrollEl);
328
327
 
329
328
  if (top < y && top + 35 > y) {
330
329
  scroll -= dist;
@@ -6,9 +6,11 @@ import {
6
6
  attr,
7
7
  flipPosition,
8
8
  hasAttr,
9
+ includes,
9
10
  isFocusable,
10
11
  isTouch,
11
12
  matches,
13
+ offset,
12
14
  on,
13
15
  once,
14
16
  pointerDown,
@@ -104,10 +106,12 @@ export default {
104
106
 
105
107
  this.positionAt(this.tooltip, this.$el);
106
108
 
109
+ const [dir, align] = getAlignment(this.tooltip, this.$el, this.pos);
110
+
107
111
  this.origin =
108
- this.getAxis() === 'y'
109
- ? `${flipPosition(this.dir)}-${this.align}`
110
- : `${this.align}-${flipPosition(this.dir)}`;
112
+ this.axis === 'y'
113
+ ? `${flipPosition(dir)}-${align}`
114
+ : `${align}-${flipPosition(dir)}`;
111
115
  });
112
116
 
113
117
  this.toggleElement(this.tooltip, true);
@@ -143,3 +147,34 @@ function makeFocusable(el) {
143
147
  attr(el, 'tabindex', '0');
144
148
  }
145
149
  }
150
+
151
+ function getAlignment(el, target, [dir, align]) {
152
+ const elOffset = offset(el);
153
+ const targetOffset = offset(target);
154
+ const properties = [
155
+ ['left', 'right'],
156
+ ['top', 'bottom'],
157
+ ];
158
+
159
+ for (const props of properties) {
160
+ if (elOffset[props[0]] >= targetOffset[props[1]]) {
161
+ dir = props[1];
162
+ break;
163
+ }
164
+ if (elOffset[props[1]] <= targetOffset[props[0]]) {
165
+ dir = props[0];
166
+ break;
167
+ }
168
+ }
169
+
170
+ const props = includes(properties[0], dir) ? properties[1] : properties[0];
171
+ if (elOffset[props[0]] === targetOffset[props[0]]) {
172
+ align = props[0];
173
+ } else if (elOffset[props[1]] === targetOffset[props[1]]) {
174
+ align = props[1];
175
+ } else {
176
+ align = 'center';
177
+ }
178
+
179
+ return [dir, align];
180
+ }
@@ -14,6 +14,7 @@ import {
14
14
  matches,
15
15
  MouseTracker,
16
16
  offset,
17
+ offsetViewport,
17
18
  on,
18
19
  once,
19
20
  parent,
@@ -24,6 +25,7 @@ import {
24
25
  pointerUp,
25
26
  query,
26
27
  removeClass,
28
+ scrollParents,
27
29
  toggleClass,
28
30
  within,
29
31
  } from 'uikit-util';
@@ -353,25 +355,33 @@ export default {
353
355
  },
354
356
 
355
357
  position() {
356
- const boundary = query(this.boundary, this.$el) || window;
357
358
  removeClass(this.$el, `${this.clsDrop}-stack`);
358
359
  toggleClass(this.$el, `${this.clsDrop}-boundary`, this.boundaryAlign);
359
360
 
360
- const boundaryOffset = offset(boundary);
361
- const targetOffset = offset(this.target);
362
- const alignTo = this.boundaryAlign ? boundaryOffset : targetOffset;
361
+ const boundary = query(this.boundary, this.$el);
362
+ const [scrollParent] = scrollParents(this.$el);
363
+ const scrollParentOffset = offsetViewport(scrollParent);
364
+ const boundaryOffset = boundary ? offset(boundary) : scrollParentOffset;
365
+
366
+ css(this.$el, 'maxWidth', '');
367
+ const maxWidth = scrollParentOffset.width - (boundary ? 0 : 2 * this.viewportPadding);
363
368
 
364
369
  if (this.pos[1] === 'justify') {
365
- const prop = this.getAxis() === 'y' ? 'width' : 'height';
370
+ const prop = this.axis === 'y' ? 'width' : 'height';
371
+ const targetOffset = offset(this.target);
372
+ const alignTo = this.boundaryAlign ? boundaryOffset : targetOffset;
366
373
  css(this.$el, prop, alignTo[prop]);
367
- } else if (
368
- this.$el.offsetWidth >
369
- Math.max(boundaryOffset.right - alignTo.left, alignTo.right - boundaryOffset.left)
370
- ) {
374
+ } else if (this.$el.offsetWidth > maxWidth) {
371
375
  addClass(this.$el, `${this.clsDrop}-stack`);
372
376
  }
373
377
 
374
- this.positionAt(this.$el, this.boundaryAlign ? boundary : this.target, boundary);
378
+ css(this.$el, 'maxWidth', maxWidth);
379
+
380
+ this.positionAt(
381
+ this.$el,
382
+ boundary && this.boundaryAlign ? boundary : this.target,
383
+ boundary
384
+ );
375
385
  },
376
386
  },
377
387
  };
@@ -27,8 +27,6 @@ import {
27
27
  within,
28
28
  } from 'uikit-util';
29
29
 
30
- const navItem = '.uk-navbar-nav > li > a, .uk-navbar-item, .uk-navbar-toggle';
31
-
32
30
  export default {
33
31
  mixins: [Class, Container],
34
32
 
@@ -48,7 +46,7 @@ export default {
48
46
  },
49
47
 
50
48
  data: {
51
- dropdown: navItem,
49
+ dropdown: '.uk-navbar-nav > li > a, .uk-navbar-item, .uk-navbar-toggle',
52
50
  align: isRtl ? 'right' : 'left',
53
51
  clsDrop: 'uk-navbar-dropdown',
54
52
  mode: undefined,
@@ -134,8 +132,22 @@ export default {
134
132
  immediate: true,
135
133
  },
136
134
 
137
- toggles({ dropdown }, $el) {
138
- return $$(dropdown, $el);
135
+ toggles: {
136
+ get({ dropdown }, $el) {
137
+ return $$(dropdown, $el);
138
+ },
139
+
140
+ watch() {
141
+ const justify = hasClass(this.$el, 'uk-navbar-justify');
142
+ for (const container of $$(
143
+ '.uk-navbar-nav, .uk-navbar-left, .uk-navbar-right',
144
+ this.$el
145
+ )) {
146
+ css(container, 'flexGrow', justify ? $$(this.dropdown, container).length : '');
147
+ }
148
+ },
149
+
150
+ immediate: true,
139
151
  },
140
152
  },
141
153
 
@@ -297,7 +309,7 @@ export default {
297
309
  return this.dropbar;
298
310
  },
299
311
 
300
- handler(_, { $el, dir }) {
312
+ handler(_, { $el, pos: [dir] = [] }) {
301
313
  if (!hasClass($el, this.clsDrop)) {
302
314
  return;
303
315
  }
@@ -2,11 +2,10 @@ import Scroll from '../mixin/scroll';
2
2
  import {
3
3
  $$,
4
4
  closest,
5
- getViewport,
6
- getViewportClientHeight,
7
5
  hasClass,
8
6
  isVisible,
9
7
  offset,
8
+ offsetViewport,
10
9
  scrollParents,
11
10
  toggleClass,
12
11
  trigger,
@@ -65,19 +64,15 @@ export default {
65
64
 
66
65
  const [scrollElement] = scrollParents(targets, /auto|scroll/, true);
67
66
  const { scrollTop, scrollHeight } = scrollElement;
68
- const max = scrollHeight - getViewportClientHeight(scrollElement);
67
+ const viewport = offsetViewport(scrollElement);
68
+ const max = scrollHeight - viewport.height;
69
69
  let active = false;
70
70
 
71
71
  if (scrollTop === max) {
72
72
  active = length - 1;
73
73
  } else {
74
74
  for (const i in targets) {
75
- if (
76
- offset(targets[i]).top -
77
- offset(getViewport(scrollElement)).top -
78
- this.offset >
79
- 0
80
- ) {
75
+ if (offset(targets[i]).top - viewport.top - this.offset > 0) {
81
76
  break;
82
77
  }
83
78
  active = +i;
@@ -10,11 +10,10 @@ import {
10
10
  clamp,
11
11
  css,
12
12
  dimensions,
13
- fastdom,
14
13
  height as getHeight,
15
14
  offset as getOffset,
16
- getScrollingElement,
17
15
  intersectRect,
16
+ isNumeric,
18
17
  isString,
19
18
  isVisible,
20
19
  noop,
@@ -38,8 +37,11 @@ export default {
38
37
  props: {
39
38
  position: String,
40
39
  top: null,
41
- bottom: Boolean,
40
+ bottom: null,
41
+ start: null,
42
+ end: null,
42
43
  offset: String,
44
+ overflowFlip: Boolean,
43
45
  animation: String,
44
46
  clsActive: String,
45
47
  clsInactive: String,
@@ -52,9 +54,12 @@ export default {
52
54
 
53
55
  data: {
54
56
  position: 'top',
55
- top: 0,
57
+ top: false,
56
58
  bottom: false,
59
+ start: false,
60
+ end: false,
57
61
  offset: 0,
62
+ overflowFlip: false,
58
63
  animation: '',
59
64
  clsActive: 'uk-active',
60
65
  clsInactive: '',
@@ -76,6 +81,9 @@ export default {
76
81
  },
77
82
 
78
83
  connected() {
84
+ this.start = coerce(this.start || this.top);
85
+ this.end = coerce(this.end || this.bottom);
86
+
79
87
  this.placeholder =
80
88
  $('+ .uk-sticky-placeholder', this.$el) ||
81
89
  $('<div class="uk-sticky-placeholder"></div>');
@@ -94,6 +102,17 @@ export default {
94
102
  },
95
103
 
96
104
  events: [
105
+ {
106
+ name: 'resize',
107
+
108
+ el() {
109
+ return window;
110
+ },
111
+
112
+ handler() {
113
+ this.$emit('resize');
114
+ },
115
+ },
97
116
  {
98
117
  name: 'load hashchange popstate',
99
118
 
@@ -110,7 +129,7 @@ export default {
110
129
  return;
111
130
  }
112
131
 
113
- fastdom.read(() => {
132
+ setTimeout(() => {
114
133
  const targetOffset = getOffset($(location.hash));
115
134
  const elOffset = getOffset(this.$el);
116
135
 
@@ -119,8 +138,8 @@ export default {
119
138
  window,
120
139
  targetOffset.top -
121
140
  elOffset.height -
122
- toPx(this.targetOffset, 'height') -
123
- toPx(this.offset, 'height')
141
+ toPx(this.targetOffset, 'height', this.placeholder) -
142
+ toPx(this.offset, 'height', this.placeholder)
124
143
  );
125
144
  }
126
145
  });
@@ -150,32 +169,38 @@ export default {
150
169
 
151
170
  if (hide) {
152
171
  this.show();
153
- fastdom.write(() => css(this.selTarget, 'transition', ''));
172
+ requestAnimationFrame(() => css(this.selTarget, 'transition', ''));
154
173
  }
155
174
 
156
175
  const referenceElement = this.isFixed ? this.placeholder : this.$el;
157
176
  const windowHeight = getHeight(window);
158
177
 
159
178
  let position = this.position;
160
- if (position === 'auto' && height > windowHeight) {
161
- position = 'bottom';
179
+ if (this.overflowFlip && height > windowHeight) {
180
+ position = position === 'top' ? 'bottom' : 'top';
162
181
  }
163
182
 
164
183
  let offset = toPx(this.offset, 'height', referenceElement);
165
- if (position === 'bottom') {
184
+ if (position === 'bottom' && (height < windowHeight || this.overflowFlip)) {
166
185
  offset += windowHeight - height;
167
186
  }
168
187
 
169
- const overflow = Math.max(0, height + offset - windowHeight);
188
+ const overflow = this.overflowFlip
189
+ ? 0
190
+ : Math.max(0, height + offset - windowHeight);
170
191
  const topOffset = getOffset(referenceElement).top;
171
192
 
172
- const top = parseProp(this.top, this.$el, topOffset);
173
- const bottom = parseProp(this.bottom, this.$el, topOffset + height, true);
174
-
175
- const start = Math.max(top, topOffset) - offset;
176
- const end = bottom
177
- ? bottom - getOffset(this.$el).height + overflow - offset
178
- : getScrollingElement(this.$el).scrollHeight - windowHeight;
193
+ const start =
194
+ (this.start === false
195
+ ? topOffset
196
+ : parseProp(this.start, this.$el, topOffset)) - offset;
197
+ const end =
198
+ this.end === false
199
+ ? document.scrollingElement.scrollHeight - windowHeight
200
+ : parseProp(this.end, this.$el, topOffset + height, true) -
201
+ getOffset(this.$el).height +
202
+ overflow -
203
+ offset;
179
204
 
180
205
  return {
181
206
  start,
@@ -378,8 +403,8 @@ function parseProp(value, el, propOffset, padding) {
378
403
  return 0;
379
404
  }
380
405
 
381
- if (isString(value) && value.match(/^-?\d/)) {
382
- return propOffset + toPx(value);
406
+ if (isNumeric(value) || (isString(value) && value.match(/^-?\d/))) {
407
+ return propOffset + toPx(value, 'height', el, true);
383
408
  } else {
384
409
  const refElement = value === true ? parent(el) : query(value, el);
385
410
  return (
@@ -390,3 +415,12 @@ function parseProp(value, el, propOffset, padding) {
390
415
  );
391
416
  }
392
417
  }
418
+
419
+ function coerce(value) {
420
+ if (value === 'true') {
421
+ return true;
422
+ } else if (value === 'false') {
423
+ return false;
424
+ }
425
+ return value;
426
+ }
@@ -20,16 +20,19 @@ export default {
20
20
 
21
21
  connected() {
22
22
  const media = toMedia(this.media);
23
- this.mediaObj = window.matchMedia(media);
24
- const handler = () => {
25
- this.matchMedia = this.mediaObj.matches;
26
- trigger(this.$el, createEvent('mediachange', false, true, [this.mediaObj]));
27
- };
28
- this.offMediaObj = on(this.mediaObj, 'change', () => {
23
+ this.matchMedia = true;
24
+ if (media) {
25
+ this.mediaObj = window.matchMedia(media);
26
+ const handler = () => {
27
+ this.matchMedia = this.mediaObj.matches;
28
+ trigger(this.$el, createEvent('mediachange', false, true, [this.mediaObj]));
29
+ };
30
+ this.offMediaObj = on(this.mediaObj, 'change', () => {
31
+ handler();
32
+ this.$emit('resize');
33
+ });
29
34
  handler();
30
- this.$emit('resize');
31
- });
32
- handler();
35
+ }
33
36
  },
34
37
 
35
38
  disconnected() {
@@ -4,6 +4,7 @@ import {
4
4
  append,
5
5
  attr,
6
6
  css,
7
+ endsWith,
7
8
  includes,
8
9
  isFocusable,
9
10
  last,
@@ -15,7 +16,6 @@ import {
15
16
  pointerUp,
16
17
  removeClass,
17
18
  toFloat,
18
- toMs,
19
19
  width,
20
20
  within,
21
21
  } from 'uikit-util';
@@ -245,7 +245,7 @@ function animate({ transitionElement, _toggle }) {
245
245
  return (el, show) =>
246
246
  new Promise((resolve, reject) =>
247
247
  once(el, 'show hide', () => {
248
- el._reject && el._reject();
248
+ el._reject?.();
249
249
  el._reject = reject;
250
250
 
251
251
  _toggle(el, show);
@@ -269,3 +269,7 @@ function animate({ transitionElement, _toggle }) {
269
269
  })
270
270
  ).then(() => delete el._reject);
271
271
  }
272
+
273
+ function toMs(time) {
274
+ return time ? (endsWith(time, 'ms') ? toFloat(time) : toFloat(time) * 1000) : 0;
275
+ }
@@ -79,12 +79,16 @@ export default {
79
79
  };
80
80
 
81
81
  function transformFn(prop, el, stops) {
82
- const unit = getUnit(stops) || { x: 'px', y: 'px', rotate: 'deg' }[prop] || '';
82
+ let unit = getUnit(stops) || { x: 'px', y: 'px', rotate: 'deg' }[prop] || '';
83
83
  let transformFn;
84
84
 
85
85
  if (prop === 'x' || prop === 'y') {
86
86
  prop = `translate${ucfirst(prop)}`;
87
87
  transformFn = (stop) => toFloat(toFloat(stop).toFixed(unit === 'px' ? 0 : 6));
88
+ } else if (prop === 'scale') {
89
+ unit = '';
90
+ transformFn = (stop) =>
91
+ getUnit([stop]) ? toPx(stop, 'width', el, true) / el.offsetWidth : stop;
88
92
  }
89
93
 
90
94
  if (stops.length === 1) {
@@ -3,6 +3,7 @@ import {
3
3
  flipPosition,
4
4
  getCssVar,
5
5
  offset as getOffset,
6
+ includes,
6
7
  isNumeric,
7
8
  isRtl,
8
9
  positionAt,
@@ -20,49 +21,48 @@ export default {
20
21
  pos: `bottom-${isRtl ? 'right' : 'left'}`,
21
22
  flip: true,
22
23
  offset: false,
24
+ viewportPadding: 10,
23
25
  },
24
26
 
25
27
  connected() {
26
28
  this.pos = this.$props.pos.split('-').concat('center').slice(0, 2);
27
- this.dir = this.pos[0];
28
- this.align = this.pos[1];
29
+ this.axis = includes(['top', 'bottom'], this.pos[0]) ? 'y' : 'x';
29
30
  },
30
31
 
31
32
  methods: {
32
33
  positionAt(element, target, boundary) {
33
- const axis = this.getAxis();
34
- const dir = this.pos[0];
35
- const align = this.pos[1];
34
+ const [dir, align] = this.pos;
36
35
 
37
36
  let { offset } = this;
38
37
  if (!isNumeric(offset)) {
39
38
  const node = $(offset);
40
39
  offset = node
41
- ? getOffset(node)[axis === 'x' ? 'left' : 'top'] -
42
- getOffset(target)[axis === 'x' ? 'right' : 'bottom']
40
+ ? getOffset(node)[this.axis === 'x' ? 'left' : 'top'] -
41
+ getOffset(target)[this.axis === 'x' ? 'right' : 'bottom']
43
42
  : 0;
44
43
  }
45
44
  offset = toPx(offset) + toPx(getCssVar('position-offset', element));
45
+ offset = [includes(['left', 'top'], dir) ? -offset : +offset, 0];
46
46
 
47
- const { x, y } = positionAt(
48
- element,
49
- target,
50
- axis === 'x' ? `${flipPosition(dir)} ${align}` : `${align} ${flipPosition(dir)}`,
51
- axis === 'x' ? `${dir} ${align}` : `${align} ${dir}`,
52
- axis === 'x'
53
- ? `${dir === 'left' ? -offset : offset}`
54
- : ` ${dir === 'top' ? -offset : offset}`,
55
- null,
56
- this.flip,
57
- boundary
58
- ).target;
47
+ const attach = {
48
+ element: [flipPosition(dir), align],
49
+ target: [dir, align],
50
+ };
59
51
 
60
- this.dir = axis === 'x' ? x : y;
61
- this.align = axis === 'x' ? y : x;
62
- },
52
+ if (this.axis === 'y') {
53
+ for (const prop in attach) {
54
+ attach[prop] = attach[prop].reverse();
55
+ }
56
+ offset = offset.reverse();
57
+ }
63
58
 
64
- getAxis() {
65
- return this.dir === 'top' || this.dir === 'bottom' ? 'y' : 'x';
59
+ positionAt(element, target, {
60
+ attach,
61
+ offset,
62
+ boundary,
63
+ viewportPadding: this.viewportPadding,
64
+ flip: this.flip,
65
+ });
66
66
  },
67
67
  },
68
68
  };
@@ -1,5 +1,4 @@
1
1
  import UIkit from './api/index';
2
- import Core from './core/core';
3
2
  import boot from './api/boot';
4
3
  import * as components from './core/index';
5
4
  import { each } from 'uikit-util';
@@ -7,9 +6,6 @@ import { each } from 'uikit-util';
7
6
  // register components
8
7
  each(components, (component, name) => UIkit.component(name, component));
9
8
 
10
- // core functionality
11
- UIkit.use(Core);
12
-
13
9
  boot(UIkit);
14
10
 
15
11
  export default UIkit;
@@ -133,10 +133,6 @@ export function toWindow(element) {
133
133
  return document?.defaultView || window;
134
134
  }
135
135
 
136
- export function toMs(time) {
137
- return time ? (endsWith(time, 'ms') ? toFloat(time) : toFloat(time) * 1000) : 0;
138
- }
139
-
140
136
  export function isEqual(value, other) {
141
137
  return (
142
138
  value === other ||