uikit 3.16.24-dev.d6158da87 → 3.16.25-dev.12f581d90

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 (136) hide show
  1. package/.eslintrc.json +0 -9
  2. package/.prettierrc.json +3 -4
  3. package/CHANGELOG.md +2 -1
  4. package/build/build.js +2 -2
  5. package/build/less.js +2 -2
  6. package/build/prefix.js +3 -3
  7. package/build/release.js +7 -7
  8. package/build/scope.js +3 -3
  9. package/build/scss.js +9 -9
  10. package/build/util.js +11 -11
  11. package/dist/css/uikit-core-rtl.css +1 -1
  12. package/dist/css/uikit-core-rtl.min.css +1 -1
  13. package/dist/css/uikit-core.css +1 -1
  14. package/dist/css/uikit-core.min.css +1 -1
  15. package/dist/css/uikit-rtl.css +1 -1
  16. package/dist/css/uikit-rtl.min.css +1 -1
  17. package/dist/css/uikit.css +1 -1
  18. package/dist/css/uikit.min.css +1 -1
  19. package/dist/js/components/countdown.js +2 -2
  20. package/dist/js/components/countdown.min.js +1 -1
  21. package/dist/js/components/filter.js +18 -18
  22. package/dist/js/components/filter.min.js +1 -1
  23. package/dist/js/components/lightbox-panel.js +351 -350
  24. package/dist/js/components/lightbox-panel.min.js +1 -1
  25. package/dist/js/components/lightbox.js +353 -352
  26. package/dist/js/components/lightbox.min.js +1 -1
  27. package/dist/js/components/notification.js +6 -6
  28. package/dist/js/components/notification.min.js +1 -1
  29. package/dist/js/components/parallax.js +69 -69
  30. package/dist/js/components/parallax.min.js +1 -1
  31. package/dist/js/components/slider-parallax.js +37 -37
  32. package/dist/js/components/slider-parallax.min.js +1 -1
  33. package/dist/js/components/slider.js +222 -224
  34. package/dist/js/components/slider.min.js +1 -1
  35. package/dist/js/components/slideshow-parallax.js +37 -37
  36. package/dist/js/components/slideshow-parallax.min.js +1 -1
  37. package/dist/js/components/slideshow.js +300 -302
  38. package/dist/js/components/slideshow.min.js +1 -1
  39. package/dist/js/components/sortable.js +2 -2
  40. package/dist/js/components/sortable.min.js +1 -1
  41. package/dist/js/components/tooltip.js +95 -95
  42. package/dist/js/components/tooltip.min.js +1 -1
  43. package/dist/js/components/upload.js +2 -2
  44. package/dist/js/components/upload.min.js +1 -1
  45. package/dist/js/uikit-core.js +452 -449
  46. package/dist/js/uikit-core.min.js +1 -1
  47. package/dist/js/uikit-icons.js +1 -1
  48. package/dist/js/uikit-icons.min.js +1 -1
  49. package/dist/js/uikit.js +6837 -6836
  50. package/dist/js/uikit.min.js +1 -1
  51. package/package.json +8 -7
  52. package/src/js/api/app.js +1 -1
  53. package/src/js/api/boot.js +2 -2
  54. package/src/js/api/component.js +1 -1
  55. package/src/js/api/computed.js +2 -2
  56. package/src/js/api/events.js +2 -2
  57. package/src/js/api/global.js +3 -3
  58. package/src/js/api/hooks.js +4 -4
  59. package/src/js/api/instance.js +3 -3
  60. package/src/js/api/log.js +1 -1
  61. package/src/js/api/observables.js +1 -1
  62. package/src/js/api/observer.js +2 -2
  63. package/src/js/api/options.js +2 -2
  64. package/src/js/api/props.js +2 -2
  65. package/src/js/api/state.js +2 -2
  66. package/src/js/components/countdown.js +1 -1
  67. package/src/js/components/filter.js +5 -5
  68. package/src/js/components/internal/lightbox-animations.js +1 -1
  69. package/src/js/components/internal/slider-transitioner.js +6 -6
  70. package/src/js/components/internal/slideshow-animations.js +1 -1
  71. package/src/js/components/lightbox-panel.js +10 -10
  72. package/src/js/components/lightbox.js +2 -2
  73. package/src/js/components/notification.js +4 -4
  74. package/src/js/components/parallax.js +3 -3
  75. package/src/js/components/slider-parallax.js +1 -1
  76. package/src/js/components/slider.js +12 -12
  77. package/src/js/components/slideshow.js +3 -3
  78. package/src/js/components/sortable.js +4 -4
  79. package/src/js/components/tooltip.js +6 -6
  80. package/src/js/components/upload.js +4 -4
  81. package/src/js/core/accordion.js +8 -8
  82. package/src/js/core/alert.js +2 -2
  83. package/src/js/core/cover.js +1 -1
  84. package/src/js/core/drop.js +12 -12
  85. package/src/js/core/dropnav.js +7 -7
  86. package/src/js/core/form-custom.js +1 -1
  87. package/src/js/core/grid.js +9 -9
  88. package/src/js/core/height-match.js +2 -2
  89. package/src/js/core/height-viewport.js +1 -1
  90. package/src/js/core/icon.js +23 -23
  91. package/src/js/core/img.js +2 -2
  92. package/src/js/core/index.js +16 -14
  93. package/src/js/core/leader.js +2 -2
  94. package/src/js/core/modal.js +7 -7
  95. package/src/js/core/navbar.js +4 -4
  96. package/src/js/core/offcanvas.js +3 -3
  97. package/src/js/core/overflow-auto.js +3 -3
  98. package/src/js/core/responsive.js +3 -3
  99. package/src/js/core/scrollspy-nav.js +1 -1
  100. package/src/js/core/scrollspy.js +1 -1
  101. package/src/js/core/sticky.js +12 -12
  102. package/src/js/core/svg.js +4 -4
  103. package/src/js/core/switcher.js +7 -7
  104. package/src/js/core/tab.js +2 -2
  105. package/src/js/core/toggle.js +5 -5
  106. package/src/js/core/video.js +1 -1
  107. package/src/js/mixin/animate.js +1 -1
  108. package/src/js/mixin/i18n.js +1 -1
  109. package/src/js/mixin/internal/animate-fade.js +14 -14
  110. package/src/js/mixin/internal/animate-slide.js +1 -1
  111. package/src/js/mixin/internal/scroll.js +1 -1
  112. package/src/js/mixin/modal.js +15 -12
  113. package/src/js/mixin/parallax.js +2 -2
  114. package/src/js/mixin/position.js +2 -2
  115. package/src/js/mixin/slider-drag.js +1 -1
  116. package/src/js/mixin/slider-nav.js +8 -9
  117. package/src/js/mixin/slider.js +9 -9
  118. package/src/js/mixin/slideshow.js +1 -1
  119. package/src/js/mixin/togglable.js +4 -4
  120. package/src/js/uikit-core.js +2 -2
  121. package/src/js/uikit.js +2 -2
  122. package/src/js/util/animation.js +8 -8
  123. package/src/js/util/class.js +1 -1
  124. package/src/js/util/dimensions.js +5 -5
  125. package/src/js/util/dom.js +3 -3
  126. package/src/js/util/event.js +3 -3
  127. package/src/js/util/filter.js +1 -1
  128. package/src/js/util/lang.js +4 -4
  129. package/src/js/util/observer.js +2 -2
  130. package/src/js/util/player.js +1 -1
  131. package/src/js/util/position.js +5 -5
  132. package/src/js/util/selector.js +1 -1
  133. package/src/js/util/style.js +1 -1
  134. package/src/js/util/svg.js +2 -2
  135. package/src/js/util/viewport.js +6 -6
  136. package/tests/js/index.js +7 -7
