uikit 3.25.27-dev.9e97c1f → 3.25.27

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 (222) hide show
  1. package/CHANGELOG.md +2 -34
  2. package/build/prefix.js +1 -1
  3. package/build/publishDev.js +1 -1
  4. package/build/scope.js +1 -1
  5. package/build/scss.js +1 -1
  6. package/dist/css/uikit-core-rtl.css +1569 -1692
  7. package/dist/css/uikit-core-rtl.min.css +1 -1
  8. package/dist/css/uikit-core.css +1569 -1692
  9. package/dist/css/uikit-core.min.css +1 -1
  10. package/dist/css/uikit-rtl.css +1210 -1326
  11. package/dist/css/uikit-rtl.min.css +1 -1
  12. package/dist/css/uikit.css +1210 -1326
  13. package/dist/css/uikit.min.css +1 -1
  14. package/dist/js/components/countdown.js +1 -1
  15. package/dist/js/components/countdown.min.js +1 -1
  16. package/dist/js/components/filter.js +1 -1
  17. package/dist/js/components/filter.min.js +1 -1
  18. package/dist/js/components/lightbox-panel.js +135 -134
  19. package/dist/js/components/lightbox-panel.min.js +1 -1
  20. package/dist/js/components/lightbox.js +136 -135
  21. package/dist/js/components/lightbox.min.js +1 -1
  22. package/dist/js/components/notification.js +6 -8
  23. package/dist/js/components/notification.min.js +1 -1
  24. package/dist/js/components/parallax.js +12 -8
  25. package/dist/js/components/parallax.min.js +1 -1
  26. package/dist/js/components/slider-parallax.js +12 -8
  27. package/dist/js/components/slider-parallax.min.js +1 -1
  28. package/dist/js/components/slider.js +25 -51
  29. package/dist/js/components/slider.min.js +1 -1
  30. package/dist/js/components/slideshow-parallax.js +12 -8
  31. package/dist/js/components/slideshow-parallax.min.js +1 -1
  32. package/dist/js/components/slideshow.js +102 -81
  33. package/dist/js/components/slideshow.min.js +1 -1
  34. package/dist/js/components/sortable.js +1 -1
  35. package/dist/js/components/sortable.min.js +1 -1
  36. package/dist/js/components/tooltip.js +17 -15
  37. package/dist/js/components/tooltip.min.js +1 -1
  38. package/dist/js/components/upload.js +1 -1
  39. package/dist/js/components/upload.min.js +1 -1
  40. package/dist/js/uikit-core.js +313 -856
  41. package/dist/js/uikit-core.min.js +1 -1
  42. package/dist/js/uikit-icons.js +1 -1
  43. package/dist/js/uikit-icons.min.js +1 -1
  44. package/dist/js/uikit.js +377 -711
  45. package/dist/js/uikit.min.js +1 -1
  46. package/package.json +2 -2
  47. package/src/js/api/component.js +3 -2
  48. package/src/js/api/observables.js +4 -16
  49. package/src/js/api/options.js +3 -6
  50. package/src/js/api/props.js +3 -1
  51. package/src/js/api/state.js +8 -7
  52. package/src/js/components/index.js +0 -1
  53. package/src/js/components/internal/lightbox-animations.js +26 -7
  54. package/src/js/components/internal/slider-preload.js +0 -1
  55. package/src/js/components/internal/slideshow-animations.js +62 -15
  56. package/src/js/components/lightbox-panel.js +96 -121
  57. package/src/js/components/lightbox.js +8 -5
  58. package/src/js/components/notification.js +5 -7
  59. package/src/js/core/accordion.js +31 -62
  60. package/src/js/core/drop.js +3 -4
  61. package/src/js/core/dropnav.js +3 -3
  62. package/src/js/core/grid.js +19 -5
  63. package/src/js/core/margin.js +0 -3
  64. package/src/js/core/scroll.js +11 -0
  65. package/src/js/core/sticky.js +1 -1
  66. package/src/js/core/switcher.js +49 -12
  67. package/src/js/core/video.js +21 -236
  68. package/src/js/mixin/internal/slideshow-animations.js +13 -5
  69. package/src/js/mixin/internal/slideshow-transitioner.js +2 -2
  70. package/src/js/mixin/parallax.js +4 -1
  71. package/src/js/mixin/position.js +1 -1
  72. package/src/js/mixin/slider-parallax.js +38 -9
  73. package/src/js/mixin/togglable.js +14 -13
  74. package/src/js/util/attr.js +7 -7
  75. package/src/js/util/dom.js +4 -3
  76. package/src/js/util/lang.js +2 -2
  77. package/src/js/util/player.js +2 -4
  78. package/src/js/util/style.js +13 -12
  79. package/src/js/util/viewport.js +25 -22
  80. package/src/less/components/_import.less +3 -8
  81. package/src/less/components/animation.less +1 -1
  82. package/src/less/components/base.less +1 -1
  83. package/src/less/components/button.less +1 -1
  84. package/src/less/components/card.less +8 -8
  85. package/src/less/components/form.less +15 -15
  86. package/src/less/components/grid.less +65 -58
  87. package/src/less/components/lightbox.less +8 -2
  88. package/src/less/components/margin.less +124 -155
  89. package/src/less/components/modal.less +4 -1
  90. package/src/less/components/nav.less +1 -1
  91. package/src/less/components/navbar.less +1 -1
  92. package/src/less/components/padding.less +9 -9
  93. package/src/less/components/position.less +4 -9
  94. package/src/less/components/search.less +1 -1
  95. package/src/less/components/slideshow.less +4 -1
  96. package/src/less/components/switcher.less +2 -5
  97. package/src/less/components/table.less +4 -4
  98. package/src/less/components/text.less +4 -10
  99. package/src/less/components/utility.less +163 -0
  100. package/src/less/components/visibility.less +4 -4
  101. package/src/less/theme/_import.less +2 -6
  102. package/src/less/theme/alert.less +5 -0
  103. package/src/less/theme/thumbnav.less +4 -1
  104. package/src/less/theme/utility.less +32 -0
  105. package/src/scss/components/_import.scss +3 -8
  106. package/src/scss/components/animation.scss +1 -1
  107. package/src/scss/components/base.scss +1 -1
  108. package/src/scss/components/button.scss +1 -1
  109. package/src/scss/components/card.scss +8 -8
  110. package/src/scss/components/form.scss +14 -14
  111. package/src/scss/components/grid.scss +64 -57
  112. package/src/scss/components/lightbox.scss +8 -2
  113. package/src/scss/components/margin.scss +124 -155
  114. package/src/scss/components/modal.scss +4 -1
  115. package/src/scss/components/nav.scss +1 -1
  116. package/src/scss/components/navbar.scss +1 -1
  117. package/src/scss/components/padding.scss +9 -9
  118. package/src/scss/components/position.scss +4 -9
  119. package/src/scss/components/search.scss +1 -1
  120. package/src/scss/components/slideshow.scss +4 -1
  121. package/src/scss/components/switcher.scss +2 -5
  122. package/src/scss/components/table.scss +4 -4
  123. package/src/scss/components/text.scss +4 -10
  124. package/src/scss/components/utility.scss +129 -0
  125. package/src/scss/components/visibility.scss +4 -4
  126. package/src/scss/mixins-theme.scss +43 -44
  127. package/src/scss/mixins.scss +31 -40
  128. package/src/scss/variables-theme.scss +14 -14
  129. package/src/scss/variables.scss +14 -14
  130. package/tests/accordion.html +10 -77
  131. package/tests/alert.html +1 -1
  132. package/tests/align.html +5 -5
  133. package/tests/animation.html +4 -4
  134. package/tests/article.html +7 -7
  135. package/tests/background.html +2 -2
  136. package/tests/badge.html +1 -1
  137. package/tests/base.html +2 -2
  138. package/tests/button.html +1 -1
  139. package/tests/card.html +15 -15
  140. package/tests/close.html +2 -2
  141. package/tests/comment.html +9 -9
  142. package/tests/container.html +2 -2
  143. package/tests/countdown.html +21 -21
  144. package/tests/cover.html +3 -3
  145. package/tests/description-list.html +1 -1
  146. package/tests/divider.html +3 -3
  147. package/tests/dotnav.html +1 -1
  148. package/tests/drop.html +7 -7
  149. package/tests/dropbar.html +5 -5
  150. package/tests/dropdown.html +1 -1
  151. package/tests/dropnav.html +18 -18
  152. package/tests/filter.html +3 -3
  153. package/tests/form.html +14 -14
  154. package/tests/grid.html +47 -41
  155. package/tests/heading.html +2 -2
  156. package/tests/height-viewport.html +4 -4
  157. package/tests/height.html +5 -5
  158. package/tests/icon.html +8 -8
  159. package/tests/image.html +6 -6
  160. package/tests/index.html +13 -13
  161. package/tests/js/index.js +1 -1
  162. package/tests/leader.html +5 -5
  163. package/tests/lightbox.html +6 -6
  164. package/tests/link.html +1 -1
  165. package/tests/list.html +4 -4
  166. package/tests/margin.html +7 -59
  167. package/tests/marker.html +3 -3
  168. package/tests/modal.html +3 -3
  169. package/tests/nav.html +5 -5
  170. package/tests/navbar.html +27 -27
  171. package/tests/notification.html +2 -8
  172. package/tests/offcanvas.html +12 -12
  173. package/tests/overlay.html +3 -3
  174. package/tests/padding.html +1 -1
  175. package/tests/pagination.html +3 -3
  176. package/tests/parallax.html +1 -1
  177. package/tests/position.html +6 -6
  178. package/tests/scrollspy.html +13 -13
  179. package/tests/search.html +5 -5
  180. package/tests/section.html +17 -17
  181. package/tests/slidenav.html +3 -3
  182. package/tests/slider.html +5 -5
  183. package/tests/slideshow.html +3 -33
  184. package/tests/sortable.html +15 -15
  185. package/tests/sticky-navbar.html +4 -4
  186. package/tests/sticky-parallax.html +3 -3
  187. package/tests/sticky.html +3 -3
  188. package/tests/svg.html +2 -3
  189. package/tests/switcher.html +7 -7
  190. package/tests/tab.html +5 -5
  191. package/tests/text.html +3 -9
  192. package/tests/tile.html +4 -4
  193. package/tests/toggle.html +1 -1
  194. package/tests/tooltip.html +3 -3
  195. package/tests/totop.html +2 -2
  196. package/tests/transition.html +1 -1
  197. package/tests/upload.html +5 -5
  198. package/tests/utility.html +116 -16
  199. package/tests/video.html +24 -224
  200. package/tests/visibility.html +4 -4
  201. package/tests/width.html +12 -12
  202. package/dist/js/components/marquee.js +0 -215
  203. package/dist/js/components/marquee.min.js +0 -1
  204. package/src/js/components/marquee.js +0 -156
  205. package/src/js/mixin/connect.js +0 -90
  206. package/src/js/mixin/scroll-driven.js +0 -57
  207. package/src/less/components/dropcap.less +0 -71
  208. package/src/less/components/floating-shadow.less +0 -66
  209. package/src/less/components/logo.less +0 -94
  210. package/src/less/components/marquee.less +0 -133
  211. package/src/less/theme/dropcap.less +0 -29
  212. package/src/less/theme/floating-shadow.less +0 -20
  213. package/src/less/theme/logo.less +0 -29
  214. package/src/less/theme/marquee.less +0 -14
  215. package/src/scss/components/dropcap.scss +0 -63
  216. package/src/scss/components/floating-shadow.scss +0 -63
  217. package/src/scss/components/logo.scss +0 -75
  218. package/src/scss/components/marquee.scss +0 -136
  219. package/tests/dropcap.html +0 -26
  220. package/tests/floating-shadow.html +0 -44
  221. package/tests/logo.html +0 -84
  222. package/tests/marquee.html +0 -617
