uikit 3.11.2-dev.03e47c2ff → 3.11.2-dev.06fe7f1d0

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 (72) hide show
  1. package/CHANGELOG.md +5 -1
  2. package/dist/css/uikit-core-rtl.css +12 -6
  3. package/dist/css/uikit-core-rtl.min.css +1 -1
  4. package/dist/css/uikit-core.css +12 -6
  5. package/dist/css/uikit-core.min.css +1 -1
  6. package/dist/css/uikit-rtl.css +12 -6
  7. package/dist/css/uikit-rtl.min.css +1 -1
  8. package/dist/css/uikit.css +12 -6
  9. package/dist/css/uikit.min.css +1 -1
  10. package/dist/js/components/countdown.js +3 -3
  11. package/dist/js/components/countdown.min.js +1 -1
  12. package/dist/js/components/filter.js +1 -1
  13. package/dist/js/components/filter.min.js +1 -1
  14. package/dist/js/components/lightbox-panel.js +4 -14
  15. package/dist/js/components/lightbox-panel.min.js +1 -1
  16. package/dist/js/components/lightbox.js +4 -14
  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 +8 -9
  21. package/dist/js/components/parallax.min.js +1 -1
  22. package/dist/js/components/slider-parallax.js +8 -9
  23. package/dist/js/components/slider-parallax.min.js +1 -1
  24. package/dist/js/components/slider.js +59 -78
  25. package/dist/js/components/slider.min.js +1 -1
  26. package/dist/js/components/slideshow-parallax.js +8 -9
  27. package/dist/js/components/slideshow-parallax.min.js +1 -1
  28. package/dist/js/components/slideshow.js +23 -45
  29. package/dist/js/components/slideshow.min.js +1 -1
  30. package/dist/js/components/sortable.js +1 -1
  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 +2 -1
  35. package/dist/js/components/upload.min.js +1 -1
  36. package/dist/js/uikit-core.js +357 -264
  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 +414 -361
  41. package/dist/js/uikit.min.js +1 -1
  42. package/package.json +1 -1
  43. package/src/js/api/hooks.js +2 -2
  44. package/src/js/api/state.js +173 -140
  45. package/src/js/components/countdown.js +2 -2
  46. package/src/js/components/internal/slider-preload.js +4 -32
  47. package/src/js/components/slider.js +39 -42
  48. package/src/js/components/upload.js +2 -1
  49. package/src/js/core/accordion.js +6 -1
  50. package/src/js/core/core.js +2 -75
  51. package/src/js/core/cover.js +5 -1
  52. package/src/js/core/drop.js +3 -1
  53. package/src/js/core/form-custom.js +2 -2
  54. package/src/js/core/height-viewport.js +3 -0
  55. package/src/js/core/img.js +16 -24
  56. package/src/js/core/offcanvas.js +2 -1
  57. package/src/js/core/sticky.js +27 -33
  58. package/src/js/core/switcher.js +11 -3
  59. package/src/js/core/toggle.js +3 -1
  60. package/src/js/core/video.js +13 -1
  61. package/src/js/mixin/lazyload.js +20 -0
  62. package/src/js/mixin/parallax.js +8 -9
  63. package/src/js/mixin/slider.js +0 -6
  64. package/src/js/mixin/slideshow.js +0 -4
  65. package/src/js/mixin/swipe.js +72 -0
  66. package/src/js/util/index.js +1 -0
  67. package/src/js/util/observer.js +36 -0
  68. package/src/less/components/utility.less +6 -3
  69. package/src/scss/components/utility.scss +6 -3
  70. package/tests/parallax.html +2 -2
  71. package/tests/sticky-parallax.html +1 -1
  72. package/tests/utility.html +17 -0
@@ -1,4 +1,4 @@
1
- /*! UIkit 3.11.2-dev.03e47c2ff | https://www.getuikit.com | (c) 2014 - 2022 YOOtheme | MIT License */
1
+ /*! UIkit 3.11.2-dev.06fe7f1d0 | https://www.getuikit.com | (c) 2014 - 2022 YOOtheme | MIT License */
2
2
 