@@ -1,4 +1,4 @@
1
- /*! UIkit 3.16.24-dev.d6158da87 | https://www.getuikit.com | (c) 2014 - 2023 YOOtheme | MIT License */
1
+ /*! UIkit 3.16.25-dev.12f581d90 | https://www.getuikit.com | (c) 2014 - 2023 YOOtheme | MIT License */
2
2
 
3
3
  (function (global, factory) {
4
4
  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('uikit-util')) :
@@ -12,6 +12,23 @@
12
12
  }
13
13
  };
14
14
 
15
+ var SliderReactive = {
16
+ update: {
17
+ write() {
18
+ if (this.stack.length || this.dragging) {
19
+ return;
20
+ }
21
+ const index = this.getValidIndex(this.index);
22
+ if (!~this.prevIndex || this.index !== index) {
23
+ this.show(index);
24
+ } else {
25
+ this._translate(1, this.prevIndex, this.index);
26
+ }
27
+ },
28
+ events: ["resize"]
29
+ }
30
+ };
31
+
15
32
  var Animations$1 = {
16
33
  slide: {
17
34
  show(dir) {
@@ -33,10 +50,10 @@
33
50
  }
34
51
  function translate(value = 0, unit = "%") {
35
52
  value += value ? unit : "";
36
- return `translate3d(${value}, 0, 0)`;
53
+ return "translate3d(".concat(value, ", 0, 0)");
37
54
  }
38
55
  function scale3d(value) {
39
- return `scale3d(${value}, ${value}, 1)`;
56
+ return "scale3d(".concat(value, ", ").concat(value, ", 1)");
40
57
  }
41
58
 
42
59
  function Transitioner(prev, next, dir, { animation, easing }) {
@@ -94,6 +111,36 @@
94
111
  util.trigger(el, util.createEvent(type, false, false, data));
95
112
  }
96
113
 
114
+ function resize(options) {
115
+ return observe(util.observeResize, options, "resize");
116
+ }
117
+ function intersection(options) {
118
+ return observe(util.observeIntersection, options);
119
+ }
120
+ function lazyload(options = {}) {
121
+ return intersection({
122
+ handler: function(entries, observer) {
123
+ const { targets = this.$el, preload = 5 } = options;
124
+ for (const el of util.toNodes(util.isFunction(targets) ? targets(this) : targets)) {
125
+ util.$$('[loading="lazy"]', el).slice(0, preload - 1).forEach((el2) => util.removeAttr(el2, "loading"));
126
+ }
127
+ for (const el of entries.filter(({ isIntersecting }) => isIntersecting).map(({ target }) => target)) {
128
+ observer.unobserve(el);
129
+ }
130
+ },
131
+ ...options
132
+ });
133
+ }
134
+ function observe(observe2, options, emit) {
135
+ return {
136
+ observe: observe2,
137
+ handler() {
138
+ this.$emit(emit);
139
+ },
140
+ ...options
141
+ };
142
+ }
143
+
97
144
  var I18n = {
98
145
  props: {
99
146
  i18n: Object
@@ -113,201 +160,56 @@
113
160
  }
114
161
  };
115
162
 
116
- const keyMap = {
117
- TAB: 9,
118
- ESC: 27,
119
- SPACE: 32,
120
- END: 35,
121
- HOME: 36,
122
- LEFT: 37,
123
- UP: 38,
124
- RIGHT: 39,
125
- DOWN: 40
126
- };
127
-
128
- function generateId(instance, el = instance.$el, postfix = "") {
129
- if (el.id) {
130
- return el.id;
131
- }
132
- let id = `${instance.$options.id}-${instance._uid}${postfix}`;
133
- if (util.$(`#${id}`)) {
134
- id = generateId(instance, el, `${postfix}-2`);
135
- }
136
- return id;
137
- }
138
-
139
- var SliderNav = {
140
- i18n: {
141
- next: "Next slide",
142
- previous: "Previous slide",
143
- slideX: "Slide %s",
144
- slideLabel: "%s of %s",
145
- role: "String"
163
+ var SliderAutoplay = {
164
+ props: {
165
+ autoplay: Boolean,
166
+ autoplayInterval: Number,
167
+ pauseOnHover: Boolean
146
168
  },
147
169
  data: {
148
- selNav: false,
149
- role: "region"
170
+ autoplay: false,
171
+ autoplayInterval: 7e3,
172
+ pauseOnHover: true
150
173
  },
151
- computed: {
152
- nav({ selNav }, $el) {
153
- return util.$(selNav, $el);
154
- },
155
- navChildren() {
156
- return util.children(this.nav);
157
- },
158
- selNavItem({ attrItem }) {
159
- return `[${attrItem}],[data-${attrItem}]`;
160
- },
161
- navItems(_, $el) {
162
- return util.$$(this.selNavItem, $el);
163
- }
174
+ connected() {
175
+ util.attr(this.list, "aria-live", this.autoplay ? "off" : "polite");
176
+ this.autoplay && this.startAutoplay();
164
177
  },
165
- watch: {
166
- nav(nav, prev) {
167
- util.attr(nav, "role", "tablist");
168
- if (prev) {
169
- this.$emit();
170
- }
171
- },
172
- list(list) {
173
- util.attr(list, "role", "presentation");
174
- },
175
- navChildren(children2) {
176
- util.attr(children2, "role", "presentation");
177
- },
178
- navItems(items) {
179
- for (const el of items) {
180
- const cmd = util.data(el, this.attrItem);
181
- const button = util.$("a,button", el) || el;
182
- let ariaLabel;
183
- let ariaControls = null;
184
- if (util.isNumeric(cmd)) {
185
- const item = util.toNumber(cmd);
186
- const slide = this.slides[item];
187
- if (slide) {
188
- if (!slide.id) {
189
- slide.id = generateId(this, slide, `-item-${cmd}`);
190
- }
191
- ariaControls = slide.id;
192
- }
193
- ariaLabel = this.t("slideX", util.toFloat(cmd) + 1);
194
- util.attr(button, "role", "tab");
195
- } else {
196
- if (this.list) {
197
- if (!this.list.id) {
198
- this.list.id = generateId(this, this.list, "-items");
199
- }
200
- ariaControls = this.list.id;
201
- }
202
- ariaLabel = this.t(cmd);
203
- }
204
- util.attr(button, {
205
- "aria-controls": ariaControls,
206
- "aria-label": util.attr(button, "aria-label") || ariaLabel
207
- });
208
- }
209
- },
210
- slides(slides) {
211
- slides.forEach(
212
- (slide, i) => util.attr(slide, {
213
- role: this.nav ? "tabpanel" : "group",
214
- "aria-label": this.t("slideLabel", i + 1, this.length),
215
- "aria-roledescription": this.nav ? null : "slide"
216
- })
217
- );
218
- },
219
- length(length) {
220
- const navLength = this.navChildren.length;
221
- if (this.nav && length !== navLength) {
222
- util.empty(this.nav);
223
- for (let i = 0; i < length; i++) {
224
- util.append(this.nav, `<li ${this.attrItem}="${i}"><a href></a></li>`);
225
- }
226
- }
227
- }
178
+ disconnected() {
179
+ this.stopAutoplay();
228
180
  },
229
- connected() {
230
- util.attr(this.$el, {
231
- role: this.role,
232
- "aria-roledescription": "carousel"
233
- });
181
+ update() {
182
+ util.attr(this.slides, "tabindex", "-1");
234
183
  },
235
- update: [
236
- {
237
- write() {
238
- this.navItems.concat(this.nav).forEach((el) => el && (el.hidden = !this.maxIndex));
239
- this.updateNav();
240
- },
241
- events: ["resize"]
242
- }
243
- ],
244
184
  events: [
245
185
  {
246
- name: "click keydown",
247
- delegate() {
248
- return this.selNavItem;
186
+ name: "visibilitychange",
187
+ el() {
188
+ return document;
249
189
  },
250
- handler(e) {
251
- if (util.closest(e.target, "a,button") && (e.type === "click" || e.keyCode === keyMap.SPACE)) {
252
- e.preventDefault();
253
- this.show(util.data(e.current, this.attrItem));
254
- }
255
- }
256
- },
257
- {
258
- name: "itemshow",
259
- handler: "updateNav"
260
- },
261
- {
262
- name: "keydown",
263
- delegate() {
264
- return this.selNavItem;
190
+ filter() {
191
+ return this.autoplay;
265
192
  },
266
- handler(e) {
267
- const { current, keyCode } = e;
268
- const cmd = util.data(current, this.attrItem);
269
- if (!util.isNumeric(cmd)) {
270
- return;
271
- }
272
- let i = keyCode === keyMap.HOME ? 0 : keyCode === keyMap.END ? "last" : keyCode === keyMap.LEFT ? "previous" : keyCode === keyMap.RIGHT ? "next" : -1;
273
- if (~i) {
274
- e.preventDefault();
275
- this.show(i);
193
+ handler() {
194
+ if (document.hidden) {
195
+ this.stopAutoplay();
196
+ } else {
197
+ this.startAutoplay();
276
198
  }
277
199
  }
278
200
  }
279
201
  ],
280
202
  methods: {
281
- updateNav() {
282
- const index = this.getValidIndex();
283
- let focus;
284
- let focusEl;
285
- for (const el of this.navItems) {
286
- const cmd = util.data(el, this.attrItem);
287
- const button = util.$("a,button", el) || el;
288
- if (util.isNumeric(cmd)) {
289
- const item = util.toNumber(cmd);
290
- const active = item === index;
291
- util.toggleClass(el, this.clsActive, active);
292
- util.attr(button, {
293
- "aria-selected": active,
294
- tabindex: active ? null : -1
295
- });
296
- if (active) {
297
- focusEl = button;
298
- }
299
- focus || (focus = util.matches(button, ":focus"));
300
- } else {
301
- util.toggleClass(
302
- el,
303
- "uk-invisible",
304
- this.finite && (cmd === "previous" && index === 0 || cmd === "next" && index >= this.maxIndex)
305
- );
306
- }
307
- if (focus && focusEl) {
308
- focusEl.focus();
203
+ startAutoplay() {
204
+ this.stopAutoplay();
205
+ this.interval = setInterval(() => {
206
+ if (!(this.stack.length || this.draggable && util.matches(this.$el, ":focus-within") || this.pauseOnHover && util.matches(this.$el, ":hover"))) {
207
+ this.show("next");
309
208
  }
310
- }
209
+ }, this.autoplayInterval);
210
+ },
211
+ stopAutoplay() {
212
+ clearInterval(this.interval);
311
213
  }
312
214
  }
313
215
  };
@@ -341,7 +243,7 @@
341
243
  name: pointerDown,
342
244
  passive: true,
343
245
  delegate() {
344
- return `${this.selList} > *`;
246
+ return "".concat(this.selList, " > *");
345
247
  },
346
248
  handler(e) {
347
249
  if (!this.draggable || !util.isTouch(e) && hasSelectableText(e.target) || util.closest(e.target, util.selInput) || e.button > 0 || this.length < 2) {
@@ -433,124 +335,237 @@
433
335
  util.trigger(next, "itemshow", [this]);
434
336
  }
435
337
  },
436
- end() {
437
- util.off(document, pointerMove, this.move, pointerOptions);
438
- util.off(document, pointerUp, this.end, pointerUpOptions);
439
- if (this.dragging) {
440
- this.dragging = null;
441
- if (this.index === this.prevIndex) {
442
- this.percent = 1 - this.percent;
443
- this.dir *= -1;
444
- this._show(false, this.index, true);
445
- this._transitioner = null;
338
+ end() {
339
+ util.off(document, pointerMove, this.move, pointerOptions);
340
+ util.off(document, pointerUp, this.end, pointerUpOptions);
341
+ if (this.dragging) {
342
+ this.dragging = null;
343
+ if (this.index === this.prevIndex) {
344
+ this.percent = 1 - this.percent;
345
+ this.dir *= -1;
346
+ this._show(false, this.index, true);
347
+ this._transitioner = null;
348
+ } else {
349
+ const dirChange = (util.isRtl ? this.dir * (util.isRtl ? 1 : -1) : this.dir) < 0 === this.prevPos > this.pos;
350
+ this.index = dirChange ? this.index : this.prevIndex;
351
+ if (dirChange) {
352
+ this.percent = 1 - this.percent;
353
+ }
354
+ this.show(
355
+ this.dir > 0 && !dirChange || this.dir < 0 && dirChange ? "next" : "previous",
356
+ true
357
+ );
358
+ }
359
+ }
360
+ util.css(this.list, { userSelect: "", pointerEvents: "" });
361
+ this.drag = this.percent = null;
362
+ },
363
+ _getDistance(prev, next) {
364
+ return this._getTransitioner(prev, prev !== next && next).getDistance() || this.slides[prev].offsetWidth;
365
+ }
366
+ }
367
+ };
368
+ function hasSelectableText(el) {
369
+ return util.css(el, "userSelect") !== "none" && util.toArray(el.childNodes).some((el2) => el2.nodeType === 3 && el2.textContent.trim());
370
+ }
371
+
372
+ function generateId(instance, el = instance.$el, postfix = "") {
373
+ if (el.id) {
374
+ return el.id;
375
+ }
376
+ let id = "".concat(instance.$options.id, "-").concat(instance._uid).concat(postfix);
377
+ if (util.$("#".concat(id))) {
378
+ id = generateId(instance, el, "".concat(postfix, "-2"));
379
+ }
380
+ return id;
381
+ }
382
+
383
+ const keyMap = {
384
+ TAB: 9,
385
+ ESC: 27,
386
+ SPACE: 32,
387
+ END: 35,
388
+ HOME: 36,
389
+ LEFT: 37,
390
+ UP: 38,
391
+ RIGHT: 39,
392
+ DOWN: 40
393
+ };
394
+
395
+ var SliderNav = {
396
+ i18n: {
397
+ next: "Next slide",
398
+ previous: "Previous slide",
399
+ slideX: "Slide %s",
400
+ slideLabel: "%s of %s",
401
+ role: "String"
402
+ },
403
+ data: {
404
+ selNav: false,
405
+ role: "region"
406
+ },
407
+ computed: {
408
+ nav({ selNav }, $el) {
409
+ return util.$(selNav, $el);
410
+ },
411
+ navChildren() {
412
+ return util.children(this.nav);
413
+ },
414
+ selNavItem({ attrItem }) {
415
+ return "[".concat(attrItem, "],[data-").concat(attrItem, "]");
416
+ },
417
+ navItems(_, $el) {
418
+ return util.$$(this.selNavItem, $el);
419
+ }
420
+ },
421
+ watch: {
422
+ nav(nav, prev) {
423
+ util.attr(nav, "role", "tablist");
424
+ if (prev) {
425
+ this.$emit();
426
+ }
427
+ },
428
+ list(list) {
429
+ util.attr(list, "role", "presentation");
430
+ },
431
+ navChildren(children2) {
432
+ util.attr(children2, "role", "presentation");
433
+ },
434
+ navItems(items) {
435
+ for (const el of items) {
436
+ const cmd = util.data(el, this.attrItem);
437
+ const button = util.$("a,button", el) || el;
438
+ let ariaLabel;
439
+ let ariaControls = null;
440
+ if (util.isNumeric(cmd)) {
441
+ const item = util.toNumber(cmd);
442
+ const slide = this.slides[item];
443
+ if (slide) {
444
+ if (!slide.id) {
445
+ slide.id = generateId(this, slide, "-item-".concat(cmd));
446
+ }
447
+ ariaControls = slide.id;
448
+ }
449
+ ariaLabel = this.t("slideX", util.toFloat(cmd) + 1);
450
+ util.attr(button, "role", "tab");
446
451
  } else {
447
- const dirChange = (util.isRtl ? this.dir * (util.isRtl ? 1 : -1) : this.dir) < 0 === this.prevPos > this.pos;
448
- this.index = dirChange ? this.index : this.prevIndex;
449
- if (dirChange) {
450
- this.percent = 1 - this.percent;
452
+ if (this.list) {
453
+ if (!this.list.id) {
454
+ this.list.id = generateId(this, this.list, "-items");
455
+ }
456
+ ariaControls = this.list.id;
451
457
  }
452
- this.show(
453
- this.dir > 0 && !dirChange || this.dir < 0 && dirChange ? "next" : "previous",
454
- true
455
- );
458
+ ariaLabel = this.t(cmd);
456
459
  }
460
+ util.attr(button, {
461
+ "aria-controls": ariaControls,
462
+ "aria-label": util.attr(button, "aria-label") || ariaLabel
463
+ });
457
464
  }
458
- util.css(this.list, { userSelect: "", pointerEvents: "" });
459
- this.drag = this.percent = null;
460
465
  },
461
- _getDistance(prev, next) {
462
- return this._getTransitioner(prev, prev !== next && next).getDistance() || this.slides[prev].offsetWidth;
466
+ slides(slides) {
467
+ slides.forEach(
468
+ (slide, i) => util.attr(slide, {
469
+ role: this.nav ? "tabpanel" : "group",
470
+ "aria-label": this.t("slideLabel", i + 1, this.length),
471
+ "aria-roledescription": this.nav ? null : "slide"
472
+ })
473
+ );
474
+ },
475
+ length(length) {
476
+ const navLength = this.navChildren.length;
477
+ if (this.nav && length !== navLength) {
478
+ util.empty(this.nav);
479
+ for (let i = 0; i < length; i++) {
480
+ util.append(this.nav, "<li ".concat(this.attrItem, '="').concat(i, '"><a href></a></li>'));
481
+ }
482
+ }
463
483
  }
464
- }
465
- };
466
- function hasSelectableText(el) {
467
- return util.css(el, "userSelect") !== "none" && util.toArray(el.childNodes).some((el2) => el2.nodeType === 3 && el2.textContent.trim());
468
- }
469
-
470
- var SliderAutoplay = {
471
- props: {
472
- autoplay: Boolean,
473
- autoplayInterval: Number,
474
- pauseOnHover: Boolean
475
- },
476
- data: {
477
- autoplay: false,
478
- autoplayInterval: 7e3,
479
- pauseOnHover: true
480
484
  },
481
485
  connected() {
482
- util.attr(this.list, "aria-live", this.autoplay ? "off" : "polite");
483
- this.autoplay && this.startAutoplay();
484
- },
485
- disconnected() {
486
- this.stopAutoplay();
487
- },
488
- update() {
489
- util.attr(this.slides, "tabindex", "-1");
486
+ util.attr(this.$el, {
487
+ role: this.role,
488
+ "aria-roledescription": "carousel"
489
+ });
490
490
  },
491
+ update: [
492
+ {
493
+ write() {
494
+ this.navItems.concat(this.nav).forEach((el) => el && (el.hidden = !this.maxIndex));
495
+ this.updateNav();
496
+ },
497
+ events: ["resize"]
498
+ }
499
+ ],
491
500
  events: [
492
501
  {
493
- name: "visibilitychange",
494
- el() {
495
- return document;
502
+ name: "click keydown",
503
+ delegate() {
504
+ return this.selNavItem;
496
505
  },
497
- filter() {
498
- return this.autoplay;
506
+ handler(e) {
507
+ if (util.closest(e.target, "a,button") && (e.type === "click" || e.keyCode === keyMap.SPACE)) {
508
+ e.preventDefault();
509
+ this.show(util.data(e.current, this.attrItem));
510
+ }
511
+ }
512
+ },
513
+ {
514
+ name: "itemshow",
515
+ handler: "updateNav"
516
+ },
517
+ {
518
+ name: "keydown",
519
+ delegate() {
520
+ return this.selNavItem;
499
521
  },
500
- handler() {
501
- if (document.hidden) {
502
- this.stopAutoplay();
503
- } else {
504
- this.startAutoplay();
522
+ handler(e) {
523
+ const { current, keyCode } = e;
524
+ const cmd = util.data(current, this.attrItem);
525
+ if (!util.isNumeric(cmd)) {
526
+ return;
527
+ }
528
+ let i = keyCode === keyMap.HOME ? 0 : keyCode === keyMap.END ? "last" : keyCode === keyMap.LEFT ? "previous" : keyCode === keyMap.RIGHT ? "next" : -1;
529
+ if (~i) {
530
+ e.preventDefault();
531
+ this.show(i);
505
532
  }
506
533
  }
507
534
  }
508
535
  ],
509
536
  methods: {
510
- startAutoplay() {
511
- this.stopAutoplay();
512
- this.interval = setInterval(() => {
513
- if (!(this.stack.length || this.draggable && util.matches(this.$el, ":focus-within") || this.pauseOnHover && util.matches(this.$el, ":hover"))) {
514
- this.show("next");
537
+ updateNav() {
538
+ const index = this.getValidIndex();
539
+ let focusEl;
540
+ for (const el of this.navItems) {
541
+ const cmd = util.data(el, this.attrItem);
542
+ const button = util.$("a,button", el) || el;
543
+ if (util.isNumeric(cmd)) {
544
+ const item = util.toNumber(cmd);
545
+ const active = item === index;
546
+ util.toggleClass(el, this.clsActive, active);
547
+ util.attr(button, {
548
+ "aria-selected": active,
549
+ tabindex: active ? null : -1
550
+ });
551
+ if (active) {
552
+ focusEl || (focusEl = util.matches(util.parent(el), ":focus-within") && button);
553
+ }
554
+ } else {
555
+ util.toggleClass(
556
+ el,
557
+ "uk-invisible",
558
+ this.finite && (cmd === "previous" && index === 0 || cmd === "next" && index >= this.maxIndex)
559
+ );
515
560
  }
516
- }, this.autoplayInterval);
517
- },
518
- stopAutoplay() {
519
- clearInterval(this.interval);
561
+ if (focusEl && util.isInView(focusEl)) {
562
+ focusEl.focus();
563
+ }
564
+ }
520
565
  }
521
566
  }
522
567
  };
523
568
 
524
- function resize(options) {
525
- return observe(util.observeResize, options, "resize");
526
- }
527
- function intersection(options) {
528
- return observe(util.observeIntersection, options);
529
- }
530
- function lazyload(options = {}) {
531
- return intersection({
532
- handler: function(entries, observer) {
533
- const { targets = this.$el, preload = 5 } = options;
534
- for (const el of util.toNodes(util.isFunction(targets) ? targets(this) : targets)) {
535
- util.$$('[loading="lazy"]', el).slice(0, preload - 1).forEach((el2) => util.removeAttr(el2, "loading"));
536
- }
537
- for (const el of entries.filter(({ isIntersecting }) => isIntersecting).map(({ target }) => target)) {
538
- observer.unobserve(el);
539
- }
540
- },
541
- ...options
542
- });
543
- }
544
- function observe(observe2, options, emit) {
545
- return {
546
- observe: observe2,
547
- handler() {
548
- this.$emit(emit);
549
- },
550
- ...options
551
- };
552
- }
553
-
554
569
  var Slider = {
555
570
  mixins: [SliderAutoplay, SliderDrag, SliderNav, I18n],
556
571
  props: {
@@ -733,6 +748,13 @@
733
748
  }
734
749
  };
735
750
 
751
+ var SliderPreload = {
752
+ observe: lazyload({
753
+ target: ({ slides }) => slides,
754
+ targets: (instance) => instance.getAdjacentSlides()
755
+ })
756
+ };
757
+
736
758
  var Animations = {
737
759
  ...Animations$1,
738
760
  fade: {
@@ -808,30 +830,6 @@
808
830
  }
809
831
  };
810
832
 
811
- var SliderReactive = {
812
- update: {
813
- write() {
814
- if (this.stack.length || this.dragging) {
815
- return;
816
- }
817
- const index = this.getValidIndex(this.index);
818
- if (!~this.prevIndex || this.index !== index) {
819
- this.show(index);
820
- } else {
821
- this._translate(1, this.prevIndex, this.index);
822
- }
823
- },
824
- events: ["resize"]
825
- }
826
- };
827
-
828
- var SliderPreload = {
829
- observe: lazyload({
830
- target: ({ slides }) => slides,
831
- targets: (instance) => instance.getAdjacentSlides()
832
- })
833
- };
834
-
835
833
  var Component = {
836
834
  mixins: [Class, Slideshow, SliderReactive, SliderPreload],
837
835
  props: {