uikit 3.16.11-dev.bde560a72 → 3.16.11-dev.cc1aeb568

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 (75) hide show
  1. package/CHANGELOG.md +1 -0
  2. package/dist/css/uikit-core-rtl.css +1 -1
  3. package/dist/css/uikit-core-rtl.min.css +1 -1
  4. package/dist/css/uikit-core.css +1 -1
  5. package/dist/css/uikit-core.min.css +1 -1
  6. package/dist/css/uikit-rtl.css +1 -1
  7. package/dist/css/uikit-rtl.min.css +1 -1
  8. package/dist/css/uikit.css +1 -1
  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 +24 -28
  13. package/dist/js/components/filter.min.js +1 -1
  14. package/dist/js/components/lightbox-panel.js +85 -562
  15. package/dist/js/components/lightbox-panel.min.js +1 -1
  16. package/dist/js/components/lightbox.js +96 -574
  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 +1 -1
  21. package/dist/js/components/parallax.min.js +1 -1
  22. package/dist/js/components/slider-parallax.js +1 -1
  23. package/dist/js/components/slider-parallax.min.js +1 -1
  24. package/dist/js/components/slider.js +79 -72
  25. package/dist/js/components/slider.min.js +1 -1
  26. package/dist/js/components/slideshow-parallax.js +1 -1
  27. package/dist/js/components/slideshow-parallax.min.js +1 -1
  28. package/dist/js/components/slideshow.js +79 -72
  29. package/dist/js/components/slideshow.min.js +1 -1
  30. package/dist/js/components/sortable.js +14 -18
  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 +309 -336
  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 +435 -464
  41. package/dist/js/uikit.min.js +1 -1
  42. package/package.json +1 -1
  43. package/src/js/api/computed.js +48 -1
  44. package/src/js/api/hooks.js +12 -8
  45. package/src/js/api/observer.js +23 -41
  46. package/src/js/api/options.js +1 -0
  47. package/src/js/api/update.js +21 -37
  48. package/src/js/api/watch.js +21 -24
  49. package/src/js/components/filter.js +23 -29
  50. package/src/js/components/lightbox.js +12 -14
  51. package/src/js/components/sortable.js +13 -19
  52. package/src/js/core/accordion.js +32 -45
  53. package/src/js/core/drop.js +1 -1
  54. package/src/js/core/dropnav.js +46 -60
  55. package/src/js/core/height-match.js +2 -8
  56. package/src/js/core/img.js +6 -5
  57. package/src/js/core/navbar.js +19 -32
  58. package/src/js/core/scrollspy-nav.js +10 -12
  59. package/src/js/core/scrollspy.js +16 -17
  60. package/src/js/core/switcher.js +29 -40
  61. package/src/js/core/toggle.js +3 -7
  62. package/src/js/{util → mixin/internal}/scroll.js +1 -5
  63. package/src/js/mixin/modal.js +1 -1
  64. package/src/js/mixin/slider-nav.js +80 -76
  65. package/src/js/mixin/slider.js +10 -8
  66. package/src/js/util/fastdom.js +2 -2
  67. package/tests/drop.html +0 -1
  68. package/tests/dropnav.html +1 -1
  69. package/tests/icon.html +0 -2
  70. package/tests/modal.html +0 -1
  71. package/tests/nav.html +0 -1
  72. package/tests/navbar.html +0 -1
  73. package/tests/progress.html +0 -1
  74. package/tests/scroll.html +0 -1
  75. package/tests/sticky-navbar.html +6 -6
