@touchvue/ui 0.0.1-alpha.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 (141) hide show
  1. package/README.md +70 -0
  2. package/es/components/article/index.js +66 -0
  3. package/es/components/article/index.js.map +1 -0
  4. package/es/components/box/index.js +98 -0
  5. package/es/components/box/index.js.map +1 -0
  6. package/es/components/button/index.js +96 -0
  7. package/es/components/button/index.js.map +1 -0
  8. package/es/components/calendar/index.js +44 -0
  9. package/es/components/calendar/index.js.map +1 -0
  10. package/es/components/card/index.js +290 -0
  11. package/es/components/card/index.js.map +1 -0
  12. package/es/components/checkbox/index.js +97 -0
  13. package/es/components/checkbox/index.js.map +1 -0
  14. package/es/components/datepicker/index.js +44 -0
  15. package/es/components/datepicker/index.js.map +1 -0
  16. package/es/components/form/index.js +303 -0
  17. package/es/components/form/index.js.map +1 -0
  18. package/es/components/grid/index.js +253 -0
  19. package/es/components/grid/index.js.map +1 -0
  20. package/es/components/header/index.js +233 -0
  21. package/es/components/header/index.js.map +1 -0
  22. package/es/components/icon/index.js +98 -0
  23. package/es/components/icon/index.js.map +1 -0
  24. package/es/components/input/index.js +436 -0
  25. package/es/components/input/index.js.map +1 -0
  26. package/es/components/line/index.js +100 -0
  27. package/es/components/line/index.js.map +1 -0
  28. package/es/components/msg/index.js +322 -0
  29. package/es/components/msg/index.js.map +1 -0
  30. package/es/components/padding/index.js +92 -0
  31. package/es/components/padding/index.js.map +1 -0
  32. package/es/components/page/index.js +334 -0
  33. package/es/components/page/index.js.map +1 -0
  34. package/es/components/select/index.js +218 -0
  35. package/es/components/select/index.js.map +1 -0
  36. package/es/components/space/index.js +88 -0
  37. package/es/components/space/index.js.map +1 -0
  38. package/es/components/step/index.js +127 -0
  39. package/es/components/step/index.js.map +1 -0
  40. package/es/components/switch/index.js +120 -0
  41. package/es/components/switch/index.js.map +1 -0
  42. package/es/components/tab/index.js +227 -0
  43. package/es/components/tab/index.js.map +1 -0
  44. package/es/components/table/index.js +893 -0
  45. package/es/components/table/index.js.map +1 -0
  46. package/es/directives/dis/index.js +32 -0
  47. package/es/directives/dis/index.js.map +1 -0
  48. package/es/directives/size/index.js +23 -0
  49. package/es/directives/size/index.js.map +1 -0
  50. package/es/hooks/index.js +2 -0
  51. package/es/hooks/index.js.map +1 -0
  52. package/es/index.js +4209 -0
  53. package/es/index.js.map +1 -0
  54. package/es/utils/index.js +90 -0
  55. package/es/utils/index.js.map +1 -0
  56. package/lib/components/article/index.js +70 -0
  57. package/lib/components/article/index.js.map +1 -0
  58. package/lib/components/box/index.js +102 -0
  59. package/lib/components/box/index.js.map +1 -0
  60. package/lib/components/button/index.js +98 -0
  61. package/lib/components/button/index.js.map +1 -0
  62. package/lib/components/calendar/index.js +46 -0
  63. package/lib/components/calendar/index.js.map +1 -0
  64. package/lib/components/card/index.js +292 -0
  65. package/lib/components/card/index.js.map +1 -0
  66. package/lib/components/checkbox/index.js +99 -0
  67. package/lib/components/checkbox/index.js.map +1 -0
  68. package/lib/components/datepicker/index.js +46 -0
  69. package/lib/components/datepicker/index.js.map +1 -0
  70. package/lib/components/form/index.js +306 -0
  71. package/lib/components/form/index.js.map +1 -0
  72. package/lib/components/grid/index.js +256 -0
  73. package/lib/components/grid/index.js.map +1 -0
  74. package/lib/components/header/index.js +235 -0
  75. package/lib/components/header/index.js.map +1 -0
  76. package/lib/components/icon/index.js +101 -0
  77. package/lib/components/icon/index.js.map +1 -0
  78. package/lib/components/input/index.js +438 -0
  79. package/lib/components/input/index.js.map +1 -0
  80. package/lib/components/line/index.js +102 -0
  81. package/lib/components/line/index.js.map +1 -0
  82. package/lib/components/msg/index.js +324 -0
  83. package/lib/components/msg/index.js.map +1 -0
  84. package/lib/components/padding/index.js +94 -0
  85. package/lib/components/padding/index.js.map +1 -0
  86. package/lib/components/page/index.js +336 -0
  87. package/lib/components/page/index.js.map +1 -0
  88. package/lib/components/select/index.js +220 -0
  89. package/lib/components/select/index.js.map +1 -0
  90. package/lib/components/space/index.js +90 -0
  91. package/lib/components/space/index.js.map +1 -0
  92. package/lib/components/step/index.js +129 -0
  93. package/lib/components/step/index.js.map +1 -0
  94. package/lib/components/switch/index.js +122 -0
  95. package/lib/components/switch/index.js.map +1 -0
  96. package/lib/components/tab/index.js +230 -0
  97. package/lib/components/tab/index.js.map +1 -0
  98. package/lib/components/table/index.js +898 -0
  99. package/lib/components/table/index.js.map +1 -0
  100. package/lib/directives/dis/index.js +34 -0
  101. package/lib/directives/dis/index.js.map +1 -0
  102. package/lib/directives/size/index.js +25 -0
  103. package/lib/directives/size/index.js.map +1 -0
  104. package/lib/hooks/index.js +3 -0
  105. package/lib/hooks/index.js.map +1 -0
  106. package/lib/index.js +4251 -0
  107. package/lib/index.js.map +1 -0
  108. package/lib/utils/index.js +99 -0
  109. package/lib/utils/index.js.map +1 -0
  110. package/package.json +35 -0
  111. package/theme/components/article/index.css +1 -0
  112. package/theme/components/box/index.css +1 -0
  113. package/theme/components/button/index.css +1 -0
  114. package/theme/components/calendar/index.css +0 -0
  115. package/theme/components/card/index.css +1 -0
  116. package/theme/components/checkbox/index.css +1 -0
  117. package/theme/components/datepicker/index.css +0 -0
  118. package/theme/components/form/index.css +1 -0
  119. package/theme/components/grid/index.css +1 -0
  120. package/theme/components/header/index.css +1 -0
  121. package/theme/components/icon/index.css +1 -0
  122. package/theme/components/input/index.css +1 -0
  123. package/theme/components/line/index.css +1 -0
  124. package/theme/components/msg/index.css +1 -0
  125. package/theme/components/padding/index.css +1 -0
  126. package/theme/components/space/index.css +1 -0
  127. package/theme/components/step/index.css +1 -0
  128. package/theme/components/switch/index.css +1 -0
  129. package/theme/components/tab/index.css +1 -0
  130. package/theme/components/table/index.css +1 -0
  131. package/theme/img/default.png +0 -0
  132. package/theme/img/icon-type-fill.ttf +0 -0
  133. package/theme/img/icon.ttf +0 -0
  134. package/theme/img/loading-in.png +0 -0
  135. package/theme/img/loading-out.png +0 -0
  136. package/theme/img/msg/error-bg.png +0 -0
  137. package/theme/img/msg/error-icon.png +0 -0
  138. package/theme/img/msg/success-bg.png +0 -0
  139. package/theme/img/msg/success-icon.png +0 -0
  140. package/theme/index.css +1 -0
  141. package/theme/skin/default.css +1 -0
