uikit 3.19.5-dev.c20f30a07 → 3.19.5-dev.c70b3862f

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 (69) hide show
  1. package/CHANGELOG.md +6 -1
  2. package/dist/css/uikit-core-rtl.css +2 -2
  3. package/dist/css/uikit-core-rtl.min.css +1 -1
  4. package/dist/css/uikit-core.css +2 -2
  5. package/dist/css/uikit-core.min.css +1 -1
  6. package/dist/css/uikit-rtl.css +2 -2
  7. package/dist/css/uikit-rtl.min.css +1 -1
  8. package/dist/css/uikit.css +2 -2
  9. package/dist/css/uikit.min.css +1 -1
  10. package/dist/js/components/countdown.js +1 -1
  11. package/dist/js/components/countdown.min.js +1 -1
  12. package/dist/js/components/filter.js +87 -87
  13. package/dist/js/components/filter.min.js +1 -1
  14. package/dist/js/components/lightbox-panel.js +1 -1
  15. package/dist/js/components/lightbox-panel.min.js +1 -1
  16. package/dist/js/components/lightbox.js +1 -1
  17. package/dist/js/components/lightbox.min.js +1 -1
  18. package/dist/js/components/notification.js +1 -1
  19. package/dist/js/components/notification.min.js +1 -1
  20. package/dist/js/components/parallax.js +40 -30
  21. package/dist/js/components/parallax.min.js +1 -1
  22. package/dist/js/components/slider-parallax.js +41 -31
  23. package/dist/js/components/slider-parallax.min.js +1 -1
  24. package/dist/js/components/slider.js +40 -30
  25. package/dist/js/components/slider.min.js +1 -1
  26. package/dist/js/components/slideshow-parallax.js +41 -31
  27. package/dist/js/components/slideshow-parallax.min.js +1 -1
  28. package/dist/js/components/slideshow.js +40 -30
  29. package/dist/js/components/slideshow.min.js +1 -1
  30. package/dist/js/components/sortable.js +87 -87
  31. package/dist/js/components/sortable.min.js +1 -1
  32. package/dist/js/components/tooltip.js +1 -1
  33. package/dist/js/components/tooltip.min.js +1 -1
  34. package/dist/js/components/upload.js +1 -1
  35. package/dist/js/components/upload.min.js +1 -1
  36. package/dist/js/uikit-core.js +90 -90
  37. package/dist/js/uikit-core.min.js +1 -1
  38. package/dist/js/uikit-icons.js +1 -1
  39. package/dist/js/uikit-icons.min.js +1 -1
  40. package/dist/js/uikit.js +177 -180
  41. package/dist/js/uikit.min.js +1 -1
  42. package/package.json +1 -1
  43. package/src/js/api/computed.js +20 -26
  44. package/src/js/api/observer.js +1 -1
  45. package/src/js/components/slider-parallax.js +2 -2
  46. package/src/js/core/drop.js +1 -2
  47. package/src/js/core/height-placeholder.js +4 -1
  48. package/src/js/core/icon.js +2 -3
  49. package/src/js/core/inverse.js +2 -0
  50. package/src/js/core/margin.js +5 -0
  51. package/src/js/core/modal.js +5 -6
  52. package/src/js/core/scrollspy.js +0 -3
  53. package/src/js/core/sticky.js +1 -1
  54. package/src/js/core/switcher.js +4 -1
  55. package/src/js/core/toggle.js +6 -3
  56. package/src/js/mixin/internal/animate-fade.js +2 -7
  57. package/src/js/mixin/internal/animate-slide.js +2 -7
  58. package/src/js/mixin/parallax.js +7 -3
  59. package/src/js/util/class.js +1 -1
  60. package/src/js/util/fastdom.js +6 -13
  61. package/src/js/util/filter.js +7 -14
  62. package/src/js/util/selector.js +31 -22
  63. package/src/js/util/style.js +2 -4
  64. package/src/js/util/svg.js +4 -1
  65. package/src/less/components/utility.less +1 -1
  66. package/src/scss/components/utility.scss +1 -1
  67. package/tests/base.html +1 -1
  68. package/tests/js/index.js +12 -10
  69. package/tests/switcher.html +86 -86
