y-design-ssr 0.2.0 → 0.2.2

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 (119) hide show
  1. package/libs/button/index.css +579 -1
  2. package/libs/button/index.mjs +111 -66
  3. package/libs/button/index.umd.js +203 -2
  4. package/libs/cell/index.css +1077 -1
  5. package/libs/cell/index.mjs +167 -104
  6. package/libs/cell/index.umd.js +300 -2
  7. package/libs/checkbox/index.css +1053 -1
  8. package/libs/checkbox/index.mjs +242 -127
  9. package/libs/checkbox/index.umd.js +369 -2
  10. package/libs/checkboxGroup/index.css +422 -1
  11. package/libs/checkboxGroup/index.mjs +173 -87
  12. package/libs/checkboxGroup/index.umd.js +265 -2
  13. package/libs/col/index.css +615 -1
  14. package/libs/col/index.mjs +246 -81
  15. package/libs/col/index.umd.js +305 -2
  16. package/libs/countdown/index.css +417 -1
  17. package/libs/countdown/index.mjs +179 -71
  18. package/libs/countdown/index.umd.js +231 -2
  19. package/libs/dialog/index.css +1405 -1
  20. package/libs/dialog/index.mjs +646 -476
  21. package/libs/dialog/index.umd.js +1128 -2
  22. package/libs/empty/index.css +457 -1
  23. package/libs/empty/index.mjs +91 -44
  24. package/libs/empty/index.umd.js +139 -2
  25. package/libs/form/index.css +477 -1
  26. package/libs/form/index.mjs +226 -126
  27. package/libs/form/index.umd.js +319 -2
  28. package/libs/formItem/index.css +477 -1
  29. package/libs/formItem/index.mjs +276 -126
  30. package/libs/formItem/index.umd.js +372 -2
  31. package/libs/icon/index.css +982 -1
  32. package/libs/icon/index.mjs +107 -58
  33. package/libs/icon/index.umd.js +186 -2
  34. package/libs/index.css +2902 -1
  35. package/libs/index.mjs +3785 -2344
  36. package/libs/index.umd.js +5509 -2
  37. package/libs/input/index.css +483 -1
  38. package/libs/input/index.mjs +183 -92
  39. package/libs/input/index.umd.js +274 -2
  40. package/libs/layout/index.css +684 -1
  41. package/libs/layout/index.mjs +230 -130
  42. package/libs/layout/index.umd.js +318 -2
  43. package/libs/list/index.css +440 -1
  44. package/libs/list/index.mjs +388 -207
  45. package/libs/list/index.umd.js +571 -2
  46. package/libs/loading/index.css +548 -1
  47. package/libs/loading/index.mjs +196 -118
  48. package/libs/loading/index.umd.js +321 -2
  49. package/libs/mask/index.css +426 -1
  50. package/libs/mask/index.mjs +131 -70
  51. package/libs/mask/index.umd.js +201 -2
  52. package/libs/popup/index.css +465 -1
  53. package/libs/popup/index.mjs +210 -134
  54. package/libs/popup/index.umd.js +358 -2
  55. package/libs/progress/index.css +488 -1
  56. package/libs/progress/index.mjs +200 -128
  57. package/libs/progress/index.umd.js +322 -2
  58. package/libs/pullrefresh/index.css +441 -1
  59. package/libs/pullrefresh/index.mjs +241 -111
  60. package/libs/pullrefresh/index.umd.js +302 -2
  61. package/libs/row/index.css +485 -1
  62. package/libs/row/index.mjs +181 -89
  63. package/libs/row/index.umd.js +237 -2
  64. package/libs/slider/index.css +558 -1
  65. package/libs/slider/index.mjs +356 -160
  66. package/libs/slider/index.umd.js +453 -2
  67. package/libs/stepper/index.css +489 -1
  68. package/libs/stepper/index.mjs +181 -101
  69. package/libs/stepper/index.umd.js +269 -2
  70. package/libs/swipe/index.css +506 -1
  71. package/libs/swipe/index.mjs +542 -259
  72. package/libs/swipe/index.umd.js +703 -2
  73. package/libs/swipeItem/index.css +424 -1
  74. package/libs/swipeItem/index.mjs +111 -52
  75. package/libs/swipeItem/index.umd.js +154 -2
  76. package/libs/switch/index.css +472 -1
  77. package/libs/switch/index.mjs +121 -62
  78. package/libs/switch/index.umd.js +200 -2
  79. package/libs/tab/index.mjs +131 -68
  80. package/libs/tab/index.umd.js +190 -1
  81. package/libs/tabs/index.css +514 -1
  82. package/libs/tabs/index.mjs +751 -410
  83. package/libs/tabs/index.umd.js +1020 -2
  84. package/libs/toast/index.css +1050 -1
  85. package/libs/toast/index.mjs +183 -114
  86. package/libs/toast/index.umd.js +306 -2
  87. package/libs/tooltip/index.css +514 -1
  88. package/libs/tooltip/index.mjs +293 -155
  89. package/libs/tooltip/index.umd.js +416 -2
  90. package/package.json +5 -4
  91. package/libs/button/package.json +0 -5
  92. package/libs/cell/package.json +0 -5
  93. package/libs/checkbox/package.json +0 -5
  94. package/libs/checkboxGroup/package.json +0 -5
  95. package/libs/col/package.json +0 -5
  96. package/libs/countdown/package.json +0 -5
  97. package/libs/dialog/package.json +0 -5
  98. package/libs/empty/package.json +0 -5
  99. package/libs/form/package.json +0 -5
  100. package/libs/formItem/package.json +0 -5
  101. package/libs/icon/package.json +0 -5
  102. package/libs/input/package.json +0 -5
  103. package/libs/layout/package.json +0 -5
  104. package/libs/list/package.json +0 -5
  105. package/libs/loading/package.json +0 -5
  106. package/libs/mask/package.json +0 -5
  107. package/libs/popup/package.json +0 -5
  108. package/libs/progress/package.json +0 -5
  109. package/libs/pullrefresh/package.json +0 -5
  110. package/libs/row/package.json +0 -5
  111. package/libs/slider/package.json +0 -5
  112. package/libs/stepper/package.json +0 -5
  113. package/libs/swipe/package.json +0 -5
  114. package/libs/swipeItem/package.json +0 -5
  115. package/libs/switch/package.json +0 -5
  116. package/libs/tab/package.json +0 -5
  117. package/libs/tabs/package.json +0 -5
  118. package/libs/toast/package.json +0 -5
  119. package/libs/tooltip/package.json +0 -5
