uikit 3.17.12-dev.f1425d280 → 3.18.1-dev.0856bd8a6

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 (260) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/dist/css/uikit-core-rtl.css +577 -504
  3. package/dist/css/uikit-core-rtl.min.css +1 -1
  4. package/dist/css/uikit-core.css +577 -504
  5. package/dist/css/uikit-core.min.css +1 -1
  6. package/dist/css/uikit-rtl.css +600 -527
  7. package/dist/css/uikit-rtl.min.css +1 -1
  8. package/dist/css/uikit.css +600 -527
  9. package/dist/css/uikit.min.css +1 -1
  10. package/dist/js/components/countdown.js +2 -4
  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 +96 -60
  15. package/dist/js/components/lightbox-panel.min.js +1 -1
  16. package/dist/js/components/lightbox.js +96 -60
  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 +11 -6
  21. package/dist/js/components/parallax.min.js +1 -1
  22. package/dist/js/components/slider-parallax.js +8 -3
  23. package/dist/js/components/slider-parallax.min.js +1 -1
  24. package/dist/js/components/slider.js +735 -37
  25. package/dist/js/components/slider.min.js +1 -1
  26. package/dist/js/components/slideshow-parallax.js +8 -3
  27. package/dist/js/components/slideshow-parallax.min.js +1 -1
  28. package/dist/js/components/slideshow.js +792 -129
  29. package/dist/js/components/slideshow.min.js +1 -1
  30. package/dist/js/components/sortable.js +7 -7
  31. package/dist/js/components/sortable.min.js +1 -1
  32. package/dist/js/components/tooltip.js +2 -8
  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 +299 -273
  37. package/dist/js/uikit-core.min.js +1 -1
  38. package/dist/js/uikit-icons.js +9 -4
  39. package/dist/js/uikit-icons.min.js +1 -1
  40. package/dist/js/uikit.js +505 -365
  41. package/dist/js/uikit.min.js +1 -1
  42. package/package.json +3 -3
  43. package/src/images/components/navbar-toggle-icon.svg +1 -1
  44. package/src/images/icons/arrow-up-right.svg +4 -0
  45. package/src/images/icons/git-branch.svg +4 -4
  46. package/src/images/icons/git-fork.svg +4 -4
  47. package/src/images/icons/link-external.svg +5 -0
  48. package/src/images/icons/signal.svg +3 -0
  49. package/src/images/icons/telegram.svg +3 -0
  50. package/src/images/icons/threads.svg +3 -0
  51. package/src/images/icons/x.svg +3 -0
  52. package/src/js/components/countdown.js +1 -3
  53. package/src/js/components/internal/slider-preload.js +6 -0
  54. package/src/js/components/lightbox-panel.js +2 -6
  55. package/src/js/components/parallax.js +1 -20
  56. package/src/js/components/slider.js +38 -18
  57. package/src/js/components/slideshow.js +14 -46
  58. package/src/js/components/sortable.js +7 -6
  59. package/src/js/components/tooltip.js +1 -7
  60. package/src/js/core/accordion.js +1 -1
  61. package/src/js/core/drop.js +3 -5
  62. package/src/js/core/dropnav.js +24 -20
  63. package/src/js/core/height-match.js +7 -3
  64. package/src/js/core/height-placeholder.js +32 -0
  65. package/src/js/core/icon.js +12 -5
  66. package/src/js/core/index.js +2 -0
  67. package/src/js/core/inverse.js +103 -0
  68. package/src/js/core/modal.js +13 -0
  69. package/src/js/core/navbar.js +32 -172
  70. package/src/js/core/responsive.js +2 -29
  71. package/src/js/core/sticky.js +45 -29
  72. package/src/js/core/video.js +5 -1
  73. package/src/js/mixin/modal.js +1 -1
  74. package/src/js/mixin/parallax.js +19 -0
  75. package/src/js/mixin/slider-autoplay.js +1 -3
  76. package/src/js/mixin/slider-drag.js +22 -19
  77. package/src/js/mixin/slider-nav.js +10 -1
  78. package/src/js/mixin/slider-parallax.js +138 -0
  79. package/src/js/mixin/slider-reactive.js +1 -1
  80. package/src/js/mixin/slider.js +25 -3
  81. package/src/js/util/animation.js +14 -14
  82. package/src/js/util/dom.js +2 -2
  83. package/src/js/util/mouse.js +8 -11
  84. package/src/js/util/scroll.js +58 -0
  85. package/src/js/util/selector.js +4 -2
  86. package/src/js/util/style.js +3 -3
  87. package/src/js/util/viewport.js +8 -4
  88. package/src/less/components/align.less +2 -2
  89. package/src/less/components/animation.less +2 -2
  90. package/src/less/components/article.less +2 -2
  91. package/src/less/components/base.less +3 -3
  92. package/src/less/components/card.less +13 -6
  93. package/src/less/components/column.less +3 -3
  94. package/src/less/components/container.less +3 -3
  95. package/src/less/components/divider.less +2 -2
  96. package/src/less/components/dropbar.less +1 -1
  97. package/src/less/components/dropdown.less +1 -1
  98. package/src/less/components/dropnav.less +1 -1
  99. package/src/less/components/form.less +1 -1
  100. package/src/less/components/grid.less +3 -3
  101. package/src/less/components/height.less +1 -1
  102. package/src/less/components/icon.less +3 -3
  103. package/src/less/components/inverse.less +12 -0
  104. package/src/less/components/link.less +1 -1
  105. package/src/less/components/modal.less +3 -3
  106. package/src/less/components/nav.less +66 -0
  107. package/src/less/components/navbar.less +7 -11
  108. package/src/less/components/overlay.less +5 -0
  109. package/src/less/components/position.less +7 -7
  110. package/src/less/components/section.less +6 -5
  111. package/src/less/components/sticky.less +1 -1
  112. package/src/less/components/svg.less +3 -3
  113. package/src/less/components/tile.less +10 -0
  114. package/src/less/components/transition.less +9 -9
  115. package/src/less/components/utility.less +4 -4
  116. package/src/less/components/width.less +7 -7
  117. package/src/less/theme/alert.less +1 -1
  118. package/src/less/theme/align.less +1 -1
  119. package/src/less/theme/animation.less +1 -1
  120. package/src/less/theme/article.less +1 -1
  121. package/src/less/theme/background.less +1 -1
  122. package/src/less/theme/badge.less +1 -1
  123. package/src/less/theme/base.less +1 -1
  124. package/src/less/theme/breadcrumb.less +1 -1
  125. package/src/less/theme/button.less +1 -1
  126. package/src/less/theme/card.less +1 -1
  127. package/src/less/theme/close.less +1 -1
  128. package/src/less/theme/column.less +1 -1
  129. package/src/less/theme/comment.less +1 -1
  130. package/src/less/theme/container.less +1 -1
  131. package/src/less/theme/description-list.less +1 -1
  132. package/src/less/theme/divider.less +1 -1
  133. package/src/less/theme/dotnav.less +1 -1
  134. package/src/less/theme/drop.less +1 -1
  135. package/src/less/theme/dropbar.less +1 -1
  136. package/src/less/theme/dropdown.less +1 -1
  137. package/src/less/theme/form-range.less +1 -1
  138. package/src/less/theme/height.less +1 -1
  139. package/src/less/theme/icon.less +1 -1
  140. package/src/less/theme/iconnav.less +1 -1
  141. package/src/less/theme/inverse.less +1 -1
  142. package/src/less/theme/label.less +1 -1
  143. package/src/less/theme/leader.less +1 -1
  144. package/src/less/theme/lightbox.less +1 -1
  145. package/src/less/theme/margin.less +1 -1
  146. package/src/less/theme/modal.less +1 -1
  147. package/src/less/theme/nav.less +1 -1
  148. package/src/less/theme/navbar.less +3 -3
  149. package/src/less/theme/notification.less +1 -1
  150. package/src/less/theme/offcanvas.less +1 -1
  151. package/src/less/theme/overlay.less +1 -1
  152. package/src/less/theme/padding.less +1 -1
  153. package/src/less/theme/pagination.less +1 -1
  154. package/src/less/theme/position.less +1 -1
  155. package/src/less/theme/search.less +1 -1
  156. package/src/less/theme/spinner.less +1 -1
  157. package/src/less/theme/sticky.less +1 -1
  158. package/src/less/theme/tab.less +2 -2
  159. package/src/less/theme/table.less +1 -1
  160. package/src/less/theme/thumbnav.less +1 -1
  161. package/src/less/theme/tile.less +1 -1
  162. package/src/less/theme/tooltip.less +1 -1
  163. package/src/less/theme/totop.less +1 -1
  164. package/src/less/theme/transition.less +1 -1
  165. package/src/less/theme/utility.less +1 -1
  166. package/src/less/theme/variables.less +1 -1
  167. package/src/less/theme/width.less +1 -1
  168. package/src/less/uikit.less +1 -1
  169. package/src/scss/components/align.scss +2 -2
  170. package/src/scss/components/animation.scss +2 -2
  171. package/src/scss/components/base.scss +2 -2
  172. package/src/scss/components/card.scss +12 -6
  173. package/src/scss/components/column.scss +3 -3
  174. package/src/scss/components/container.scss +3 -3
  175. package/src/scss/components/divider.scss +2 -2
  176. package/src/scss/components/dropnav.scss +1 -1
  177. package/src/scss/components/form.scss +1 -1
  178. package/src/scss/components/grid.scss +3 -3
  179. package/src/scss/components/height.scss +1 -1
  180. package/src/scss/components/icon.scss +3 -3
  181. package/src/scss/components/inverse.scss +12 -0
  182. package/src/scss/components/modal.scss +3 -3
  183. package/src/scss/components/nav.scss +63 -0
  184. package/src/scss/components/navbar.scss +5 -8
  185. package/src/scss/components/overlay.scss +4 -0
  186. package/src/scss/components/position.scss +7 -7
  187. package/src/scss/components/section.scss +6 -5
  188. package/src/scss/components/sticky.scss +1 -1
  189. package/src/scss/components/svg.scss +3 -3
  190. package/src/scss/components/tile.scss +8 -0
  191. package/src/scss/components/transition.scss +9 -9
  192. package/src/scss/components/utility.scss +4 -4
  193. package/src/scss/components/width.scss +7 -7
  194. package/src/scss/mixins-theme.scss +10 -7
  195. package/src/scss/mixins.scss +7 -4
  196. package/src/scss/theme/alert.scss +1 -0
  197. package/src/scss/theme/align.scss +1 -1
  198. package/src/scss/theme/animation.scss +1 -1
  199. package/src/scss/theme/article.scss +1 -1
  200. package/src/scss/theme/background.scss +1 -1
  201. package/src/scss/theme/badge.scss +1 -1
  202. package/src/scss/theme/base.scss +1 -1
  203. package/src/scss/theme/breadcrumb.scss +1 -1
  204. package/src/scss/theme/button.scss +1 -1
  205. package/src/scss/theme/card.scss +1 -0
  206. package/src/scss/theme/close.scss +1 -1
  207. package/src/scss/theme/column.scss +1 -1
  208. package/src/scss/theme/comment.scss +1 -1
  209. package/src/scss/theme/container.scss +1 -1
  210. package/src/scss/theme/description-list.scss +1 -1
  211. package/src/scss/theme/divider.scss +1 -1
  212. package/src/scss/theme/dotnav.scss +1 -0
  213. package/src/scss/theme/drop.scss +1 -1
  214. package/src/scss/theme/dropbar.scss +1 -1
  215. package/src/scss/theme/dropdown.scss +1 -1
  216. package/src/scss/theme/form-range.scss +1 -1
  217. package/src/scss/theme/height.scss +1 -1
  218. package/src/scss/theme/icon.scss +1 -1
  219. package/src/scss/theme/iconnav.scss +1 -1
  220. package/src/scss/theme/inverse.scss +1 -1
  221. package/src/scss/theme/label.scss +1 -1
  222. package/src/scss/theme/leader.scss +1 -1
  223. package/src/scss/theme/lightbox.scss +1 -1
  224. package/src/scss/theme/margin.scss +1 -1
  225. package/src/scss/theme/modal.scss +1 -0
  226. package/src/scss/theme/nav.scss +1 -1
  227. package/src/scss/theme/navbar.scss +1 -1
  228. package/src/scss/theme/notification.scss +1 -1
  229. package/src/scss/theme/offcanvas.scss +1 -1
  230. package/src/scss/theme/overlay.scss +1 -1
  231. package/src/scss/theme/padding.scss +1 -1
  232. package/src/scss/theme/pagination.scss +1 -1
  233. package/src/scss/theme/position.scss +1 -1
  234. package/src/scss/theme/search.scss +1 -1
  235. package/src/scss/theme/spinner.scss +1 -1
  236. package/src/scss/theme/sticky.scss +1 -1
  237. package/src/scss/theme/tab.scss +1 -1
  238. package/src/scss/theme/table.scss +1 -0
  239. package/src/scss/theme/thumbnav.scss +1 -1
  240. package/src/scss/theme/tile.scss +1 -1
  241. package/src/scss/theme/tooltip.scss +1 -1
  242. package/src/scss/theme/totop.scss +1 -1
  243. package/src/scss/theme/transition.scss +1 -1
  244. package/src/scss/theme/utility.scss +1 -1
  245. package/src/scss/theme/variables.scss +1 -1
  246. package/src/scss/theme/width.scss +1 -1
  247. package/src/scss/uikit.scss +1 -1
  248. package/src/scss/variables-theme.scss +20 -5
  249. package/src/scss/variables.scss +20 -5
  250. package/tests/height.html +58 -1
  251. package/tests/icon.html +38 -10
  252. package/tests/nav.html +42 -0
  253. package/tests/navbar.html +1 -1
  254. package/tests/offcanvas.html +8 -8
  255. package/tests/search.html +300 -202
  256. package/tests/slider.html +58 -0
  257. package/tests/slideshow.html +66 -0
  258. package/tests/sticky-navbar.html +381 -23
  259. package/src/images/icons/pagekit.svg +0 -3
  260. package/src/js/mixin/internal/scroll.js +0 -39
