uikit 3.25.17-dev.80dfe87 → 3.25.17-dev.8c70e44

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 (200) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/build/prefix.js +1 -1
  3. package/build/publishDev.js +1 -1
  4. package/build/release.js +2 -2
  5. package/build/scope.js +1 -1
  6. package/build/scss.js +1 -1
  7. package/dist/css/uikit-core-rtl.css +892 -802
  8. package/dist/css/uikit-core-rtl.min.css +1 -1
  9. package/dist/css/uikit-core.css +892 -802
  10. package/dist/css/uikit-core.min.css +1 -1
  11. package/dist/css/uikit-rtl.css +893 -803
  12. package/dist/css/uikit-rtl.min.css +1 -1
  13. package/dist/css/uikit.css +893 -803
  14. package/dist/css/uikit.min.css +1 -1
  15. package/dist/js/components/countdown.js +1 -1
  16. package/dist/js/components/countdown.min.js +1 -1
  17. package/dist/js/components/filter.js +1 -1
  18. package/dist/js/components/filter.min.js +1 -1
  19. package/dist/js/components/lightbox-panel.js +133 -132
  20. package/dist/js/components/lightbox-panel.min.js +1 -1
  21. package/dist/js/components/lightbox.js +134 -133
  22. package/dist/js/components/lightbox.min.js +1 -1
  23. package/dist/js/components/marquee.js +179 -0
  24. package/dist/js/components/marquee.min.js +1 -0
  25. package/dist/js/components/notification.js +1 -1
  26. package/dist/js/components/notification.min.js +1 -1
  27. package/dist/js/components/parallax.js +8 -12
  28. package/dist/js/components/parallax.min.js +1 -1
  29. package/dist/js/components/slider-parallax.js +8 -12
  30. package/dist/js/components/slider-parallax.min.js +1 -1
  31. package/dist/js/components/slider.js +41 -25
  32. package/dist/js/components/slider.min.js +1 -1
  33. package/dist/js/components/slideshow-parallax.js +8 -12
  34. package/dist/js/components/slideshow-parallax.min.js +1 -1
  35. package/dist/js/components/slideshow.js +71 -102
  36. package/dist/js/components/slideshow.min.js +1 -1
  37. package/dist/js/components/sortable.js +1 -1
  38. package/dist/js/components/sortable.min.js +1 -1
  39. package/dist/js/components/tooltip.js +19 -19
  40. package/dist/js/components/tooltip.min.js +1 -1
  41. package/dist/js/components/upload.js +1 -1
  42. package/dist/js/components/upload.min.js +1 -1
  43. package/dist/js/uikit-core.js +754 -262
  44. package/dist/js/uikit-core.min.js +1 -1
  45. package/dist/js/uikit-icons.js +1 -1
  46. package/dist/js/uikit-icons.min.js +1 -1
  47. package/dist/js/uikit.js +629 -374
  48. package/dist/js/uikit.min.js +1 -1
  49. package/package.json +2 -2
  50. package/src/js/api/component.js +2 -3
  51. package/src/js/api/observables.js +2 -4
  52. package/src/js/api/options.js +6 -3
  53. package/src/js/api/props.js +1 -4
  54. package/src/js/api/state.js +7 -8
  55. package/src/js/components/index.js +1 -0
  56. package/src/js/components/internal/lightbox-animations.js +7 -26
  57. package/src/js/components/internal/slideshow-animations.js +15 -62
  58. package/src/js/components/lightbox-panel.js +121 -96
  59. package/src/js/components/lightbox.js +5 -8
  60. package/src/js/components/marquee.js +123 -0
  61. package/src/js/components/tooltip.js +4 -2
  62. package/src/js/core/accordion.js +78 -29
  63. package/src/js/core/drop.js +5 -4
  64. package/src/js/core/dropnav.js +3 -3
  65. package/src/js/core/grid.js +5 -19
  66. package/src/js/core/height-match.js +1 -2
  67. package/src/js/core/margin.js +3 -0
  68. package/src/js/core/overflow-fade.js +5 -5
  69. package/src/js/core/sticky.js +1 -1
  70. package/src/js/core/switcher.js +24 -44
  71. package/src/js/core/video.js +172 -15
  72. package/src/js/mixin/connect.js +57 -0
  73. package/src/js/mixin/internal/slideshow-animations.js +5 -13
  74. package/src/js/mixin/internal/slideshow-transitioner.js +2 -2
  75. package/src/js/mixin/modal.js +4 -3
  76. package/src/js/mixin/parallax.js +1 -4
  77. package/src/js/mixin/position.js +1 -1
  78. package/src/js/mixin/scroll-driven.js +57 -0
  79. package/src/js/mixin/slider-nav.js +1 -1
  80. package/src/js/mixin/slider-parallax.js +9 -38
  81. package/src/js/mixin/togglable.js +13 -14
  82. package/src/js/util/attr.js +7 -7
  83. package/src/js/util/class.js +1 -1
  84. package/src/js/util/dom.js +3 -4
  85. package/src/js/util/lang.js +1 -1
  86. package/src/js/util/player.js +4 -4
  87. package/src/js/util/style.js +10 -15
  88. package/src/js/util/viewport.js +22 -25
  89. package/src/less/components/_import.less +6 -1
  90. package/src/less/components/base.less +1 -1
  91. package/src/less/components/button.less +1 -1
  92. package/src/less/components/dropcap.less +71 -0
  93. package/src/less/components/floating-shadow.less +65 -0
  94. package/src/less/components/form.less +5 -5
  95. package/src/less/components/grid.less +57 -64
  96. package/src/less/components/logo.less +94 -0
  97. package/src/less/components/margin.less +81 -81
  98. package/src/less/components/marquee.less +133 -0
  99. package/src/less/components/nav.less +1 -1
  100. package/src/less/components/padding.less +9 -9
  101. package/src/less/components/utility.less +0 -157
  102. package/src/less/theme/_import.less +5 -1
  103. package/src/less/theme/dropcap.less +29 -0
  104. package/src/less/theme/floating-shadow.less +20 -0
  105. package/src/less/theme/logo.less +29 -0
  106. package/src/less/theme/marquee.less +14 -0
  107. package/src/less/theme/utility.less +0 -32
  108. package/src/scss/components/_import.scss +6 -1
  109. package/src/scss/components/base.scss +1 -1
  110. package/src/scss/components/button.scss +1 -1
  111. package/src/scss/components/dropcap.scss +63 -0
  112. package/src/scss/components/floating-shadow.scss +62 -0
  113. package/src/scss/components/form.scss +5 -5
  114. package/src/scss/components/grid.scss +57 -64
  115. package/src/scss/components/logo.scss +75 -0
  116. package/src/scss/components/margin.scss +81 -81
  117. package/src/scss/components/marquee.scss +136 -0
  118. package/src/scss/components/nav.scss +1 -1
  119. package/src/scss/components/padding.scss +9 -9
  120. package/src/scss/components/utility.scss +0 -128
  121. package/src/scss/mixins-theme.scss +41 -32
  122. package/src/scss/mixins.scss +38 -29
  123. package/src/scss/variables-theme.scss +14 -9
  124. package/src/scss/variables.scss +14 -9
  125. package/tests/accordion.html +77 -10
  126. package/tests/alert.html +1 -1
  127. package/tests/align.html +5 -5
  128. package/tests/animation.html +4 -4
  129. package/tests/article.html +7 -7
  130. package/tests/background.html +2 -2
  131. package/tests/badge.html +1 -1
  132. package/tests/base.html +2 -2
  133. package/tests/button.html +1 -1
  134. package/tests/card.html +15 -15
  135. package/tests/close.html +2 -2
  136. package/tests/comment.html +9 -9
  137. package/tests/container.html +2 -2
  138. package/tests/countdown.html +21 -21
  139. package/tests/cover.html +3 -3
  140. package/tests/description-list.html +1 -1
  141. package/tests/divider.html +3 -3
  142. package/tests/dotnav.html +1 -1
  143. package/tests/drop.html +7 -7
  144. package/tests/dropbar.html +5 -5
  145. package/tests/dropcap.html +26 -0
  146. package/tests/dropdown.html +1 -1
  147. package/tests/dropnav.html +18 -18
  148. package/tests/filter.html +3 -3
  149. package/tests/floating-shadow.html +44 -0
  150. package/tests/form.html +14 -14
  151. package/tests/grid.html +41 -47
  152. package/tests/heading.html +2 -2
  153. package/tests/height-viewport.html +4 -4
  154. package/tests/height.html +5 -5
  155. package/tests/icon.html +8 -8
  156. package/tests/image.html +6 -6
  157. package/tests/index.html +13 -13
  158. package/tests/js/index.js +1 -1
  159. package/tests/leader.html +5 -5
  160. package/tests/lightbox.html +6 -6
  161. package/tests/link.html +1 -1
  162. package/tests/list.html +4 -4
  163. package/tests/logo.html +84 -0
  164. package/tests/margin.html +7 -7
  165. package/tests/marker.html +3 -3
  166. package/tests/marquee.html +617 -0
  167. package/tests/modal.html +3 -3
  168. package/tests/nav.html +5 -5
  169. package/tests/navbar.html +27 -27
  170. package/tests/notification.html +2 -2
  171. package/tests/offcanvas.html +12 -12
  172. package/tests/overlay.html +3 -3
  173. package/tests/padding.html +1 -1
  174. package/tests/pagination.html +3 -3
  175. package/tests/parallax.html +1 -1
  176. package/tests/position.html +6 -6
  177. package/tests/scrollspy.html +12 -12
  178. package/tests/search.html +5 -5
  179. package/tests/section.html +17 -17
  180. package/tests/slidenav.html +3 -3
  181. package/tests/slider.html +5 -5
  182. package/tests/slideshow.html +3 -3
  183. package/tests/sortable.html +15 -15
  184. package/tests/sticky-navbar.html +4 -4
  185. package/tests/sticky-parallax.html +3 -3
  186. package/tests/sticky.html +3 -3
  187. package/tests/svg.html +3 -2
  188. package/tests/switcher.html +6 -6
  189. package/tests/tab.html +4 -4
  190. package/tests/text.html +3 -3
  191. package/tests/tile.html +4 -4
  192. package/tests/toggle.html +1 -1
  193. package/tests/tooltip.html +3 -3
  194. package/tests/totop.html +2 -2
  195. package/tests/transition.html +1 -1
  196. package/tests/upload.html +5 -5
  197. package/tests/utility.html +16 -116
  198. package/tests/video.html +224 -24
  199. package/tests/visibility.html +4 -4
  200. package/tests/width.html +12 -12
