uikit 3.25.18-dev.9fa57fb → 3.25.18-dev.f49c4ef

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 (202) hide show
  1. package/CHANGELOG.md +32 -2
  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 +942 -820
  7. package/dist/css/uikit-core-rtl.min.css +1 -1
  8. package/dist/css/uikit-core.css +942 -820
  9. package/dist/css/uikit-core.min.css +1 -1
  10. package/dist/css/uikit-rtl.css +1039 -917
  11. package/dist/css/uikit-rtl.min.css +1 -1
  12. package/dist/css/uikit.css +1039 -917
  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 +133 -132
  19. package/dist/js/components/lightbox-panel.min.js +1 -1
  20. package/dist/js/components/lightbox.js +134 -133
  21. package/dist/js/components/lightbox.min.js +1 -1
  22. package/dist/js/components/marquee.js +179 -0
  23. package/dist/js/components/marquee.min.js +1 -0
  24. package/dist/js/components/notification.js +1 -1
  25. package/dist/js/components/notification.min.js +1 -1
  26. package/dist/js/components/parallax.js +8 -12
  27. package/dist/js/components/parallax.min.js +1 -1
  28. package/dist/js/components/slider-parallax.js +8 -12
  29. package/dist/js/components/slider-parallax.min.js +1 -1
  30. package/dist/js/components/slider.js +43 -27
  31. package/dist/js/components/slider.min.js +1 -1
  32. package/dist/js/components/slideshow-parallax.js +8 -12
  33. package/dist/js/components/slideshow-parallax.min.js +1 -1
  34. package/dist/js/components/slideshow.js +71 -102
  35. package/dist/js/components/slideshow.min.js +1 -1
  36. package/dist/js/components/sortable.js +1 -1
  37. package/dist/js/components/sortable.min.js +1 -1
  38. package/dist/js/components/tooltip.js +19 -19
  39. package/dist/js/components/tooltip.min.js +1 -1
  40. package/dist/js/components/upload.js +1 -1
  41. package/dist/js/components/upload.min.js +1 -1
  42. package/dist/js/uikit-core.js +752 -262
  43. package/dist/js/uikit-core.min.js +1 -1
  44. package/dist/js/uikit-icons.js +1 -1
  45. package/dist/js/uikit-icons.min.js +1 -1
  46. package/dist/js/uikit.js +629 -376
  47. package/dist/js/uikit.min.js +1 -1
  48. package/package.json +1 -1
  49. package/src/js/api/component.js +2 -3
  50. package/src/js/api/observables.js +2 -4
  51. package/src/js/api/options.js +6 -3
  52. package/src/js/api/props.js +1 -4
  53. package/src/js/api/state.js +7 -8
  54. package/src/js/components/index.js +1 -0
  55. package/src/js/components/internal/lightbox-animations.js +7 -26
  56. package/src/js/components/internal/slideshow-animations.js +15 -62
  57. package/src/js/components/lightbox-panel.js +121 -96
  58. package/src/js/components/lightbox.js +5 -8
  59. package/src/js/components/marquee.js +123 -0
  60. package/src/js/components/slider.js +2 -2
  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 +55 -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 +66 -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 +152 -124
  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/text.less +6 -0
  102. package/src/less/components/utility.less +0 -163
  103. package/src/less/theme/_import.less +5 -1
  104. package/src/less/theme/dropcap.less +29 -0
  105. package/src/less/theme/floating-shadow.less +20 -0
  106. package/src/less/theme/logo.less +29 -0
  107. package/src/less/theme/marquee.less +14 -0
  108. package/src/less/theme/utility.less +0 -32
  109. package/src/scss/components/_import.scss +6 -1
  110. package/src/scss/components/base.scss +1 -1
  111. package/src/scss/components/button.scss +1 -1
  112. package/src/scss/components/dropcap.scss +63 -0
  113. package/src/scss/components/floating-shadow.scss +63 -0
  114. package/src/scss/components/form.scss +5 -5
  115. package/src/scss/components/grid.scss +57 -64
  116. package/src/scss/components/logo.scss +75 -0
  117. package/src/scss/components/margin.scss +152 -124
  118. package/src/scss/components/marquee.scss +136 -0
  119. package/src/scss/components/nav.scss +1 -1
  120. package/src/scss/components/padding.scss +9 -9
  121. package/src/scss/components/text.scss +6 -0
  122. package/src/scss/components/utility.scss +0 -129
  123. package/src/scss/mixins-theme.scss +41 -32
  124. package/src/scss/mixins.scss +38 -29
  125. package/src/scss/variables-theme.scss +14 -14
  126. package/src/scss/variables.scss +14 -14
  127. package/tests/accordion.html +77 -10
  128. package/tests/alert.html +1 -1
  129. package/tests/align.html +5 -5
  130. package/tests/animation.html +4 -4
  131. package/tests/article.html +7 -7
  132. package/tests/background.html +2 -2
  133. package/tests/badge.html +1 -1
  134. package/tests/base.html +2 -2
  135. package/tests/button.html +1 -1
  136. package/tests/card.html +15 -15
  137. package/tests/close.html +2 -2
  138. package/tests/comment.html +9 -9
  139. package/tests/container.html +2 -2
  140. package/tests/countdown.html +21 -21
  141. package/tests/cover.html +3 -3
  142. package/tests/description-list.html +1 -1
  143. package/tests/divider.html +3 -3
  144. package/tests/dotnav.html +1 -1
  145. package/tests/drop.html +7 -7
  146. package/tests/dropbar.html +5 -5
  147. package/tests/dropcap.html +26 -0
  148. package/tests/dropdown.html +1 -1
  149. package/tests/dropnav.html +18 -18
  150. package/tests/filter.html +3 -3
  151. package/tests/floating-shadow.html +44 -0
  152. package/tests/form.html +14 -14
  153. package/tests/grid.html +41 -47
  154. package/tests/heading.html +2 -2
  155. package/tests/height-viewport.html +4 -4
  156. package/tests/height.html +5 -5
  157. package/tests/icon.html +8 -8
  158. package/tests/image.html +6 -6
  159. package/tests/index.html +13 -13
  160. package/tests/js/index.js +1 -1
  161. package/tests/leader.html +5 -5
  162. package/tests/lightbox.html +6 -6
  163. package/tests/link.html +1 -1
  164. package/tests/list.html +4 -4
  165. package/tests/logo.html +84 -0
  166. package/tests/margin.html +7 -7
  167. package/tests/marker.html +3 -3
  168. package/tests/marquee.html +617 -0
  169. package/tests/modal.html +3 -3
  170. package/tests/nav.html +5 -5
  171. package/tests/navbar.html +27 -27
  172. package/tests/notification.html +2 -2
  173. package/tests/offcanvas.html +12 -12
  174. package/tests/overlay.html +3 -3
  175. package/tests/padding.html +1 -1
  176. package/tests/pagination.html +3 -3
  177. package/tests/parallax.html +1 -1
  178. package/tests/position.html +6 -6
  179. package/tests/scrollspy.html +12 -12
  180. package/tests/search.html +5 -5
  181. package/tests/section.html +17 -17
  182. package/tests/slidenav.html +3 -3
  183. package/tests/slider.html +5 -5
  184. package/tests/slideshow.html +33 -3
  185. package/tests/sortable.html +19 -19
  186. package/tests/sticky-navbar.html +4 -4
  187. package/tests/sticky-parallax.html +3 -3
  188. package/tests/sticky.html +3 -3
  189. package/tests/svg.html +3 -2
  190. package/tests/switcher.html +6 -6
  191. package/tests/tab.html +4 -4
  192. package/tests/text.html +3 -3
  193. package/tests/tile.html +4 -4
  194. package/tests/toggle.html +1 -1
  195. package/tests/tooltip.html +3 -3
  196. package/tests/totop.html +2 -2
  197. package/tests/transition.html +1 -1
  198. package/tests/upload.html +5 -5
  199. package/tests/utility.html +16 -116
  200. package/tests/video.html +224 -24
  201. package/tests/visibility.html +4 -4
  202. package/tests/width.html +12 -12
