uikit 3.19.5-dev.c6a7fbca6 → 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 (77) 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 +55 -55
  15. package/dist/js/components/lightbox-panel.min.js +1 -1
  16. package/dist/js/components/lightbox.js +55 -55
  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 +43 -32
  21. package/dist/js/components/parallax.min.js +1 -1
  22. package/dist/js/components/slider-parallax.js +44 -33
  23. package/dist/js/components/slider-parallax.min.js +1 -1
  24. package/dist/js/components/slider.js +44 -34
  25. package/dist/js/components/slider.min.js +1 -1
  26. package/dist/js/components/slideshow-parallax.js +44 -33
  27. package/dist/js/components/slideshow-parallax.min.js +1 -1
  28. package/dist/js/components/slideshow.js +44 -33
  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 +132 -114
  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 +221 -206
  41. package/dist/js/uikit.min.js +1 -1
  42. package/package.json +1 -1
  43. package/src/js/api/boot.js +6 -7
  44. package/src/js/api/component.js +4 -4
  45. package/src/js/api/computed.js +20 -26
  46. package/src/js/api/observer.js +17 -5
  47. package/src/js/components/slider-parallax.js +2 -2
  48. package/src/js/components/slider.js +1 -1
  49. package/src/js/core/drop.js +1 -2
  50. package/src/js/core/height-placeholder.js +4 -1
  51. package/src/js/core/height-viewport.js +1 -1
  52. package/src/js/core/icon.js +2 -3
  53. package/src/js/core/img.js +1 -1
  54. package/src/js/core/inverse.js +13 -6
  55. package/src/js/core/margin.js +5 -0
  56. package/src/js/core/modal.js +5 -6
  57. package/src/js/core/scrollspy.js +0 -3
  58. package/src/js/core/sticky.js +1 -1
  59. package/src/js/core/switcher.js +4 -1
  60. package/src/js/core/toggle.js +6 -3
  61. package/src/js/mixin/internal/animate-fade.js +2 -7
  62. package/src/js/mixin/internal/animate-slide.js +2 -7
  63. package/src/js/mixin/parallax.js +7 -3
  64. package/src/js/mixin/slider.js +0 -3
  65. package/src/js/mixin/slideshow.js +3 -0
  66. package/src/js/util/class.js +1 -1
  67. package/src/js/util/fastdom.js +6 -13
  68. package/src/js/util/filter.js +7 -14
  69. package/src/js/util/lang.js +1 -1
  70. package/src/js/util/selector.js +33 -24
  71. package/src/js/util/style.js +2 -4
  72. package/src/js/util/svg.js +4 -1
  73. package/src/less/components/utility.less +1 -1
  74. package/src/scss/components/utility.scss +1 -1
  75. package/tests/base.html +1 -1
  76. package/tests/js/index.js +12 -10
  77. package/tests/switcher.html +86 -86
