uikit 3.14.4-dev.d014a9a57 → 3.14.4-dev.d2929b5b7

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 (124) hide show
  1. package/CHANGELOG.md +34 -17
  2. package/build/util.js +1 -0
  3. package/dist/css/uikit-core-rtl.css +317 -76
  4. package/dist/css/uikit-core-rtl.min.css +1 -1
  5. package/dist/css/uikit-core.css +317 -76
  6. package/dist/css/uikit-core.min.css +1 -1
  7. package/dist/css/uikit-rtl.css +337 -80
  8. package/dist/css/uikit-rtl.min.css +1 -1
  9. package/dist/css/uikit.css +337 -80
  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 +77 -120
  16. package/dist/js/components/lightbox-panel.min.js +1 -1
  17. package/dist/js/components/lightbox.js +77 -120
  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 +4 -5
  22. package/dist/js/components/parallax.min.js +1 -1
  23. package/dist/js/components/slider-parallax.js +4 -5
  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 +4 -5
  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 +88 -134
  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 +357 -367
  38. package/dist/js/uikit-core.min.js +14 -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 +357 -367
  42. package/dist/js/uikit.min.js +14 -1
  43. package/package.json +1 -1
  44. package/src/images/components/navbar-toggle-icon.svg +22 -3
  45. package/src/js/api/state.js +1 -1
  46. package/src/js/core/accordion.js +9 -17
  47. package/src/js/core/alert.js +35 -14
  48. package/src/js/core/drop.js +90 -61
  49. package/src/js/core/height-viewport.js +4 -2
  50. package/src/js/core/index.js +1 -1
  51. package/src/js/core/leader.js +2 -2
  52. package/src/js/core/navbar.js +28 -45
  53. package/src/js/core/scroll.js +37 -10
  54. package/src/js/mixin/media.js +4 -5
  55. package/src/js/mixin/modal.js +9 -6
  56. package/src/js/mixin/position.js +21 -24
  57. package/src/js/mixin/togglable.js +80 -124
  58. package/src/js/util/animation.js +4 -3
  59. package/src/js/util/filter.js +3 -7
  60. package/src/js/util/position.js +42 -47
  61. package/src/js/util/style.js +4 -13
  62. package/src/js/util/viewport.js +3 -5
  63. package/src/less/components/_import.less +1 -0
  64. package/src/less/components/drop.less +1 -18
  65. package/src/less/components/dropbar.less +115 -0
  66. package/src/less/components/dropdown.less +11 -19
  67. package/src/less/components/leader.less +1 -1
  68. package/src/less/components/nav.less +212 -23
  69. package/src/less/components/navbar.less +16 -52
  70. package/src/less/components/utility.less +10 -2
  71. package/src/less/theme/_import.less +1 -0
  72. package/src/less/theme/dropbar.less +44 -0
  73. package/src/less/theme/dropdown.less +0 -11
  74. package/src/less/theme/nav.less +46 -0
  75. package/src/less/theme/navbar.less +1 -5
  76. package/src/scss/components/_import.scss +1 -0
  77. package/src/scss/components/drop.scss +1 -18
  78. package/src/scss/components/dropbar.scss +115 -0
  79. package/src/scss/components/dropdown.scss +11 -19
  80. package/src/scss/components/leader.scss +1 -1
  81. package/src/scss/components/nav.scss +161 -22
  82. package/src/scss/components/navbar.scss +16 -52
  83. package/src/scss/components/utility.scss +8 -1
  84. package/src/scss/mixins-theme.scss +80 -8
  85. package/src/scss/mixins.scss +77 -4
  86. package/src/scss/theme/_import.scss +1 -0
  87. package/src/scss/theme/dropbar.scss +44 -0
  88. package/src/scss/theme/dropdown.scss +0 -8
  89. package/src/scss/theme/nav.scss +44 -0
  90. package/src/scss/theme/navbar.scss +1 -5
  91. package/src/scss/variables-theme.scss +51 -10
  92. package/src/scss/variables.scss +40 -8
  93. package/tests/accordion.html +2 -2
  94. package/tests/alert.html +2 -2
  95. package/tests/countdown.html +1 -1
  96. package/tests/drop.html +444 -412
  97. package/tests/dropbar.html +456 -0
  98. package/tests/dropdown.html +8 -470
  99. package/tests/filter.html +9 -12
  100. package/tests/form.html +1 -1
  101. package/tests/index.html +124 -105
  102. package/tests/lightbox.html +5 -5
  103. package/tests/list.html +8 -8
  104. package/tests/modal.html +13 -13
  105. package/tests/nav.html +121 -12
  106. package/tests/navbar.html +76 -218
  107. package/tests/offcanvas.html +10 -14
  108. package/tests/parallax.html +1 -1
  109. package/tests/position.html +13 -24
  110. package/tests/progress.html +9 -9
  111. package/tests/scroll.html +7 -10
  112. package/tests/search.html +5 -5
  113. package/tests/slider.html +6 -5
  114. package/tests/slideshow.html +8 -8
  115. package/tests/sortable.html +6 -8
  116. package/tests/sticky-navbar.html +6 -6
  117. package/tests/sticky.html +8 -8
  118. package/tests/switcher.html +1 -1
  119. package/tests/tab.html +1 -1
  120. package/tests/table.html +7 -7
  121. package/tests/toggle.html +2 -2
  122. package/tests/tooltip.html +1 -1
  123. package/tests/upload.html +11 -11
  124. package/tests/utility.html +19 -0