3
3
  (function (global, factory) {
4
4
  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
@@ -1470,6 +1470,41 @@
1470
1470
  return { x: x1 + ua * (x2 - x1), y: y1 + ua * (y2 - y1) };
1471
1471
  }
1472
1472
 
1473
+ // Old chromium based browsers (UC Browser) did not implement `isIntersecting`
1474
+ const hasIntersectionObserver =
1475
+ window.IntersectionObserver && 'isIntersecting' in IntersectionObserverEntry.prototype;
1476
+ function observeIntersection(targets, cb, options, intersecting) {if (intersecting === void 0) {intersecting = true;}
1477
+ if (!hasIntersectionObserver) {
1478
+ return;
1479
+ }
1480
+
1481
+ const observer = new IntersectionObserver((entries, observer) => {
1482
+ if (!intersecting || entries.some((entry) => entry.isIntersecting)) {
1483
+ cb(entries, observer);
1484
+ }
1485
+ }, options);
1486
+ for (const el of toNodes(targets)) {
1487
+ observer.observe(el);
1488
+ }
1489
+ return observer;
1490
+ }
1491
+
1492
+ const hasResizeObserver = window.ResizeObserver;
1493
+ function observeResize(targets, cb, options) {if (options === void 0) {options = { box: 'border-box' };}
1494
+ if (!hasResizeObserver) {
1495
+ return;
1496
+ }
1497
+
1498
+ const observer = new ResizeObserver((entries, observer) => {
1499
+ cb(entries, observer);
1500
+ });
1501
+ for (const el of toNodes(targets)) {
1502
+ observer.observe(el, options);
1503
+ }
1504
+
1505
+ return observer;
1506
+ }
1507
+
1473
1508
  const strats = {};
1474
1509
 
1475
1510
  strats.events =
@@ -2147,6 +2182,9 @@
2147
2182
  memoize: memoize,
2148
2183
  Deferred: Deferred,
2149
2184
  MouseTracker: MouseTracker,
2185
+ hasIntersectionObserver: hasIntersectionObserver,
2186
+ observeIntersection: observeIntersection,
2187
+ observeResize: observeResize,
2150
2188
  mergeOptions: mergeOptions,
2151
2189
  parseOptions: parseOptions,
2152
2190
  play: play,
@@ -2324,8 +2362,8 @@
2324
2362
  };
2325
2363
 
2326
2364
  function runUpdates(types) {
2327
- for (const { read, write, events } of this.$options.update) {
2328
- if (!types.has('update') && (!events || !events.some((type) => types.has(type)))) {
2365
+ for (const { read, write, events = [] } of this.$options.update) {
2366
+ if (!types.has('update') && !events.some((type) => types.has(type))) {
2329
2367
  continue;
2330
2368
  }
2331
2369
 
@@ -2446,204 +2484,236 @@
2446
2484
  }
2447
2485
  }
2448
2486
  }
2487
+ for (const { events = [] } of this.$options.update || []) {
2488
+ if (includes(events, 'scroll')) {
2489
+ registerScrollListener(this._uid, () => this.$emit('scroll'));
2490
+ break;
2491
+ }
2492
+ }
2449
2493
  };
2450
2494
 
2451
2495
  UIkit.prototype._unbindEvents = function () {
2452
2496
  this._events.forEach((unbind) => unbind());
2453
2497
  delete this._events;
2498
+ unregisterScrollListener(this._uid);
2454
2499
  };
2455
2500
 
2456
2501
  UIkit.prototype._initObservers = function () {
2457
2502
  this._observers = [initChildListObserver(this), initPropsObserver(this)];
2458
2503
  };
2459
2504
 
2505
+ UIkit.prototype.registerObserver = function (observer) {
2506
+ this._observers.push(observer);
2507
+ };
2508
+
2460
2509
  UIkit.prototype._disconnectObservers = function () {
2461
2510
  this._observers.forEach((observer) => observer == null ? void 0 : observer.disconnect());
2462
2511
  };
2512
+ }
2463
2513
 