@@ -1,11 +1,40 @@
1
- import { ref as z, reactive as N, getCurrentInstance as ie, provide as Se, isVNode as re, inject as Ne, onUnmounted as Ce, computed as C, defineComponent as H, createVNode as b, watch as ee, onMounted as ce, nextTick as te, onBeforeUnmount as Te, onBeforeUpdate as ze } from "vue";
2
- const V = (e, n) => n ? typeof n == "string" ? ` ${e}--${n}` : Array.isArray(n) ? n.reduce((o, l) => o + V(e, l), "") : Object.keys(n).reduce(
3
- (o, l) => o + (n[l] ? V(e, l) : ""),
4
- ""
5
- ) : "", Ee = (e) => (n, o) => {
6
- let l = n, v = o;
7
- return l && typeof l != "string" && (v = l, l = ""), l = l ? `${e}__${l}` : e, `${l}${V(l, v)}`;
8
- }, Le = () => (e, n) => n ? `${V(`y-${e}`, n)}` : `y-${e}`, $e = {
1
+ import { ref, reactive, getCurrentInstance, provide, isVNode, inject, onUnmounted, computed, defineComponent, createVNode, watch, onMounted, nextTick, onBeforeUnmount, onBeforeUpdate } from "vue";
2
+ const getMods = (el, mods) => {
3
+ if (!mods) {
4
+ return "";
5
+ }
6
+ if (typeof mods === "string") {
7
+ return ` ${el}--${mods}`;
8
+ }
9
+ if (Array.isArray(mods)) {
10
+ return mods.reduce((acc, cur) => acc + getMods(el, cur), "");
11
+ }
12
+ return Object.keys(mods).reduce(
13
+ (acc, cur) => acc + (mods[cur] ? getMods(el, cur) : ""),
14
+ ""
15
+ );
16
+ };
17
+ const createBEM = (block) => {
18
+ return (el, mods) => {
19
+ let _el = el;
20
+ let _mods = mods;
21
+ if (_el && typeof _el !== "string") {
22
+ _mods = _el;
23
+ _el = "";
24
+ }
25
+ _el = _el ? `${block}__${_el}` : block;
26
+ return `${_el}${getMods(_el, _mods)}`;
27
+ };
28
+ };
29
+ const createGlobalBem = () => {
30
+ return (el, mods) => {
31
+ if (!mods) {
32
+ return `y-${el}`;
33
+ }
34
+ return `${getMods(`y-${el}`, mods)}`;
35
+ };
36
+ };
37
+ const defaultLang = {
9
38
  "pull-refresh": {
10
39
  pulling: "下拉刷新...",
11
40
  loosing: "释放刷新...",
@@ -17,57 +46,94 @@ const V = (e, n) => n ? typeof n == "string" ? ` ${e}--${n}` : Array.isArray(n)
17
46
  validateMessage: "请输入正确内容"
18
47
  }
19
48
  };
20
- z("zh-CN");
21
- N({
22
- "zh-CN": $e
49
+ ref("zh-CN");
50
+ reactive({
51
+ "zh-CN": defaultLang
23
52
  });
24
- const U = (e) => {
25
- const n = `y-${e}`;
26
- return [n, Ee(n), Le()];
27
- }, ae = (e, n) => typeof e == "string" && e.includes("%") && e.includes("%") ? n * Number(e.replace(/%/g, "")) / 100 : Number(e), xe = (e) => {
28
- const n = [], o = (l) => {
29
- Array.isArray(l) && l.forEach((v) => {
30
- var u;
31
- re(v) && (n.push(v), (u = v.component) != null && u.subTree && o(v.component.subTree.children), v.children && o(v.children));
53
+ const createNamespace = (name2) => {
54
+ const prefixedName = `y-${name2}`;
55
+ return [prefixedName, createBEM(prefixedName), createGlobalBem()];
56
+ };
57
+ const parsePercent = (val, baseNumber) => {
58
+ if (typeof val === "string" && val.includes("%")) {
59
+ if (!val.includes("%"))
60
+ return Number(val);
61
+ return baseNumber * Number(val.replace(/%/g, "")) / 100;
62
+ }
63
+ return Number(val);
64
+ };
65
+ const filterChildren = (children) => {
66
+ const vnodes = [];
67
+ const _filterChildren = (childrens) => {
68
+ if (Array.isArray(childrens)) {
69
+ childrens.forEach((child) => {
70
+ var _a;
71
+ if (isVNode(child)) {
72
+ vnodes.push(child);
73
+ if ((_a = child.component) == null ? void 0 : _a.subTree) {
74
+ _filterChildren(child.component.subTree.children);
75
+ }
76
+ if (child.children) {
77
+ _filterChildren(child.children);
78
+ }
79
+ }
80
+ });
81
+ }
82
+ };
83
+ _filterChildren(children);
84
+ return vnodes;
85
+ };
86
+ const sortChildren = (childrens, instance) => {
87
+ const vnodes = filterChildren(instance.subTree.children);
88
+ childrens.sort((a, b) => vnodes.indexOf(a.vnode) - vnodes.indexOf(b.vnode));
89
+ };
90
+ const setRelation = (key) => {
91
+ const instance = getCurrentInstance();
92
+ const childrens = reactive([]);
93
+ const initProvide = (value) => {
94
+ const addChild = (child) => {
95
+ if (child.proxy) {
96
+ childrens.push(child);
97
+ instance && sortChildren(childrens, instance);
98
+ }
99
+ };
100
+ const removeChild = (child) => {
101
+ const index = childrens.indexOf(child);
102
+ childrens.splice(index, 1);
103
+ };
104
+ provide(key, {
105
+ addChild,
106
+ removeChild,
107
+ childrens,
108
+ ...value
32
109
  });
33
110
  };
34
- return o(e), n;
35
- }, Ie = (e, n) => {
36
- const o = xe(n.subTree.children);
37
- e.sort((l, v) => o.indexOf(l.vnode) - o.indexOf(v.vnode));
38
- }, ue = (e) => {
39
- const n = ie(), o = N([]);
40
111
  return {
41
- childrens: o,
42
- initProvide: (v) => {
43
- Se(e, {
44
- addChild: (s) => {
45
- s.proxy && (o.push(s), n && Ie(o, n));
46
- },
47
- removeChild: (s) => {
48
- const f = o.indexOf(s);
49
- o.splice(f, 1);
50
- },
51
- childrens: o,
52
- ...v
53
- });
54
- }
112
+ childrens,
113
+ initProvide
55
114
  };
56
- }, fe = (e) => {
57
- const n = Ne(e, null), o = ie();
58
- if (n && o) {
59
- const { childrens: l, addChild: v, removeChild: u } = n;
60
- return v(o), Ce(() => u(o)), {
61
- index: C(() => l.indexOf(o)),
62
- parent: n
115
+ };
116
+ const useRelation = (key) => {
117
+ const parent = inject(key, null);
118
+ const currentInstance = getCurrentInstance();
119
+ if (parent && currentInstance) {
120
+ const { childrens, addChild, removeChild } = parent;
121
+ addChild(currentInstance);
122
+ onUnmounted(() => removeChild(currentInstance));
123
+ const index = computed(() => childrens.indexOf(currentInstance));
124
+ return {
125
+ index,
126
+ parent
63
127
  };
64
128
  }
65
129
  return {
66
130
  parent: null,
67
- index: z(-1)
131
+ index: ref(-1)
68
132
  };
69
- }, [Be, De] = U("swipe-item"), K = /* @__PURE__ */ H({
70
- name: Be,
133
+ };
134
+ const [name$3, bem$3] = createNamespace("swipe-item");
135
+ const YSwipeItem = /* @__PURE__ */ defineComponent({
136
+ name: name$3,
71
137
  props: {
72
138
  clonenNode: {
73
139
  type: Object,
@@ -78,39 +144,66 @@ const U = (e) => {
78
144
  default: -1
79
145
  }
80
146
  },
81
- setup(e, {
82
- slots: n
147
+ setup(props, {
148
+ slots
83
149
  }) {
84
- const o = ie(), {
85
- parent: l
86
- } = fe(ve);
87
- !e.clonenNode && o && (l == null || l.children.push(o));
88
- const v = C(() => e.clonenNode ? e.index : l == null ? void 0 : l.children.findIndex((c) => c.proxy === (o == null ? void 0 : o.proxy))), u = C(() => {
89
- const c = `${(l == null ? void 0 : l.itemDetail.size) || 0}px`;
90
- let s = "auto";
91
- const f = `${(l == null ? void 0 : l.itemDetail.space) || 0}px`;
92
- return l != null && l.props.autoHeight && (l == null ? void 0 : l.activeIndex) !== v.value && (s = "0"), l != null && l.props.vertical ? {
93
- height: c,
94
- width: s,
95
- marginBottom: f
96
- } : {
97
- width: c,
98
- height: s,
99
- marginRight: f
150
+ const instance = getCurrentInstance();
151
+ const {
152
+ parent
153
+ } = useRelation(SWIPE_PROVIDE_KEY);
154
+ if (!props.clonenNode && instance) {
155
+ parent == null ? void 0 : parent.children.push(instance);
156
+ }
157
+ const index = computed(() => {
158
+ if (props.clonenNode) {
159
+ return props.index;
160
+ }
161
+ return parent == null ? void 0 : parent.children.findIndex((item) => item.proxy === (instance == null ? void 0 : instance.proxy));
162
+ });
163
+ const style2 = computed(() => {
164
+ const width = `${(parent == null ? void 0 : parent.itemDetail.size) || 0}px`;
165
+ let height = "auto";
166
+ const spacing = `${(parent == null ? void 0 : parent.itemDetail.space) || 0}px`;
167
+ if ((parent == null ? void 0 : parent.props.autoHeight) && (parent == null ? void 0 : parent.activeIndex) !== index.value) {
168
+ height = "0";
169
+ }
170
+ if (parent == null ? void 0 : parent.props.vertical) {
171
+ return {
172
+ height: width,
173
+ width: height,
174
+ marginBottom: spacing
175
+ };
176
+ }
177
+ return {
178
+ width,
179
+ height,
180
+ marginRight: spacing
100
181
  };
101
182
  });
102
183
  return () => {
103
- var s, f;
104
- const c = ((s = l == null ? void 0 : l.itemShowedList) == null ? void 0 : s.list[v.value || 0]) || !1;
105
- return b("div", {
106
- class: De(),
107
- style: u.value
108
- }, [c ? e.clonenNode || ((f = n.default) == null ? void 0 : f.call(n)) : null]);
184
+ var _a, _b;
185
+ const isShow = ((_a = parent == null ? void 0 : parent.itemShowedList) == null ? void 0 : _a.list[index.value || 0]) || false;
186
+ return createVNode("div", {
187
+ "class": bem$3(),
188
+ "style": style2.value
189
+ }, [isShow ? props.clonenNode || ((_b = slots.default) == null ? void 0 : _b.call(slots)) : null]);
109
190
  };
110
191
  }
111
192
  });
112
- var ne = /* @__PURE__ */ ((e) => (e.left = "left", e.top = "top", e.bottom = "bottom", e.right = "right", e))(ne || {}), W = /* @__PURE__ */ ((e) => (e.start = "start", e.center = "center", e.end = "end", e))(W || {});
113
- const ke = {
193
+ var Position = /* @__PURE__ */ ((Position2) => {
194
+ Position2["left"] = "left";
195
+ Position2["top"] = "top";
196
+ Position2["bottom"] = "bottom";
197
+ Position2["right"] = "right";
198
+ return Position2;
199
+ })(Position || {});
200
+ var Align = /* @__PURE__ */ ((Align2) => {
201
+ Align2["start"] = "start";
202
+ Align2["center"] = "center";
203
+ Align2["end"] = "end";
204
+ return Align2;
205
+ })(Align || {});
206
+ const swipeProps = {
114
207
  autoplayTime: {
115
208
  type: Number,
116
209
  default: 0
@@ -125,11 +218,11 @@ const ke = {
125
218
  },
126
219
  loop: {
127
220
  type: Boolean,
128
- default: !0
221
+ default: true
129
222
  },
130
223
  dots: {
131
224
  type: Boolean,
132
- default: !0
225
+ default: true
133
226
  },
134
227
  dotsPosition: {
135
228
  type: String,
@@ -141,15 +234,15 @@ const ke = {
141
234
  },
142
235
  lazy: {
143
236
  type: Boolean,
144
- default: !1
237
+ default: false
145
238
  },
146
239
  vertical: {
147
240
  type: Boolean,
148
- default: !1
241
+ default: false
149
242
  },
150
243
  autoHeight: {
151
244
  type: Boolean,
152
- default: !1
245
+ default: false
153
246
  },
154
247
  itemSize: {
155
248
  type: [Number, String],
@@ -165,144 +258,253 @@ const ke = {
165
258
  },
166
259
  touchable: {
167
260
  type: Boolean,
168
- default: !0
261
+ default: true
169
262
  },
170
263
  isFollowHand: {
171
264
  type: Boolean,
172
- default: !0
265
+ default: true
173
266
  },
174
267
  align: {
175
268
  type: String,
176
269
  default: "center"
177
270
  }
178
- }, [de, q] = U("swipe"), ve = de, _e = /* @__PURE__ */ H({
179
- name: de,
271
+ };
272
+ const [name$2, bem$2] = createNamespace("swipe");
273
+ const SWIPE_PROVIDE_KEY = name$2;
274
+ const Swipe = /* @__PURE__ */ defineComponent({
275
+ name: name$2,
180
276
  components: {
181
- YSwipeItem: K
277
+ YSwipeItem
182
278
  },
183
- props: ke,
184
- setup(e, {
185
- slots: n,
186
- emit: o,
187
- expose: l
279
+ props: swipeProps,
280
+ setup(props, {
281
+ slots,
282
+ emit,
283
+ expose
188
284
  }) {
189
285
  const {
190
- initProvide: v
191
- } = ue(ve), u = N([]), c = z(Number(e.initIndex)), s = N({
286
+ initProvide
287
+ } = setRelation(SWIPE_PROVIDE_KEY);
288
+ const itemList = reactive([]);
289
+ const activeIndex = ref(Number(props.initIndex));
290
+ const itemDetail = reactive({
192
291
  // 元素尺寸
193
292
  size: 0,
194
293
  // 间距
195
294
  space: 0,
196
295
  // 元素宽度比swipe小,占满整个视窗
197
- isFillViewport: !1
198
- }), f = N({
296
+ isFillViewport: false
297
+ });
298
+ const trackDetail = reactive({
199
299
  // 偏移量
200
300
  offset: 0,
201
301
  // 视窗大小
202
302
  viewportSize: 0,
203
303
  // 重复节点个数
204
304
  cloneNodeCount: 0
205
- }), T = z(), g = z(), B = () => {
206
- const t = u.length, a = [];
207
- for (let m = 0; m < t; m++)
208
- a.push(!e.lazy);
209
- return a;
210
- }, R = () => {
211
- if (!e.lazy)
305
+ });
306
+ const swipeRef = ref();
307
+ const swipeTrackRef = ref();
308
+ const getBooleanList = () => {
309
+ const l = itemList.length;
310
+ const result = [];
311
+ for (let i = 0; i < l; i++) {
312
+ result.push(!props.lazy);
313
+ }
314
+ return result;
315
+ };
316
+ const checkItemShowed = () => {
317
+ if (!props.lazy)
212
318
  return;
213
- const t = s.size + s.space, a = u.length * t;
214
- let m = -(f.offset + r.offset) - f.cloneNodeCount * t;
215
- m < 0 && (m += a);
216
- const w = m + f.viewportSize;
217
- for (let y = 0; y < u.length; y++)
218
- if (!k.list[y]) {
219
- const S = t * y, E = S + s.size;
220
- (S >= m && S < w || E > m && E < w || S < m && E > w) && (k.list[y] = !0);
319
+ const itemSizeSpace = itemDetail.size + itemDetail.space;
320
+ const trackSize = itemList.length * itemSizeSpace;
321
+ let viewportLeft = -(trackDetail.offset + dragDetail.offset) - trackDetail.cloneNodeCount * itemSizeSpace;
322
+ if (viewportLeft < 0) {
323
+ viewportLeft += trackSize;
324
+ }
325
+ const viewportRight = viewportLeft + trackDetail.viewportSize;
326
+ for (let i = 0; i < itemList.length; i++) {
327
+ if (!itemShowedList.list[i]) {
328
+ const left = itemSizeSpace * i;
329
+ const right = left + itemDetail.size;
330
+ if (left >= viewportLeft && left < viewportRight || right > viewportLeft && right < viewportRight || left < viewportLeft && right > viewportRight) {
331
+ itemShowedList.list[i] = true;
332
+ }
221
333
  }
222
- }, k = N({
223
- list: B()
224
- }), p = () => {
225
- k.list = B(), R();
226
- };
227
- ee(() => [...u], p);
228
- const D = (t, a) => {
229
- t ? s.size = ae(t, a) : s.size = a, s.space = Number(e.itemSpace) || 0, s.isFillViewport = s.size >= a, f.viewportSize = a, f.cloneNodeCount = G();
230
- }, G = () => {
231
- if (x.value) {
232
- const t = s.size + s.space;
233
- if (t === 0)
334
+ }
335
+ };
336
+ const itemShowedList = reactive({
337
+ list: getBooleanList()
338
+ });
339
+ const initItemShowList = () => {
340
+ itemShowedList.list = getBooleanList();
341
+ checkItemShowed();
342
+ };
343
+ watch(() => [...itemList], initItemShowList);
344
+ const setItemSize = (itemSize, viewportSize) => {
345
+ if (itemSize) {
346
+ itemDetail.size = parsePercent(itemSize, viewportSize);
347
+ } else {
348
+ itemDetail.size = viewportSize;
349
+ }
350
+ itemDetail.space = Number(props.itemSpace) || 0;
351
+ itemDetail.isFillViewport = itemDetail.size >= viewportSize;
352
+ trackDetail.viewportSize = viewportSize;
353
+ trackDetail.cloneNodeCount = getCloneNodeCount();
354
+ };
355
+ const getCloneNodeCount = () => {
356
+ if (needLoop.value) {
357
+ const sizeSpace = itemDetail.size + itemDetail.space;
358
+ if (sizeSpace === 0)
234
359
  return 0;
235
- const a = f.viewportSize * 2 - t, m = Math.ceil(a / t);
236
- return Math.min(m, u.length - 1);
360
+ const freeSize = trackDetail.viewportSize * 2 - sizeSpace;
361
+ const count = Math.ceil(freeSize / sizeSpace);
362
+ return Math.min(count, itemList.length - 1);
237
363
  }
238
364
  return 0;
239
- }, L = () => {
240
- if (!T.value)
365
+ };
366
+ const resize = () => {
367
+ if (!swipeRef.value)
241
368
  return;
242
369
  const {
243
- width: t,
244
- height: a
245
- } = T.value.getBoundingClientRect();
246
- e.vertical ? D(e.itemSize, a) : D(e.itemSize, t), c.value = c.value >= u.length ? u.length - 1 : c.value, c.value < 0 && (c.value = 0), I(c.value), p(), h();
247
- };
248
- ce(() => {
249
- if (te(L).catch(() => {
250
- }), e.touchable && T.value) {
251
- const t = T.value;
252
- t.addEventListener("touchstart", M, !1), t.addEventListener("mousedown", M, !1), t.addEventListener("touchmove", P, !1), t.addEventListener("mousemove", P, !1), t.addEventListener("touchend", $, !1), t.addEventListener("mouseup", $, !1), t.addEventListener("mouseleave", $, !1), t.addEventListener("touchcancel", $, !1);
370
+ width,
371
+ height
372
+ } = swipeRef.value.getBoundingClientRect();
373
+ if (props.vertical) {
374
+ setItemSize(props.itemSize, height);
375
+ } else {
376
+ setItemSize(props.itemSize, width);
253
377
  }
254
- window.addEventListener("resize", L, !1), window.addEventListener("orientationchange", L, !1);
255
- }), Te(() => {
256
- if (d(), e.touchable && T.value) {
257
- const t = T.value;
258
- t.removeEventListener("touchstart", M, !1), t.removeEventListener("mousedown", M, !1), t.removeEventListener("mousemove", P, !1), t.removeEventListener("touchmove", P, !1), t.removeEventListener("mouseup", $, !1), t.removeEventListener("touchend", $, !1), t.removeEventListener("mouseleave", $, !1), t.removeEventListener("touchcancel", $, !1);
378
+ activeIndex.value = activeIndex.value >= itemList.length ? itemList.length - 1 : activeIndex.value;
379
+ if (activeIndex.value < 0) {
380
+ activeIndex.value = 0;
259
381
  }
260
- window.removeEventListener("resize", L, !1), window.removeEventListener("orientationchange", L, !1);
382
+ updateTransform(activeIndex.value);
383
+ initItemShowList();
384
+ startAutoplay();
385
+ };
386
+ onMounted(() => {
387
+ nextTick(resize).catch(() => {
388
+ });
389
+ if (props.touchable && swipeRef.value) {
390
+ const swipeEl = swipeRef.value;
391
+ swipeEl.addEventListener("touchstart", onTouchStart, false);
392
+ swipeEl.addEventListener("mousedown", onTouchStart, false);
393
+ swipeEl.addEventListener("touchmove", onTouch, false);
394
+ swipeEl.addEventListener("mousemove", onTouch, false);
395
+ swipeEl.addEventListener("touchend", onTouchEnd, false);
396
+ swipeEl.addEventListener("mouseup", onTouchEnd, false);
397
+ swipeEl.addEventListener("mouseleave", onTouchEnd, false);
398
+ swipeEl.addEventListener("touchcancel", onTouchEnd, false);
399
+ }
400
+ window.addEventListener("resize", resize, false);
401
+ window.addEventListener("orientationchange", resize, false);
261
402
  });
262
- const j = C(() => {
263
- let t = 0;
264
- switch (e.align) {
265
- case W.start:
266
- t = 0;
403
+ onBeforeUnmount(() => {
404
+ stopAutoPlay();
405
+ if (props.touchable && swipeRef.value) {
406
+ const swipeEl = swipeRef.value;
407
+ swipeEl.removeEventListener("touchstart", onTouchStart, false);
408
+ swipeEl.removeEventListener("mousedown", onTouchStart, false);
409
+ swipeEl.removeEventListener("mousemove", onTouch, false);
410
+ swipeEl.removeEventListener("touchmove", onTouch, false);
411
+ swipeEl.removeEventListener("mouseup", onTouchEnd, false);
412
+ swipeEl.removeEventListener("touchend", onTouchEnd, false);
413
+ swipeEl.removeEventListener("mouseleave", onTouchEnd, false);
414
+ swipeEl.removeEventListener("touchcancel", onTouchEnd, false);
415
+ }
416
+ window.removeEventListener("resize", resize, false);
417
+ window.removeEventListener("orientationchange", resize, false);
418
+ });
419
+ const positionOffset = computed(() => {
420
+ let offset = 0;
421
+ switch (props.align) {
422
+ case Align.start:
423
+ offset = 0;
267
424
  break;
268
- case W.center:
269
- t = (f.viewportSize - s.size) / 2;
425
+ case Align.center:
426
+ offset = (trackDetail.viewportSize - itemDetail.size) / 2;
270
427
  break;
271
- case W.end:
272
- t = f.viewportSize - s.size;
428
+ case Align.end:
429
+ offset = trackDetail.viewportSize - itemDetail.size;
273
430
  break;
274
431
  default:
275
- t = 0;
432
+ offset = 0;
433
+ }
434
+ return offset;
435
+ });
436
+ const needLoop = computed(() => {
437
+ return props.loop && itemList.length > 1;
438
+ });
439
+ const updateTransform = (index) => {
440
+ const itemSizeSpace = itemDetail.size + itemDetail.space;
441
+ if (needLoop.value) {
442
+ trackDetail.offset = -itemSizeSpace * (index + trackDetail.cloneNodeCount) + positionOffset.value;
443
+ } else {
444
+ trackDetail.offset = -itemSizeSpace * index + positionOffset.value;
445
+ if (props.align !== "center") {
446
+ if (index === 0) {
447
+ trackDetail.offset = 0;
448
+ }
449
+ if (index === itemList.length - 1) {
450
+ trackDetail.offset = -itemSizeSpace * index + trackDetail.viewportSize - itemDetail.size;
451
+ }
452
+ }
453
+ }
454
+ };
455
+ const afterChange = () => {
456
+ updateTransform(activeIndex.value);
457
+ emit("afterChange", activeIndex.value);
458
+ };
459
+ const getIndex = (index) => {
460
+ return (itemList.length + index) % itemList.length;
461
+ };
462
+ const moveTo = (index, withAnimation = true) => {
463
+ activeIndex.value = getIndex(index);
464
+ updateTransform(index);
465
+ checkItemShowed();
466
+ emit("change", activeIndex.value);
467
+ if (withAnimation) {
468
+ dragDetail.transitionEnabled = true;
469
+ if (swipeTrackRef.value) {
470
+ swipeTrackRef.value.addEventListener("transitionend", () => {
471
+ dragDetail.transitionEnabled = false;
472
+ afterChange();
473
+ }, {
474
+ once: true
475
+ });
476
+ }
477
+ } else {
478
+ afterChange();
276
479
  }
277
- return t;
278
- }), x = C(() => e.loop && u.length > 1), I = (t) => {
279
- const a = s.size + s.space;
280
- x.value ? f.offset = -a * (t + f.cloneNodeCount) + j.value : (f.offset = -a * t + j.value, e.align !== "center" && (t === 0 && (f.offset = 0), t === u.length - 1 && (f.offset = -a * t + f.viewportSize - s.size)));
281
- }, F = () => {
282
- I(c.value), o("afterChange", c.value);
283
- }, _ = (t) => (u.length + t) % u.length, A = (t, a = !0) => {
284
- c.value = _(t), I(t), R(), o("change", c.value), a ? (r.transitionEnabled = !0, g.value && g.value.addEventListener("transitionend", () => {
285
- r.transitionEnabled = !1, F();
286
- }, {
287
- once: !0
288
- })) : F();
289
- }, Y = (t = !0) => {
290
- A(c.value - 1, t);
291
- }, O = (t = !0) => {
292
- A(c.value + 1, t);
293
- };
294
- let i = null;
295
- const d = () => {
296
- e.autoplayTime && i && clearInterval(i);
297
- }, h = () => {
298
- e.autoplayTime && u.length > 1 && (i && clearInterval(i), i = setInterval(() => {
299
- O();
300
- }, Number(e.autoplayTime)));
301
- }, r = N({
480
+ };
481
+ const prev = (withAnimation = true) => {
482
+ moveTo(activeIndex.value - 1, withAnimation);
483
+ };
484
+ const next = (withAnimation = true) => {
485
+ moveTo(activeIndex.value + 1, withAnimation);
486
+ };
487
+ let timer = null;
488
+ const stopAutoPlay = () => {
489
+ if (props.autoplayTime && timer) {
490
+ clearInterval(timer);
491
+ }
492
+ };
493
+ const startAutoplay = () => {
494
+ if (props.autoplayTime && itemList.length > 1) {
495
+ if (timer) {
496
+ clearInterval(timer);
497
+ }
498
+ timer = setInterval(() => {
499
+ next();
500
+ }, Number(props.autoplayTime));
501
+ }
502
+ };
503
+ const dragDetail = reactive({
302
504
  // 拖拽中
303
- isDragging: !1,
505
+ isDragging: false,
304
506
  // 是否首次拖动
305
- isFirstTouch: !0,
507
+ isFirstTouch: true,
306
508
  // 拖拽起始位置X
307
509
  startX: 0,
308
510
  // 拖拽起始位置Y
@@ -312,105 +514,182 @@ const ke = {
312
514
  // 开始拖动时间
313
515
  startTime: /* @__PURE__ */ new Date(),
314
516
  // 是否在执行动画
315
- transitionEnabled: !1
316
- }), M = (t) => {
317
- if (r.transitionEnabled)
318
- return;
319
- let a = 0, m = 0;
320
- "touches" in t ? (a = t.touches[0].clientX, m = t.touches[0].clientY) : (a = t.clientX, m = t.clientY), r.startX = a, r.startY = m, r.isDragging = !0, r.isFirstTouch = !0, r.startTime = /* @__PURE__ */ new Date();
321
- }, P = (t) => {
322
- if (!r.isDragging)
517
+ transitionEnabled: false
518
+ });
519
+ const onTouchStart = (e) => {
520
+ if (dragDetail.transitionEnabled) {
323
521
  return;
324
- let a = 0, m = 0;
325
- "touches" in t ? (a = t.touches[0].clientX, m = t.touches[0].clientY) : (a = t.clientX, m = t.clientY);
326
- const w = a - r.startX, y = m - r.startY;
327
- if (r.isFirstTouch && (r.isFirstTouch = !1, Math.abs(w) < Math.abs(y) !== e.vertical)) {
328
- r.isDragging = !1;
522
+ }
523
+ let clientX = 0;
524
+ let clientY = 0;
525
+ if ("touches" in e) {
526
+ clientX = e.touches[0].clientX;
527
+ clientY = e.touches[0].clientY;
528
+ } else {
529
+ clientX = e.clientX;
530
+ clientY = e.clientY;
531
+ }
532
+ dragDetail.startX = clientX;
533
+ dragDetail.startY = clientY;
534
+ dragDetail.isDragging = true;
535
+ dragDetail.isFirstTouch = true;
536
+ dragDetail.startTime = /* @__PURE__ */ new Date();
537
+ };
538
+ const onTouch = (e) => {
539
+ if (!dragDetail.isDragging) {
329
540
  return;
330
541
  }
331
- t.preventDefault(), r.offset = e.vertical ? y : w, R(), o("dragging", {
332
- percent: r.offset / (s.size + s.space),
333
- offset: r.offset
542
+ let clientX = 0;
543
+ let clientY = 0;
544
+ if ("touches" in e) {
545
+ clientX = e.touches[0].clientX;
546
+ clientY = e.touches[0].clientY;
547
+ } else {
548
+ clientX = e.clientX;
549
+ clientY = e.clientY;
550
+ }
551
+ const offsetX = clientX - dragDetail.startX;
552
+ const offsetY = clientY - dragDetail.startY;
553
+ if (dragDetail.isFirstTouch) {
554
+ dragDetail.isFirstTouch = false;
555
+ const isVerticalTouch = Math.abs(offsetX) < Math.abs(offsetY);
556
+ if (isVerticalTouch !== props.vertical) {
557
+ dragDetail.isDragging = false;
558
+ return;
559
+ }
560
+ }
561
+ e.preventDefault();
562
+ dragDetail.offset = props.vertical ? offsetY : offsetX;
563
+ checkItemShowed();
564
+ emit("dragging", {
565
+ percent: dragDetail.offset / (itemDetail.size + itemDetail.space),
566
+ offset: dragDetail.offset
334
567
  });
335
- }, $ = () => {
336
- if (!r.isDragging)
568
+ };
569
+ const onTouchEnd = () => {
570
+ if (!dragDetail.isDragging) {
337
571
  return;
338
- r.isDragging = !1;
339
- const a = (/* @__PURE__ */ new Date()).getTime() - r.startTime.getTime();
340
- ge() && (Math.abs(r.offset) > he.value || Math.abs(r.offset) / a > 0.5) && (r.offset > 0 ? Y() : O()), r.offset = 0, h();
341
- }, he = C(() => ae(e.minSwipeDistance, s.size + s.space)), ge = () => {
342
- if (x.value)
343
- return !0;
344
- const t = r.offset > 0 ? c.value - 1 : c.value + 1;
345
- return t >= 0 && t < u.length;
346
- }, ye = C(() => {
347
- const t = r.isDragging && !e.isFollowHand ? f.offset : f.offset + r.offset, a = {};
348
- return e.vertical ? (a.transform = `translate3d(0, ${t}px, 0)`, a.transitionDuration = r.transitionEnabled ? `${e.duration}ms` : "0ms") : (a.transform = `translate3d(${t}px, 0, 0)`, a.transitionDuration = r.transitionEnabled ? `${e.duration}ms` : "0ms"), r.isDragging && (a.transition = "none"), e.vertical && (a.flexDirection = "column"), e.autoHeight && (a.display = "block", a.whiteSpace = "nowrap"), a;
349
- }), be = C(() => ["y-swipe__dots", `y-swipe__dots--${e.dotsPosition || (e.vertical ? ne.left : ne.bottom)}`]);
350
- l({
351
- moveTo: A,
352
- next: O,
353
- prev: Y,
354
- resize: L
572
+ }
573
+ dragDetail.isDragging = false;
574
+ const now = /* @__PURE__ */ new Date();
575
+ const dragTime = now.getTime() - dragDetail.startTime.getTime();
576
+ if (canGoForward() && (Math.abs(dragDetail.offset) > minSwipeDistance.value || Math.abs(dragDetail.offset) / dragTime > 0.5)) {
577
+ dragDetail.offset > 0 ? prev() : next();
578
+ dragDetail.offset = 0;
579
+ } else {
580
+ dragDetail.offset = 0;
581
+ }
582
+ startAutoplay();
583
+ };
584
+ const minSwipeDistance = computed(() => {
585
+ return parsePercent(props.minSwipeDistance, itemDetail.size + itemDetail.space);
586
+ });
587
+ const canGoForward = () => {
588
+ if (needLoop.value) {
589
+ return true;
590
+ }
591
+ const nextIndex = dragDetail.offset > 0 ? activeIndex.value - 1 : activeIndex.value + 1;
592
+ return nextIndex >= 0 && nextIndex < itemList.length;
593
+ };
594
+ const trackStyle = computed(() => {
595
+ const offset = dragDetail.isDragging && !props.isFollowHand ? trackDetail.offset : trackDetail.offset + dragDetail.offset;
596
+ const style2 = {};
597
+ if (props.vertical) {
598
+ style2.transform = `translate3d(0, ${offset}px, 0)`;
599
+ style2.transitionDuration = dragDetail.transitionEnabled ? `${props.duration}ms` : "0ms";
600
+ } else {
601
+ style2.transform = `translate3d(${offset}px, 0, 0)`;
602
+ style2.transitionDuration = dragDetail.transitionEnabled ? `${props.duration}ms` : "0ms";
603
+ }
604
+ if (dragDetail.isDragging) {
605
+ style2.transition = "none";
606
+ }
607
+ if (props.vertical) {
608
+ style2.flexDirection = "column";
609
+ }
610
+ if (props.autoHeight) {
611
+ style2.display = "block";
612
+ style2.whiteSpace = "nowrap";
613
+ }
614
+ return style2;
355
615
  });
356
- const we = N({
357
- children: u,
358
- activeIndex: c,
359
- props: e,
360
- itemDetail: s,
361
- itemShowedList: k
616
+ const dotsClass = computed(() => {
617
+ const position = props.dotsPosition || (props.vertical ? Position.left : Position.bottom);
618
+ return ["y-swipe__dots", `y-swipe__dots--${position}`];
362
619
  });
363
- v(we);
364
- const pe = () => e.dots ? b("div", {
365
- class: be.value
366
- }, [u.map((t, a) => {
367
- const m = q("dot", {
368
- active: a === c.value
369
- });
370
- return b("div", {
371
- class: m,
372
- style: {
373
- backgroundColor: e.dotsColor
374
- },
375
- key: a
376
- }, null);
377
- })]) : null;
620
+ expose({
621
+ moveTo,
622
+ next,
623
+ prev,
624
+ resize
625
+ });
626
+ const tabs = reactive({
627
+ children: itemList,
628
+ activeIndex,
629
+ props,
630
+ itemDetail,
631
+ itemShowedList
632
+ });
633
+ initProvide(tabs);
634
+ const renderDots = () => {
635
+ if (props.dots) {
636
+ return createVNode("div", {
637
+ "class": dotsClass.value
638
+ }, [itemList.map((_, index) => {
639
+ const className = bem$2("dot", {
640
+ active: index === activeIndex.value
641
+ });
642
+ return createVNode("div", {
643
+ "class": className,
644
+ "style": {
645
+ backgroundColor: props.dotsColor
646
+ },
647
+ "key": index
648
+ }, null);
649
+ })]);
650
+ }
651
+ return null;
652
+ };
378
653
  return () => {
379
- var t;
380
- return b("div", {
381
- class: q(),
382
- ref: T
383
- }, [b("div", {
384
- class: q("track"),
385
- style: ye.value,
386
- ref: g
387
- }, [Array(f.cloneNodeCount).fill("").map((a, m) => {
388
- var S, E, X;
389
- const w = _(m - f.cloneNodeCount), y = (X = (S = u[w]) == null ? void 0 : (E = S.slots).default) == null ? void 0 : X.call(E);
390
- return y ? b(K, {
391
- clonenNode: y,
392
- index: w
654
+ var _a;
655
+ return createVNode("div", {
656
+ "class": bem$2(),
657
+ "ref": swipeRef
658
+ }, [createVNode("div", {
659
+ "class": bem$2("track"),
660
+ "style": trackStyle.value,
661
+ "ref": swipeTrackRef
662
+ }, [Array(trackDetail.cloneNodeCount).fill("").map((_, index) => {
663
+ var _a2, _b, _c;
664
+ const nodeIndex = getIndex(index - trackDetail.cloneNodeCount);
665
+ const item = (_c = (_a2 = itemList[nodeIndex]) == null ? void 0 : (_b = _a2.slots).default) == null ? void 0 : _c.call(_b);
666
+ return item ? createVNode(YSwipeItem, {
667
+ "clonenNode": item,
668
+ "index": nodeIndex
393
669
  }, null) : null;
394
- }), (t = n.default) == null ? void 0 : t.call(n), Array(f.cloneNodeCount).fill("").map((a, m) => {
395
- var S, E, X;
396
- const w = _(m), y = (X = (S = u[w]) == null ? void 0 : (E = S.slots).default) == null ? void 0 : X.call(E);
397
- return y ? b(K, {
398
- clonenNode: y,
399
- index: w
670
+ }), (_a = slots.default) == null ? void 0 : _a.call(slots), Array(trackDetail.cloneNodeCount).fill("").map((_, index) => {
671
+ var _a2, _b, _c;
672
+ const nodeIndex = getIndex(index);
673
+ const item = (_c = (_a2 = itemList[nodeIndex]) == null ? void 0 : (_b = _a2.slots).default) == null ? void 0 : _c.call(_b);
674
+ return item ? createVNode(YSwipeItem, {
675
+ "clonenNode": item,
676
+ "index": nodeIndex
400
677
  }, null) : null;
401
- })]), n.dots ? n.dots() : pe()]);
678
+ })]), slots.dots ? slots.dots() : renderDots()]);
402
679
  };
403
680
  }
404
- }), [Ae, oe] = U("tabs-title"), se = /* @__PURE__ */ H({
405
- name: Ae,
681
+ });
682
+ const [name$1, bem$1] = createNamespace("tabs-title");
683
+ const YTabTitle = /* @__PURE__ */ defineComponent({
684
+ name: name$1,
406
685
  props: {
407
686
  active: {
408
687
  type: Boolean,
409
- default: !1
688
+ default: false
410
689
  },
411
690
  scrollable: {
412
691
  type: Boolean,
413
- default: !1
692
+ default: false
414
693
  },
415
694
  title: {
416
695
  type: String,
@@ -422,39 +701,47 @@ const ke = {
422
701
  },
423
702
  disabled: {
424
703
  type: Boolean,
425
- default: !1
704
+ default: false
426
705
  }
427
706
  },
428
- setup(e) {
707
+ setup(props) {
429
708
  const {
430
- parent: n
431
- } = fe(me), o = C(() => [{
432
- "y-el--clickable": !e.disabled
433
- }, oe({
434
- scrollable: e.scrollable,
435
- disabled: e.disabled
436
- }), oe(`${(n == null ? void 0 : n.props.size) || "middle"}`, {
437
- active: e.active
438
- }), n == null ? void 0 : n.props.titleClass, e.active ? n == null ? void 0 : n.props.titleActiveClass : ""]), l = C(() => ({
439
- ...n == null ? void 0 : n.props.titleStyle,
440
- ...e.active ? {
441
- ...n == null ? void 0 : n.props.titleActiveStyle
442
- } : {}
443
- }));
709
+ parent
710
+ } = useRelation(TABS_KEY);
711
+ const titleClass = computed(() => {
712
+ return [{
713
+ "y-el--clickable": !props.disabled
714
+ }, bem$1({
715
+ scrollable: props.scrollable,
716
+ disabled: props.disabled
717
+ }), bem$1(`${(parent == null ? void 0 : parent.props.size) || "middle"}`, {
718
+ active: props.active
719
+ }), parent == null ? void 0 : parent.props.titleClass, props.active ? parent == null ? void 0 : parent.props.titleActiveClass : ""];
720
+ });
721
+ const titleStyle = computed(() => {
722
+ return {
723
+ ...parent == null ? void 0 : parent.props.titleStyle,
724
+ ...props.active ? {
725
+ ...parent == null ? void 0 : parent.props.titleActiveStyle
726
+ } : {}
727
+ };
728
+ });
444
729
  return () => {
445
730
  const {
446
- title: v,
447
- titleSlot: u
448
- } = e;
449
- return b("div", {
450
- class: o.value,
451
- title: v,
452
- style: l.value,
453
- role: "presentation"
454
- }, [u ? u() : v]);
731
+ title,
732
+ titleSlot
733
+ } = props;
734
+ return createVNode("div", {
735
+ "class": titleClass.value,
736
+ "title": title,
737
+ "style": titleStyle.value,
738
+ "role": "presentation"
739
+ }, [titleSlot ? titleSlot() : title]);
455
740
  };
456
741
  }
457
- }), J = null, Ye = {
742
+ });
743
+ const unknownProp = null;
744
+ const acceptProps = {
458
745
  initIndex: {
459
746
  type: Number,
460
747
  default: 0
@@ -469,7 +756,7 @@ const ke = {
469
756
  },
470
757
  lazy: {
471
758
  type: Boolean,
472
- default: !1
759
+ default: false
473
760
  },
474
761
  lineColor: {
475
762
  type: String,
@@ -483,7 +770,7 @@ const ke = {
483
770
  type: [Number, String],
484
771
  default: "3px"
485
772
  },
486
- titleWrapperClass: J,
773
+ titleWrapperClass: unknownProp,
487
774
  titleScrollThreshold: {
488
775
  type: Number,
489
776
  default: 5
@@ -493,7 +780,7 @@ const ke = {
493
780
  default: null
494
781
  },
495
782
  titleClass: {
496
- type: J,
783
+ type: unknownProp,
497
784
  default: null
498
785
  },
499
786
  titleActiveStyle: {
@@ -501,16 +788,16 @@ const ke = {
501
788
  default: null
502
789
  },
503
790
  titleActiveClass: {
504
- type: J,
791
+ type: unknownProp,
505
792
  default: null
506
793
  },
507
794
  touchable: {
508
795
  type: Boolean,
509
- default: !0
796
+ default: true
510
797
  },
511
798
  changeWithAnimation: {
512
799
  type: Boolean,
513
- default: !1
800
+ default: false
514
801
  },
515
802
  size: {
516
803
  type: String,
@@ -521,153 +808,207 @@ const ke = {
521
808
  default: "center"
522
809
  }
523
810
  };
524
- function Oe(e) {
525
- return typeof e == "function" || Object.prototype.toString.call(e) === "[object Object]" && !re(e);
811
+ function _isSlot(s) {
812
+ return typeof s === "function" || Object.prototype.toString.call(s) === "[object Object]" && !isVNode(s);
526
813
  }
527
- const [le, Q] = U("tabs"), me = le, Z = /* @__PURE__ */ H({
528
- name: le,
814
+ const [name, bem] = createNamespace("tabs");
815
+ const TABS_KEY = name;
816
+ const Tabs = /* @__PURE__ */ defineComponent({
817
+ name,
529
818
  components: {
530
- YTabTitle: se
819
+ YTabTitle
531
820
  },
532
- props: Ye,
533
- setup(e, {
534
- slots: n,
535
- emit: o,
536
- expose: l
821
+ props: acceptProps,
822
+ setup(props, {
823
+ slots,
824
+ emit,
825
+ expose
537
826
  }) {
538
827
  const {
539
- initProvide: v
540
- } = ue(me), u = z(!1), c = N([]), s = z(), f = C(() => c.length > e.titleScrollThreshold), T = (i) => c.findIndex((d) => (d.$props ? d.$props.name : "") === i), g = z(e.initName ? T(e.initName) : e.initIndex), B = (i) => {
541
- g.value = i;
542
- const d = s.value;
543
- d && (d == null || d.moveTo(i, e.changeWithAnimation));
544
- };
545
- l({
546
- scrollToByIndex: (i) => {
547
- B(i);
548
- },
549
- scrollToByName: (i) => {
550
- const d = T(i);
551
- B(d);
552
- }
828
+ initProvide
829
+ } = setRelation(TABS_KEY);
830
+ const inited = ref(false);
831
+ const childrenList = reactive([]);
832
+ const swiperRef = ref();
833
+ const isTabScrollable = computed(() => childrenList.length > props.titleScrollThreshold);
834
+ const getCurIndexByName = (titleName) => {
835
+ return childrenList.findIndex((node) => (node.$props ? node.$props.name : "") === titleName);
836
+ };
837
+ const activeIndex = ref(props.initName ? getCurIndexByName(props.initName) : props.initIndex);
838
+ const scrollTo = (index) => {
839
+ activeIndex.value = index;
840
+ const swiper = swiperRef.value;
841
+ Boolean(swiper) && (swiper == null ? void 0 : swiper.moveTo(index, props.changeWithAnimation));
842
+ };
843
+ const scrollToByIndex = (index) => {
844
+ scrollTo(index);
845
+ };
846
+ const scrollToByName = (tabName) => {
847
+ const curIndex = getCurIndexByName(tabName);
848
+ scrollTo(curIndex);
849
+ };
850
+ expose({
851
+ scrollToByIndex,
852
+ scrollToByName
553
853
  });
554
- const p = z([]), D = z(), G = (i) => (d) => {
555
- p.value[i] = d;
556
- }, L = (i) => {
854
+ const titlesRef = ref([]);
855
+ const tabListRef = ref();
856
+ const getTitlesRef = (index) => (titleRef) => {
857
+ titlesRef.value[index] = titleRef;
858
+ };
859
+ const clickTitle = (index) => {
557
860
  const {
558
- title: d,
559
- name: h,
560
- disabled: r
561
- } = c[i].$props || {};
562
- g.value !== i && (o(r ? "disabledClick" : "click", i, d, h), !r && B(i));
563
- }, j = async () => {
564
- await te(() => {
565
- if (!f.value || !D.value)
861
+ title,
862
+ name: clickedName,
863
+ disabled
864
+ } = childrenList[index].$props || {};
865
+ if (activeIndex.value === index)
866
+ return;
867
+ emit(disabled ? "disabledClick" : "click", index, title, clickedName);
868
+ if (disabled)
869
+ return;
870
+ scrollTo(index);
871
+ };
872
+ const titleScrollToView = async () => {
873
+ await nextTick(() => {
874
+ if (!isTabScrollable.value || !tabListRef.value)
566
875
  return;
567
- const i = D.value;
568
- if (!i || !p.value[g.value])
876
+ const tabListEl = tabListRef.value;
877
+ if (!tabListEl || !titlesRef.value[activeIndex.value])
569
878
  return;
570
- const d = p.value[g.value].$el, h = d.offsetLeft - (i.offsetWidth - d.offsetWidth) / 2 - i.scrollLeft;
571
- i.scrollBy({
572
- left: h,
879
+ const curTitleEl = titlesRef.value[activeIndex.value].$el;
880
+ const scrollDistance = curTitleEl.offsetLeft - (tabListEl.offsetWidth - curTitleEl.offsetWidth) / 2 - tabListEl.scrollLeft;
881
+ tabListEl.scrollBy({
882
+ left: scrollDistance,
573
883
  behavior: "smooth"
574
884
  });
575
885
  });
576
886
  };
577
- ze(() => {
578
- p.value = [];
887
+ onBeforeUpdate(() => {
888
+ titlesRef.value = [];
579
889
  });
580
- const x = N({
890
+ const lintState = reactive({
581
891
  transform: "translateX(50%)",
582
892
  transition: "all 0ms ease-out"
583
- }), I = async () => {
584
- await te(() => {
585
- if (!p.value || p.value.length === 0)
893
+ });
894
+ const updateLineStyle = async () => {
895
+ await nextTick(() => {
896
+ if (!titlesRef.value || titlesRef.value.length === 0)
586
897
  return;
587
- const i = g.value >= p.value.length ? 0 : g.value, d = p.value[i].$el, h = d.offsetLeft + d.offsetWidth / 2;
588
- x.transform = `translateX(${h}px) translateX(-50%)`, u.value && (x.transition = `all ${e.duration}ms ease-out`), u.value = !0;
898
+ const curIndex = activeIndex.value >= titlesRef.value.length ? 0 : activeIndex.value;
899
+ const curTitle = titlesRef.value[curIndex].$el;
900
+ const left = curTitle.offsetLeft + curTitle.offsetWidth / 2;
901
+ lintState.transform = `translateX(${left}px) translateX(-50%)`;
902
+ if (inited.value) {
903
+ lintState.transition = `all ${props.duration}ms ease-out`;
904
+ }
905
+ inited.value = true;
589
906
  });
590
- }, F = (i) => {
907
+ };
908
+ const swipeChange = (index) => {
591
909
  const {
592
- title: d,
593
- name: h
594
- } = c[i].$props || {};
595
- o("change", i, d, h), g.value = i;
596
- }, _ = (i) => {
910
+ title,
911
+ name: swiperedName
912
+ } = childrenList[index].$props || {};
913
+ emit("change", index, title, swiperedName);
914
+ activeIndex.value = index;
915
+ };
916
+ const swipeAfterChange = (index) => {
597
917
  const {
598
- title: d,
599
- name: h
600
- } = c[i].$props || {};
601
- o("afterChange", i, d, h), g.value = i;
602
- }, A = N({
603
- children: c,
604
- activeIndex: g,
605
- props: e
918
+ title,
919
+ name: afterSwiperedName
920
+ } = childrenList[index].$props || {};
921
+ emit("afterChange", index, title, afterSwiperedName);
922
+ activeIndex.value = index;
923
+ };
924
+ const tabs = reactive({
925
+ children: childrenList,
926
+ activeIndex,
927
+ props
928
+ });
929
+ initProvide(tabs);
930
+ const getSize = (value) => {
931
+ if (isString(value))
932
+ return /^\d+(\.\d+)?$/.test(value) ? `${value}px` : value;
933
+ return value;
934
+ };
935
+ const isString = (value) => {
936
+ return Object.prototype.toString.call(value) === `[object String]`;
937
+ };
938
+ onMounted(async () => {
939
+ await updateLineStyle();
606
940
  });
607
- v(A);
608
- const Y = (i) => O(i) && /^\d+(\.\d+)?$/.test(i) ? `${i}px` : i, O = (i) => Object.prototype.toString.call(i) === "[object String]";
609
- return ce(async () => {
610
- await I();
611
- }), ee(() => g.value, async () => {
612
- await I(), await j();
613
- }), ee(() => {
614
- var i;
615
- return (i = n.default) == null ? void 0 : i.length;
941
+ watch(() => activeIndex.value, async () => {
942
+ await updateLineStyle();
943
+ await titleScrollToView();
944
+ });
945
+ watch(() => {
946
+ var _a;
947
+ return (_a = slots.default) == null ? void 0 : _a.length;
616
948
  }, async () => {
617
- await I();
618
- }), () => {
619
- let i;
620
- return b("div", {
621
- class: le
622
- }, [b("div", {
623
- class: Q("list")
624
- }, [b("div", {
625
- ref: D,
626
- class: Q("list-child-wrapper", {
627
- scrollable: f.value,
628
- [e.size]: e.size,
629
- [e.align]: e.align
949
+ await updateLineStyle();
950
+ });
951
+ return () => {
952
+ let _slot;
953
+ return createVNode("div", {
954
+ "class": name
955
+ }, [createVNode("div", {
956
+ "class": bem("list")
957
+ }, [createVNode("div", {
958
+ "ref": tabListRef,
959
+ "class": bem("list-child-wrapper", {
960
+ scrollable: isTabScrollable.value,
961
+ [props.size]: props.size,
962
+ [props.align]: props.align
630
963
  })
631
- }, [c.length > 0 && c.map((d, h) => b(se, {
632
- title: d.title,
633
- disabled: d.disabled,
634
- "title-slot": d.$slots.title,
635
- key: h,
636
- ref: G(h),
637
- active: g.value === h,
638
- scrollable: f.value,
639
- onClick: () => L(h)
640
- }, null)), b("div", {
641
- class: Q("line"),
642
- style: {
643
- ...x,
644
- width: Y(e.lineWidth),
645
- height: Y(e.lineHeight),
646
- backgroundColor: e.lineColor
964
+ }, [childrenList.length > 0 && childrenList.map((node, index) => {
965
+ return createVNode(YTabTitle, {
966
+ "title": node.title,
967
+ "disabled": node.disabled,
968
+ "title-slot": node.$slots.title,
969
+ "key": index,
970
+ "ref": getTitlesRef(index),
971
+ "active": activeIndex.value === index,
972
+ "scrollable": isTabScrollable.value,
973
+ "onClick": () => clickTitle(index)
974
+ }, null);
975
+ }), createVNode("div", {
976
+ "class": bem("line"),
977
+ "style": {
978
+ ...lintState,
979
+ width: getSize(props.lineWidth),
980
+ height: getSize(props.lineHeight),
981
+ backgroundColor: props.lineColor
647
982
  }
648
- }, null)])]), n.default ? b(_e, {
649
- ref: s,
650
- dots: !1,
651
- loop: !1,
652
- initIndex: g.value,
653
- lazy: e.lazy,
654
- touchable: e.touchable,
655
- duration: e.duration,
656
- "is-follow-hand": e.changeWithAnimation,
657
- onChange: F,
658
- onAfterChange: _
659
- }, Oe(i = n.default()) ? i : {
660
- default: () => [i]
983
+ }, null)])]), slots.default ? createVNode(Swipe, {
984
+ "ref": swiperRef,
985
+ "dots": false,
986
+ "loop": false,
987
+ "initIndex": activeIndex.value,
988
+ "lazy": props.lazy,
989
+ "touchable": props.touchable,
990
+ "duration": props.duration,
991
+ "is-follow-hand": props.changeWithAnimation,
992
+ "onChange": swipeChange,
993
+ "onAfterChange": swipeAfterChange
994
+ }, _isSlot(_slot = slots.default()) ? _slot : {
995
+ default: () => [_slot]
661
996
  }) : null]);
662
997
  };
663
998
  }
664
999
  });
665
- Z.install = (e) => {
666
- const { name: n } = Z;
667
- e.component(n, Z);
1000
+ const reset = "";
1001
+ const libs = "";
1002
+ const font = "";
1003
+ const animation = "";
1004
+ const theme = "";
1005
+ const style = "";
1006
+ Tabs.install = (Vue) => {
1007
+ const { name: name2 } = Tabs;
1008
+ Vue.component(name2, Tabs);
668
1009
  };
669
1010
  export {
670
- Ye as acceptProps,
671
- Z as default,
672
- J as unknownProp
1011
+ acceptProps,
1012
+ Tabs as default,
1013
+ unknownProp
673
1014
  };