@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,336 @@
1
+ 'use strict';
2
+
3
+ var vue = require('vue');
4
+
5
+ const _hoisted_1 = {
6
+ key: 0,
7
+ class: "to-page-total"
8
+ };
9
+ const _hoisted_2 = {
10
+ key: 1,
11
+ class: "to-page-pager"
12
+ };
13
+ const _hoisted_3 = { class: "to-page-pager-list" };
14
+ const _hoisted_4 = {
15
+ key: 0,
16
+ class: "to-page-pager-ellipsis"
17
+ };
18
+ const _hoisted_5 = ["onClick"];
19
+ const _hoisted_6 = {
20
+ key: 1,
21
+ class: "to-page-pager-ellipsis"
22
+ };
23
+ const _hoisted_7 = {
24
+ key: 2,
25
+ class: "to-page-size"
26
+ };
27
+ const _hoisted_8 = {
28
+ key: 3,
29
+ class: "to-page-jumper"
30
+ };
31
+ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
32
+ __name: "page",
33
+ props: {
34
+ align: { type: String, default: "" },
35
+ pageSize: { type: [Number, String], default: 10 },
36
+ total: { type: [Number, String], default: 0 },
37
+ pageCount: { type: [Number, String], default: void 0 },
38
+ pagerCount: { type: [Number, String], default: 7 },
39
+ currentPage: { type: [Number, String], default: 1 },
40
+ layout: { type: String, default: "all" },
41
+ pageSizes: { type: [Array, String], default: () => [10, 20, 30, 40, 50, 100] },
42
+ prevText: { type: String, default: "" },
43
+ nextText: { type: String, default: "" },
44
+ disabled: { type: Boolean, default: false },
45
+ hideOnSinglePage: { type: Boolean, default: false },
46
+ lite: Boolean
47
+ },
48
+ emits: [
49
+ "update:pageSize",
50
+ "size-change",
51
+ "update:currentPage",
52
+ "current-change",
53
+ "prev-click",
54
+ "next-click"
55
+ ],
56
+ setup(__props, { emit: __emit }) {
57
+ const props = __props;
58
+ const emit = __emit;
59
+ const pageCount_ = vue.ref(0);
60
+ const pageSize_ = vue.ref(Number(props.pageSize));
61
+ const currentPage_ = vue.ref(Number(props.currentPage));
62
+ const pager_ = vue.ref([]);
63
+ const jumperPage = vue.ref("");
64
+ const showPrevMore = vue.ref(false);
65
+ const showNextMore = vue.ref(false);
66
+ const cShowInSingle = vue.computed(() => {
67
+ return !(props.hideOnSinglePage && Number(pageCount_.value) <= 1) || !props.hideOnSinglePage;
68
+ });
69
+ const cPageSizes = vue.computed(() => {
70
+ const sizes = typeof props.pageSizes === "string" ? props.pageSizes.split(",") : props.pageSizes;
71
+ return sizes.map((size) => ({
72
+ label: size,
73
+ value: Number(size)
74
+ }));
75
+ });
76
+ const setClass = vue.computed(() => {
77
+ let arr = [];
78
+ if (props.lite) {
79
+ arr.push(`is-lite`);
80
+ }
81
+ return arr;
82
+ });
83
+ vue.watch(
84
+ () => props.pageSize,
85
+ (val) => {
86
+ const sizes = typeof props.pageSizes === "string" ? props.pageSizes.split(",") : props.pageSizes;
87
+ pageSize_.value = sizes.includes(val) ? Number(val) : Number(sizes[0]);
88
+ },
89
+ { immediate: true }
90
+ );
91
+ vue.watch(
92
+ () => props.currentPage,
93
+ (val) => {
94
+ currentPage_.value = Number(val);
95
+ computePager();
96
+ },
97
+ { immediate: true }
98
+ );
99
+ vue.watch(
100
+ () => props.pageCount,
101
+ (val) => {
102
+ pageCount_.value = Number(val);
103
+ computePager();
104
+ },
105
+ { immediate: true }
106
+ );
107
+ vue.watch(() => props.total, computePager);
108
+ vue.watch(() => props.pagerCount, computePager);
109
+ vue.onMounted(() => computePager());
110
+ function handleJump() {
111
+ if (props.disabled || !jumperPage.value)
112
+ return;
113
+ let jump = Number(jumperPage.value);
114
+ jump = Math.max(1, Math.min(jump, pageCount_.value));
115
+ jumperPage.value = "";
116
+ handleCurrentChange(jump);
117
+ }
118
+ function handleSizeChange(size) {
119
+ if (props.disabled)
120
+ return;
121
+ emit("update:pageSize", size);
122
+ emit("size-change", size);
123
+ computePager();
124
+ }
125
+ function handleCurrentChange(page) {
126
+ if (props.disabled)
127
+ return;
128
+ currentPage_.value = page;
129
+ emit("update:currentPage", page);
130
+ emit("current-change", page);
131
+ computePager();
132
+ }
133
+ function handlePagePrev() {
134
+ if (props.disabled || currentPage_.value <= 1)
135
+ return;
136
+ currentPage_.value--;
137
+ handleCurrentChange(currentPage_.value);
138
+ emit("prev-click", currentPage_.value);
139
+ }
140
+ function handlePageNext() {
141
+ if (props.disabled || currentPage_.value >= pageCount_.value)
142
+ return;
143
+ currentPage_.value++;
144
+ handleCurrentChange(currentPage_.value);
145
+ emit("next-click", currentPage_.value);
146
+ }
147
+ function computePager() {
148
+ const pagerCount = Number(props.pagerCount);
149
+ const halfPagerCount = (pagerCount - 1) / 2;
150
+ const count = props.pageCount ? Number(props.pageCount) : Math.ceil(Number(props.total) / pageSize_.value);
151
+ pageCount_.value = Math.max(1, count);
152
+ const current = currentPage_.value;
153
+ showPrevMore.value = current > pagerCount - halfPagerCount;
154
+ showNextMore.value = current < pageCount_.value - halfPagerCount;
155
+ const pages = [];
156
+ if (showPrevMore.value && !showNextMore.value) {
157
+ const start = pageCount_.value - (pagerCount - 2);
158
+ for (let i = start; i < pageCount_.value; i++)
159
+ pages.push(i);
160
+ } else if (!showPrevMore.value && showNextMore.value) {
161
+ for (let i = 2; i < pagerCount; i++)
162
+ pages.push(i);
163
+ } else if (showPrevMore.value && showNextMore.value) {
164
+ const offset = Math.floor(pagerCount / 2) - 1;
165
+ for (let i = current - offset; i <= current + offset; i++)
166
+ pages.push(i);
167
+ } else {
168
+ for (let i = 2; i < pageCount_.value; i++)
169
+ pages.push(i);
170
+ }
171
+ pager_.value = pages;
172
+ }
173
+ return (_ctx, _cache) => {
174
+ const _component_to_select = vue.resolveComponent("to-select");
175
+ const _component_to_input = vue.resolveComponent("to-input");
176
+ const _directive_dis = vue.resolveDirective("dis");
177
+ const _directive_align = vue.resolveDirective("align");
178
+ return cShowInSingle.value ? vue.withDirectives((vue.openBlock(), vue.createElementBlock(
179
+ "div",
180
+ {
181
+ key: 0,
182
+ class: vue.normalizeClass([setClass.value, "to-page"])
183
+ },
184
+ [
185
+ __props.layout.includes("total") || __props.layout === "all" ? (vue.openBlock(), vue.createElementBlock(
186
+ "div",
187
+ _hoisted_1,
188
+ " \u5171 " + vue.toDisplayString(__props.total) + " \u9879\u6570\u636E ",
189
+ 1
190
+ /* TEXT */
191
+ )) : vue.createCommentVNode("v-if", true),
192
+ vue.createCommentVNode(' <div class="to-page-slot" v-if="slots.default || !lite"> '),
193
+ vue.renderSlot(_ctx.$slots, "default"),
194
+ vue.createCommentVNode(" </div> "),
195
+ __props.layout.includes("pager") || __props.layout === "all" ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2, [
196
+ vue.withDirectives(vue.createElementVNode(
197
+ "div",
198
+ {
199
+ class: "to-page-pager-prev",
200
+ onClick: handlePagePrev
201
+ },
202
+ null,
203
+ 512
204
+ /* NEED_PATCH */
205
+ ), [
206
+ [_directive_dis, Number(currentPage_.value) <= 1]
207
+ ]),
208
+ vue.createElementVNode("ul", _hoisted_3, [
209
+ vue.createElementVNode(
210
+ "li",
211
+ {
212
+ class: vue.normalizeClass(["to-page-pager-item", { "is-on": Number(currentPage_.value) === 1 }]),
213
+ onClick: _cache[0] || (_cache[0] = ($event) => handleCurrentChange(1))
214
+ },
215
+ " 1 ",
216
+ 2
217
+ /* CLASS */
218
+ ),
219
+ showPrevMore.value ? (vue.openBlock(), vue.createElementBlock("li", _hoisted_4, "\u2026")) : vue.createCommentVNode("v-if", true),
220
+ (vue.openBlock(true), vue.createElementBlock(
221
+ vue.Fragment,
222
+ null,
223
+ vue.renderList(pager_.value, (page) => {
224
+ return vue.openBlock(), vue.createElementBlock("li", {
225
+ key: page,
226
+ class: vue.normalizeClass(["to-page-pager-item", { "is-on": Number(currentPage_.value) === page }]),
227
+ onClick: ($event) => handleCurrentChange(page)
228
+ }, vue.toDisplayString(page), 11, _hoisted_5);
229
+ }),
230
+ 128
231
+ /* KEYED_FRAGMENT */
232
+ )),
233
+ showNextMore.value ? (vue.openBlock(), vue.createElementBlock("li", _hoisted_6, "\u2026")) : vue.createCommentVNode("v-if", true),
234
+ pageCount_.value > 1 ? (vue.openBlock(), vue.createElementBlock(
235
+ "li",
236
+ {
237
+ key: 2,
238
+ class: vue.normalizeClass(["to-page-pager-item", { "is-on": Number(currentPage_.value) === Number(pageCount_.value) }]),
239
+ onClick: _cache[1] || (_cache[1] = ($event) => handleCurrentChange(pageCount_.value))
240
+ },
241
+ vue.toDisplayString(pageCount_.value),
242
+ 3
243
+ /* TEXT, CLASS */
244
+ )) : vue.createCommentVNode("v-if", true)
245
+ ]),
246
+ vue.withDirectives(vue.createElementVNode(
247
+ "div",
248
+ {
249
+ class: "to-page-pager-next",
250
+ onClick: handlePageNext
251
+ },
252
+ null,
253
+ 512
254
+ /* NEED_PATCH */
255
+ ), [
256
+ [_directive_dis, Number(currentPage_.value) >= Number(pageCount_.value)]
257
+ ])
258
+ ])) : vue.createCommentVNode("v-if", true),
259
+ __props.layout.includes("size") || __props.layout === "all" ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_7, [
260
+ vue.withDirectives(vue.createVNode(_component_to_select, {
261
+ modelValue: pageSize_.value,
262
+ "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => pageSize_.value = $event),
263
+ suffix: "\u6761/\u9875",
264
+ mode: "none",
265
+ clearable: false,
266
+ data: cPageSizes.value,
267
+ "option-width": 10,
268
+ onChange: handleSizeChange
269
+ }, null, 8, ["modelValue", "data"]), [
270
+ [_directive_dis, __props.disabled]
271
+ ])
272
+ ])) : vue.createCommentVNode("v-if", true),
273
+ __props.layout.includes("jumper") || __props.layout === "all" ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_8, [
274
+ _cache[4] || (_cache[4] = vue.createElementVNode(
275
+ "span",
276
+ null,
277
+ "\u8DF3\u81F3",
278
+ -1
279
+ /* CACHED */
280
+ )),
281
+ vue.withDirectives(vue.createVNode(_component_to_input, {
282
+ modelValue: jumperPage.value,
283
+ "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => jumperPage.value = $event),
284
+ placeholder: "1",
285
+ onKeyup: vue.withKeys(handleJump, ["enter"])
286
+ }, null, 8, ["modelValue"]), [
287
+ [_directive_dis, __props.disabled]
288
+ ]),
289
+ vue.createElementVNode(
290
+ "span",
291
+ null,
292
+ "/" + vue.toDisplayString(pageCount_.value) + "\u9875",
293
+ 1
294
+ /* TEXT */
295
+ )
296
+ ])) : vue.createCommentVNode("v-if", true)
297
+ ],
298
+ 2
299
+ /* CLASS */
300
+ )), [
301
+ [_directive_align, __props.align]
302
+ ]) : vue.createCommentVNode("v-if", true);
303
+ };
304
+ }
305
+ });
306
+
307
+ var _export_sfc = (sfc, props) => {
308
+ const target = sfc.__vccOpts || sfc;
309
+ for (const [key, val] of props) {
310
+ target[key] = val;
311
+ }
312
+ return target;
313
+ };
314
+
315
+ 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"]]);
316
+
317
+ const withInstall = (main, extra) => {
318
+ main.install = (app) => {
319
+ for (const comp of [main, ...Object.values(extra != null ? extra : {})]) {
320
+ app.component(comp.name, comp);
321
+ }
322
+ };
323
+ if (extra) {
324
+ for (const [key, comp] of Object.entries(extra)) {
325
+ main[key] = comp;
326
+ }
327
+ }
328
+ return main;
329
+ };
330
+
331
+ navigator.userAgent.toLowerCase();
332
+
333
+ const ToPage = withInstall(Page);
334
+
335
+ exports.ToPage = ToPage;
336
+ //# 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":["ref","computed","watch","onMounted","_createElementBlock","_normalizeClass","_openBlock","_toDisplayString","_createCommentVNode","_renderSlot","_createElementVNode","_Fragment","_renderList","_createVNode"],"mappings":"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"}
@@ -0,0 +1,220 @@
1
+ 'use strict';
2
+
3
+ var vue = require('vue');
4
+
5
+ var _export_sfc = (sfc, props) => {
6
+ const target = sfc.__vccOpts || sfc;
7
+ for (const [key, val] of props) {
8
+ target[key] = val;
9
+ }
10
+ return target;
11
+ };
12
+
13
+ const _hoisted_1 = { class: "to-select-content" };
14
+ const _hoisted_2 = { key: 0 };
15
+ const _hoisted_3 = { key: 1 };
16
+ const _hoisted_4 = ["onClick"];
17
+
18
+ const _sfc_main = /*@__PURE__*/Object.assign({
19
+ name: 'ToSelect',
20
+ }, {
21
+ __name: 'select',
22
+ props: {
23
+ modelValue: {
24
+ type: [String, Number],
25
+ default: '',
26
+ },
27
+ data: {
28
+ type: [Boolean, Array],
29
+ default: () => {
30
+ return [];
31
+ },
32
+ },
33
+ prefix: {
34
+ type: String,
35
+ default: '',
36
+ },
37
+ suffix: {
38
+ type: String,
39
+ default: '',
40
+ },
41
+ mode: {
42
+ type: String,
43
+ default: 'default',
44
+ },
45
+ placeholderText: {
46
+ type: String,
47
+ default: '请选择',
48
+ },
49
+ },
50
+ emits: ['update:modelValue', 'change'],
51
+ setup(__props, { emit: __emit }) {
52
+
53
+
54
+ const props = __props;
55
+ const elRef = vue.ref(null);
56
+ const optionRef = vue.ref(null);
57
+ let showOption = vue.ref(false);
58
+ const options = vue.computed(() => {
59
+ if (typeof props.data === 'string') {
60
+ // 按逗号拆分字符串,过滤空项
61
+ return props.data
62
+ .split(',')
63
+ .map(item => item.trim())
64
+ .filter(item => item.length > 0)
65
+ .map(item => ({ label: item, value: item }));
66
+ } else if (Array.isArray(props.data)) {
67
+ return props.data;
68
+ }
69
+ // 其它情况返回空数组
70
+ return [];
71
+ });
72
+
73
+ const emit = __emit;
74
+
75
+ const isPlaceholder = vue.computed(
76
+ () => props.modelValue === undefined || props.modelValue === null || props.modelValue === ''
77
+ );
78
+
79
+ const displayText = vue.computed(() => {
80
+ if (isPlaceholder.value) return props.placeholderText;
81
+ if (options.value.length) {
82
+ const found = options.value.find(item => item.value === props.modelValue);
83
+ return found && found.label !== undefined ? found.label : String(props.modelValue);
84
+ }
85
+ return String(props.modelValue);
86
+ });
87
+
88
+ const setClass = vue.computed(() => {
89
+ const arr = [];
90
+ if (props.mode) {
91
+ arr.push(`mode-${props.mode}`);
92
+ }
93
+ return arr;
94
+ });
95
+
96
+ const setOptionStyle = vue.computed(() => {
97
+ const obj = {};
98
+ return obj;
99
+ });
100
+
101
+ const open = () => {
102
+ if (showOption.value) {
103
+ showOption.value = false;
104
+ } else {
105
+ // 获取初始变量
106
+ const baseInfo = elRef.value.getBoundingClientRect();
107
+ // const floatInfo = optionRef.value.getBoundingClientRect()
108
+ const contentHeight = optionRef.value.scrollHeight;
109
+ const spaceHeight = document.body.offsetHeight - (baseInfo.top + baseInfo.height);
110
+
111
+ // 定位
112
+ optionRef.value.style.left = `${baseInfo.left}px`;
113
+ optionRef.value.style.top = `${baseInfo.top + baseInfo.height - 1}px`;
114
+
115
+ // 设置大小
116
+ optionRef.value.style.width = `${baseInfo.width}px`;
117
+
118
+ // 设置高度
119
+ if (spaceHeight < contentHeight) {
120
+ optionRef.value.style.height = `${spaceHeight}px`;
121
+ }
122
+
123
+ // 打开
124
+ showOption.value = true;
125
+
126
+ // 点击组件之外关闭
127
+ document.body.addEventListener('mousedown', blur);
128
+ }
129
+ };
130
+
131
+ const blur = e => {
132
+ let node = e.target;
133
+ while (node && node !== optionRef.value && node !== elRef.value && node.nodeName !== 'BODY') {
134
+ node = node.parentNode;
135
+ }
136
+ if (node && node.nodeName === 'BODY') {
137
+ close();
138
+ }
139
+ };
140
+
141
+ const select = item => {
142
+ emit('update:modelValue', item.value);
143
+ emit('change', item.value);
144
+ close();
145
+ };
146
+
147
+ const close = () => {
148
+ showOption.value = false;
149
+ };
150
+
151
+ const clear = () => {
152
+ emit('update:modelValue', '');
153
+ emit('change', '');
154
+ close();
155
+ };
156
+
157
+ return (_ctx, _cache) => {
158
+ return (vue.openBlock(), vue.createElementBlock("div", {
159
+ ref_key: "elRef",
160
+ ref: elRef,
161
+ class: vue.normalizeClass(["to-select", [{ 'is-placeholder': isPlaceholder.value }, ...setClass.value]]),
162
+ onClick: open
163
+ }, [
164
+ vue.createElementVNode("div", _hoisted_1, [
165
+ (!isPlaceholder.value)
166
+ ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_2, vue.toDisplayString(__props.prefix), 1 /* TEXT */))
167
+ : vue.createCommentVNode("v-if", true),
168
+ vue.createTextVNode(" " + vue.toDisplayString(displayText.value) + " ", 1 /* TEXT */),
169
+ (!isPlaceholder.value)
170
+ ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_3, vue.toDisplayString(__props.suffix), 1 /* TEXT */))
171
+ : vue.createCommentVNode("v-if", true)
172
+ ]),
173
+ _cache[0] || (_cache[0] = vue.createElementVNode("div", { class: "to-select-arrow" }, null, -1 /* CACHED */)),
174
+ (vue.openBlock(), vue.createBlock(vue.Teleport, { to: "body" }, [
175
+ vue.createElementVNode("div", {
176
+ ref_key: "optionRef",
177
+ ref: optionRef,
178
+ class: vue.normalizeClass(["to-select-option", { 'is-show': vue.unref(showOption) }]),
179
+ style: vue.normalizeStyle(setOptionStyle.value)
180
+ }, [
181
+ vue.createElementVNode("div", {
182
+ class: "to-select-item",
183
+ onClick: clear
184
+ }, vue.toDisplayString(__props.placeholderText), 1 /* TEXT */),
185
+ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(options.value, (item, index) => {
186
+ return (vue.openBlock(), vue.createElementBlock("div", {
187
+ key: index,
188
+ class: vue.normalizeClass(["to-select-item", { 'is-on': __props.modelValue === item.value }]),
189
+ onClick: $event => (select(item))
190
+ }, vue.toDisplayString(item.label), 11 /* TEXT, CLASS, PROPS */, _hoisted_4))
191
+ }), 128 /* KEYED_FRAGMENT */))
192
+ ], 6 /* CLASS, STYLE */)
193
+ ]))
194
+ ], 2 /* CLASS */))
195
+ }
196
+ }
197
+
198
+ });
199
+ var Select = /*#__PURE__*/_export_sfc(_sfc_main, [['__file',"/Users/wangding/WorkSpace/AsiaInfo/projects/前端框架/touch-vue3-ui/packages/components/select/src/select.vue"]]);
200
+
201
+ const withInstall = (main, extra) => {
202
+ main.install = (app) => {
203
+ for (const comp of [main, ...Object.values(extra != null ? extra : {})]) {
204
+ app.component(comp.name, comp);
205
+ }
206
+ };
207
+ if (extra) {
208
+ for (const [key, comp] of Object.entries(extra)) {
209
+ main[key] = comp;
210
+ }
211
+ }
212
+ return main;
213
+ };
214
+
215
+ navigator.userAgent.toLowerCase();
216
+
217
+ const ToSelect = withInstall(Select);
218
+
219
+ exports.ToSelect = ToSelect;
220
+ //# 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":["ref","computed","_createElementBlock","_normalizeClass","_createElementVNode","_openBlock","_toDisplayString","_createBlock","_Teleport","_unref","_Fragment","_renderList"],"mappings":"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"}