2464
- function getProps(opts, name) {
2465
- const data$1 = {};
2466
- const { args = [], props = {}, el } = opts;
2467
-
2468
- if (!props) {
2469
- return data$1;
2470
- }
2514
+ function getProps(opts, name) {
2515
+ const data$1 = {};
2516
+ const { args = [], props = {}, el } = opts;
2471
2517
 
2472
- for (const key in props) {
2473
- const prop = hyphenate(key);
2474
- let value = data(el, prop);
2518
+ if (!props) {
2519
+ return data$1;
2520
+ }
2475
2521
 
2476
- if (isUndefined(value)) {
2477
- continue;
2478
- }
2522
+ for (const key in props) {
2523
+ const prop = hyphenate(key);
2524
+ let value = data(el, prop);
2479
2525
 
2480
- value = props[key] === Boolean && value === '' ? true : coerce(props[key], value);
2526
+ if (isUndefined(value)) {
2527
+ continue;
2528
+ }
2481
2529
 
2482
- if (prop === 'target' && (!value || startsWith(value, '_'))) {
2483
- continue;
2484
- }
2530
+ value = props[key] === Boolean && value === '' ? true : coerce(props[key], value);
2485
2531
 
2486
- data$1[key] = value;
2532
+ if (prop === 'target' && (!value || startsWith(value, '_'))) {
2533
+ continue;
2487
2534
  }
2488
2535
 
2489
- const options = parseOptions(data(el, name), args);
2536
+ data$1[key] = value;
2537
+ }
2490
2538
 
2491
- for (const key in options) {
2492
- const prop = camelize(key);
2493
- if (props[prop] !== undefined) {
2494
- data$1[prop] = coerce(props[prop], options[key]);
2495
- }
2496
- }
2539
+ const options = parseOptions(data(el, name), args);
2497
2540
 
2498
- return data$1;
2541
+ for (const key in options) {
2542
+ const prop = camelize(key);
2543
+ if (props[prop] !== undefined) {
2544
+ data$1[prop] = coerce(props[prop], options[key]);
2545
+ }
2499
2546
  }
2500
2547
 
2501
- function registerComputed(component, key, cb) {
2502
- Object.defineProperty(component, key, {
2503
- enumerable: true,
2548
+ return data$1;
2549
+ }
2504
2550
 
2505
- get() {
2506
- const { _computeds, $props, $el } = component;
2551
+ function registerComputed(component, key, cb) {
2552
+ Object.defineProperty(component, key, {
2553
+ enumerable: true,
2507
2554
 
2508
- if (!hasOwn(_computeds, key)) {
2509
- _computeds[key] = (cb.get || cb).call(component, $props, $el);
2510
- }
2555
+ get() {
2556
+ const { _computeds, $props, $el } = component;
2511
2557
 
2512
- return _computeds[key];
2513
- },
2558
+ if (!hasOwn(_computeds, key)) {
2559
+ _computeds[key] = (cb.get || cb).call(component, $props, $el);
2560
+ }
2514
2561
 
2515
- set(value) {
2516
- const { _computeds } = component;
2562
+ return _computeds[key];
2563
+ },
2517
2564
 
2518
- _computeds[key] = cb.set ? cb.set.call(component, value) : value;
2565
+ set(value) {
2566
+ const { _computeds } = component;
2519
2567
 
2520
- if (isUndefined(_computeds[key])) {
2521
- delete _computeds[key];
2522
- }
2523
- } });
2568
+ _computeds[key] = cb.set ? cb.set.call(component, value) : value;
2569
+
2570
+ if (isUndefined(_computeds[key])) {
2571
+ delete _computeds[key];
2572
+ }
2573
+ } });
2574
+
2575
+ }
2524
2576
 
2577
+ function registerEvent(component, event, key) {
2578
+ if (!isPlainObject(event)) {
2579
+ event = { name: key, handler: event };
2525
2580
  }
2526
2581
 
2527
- function registerEvent(component, event, key) {
2528
- if (!isPlainObject(event)) {
2529
- event = { name: key, handler: event };
2530
- }
2582
+ let { name, el, handler, capture, passive, delegate, filter, self } = event;
2583
+ el = isFunction(el) ? el.call(component) : el || component.$el;
2531
2584
 
2532
- let { name, el, handler, capture, passive, delegate, filter, self } = event;
2533
- el = isFunction(el) ? el.call(component) : el || component.$el;
2585
+ if (isArray(el)) {
2586
+ el.forEach((el) => registerEvent(component, { ...event, el }, key));
2587
+ return;
2588
+ }
2534
2589
 
2535
- if (isArray(el)) {
2536
- el.forEach((el) => registerEvent(component, { ...event, el }, key));
2537
- return;
2538
- }
2590
+ if (!el || filter && !filter.call(component)) {
2591
+ return;
2592
+ }
2539
2593
 
2540
- if (!el || filter && !filter.call(component)) {
2541
- return;
2542
- }
2594
+ component._events.push(
2595
+ on(
2596
+ el,
2597
+ name,
2598
+ delegate ? isString(delegate) ? delegate : delegate.call(component) : null,
2599
+ isString(handler) ? component[handler] : handler.bind(component),
2600
+ { passive, capture, self }));
2543
2601
 
2544
- component._events.push(
2545
- on(
2546
- el,
2547
- name,
2548
- delegate ? isString(delegate) ? delegate : delegate.call(component) : null,
2549
- isString(handler) ? component[handler] : handler.bind(component),
2550
- { passive, capture, self }));
2551
2602
 
2603
+ }
2552
2604
 
2553
- }
2605
+ function notIn(options, key) {
2606
+ return options.every((arr) => !arr || !hasOwn(arr, key));
2607
+ }
2554
2608
 
2555
- function notIn(options, key) {
2556
- return options.every((arr) => !arr || !hasOwn(arr, key));
2609
+ function coerce(type, value) {
2610
+ if (type === Boolean) {
2611
+ return toBoolean(value);
2612
+ } else if (type === Number) {
2613
+ return toNumber(value);
2614
+ } else if (type === 'list') {
2615
+ return toList(value);
2557
2616
  }
2558
2617
 
2559
- function coerce(type, value) {
2560
- if (type === Boolean) {
2561
- return toBoolean(value);
2562
- } else if (type === Number) {
2563
- return toNumber(value);
2564
- } else if (type === 'list') {
2565
- return toList(value);
2566
- }
2618
+ return type ? type(value) : value;
2619
+ }
2567
2620
 
2568
- return type ? type(value) : value;
2621
+ function toList(value) {
2622
+ return isArray(value) ?
2623
+ value :
2624
+ isString(value) ?
2625
+ value.
2626
+ split(/,(?![^(]*\))/).
2627
+ map((value) => isNumeric(value) ? toNumber(value) : toBoolean(value.trim())) :
2628
+ [value];
2629
+ }
2630
+
2631
+ function normalizeData(_ref, _ref2) {let { data = {} } = _ref;let { args = [], props = {} } = _ref2;
2632
+ if (isArray(data)) {
2633
+ data = data.slice(0, args.length).reduce((data, value, index) => {
2634
+ if (isPlainObject(value)) {
2635
+ assign(data, value);
2636
+ } else {
2637
+ data[args[index]] = value;
2638
+ }
2639
+ return data;
2640
+ }, {});
2569
2641
  }
2570
2642
 
2571
- function toList(value) {
2572
- return isArray(value) ?
2573
- value :
2574
- isString(value) ?
2575
- value.
2576
- split(/,(?![^(]*\))/).
2577
- map((value) => isNumeric(value) ? toNumber(value) : toBoolean(value.trim())) :
2578
- [value];
2643
+ for (const key in data) {
2644
+ if (isUndefined(data[key])) {
2645
+ delete data[key];
2646
+ } else if (props[key]) {
2647
+ data[key] = coerce(props[key], data[key]);
2648
+ }
2579
2649
  }
2580
2650
 
2581
- function normalizeData(_ref, _ref2) {let { data = {} } = _ref;let { args = [], props = {} } = _ref2;
2582
- if (isArray(data)) {
2583
- data = data.slice(0, args.length).reduce((data, value, index) => {
2584
- if (isPlainObject(value)) {
2585
- assign(data, value);
2586
- } else {
2587
- data[args[index]] = value;
2588
- }
2589
- return data;
2590
- }, {});
2591
- }
2651
+ return data;
2652
+ }
2592
2653
 
2593
- for (const key in data) {
2594
- if (isUndefined(data[key])) {
2595
- delete data[key];
2596
- } else if (props[key]) {
2597
- data[key] = coerce(props[key], data[key]);
2598
- }
2599
- }
2654
+ function initChildListObserver(component) {
2655
+ const { el } = component.$options;
2600
2656
 
2601
- return data;
2602
- }
2657
+ const observer = new MutationObserver(() => component.$emit());
2658
+ observer.observe(el, {
2659
+ childList: true,
2660
+ subtree: true });
2603
2661
 
2604
- function initChildListObserver(component) {
2605
- const { el } = component.$options;
2606
2662
 
2607
- const observer = new MutationObserver(() => component.$emit());
2608
- observer.observe(el, {
2609
- childList: true,
2610
- subtree: true });
2663
+ return observer;
2664
+ }
2611
2665
 
2666
+ function initPropsObserver(component) {
2667
+ const { $name, $options, $props } = component;
2668
+ const { attrs, props, el } = $options;
2612
2669
 
2613
- return observer;
2670
+ if (!props || attrs === false) {
2671
+ return;
2614
2672
  }
2615
2673
 
2616
- function initPropsObserver(component) {
2617
- const { $name, $options, $props } = component;
2618
- const { attrs, props, el } = $options;
2674
+ const attributes = isArray(attrs) ? attrs : Object.keys(props);
2675
+ const filter = attributes.map((key) => hyphenate(key)).concat($name);
2619
2676
 
2620
- if (!props || attrs === false) {
2621
- return;
2677
+ const observer = new MutationObserver((records) => {
2678
+ const data = getProps($options, $name);
2679
+ if (
2680
+ records.some((_ref3) => {let { attributeName } = _ref3;
2681
+ const prop = attributeName.replace('data-', '');
2682
+ return (
2683
+ prop === $name ? attributes : [camelize(prop), camelize(attributeName)]).
2684
+ some((prop) => !isUndefined(data[prop]) && data[prop] !== $props[prop]);
2685
+ }))
2686
+ {
2687
+ component.$reset();
2622
2688
  }
2689
+ });
2623
2690
 
2624
- const attributes = isArray(attrs) ? attrs : Object.keys(props);
2625
- const filter = attributes.map((key) => hyphenate(key)).concat($name);
2691
+ observer.observe(el, {
2692
+ attributes: true,
2693
+ attributeFilter: filter.concat(filter.map((key) => "data-" + key)) });
2626
2694
 
2627
- const observer = new MutationObserver((records) => {
2628
- const data = getProps($options, $name);
2629
- if (
2630
- records.some((_ref3) => {let { attributeName } = _ref3;
2631
- const prop = attributeName.replace('data-', '');
2632
- return (
2633
- prop === $name ? attributes : [camelize(prop), camelize(attributeName)]).
2634
- some((prop) => !isUndefined(data[prop]) && data[prop] !== $props[prop]);
2635
- }))
2636
- {
2637
- component.$reset();
2638
- }
2639
- });
2640
2695
 
2641
- observer.observe(el, {
2642
- attributes: true,
2643
- attributeFilter: filter.concat(filter.map((key) => "data-" + key)) });
2696
+ return observer;
2697
+ }
2698
+
2699
+ const scrollListeners = new Map();
2700
+ let unbindScrollListener;
2701
+ function registerScrollListener(id, listener) {
2702
+ unbindScrollListener =
2703
+ unbindScrollListener ||
2704
+ on(window, 'scroll', () => scrollListeners.forEach((listener) => listener()), {
2705
+ passive: true,
2706
+ capture: true });
2644
2707
 
2645
2708
 
2646
- return observer;
2709
+ scrollListeners.set(id, listener);
2710
+ }
2711
+
2712
+ function unregisterScrollListener(id) {
2713
+ scrollListeners.delete(id);
2714
+ if (unbindScrollListener && !scrollListeners.size) {
2715
+ unbindScrollListener();
2716
+ unbindScrollListener = null;
2647
2717
  }
2648
2718
  }
2649
2719
 
@@ -2820,7 +2890,7 @@
2820
2890
  UIkit.data = '__uikit__';
2821
2891
  UIkit.prefix = 'uk-';
2822
2892
  UIkit.options = {};
2823
- UIkit.version = '3.11.2-dev.03e47c2ff';
2893
+ UIkit.version = '3.11.2-dev.06fe7f1d0';
2824
2894
 
2825
2895
  globalAPI(UIkit);
2826
2896
  hooksAPI(UIkit);
@@ -2846,27 +2916,7 @@
2846
2916
 
2847
2917
  on(window, 'load resize', handleResize);
2848
2918
  on(document, 'loadedmetadata load', handleResize, true);
2849
-
2850
- if ('ResizeObserver' in window) {
2851
- new ResizeObserver(handleResize).observe(document.documentElement);
2852
- }
2853
-
2854
- // throttle `scroll` event (Safari triggers multiple `scroll` events per frame)
2855
- let pending;
2856
- on(
2857
- window,
2858
- 'scroll',
2859
- (e) => {
2860
- if (pending) {
2861
- return;
2862
- }
2863
- pending = true;
2864
- fastdom.read(() => pending = false);
2865
-
2866
- UIkit.update(null, e.type);
2867
- },
2868
- { passive: true, capture: true });
2869
-
2919
+ observeResize(document.documentElement, handleResize);
2870
2920
 
2871
2921
  let started = 0;
2872
2922
  on(
@@ -2885,45 +2935,6 @@
2885
2935
  },
2886
2936
  true);
2887
2937
 
2888
-
2889
- on(
2890
- document,
2891
- pointerDown,
2892
- (e) => {
2893
- if (!isTouch(e)) {
2894
- return;
2895
- }
2896
-
2897
- // Handle Swipe Gesture
2898
- const pos = getEventPos(e);
2899
- const target = 'tagName' in e.target ? e.target : parent(e.target);
2900
- once(document, pointerUp + " " + pointerCancel + " scroll", (e) => {
2901
- const { x, y } = getEventPos(e);
2902
-
2903
- // swipe
2904
- if (
2905
- e.type !== 'scroll' && target && x && Math.abs(pos.x - x) > 100 ||
2906
- y && Math.abs(pos.y - y) > 100)
2907
- {
2908
- setTimeout(() => {
2909
- trigger(target, 'swipe');
2910
- trigger(target, "swipe" + swipeDirection(pos.x, pos.y, x, y));
2911
- });
2912
- }
2913
- });
2914
- },
2915
- { passive: true });
2916
-
2917
- }
2918
-
2919
- function swipeDirection(x1, y1, x2, y2) {
2920
- return Math.abs(x1 - x2) >= Math.abs(y1 - y2) ?
2921
- x1 - x2 > 0 ?
2922
- 'Left' :
2923
- 'Right' :
2924
- y1 - y2 > 0 ?
2925
- 'Up' :
2926
- 'Down';
2927
2938
  }
2928
2939
 
2929
2940
  function boot (UIkit) {
@@ -2988,6 +2999,23 @@
2988
2999
  !hasClass(this.$el, this.$name) && addClass(this.$el, this.$name);
2989
3000
  } };
2990
3001
 
3002
+ var Lazyload = {
3003
+ methods: {
3004
+ lazyload(observeTargets, targets) {if (observeTargets === void 0) {observeTargets = this.$el;}if (targets === void 0) {targets = this.$el;}
3005
+ this.registerObserver(
3006
+ observeIntersection(observeTargets, (entries, observer) => {
3007
+ for (const el of toNodes(isFunction(targets) ? targets() : targets)) {
3008
+ $$('[loading="lazy"]', el).forEach((el) => removeAttr(el, 'loading'));
3009
+ }
3010
+ for (const el of entries.
3011
+ filter((_ref) => {let { isIntersecting } = _ref;return isIntersecting;}).
3012
+ map((_ref2) => {let { target } = _ref2;return target;})) {
3013
+ observer.unobserve(el);
3014
+ }
3015
+ }));
3016
+
3017
+ } } };
3018
+
2991
3019
  var Togglable = {
2992
3020
  props: {
2993
3021
  cls: Boolean,
@@ -3175,7 +3203,7 @@
3175
3203
  }
3176
3204
 
3177
3205
  var Accordion = {
3178
- mixins: [Class, Togglable],
3206
+ mixins: [Class, Lazyload, Togglable],
3179
3207
 
3180
3208
  props: {
3181
3209
  targets: String,
@@ -3231,6 +3259,10 @@
3231
3259
  } },
3232
3260
 
3233
3261
 
3262
+ connected() {
3263
+ this.lazyload();
3264
+ },
3265
+
3234
3266
  events: [
3235
3267
  {
3236
3268
  name: 'click',
@@ -3366,6 +3398,8 @@
3366
3398
  if (this.automute) {
3367
3399
  mute(this.$el);
3368
3400
  }
3401
+
3402
+ this.registerObserver(observeIntersection(this.$el, () => this.$emit('resize')));
3369
3403
  },
3370
3404
 
3371
3405
  update: {
@@ -3402,6 +3436,10 @@
3402
3436
  automute: true },
3403
3437
 
3404
3438
 
3439
+ connected() {
3440
+ this.registerObserver(observeResize(this.$el, () => this.$emit('resize')));
3441
+ },
3442
+
3405
3443
  update: {
3406
3444
  read() {
3407
3445
  const el = this.$el;
@@ -3527,7 +3565,7 @@
3527
3565
  let active$1;
3528
3566
 
3529
3567
  var drop = {
3530
- mixins: [Container, Position, Togglable],
3568
+ mixins: [Container, Lazyload, Position, Togglable],
3531
3569
 
3532
3570
  args: 'pos',
3533
3571
 
@@ -3581,6 +3619,7 @@
3581
3619
  mode: this.mode }).
3582
3620
  $el;
3583
3621
  attr(this.target, 'aria-haspopup', true);
3622
+ this.lazyload(this.target);
3584
3623
  }
3585
3624
  },
3586
3625
 
@@ -3956,7 +3995,7 @@
3956
3995
  name: 'change',
3957
3996
 
3958
3997
  handler() {
3959
- this.$update();
3998
+ this.$emit();
3960
3999
  } },
3961
4000
 
3962
4001
 
@@ -3968,7 +4007,7 @@
3968
4007
  },
3969
4008
 
3970
4009
  handler() {
3971
- this.$update();
4010
+ this.$emit();
3972
4011
  } }] };
3973
4012
 
3974
4013
  // Deprecated
@@ -4325,6 +4364,8 @@
4325
4364
  }
4326
4365
 
4327
4366
  var heightViewport = {
4367
+ mixins: [Class],
4368
+
4328
4369
  props: {
4329
4370
  expand: Boolean,
4330
4371
  offsetTop: Boolean,
@@ -4784,7 +4825,6 @@
4784
4825
  }
4785
4826
 
4786
4827
  const nativeLazyLoad = ('loading' in HTMLImageElement.prototype);
4787
- const nativeIsIntersecting = ('isIntersecting' in IntersectionObserverEntry.prototype); // Old chromium based browsers (UC Browser) did not implement `isIntersecting`
4788
4828
 
4789
4829
  var img = {
4790
4830
  args: 'dataSrc',
@@ -4814,13 +4854,13 @@
4814
4854
  },
4815
4855
 
4816
4856
  watch() {
4817
- this.observe();
4857
+ this.$reset();
4818
4858
  } } },