package/dist/js/uikit.js CHANGED
@@ -1,4 +1,4 @@
1
- /*! UIkit 3.25.17-dev.80dfe87 | https://www.getuikit.com | (c) 2014 - 2026 YOOtheme | MIT License */
1
+ /*! UIkit 3.25.17-dev.8c70e44 | 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() :
@@ -134,7 +134,7 @@
134
134
  return array.filter(({ [prop]: check }) => seen.has(check) ? false : seen.add(check));
135
135
  }
136
136
  function pick(obj, props) {
137
- return props.reduce((res, prop) => ({ ...res, [prop]: obj[prop] }), {});
137
+ return Object.fromEntries(props.map((key) => [key, obj[key]]));
138
138
  }
139
139
  function clamp(number, min = 0, max = 1) {
140
140
  return Math.min(Math.max(toNumber(number) || 0, min), max);
@@ -230,7 +230,7 @@
230
230
  }
231
231
  }
232
232
  function toClasses(str) {
233
- return str ? isArray(str) ? str.map(toClasses).flat() : String(str).split(" ").filter(Boolean) : [];
233
+ return str ? isArray(str) ? str.flatMap(toClasses) : String(str).split(" ").filter(Boolean) : [];
234
234
  }
235
235
 
236
236
  function attr(element, name, value) {
@@ -243,13 +243,12 @@
243
243
  }
244
244
  if (isUndefined(value)) {
245
245
  return (_a = toNode(element)) == null ? void 0 : _a.getAttribute(name);
246
- } else {
247
- for (const el of toNodes(element)) {
248
- if (value === null) {
249
- removeAttr(el, name);
250
- } else {
251
- el.setAttribute(name, value);
252
- }
246
+ }
247
+ for (const el of toNodes(element)) {
248
+ if (value === null) {
249
+ removeAttr(el, name);
250
+ } else {
251
+ el.setAttribute(name, value);
253
252
  }
254
253
  }
255
254
  }
@@ -591,19 +590,14 @@
591
590
  property = propName(property);
592
591
  if (isUndefined(value)) {
593
592
  return getComputedStyle(element2).getPropertyValue(property);
594
- } else {
595
- element2.style.setProperty(
596
- property,
597
- isNumeric(value) && !cssNumber[property] && !isCustomProperty(property) ? `${value}px` : value || isNumber(value) ? value : "",
598
- priority
599
- );
600
593
  }
594
+ element2.style.setProperty(
595
+ property,
596
+ isNumeric(value) && !cssNumber[property] && !isCustomProperty(property) ? `${value}px` : value || isNumber(value) ? value : "",
597
+ priority
598
+ );
601
599
  } else if (isArray(property)) {
602
- const props = {};
603
- for (const prop of property) {
604
- props[prop] = css(element2, prop);
605
- }
606
- return props;
600
+ return Object.fromEntries(property.map((prop) => [prop, css(element2, prop)]));
607
601
  } else if (isObject(property)) {
608
602
  for (const prop in property) {
609
603
  css(element2, prop, property[prop], value);
@@ -787,7 +781,9 @@
787
781
  );
788
782
  }
789
783
  function unwrap(element) {
790
- toNodes(element).map(parent).filter((value, index, self) => self.indexOf(value) === index).forEach((parent2) => parent2.replaceWith(...parent2.childNodes));
784
+ for (const elementParent of new Set(toNodes(element).map(parent))) {
785
+ elementParent.replaceWith(...elementParent.childNodes);
786
+ }
791
787
  }
792
788
  const singleTagRe = /^<(\w+)\s*\/?>(?:<\/\1>)?$/;
793
789
  function fragment(html2) {
@@ -1149,12 +1145,12 @@
1149
1145
  return isTag(el, "iframe") && (isYoutube(el) || isVimeo(el));
1150
1146
  }
1151
1147
  function isYoutube(el) {
1152
- return !!el.src.match(
1153
- /\/\/.*?youtube(-nocookie)?\.[a-z]+\/(watch\?v=[^&\s]+|embed)|youtu\.be\/.*/
1148
+ return /\/\/.*?youtube(-nocookie)?\.[a-z]+\/(watch\?v=[^&\s]+|embed)|youtu\.be\/.*/.test(
1149
+ el.src
1154
1150
  );
1155
1151
  }
1156
1152
  function isVimeo(el) {
1157
- return !!el.src.match(/vimeo\.com\/video\/.*/);
1153
+ return /vimeo\.com\/video\/.*/.test(el.src);
1158
1154
  }
