uikit 3.25.20-dev.e4f47fc → 3.25.20

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 (201) hide show
  1. package/CHANGELOG.md +2 -33
  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 +917 -1045
  7. package/dist/css/uikit-core-rtl.min.css +1 -1
  8. package/dist/css/uikit-core.css +917 -1045
  9. package/dist/css/uikit-core.min.css +1 -1
  10. package/dist/css/uikit-rtl.css +936 -1064
  11. package/dist/css/uikit-rtl.min.css +1 -1
  12. package/dist/css/uikit.css +936 -1064
  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 +132 -133
  19. package/dist/js/components/lightbox-panel.min.js +1 -1
  20. package/dist/js/components/lightbox.js +133 -134
  21. package/dist/js/components/lightbox.min.js +1 -1
  22. package/dist/js/components/notification.js +1 -1
  23. package/dist/js/components/notification.min.js +1 -1
  24. package/dist/js/components/parallax.js +12 -8
  25. package/dist/js/components/parallax.min.js +1 -1
  26. package/dist/js/components/slider-parallax.js +12 -8
  27. package/dist/js/components/slider-parallax.min.js +1 -1
  28. package/dist/js/components/slider.js +25 -41
  29. package/dist/js/components/slider.min.js +1 -1
  30. package/dist/js/components/slideshow-parallax.js +12 -8
  31. package/dist/js/components/slideshow-parallax.min.js +1 -1
  32. package/dist/js/components/slideshow.js +102 -71
  33. package/dist/js/components/slideshow.min.js +1 -1
  34. package/dist/js/components/sortable.js +1 -1
  35. package/dist/js/components/sortable.min.js +1 -1
  36. package/dist/js/components/tooltip.js +19 -19
  37. package/dist/js/components/tooltip.min.js +1 -1
  38. package/dist/js/components/upload.js +1 -1
  39. package/dist/js/components/upload.min.js +1 -1
  40. package/dist/js/uikit-core.js +262 -752
  41. package/dist/js/uikit-core.min.js +1 -1
  42. package/dist/js/uikit-icons.js +1 -1
  43. package/dist/js/uikit-icons.min.js +1 -1
  44. package/dist/js/uikit.js +374 -627
  45. package/dist/js/uikit.min.js +1 -1
  46. package/package.json +1 -1
  47. package/src/js/api/component.js +3 -2
  48. package/src/js/api/observables.js +4 -2
  49. package/src/js/api/options.js +3 -6
  50. package/src/js/api/props.js +4 -1
  51. package/src/js/api/state.js +8 -7
  52. package/src/js/components/index.js +0 -1
  53. package/src/js/components/internal/lightbox-animations.js +26 -7
  54. package/src/js/components/internal/slideshow-animations.js +62 -15
  55. package/src/js/components/lightbox-panel.js +96 -121
  56. package/src/js/components/lightbox.js +8 -5
  57. package/src/js/components/tooltip.js +2 -4
  58. package/src/js/core/accordion.js +29 -78
  59. package/src/js/core/drop.js +4 -5
  60. package/src/js/core/dropnav.js +3 -3
  61. package/src/js/core/grid.js +19 -5
  62. package/src/js/core/height-match.js +2 -1
  63. package/src/js/core/margin.js +0 -3
  64. package/src/js/core/overflow-fade.js +5 -5
  65. package/src/js/core/sticky.js +1 -1
  66. package/src/js/core/switcher.js +44 -24
  67. package/src/js/core/video.js +15 -172
  68. package/src/js/mixin/internal/slideshow-animations.js +13 -5
  69. package/src/js/mixin/internal/slideshow-transitioner.js +2 -2
  70. package/src/js/mixin/modal.js +3 -4
  71. package/src/js/mixin/parallax.js +4 -1
  72. package/src/js/mixin/position.js +1 -1
  73. package/src/js/mixin/slider-nav.js +1 -1
  74. package/src/js/mixin/slider-parallax.js +38 -9
  75. package/src/js/mixin/togglable.js +14 -13
  76. package/src/js/util/attr.js +7 -7
  77. package/src/js/util/class.js +1 -1
  78. package/src/js/util/dom.js +4 -3
  79. package/src/js/util/lang.js +1 -1
  80. package/src/js/util/player.js +4 -4
  81. package/src/js/util/style.js +15 -10
  82. package/src/js/util/viewport.js +25 -22
  83. package/src/less/components/_import.less +1 -6
  84. package/src/less/components/base.less +1 -1
  85. package/src/less/components/button.less +1 -1
  86. package/src/less/components/form.less +5 -5
  87. package/src/less/components/grid.less +65 -58
  88. package/src/less/components/margin.less +124 -155
  89. package/src/less/components/nav.less +1 -1
  90. package/src/less/components/padding.less +9 -9
  91. package/src/less/components/text.less +0 -6
  92. package/src/less/components/utility.less +163 -0
  93. package/src/less/theme/_import.less +1 -5
  94. package/src/less/theme/utility.less +32 -0
  95. package/src/scss/components/_import.scss +1 -6
  96. package/src/scss/components/base.scss +1 -1
  97. package/src/scss/components/button.scss +1 -1
  98. package/src/scss/components/form.scss +5 -5
  99. package/src/scss/components/grid.scss +64 -57
  100. package/src/scss/components/margin.scss +124 -155
  101. package/src/scss/components/nav.scss +1 -1
  102. package/src/scss/components/padding.scss +9 -9
  103. package/src/scss/components/text.scss +0 -6
  104. package/src/scss/components/utility.scss +129 -0
  105. package/src/scss/mixins-theme.scss +33 -42
  106. package/src/scss/mixins.scss +30 -39
  107. package/src/scss/variables-theme.scss +14 -14
  108. package/src/scss/variables.scss +14 -14
  109. package/tests/accordion.html +10 -77
  110. package/tests/alert.html +1 -1
  111. package/tests/align.html +5 -5
  112. package/tests/animation.html +4 -4
  113. package/tests/article.html +7 -7
  114. package/tests/background.html +2 -2
  115. package/tests/badge.html +1 -1
  116. package/tests/base.html +3 -3
  117. package/tests/button.html +1 -1
  118. package/tests/card.html +15 -15
  119. package/tests/close.html +2 -2
  120. package/tests/comment.html +9 -9
  121. package/tests/container.html +2 -2
  122. package/tests/countdown.html +21 -21
  123. package/tests/cover.html +6 -6
  124. package/tests/description-list.html +1 -1
  125. package/tests/divider.html +3 -3
  126. package/tests/dotnav.html +1 -1
  127. package/tests/drop.html +7 -7
  128. package/tests/dropbar.html +5 -5
  129. package/tests/dropdown.html +1 -1
  130. package/tests/dropnav.html +18 -18
  131. package/tests/filter.html +3 -3
  132. package/tests/form.html +14 -14
  133. package/tests/grid.html +47 -41
  134. package/tests/heading.html +2 -2
  135. package/tests/height-viewport.html +4 -4
  136. package/tests/height.html +5 -5
  137. package/tests/icon.html +8 -8
  138. package/tests/image.html +6 -6
  139. package/tests/index.html +13 -13
  140. package/tests/js/index.js +1 -1
  141. package/tests/leader.html +5 -5
  142. package/tests/lightbox.html +14 -14
  143. package/tests/link.html +1 -1
  144. package/tests/list.html +4 -4
  145. package/tests/margin.html +7 -7
  146. package/tests/marker.html +3 -3
  147. package/tests/modal.html +4 -4
  148. package/tests/nav.html +5 -5
  149. package/tests/navbar.html +27 -27
  150. package/tests/notification.html +2 -2
  151. package/tests/offcanvas.html +12 -12
  152. package/tests/overlay.html +3 -3
  153. package/tests/padding.html +1 -1
  154. package/tests/pagination.html +3 -3
  155. package/tests/parallax.html +1 -1
  156. package/tests/position.html +6 -6
  157. package/tests/scrollspy.html +12 -12
  158. package/tests/search.html +5 -5
  159. package/tests/section.html +17 -17
  160. package/tests/slidenav.html +3 -3
  161. package/tests/slider.html +5 -5
  162. package/tests/slideshow.html +4 -34
  163. package/tests/sortable.html +15 -15
  164. package/tests/sticky-navbar.html +4 -4
  165. package/tests/sticky-parallax.html +3 -3
  166. package/tests/sticky.html +3 -3
  167. package/tests/svg.html +2 -3
  168. package/tests/switcher.html +6 -6
  169. package/tests/tab.html +4 -4
  170. package/tests/text.html +3 -3
  171. package/tests/tile.html +4 -4
  172. package/tests/toggle.html +1 -1
  173. package/tests/tooltip.html +3 -3
  174. package/tests/totop.html +2 -2
  175. package/tests/transition.html +1 -1
  176. package/tests/upload.html +5 -5
  177. package/tests/utility.html +116 -16
  178. package/tests/video.html +27 -227
  179. package/tests/visibility.html +4 -4
  180. package/tests/width.html +12 -12
  181. package/dist/js/components/marquee.js +0 -179
  182. package/dist/js/components/marquee.min.js +0 -1
  183. package/src/js/components/marquee.js +0 -123
  184. package/src/js/mixin/connect.js +0 -55
  185. package/src/js/mixin/scroll-driven.js +0 -57
  186. package/src/less/components/dropcap.less +0 -71
  187. package/src/less/components/floating-shadow.less +0 -66
  188. package/src/less/components/logo.less +0 -94
  189. package/src/less/components/marquee.less +0 -133
  190. package/src/less/theme/dropcap.less +0 -29
  191. package/src/less/theme/floating-shadow.less +0 -20
  192. package/src/less/theme/logo.less +0 -29
  193. package/src/less/theme/marquee.less +0 -14
  194. package/src/scss/components/dropcap.scss +0 -63
  195. package/src/scss/components/floating-shadow.scss +0 -63
  196. package/src/scss/components/logo.scss +0 -75
  197. package/src/scss/components/marquee.scss +0 -136
  198. package/tests/dropcap.html +0 -26
  199. package/tests/floating-shadow.html +0 -44
  200. package/tests/logo.html +0 -84
  201. package/tests/marquee.html +0 -617