@@ -1,4 +1,4 @@
1
- /*! UIkit 3.25.18-dev.9fa57fb | https://www.getuikit.com | (c) 2014 - 2026 YOOtheme | MIT License */
1
+ /*! UIkit 3.25.18-dev.f49c4ef | 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
  }
@@ -589,19 +588,14 @@
589
588
  property = propName(property);
590
589
  if (isUndefined(value)) {
591
590
  return getComputedStyle(element2).getPropertyValue(property);
592
- } else {
593
- element2.style.setProperty(
594
- property,
595
- isNumeric(value) && !cssNumber[property] && !isCustomProperty(property) ? `${value}px` : value || isNumber(value) ? value : "",
596
- priority
597
- );
598
591
  }
592
+ element2.style.setProperty(
593
+ property,
594
+ isNumeric(value) && !cssNumber[property] && !isCustomProperty(property) ? `${value}px` : value || isNumber(value) ? value : "",
595
+ priority
596
+ );
599
597
  } else if (isArray(property)) {
600
- const props = {};
601
- for (const prop of property) {
602
- props[prop] = css(element2, prop);
603
- }
604
- return props;
598
+ return Object.fromEntries(property.map((prop) => [prop, css(element2, prop)]));
605
599
  } else if (isObject(property)) {
606
600
  for (const prop in property) {
607
601
  css(element2, prop, property[prop], value);
@@ -785,7 +779,9 @@
785
779
  );
786
780
  }
787
781
  function unwrap(element) {
788
- toNodes(element).map(parent).filter((value, index, self) => self.indexOf(value) === index).forEach((parent2) => parent2.replaceWith(...parent2.childNodes));
782
+ for (const elementParent of new Set(toNodes(element).map(parent))) {
783
+ elementParent.replaceWith(...elementParent.childNodes);
784
+ }
789
785
  }
790
786
  const singleTagRe = /^<(\w+)\s*\/?>(?:<\/\1>)?$/;
791
787
  function fragment(html2) {
@@ -825,7 +821,7 @@
825
821
  width: ["left", "right"],
826
822
  height: ["top", "bottom"]
827
823
  };
828
- function dimensions(element) {
824
+ function dimensions$1(element) {
829
825
  const rect = isElement(element) ? toNode(element).getBoundingClientRect() : { height: height(element), width: width(element), top: 0, left: 0 };
830
826
  return {
831
827
  height: rect.height,
@@ -840,7 +836,7 @@
840
836
  if (coordinates) {
841
837
  css(element, { left: 0, top: 0 });
842
838
  }
843
- const currentOffset = dimensions(element);
839
+ const currentOffset = dimensions$1(element);
844
840
  if (element) {
845
841
  const { scrollY, scrollX } = toWindow(element);
846
842
  const offsetBy = { height: scrollY, width: scrollX };
@@ -941,15 +937,15 @@
941
937
  return sumBy(parseCalc(value), (value2) => {
942
938
  const unit = parseUnit(value2);
943
939
  return unit ? percent(
944
- unit === "vh" ? getViewportHeight() : unit === "vw" ? width(toWindow(element)) : offsetDim ? element[`offset${ucfirst(property)}`] : dimensions(element)[property],
940
+ unit === "vh" ? getViewportHeight() : unit === "vw" ? width(toWindow(element)) : offsetDim ? element[`offset${ucfirst(property)}`] : dimensions$1(element)[property],
945
941
  value2
946
942
  ) : value2;
947
943
  });
948
944
  }
949
945
  const calcRe = /-?\d+(?:\.\d+)?(?:v[wh]|%|px)?/g;
950
946
  const parseCalc = memoize((calc) => calc.toString().replace(/\s/g, "").match(calcRe) || []);
951
- const unitRe = /(?:v[hw]|%)$/;
952
- const parseUnit = memoize((str) => (str.match(unitRe) || [])[0]);
947
+ const unitRe$1 = /(?:v[hw]|%)$/;
948
+ const parseUnit = memoize((str) => (str.match(unitRe$1) || [])[0]);
953
949
  function percent(base, value) {
954
950
  return base * toFloat(value) / 100;
955
951
  }
@@ -1044,7 +1040,7 @@
1044
1040
  if (!this.positions || this.positions.length < 2) {
1045
1041
  return false;
1046
1042
  }
1047
- const p = dimensions(target);
1043
+ const p = dimensions$1(target);
1048
1044
  const { left, right, top, bottom } = p;
1049
1045
  const [prevPosition] = this.positions;
1050
1046
  const position = last(this.positions);
@@ -1147,12 +1143,12 @@
1147
1143
  return isTag(el, "iframe") && (isYoutube(el) || isVimeo(el));
1148
1144
  }
1149
1145
  function isYoutube(el) {
1150
- return !!el.src.match(
1151
- /\/\/.*?youtube(-nocookie)?\.[a-z]+\/(watch\?v=[^&\s]+|embed)|youtu\.be\/.*/
1146
+ return /\/\/.*?youtube(-nocookie)?\.[a-z]+\/(watch\?v=[^&\s]+|embed)|youtu\.be\/.*/.test(
1147
+ el.src
1152
1148
  );
1153
1149
  }
1154
1150
  function isVimeo(el) {
1155
- return !!el.src.match(/vimeo\.com\/video\/.*/);
1151
+ return /vimeo\.com\/video\/.*/.test(el.src);
1156
1152
  }
1157
1153
  async function call(el, cmd) {
1158
1154
  await enableApi(el);
@@ -1161,7 +1157,7 @@
1161
1157
  function post(el, cmd) {
1162
1158
  el.contentWindow.postMessage(JSON.stringify({ event: "command", ...cmd }), "*");
1163
1159
  }
1164
- const stateKey = "_ukPlayer";
1160
+ const stateKey = /* @__PURE__ */ Symbol();
1165
1161
  let counter = 0;
1166
1162
  function enableApi(el) {
1167
1163
  if (el[stateKey]) {
@@ -1192,17 +1188,16 @@
1192
1188
  if (!isVisible(element)) {
1193
1189
  return false;
1194
1190
  }
1195
- return intersectRect(
1196
- ...overflowParents(element).map((parent2) => {
1197
- const { top, left, bottom, right } = offsetViewport(parent2);
1198
- return {
1199
- top: top - offsetTop,
1200
- left: left - offsetLeft,
1201
- bottom: bottom + offsetTop,
1202
- right: right + offsetLeft
1203
- };
1204
- }).concat(offset(element))
1205
- );
1191
+ const rects = overflowParents(element).map((parent2) => {
1192
+ const { top, left, bottom, right } = offsetViewport(parent2);
1193
+ return {
1194
+ top: top - offsetTop,
1195
+ left: left - offsetLeft,
1196
+ bottom: bottom + offsetTop,
1197
+ right: right + offsetLeft
1198
+ };
1199
+ });
1200
+ return intersectRect(...rects, offset(element));
1206
1201
  }
1207
1202
  function scrollIntoView(element, { offset: offsetBy = 0 } = {}) {
1208
1203
  const parents2 = isVisible(element) ? scrollParents(element, false, ["hidden"]) : [];
@@ -1242,7 +1237,7 @@
1242
1237
  const percent = ease(clamp((Date.now() - start) / duration));
1243
1238
  let diff = 0;
1244
1239
  if (parents2[0] === element2 && scroll + top < maxScroll) {
1245
- diff = offset(targetEl).top + (isScrollingElement ? 0 : element2.scrollTop) - targetTop - dimensions(getCoveringElement(targetEl)).height;
1240
+ diff = offset(targetEl).top + (isScrollingElement ? 0 : element2.scrollTop) - targetTop - dimensions$1(getCoveringElement(targetEl)).height;
1246
1241
  }
1247
1242
  if (css(element2, "scrollBehavior") !== "auto") {
1248
1243
  css(element2, "scrollBehavior", "auto");
@@ -1286,11 +1281,12 @@
1286
1281
  if (~fixedIndex) {
1287
1282
  ancestors = ancestors.slice(fixedIndex);
1288
1283
  }
1289
- return [scrollEl].concat(
1290
- ancestors.filter(
1284
+ return [
1285
+ scrollEl,
1286
+ ...ancestors.filter(
1291
1287
  (parent2) => css(parent2, "overflow").split(" ").some((prop) => includes(["auto", "scroll", ...props], prop)) && (!scrollable || parent2.scrollHeight > offsetViewport(parent2).height)
1292
1288
  )
1293
- ).reverse();
1289
+ ].reverse();
1294
1290
  }
1295
1291
  function scrollParent(...args) {
1296
1292
  return scrollParents(...args)[0];
@@ -1329,7 +1325,7 @@
1329
1325
  function getCoveringElement(target) {
1330
1326
  const { document } = toWindow(target);
1331
1327
  target = target || document.body;
1332
- const { left, width, top } = dimensions(target);
1328
+ const { left, width, top } = dimensions$1(target);
1333
1329
  for (const position of top ? [0, top] : [0]) {
1334
1330
  let coverEl;
1335
1331
  for (const el of document.elementsFromPoint(left + width / 2, position)) {
@@ -1338,7 +1334,7 @@
1338
1334
  parents(target).reverse().find(
1339
1335
  (parent2) => !parent2.contains(el) && !hasPosition(parent2, "static")
1340
1336
  )
1341
- ) < zIndex(el) || hasPosition(el, "sticky") && (!target || parent(el).contains(target))) && (!coverEl || dimensions(coverEl).height < dimensions(el).height)) {
1337
+ ) < zIndex(el) || hasPosition(el, "sticky") && (!target || parent(el).contains(target))) && (!coverEl || dimensions$1(coverEl).height < dimensions$1(el).height)) {
1342
1338
  coverEl = el;
1343
1339
  }
1344
1340
  }
@@ -1559,7 +1555,7 @@
1559
1555
  createEvent: createEvent,
1560
1556
  css: css,
1561
1557
  data: data,
1562
- dimensions: dimensions,
1558
+ dimensions: dimensions$1,
1563
1559
  each: each,
1564
1560
  empty: empty,
1565
1561
  endsWith: endsWith,
@@ -1679,7 +1675,7 @@
1679
1675
  wrapInner: wrapInner
1680
1676
  });
1681
1677
 
1682
- var VERSION = '3.25.18-dev.9fa57fb';
1678
+ var VERSION = '3.25.18-dev.f49c4ef';
1683
1679
 