1159
1155
  async function call(el, cmd) {
1160
1156
  await enableApi(el);
@@ -1163,7 +1159,7 @@
1163
1159
  function post(el, cmd) {
1164
1160
  el.contentWindow.postMessage(JSON.stringify({ event: "command", ...cmd }), "*");
1165
1161
  }
1166
- const stateKey = "_ukPlayer";
1162
+ const stateKey = /* @__PURE__ */ Symbol();
1167
1163
  let counter = 0;
1168
1164
  function enableApi(el) {
1169
1165
  if (el[stateKey]) {
@@ -1194,17 +1190,16 @@
1194
1190
  if (!isVisible(element)) {
1195
1191
  return false;
1196
1192
  }
1197
- return intersectRect(
1198
- ...overflowParents(element).map((parent2) => {
1199
- const { top, left, bottom, right } = offsetViewport(parent2);
1200
- return {
1201
- top: top - offsetTop,
1202
- left: left - offsetLeft,
1203
- bottom: bottom + offsetTop,
1204
- right: right + offsetLeft
1205
- };
1206
- }).concat(offset(element))
1207
- );
1193
+ const rects = overflowParents(element).map((parent2) => {
1194
+ const { top, left, bottom, right } = offsetViewport(parent2);
1195
+ return {
1196
+ top: top - offsetTop,
1197
+ left: left - offsetLeft,
1198
+ bottom: bottom + offsetTop,
1199
+ right: right + offsetLeft
1200
+ };
1201
+ });
1202
+ return intersectRect(...rects, offset(element));
1208
1203
  }
1209
1204
  function scrollIntoView(element, { offset: offsetBy = 0 } = {}) {
1210
1205
  const parents2 = isVisible(element) ? scrollParents(element, false, ["hidden"]) : [];
@@ -1288,11 +1283,12 @@
1288
1283
  if (~fixedIndex) {
1289
1284
  ancestors = ancestors.slice(fixedIndex);
1290
1285
  }
1291
- return [scrollEl].concat(
1292
- ancestors.filter(
1286
+ return [
1287
+ scrollEl,
1288
+ ...ancestors.filter(
1293
1289
  (parent2) => css(parent2, "overflow").split(" ").some((prop) => includes(["auto", "scroll", ...props], prop)) && (!scrollable || parent2.scrollHeight > offsetViewport(parent2).height)
1294
1290
  )
1295
- ).reverse();
1291
+ ].reverse();
1296
1292
  }
1297
1293
  function scrollParent(...args) {
1298
1294
  return scrollParents(...args)[0];
@@ -1874,11 +1870,14 @@
1874
1870
  function coerce$1(type, value) {
1875
1871
  if (type === Boolean) {
1876
1872
  return toBoolean(value);
1877
- } else if (type === Number) {
1873
+ }
1874
+ if (type === Number) {
1878
1875
  return toNumber(value);
1879
- } else if (type === "list") {
1876
+ }
1877
+ if (type === "list") {
1880
1878
  return toList(value);
1881
- } else if (type === Object && isString(value)) {
1879
+ }
1880
+ if (type === Object && isString(value)) {
1882
1881
  return parseOptions(value);
1883
1882
  }
1884
1883
  return type ? type(value) : value;
@@ -1958,8 +1957,8 @@
1958
1957
  for (const el of toNodes(isFunction(targets) ? targets(this) : targets)) {
1959
1958
  $$('[loading="lazy"]', el).slice(0, preload - 1).forEach((el2) => removeAttr(el2, "loading"));
1960
1959
  }
1961
- for (const el of entries.filter(({ isIntersecting }) => isIntersecting).map(({ target }) => target)) {
1962
- observer.unobserve(el);
1960
+ for (const { target } of entries.filter(({ isIntersecting }) => isIntersecting)) {
1961
+ observer.unobserve(target);
1963
1962
  }
1964
1963
  },
1965
1964
  ...options
@@ -2028,10 +2027,12 @@
2028
2027
  var Margin = {
2029
2028
  props: {
2030
2029
  margin: String,
2030
+ firstRow: Boolean,
2031
2031
  firstColumn: Boolean
2032
2032
  },
2033
2033
  data: {
2034
2034
  margin: "uk-margin-small-top",
2035
+ firstRow: false,
2035
2036
  firstColumn: "uk-first-column"
2036
2037
  },
2037
2038
  observe: [
@@ -2071,6 +2072,7 @@
2071
2072
  for (const row of rows) {
2072
2073
  for (const el of row) {
2073
2074
  toggleClass(el, this.margin, rows[0] !== row);
2075
+ toggleClass(el, this.firstRow, rows[0] === row);
2074
2076
  toggleClass(el, this.firstColumn, row[isRtl ? row.length - 1 : 0] === el);
2075
2077
  }
2076
2078
  }
@@ -2789,20 +2791,18 @@
2789
2791
  if (show) {
2790
2792
  _toggle(el, true);
2791
2793
  }
2792
- const prevProps = Object.fromEntries(
2793
- [
2794
- "padding",
2795
- "border",
2796
- "width",
2797
- "height",
2798
- "minWidth",
2799
- "minHeight",
2800
- "overflowY",
2801
- "overflowX",
2802
- marginProp,
2803
- marginStartProp
2804
- ].map((key) => [key, el.style[key]])
2805
- );
2794
+ const prevProps = pick(el.style, [
2795
+ "padding",
2796
+ "border",
2797
+ "width",
2798
+ "height",
2799
+ "minWidth",
2800
+ "minHeight",
2801
+ "overflowY",
2802
+ "overflowX",
2803
+ marginProp,
2804
+ marginStartProp
2805
+ ]);
2806
2806
  const dim = dimensions$1(el);
2807
2807
  const currentMargin = toFloat(css(el, marginProp));
2808
2808
  const marginStart = toFloat(css(el, marginStartProp));
@@ -3023,12 +3023,13 @@
3023
3023
  }
3024
3024
  }
3025
3025
  };
3026
+ const rejectKey = /* @__PURE__ */ Symbol();
3026
3027
  function animate$1(el, show, { transitionElement, _toggle }) {
3027
3028
  return new Promise(
3028
3029
  (resolve, reject) => once(el, "show hide", () => {
3029
3030
  var _a;
3030
- (_a = el._reject) == null ? void 0 : _a.call(el);
3031
- el._reject = reject;
3031
+ (_a = el[rejectKey]) == null ? void 0 : _a.call(el);
3032
+ el[rejectKey] = reject;
3032
3033
  _toggle(el, show);
3033
3034
  const off = once(
3034
3035
  transitionElement,
@@ -3049,7 +3050,7 @@
3049
3050
  toMs(css(transitionElement, "transitionDuration"))
3050
3051
  );
3051
3052
  })
3052
- ).then(() => delete el._reject);
3053
+ ).then(() => delete el[rejectKey]);
3053
3054
  }
3054
3055
  function toMs(time) {
3055
3056
  return time ? endsWith(time, "ms") ? toFloat(time) : toFloat(time) * 1e3 : 0;
@@ -3099,18 +3100,11 @@
3099
3100
 
3100
3101
  var Animations$2 = {
3101
3102
  slide: {
3102
- show(dir) {
3103
- return [{ transform: translate(dir * -100) }, { transform: translate() }];
3104
- },
3105
- percent(current) {
3106
- return translated(current);
3107
- },
3108
- translate(percent, dir) {
3109
- return [
3110
- { transform: translate(dir * -100 * percent) },
3111
- { transform: translate(dir * 100 * (1 - percent)) }
3112
- ];
3113
- }
3103
+ percent: translated,
3104
+ translate: (percent, dir) => [
3105
+ { transform: translate(dir * -100 * percent) },
3106
+ { transform: translate(dir * 100 * (1 - percent)) }
3107
+ ]
3114
3108
  }
3115
3109
  };
3116
3110
  function translated(el) {
@@ -3121,8 +3115,8 @@
3121
3115
  }
3122
3116
 
3123
3117
  function Transitioner$1(prev, next, dir, { animation, easing }) {
3124
- const { percent, translate, show = noop } = animation;
3125
- const props = show(dir);
3118
+ const { percent, translate } = animation;
3119
+ const props = translate(1, dir);
3126
3120
  const { promise, resolve } = withResolvers();
3127
3121
  return {
3128
3122
  dir,
@@ -3403,7 +3397,7 @@
3403
3397
  return Math.atan2(Math.abs(pos2.y - pos1.y), Math.abs(pos2.x - pos1.x)) * 180 / Math.PI;
3404
3398
  }
3405
3399
 
3406
- var VERSION = '3.25.17-dev.80dfe87';
3400
+ var VERSION = '3.25.17-dev.8c70e44';
3407
3401
 
3408
3402
  function initWatches(instance) {
3409
3403
  instance._watches = [];
@@ -3612,7 +3606,7 @@
3612
3606
  }
3613
3607
  const getAttributes = memoize((id, props) => {
3614
3608
  const attributes = Object.keys(props);
3615
- const filter = attributes.concat(id).map((key) => [hyphenate(key), `data-${hyphenate(key)}`]).flat();
3609
+ const filter = [...attributes, id].flatMap((key) => [hyphenate(key), `data-${hyphenate(key)}`]);
3616
3610
  return { attributes, filter };
3617
3611
  });
3618
3612
  function initPropsObserver(instance) {
@@ -3702,14 +3696,10 @@
3702
3696
  }
3703
3697
  function normalizeData({ data = {} }, { args = [], props = {} }) {
3704
3698
  if (isArray(data)) {
3705
- data = data.slice(0, args.length).reduce((data2, value, index) => {
3706
- if (isPlainObject(value)) {
3707
- assign(data2, value);
3708
- } else {
3709
- data2[args[index]] = value;
3710
- }
3711
- return data2;
3712
- }, {});
3699
+ data = data.slice(0, args.length).reduce(
3700
+ (data2, value, index) => assign(data2, isPlainObject(value) ? value : { [args[index]]: value }),
3701
+ {}
3702
+ );
3713
3703
  }
3714
3704
  for (const key in data) {
3715
3705
  if (isUndefined(data[key])) {
@@ -3757,11 +3747,10 @@
3757
3747
  function init(element2) {
3758
3748
  const instance = getComponent(element2, name);
3759
3749
  if (instance) {
3760
- if (data) {
3761
- instance.$destroy();
3762
- } else {
3750
+ if (!data) {
3763
3751
  return instance;
3764
3752
  }
3753
+ instance.$destroy();
3765
3754
  }
3766
3755
  return new Component({ el: element2, data });
3767
3756
  }
@@ -3901,7 +3890,7 @@
3901
3890
  computed: {
3902
3891
  nav: ({ selNav }, $el) => $$(selNav, $el),
3903
3892
  navChildren() {
3904
- return this.nav.map((nav) => children(nav)).flat();
3893
+ return this.nav.flatMap((nav) => children(nav));
3905
3894
  },
3906
3895
  selNavItem: ({ attrItem }) => `[${attrItem}],[data-${attrItem}]`,
3907
3896
  navItems(_, $el) {
@@ -4258,75 +4247,35 @@
4258
4247
  var Animations$1 = {
4259
4248
  ...Animations$2,
4260
4249
  fade: {
4261
- show() {
4262
- return [{ opacity: 0, zIndex: 0 }, { zIndex: -1 }];
4263
- },
4264
- percent(current) {
4265
- return 1 - css(current, "opacity");
4266
- },
4267
- translate(percent) {
4268
- return [{ opacity: 1 - percent, zIndex: 0 }, { zIndex: -1 }];
4269
- }
4250
+ percent: (current) => 1 - css(current, "opacity"),
4251
+ translate: (percent) => [{ opacity: 1 - percent, zIndex: 0 }, { zIndex: -1 }]
4270
4252
  },
4271
4253
  scale: {
4272
- show() {
4273
- return [{ opacity: 0, transform: scale3d(1 + 0.5), zIndex: 0 }, { zIndex: -1 }];
4274
- },
4275
- percent(current) {
4276
- return 1 - css(current, "opacity");
4277
- },
4278
- translate(percent) {
4279
- return [
4280
- { opacity: 1 - percent, transform: scale3d(1 + 0.5 * percent), zIndex: 0 },
4281
- { zIndex: -1 }
4282
- ];
4283
- }
4254
+ percent: (current) => 1 - css(current, "opacity"),
4255
+ translate: (percent) => [
4256
+ { opacity: 1 - percent, transform: scale3d(1 + 0.5 * percent), zIndex: 0 },
4257
+ { zIndex: -1 }
4258
+ ]
4284
4259
  },
4285
4260
  pull: {
4286
- show(dir) {
4287
- return dir < 0 ? [
4288
- { transform: translate(30), zIndex: -1 },
4289
- { transform: translate(), zIndex: 0 }
4290
- ] : [
4291
- { transform: translate(-100), zIndex: 0 },
4292
- { transform: translate(), zIndex: -1 }
4293
- ];
4294
- },
4295
- percent(current, next, dir) {
4296
- return dir < 0 ? 1 - translated(next) : translated(current);
4297
- },
4298
- translate(percent, dir) {
4299
- return dir < 0 ? [
4300
- { transform: translate(30 * percent), zIndex: -1 },
4301
- { transform: translate(-100 * (1 - percent)), zIndex: 0 }
4302
- ] : [
4303
- { transform: translate(-percent * 100), zIndex: 0 },
4304
- { transform: translate(30 * (1 - percent)), zIndex: -1 }
4305
- ];
4306
- }
4261
+ percent: (current, next, dir) => dir < 0 ? 1 - translated(next) : translated(current),
4262
+ translate: (percent, dir) => dir < 0 ? [
4263
+ { transform: translate(30 * percent), zIndex: -1 },
4264
+ { transform: translate(-100 * (1 - percent)), zIndex: 0 }
4265
+ ] : [
4266
+ { transform: translate(-percent * 100), zIndex: 0 },
4267
+ { transform: translate(30 * (1 - percent)), zIndex: -1 }
4268
+ ]
4307
4269
  },
4308
4270
  push: {
4309
- show(dir) {
4310
- return dir < 0 ? [
4311
- { transform: translate(100), zIndex: 0 },
4312
- { transform: translate(), zIndex: -1 }
4313
- ] : [
4314
- { transform: translate(-30), zIndex: -1 },
4315
- { transform: translate(), zIndex: 0 }
4316
- ];
4317
- },
4318
- percent(current, next, dir) {
4319
- return dir > 0 ? 1 - translated(next) : translated(current);
4320
- },
4321
- translate(percent, dir) {
4322
- return dir < 0 ? [
4323
- { transform: translate(percent * 100), zIndex: 0 },
4324
- { transform: translate(-30 * (1 - percent)), zIndex: -1 }
4325
- ] : [
4326
- { transform: translate(-30 * percent), zIndex: -1 },
4327
- { transform: translate(100 * (1 - percent)), zIndex: 0 }
4328
- ];
4329
- }
4271
+ percent: (current, next, dir) => dir > 0 ? 1 - translated(next) : translated(current),
4272
+ translate: (percent, dir) => dir < 0 ? [
4273
+ { transform: translate(percent * 100), zIndex: 0 },
4274
+ { transform: translate(-30 * (1 - percent)), zIndex: -1 }
4275
+ ] : [
4276
+ { transform: translate(-30 * percent), zIndex: -1 },
4277
+ { transform: translate(100 * (1 - percent)), zIndex: 0 }
4278
+ ]
4330
4279
  }
4331
4280
  };
4332
4281
  function scale3d(value) {
@@ -4336,32 +4285,15 @@
4336
4285
  var Animations = {
4337
4286
  ...Animations$2,
4338
4287
  fade: {
4339
- show() {
4340
- return [{ opacity: 0 }, { opacity: 1 }];
4341
- },
4342
- percent(current) {
4343
- return 1 - css(current, "opacity");
4344
- },
4345
- translate(percent) {
4346
- return [{ opacity: 1 - percent }, { opacity: percent }];
4347
- }
4288
+ percent: (current) => 1 - css(current, "opacity"),
4289
+ translate: (percent) => [{ opacity: 1 - percent }, { opacity: percent }]
4348
4290
  },
4349
4291
  scale: {
4350
- show() {
4351
- return [
4352
- { opacity: 0, transform: scale3d(1 - 0.2) },
4353
- { opacity: 1, transform: scale3d(1) }
4354
- ];
4355
- },
4356
- percent(current) {
4357
- return 1 - css(current, "opacity");
4358
- },
4359
- translate(percent) {
4360
- return [
4361
- { opacity: 1 - percent, transform: scale3d(1 - 0.2 * percent) },
4362
- { opacity: percent, transform: scale3d(1 - 0.2 + 0.2 * percent) }
4363
- ];
4364
- }
4292
+ percent: (current) => 1 - css(current, "opacity"),
4293
+ translate: (percent) => [
4294
+ { opacity: 1 - percent, transform: scale3d(1 - 0.2 * percent) },
4295
+ { opacity: percent, transform: scale3d(1 - 0.2 + 0.2 * percent) }
4296
+ ]
4365
4297
  }
4366
4298
  };
4367
4299
 
@@ -4544,81 +4476,22 @@
4544
4476
  if (!src) {
4545
4477
  return;
4546
4478
  }
4547
- let matches2;
4548
- const iframeAttrs = {
4549
- allowfullscreen: "",
4550
- style: "max-width: 100%; box-sizing: border-box;",
4551
- "uk-responsive": "",
4552
- "uk-video": Boolean(this.videoAutoplay)
4553
- };
4554
- if (type === "image" || isImage(src)) {
4555
- const img = createEl("img");
4556
- wrapInPicture(img, item.sources);
4557
- attr(img, {
4558
- src,
4559
- ...pick(item, ["alt", "srcset", "sizes"]),
4560
- ...attrs
4561
- });
4562
- on(img, "load", () => this.setItem(item, parent(img) || img));
4563
- on(img, "error", () => this.setError(item));
4564
- } else if (type === "video" || isVideo(src)) {
4565
- const inline = this.videoAutoplay === "inline";
4566
- const video = createEl("video", {
4567
- src,
4568
- playsinline: "",
4569
- controls: inline ? null : "",
4570
- loop: inline ? "" : null,
4571
- muted: inline ? "" : null,
4572
- poster: this.videoAutoplay ? null : item.poster,
4573
- "uk-video": Boolean(this.videoAutoplay),
4574
- ...attrs
4575
- });
4576
- on(video, "loadedmetadata", () => this.setItem(item, video));
4577
- on(video, "error", () => this.setError(item));
4578
- } else if (type === "iframe" || src.match(/\.(html|php)($|\?)/i)) {
4579
- this.setItem(
4580
- item,
4581
- createEl("iframe", {
4582
- src,
4583
- allowfullscreen: "",
4584
- class: "uk-lightbox-iframe",
4585
- ...attrs
4586
- })
4587
- );
4588
- } else if (matches2 = src.match(
4589
- /\/\/(?:.*?youtube(-nocookie)?\..*?(?:[?&]v=|\/shorts\/)|youtu\.be\/)([\w-]{11})[&?]?(.*)?/
4590
- )) {
4591
- this.setItem(
4592
- item,
4593
- createEl("iframe", {
4594
- src: `https://www.youtube${matches2[1] || ""}.com/embed/${matches2[2]}${matches2[3] ? `?${matches2[3]}` : ""}`,
4595
- width: 1920,
4596
- height: 1080,
4597
- ...iframeAttrs,
4598
- ...attrs
4599
- })
4600
- );
4601
- } else if (matches2 = src.match(/\/\/.*?vimeo\.[a-z]+\/(\d+)[&?]?(.*)?/)) {
4602
- try {
4603
- const { height, width } = await (await fetch(
4604
- `https://vimeo.com/api/oembed.json?maxwidth=1920&url=${encodeURI(
4605
- src
4606
- )}`,
4607
- { credentials: "omit" }
4608
- )).json();
4609
- this.setItem(
4610
- item,
4611
- createEl("iframe", {
4612
- src: `https://player.vimeo.com/video/${matches2[1]}${matches2[2] ? `?${matches2[2]}` : ""}`,
4613
- width,
4614
- height,
4615
- ...iframeAttrs,
4616
- ...attrs
4617
- })
4618
- );
4619
- } catch {
4620
- this.setError(item);
4479
+ try {
4480
+ for (const loader of [
4481
+ loadImage,
4482
+ loadVideo,
4483
+ loadIframe,
4484
+ loadYouTube,
4485
+ loadVimeo
4486
+ ]) {
4487
+ const content = await loader({ src, type, attrs, item, cmp: this });
4488
+ if (content) {
4489
+ this.setItem(item, content);
4490
+ return;
4491
+ }
4621
4492
  }
4493
+ } catch {
4494
+ this.setError(item);
4622
4495
  }
4623
4496
  }
4624
4497
  },
@@ -4678,6 +4551,91 @@
4678
4551
  attr(el, attrs);
4679
4552
  return el;
4680
4553
  }
4554
+ async function loadImage({ src, type, attrs, item }) {
4555
+ if (type !== "image" && !isImage(src)) {
4556
+ return;
4557
+ }
4558
+ const img = createEl("img");
4559
+ wrapInPicture(img, item.sources);
4560
+ attr(img, {
4561
+ src,
4562
+ ...pick(item, ["alt", "srcset", "sizes"]),
4563
+ ...attrs
4564
+ });
4565
+ await img.decode();
4566
+ return parent(img) || img;
4567
+ }
4568
+ function loadVideo({ src, type, attrs, item, cmp }) {
4569
+ if (type !== "video" && !isVideo(src)) {
4570
+ return;
4571
+ }
4572
+ const inline = cmp.videoAutoplay === "inline";
4573
+ const video = createEl("video", {
4574
+ src,
4575
+ playsinline: "",
4576
+ controls: inline ? null : "",
4577
+ loop: inline ? "" : null,
4578
+ muted: inline ? "" : null,
4579
+ poster: cmp.videoAutoplay ? null : item.poster,
4580
+ "uk-video": Boolean(cmp.videoAutoplay),
4581
+ ...attrs
4582
+ });
4583
+ return new Promise((resolve, reject) => {
4584
+ on(video, "loadedmetadata", () => resolve(video));
4585
+ on(video, "error", reject);
4586
+ });
4587
+ }
4588
+ function loadIframe({ src, type, attrs }) {
4589
+ if (type !== "iframe" && !/\.(html|php)($|\?)/i.test(src)) {
4590
+ return;
4591
+ }
4592
+ return createEl("iframe", {
4593
+ src,
4594
+ allowfullscreen: "",
4595
+ class: "uk-lightbox-iframe",
4596
+ ...attrs
4597
+ });
4598
+ }
4599
+ function loadYouTube({ src, attrs, cmp }) {
4600
+ const matches2 = src.match(
4601
+ /\/\/(?:.*?youtube(-nocookie)?\..*?(?:[?&]v=|\/shorts\/)|youtu\.be\/)([\w-]{11})[&?]?(.*)?/
4602
+ );
4603
+ if (!matches2) {
4604
+ return;
4605
+ }
4606
+ return createEl("iframe", {
4607
+ src: `https://www.youtube${matches2[1] || ""}.com/embed/${matches2[2]}${matches2[3] ? `?${matches2[3]}` : ""}`,
4608
+ width: 1920,
4609
+ height: 1080,
4610
+ ...getIframeAttrs(cmp),
4611
+ ...attrs
4612
+ });
4613
+ }
4614
+ async function loadVimeo({ src, attrs, cmp }) {
4615
+ const matches2 = src.match(/\/\/.*?vimeo\.[a-z]+\/(\d+)[&?]?(.*)?/);
4616
+ if (!matches2) {
4617
+ return;
4618
+ }
4619
+ const { height, width } = await (await fetch(
4620
+ `https://vimeo.com/api/oembed.json?maxwidth=1920&url=${encodeURIComponent(src)}`,
4621
+ { credentials: "omit" }
4622
+ )).json();
4623
+ return createEl("iframe", {
4624
+ src: `https://player.vimeo.com/video/${matches2[1]}${matches2[2] ? `?${matches2[2]}` : ""}`,
4625
+ width,
4626
+ height,
4627
+ ...getIframeAttrs(cmp),
4628
+ ...attrs
4629
+ });
4630
+ }
4631
+ function getIframeAttrs(cmp) {
4632
+ return {
4633
+ allowfullscreen: "",
4634
+ style: "max-width: 100%; box-sizing: border-box;",
4635
+ "uk-responsive": "",
4636
+ "uk-video": Boolean(cmp.videoAutoplay)
4637
+ };
4638
+ }
4681
4639
  function toThumbnavItem(item, videoAutoplay) {
4682
4640
  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", {
4683
4641
  src: item.thumb,
@@ -4763,7 +4721,7 @@
4763
4721
  if (items[i].thumb) {
4764
4722
  continue;
4765
4723
  }
4766
- const parent = parents(toggle).reverse().concat(toggle).find(
4724
+ const parent = [...parents(toggle).reverse(), toggle].find(
4767
4725
  (parent2) => this.$el.contains(parent2) && (parent2 === toggle || $$(this.toggle, parent2).length === 1)
4768
4726
  );
4769
4727
  if (!parent) {
@@ -4786,6 +4744,94 @@
4786
4744
  return item;
4787
4745
  }
4788
4746
 
4747
+ const hasAnimationApi = inBrowser && window.Animation;
4748
+ var marquee = {
4749
+ mixins: [Class],
4750
+ props: {
4751
+ velocity: Number,
4752
+ start: Number,
4753
+ reverse: Boolean,
4754
+ pause: Boolean,
4755
+ pauseVelocity: Number,
4756
+ fadeSize: null
4757
+ },
4758
+ data: {
4759
+ velocity: 25,
4760
+ start: 0,
4761
+ reverse: false,
4762
+ pause: false,
4763
+ pauseVelocity: 10,
4764
+ selList: ".uk-marquee-items",
4765
+ fadeSize: 0
4766
+ },
4767
+ computed: {
4768
+ list: ({ selList }, $el) => $(selList, $el),
4769
+ items() {
4770
+ return children(this.list);
4771
+ }
4772
+ },
4773
+ observe: [
4774
+ resize({
4775
+ target: ({ $el, items }) => [$el, ...items]
4776
+ }),
4777
+ intersection({
4778
+ handler(entries) {
4779
+ for (const entry of entries) {
4780
+ entry.target.inert = !entry.isIntersecting;
4781
+ }
4782
+ },
4783
+ target: ({ items }) => items,
4784
+ args: { intersecting: false },
4785
+ options: ({ $el }) => ({ root: $el })
4786
+ })
4787
+ ],
4788
+ events: {
4789
+ name: [pointerEnter, pointerLeave],
4790
+ el: ({ $el }) => $el,
4791
+ self: true,
4792
+ filter: ({ pause }) => hasAnimationApi && pause,
4793
+ handler(e) {
4794
+ for (const el of this.items) {
4795
+ for (const animation of el.getAnimations()) {
4796
+ animation.playbackRate = e.type === pointerEnter ? this.pauseVelocity / this.velocity : 1;
4797
+ }
4798
+ }
4799
+ }
4800
+ },
4801
+ update: {
4802
+ write() {
4803
+ const prefix = this.$options.id;
4804
+ const items = this.items;
4805
+ const vertical = hasClass(this.$el, `${prefix}-vertical`);
4806
+ css(items, "offset", "none");
4807
+ const dir = vertical ? ["top", "bottom"] : ["left", "right"];
4808
+ if (!vertical && isRtl) {
4809
+ dir.reverse();
4810
+ }
4811
+ const listStart = dimensions$1(this.list)[dir[0]];
4812
+ const listEnd = Math[!vertical && isRtl ? "min" : "max"](
4813
+ ...items.map((el) => dimensions$1(el)[dir[1]])
4814
+ );
4815
+ for (const el of items) {
4816
+ const elEnd = dimensions$1(el)[dir[1]];
4817
+ const line1 = listEnd - elEnd;
4818
+ const line2 = elEnd - listStart;
4819
+ const path = vertical ? `"M0 0 v${line1}M0 ${-line2} v${line2}"` : `"M0 0 h${line1}M${-line2} 0 h${line2}"`;
4820
+ css(el, `--${prefix}-path`, path);
4821
+ }
4822
+ css(this.$el, {
4823
+ [`--${prefix}-duration`]: `${Math.abs(listStart - listEnd) / this.velocity}s`,
4824
+ [`--${prefix}-start`]: this.start,
4825
+ [`--${prefix}-direction`]: this.reverse ? "reverse" : "normal",
4826
+ "--uk-overflow-fade-size": this.fadeSize ? `${toPx(this.fadeSize, vertical ? "height" : "width", this.$el, true)}px` : ""
4827
+ });
4828
+ toggleClass(this.$el, `${prefix}-fade`, this.fadeSize);
4829
+ css(items, "offset", "");
4830
+ },
4831
+ events: ["resize"]
4832
+ }
4833
+ };
4834
+
4789
4835
  var notification = {
4790
4836
  mixins: [Container],
4791
4837
  functional: true,
@@ -5218,10 +5264,7 @@
5218
5264
  return val;
5219
5265
  }
5220
5266
  function fillObject(keys2, value) {
5221
- return keys2.reduce((data, prop) => {
5222
- data[prop] = value;
5223
- return data;
5224
- }, {});
5267
+ return Object.fromEntries(keys2.map((prop) => [prop, value]));
5225
5268
  }
5226
5269
  function ease(percent, easing) {
5227
5270
  return easing >= 0 ? Math.pow(percent, easing + 1) : 1 - Math.pow(1 - percent, 1 - easing);
@@ -5295,16 +5338,14 @@
5295
5338
  return el ? "offsetTop" in el ? el : getOffsetElement(parent(el)) : document.documentElement;
5296
5339
  }
5297
5340
 
5298
- var SliderParallax = {
5341
+ var ScrollDriven = {
5299
5342
  props: {
5300
- parallax: Boolean,
5301
5343
  parallaxTarget: Boolean,
5302
5344
  parallaxStart: String,
5303
5345
  parallaxEnd: String,
5304
5346
  parallaxEasing: Number
5305
5347
  },
5306
5348
  data: {
5307
- parallax: false,
5308
5349
  parallaxTarget: false,
5309
5350
  parallaxStart: 0,
5310
5351
  parallaxEnd: 0,
@@ -5318,26 +5359,48 @@
5318
5359
  scroll$1({ filter: ({ parallax }) => parallax })
5319
5360
  ],
5320
5361
  computed: {
5362
+ parallaxTargetFallback: ($props, $el) => $el,
5321
5363
  parallaxTarget({ parallaxTarget }, $el) {
5322
- return parallaxTarget && query(parallaxTarget, $el) || this.list;
5364
+ return parallaxTarget && query(parallaxTarget, $el) || this.parallaxTargetFallback;
5323
5365
  }
5324
5366
  },
5325
5367
  update: {
5326
5368
  read() {
5327
5369
  if (!this.parallax) {
5328
- return false;
5370
+ return;
5329
5371
  }
5330
5372
  const target = this.parallaxTarget;
5331
5373
  if (!target) {
5332
- return false;
5374
+ return;
5333
5375
  }
5334
5376
  const start = toPx(this.parallaxStart, "height", target, true);
5335
5377
  const end = toPx(this.parallaxEnd, "height", target, true);
5336
5378
  const percent = ease(scrolledOver(target, start, end), this.parallaxEasing);
5337
- return { parallax: this.getIndexAt(percent) };
5379
+ return { percent };
5338
5380
  },
5339
- write({ parallax }) {
5340
- const [prevIndex, slidePercent] = parallax;
5381
+ events: ["scroll", "resize"]
5382
+ }
5383
+ };
5384
+
5385
+ var SliderParallax = {
5386
+ mixins: [ScrollDriven],
5387
+ props: {
5388
+ parallax: Boolean
5389
+ },
5390
+ data: {
5391
+ parallax: false
5392
+ },
5393
+ computed: {
5394
+ parallaxTargetFallback() {
5395
+ return this.list;
5396
+ }
5397
+ },
5398
+ update: {
5399
+ write({ percent }) {
5400
+ if (!this.parallax) {
5401
+ return;
5402
+ }
5403
+ const [prevIndex, slidePercent] = this.getIndexAt(percent);
5341
5404
  const nextIndex = this.getValidIndex(prevIndex + Math.ceil(slidePercent));
5342
5405
  const prev = this.slides[prevIndex];
5343
5406
  const next = this.slides[nextIndex];
@@ -6247,7 +6310,7 @@
6247
6310
  inset: false
6248
6311
  },
6249
6312
  connected() {
6250
- this.pos = this.$props.pos.split("-").concat("center").slice(0, 2);
6313
+ this.pos = [...this.$props.pos.split("-"), "center"].slice(0, 2);
6251
6314
  [this.dir, this.align] = this.pos;
6252
6315
  this.axis = includes(["top", "bottom"], this.dir) ? "y" : "x";
6253
6316
  },
@@ -6426,10 +6489,12 @@
6426
6489
  }
6427
6490
  function parseProps(options) {
6428
6491
  const { el, id, data: data$1 } = options;
6429
- return ["delay", "title"].reduce((obj, key) => ({ [key]: data(el, key), ...obj }), {
6492
+ return {
6493
+ delay: data(el, "delay"),
6494
+ title: data(el, "title"),
6430
6495
  ...parseOptions(data(el, id), ["title"]),
6431
6496
  ...data$1
6432
- });
6497
+ };
6433
6498
  }
6434
6499
 
6435
6500
  var upload = {
@@ -6648,6 +6713,7 @@
6648
6713
  Filter: filter,
6649
6714
  Lightbox: lightbox,
6650
6715
  LightboxPanel: LightboxPanel,
6716
+ Marquee: marquee,
6651
6717
  Notification: notification,
6652
6718
  Parallax: parallax,
6653
6719
  Slider: slider,
@@ -6731,28 +6797,78 @@
6731
6797
  globalApi(App);
6732
6798
  instanceApi(App);
6733
6799
 
6800
+ var Connect = {
6801
+ mixins: [Togglable],
6802
+ props: {
6803
+ connect: String
6804
+ },
6805
+ data: {
6806
+ connect: "",
6807
+ cls: "uk-active"
6808
+ },
6809
+ computed: {
6810
+ connects: {
6811
+ get: ({ connect }, $el) => connect ? queryAll(connect, $el) : [],
6812
+ observe: ({ connect }) => connect
6813
+ },
6814
+ connectChildren() {
6815
+ return this.connects.flatMap((el) => children(el));
6816
+ }
6817
+ },
6818
+ watch: {
6819
+ connects(connects) {
6820
+ for (const el of connects) {
6821
+ if (isTag(el, "ul")) {
6822
+ el.role = "presentation";
6823
+ }
6824
+ }
6825
+ }
6826
+ },
6827
+ observe: lazyload({ targets: ({ connectChildren }) => connectChildren }),
6828
+ methods: {
6829
+ showConnects(index, animate) {
6830
+ const toggle = async ({ children: children2 }) => {
6831
+ const actives = toArray(children2).filter(
6832
+ (child, i) => i !== index && hasClass(child, this.cls)
6833
+ );
6834
+ if (await this.toggleElement(actives, false, animate)) {
6835
+ if (!hasClass(children2[index], this.cls)) {
6836
+ await this.toggleElement(children2[index], true, animate);
6837
+ }
6838
+ }
6839
+ };
6840
+ return Promise.all(this.connects.map(toggle));
6841
+ }
6842
+ }
6843
+ };
6844
+
6734
6845
  var Accordion = {
6735
- mixins: [Class, Togglable],
6846
+ mixins: [Class, Connect],
6736
6847
  props: {
6737
- animation: Boolean,
6738
6848
  targets: String,
6739
6849
  active: null,
6740
6850
  collapsible: Boolean,
6741
6851
  multiple: Boolean,
6742
6852
  toggle: String,
6743
6853
  content: String,
6744
- offset: Number
6854
+ offset: Number,
6855
+ switcherConnect: String
6745
6856
  },
6746
6857
  data: {
6747
6858
  targets: "> *",
6748
6859
  active: false,
6749
- animation: true,
6860
+ animation: [true],
6750
6861
  collapsible: true,
6751
6862
  multiple: false,
6752
6863
  clsOpen: "uk-open",
6864
+ cls: "uk-active",
6753
6865
  toggle: ".uk-accordion-title",
6754
6866
  content: ".uk-accordion-content",
6755
- offset: 0
6867
+ offset: 0,
6868
+ switcherConnect: ""
6869
+ },
6870
+ beforeConnect() {
6871
+ this.connect = this.$props.connect = this.switcherConnect;
6756
6872
  },
6757
6873
  computed: {
6758
6874
  items: ({ targets }, $el) => $$(targets, $el),
@@ -6776,6 +6892,12 @@
6776
6892
  this.toggle(active, false);
6777
6893
  }
6778
6894
  },
6895
+ connectChildren() {
6896
+ this.showConnects(
6897
+ findIndex(this.items, (el) => hasClass(el, this.clsOpen)),
6898
+ false
6899
+ );
6900
+ },
6779
6901
  toggles() {
6780
6902
  this.$emit();
6781
6903
  },
@@ -6826,43 +6948,66 @@
6826
6948
  continue;
6827
6949
  }
6828
6950
  toggle.id = generateId(this, toggle);
6829
- content.id = generateId(this, content);
6830
6951
  const active = includes(activeItems, this.items[index2]);
6952
+ attr(content, {
6953
+ id: generateId(this, content),
6954
+ role: "region",
6955
+ "aria-labelledby": toggle.id
6956
+ });
6957
+ if (isTag(content, "ul")) {
6958
+ attr(children(content), "role", "presentation");
6959
+ }
6960
+ const controls = [content.id];
6961
+ for (const { children: children2 } of this.connects) {
6962
+ const item = children2[index2];
6963
+ if (!item) {
6964
+ continue;
6965
+ }
6966
+ attr(item, {
6967
+ id: generateId(this, item),
6968
+ role: "tabpanel",
6969
+ "aria-labelledby": toggle.id
6970
+ });
6971
+ controls.push(item.id);
6972
+ }
6831
6973
  attr(toggle, {
6832
6974
  role: isTag(toggle, "a") ? "button" : null,
6833
- "aria-controls": content.id,
6975
+ "aria-controls": controls.join(" "),
6834
6976
  "aria-expanded": active,
6835
6977
  "aria-disabled": !this.collapsible && activeItems.length < 2 && active
6836
6978
  });
6837
- attr(content, { role: "region", "aria-labelledby": toggle.id });
6838
- if (isTag(content, "ul")) {
6839
- attr(children(content), "role", "presentation");
6840
- }
6841
6979
  }
6842
6980
  },
6843
6981
  methods: {
6844
- toggle(item, animate) {
6845
- item = this.items[getIndex(item, this.items)];
6982
+ async toggle(item, animate) {
6983
+ animate = animate !== false;
6984
+ const next = getIndex(item, this.items);
6985
+ item = this.items[next];
6846
6986
  let items = [item];
6847
6987
  const activeItems = filter$1(this.items, `.${this.clsOpen}`);
6848
- if (!this.multiple && !includes(activeItems, items[0])) {
6849
- items = items.concat(activeItems);
6850
- }
6851
- if (!this.collapsible && activeItems.length < 2 && includes(activeItems, item)) {
6852
- items = [];
6853
- }
6854
- return Promise.all(
6855
- items.map(
6856
- (el) => this.toggleElement(el, !includes(activeItems, el), (el2, show) => {
6857
- toggleClass(el2, this.clsOpen, show);
6858
- if (animate === false || !this.animation) {
6859
- hide($(this.content, el2), !show);
6860
- return;
6861
- }
6862
- return transition(el2, show, this);
6863
- })
6864
- )
6865
- );
6988
+ const isActive = includes(activeItems, item);
6989
+ if (isActive && !this.collapsible && activeItems.length < 2) {
6990
+ return;
6991
+ }
6992
+ if (!isActive && !this.multiple) {
6993
+ items.push(...activeItems);
6994
+ }
6995
+ const toggle = (el) => this.toggleElement(el, !includes(activeItems, el), (el2, show) => {
6996
+ toggleClass(el2, this.clsOpen, show);
6997
+ if (!animate || !this.hasAnimation) {
6998
+ hide($(this.content, el2), !show);
6999
+ return;
7000
+ }
7001
+ return transition(el2, show, this);
7002
+ });
7003
+ const hideIndex = () => {
7004
+ const index2 = findIndex(children(this.connects[0]), (el) => hasClass(el, this.cls));
7005
+ return index2 === next ? findIndex(this.items, (i) => i !== item && includes(activeItems, i)) : index2;
7006
+ };
7007
+ return Promise.all([
7008
+ ...items.map(toggle),
7009
+ this.showConnects(isActive ? hideIndex() : next, animate)
7010
+ ]);
6866
7011
  }
6867
7012
  }
6868
7013
  };
@@ -6953,22 +7098,40 @@
6953
7098
  );
6954
7099
  }
6955
7100
 
7101
+ const loopKey = /* @__PURE__ */ Symbol();
6956
7102
  var Video = {
7103
+ mixins: [ScrollDriven],
6957
7104
  args: "autoplay",
6958
7105
  props: {
6959
7106
  automute: Boolean,
6960
7107
  autoplay: Boolean,
6961
7108
  restart: Boolean,
6962
- hoverTarget: Boolean
7109
+ inviewMargin: String,
7110
+ inviewQueued: Number,
7111
+ hoverTarget: Boolean,
7112
+ hoverRewind: Number,
7113
+ reducedMotionTime: Number
6963
7114
  },
6964
7115
  data: {
6965
7116
  automute: false,
6966
7117
  autoplay: true,
6967
7118
  restart: false,
6968
- hoverTarget: false
7119
+ inviewMargin: "0px",
7120
+ inviewQueued: 0,
7121
+ hoverTarget: false,
7122
+ hoverRewind: 0,
7123
+ reducedMotionTime: 0
6969
7124
  },
6970
7125
  beforeConnect() {
6971
7126
  const isVideo = isTag(this.$el, "video");
7127
+ this.restart = isVideo && this.restart;
7128
+ this.parallax = isVideo && this.autoplay === "parallax";
7129
+ this.manualControl = ["hover", "parallax"].includes(this.autoplay);
7130
+ this.inviewQueued = this.autoplay === "inview" && this.inviewQueued;
7131
+ if (this.inviewQueued) {
7132
+ this.$el[loopKey] = this.$el.loop;
7133
+ this.$el.loop = false;
7134
+ }
6972
7135
  if (this.autoplay === "inview" && isVideo && !hasAttr(this.$el, "preload")) {
6973
7136
  this.$el.preload = "none";
6974
7137
  }
@@ -6977,7 +7140,10 @@
6977
7140
  }
6978
7141
  if (this.autoplay === "hover") {
6979
7142
  if (isVideo) {
6980
- this.$el.tabIndex = 0;
7143
+ this.hoverTarget = query(this.hoverTarget, this.$el) || this.$el;
7144
+ if (!isFocusable(this.hoverTarget)) {
7145
+ this.hoverTarget.tabIndex = 0;
7146
+ }
6981
7147
  } else {
6982
7148
  this.autoplay = true;
6983
7149
  }
@@ -6986,27 +7152,48 @@
6986
7152
  mute(this.$el);
6987
7153
  }
6988
7154
  },
7155
+ disconnected() {
7156
+ if (this.$el[loopKey]) {
7157
+ this.$el.loop = true;
7158
+ }
7159
+ queue.delete(this.$el);
7160
+ },
6989
7161
  events: [
6990
7162
  {
6991
7163
  name: `${pointerEnter} focusin`,
6992
- el: ({ hoverTarget, $el }) => query(hoverTarget, $el) || $el,
7164
+ el: ({ hoverTarget }) => hoverTarget,
6993
7165
  filter: ({ autoplay }) => autoplay === "hover",
6994
7166
  handler(e) {
7167
+ var _a;
7168
+ (_a = this._reverseAbort) == null ? void 0 : _a.abort();
6995
7169
  if (!isTouch(e) || !isPlaying(this.$el)) {
6996
- play(this.$el);
7170
+ this.play();
6997
7171
  } else {
6998
- pauseHover(this.$el, this.restart);
7172
+ this.pause();
6999
7173
  }
7000
7174
  }
7001
7175
  },
7002
7176
  {
7003
7177
  name: `${pointerLeave} focusout`,
7004
- el: ({ hoverTarget, $el }) => query(hoverTarget, $el) || $el,
7178
+ el: ({ hoverTarget }) => hoverTarget,
7005
7179
  filter: ({ autoplay }) => autoplay === "hover",
7006
7180
  handler(e) {
7181
+ var _a;
7007
7182
  if (!isTouch(e)) {
7008
- pauseHover(this.$el, this.restart);
7183
+ (_a = this._reverseAbort) == null ? void 0 : _a.abort();
7184
+ this.pause();
7185
+ this._reverseAbort = playReverse(this.$el, this.hoverRewind);
7186
+ }
7187
+ }
7188
+ },
7189
+ {
7190
+ name: "error pause ended",
7191
+ filter: ({ inviewQueued }) => inviewQueued,
7192
+ handler(e) {
7193
+ if (e.type === "error" || e.type === "ended" && !this.$el[loopKey]) {
7194
+ queue.delete(this.$el);
7009
7195
  }
7196
+ playNextQueued();
7010
7197
  }
7011
7198
  }
7012
7199
  ],
@@ -7019,33 +7206,118 @@
7019
7206
  }
7020
7207
  }),
7021
7208
  intersection({
7022
- filter: ({ $el, autoplay }) => autoplay !== "hover" && $el.preload !== "none",
7023
- handler([{ isIntersecting, target }]) {
7209
+ filter: ({ $el, manualControl }) => !manualControl && $el.preload !== "none",
7210
+ handler([{ isIntersecting }]) {
7024
7211
  if (!document.fullscreenElement) {
7025
7212
  if (isIntersecting) {
7026
7213
  if (this.autoplay) {
7027
- play(target);
7214
+ this._autoplay();
7028
7215
  }
7029
7216
  } else {
7030
- pauseHover(target, this.restart);
7217
+ this.pause();
7031
7218
  }
7032
7219
  }
7033
7220
  },
7034
7221
  args: { intersecting: false },
7035
- options: ({ $el, autoplay }) => ({
7036
- root: autoplay === "inview" ? null : parent($el).closest(":not(a)")
7222
+ options: ({ $el, autoplay, inviewMargin }) => ({
7223
+ root: autoplay === "inview" ? null : parent($el).closest(":not(a)"),
7224
+ rootMargin: autoplay === "inview" ? inviewMargin : "0px"
7037
7225
  })
7038
7226
  })
7039
- ]
7227
+ ],
7228
+ update: {
7229
+ write({ percent }) {
7230
+ if (!this.parallax) {
7231
+ return;
7232
+ }
7233
+ const { duration, seeking } = this.$el;
7234
+ if (!isNaN(duration) && !seeking) {
7235
+ this.$el.currentTime = percent * duration;
7236
+ }
7237
+ },
7238
+ events: ["scroll", "resize"]
7239
+ },
7240
+ methods: {
7241
+ _autoplay() {
7242
+ if (window.matchMedia("(prefers-reduced-motion: reduce)").matches) {
7243
+ this.pause();
7244
+ if (isTag(this.$el, "video")) {
7245
+ this.$el.currentTime = this.reducedMotionTime;
7246
+ }
7247
+ } else {
7248
+ this.play();
7249
+ }
7250
+ },
7251
+ play() {
7252
+ if (this.inviewQueued) {
7253
+ queue.set(this.$el, this.inviewQueued);
7254
+ playNextQueued();
7255
+ } else {
7256
+ play(this.$el);
7257
+ }
7258
+ },
7259
+ pause() {
7260
+ pause(this.$el);
7261
+ queue.delete(this.$el);
7262
+ if (this.restart) {
7263
+ this.$el.currentTime = 0;
7264
+ }
7265
+ }
7266
+ }
7040
7267
  };
7041
7268
  function isPlaying(videoEl) {
7042
7269
  return !videoEl.paused && !videoEl.ended;
7043
7270
  }
7044
- function pauseHover(el, restart) {
7045
- pause(el);
7046
- if (restart && isTag(el, "video")) {
7047
- el.currentTime = 0;
7271
+ const queue = /* @__PURE__ */ new Map();
7272
+ const played = /* @__PURE__ */ new WeakMap();
7273
+ let frame;
7274
+ async function playNextQueued() {
7275
+ cancelAnimationFrame(frame);
7276
+ await new Promise((resolve) => frame = requestAnimationFrame(resolve));
7277
+ const getPlayed = (el) => {
7278
+ var _a;
7279
+ return (_a = played.get(el)) != null ? _a : 0;
7280
+ };
7281
+ const videos = shuffle(queue.keys()).sort((a, b) => getPlayed(a) - getPlayed(b));
7282
+ for (const el of videos) {
7283
+ const maxQueued = queue.get(el);
7284
+ if (isPlaying(el) || videos.filter(isPlaying).length / queue.size >= maxQueued) {
7285
+ continue;
7286
+ }
7287
+ played.set(el, getPlayed(el) + 1);
7288
+ play(el);
7289
+ }
7290
+ }
7291
+ function shuffle(array) {
7292
+ array = [...array];
7293
+ for (let i = array.length - 1; i > 0; i--) {
7294
+ let j = Math.floor(Math.random() * (i + 1));
7295
+ [array[i], array[j]] = [array[j], array[i]];
7048
7296
  }
7297
+ return array;
7298
+ }
7299
+ function playReverse(el, playbackRate) {
7300
+ const start = el.currentTime;
7301
+ if (isNaN(start) || !playbackRate) {
7302
+ return;
7303
+ }
7304
+ playbackRate *= Math.max(1, start / 10 + 0.5);
7305
+ const controller = new AbortController();
7306
+ const time = Date.now();
7307
+ (function next() {
7308
+ requestAnimationFrame(() => {
7309
+ if (controller.signal.aborted) {
7310
+ return;
7311
+ }
7312
+ if (!el.seeking) {
7313
+ el.currentTime = Math.max(0, start - (Date.now() - time) * playbackRate / 1e3);
7314
+ }
7315
+ if (el.currentTime > 0) {
7316
+ next();
7317
+ }
7318
+ });
7319
+ })();
7320
+ return controller;
7049
7321
  }
7050
7322
 
7051
7323
  var cover = {
@@ -7363,6 +7635,7 @@
7363
7635
  css(this.$el, this._style);
7364
7636
  this.$el.hidden = true;
7365
7637
  const viewports = this.target.map((target) => getViewport$1(this.$el, target));
7638
+ const boundaryOffsets = this.boundary.map((el) => offset(el));
7366
7639
  const viewportOffset = this.getViewportOffset(this.$el);
7367
7640
  const dirs = [
7368
7641
  [0, ["x", "width", "left", "right"]],
@@ -7372,7 +7645,7 @@
7372
7645
  if (this.axis !== axis && includes([axis, true], this.stretch)) {
7373
7646
  css(this.$el, {
7374
7647
  [prop]: Math.min(
7375
- offset(this.boundary[i])[prop],
7648
+ boundaryOffsets[i][prop],
7376
7649
  viewports[i][prop] - 2 * viewportOffset
7377
7650
  ),
7378
7651
  [`overflow-${axis}`]: "auto"
@@ -7394,10 +7667,10 @@
7394
7667
  const elOffset = offset(this.$el);
7395
7668
  css(this.$el, {
7396
7669
  [prop]: (targetOffset[start] > elOffset[start] ? targetOffset[this.inset ? end : start] - Math.max(
7397
- offset(this.boundary[i])[start],
7670
+ boundaryOffsets[i][start],
7398
7671
  viewports[i][start] + viewportOffset
7399
7672
  ) : Math.min(
7400
- offset(this.boundary[i])[end],
7673
+ boundaryOffsets[i][end],
7401
7674
  viewports[i][end] - viewportOffset
7402
7675
  ) - targetOffset[this.inset ? start : end]) - positionOffset,
7403
7676
  [`overflow-${axis}`]: "auto"
@@ -7426,7 +7699,7 @@
7426
7699
  observeViewportResize(update),
7427
7700
  observeResize(overflowParents(drop.$el).concat(drop.target), update)
7428
7701
  ];
7429
- return () => off.map((observer) => observer.disconnect());
7702
+ return () => off.forEach((observer) => observer.disconnect());
7430
7703
  }
7431
7704
  function listenForScroll(drop, fn = () => drop.$emit()) {
7432
7705
  return on([document, ...overflowParents(drop.$el)], "scroll", fn, {
@@ -7661,7 +7934,9 @@
7661
7934
  const drop = this.getDropdown(target);
7662
7935
  const adjustHeight = () => {
7663
7936
  const maxBottom = Math.max(
7664
- ...parents(target, `.${this.clsDrop}`).concat(target).map((el) => offset(el).bottom)
7937
+ ...[...parents(target, `.${this.clsDrop}`), target].map(
7938
+ (el) => offset(el).bottom
7939
+ )
7665
7940
  );
7666
7941
  offset(this.dropbar, {
7667
7942
  left: offset(this.dropbar).left,
@@ -7850,7 +8125,8 @@
7850
8125
  parallaxJustify: Boolean
7851
8126
  },
7852
8127
  data: {
7853
- margin: "uk-grid-margin",
8128
+ margin: "",
8129
+ firstRow: "uk-first-row",
7854
8130
  clsStack: "uk-grid-stack",
7855
8131
  masonry: false,
7856
8132
  parallax: 0,
@@ -7872,14 +8148,14 @@
7872
8148
  {
7873
8149
  read(data) {
7874
8150
  const { rows } = data;
7875
- let { masonry, parallax, parallaxJustify, margin } = this;
8151
+ let { masonry, parallax, parallaxJustify } = this;
7876
8152
  parallax = Math.max(0, toPx(parallax));
7877
8153
  if (!(masonry || parallax || parallaxJustify) || positionedAbsolute(rows) || rows[0].some(
7878
8154
  (el, i) => rows.some((row) => row[i] && row[i].offsetWidth !== el.offsetWidth)
7879
8155
  )) {
7880
8156
  return data.translates = data.scrollColumns = false;
7881
8157
  }
7882
- let gutter = getGutter(rows, margin);
8158
+ let gutter = toFloat(css(this.$el, "row-gap"));
7883
8159
  let columns;
7884
8160
  let translates;
7885
8161
  if (masonry) {
@@ -7972,10 +8248,6 @@
7972
8248
  }
7973
8249
  return [columns, translates];
7974
8250
  }
7975
- function getGutter(rows, cls) {
7976
- const node = rows.flat().find((el) => hasClass(el, cls));
7977
- return toFloat(node ? css(node, "marginTop") : css(rows[0][0], "paddingLeft"));
7978
- }
7979
8251
  function transpose(rows) {
7980
8252
  const columns = [];
7981
8253
  for (const row of rows) {
@@ -8006,7 +8278,7 @@
8006
8278
  elements: ({ target }, $el) => $$(target, $el)
8007
8279
  },
8008
8280
  observe: resize({
8009
- target: ({ $el, elements }) => elements.reduce((elements2, el) => elements2.concat(el, ...el.children), [$el])
8281
+ target: ({ $el, elements }) => [$el, ...elements.flatMap((el) => [el, ...el.children])]
8010
8282
  }),
8011
8283
  events: {
8012
8284
  // Hidden elements may change height when fonts load
@@ -9015,11 +9287,11 @@
9015
9287
  ],
9016
9288
  update: {
9017
9289
  read() {
9018
- const overflow = [];
9019
- for (const prop of ["Width", "Height"]) {
9020
- overflow.push(this.$el[`scroll${prop}`] - this.$el[`client${prop}`]);
9021
- }
9022
- return { overflow };
9290
+ return {
9291
+ overflow: ["Width", "Height"].map(
9292
+ (prop) => this.$el[`scroll${prop}`] - this.$el[`client${prop}`]
9293
+ )
9294
+ };
9023
9295
  },
9024
9296
  write({ overflow }) {
9025
9297
  for (let i = 0; i < 2; i++) {
@@ -9650,7 +9922,7 @@
9650
9922
  if (!value) {
9651
9923
  return 0;
9652
9924
  }
9653
- if (isNumeric(value) || isString(value) && value.match(/^-?\d/)) {
9925
+ if (isNumeric(value) || isString(value) && /^-?\d/.test(value)) {
9654
9926
  return propOffset + toPx(value, "height", el, true);
9655
9927
  } else {
9656
9928
  const refElement = value === true ? getVisibleParent(el) : query(value, el);
@@ -9765,10 +10037,9 @@
9765
10037
 
9766
10038
  const selDisabled = ".uk-disabled *, .uk-disabled, [disabled]";
9767
10039
  var Switcher = {
9768
- mixins: [Togglable],
10040
+ mixins: [Connect],
9769
10041
  args: "connect",
9770
10042
  props: {
9771
- connect: String,
9772
10043
  toggle: String,
9773
10044
  itemNav: String,
9774
10045
  active: Number,
@@ -9780,20 +10051,12 @@
9780
10051
  toggle: "> * > :first-child",
9781
10052
  itemNav: false,
9782
10053
  active: 0,
9783
- cls: "uk-active",
9784
10054
  attrItem: "uk-switcher-item",
9785
10055
  selVertical: ".uk-nav",
9786
10056
  followFocus: false,
9787
10057
  swiping: true
9788
10058
  },
9789
10059
  computed: {
9790
- connects: {
9791
- get: ({ connect }, $el) => queryAll(connect, $el),
9792
- observe: ({ connect }) => connect
9793
- },
9794
- connectChildren() {
9795
- return this.connects.map((el) => children(el)).flat();
9796
- },
9797
10060
  toggles: ({ toggle }, $el) => $$(toggle, $el),
9798
10061
  children(_, $el) {
9799
10062
  return children($el).filter(
@@ -9824,10 +10087,7 @@
9824
10087
  connected() {
9825
10088
  this.$el.role = "tablist";
9826
10089
  },
9827
- observe: [
9828
- lazyload({ targets: ({ connectChildren }) => connectChildren }),
9829
- swipe({ target: ({ connects }) => connects, filter: ({ swiping }) => swiping })
9830
- ],
10090
+ observe: swipe({ target: ({ connects }) => connects, filter: ({ swiping }) => swiping }),
9831
10091
  events: [
9832
10092
  {
9833
10093
  name: "click keydown",
@@ -9877,24 +10137,27 @@
9877
10137
  }
9878
10138
  ],
9879
10139
  update() {
9880
- var _a;
9881
- for (const el of this.connects) {
9882
- if (isTag(el, "ul")) {
9883
- el.role = "presentation";
9884
- }
9885
- }
9886
10140
  attr(children(this.$el), "role", "presentation");
9887
10141
  for (const index in this.toggles) {
9888
10142
  const toggle = this.toggles[index];
9889
- const item = (_a = this.connects[0]) == null ? void 0 : _a.children[index];
9890
- toggle.role = "tab";
9891
- if (!item) {
9892
- continue;
9893
- }
9894
10143
  toggle.id = generateId(this, toggle);
9895
- item.id = generateId(this, item);
9896
- toggle.ariaControls = item.id;
9897
- attr(item, { role: "tabpanel", "aria-labelledby": toggle.id });
10144
+ const controls = [];
10145
+ for (const { children: children2 } of this.connects) {
10146
+ const item = children2[index];
10147
+ if (!item) {
10148
+ continue;
10149
+ }
10150
+ attr(item, {
10151
+ id: generateId(this, item),
10152
+ role: "tabpanel",
10153
+ "aria-labelledby": toggle.id
10154
+ });
10155
+ controls.push(item.id);
10156
+ }
10157
+ attr(toggle, {
10158
+ role: "tab",
10159
+ "aria-controls": controls.join(" ")
10160
+ });
9898
10161
  }
9899
10162
  attr(this.$el, "aria-orientation", matches(this.$el, this.selVertical) ? "vertical" : null);
9900
10163
  },
@@ -9927,15 +10190,7 @@
9927
10190
  tabindex: next === i ? null : -1
9928
10191
  });
9929
10192
  });
9930
- const animate = prev >= 0 && prev !== next;
9931
- this.connects.forEach(async ({ children: children2 }) => {
9932
- const actives = toArray(children2).filter(
9933
- (child, i) => i !== next && hasClass(child, this.cls)
9934
- );
9935
- if (await this.toggleElement(actives, false, animate)) {
9936
- await this.toggleElement(children2[next], true, animate);
9937
- }
9938
- });
10193
+ return this.showConnects(next, prev >= 0);
9939
10194
  }
9940
10195
  }
9941
10196
  };