@@ -7,7 +7,6 @@ import {
7
7
  addClass,
8
8
  after,
9
9
  attr,
10
- children,
11
10
  css,
12
11
  findIndex,
13
12
  getIndex,
@@ -70,82 +69,69 @@ export default {
70
69
  return query(dropbarAnchor, $el) || $el;
71
70
  },
72
71
 
73
- dropbar: {
74
- get({ dropbar }) {
75
- if (!dropbar) {
76
- return null;
77
- }
78
-
79
- dropbar =
80
- this._dropbar ||
81
- query(dropbar, this.$el) ||
82
- $(`+ .${this.clsDropbar}`, this.$el);
72
+ dropbar({ dropbar }) {
73
+ if (!dropbar) {
74
+ return null;
75
+ }
83
76
 
84
- return dropbar ? dropbar : (this._dropbar = $('<div></div>'));
85
- },
86
-
87
- watch(dropbar) {
88
- addClass(
89
- dropbar,
90
- 'uk-dropbar',
91
- 'uk-dropbar-top',
92
- this.clsDropbar,
93
- `uk-${this.$options.name}-dropbar`
94
- );
95
- },
77
+ dropbar =
78
+ this._dropbar || query(dropbar, this.$el) || $(`+ .${this.clsDropbar}`, this.$el);
96
79
 
97
- immediate: true,
80
+ return dropbar ? dropbar : (this._dropbar = $('<div></div>'));
98
81
  },
99
82
 
100
83
  dropContainer(_, $el) {
101
84
  return this.container || $el;
102
85
  },
103
86
 
104
- dropdowns: {
105
- get({ clsDrop }, $el) {
106
- const dropdowns = $$(`.${clsDrop}`, $el);
87
+ dropdowns({ clsDrop }, $el) {
88
+ const dropdowns = $$(`.${clsDrop}`, $el);
107
89
 
108
- if (this.dropContainer !== $el) {
109
- for (const el of $$(`.${clsDrop}`, this.dropContainer)) {
110
- const target = this.getDropdown(el)?.targetEl;
111
- if (!includes(dropdowns, el) && target && within(target, this.$el)) {
112
- dropdowns.push(el);
113
- }
90
+ if (this.dropContainer !== $el) {
91
+ for (const el of $$(`.${clsDrop}`, this.dropContainer)) {
92
+ const target = this.getDropdown(el)?.targetEl;
93
+ if (!includes(dropdowns, el) && target && within(target, this.$el)) {
94
+ dropdowns.push(el);
114
95
  }
115
96
  }
97
+ }
116
98
 
117
- return dropdowns;
118
- },
119
-
120
- watch(dropdowns) {
121
- this.$create(
122
- 'drop',
123
- dropdowns.filter((el) => !this.getDropdown(el)),
124
- {
125
- ...this.$props,
126
- flip: false,
127
- shift: true,
128
- pos: `bottom-${this.align}`,
129
- boundary: this.boundary === true ? this.$el : this.boundary,
130
- }
131
- );
132
- },
99
+ return dropdowns;
100
+ },
133
101
 
134
- immediate: true,
102
+ items({ selNavItem }, $el) {
103
+ return $$(selNavItem, $el);
135
104
  },
105
+ },
136
106
 
137
- items: {
138
- get({ selNavItem }, $el) {
139
- return $$(selNavItem, $el);
140
- },
107
+ watch: {
108
+ dropbar(dropbar) {
109
+ addClass(
110
+ dropbar,
111
+ 'uk-dropbar',
112
+ 'uk-dropbar-top',
113
+ this.clsDropbar,
114
+ `uk-${this.$options.name}-dropbar`
115
+ );
116
+ },
141
117
 
142
- watch(items) {
143
- attr(children(this.$el), 'role', 'presentation');
144
- attr(items, 'tabindex', -1);
145
- attr(items[0], 'tabindex', 0);
146
- },
118
+ dropdowns(dropdowns) {
119
+ this.$create(
120
+ 'drop',
121
+ dropdowns.filter((el) => !this.getDropdown(el)),
122
+ {
123
+ ...this.$props,
124
+ flip: false,
125
+ shift: true,
126
+ pos: `bottom-${this.align}`,
127
+ boundary: this.boundary === true ? this.$el : this.boundary,
128
+ }
129
+ );
130
+ },
147
131
 
148
- immediate: true,
132
+ items(items) {
133
+ attr(items, 'tabindex', -1);
134
+ attr(items[0], 'tabindex', 0);
149
135
  },
150
136
  },
151
137
 
@@ -16,14 +16,8 @@ export default {
16
16
  },
17
17
 
18
18
  computed: {
19
- elements: {
20
- get({ target }, $el) {
21
- return $$(target, $el);
22
- },
23
-
24
- watch() {
25
- this.$reset();
26
- },
19
+ elements({ target }, $el) {
20
+ return $$(target, $el);
27
21
  },
28
22
  },
29
23
 
@@ -58,9 +58,10 @@ export default {
58
58
  },
59
59
 
60
60
  disconnected() {
61
- if (this._data.image) {
62
- this._data.image.onload = '';
61
+ if (this.img) {
62
+ this.img.onload = '';
63
63
  }
64
+ delete this.img;
64
65
  },
65
66
 
66
67
  observe: intersection({
@@ -75,8 +76,8 @@ export default {
75
76
 
76
77
  methods: {
77
78
  load() {
78
- if (this._data.image) {
79
- return this._data.image;
79
+ if (this.img) {
80
+ return this.img;
80
81
  }
81
82
 
82
83
  const image = isImg(this.$el)
@@ -85,7 +86,7 @@ export default {
85
86
 
86
87
  removeAttr(image, 'loading');
87
88
  setSrcAttrs(this.$el, image.currentSrc);
88
- return (this._data.image = image);
89
+ return (this.img = image);
89
90
  },
90
91
  },
91
92
  };
@@ -1,5 +1,5 @@
1
1
  import Dropnav from './dropnav';
2
- import { $$, attr, css, hasClass } from 'uikit-util';
2
+ import { $$, css, hasClass } from 'uikit-util';
3
3
 
4
4
  export default {
5
5
  extends: Dropnav,
@@ -10,37 +10,24 @@ export default {
10
10
  '.uk-navbar-nav > li > a,a.uk-navbar-item,button.uk-navbar-item,.uk-navbar-item a,.uk-navbar-item button,.uk-navbar-toggle', // Simplify with :where() selector once browser target is Safari 14+
11
11
  },
12
12
 
13
- computed: {
14
- items: {
15
- get({ selNavItem }, $el) {
16
- return $$(selNavItem, $el);
17
- },
18
-
19
- watch(items) {
20
- const justify = hasClass(this.$el, 'uk-navbar-justify');
21
- for (const container of $$(
22
- '.uk-navbar-nav, .uk-navbar-left, .uk-navbar-right',
23
- this.$el
24
- )) {
25
- css(
26
- container,
27
- 'flexGrow',
28
- justify
29
- ? $$(
30
- '.uk-navbar-nav > li > a, .uk-navbar-item, .uk-navbar-toggle',
31
- container
32
- ).length
33
- : ''
34
- );
35
- }
36
-
37
- attr($$('.uk-navbar-nav', this.$el), 'role', 'group');
38
- attr($$('.uk-navbar-nav > *', this.$el), 'role', 'presentation');
39
- attr(items, 'tabindex', -1);
40
- attr(items[0], 'tabindex', 0);
41
- },
42
-
43
- immediate: true,
13
+ watch: {
14
+ items() {
15
+ const justify = hasClass(this.$el, 'uk-navbar-justify');
16
+ for (const container of $$(
17
+ '.uk-navbar-nav, .uk-navbar-left, .uk-navbar-right',
18
+ this.$el
19
+ )) {
20
+ css(
21
+ container,
22
+ 'flexGrow',
23
+ justify
24
+ ? $$(
25
+ '.uk-navbar-nav > li > a, .uk-navbar-item, .uk-navbar-toggle',
26
+ container
27
+ ).length
28
+ : ''
29
+ );
30
+ }
44
31
  },
45
32
  },
46
33
  };
@@ -31,18 +31,8 @@ export default {
31
31
  },
32
32
 
33
33
  computed: {
34
- links: {
35
- get(_, $el) {
36
- return $$('a[href*="#"]', $el).filter((el) => el.hash && isSameSiteAnchor(el));
37
- },
38
-
39
- watch(links) {
40
- if (this.scroll) {
41
- this.$create('scroll', links, { offset: this.offset || 0 });
42
- }
43
- },
44
-
45
- immediate: true,
34
+ links(_, $el) {
35
+ return $$('a[href*="#"]', $el).filter((el) => el.hash && isSameSiteAnchor(el));
46
36
  },
47
37
 
48
38
  elements({ closest: selector }) {
@@ -50,6 +40,14 @@ export default {
50
40
  },
51
41
  },
52
42
 
43
+ watch: {
44
+ links(links) {
45
+ if (this.scroll) {
46
+ this.$create('scroll', links, { offset: this.offset || 0 });
47
+ }
48
+ },
49
+ },
50
+
53
51
  observe: scroll(),
54
52
 
55
53
  update: [
@@ -34,36 +34,35 @@ export default {
34
34
  }),
35
35
 
36
36
  computed: {
37
- elements: {
38
- get({ target }, $el) {
39
- return target ? $$(target, $el) : [$el];
40
- },
41
-
42
- watch(elements) {
43
- if (this.hidden) {
44
- // use `opacity:0` instead of `visibility:hidden` to make content focusable with keyboard
45
- css(filter(elements, `:not(.${this.inViewClass})`), 'opacity', 0);
46
- }
47
- },
37
+ elements({ target }, $el) {
38
+ return target ? $$(target, $el) : [$el];
39
+ },
40
+ },
48
41
 
49
- immediate: true,
42
+ watch: {
43
+ elements(elements) {
44
+ if (this.hidden) {
45
+ // use `opacity:0` instead of `visibility:hidden` to make content focusable with keyboard
46
+ css(filter(elements, `:not(.${this.inViewClass})`), 'opacity', 0);
47
+ }
50
48
  },
51
49
  },
52
50
 
53
51
  connected() {
54
- this._data.elements = new Map();
52
+ this.elementData = new Map();
55
53
  },
56
54
 
57
55
  disconnected() {
58
- for (const [el, state] of this._data.elements.entries()) {
56
+ for (const [el, state] of this.elementData.entries()) {
59
57
  removeClass(el, this.inViewClass, state?.cls || '');
60
58
  }
59
+ delete this.elementData;
61
60
  },
62
61
 
63
62
  observe: intersection({
64
63
  target: ({ elements }) => elements,
65
64
  handler(records) {
66
- const elements = this._data.elements;
65
+ const elements = this.elementData;
67
66
  for (const { target: el, isIntersecting } of records) {
68
67
  if (!elements.has(el)) {
69
68
  elements.set(el, {
@@ -88,7 +87,7 @@ export default {
88
87
  update: [
89
88
  {
90
89
  write(data) {
91
- for (const [el, state] of data.elements.entries()) {
90
+ for (const [el, state] of this.elementData.entries()) {
92
91
  if (state.show && !state.inview && !state.queued) {
93
92
  state.queued = true;
94
93
 
@@ -111,7 +110,7 @@ export default {
111
110
 
112
111
  methods: {
113
112
  toggle(el, inview) {
114
- const state = this._data.elements.get(el);
113
+ const state = this.elementData.get(el);
115
114
 
116
115
  if (!state) {
117
116
  return;
@@ -51,50 +51,16 @@ export default {
51
51
  },
52
52
 
53
53
  computed: {
54
- connects: {
55
- get({ connect }, $el) {
56
- return queryAll(connect, $el);
57
- },
58
-
59
- watch(connects) {
60
- if (this.swiping) {
61
- css(connects, 'touchAction', 'pan-y pinch-zoom');
62
- }
63
- this.$emit();
64
- },
65
-
66
- document: true,
67
- immediate: true,
54
+ connects({ connect }, $el) {
55
+ return queryAll(connect, $el);
68
56
  },
69
57
 
70
- connectChildren: {
71
- get() {
72
- return this.connects.map((el) => children(el)).flat();
73
- },
74
-
75
- watch() {
76
- const index = this.index();
77
- for (const el of this.connects) {
78
- children(el).forEach((child, i) => toggleClass(child, this.cls, i === index));
79
- }
80
- this.$emit();
81
- },
82
-
83
- immediate: true,
58
+ connectChildren() {
59
+ return this.connects.map((el) => children(el)).flat();
84
60
  },
85
61
 
86
- toggles: {
87
- get({ toggle }, $el) {
88
- return $$(toggle, $el);
89
- },
90
-
91
- watch(toggles) {
92
- this.$emit();
93
- const active = this.index();
94
- this.show(~active ? active : toggles[this.active] || toggles[0]);
95
- },
96
-
97
- immediate: true,
62
+ toggles({ toggle }, $el) {
63
+ return $$(toggle, $el);
98
64
  },
99
65
 
100
66
  children() {
@@ -104,6 +70,29 @@ export default {
104
70
  },
105
71
  },
106
72
 
73
+ watch: {
74
+ connects(connects) {
75
+ if (this.swiping) {
76
+ css(connects, 'touchAction', 'pan-y pinch-zoom');
77
+ }
78
+ this.$emit();
79
+ },
80
+
81
+ connectChildren() {
82
+ const index = this.index();
83
+ for (const el of this.connects) {
84
+ children(el).forEach((child, i) => toggleClass(child, this.cls, i === index));
85
+ }
86
+ this.$emit();
87
+ },
88
+
89
+ toggles(toggles) {
90
+ this.$emit();
91
+ const active = this.index();
92
+ this.show(~active ? active : toggles[this.active] || toggles[0]);
93
+ },
94
+ },
95
+
107
96
  connected() {
108
97
  attr(this.$el, 'role', 'tablist');
109
98
  },
@@ -42,13 +42,9 @@ export default {
42
42
  },
43
43
 
44
44
  computed: {
45
- target: {
46
- get({ href, target }, $el) {
47
- target = queryAll(target || href, $el);
48
- return (target.length && target) || [$el];
49
- },
50
-
51
- document: true,
45
+ target({ href, target }, $el) {
46
+ target = queryAll(target || href, $el);
47
+ return (target.length && target) || [$el];
52
48
  },
53
49
  },
54
50
 
@@ -1,8 +1,4 @@
1
- import { width } from './dimensions';
2
- import { on } from './event';
3
- import { matches } from './filter';
4
- import { css } from './style';
5
- import { scrollParents } from './viewport';
1
+ import { css, matches, on, scrollParents, width } from 'uikit-util';
6
2
 
7
3
  let prevented;
8
4
  export function preventBackgroundScroll(el) {
@@ -23,7 +23,7 @@ import {
23
23
  toFloat,
24
24
  within,
25
25
  } from 'uikit-util';
26
- import { preventBackgroundScroll } from '../util/scroll';
26
+ import { preventBackgroundScroll } from './internal/scroll';
27
27
 
28
28
  const active = [];
29
29
 
@@ -1,11 +1,12 @@
1
1
  import {
2
2
  $,
3
3
  $$,
4
+ append,
4
5
  attr,
5
6
  children,
6
7
  closest,
7
8
  data,
8
- html,
9
+ empty,
9
10
  isNumeric,
10
11
  matches,
11
12
  toFloat,
@@ -30,106 +31,109 @@ export default {
30
31
  },
31
32
 
32
33
  computed: {
33
- nav: {
34
- get({ selNav }, $el) {
35
- return $(selNav, $el);
36
- },
37
-
38
- watch(nav, prev) {
39
- attr(nav, 'role', 'tablist');
40
-
41
- if (prev) {
42
- this.$emit();
43
- }
44
- },
34
+ nav({ selNav }, $el) {
35
+ return $(selNav, $el);
36
+ },
45
37
 
46
- immediate: true,
38
+ navChildren() {
39
+ return children(this.nav);
47
40
  },
48
41
 
49
42
  selNavItem({ attrItem }) {
50
43
  return `[${attrItem}],[data-${attrItem}]`;
51
44
  },
52
45
 
53
- navItems: {
54
- get(_, $el) {
55
- return $$(this.selNavItem, $el);
56
- },
57
-
58
- watch() {
59
- this.$emit();
60
- },
46
+ navItems(_, $el) {
47
+ return $$(this.selNavItem, $el);
61
48
  },
62
49
  },
63
50
 
64
- connected() {
65
- attr(this.$el, {
66
- role: this.role,
67
- ariaRoleDescription: 'carousel',
68
- });
69
- },
51
+ watch: {
52
+ nav(nav, prev) {
53
+ attr(nav, 'role', 'tablist');
70
54
 
71
- update: [
72
- {
73
- write() {
74
- this.slides.forEach((slide, i) =>
75
- attr(slide, {
76
- role: this.nav ? 'tabpanel' : 'group',
77
- 'aria-label': this.t('slideLabel', i + 1, this.length),
78
- 'aria-roledescription': this.nav ? null : 'slide',
79
- })
80
- );
81
-
82
- if (this.nav && this.length !== this.nav.children.length) {
83
- html(
84
- this.nav,
85
- this.slides
86
- .map((_, i) => `<li ${this.attrItem}="${i}"><a href></a></li>`)
87
- .join('')
88
- );
89
- }
55
+ if (prev) {
56
+ this.$emit();
57
+ }
58
+ },
90
59
 
91
- attr(children(this.nav).concat(this.list), 'role', 'presentation');
60
+ list(list) {
61
+ attr(list, 'role', 'presentation');
62
+ },
63
+
64
+ navChildren(children) {
65
+ attr(children, 'role', 'presentation');
66
+ },
92
67
 
93
- for (const el of this.navItems) {
94
- const cmd = data(el, this.attrItem);
95
- const button = $('a,button', el) || el;
68
+ navItems(items) {
69
+ for (const el of items) {
70
+ const cmd = data(el, this.attrItem);
71
+ const button = $('a,button', el) || el;
96
72
 
97
- let ariaLabel;
98
- let ariaControls = null;
99
- if (isNumeric(cmd)) {
100
- const item = toNumber(cmd);
101
- const slide = this.slides[item];
73
+ let ariaLabel;
74
+ let ariaControls = null;
75
+ if (isNumeric(cmd)) {
76
+ const item = toNumber(cmd);
77
+ const slide = this.slides[item];
102
78
 
103
- if (slide) {
104
- if (!slide.id) {
105
- slide.id = generateId(this, slide, `-item-${cmd}`);
106
- }
107
- ariaControls = slide.id;
79
+ if (slide) {
80
+ if (!slide.id) {
81
+ slide.id = generateId(this, slide, `-item-${cmd}`);
108
82
  }
83
+ ariaControls = slide.id;
84
+ }
109
85
 
110
- ariaLabel = this.t('slideX', toFloat(cmd) + 1);
111
-
112
- attr(button, 'role', 'tab');
113
- } else {
114
- if (this.list) {
115
- if (!this.list.id) {
116
- this.list.id = generateId(this, this.list, '-items');
117
- }
86
+ ariaLabel = this.t('slideX', toFloat(cmd) + 1);
118
87
 
119
- ariaControls = this.list.id;
88
+ attr(button, 'role', 'tab');
89
+ } else {
90
+ if (this.list) {
91
+ if (!this.list.id) {
92
+ this.list.id = generateId(this, this.list, '-items');
120
93
  }
121
94
 
122
- ariaLabel = this.t(cmd);
95
+ ariaControls = this.list.id;
123
96
  }
124
97
 
125
- attr(button, {
126
- 'aria-controls': ariaControls,
127
- 'aria-label': attr(button, 'aria-label') || ariaLabel,
128
- });
98
+ ariaLabel = this.t(cmd);
129
99
  }
130
- },
100
+
101
+ attr(button, {
102
+ 'aria-controls': ariaControls,
103
+ 'aria-label': attr(button, 'aria-label') || ariaLabel,
104
+ });
105
+ }
106
+ },
107
+
108
+ slides(slides) {
109
+ slides.forEach((slide, i) =>
110
+ attr(slide, {
111
+ role: this.nav ? 'tabpanel' : 'group',
112
+ 'aria-label': this.t('slideLabel', i + 1, this.length),
113
+ 'aria-roledescription': this.nav ? null : 'slide',
114
+ })
115
+ );
131
116
  },
132
117
 
118
+ length(length) {
119
+ const navLength = this.navChildren.length;
120
+ if (this.nav && length !== navLength) {
121
+ empty(this.nav);
122
+ for (let i = 0; i < length; i++) {
123
+ append(this.nav, `<li ${this.attrItem}="${i}"><a href></a></li>`);
124
+ }
125
+ }
126
+ },
127
+ },
128
+
129
+ connected() {
130
+ attr(this.$el, {
131
+ role: this.role,
132
+ ariaRoleDescription: 'carousel',
133
+ });
134
+ },
135
+
136
+ update: [
133
137
  {
134
138
  write() {
135
139
  this.navItems.concat(this.nav).forEach((el) => el && (el.hidden = !this.maxIndex));