@@ -1,4 +1,4 @@
1
- /*! UIkit 3.25.20-dev.e4f47fc | https://www.getuikit.com | (c) 2014 - 2026 YOOtheme | MIT License */
1
+ /*! UIkit 3.25.20 | 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 Object.fromEntries(props.map((key) => [key, obj[key]]));
137
+ return props.reduce((res, prop) => ({ ...res, [prop]: obj[prop] }), {});
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.flatMap(toClasses) : String(str).split(" ").filter(Boolean) : [];
233
+ return str ? isArray(str) ? str.map(toClasses).flat() : String(str).split(" ").filter(Boolean) : [];
234
234
  }
235
235
 
236
236
  function attr(element, name, value) {
@@ -243,12 +243,13 @@
243
243
  }
244
244
  if (isUndefined(value)) {
245
245
  return (_a = toNode(element)) == null ? void 0 : _a.getAttribute(name);
246
- }
247
- for (const el of toNodes(element)) {
248
- if (value === null) {
249
- removeAttr(el, name);
250
- } else {
251
- el.setAttribute(name, value);
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
+ }
252
253
  }
253
254
  }
254
255
  }
@@ -588,14 +589,19 @@
588
589
  property = propName(property);
589
590
  if (isUndefined(value)) {
590
591
  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
+ );
591
598
  }
592
- element2.style.setProperty(
593
- property,
594
- isNumeric(value) && !cssNumber[property] && !isCustomProperty(property) ? `${value}px` : value || isNumber(value) ? value : "",
595
- priority
596
- );
597
599
  } else if (isArray(property)) {
598
- return Object.fromEntries(property.map((prop) => [prop, css(element2, prop)]));
600
+ const props = {};
601
+ for (const prop of property) {
602
+ props[prop] = css(element2, prop);
603
+ }
604
+ return props;
599
605
  } else if (isObject(property)) {
600
606
  for (const prop in property) {
601
607
  css(element2, prop, property[prop], value);
@@ -779,9 +785,7 @@
779
785
  );
780
786
  }
781
787
  function unwrap(element) {
782
- for (const elementParent of new Set(toNodes(element).map(parent))) {
783
- elementParent.replaceWith(...elementParent.childNodes);
784
- }
788
+ toNodes(element).map(parent).filter((value, index, self) => self.indexOf(value) === index).forEach((parent2) => parent2.replaceWith(...parent2.childNodes));
785
789
  }
786
790
  const singleTagRe = /^<(\w+)\s*\/?>(?:<\/\1>)?$/;
787
791
  function fragment(html2) {
@@ -821,7 +825,7 @@
821
825
  width: ["left", "right"],
822
826
  height: ["top", "bottom"]
823
827
  };
824
- function dimensions$1(element) {
828
+ function dimensions(element) {
825
829
  const rect = isElement(element) ? toNode(element).getBoundingClientRect() : { height: height(element), width: width(element), top: 0, left: 0 };
826
830
  return {
827
831
  height: rect.height,
@@ -836,7 +840,7 @@
836
840
  if (coordinates) {
837
841
  css(element, { left: 0, top: 0 });
838
842
  }
839
- const currentOffset = dimensions$1(element);
843
+ const currentOffset = dimensions(element);
840
844
  if (element) {
841
845
  const { scrollY, scrollX } = toWindow(element);
842
846
  const offsetBy = { height: scrollY, width: scrollX };
@@ -937,15 +941,15 @@
937
941
  return sumBy(parseCalc(value), (value2) => {
938
942
  const unit = parseUnit(value2);
939
943
  return unit ? percent(
940
- unit === "vh" ? getViewportHeight() : unit === "vw" ? width(toWindow(element)) : offsetDim ? element[`offset${ucfirst(property)}`] : dimensions$1(element)[property],
944
+ unit === "vh" ? getViewportHeight() : unit === "vw" ? width(toWindow(element)) : offsetDim ? element[`offset${ucfirst(property)}`] : dimensions(element)[property],
941
945
  value2
942
946
  ) : value2;
943
947
  });
944
948
  }
945
949
  const calcRe = /-?\d+(?:\.\d+)?(?:v[wh]|%|px)?/g;
946
950
  const parseCalc = memoize((calc) => calc.toString().replace(/\s/g, "").match(calcRe) || []);
947
- const unitRe$1 = /(?:v[hw]|%)$/;
948
- const parseUnit = memoize((str) => (str.match(unitRe$1) || [])[0]);
951
+ const unitRe = /(?:v[hw]|%)$/;
952
+ const parseUnit = memoize((str) => (str.match(unitRe) || [])[0]);
949
953
  function percent(base, value) {
950
954
  return base * toFloat(value) / 100;
951
955
  }
@@ -1040,7 +1044,7 @@
1040
1044
  if (!this.positions || this.positions.length < 2) {
1041
1045
  return false;
1042
1046
  }
1043
- const p = dimensions$1(target);
1047
+ const p = dimensions(target);
1044
1048
  const { left, right, top, bottom } = p;
1045
1049
  const [prevPosition] = this.positions;
1046
1050
  const position = last(this.positions);
@@ -1143,12 +1147,12 @@
1143
1147
  return isTag(el, "iframe") && (isYoutube(el) || isVimeo(el));
1144
1148
  }
1145
1149
  function isYoutube(el) {
1146
- return /\/\/.*?youtube(-nocookie)?\.[a-z]+\/(watch\?v=[^&\s]+|embed)|youtu\.be\/.*/.test(
1147
- el.src
1150
+ return !!el.src.match(
1151
+ /\/\/.*?youtube(-nocookie)?\.[a-z]+\/(watch\?v=[^&\s]+|embed)|youtu\.be\/.*/
1148
1152
  );
1149
1153
  }