package/dist/js/uikit.js CHANGED
@@ -1,4 +1,4 @@
1
- /*! UIkit 3.19.5-dev.c6a7fbca6 | 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() :
@@ -88,7 +88,7 @@
88
88
  return parseFloat(value) || 0;
89
89
  }
90
90
  function toNode(element) {
91
- return toNodes(element)[0];
91
+ return element && toNodes(element)[0];
92
92
  }
93
93
  function toNodes(element) {
94
94
  return isNode(element) ? [element] : Array.from(element || []).filter(isNode);
@@ -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)) {
@@ -374,15 +368,13 @@
374
368
  const splitSelectorRe = /.*?[^\\](?![^(]*\))(?:,|$)/g;
375
369
  const trailingCommaRe = /\s*,$/;
376
370
  const parseSelector = memoize((selector) => {
371
+ var _a;
377
372
  selector = selector.replace(addStarRe, "$1 *");
378
373
  let isContextSelector = false;
379
374
  const selectors = [];
380
- for (let sel of selector.match(splitSelectorRe)) {
375
+ for (let sel of (_a = selector.match(splitSelectorRe)) != null ? _a : []) {
381
376
  sel = sel.replace(trailingCommaRe, "").trim();
382
- if (sel[0] === ">") {
383
- sel = `:scope ${sel}`;
384
- }
385
- isContextSelector || (isContextSelector = ["!", "+", "~", "-"].includes(sel[0]));
377
+ isContextSelector || (isContextSelector = ["!", "+", "~", "-", ">"].includes(sel[0]));
386
378
  selectors.push(sel);
387
379
  }
388
380
  return {
@@ -391,6 +383,11 @@
391
383
  isContextSelector
392
384
  };
393
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
+ });
394
391
  function _query(selector, context = document, queryFn) {
395
392
  if (!selector || !isString(selector)) {
396
393
  return selector;
@@ -402,33 +399,36 @@
402
399
  selector = "";
403
400
  const isSingle = parsed.selectors.length === 1;
404
401
  for (let sel of parsed.selectors) {
402
+ let positionSel;
405
403
  let ctx = context;
406
404
  if (sel[0] === "!") {
407
- const selectors = sel.substr(1).trim().split(" ");
408
- ctx = parent(context).closest(selectors[0]);
409
- sel = selectors.slice(1).join(" ").trim();
410
- if (!sel.length && isSingle) {
405
+ [positionSel, sel] = parsePositionSelector(sel);
406
+ ctx = context.parentElement.closest(positionSel);
407
+ if (!sel && isSingle) {
411
408
  return ctx;
412
409
  }
413
410
  }
414
- if (sel[0] === "-") {
415
- const selectors = sel.substr(1).trim().split(" ");
416
- const prev = (ctx || context).previousElementSibling;
417
- ctx = matches(prev, sel.substr(1)) ? prev : null;
418
- sel = selectors.slice(1).join(" ");
419
- 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) {
420
416
  return ctx;
421
417
  }
422
- } else if (sel[0] === "~" || sel[0] === "+" && isSingle) {
423
- return _doQuery(
424
- parent(context),
425
- queryFn,
426
- `:scope :nth-child(${index(context) + 1}) ${sel}`
427
- );
428
418
  }
429
- if (ctx) {
430
- selector += `${selector ? "," : ""}${domPath(ctx)} ${sel}`;
419
+ if (!ctx) {
420
+ continue;
431
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);
430
+ }
431
+ selector += `${selector ? "," : ""}${domPath(ctx)} ${sel}`;
432
432
  }
433
433
  if (!isDocument(context)) {
434
434
  context = context.ownerDocument;
@@ -611,8 +611,7 @@
611
611
  }
612
612
  return elements[0];
613
613
  }
614
- const propName = memoize((name) => vendorPropName(name));
615
- function vendorPropName(name) {
614
+ const propName = memoize((name) => {
616
615
  if (startsWith(name, "--")) {
617
616
  return name;
618
617
  }
@@ -627,7 +626,7 @@
627
626
  return prefixedName;
628
627
  }
629
628
  }
630
- }
629
+ });
631
630
 
632
631
  const clsTransition = "uk-transition";
633
632
  const transitionEnd = "transitionend";
@@ -999,24 +998,18 @@
999
998
  },
1000
999
  flush
1001
1000
  };
1002
- function flush(recursion) {
1001
+ function flush() {
1003
1002
  runTasks(fastdom.reads);
1004
1003
  runTasks(fastdom.writes.splice(0));
1005
1004
  fastdom.scheduled = false;
1006
1005
  if (fastdom.reads.length || fastdom.writes.length) {
1007
- scheduleFlush(recursion + 1);
1006
+ scheduleFlush();
1008
1007
  }
1009
1008
  }
1010
- const RECURSION_LIMIT = 4;
1011
- function scheduleFlush(recursion) {
1012
- if (fastdom.scheduled) {
1013
- return;
1014
- }
1015
- fastdom.scheduled = true;
1016
- if (recursion && recursion < RECURSION_LIMIT) {
1017
- Promise.resolve().then(() => flush(recursion));
1018
- } else {
1019
- requestAnimationFrame(() => flush(1));
1009
+ function scheduleFlush() {
1010
+ if (!fastdom.scheduled) {
1011
+ fastdom.scheduled = true;
1012
+ queueMicrotask(flush);
1020
1013
  }
1021
1014
  }
1022
1015
  function runTasks(tasks) {
@@ -1566,7 +1559,6 @@
1566
1559
  camelize: camelize,
1567
1560
  children: children,
1568
1561
  clamp: clamp,
1569
- closest: closest,
1570
1562
  createEvent: createEvent,
1571
1563
  css: css,
1572
1564
  data: data,
@@ -1687,7 +1679,6 @@
1687
1679
  uniqueBy: uniqueBy,
1688
1680
  unwrap: unwrap,
1689
1681
  width: width,
1690
- within: within,
1691
1682
  wrapAll: wrapAll,
1692
1683
  wrapInner: wrapInner
1693
1684
  });
@@ -2035,6 +2026,11 @@
2035
2026
  firstColumn: "uk-first-column"
2036
2027
  },
2037
2028
  observe: [
2029
+ mutation({
2030
+ options: {
2031
+ childList: true
2032
+ }
2033
+ }),
2038
2034
  mutation({
2039
2035
  options: {
2040
2036
  attributes: true,
@@ -2116,99 +2112,15 @@
2116
2112
  };
2117
2113
  }
2118
2114
 
2119
- const clsLeave = "uk-transition-leave";
2120
- const clsEnter = "uk-transition-enter";
2121
- function fade(action, target, duration, stagger = 0) {
2122
- const index = transitionIndex(target, true);
2123
- const propsIn = { opacity: 1 };
2124
- const propsOut = { opacity: 0 };
2125
- const wrapIndexFn = (fn) => () => index === transitionIndex(target) ? fn() : Promise.reject();
2126
- const leaveFn = wrapIndexFn(async () => {
2127
- addClass(target, clsLeave);
2128
- await Promise.all(
2129
- getTransitionNodes(target).map(
2130
- (child, i) => new Promise(
2131
- (resolve) => setTimeout(
2132
- () => Transition.start(child, propsOut, duration / 2, "ease").then(
2133
- resolve
2134
- ),
2135
- i * stagger
2136
- )
2137
- )
2138
- )
2139
- );
2140
- removeClass(target, clsLeave);
2141
- });
2142
- const enterFn = wrapIndexFn(async () => {
2143
- const oldHeight = height(target);
2144
- addClass(target, clsEnter);
2145
- action();
2146
- css(children(target), { opacity: 0 });
2147
- await awaitFrame$1();
2148
- const nodes = children(target);
2149
- const newHeight = height(target);
2150
- css(target, "alignContent", "flex-start");
2151
- height(target, oldHeight);
2152
- const transitionNodes = getTransitionNodes(target);
2153
- css(nodes, propsOut);
2154
- const transitions = transitionNodes.map(async (child, i) => {
2155
- await awaitTimeout(i * stagger);
2156
- await Transition.start(child, propsIn, duration / 2, "ease");
2157
- });
2158
- if (oldHeight !== newHeight) {
2159
- transitions.push(
2160
- Transition.start(
2161
- target,
2162
- { height: newHeight },
2163
- duration / 2 + transitionNodes.length * stagger,
2164
- "ease"
2165
- )
2166
- );
2167
- }
2168
- await Promise.all(transitions).then(() => {
2169
- removeClass(target, clsEnter);
2170
- if (index === transitionIndex(target)) {
2171
- css(target, { height: "", alignContent: "" });
2172
- css(nodes, { opacity: "" });
2173
- delete target.dataset.transition;
2174
- }
2175
- });
2176
- });
2177
- return hasClass(target, clsLeave) ? waitTransitionend(target).then(enterFn) : hasClass(target, clsEnter) ? waitTransitionend(target).then(leaveFn).then(enterFn) : leaveFn().then(enterFn);
2178
- }
2179
- function transitionIndex(target, next) {
2180
- if (next) {
2181
- target.dataset.transition = 1 + transitionIndex(target);
2182
- }
2183
- return toNumber(target.dataset.transition) || 0;
2184
- }
2185
- function waitTransitionend(target) {
2186
- return Promise.all(
2187
- children(target).filter(Transition.inProgress).map(
2188
- (el) => new Promise((resolve) => once(el, "transitionend transitioncanceled", resolve))
2189
- )
2190
- );
2191
- }
2192
- function getTransitionNodes(target) {
2193
- return getRows(children(target)).flat().filter((node) => isVisible(node));
2194
- }
2195
- function awaitFrame$1() {
2196
- return new Promise((resolve) => requestAnimationFrame(resolve));
2197
- }
2198
- function awaitTimeout(timeout) {
2199
- return new Promise((resolve) => setTimeout(resolve, timeout));
2200
- }
2201
-
2202
2115
  async function slide(action, target, duration) {
2203
2116
  await awaitFrame();
2204
2117
  let nodes = children(target);
2205
2118
  const currentProps = nodes.map((el) => getProps$1(el, true));
2206
2119
  const targetProps = { ...css(target, ["height", "padding"]), display: "block" };
2207
2120
  await Promise.all(nodes.concat(target).map(Transition.cancel));
2208
- action();
2121
+ await action();
2209
2122
  nodes = nodes.concat(children(target).filter((el) => !includes(nodes, el)));
2210
2123
  await Promise.resolve();
2211
- fastdom.flush();
2212
2124
  const targetStyle = attr(target, "style");
2213
2125
  const targetPropsTo = css(target, ["height", "padding"]);
2214
2126
  const [propsTo, propsFrom] = getTransitionProps(target, nodes, currentProps);
@@ -2216,7 +2128,6 @@
2216
2128
  nodes.forEach((el, i) => propsFrom[i] && css(el, propsFrom[i]));
2217
2129
  css(target, targetProps);
2218
2130
  trigger(target, "scroll");
2219
- fastdom.flush();
2220
2131
  await awaitFrame();
2221
2132
  const transitions = nodes.map((el, i) => parent(el) === target && Transition.start(el, propsTo[i], duration, "ease")).concat(Transition.start(target, targetPropsTo, duration, "ease"));
2222
2133
  try {
@@ -2286,6 +2197,86 @@
2286
2197
  return new Promise((resolve) => requestAnimationFrame(resolve));
2287
2198
  }
2288
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
+
2289
2280
  var Animate = {
2290
2281
  props: {
2291
2282
  duration: Number,
@@ -3262,6 +3253,7 @@
3262
3253
  }
3263
3254
  }
3264
3255
  }
3256
+ const mutationOptions = { subtree: true, childList: true };
3265
3257
  function registerComputed(instance, key, cb) {
3266
3258
  instance._hasComputed = true;
3267
3259
  Object.defineProperty(instance, key, {
@@ -3270,6 +3262,13 @@
3270
3262
  const { _computed, $props, $el } = instance;
3271
3263
  if (!hasOwn(_computed, key)) {
3272
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
+ }
3273
3272
  }
3274
3273
  return _computed[key];
3275
3274
  },
@@ -3290,11 +3289,16 @@
3290
3289
  read: () => runWatches(instance, resetComputed(instance)),
3291
3290
  events: ["resize", "computed"]
3292
3291
  });
3293
- registerComputedObserver();
3294
- instances$1.add(instance);
3292
+ instance._computedObserver = observeMutation(
3293
+ instance.$el,
3294
+ () => callUpdate(instance, "computed"),
3295
+ mutationOptions
3296
+ );
3295
3297
  }
3296
3298
  function disconnectComputedUpdates(instance) {
3297
- 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;
3298
3302
  resetComputed(instance);
3299
3303
  }
3300
3304
  function resetComputed(instance) {
@@ -3302,23 +3306,6 @@
3302
3306
  instance._computed = {};
3303
3307
  return values;
3304
3308
  }
3305
- let observer;
3306
- let instances$1;
3307
- function registerComputedObserver() {
3308
- if (observer) {
3309
- return;
3310
- }
3311
- instances$1 = /* @__PURE__ */ new Set();
3312
- observer = new MutationObserver(() => {
3313
- for (const instance of instances$1) {
3314
- callUpdate(instance, "computed");
3315
- }
3316
- });
3317
- observer.observe(document, {
3318
- subtree: true,
3319
- childList: true
3320
- });
3321
- }
3322
3309
 