4819
4859
 
4820
4860
 
4821
4861
 
4822
4862
  connected() {
4823
- if (this.loading !== 'lazy' || !window.IntersectionObserver || !nativeIsIntersecting) {
4863
+ if (this.loading !== 'lazy' || !hasIntersectionObserver) {
4824
4864
  this.load();
4825
4865
  return;
4826
4866
  }
@@ -4836,28 +4876,27 @@
4836
4876
 
4837
4877
  ensureSrcAttribute(this.$el);
4838
4878
 
4839
- const rootMargin = toPx(this.offsetTop, 'height') + "px " + toPx(
4840
- this.offsetLeft,
4841
- 'width') + "px";
4842
-
4843
- this.observer = new IntersectionObserver(
4844
- (entries) => {
4845
- if (entries.some((entry) => entry.isIntersecting)) {
4846
- this.load();
4847
- this.observer.disconnect();
4848
- }
4879
+ this.registerObserver(
4880
+ observeIntersection(
4881
+ this.target,
4882
+ (entries, observer) => {
4883
+ this.load();
4884
+ observer.disconnect();
4849
4885
  },
4850
- { rootMargin });
4886
+ {
4887
+ rootMargin: toPx(this.offsetTop, 'height') + "px " + toPx(
4888
+ this.offsetLeft,
4889
+ 'width') + "px" }));
4890
+
4891
+
4892
+
4851
4893
 
4852
- this.observe();
4853
4894
  },
4854
4895
 
4855
- disconnected() {var _this$observer;
4896
+ disconnected() {
4856
4897
  if (this._data.image) {
4857
4898
  this._data.image.onload = '';
4858
4899
  }
4859
-
4860
- (_this$observer = this.observer) == null ? void 0 : _this$observer.disconnect();
4861
4900
  },
4862
4901
 
4863
4902
  update: {
@@ -4892,14 +4931,6 @@
4892
4931
  removeAttr(image, 'loading');
4893
4932
  setSrcAttrs(this.$el, image.currentSrc);
4894
4933
  return this._data.image = image;
4895
- },
4896
-
4897
- observe() {
4898
- if (this._connected && !this._data.image) {
4899
- for (const el of this.target) {
4900
- this.observer.observe(el);
4901
- }
4902
- }
4903
4934
  } } };
4904
4935
 
4905
4936
 
@@ -5923,8 +5954,69 @@
5923
5954
  RIGHT: 39,
5924
5955
  DOWN: 40 };
