easy-component-ui 3.0.11 → 3.0.13

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 (78) hide show
  1. package/README.md +162 -162
  2. package/dist/assets/icon.css +1 -1
  3. package/dist/components/Base.js +190 -188
  4. package/dist/components/ea-alert.js +71 -54
  5. package/dist/components/ea-avatar.js +42 -37
  6. package/dist/components/ea-breadcrumb.js +33 -33
  7. package/dist/components/ea-button.js +53 -52
  8. package/dist/components/ea-card.js +63 -27
  9. package/dist/components/ea-carousel.js +2 -2
  10. package/dist/components/ea-collapse.js +93 -73
  11. package/dist/components/ea-color-picker.js +221 -221
  12. package/dist/components/ea-container.js +90 -61
  13. package/dist/components/ea-countdown.js +77 -56
  14. package/dist/components/ea-date-picker.js +1 -1
  15. package/dist/components/ea-descriptions.js +133 -70
  16. package/dist/components/ea-dialog.js +4 -4
  17. package/dist/components/ea-drawer.js +93 -71
  18. package/dist/components/ea-empty.js +31 -23
  19. package/dist/components/ea-icon.js +122 -32
  20. package/dist/components/ea-image-preview.js +237 -193
  21. package/dist/components/ea-image.js +69 -44
  22. package/dist/components/ea-input-number.js +9 -9
  23. package/dist/components/ea-input.js +15 -15
  24. package/dist/components/ea-layout.js +10 -3
  25. package/dist/components/ea-link.js +1 -1
  26. package/dist/components/ea-menu.js +69 -53
  27. package/dist/components/ea-message-box.js +73 -73
  28. package/dist/components/ea-message.js +184 -121
  29. package/dist/components/ea-notification.js +80 -80
  30. package/dist/components/ea-overlay.js +41 -34
  31. package/dist/components/ea-page-header.js +5 -5
  32. package/dist/components/ea-pagination.js +6 -5
  33. package/dist/components/ea-popconfirm.js +133 -78
  34. package/dist/components/ea-popover.js +35 -11
  35. package/dist/components/ea-popper.js +9 -9
  36. package/dist/components/ea-progress.js +88 -71
  37. package/dist/components/ea-rate.js +1 -1
  38. package/dist/components/ea-result.js +20 -20
  39. package/dist/components/ea-select.js +119 -108
  40. package/dist/components/ea-skeleton.js +99 -82
  41. package/dist/components/ea-slider.js +88 -79
  42. package/dist/components/ea-splitter.js +34 -18
  43. package/dist/components/ea-statistic.js +72 -4
  44. package/dist/components/ea-steps.js +108 -74
  45. package/dist/components/ea-table.js +562 -434
  46. package/dist/components/ea-tabs.js +28 -28
  47. package/dist/components/ea-tag.js +37 -43
  48. package/dist/components/ea-time-picker.js +2 -6
  49. package/dist/components/ea-timeline.js +11 -12
  50. package/dist/components/ea-tooltip.js +63 -23
  51. package/dist/components/ea-tour.js +21 -21
  52. package/dist/components/ea-transfer.js +2 -2
  53. package/dist/components/ea-tree.js +1 -1
  54. package/dist/components/index.js +1 -2
  55. package/dist/css/ea-card.style.js +2 -2
  56. package/dist/css/ea-collapse-item.style.js +1 -1
  57. package/dist/css/ea-color-picker-panel.style.js +1 -1
  58. package/dist/css/ea-container.style.js +1 -1
  59. package/dist/css/ea-descriptions-item.style.js +2 -2
  60. package/dist/css/ea-descriptions.style.js +1 -1
  61. package/dist/css/ea-empty.style.js +1 -1
  62. package/dist/css/ea-footer.style.js +1 -1
  63. package/dist/css/ea-progress.style.js +1 -1
  64. package/dist/css/ea-skeleton.style.js +1 -1
  65. package/dist/css/ea-step.style.js +1 -1
  66. package/dist/css/ea-switch.style.js +1 -1
  67. package/dist/css/ea-tab.style.js +1 -1
  68. package/dist/css/ea-table-column.style.js +4 -0
  69. package/dist/css/ea-table.style.js +1 -1
  70. package/dist/css/ea-tabs.style.js +1 -1
  71. package/dist/css/ea-tag.style.js +1 -1
  72. package/dist/css/ea-time-picker.style.js +1 -1
  73. package/dist/css/ea-timeline-item.style.js +1 -1
  74. package/dist/utils/Variables.js +10 -17
  75. package/dist/utils/parseTime.js +73 -0
  76. package/package.json +302 -304
  77. package/dist/components/ea-loading.js +0 -151
  78. package/dist/components/ea-statistic2.js +0 -83