1684
1680
  function initUpdates(instance) {
1685
1681
  instance._data = {};
@@ -1992,11 +1988,14 @@
1992
1988
  function coerce$1(type, value) {
1993
1989
  if (type === Boolean) {
1994
1990
  return toBoolean(value);
1995
- } else if (type === Number) {
1991
+ }
1992
+ if (type === Number) {
1996
1993
  return toNumber(value);
1997
- } else if (type === "list") {
1994
+ }
1995
+ if (type === "list") {
1998
1996
  return toList(value);
1999
- } else if (type === Object && isString(value)) {
1997
+ }
1998
+ if (type === Object && isString(value)) {
2000
1999
  return parseOptions(value);
2001
2000
  }
2002
2001
  return type ? type(value) : value;
@@ -2046,7 +2045,7 @@
2046
2045
  }
2047
2046
  const getAttributes = memoize((id, props) => {
2048
2047
  const attributes = Object.keys(props);
2049
- const filter = attributes.concat(id).map((key) => [hyphenate(key), `data-${hyphenate(key)}`]).flat();
2048
+ const filter = [...attributes, id].flatMap((key) => [hyphenate(key), `data-${hyphenate(key)}`]);
2050
2049
  return { attributes, filter };
2051
2050
  });
2052
2051
  function initPropsObserver(instance) {
@@ -2136,14 +2135,10 @@
2136
2135
  }
2137
2136
  function normalizeData({ data = {} }, { args = [], props = {} }) {
2138
2137
  if (isArray(data)) {
2139
- data = data.slice(0, args.length).reduce((data2, value, index) => {
2140
- if (isPlainObject(value)) {
2141
- assign(data2, value);
2142
- } else {
2143
- data2[args[index]] = value;
2144
- }
2145
- return data2;
2146
- }, {});
2138
+ data = data.slice(0, args.length).reduce(
2139
+ (data2, value, index) => assign(data2, isPlainObject(value) ? value : { [args[index]]: value }),
2140
+ {}
2141
+ );
2147
2142
  }
2148
2143
  for (const key in data) {
2149
2144
  if (isUndefined(data[key])) {
@@ -2191,11 +2186,10 @@
2191
2186
  function init(element2) {
2192
2187
  const instance = getComponent(element2, name);
2193
2188
  if (instance) {
2194
- if (data) {
2195
- instance.$destroy();
2196
- } else {
2189
+ if (!data) {
2197
2190
  return instance;
2198
2191
  }
2192
+ instance.$destroy();
2199
2193
  }
2200
2194
  return new Component({ el: element2, data });
2201
2195
  }
@@ -2411,8 +2405,8 @@
2411
2405
  for (const el of toNodes(isFunction(targets) ? targets(this) : targets)) {
2412
2406
  $$('[loading="lazy"]', el).slice(0, preload - 1).forEach((el2) => removeAttr(el2, "loading"));
2413
2407
  }
2414
- for (const el of entries.filter(({ isIntersecting }) => isIntersecting).map(({ target }) => target)) {
2415
- observer.unobserve(el);
2408
+ for (const { target } of entries.filter(({ isIntersecting }) => isIntersecting)) {
2409
+ observer.unobserve(target);
2416
2410
  }
2417
2411
  },
2418
2412
  ...options
@@ -2490,12 +2484,6 @@
2490
2484
  }
2491
2485
  };
2492
2486
 
2493
- function maybeDefaultPreventClick(e) {
2494
- if (e.target.closest('a[href="#"],a[href=""]')) {
2495
- e.preventDefault();
2496
- }
2497
- }
2498
-
2499
2487
  var Togglable = {
2500
2488
  props: {
2501
2489
  cls: Boolean,
@@ -2588,27 +2576,25 @@
2588
2576
  const dimProp = props[dirs.indexOf(dir)];
2589
2577
  const marginProp = `margin-${dir[0]}`;
2590
2578
  const marginStartProp = `margin-${startProp}`;
2591
- let currentDim = dimensions(el)[dimProp];
2579
+ let currentDim = dimensions$1(el)[dimProp];
2592
2580
  const inProgress = Transition.inProgress(el);
2593
2581
  await Transition.cancel(el);
2594
2582
  if (show) {
2595
2583
  _toggle(el, true);
2596
2584
  }
2597
- const prevProps = Object.fromEntries(
2598
- [
2599
- "padding",
2600
- "border",
2601
- "width",
2602
- "height",
2603
- "minWidth",
2604
- "minHeight",
2605
- "overflowY",
2606
- "overflowX",
2607
- marginProp,
2608
- marginStartProp
2609
- ].map((key) => [key, el.style[key]])
2610
- );
2611
- const dim = dimensions(el);
2585
+ const prevProps = pick(el.style, [
2586
+ "padding",
2587
+ "border",
2588
+ "width",
2589
+ "height",
2590
+ "minWidth",
2591
+ "minHeight",
2592
+ "overflowY",
2593
+ "overflowX",
2594
+ marginProp,
2595
+ marginStartProp
2596
+ ]);
2597
+ const dim = dimensions$1(el);
2612
2598
  const currentMargin = toFloat(css(el, marginProp));
2613
2599
  const marginStart = toFloat(css(el, marginStartProp));
2614
2600
  const endDim = dim[dimProp] + marginStart;
@@ -2674,6 +2660,55 @@
2674
2660
  );
2675
2661
  }
2676
2662
 
2663
+ var Connect = {
2664
+ mixins: [Togglable],
2665
+ props: {
2666
+ connect: String
2667
+ },
2668
+ data: {
2669
+ connect: "",
2670
+ cls: "uk-active"
2671
+ },
2672
+ computed: {
2673
+ connects: {
2674
+ get: ({ connect }, $el) => connect ? queryAll(connect, $el) : [],
2675
+ observe: ({ connect }) => connect
2676
+ },
2677
+ connectChildren() {
2678
+ return this.connects.flatMap((el) => children(el));
2679
+ }
2680
+ },
2681
+ watch: {
2682
+ connects(connects) {
2683
+ for (const el of connects) {
2684
+ if (isTag(el, "ul")) {
2685
+ el.role = "presentation";
2686
+ }
2687
+ }
2688
+ }
2689
+ },
2690
+ observe: lazyload({ targets: ({ connectChildren }) => connectChildren }),
2691
+ methods: {
2692
+ showConnects(index, animate) {
2693
+ const toggle = async ({ children: children2 }) => {
2694
+ const actives = toArray(children2).filter(
2695
+ (child, i) => i !== index && hasClass(child, this.cls)
2696
+ );
2697
+ if (await this.toggleElement(actives, false, animate)) {
2698
+ await this.toggleElement(children2[index], true, animate);
2699
+ }
2700
+ };
2701
+ return Promise.all(this.connects.map(toggle));
2702
+ }
2703
+ }
2704
+ };
2705
+
2706
+ function maybeDefaultPreventClick(e) {
2707
+ if (e.target.closest('a[href="#"],a[href=""]')) {
2708
+ e.preventDefault();
2709
+ }
2710
+ }
2711
+
2677
2712
  const keyMap = {
2678
2713
  TAB: 9,
2679
2714
  ENTER: 13,
@@ -2688,27 +2723,32 @@
2688
2723
  };
2689
2724
 
2690
2725
  var Accordion = {
2691
- mixins: [Class, Togglable],
2726
+ mixins: [Class, Connect],
2692
2727
  props: {
2693
- animation: Boolean,
2694
2728
  targets: String,
2695
2729
  active: null,
2696
2730
  collapsible: Boolean,
2697
2731
  multiple: Boolean,
2698
2732
  toggle: String,
2699
2733
  content: String,
2700
- offset: Number
2734
+ offset: Number,
2735
+ switcherConnect: String
2701
2736
  },
2702
2737
  data: {
2703
2738
  targets: "> *",
2704
2739
  active: false,
2705
- animation: true,
2740
+ animation: [true],
2706
2741
  collapsible: true,
2707
2742
  multiple: false,
2708
2743
  clsOpen: "uk-open",
2744
+ cls: "uk-active",
2709
2745
  toggle: ".uk-accordion-title",
2710
2746
  content: ".uk-accordion-content",
2711
- offset: 0
2747
+ offset: 0,
2748
+ switcherConnect: ""
2749
+ },
2750
+ beforeConnect() {
2751
+ this.connect = this.$props.connect = this.switcherConnect;
2712
2752
  },
2713
2753
  computed: {
2714
2754
  items: ({ targets }, $el) => $$(targets, $el),
@@ -2732,6 +2772,12 @@
2732
2772
  this.toggle(active, false);
2733
2773
  }
2734
2774
  },
2775
+ connectChildren() {
2776
+ this.showConnects(
2777
+ findIndex(this.items, (el) => hasClass(el, this.clsOpen)),
2778
+ false
2779
+ );
2780
+ },
2735
2781
  toggles() {
2736
2782
  this.$emit();
2737
2783
  },
@@ -2782,43 +2828,66 @@
2782
2828
  continue;
2783
2829
  }
2784
2830
  toggle.id = generateId(this, toggle);
2785
- content.id = generateId(this, content);
2786
2831
  const active = includes(activeItems, this.items[index2]);
2832
+ attr(content, {
2833
+ id: generateId(this, content),
2834
+ role: "region",
2835
+ "aria-labelledby": toggle.id
2836
+ });
2837
+ if (isTag(content, "ul")) {
2838
+ attr(children(content), "role", "presentation");
2839
+ }
2840
+ const controls = [content.id];
2841
+ for (const { children: children2 } of this.connects) {
2842
+ const item = children2[index2];
2843
+ if (!item) {
2844
+ continue;
2845
+ }
2846
+ attr(item, {
2847
+ id: generateId(this, item),
2848
+ role: "tabpanel",
2849
+ "aria-labelledby": toggle.id
2850
+ });
2851
+ controls.push(item.id);
2852
+ }
2787
2853
  attr(toggle, {
2788
2854
  role: isTag(toggle, "a") ? "button" : null,
2789
- "aria-controls": content.id,
2855
+ "aria-controls": controls.join(" "),
2790
2856
  "aria-expanded": active,
2791
2857
  "aria-disabled": !this.collapsible && activeItems.length < 2 && active
2792
2858
  });
2793
- attr(content, { role: "region", "aria-labelledby": toggle.id });
2794
- if (isTag(content, "ul")) {
2795
- attr(children(content), "role", "presentation");
2796
- }
2797
2859
  }
2798
2860
  },