5925
5956
 
5957
+ var Swipe = {
5958
+ props: {
5959
+ swiping: Boolean },
5960
+
5961
+
5962
+ data: {
5963
+ swiping: true },
5964
+
5965
+
5966
+ computed: {
5967
+ swipeTarget(props, $el) {
5968
+ return $el;
5969
+ } },
5970
+
5971
+
5972
+ connected() {
5973
+ if (!this.swiping) {
5974
+ return;
5975
+ }
5976
+
5977
+ registerEvent(this, {
5978
+ el: this.swipeTarget,
5979
+ name: pointerDown,
5980
+ passive: true,
5981
+ handler(e) {
5982
+ if (!isTouch(e)) {
5983
+ return;
5984
+ }
5985
+
5986
+ // Handle Swipe Gesture
5987
+ const pos = getEventPos(e);
5988
+ const target = 'tagName' in e.target ? e.target : parent(e.target);
5989
+ once(document, pointerUp + " " + pointerCancel + " scroll", (e) => {
5990
+ const { x, y } = getEventPos(e);
5991
+
5992
+ // swipe
5993
+ if (
5994
+ e.type !== 'scroll' && target && x && Math.abs(pos.x - x) > 100 ||
5995
+ y && Math.abs(pos.y - y) > 100)
5996
+ {
5997
+ setTimeout(() => {
5998
+ trigger(target, 'swipe');
5999
+ trigger(target, "swipe" + swipeDirection(pos.x, pos.y, x, y));
6000
+ });
6001
+ }
6002
+ });
6003
+ } });
6004
+
6005
+ } };
6006
+
6007
+
6008
+ function swipeDirection(x1, y1, x2, y2) {
6009
+ return Math.abs(x1 - x2) >= Math.abs(y1 - y2) ?
6010
+ x1 - x2 > 0 ?
6011
+ 'Left' :
6012
+ 'Right' :
6013
+ y1 - y2 > 0 ?
6014
+ 'Up' :
6015
+ 'Down';
6016
+ }
6017
+
5926
6018
  var offcanvas = {
5927
- mixins: [Modal],
6019
+ mixins: [Modal, Swipe],
5928
6020
 
5929
6021
  args: 'mode',
5930
6022
 
@@ -6557,34 +6649,29 @@
6557
6649
  return window;
6558
6650
  },