@@ -1,20 +1,20 @@
1
- var f = Object.defineProperty;
2
- var p = (s) => {
3
- throw TypeError(s);
1
+ var m = Object.defineProperty;
2
+ var b = (e) => {
3
+ throw TypeError(e);
4
4
  };
5
- var y = (s, i, t) => i in s ? f(s, i, { enumerable: !0, configurable: !0, writable: !0, value: t }) : s[i] = t;
6
- var d = (s, i, t) => y(s, typeof i != "symbol" ? i + "" : i, t), b = (s, i, t) => i.has(s) || p("Cannot " + t);
7
- var e = (s, i, t) => (b(s, i, "read from private field"), t ? t.call(s) : i.get(s)), u = (s, i, t) => i.has(s) ? p("Cannot add the same private member more than once") : i instanceof WeakSet ? i.add(s) : i.set(s, t), h = (s, i, t, o) => (b(s, i, "write to private field"), o ? o.call(s, t) : i.set(s, t), t);
5
+ var y = (e, s, t) => s in e ? m(e, s, { enumerable: !0, configurable: !0, writable: !0, value: t }) : e[s] = t;
6
+ var c = (e, s, t) => y(e, typeof s != "symbol" ? s + "" : s, t), p = (e, s, t) => s.has(e) || b("Cannot " + t);
7
+ var a = (e, s, t) => (p(e, s, "read from private field"), t ? t.call(e) : s.get(e)), u = (e, s, t) => s.has(e) ? b("Cannot add the same private member more than once") : s instanceof WeakSet ? s.add(e) : s.set(e, t), d = (e, s, t, r) => (p(e, s, "write to private field"), r ? r.call(e, t) : s.set(e, t), t);
8
8
  import { F as C } from "../core/FormBase.js";
9
9
  import { s as g } from "../css/ea-button.style.js";
10
10
  import { B as v } from "./Base.js";
11
- import { s as w } from "../css/ea-button-group.style.js";
12
- var a, l, n, c;
13
- class A extends C {
11
+ import { s as A } from "../css/ea-button-group.style.js";
12
+ var o, l, n, h;
13
+ class w extends C {
14
14
  constructor() {
15
15
  super();
16
16
  /** @type {HTMLButtonElement | HTMLLinkElement} */
17
- u(this, a);
17
+ u(this, o);
18
18
  /** @type {HTMLIconElement} */
19
19
  u(this, l);
20
20
  /** @type {AbortController} */
@@ -34,104 +34,104 @@ class A extends C {
34
34
  * @property {string} icon
35
35
  */
36
36
  /** @type {state} */
37
- d(this, "state", this.properties({
37
+ c(this, "state", this.properties({
38
38
  disabled: {
39
39
  type: Boolean,
40
40
  default: !1,
41
41
  observer: (t) => {
42
- e(this, a).className = this.updateContainerClasslist();
42
+ this.updateContainerClasslist();
43
43
  }
44
44
  },
45
45
  type: {
46
46
  type: ["normal", "primary", "success", "warning", "danger"],
47
47
  default: "normal",
48
48
  observer: (t) => {
49
- e(this, a).className = this.updateContainerClasslist();
49
+ this.updateContainerClasslist();
50
50
  }
51
51
  },
52
52
  text: {
53
53
  type: Boolean,
54
54
  default: !1,
55
55
  observer: (t) => {
56
- e(this, a).className = this.updateContainerClasslist();
56
+ this.updateContainerClasslist();
57
57
  }
58
58
  },
59
59
  plain: {
60
60
  type: Boolean,
61
61
  default: !1,
62
62
  observer: (t) => {
63
- e(this, a).className = this.updateContainerClasslist();
63
+ this.updateContainerClasslist();
64
64
  }
65
65
  },
66
66
  round: {
67
67
  type: Boolean,
68
68
  default: !1,
69
69
  observer: (t) => {
70
- e(this, a).className = this.updateContainerClasslist();
70
+ this.updateContainerClasslist();
71
71
  }
72
72
  },
73
73
  circle: {
74
74
  type: Boolean,
75
75
  default: !1,
76
76
  observer: (t) => {
77
- e(this, a).className = this.updateContainerClasslist();
77
+ this.updateContainerClasslist();
78
78
  }
79
79
  },
80
80
  link: {
81
81
  type: Boolean,
82
82
  default: !1,
83
83
  observer: (t) => {
84
- this.$render(), e(this, a).href = this.getAttribute("href"), e(this, a).className = this.updateContainerClasslist();
84
+ this.$render(), a(this, o).href = this.getAttribute("href"), this.updateContainerClasslist();
85
85
  }
86
86
  },
87
87
  href: {
88
88
  type: String,
89
89
  default: "",
90
90
  observer: (t) => {
91
- e(this, a).className = this.updateContainerClasslist(), e(this, a).setAttribute("href", t);
91
+ this.updateContainerClasslist(), a(this, o).setAttribute("href", t);
92
92
  }
93
93
  },
94
94
  size: {
95
95
  type: ["small", "medium", "large"],
96
96
  default: "medium",
97
97
  observer: (t) => {
98
- e(this, a).className = this.updateContainerClasslist();
98
+ this.updateContainerClasslist();
99
99
  }
100
100
  },
101
101
  loading: {
102
102
  type: Boolean,
103
103
  default: !1,
104
104
  observer: (t) => {
105
- var o;
105
+ var r;
106
106
  if (t = t === "true" || t === !0, this.toggleAttribute("disabled", t), t) {
107
- const r = document.createElement("ea-icon");
108
- r.id = "ea-loading-icon", r.icon = "icon-cw animate-spin", r.size = this.size, r.part = "loading-icon", e(this, a).insertBefore(r, e(this, a).firstChild);
107
+ const i = document.createElement("ea-icon");
108
+ i.id = "ea-loading-icon", i.setAttribute("name", "spinner"), i.toggleAttribute("spin", !0), i.setAttribute("size", this.size), i.setAttribute("part", "loading-icon"), a(this, o).insertBefore(i, a(this, o).firstChild);
109
109
  } else {
110
- const r = (o = e(this, a)) == null ? void 0 : o.querySelectorAll("#ea-loading-icon");
111
- (r == null ? void 0 : r.length) > 0 && (r == null || r.forEach((m) => m.remove()));
110
+ const i = (r = a(this, o)) == null ? void 0 : r.querySelectorAll("#ea-loading-icon");
111
+ (i == null ? void 0 : i.length) > 0 && (i == null || i.forEach((f) => f.remove()));
112
112
  }
113
- e(this, a).className = this.updateContainerClasslist();
113
+ this.updateContainerClasslist();
114
114
  }
115
115
  },
116
116
  icon: {
117
117
  type: String,
118
118
  default: "",
119
119
  observer: (t) => {
120
- e(this, l).setAttribute("icon", t), e(this, l).setAttribute("size", this.size), e(this, a).className = this.updateContainerClasslist();
120
+ a(this, l).setAttribute("name", t), a(this, l).setAttribute("size", this.size), this.updateContainerClasslist();
121
121
  }
122
122
  },
123
123
  "button-type": {
124
124
  type: ["button", "submit", "reset"],
125
125
  default: "button",
126
126
  observer: (t) => {
127
- e(this, a).type = t;
127
+ a(this, o).type = t;
128
128
  }
129
129
  }
130
130
  }));
131
131
  /**
132
132
  * @param {KeyboardEvent} e
133
133
  */
134
- u(this, c, (t) => {
134
+ u(this, h, (t) => {
135
135
  t.key === "Enter" && this.click();
136
136
  });
137
137
  this.stylesheet = g, this.$render();
@@ -158,8 +158,8 @@ class A extends C {
158
158
  * @return {string} 属性值
159
159
  */
160
160
  updateContainerClasslist() {
161
- var t;
162
- return this.computedClasslist(
161
+ var r;
162
+ const t = this.computedClasslist(
163
163
  "ea-button",
164
164
  {
165
165
  ["--" + this.type]: this.type,
@@ -170,8 +170,9 @@ class A extends C {
170
170
  "--circle": this.circle,
171
171
  ["--" + this.size]: this.size
172
172
  },
173
- { icon: (t = this.icon) == null ? void 0 : t.length }
173
+ { icon: (r = this.icon) == null ? void 0 : r.length }
174
174
  );
175
+ return a(this, o).className = t, t;
175
176
  }
176
177
  $render() {
177
178
  const t = this.getAttrBoolean("link") ? "a" : "button";
@@ -180,29 +181,29 @@ class A extends C {
180
181
  <ea-icon class="ea-button__icon" part="icon"></ea-icon>
181
182
  <slot></slot>
182
183
  </${t}>
183
- `, h(this, a, this.shadowRoot.querySelector(".ea-button")), h(this, l, this.shadowRoot.querySelector(".ea-button__icon")), e(this, a).className = this.updateContainerClasslist();
184
+ `, d(this, o, this.shadowRoot.querySelector(".ea-button")), d(this, l, this.shadowRoot.querySelector(".ea-button__icon")), this.updateContainerClasslist();
184
185
  }
185
186
  connectedCallback() {
186
187
  var t;
187
- super.connectedCallback(), (t = e(this, n)) == null || t.abort(), h(this, n, new AbortController()), this.addEventListener("keypress", e(this, c), {
188
- signal: e(this, n).signal
189
- }), this.addEventListener("click", (o) => {
188
+ super.connectedCallback(), (t = a(this, n)) == null || t.abort(), d(this, n, new AbortController()), this.addEventListener("keypress", a(this, h), {
189
+ signal: a(this, n).signal
190
+ }), this.addEventListener("click", (r) => {
190
191
  if (this["button-type"] === "submit") {
191
- const r = this.getForm();
192
- r && (o.preventDefault(), r.dispatchEvent(new Event("submit")));
192
+ const i = this.getForm();
193
+ i && (r.preventDefault(), i.dispatchEvent(new Event("submit")));
193
194
  } else if (this["button-type"] === "reset") {
194
- const r = this.getForm();
195
- r && (o.preventDefault(), r.reset());
195
+ const i = this.getForm();
196
+ i && (r.preventDefault(), i.reset());
196
197
  }
197
198
  });
198
199
  }
199
200
  $beforeUnmounted() {
200
201
  var t;
201
- (t = e(this, n)) == null || t.abort();
202
+ (t = a(this, n)) == null || t.abort();
202
203
  }
203
204
  }
204
- a = new WeakMap(), l = new WeakMap(), n = new WeakMap(), c = new WeakMap();
205
- window.customElements.get("ea-button") || window.customElements.define("ea-button", A);
205
+ o = new WeakMap(), l = new WeakMap(), n = new WeakMap(), h = new WeakMap();
206
+ window.customElements.get("ea-button") || window.customElements.define("ea-button", w);
206
207
  class E extends v {
207
208
  constructor() {
208
209
  super();
@@ -213,13 +214,13 @@ class E extends v {
213
214
  * @property {string} type
214
215
  */
215
216
  /** @type {Properties} */
216
- d(this, "state", this.properties({
217
+ c(this, "state", this.properties({
217
218
  disabled: {
218
219
  type: Boolean,
219
220
  default: !1,
220
221
  observer: (t) => {
221
- this.querySelectorAll("ea-button").forEach((o) => {
222
- o.setAttribute("disabled", t);
222
+ this.querySelectorAll("ea-button").forEach((r) => {
223
+ r.setAttribute("disabled", t);
223
224
  });
224
225
  }
225
226
  },
@@ -227,8 +228,8 @@ class E extends v {
227
228
  type: ["small", "normal", "large"],
228
229
  default: "normal",
229
230
  observer: (t) => {
230
- this.querySelectorAll("ea-button").forEach((o) => {
231
- o.setAttribute("size", t);
231
+ this.querySelectorAll("ea-button").forEach((r) => {
232
+ r.setAttribute("size", t);
232
233
  });
233
234
  }
234
235
  },
@@ -236,13 +237,13 @@ class E extends v {
236
237
  type: ["primary", "success", "warning", "danger", "normal"],
237
238
  default: "normal",
238
239
  observer: (t) => {
239
- this.querySelectorAll("ea-button").forEach((o) => {
240
- o.setAttribute("type", t);
240
+ this.querySelectorAll("ea-button").forEach((r) => {
241
+ r.setAttribute("type", t);
241
242
  });
242
243
  }
243
244
  }
244
245
  }));
245
- this.stylesheet = w, this.$render();
246
+ this.stylesheet = A, this.$render();
246
247
  }
247
248
  static get observedAttributes() {
248
249
  return [...super.observedAttributes, "disabled", "size", "type"];
@@ -260,6 +261,6 @@ class E extends v {
260
261
  }
261
262
  window.customElements.get("ea-button-group") || window.customElements.define("ea-button-group", E);
262
263
  export {
263
- A as EaButton,
264
+ w as EaButton,
264
265
  E as EaButtonGroup
265
266
  };
@@ -1,23 +1,29 @@
1
- var p = Object.defineProperty;
2
- var h = (e) => {
1
+ var b = Object.defineProperty;
2
+ var y = (e) => {
3
3
  throw TypeError(e);
4
4
  };
5
- var f = (e, s, t) => s in e ? p(e, s, { enumerable: !0, configurable: !0, writable: !0, value: t }) : e[s] = t;
6
- var l = (e, s, t) => f(e, typeof s != "symbol" ? s + "" : s, t), u = (e, s, t) => s.has(e) || h("Cannot " + t);
7
- var d = (e, s, t) => (u(e, s, "read from private field"), t ? t.call(e) : s.get(e)), i = (e, s, t) => s.has(e) ? h("Cannot add the same private member more than once") : s instanceof WeakSet ? s.add(e) : s.set(e, t), n = (e, s, t, c) => (u(e, s, "write to private field"), c ? c.call(e, t) : s.set(e, t), t);
8
- import { B as m } from "./Base.js";
9
- import { s as v } from "../css/ea-card.style.js";
10
- var a, r, o;
11
- class w extends m {
5
+ var g = (e, s, t) => s in e ? b(e, s, { enumerable: !0, configurable: !0, writable: !0, value: t }) : e[s] = t;
6
+ var f = (e, s, t) => g(e, typeof s != "symbol" ? s + "" : s, t), v = (e, s, t) => s.has(e) || y("Cannot " + t);
7
+ var a = (e, s, t) => (v(e, s, "read from private field"), t ? t.call(e) : s.get(e)), o = (e, s, t) => s.has(e) ? y("Cannot add the same private member more than once") : s instanceof WeakSet ? s.add(e) : s.set(e, t), h = (e, s, t, l) => (v(e, s, "write to private field"), l ? l.call(e, t) : s.set(e, t), t);
8
+ import { B as E } from "./Base.js";
9
+ import { s as _ } from "../css/ea-card.style.js";
10
+ var c, i, n, r, d, p;
11
+ class S extends E {
12
12
  constructor() {
13
13
  super();
14
14
  /** @type {HTMLElement} */
15
- i(this, a);
15
+ o(this, c);
16
16
  /** @type {HTMLElement} */
17
- i(this, r);
17
+ o(this, i);
18
18
  /** @type {HTMLElement} */
19
- i(this, o);
20
- l(this, "state", this.properties({
19
+ o(this, n);
20
+ /** @type {AbortController} */
21
+ o(this, r, null);
22
+ o(this, d, {
23
+ isHeaderEmpty: !0,
24
+ isFooterEmpty: !0
25
+ });
26
+ f(this, "state", this.properties({
21
27
  shadow: {
22
28
  type: ["always", "never", "hover"],
23
29
  default: "always",
@@ -29,18 +35,31 @@ class w extends m {
29
35
  type: String,
30
36
  default: "",
31
37
  observer: (t) => {
32
- d(this, r).innerText = t;
38
+ a(this, i).innerText = t;
33
39
  }
34
40
  },
35
41
  footer: {
36
42
  type: String,
37
43
  default: "",
38
44
  observer: (t) => {
39
- d(this, o).innerText = t;
45
+ a(this, n).innerText = t;
40
46
  }
41
47
  }
42
48
  }));
43
- this.stylesheet = v, this.$render();
49
+ /**
50
+ * 更新空状态
51
+ * @param {Event} e 事件
52
+ */
53
+ o(this, p, (t) => {
54
+ const l = t.target;
55
+ let m = l.getAttribute("name") || "";
56
+ m = m.split("").map(
57
+ (u, C) => C === 0 ? u.toUpperCase() : u.toLowerCase()
58
+ ).join("");
59
+ const w = l.assignedElements().length === 0;
60
+ a(this, d)[`is${m}Empty`] = w, this.updateContainerClasslist();
61
+ });
62
+ this.stylesheet = _, this.$render();
44
63
  }
45
64
  static get observedAttributes() {
46
65
  return [...super.observedAttributes, "shadow", "header", "footer"];
@@ -50,10 +69,18 @@ class w extends m {
50
69
  * @return {string} 属性值
51
70
  */
52
71
  updateContainerClasslist() {
53
- const t = this.computedClasslist("ea-card", {
54
- [`--${this.shadow}-shadow`]: this.shadow
55
- });
56
- return d(this, a).className = t, t;
72
+ const t = this.computedClasslist(
73
+ "ea-card",
74
+ {
75
+ [`--${this.shadow}-shadow`]: this.shadow
76
+ },
77
+ // 因为在 vue 下,某些场景会出现 css 的 ::slotted 选择器无效,因此这里使用 js 来更新空状态
78
+ {
79
+ "header-empty": a(this, d).isHeaderEmpty,
80
+ "footer-empty": a(this, d).isFooterEmpty
81
+ }
82
+ );
83
+ return a(this, c).className = t, t;
57
84
  }
58
85
  $render() {
59
86
  this.shadowRoot.innerHTML = `
@@ -68,18 +95,27 @@ class w extends m {
68
95
  <slot name="footer"></slot>
69
96
  </div>
70
97
  </div>
71
- `, n(this, a, this.shadowRoot.querySelector(".ea-card")), n(this, r, this.shadowRoot.querySelector(
98
+ `, h(this, c, this.shadowRoot.querySelector(".ea-card")), h(this, i, this.shadowRoot.querySelector(
72
99
  ".ea-card__header > slot[name='header']"
73
- )), n(this, o, this.shadowRoot.querySelector(
100
+ )), h(this, n, this.shadowRoot.querySelector(
74
101
  ".ea-card__footer > slot[name='footer']"
75
- ));
102
+ )), this.updateContainerClasslist();
76
103
  }
77
104
  connectedCallback() {
78
- super.connectedCallback();
105
+ var t;
106
+ super.connectedCallback(), (t = a(this, r)) == null || t.abort(), h(this, r, new AbortController()), a(this, i).addEventListener("slotchange", a(this, p), {
107
+ signal: a(this, r).signal
108
+ }), a(this, n).addEventListener("slotchange", a(this, p), {
109
+ signal: a(this, r).signal
110
+ });
111
+ }
112
+ $beforeUnmounted() {
113
+ var t;
114
+ (t = a(this, r)) == null || t.abort();
79
115
  }
80
116
  }
81
- a = new WeakMap(), r = new WeakMap(), o = new WeakMap();
82
- window.customElements.get("ea-card") || window.customElements.define("ea-card", w);
117
+ c = new WeakMap(), i = new WeakMap(), n = new WeakMap(), r = new WeakMap(), d = new WeakMap(), p = new WeakMap();
118
+ window.customElements.get("ea-card") || window.customElements.define("ea-card", S);
83
119
  export {
84
- w as EaCard
120
+ S as EaCard
85
121
  };
@@ -299,10 +299,10 @@ class F extends N {
299
299
  this.shadowRoot.innerHTML = `
300
300
  <div class='ea-carousel' part='container'>
301
301
  <button class="ea-carousel__arrow arrow-left" part="arrow-left">
302
- <ea-icon icon="icon-angle-left" part="arrow-left-icon"></ea-icon>
302
+ <ea-icon name="angle-left" part="arrow-left-icon"></ea-icon>
303
303
  </button>
304
304
  <button class="ea-carousel__arrow arrow-right" part="arrow-right">
305
- <ea-icon icon="icon-angle-right" part="arrow-right-icon"></ea-icon>
305
+ <ea-icon name="angle-right" part="arrow-right-icon"></ea-icon>
306
306
  </button>
307
307
  <ul class="ea-carousel__content" part="content">
308
308
  <slot name="clone-last"></slot>