package/dist/js/uikit.js CHANGED
@@ -1,4 +1,4 @@
1
- /*! UIkit 3.19.5-dev.c20f30a07 | https://www.getuikit.com | (c) 2014 - 2024 YOOtheme | MIT License */
1
+ /*! UIkit 3.19.5-dev.c70b3862f | https://www.getuikit.com | (c) 2014 - 2024 YOOtheme | MIT License */
2
2
 
3
3
  (function (global, factory) {
4
4
  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
@@ -273,7 +273,7 @@
273
273
  }
274
274
  }
275
275
  function toClasses(str) {
276
- return str ? isArray(str) ? str.map(toClasses).flat() : String(str).split(/[ ,]/).filter(Boolean) : [];
276
+ return str ? isArray(str) ? str.map(toClasses).flat() : String(str).split(" ").filter(Boolean) : [];
277
277
  }
278
278
 
279
279
  const voidElements = {
@@ -296,10 +296,11 @@
296
296
  function isVoidElement(element) {
297
297
  return toNodes(element).some((element2) => voidElements[element2.tagName.toLowerCase()]);
298
298
  }
299
+ const isVisibleFn = Element.prototype.checkVisibility || function() {
300
+ return this.offsetWidth || this.offsetHeight || this.getClientRects().length;
301
+ };
299
302
  function isVisible(element) {
300
- return toNodes(element).some(
301
- (element2) => element2.offsetWidth || element2.offsetHeight || element2.getClientRects().length
302
- );
303
+ return toNodes(element).some((element2) => isVisibleFn.call(element2));
303
304
  }
304
305
  const selInput = "input,select,textarea,button";
305
306
  function isInput(element) {
@@ -319,13 +320,6 @@
319
320
  function matches(element, selector) {
320
321
  return toNodes(element).some((element2) => element2.matches(selector));
321
322
  }
322
- function closest(element, selector) {
323
- var _a;
324
- return (_a = toNode(element)) == null ? void 0 : _a.closest(startsWith(selector, ">") ? selector.slice(1) : selector);
325
- }
326
- function within(element, selector) {
327
- return isString(selector) ? !!closest(element, selector) : toNode(selector).contains(toNode(element));
328
- }
329
323
  function parents(element, selector) {
330
324
  const elements = [];
331
325
  while (element = parent(element)) {
@@ -380,10 +374,7 @@
380
374
  const selectors = [];
381
375
  for (let sel of (_a = selector.match(splitSelectorRe)) != null ? _a : []) {
382
376
  sel = sel.replace(trailingCommaRe, "").trim();
383
- if (sel[0] === ">") {
384
- sel = `:scope ${sel}`;
385
- }
386
- isContextSelector || (isContextSelector = ["!", "+", "~", "-"].includes(sel[0]));
377
+ isContextSelector || (isContextSelector = ["!", "+", "~", "-", ">"].includes(sel[0]));
387
378
  selectors.push(sel);
388
379
  }
389
380
  return {
@@ -392,6 +383,11 @@
392
383
  isContextSelector
393
384
  };
394
385
  });
386
+ const parsePositionSelector = memoize((selector) => {
387
+ selector = selector.substr(1).trim();
388
+ const index2 = selector.indexOf(" ");
389
+ return ~index2 ? [selector.substring(0, index2), selector.substring(index2 + 1)] : [selector, ""];
390
+ });
395
391
  function _query(selector, context = document, queryFn) {
396
392
  if (!selector || !isString(selector)) {
397
393
  return selector;
@@ -403,33 +399,36 @@
403
399
  selector = "";
404
400
  const isSingle = parsed.selectors.length === 1;
405
401
  for (let sel of parsed.selectors) {
402
+ let positionSel;
406
403
  let ctx = context;
407
404
  if (sel[0] === "!") {
408
- const selectors = sel.substr(1).trim().split(" ");
409
- ctx = context.parentElement.closest(selectors[0]);
410
- sel = selectors.slice(1).join(" ").trim();
411
- if (!sel.length && isSingle) {
405
+ [positionSel, sel] = parsePositionSelector(sel);
406
+ ctx = context.parentElement.closest(positionSel);
407
+ if (!sel && isSingle) {
412
408
  return ctx;
413
409
  }
414
410
  }
415
- if (sel[0] === "-") {
416
- const selectors = sel.substr(1).trim().split(" ");
417
- const prev = (ctx || context).previousElementSibling;
418
- ctx = matches(prev, sel.substr(1)) ? prev : null;
419
- sel = selectors.slice(1).join(" ");
420
- if (!sel.length && isSingle) {
411
+ if (ctx && sel[0] === "-") {
412
+ [positionSel, sel] = parsePositionSelector(sel);
413
+ ctx = ctx.previousElementSibling;
414
+ ctx = matches(ctx, positionSel) ? ctx : null;
415
+ if (!sel && isSingle) {
421
416
  return ctx;
422
417
  }
423
- } else if (sel[0] === "~" || sel[0] === "+" && isSingle) {
424
- return _doQuery(
425
- ctx.parentElement,
426
- queryFn,
427
- `:scope :nth-child(${index(ctx) + 1}) ${sel}`
428
- );
429
418
  }
430
- if (ctx) {
431
- selector += `${selector ? "," : ""}${domPath(ctx)} ${sel}`;
419
+ if (!ctx) {
420
+ continue;
421
+ }
422
+ if (isSingle) {
423
+ if (sel[0] === "~" || sel[0] === "+") {
424
+ sel = `:scope :nth-child(${index(ctx) + 1}) ${sel}`;
425
+ ctx = ctx.parentElement;
426
+ } else if (sel[0] === ">") {
427
+ sel = `:scope ${sel}`;
428
+ }
429
+ return _doQuery(ctx, queryFn, sel);
432
430
  }
431
+ selector += `${selector ? "," : ""}${domPath(ctx)} ${sel}`;
433
432
  }
434
433
  if (!isDocument(context)) {
435
434
  context = context.ownerDocument;
@@ -612,8 +611,7 @@
612
611
  }
613
612
  return elements[0];
614
613
  }
615
- const propName = memoize((name) => vendorPropName(name));
616
- function vendorPropName(name) {
614
+ const propName = memoize((name) => {
617
615
  if (startsWith(name, "--")) {
618
616
  return name;
619
617
  }
@@ -628,7 +626,7 @@
628
626
  return prefixedName;
629
627
  }
630
628
  }
631
- }
629
+ });
632
630
 
633
631
  const clsTransition = "uk-transition";
634
632
  const transitionEnd = "transitionend";
@@ -1000,24 +998,18 @@
1000
998
  },
1001
999
  flush
1002
1000
  };
1003
- function flush(recursion) {
1001
+ function flush() {
1004
1002
  runTasks(fastdom.reads);
1005
1003
  runTasks(fastdom.writes.splice(0));
1006
1004
  fastdom.scheduled = false;
1007
1005
  if (fastdom.reads.length || fastdom.writes.length) {
1008
- scheduleFlush(recursion + 1);
1006
+ scheduleFlush();
1009
1007
  }
1010
1008
  }
1011
- const RECURSION_LIMIT = 4;
1012
- function scheduleFlush(recursion) {
1013
- if (fastdom.scheduled) {
1014
- return;
1015
- }
1016
- fastdom.scheduled = true;
1017
- if (recursion && recursion < RECURSION_LIMIT) {
1018
- Promise.resolve().then(() => flush(recursion));
1019
- } else {
1020
- requestAnimationFrame(() => flush(1));
1009
+ function scheduleFlush() {
1010
+ if (!fastdom.scheduled) {
1011
+ fastdom.scheduled = true;
1012
+ queueMicrotask(flush);
1021
1013
  }
1022
1014
  }
1023
1015
  function runTasks(tasks) {
@@ -1567,7 +1559,6 @@
1567
1559
  camelize: camelize,
1568
1560
  children: children,
1569
1561
  clamp: clamp,
1570
- closest: closest,
1571
1562
  createEvent: createEvent,
1572
1563
  css: css,
1573
1564
  data: data,
@@ -1688,7 +1679,6 @@
1688
1679
  uniqueBy: uniqueBy,
1689
1680
  unwrap: unwrap,
1690
1681
  width: width,
1691
- within: within,
1692
1682
  wrapAll: wrapAll,
1693
1683
  wrapInner: wrapInner
1694
1684
  });
@@ -2036,6 +2026,11 @@
2036
2026
  firstColumn: "uk-first-column"
2037
2027
  },
2038
2028
  observe: [
2029
+ mutation({
2030
+ options: {
2031
+ childList: true
2032
+ }
2033
+ }),
2039
2034
  mutation({
2040
2035
  options: {
2041
2036
  attributes: true,
@@ -2117,99 +2112,15 @@
2117
2112
  };
2118
2113
  }
2119
2114
 
2120
- const clsLeave = "uk-transition-leave";
2121
- const clsEnter = "uk-transition-enter";
2122
- function fade(action, target, duration, stagger = 0) {
2123
- const index = transitionIndex(target, true);
2124
- const propsIn = { opacity: 1 };
2125
- const propsOut = { opacity: 0 };
2126
- const wrapIndexFn = (fn) => () => index === transitionIndex(target) ? fn() : Promise.reject();
2127
- const leaveFn = wrapIndexFn(async () => {
2128
- addClass(target, clsLeave);
2129
- await Promise.all(
2130
- getTransitionNodes(target).map(
2131
- (child, i) => new Promise(
2132
- (resolve) => setTimeout(
2133
- () => Transition.start(child, propsOut, duration / 2, "ease").then(
2134
- resolve
2135
- ),
2136
- i * stagger
2137
- )
2138
- )
2139
- )
2140
- );
2141
- removeClass(target, clsLeave);
2142
- });
2143
- const enterFn = wrapIndexFn(async () => {
2144
- const oldHeight = height(target);
2145
- addClass(target, clsEnter);
2146
- action();
2147
- css(children(target), { opacity: 0 });
2148
- await awaitFrame$1();
2149
- const nodes = children(target);
2150
- const newHeight = height(target);
2151
- css(target, "alignContent", "flex-start");
2152
- height(target, oldHeight);
2153
- const transitionNodes = getTransitionNodes(target);
2154
- css(nodes, propsOut);
2155
- const transitions = transitionNodes.map(async (child, i) => {
2156
- await awaitTimeout(i * stagger);
2157
- await Transition.start(child, propsIn, duration / 2, "ease");
2158
- });
2159
- if (oldHeight !== newHeight) {
2160
- transitions.push(
2161
- Transition.start(
2162
- target,
2163
- { height: newHeight },
2164
- duration / 2 + transitionNodes.length * stagger,
2165
- "ease"
2166
- )
2167
- );
2168
- }
2169
- await Promise.all(transitions).then(() => {
2170
- removeClass(target, clsEnter);
2171
- if (index === transitionIndex(target)) {
2172
- css(target, { height: "", alignContent: "" });
2173
- css(nodes, { opacity: "" });
2174
- delete target.dataset.transition;
2175
- }
2176
- });
2177
- });
2178
- return hasClass(target, clsLeave) ? waitTransitionend(target).then(enterFn) : hasClass(target, clsEnter) ? waitTransitionend(target).then(leaveFn).then(enterFn) : leaveFn().then(enterFn);
2179
- }
2180
- function transitionIndex(target, next) {
2181
- if (next) {
2182
- target.dataset.transition = 1 + transitionIndex(target);
2183
- }
2184
- return toNumber(target.dataset.transition) || 0;
2185
- }
2186
- function waitTransitionend(target) {
2187
- return Promise.all(
2188
- children(target).filter(Transition.inProgress).map(
2189
- (el) => new Promise((resolve) => once(el, "transitionend transitioncanceled", resolve))
2190
- )
2191
- );
2192
- }
2193
- function getTransitionNodes(target) {
2194
- return getRows(children(target)).flat().filter((node) => isVisible(node));
2195
- }
2196
- function awaitFrame$1() {
2197
- return new Promise((resolve) => requestAnimationFrame(resolve));
2198
- }
2199
- function awaitTimeout(timeout) {
2200
- return new Promise((resolve) => setTimeout(resolve, timeout));
2201
- }
2202
-
2203
2115
  async function slide(action, target, duration) {
2204
2116
  await awaitFrame();
2205
2117
  let nodes = children(target);
2206
2118
  const currentProps = nodes.map((el) => getProps$1(el, true));
2207
2119
  const targetProps = { ...css(target, ["height", "padding"]), display: "block" };
2208
2120
  await Promise.all(nodes.concat(target).map(Transition.cancel));
2209
- action();
2121
+ await action();
2210
2122
  nodes = nodes.concat(children(target).filter((el) => !includes(nodes, el)));
2211
2123
  await Promise.resolve();
2212
- fastdom.flush();
2213
2124
  const targetStyle = attr(target, "style");
2214
2125
  const targetPropsTo = css(target, ["height", "padding"]);
2215
2126
  const [propsTo, propsFrom] = getTransitionProps(target, nodes, currentProps);
@@ -2217,7 +2128,6 @@
2217
2128
  nodes.forEach((el, i) => propsFrom[i] && css(el, propsFrom[i]));
2218
2129
  css(target, targetProps);
2219
2130
  trigger(target, "scroll");
2220
- fastdom.flush();
2221
2131
  await awaitFrame();
2222
2132
  const transitions = nodes.map((el, i) => parent(el) === target && Transition.start(el, propsTo[i], duration, "ease")).concat(Transition.start(target, targetPropsTo, duration, "ease"));
2223
2133
  try {
@@ -2287,6 +2197,86 @@
2287
2197
  return new Promise((resolve) => requestAnimationFrame(resolve));
2288
2198
  }
2289
2199
 
2200
+ const clsLeave = "uk-transition-leave";
2201
+ const clsEnter = "uk-transition-enter";
2202
+ function fade(action, target, duration, stagger = 0) {
2203
+ const index = transitionIndex(target, true);
2204
+ const propsIn = { opacity: 1 };
2205
+ const propsOut = { opacity: 0 };
2206
+ const wrapIndexFn = (fn) => () => index === transitionIndex(target) ? fn() : Promise.reject();
2207
+ const leaveFn = wrapIndexFn(async () => {
2208
+ addClass(target, clsLeave);
2209
+ await Promise.all(
2210
+ getTransitionNodes(target).map(
2211
+ (child, i) => new Promise(
2212
+ (resolve) => setTimeout(
2213
+ () => Transition.start(child, propsOut, duration / 2, "ease").then(
2214
+ resolve
2215
+ ),
2216
+ i * stagger
2217
+ )
2218
+ )
2219
+ )
2220
+ );
2221
+ removeClass(target, clsLeave);
2222
+ });
2223
+ const enterFn = wrapIndexFn(async () => {
2224
+ const oldHeight = height(target);
2225
+ addClass(target, clsEnter);
2226
+ action();
2227
+ css(children(target), { opacity: 0 });
2228
+ await awaitFrame();
2229
+ const nodes = children(target);
2230
+ const newHeight = height(target);
2231
+ css(target, "alignContent", "flex-start");
2232
+ height(target, oldHeight);
2233
+ const transitionNodes = getTransitionNodes(target);
2234
+ css(nodes, propsOut);
2235
+ const transitions = transitionNodes.map(async (child, i) => {
2236
+ await awaitTimeout(i * stagger);
2237
+ await Transition.start(child, propsIn, duration / 2, "ease");
2238
+ });
2239
+ if (oldHeight !== newHeight) {
2240
+ transitions.push(
2241
+ Transition.start(
2242
+ target,
2243
+ { height: newHeight },
2244
+ duration / 2 + transitionNodes.length * stagger,
2245
+ "ease"
2246
+ )
2247
+ );
2248
+ }
2249
+ await Promise.all(transitions).then(() => {
2250
+ removeClass(target, clsEnter);
2251
+ if (index === transitionIndex(target)) {
2252
+ css(target, { height: "", alignContent: "" });
2253
+ css(nodes, { opacity: "" });
2254
+ delete target.dataset.transition;
2255
+ }
2256
+ });
2257
+ });
2258
+ return hasClass(target, clsLeave) ? waitTransitionend(target).then(enterFn) : hasClass(target, clsEnter) ? waitTransitionend(target).then(leaveFn).then(enterFn) : leaveFn().then(enterFn);
2259
+ }
2260
+ function transitionIndex(target, next) {
2261
+ if (next) {
2262
+ target.dataset.transition = 1 + transitionIndex(target);
2263
+ }
2264
+ return toNumber(target.dataset.transition) || 0;
2265
+ }
2266
+ function waitTransitionend(target) {
2267
+ return Promise.all(
2268
+ children(target).filter(Transition.inProgress).map(
2269
+ (el) => new Promise((resolve) => once(el, "transitionend transitioncanceled", resolve))
2270
+ )
2271
+ );
2272
+ }
2273
+ function getTransitionNodes(target) {
2274
+ return getRows(children(target)).flat().filter(isVisible);
2275
+ }
2276
+ function awaitTimeout(timeout) {
2277
+ return new Promise((resolve) => setTimeout(resolve, timeout));
2278
+ }
2279
+
2290
2280
  var Animate = {
2291
2281
  props: {
2292
2282
  duration: Number,
@@ -3263,6 +3253,7 @@
3263
3253
  }
3264
3254
  }
3265
3255
  }
3256
+ const mutationOptions = { subtree: true, childList: true };
3266
3257
  function registerComputed(instance, key, cb) {
3267
3258
  instance._hasComputed = true;
3268
3259
  Object.defineProperty(instance, key, {
@@ -3271,6 +3262,13 @@
3271
3262
  const { _computed, $props, $el } = instance;
3272
3263
  if (!hasOwn(_computed, key)) {
3273
3264
  _computed[key] = (cb.get || cb).call(instance, $props, $el);
3265
+ if (cb.observe && instance._computedObserver) {
3266
+ const selector = cb.observe.call(instance, $props);
3267
+ instance._computedObserver.observe(
3268
+ ["~", "+", "-"].includes(selector[0]) ? $el.parentElement : $el.getRootNode(),
3269
+ mutationOptions
3270
+ );
3271
+ }
3274
3272
  }
3275
3273
  return _computed[key];
3276
3274
  },
@@ -3291,11 +3289,16 @@
3291
3289
  read: () => runWatches(instance, resetComputed(instance)),
3292
3290
  events: ["resize", "computed"]
3293
3291
  });
3294
- registerComputedObserver();
3295
- instances$1.add(instance);
3292
+ instance._computedObserver = observeMutation(
3293
+ instance.$el,
3294
+ () => callUpdate(instance, "computed"),
3295
+ mutationOptions
3296
+ );
3296
3297
  }
3297
3298
  function disconnectComputedUpdates(instance) {
3298
- instances$1 == null ? void 0 : instances$1.delete(instance);
3299
+ var _a;
3300
+ (_a = instance._computedObserver) == null ? void 0 : _a.disconnect();
3301
+ delete instance._computedObserver;
3299
3302
  resetComputed(instance);
3300
3303
  }
3301
3304
  function resetComputed(instance) {
@@ -3303,23 +3306,6 @@
3303
3306
  instance._computed = {};
3304
3307
  return values;
3305
3308
  }
3306
- let observer;
3307
- let instances$1;
3308
- function registerComputedObserver() {
3309
- if (observer) {
3310
- return;
3311
- }
3312
- instances$1 = /* @__PURE__ */ new Set();
3313
- observer = new MutationObserver(() => {
3314
- for (const instance of instances$1) {
3315
- callUpdate(instance, "computed");
3316
- }
3317
- });
3318
- observer.observe(document, {
3319
- subtree: true,
3320
- childList: true
3321
- });
3322
- }
3323
3309
 
3324
3310
  function initEvents(instance) {
3325
3311
  instance._events = [];
@@ -3404,7 +3390,7 @@
3404
3390
  if (!includes(targets, target)) {
3405
3391
  if (observer.unobserve) {
3406
3392
  observer.unobserve(target);
3407
- } else {
3393
+ } else if (observer.observe) {
3408
3394
  observer.disconnect();
3409
3395
  }
3410
3396
  }
@@ -3572,7 +3558,7 @@
3572
3558
  };
3573
3559
  App.util = util;
3574
3560
  App.options = {};
3575
- App.version = "3.19.5-dev.c20f30a07";
3561
+ App.version = "3.19.5-dev.c70b3862f";
3576
3562
 
3577
3563
  const PREFIX = "uk-";
3578
3564
  const DATA = "__uikit__";
@@ -4572,10 +4558,7 @@
4572
4558
  }
4573
4559
 
4574
4560
  function getMaxPathLength(el) {
4575
- return Math.ceil(Math.max(0, ...$$("[stroke]", el).map((stroke) => {
4576
- var _a;
4577
- return (_a = stroke.getTotalLength) == null ? void 0 : _a.call(stroke);
4578
- })));
4561
+ return isVisible(el) ? Math.ceil(Math.max(0, ...$$("[stroke]", el).map((stroke) => stroke.getTotalLength()))) : 0;
4579
4562
  }
4580
4563
 
4581
4564
  const props = {
@@ -4779,6 +4762,7 @@
4779
4762
  }
4780
4763
  };
4781
4764
  }
4765
+ const loading = {};
4782
4766
  const dimensions = {};
4783
4767
  function getBackgroundImageDimensions(el) {
4784
4768
  const src = css(el, "backgroundImage").replace(/^none|url\(["']?(.+?)["']?\)$/, "$1");
@@ -4788,11 +4772,12 @@
4788
4772
  const image = new Image();
4789
4773
  if (src) {
4790
4774
  image.src = src;
4791
- if (!image.naturalWidth) {
4792
- image.onload = () => {
4775
+ if (!image.naturalWidth && !loading[src]) {
4776
+ once(image, "error load", () => {
4793
4777
  dimensions[src] = toDimensions(image);
4794
4778
  trigger(el, createEvent("load", false));
4795
- };
4779
+ });
4780
+ loading[src] = true;
4796
4781
  return toDimensions(image);
4797
4782
  }
4798
4783
  }
@@ -5470,7 +5455,7 @@
5470
5455
  var sliderParallax = {
5471
5456
  mixins: [Parallax],
5472
5457
  beforeConnect() {
5473
- this.item = closest(this.$el, `.${this.$options.id.replace("parallax", "items")} > *`);
5458
+ this.item = this.$el.closest(`.${this.$options.id.replace("parallax", "items")} > *`);
5474
5459
  },
5475
5460
  disconnected() {
5476
5461
  this.item = null;
@@ -7176,7 +7161,8 @@
7176
7161
  document,
7177
7162
  `${pointerUp$1} ${pointerCancel} scroll`,
7178
7163
  ({ defaultPrevented, type, target: newTarget }) => {
7179
- if (!defaultPrevented && type === pointerUp$1 && target === newTarget && !(drop.targetEl && within(target, drop.targetEl))) {
7164
+ var _a;
7165
+ if (!defaultPrevented && type === pointerUp$1 && target === newTarget && !((_a = drop.targetEl) == null ? void 0 : _a.contains(target))) {
7180
7166
  drop.hide(false);
7181
7167
  }
7182
7168
  },
@@ -7792,7 +7778,10 @@
7792
7778
  target: ""
7793
7779
  },
7794
7780
  computed: {
7795
- target: ({ target }, $el) => query(target, $el)
7781
+ target: {
7782
+ get: ({ target }, $el) => query(target, $el),
7783
+ observe: ({ target }) => target
7784
+ }
7796
7785
  },
7797
7786
  observe: resize({ target: ({ target }) => target }),
7798
7787
  update: {
@@ -8042,7 +8031,7 @@
8042
8031
  i18n: { toggle: "Open Search", submit: "Submit Search" },
8043
8032
  beforeConnect() {
8044
8033
  const isToggle = hasClass(this.$el, "uk-search-toggle") || hasClass(this.$el, "uk-navbar-toggle");
8045
- this.icon = isToggle ? "search-toggle-icon" : hasClass(this.$el, "uk-search-icon") && closest(this.$el, ".uk-search-large") ? "search-large" : closest(this.$el, ".uk-search-navbar") ? "search-navbar" : this.$props.icon;
8034
+ this.icon = isToggle ? "search-toggle-icon" : hasClass(this.$el, "uk-search-icon") && this.$el.closest(".uk-search-large") ? "search-large" : this.$el.closest(".uk-search-navbar") ? "search-navbar" : this.$props.icon;
8046
8035
  if (hasAttr(this.$el, "aria-label")) {
8047
8036
  return;
8048
8037
  }
@@ -8319,6 +8308,8 @@
8319
8308
  })
8320
8309
  ];
8321
8310
  return {
8311
+ observe: observer.observe.bind(observer),
8312
+ unobserve: observer.unobserve.bind(observer),
8322
8313
  disconnect() {
8323
8314
  observer.disconnect();
8324
8315
  listener.map((off) => off());
@@ -8450,10 +8441,11 @@
8450
8441
  };
8451
8442
  function install({ modal }) {
8452
8443
  modal.dialog = function(content, options) {
8453
- const dialog = modal(
8454
- `<div class="uk-modal"> <div class="uk-modal-dialog">${content}</div> </div>`,
8455
- { stack: true, role: "alertdialog", ...options }
8456
- );
8444
+ const dialog = modal($(`<div><div class="uk-modal-dialog">${content}</div></div>`), {
8445
+ stack: true,
8446
+ role: "alertdialog",
8447
+ ...options
8448
+ });
8457
8449
  dialog.show();
8458
8450
  on(
8459
8451
  dialog.$el,
@@ -8925,7 +8917,6 @@
8925
8917
  }
8926
8918
  trigger(el, inview ? "inview" : "outview");
8927
8919
  state.inview = inview;
8928
- this.$update(el);
8929
8920
  }
8930
8921
  }
8931
8922
  };
@@ -9072,7 +9063,7 @@
9072
9063
  target: () => document.scrollingElement,
9073
9064
  options: { box: "content-box" }
9074
9065
  }),
9075
- resize({ target: ({ $el }) => $el })
9066
+ resize()
9076
9067
  ],
9077
9068
  events: [
9078
9069
  {
@@ -9485,7 +9476,10 @@
9485
9476
  swiping: true
9486
9477
  },
9487
9478
  computed: {
9488
- connects: ({ connect }, $el) => queryAll(connect, $el),
9479
+ connects: {
9480
+ get: ({ connect }, $el) => queryAll(connect, $el),
9481
+ observe: ({ connect }) => connect
9482
+ },
9489
9483
  connectChildren() {
9490
9484
  return this.connects.map((el) => children(el)).flat();
9491
9485
  },
@@ -9674,9 +9668,12 @@
9674
9668
  queued: true
9675
9669
  },
9676
9670
  computed: {
9677
- target({ target }, $el) {
9678
- target = queryAll(target || $el.hash, $el);
9679
- return target.length ? target : [$el];
9671
+ target: {
9672
+ get: ({ target }, $el) => {
9673
+ target = queryAll(target || $el.hash, $el);
9674
+ return target.length ? target : [$el];
9675
+ },
9676
+ observe: ({ target }) => target
9680
9677
  }
9681
9678
  },
9682
9679
  connected() {