3323
3310
  function initEvents(instance) {
3324
3311
  instance._events = [];
@@ -3388,18 +3375,30 @@
3388
3375
  }
3389
3376
  const targets = hasOwn(instance, key) ? instance[key] : target;
3390
3377
  const observer = observe(targets, handler, options, args);
3391
- if (isFunction(target) && isArray(instance[key]) && observer.unobserve) {
3392
- registerWatch(instance, { handler: updateTargets(observer), immediate: false }, key);
3378
+ if (isFunction(target) && isArray(instance[key])) {
3379
+ registerWatch(
3380
+ instance,
3381
+ { handler: updateTargets(observer, options), immediate: false },
3382
+ key
3383
+ );
3393
3384
  }
3394
3385
  registerObserver(instance, observer);
3395
3386
  }
3396
- function updateTargets(observer) {
3387
+ function updateTargets(observer, options) {
3397
3388
  return (targets, prev) => {
3398
3389
  for (const target of prev) {
3399
- !includes(targets, target) && observer.unobserve(target);
3390
+ if (!includes(targets, target)) {
3391
+ if (observer.unobserve) {
3392
+ observer.unobserve(target);
3393
+ } else if (observer.observe) {
3394
+ observer.disconnect();
3395
+ }
3396
+ }
3400
3397
  }
3401
3398
  for (const target of targets) {
3402
- !includes(prev, target) && observer.observe(target);
3399
+ if (!includes(prev, target) || !observer.unobserve) {
3400
+ observer.observe(target, options);
3401
+ }
3403
3402
  }
3404
3403
  };
3405
3404
  }
@@ -3559,26 +3558,26 @@
3559
3558
  };