1150
1154
  function isVimeo(el) {
1151
- return /vimeo\.com\/video\/.*/.test(el.src);
1155
+ return !!el.src.match(/vimeo\.com\/video\/.*/);
1152
1156
  }
1153
1157
  async function call(el, cmd) {
1154
1158
  await enableApi(el);
@@ -1157,7 +1161,7 @@
1157
1161
  function post(el, cmd) {
1158
1162
  el.contentWindow.postMessage(JSON.stringify({ event: "command", ...cmd }), "*");
1159
1163
  }
1160
- const stateKey = /* @__PURE__ */ Symbol();
1164
+ const stateKey = "_ukPlayer";
1161
1165
  let counter = 0;
1162
1166
  function enableApi(el) {
1163
1167
  if (el[stateKey]) {
@@ -1188,16 +1192,17 @@
1188
1192
  if (!isVisible(element)) {
1189
1193
  return false;
1190
1194
  }
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));
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
+ );
1201
1206
  }
1202
1207
  function scrollIntoView(element, { offset: offsetBy = 0 } = {}) {
1203
1208
  const parents2 = isVisible(element) ? scrollParents(element, false, ["hidden"]) : [];
@@ -1237,7 +1242,7 @@
1237
1242
  const percent = ease(clamp((Date.now() - start) / duration));
1238
1243
  let diff = 0;
1239
1244
  if (parents2[0] === element2 && scroll + top < maxScroll) {
1240
- diff = offset(targetEl).top + (isScrollingElement ? 0 : element2.scrollTop) - targetTop - dimensions$1(getCoveringElement(targetEl)).height;
1245
+ diff = offset(targetEl).top + (isScrollingElement ? 0 : element2.scrollTop) - targetTop - dimensions(getCoveringElement(targetEl)).height;
1241
1246
  }
1242
1247
  if (css(element2, "scrollBehavior") !== "auto") {
1243
1248
  css(element2, "scrollBehavior", "auto");
@@ -1281,12 +1286,11 @@
1281
1286
  if (~fixedIndex) {
1282
1287
  ancestors = ancestors.slice(fixedIndex);
1283
1288
  }
1284
- return [
1285
- scrollEl,
1286
- ...ancestors.filter(
1289
+ return [scrollEl].concat(
1290
+ ancestors.filter(
1287
1291
  (parent2) => css(parent2, "overflow").split(" ").some((prop) => includes(["auto", "scroll", ...props], prop)) && (!scrollable || parent2.scrollHeight > offsetViewport(parent2).height)
1288
1292
  )
1289
- ].reverse();
1293
+ ).reverse();
1290
1294
  }
1291
1295
  function scrollParent(...args) {
1292
1296
  return scrollParents(...args)[0];
@@ -1325,7 +1329,7 @@
1325
1329
  function getCoveringElement(target) {
1326
1330
  const { document } = toWindow(target);
1327
1331
  target = target || document.body;
1328
- const { left, width, top } = dimensions$1(target);
1332
+ const { left, width, top } = dimensions(target);
1329
1333
  for (const position of top ? [0, top] : [0]) {
1330
1334
  let coverEl;
1331
1335
  for (const el of document.elementsFromPoint(left + width / 2, position)) {
@@ -1334,7 +1338,7 @@
1334
1338
  parents(target).reverse().find(
1335
1339
  (parent2) => !parent2.contains(el) && !hasPosition(parent2, "static")
1336
1340
  )
1337
- ) < zIndex(el) || hasPosition(el, "sticky") && (!target || parent(el).contains(target))) && (!coverEl || dimensions$1(coverEl).height < dimensions$1(el).height)) {
1341
+ ) < zIndex(el) || hasPosition(el, "sticky") && (!target || parent(el).contains(target))) && (!coverEl || dimensions(coverEl).height < dimensions(el).height)) {
1338
1342
  coverEl = el;
1339
1343
  }
1340
1344
  }