@@ -0,0 +1,334 @@
1
+ import { defineComponent, ref, computed, watch, onMounted, resolveComponent, resolveDirective, withDirectives, openBlock, createElementBlock, normalizeClass, toDisplayString, createCommentVNode, renderSlot, createElementVNode, Fragment, renderList, createVNode, withKeys } from 'vue';
2
+
3
+ const _hoisted_1 = {
4
+ key: 0,
5
+ class: "to-page-total"
6
+ };
7
+ const _hoisted_2 = {
8
+ key: 1,
9
+ class: "to-page-pager"
10
+ };
11
+ const _hoisted_3 = { class: "to-page-pager-list" };
12
+ const _hoisted_4 = {
13
+ key: 0,
14
+ class: "to-page-pager-ellipsis"
15
+ };
16
+ const _hoisted_5 = ["onClick"];
17
+ const _hoisted_6 = {
18
+ key: 1,
19
+ class: "to-page-pager-ellipsis"
20
+ };
21
+ const _hoisted_7 = {
22
+ key: 2,
23
+ class: "to-page-size"
24
+ };
25
+ const _hoisted_8 = {
26
+ key: 3,
27
+ class: "to-page-jumper"
28
+ };
29
+ var _sfc_main = /* @__PURE__ */ defineComponent({
30
+ __name: "page",
31
+ props: {
32
+ align: { type: String, default: "" },
33
+ pageSize: { type: [Number, String], default: 10 },
34
+ total: { type: [Number, String], default: 0 },
35
+ pageCount: { type: [Number, String], default: void 0 },
36
+ pagerCount: { type: [Number, String], default: 7 },
37
+ currentPage: { type: [Number, String], default: 1 },
38
+ layout: { type: String, default: "all" },
39
+ pageSizes: { type: [Array, String], default: () => [10, 20, 30, 40, 50, 100] },
40
+ prevText: { type: String, default: "" },
41
+ nextText: { type: String, default: "" },
42
+ disabled: { type: Boolean, default: false },
43
+ hideOnSinglePage: { type: Boolean, default: false },
44
+ lite: Boolean
45
+ },
46
+ emits: [
47
+ "update:pageSize",
48
+ "size-change",
49
+ "update:currentPage",
50
+ "current-change",
51
+ "prev-click",
52
+ "next-click"
53
+ ],
54
+ setup(__props, { emit: __emit }) {
55
+ const props = __props;
56
+ const emit = __emit;
57
+ const pageCount_ = ref(0);
58
+ const pageSize_ = ref(Number(props.pageSize));
59
+ const currentPage_ = ref(Number(props.currentPage));
60
+ const pager_ = ref([]);
61
+ const jumperPage = ref("");
62
+ const showPrevMore = ref(false);
63
+ const showNextMore = ref(false);
64
+ const cShowInSingle = computed(() => {
65
+ return !(props.hideOnSinglePage && Number(pageCount_.value) <= 1) || !props.hideOnSinglePage;
66
+ });
67
+ const cPageSizes = computed(() => {
68
+ const sizes = typeof props.pageSizes === "string" ? props.pageSizes.split(",") : props.pageSizes;
69
+ return sizes.map((size) => ({
70
+ label: size,
71
+ value: Number(size)
72
+ }));
73
+ });
74
+ const setClass = computed(() => {
75
+ let arr = [];
76
+ if (props.lite) {
77
+ arr.push(`is-lite`);
78
+ }
79
+ return arr;
80
+ });
81
+ watch(
82
+ () => props.pageSize,
83
+ (val) => {
84
+ const sizes = typeof props.pageSizes === "string" ? props.pageSizes.split(",") : props.pageSizes;
85
+ pageSize_.value = sizes.includes(val) ? Number(val) : Number(sizes[0]);
86
+ },
87
+ { immediate: true }
88
+ );
89
+ watch(
90
+ () => props.currentPage,
91
+ (val) => {
92
+ currentPage_.value = Number(val);
93
+ computePager();
94
+ },
95
+ { immediate: true }
96
+ );
97
+ watch(
98
+ () => props.pageCount,
99
+ (val) => {
100
+ pageCount_.value = Number(val);
101
+ computePager();
102
+ },
103
+ { immediate: true }
104
+ );
105
+ watch(() => props.total, computePager);
106
+ watch(() => props.pagerCount, computePager);
107
+ onMounted(() => computePager());
108
+ function handleJump() {
109
+ if (props.disabled || !jumperPage.value)
110
+ return;
111
+ let jump = Number(jumperPage.value);
112
+ jump = Math.max(1, Math.min(jump, pageCount_.value));
113
+ jumperPage.value = "";
114
+ handleCurrentChange(jump);
115
+ }
116
+ function handleSizeChange(size) {
117
+ if (props.disabled)
118
+ return;
119
+ emit("update:pageSize", size);
120
+ emit("size-change", size);
121
+ computePager();
122
+ }
123
+ function handleCurrentChange(page) {
124
+ if (props.disabled)
125
+ return;
126
+ currentPage_.value = page;
127
+ emit("update:currentPage", page);
128
+ emit("current-change", page);
129
+ computePager();
130
+ }
131
+ function handlePagePrev() {
132
+ if (props.disabled || currentPage_.value <= 1)
133
+ return;
134
+ currentPage_.value--;
135
+ handleCurrentChange(currentPage_.value);
136
+ emit("prev-click", currentPage_.value);
137
+ }
138
+ function handlePageNext() {
139
+ if (props.disabled || currentPage_.value >= pageCount_.value)
140
+ return;
141
+ currentPage_.value++;
142
+ handleCurrentChange(currentPage_.value);
143
+ emit("next-click", currentPage_.value);
144
+ }
145
+ function computePager() {
146
+ const pagerCount = Number(props.pagerCount);
147
+ const halfPagerCount = (pagerCount - 1) / 2;
148
+ const count = props.pageCount ? Number(props.pageCount) : Math.ceil(Number(props.total) / pageSize_.value);
149
+ pageCount_.value = Math.max(1, count);
150
+ const current = currentPage_.value;
151
+ showPrevMore.value = current > pagerCount - halfPagerCount;
152
+ showNextMore.value = current < pageCount_.value - halfPagerCount;
153
+ const pages = [];
154
+ if (showPrevMore.value && !showNextMore.value) {
155
+ const start = pageCount_.value - (pagerCount - 2);
156
+ for (let i = start; i < pageCount_.value; i++)
157
+ pages.push(i);
158
+ } else if (!showPrevMore.value && showNextMore.value) {
159
+ for (let i = 2; i < pagerCount; i++)
160
+ pages.push(i);
161
+ } else if (showPrevMore.value && showNextMore.value) {
162
+ const offset = Math.floor(pagerCount / 2) - 1;
163
+ for (let i = current - offset; i <= current + offset; i++)
164
+ pages.push(i);
165
+ } else {
166
+ for (let i = 2; i < pageCount_.value; i++)
167
+ pages.push(i);
168
+ }
169
+ pager_.value = pages;
170
+ }
171
+ return (_ctx, _cache) => {
172
+ const _component_to_select = resolveComponent("to-select");
173
+ const _component_to_input = resolveComponent("to-input");
174
+ const _directive_dis = resolveDirective("dis");
175
+ const _directive_align = resolveDirective("align");
176
+ return cShowInSingle.value ? withDirectives((openBlock(), createElementBlock(
177
+ "div",
178
+ {
179
+ key: 0,
180
+ class: normalizeClass([setClass.value, "to-page"])
181
+ },
182
+ [
183
+ __props.layout.includes("total") || __props.layout === "all" ? (openBlock(), createElementBlock(
184
+ "div",
185
+ _hoisted_1,
186
+ " \u5171 " + toDisplayString(__props.total) + " \u9879\u6570\u636E ",
187
+ 1
188
+ /* TEXT */
189
+ )) : createCommentVNode("v-if", true),
190
+ createCommentVNode(' <div class="to-page-slot" v-if="slots.default || !lite"> '),
191
+ renderSlot(_ctx.$slots, "default"),
192
+ createCommentVNode(" </div> "),
193
+ __props.layout.includes("pager") || __props.layout === "all" ? (openBlock(), createElementBlock("div", _hoisted_2, [
194
+ withDirectives(createElementVNode(
195
+ "div",
196
+ {
197
+ class: "to-page-pager-prev",
198
+ onClick: handlePagePrev
199
+ },
200
+ null,
201
+ 512
202
+ /* NEED_PATCH */
203
+ ), [
204
+ [_directive_dis, Number(currentPage_.value) <= 1]
205
+ ]),
206
+ createElementVNode("ul", _hoisted_3, [
207
+ createElementVNode(
208
+ "li",
209
+ {
210
+ class: normalizeClass(["to-page-pager-item", { "is-on": Number(currentPage_.value) === 1 }]),
211
+ onClick: _cache[0] || (_cache[0] = ($event) => handleCurrentChange(1))
212
+ },
213
+ " 1 ",
214
+ 2
215
+ /* CLASS */
216
+ ),
217
+ showPrevMore.value ? (openBlock(), createElementBlock("li", _hoisted_4, "\u2026")) : createCommentVNode("v-if", true),
218
+ (openBlock(true), createElementBlock(
219
+ Fragment,
220
+ null,
221
+ renderList(pager_.value, (page) => {
222
+ return openBlock(), createElementBlock("li", {
223
+ key: page,
224
+ class: normalizeClass(["to-page-pager-item", { "is-on": Number(currentPage_.value) === page }]),
225
+ onClick: ($event) => handleCurrentChange(page)
226
+ }, toDisplayString(page), 11, _hoisted_5);
227
+ }),
228
+ 128
229
+ /* KEYED_FRAGMENT */
230
+ )),
231
+ showNextMore.value ? (openBlock(), createElementBlock("li", _hoisted_6, "\u2026")) : createCommentVNode("v-if", true),
232
+ pageCount_.value > 1 ? (openBlock(), createElementBlock(
233
+ "li",
234
+ {
235
+ key: 2,
236
+ class: normalizeClass(["to-page-pager-item", { "is-on": Number(currentPage_.value) === Number(pageCount_.value) }]),
237
+ onClick: _cache[1] || (_cache[1] = ($event) => handleCurrentChange(pageCount_.value))
238
+ },
239
+ toDisplayString(pageCount_.value),
240
+ 3
241
+ /* TEXT, CLASS */
242
+ )) : createCommentVNode("v-if", true)
243
+ ]),
244
+ withDirectives(createElementVNode(
245
+ "div",
246
+ {
247
+ class: "to-page-pager-next",
248
+ onClick: handlePageNext
249
+ },
250
+ null,
251
+ 512
252
+ /* NEED_PATCH */
253
+ ), [
254
+ [_directive_dis, Number(currentPage_.value) >= Number(pageCount_.value)]
255
+ ])
256
+ ])) : createCommentVNode("v-if", true),
257
+ __props.layout.includes("size") || __props.layout === "all" ? (openBlock(), createElementBlock("div", _hoisted_7, [
258
+ withDirectives(createVNode(_component_to_select, {
259
+ modelValue: pageSize_.value,
260
+ "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => pageSize_.value = $event),
261
+ suffix: "\u6761/\u9875",
262
+ mode: "none",
263
+ clearable: false,
264
+ data: cPageSizes.value,
265
+ "option-width": 10,
266
+ onChange: handleSizeChange
267
+ }, null, 8, ["modelValue", "data"]), [
268
+ [_directive_dis, __props.disabled]
269
+ ])
270
+ ])) : createCommentVNode("v-if", true),
271
+ __props.layout.includes("jumper") || __props.layout === "all" ? (openBlock(), createElementBlock("div", _hoisted_8, [
272
+ _cache[4] || (_cache[4] = createElementVNode(
273
+ "span",
274
+ null,
275
+ "\u8DF3\u81F3",
276
+ -1
277
+ /* CACHED */
278
+ )),
279
+ withDirectives(createVNode(_component_to_input, {
280
+ modelValue: jumperPage.value,
281
+ "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => jumperPage.value = $event),
282
+ placeholder: "1",
283
+ onKeyup: withKeys(handleJump, ["enter"])
284
+ }, null, 8, ["modelValue"]), [
285
+ [_directive_dis, __props.disabled]
286
+ ]),
287
+ createElementVNode(
288
+ "span",
289
+ null,
290
+ "/" + toDisplayString(pageCount_.value) + "\u9875",
291
+ 1
292
+ /* TEXT */
293
+ )
294
+ ])) : createCommentVNode("v-if", true)
295
+ ],
296
+ 2
297
+ /* CLASS */
298
+ )), [
299
+ [_directive_align, __props.align]
300
+ ]) : createCommentVNode("v-if", true);
301
+ };
302
+ }
303
+ });
304
+
305
+ var _export_sfc = (sfc, props) => {
306
+ const target = sfc.__vccOpts || sfc;
307
+ for (const [key, val] of props) {
308
+ target[key] = val;
309
+ }
310
+ return target;
311
+ };
312
+
313
+ var Page = /* @__PURE__ */ _export_sfc(_sfc_main, [["__file", "/Users/wangding/WorkSpace/AsiaInfo/projects/\u524D\u7AEF\u6846\u67B6/touch-vue3-ui/packages/components/page/src/page.vue"]]);
314
+
315
+ const withInstall = (main, extra) => {
316
+ main.install = (app) => {
317
+ for (const comp of [main, ...Object.values(extra != null ? extra : {})]) {
318
+ app.component(comp.name, comp);
319
+ }
320
+ };
321
+ if (extra) {
322
+ for (const [key, comp] of Object.entries(extra)) {
323
+ main[key] = comp;
324
+ }
325
+ }
326
+ return main;
327
+ };
328
+
329
+ navigator.userAgent.toLowerCase();
330
+
331
+ const ToPage = withInstall(Page);
332
+
333
+ export { ToPage };
334
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../../packages/components/page/src/page.vue","../../../../packages/utils/types.ts","../../../../packages/utils/ratio.ts","../../../../packages/components/page/index.ts"],"sourcesContent":["<template>\n <div v-if=\"cShowInSingle\" v-align=\"align\" :class=\"setClass\" class=\"to-page\">\n <div v-if=\"layout.includes('total') || layout === 'all'\" class=\"to-page-total\">\n 共 {{ total }} 项数据\n </div>\n <!-- <div class=\"to-page-slot\" v-if=\"slots.default || !lite\"> -->\n <slot />\n <!-- </div> -->\n <div v-if=\"layout.includes('pager') || layout === 'all'\" class=\"to-page-pager\">\n <div\n v-dis=\"Number(currentPage_) <= 1\"\n class=\"to-page-pager-prev\"\n @click=\"handlePagePrev\"\n ></div>\n <ul class=\"to-page-pager-list\">\n <li\n class=\"to-page-pager-item\"\n :class=\"{ 'is-on': Number(currentPage_) === 1 }\"\n @click=\"handleCurrentChange(1)\"\n >\n 1\n </li>\n <li v-if=\"showPrevMore\" class=\"to-page-pager-ellipsis\">…</li>\n <li\n v-for=\"page in pager_\"\n :key=\"page\"\n class=\"to-page-pager-item\"\n :class=\"{ 'is-on': Number(currentPage_) === page }\"\n @click=\"handleCurrentChange(page)\"\n >\n {{ page }}\n </li>\n <li v-if=\"showNextMore\" class=\"to-page-pager-ellipsis\">…</li>\n <li\n v-if=\"pageCount_ > 1\"\n class=\"to-page-pager-item\"\n :class=\"{ 'is-on': Number(currentPage_) === Number(pageCount_) }\"\n @click=\"handleCurrentChange(pageCount_)\"\n >\n {{ pageCount_ }}\n </li>\n </ul>\n <div\n v-dis=\"Number(currentPage_) >= Number(pageCount_)\"\n class=\"to-page-pager-next\"\n @click=\"handlePageNext\"\n ></div>\n </div>\n <div v-if=\"layout.includes('size') || layout === 'all'\" class=\"to-page-size\">\n <to-select\n v-model=\"pageSize_\"\n v-dis=\"disabled\"\n suffix=\"条/页\"\n mode=\"none\"\n :clearable=\"false\"\n :data=\"cPageSizes\"\n :option-width=\"10\"\n @change=\"handleSizeChange\"\n />\n </div>\n <div v-if=\"layout.includes('jumper') || layout === 'all'\" class=\"to-page-jumper\">\n <span>跳至</span>\n <to-input\n v-model=\"jumperPage\"\n v-dis=\"disabled\"\n placeholder=\"1\"\n @keyup.enter=\"handleJump\"\n ></to-input>\n <span>/{{ pageCount_ }}页</span>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, watch, defineProps, defineEmits, onMounted } from 'vue';\n// const slots = useSlots\nconst props = defineProps({\n align: { type: String, default: '' },\n pageSize: { type: [Number, String], default: 10 },\n total: { type: [Number, String], default: 0 },\n pageCount: { type: [Number, String], default: undefined },\n pagerCount: { type: [Number, String], default: 7 },\n currentPage: { type: [Number, String], default: 1 },\n layout: { type: String, default: 'all' },\n pageSizes: { type: [Array, String], default: () => [10, 20, 30, 40, 50, 100] },\n prevText: { type: String, default: '' },\n nextText: { type: String, default: '' },\n disabled: { type: Boolean, default: false },\n hideOnSinglePage: { type: Boolean, default: false },\n lite: Boolean,\n});\n\nconst emit = defineEmits([\n 'update:pageSize',\n 'size-change',\n 'update:currentPage',\n 'current-change',\n 'prev-click',\n 'next-click',\n]);\n\nconst pageCount_ = ref<number>(0);\nconst pageSize_ = ref<number>(Number(props.pageSize));\nconst currentPage_ = ref<number>(Number(props.currentPage));\nconst pager_ = ref<number[]>([]);\nconst jumperPage = ref<string>('');\nconst showPrevMore = ref(false);\nconst showNextMore = ref(false);\n\nconst cShowInSingle = computed(() => {\n return !(props.hideOnSinglePage && Number(pageCount_.value) <= 1) || !props.hideOnSinglePage;\n});\n\nconst cPageSizes = computed(() => {\n const sizes = typeof props.pageSizes === 'string' ? props.pageSizes.split(',') : props.pageSizes;\n return sizes.map(size => ({\n label: size,\n value: Number(size),\n }));\n});\n\nconst setClass = computed(() => {\n let arr: string[] = [];\n if (props.lite) {\n arr.push(`is-lite`);\n }\n return arr;\n});\n\nwatch(\n () => props.pageSize,\n val => {\n const sizes =\n typeof props.pageSizes === 'string' ? props.pageSizes.split(',') : props.pageSizes;\n pageSize_.value = sizes.includes(val) ? Number(val) : Number(sizes[0]);\n },\n { immediate: true }\n);\n\nwatch(\n () => props.currentPage,\n val => {\n currentPage_.value = Number(val);\n computePager();\n },\n { immediate: true }\n);\n\nwatch(\n () => props.pageCount,\n val => {\n pageCount_.value = Number(val);\n computePager();\n },\n { immediate: true }\n);\n\nwatch(() => props.total, computePager);\nwatch(() => props.pagerCount, computePager);\n\nonMounted(() => computePager());\n\nfunction handleJump() {\n if (props.disabled || !jumperPage.value) return;\n let jump = Number(jumperPage.value);\n jump = Math.max(1, Math.min(jump, pageCount_.value));\n jumperPage.value = '';\n handleCurrentChange(jump);\n}\n\nfunction handleSizeChange(size: number) {\n if (props.disabled) return;\n emit('update:pageSize', size);\n emit('size-change', size);\n computePager();\n}\n\nfunction handleCurrentChange(page: number) {\n if (props.disabled) return;\n currentPage_.value = page;\n emit('update:currentPage', page);\n emit('current-change', page);\n computePager();\n}\n\nfunction handlePagePrev() {\n if (props.disabled || currentPage_.value <= 1) return;\n currentPage_.value--;\n handleCurrentChange(currentPage_.value);\n emit('prev-click', currentPage_.value);\n}\n\nfunction handlePageNext() {\n if (props.disabled || currentPage_.value >= pageCount_.value) return;\n currentPage_.value++;\n handleCurrentChange(currentPage_.value);\n emit('next-click', currentPage_.value);\n}\n\nfunction computePager() {\n const pagerCount = Number(props.pagerCount);\n const halfPagerCount = (pagerCount - 1) / 2;\n const count = props.pageCount\n ? Number(props.pageCount)\n : Math.ceil(Number(props.total) / pageSize_.value);\n pageCount_.value = Math.max(1, count);\n\n const current = currentPage_.value;\n showPrevMore.value = current > pagerCount - halfPagerCount;\n showNextMore.value = current < pageCount_.value - halfPagerCount;\n\n const pages: number[] = [];\n\n if (showPrevMore.value && !showNextMore.value) {\n const start = pageCount_.value - (pagerCount - 2);\n for (let i = start; i < pageCount_.value; i++) pages.push(i);\n } else if (!showPrevMore.value && showNextMore.value) {\n for (let i = 2; i < pagerCount; i++) pages.push(i);\n } else if (showPrevMore.value && showNextMore.value) {\n const offset = Math.floor(pagerCount / 2) - 1;\n for (let i = current - offset; i <= current + offset; i++) pages.push(i);\n } else {\n for (let i = 2; i < pageCount_.value; i++) pages.push(i);\n }\n\n pager_.value = pages;\n}\n</script>\n","import type { App, Plugin } from 'vue';\n\n/* 生成install函数 */\n\nexport type SFCWithInstall<T> = T & Plugin;\n\nexport type SFCInstallWithContext<T> = SFCWithInstall<T> & {\n _context: App | null;\n};\n\nexport const withInstall = <T, E extends Record<string, any>>(main: T, extra?: E) => {\n (main as SFCWithInstall<T>).install = (app: App): void => {\n for (const comp of [main, ...Object.values(extra ?? {})]) {\n app.component(comp.name, comp);\n }\n };\n\n if (extra) {\n for (const [key, comp] of Object.entries(extra)) {\n (main as any)[key] = comp;\n }\n }\n return main as SFCWithInstall<T> & E;\n};\n\nexport const withInstallFunction = <T>(fn: T, name: string) => {\n (fn as SFCWithInstall<T>).install = (app: App) => {\n (fn as SFCInstallWithContext<T>)._context = app;\n app.config.globalProperties[name] = fn;\n };\n\n return fn as SFCInstallWithContext<T>;\n};\n","interface Options {\n ratio?: {\n base?: {\n pc?: number;\n pad?: number;\n phone?: number;\n };\n };\n}\n\nconst ua = navigator.userAgent.toLowerCase();\n\nexport function setRatio(options: Options = {}) {\n const ua = navigator.userAgent.toLowerCase();\n const base = options?.ratio?.base ?? {};\n\n const baseSize = /iphone|android.*mobile|windows phone|ipod/i.test(ua)\n ? (base.phone ?? 375)\n : /ipad|android(?!.*mobile)|tablet/i.test(ua)\n ? (base.pad ?? 1100)\n : (base.pc ?? 1366);\n\n const updateFontSize = () => {\n const width = window.innerWidth || document.documentElement.clientWidth;\n document.documentElement.style.fontSize = (width / baseSize) * 100 + 'px';\n };\n\n updateFontSize();\n window.addEventListener('resize', updateFontSize);\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function getMedia(options: Options = {}) {\n const isMobile = /iphone|android.*mobile|windows phone|ipod/i.test(ua);\n const isTablet = /ipad|android(?!.*mobile)|tablet/i.test(ua);\n\n return isMobile ? 'phone' : isTablet ? 'pad' : 'pc';\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function setMedia(options: Options = {}) {\n const html = document.documentElement;\n const classList: string[] = [];\n\n // 判断操作系统\n if (/windows/i.test(ua)) {\n classList.push('os-windows');\n } else if (/macintosh|mac os x/i.test(ua)) {\n classList.push('os-macos');\n } else if (/android/i.test(ua)) {\n classList.push('os-android');\n } else if (/iphone|ipad|ipod/i.test(ua)) {\n classList.push('os-ios');\n }\n\n // 判断设备类型\n const media = getMedia();\n if (media === 'pad') {\n classList.push('media-pad');\n } else if (media === 'phone') {\n classList.push('media-phone');\n } else {\n classList.push('media-pc');\n }\n\n // 添加 class 到 <html>\n html.className += ' ' + classList.join(' ');\n}\n\nexport function getEm() {\n const el = document.createElement('div');\n el.style.width = '1em';\n el.style.height = '1em';\n el.style.position = 'absolute';\n document.body.appendChild(el);\n const size = el.getBoundingClientRect().height;\n document.body.removeChild(el);\n return size;\n}\n","import Page from './src/page.vue';\nimport { SFCWithInstall, withInstall } from '@touchvue/utils';\nexport const ToPage: SFCWithInstall<typeof Page> = withInstall(Page);\nexport * from './src/instance';\n"],"names":["_createElementBlock","_normalizeClass","_openBlock","_toDisplayString","_createCommentVNode","_renderSlot","_createElementVNode","_Fragment","_renderList","_createVNode"],"mappings":"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"}
@@ -0,0 +1,218 @@
1
+ import { ref, computed, openBlock, createElementBlock, normalizeClass, createElementVNode, toDisplayString, createCommentVNode, createTextVNode, createBlock, Teleport, unref, normalizeStyle, Fragment, renderList } from 'vue';
2
+
3
+ var _export_sfc = (sfc, props) => {
4
+ const target = sfc.__vccOpts || sfc;
5
+ for (const [key, val] of props) {
6
+ target[key] = val;
7
+ }
8
+ return target;
9
+ };
10
+
11
+ const _hoisted_1 = { class: "to-select-content" };
12
+ const _hoisted_2 = { key: 0 };
13
+ const _hoisted_3 = { key: 1 };
14
+ const _hoisted_4 = ["onClick"];
15
+
16
+ const _sfc_main = /*@__PURE__*/Object.assign({
17
+ name: 'ToSelect',
18
+ }, {
19
+ __name: 'select',
20
+ props: {
21
+ modelValue: {
22
+ type: [String, Number],
23
+ default: '',
24
+ },
25
+ data: {
26
+ type: [Boolean, Array],
27
+ default: () => {
28
+ return [];
29
+ },
30
+ },
31
+ prefix: {
32
+ type: String,
33
+ default: '',
34
+ },
35
+ suffix: {
36
+ type: String,
37
+ default: '',
38
+ },
39
+ mode: {
40
+ type: String,
41
+ default: 'default',
42
+ },
43
+ placeholderText: {
44
+ type: String,
45
+ default: '请选择',
46
+ },
47
+ },
48
+ emits: ['update:modelValue', 'change'],
49
+ setup(__props, { emit: __emit }) {
50
+
51
+
52
+ const props = __props;
53
+ const elRef = ref(null);
54
+ const optionRef = ref(null);
55
+ let showOption = ref(false);
56
+ const options = computed(() => {
57
+ if (typeof props.data === 'string') {
58
+ // 按逗号拆分字符串,过滤空项
59
+ return props.data
60
+ .split(',')
61
+ .map(item => item.trim())
62
+ .filter(item => item.length > 0)
63
+ .map(item => ({ label: item, value: item }));
64
+ } else if (Array.isArray(props.data)) {
65
+ return props.data;
66
+ }
67
+ // 其它情况返回空数组
68
+ return [];
69
+ });
70
+
71
+ const emit = __emit;
72
+
73
+ const isPlaceholder = computed(
74
+ () => props.modelValue === undefined || props.modelValue === null || props.modelValue === ''
75
+ );
76
+
77
+ const displayText = computed(() => {
78
+ if (isPlaceholder.value) return props.placeholderText;
79
+ if (options.value.length) {
80
+ const found = options.value.find(item => item.value === props.modelValue);
81
+ return found && found.label !== undefined ? found.label : String(props.modelValue);
82
+ }
83
+ return String(props.modelValue);
84
+ });
85
+
86
+ const setClass = computed(() => {
87
+ const arr = [];
88
+ if (props.mode) {
89
+ arr.push(`mode-${props.mode}`);
90
+ }
91
+ return arr;
92
+ });
93
+
94
+ const setOptionStyle = computed(() => {
95
+ const obj = {};
96
+ return obj;
97
+ });
98
+
99
+ const open = () => {
100
+ if (showOption.value) {
101
+ showOption.value = false;
102
+ } else {
103
+ // 获取初始变量
104
+ const baseInfo = elRef.value.getBoundingClientRect();
105
+ // const floatInfo = optionRef.value.getBoundingClientRect()
106
+ const contentHeight = optionRef.value.scrollHeight;
107
+ const spaceHeight = document.body.offsetHeight - (baseInfo.top + baseInfo.height);
108
+
109
+ // 定位
110
+ optionRef.value.style.left = `${baseInfo.left}px`;
111
+ optionRef.value.style.top = `${baseInfo.top + baseInfo.height - 1}px`;
112
+
113
+ // 设置大小
114
+ optionRef.value.style.width = `${baseInfo.width}px`;
115
+
116
+ // 设置高度
117
+ if (spaceHeight < contentHeight) {
118
+ optionRef.value.style.height = `${spaceHeight}px`;
119
+ }
120
+
121
+ // 打开
122
+ showOption.value = true;
123
+
124
+ // 点击组件之外关闭
125
+ document.body.addEventListener('mousedown', blur);
126
+ }
127
+ };
128
+
129
+ const blur = e => {
130
+ let node = e.target;
131
+ while (node && node !== optionRef.value && node !== elRef.value && node.nodeName !== 'BODY') {
132
+ node = node.parentNode;
133
+ }
134
+ if (node && node.nodeName === 'BODY') {
135
+ close();
136
+ }
137
+ };
138
+
139
+ const select = item => {
140
+ emit('update:modelValue', item.value);
141
+ emit('change', item.value);
142
+ close();
143
+ };
144
+
145
+ const close = () => {
146
+ showOption.value = false;
147
+ };
148
+
149
+ const clear = () => {
150
+ emit('update:modelValue', '');
151
+ emit('change', '');
152
+ close();
153
+ };
154
+
155
+ return (_ctx, _cache) => {
156
+ return (openBlock(), createElementBlock("div", {
157
+ ref_key: "elRef",
158
+ ref: elRef,
159
+ class: normalizeClass(["to-select", [{ 'is-placeholder': isPlaceholder.value }, ...setClass.value]]),
160
+ onClick: open
161
+ }, [
162
+ createElementVNode("div", _hoisted_1, [
163
+ (!isPlaceholder.value)
164
+ ? (openBlock(), createElementBlock("span", _hoisted_2, toDisplayString(__props.prefix), 1 /* TEXT */))
165
+ : createCommentVNode("v-if", true),
166
+ createTextVNode(" " + toDisplayString(displayText.value) + " ", 1 /* TEXT */),
167
+ (!isPlaceholder.value)
168
+ ? (openBlock(), createElementBlock("span", _hoisted_3, toDisplayString(__props.suffix), 1 /* TEXT */))
169
+ : createCommentVNode("v-if", true)
170
+ ]),
171
+ _cache[0] || (_cache[0] = createElementVNode("div", { class: "to-select-arrow" }, null, -1 /* CACHED */)),
172
+ (openBlock(), createBlock(Teleport, { to: "body" }, [
173
+ createElementVNode("div", {
174
+ ref_key: "optionRef",
175
+ ref: optionRef,
176
+ class: normalizeClass(["to-select-option", { 'is-show': unref(showOption) }]),
177
+ style: normalizeStyle(setOptionStyle.value)
178
+ }, [
179
+ createElementVNode("div", {
180
+ class: "to-select-item",
181
+ onClick: clear
182
+ }, toDisplayString(__props.placeholderText), 1 /* TEXT */),
183
+ (openBlock(true), createElementBlock(Fragment, null, renderList(options.value, (item, index) => {
184
+ return (openBlock(), createElementBlock("div", {
185
+ key: index,
186
+ class: normalizeClass(["to-select-item", { 'is-on': __props.modelValue === item.value }]),
187
+ onClick: $event => (select(item))
188
+ }, toDisplayString(item.label), 11 /* TEXT, CLASS, PROPS */, _hoisted_4))
189
+ }), 128 /* KEYED_FRAGMENT */))
190
+ ], 6 /* CLASS, STYLE */)
191
+ ]))
192
+ ], 2 /* CLASS */))
193
+ }
194
+ }
195
+
196
+ });
197
+ var Select = /*#__PURE__*/_export_sfc(_sfc_main, [['__file',"/Users/wangding/WorkSpace/AsiaInfo/projects/前端框架/touch-vue3-ui/packages/components/select/src/select.vue"]]);
198
+
199
+ const withInstall = (main, extra) => {
200
+ main.install = (app) => {
201
+ for (const comp of [main, ...Object.values(extra != null ? extra : {})]) {
202
+ app.component(comp.name, comp);
203
+ }
204
+ };
205
+ if (extra) {
206
+ for (const [key, comp] of Object.entries(extra)) {
207
+ main[key] = comp;
208
+ }
209
+ }
210
+ return main;
211
+ };
212
+
213
+ navigator.userAgent.toLowerCase();
214
+
215
+ const ToSelect = withInstall(Select);
216
+
217
+ export { ToSelect };
218
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../../packages/components/select/src/select.vue","../../../../packages/utils/types.ts","../../../../packages/utils/ratio.ts","../../../../packages/components/select/index.ts"],"sourcesContent":["<template>\n <div\n ref=\"elRef\"\n class=\"to-select\"\n :class=\"[{ 'is-placeholder': isPlaceholder }, ...setClass]\"\n @click=\"open\"\n >\n <div class=\"to-select-content\">\n <span v-if=\"!isPlaceholder\">{{ prefix }}</span>\n {{ displayText }}\n <span v-if=\"!isPlaceholder\">{{ suffix }}</span>\n </div>\n <div class=\"to-select-arrow\"></div>\n <Teleport to=\"body\">\n <div\n ref=\"optionRef\"\n class=\"to-select-option\"\n :class=\"{ 'is-show': showOption }\"\n :style=\"setOptionStyle\"\n >\n <div class=\"to-select-item\" @click=\"clear\">{{ placeholderText }}</div>\n <div\n v-for=\"(item, index) in options\"\n :key=\"index\"\n class=\"to-select-item\"\n :class=\"{ 'is-on': modelValue === item.value }\"\n @click=\"select(item)\"\n >\n {{ item.label }}\n </div>\n </div>\n </Teleport>\n </div>\n</template>\n\n<script setup>\nimport { ref, computed } from 'vue';\ndefineOptions({\n name: 'ToSelect',\n});\nconst props = defineProps({\n modelValue: {\n type: [String, Number],\n default: '',\n },\n data: {\n type: [Boolean, Array],\n default: () => {\n return [];\n },\n },\n prefix: {\n type: String,\n default: '',\n },\n suffix: {\n type: String,\n default: '',\n },\n mode: {\n type: String,\n default: 'default',\n },\n placeholderText: {\n type: String,\n default: '请选择',\n },\n});\nconst elRef = ref(null);\nconst optionRef = ref(null);\nlet showOption = ref(false);\nconst options = computed(() => {\n if (typeof props.data === 'string') {\n // 按逗号拆分字符串,过滤空项\n return props.data\n .split(',')\n .map(item => item.trim())\n .filter(item => item.length > 0)\n .map(item => ({ label: item, value: item }));\n } else if (Array.isArray(props.data)) {\n return props.data;\n }\n // 其它情况返回空数组\n return [];\n});\n\nconst emit = defineEmits(['update:modelValue', 'change']);\n\nconst isPlaceholder = computed(\n () => props.modelValue === undefined || props.modelValue === null || props.modelValue === ''\n);\n\nconst displayText = computed(() => {\n if (isPlaceholder.value) return props.placeholderText;\n if (options.value.length) {\n const found = options.value.find(item => item.value === props.modelValue);\n return found && found.label !== undefined ? found.label : String(props.modelValue);\n }\n return String(props.modelValue);\n});\n\nconst setClass = computed(() => {\n const arr = [];\n if (props.mode) {\n arr.push(`mode-${props.mode}`);\n }\n return arr;\n});\n\nconst setOptionStyle = computed(() => {\n const obj = {};\n return obj;\n});\n\nconst open = () => {\n if (showOption.value) {\n showOption.value = false;\n } else {\n // 获取初始变量\n const baseInfo = elRef.value.getBoundingClientRect();\n // const floatInfo = optionRef.value.getBoundingClientRect()\n const contentHeight = optionRef.value.scrollHeight;\n const spaceHeight = document.body.offsetHeight - (baseInfo.top + baseInfo.height);\n\n // 定位\n optionRef.value.style.left = `${baseInfo.left}px`;\n optionRef.value.style.top = `${baseInfo.top + baseInfo.height - 1}px`;\n\n // 设置大小\n optionRef.value.style.width = `${baseInfo.width}px`;\n\n // 设置高度\n if (spaceHeight < contentHeight) {\n optionRef.value.style.height = `${spaceHeight}px`;\n }\n\n // 打开\n showOption.value = true;\n\n // 点击组件之外关闭\n document.body.addEventListener('mousedown', blur);\n }\n};\n\nconst blur = e => {\n let node = e.target;\n while (node && node !== optionRef.value && node !== elRef.value && node.nodeName !== 'BODY') {\n node = node.parentNode;\n }\n if (node && node.nodeName === 'BODY') {\n close();\n }\n};\n\nconst select = item => {\n emit('update:modelValue', item.value);\n emit('change', item.value);\n close();\n};\n\nconst close = () => {\n showOption.value = false;\n};\n\nconst clear = () => {\n emit('update:modelValue', '');\n emit('change', '');\n close();\n};\n</script>\n","import type { App, Plugin } from 'vue';\n\n/* 生成install函数 */\n\nexport type SFCWithInstall<T> = T & Plugin;\n\nexport type SFCInstallWithContext<T> = SFCWithInstall<T> & {\n _context: App | null;\n};\n\nexport const withInstall = <T, E extends Record<string, any>>(main: T, extra?: E) => {\n (main as SFCWithInstall<T>).install = (app: App): void => {\n for (const comp of [main, ...Object.values(extra ?? {})]) {\n app.component(comp.name, comp);\n }\n };\n\n if (extra) {\n for (const [key, comp] of Object.entries(extra)) {\n (main as any)[key] = comp;\n }\n }\n return main as SFCWithInstall<T> & E;\n};\n\nexport const withInstallFunction = <T>(fn: T, name: string) => {\n (fn as SFCWithInstall<T>).install = (app: App) => {\n (fn as SFCInstallWithContext<T>)._context = app;\n app.config.globalProperties[name] = fn;\n };\n\n return fn as SFCInstallWithContext<T>;\n};\n","interface Options {\n ratio?: {\n base?: {\n pc?: number;\n pad?: number;\n phone?: number;\n };\n };\n}\n\nconst ua = navigator.userAgent.toLowerCase();\n\nexport function setRatio(options: Options = {}) {\n const ua = navigator.userAgent.toLowerCase();\n const base = options?.ratio?.base ?? {};\n\n const baseSize = /iphone|android.*mobile|windows phone|ipod/i.test(ua)\n ? (base.phone ?? 375)\n : /ipad|android(?!.*mobile)|tablet/i.test(ua)\n ? (base.pad ?? 1100)\n : (base.pc ?? 1366);\n\n const updateFontSize = () => {\n const width = window.innerWidth || document.documentElement.clientWidth;\n document.documentElement.style.fontSize = (width / baseSize) * 100 + 'px';\n };\n\n updateFontSize();\n window.addEventListener('resize', updateFontSize);\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function getMedia(options: Options = {}) {\n const isMobile = /iphone|android.*mobile|windows phone|ipod/i.test(ua);\n const isTablet = /ipad|android(?!.*mobile)|tablet/i.test(ua);\n\n return isMobile ? 'phone' : isTablet ? 'pad' : 'pc';\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport function setMedia(options: Options = {}) {\n const html = document.documentElement;\n const classList: string[] = [];\n\n // 判断操作系统\n if (/windows/i.test(ua)) {\n classList.push('os-windows');\n } else if (/macintosh|mac os x/i.test(ua)) {\n classList.push('os-macos');\n } else if (/android/i.test(ua)) {\n classList.push('os-android');\n } else if (/iphone|ipad|ipod/i.test(ua)) {\n classList.push('os-ios');\n }\n\n // 判断设备类型\n const media = getMedia();\n if (media === 'pad') {\n classList.push('media-pad');\n } else if (media === 'phone') {\n classList.push('media-phone');\n } else {\n classList.push('media-pc');\n }\n\n // 添加 class 到 <html>\n html.className += ' ' + classList.join(' ');\n}\n\nexport function getEm() {\n const el = document.createElement('div');\n el.style.width = '1em';\n el.style.height = '1em';\n el.style.position = 'absolute';\n document.body.appendChild(el);\n const size = el.getBoundingClientRect().height;\n document.body.removeChild(el);\n return size;\n}\n","import Select from './src/select.vue';\nimport { SFCWithInstall, withInstall } from '@touchvue/utils';\n\nexport const ToSelect: SFCWithInstall<typeof Select> = withInstall(Select);\n\nexport * from './src/instance';\n"],"names":["_createElementBlock","_normalizeClass","_createElementVNode","_openBlock","_toDisplayString","_createBlock","_Teleport","_unref","_Fragment","_renderList"],"mappings":"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"}