2799
2861
  methods: {
2800
- toggle(item, animate) {
2801
- item = this.items[getIndex(item, this.items)];
2862
+ async toggle(item, animate) {
2863
+ animate = animate !== false;
2864
+ const next = getIndex(item, this.items);
2865
+ item = this.items[next];
2802
2866
  let items = [item];
2803
2867
  const activeItems = filter(this.items, `.${this.clsOpen}`);
2804
- if (!this.multiple && !includes(activeItems, items[0])) {
2805
- items = items.concat(activeItems);
2806
- }
2807
- if (!this.collapsible && activeItems.length < 2 && includes(activeItems, item)) {
2808
- items = [];
2809
- }
2810
- return Promise.all(
2811
- items.map(
2812
- (el) => this.toggleElement(el, !includes(activeItems, el), (el2, show) => {
2813
- toggleClass(el2, this.clsOpen, show);
2814
- if (animate === false || !this.animation) {
2815
- hide($(this.content, el2), !show);
2816
- return;
2817
- }
2818
- return transition(el2, show, this);
2819
- })
2820
- )
2821
- );
2868
+ const isActive = includes(activeItems, item);
2869
+ if (isActive && !this.collapsible && activeItems.length < 2) {
2870
+ return;
2871
+ }
2872
+ if (!isActive && !this.multiple) {
2873
+ items.push(...activeItems);
2874
+ }
2875
+ const toggle = (el) => this.toggleElement(el, !includes(activeItems, el), (el2, show) => {
2876
+ toggleClass(el2, this.clsOpen, show);
2877
+ if (!animate || !this.hasAnimation) {
2878
+ hide($(this.content, el2), !show);
2879
+ return;
2880
+ }
2881
+ return transition(el2, show, this);
2882
+ });
2883
+ const hideIndex = () => {
2884
+ const index2 = findIndex(children(this.connects[0]), (el) => hasClass(el, this.cls));
2885
+ return index2 === next ? findIndex(this.items, (i) => i !== item && includes(activeItems, i)) : index2;
2886
+ };
2887
+ return Promise.all([
2888
+ ...items.map(toggle),
2889
+ this.showConnects(isActive ? hideIndex() : next, animate)
2890
+ ]);
2822
2891
  }
2823
2892
  }
2824
2893
  };
@@ -2836,7 +2905,7 @@
2836
2905
  const currentHeight = toFloat(css(wrapper, "height"));
2837
2906
  await Transition.cancel(wrapper);
2838
2907
  hide(content, false);
2839
- const endHeight = sumBy(["marginTop", "marginBottom"], (prop) => css(content, prop)) + dimensions(content).height;
2908
+ const endHeight = sumBy(["marginTop", "marginBottom"], (prop) => css(content, prop)) + dimensions$1(content).height;
2840
2909
  const percent = currentHeight / endHeight;
2841
2910
  duration = endHeight ? (velocity * endHeight + duration) * (show ? 1 - percent : percent) : 0;
2842
2911
  css(wrapper, "height", currentHeight);
@@ -2852,7 +2921,7 @@
2852
2921
  let frame;