6559
6651
 
6652
+ filter() {
6653
+ return this.targetOffset !== false;
6654
+ },
6655
+
6560
6656
  handler() {
6561
- if (!(this.targetOffset !== false && location.hash && scrollTop(window) > 0)) {
6657
+ if (!location.hash || scrollTop(window) === 0) {
6562
6658
  return;
6563
6659
  }
6564
6660
 
6565
- const target = $(location.hash);
6566
-
6567
- if (target) {
6568
- fastdom.read(() => {
6569
- const { top } = offset(target);
6570
- const elTop = offset(this.$el).top;
6571
- const elHeight = this.$el.offsetHeight;
6661
+ fastdom.read(() => {
6662
+ const targetOffset = offset($(location.hash));
6663
+ const elOffset = offset(this.$el);
6572
6664
 
6573
- if (
6574
- this.isFixed &&
6575
- elTop + elHeight >= top &&
6576
- elTop <= top + target.offsetHeight)
6577
- {
6578
- scrollTop(
6579
- window,
6580
- top -
6581
- elHeight - (
6582
- isNumeric(this.targetOffset) ? this.targetOffset : 0) -
6583
- this._data.offset);
6665
+ if (this.isFixed && intersectRect(targetOffset, elOffset)) {
6666
+ scrollTop(
6667
+ window,
6668
+ targetOffset.top -
6669
+ elOffset.height -
6670
+ toPx(this.targetOffset, 'height') -
6671
+ toPx(this.offset, 'height'));
6584
6672
 
6585
- }
6586
- });
6587
- }
6673
+ }
6674
+ });
6588
6675
  } }],