@@ -3,6 +3,7 @@ import {
3
3
  addClass,
4
4
  apply,
5
5
  attr,
6
+ closest,
6
7
  css,
7
8
  each,
8
9
  hasAttr,
@@ -11,7 +12,6 @@ import {
11
12
  isRtl,
12
13
  isString,
13
14
  isTag,
14
- parents,
15
15
  swap,
16
16
  } from 'uikit-util';
17
17
  import closeIcon from '../../images/components/close-icon.svg';
@@ -54,6 +54,7 @@ const icons = {
54
54
  'search-icon': searchIcon,
55
55
  'search-large': searchLarge,
56
56
  'search-navbar': searchNavbar,
57
+ 'search-toggle-icon': searchIcon,
57
58
  'slidenav-next': slidenavNext,
58
59
  'slidenav-next-large': slidenavNextLarge,
59
60
  'slidenav-previous': slidenavPrevious,
@@ -121,10 +122,12 @@ export const Search = {
121
122
  i18n: { toggle: 'Open Search', submit: 'Submit Search' },
122
123
 
123
124
  beforeConnect() {
124
- this.icon =
125
- hasClass(this.$el, 'uk-search-icon') && parents(this.$el, '.uk-search-large').length
125
+ const isToggle = hasClass(this.$el, 'uk-search-toggle') || hasClass(this.$el, 'uk-navbar-toggle');
126
+ this.icon = isToggle
127
+ ? 'search-toggle-icon'
128
+ : hasClass(this.$el, 'uk-search-icon') && closest(this.$el, '.uk-search-large')
126
129
  ? 'search-large'
127
- : parents(this.$el, '.uk-search-navbar').length
130
+ : closest(this.$el, '.uk-search-navbar')
128
131
  ? 'search-navbar'
129
132
  : this.$props.icon;
130
133
 
@@ -132,7 +135,7 @@ export const Search = {
132
135
  return;
133
136
  }
134
137
 
135
- if (hasClass(this.$el, 'uk-search-toggle') || hasClass(this.$el, 'uk-navbar-toggle')) {
138
+ if (isToggle) {
136
139
  const label = this.t('toggle');
137
140
  attr(this.$el, 'aria-label', label);
138
141
  } else {
@@ -248,7 +251,11 @@ function install(UIkit) {
248
251
  };
249
252
  }
250
253
 
254
+ const aliases = { twitter: 'x' };
255
+
251
256
  function getIcon(icon) {
257
+ icon = aliases[icon] || icon;
258
+
252
259
  if (!icons[icon]) {
253
260
  return null;
254
261
  }
@@ -6,9 +6,11 @@ export { default as Dropnav } from './dropnav';
6
6
  export { default as FormCustom } from './form-custom';
7
7
  export { default as Grid } from './grid';
8
8
  export { default as HeightMatch } from './height-match';
9
+ export { default as HeightPlaceholder } from './height-placeholder';
9
10
  export { default as HeightViewport } from './height-viewport';
10
11
  export { default as Icon } from './icon';
11
12
  export { default as Img } from './img';
13
+ export { default as Inverse } from './inverse';
12
14
  export { default as Leader } from './leader';
13
15
  export { default as Margin } from './margin';
14
16
  export { default as Modal } from './modal';
@@ -0,0 +1,103 @@
1
+ import { $$, css, dimensions, matches, observeResize, on, replaceClass } from 'uikit-util';
2
+ import { mutation } from '../api/observables';
3
+
4
+ export default {
5
+ props: {
6
+ target: String,
7
+ selActive: String,
8
+ },
9
+
10
+ data: {
11
+ target: false,
12
+ selActive: false,
13
+ },
14
+
15
+ computed: {
16
+ target: ({ target }, $el) => (target ? $$(target, $el) : [$el]),
17
+ },
18
+
19
+ observe: [
20
+ mutation({
21
+ target: ({ target }) => target,
22
+ options: { attributes: true, attributeFilter: ['class'], attributeOldValue: true },
23
+ }),
24
+ {
25
+ target: ({ target }) => target,
26
+ observe: (target, handler) => {
27
+ const observer = observeResize([...target, document.documentElement], handler);
28
+ const listener = [
29
+ on(document, 'scroll itemshown itemhidden', handler, {
30
+ passive: true,
31
+ capture: true,
32
+ }),
33
+ on(document, 'show hide transitionstart', (e) => {
34
+ handler();
35
+ return observer.observe(e.target);
36
+ }),
37
+ on(document, 'shown hidden transitionend transitioncancel', (e) => {
38
+ handler();
39
+ return observer.unobserve(e.target);
40
+ }),
41
+ ];
42
+
43
+ return {
44
+ disconnect() {
45
+ observer.disconnect();
46
+ listener.map((off) => off());
47
+ },
48
+ };
49
+ },
50
+ handler() {
51
+ this.$emit();
52
+ },
53
+ },
54
+ ],
55
+
56
+ update: {
57
+ read() {
58
+ for (const target of this.target) {
59
+ replaceClass(
60
+ target,
61
+ 'uk-light,uk-dark',
62
+ !this.selActive || matches(target, this.selActive)
63
+ ? findTargetColor(target)
64
+ : '',
65
+ );
66
+ }
67
+ },
68
+ },
69
+ };
70
+
71
+ function findTargetColor(target) {
72
+ const { left, top, height, width } = dimensions(target);
73
+
74
+ let last;
75
+ for (const percent of [0.25, 0.5, 0.75]) {
76
+ const elements = target.ownerDocument.elementsFromPoint(
77
+ Math.max(0, left) + width * percent,
78
+ Math.max(0, top) + height / 2,
79
+ );
80
+
81
+ for (const element of elements) {
82
+ if (
83
+ target.contains(element) ||
84
+ (element.closest('[class*="-leave"]') &&
85
+ elements.some((el) => element !== el && matches(el, '[class*="-enter"]')))
86
+ ) {
87
+ continue;
88
+ }
89
+
90
+ const color = css(element, '--uk-inverse');
91
+ if (color) {
92
+ if (color === last) {
93
+ return `uk-${color}`;
94
+ }
95
+
96
+ last = color;
97
+ break;
98
+ }
99
+ }
100
+ }
101
+
102
+ return last ? `uk-${last}` : '';
103
+ }
@@ -7,6 +7,7 @@ import {
7
7
  height,
8
8
  html,
9
9
  isString,
10
+ isTag,
10
11
  noop,
11
12
  on,
12
13
  removeClass,
@@ -26,6 +27,18 @@ export default {
26
27
  },
27
28
 
28
29
  events: [
30
+ {
31
+ name: 'fullscreenchange webkitendfullscreen',
32
+
33
+ capture: true,
34
+
35
+ handler(e) {
36
+ if (isTag(e.target, 'video') && this.isToggled() && !document.fullscreenElement) {
37
+ this.hide();
38
+ }
39
+ },
40
+ },
41
+
29
42
  {
30
43
  name: 'show',
31
44
 
@@ -1,20 +1,8 @@
1
- import {
2
- $$,
3
- addClass,
4
- css,
5
- hasClass,
6
- observeResize,
7
- offset,
8
- on,
9
- parent,
10
- pointInRect,
11
- removeClass,
12
- replaceClass,
13
- scrollParent,
14
- } from 'uikit-util';
15
- import { intersection, mutation } from '../api/observables';
1
+ import { $$, addClass, css, hasClass, removeClass } from 'uikit-util';
16
2
  import Dropnav from './dropnav';
17
3
 
4
+ const clsNavbarTransparent = 'uk-navbar-transparent';
5
+
18
6
  export default {
19
7
  extends: Dropnav,
20
8
 
@@ -26,57 +14,37 @@ export default {
26
14
  clsDrop: 'uk-navbar-dropdown',
27
15
  selNavItem:
28
16
  '.uk-navbar-nav > li > a,a.uk-navbar-item,button.uk-navbar-item,.uk-navbar-item a,.uk-navbar-item button,.uk-navbar-toggle', // Simplify with :where() selector once browser target is Safari 14+
29
- selTransparentTarget: '[class*="uk-section"]',
30
17
  dropbarTransparentMode: false,
31
18
  },
32
19
 
33
20
  computed: {
34
21
  navbarContainer: (_, $el) => $el.closest('.uk-navbar-container'),
35
22
 
36
- dropbarOffset: ({ dropbarTransparentMode }, $el) =>
37
- dropbarTransparentMode === 'behind' ? $el.offsetHeight : 0,
23
+ dropbarOffset({ dropbarTransparentMode }) {
24
+ const { offsetTop, offsetHeight } = this.navbarContainer;
25
+ return (
26
+ offsetTop +
27
+ (dropbarTransparentMode === 'behind'
28
+ ? 0
29
+ : offsetHeight + this.dropbarPositionOffset)
30
+ );
31
+ },
38
32
  },
39
33
 
40
34
  watch: {
41
35
  items() {
42
36
  const justify = hasClass(this.$el, 'uk-navbar-justify');
43
- for (const container of $$(
44
- '.uk-navbar-nav, .uk-navbar-left, .uk-navbar-right',
45
- this.$el,
46
- )) {
47
- css(
48
- container,
49
- 'flexGrow',
50
- justify
51
- ? $$(
52
- '.uk-navbar-nav > li > a, .uk-navbar-item, .uk-navbar-toggle',
53
- container,
54
- ).length
55
- : '',
56
- );
37
+ const containers = $$('.uk-navbar-nav, .uk-navbar-left, .uk-navbar-right', this.$el);
38
+ for (const container of containers) {
39
+ const items = justify
40
+ ? $$('.uk-navbar-nav > li > a, .uk-navbar-item, .uk-navbar-toggle', container)
41
+ .length
42
+ : '';
43
+ css(container, 'flexGrow', items);
57
44
  }
58
45
  },
59
46
  },
60
47
 
61
- disconnect() {
62
- this._colorListener?.();
63
- },
64
-
65
- observe: [
66
- mutation({
67
- target: ({ navbarContainer }) => navbarContainer,
68
- handler: 'registerColorListener',
69
- options: { attributes: true, attributeFilter: ['class'], attributeOldValue: true },
70
- }),
71
- intersection({
72
- handler(records) {
73
- this._isIntersecting = records[0].isIntersecting;
74
- this.registerColorListener();
75
- },
76
- args: { intersecting: false },
77
- }),
78
- ],
79
-
80
48
  events: [
81
49
  {
82
50
  name: 'show',
@@ -86,26 +54,12 @@ export default {
86
54
  },
87
55
 
88
56
  handler({ target }) {
89
- const transparentMode = this.getTransparentMode(target);
90
-
91
- if (!transparentMode || this._mode) {
92
- return;
93
- }
94
-
95
- const storePrevColor = () =>
96
- (this._mode = removeClasses(this.navbarContainer, 'uk-light', 'uk-dark'));
97
-
98
- if (transparentMode === 'behind') {
99
- const mode = getDropbarBehindColor(this.$el);
100
- if (mode) {
101
- storePrevColor();
102
- addClass(this.navbarContainer, `uk-${mode}`);
103
- }
104
- }
105
-
106
- if (transparentMode === 'remove') {
107
- storePrevColor();
108
- removeClass(this.navbarContainer, 'uk-navbar-transparent');
57
+ if (
58
+ this.getTransparentMode(target) === 'remove' &&
59
+ hasClass(this.navbarContainer, clsNavbarTransparent)
60
+ ) {
61
+ removeClass(this.navbarContainer, clsNavbarTransparent);
62
+ this._transparent = true;
109
63
  }
110
64
  },
111
65
  },
@@ -116,33 +70,13 @@ export default {
116
70
  return this.dropContainer;
117
71
  },
118
72
 
119
- async handler({ target }) {
120
- const transparentMode = this.getTransparentMode(target);
121
-
122
- if (!transparentMode || !this._mode) {
123
- return;
124
- }
125
-
73
+ async handler() {
126
74
  await awaitMacroTask();
127
75
 
128
- if (this.getActive()) {
129
- return;
76
+ if (!this.getActive() && this._transparent) {
77
+ addClass(this.navbarContainer, clsNavbarTransparent);
78
+ this._transparent = null;
130
79
  }
131
-
132
- if (transparentMode === 'behind') {
133
- const mode = getDropbarBehindColor(this.$el);
134
- if (mode) {
135
- removeClass(this.navbarContainer, `uk-${mode}`);
136
- }
137
- }
138
-
139
- addClass(this.navbarContainer, this._mode);
140
-
141
- if (transparentMode === 'remove') {
142
- addClass(this.navbarContainer, 'uk-navbar-transparent');
143
- }
144
-
145
- this._mode = null;
146
80
  },
147
81
  },
148
82
  ],
@@ -159,87 +93,13 @@ export default {
159
93
 
160
94
  const drop = this.getDropdown(el);
161
95
 
162
- if (!drop || !hasClass(el, 'uk-dropbar')) {
163
- return;
96
+ if (drop && hasClass(el, 'uk-dropbar')) {
97
+ return drop.inset ? 'behind' : 'remove';
164
98
  }
165
-
166
- return drop.inset ? 'behind' : 'remove';
167
- },
168
-
169
- registerColorListener() {
170
- const active =
171
- this._isIntersecting &&
172
- hasClass(this.navbarContainer, 'uk-navbar-transparent') &&
173
- !isWithinMixBlendMode(this.navbarContainer) &&
174
- !$$('.uk-drop', this.dropContainer)
175
- .map(this.getDropdown)
176
- .some(
177
- (drop) =>
178
- drop.isToggled() &&
179
- (drop.inset || this.getTransparentMode(drop.$el) === 'behind'),
180
- );
181
-
182
- if (this._colorListener) {
183
- if (!active) {
184
- this._colorListener();
185
- this._colorListener = null;
186
- }
187
- return;
188
- }
189
-
190
- if (!active) {
191
- return;
192
- }
193
-
194
- this._colorListener = listenForPositionChange(this.navbarContainer, () => {
195
- const { left, top, height } = offset(this.navbarContainer);
196
- const startPoint = { x: left, y: Math.max(0, top) + height / 2 };
197
- const target = $$(this.selTransparentTarget).find((target) =>
198
- pointInRect(startPoint, offset(target)),
199
- );
200
- const color = css(target, '--uk-navbar-color');
201
- if (color) {
202
- replaceClass(this.navbarContainer, 'uk-light,uk-dark', `uk-${color}`);
203
- }
204
- });
205
99
  },
206
100
  },
207
101
  };
208
102
 
209
- function removeClasses(el, ...classes) {
210
- for (const cls of classes) {
211
- if (hasClass(el, cls)) {
212
- removeClass(el, cls);
213
- return cls;
214
- }
215
- }
216
- }
217
-
218
- async function awaitMacroTask() {
103
+ function awaitMacroTask() {
219
104
  return new Promise((resolve) => setTimeout(resolve));
220
105
  }
221
-
222
- function getDropbarBehindColor(el) {
223
- return css(el, '--uk-navbar-dropbar-behind-color');
224
- }
225
-
226
- function listenForPositionChange(el, handler) {
227
- const parent = scrollParent(el, true);
228
- const scrollEl = parent === document.documentElement ? document : parent;
229
-
230
- const off = on(scrollEl, 'scroll', handler, { passive: true });
231
- const observer = observeResize([el, parent], handler);
232
-
233
- return () => {
234
- off();
235
- observer.disconnect();
236
- };
237
- }
238
-
239
- function isWithinMixBlendMode(el) {
240
- do {
241
- if (css(el, 'mixBlendMode') !== 'normal') {
242
- return true;
243
- }
244
- } while ((el = parent(el)));
245
- }
@@ -1,37 +1,10 @@
1
- import { addClass, Dimensions, height, isVisible, parent, width } from 'uikit-util';
2
- import { resize } from '../api/observables';
1
+ import { addClass, css } from 'uikit-util';
3
2
 
4
3
  export default {
5
4
  props: ['width', 'height'],
6
5
 
7
6
  connected() {
8
7
  addClass(this.$el, 'uk-responsive-width');
9
- },
10
-
11
- observe: resize({
12
- target: ({ $el }) => [$el, parent($el)],
13
- }),
14
-
15
- update: {
16
- read() {
17
- return isVisible(this.$el) && this.width && this.height
18
- ? { width: width(parent(this.$el)), height: this.height }
19
- : false;
20
- },
21
-
22
- write(dim) {
23
- height(
24
- this.$el,
25
- Dimensions.contain(
26
- {
27
- height: this.height,
28
- width: this.width,
29
- },
30
- dim,
31
- ).height,
32
- );
33
- },
34
-
35
- events: ['resize'],
8
+ css(this.$el, 'aspectRatio', `${this.width}/${this.height}`);
36
9
  },
37
10
  };