@@ -1555,7 +1559,7 @@
1555
1559
  createEvent: createEvent,
1556
1560
  css: css,
1557
1561
  data: data,
1558
- dimensions: dimensions$1,
1562
+ dimensions: dimensions,
1559
1563
  each: each,
1560
1564
  empty: empty,
1561
1565
  endsWith: endsWith,
@@ -1675,7 +1679,7 @@
1675
1679
  wrapInner: wrapInner
1676
1680
  });
1677
1681
 
1678
- var VERSION = '3.25.20-dev.e4f47fc';
1682
+ var VERSION = '3.25.20';
1679
1683
 
1680
1684
  function initUpdates(instance) {
1681
1685
  instance._data = {};
@@ -1988,14 +1992,11 @@
1988
1992
  function coerce$1(type, value) {
1989
1993
  if (type === Boolean) {
1990
1994
  return toBoolean(value);
1991
- }
1992
- if (type === Number) {
1995
+ } else if (type === Number) {
1993
1996
  return toNumber(value);
1994
- }
1995
- if (type === "list") {
1997
+ } else if (type === "list") {
1996
1998
  return toList(value);
1997
- }
1998
- if (type === Object && isString(value)) {
1999
+ } else if (type === Object && isString(value)) {
1999
2000
  return parseOptions(value);
2000
2001
  }
2001
2002
  return type ? type(value) : value;
@@ -2045,7 +2046,7 @@
2045
2046
  }
2046
2047
  const getAttributes = memoize((id, props) => {
2047
2048
  const attributes = Object.keys(props);
2048
- const filter = [...attributes, id].flatMap((key) => [hyphenate(key), `data-${hyphenate(key)}`]);
2049
+ const filter = attributes.concat(id).map((key) => [hyphenate(key), `data-${hyphenate(key)}`]).flat();
2049
2050
  return { attributes, filter };
2050
2051
  });
2051
2052
  function initPropsObserver(instance) {
@@ -2135,10 +2136,14 @@
2135
2136
  }
2136
2137
  function normalizeData({ data = {} }, { args = [], props = {} }) {
2137
2138
  if (isArray(data)) {
2138
- data = data.slice(0, args.length).reduce(
2139
- (data2, value, index) => assign(data2, isPlainObject(value) ? value : { [args[index]]: value }),
2140
- {}
2141
- );
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
+ }, {});
2142
2147
  }
2143
2148
  for (const key in data) {
2144
2149
  if (isUndefined(data[key])) {
@@ -2186,10 +2191,11 @@
2186
2191
  function init(element2) {
2187
2192
  const instance = getComponent(element2, name);
2188
2193
  if (instance) {
2189
- if (!data) {
2194
+ if (data) {
2195
+ instance.$destroy();
2196
+ } else {
2190
2197
  return instance;
2191
2198
  }
2192
- instance.$destroy();
2193
2199
  }
2194
2200
  return new Component({ el: element2, data });
2195
2201
  }
@@ -2405,8 +2411,8 @@
2405
2411
  for (const el of toNodes(isFunction(targets) ? targets(this) : targets)) {
2406
2412
  $$('[loading="lazy"]', el).slice(0, preload - 1).forEach((el2) => removeAttr(el2, "loading"));
2407
2413
  }
2408
- for (const { target } of entries.filter(({ isIntersecting }) => isIntersecting)) {
2409
- observer.unobserve(target);
2414
+ for (const el of entries.filter(({ isIntersecting }) => isIntersecting).map(({ target }) => target)) {
2415
+ observer.unobserve(el);
2410
2416
  }
2411
2417
  },
2412
2418
  ...options
@@ -2484,6 +2490,12 @@
2484
2490
  }
2485
2491
  };
2486
2492
 
2493
+ function maybeDefaultPreventClick(e) {
2494
+ if (e.target.closest('a[href="#"],a[href=""]')) {
2495
+ e.preventDefault();
2496
+ }
2497
+ }
2498
+
2487
2499
  var Togglable = {
2488
2500
  props: {
2489
2501
  cls: Boolean,
@@ -2576,25 +2588,27 @@
2576
2588
  const dimProp = props[dirs.indexOf(dir)];
2577
2589
  const marginProp = `margin-${dir[0]}`;
2578
2590
  const marginStartProp = `margin-${startProp}`;
2579
- let currentDim = dimensions$1(el)[dimProp];
2591
+ let currentDim = dimensions(el)[dimProp];
2580
2592
  const inProgress = Transition.inProgress(el);
2581
2593
  await Transition.cancel(el);
2582
2594
  if (show) {
2583
2595
  _toggle(el, true);
2584
2596
  }
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);
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);
2598
2612
  const currentMargin = toFloat(css(el, marginProp));
2599
2613
  const marginStart = toFloat(css(el, marginStartProp));
2600
2614
  const endDim = dim[dimProp] + marginStart;
@@ -2660,55 +2674,6 @@
2660
2674
  );
2661
2675
  }
2662
2676
 
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
-
2712
2677
  const keyMap = {
2713
2678
  TAB: 9,
2714
2679
  ENTER: 13,
@@ -2723,32 +2688,27 @@
2723
2688
  };
2724
2689
 
2725
2690
  var Accordion = {
2726
- mixins: [Class, Connect],
2691
+ mixins: [Class, Togglable],
2727
2692
  props: {
2693
+ animation: Boolean,
2728
2694
  targets: String,
2729
2695
  active: null,
2730
2696
  collapsible: Boolean,
2731
2697
  multiple: Boolean,
2732
2698
  toggle: String,
2733
2699
  content: String,
2734
- offset: Number,
2735
- switcherConnect: String
2700
+ offset: Number
2736
2701
  },
2737
2702
  data: {
2738
2703
  targets: "> *",
2739
2704
  active: false,
2740
- animation: [true],
2705
+ animation: true,
2741
2706
  collapsible: true,
2742
2707
  multiple: false,
2743
2708
  clsOpen: "uk-open",
2744
- cls: "uk-active",
2745
2709
  toggle: ".uk-accordion-title",
2746
2710
  content: ".uk-accordion-content",
2747
- offset: 0,
2748
- switcherConnect: ""
2749
- },
2750
- beforeConnect() {
2751
- this.connect = this.$props.connect = this.switcherConnect;
2711
+ offset: 0
2752
2712
  },
2753
2713
  computed: {
2754
2714
  items: ({ targets }, $el) => $$(targets, $el),
@@ -2772,12 +2732,6 @@
2772
2732
  this.toggle(active, false);
2773
2733
  }
2774
2734
  },