6589
6676
 
6590
6677
 
@@ -6615,20 +6702,19 @@
6615
6702
  }
6616
6703
 
6617
6704
  const referenceElement = this.isFixed ? this.placeholder : this.$el;
6705
+ const windowHeight = height(window);
6618
6706
 
6619
6707
  let position = this.position;
6620
-
6621
- if (position === 'auto') {
6622
- position = height$1 > height(window) ? 'bottom' : 'top';
6708
+ if (position === 'auto' && height$1 > windowHeight) {
6709
+ position = 'bottom';
6623
6710
  }
6624
6711
 
6625
- let offset$1 = this.offset;
6712
+ let offset$1 = toPx(this.offset, 'height', referenceElement);
6626
6713
  if (position === 'bottom') {
6627
- offset$1 += '+100vh-100%';
6714
+ offset$1 += windowHeight - height$1;
6628
6715
  }
6629
- offset$1 = toPx(offset$1, 'height', referenceElement);
6630
6716
 
6631
- const overflow = Math.max(0, height$1 + offset$1 - height(window));
6717
+ const overflow = Math.max(0, height$1 + offset$1 - windowHeight);
6632
6718
  const topOffset = offset(referenceElement).top;
6633
6719
  const offsetParentTop = offset(referenceElement.offsetParent).top;
6634
6720
 
@@ -6638,7 +6724,7 @@
6638
6724
  const start = Math.max(top, topOffset) - offset$1;
6639
6725
  const end = bottom ?
6640
6726
  bottom - offset(this.$el).height + overflow - offset$1 :
6641
- getScrollingElement(this.$el).scrollHeight - height(window);
6727
+ getScrollingElement(this.$el).scrollHeight - windowHeight;
6642
6728
 
6643
6729
  return {
6644
6730
  start,
@@ -6844,7 +6930,7 @@
6844
6930
  }
6845
6931
 
6846
6932
  var Switcher = {
6847
- mixins: [Togglable],
6933
+ mixins: [Lazyload, Swipe, Togglable],
6848
6934
 
6849
6935
  args: 'connect',
6850
6936
 
@@ -6852,8 +6938,7 @@
6852
6938
  connect: String,
6853
6939
  toggle: String,
6854
6940
  itemNav: String,
6855
- active: Number,
6856
- swiping: Boolean },
6941
+ active: Number },
6857
6942
 