3560
3559
  App.util = util;
3561
3560
  App.options = {};
3562
- App.version = "3.19.5-dev.c6a7fbca6";
3561
+ App.version = "3.19.5-dev.c70b3862f";
3563
3562
 
3564
3563
  const PREFIX = "uk-";
3565
3564
  const DATA = "__uikit__";
3566
3565
  const components$2 = {};
3567
3566
  function component(name, options) {
3568
- var _a;
3567
+ var _a, _b;
3569
3568
  const id = PREFIX + hyphenate(name);
3570
3569
  if (!options) {
3571
- if (isPlainObject(components$2[id])) {
3570
+ if (!components$2[id].options) {
3572
3571
  components$2[id] = App.extend(components$2[id]);
3573
3572
  }
3574
3573
  return components$2[id];
3575
3574
  }
3576
3575
  name = camelize(name);
3577
3576
  App[name] = (element, data) => createComponent(name, element, data);
3578
- const opt = isPlainObject(options) ? { ...options } : options.options;
3577
+ const opt = (_a = options.options) != null ? _a : { ...options };
3579
3578
  opt.id = id;
3580
3579
  opt.name = name;
3581
- (_a = opt.install) == null ? void 0 : _a.call(opt, App, opt, name);
3580
+ (_b = opt.install) == null ? void 0 : _b.call(opt, App, opt, name);
3582
3581
  if (App._initialized && !opt.functional) {
3583
3582
  requestAnimationFrame(() => createComponent(name, `[${id}],[data-${id}]`));
3584
3583
  }
@@ -3586,7 +3585,7 @@
3586
3585
  }
3587
3586
  function createComponent(name, element, data, ...args) {
3588
3587
  const Component = component(name);
3589
- return Component.options.functional ? new Component({ data: isPlainObject(element) ? element : [element, data, ...args] }) : element ? $$(element).map(init)[0] : init();
3588
+ return Component.options.functional ? new Component({ data: isPlainObject(element) ? element : [element, data, ...args] }) : element ? findAll(element).map(init)[0] : init();
3590
3589
  function init(element2) {
3591
3590
  const instance = getComponent(element2, name);
3592
3591
  if (instance) {
@@ -3948,7 +3947,6 @@
3948
3947
  }
3949
3948
  }
3950
3949
  },
3951
- observe: resize(),
3952
3950
  events: {
3953
3951
  itemshow({ target }) {
3954
3952
  addClass(target, this.clsEnter, this.clsSlideActive);
@@ -4077,6 +4075,7 @@
4077
4075
  return { animation: this.animation };
4078
4076
  }
4079
4077
  },
4078
+ observe: resize(),
4080
4079
  events: {
4081
4080
  beforeitemshow({ target }) {
4082
4081
  addClass(target, this.clsActive);
@@ -4559,10 +4558,7 @@
4559
4558
  }
4560
4559
 
4561
4560
  function getMaxPathLength(el) {
4562
- return Math.ceil(Math.max(0, ...$$("[stroke]", el).map((stroke) => {
4563
- var _a;
4564
- return (_a = stroke.getTotalLength) == null ? void 0 : _a.call(stroke);
4565
- })));
4561
+ return isVisible(el) ? Math.ceil(Math.max(0, ...$$("[stroke]", el).map((stroke) => stroke.getTotalLength()))) : 0;
4566
4562
  }
4567
4563
 
4568
4564
  const props = {
@@ -4766,6 +4762,7 @@
4766
4762
  }
4767
4763
  };
4768
4764
  }