package/dist/js/uikit.js CHANGED
@@ -1,4 +1,4 @@
1
- /*! UIkit 3.25.27-dev.9e97c1f | https://www.getuikit.com | (c) 2014 - 2026 YOOtheme | MIT License */
1
+ /*! UIkit 3.25.27 | https://www.getuikit.com | (c) 2014 - 2026 YOOtheme | MIT License */
2
2
 
3
3
  (function (global, factory) {
4
4
  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
@@ -135,8 +135,8 @@
135
135
  }
136
136
  function pick(obj, props) {
137
137
  const result = {};
138
- for (const key of props) {
139
- result[key] = obj[key];
138
+ for (const prop of props) {
139
+ result[prop] = obj[prop];
140
140
  }
141
141
  return result;
142
142
  }
@@ -247,12 +247,13 @@
247
247
  }
248
248
  if (isUndefined(value)) {
249
249
  return (_a = toNode(element)) == null ? void 0 : _a.getAttribute(name);
250
- }
251
- for (const el of toNodes(element)) {
252
- if (value === null) {
253
- removeAttr(el, name);
254
- } else {
255
- el.setAttribute(name, value);
250
+ } else {
251
+ for (const el of toNodes(element)) {
252
+ if (value === null) {
253
+ removeAttr(el, name);
254
+ } else {
255
+ el.setAttribute(name, value);
256
+ }
256
257
  }
257
258
  }
258
259
  }
@@ -589,18 +590,19 @@
589
590
  property = propName(property);
590
591
  if (isUndefined(value)) {
591
592
  return getComputedStyle(element2).getPropertyValue(property);
593
+ } else {
594
+ element2.style.setProperty(
595
+ property,
596
+ isNumeric(value) && !cssNumber[property] && !isCustomProperty(property) ? `${value}px` : value || isNumber(value) ? value : "",
597
+ priority
598
+ );
592
599
  }
593
- element2.style.setProperty(
594
- property,
595
- isNumeric(value) && !cssNumber[property] && !isCustomProperty(property) ? `${value}px` : value || isNumber(value) ? value : "",
596
- priority
597
- );
598
600
  } else if (isArray(property)) {
599
- const values = {};
601
+ const props = {};
600
602
  for (const prop of property) {
601
- values[prop] = css(element2, prop);
603
+ props[prop] = css(element2, prop);
602
604
  }
603
- return values;
605
+ return props;
604
606
  } else if (isObject(property)) {
605
607
  for (const prop in property) {
606
608
  css(element2, prop, property[prop], value);
@@ -795,9 +797,7 @@
795
797
  );
796
798
  }
797
799
  function unwrap(element) {
798
- for (const elementParent of new Set(toNodes(element).map(parent))) {
799
- elementParent.replaceWith(...elementParent.childNodes);
800
- }
800
+ toNodes(element).map(parent).filter((value, index, self) => self.indexOf(value) === index).forEach((parent2) => parent2.replaceWith(...parent2.childNodes));
801
801
  }
802
802
  const singleTagRe = /^<(\w+)\s*\/?>(?:<\/\1>)?$/;
803
803
  function fragment(html2) {
@@ -1159,9 +1159,7 @@
1159
1159
  return isTag(el, "iframe") && (isYoutube(el) || isVimeo(el));
1160
1160
  }
1161
1161
  function isYoutube(el) {
1162
- return /\/\/.*?youtube(-nocookie)?\.[a-z]+\/(watch\?v=[^&\s]+|embed)|youtu\.be\/.*/.test(
1163
- el.src
1164
- );
1162
+ return /\/\/.*?youtube(-nocookie)?\.[a-z]+\/(watch\?v=[^&\s]+|embed)|youtu\.be\//.test(el.src);
1165
1163
  }