@@ -1,5 +1,5 @@
1
1
  import { offset } from './dimensions';
2
- import { clamp, includes, ucfirst } from './lang';
2
+ import { clamp, isArray, ucfirst } from './lang';
3
3
  import { offsetViewport, scrollParents } from './viewport';
4
4
 
5
5
  const dirs = [
@@ -18,11 +18,11 @@ export function positionAt(element, target, options) {
18
18
  ...options,
19
19
  };
20
20
 
21
- const dim = options.flip
22
- ? attachToWithFlip(element, target, options)
23
- : attachTo(element, target, options);
21
+ if (!isArray(target)) {
22
+ target = [target, target];
23
+ }
24
24
 
25
- offset(element, dim);
25
+ offset(element, getPosition(element, target, options));
26
26
  }
27
27
 
28
28
  function attachTo(element, target, options) {
@@ -37,8 +37,11 @@ function attachTo(element, target, options) {
37
37
  };
38
38
 
39
39
  const position = offset(element);
40
- const targetOffset = offset(target);
40
+
41
41
  for (const [i, [prop, dir, start, end]] of Object.entries(dirs)) {
42
+ const targetOffset =
43
+ attach.target[i] === attach.element[i] ? offsetViewport(target[i]) : offset(target[i]);
44
+
42
45
  position[start] = position[dir] =
43
46
  targetOffset[start] +
44
47
  moveBy(attach.target[i], end, targetOffset[prop]) -
@@ -53,60 +56,54 @@ function moveBy(start, end, dim) {
53
56
  return start === 'center' ? dim / 2 : start === end ? dim : 0;
54
57
  }
55
58
 
56
- function attachToWithFlip(element, target, options) {
59
+ function getPosition(element, target, options) {
57
60
  const position = attachTo(element, target, options);
58
- const targetDim = offset(target);
59
61
 
60
62
  let {
61
63
  flip,
64
+ shift,
62
65
  attach: { element: elAttach, target: targetAttach },
63
66
  offset: elOffset,
64
67
  boundary,
65
- viewport,
66
68
  viewportOffset,
67
69
  } = options;
68
70
 
69
- let viewports = scrollParents(element);
70
- if (boundary === target) {
71
- viewports = viewports.filter((viewport) => viewport !== boundary);
71
+ if (!flip && !shift) {
72
+ return position;
72
73
  }
73
- const [scrollElement] = viewports;
74
- viewports.push(viewport);
75
74
 
76
75
  const offsetPosition = { ...position };
77
76
  for (const [i, [prop, dir, start, end]] of Object.entries(dirs)) {
78
- if (flip !== true && !includes(flip, dir)) {
79
- continue;
80
- }
77
+ let viewports = scrollParents(target[i]);
78
+ const [scrollElement] = viewports;
81
79
 
82
- const willFlip =
83
- !intersectLine(position, targetDim, i) && intersectLine(position, targetDim, 1 - i);
84
-
85
- viewport = getIntersectionArea(...viewports.filter(Boolean).map(offsetViewport));
80
+ let viewport = getIntersectionArea(...viewports.map(offsetViewport));
86
81
 
87
82
  if (viewportOffset) {
88
83
  viewport[start] += viewportOffset;
89
84
  viewport[end] -= viewportOffset;
90
85
  }
91
86
 
92
- if (boundary && !willFlip && position[prop] <= offset(boundary)[prop]) {
93
- viewport = getIntersectionArea(viewport, offset(boundary));
87
+ if (boundary) {
88
+ viewport = getIntersectionArea(viewport, offsetViewport(boundary));
94
89
  }
95
90
 
96
- const isInStartBoundary = position[start] >= viewport[start];
97
- const isInEndBoundary = position[end] <= viewport[end];
91
+ const isInStartViewport = position[start] >= viewport[start];
92
+ const isInEndViewport = position[end] <= viewport[end];
98
93
 
99
- if (isInStartBoundary && isInEndBoundary) {
94
+ if (isInStartViewport && isInEndViewport) {
100
95
  continue;
101
96
  }
102
97
 
103
- let offsetBy;
98
+ let offsetBy = 0;
99
+ const targetDim = offset(target[i]);
104
100
 
105
101
  // Flip
106
- if (willFlip) {
102
+ if (!intersectLine(position, targetDim, i) && intersectLine(position, targetDim, 1 - i)) {
107
103
  if (
108
- (elAttach[i] === end && isInStartBoundary) ||
109
- (elAttach[i] === start && isInEndBoundary)
104
+ !flip ||
105
+ (elAttach[i] === end && isInStartViewport) ||
106
+ (elAttach[i] === start && isInEndViewport)
110
107
  ) {
111
108
  continue;
112
109
  }
@@ -143,27 +140,25 @@ function attachToWithFlip(element, target, options) {
143
140
  return false;
144
141
  }
145
142
 
146
- if (flip === true || includes(flip, dirs[1 - i][1])) {
147
- const newPos = attachToWithFlip(element, target, {
148
- ...options,
149
- attach: {
150
- element: elAttach.map(flipDir).reverse(),
151
- target: targetAttach.map(flipDir).reverse(),
152
- },
153
- offset: elOffset.reverse(),
154
- flip: flip === true ? flip : [...flip, dirs[1 - i][1]],
155
- recursion: true,
156
- });
157
-
158
- if (newPos && isInScrollArea(newPos, scrollElement, 1 - i)) {
159
- return newPos;
160
- }
143
+ const newPos = getPosition(element, target, {
144
+ ...options,
145
+ attach: {
146
+ element: elAttach.map(flipDir).reverse(),
147
+ target: targetAttach.map(flipDir).reverse(),
148
+ },
149
+ offset: elOffset.reverse(),
150
+ recursion: true,
151
+ });
152
+
153
+ if (newPos && isInScrollArea(newPos, scrollElement, 1 - i)) {
154
+ return newPos;
161
155
  }
156
+
162
157
  continue;
163
158
  }
164
159
 
165
- // Move
166
- } else {
160
+ // Shift
161
+ } else if (shift) {
167
162
  offsetBy =
168
163
  clamp(
169
164
  clamp(position[start], viewport[start], viewport[end] - position[prop]),
@@ -8,6 +8,7 @@ import {
8
8
  isString,
9
9
  isUndefined,
10
10
  memoize,
11
+ startsWith,
11
12
  toNodes,
12
13
  } from './lang';
13
14
 
@@ -62,18 +63,11 @@ export function css(element, property, value, priority = '') {
62
63
  return elements[0];
63
64
  }
64
65
 
65
- const propertyRe = /^\s*(["'])?(.*?)\1\s*$/;
66
- export function getCssVar(name, element = document.documentElement) {
67
- return css(element, `--uk-${name}`).replace(propertyRe, '$2');
68
- }
69
-
70
66
  // https://drafts.csswg.org/cssom/#dom-cssstyledeclaration-setproperty
71
67
  export const propName = memoize((name) => vendorPropName(name));
72
68
 
73
- const cssPrefixes = ['webkit', 'moz'];
74
-
75
69
  function vendorPropName(name) {
76
- if (name[0] === '-') {
70
+ if (startsWith(name, '--')) {
77
71
  return name;
78
72
  }
79
73
 
@@ -85,11 +79,8 @@ function vendorPropName(name) {
85
79
  return name;
86
80
  }
87
81
 
88
- let i = cssPrefixes.length,
89
- prefixedName;
90
-
91
- while (i--) {
92
- prefixedName = `-${cssPrefixes[i]}-${name}`;
82
+ for (const prefix of ['webkit', 'moz']) {
83
+ const prefixedName = `-${prefix}-${name}`;
93
84
  if (prefixedName in style) {
94
85
  return prefixedName;
95
86
  }
@@ -128,12 +128,10 @@ export function scrollParents(element, overflowRe = /auto|scroll|hidden|clip/, s
128
128
  export function offsetViewport(scrollElement) {
129
129
  const window = toWindow(scrollElement);
130
130
  const {
131
- document: { body, documentElement },
131
+ document: { documentElement },
132
132
  } = window;
133
133
  let viewportElement =
134
- scrollElement === scrollingElement(scrollElement) || scrollElement === body
135
- ? window
136
- : scrollElement;
134
+ scrollElement === scrollingElement(scrollElement) ? window : scrollElement;
137
135
 
138
136
  const { visualViewport } = window;
139
137
  if (isWindow(viewportElement) && visualViewport) {
@@ -152,7 +150,7 @@ export function offsetViewport(scrollElement) {
152
150
  // iOS 12 returns <body> as scrollingElement
153
151
  viewportElement = documentElement;
154
152
  } else {
155
- rect[start] += toFloat(css(viewportElement, `border${ucfirst(start)}Width`));
153
+ rect[start] += toFloat(css(viewportElement, `border-${start}-width`));
156
154
  }
157
155
  rect[prop] = rect[dir] = viewportElement[`client${ucfirst(prop)}`];
158
156
  rect[end] = rect[prop] + rect[start];
@@ -40,6 +40,7 @@
40
40
  @import "accordion.less";
41
41
  @import "drop.less"; // After: Card
42
42
  @import "dropdown.less"; // After: Card
43
+ @import "dropbar.less";
43
44
  @import "modal.less"; // After: Close
44
45
  @import "slideshow.less";
45
46
  @import "slider.less";
@@ -3,8 +3,7 @@
3
3
  //
4
4
  // Component: `uk-drop`
5
5
  //
6
- // Modifiers: `uk-drop-stretch`
7
- // `uk-drop-stack`
6
+ // Modifiers: `uk-drop-stack`
8
7
  // `uk-drop-grid`
9
8
  //
10
9
  // States: `uk-open`
@@ -50,22 +49,6 @@
50
49
  .uk-drop.uk-open { display: block; }
51
50
 
52
51
 
53
- /* Stretch modifier
54
- ========================================================================== */
55
-
56
- /*
57
- * 1. Allow scrolling
58
- */
59
-
60
- .uk-drop-stretch {
61
- --uk-position-offset: 0;
62
- --uk-position-viewport-offset: 0;
63
- /* 1 */
64
- overflow-y: auto;
65
- -webkit-overflow-scrolling: touch;
66
- }
67
-
68
-
69
52
  /* Grid modifiers
70
53
  ========================================================================== */
71
54
 
@@ -0,0 +1,115 @@
1
+ // Name: Dropbar
2
+ // Description: Component to create dropbar menus
3
+ //
4
+ // Component: `uk-dropbar`
5
+ //
6
+ // ========================================================================
7
+
8
+
9
+ // Variables
10
+ // ========================================================================
11
+
12
+ @dropbar-margin: 0;
13
+ @dropbar-z-index: @global-z-index + 20;
14
+ @dropbar-padding-top: 15px;
15
+ @dropbar-padding-bottom: @dropbar-padding-top;
16
+ @dropbar-padding-horizontal: 15px;
17
+ @dropbar-padding-horizontal-s: @global-gutter;
18
+ @dropbar-padding-horizontal-m: @global-medium-gutter;
19
+ @dropbar-background: @global-muted-background;
20
+ @dropbar-color: @global-color;
21
+ @dropbar-color-mode: none;
22
+
23
+
24
+ /* ========================================================================
25
+ Component: Dropbar
26
+ ========================================================================== */
27
+
28
+ /*
29
+ * 1. Hide by default
30
+ * 2. Set position
31
+ * 3. Style
32
+ */
33
+
34
+ .uk-dropbar {
35
+ --uk-position-offset: @dropbar-margin;
36
+ --uk-position-shift-offset: 0;
37
+ --uk-position-viewport-offset: 0;
38
+ /* 1 */
39
+ display: none;
40
+ /* 2 */
41
+ position: absolute;
42
+ z-index: @dropbar-z-index;
43
+ /* 3 */
44
+ box-sizing: border-box;
45
+ padding: @dropbar-padding-top @dropbar-padding-horizontal @dropbar-padding-bottom @dropbar-padding-horizontal;
46
+ background: @dropbar-background;
47
+ color: @dropbar-color;
48
+ .hook-dropbar();
49
+ }
50
+
51
+ /* Show */
52
+ .uk-dropbar.uk-open { display: block; }
53
+
54
+ /*
55
+ * Remove margin from the last-child
56
+ */
57
+
58
+ .uk-dropbar > :last-child { margin-bottom: 0; }
59
+
60
+ /* Phone landscape and bigger */
61
+ @media (min-width: @breakpoint-small) {
62
+
63
+ .uk-dropbar {
64
+ padding-left: @dropbar-padding-horizontal-s;
65
+ padding-right: @dropbar-padding-horizontal-s;
66
+ }
67
+
68
+ }
69
+
70
+ /* Tablet landscape and bigger */
71
+ @media (min-width: @breakpoint-medium) {
72
+
73
+ .uk-dropbar {
74
+ padding-left: @dropbar-padding-horizontal-m;
75
+ padding-right: @dropbar-padding-horizontal-m;
76
+ }
77
+
78
+ }
79
+
80
+ // Color Mode
81
+ .uk-dropbar:extend(.uk-light all) when (@dropbar-color-mode = light) {}
82
+ .uk-dropbar:extend(.uk-dark all) when (@dropbar-color-mode = dark) {}
83
+
84
+
85
+ /* Direction modifier
86
+ ========================================================================== */
87
+
88
+ .uk-dropbar-top {
89
+ .hook-dropbar-top();
90
+ }
91
+
92
+ .uk-dropbar-bottom {
93
+ .hook-dropbar-bottom();
94
+ }
95
+
96
+ .uk-dropbar-left {
97
+ .hook-dropbar-left();
98
+ }
99
+
100
+ .uk-dropbar-right {
101
+ .hook-dropbar-right();
102
+ }
103
+
104
+
105
+ // Hooks
106
+ // ========================================================================
107
+
108
+ .hook-dropbar-misc();
109
+
110
+ .hook-dropbar() {}
111
+ .hook-dropbar-top() {}
112
+ .hook-dropbar-bottom() {}
113
+ .hook-dropbar-left() {}
114
+ .hook-dropbar-right() {}
115
+ .hook-dropbar-misc() {}
@@ -5,7 +5,7 @@
5
5
  //
6
6
  // Adopted: `uk-dropdown-nav`
7
7
  //
8
- // Modifiers: `uk-dropdown-stretch`
8
+ // Modifiers: `uk-dropdown-large`
9
9
  // `uk-dropdown-stack`
10
10
  // `uk-dropdown-grid`
11
11
  //
@@ -24,6 +24,7 @@
24
24
  @dropdown-padding: 15px;
25
25
  @dropdown-background: @global-muted-background;
26
26
  @dropdown-color: @global-color;
27
+ @dropdown-color-mode: none;
27
28
 
28
29
  @dropdown-large-padding: 40px;
29
30
 
@@ -59,7 +60,6 @@
59
60
  /* 3 */
60
61
  box-sizing: border-box;
61
62
  min-width: @dropdown-min-width;
62
- max-width: 100vw;
63
63
  /* 4 */
64
64
  padding: @dropdown-padding;
65
65
  background: @dropdown-background;
@@ -70,28 +70,21 @@
70
70
  /* Show */
71
71
  .uk-dropdown.uk-open { display: block; }
72
72
 
73
+ /*
74
+ * Remove margin from the last-child
75
+ */
73
76
 
74
- /* Size modifier
75
- ========================================================================== */
77
+ .uk-dropdown > :last-child { margin-bottom: 0; }
76
78
 
77
- .uk-dropdown-large { padding: @dropdown-large-padding; }
79
+ // Color Mode
80
+ .uk-dropdown:extend(.uk-light all) when (@dropdown-color-mode = light) {}
81
+ .uk-dropdown:extend(.uk-dark all) when (@dropdown-color-mode = dark) {}
78
82
 
79
83
 
80
- /* Stretch modifier
84
+ /* Size modifier
81
85
  ========================================================================== */
82
86
 
83
- /*
84
- * 1. Allow scrolling
85
- */
86
-
87
- .uk-dropdown-stretch {
88
- --uk-position-offset: 0;
89
- --uk-position-viewport-offset: 0;
90
- /* 1 */
91
- overflow-y: auto;
92
- -webkit-overflow-scrolling: touch;
93
- .hook-dropdown-stretch();
94
- }
87
+ .uk-dropdown-large { padding: @dropdown-large-padding; }
95
88
 
96
89
 
97
90
  /* Nav
@@ -168,7 +161,6 @@
168
161
  .hook-dropdown-misc();
169
162
 
170
163
  .hook-dropdown() {}
171
- .hook-dropdown-stretch() {}
172
164
  .hook-dropdown-nav() {}
173
165
  .hook-dropdown-nav-item() {}
174
166
  .hook-dropdown-nav-item-hover() {}
@@ -49,7 +49,7 @@
49
49
  * Pass fill character to JS
50
50
  */
51
51
 
52
- :root { --uk-leader-fill-content: '@{leader-fill-content}'; }
52
+ :root { --uk-leader-fill-content: @leader-fill-content; }
53
53
 
54
54
 
55
55
  // Hooks