6858
6943
 
6859
6944
  data: {
@@ -6861,7 +6946,6 @@
6861
6946
  toggle: '> * > :first-child',
6862
6947
  itemNav: false,
6863
6948
  active: 0,
6864
- swiping: true,
6865
6949
  cls: 'uk-active',
6866
6950
  attrItem: 'uk-switcher-item' },
6867
6951
 
@@ -6905,9 +6989,17 @@
6905
6989
  return children(this.$el).filter((child) =>
6906
6990
  this.toggles.some((toggle) => within(toggle, child)));
6907
6991
 
6992
+ },
6993
+
6994
+ swipeTarget() {
6995
+ return this.connects;
6908
6996
  } },
6909
6997
 
6910
6998
 
6999
+ connected() {
7000
+ this.lazyload(this.$el, this.connects);
7001
+ },
7002
+
6911
7003
  events: [
6912
7004
  {
6913
7005
  name: 'click',
@@ -7016,7 +7108,7 @@
7016
7108
  const KEY_SPACE = 32;
7017
7109
 
7018
7110
  var toggle = {
7019
- mixins: [Media, Togglable],
7111
+ mixins: [Lazyload, Media, Togglable],
7020
7112
 
7021
7113
  args: 'target',
7022
7114
 
@@ -7038,6 +7130,7 @@
7038
7130
  if (!includes(this.mode, 'media') && !isFocusable(this.$el)) {
7039
7131
  attr(this.$el, 'tabindex', '0');
7040
7132
  }
7133
+ this.lazyload(this.$el, this.target);
7041
7134
  },
7042
7135
 
7043
7136
  computed: {