2853
2922
  (function scroll() {
2854
2923
  frame = requestAnimationFrame(() => {
2855
- const { top } = dimensions(el);
2924
+ const { top } = dimensions$1(el);
2856
2925
  if (top < 0) {
2857
2926
  scrollElement.scrollTop += top;
2858
2927
  }
@@ -2909,22 +2978,395 @@
2909
2978
  );
2910
2979
  }
2911
2980
 
2981
+ var Media = {
2982
+ props: {
2983
+ media: Boolean
2984
+ },
2985
+ data: {
2986
+ media: false
2987
+ },
2988
+ connected() {
2989
+ const media = toMedia(this.media, this.$el);
2990
+ this.matchMedia = true;
2991
+ if (media) {
2992
+ this.mediaObj = window.matchMedia(media);
2993
+ const handler = () => {
2994
+ this.matchMedia = this.mediaObj.matches;
2995
+ trigger(this.$el, createEvent("mediachange", false, true, [this.mediaObj]));
2996
+ };
2997
+ this.offMediaObj = on(this.mediaObj, "change", () => {
2998
+ handler();
2999
+ this.$emit("resize");
3000
+ });
3001
+ handler();
3002
+ }
3003
+ },
3004
+ disconnected() {
3005
+ var _a;
3006
+ (_a = this.offMediaObj) == null ? void 0 : _a.call(this);
3007
+ }
3008
+ };
3009
+ function toMedia(value, element) {
3010
+ if (isString(value)) {
3011
+ if (startsWith(value, "@")) {
3012
+ value = toFloat(css(element, `--uk-breakpoint-${value.slice(1)}`));
3013
+ } else if (isNaN(value)) {
3014
+ return value;
3015
+ }
3016
+ }
3017
+ return value && isNumeric(value) ? `(min-width: ${value}px)` : "";
3018
+ }
3019
+
3020
+ function getMaxPathLength(el) {
3021
+ return isVisible(el) ? Math.ceil(
3022
+ Math.max(0, ...$$("[stroke]", el).map((stroke) => {
3023
+ var _a;
3024
+ return ((_a = stroke.getTotalLength) == null ? void 0 : _a.call(stroke)) || 0;
3025
+ }))
3026
+ ) : 0;
3027
+ }
3028
+
3029
+ const props = {
3030
+ x: transformFn,
3031
+ y: transformFn,
3032
+ rotate: transformFn,
3033
+ scale: transformFn,
3034
+ color: colorFn,
3035
+ backgroundColor: colorFn,
3036
+ borderColor: colorFn,
3037
+ blur: filterFn,
3038
+ hue: filterFn,
3039
+ fopacity: filterFn,
3040
+ grayscale: filterFn,
3041
+ invert: filterFn,
3042
+ saturate: filterFn,
3043
+ sepia: filterFn,
3044
+ opacity: cssPropFn,
3045
+ stroke: strokeFn,
3046
+ bgx: backgroundFn,
3047
+ bgy: backgroundFn
3048
+ };
3049
+ const { keys } = Object;
3050
+ ({
3051
+ props: fillObject(keys(props), "list"),
3052
+ data: fillObject(keys(props), void 0)});
3053
+ function transformFn(prop, el, stops) {
3054
+ let unit = getUnit(stops) || { x: "px", y: "px", rotate: "deg" }[prop] || "";
3055
+ let transformFn2;
3056
+ if (prop === "x" || prop === "y") {
3057
+ prop = `translate${ucfirst(prop)}`;
3058
+ transformFn2 = (stop) => toFloat(toFloat(stop).toFixed(unit === "px" ? 0 : 6));
3059
+ } else if (prop === "scale") {
3060
+ unit = "";
3061
+ transformFn2 = (stop) => {
3062
+ var _a;
3063
+ return getUnit([stop]) ? toPx(stop, "width", el, true) / el[`offset${((_a = stop.endsWith) == null ? void 0 : _a.call(stop, "vh")) ? "Height" : "Width"}`] : toFloat(stop);
3064
+ };
3065
+ }
3066
+ if (stops.length === 1) {
3067
+ stops.unshift(prop === "scale" ? 1 : 0);
3068
+ }
3069
+ stops = parseStops(stops, transformFn2);
3070
+ return (css2, percent) => {
3071
+ css2.transform = `${css2.transform || ""} ${prop}(${getValue(stops, percent)}${unit})`;
3072
+ };
3073
+ }
3074
+ function colorFn(prop, el, stops) {
3075
+ if (stops.length === 1) {
3076
+ stops.unshift(getCssValue(el, prop, ""));
3077
+ }
3078
+ stops = parseStops(stops, (stop) => parseColor(el, stop));
3079
+ return (css2, percent) => {
3080
+ const [start, end, p] = getStop(stops, percent);
3081
+ const value = start.map((value2, i) => {
3082
+ value2 += p * (end[i] - value2);
3083
+ return i === 3 ? toFloat(value2) : parseInt(value2, 10);
3084
+ }).join(",");
3085
+ css2[prop] = `rgba(${value})`;
3086
+ };
3087
+ }
3088
+ function parseColor(el, color) {
3089
+ return getCssValue(el, "color", color).split(/[(),]/g).slice(1, -1).concat(1).slice(0, 4).map(toFloat);
3090
+ }
3091
+ function filterFn(prop, el, stops) {
3092
+ if (stops.length === 1) {
3093
+ stops.unshift(0);
3094
+ }
3095
+ const unit = getUnit(stops) || { blur: "px", hue: "deg" }[prop] || "%";
3096
+ prop = { fopacity: "opacity", hue: "hue-rotate" }[prop] || prop;
3097
+ stops = parseStops(stops);
3098
+ return (css2, percent) => {
3099
+ const value = getValue(stops, percent);
3100
+ css2.filter = `${css2.filter || ""} ${prop}(${value + unit})`;
3101
+ };
3102
+ }
3103
+ function cssPropFn(prop, el, stops) {
3104
+ if (stops.length === 1) {
3105
+ stops.unshift(getCssValue(el, prop, ""));
3106
+ }
3107
+ stops = parseStops(stops);
3108
+ return (css2, percent) => {
3109
+ css2[prop] = getValue(stops, percent);
3110
+ };
3111
+ }
3112
+ function strokeFn(prop, el, stops) {
3113
+ if (stops.length === 1) {
3114
+ stops.unshift(0);
3115
+ }
3116
+ const unit = getUnit(stops);
3117
+ const length = getMaxPathLength(el);
3118
+ stops = parseStops(stops.reverse(), (stop) => {
3119
+ stop = toFloat(stop);
3120
+ return unit === "%" ? stop * length / 100 : stop;
3121
+ });
3122
+ if (!stops.some(([value]) => value)) {
3123
+ return noop;
3124
+ }
3125
+ css(el, "strokeDasharray", length);
3126
+ return (css2, percent) => {
3127
+ css2.strokeDashoffset = getValue(stops, percent);
3128
+ };
3129
+ }
3130
+ function backgroundFn(prop, el, stops, props2) {
3131
+ if (stops.length === 1) {
3132
+ stops.unshift(0);
3133
+ }
3134
+ const attr = prop === "bgy" ? "height" : "width";
3135
+ props2[prop] = parseStops(stops, (stop) => toPx(stop, attr, el));
3136
+ const bgProps = ["bgx", "bgy"].filter((prop2) => prop2 in props2);
3137
+ if (bgProps.length === 2 && prop === "bgx") {
3138
+ return noop;
3139
+ }
3140
+ if (getCssValue(el, "backgroundSize", "") === "cover") {
3141
+ return backgroundCoverFn(prop, el, stops, props2);
3142
+ }
3143
+ const positions = {};
3144
+ for (const prop2 of bgProps) {
3145
+ positions[prop2] = getBackgroundPos(el, prop2);
3146
+ }
3147
+ return setBackgroundPosFn(bgProps, positions, props2);
3148
+ }
3149
+ function backgroundCoverFn(prop, el, stops, props2) {
3150
+ const dimImage = getBackgroundImageDimensions(el);
3151
+ if (!dimImage.width) {
3152
+ return noop;
3153
+ }
3154
+ const dimEl = {
3155
+ width: el.offsetWidth,
3156
+ height: el.offsetHeight
3157
+ };
3158
+ const bgProps = ["bgx", "bgy"].filter((prop2) => prop2 in props2);
3159
+ const positions = {};
3160
+ for (const prop2 of bgProps) {
3161
+ const values = props2[prop2].map(([value]) => value);
3162
+ const min = Math.min(...values);
3163
+ const max = Math.max(...values);
3164
+ const down = values.indexOf(min) < values.indexOf(max);
3165
+ const diff = max - min;
3166
+ positions[prop2] = `${(down ? -diff : 0) - (down ? min : max)}px`;
3167
+ dimEl[prop2 === "bgy" ? "height" : "width"] += diff;
3168
+ }
3169
+ const dim = Dimensions.cover(dimImage, dimEl);
3170
+ for (const prop2 of bgProps) {
3171
+ const attr = prop2 === "bgy" ? "height" : "width";
3172
+ const overflow = dim[attr] - dimEl[attr];
3173
+ positions[prop2] = `max(${getBackgroundPos(el, prop2)},-${overflow}px) + ${positions[prop2]}`;
3174
+ }
3175
+ const fn = setBackgroundPosFn(bgProps, positions, props2);
3176
+ return (css2, percent) => {
3177
+ fn(css2, percent);
3178
+ css2.backgroundSize = `${dim.width}px ${dim.height}px`;
3179
+ css2.backgroundRepeat = "no-repeat";
3180
+ };
3181
+ }
3182
+ function getBackgroundPos(el, prop) {
3183
+ return getCssValue(el, `background-position-${prop.slice(-1)}`, "");
3184
+ }
3185
+ function setBackgroundPosFn(bgProps, positions, props2) {
3186
+ return function(css2, percent) {
3187
+ for (const prop of bgProps) {
3188
+ const value = getValue(props2[prop], percent);
3189
+ css2[`background-position-${prop.slice(-1)}`] = `calc(${positions[prop]} + ${value}px)`;
3190
+ }
3191
+ };
3192
+ }
3193
+ const loading = {};
3194
+ const dimensions = {};
3195
+ function getBackgroundImageDimensions(el) {
3196
+ const src = css(el, "backgroundImage").replace(/^none|url\(["']?(.+?)["']?\)$/, "$1");
3197
+ if (dimensions[src]) {
3198
+ return dimensions[src];
3199
+ }
3200
+ const image = new Image();
3201
+ if (src) {
3202
+ image.src = src;
3203
+ if (!image.naturalWidth && !loading[src]) {
3204
+ once(image, "error load", () => {
3205
+ dimensions[src] = toDimensions(image);
3206
+ trigger(el, createEvent("load", false));
3207
+ });
3208
+ loading[src] = true;
3209
+ return toDimensions(image);
3210
+ }
3211
+ }
3212
+ return dimensions[src] = toDimensions(image);
3213
+ }
3214
+ function toDimensions(image) {
3215
+ return {
3216
+ width: image.naturalWidth,
3217
+ height: image.naturalHeight
3218
+ };
3219
+ }
3220
+ function parseStops(stops, fn = toFloat) {
3221
+ const result = [];
3222
+ const { length } = stops;
3223
+ let nullIndex = 0;
3224
+ for (let i = 0; i < length; i++) {
3225
+ let [value, percent] = isString(stops[i]) ? stops[i].trim().split(/ (?![^(]*\))/) : [stops[i]];
3226
+ value = fn(value);
3227
+ percent = percent ? toFloat(percent) / 100 : null;
3228
+ if (i === 0) {
3229
+ if (percent === null) {
3230
+ percent = 0;
3231
+ } else if (percent) {
3232
+ result.push([value, 0]);
3233
+ }
3234
+ } else if (i === length - 1) {
3235
+ if (percent === null) {
3236
+ percent = 1;
3237
+ } else if (percent !== 1) {
3238
+ result.push([value, percent]);
3239
+ percent = 1;
3240
+ }
3241
+ }
3242
+ result.push([value, percent]);
3243
+ if (percent === null) {
3244
+ nullIndex++;
3245
+ } else if (nullIndex) {
3246
+ const leftPercent = result[i - nullIndex - 1][1];
3247
+ const p = (percent - leftPercent) / (nullIndex + 1);
3248
+ for (let j = nullIndex; j > 0; j--) {
3249
+ result[i - j][1] = leftPercent + p * (nullIndex - j + 1);
3250
+ }
3251
+ nullIndex = 0;
3252
+ }
3253
+ }
3254
+ return result;
3255
+ }
3256
+ function getStop(stops, percent) {
3257
+ const index = findIndex(stops.slice(1), ([, targetPercent]) => percent <= targetPercent) + 1;
3258
+ return [
3259
+ stops[index - 1][0],
3260
+ stops[index][0],
3261
+ (percent - stops[index - 1][1]) / (stops[index][1] - stops[index - 1][1])
3262
+ ];
3263
+ }
3264
+ function getValue(stops, percent) {
3265
+ const [start, end, p] = getStop(stops, percent);
3266
+ return start + (end - start) * p;
3267
+ }
3268
+ const unitRe = /^-?\d+(?:\.\d+)?(\S+)?/;
3269
+ function getUnit(stops, defaultUnit) {
3270
+ var _a;
3271
+ for (const stop of stops) {
3272
+ const match = (_a = stop.match) == null ? void 0 : _a.call(stop, unitRe);
3273
+ if (match) {
3274
+ return match[1];
3275
+ }
3276
+ }
3277
+ return defaultUnit;
3278
+ }
3279
+ function getCssValue(el, prop, value) {
3280
+ const prev = el.style[prop];
3281
+ const val = css(css(el, prop, value), prop);
3282
+ el.style[prop] = prev;
3283
+ return val;
3284
+ }
3285
+ function fillObject(keys2, value) {
3286
+ return Object.fromEntries(keys2.map((prop) => [prop, value]));
3287
+ }
3288
+ function ease(percent, easing) {
3289
+ return easing >= 0 ? Math.pow(percent, easing + 1) : 1 - Math.pow(1 - percent, 1 - easing);
3290
+ }
3291
+
3292
+ var ScrollDriven = {
3293
+ props: {
3294
+ parallaxTarget: Boolean,
3295
+ parallaxStart: String,
3296
+ parallaxEnd: String,
3297
+ parallaxEasing: Number
3298
+ },
3299
+ data: {
3300
+ parallaxTarget: false,
3301
+ parallaxStart: 0,
3302
+ parallaxEnd: 0,
3303
+ parallaxEasing: 0
3304
+ },
3305
+ observe: [
3306
+ resize({
3307
+ target: ({ $el, parallaxTarget }) => [$el, parallaxTarget],
3308
+ filter: ({ parallax }) => parallax
3309
+ }),
3310
+ scroll$1({ filter: ({ parallax }) => parallax })
3311
+ ],
3312
+ computed: {
3313
+ parallaxTargetFallback: ($props, $el) => $el,
3314
+ parallaxTarget({ parallaxTarget }, $el) {
3315
+ return parallaxTarget && query(parallaxTarget, $el) || this.parallaxTargetFallback;
3316
+ }
3317
+ },
3318
+ update: {
3319
+ read() {
3320
+ if (!this.parallax) {
3321
+ return;
3322
+ }
3323
+ const target = this.parallaxTarget;
3324
+ if (!target) {
3325
+ return;
3326
+ }
3327
+ const start = toPx(this.parallaxStart, "height", target, true);
3328
+ const end = toPx(this.parallaxEnd, "height", target, true);
3329
+ const percent = ease(scrolledOver(target, start, end), this.parallaxEasing);
3330
+ return { percent };
3331
+ },
3332
+ events: ["scroll", "resize"]
3333
+ }
3334
+ };
3335
+
3336
+ const loopKey = /* @__PURE__ */ Symbol();
2912
3337
  var Video = {
3338
+ mixins: [ScrollDriven],
2913
3339
  args: "autoplay",
2914
3340
  props: {
2915
3341
  automute: Boolean,
2916
3342
  autoplay: Boolean,
2917
3343
  restart: Boolean,
2918
- hoverTarget: Boolean
3344
+ inviewMargin: String,
3345
+ inviewQueued: Number,
3346
+ hoverTarget: Boolean,
3347
+ hoverRewind: Number,
3348
+ reducedMotionTime: Number
2919
3349
  },
2920
3350
  data: {
2921
3351
  automute: false,
2922
3352
  autoplay: true,
2923
3353
  restart: false,
2924
- hoverTarget: false
3354
+ inviewMargin: "0px",
3355
+ inviewQueued: 0,
3356
+ hoverTarget: false,
3357
+ hoverRewind: 0,
3358
+ reducedMotionTime: 0
2925
3359
  },
2926
3360
  beforeConnect() {
2927
3361
  const isVideo = isTag(this.$el, "video");
3362
+ this.restart = isVideo && this.restart;
3363
+ this.parallax = isVideo && this.autoplay === "parallax";
3364
+ this.manualControl = ["hover", "parallax"].includes(this.autoplay);
3365
+ this.inviewQueued = this.autoplay === "inview" && this.inviewQueued;
3366
+ if (this.inviewQueued) {
3367
+ this.$el[loopKey] = this.$el.loop;
3368
+ this.$el.loop = false;
3369
+ }
2928
3370
  if (this.autoplay === "inview" && isVideo && !hasAttr(this.$el, "preload")) {
2929
3371
  this.$el.preload = "none";
2930
3372
  }
@@ -2933,7 +3375,10 @@
2933
3375
  }
2934
3376
  if (this.autoplay === "hover") {
2935
3377
  if (isVideo) {
2936
- this.$el.tabIndex = 0;
3378
+ this.hoverTarget = query(this.hoverTarget, this.$el) || this.$el;
3379
+ if (!isFocusable(this.hoverTarget)) {
3380
+ this.hoverTarget.tabIndex = 0;
3381
+ }
2937
3382
  } else {
2938
3383
  this.autoplay = true;
2939
3384
  }
@@ -2942,28 +3387,49 @@
2942
3387
  mute(this.$el);
2943
3388
  }
2944
3389
  },
3390
+ disconnected() {
3391
+ if (this.$el[loopKey]) {
3392
+ this.$el.loop = true;
3393
+ }
3394
+ queue.delete(this.$el);
3395
+ },
2945
3396
  events: [
2946
3397
  {
2947
3398
  name: `${pointerEnter} focusin`,
2948
- el: ({ hoverTarget, $el }) => query(hoverTarget, $el) || $el,
3399
+ el: ({ hoverTarget }) => hoverTarget,
2949
3400
  filter: ({ autoplay }) => autoplay === "hover",
2950
3401
  handler(e) {
3402
+ var _a;
3403
+ (_a = this._reverseAbort) == null ? void 0 : _a.abort();
2951
3404
  if (!isTouch(e) || !isPlaying(this.$el)) {
2952
- play(this.$el);
3405
+ this.play();
2953
3406
  } else {
2954
- pauseHover(this.$el, this.restart);
3407
+ this.pause();
2955
3408
  }
2956
3409
  }
2957
3410
  },
2958
3411
  {
2959
3412
  name: `${pointerLeave} focusout`,
2960
- el: ({ hoverTarget, $el }) => query(hoverTarget, $el) || $el,
3413
+ el: ({ hoverTarget }) => hoverTarget,
2961
3414
  filter: ({ autoplay }) => autoplay === "hover",
2962
3415
  handler(e) {
3416
+ var _a;
2963
3417
  if (!isTouch(e)) {
2964
- pauseHover(this.$el, this.restart);
3418
+ (_a = this._reverseAbort) == null ? void 0 : _a.abort();
3419
+ this.pause();
3420
+ this._reverseAbort = playReverse(this.$el, this.hoverRewind);
2965
3421
  }
2966
3422
  }
3423
+ },
3424
+ {
3425
+ name: "error pause ended",
3426
+ filter: ({ inviewQueued }) => inviewQueued,
3427
+ handler(e) {
3428
+ if (e.type === "error" || e.type === "ended" && !this.$el[loopKey]) {
3429
+ queue.delete(this.$el);
3430
+ }
3431
+ playNextQueued();
3432
+ }
2967
3433
  }
2968
3434
  ],
2969
3435
  observe: [
@@ -2975,33 +3441,118 @@
2975
3441
  }
2976
3442
  }),
2977
3443
  intersection({
2978
- filter: ({ $el, autoplay }) => autoplay !== "hover" && $el.preload !== "none",
2979
- handler([{ isIntersecting, target }]) {
3444
+ filter: ({ $el, manualControl }) => !manualControl && $el.preload !== "none",
3445
+ handler([{ isIntersecting }]) {
2980
3446
  if (!document.fullscreenElement) {
2981
3447
  if (isIntersecting) {
2982
3448
  if (this.autoplay) {
2983
- play(target);
3449
+ this._autoplay();
2984
3450
  }
2985
3451
  } else {
2986
- pauseHover(target, this.restart);
3452
+ this.pause();
2987
3453
  }
2988
3454
  }
2989
3455
  },
2990
3456
  args: { intersecting: false },
2991
- options: ({ $el, autoplay }) => ({
2992
- root: autoplay === "inview" ? null : parent($el).closest(":not(a)")
3457
+ options: ({ $el, autoplay, inviewMargin }) => ({
3458
+ root: autoplay === "inview" ? null : parent($el).closest(":not(a)"),
3459
+ rootMargin: autoplay === "inview" ? inviewMargin : "0px"
2993
3460
  })
2994
3461
  })
2995
- ]
3462
+ ],
3463
+ update: {
3464
+ write({ percent }) {
3465
+ if (!this.parallax) {
3466
+ return;
3467
+ }
3468
+ const { duration, seeking } = this.$el;
3469
+ if (!isNaN(duration) && !seeking) {
3470
+ this.$el.currentTime = percent * duration;
3471
+ }
3472
+ },
3473
+ events: ["scroll", "resize"]
3474
+ },
3475
+ methods: {
3476
+ _autoplay() {
3477
+ if (window.matchMedia("(prefers-reduced-motion: reduce)").matches) {
3478
+ this.pause();
3479
+ if (isTag(this.$el, "video")) {
3480
+ this.$el.currentTime = this.reducedMotionTime;
3481
+ }
3482
+ } else {
3483
+ this.play();
3484
+ }
3485
+ },
3486
+ play() {
3487
+ if (this.inviewQueued) {
3488
+ queue.set(this.$el, this.inviewQueued);
3489
+ playNextQueued();
3490
+ } else {
3491
+ play(this.$el);
3492
+ }
3493
+ },
3494
+ pause() {
3495
+ pause(this.$el);
3496
+ queue.delete(this.$el);
3497
+ if (this.restart) {
3498
+ this.$el.currentTime = 0;
3499
+ }
3500
+ }
3501
+ }
2996
3502
  };
2997
3503
  function isPlaying(videoEl) {
2998
3504
  return !videoEl.paused && !videoEl.ended;
2999
3505
  }
3000
- function pauseHover(el, restart) {
3001
- pause(el);
3002
- if (restart && isTag(el, "video")) {
3003
- el.currentTime = 0;
3506
+ const queue = /* @__PURE__ */ new Map();
3507
+ const played = /* @__PURE__ */ new WeakMap();
3508
+ let frame;
3509
+ async function playNextQueued() {
3510
+ cancelAnimationFrame(frame);
3511
+ await new Promise((resolve) => frame = requestAnimationFrame(resolve));
3512
+ const getPlayed = (el) => {
3513
+ var _a;
3514
+ return (_a = played.get(el)) != null ? _a : 0;
3515
+ };
3516
+ const videos = shuffle(queue.keys()).sort((a, b) => getPlayed(a) - getPlayed(b));
3517
+ for (const el of videos) {
3518
+ const maxQueued = queue.get(el);
3519
+ if (isPlaying(el) || videos.filter(isPlaying).length / queue.size >= maxQueued) {
3520
+ continue;
3521
+ }
3522
+ played.set(el, getPlayed(el) + 1);
3523
+ play(el);
3524
+ }
3525
+ }
3526
+ function shuffle(array) {
3527
+ array = [...array];
3528
+ for (let i = array.length - 1; i > 0; i--) {
3529
+ let j = Math.floor(Math.random() * (i + 1));
3530
+ [array[i], array[j]] = [array[j], array[i]];
3531
+ }
3532
+ return array;
3533
+ }
3534
+ function playReverse(el, playbackRate) {
3535
+ const start = el.currentTime;
3536
+ if (isNaN(start) || !playbackRate) {
3537
+ return;
3004
3538
  }
3539
+ playbackRate *= Math.max(1, start / 10 + 0.5);
3540
+ const controller = new AbortController();
3541
+ const time = Date.now();
3542
+ (function next() {
3543
+ requestAnimationFrame(() => {
3544
+ if (controller.signal.aborted) {
3545
+ return;
3546
+ }
3547
+ if (!el.seeking) {
3548
+ el.currentTime = Math.max(0, start - (Date.now() - time) * playbackRate / 1e3);
3549
+ }
3550
+ if (el.currentTime > 0) {
3551
+ next();
3552
+ }
3553
+ });
3554
+ })();
3555
+ return controller;
3005
3556
  }
3006
3557
 
3007
3558
  var cover = {
@@ -3077,7 +3628,7 @@
3077
3628
  inset: false
3078
3629
  },
3079
3630
  connected() {
3080
- this.pos = this.$props.pos.split("-").concat("center").slice(0, 2);
3631
+ this.pos = [...this.$props.pos.split("-"), "center"].slice(0, 2);
3081
3632
  [this.dir, this.align] = this.pos;
3082
3633
  this.axis = includes(["top", "bottom"], this.dir) ? "y" : "x";
3083
3634
  },
@@ -3097,7 +3648,7 @@
3097
3648
  placement.reverse();
3098
3649
  }
3099
3650
  const restoreScrollPosition = storeScrollPosition(element);
3100
- const elDim = dimensions(element);
3651
+ const elDim = dimensions$1(element);
3101
3652
  css(element, { top: -elDim.height, left: -elDim.width });
3102
3653
  positionAt(element, target, {
3103
3654
  attach,
@@ -3462,6 +4013,7 @@
3462
4013
  css(this.$el, this._style);
3463
4014
  this.$el.hidden = true;
3464
4015
  const viewports = this.target.map((target) => getViewport$1(this.$el, target));
4016
+ const boundaryOffsets = this.boundary.map((el) => offset(el));
3465
4017
  const viewportOffset = this.getViewportOffset(this.$el);
3466
4018
  const dirs = [
3467
4019
  [0, ["x", "width", "left", "right"]],
@@ -3471,7 +4023,7 @@
3471
4023
  if (this.axis !== axis && includes([axis, true], this.stretch)) {
3472
4024
  css(this.$el, {
3473
4025
  [prop]: Math.min(
3474
- offset(this.boundary[i])[prop],
4026
+ boundaryOffsets[i][prop],
3475
4027
  viewports[i][prop] - 2 * viewportOffset
3476
4028
  ),
3477
4029
  [`overflow-${axis}`]: "auto"
@@ -3493,10 +4045,10 @@
3493
4045
  const elOffset = offset(this.$el);
3494
4046
  css(this.$el, {
3495
4047
  [prop]: (targetOffset[start] > elOffset[start] ? targetOffset[this.inset ? end : start] - Math.max(
3496
- offset(this.boundary[i])[start],
4048
+ boundaryOffsets[i][start],
3497
4049
  viewports[i][start] + viewportOffset
3498
4050
  ) : Math.min(
3499
- offset(this.boundary[i])[end],
4051
+ boundaryOffsets[i][end],
3500
4052
  viewports[i][end] - viewportOffset
3501
4053
  ) - targetOffset[this.inset ? start : end]) - positionOffset,
3502
4054
  [`overflow-${axis}`]: "auto"
@@ -3525,7 +4077,7 @@
3525
4077
  observeViewportResize(update),
3526
4078
  observeResize(overflowParents(drop.$el).concat(drop.target), update)
3527
4079
  ];
3528
- return () => off.map((observer) => observer.disconnect());
4080
+ return () => off.forEach((observer) => observer.disconnect());
3529
4081
  }
3530
4082
  function listenForScroll(drop, fn = () => drop.$emit()) {
3531
4083
  return on([document, ...overflowParents(drop.$el)], "scroll", fn, {
@@ -3760,7 +4312,9 @@
3760
4312
  const drop = this.getDropdown(target);
3761
4313
  const adjustHeight = () => {
3762
4314
  const maxBottom = Math.max(
3763
- ...parents(target, `.${this.clsDrop}`).concat(target).map((el) => offset(el).bottom)
4315
+ ...[...parents(target, `.${this.clsDrop}`), target].map(
4316
+ (el) => offset(el).bottom
4317
+ )
3764
4318
  );
3765
4319
  offset(this.dropbar, {
3766
4320
  left: offset(this.dropbar).left,
@@ -3940,10 +4494,12 @@
3940
4494
  var Margin = {
3941
4495
  props: {
3942
4496
  margin: String,
4497
+ firstRow: Boolean,
3943
4498
  firstColumn: Boolean
3944
4499
  },
3945
4500
  data: {
3946
4501
  margin: "uk-margin-small-top",
4502
+ firstRow: false,
3947
4503
  firstColumn: "uk-first-column"
3948
4504
  },
3949
4505
  observe: [
@@ -3983,6 +4539,7 @@
3983
4539
  for (const row of rows) {
3984
4540
  for (const el of row) {
3985
4541
  toggleClass(el, this.margin, rows[0] !== row);
4542
+ toggleClass(el, this.firstRow, rows[0] === row);
3986
4543
  toggleClass(el, this.firstColumn, row[isRtl ? row.length - 1 : 0] === el);
3987
4544
  }
3988
4545
  }
@@ -4055,7 +4612,8 @@
4055
4612
  parallaxJustify: Boolean
4056
4613
  },
4057
4614
  data: {
4058
- margin: "uk-grid-margin",
4615
+ margin: "",
4616
+ firstRow: "uk-first-row",
4059
4617
  clsStack: "uk-grid-stack",
4060
4618
  masonry: false,
4061
4619
  parallax: 0,
@@ -4077,14 +4635,14 @@
4077
4635
  {
4078
4636
  read(data) {
4079
4637
  const { rows } = data;
4080
- let { masonry, parallax, parallaxJustify, margin } = this;
4638
+ let { masonry, parallax, parallaxJustify } = this;
4081
4639
  parallax = Math.max(0, toPx(parallax));
4082
4640
  if (!(masonry || parallax || parallaxJustify) || positionedAbsolute(rows) || rows[0].some(
4083
4641
  (el, i) => rows.some((row) => row[i] && row[i].offsetWidth !== el.offsetWidth)
4084
4642
  )) {
4085
4643
  return data.translates = data.scrollColumns = false;
4086
4644
  }
4087
- let gutter = getGutter(rows, margin);
4645
+ let gutter = toFloat(css(this.$el, "row-gap"));
4088
4646
  let columns;
4089
4647
  let translates;
4090
4648
  if (masonry) {
@@ -4177,10 +4735,6 @@
4177
4735
  }
4178
4736
  return [columns, translates];
4179
4737
  }
4180
- function getGutter(rows, cls) {
4181
- const node = rows.flat().find((el) => hasClass(el, cls));
4182
- return toFloat(node ? css(node, "marginTop") : css(rows[0][0], "paddingLeft"));
4183
- }
4184
4738
  function transpose(rows) {
4185
4739
  const columns = [];
4186
4740
  for (const row of rows) {
@@ -4211,7 +4765,7 @@
4211
4765
  elements: ({ target }, $el) => $$(target, $el)
4212
4766
  },
4213
4767
  observe: resize({
4214
- target: ({ $el, elements }) => elements.reduce((elements2, el) => elements2.concat(el, ...el.children), [$el])
4768
+ target: ({ $el, elements }) => [$el, ...elements.flatMap((el) => [el, ...el.children])]
4215
4769
  }),
4216
4770
  events: {
4217
4771
  // Hidden elements may change height when fonts load
@@ -4252,7 +4806,7 @@
4252
4806
  css(element, "display", "block", "important");
4253
4807
  }
4254
4808
  css(element, "minHeight", "");
4255
- const height = dimensions(element).height - boxModelAdjust(element, "height", "content-box");
4809
+ const height = dimensions$1(element).height - boxModelAdjust(element, "height", "content-box");
4256
4810
  css(element, style);
4257
4811
  return height;
4258
4812
  }
@@ -4283,45 +4837,6 @@
4283
4837
  }
4284
4838
  };
4285
4839
 
4286
- var Media = {
4287
- props: {
4288
- media: Boolean
4289
- },
4290
- data: {
4291
- media: false
4292
- },
4293
- connected() {
4294
- const media = toMedia(this.media, this.$el);
4295
- this.matchMedia = true;
4296
- if (media) {
4297
- this.mediaObj = window.matchMedia(media);
4298
- const handler = () => {
4299
- this.matchMedia = this.mediaObj.matches;
4300
- trigger(this.$el, createEvent("mediachange", false, true, [this.mediaObj]));
4301
- };
4302
- this.offMediaObj = on(this.mediaObj, "change", () => {
4303
- handler();
4304
- this.$emit("resize");
4305
- });
4306
- handler();
4307
- }
4308
- },
4309
- disconnected() {
4310
- var _a;
4311
- (_a = this.offMediaObj) == null ? void 0 : _a.call(this);
4312
- }
4313
- };
4314
- function toMedia(value, element) {
4315
- if (isString(value)) {
4316
- if (startsWith(value, "@")) {
4317
- value = toFloat(css(element, `--uk-breakpoint-${value.slice(1)}`));
4318
- } else if (isNaN(value)) {
4319
- return value;
4320
- }
4321
- }
4322
- return value && isNumeric(value) ? `(min-width: ${value}px)` : "";
4323
- }
4324
-
4325
4840
  var heightViewport = {
4326
4841
  mixins: [Media],
4327
4842
  props: {
@@ -4360,7 +4875,7 @@
4360
4875
  const isScrollingElement = scrollingElement === scrollElement || body === scrollElement;
4361
4876
  let minHeight = `calc(${isScrollingElement ? "100vh" : `${viewportHeight}px`}`;
4362
4877
  if (this.expand) {
4363
- const diff = dimensions(scrollElement).height - dimensions(this.$el).height;
4878
+ const diff = dimensions$1(scrollElement).height - dimensions$1(this.$el).height;
4364
4879
  minHeight += ` - ${diff}px`;
4365
4880
  } else {
4366
4881
  if (this.offsetTop) {
@@ -4373,13 +4888,13 @@
4373
4888
  }
4374
4889
  }
4375
4890
  if (this.offsetBottom === true) {
4376
- minHeight += ` - ${dimensions(this.$el.nextElementSibling).height}px`;
4891
+ minHeight += ` - ${dimensions$1(this.$el.nextElementSibling).height}px`;
4377
4892
  } else if (isNumeric(this.offsetBottom)) {
4378
4893
  minHeight += ` - ${this.offsetBottom}vh`;
4379
4894
  } else if (this.offsetBottom && endsWith(this.offsetBottom, "px")) {
4380
4895
  minHeight += ` - ${toFloat(this.offsetBottom)}px`;
4381
4896
  } else if (isString(this.offsetBottom)) {
4382
- minHeight += ` - ${dimensions(query(this.offsetBottom, this.$el)).height}px`;
4897
+ minHeight += ` - ${dimensions$1(query(this.offsetBottom, this.$el)).height}px`;
4383
4898
  }
4384
4899
  }
4385
4900
  minHeight += `${box ? ` - ${box}px` : ""})`;
@@ -4931,8 +5446,8 @@
4931
5446
  }
4932
5447
  };
4933
5448
  function findTargetColor(target) {
4934
- const dim = dimensions(target);
4935
- const viewport = dimensions(window);
5449
+ const dim = dimensions$1(target);
5450
+ const viewport = dimensions$1(window);
4936
5451
  if (!intersectRect(dim, viewport)) {
4937
5452
  return false;
4938
5453
  }
@@ -5171,12 +5686,13 @@
5171
5686
  }
5172
5687
  }
5173
5688
  };
5689
+ const rejectKey = /* @__PURE__ */ Symbol();
5174
5690
  function animate(el, show, { transitionElement, _toggle }) {
5175
5691
  return new Promise(
5176
5692
  (resolve, reject) => once(el, "show hide", () => {
5177
5693
  var _a;
5178
- (_a = el._reject) == null ? void 0 : _a.call(el);
5179
- el._reject = reject;
5694
+ (_a = el[rejectKey]) == null ? void 0 : _a.call(el);
5695
+ el[rejectKey] = reject;
5180
5696
  _toggle(el, show);
5181
5697
  const off = once(
5182
5698
  transitionElement,
@@ -5197,7 +5713,7 @@
5197
5713
  toMs(css(transitionElement, "transitionDuration"))
5198
5714
  );
5199
5715
  })
5200
- ).then(() => delete el._reject);
5716
+ ).then(() => delete el[rejectKey]);
5201
5717
  }
5202
5718
  function toMs(time) {
5203
5719
  return time ? endsWith(time, "ms") ? toFloat(time) : toFloat(time) * 1e3 : 0;
@@ -5207,7 +5723,7 @@
5207
5723
  if (last(active) !== modal || modal.$el.contains(e.target)) {
5208
5724
  return;
5209
5725
  }
5210
- const { left, top, width, height } = dimensions(e.target);
5726
+ const { left, top, width, height } = dimensions$1(e.target);
5211
5727
  const topEl = document.elementFromPoint(left + width / 2, top + height / 2);
5212
5728
  if (topEl && (e.target.contains(topEl) || topEl.contains(e.target))) {
5213
5729
  return;
@@ -5585,7 +6101,7 @@
5585
6101
  return {
5586
6102
  max: Math.max(
5587
6103
  this.minHeight,
5588
- height(this.container) - (dimensions(this.content).height - height(this.$el))
6104
+ height(this.container) - (dimensions$1(this.content).height - height(this.$el))
5589
6105
  )
5590
6106
  };
5591
6107
  },
@@ -5628,11 +6144,11 @@
5628
6144
  ],
5629
6145
  update: {
5630
6146
  read() {
5631
- const overflow = [];
5632
- for (const prop of ["Width", "Height"]) {
5633
- overflow.push(this.$el[`scroll${prop}`] - this.$el[`client${prop}`]);
5634
- }
5635
- return { overflow };
6147
+ return {
6148
+ overflow: ["Width", "Height"].map(
6149
+ (prop) => this.$el[`scroll${prop}`] - this.$el[`client${prop}`]
6150
+ )
6151
+ };
5636
6152
  },
5637
6153
  write({ overflow }) {
5638
6154
  for (let i = 0; i < 2; i++) {
@@ -5910,7 +6426,7 @@
5910
6426
  if (scrollTop >= max) {
5911
6427
  active = length - 1;
5912
6428
  } else {
5913
- const offsetBy = this.offset + dimensions(getCoveringElement()).height + viewport.height * 0.1;
6429
+ const offsetBy = this.offset + dimensions$1(getCoveringElement()).height + viewport.height * 0.1;
5914
6430
  for (let i = 0; i < targets.length; i++) {
5915
6431
  if (offset(targets[i]).top - viewport.top - offsetBy > 0) {
5916
6432
  break;
@@ -6049,7 +6565,7 @@
6049
6565
  this.hide();
6050
6566
  }
6051
6567
  if (!this.active) {
6052
- ({ height: height$1, width } = dimensions(this.$el));
6568
+ ({ height: height$1, width } = dimensions$1(this.$el));
6053
6569
  margin = css(this.$el, "margin");
6054
6570
  }
6055
6571
  if (hide) {
@@ -6071,7 +6587,7 @@
6071
6587
  const overflow = this.overflowFlip ? 0 : Math.max(0, elementBox - viewport2);
6072
6588
  const topOffset = offset(referenceElement).top - // offset possible `transform: translateY` animation 'uk-animation-slide-top' while hiding
6073
6589
  new DOMMatrix(css(referenceElement, "transform")).m42;
6074
- const elHeight = dimensions(this.$el).height;
6590
+ const elHeight = dimensions$1(this.$el).height;
6075
6591
  const start = (this.start === false ? topOffset : parseProp(this.start, this.$el, topOffset)) - offset$1;
6076
6592
  const end = this.end === false ? maxScrollHeight : Math.min(
6077
6593
  maxScrollHeight,
@@ -6263,7 +6779,7 @@
6263
6779
  if (!value) {
6264
6780
  return 0;
6265
6781
  }
6266
- if (isNumeric(value) || isString(value) && value.match(/^-?\d/)) {
6782
+ if (isNumeric(value) || isString(value) && /^-?\d/.test(value)) {
6267
6783
  return propOffset + toPx(value, "height", el, true);
6268
6784
  } else {
6269
6785
  const refElement = value === true ? getVisibleParent(el) : query(value, el);
@@ -6297,15 +6813,6 @@
6297
6813
  }
6298
6814
  }
6299
6815
 
6300
- function getMaxPathLength(el) {
6301
- return isVisible(el) ? Math.ceil(
6302
- Math.max(0, ...$$("[stroke]", el).map((stroke) => {
6303
- var _a;
6304
- return ((_a = stroke.getTotalLength) == null ? void 0 : _a.call(stroke)) || 0;
6305
- }))
6306
- ) : 0;
6307
- }
6308
-
6309
6816
  var svg = {
6310
6817
  mixins: [Svg],
6311
6818
  args: "src",
@@ -6387,10 +6894,9 @@
6387
6894
 
6388
6895
  const selDisabled = ".uk-disabled *, .uk-disabled, [disabled]";
6389
6896
  var Switcher = {
6390
- mixins: [Togglable],
6897
+ mixins: [Connect],
6391
6898
  args: "connect",
6392
6899
  props: {
6393
- connect: String,
6394
6900
  toggle: String,
6395
6901
  itemNav: String,
6396
6902
  active: Number,
@@ -6402,20 +6908,12 @@
6402
6908
  toggle: "> * > :first-child",
6403
6909
  itemNav: false,
6404
6910
  active: 0,
6405
- cls: "uk-active",
6406
6911
  attrItem: "uk-switcher-item",
6407
6912
  selVertical: ".uk-nav",
6408
6913
  followFocus: false,
6409
6914
  swiping: true
6410
6915
  },
6411
6916
  computed: {
6412
- connects: {
6413
- get: ({ connect }, $el) => queryAll(connect, $el),
6414
- observe: ({ connect }) => connect
6415
- },
6416
- connectChildren() {
6417
- return this.connects.map((el) => children(el)).flat();
6418
- },
6419
6917
  toggles: ({ toggle }, $el) => $$(toggle, $el),
6420
6918
  children(_, $el) {
6421
6919
  return children($el).filter(
@@ -6446,10 +6944,7 @@
6446
6944
  connected() {
6447
6945
  this.$el.role = "tablist";
6448
6946
  },
6449
- observe: [
6450
- lazyload({ targets: ({ connectChildren }) => connectChildren }),
6451
- swipe({ target: ({ connects }) => connects, filter: ({ swiping }) => swiping })
6452
- ],
6947
+ observe: swipe({ target: ({ connects }) => connects, filter: ({ swiping }) => swiping }),
6453
6948
  events: [
6454
6949
  {
6455
6950
  name: "click keydown",
@@ -6499,24 +6994,27 @@
6499
6994
  }
6500
6995
  ],
6501
6996
  update() {
6502
- var _a;
6503
- for (const el of this.connects) {
6504
- if (isTag(el, "ul")) {
6505
- el.role = "presentation";
6506
- }
6507
- }
6508
6997
  attr(children(this.$el), "role", "presentation");
6509
6998
  for (const index in this.toggles) {
6510
6999
  const toggle = this.toggles[index];
6511
- const item = (_a = this.connects[0]) == null ? void 0 : _a.children[index];
6512
- toggle.role = "tab";
6513
- if (!item) {
6514
- continue;
6515
- }
6516
7000
  toggle.id = generateId(this, toggle);
6517
- item.id = generateId(this, item);
6518
- toggle.ariaControls = item.id;
6519
- attr(item, { role: "tabpanel", "aria-labelledby": toggle.id });
7001
+ const controls = [];
7002
+ for (const { children: children2 } of this.connects) {
7003
+ const item = children2[index];
7004
+ if (!item) {
7005
+ continue;
7006
+ }
7007
+ attr(item, {
7008
+ id: generateId(this, item),
7009
+ role: "tabpanel",
7010
+ "aria-labelledby": toggle.id
7011
+ });
7012
+ controls.push(item.id);
7013
+ }
7014
+ attr(toggle, {
7015
+ role: "tab",
7016
+ "aria-controls": controls.join(" ")
7017
+ });
6520
7018
  }
6521
7019
  attr(this.$el, "aria-orientation", matches(this.$el, this.selVertical) ? "vertical" : null);
6522
7020
  },
@@ -6549,15 +7047,7 @@
6549
7047
  tabindex: next === i ? null : -1
6550
7048
  });
6551
7049
  });
6552
- const animate = prev >= 0 && prev !== next;
6553
- this.connects.forEach(async ({ children: children2 }) => {
6554
- const actives = toArray(children2).filter(
6555
- (child, i) => i !== next && hasClass(child, this.cls)
6556
- );
6557
- if (await this.toggleElement(actives, false, animate)) {
6558
- await this.toggleElement(children2[next], true, animate);
6559
- }
6560
- });
7050
+ return this.showConnects(next, prev >= 0 && prev !== next);
6561
7051
  }
6562
7052
  }
6563
7053
  };