1166
1164
  function isVimeo(el) {
1167
1165
  return /vimeo\.com\/video\/.*/.test(el.src);
@@ -1173,7 +1171,7 @@
1173
1171
  function post(el, cmd) {
1174
1172
  el.contentWindow.postMessage(JSON.stringify({ event: "command", ...cmd }), "*");
1175
1173
  }
1176
- const stateKey = /* @__PURE__ */ Symbol();
1174
+ const stateKey = "_ukPlayer";
1177
1175
  let counter = 0;
1178
1176
  function enableApi(el) {
1179
1177
  if (el[stateKey]) {
@@ -1204,16 +1202,17 @@
1204
1202
  if (!isVisible(element)) {
1205
1203
  return false;
1206
1204
  }
1207
- const rects = overflowParents(element).map((parent2) => {
1208
- const { top, left, bottom, right } = offsetViewport(parent2);
1209
- return {
1210
- top: top - offsetTop,
1211
- left: left - offsetLeft,
1212
- bottom: bottom + offsetTop,
1213
- right: right + offsetLeft
1214
- };
1215
- });
1216
- return intersectRect(...rects, offset(element));
1205
+ return intersectRect(
1206
+ ...overflowParents(element).map((parent2) => {
1207
+ const { top, left, bottom, right } = offsetViewport(parent2);
1208
+ return {
1209
+ top: top - offsetTop,
1210
+ left: left - offsetLeft,
1211
+ bottom: bottom + offsetTop,
1212
+ right: right + offsetLeft
1213
+ };
1214
+ }).concat(offset(element))
1215
+ );
1217
1216
  }
1218
1217
  function scrollIntoView(element, { offset: offsetBy = 0 } = {}) {
1219
1218
  const parents2 = isVisible(element) ? scrollParents(element, false, ["hidden"]) : [];
@@ -1297,12 +1296,11 @@
1297
1296
  if (~fixedIndex) {
1298
1297
  ancestors = ancestors.slice(fixedIndex);
1299
1298
  }
1300
- return [
1301
- scrollEl,
1302
- ...ancestors.filter(
1299
+ return [scrollEl].concat(
1300
+ ancestors.filter(
1303
1301
  (parent2) => css(parent2, "overflow").split(" ").some((prop) => includes(["auto", "scroll", ...props], prop)) && (!scrollable || parent2.scrollHeight > offsetViewport(parent2).height)
1304
1302
  )
1305
- ].reverse();
1303
+ ).reverse();
1306
1304
  }
1307
1305
  function scrollParent(...args) {
1308
1306
  return scrollParents(...args)[0];
@@ -1884,14 +1882,11 @@
1884
1882
  function coerce$1(type, value) {
1885
1883
  if (type === Boolean) {
1886
1884
  return toBoolean(value);
1887
- }
1888
- if (type === Number) {
1885
+ } else if (type === Number) {
1889
1886
  return toNumber(value);
1890
- }
1891
- if (type === "list") {
1887
+ } else if (type === "list") {
1892
1888
  return toList(value);
1893
- }
1894
- if (type === Object && isString(value)) {
1889
+ } else if (type === Object && isString(value)) {
1895
1890
  return parseOptions(value);
1896
1891
  }
1897
1892
  return type ? type(value) : value;
@@ -1967,9 +1962,9 @@
1967
1962
  function lazyload(options = {}) {
1968
1963
  return intersection({
1969
1964
  handler: function(entries, observer) {
1970
- const { targets = this.$el, preload = 5, media = false } = options;
1965
+ const { targets = this.$el, preload = 5 } = options;
1971
1966
  for (const el of toNodes(isFunction(targets) ? targets(this) : targets)) {
1972
- (media ? preloadMedia : loadLazyElements)(el, preload);
1967
+ $$('[loading="lazy"]', el).slice(0, preload - 1).forEach((el2) => removeAttr(el2, "loading"));
1973
1968
  }
1974
1969
  for (const { isIntersecting, target } of entries) {
1975
1970
  isIntersecting && observer.unobserve(target);
@@ -1978,15 +1973,6 @@
1978
1973
  ...options
1979
1974
  });
1980
1975
  }
1981
- function preloadMedia(el, preload = 5) {
1982
- loadLazyElements(el, preload);
1983
- for (const video of $$('video[preload="none"]', el)) {
1984
- video.preload = "";
1985
- }
1986
- }
1987
- function loadLazyElements(el, preload) {
1988
- $$('[loading="lazy"]', el).slice(0, preload - 1).forEach((el2) => removeAttr(el2, "loading"));
1989
- }
1990
1976
  function viewport(options) {
1991
1977
  return observe((target, handler) => observeViewportResize(handler), options, "resize");
1992
1978
  }
@@ -2050,12 +2036,10 @@
2050
2036
  var Margin = {
2051
2037
  props: {
2052
2038
  margin: String,
2053
- firstRow: Boolean,
2054
2039
  firstColumn: Boolean
2055
2040
  },
2056
2041
  data: {
2057
2042
  margin: "uk-margin-small-top",
2058
- firstRow: false,
2059
2043
  firstColumn: "uk-first-column"
2060
2044
  },
2061
2045
  observe: [
@@ -2095,7 +2079,6 @@
2095
2079
  for (const row of rows) {
2096
2080
  for (const el of row) {
2097
2081
  toggleClass(el, this.margin, rows[0] !== row);
2098
- toggleClass(el, this.firstRow, rows[0] === row);
2099
2082
  toggleClass(el, this.firstColumn, row[isRtl ? row.length - 1 : 0] === el);
2100
2083
  }
2101
2084
  }
@@ -2843,18 +2826,20 @@
2843
2826
  if (show) {
2844
2827
  _toggle(el, true);
2845
2828
  }
2846
- const prevProps = pick(el.style, [
2847
- "padding",
2848
- "border",
2849
- "width",
2850
- "height",
2851
- "minWidth",
2852
- "minHeight",
2853
- "overflowY",
2854
- "overflowX",
2855
- marginProp,
2856
- marginStartProp
2857
- ]);
2829
+ const prevProps = Object.fromEntries(
2830
+ [
2831
+ "padding",
2832
+ "border",
2833
+ "width",
2834
+ "height",
2835
+ "minWidth",
2836
+ "minHeight",
2837
+ "overflowY",
2838
+ "overflowX",
2839
+ marginProp,
2840
+ marginStartProp
2841
+ ].map((key) => [key, el.style[key]])
2842
+ );
2858
2843
  const dim = dimensions$1(el);
2859
2844
  const currentMargin = toFloat(css(el, marginProp));
2860
2845
  const marginStart = toFloat(css(el, marginStartProp));
@@ -3128,11 +3113,18 @@
3128
3113
 
3129
3114
  var Animations$2 = {
3130
3115
  slide: {
3131
- percent: translated,
3132
- translate: (percent, dir) => [
3133
- { transform: translate(dir * -100 * percent) },
3134
- { transform: translate(dir * 100 * (1 - percent)) }
3135
- ]
3116
+ show(dir) {
3117
+ return [{ transform: translate(dir * -100) }, { transform: translate() }];
3118
+ },
3119
+ percent(current) {
3120
+ return translated(current);
3121
+ },
3122
+ translate(percent, dir) {
3123
+ return [
3124
+ { transform: translate(dir * -100 * percent) },
3125
+ { transform: translate(dir * 100 * (1 - percent)) }
3126
+ ];
3127
+ }
3136
3128
  }
3137
3129
  };
3138
3130
  function translated(el) {
@@ -3143,8 +3135,8 @@
3143
3135
  }
3144
3136
 
3145
3137
  function Transitioner$1(prev, next, dir, { animation, easing }) {
3146
- const { percent, translate } = animation;
3147
- const props = translate(1, dir);
3138
+ const { percent, translate, show = noop } = animation;
3139
+ const props = show(dir);
3148
3140
  const { promise, resolve } = withResolvers();
3149
3141
  return {
3150
3142
  dir,
@@ -3426,7 +3418,7 @@
3426
3418
  return Math.atan2(Math.abs(pos2.y - pos1.y), Math.abs(pos2.x - pos1.x)) * 180 / Math.PI;
3427
3419
  }
3428
3420
 
3429
- var VERSION = '3.25.27-dev.9e97c1f';
3421
+ var VERSION = '3.25.27';
3430
3422
 
3431
3423
  function initWatches(instance) {
3432
3424
  instance._watches = [];
@@ -3635,7 +3627,7 @@
3635
3627
  }
3636
3628
  const getAttributes = memoize((id, props) => {
3637
3629
  const attributes = Object.keys(props);
3638
- const filter = [...attributes, id].flatMap((key) => [hyphenate(key), `data-${hyphenate(key)}`]);
3630
+ const filter = attributes.concat(id).flatMap((key) => [hyphenate(key), `data-${hyphenate(key)}`]);
3639
3631
  return { attributes, filter };
3640
3632
  });
3641
3633
  function initPropsObserver(instance) {
@@ -3725,10 +3717,14 @@
3725
3717
  }
3726
3718
  function normalizeData({ data = {} }, { args = [], props = {} }) {
3727
3719
  if (isArray(data)) {
3728
- data = data.slice(0, args.length).reduce(
3729
- (data2, value, index) => assign(data2, isPlainObject(value) ? value : { [args[index]]: value }),
3730
- {}
3731
- );
3720
+ data = data.slice(0, args.length).reduce((data2, value, index) => {
3721
+ if (isPlainObject(value)) {
3722
+ assign(data2, value);
3723
+ } else {
3724
+ data2[args[index]] = value;
3725
+ }
3726
+ return data2;
3727
+ }, {});
3732
3728
  }
3733
3729
  for (const key in data) {
3734
3730
  if (isUndefined(data[key])) {
@@ -3776,10 +3772,11 @@
3776
3772
  function init(element2) {
3777
3773
  const instance = getComponent(element2, name);
3778
3774
  if (instance) {
3779
- if (!data) {
3775
+ if (data) {
3776
+ instance.$destroy();
3777
+ } else {
3780
3778
  return instance;
3781
3779
  }
3782
- instance.$destroy();
3783
3780
  }
3784
3781
  return new Component({ el: element2, data });
3785
3782
  }
@@ -4280,35 +4277,75 @@
4280
4277
  var Animations$1 = {
4281
4278
  ...Animations$2,
4282
4279
  fade: {
4283
- percent: (current) => 1 - css(current, "opacity"),
4284
- translate: (percent) => [{ opacity: 1 - percent, zIndex: 0 }, { zIndex: -1 }]
4280
+ show() {
4281
+ return [{ opacity: 0, zIndex: 0 }, { zIndex: -1 }];
4282
+ },
4283
+ percent(current) {
4284
+ return 1 - css(current, "opacity");
4285
+ },
4286
+ translate(percent) {
4287
+ return [{ opacity: 1 - percent, zIndex: 0 }, { zIndex: -1 }];
4288
+ }
4285
4289
  },
4286
4290
  scale: {
4287
- percent: (current) => 1 - css(current, "opacity"),
4288
- translate: (percent) => [
4289
- { opacity: 1 - percent, transform: scale3d(1 + 0.5 * percent), zIndex: 0 },
4290
- { zIndex: -1 }
4291
- ]
4291
+ show() {
4292
+ return [{ opacity: 0, transform: scale3d(1 + 0.5), zIndex: 0 }, { zIndex: -1 }];
4293
+ },
4294
+ percent(current) {
4295
+ return 1 - css(current, "opacity");
4296
+ },
4297
+ translate(percent) {
4298
+ return [
4299
+ { opacity: 1 - percent, transform: scale3d(1 + 0.5 * percent), zIndex: 0 },
4300
+ { zIndex: -1 }
4301
+ ];
4302
+ }
4292
4303
  },
4293
4304
  pull: {
4294
- percent: (current, next, dir) => dir < 0 ? 1 - translated(next) : translated(current),
4295
- translate: (percent, dir) => dir < 0 ? [
4296
- { transform: translate(30 * percent), zIndex: -1 },
4297
- { transform: translate(-100 * (1 - percent)), zIndex: 0 }
4298
- ] : [
4299
- { transform: translate(-percent * 100), zIndex: 0 },
4300
- { transform: translate(30 * (1 - percent)), zIndex: -1 }
4301
- ]
4305
+ show(dir) {
4306
+ return dir < 0 ? [
4307
+ { transform: translate(30), zIndex: -1 },
4308
+ { transform: translate(), zIndex: 0 }
4309
+ ] : [
4310
+ { transform: translate(-100), zIndex: 0 },
4311
+ { transform: translate(), zIndex: -1 }
4312
+ ];
4313
+ },
4314
+ percent(current, next, dir) {
4315
+ return dir < 0 ? 1 - translated(next) : translated(current);
4316
+ },
4317
+ translate(percent, dir) {
4318
+ return dir < 0 ? [
4319
+ { transform: translate(30 * percent), zIndex: -1 },
4320
+ { transform: translate(-100 * (1 - percent)), zIndex: 0 }
4321
+ ] : [
4322
+ { transform: translate(-percent * 100), zIndex: 0 },
4323
+ { transform: translate(30 * (1 - percent)), zIndex: -1 }
4324
+ ];
4325
+ }
4302
4326
  },
4303
4327
  push: {
4304
- percent: (current, next, dir) => dir > 0 ? 1 - translated(next) : translated(current),
4305
- translate: (percent, dir) => dir < 0 ? [
4306
- { transform: translate(percent * 100), zIndex: 0 },
4307
- { transform: translate(-30 * (1 - percent)), zIndex: -1 }
4308
- ] : [
4309
- { transform: translate(-30 * percent), zIndex: -1 },
4310
- { transform: translate(100 * (1 - percent)), zIndex: 0 }
4311
- ]
4328
+ show(dir) {
4329
+ return dir < 0 ? [
4330
+ { transform: translate(100), zIndex: 0 },
4331
+ { transform: translate(), zIndex: -1 }
4332
+ ] : [
4333
+ { transform: translate(-30), zIndex: -1 },
4334
+ { transform: translate(), zIndex: 0 }
4335
+ ];
4336
+ },
4337
+ percent(current, next, dir) {
4338
+ return dir > 0 ? 1 - translated(next) : translated(current);
4339
+ },
4340
+ translate(percent, dir) {
4341
+ return dir < 0 ? [
4342
+ { transform: translate(percent * 100), zIndex: 0 },
4343
+ { transform: translate(-30 * (1 - percent)), zIndex: -1 }
4344
+ ] : [
4345
+ { transform: translate(-30 * percent), zIndex: -1 },
4346
+ { transform: translate(100 * (1 - percent)), zIndex: 0 }
4347
+ ];
4348
+ }
4312
4349
  }
4313
4350
  };
4314
4351
  function scale3d(value) {
@@ -4318,15 +4355,32 @@
4318
4355
  var Animations = {
4319
4356
  ...Animations$2,
4320
4357
  fade: {
4321
- percent: (current) => 1 - css(current, "opacity"),
4322
- translate: (percent) => [{ opacity: 1 - percent }, { opacity: percent }]
4358
+ show() {
4359
+ return [{ opacity: 0 }, { opacity: 1 }];
4360
+ },
4361
+ percent(current) {
4362
+ return 1 - css(current, "opacity");
4363
+ },
4364
+ translate(percent) {
4365
+ return [{ opacity: 1 - percent }, { opacity: percent }];
4366
+ }
4323
4367
  },
4324
4368
  scale: {
4325
- percent: (current) => 1 - css(current, "opacity"),
4326
- translate: (percent) => [
4327
- { opacity: 1 - percent, transform: scale3d(1 - 0.2 * percent) },
4328
- { opacity: percent, transform: scale3d(1 - 0.2 + 0.2 * percent) }
4329
- ]
4369
+ show() {
4370
+ return [
4371
+ { opacity: 0, transform: scale3d(1 - 0.2) },
4372
+ { opacity: 1, transform: scale3d(1) }
4373
+ ];
4374
+ },
4375
+ percent(current) {
4376
+ return 1 - css(current, "opacity");
4377
+ },
4378
+ translate(percent) {
4379
+ return [
4380
+ { opacity: 1 - percent, transform: scale3d(1 - 0.2 * percent) },
4381
+ { opacity: percent, transform: scale3d(1 - 0.2 + 0.2 * percent) }
4382
+ ];
4383
+ }
4330
4384
  }
4331
4385
  };
4332
4386
 
@@ -4500,22 +4554,81 @@
4500
4554
  if (!src) {
4501
4555
  return;
4502
4556
  }
4503
- try {
4504
- for (const loader of [
4505
- loadImage,
4506
- loadVideo,
4507
- loadIframe,
4508
- loadYouTube,
4509
- loadVimeo
4510
- ]) {
4511
- const content = await loader({ src, type, attrs, item, cmp: this });
4512
- if (content) {
4513
- this.setItem(item, content);
4514
- return;
4515
- }
4557
+ let matches2;
4558
+ const iframeAttrs = {
4559
+ allowfullscreen: "",
4560
+ style: "max-width: 100%; box-sizing: border-box;",
4561
+ "uk-responsive": "",
4562
+ "uk-video": Boolean(this.videoAutoplay)
4563
+ };
4564
+ if (type === "image" || isImage(src)) {
4565
+ const img = createEl("img");
4566
+ wrapInPicture(img, item.sources);
4567
+ attr(img, {
4568
+ src,
4569
+ ...pick(item, ["alt", "srcset", "sizes"]),
4570
+ ...attrs
4571
+ });
4572
+ on(img, "load", () => this.setItem(item, parent(img) || img));
4573
+ on(img, "error", () => this.setError(item));
4574
+ } else if (type === "video" || isVideo(src)) {
4575
+ const inline = this.videoAutoplay === "inline";
4576
+ const video = createEl("video", {
4577
+ src,
4578
+ playsinline: "",
4579
+ controls: inline ? null : "",
4580
+ loop: inline ? "" : null,
4581
+ muted: inline ? "" : null,
4582
+ poster: this.videoAutoplay ? null : item.poster,
4583
+ "uk-video": Boolean(this.videoAutoplay),
4584
+ ...attrs
4585
+ });
4586
+ on(video, "loadedmetadata", () => this.setItem(item, video));
4587
+ on(video, "error", () => this.setError(item));
4588
+ } else if (type === "iframe" || src.match(/\.(html|php)($|\?)/i)) {
4589
+ this.setItem(
4590
+ item,
4591
+ createEl("iframe", {
4592
+ src,
4593
+ allowfullscreen: "",
4594
+ class: "uk-lightbox-iframe",
4595
+ ...attrs
4596
+ })
4597
+ );
4598
+ } else if (matches2 = src.match(
4599
+ /\/\/(?:.*?youtube(-nocookie)?\..*?(?:[?&]v=|\/shorts\/)|youtu\.be\/)([\w-]{11})[&?]?(.*)?/
4600
+ )) {
4601
+ this.setItem(
4602
+ item,
4603
+ createEl("iframe", {
4604
+ src: `https://www.youtube${matches2[1] || ""}.com/embed/${matches2[2]}${matches2[3] ? `?${matches2[3]}` : ""}`,
4605
+ width: 1920,
4606
+ height: 1080,
4607
+ ...iframeAttrs,
4608
+ ...attrs
4609
+ })
4610
+ );
4611
+ } else if (matches2 = src.match(/\/\/.*?vimeo\.[a-z]+\/(\d+)[&?]?(.*)?/)) {
4612
+ try {
4613
+ const { height, width } = await (await fetch(
4614
+ `https://vimeo.com/api/oembed.json?maxwidth=1920&url=${encodeURI(
4615
+ src
4616
+ )}`,
4617
+ { credentials: "omit" }
4618
+ )).json();
4619
+ this.setItem(
4620
+ item,
4621
+ createEl("iframe", {
4622
+ src: `https://player.vimeo.com/video/${matches2[1]}${matches2[2] ? `?${matches2[2]}` : ""}`,
4623
+ width,
4624
+ height,
4625
+ ...iframeAttrs,
4626
+ ...attrs
4627
+ })
4628
+ );
4629
+ } catch {
4630
+ this.setError(item);
4516
4631
  }
4517
- } catch {
4518
- this.setError(item);
4519
4632
  }
4520
4633
  }
4521
4634
  },
@@ -4575,91 +4688,6 @@
4575
4688
  attr(el, attrs);
4576
4689
  return el;
4577
4690
  }
4578
- async function loadImage({ src, type, attrs, item }) {
4579
- if (type !== "image" && !isImage(src)) {
4580
- return;
4581
- }
4582
- const img = createEl("img");
4583
- wrapInPicture(img, item.sources);
4584
- attr(img, {
4585
- src,
4586
- ...pick(item, ["alt", "srcset", "sizes"]),
4587
- ...attrs
4588
- });
4589
- await img.decode();
4590
- return parent(img) || img;
4591
- }
4592
- function loadVideo({ src, type, attrs, item, cmp }) {
4593
- if (type !== "video" && !isVideo(src)) {
4594
- return;
4595
- }
4596
- const inline = cmp.videoAutoplay === "inline";
4597
- const video = createEl("video", {
4598
- src,
4599
- playsinline: "",
4600
- controls: inline ? null : "",
4601
- loop: inline ? "" : null,
4602
- muted: inline ? "" : null,
4603
- poster: cmp.videoAutoplay ? null : item.poster,
4604
- "uk-video": Boolean(cmp.videoAutoplay),
4605
- ...attrs
4606
- });
4607
- return new Promise((resolve, reject) => {
4608
- on(video, "loadedmetadata", () => resolve(video));
4609
- on(video, "error", reject);
4610
- });
4611
- }
4612
- function loadIframe({ src, type, attrs }) {
4613
- if (type !== "iframe" && !/\.(html|php)($|\?)/i.test(src)) {
4614
- return;
4615
- }
4616
- return createEl("iframe", {
4617
- src,
4618
- allowfullscreen: "",
4619
- class: "uk-lightbox-iframe",
4620
- ...attrs
4621
- });
4622
- }
4623
- function loadYouTube({ src, attrs, cmp }) {
4624
- const matches2 = src.match(
4625
- /\/\/(?:.*?youtube(-nocookie)?\..*?(?:[?&]v=|\/shorts\/)|youtu\.be\/)([\w-]{11})[&?]?(.*)?/
4626
- );
4627
- if (!matches2) {
4628
- return;
4629
- }
4630
- return createEl("iframe", {
4631
- src: `https://www.youtube${matches2[1] || ""}.com/embed/${matches2[2]}${matches2[3] ? `?${matches2[3]}` : ""}`,
4632
- width: 1920,
4633
- height: 1080,
4634
- ...getIframeAttrs(cmp),
4635
- ...attrs
4636
- });
4637
- }
4638
- async function loadVimeo({ src, attrs, cmp }) {
4639
- const matches2 = src.match(/\/\/.*?vimeo\.[a-z]+\/(\d+)[&?]?(.*)?/);
4640
- if (!matches2) {
4641
- return;
4642
- }
4643
- const { height, width } = await (await fetch(
4644
- `https://vimeo.com/api/oembed.json?maxwidth=1920&url=${encodeURIComponent(src)}`,
4645
- { credentials: "omit" }
4646
- )).json();
4647
- return createEl("iframe", {
4648
- src: `https://player.vimeo.com/video/${matches2[1]}${matches2[2] ? `?${matches2[2]}` : ""}`,
4649
- width,
4650
- height,
4651
- ...getIframeAttrs(cmp),
4652
- ...attrs
4653
- });
4654
- }
4655
- function getIframeAttrs(cmp) {
4656
- return {
4657
- allowfullscreen: "",
4658
- style: "max-width: 100%; box-sizing: border-box;",
4659
- "uk-responsive": "",
4660
- "uk-video": Boolean(cmp.videoAutoplay)
4661
- };
4662
- }
4663
4691
  function toThumbnavItem(item, videoAutoplay) {
4664
4692
  const el = item.poster || item.thumb && (item.type === "image" || isImage(item.thumb)) ? createEl("img", { src: item.poster || item.thumb, alt: "" }) : item.thumb && (item.type === "video" || isVideo(item.thumb)) ? createEl("video", {
4665
4693
  src: item.thumb,
@@ -4745,7 +4773,7 @@
4745
4773
  if (items[i].thumb) {
4746
4774
  continue;
4747
4775
  }
4748
- const parent = [...parents(toggle).reverse(), toggle].find(
4776
+ const parent = parents(toggle).reverse().concat(toggle).find(
4749
4777
  (parent2) => this.$el.contains(parent2) && (parent2 === toggle || $$(this.toggle, parent2).length === 1)
4750
4778
  );
4751
4779
  if (!parent) {
@@ -4768,121 +4796,6 @@
4768
4796
  return item;
4769
4797
  }
4770
4798
 
4771
- const hasAnimationApi = inBrowser && window.Animation;
4772
- var marquee = {
4773
- mixins: [Class],
4774
- props: {
4775
- velocity: Number,
4776
- start: Number,
4777
- reverse: Boolean,
4778
- pause: Boolean,
4779
- pauseVelocity: Number,
4780
- fadeSize: null
4781
- },
4782
- data: {
4783
- velocity: 25,
4784
- start: 0,
4785
- reverse: false,
4786
- pause: false,
4787
- pauseVelocity: 10,
4788
- selList: ".uk-marquee-items",
4789
- fadeSize: 0
4790
- },
4791
- computed: {
4792
- list: ({ selList }, $el) => $(selList, $el),
4793
- items() {
4794
- return children(this.list);
4795
- }
4796
- },
4797
- watch: {
4798
- items() {
4799
- this.$emit();
4800
- }
4801
- },
4802
- observe: [
4803
- resize({
4804
- target: ({ $el, items }) => [$el, ...items]
4805
- }),
4806
- intersection({
4807
- handler(entries) {
4808
- let active;
4809
- for (const entry of entries) {
4810
- entry.target.inert = !entry.isIntersecting;
4811
- active || (active = entry.isIntersecting && entry.target);
4812
- }
4813
- if (!active) {
4814
- return;
4815
- }
4816
- const { items } = this;
4817
- const index = items.indexOf(active);
4818
- if (!~index) {
4819
- return;
4820
- }
4821
- const direction = this.reverse ? 1 : -1;
4822
- for (let offset = 1; offset < items.length; offset++) {
4823
- const item = items[getIndex(index + direction * offset, items)];
4824
- if (item.inert) {
4825
- preloadMedia(item);
4826
- break;
4827
- }
4828
- }
4829
- },
4830
- target: ({ items }) => items,
4831
- args: { intersecting: false },
4832
- options: ({ $el }) => ({ root: $el })
4833
- })
4834
- ],
4835
- methods: {
4836
- vertical() {
4837
- return hasClass(this.$el, `${this.$options.id}-vertical`);
4838
- }
4839
- },
4840
- events: {
4841
- name: [pointerEnter, pointerLeave],
4842
- el: ({ $el }) => $el,
4843
- self: true,
4844
- filter: ({ pause }) => hasAnimationApi && pause,
4845
- handler(e) {
4846
- for (const el of this.items) {
4847
- for (const animation of el.getAnimations()) {
4848
- animation.playbackRate = e.type === pointerEnter ? this.pauseVelocity / this.velocity : 1;
4849
- }
4850
- }
4851
- }
4852
- },
4853
- update: {
4854
- write() {
4855
- const prefix = this.$options.id;
4856
- const items = this.items;
4857
- const vertical = this.vertical();
4858
- css(items, "offset", "none");
4859
- const dir = vertical ? ["top", "bottom"] : ["left", "right"];
4860
- if (!vertical && isRtl) {
4861
- dir.reverse();
4862
- }
4863
- const listStart = dimensions$1(this.list)[dir[0]];
4864
- const itemEnds = items.map((el) => dimensions$1(el)[dir[1]]);
4865
- const listEnd = Math[!vertical && isRtl ? "min" : "max"](...itemEnds);
4866
- for (const [index, el] of items.entries()) {
4867
- const elEnd = itemEnds[index];
4868
- const line1 = listEnd - elEnd;
4869
- const line2 = elEnd - listStart;
4870
- const path = vertical ? `"M0 0 v${line1}M0 ${-line2} v${line2}"` : `"M0 0 h${line1}M${-line2} 0 h${line2}"`;
4871
- css(el, `--${prefix}-path`, path);
4872
- }
4873
- css(this.$el, {
4874
- [`--${prefix}-duration`]: `${Math.abs(listStart - listEnd) / this.velocity}s`,
4875
- [`--${prefix}-start`]: this.start,
4876
- [`--${prefix}-direction`]: this.reverse ? "reverse" : "normal",
4877
- "--uk-overflow-fade-size": this.fadeSize ? `${toPx(this.fadeSize, vertical ? "height" : "width", this.$el, true)}px` : ""
4878
- });
4879
- toggleClass(this.$el, `${prefix}-fade`, this.fadeSize);
4880
- css(items, "offset", "");
4881
- },
4882
- events: ["resize"]
4883
- }
4884
- };
4885
-
4886
4799
  var notification = {
4887
4800
  mixins: [Container],
4888
4801
  functional: true,
@@ -4891,7 +4804,6 @@
4891
4804
  message: "",
4892
4805
  status: "",
4893
4806
  timeout: 5e3,
4894
- duration: 400,
4895
4807
  group: "",
4896
4808
  pos: "top-center",
4897
4809
  clsContainer: "uk-notification",
@@ -4921,11 +4833,10 @@
4921
4833
  },
4922
4834
  async connected() {
4923
4835
  const margin = toFloat(css(this.$el, this.marginProp));
4924
- await Transition.start(
4925
- css(this.$el, this.startProps),
4926
- { opacity: 1, [this.marginProp]: margin },
4927
- this.duration
4928
- );
4836
+ await Transition.start(css(this.$el, this.startProps), {
4837
+ opacity: 1,
4838
+ [this.marginProp]: margin
4839
+ });
4929
4840
  if (this.timeout) {
4930
4841
  this.timer = setTimeout(this.close, this.timeout);
4931
4842
  }
@@ -4960,7 +4871,7 @@
4960
4871
  clearTimeout(this.timer);
4961
4872
  }
4962
4873
  if (!immediate) {
4963
- await Transition.start(this.$el, this.startProps, this.duration);
4874
+ await Transition.start(this.$el, this.startProps);
4964
4875
  }
4965
4876
  removeFn(this.$el);
4966
4877
  }
@@ -5317,7 +5228,10 @@
5317
5228
  return val;
5318
5229
  }
5319
5230
  function fillObject(keys2, value) {
5320
- return Object.fromEntries(keys2.map((prop) => [prop, value]));
5231
+ return keys2.reduce((data, prop) => {
5232
+ data[prop] = value;
5233
+ return data;
5234
+ }, {});
5321
5235
  }
5322
5236
  function ease(percent, easing) {
5323
5237
  return easing >= 0 ? Math.pow(percent, easing + 1) : 1 - Math.pow(1 - percent, 1 - easing);
@@ -5391,14 +5305,16 @@
5391
5305
  return el ? "offsetTop" in el ? el : getOffsetElement(parent(el)) : document.documentElement;
5392
5306
  }
5393
5307
 
5394
- var ScrollDriven = {
5308
+ var SliderParallax = {
5395
5309
  props: {
5310
+ parallax: Boolean,
5396
5311
  parallaxTarget: Boolean,
5397
5312
  parallaxStart: String,
5398
5313
  parallaxEnd: String,
5399
5314
  parallaxEasing: Number
5400
5315
  },
5401
5316
  data: {
5317
+ parallax: false,
5402
5318
  parallaxTarget: false,
5403
5319
  parallaxStart: 0,
5404
5320
  parallaxEnd: 0,
@@ -5412,48 +5328,26 @@
5412
5328
  scroll$1({ filter: ({ parallax }) => parallax })
5413
5329
  ],
5414
5330
  computed: {
5415
- parallaxTargetFallback: ($props, $el) => $el,
5416
5331
  parallaxTarget({ parallaxTarget }, $el) {
5417
- return parallaxTarget && query(parallaxTarget, $el) || this.parallaxTargetFallback;
5332
+ return parallaxTarget && query(parallaxTarget, $el) || this.list;
5418
5333
  }
5419
5334
  },
5420
5335
  update: {
5421
5336
  read() {
5422
5337
  if (!this.parallax) {
5423
- return;
5338
+ return false;
5424
5339
  }
5425
5340
  const target = this.parallaxTarget;
5426
5341
  if (!target) {
5427
- return;
5342
+ return false;
5428
5343
  }
5429
5344
  const start = toPx(this.parallaxStart, "height", target, true);
5430
5345
  const end = toPx(this.parallaxEnd, "height", target, true);
5431
5346
  const percent = ease(scrolledOver(target, start, end), this.parallaxEasing);
5432
- return { percent };
5347
+ return { parallax: this.getIndexAt(percent) };
5433
5348
  },
5434
- events: ["scroll", "resize"]
5435
- }
5436
- };
5437
-
5438
- var SliderParallax = {
5439
- mixins: [ScrollDriven],
5440
- props: {
5441
- parallax: Boolean
5442
- },
5443
- data: {
5444
- parallax: false
5445
- },
5446
- computed: {
5447
- parallaxTargetFallback() {
5448
- return this.list;
5449
- }
5450
- },
5451
- update: {
5452
- write({ percent }) {
5453
- if (!this.parallax) {
5454
- return;
5455
- }
5456
- const [prevIndex, slidePercent] = this.getIndexAt(percent);
5349
+ write({ parallax }) {
5350
+ const [prevIndex, slidePercent] = parallax;
5457
5351
  const nextIndex = this.getValidIndex(prevIndex + Math.ceil(slidePercent));
5458
5352
  const prev = this.slides[prevIndex];
5459
5353
  const next = this.slides[nextIndex];
@@ -5545,8 +5439,7 @@
5545
5439
  var SliderPreload = {
5546
5440
  observe: lazyload({
5547
5441
  target: ({ slides }) => slides,
5548
- targets: (instance) => instance.getAdjacentSlides(),
5549
- media: true
5442
+ targets: (instance) => instance.getAdjacentSlides()
5550
5443
  }),
5551
5444
  methods: {
5552
5445
  getAdjacentSlides() {
@@ -6359,7 +6252,7 @@
6359
6252
  inset: false
6360
6253
  },
6361
6254
  connected() {
6362
- this.pos = [...this.$props.pos.split("-"), "center"].slice(0, 2);
6255
+ this.pos = this.$props.pos.split("-").concat("center").slice(0, 2);
6363
6256
  [this.dir, this.align] = this.pos;
6364
6257
  this.axis = includes(["top", "bottom"], this.dir) ? "y" : "x";
6365
6258
  },
@@ -6762,7 +6655,6 @@
6762
6655
  Filter: filter,
6763
6656
  Lightbox: lightbox,
6764
6657
  LightboxPanel: LightboxPanel,
6765
- Marquee: marquee,
6766
6658
  Notification: notification,
6767
6659
  Parallax: parallax,
6768
6660
  Slider: slider,
@@ -6846,100 +6738,29 @@
6846
6738
  globalApi(App);
6847
6739
  instanceApi(App);
6848
6740
 
6849
- const TogglableComponent = App.extend(Togglable);
6850
- var Connect = {
6851
- mixins: [Togglable],
6852
- props: {
6853
- connect: String
6854
- },
6855
- data: {
6856
- connect: "",
6857
- cls: "uk-active"
6858
- },
6859
- computed: {
6860
- connects: {
6861
- get: ({ connect }, $el) => connect ? queryAll(connect, $el) : [],
6862
- observe: ({ connect }) => connect
6863
- },
6864
- connectChildren() {
6865
- return this.connects.flatMap((el) => children(el));
6866
- }
6867
- },
6868
- watch: {
6869
- connects(connects) {
6870
- for (const el of connects) {
6871
- if (isTag(el, "ul")) {
6872
- el.role = "presentation";
6873
- }
6874
- }
6875
- }
6876
- },
6877
- observe: lazyload({ targets: ({ connectChildren }) => connectChildren }),
6878
- update() {
6879
- for (const index in this.toggles) {
6880
- const toggle = this.toggles[index];
6881
- if (!toggle) {
6882
- continue;
6883
- }
6884
- toggle.id = generateId(this, toggle);
6885
- for (const { children: children2 } of this.connects) {
6886
- const item = children2[index];
6887
- if (item) {
6888
- attr(item, {
6889
- id: generateId(this, item),
6890
- role: "tabpanel",
6891
- "aria-labelledby": toggle.id
6892
- });
6893
- }
6894
- }
6895
- }
6896
- },
6897
- methods: {
6898
- showConnects(index, animate) {
6899
- const toggle = async (el) => {
6900
- const { children: children2 } = el;
6901
- const animation = data(el, "uk-switcher-animation");
6902
- let togglable = animation ? new TogglableComponent({ data: { ...this.$props, animation } }) : this;
6903
- const actives = toArray(children2).filter(
6904
- (child, i) => i !== index && hasClass(child, this.cls)
6905
- );
6906
- if (await togglable.toggleElement(actives, false, animate)) {
6907
- await togglable.toggleElement(children2[index], true, animate);
6908
- }
6909
- };
6910
- return Promise.all(this.connects.map(toggle));
6911
- }
6912
- }
6913
- };
6914
-
6915
6741
  const wrappers = /* @__PURE__ */ new WeakMap();
6916
6742
  var Accordion = {
6917
- mixins: [Class, Connect],
6743
+ mixins: [Class, Togglable],
6918
6744
  props: {
6745
+ animation: Boolean,
6919
6746
  targets: String,
6920
6747
  active: null,
6921
6748
  collapsible: Boolean,
6922
6749
  multiple: Boolean,
6923
6750
  toggle: String,
6924
6751
  content: String,
6925
- offset: Number,
6926
- switcherConnect: String
6752
+ offset: Number
6927
6753
  },
6928
6754
  data: {
6929
6755
  targets: "> *",
6930
6756
  active: false,
6931
- animation: [true],
6757
+ animation: true,
6932
6758
  collapsible: true,
6933
6759
  multiple: false,
6934
6760
  clsOpen: "uk-open",
6935
- cls: "uk-active",
6936
6761
  toggle: ".uk-accordion-title",
6937
6762
  content: ".uk-accordion-content",
6938
- offset: 0,
6939
- switcherConnect: ""
6940
- },
6941
- beforeConnect() {
6942
- this.connect = this.$props.connect = this.switcherConnect;
6763
+ offset: 0
6943
6764
  },
6944
6765
  computed: {
6945
6766
  items: ({ targets }, $el) => $$(targets, $el),
@@ -6965,12 +6786,6 @@
6965
6786
  this.toggle(active, false);
6966
6787
  }
6967
6788
  },
6968
- connectChildren() {
6969
- this.showConnects(
6970
- findIndex(this.items, (el) => hasClass(el, this.clsOpen)),
6971
- false
6972
- );
6973
- },
6974
6789
  toggles() {
6975
6790
  this.$emit();
6976
6791
  },
@@ -7020,57 +6835,44 @@
7020
6835
  if (!toggle || !content) {
7021
6836
  continue;
7022
6837
  }
6838
+ toggle.id = generateId(this, toggle);
6839
+ content.id = generateId(this, content);
7023
6840
  const active = includes(activeItems, this.items[index2]);
7024
- attr(content, {
7025
- id: generateId(this, content),
7026
- role: "region",
7027
- "aria-labelledby": toggle.id
7028
- });
7029
- if (isTag(content, "ul")) {
7030
- attr(children(content), "role", "presentation");
7031
- }
7032
- const controls = [
7033
- content.id,
7034
- ...this.connects.map(({ children: children2 }) => {
7035
- var _a;
7036
- return (_a = children2[index2]) == null ? void 0 : _a.id;
7037
- }).filter(Boolean)
7038
- ];
7039
6841
  attr(toggle, {
7040
6842
  role: isTag(toggle, "a") ? "button" : null,
7041
- "aria-controls": controls.join(" "),
6843
+ "aria-controls": content.id,
7042
6844
  "aria-expanded": active,
7043
6845
  "aria-disabled": !this.collapsible && activeItems.length < 2 && active
7044
6846
  });
6847
+ attr(content, { role: "region", "aria-labelledby": toggle.id });
6848
+ if (isTag(content, "ul")) {
6849
+ attr(children(content), "role", "presentation");
6850
+ }
7045
6851
  }
7046
6852
  },
7047
6853
  methods: {
7048
- async toggle(item, animate) {
7049
- animate = animate !== false;
7050
- const next = getIndex(item, this.items);
7051
- item = this.items[next];
6854
+ toggle(item, animate) {
6855
+ item = this.items[getIndex(item, this.items)];
7052
6856
  let items = [item];
7053
6857
  const activeItems = filter$1(this.items, `.${this.clsOpen}`);
7054
- const isActive = includes(activeItems, item);
7055
- if (isActive && !this.collapsible && activeItems.length < 2) {
7056
- return;
7057
- }
7058
- if (!isActive && !this.multiple) {
7059
- items.push(...activeItems);
7060
- }
7061
- const toggle = (el) => this.toggleElement(el, !includes(activeItems, el), (el2, show) => {
7062
- toggleClass(el2, this.clsOpen, show);
7063
- if (!animate || !this.hasAnimation) {
7064
- hide($(this.content, el2), !show);
7065
- return;
7066
- }
7067
- return transition(el2, show, this);
7068
- });
7069
- const hideIndex = () => findIndex(this.items, (i) => i !== item && includes(activeItems, i));
7070
- return Promise.all([
7071
- ...items.map(toggle),
7072
- this.showConnects(isActive ? hideIndex() : next, animate)
7073
- ]);
6858
+ if (!this.multiple && !includes(activeItems, items[0])) {
6859
+ items = items.concat(activeItems);
6860
+ }
6861
+ if (!this.collapsible && activeItems.length < 2 && includes(activeItems, item)) {
6862
+ items = [];
6863
+ }
6864
+ return Promise.all(
6865
+ items.map(
6866
+ (el) => this.toggleElement(el, !includes(activeItems, el), (el2, show) => {
6867
+ toggleClass(el2, this.clsOpen, show);
6868
+ if (animate === false || !this.animation) {
6869
+ hide($(this.content, el2), !show);
6870
+ return;
6871
+ }
6872
+ return transition(el2, show, this);
6873
+ })
6874
+ )
6875
+ );
7074
6876
  }
7075
6877
  }
7076
6878
  };
@@ -7161,118 +6963,60 @@
7161
6963
  );
7162
6964
  }
7163
6965
 
7164
- const loopKey = /* @__PURE__ */ Symbol();
7165
6966
  var Video = {
7166
- mixins: [Media, ScrollDriven],
7167
6967
  args: "autoplay",
7168
6968
  props: {
7169
6969
  automute: Boolean,
7170
6970
  autoplay: Boolean,
7171
6971
  restart: Boolean,
7172
- inviewMargin: String,
7173
- inviewQueued: Number,
7174
- hoverTarget: Boolean,
7175
- hoverRewind: Number,
7176
- reducedMotionTime: Number
6972
+ hoverTarget: Boolean
7177
6973
  },
7178
6974
  data: {
7179
6975
  automute: false,
7180
6976
  autoplay: true,
7181
6977
  restart: false,
7182
- inviewMargin: "0px",
7183
- inviewQueued: 0,
7184
- hoverTarget: false,
7185
- hoverRewind: 0,
7186
- reducedMotionTime: 0,
7187
- media: "(prefers-reduced-motion: reduce)"
6978
+ hoverTarget: false
7188
6979
  },
7189
6980
  beforeConnect() {
7190
- const isVideo = this.isVideo = isTag(this.$el, "video");
7191
- this.interactionDriven = ["hover", "parallax"].includes(this.autoplay);
7192
- if (this.interactionDriven && !isVideo) {
7193
- this.interactionDriven = this.autoplay = false;
7194
- }
7195
- this.restart = isVideo && this.restart;
7196
- this.parallax = this.autoplay === "parallax";
7197
- this.inviewQueued = isVideo && this.autoplay === "inview" && this.inviewQueued;
7198
- if (this.inviewQueued) {
7199
- this.$el[loopKey] = this.$el.loop;
7200
- this.$el.loop = false;
7201
- }
7202
- if (["hover", "inview"].includes(this.autoplay) && isVideo && !hasAttr(this.$el, "preload")) {
6981
+ const isVideo = isTag(this.$el, "video");
6982
+ if (this.autoplay === "inview" && isVideo && !hasAttr(this.$el, "preload")) {
7203
6983
  this.$el.preload = "none";
7204
6984
  }
7205
6985
  if (!isVideo && !hasAttr(this.$el, "allow")) {
7206
6986
  this.$el.allow = "autoplay";
7207
6987
  }
7208
6988
  if (this.autoplay === "hover") {
7209
- this.hoverTarget = query(this.hoverTarget, this.$el) || this.$el;
7210
- if (!isFocusable(this.hoverTarget)) {
7211
- this.hoverTarget.tabIndex = 0;
6989
+ if (isVideo) {
6990
+ this.$el.tabIndex = 0;
6991
+ } else {
6992
+ this.autoplay = true;
7212
6993
  }
7213
6994
  }
7214
6995
  if (this.automute || hasAttr(this.$el, "muted")) {
7215
6996
  mute(this.$el);
7216
6997
  }
7217
6998
  },
7218
- connected() {
7219
- if (!this.$el.controls && !this.$el.poster && (this.interactionDriven || this.inviewQueued)) {
7220
- this.cancelPreview = preview(this.$el);
7221
- }
7222
- },
7223
- disconnected() {
7224
- var _a, _b;
7225
- (_a = this._reverseAbort) == null ? void 0 : _a.abort();
7226
- (_b = this.cancelPreview) == null ? void 0 : _b.call(this);
7227
- this.cancelPreview = null;
7228
- if (this.$el[loopKey]) {
7229
- this.$el.loop = true;
7230
- }
7231
- queue.delete(this.$el);
7232
- },
7233
6999
  events: [
7234
7000
  {
7235
7001
  name: `${pointerEnter} focusin`,
7236
- el: ({ hoverTarget }) => hoverTarget,
7002
+ el: ({ hoverTarget, $el }) => query(hoverTarget, $el) || $el,
7237
7003
  filter: ({ autoplay }) => autoplay === "hover",
7238
7004
  handler(e) {
7239
- var _a;
7240
- (_a = this._reverseAbort) == null ? void 0 : _a.abort();
7241
7005
  if (!isTouch(e) || !isPlaying(this.$el)) {
7242
- this.play();
7006
+ play(this.$el);
7243
7007
  } else {
7244
- this.pause();
7008
+ pauseHover(this.$el, this.restart);
7245
7009
  }
7246
7010
  }
7247
7011
  },
7248
7012
  {
7249
7013
  name: `${pointerLeave} focusout`,
7250
- el: ({ hoverTarget }) => hoverTarget,
7014
+ el: ({ hoverTarget, $el }) => query(hoverTarget, $el) || $el,
7251
7015
  filter: ({ autoplay }) => autoplay === "hover",
7252
7016
  handler(e) {
7253
- var _a;
7254
- if (!isTouch(e) && !this.matchMedia) {
7255
- (_a = this._reverseAbort) == null ? void 0 : _a.abort();
7256
- this.pause();
7257
- this._reverseAbort = playReverse(this.$el, this.hoverRewind);
7258
- }
7259
- }
7260
- },
7261
- {
7262
- name: "loadedmetadata durationchange",
7263
- filter: ({ parallax }) => parallax,
7264
- handler() {
7265
- this.$emit("resize");
7266
- }
7267
- },
7268
- {
7269
- name: "error pause ended",
7270
- filter: ({ inviewQueued }) => inviewQueued,
7271
- handler(e) {
7272
- if (e.type === "error" || e.type === "ended" && !this.$el[loopKey]) {
7273
- queue.delete(this.$el);
7017
+ if (!isTouch(e)) {
7018
+ pauseHover(this.$el, this.restart);
7274
7019
  }
7275
- playNextQueued();
7276
7020
  }
7277
7021
  }
7278
7022
  ],
@@ -7285,144 +7029,33 @@
7285
7029
  }
7286
7030
  }),
7287
7031
  intersection({
7288
- filter: ({ $el, interactionDriven }) => !interactionDriven && $el.preload !== "none",
7289
- handler([{ isIntersecting }]) {
7032
+ filter: ({ $el, autoplay }) => autoplay !== "hover" && $el.preload !== "none",
7033
+ handler([{ isIntersecting, target }]) {
7290
7034
  if (!document.fullscreenElement) {
7291
7035
  if (isIntersecting) {
7292
7036
  if (this.autoplay) {
7293
- this.play();
7037
+ play(target);
7294
7038
  }
7295
7039
  } else {
7296
- this.pause();
7040
+ pauseHover(target, this.restart);
7297
7041
  }
7298
7042
  }
7299
7043
  },
7300
7044
  args: { intersecting: false },
7301
- options: ({ $el, autoplay, inviewMargin }) => ({
7302
- root: autoplay === "inview" ? null : parent($el).closest(":not(a)"),
7303
- rootMargin: autoplay === "inview" ? inviewMargin : "0px"
7045
+ options: ({ $el, autoplay }) => ({
7046
+ root: autoplay === "inview" ? null : parent($el).closest(":not(a)")
7304
7047
  })
7305
7048
  })
7306
- ],
7307
- update: {
7308
- write({ percent }) {
7309
- if (!this.parallax) {
7310
- return;
7311
- }
7312
- const { duration, seeking } = this.$el;
7313
- if (!isNaN(duration) && !seeking) {
7314
- const value = this.matchMedia ? this.reducedMotionTime : percent * duration;
7315
- setCurrentTime(this.$el, value);
7316
- }
7317
- },
7318
- events: ["scroll", "resize"]
7319
- },
7320
- methods: {
7321
- play() {
7322
- var _a;
7323
- if (this.matchMedia) {
7324
- this.pause();
7325
- if (this.isVideo) {
7326
- setCurrentTime(this.$el, this.reducedMotionTime);
7327
- }
7328
- } else if (this.inviewQueued) {
7329
- queue.set(this.$el, this.inviewQueued);
7330
- playNextQueued();
7331
- } else {
7332
- (_a = this.cancelPreview) == null ? void 0 : _a.call(this);
7333
- play(this.$el);
7334
- }
7335
- },
7336
- pause() {
7337
- pause(this.$el);
7338
- queue.delete(this.$el);
7339
- if (this.restart) {
7340
- setCurrentTime(this.$el, 0);
7341
- }
7342
- }
7343
- }
7049
+ ]
7344
7050
  };
7345
- function setCurrentTime(videoEl, time) {
7346
- if (videoEl.currentTime !== time) {
7347
- videoEl.currentTime = time;
7348
- }
7349
- }
7350
7051
  function isPlaying(videoEl) {
7351
7052
  return !videoEl.paused && !videoEl.ended;
7352
7053
  }
7353
- function preview($el) {
7354
- if (!$el.requestVideoFrameCallback) {
7355
- return;
7356
- }
7357
- let frame2;
7358
- const pausePreview = () => {
7359
- disconnect();
7360
- pause($el);
7361
- };
7362
- const observer = observeIntersection($el, () => {
7363
- observer.disconnect();
7364
- frame2 = $el.requestVideoFrameCallback(pausePreview);
7365
- play($el);
7366
- });
7367
- const disconnect = () => {
7368
- observer.disconnect();
7369
- $el.cancelVideoFrameCallback(frame2);
7370
- };
7371
- return disconnect;
7372
- }
7373
- const queue = /* @__PURE__ */ new Map();
7374
- const played = /* @__PURE__ */ new WeakMap();
7375
- let frame;
7376
- function playNextQueued() {
7377
- cancelAnimationFrame(frame);
7378
- frame = requestAnimationFrame(() => {
7379
- const getPlayed = (el) => {
7380
- var _a;
7381
- return (_a = played.get(el)) != null ? _a : 0;
7382
- };
7383
- const videos = shuffle(queue.keys()).sort((a, b) => getPlayed(a) - getPlayed(b));
7384
- let active = videos.filter(isPlaying).length;
7385
- for (const el of videos) {
7386
- const maxQueued = queue.get(el);
7387
- if (isPlaying(el) || active / queue.size >= maxQueued) {
7388
- continue;
7389
- }
7390
- played.set(el, getPlayed(el) + 1);
7391
- play(el);
7392
- active++;
7393
- }
7394
- });
7395
- }
7396
- function shuffle(array) {
7397
- array = [...array];
7398
- for (let i = array.length - 1; i > 0; i--) {
7399
- let j = Math.floor(Math.random() * (i + 1));
7400
- [array[i], array[j]] = [array[j], array[i]];
7401
- }
7402
- return array;
7403
- }
7404
- function playReverse(el, playbackRate) {
7405
- const start = el.currentTime;
7406
- if (isNaN(start) || !playbackRate) {
7407
- return;
7054
+ function pauseHover(el, restart) {
7055
+ pause(el);
7056
+ if (restart && isTag(el, "video")) {
7057
+ el.currentTime = 0;
7408
7058
  }
7409
- playbackRate *= Math.max(1, start / 10 + 0.5);
7410
- const controller = new AbortController();
7411
- const time = Date.now();
7412
- (function next() {
7413
- requestAnimationFrame(() => {
7414
- if (controller.signal.aborted) {
7415
- return;
7416
- }
7417
- if (!el.seeking) {
7418
- el.currentTime = Math.max(0, start - (Date.now() - time) * playbackRate / 1e3);
7419
- }
7420
- if (el.currentTime > 0) {
7421
- next();
7422
- }
7423
- });
7424
- })();
7425
- return controller;
7426
7059
  }
7427
7060
 
7428
7061
  var cover = {
@@ -7742,7 +7375,6 @@
7742
7375
  css(this.$el, this._style);
7743
7376
  this.$el.hidden = true;
7744
7377
  const viewports = this.target.map((target) => getViewport$1(this.$el, target));
7745
- const boundaryOffsets = this.boundary.map((el) => offset(el));
7746
7378
  const viewportOffset = this.getViewportOffset(this.$el);
7747
7379
  const dirs = [
7748
7380
  [0, ["x", "width", "left", "right"]],
@@ -7752,7 +7384,7 @@
7752
7384
  if (this.axis !== axis && includes([axis, true], this.stretch)) {
7753
7385
  css(this.$el, {
7754
7386
  [prop]: Math.min(
7755
- boundaryOffsets[i][prop],
7387
+ offset(this.boundary[i])[prop],
7756
7388
  viewports[i][prop] - 2 * viewportOffset
7757
7389
  ),
7758
7390
  [`overflow-${axis}`]: "auto"
@@ -7774,10 +7406,10 @@
7774
7406
  const elOffset = offset(this.$el);
7775
7407
  css(this.$el, {
7776
7408
  [prop]: (targetOffset[start] > elOffset[start] ? targetOffset[this.inset ? end : start] - Math.max(
7777
- boundaryOffsets[i][start],
7409
+ offset(this.boundary[i])[start],
7778
7410
  viewports[i][start] + viewportOffset
7779
7411
  ) : Math.min(
7780
- boundaryOffsets[i][end],
7412
+ offset(this.boundary[i])[end],
7781
7413
  viewports[i][end] - viewportOffset
7782
7414
  ) - targetOffset[this.inset ? start : end]) - positionOffset,
7783
7415
  [`overflow-${axis}`]: "auto"
@@ -8033,9 +7665,7 @@
8033
7665
  const drop = this.getDropdown(target);
8034
7666
  const adjustHeight = () => {
8035
7667
  const maxBottom = Math.max(
8036
- ...[...parents(target, `.${this.clsDrop}`), target].map(
8037
- (el) => offset(el).bottom
8038
- )
7668
+ ...parents(target, `.${this.clsDrop}`).concat(target).map((el) => offset(el).bottom)
8039
7669
  );
8040
7670
  offset(this.dropbar, {
8041
7671
  left: offset(this.dropbar).left,
@@ -8215,8 +7845,7 @@
8215
7845
  parallaxJustify: Boolean
8216
7846
  },
8217
7847
  data: {
8218
- margin: "",
8219
- firstRow: "uk-first-row",
7848
+ margin: "uk-grid-margin",
8220
7849
  clsStack: "uk-grid-stack",
8221
7850
  masonry: false,
8222
7851
  parallax: 0,
@@ -8238,14 +7867,14 @@
8238
7867
  {
8239
7868
  read(data) {
8240
7869
  const { rows } = data;
8241
- let { masonry, parallax, parallaxJustify } = this;
7870
+ let { masonry, parallax, parallaxJustify, margin } = this;
8242
7871
  parallax = Math.max(0, toPx(parallax));
8243
7872
  if (!(masonry || parallax || parallaxJustify) || positionedAbsolute(rows) || rows[0].some(
8244
7873
  (el, i) => rows.some((row) => row[i] && row[i].offsetWidth !== el.offsetWidth)
8245
7874
  )) {
8246
7875
  return data.translates = data.scrollColumns = false;
8247
7876
  }
8248
- let gutter = toFloat(css(this.$el, "row-gap"));
7877
+ let gutter = getGutter(rows, margin);
8249
7878
  let columns;
8250
7879
  let translates;
8251
7880
  if (masonry) {
@@ -8338,6 +7967,10 @@
8338
7967
  }
8339
7968
  return [columns, translates];
8340
7969
  }
7970
+ function getGutter(rows, cls) {
7971
+ const node = rows.flat().find((el) => hasClass(el, cls));
7972
+ return toFloat(node ? css(node, "marginTop") : css(rows[0][0], "paddingLeft"));
7973
+ }
8341
7974
  function transpose(rows) {
8342
7975
  const columns = [];
8343
7976
  for (const row of rows) {
@@ -9469,6 +9102,11 @@
9469
9102
  el = el && $(el) || document.body;
9470
9103
  if (trigger(this.$el, "beforescroll", [this, el])) {
9471
9104
  await scrollIntoView(el, { offset: this.offset });
9105
+ if (!isFocusable(el)) {
9106
+ attr(el, "tabindex", "-1");
9107
+ once(el, "blur", () => attr(el, "tabindex", null));
9108
+ }
9109
+ el.focus({ preventScroll: true });
9472
9110
  trigger(this.$el, "scrolled", [this, el]);
9473
9111
  }
9474
9112
  }
@@ -10013,7 +9651,7 @@
10013
9651
  if (!value) {
10014
9652
  return 0;
10015
9653
  }
10016
- if (isNumeric(value) || isString(value) && /^-?\d/.test(value)) {
9654
+ if (isNumeric(value) || isString(value) && value.match(/^-?\d/)) {
10017
9655
  return propOffset + toPx(value, "height", el, true);
10018
9656
  } else {
10019
9657
  const refElement = value === true ? getVisibleParent(el) : query(value, el);
@@ -10128,9 +9766,10 @@
10128
9766
 
10129
9767
  const selDisabled = ".uk-disabled *, .uk-disabled, [disabled]";
10130
9768
  var Switcher = {
10131
- mixins: [Connect],
9769
+ mixins: [Togglable],
10132
9770
  args: "connect",
10133
9771
  props: {
9772
+ connect: String,
10134
9773
  toggle: String,
10135
9774
  itemNav: String,
10136
9775
  active: Number,
@@ -10142,12 +9781,20 @@
10142
9781
  toggle: "> * > :first-child",
10143
9782
  itemNav: false,
10144
9783
  active: 0,
9784
+ cls: "uk-active",
10145
9785
  attrItem: "uk-switcher-item",
10146
9786
  selVertical: ".uk-nav",
10147
9787
  followFocus: false,
10148
9788
  swiping: true
10149
9789
  },
10150
9790
  computed: {
9791
+ connects: {
9792
+ get: ({ connect }, $el) => queryAll(connect, $el),
9793
+ observe: ({ connect }) => connect
9794
+ },
9795
+ connectChildren() {
9796
+ return this.connects.flatMap((el) => children(el));
9797
+ },
10151
9798
  toggles: ({ toggle }, $el) => $$(toggle, $el),
10152
9799
  children(_, $el) {
10153
9800
  return children($el).filter(
@@ -10178,7 +9825,10 @@
10178
9825
  connected() {
10179
9826
  this.$el.role = "tablist";
10180
9827
  },
10181
- observe: swipe({ target: ({ connects }) => connects, filter: ({ swiping }) => swiping }),
9828
+ observe: [
9829
+ lazyload({ targets: ({ connectChildren }) => connectChildren }),
9830
+ swipe({ target: ({ connects }) => connects, filter: ({ swiping }) => swiping })
9831
+ ],
10182
9832
  events: [
10183
9833
  {
10184
9834
  name: "click keydown",
@@ -10232,16 +9882,24 @@
10232
9882
  }
10233
9883
  ],
10234
9884
  update() {
9885
+ var _a;
9886
+ for (const el of this.connects) {
9887
+ if (isTag(el, "ul")) {
9888
+ el.role = "presentation";
9889
+ }
9890
+ }
10235
9891
  attr(children(this.$el), "role", "presentation");
10236
9892
  for (const index in this.toggles) {
10237
- const controls = this.connects.map(({ children: children2 }) => {
10238
- var _a;
10239
- return (_a = children2[index]) == null ? void 0 : _a.id;
10240
- }).filter(Boolean);
10241
- attr(this.toggles[index], {
10242
- role: "tab",
10243
- "aria-controls": controls.join(" ")
10244
- });
9893
+ const toggle = this.toggles[index];
9894
+ const item = (_a = this.connects[0]) == null ? void 0 : _a.children[index];
9895
+ toggle.role = "tab";
9896
+ if (!item) {
9897
+ continue;
9898
+ }
9899
+ toggle.id = generateId(this, toggle);
9900
+ item.id = generateId(this, item);
9901
+ attr(toggle, "aria-controls", item.id);
9902
+ attr(item, { role: "tabpanel", "aria-labelledby": toggle.id });
10245
9903
  }
10246
9904
  attr(this.$el, "aria-orientation", matches(this.$el, this.selVertical) ? "vertical" : null);
10247
9905
  },
@@ -10274,7 +9932,15 @@
10274
9932
  tabindex: next === i ? null : -1
10275
9933
  });
10276
9934
  });
10277
- return this.showConnects(next, prev >= 0 && prev !== next);
9935
+ const animate = prev >= 0 && prev !== next;
9936
+ this.connects.forEach(async ({ children: children2 }) => {
9937
+ const actives = toArray(children2).filter(
9938
+ (child, i) => i !== next && hasClass(child, this.cls)
9939
+ );
9940
+ if (await this.toggleElement(actives, false, animate)) {
9941
+ await this.toggleElement(children2[next], true, animate);
9942
+ }
9943
+ });
10278
9944
  }
10279
9945
  }
10280
9946
  };