2775
- connectChildren() {
2776
- this.showConnects(
2777
- findIndex(this.items, (el) => hasClass(el, this.clsOpen)),
2778
- false
2779
- );
2780
- },
2781
2735
  toggles() {
2782
2736
  this.$emit();
2783
2737
  },
@@ -2828,66 +2782,43 @@
2828
2782
  continue;
2829
2783
  }
2830
2784
  toggle.id = generateId(this, toggle);
2785
+ content.id = generateId(this, content);
2831
2786
  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
- }
2853
2787
  attr(toggle, {
2854
2788
  role: isTag(toggle, "a") ? "button" : null,
2855
- "aria-controls": controls.join(" "),
2789
+ "aria-controls": content.id,
2856
2790
  "aria-expanded": active,
2857
2791
  "aria-disabled": !this.collapsible && activeItems.length < 2 && active
2858
2792
  });
2793
+ attr(content, { role: "region", "aria-labelledby": toggle.id });
2794
+ if (isTag(content, "ul")) {
2795
+ attr(children(content), "role", "presentation");
2796
+ }
2859
2797
  }
2860
2798
  },
2861
2799
  methods: {
2862
- async toggle(item, animate) {
2863
- animate = animate !== false;
2864
- const next = getIndex(item, this.items);
2865
- item = this.items[next];
2800
+ toggle(item, animate) {
2801
+ item = this.items[getIndex(item, this.items)];
2866
2802
  let items = [item];
2867
2803
  const activeItems = filter(this.items, `.${this.clsOpen}`);
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
- ]);
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
+ );
2891
2822
  }
2892
2823
  }
2893
2824
  };
@@ -2905,7 +2836,7 @@
2905
2836
  const currentHeight = toFloat(css(wrapper, "height"));
2906
2837
  await Transition.cancel(wrapper);
2907
2838
  hide(content, false);
2908
- const endHeight = sumBy(["marginTop", "marginBottom"], (prop) => css(content, prop)) + dimensions$1(content).height;
2839
+ const endHeight = sumBy(["marginTop", "marginBottom"], (prop) => css(content, prop)) + dimensions(content).height;
2909
2840
  const percent = currentHeight / endHeight;
2910
2841
  duration = endHeight ? (velocity * endHeight + duration) * (show ? 1 - percent : percent) : 0;
2911
2842
  css(wrapper, "height", currentHeight);
@@ -2921,7 +2852,7 @@
2921
2852
  let frame;
2922
2853
  (function scroll() {
2923
2854
  frame = requestAnimationFrame(() => {
2924
- const { top } = dimensions$1(el);
2855
+ const { top } = dimensions(el);
2925
2856
  if (top < 0) {
2926
2857
  scrollElement.scrollTop += top;
2927
2858
  }
@@ -2978,395 +2909,22 @@
2978
2909
  );
2979
2910
  }
2980
2911
 
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();
3337
2912
  var Video = {
3338
- mixins: [ScrollDriven],
3339
2913
  args: "autoplay",
3340
2914
  props: {
3341
2915
  automute: Boolean,
3342
2916
  autoplay: Boolean,
3343
2917
  restart: Boolean,
3344
- inviewMargin: String,
3345
- inviewQueued: Number,
3346
- hoverTarget: Boolean,
3347
- hoverRewind: Number,
3348
- reducedMotionTime: Number
2918
+ hoverTarget: Boolean
3349
2919
  },
3350
2920
  data: {
3351
2921
  automute: false,
3352
2922
  autoplay: true,
3353
2923
  restart: false,
3354
- inviewMargin: "0px",
3355
- inviewQueued: 0,
3356
- hoverTarget: false,
3357
- hoverRewind: 0,
3358
- reducedMotionTime: 0
2924
+ hoverTarget: false
3359
2925
  },
3360
2926
  beforeConnect() {
3361
2927
  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
- }
3370
2928
  if (this.autoplay === "inview" && isVideo && !hasAttr(this.$el, "preload")) {
3371
2929
  this.$el.preload = "none";
3372
2930
  }
@@ -3375,10 +2933,7 @@
3375
2933
  }
3376
2934
  if (this.autoplay === "hover") {
3377
2935
  if (isVideo) {
3378
- this.hoverTarget = query(this.hoverTarget, this.$el) || this.$el;
3379
- if (!isFocusable(this.hoverTarget)) {
3380
- this.hoverTarget.tabIndex = 0;
3381
- }
2936
+ this.$el.tabIndex = 0;
3382
2937
  } else {
3383
2938
  this.autoplay = true;
3384
2939
  }
@@ -3387,49 +2942,28 @@
3387
2942
  mute(this.$el);
3388
2943
  }
3389
2944
  },
3390
- disconnected() {
3391
- if (this.$el[loopKey]) {
3392
- this.$el.loop = true;
3393
- }
3394
- queue.delete(this.$el);
3395
- },
3396
2945
  events: [
3397
2946
  {
3398
2947
  name: `${pointerEnter} focusin`,
3399
- el: ({ hoverTarget }) => hoverTarget,
2948
+ el: ({ hoverTarget, $el }) => query(hoverTarget, $el) || $el,
3400
2949
  filter: ({ autoplay }) => autoplay === "hover",
3401
2950
  handler(e) {
3402
- var _a;
3403
- (_a = this._reverseAbort) == null ? void 0 : _a.abort();
3404
2951
  if (!isTouch(e) || !isPlaying(this.$el)) {
3405
- this.play();
2952
+ play(this.$el);
3406
2953
  } else {
3407
- this.pause();
2954
+ pauseHover(this.$el, this.restart);
3408
2955
  }
3409
2956
  }
3410
2957
  },
3411
2958
  {
3412
2959
  name: `${pointerLeave} focusout`,
3413
- el: ({ hoverTarget }) => hoverTarget,
2960
+ el: ({ hoverTarget, $el }) => query(hoverTarget, $el) || $el,
3414
2961
  filter: ({ autoplay }) => autoplay === "hover",
3415
2962
  handler(e) {
3416
- var _a;
3417
2963
  if (!isTouch(e)) {
3418
- (_a = this._reverseAbort) == null ? void 0 : _a.abort();
3419
- this.pause();
3420
- this._reverseAbort = playReverse(this.$el, this.hoverRewind);
2964
+ pauseHover(this.$el, this.restart);
3421
2965
  }
3422
2966
  }
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
- }
3433
2967
  }
3434
2968
  ],
