@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,88 @@
1
+ import { defineComponent, computed, openBlock, createElementBlock, normalizeClass, normalizeStyle } from 'vue';
2
+
3
+ var _sfc_main = /* @__PURE__ */ defineComponent({
4
+ ...{
5
+ name: "ToSpace"
6
+ },
7
+ __name: "space",
8
+ props: {
9
+ mode: { type: String, required: false, default: "default" },
10
+ value: { type: [String, Number], required: false, default: "" },
11
+ inline: { type: Boolean, required: false, default: false }
12
+ },
13
+ setup(__props) {
14
+ const props = __props;
15
+ const setStyle = computed(() => {
16
+ const obj = {};
17
+ if (props.value) {
18
+ if (props.inline) {
19
+ if (!isNaN(Number(props.value))) {
20
+ obj.width = props.value + "em";
21
+ } else {
22
+ obj.width = props.value;
23
+ }
24
+ } else {
25
+ if (!isNaN(Number(props.value))) {
26
+ obj.height = props.value + "em";
27
+ } else {
28
+ obj.height = props.value;
29
+ }
30
+ }
31
+ }
32
+ return obj;
33
+ });
34
+ const setClass = computed(() => {
35
+ let arr = [];
36
+ if (props.mode) {
37
+ arr.push(`mode-${props.mode}`);
38
+ }
39
+ if (props.inline) {
40
+ arr.push(`is-inline`);
41
+ }
42
+ return arr;
43
+ });
44
+ return (_ctx, _cache) => {
45
+ return openBlock(), createElementBlock(
46
+ "div",
47
+ {
48
+ class: normalizeClass(["to-space", setClass.value]),
49
+ style: normalizeStyle(setStyle.value)
50
+ },
51
+ null,
52
+ 6
53
+ /* CLASS, STYLE */
54
+ );
55
+ };
56
+ }
57
+ });
58
+
59
+ var _export_sfc = (sfc, props) => {
60
+ const target = sfc.__vccOpts || sfc;
61
+ for (const [key, val] of props) {
62
+ target[key] = val;
63
+ }
64
+ return target;
65
+ };
66
+
67
+ var Space = /* @__PURE__ */ _export_sfc(_sfc_main, [["__file", "/Users/wangding/WorkSpace/AsiaInfo/projects/\u524D\u7AEF\u6846\u67B6/touch-vue3-ui/packages/components/space/src/space.vue"]]);
68
+
69
+ const withInstall = (main, extra) => {
70
+ main.install = (app) => {
71
+ for (const comp of [main, ...Object.values(extra != null ? extra : {})]) {
72
+ app.component(comp.name, comp);
73
+ }
74
+ };
75
+ if (extra) {
76
+ for (const [key, comp] of Object.entries(extra)) {
77
+ main[key] = comp;
78
+ }
79
+ }
80
+ return main;
81
+ };
82
+
83
+ navigator.userAgent.toLowerCase();
84
+
85
+ const ToSpace = withInstall(Space);
86
+
87
+ export { ToSpace };
88
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../../packages/components/space/src/space.vue","../../../../packages/utils/types.ts","../../../../packages/utils/ratio.ts","../../../../packages/components/space/index.ts"],"sourcesContent":["<template>\n <div class=\"to-space\" :style=\"setStyle\" :class=\"setClass\"></div>\n</template>\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport type { CSSProperties } from 'vue';\n\ndefineOptions({\n name: 'ToSpace',\n});\n\ninterface Props {\n mode?: string;\n value?: string | number;\n inline?: boolean;\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n mode: 'default',\n value: '',\n inline: false,\n});\n\nconst setStyle = computed((): CSSProperties => {\n const obj: CSSProperties = {};\n if (props.value) {\n if (props.inline) {\n if (!isNaN(Number(props.value))) {\n obj.width = props.value + 'em';\n } else {\n obj.width = props.value;\n }\n } else {\n if (!isNaN(Number(props.value))) {\n obj.height = props.value + 'em';\n } else {\n obj.height = props.value;\n }\n }\n }\n return obj;\n});\nconst setClass = computed(() => {\n let arr: string[] = [];\n if (props.mode) {\n arr.push(`mode-${props.mode}`);\n }\n if (props.inline) {\n arr.push(`is-inline`);\n }\n return arr;\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 Space from './src/space.vue';\nimport { SFCWithInstall, withInstall } from '@touchvue/utils';\n\nexport const ToSpace: SFCWithInstall<typeof Space> = withInstall(Space);\n\nexport * from './src/instance';\n"],"names":["_createElementBlock","_normalizeClass"],"mappings":";;;;;;;;;;;;;AAiBA,IAAA,MAAM,KAAQ,GAAA,OAAA,CAAA;AAMd,IAAM,MAAA,QAAA,GAAW,SAAS,MAAqB;AAC7C,MAAA,MAAM,MAAqB,EAAC,CAAA;AAC5B,MAAA,IAAI,MAAM,KAAO,EAAA;AACf,QAAA,IAAI,MAAM,MAAQ,EAAA;AAChB,UAAA,IAAI,CAAC,KAAM,CAAA,MAAA,CAAO,KAAM,CAAA,KAAK,CAAC,CAAG,EAAA;AAC/B,YAAI,GAAA,CAAA,KAAA,GAAQ,MAAM,KAAQ,GAAA,IAAA,CAAA;AAAA,WACrB,MAAA;AACL,YAAA,GAAA,CAAI,QAAQ,KAAM,CAAA,KAAA,CAAA;AAAA,WACpB;AAAA,SACK,MAAA;AACL,UAAA,IAAI,CAAC,KAAM,CAAA,MAAA,CAAO,KAAM,CAAA,KAAK,CAAC,CAAG,EAAA;AAC/B,YAAI,GAAA,CAAA,MAAA,GAAS,MAAM,KAAQ,GAAA,IAAA,CAAA;AAAA,WACtB,MAAA;AACL,YAAA,GAAA,CAAI,SAAS,KAAM,CAAA,KAAA,CAAA;AAAA,WACrB;AAAA,SACF;AAAA,OACF;AACA,MAAO,OAAA,GAAA,CAAA;AAAA,KACR,CAAA,CAAA;AACD,IAAM,MAAA,QAAA,GAAW,SAAS,MAAM;AAC9B,MAAA,IAAI,MAAgB,EAAC,CAAA;AACrB,MAAA,IAAI,MAAM,IAAM,EAAA;AACd,QAAI,GAAA,CAAA,IAAA,CAAK,CAAQ,KAAA,EAAA,KAAA,CAAM,IAAM,CAAA,CAAA,CAAA,CAAA;AAAA,OAC/B;AACA,MAAA,IAAI,MAAM,MAAQ,EAAA;AAChB,QAAA,GAAA,CAAI,KAAK,CAAW,SAAA,CAAA,CAAA,CAAA;AAAA,OACtB;AACA,MAAO,OAAA,GAAA,CAAA;AAAA,KACR,CAAA,CAAA;;wBAlDC,EAAAA,kBAAA;AAAA,QAAgE,KAAA;AAAA,QAAA;AAAA,UAA3D,OAAKC,cAAA,CAAA,CAAC,UAAqC,EAAA,QAAA,CAAQ,KAAA,CAAA,CAAA;AAAA,UAAjC,KAAA,gBAAO,CAAA,QAAA,CAAQ,KAAA,CAAA;AAAA;;;;;;;;;;;;;;;;;;;ACS3B,MAAA,WAAA,GAAc,CAAmC,IAAA,EAAS,KAAc,KAAA;AACnF,EAAC,IAAA,CAA2B,OAAU,GAAA,CAAC,GAAmB,KAAA;AACxD,IAAW,KAAA,MAAA,IAAA,IAAQ,CAAC,IAAA,EAAM,GAAG,MAAA,CAAO,OAAO,KAAS,IAAA,IAAA,GAAA,KAAA,GAAA,EAAE,CAAC,CAAG,EAAA;AACxD,MAAI,GAAA,CAAA,SAAA,CAAU,IAAK,CAAA,IAAA,EAAM,IAAI,CAAA,CAAA;AAAA,KAC/B;AAAA,GACF,CAAA;AAEA,EAAA,IAAI,KAAO,EAAA;AACT,IAAA,KAAA,MAAW,CAAC,GAAK,EAAA,IAAI,KAAK,MAAO,CAAA,OAAA,CAAQ,KAAK,CAAG,EAAA;AAC/C,MAAC,IAAA,CAAa,GAAG,CAAI,GAAA,IAAA,CAAA;AAAA,KACvB;AAAA,GACF;AACA,EAAO,OAAA,IAAA,CAAA;AACT,CAAA;;ACbW,SAAU,CAAA,SAAA,CAAU,WAAY;;ACP9B,MAAA,OAAA,GAAwC,YAAY,KAAK;;;;"}
@@ -0,0 +1,127 @@
1
+ import { defineComponent, openBlock, createElementBlock, Fragment, renderList, normalizeClass, createElementVNode, toDisplayString } from 'vue';
2
+
3
+ const _hoisted_1 = { class: "to-step" };
4
+ const _hoisted_2 = { class: "to-step-index" };
5
+ const _hoisted_3 = {
6
+ key: 0,
7
+ class: "to-step-icon"
8
+ };
9
+ const _hoisted_4 = {
10
+ key: 1,
11
+ class: "to-step-number"
12
+ };
13
+ const _hoisted_5 = { class: "to-step-text" };
14
+ const _hoisted_6 = { class: "to-step-title" };
15
+ const _hoisted_7 = { class: "to-step-label" };
16
+ const _hoisted_8 = { class: "to-step-content" };
17
+ var _sfc_main = /* @__PURE__ */ defineComponent({
18
+ ...{
19
+ name: "ToStep"
20
+ },
21
+ __name: "step",
22
+ props: {
23
+ data: {
24
+ type: Array,
25
+ default: () => []
26
+ },
27
+ modelValue: { type: [Number, String], default: 0 }
28
+ },
29
+ emits: ["update:modelValue"],
30
+ setup(__props, { emit: __emit }) {
31
+ const props = __props;
32
+ const emit = __emit;
33
+ const updateValue = (idx) => {
34
+ console.log(props);
35
+ emit("update:modelValue", idx);
36
+ };
37
+ console.log(updateValue);
38
+ return (_ctx, _cache) => {
39
+ return openBlock(), createElementBlock("div", _hoisted_1, [
40
+ (openBlock(true), createElementBlock(
41
+ Fragment,
42
+ null,
43
+ renderList(__props.data, (item, idx) => {
44
+ return openBlock(), createElementBlock(
45
+ "div",
46
+ {
47
+ key: idx,
48
+ class: normalizeClass(["to-step-item", { "is-on": idx === Number(__props.modelValue), "is-completed": Number(__props.modelValue) > idx }])
49
+ },
50
+ [
51
+ createElementVNode("div", _hoisted_2, [
52
+ Number(__props.modelValue) > idx ? (openBlock(), createElementBlock("div", _hoisted_3)) : (openBlock(), createElementBlock(
53
+ "div",
54
+ _hoisted_4,
55
+ toDisplayString(idx + 1),
56
+ 1
57
+ /* TEXT */
58
+ ))
59
+ ]),
60
+ createElementVNode("div", _hoisted_5, [
61
+ createElementVNode("div", _hoisted_6, [
62
+ createElementVNode(
63
+ "div",
64
+ _hoisted_7,
65
+ toDisplayString(item.label),
66
+ 1
67
+ /* TEXT */
68
+ ),
69
+ _cache[0] || (_cache[0] = createElementVNode(
70
+ "div",
71
+ { class: "to-step-line" },
72
+ null,
73
+ -1
74
+ /* CACHED */
75
+ ))
76
+ ]),
77
+ createElementVNode(
78
+ "div",
79
+ _hoisted_8,
80
+ toDisplayString(item.content),
81
+ 1
82
+ /* TEXT */
83
+ )
84
+ ])
85
+ ],
86
+ 2
87
+ /* CLASS */
88
+ );
89
+ }),
90
+ 128
91
+ /* KEYED_FRAGMENT */
92
+ ))
93
+ ]);
94
+ };
95
+ }
96
+ });
97
+
98
+ var _export_sfc = (sfc, props) => {
99
+ const target = sfc.__vccOpts || sfc;
100
+ for (const [key, val] of props) {
101
+ target[key] = val;
102
+ }
103
+ return target;
104
+ };
105
+
106
+ var Step = /* @__PURE__ */ _export_sfc(_sfc_main, [["__file", "/Users/wangding/WorkSpace/AsiaInfo/projects/\u524D\u7AEF\u6846\u67B6/touch-vue3-ui/packages/components/step/src/step.vue"]]);
107
+
108
+ const withInstall = (main, extra) => {
109
+ main.install = (app) => {
110
+ for (const comp of [main, ...Object.values(extra != null ? extra : {})]) {
111
+ app.component(comp.name, comp);
112
+ }
113
+ };
114
+ if (extra) {
115
+ for (const [key, comp] of Object.entries(extra)) {
116
+ main[key] = comp;
117
+ }
118
+ }
119
+ return main;
120
+ };
121
+
122
+ navigator.userAgent.toLowerCase();
123
+
124
+ const ToStep = withInstall(Step);
125
+
126
+ export { ToStep };
127
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../../packages/components/step/src/step.vue","../../../../packages/utils/types.ts","../../../../packages/utils/ratio.ts","../../../../packages/components/step/index.ts"],"sourcesContent":["<template>\n <div class=\"to-step\">\n <div\n v-for=\"(item, idx) in data\"\n :key=\"idx\"\n class=\"to-step-item\"\n :class=\"{ 'is-on': idx === Number(modelValue), 'is-completed': Number(modelValue) > idx }\"\n >\n <div class=\"to-step-index\">\n <div v-if=\"Number(modelValue) > idx\" class=\"to-step-icon\"></div>\n <div v-else class=\"to-step-number\">{{ idx + 1 }}</div>\n </div>\n <div class=\"to-step-text\">\n <div class=\"to-step-title\">\n <div class=\"to-step-label\">{{ item.label }}</div>\n <div class=\"to-step-line\"></div>\n </div>\n <div class=\"to-step-content\">{{ item.content }}</div>\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\ndefineOptions({\n name: 'ToStep',\n});\nconst props = defineProps({\n data: {\n type: Array as () => { label: string; content: string }[],\n default: () => [],\n },\n modelValue: { type: [Number, String], default: 0 },\n});\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: number): void;\n}>();\n\nconst updateValue = (idx: number) => {\n console.log(props);\n emit('update:modelValue', idx);\n};\nconsole.log(updateValue);\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 Step from './src/step.vue';\nimport { SFCWithInstall, withInstall } from '@touchvue/utils';\n\nexport const ToStep: SFCWithInstall<typeof Step> = withInstall(Step);\n\nexport * from './src/instance';\n"],"names":["_openBlock","_createElementBlock","_Fragment","_renderList","_normalizeClass","_createElementVNode","_toDisplayString"],"mappings":"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"}
@@ -0,0 +1,120 @@
1
+ import { ref, watch, computed, resolveDirective, withDirectives, openBlock, createElementBlock, normalizeClass, createElementVNode, toDisplayString } 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-switch-on" };
12
+ const _hoisted_2 = { class: "to-switch-off" };
13
+
14
+
15
+ const _sfc_main = /*@__PURE__*/Object.assign({
16
+ name: 'ToSwitch',
17
+ }, {
18
+ __name: 'switch',
19
+ props: {
20
+ readonly: Boolean,
21
+ modelValue: {
22
+ type: [Boolean, String, Number],
23
+ default: false
24
+ },
25
+ onValue: {
26
+ type: [Boolean, String, Number],
27
+ default: true
28
+ },
29
+ offValue: {
30
+ type: [Boolean, String, Number],
31
+ default: false
32
+ },
33
+ onText: {
34
+ type: String,
35
+ default: ''
36
+ },
37
+ offText: {
38
+ type: String,
39
+ default: ''
40
+ }
41
+ },
42
+ emits: ['update:modelValue', 'change', 'beforeChange'],
43
+ setup(__props, { emit: __emit }) {
44
+
45
+
46
+ const props = __props;
47
+
48
+ const emit = __emit;
49
+
50
+ const ivalue = ref(props.modelValue);
51
+ const disabled = ref(props.readonly);
52
+
53
+ watch(() => props.modelValue, val => {
54
+ ivalue.value = val;
55
+ }, { immediate: true });
56
+
57
+ watch(() => props.readonly, val => {
58
+ disabled.value = val;
59
+ });
60
+
61
+ const setClass = computed(() => {
62
+ const arr = [];
63
+ if (ivalue.value === props.onValue) {
64
+ arr.push(`is-on`);
65
+ }
66
+ return arr;
67
+ });
68
+
69
+ function toggle() {
70
+ if (disabled.value) return;
71
+
72
+ emit('beforeChange', ivalue.value);
73
+ ivalue.value = (ivalue.value === props.onValue) ? props.offValue : props.onValue;
74
+ emit('update:modelValue', ivalue.value);
75
+ emit('change', ivalue.value);
76
+ }
77
+
78
+ return (_ctx, _cache) => {
79
+ const _directive_dis = resolveDirective("dis");
80
+
81
+ return withDirectives((openBlock(), createElementBlock("div", {
82
+ class: normalizeClass(["to-switch", setClass.value]),
83
+ onClick: toggle
84
+ }, [
85
+ createElementVNode("div", _hoisted_1, toDisplayString(__props.onText), 1 /* TEXT */),
86
+ createElementVNode("div", _hoisted_2, toDisplayString(__props.offText), 1 /* TEXT */)
87
+ ], 2 /* CLASS */)), [
88
+ [
89
+ _directive_dis,
90
+ disabled.value,
91
+ void 0,
92
+ { opacity: true }
93
+ ]
94
+ ])
95
+ }
96
+ }
97
+
98
+ });
99
+ var Switch = /*#__PURE__*/_export_sfc(_sfc_main, [['__file',"/Users/wangding/WorkSpace/AsiaInfo/projects/前端框架/touch-vue3-ui/packages/components/switch/src/switch.vue"]]);
100
+
101
+ const withInstall = (main, extra) => {
102
+ main.install = (app) => {
103
+ for (const comp of [main, ...Object.values(extra != null ? extra : {})]) {
104
+ app.component(comp.name, comp);
105
+ }
106
+ };
107
+ if (extra) {
108
+ for (const [key, comp] of Object.entries(extra)) {
109
+ main[key] = comp;
110
+ }
111
+ }
112
+ return main;
113
+ };
114
+
115
+ navigator.userAgent.toLowerCase();
116
+
117
+ const ToSwitch = withInstall(Switch);
118
+
119
+ export { ToSwitch };
120
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../../packages/components/switch/src/switch.vue","../../../../packages/utils/types.ts","../../../../packages/utils/ratio.ts","../../../../packages/components/switch/index.ts"],"sourcesContent":["<template>\n\t<div v-dis.opacity=\"disabled\" class=\"to-switch\" :class=\"setClass\" @click=\"toggle\">\n\t\t<div class=\"to-switch-on\">{{ onText }}</div>\n\t\t<div class=\"to-switch-off\">{{ offText }}</div>\n\t</div>\n</template>\n\n<script setup>\ndefineOptions({\n name: 'ToSwitch',\n});\nimport { computed, ref, watch, defineEmits, defineProps } from 'vue';\n\nconst props = defineProps({\n\treadonly: Boolean,\n\tmodelValue: {\n\t\ttype: [Boolean, String, Number],\n\t\tdefault: false\n\t},\n\tonValue: {\n\t\ttype: [Boolean, String, Number],\n\t\tdefault: true\n\t},\n\toffValue: {\n\t\ttype: [Boolean, String, Number],\n\t\tdefault: false\n\t},\n\tonText: {\n\t\ttype: String,\n\t\tdefault: ''\n\t},\n\toffText: {\n\t\ttype: String,\n\t\tdefault: ''\n\t}\n});\n\nconst emit = defineEmits(['update:modelValue', 'change', 'beforeChange']);\n\nconst ivalue = ref(props.modelValue);\nconst disabled = ref(props.readonly);\n\nwatch(() => props.modelValue, val => {\n\tivalue.value = val;\n}, { immediate: true });\n\nwatch(() => props.readonly, val => {\n\tdisabled.value = val;\n});\n\nconst setClass = computed(() => {\n\tconst arr = [];\n\tif (ivalue.value === props.onValue) {\n\t\tarr.push(`is-on`);\n\t}\n\treturn arr;\n});\n\nfunction toggle() {\n\tif (disabled.value) return;\n\n\temit('beforeChange', ivalue.value);\n\tivalue.value = (ivalue.value === props.onValue) ? props.offValue : props.onValue;\n\temit('update:modelValue', ivalue.value);\n\temit('change', ivalue.value);\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 Switch from './src/switch.vue';\nimport { SFCWithInstall, withInstall } from '@touchvue/utils';\n\nexport const ToSwitch: SFCWithInstall<typeof Switch> = withInstall(Switch);\n\nexport * from './src/instance';"],"names":["_createElementBlock","_normalizeClass","_createElementVNode","_toDisplayString"],"mappings":"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"}
@@ -0,0 +1,227 @@
1
+ import { defineComponent, ref, computed, openBlock, createElementBlock, normalizeClass, normalizeStyle, createElementVNode, Fragment, renderList, renderSlot, mergeProps, createTextVNode, toDisplayString, withModifiers, createCommentVNode } from 'vue';
2
+
3
+ const _hoisted_1 = { class: "to-tab-tab" };
4
+ const _hoisted_2 = { class: "to-tab-list" };
5
+ const _hoisted_3 = ["onClick"];
6
+ const _hoisted_4 = { class: "to-tab-item-main" };
7
+ const _hoisted_5 = { class: "to-tab-item-content" };
8
+ const _hoisted_6 = { class: "to-tab-item-label" };
9
+ const _hoisted_7 = ["onClick"];
10
+ const _hoisted_8 = { class: "to-tab-fn" };
11
+ const _hoisted_9 = { class: "to-tab-page" };
12
+ var _sfc_main$1 = /* @__PURE__ */ defineComponent({
13
+ ...{
14
+ name: "ToTab"
15
+ },
16
+ __name: "tab",
17
+ props: {
18
+ modelValue: { type: [String, Number], required: false, default: "" },
19
+ position: { type: String, required: false, default: "" },
20
+ mode: { type: String, required: false, default: "default" },
21
+ data: { type: Array, required: false, default: () => [] },
22
+ deletable: { type: Boolean, required: false, default: false },
23
+ tabOver: { type: String, required: false, default: "control" }
24
+ },
25
+ emits: ["update:modelValue", "change"],
26
+ setup(__props, { emit: __emit }) {
27
+ const emit = __emit;
28
+ const props = __props;
29
+ const left = ref(0);
30
+ const setClass = computed(() => {
31
+ let arr = [];
32
+ if (props.mode) {
33
+ arr.push(`mode-${props.mode}`);
34
+ }
35
+ if (props.position) {
36
+ arr.push(`position-${props.position}`);
37
+ }
38
+ return arr;
39
+ });
40
+ const setStyle = computed(() => {
41
+ let obj = {};
42
+ return obj;
43
+ });
44
+ const setUlStyle = computed(() => {
45
+ let obj = {};
46
+ obj.transform = `translateX(${left}px)`;
47
+ return obj;
48
+ });
49
+ function changeTab(item, index) {
50
+ emit("update:modelValue", item.value, index);
51
+ emit("change", item.value, index);
52
+ }
53
+ function removeTab(item, index) {
54
+ }
55
+ return (_ctx, _cache) => {
56
+ return openBlock(), createElementBlock(
57
+ "div",
58
+ {
59
+ class: normalizeClass(["to-tab", setClass.value]),
60
+ style: normalizeStyle(setStyle.value)
61
+ },
62
+ [
63
+ createElementVNode("div", _hoisted_1, [
64
+ createElementVNode("div", _hoisted_2, [
65
+ createElementVNode(
66
+ "ul",
67
+ {
68
+ ref: "ul",
69
+ class: "to-tab-wrapper",
70
+ style: normalizeStyle(setUlStyle.value)
71
+ },
72
+ [
73
+ (openBlock(true), createElementBlock(
74
+ Fragment,
75
+ null,
76
+ renderList(_ctx.data, (item, index) => {
77
+ return openBlock(), createElementBlock("li", {
78
+ key: index,
79
+ class: normalizeClass(["to-tab-item", { "is-on": item.value === _ctx.modelValue }]),
80
+ onClick: ($event) => changeTab(item, index)
81
+ }, [
82
+ renderSlot(_ctx.$slots, "item", mergeProps({ ref_for: true }, item), () => [
83
+ createElementVNode("div", _hoisted_4, [
84
+ _cache[1] || (_cache[1] = createElementVNode(
85
+ "div",
86
+ { class: "to-tab-item-left" },
87
+ null,
88
+ -1
89
+ /* CACHED */
90
+ )),
91
+ createElementVNode("div", _hoisted_5, [
92
+ createElementVNode("div", _hoisted_6, [
93
+ renderSlot(_ctx.$slots, "label", mergeProps({ ref_for: true }, item), () => [
94
+ createTextVNode(
95
+ toDisplayString(item.label),
96
+ 1
97
+ /* TEXT */
98
+ )
99
+ ])
100
+ ]),
101
+ _ctx.deletable ? (openBlock(), createElementBlock("span", {
102
+ key: 0,
103
+ class: "to-tab-item-delete",
104
+ onClick: withModifiers(($event) => removeTab(), ["stop"])
105
+ }, [..._cache[0] || (_cache[0] = [
106
+ createElementVNode(
107
+ "span",
108
+ null,
109
+ null,
110
+ -1
111
+ /* CACHED */
112
+ )
113
+ ])], 8, _hoisted_7)) : createCommentVNode("v-if", true)
114
+ ]),
115
+ _cache[2] || (_cache[2] = createElementVNode(
116
+ "div",
117
+ { class: "to-tab-item-right" },
118
+ null,
119
+ -1
120
+ /* CACHED */
121
+ ))
122
+ ]),
123
+ _cache[3] || (_cache[3] = createElementVNode(
124
+ "div",
125
+ { class: "to-tab-item-under" },
126
+ null,
127
+ -1
128
+ /* CACHED */
129
+ ))
130
+ ])
131
+ ], 10, _hoisted_3);
132
+ }),
133
+ 128
134
+ /* KEYED_FRAGMENT */
135
+ ))
136
+ ],
137
+ 4
138
+ /* STYLE */
139
+ )
140
+ ]),
141
+ _cache[4] || (_cache[4] = createElementVNode(
142
+ "div",
143
+ { class: "to-tab-line" },
144
+ null,
145
+ -1
146
+ /* CACHED */
147
+ )),
148
+ createElementVNode("div", _hoisted_8, [
149
+ renderSlot(_ctx.$slots, "fn"),
150
+ createCommentVNode(' <div class="to-tab-fn-item fn-left"></div>\n <div class="to-tab-fn-item fn-right"></div>\n <div class="to-tab-fn-item fn-refresh"></div> ')
151
+ ])
152
+ ]),
153
+ createElementVNode("div", _hoisted_9, [
154
+ renderSlot(_ctx.$slots, "default")
155
+ ])
156
+ ],
157
+ 6
158
+ /* CLASS, STYLE */
159
+ );
160
+ };
161
+ }
162
+ });
163
+
164
+ var _export_sfc = (sfc, props) => {
165
+ const target = sfc.__vccOpts || sfc;
166
+ for (const [key, val] of props) {
167
+ target[key] = val;
168
+ }
169
+ return target;
170
+ };
171
+
172
+ var Tab = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__file", "/Users/wangding/WorkSpace/AsiaInfo/projects/\u524D\u7AEF\u6846\u67B6/touch-vue3-ui/packages/components/tab/src/tab.vue"]]);
173
+
174
+ var _sfc_main = /* @__PURE__ */ defineComponent({
175
+ ...{
176
+ name: "ToTabItem"
177
+ },
178
+ __name: "tab-item",
179
+ props: {
180
+ mode: { type: String, required: true, default: "default" }
181
+ },
182
+ setup(__props) {
183
+ const props = __props;
184
+ const setClass = computed(() => {
185
+ let arr = [];
186
+ if (props.mode) {
187
+ arr.push(`mode-${props.mode}`);
188
+ }
189
+ return arr;
190
+ });
191
+ return (_ctx, _cache) => {
192
+ return openBlock(), createElementBlock(
193
+ "div",
194
+ {
195
+ class: normalizeClass(["to-tab-item", setClass.value])
196
+ },
197
+ null,
198
+ 2
199
+ /* CLASS */
200
+ );
201
+ };
202
+ }
203
+ });
204
+
205
+ var TabItem = /* @__PURE__ */ _export_sfc(_sfc_main, [["__file", "/Users/wangding/WorkSpace/AsiaInfo/projects/\u524D\u7AEF\u6846\u67B6/touch-vue3-ui/packages/components/tab/src/tab-item.vue"]]);
206
+
207
+ const withInstall = (main, extra) => {
208
+ main.install = (app) => {
209
+ for (const comp of [main, ...Object.values(extra != null ? extra : {})]) {
210
+ app.component(comp.name, comp);
211
+ }
212
+ };
213
+ if (extra) {
214
+ for (const [key, comp] of Object.entries(extra)) {
215
+ main[key] = comp;
216
+ }
217
+ }
218
+ return main;
219
+ };
220
+
221
+ navigator.userAgent.toLowerCase();
222
+
223
+ const ToTab = withInstall(Tab);
224
+ const ToTabItem = withInstall(TabItem);
225
+
226
+ export { ToTab, ToTabItem };
227
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../../packages/components/tab/src/tab.vue","../../../../packages/components/tab/src/tab-item.vue","../../../../packages/utils/types.ts","../../../../packages/utils/ratio.ts","../../../../packages/components/tab/index.ts"],"sourcesContent":["<template>\n\t<div class=\"to-tab\" :class=\"setClass\" :style=\"setStyle\">\n\t\t<div class=\"to-tab-tab\">\n\t\t\t<div class=\"to-tab-list\">\n\t\t\t\t<ul ref=\"ul\" class=\"to-tab-wrapper\" :style=\"setUlStyle\">\n\t\t\t\t\t<template v-for=\"(item, index) in data\" :key=\"index\">\n\t\t\t\t\t\t<li class=\"to-tab-item\" :class=\"{ 'is-on': item.value === modelValue }\" @click=\"changeTab(item, index)\">\n\t\t\t\t\t\t\t<slot name=\"item\" v-bind=\"item\">\n\t\t\t\t\t\t\t\t<div class=\"to-tab-item-main\">\n\t\t\t\t\t\t\t\t\t<div class=\"to-tab-item-left\"></div>\n\t\t\t\t\t\t\t\t\t<div class=\"to-tab-item-content\">\n\t\t\t\t\t\t\t\t\t\t<div class=\"to-tab-item-label\">\n\t\t\t\t\t\t\t\t\t\t\t<slot name=\"label\" v-bind=\"item\">\n\t\t\t\t\t\t\t\t\t\t\t\t{{ item.label }}\n\t\t\t\t\t\t\t\t\t\t\t</slot>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t<span class=\"to-tab-item-delete\" v-if=\"deletable\" @click.stop=\"removeTab(item, index)\"><span></span></span>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t<div class=\"to-tab-item-right\"></div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"to-tab-item-under\"></div>\n\t\t\t\t\t\t\t</slot>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t</template>\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t\t<div class=\"to-tab-line\"></div>\n\t\t\t<div class=\"to-tab-fn\">\n\t\t\t\t<slot name=\"fn\"></slot>\n\t\t\t\t<!-- <div class=\"to-tab-fn-item fn-left\"></div>\n\t\t\t\t<div class=\"to-tab-fn-item fn-right\"></div>\n\t\t\t\t<div class=\"to-tab-fn-item fn-refresh\"></div> -->\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"to-tab-page\">\n\t\t\t<slot></slot>\n\t\t</div>\n\t</div>\n</template>\n<script setup lang=\"ts\">\ndefineOptions({\n name: 'ToTab',\n});\nimport { ref, reactive, computed, onMounted, CSSProperties } from 'vue'\n\nconst emit = defineEmits(['update:modelValue', 'change'])\n\ninterface TabItem {\n\tlabel: string,\n\tvalue: string | number,\n}\ninterface Props {\n\tmodelValue?: string | number,\n\tposition?: string,\n\tmode?: string,\n\tdata?: TabItem[],\n\tdeletable?: boolean,\n\ttabOver?: 'float' | 'avg' | 'control' | 'scroll'\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n\tmodelValue: '',\n\tposition: '',\n\tmode: 'default',\n\ttabOver: 'control',\n\tdeletable: false,\n\tdata: () => [] as TabItem[]\n})\n\nconst left = ref(0)\n\nconst setClass = computed(() => {\n\tlet arr: string[] = []\n\tif (props.mode) {\n\t\tarr.push(`mode-${props.mode}`)\n\t}\n\tif (props.position) {\n\t\tarr.push(`position-${props.position}`)\n\t}\n\treturn arr\n})\n\nconst setStyle = computed(() => {\n\tlet obj: CSSProperties = {}\n\treturn obj\n})\n\nconst setUlStyle = computed(() => {\n\tlet obj: CSSProperties = {}\n\tobj.transform = `translateX(${left}px)`\n\treturn obj\n})\n\nfunction changeTab(item, index) {\n\temit('update:modelValue', item.value, index)\n\temit('change', item.value, index)\n}\n\nfunction removeTab(item, index) {\n\t// \n}\n</script>","<template>\n\t<div class=\"to-tab-item\" :class=\"setClass\"></div>\n</template>\n<script setup lang=\"ts\">\ndefineOptions({\n name: 'ToTabItem',\n});\nimport { ref, reactive, computed, onMounted, defineProps } from 'vue'\n\ninterface Props {\n\tmode: string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n\tmode: 'default'\n})\n\n\nconst setClass = computed(() => {\n\tlet arr: string[] = []\n\tif (props.mode) {\n\t\tarr.push(`mode-${props.mode}`)\n\t}\n\treturn arr\n})\n</script>","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 Tab from './src/tab.vue';\nimport TabItem from './src/tab-item.vue';\nimport { SFCWithInstall, withInstall } from '@touchvue/utils';\n\nexport const ToTab: SFCWithInstall<typeof Tab> = withInstall(Tab);\nexport const ToTabItem: SFCWithInstall<typeof TabItem> = withInstall(TabItem);\n\nexport * from './src/instance';"],"names":["_createElementBlock","_normalizeClass","_createElementVNode","_openBlock","_Fragment","data","modelValue","_renderSlot","_mergeProps","_createTextVNode","_toDisplayString","deletable","_withModifiers","_createCommentVNode"],"mappings":"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"}