4765
+ const loading = {};
4769
4766
  const dimensions = {};
4770
4767
  function getBackgroundImageDimensions(el) {
4771
4768
  const src = css(el, "backgroundImage").replace(/^none|url\(["']?(.+?)["']?\)$/, "$1");
@@ -4775,11 +4772,12 @@
4775
4772
  const image = new Image();
4776
4773
  if (src) {
4777
4774
  image.src = src;
4778
- if (!image.naturalWidth) {
4779
- image.onload = () => {
4775
+ if (!image.naturalWidth && !loading[src]) {
4776
+ once(image, "error load", () => {
4780
4777
  dimensions[src] = toDimensions(image);
4781
4778
  trigger(el, createEvent("load", false));
4782
- };
4779
+ });
4780
+ loading[src] = true;
4783
4781
  return toDimensions(image);
4784
4782
  }
4785
4783
  }
@@ -5269,7 +5267,7 @@
5269
5267
  toggleClass(this.$el, this.clsContainer, !$(`.${this.clsContainer}`, this.$el));
5270
5268
  },
5271
5269
  observe: resize({
5272
- target: ({ slides }) => slides
5270
+ target: ({ slides, $el }) => [$el, ...slides]
5273
5271
  }),
5274
5272
  update: {
5275
5273
  write() {
@@ -5457,7 +5455,7 @@
5457
5455
  var sliderParallax = {
5458
5456
  mixins: [Parallax],
5459
5457
  beforeConnect() {
5460
- this.item = closest(this.$el, `.${this.$options.id.replace("parallax", "items")} > *`);
5458
+ this.item = this.$el.closest(`.${this.$options.id.replace("parallax", "items")} > *`);
5461
5459
  },
5462
5460
  disconnected() {
5463
5461
  this.item = null;
@@ -6394,14 +6392,14 @@
6394
6392
  if (name) {
6395
6393
  if (hasAttr(target, attributeName)) {
6396
6394
  createComponent(name, target);
6397
- return;
6395
+ } else {
6396
+ (_a = getComponent(target, name)) == null ? void 0 : _a.$destroy();
6398
6397
  }
6399
- (_a = getComponent(target, name)) == null ? void 0 : _a.$destroy();
6400
6398
  }
6401
6399
  }
6402
6400
  function connect(node) {
6403
6401
  const components2 = getComponents(node);
6404
- for (const name in getComponents(node)) {
6402
+ for (const name in components2) {
6405
6403
  callConnected(components2[name]);
6406
6404
  }
6407
6405
  for (const attributeName of node.getAttributeNames()) {
@@ -6411,7 +6409,7 @@
6411
6409
  }
6412
6410
  function disconnect(node) {
6413
6411
  const components2 = getComponents(node);
6414
- for (const name in getComponents(node)) {
6412
+ for (const name in components2) {
6415
6413
  callDisconnected(components2[name]);
6416
6414
  }
6417
6415
  }
@@ -6420,7 +6418,7 @@
6420
6418
  attribute = attribute.slice(5);
6421
6419
  }
6422
6420
  const cmp = components$2[attribute];
6423
- return cmp && (isPlainObject(cmp) ? cmp : cmp.options).name;
6421
+ return cmp && (cmp.options || cmp).name;
6424
6422
  }
6425
6423
 
6426
6424
  globalApi(App);
@@ -7163,7 +7161,8 @@
7163
7161
  document,
7164
7162
  `${pointerUp$1} ${pointerCancel} scroll`,
7165
7163
  ({ defaultPrevented, type, target: newTarget }) => {
7166
- 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))) {
7167
7166
  drop.hide(false);
7168
7167
  }
7169
7168
  },
@@ -7779,7 +7778,10 @@
7779
7778
  target: ""
7780
7779
  },
7781
7780
  computed: {
7782
- target: ({ target }, $el) => query(target, $el)
7781
+ target: {
7782
+ get: ({ target }, $el) => query(target, $el),
7783
+ observe: ({ target }) => target
7784
+ }
7783
7785
  },
7784
7786
  observe: resize({ target: ({ target }) => target }),
7785
7787
  update: {
@@ -7835,7 +7837,7 @@
7835
7837
  const top = offsetPosition(offsetTopEl)[0] - offsetPosition(scrollElement)[0];
7836
7838
  minHeight += top > 0 && top < viewportHeight / 2 ? ` - ${top}px` : "";
7837
7839
  } else {
7838
- minHeight += ` - ${css(scrollElement, "paddingTop")}`;
7840
+ minHeight += ` - ${boxModelAdjust(scrollElement, "height", css(scrollElement, "boxSizing"))}px`;
7839
7841
  }
7840
7842
  }
7841
7843
  if (this.offsetBottom === true) {
@@ -8029,7 +8031,7 @@
8029
8031
  i18n: { toggle: "Open Search", submit: "Submit Search" },
8030
8032
  beforeConnect() {
8031
8033
  const isToggle = hasClass(this.$el, "uk-search-toggle") || hasClass(this.$el, "uk-navbar-toggle");
8032
- 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;
8033
8035
  if (hasAttr(this.$el, "aria-label")) {
8034
8036
  return;
8035
8037
  }
@@ -8173,13 +8175,13 @@
8173
8175
  delete this.img;
8174
8176
  },
8175
8177
  observe: intersection({
8176
- target: ({ $el, $props }) => [$el, ...queryAll($props.target, $el)],
8177
8178
  handler(entries, observer) {
8178
8179
  this.load();
8179
8180
  observer.disconnect();
8180
8181
  },
8181
8182
  options: ({ margin }) => ({ rootMargin: margin }),
8182
- filter: ({ loading }) => loading === "lazy"
8183
+ filter: ({ loading }) => loading === "lazy",
8184
+ target: ({ $el, $props }) => $props.target ? [$el, ...queryAll($props.target, $el)] : $el
8183
8185
  }),
8184
8186
  methods: {
8185
8187
  load() {
@@ -8269,13 +8271,15 @@
8269
8271
  selActive: false
8270
8272
  },
8271
8273
  computed: {
8272
- target: ({ target }, $el) => target ? $$(target, $el) : [$el]
8274
+ target: ({ target }, $el) => target ? $$(target, $el) : $el
8273
8275
  },
8274
8276
  observe: [
8275
8277
  intersection({
8276
- handler([{ isIntersecting }]) {
8277
- this.isIntersecting = isIntersecting;
8278
+ handler(entries) {
8279
+ this.isIntersecting = entries.some(({ isIntersecting }) => isIntersecting);
8280
+ this.$emit();
8278
8281
  },
8282
+ target: ({ target }) => target,
8279
8283
  args: { intersecting: false }
8280
8284
  }),
8281
8285
  mutation({
@@ -8285,7 +8289,10 @@
8285
8289
  {
8286
8290
  target: ({ target }) => target,
8287
8291
  observe: (target, handler) => {
8288
- const observer = observeResize([...target, document.documentElement], handler);
8292
+ const observer = observeResize(
8293
+ [...toNodes(target), document.documentElement],
8294
+ handler
8295
+ );
8289
8296
  const listener = [
8290
8297
  on(document, "scroll itemshown itemhidden", handler, {
8291
8298
  passive: true,
@@ -8301,6 +8308,8 @@
8301
8308
  })
8302
8309
  ];
8303
8310
  return {
8311
+ observe: observer.observe.bind(observer),
8312
+ unobserve: observer.unobserve.bind(observer),
8304
8313
  disconnect() {
8305
8314
  observer.disconnect();
8306
8315
  listener.map((off) => off());
@@ -8317,7 +8326,7 @@
8317
8326
  if (!this.isIntersecting) {
8318
8327
  return false;
8319
8328
  }
8320
- for (const target of this.target) {
8329
+ for (const target of toNodes(this.target)) {
8321
8330
  replaceClass(
8322
8331
  target,
8323
8332
  "uk-light,uk-dark",
@@ -8432,10 +8441,11 @@
8432
8441
  };
8433
8442
  function install({ modal }) {
8434
8443
  modal.dialog = function(content, options) {
8435
- const dialog = modal(
8436
- `<div class="uk-modal"> <div class="uk-modal-dialog">${content}</div> </div>`,
8437
- { stack: true, role: "alertdialog", ...options }
8438
- );
8444
+ const dialog = modal($(`<div><div class="uk-modal-dialog">${content}</div></div>`), {
8445
+ stack: true,
8446
+ role: "alertdialog",
8447
+ ...options
8448
+ });
8439
8449
  dialog.show();
8440
8450
  on(
8441
8451
  dialog.$el,
@@ -8907,7 +8917,6 @@
8907
8917
  }
8908
8918
  trigger(el, inview ? "inview" : "outview");
8909
8919
  state.inview = inview;
8910
- this.$update(el);
8911
8920
  }
8912
8921
  }
8913
8922
  };
@@ -9054,7 +9063,7 @@
9054
9063
  target: () => document.scrollingElement,
9055
9064
  options: { box: "content-box" }
9056
9065
  }),
9057
- resize({ target: ({ $el }) => $el })
9066
+ resize()
9058
9067
  ],
9059
9068
  events: [
9060
9069
  {
@@ -9467,7 +9476,10 @@
9467
9476
  swiping: true
9468
9477
  },
9469
9478
  computed: {
9470
- connects: ({ connect }, $el) => queryAll(connect, $el),
9479
+ connects: {
9480
+ get: ({ connect }, $el) => queryAll(connect, $el),
9481
+ observe: ({ connect }) => connect
9482
+ },
9471
9483
  connectChildren() {
9472
9484
  return this.connects.map((el) => children(el)).flat();
9473
9485
  },
@@ -9656,9 +9668,12 @@
9656
9668
  queued: true
9657
9669
  },
9658
9670
  computed: {
9659
- target({ target }, $el) {
9660
- target = queryAll(target || $el.hash, $el);
9661
- 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
9662
9677
  }
9663
9678
  },
9664
9679
  connected() {