3435
2969
  observe: [
@@ -3441,118 +2975,33 @@
3441
2975
  }
3442
2976
  }),
3443
2977
  intersection({
3444
- filter: ({ $el, manualControl }) => !manualControl && $el.preload !== "none",
3445
- handler([{ isIntersecting }]) {
2978
+ filter: ({ $el, autoplay }) => autoplay !== "hover" && $el.preload !== "none",
2979
+ handler([{ isIntersecting, target }]) {
3446
2980
  if (!document.fullscreenElement) {
3447
2981
  if (isIntersecting) {
3448
2982
  if (this.autoplay) {
3449
- this._autoplay();
2983
+ play(target);
3450
2984
  }
3451
2985
  } else {
3452
- this.pause();
2986
+ pauseHover(target, this.restart);
3453
2987
  }
3454
2988
  }
3455
2989
  },
3456
2990
  args: { intersecting: false },
3457
- options: ({ $el, autoplay, inviewMargin }) => ({
3458
- root: autoplay === "inview" ? null : parent($el).closest(":not(a)"),
3459
- rootMargin: autoplay === "inview" ? inviewMargin : "0px"
2991
+ options: ({ $el, autoplay }) => ({
2992
+ root: autoplay === "inview" ? null : parent($el).closest(":not(a)")
3460
2993
  })
3461
2994
  })
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
- }
2995
+ ]
3502
2996
  };
3503
2997
  function isPlaying(videoEl) {
3504
2998
  return !videoEl.paused && !videoEl.ended;
3505
2999
  }
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;
3000
+ function pauseHover(el, restart) {
3001
+ pause(el);
3002
+ if (restart && isTag(el, "video")) {
3003
+ el.currentTime = 0;
3538
3004
  }
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;
3556
3005
  }
3557
3006
 
3558
3007
  var cover = {
@@ -3628,7 +3077,7 @@
3628
3077
  inset: false
3629
3078
  },
3630
3079
  connected() {
3631
- this.pos = [...this.$props.pos.split("-"), "center"].slice(0, 2);
3080
+ this.pos = this.$props.pos.split("-").concat("center").slice(0, 2);
3632
3081
  [this.dir, this.align] = this.pos;
3633
3082
  this.axis = includes(["top", "bottom"], this.dir) ? "y" : "x";
3634
3083
  },
@@ -3648,7 +3097,7 @@
3648
3097
  placement.reverse();
3649
3098
  }
3650
3099
  const restoreScrollPosition = storeScrollPosition(element);
3651
- const elDim = dimensions$1(element);
3100
+ const elDim = dimensions(element);
3652
3101
  css(element, { top: -elDim.height, left: -elDim.width });
3653
3102
  positionAt(element, target, {
3654
3103
  attach,
@@ -4013,7 +3462,6 @@
4013
3462
  css(this.$el, this._style);
4014
3463
  this.$el.hidden = true;
4015
3464
  const viewports = this.target.map((target) => getViewport$1(this.$el, target));
4016
- const boundaryOffsets = this.boundary.map((el) => offset(el));
4017
3465
  const viewportOffset = this.getViewportOffset(this.$el);
4018
3466
  const dirs = [
4019
3467
  [0, ["x", "width", "left", "right"]],
@@ -4023,7 +3471,7 @@
4023
3471
  if (this.axis !== axis && includes([axis, true], this.stretch)) {
4024
3472
  css(this.$el, {
4025
3473
  [prop]: Math.min(
4026
- boundaryOffsets[i][prop],
3474
+ offset(this.boundary[i])[prop],
4027
3475
  viewports[i][prop] - 2 * viewportOffset
4028
3476
  ),
4029
3477
  [`overflow-${axis}`]: "auto"
@@ -4045,10 +3493,10 @@
4045
3493
  const elOffset = offset(this.$el);
4046
3494
  css(this.$el, {
4047
3495
  [prop]: (targetOffset[start] > elOffset[start] ? targetOffset[this.inset ? end : start] - Math.max(
4048
- boundaryOffsets[i][start],
3496
+ offset(this.boundary[i])[start],
4049
3497
  viewports[i][start] + viewportOffset
4050
3498
  ) : Math.min(
4051
- boundaryOffsets[i][end],
3499
+ offset(this.boundary[i])[end],
4052
3500
  viewports[i][end] - viewportOffset
4053
3501
  ) - targetOffset[this.inset ? start : end]) - positionOffset,
4054
3502
  [`overflow-${axis}`]: "auto"
@@ -4077,7 +3525,7 @@
4077
3525
  observeViewportResize(update),
4078
3526
  observeResize(overflowParents(drop.$el).concat(drop.target), update)
4079
3527
  ];
4080
- return () => off.forEach((observer) => observer.disconnect());
3528
+ return () => off.map((observer) => observer.disconnect());
4081
3529
  }
4082
3530
  function listenForScroll(drop, fn = () => drop.$emit()) {
4083
3531
  return on([document, ...overflowParents(drop.$el)], "scroll", fn, {
@@ -4312,9 +3760,7 @@
4312
3760
  const drop = this.getDropdown(target);
4313
3761
  const adjustHeight = () => {
4314
3762
  const maxBottom = Math.max(
4315
- ...[...parents(target, `.${this.clsDrop}`), target].map(
4316
- (el) => offset(el).bottom
4317
- )
3763
+ ...parents(target, `.${this.clsDrop}`).concat(target).map((el) => offset(el).bottom)
4318
3764
  );
4319
3765
  offset(this.dropbar, {
4320
3766
  left: offset(this.dropbar).left,
@@ -4494,12 +3940,10 @@
4494
3940
  var Margin = {
4495
3941
  props: {
4496
3942
  margin: String,
4497
- firstRow: Boolean,
4498
3943
  firstColumn: Boolean
4499
3944
  },
4500
3945
  data: {
4501
3946
  margin: "uk-margin-small-top",
4502
- firstRow: false,
4503
3947
  firstColumn: "uk-first-column"
4504
3948
  },
4505
3949
  observe: [
@@ -4539,7 +3983,6 @@
4539
3983
  for (const row of rows) {
4540
3984
  for (const el of row) {
4541
3985
  toggleClass(el, this.margin, rows[0] !== row);
4542
- toggleClass(el, this.firstRow, rows[0] === row);
4543
3986
  toggleClass(el, this.firstColumn, row[isRtl ? row.length - 1 : 0] === el);
4544
3987
  }
4545
3988
  }
@@ -4612,8 +4055,7 @@
4612
4055
  parallaxJustify: Boolean
4613
4056
  },
4614
4057
  data: {
4615
- margin: "",
4616
- firstRow: "uk-first-row",
4058
+ margin: "uk-grid-margin",
4617
4059
  clsStack: "uk-grid-stack",
4618
4060
  masonry: false,
4619
4061
  parallax: 0,
@@ -4635,14 +4077,14 @@
4635
4077
  {
4636
4078
  read(data) {
4637
4079
  const { rows } = data;
4638
- let { masonry, parallax, parallaxJustify } = this;
4080
+ let { masonry, parallax, parallaxJustify, margin } = this;
4639
4081
  parallax = Math.max(0, toPx(parallax));
4640
4082
  if (!(masonry || parallax || parallaxJustify) || positionedAbsolute(rows) || rows[0].some(
4641
4083
  (el, i) => rows.some((row) => row[i] && row[i].offsetWidth !== el.offsetWidth)
4642
4084
  )) {
4643
4085
  return data.translates = data.scrollColumns = false;
4644
4086
  }
4645
- let gutter = toFloat(css(this.$el, "row-gap"));
4087
+ let gutter = getGutter(rows, margin);
4646
4088
  let columns;
4647
4089
  let translates;
4648
4090
  if (masonry) {
@@ -4735,6 +4177,10 @@
4735
4177
  }
4736
4178
  return [columns, translates];
4737
4179
  }
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
+ }
4738
4184
  function transpose(rows) {
4739
4185
  const columns = [];
4740
4186
  for (const row of rows) {
@@ -4765,7 +4211,7 @@
4765
4211
  elements: ({ target }, $el) => $$(target, $el)
4766
4212
  },
4767
4213
  observe: resize({
4768
- target: ({ $el, elements }) => [$el, ...elements.flatMap((el) => [el, ...el.children])]
4214
+ target: ({ $el, elements }) => elements.reduce((elements2, el) => elements2.concat(el, ...el.children), [$el])
4769
4215
  }),
4770
4216
  events: {
4771
4217
  // Hidden elements may change height when fonts load
@@ -4806,7 +4252,7 @@
4806
4252
  css(element, "display", "block", "important");
4807
4253
  }
4808
4254
  css(element, "minHeight", "");
4809
- const height = dimensions$1(element).height - boxModelAdjust(element, "height", "content-box");
4255
+ const height = dimensions(element).height - boxModelAdjust(element, "height", "content-box");
4810
4256
  css(element, style);
4811
4257
  return height;
4812
4258
  }
@@ -4837,6 +4283,45 @@
4837
4283
  }
4838
4284
  };
4839
4285
 
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
+
4840
4325
  var heightViewport = {
4841
4326
  mixins: [Media],
4842
4327
  props: {
@@ -4875,7 +4360,7 @@
4875
4360
  const isScrollingElement = scrollingElement === scrollElement || body === scrollElement;
4876
4361
  let minHeight = `calc(${isScrollingElement ? "100vh" : `${viewportHeight}px`}`;
4877
4362
  if (this.expand) {
4878
- const diff = dimensions$1(scrollElement).height - dimensions$1(this.$el).height;
4363
+ const diff = dimensions(scrollElement).height - dimensions(this.$el).height;
4879
4364
  minHeight += ` - ${diff}px`;
4880
4365
  } else {
4881
4366
  if (this.offsetTop) {
@@ -4888,13 +4373,13 @@
4888
4373
  }
4889
4374
  }
4890
4375
  if (this.offsetBottom === true) {
4891
- minHeight += ` - ${dimensions$1(this.$el.nextElementSibling).height}px`;
4376
+ minHeight += ` - ${dimensions(this.$el.nextElementSibling).height}px`;
4892
4377
  } else if (isNumeric(this.offsetBottom)) {
4893
4378
  minHeight += ` - ${this.offsetBottom}vh`;
4894
4379
  } else if (this.offsetBottom && endsWith(this.offsetBottom, "px")) {
4895
4380
  minHeight += ` - ${toFloat(this.offsetBottom)}px`;
4896
4381
  } else if (isString(this.offsetBottom)) {
4897
- minHeight += ` - ${dimensions$1(query(this.offsetBottom, this.$el)).height}px`;
4382
+ minHeight += ` - ${dimensions(query(this.offsetBottom, this.$el)).height}px`;
4898
4383
  }
4899
4384
  }
4900
4385
  minHeight += `${box ? ` - ${box}px` : ""})`;
@@ -5446,8 +4931,8 @@
5446
4931
  }
5447
4932
  };
5448
4933
  function findTargetColor(target) {
5449
- const dim = dimensions$1(target);
5450
- const viewport = dimensions$1(window);
4934
+ const dim = dimensions(target);
4935
+ const viewport = dimensions(window);
5451
4936
  if (!intersectRect(dim, viewport)) {
5452
4937
  return false;
5453
4938
  }
@@ -5686,13 +5171,12 @@
5686
5171
  }
5687
5172
  }
5688
5173
  };
5689
- const rejectKey = /* @__PURE__ */ Symbol();
5690
5174
  function animate(el, show, { transitionElement, _toggle }) {
5691
5175
  return new Promise(
5692
5176
  (resolve, reject) => once(el, "show hide", () => {
5693
5177
  var _a;
5694
- (_a = el[rejectKey]) == null ? void 0 : _a.call(el);
5695
- el[rejectKey] = reject;
5178
+ (_a = el._reject) == null ? void 0 : _a.call(el);
5179
+ el._reject = reject;
5696
5180
  _toggle(el, show);
5697
5181
  const off = once(
5698
5182
  transitionElement,
@@ -5713,7 +5197,7 @@
5713
5197
  toMs(css(transitionElement, "transitionDuration"))
5714
5198
  );
5715
5199
  })
5716
- ).then(() => delete el[rejectKey]);
5200
+ ).then(() => delete el._reject);
5717
5201
  }
5718
5202
  function toMs(time) {
5719
5203
  return time ? endsWith(time, "ms") ? toFloat(time) : toFloat(time) * 1e3 : 0;
@@ -5723,7 +5207,7 @@
5723
5207
  if (last(active) !== modal || modal.$el.contains(e.target)) {
5724
5208
  return;
5725
5209
  }
5726
- const { left, top, width, height } = dimensions$1(e.target);
5210
+ const { left, top, width, height } = dimensions(e.target);
5727
5211
  const topEl = document.elementFromPoint(left + width / 2, top + height / 2);
5728
5212
  if (topEl && (e.target.contains(topEl) || topEl.contains(e.target))) {
5729
5213
  return;
@@ -6101,7 +5585,7 @@
6101
5585
  return {
6102
5586
  max: Math.max(
6103
5587
  this.minHeight,
6104
- height(this.container) - (dimensions$1(this.content).height - height(this.$el))
5588
+ height(this.container) - (dimensions(this.content).height - height(this.$el))
6105
5589
  )
6106
5590
  };
6107
5591
  },
@@ -6144,11 +5628,11 @@
6144
5628
  ],
6145
5629
  update: {
6146
5630
  read() {
6147
- return {
6148
- overflow: ["Width", "Height"].map(
6149
- (prop) => this.$el[`scroll${prop}`] - this.$el[`client${prop}`]
6150
- )
6151
- };
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 };
6152
5636
  },
6153
5637
  write({ overflow }) {
6154
5638
  for (let i = 0; i < 2; i++) {
@@ -6426,7 +5910,7 @@
6426
5910
  if (scrollTop >= max) {
6427
5911
  active = length - 1;
6428
5912
  } else {
6429
- const offsetBy = this.offset + dimensions$1(getCoveringElement()).height + viewport.height * 0.1;
5913
+ const offsetBy = this.offset + dimensions(getCoveringElement()).height + viewport.height * 0.1;
6430
5914
  for (let i = 0; i < targets.length; i++) {
6431
5915
  if (offset(targets[i]).top - viewport.top - offsetBy > 0) {
6432
5916
  break;
@@ -6565,7 +6049,7 @@
6565
6049
  this.hide();
6566
6050
  }
6567
6051
  if (!this.active) {
6568
- ({ height: height$1, width } = dimensions$1(this.$el));
6052
+ ({ height: height$1, width } = dimensions(this.$el));
6569
6053
  margin = css(this.$el, "margin");
6570
6054
  }
6571
6055
  if (hide) {
@@ -6587,7 +6071,7 @@
6587
6071
  const overflow = this.overflowFlip ? 0 : Math.max(0, elementBox - viewport2);
6588
6072
  const topOffset = offset(referenceElement).top - // offset possible `transform: translateY` animation 'uk-animation-slide-top' while hiding
6589
6073
  new DOMMatrix(css(referenceElement, "transform")).m42;
6590
- const elHeight = dimensions$1(this.$el).height;
6074
+ const elHeight = dimensions(this.$el).height;
6591
6075
  const start = (this.start === false ? topOffset : parseProp(this.start, this.$el, topOffset)) - offset$1;
6592
6076
  const end = this.end === false ? maxScrollHeight : Math.min(
6593
6077
  maxScrollHeight,
@@ -6779,7 +6263,7 @@
6779
6263
  if (!value) {
6780
6264
  return 0;
6781
6265
  }
6782
- if (isNumeric(value) || isString(value) && /^-?\d/.test(value)) {
6266
+ if (isNumeric(value) || isString(value) && value.match(/^-?\d/)) {
6783
6267
  return propOffset + toPx(value, "height", el, true);
6784
6268
  } else {
6785
6269
  const refElement = value === true ? getVisibleParent(el) : query(value, el);
@@ -6813,6 +6297,15 @@
6813
6297
  }
6814
6298
  }
6815
6299
 
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
+
6816
6309
  var svg = {
6817
6310
  mixins: [Svg],
6818
6311
  args: "src",
@@ -6894,9 +6387,10 @@
6894
6387
 
6895
6388
  const selDisabled = ".uk-disabled *, .uk-disabled, [disabled]";
6896
6389
  var Switcher = {
6897
- mixins: [Connect],
6390
+ mixins: [Togglable],
6898
6391
  args: "connect",
6899
6392
  props: {
6393
+ connect: String,
6900
6394
  toggle: String,
6901
6395
  itemNav: String,
6902
6396
  active: Number,
@@ -6908,12 +6402,20 @@
6908
6402
  toggle: "> * > :first-child",
6909
6403
  itemNav: false,
6910
6404
  active: 0,
6405
+ cls: "uk-active",
6911
6406
  attrItem: "uk-switcher-item",
6912
6407
  selVertical: ".uk-nav",
6913
6408
  followFocus: false,
6914
6409
  swiping: true
6915
6410
  },
6916
6411
  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
+ },
6917
6419
  toggles: ({ toggle }, $el) => $$(toggle, $el),
6918
6420
  children(_, $el) {
6919
6421
  return children($el).filter(
@@ -6944,7 +6446,10 @@
6944
6446
  connected() {
6945
6447
  this.$el.role = "tablist";
6946
6448
  },
6947
- observe: swipe({ target: ({ connects }) => connects, filter: ({ swiping }) => swiping }),
6449
+ observe: [
6450
+ lazyload({ targets: ({ connectChildren }) => connectChildren }),
6451
+ swipe({ target: ({ connects }) => connects, filter: ({ swiping }) => swiping })
6452
+ ],
6948
6453
  events: [
6949
6454
  {
6950
6455
  name: "click keydown",
@@ -6994,27 +6499,24 @@
6994
6499
  }
6995
6500
  ],
6996
6501
  update() {
6502
+ var _a;
6503
+ for (const el of this.connects) {
6504
+ if (isTag(el, "ul")) {
6505
+ el.role = "presentation";
6506
+ }
6507
+ }
6997
6508
  attr(children(this.$el), "role", "presentation");
6998
6509
  for (const index in this.toggles) {
6999
6510
  const toggle = this.toggles[index];
7000
- toggle.id = generateId(this, toggle);
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);
6511
+ const item = (_a = this.connects[0]) == null ? void 0 : _a.children[index];
6512
+ toggle.role = "tab";
6513
+ if (!item) {
6514
+ continue;
7013
6515
  }
7014
- attr(toggle, {
7015
- role: "tab",
7016
- "aria-controls": controls.join(" ")
7017
- });
6516
+ 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 });
7018
6520
  }
7019
6521
  attr(this.$el, "aria-orientation", matches(this.$el, this.selVertical) ? "vertical" : null);
7020
6522
  },
@@ -7047,7 +6549,15 @@
7047
6549
  tabindex: next === i ? null : -1
7048
6550
  });
7049
6551
  });
7050
- return this.showConnects(next, prev >= 0 && prev !== next);
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
+ });
7051
6561
  }
7052
6562
  }
7053
6563
  };