@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
package/README.md ADDED
@@ -0,0 +1,70 @@
1
+ # TouchVue UI 组件库
2
+
3
+ ## 介绍
4
+
5
+ TouchVue UI 是一个基于 Vue 3 的组件库,提供了一系列高质量的组件,帮助开发者快速构建应用。
6
+
7
+ ## 安装
8
+
9
+ ```bash
10
+ npm install @touchvue/ui
11
+ # 或者
12
+ yarn add @touchvue/ui
13
+ # 或者
14
+ pnpm add @touchvue/ui
15
+ ```
16
+
17
+ ## 使用
18
+
19
+ ### 完整引入
20
+
21
+ ```js
22
+ import { createApp } from 'vue';
23
+ import TouchVueUI from '@touchvue/ui';
24
+ import '@touchvue/ui/theme/index.css';
25
+ import App from './App.vue';
26
+
27
+ const app = createApp(App);
28
+ app.use(TouchVueUI);
29
+ app.mount('#app');
30
+ ```
31
+
32
+ ### 按需引入
33
+
34
+ #### 手动引入
35
+
36
+ ```js
37
+ import { ToButton, ToIcon } from '@touchvue/ui';
38
+ import '@touchvue/ui/theme/button/index.css';
39
+ import '@touchvue/ui/theme/icon/index.css';
40
+ ```
41
+
42
+ #### 自动引入(推荐)
43
+
44
+ 我们提供了与 [unplugin-vue-components](https://github.com/antfu/unplugin-vue-components) 和 [unplugin-auto-import](https://github.com/antfu/unplugin-auto-import) 的集成。
45
+
46
+ ##### Vite 配置
47
+
48
+ ```js
49
+ // vite.config.js
50
+ import { defineConfig } from 'vite';
51
+ import vue from '@vitejs/plugin-vue';
52
+ import AutoImport from 'unplugin-auto-import/vite';
53
+ import Components from 'unplugin-vue-components/vite';
54
+ import { TouchVueResolver } from '@touchvue/ui';
55
+
56
+ export default defineConfig({
57
+ plugins: [
58
+ vue(),
59
+ Components({
60
+ resolvers: [TouchVueResolver()],
61
+ }),
62
+ ],
63
+ });
64
+ ```
65
+
66
+ ## 组件列表
67
+
68
+ - ToButton - 按钮组件
69
+ - ToIcon - 图标组件
70
+ - 更多组件正在开发中...
@@ -0,0 +1,66 @@
1
+ import { defineComponent, openBlock, createElementBlock, renderSlot, createCommentVNode, createElementVNode } from 'vue';
2
+
3
+ const _hoisted_1 = { class: "to-article" };
4
+ const _hoisted_2 = {
5
+ key: 0,
6
+ class: "to-article-header"
7
+ };
8
+ const _hoisted_3 = { class: "to-article-content" };
9
+ const _hoisted_4 = {
10
+ key: 1,
11
+ class: "to-article-footer"
12
+ };
13
+ var _sfc_main = /* @__PURE__ */ defineComponent({
14
+ ...{
15
+ name: "ToArticle"
16
+ },
17
+ __name: "article",
18
+ setup(__props) {
19
+ return (_ctx, _cache) => {
20
+ return openBlock(), createElementBlock("article", _hoisted_1, [
21
+ _ctx.$slots.header ? (openBlock(), createElementBlock("header", _hoisted_2, [
22
+ renderSlot(_ctx.$slots, "header")
23
+ ])) : createCommentVNode("v-if", true),
24
+ createElementVNode("section", _hoisted_3, [
25
+ renderSlot(_ctx.$slots, "default")
26
+ ]),
27
+ _ctx.$slots.footer ? (openBlock(), createElementBlock("footer", _hoisted_4, [
28
+ renderSlot(_ctx.$slots, "footer")
29
+ ])) : createCommentVNode("v-if", true)
30
+ ]);
31
+ };
32
+ }
33
+ });
34
+
35
+ var _export_sfc = (sfc, props) => {
36
+ const target = sfc.__vccOpts || sfc;
37
+ for (const [key, val] of props) {
38
+ target[key] = val;
39
+ }
40
+ return target;
41
+ };
42
+
43
+ var Article = /* @__PURE__ */ _export_sfc(_sfc_main, [["__file", "/Users/wangding/WorkSpace/AsiaInfo/projects/\u524D\u7AEF\u6846\u67B6/touch-vue3-ui/packages/components/article/src/article.vue"]]);
44
+
45
+ const withInstall = (main, extra) => {
46
+ main.install = (app) => {
47
+ for (const comp of [main, ...Object.values(extra != null ? extra : {})]) {
48
+ app.component(comp.name, comp);
49
+ }
50
+ };
51
+ if (extra) {
52
+ for (const [key, comp] of Object.entries(extra)) {
53
+ main[key] = comp;
54
+ }
55
+ }
56
+ return main;
57
+ };
58
+
59
+ navigator.userAgent.toLowerCase();
60
+
61
+ const articleProps = {};
62
+
63
+ const ToArticle = withInstall(Article);
64
+
65
+ export { Article, ToArticle, articleProps };
66
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../../packages/components/article/src/article.vue","../../../../packages/utils/types.ts","../../../../packages/utils/ratio.ts","../../../../packages/components/article/src/article.ts","../../../../packages/components/article/index.ts"],"sourcesContent":["<template>\n <article class=\"to-article\">\n <header v-if=\"$slots.header\" class=\"to-article-header\">\n <slot name=\"header\" />\n </header>\n <section class=\"to-article-content\">\n <slot />\n </section>\n <footer v-if=\"$slots.footer\" class=\"to-article-footer\">\n <slot name=\"footer\" />\n </footer>\n </article>\n</template>\n\n<script lang=\"ts\" setup>\n// import { articleProps } from './article';\n\ndefineOptions({\n name: 'ToArticle',\n});\n\n// const props = defineProps(articleProps);\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 { ExtractPropTypes } from 'vue';\n\nexport const articleProps = {};\n\nexport type ArticleProps = ExtractPropTypes<typeof articleProps>;\n","import Article from './src/article.vue';\nimport { SFCWithInstall, withInstall } from '@touchvue/utils';\n\nexport const ToArticle: SFCWithInstall<typeof Article> = withInstall(Article);\n\nexport { Article };\nexport * from './src/article';\nexport * from './src/instance';\n"],"names":["_openBlock","_createElementBlock","$slots","_renderSlot","_createElementVNode"],"mappings":";;;;;;;;;;;;;;;;;;;AACE,MAAA,OAAAA,SAAA,EAAA,EAAAC,kBAUU,CAAA,SAAA,EAVV,UAUU,EAAA;AAAA,QATMC,KAAAA,MAAO,CAAA,MAAA,IAArBF,WAAA,EAAAC,kBAAA,CAES,UAFT,UAES,EAAA;AAAA,UADPE,UAAA,CAAsB,IAAA,CAAA,MAAA,EAAA,QAAA,CAAA;AAAA;QAExBC,kBAAA,CAEU,WAFV,UAEU,EAAA;AAAA,UADRD,UAAA,CAAQ,IAAA,CAAA,MAAA,EAAA,SAAA,CAAA;AAAA;QAEID,KAAAA,MAAO,CAAA,MAAA,IAArBF,WAAA,EAAAC,kBAAA,CAES,UAFT,UAES,EAAA;AAAA,UADPE,UAAA,CAAsB,IAAA,CAAA,MAAA,EAAA,QAAA,CAAA;AAAA;;;;;;;;;;;;;;;;ACCf,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;;ACRpC,MAAM,eAAe;;ACCf,MAAA,SAAA,GAA4C,YAAY,OAAO;;;;"}
@@ -0,0 +1,98 @@
1
+ import { defineComponent, computed, openBlock, createElementBlock, normalizeClass, normalizeStyle, renderSlot } from 'vue';
2
+
3
+ var _sfc_main = /* @__PURE__ */ defineComponent({
4
+ ...{
5
+ name: "ToBox"
6
+ },
7
+ __name: "box",
8
+ props: {
9
+ mode: { type: String, required: false, default: "default" },
10
+ color: { type: String, required: false },
11
+ padding: { type: [String, Number], required: false },
12
+ height: { type: [String, Number], required: false },
13
+ cut: { type: Boolean, required: false, default: false },
14
+ link: { type: Boolean, required: false }
15
+ },
16
+ setup(__props) {
17
+ const props = __props;
18
+ const setClass = computed(() => {
19
+ let arr = [];
20
+ if (props.mode) {
21
+ arr.push(`mode-${props.mode}`);
22
+ }
23
+ if (props.cut) {
24
+ arr.push(`is-cut`);
25
+ }
26
+ if (props.link) {
27
+ arr.push(`is-link`);
28
+ }
29
+ if (props.height && props.height === "full") {
30
+ arr.push("height-full");
31
+ }
32
+ return arr;
33
+ });
34
+ const setStyle = computed(() => {
35
+ const obj = {};
36
+ if (props.height && props.height !== "full") {
37
+ if (!isNaN(Number(props.height))) {
38
+ obj.height = props.height + "em";
39
+ }
40
+ }
41
+ const hasUnit = (val) => /[a-z%]+$/i.test(val);
42
+ if (String(props.padding).trim()) {
43
+ const padded = String(props.padding).trim().split(/\s+/).map((val) => {
44
+ return hasUnit(val) ? val : `${val}em`;
45
+ }).join(" ");
46
+ obj.padding = padded;
47
+ }
48
+ return obj;
49
+ });
50
+ return (_ctx, _cache) => {
51
+ return openBlock(), createElementBlock(
52
+ "div",
53
+ {
54
+ class: normalizeClass(["to-box", setClass.value]),
55
+ style: normalizeStyle(setStyle.value)
56
+ },
57
+ [
58
+ renderSlot(_ctx.$slots, "default")
59
+ ],
60
+ 6
61
+ /* CLASS, STYLE */
62
+ );
63
+ };
64
+ }
65
+ });
66
+
67
+ var _export_sfc = (sfc, props) => {
68
+ const target = sfc.__vccOpts || sfc;
69
+ for (const [key, val] of props) {
70
+ target[key] = val;
71
+ }
72
+ return target;
73
+ };
74
+
75
+ var Box = /* @__PURE__ */ _export_sfc(_sfc_main, [["__file", "/Users/wangding/WorkSpace/AsiaInfo/projects/\u524D\u7AEF\u6846\u67B6/touch-vue3-ui/packages/components/box/src/box.vue"]]);
76
+
77
+ const withInstall = (main, extra) => {
78
+ main.install = (app) => {
79
+ for (const comp of [main, ...Object.values(extra != null ? extra : {})]) {
80
+ app.component(comp.name, comp);
81
+ }
82
+ };
83
+ if (extra) {
84
+ for (const [key, comp] of Object.entries(extra)) {
85
+ main[key] = comp;
86
+ }
87
+ }
88
+ return main;
89
+ };
90
+
91
+ navigator.userAgent.toLowerCase();
92
+
93
+ const boxProps = {};
94
+
95
+ const ToBox = withInstall(Box);
96
+
97
+ export { Box, ToBox, boxProps };
98
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../../packages/components/box/src/box.vue","../../../../packages/utils/types.ts","../../../../packages/utils/ratio.ts","../../../../packages/components/box/src/box.ts","../../../../packages/components/box/index.ts"],"sourcesContent":["<template>\n <div class=\"to-box\" :class=\"setClass\" :style=\"setStyle\">\n <slot></slot>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\n\ndefineOptions({\n name: 'ToBox',\n});\n\ninterface Props {\n mode?: string;\n color?: string;\n padding?: string | number;\n height?: '' | 'full' | number | string;\n cut?: boolean;\n link?: boolean;\n}\nconst props = withDefaults(defineProps<Props>(), {\n mode: 'default',\n cut: false,\n});\nconst setClass = computed(() => {\n let arr: string[] = [];\n if (props.mode) {\n arr.push(`mode-${props.mode}`);\n }\n if (props.cut) {\n arr.push(`is-cut`);\n }\n if (props.link) {\n arr.push(`is-link`);\n }\n if (props.height && props.height === 'full') {\n arr.push('height-full');\n }\n return arr;\n});\nconst setStyle = computed(() => {\n const obj: { height?: string; padding?: string | number } = {};\n\n if (props.height && props.height !== 'full') {\n if (!isNaN(Number(props.height))) {\n obj.height = props.height + 'em';\n }\n }\n\n const hasUnit = (val: string) => /[a-z%]+$/i.test(val);\n if (String(props.padding).trim()) {\n // 分割成各个值\n const padded = String(props.padding)\n .trim()\n .split(/\\s+/)\n .map(val => {\n // 如果是数字(或纯数字字符串),或末尾无单位,就加 em\n return hasUnit(val) ? val : `${val}em`;\n })\n .join(' ');\n\n obj.padding = padded;\n }\n return obj;\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 { ExtractPropTypes } from 'vue';\n\nexport const boxProps = {};\n\nexport type BoxProps = ExtractPropTypes<typeof boxProps>;\n","import Box from './src/box.vue';\nimport { SFCWithInstall, withInstall } from '@touchvue/utils';\n\nexport const ToBox: SFCWithInstall<typeof Box> = withInstall(Box);\n\nexport { Box };\nexport * from './src/box';\nexport * from './src/instance';\n"],"names":["_createElementBlock","_normalizeClass","_renderSlot"],"mappings":"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"}
@@ -0,0 +1,96 @@
1
+ import { defineComponent, ref, computed, resolveComponent, openBlock, createElementBlock, normalizeClass, normalizeStyle, createBlock, createCommentVNode, createElementVNode, renderSlot } from 'vue';
2
+
3
+ const _hoisted_1 = { class: "to-button-text" };
4
+ var _sfc_main = /* @__PURE__ */ defineComponent({
5
+ ...{
6
+ name: "ToButton"
7
+ },
8
+ __name: "button",
9
+ props: {
10
+ icon: { type: String, required: false, default: "" },
11
+ mode: { type: String, required: false, default: "default" },
12
+ color: { type: String, required: false, default: "" },
13
+ width: { type: [String, Number], required: false },
14
+ iconPosition: { type: String, required: false, default: "" }
15
+ },
16
+ setup(__props, { expose: __expose }) {
17
+ const el = ref(null);
18
+ const props = __props;
19
+ const setStyle = computed(() => {
20
+ const style = {};
21
+ if (props.width) {
22
+ style.width = `${props.width}em`;
23
+ }
24
+ return style;
25
+ });
26
+ const setClass = computed(() => {
27
+ let arr = [];
28
+ if (props.mode) {
29
+ arr.push(`mode-${props.mode}`);
30
+ }
31
+ if (props.color) {
32
+ arr.push(`color-${props.color}`);
33
+ }
34
+ if (props.iconPosition) {
35
+ arr.push(`icon-position-${props.iconPosition}`);
36
+ }
37
+ return arr;
38
+ });
39
+ __expose({ el });
40
+ return (_ctx, _cache) => {
41
+ const _component_ToIcon = resolveComponent("ToIcon");
42
+ return openBlock(), createElementBlock(
43
+ "button",
44
+ {
45
+ ref_key: "el",
46
+ ref: el,
47
+ class: normalizeClass(["to-button", setClass.value]),
48
+ style: normalizeStyle(setStyle.value)
49
+ },
50
+ [
51
+ _ctx.icon ? (openBlock(), createBlock(_component_ToIcon, {
52
+ key: 0,
53
+ class: "to-button-icon",
54
+ value: _ctx.icon
55
+ }, null, 8, ["value"])) : createCommentVNode("v-if", true),
56
+ createElementVNode("span", _hoisted_1, [
57
+ renderSlot(_ctx.$slots, "default")
58
+ ])
59
+ ],
60
+ 6
61
+ /* CLASS, STYLE */
62
+ );
63
+ };
64
+ }
65
+ });
66
+
67
+ var _export_sfc = (sfc, props) => {
68
+ const target = sfc.__vccOpts || sfc;
69
+ for (const [key, val] of props) {
70
+ target[key] = val;
71
+ }
72
+ return target;
73
+ };
74
+
75
+ var Button = /* @__PURE__ */ _export_sfc(_sfc_main, [["__file", "/Users/wangding/WorkSpace/AsiaInfo/projects/\u524D\u7AEF\u6846\u67B6/touch-vue3-ui/packages/components/button/src/button.vue"]]);
76
+
77
+ const withInstall = (main, extra) => {
78
+ main.install = (app) => {
79
+ for (const comp of [main, ...Object.values(extra != null ? extra : {})]) {
80
+ app.component(comp.name, comp);
81
+ }
82
+ };
83
+ if (extra) {
84
+ for (const [key, comp] of Object.entries(extra)) {
85
+ main[key] = comp;
86
+ }
87
+ }
88
+ return main;
89
+ };
90
+
91
+ navigator.userAgent.toLowerCase();
92
+
93
+ const ToButton = withInstall(Button);
94
+
95
+ export { ToButton };
96
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../../packages/components/button/src/button.vue","../../../../packages/utils/types.ts","../../../../packages/utils/ratio.ts","../../../../packages/components/button/index.ts"],"sourcesContent":["<template>\n <button ref=\"el\" class=\"to-button\" :class=\"setClass\" :style=\"setStyle\">\n <ToIcon v-if=\"icon\" class=\"to-button-icon\" :value=\"icon\"></ToIcon>\n <span class=\"to-button-text\">\n <slot></slot>\n </span>\n </button>\n</template>\n<script setup lang=\"ts\">\nimport { ref, computed, defineProps } from 'vue';\n\ndefineOptions({\n name: 'ToButton',\n});\n\nconst el = ref(null);\n\ninterface Props {\n icon?: string;\n mode?: string;\n color?: string;\n width?: string | number;\n iconPosition?: string;\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n mode: 'default',\n color: '',\n icon: '',\n iconPosition: '',\n});\n\nconst setStyle = computed(() => {\n const style: Record<string, string> = {};\n if (props.width) {\n style.width = `${props.width}em`;\n }\n return style;\n});\n\nconst setClass = computed(() => {\n let arr: string[] = [];\n if (props.mode) {\n arr.push(`mode-${props.mode}`);\n }\n if (props.color) {\n arr.push(`color-${props.color}`);\n }\n if (props.iconPosition) {\n arr.push(`icon-position-${props.iconPosition}`);\n }\n return arr;\n});\ndefineExpose({ el });\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 Button from './src/button.vue';\nimport { SFCWithInstall, withInstall } from '@touchvue/utils';\n\nexport const ToButton: SFCWithInstall<typeof Button> = withInstall(Button);\n\nexport * from './src/instance';\n"],"names":["_createElementBlock","_normalizeClass","icon","_createBlock","_createElementVNode","_renderSlot"],"mappings":";;;;;;;;;;;;;;;;AAeA,IAAM,MAAA,EAAA,GAAK,IAAI,IAAI,CAAA,CAAA;AAUnB,IAAA,MAAM,KAAQ,GAAA,OAAA,CAAA;AAOd,IAAM,MAAA,QAAA,GAAW,SAAS,MAAM;AAC9B,MAAA,MAAM,QAAgC,EAAC,CAAA;AACvC,MAAA,IAAI,MAAM,KAAO,EAAA;AACf,QAAM,KAAA,CAAA,KAAA,GAAQ,GAAG,KAAM,CAAA,KAAA,CAAA,EAAA,CAAA,CAAA;AAAA,OACzB;AACA,MAAO,OAAA,KAAA,CAAA;AAAA,KACR,CAAA,CAAA;AAED,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,KAAO,EAAA;AACf,QAAI,GAAA,CAAA,IAAA,CAAK,CAAS,MAAA,EAAA,KAAA,CAAM,KAAO,CAAA,CAAA,CAAA,CAAA;AAAA,OACjC;AACA,MAAA,IAAI,MAAM,YAAc,EAAA;AACtB,QAAI,GAAA,CAAA,IAAA,CAAK,CAAiB,cAAA,EAAA,KAAA,CAAM,YAAc,CAAA,CAAA,CAAA,CAAA;AAAA,OAChD;AACA,MAAO,OAAA,GAAA,CAAA;AAAA,KACR,CAAA,CAAA;AACD,IAAa,QAAA,CAAA,EAAE,IAAI,CAAA,CAAA;;;wBApDjB,EAAAA,kBAAA;AAAA,QAKS,QAAA;AAAA,QAAA;AAAA,iBALG,EAAA,IAAA;AAAA,UAAJ,GAAI,EAAA,EAAA;AAAA,UAAK,OAAKC,cAAA,CAAA,CAAC,WAAoB,EAAA,QAAA,CAAQ,KAAA,CAAA,CAAA;AAAA,UAAG,KAAA,gBAAO,CAAA,QAAA,CAAQ,KAAA,CAAA;AAAA;;UACrDC,IAAI,CAAA,IAAA,iBAAlBC,YAAkE,iBAAA,EAAA;AAAA;YAA9C,KAAM,EAAA,gBAAA;AAAA,YAAkB,OAAOD,IAAI,CAAA,IAAA;AAAA;UACvDE,kBAAA,CAEO,QAFP,UAEO,EAAA;AAAA,YADLC,UAAA,CAAa,IAAA,CAAA,MAAA,EAAA,SAAA,CAAA;AAAA;;;;;;;;;;;;;;;;;;;ACMN,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,QAAA,GAA0C,YAAY,MAAM;;;;"}
@@ -0,0 +1,44 @@
1
+ import { defineComponent, openBlock, createElementBlock } from 'vue';
2
+
3
+ const withInstall = (main, extra) => {
4
+ main.install = (app) => {
5
+ for (const comp of [main, ...Object.values(extra != null ? extra : {})]) {
6
+ app.component(comp.name, comp);
7
+ }
8
+ };
9
+ if (extra) {
10
+ for (const [key, comp] of Object.entries(extra)) {
11
+ main[key] = comp;
12
+ }
13
+ }
14
+ return main;
15
+ };
16
+
17
+ navigator.userAgent.toLowerCase();
18
+
19
+ var _sfc_main = /* @__PURE__ */ defineComponent({
20
+ ...{
21
+ name: "ToCalendar"
22
+ },
23
+ __name: "calendar",
24
+ setup(__props) {
25
+ return (_ctx, _cache) => {
26
+ return openBlock(), createElementBlock("div");
27
+ };
28
+ }
29
+ });
30
+
31
+ var _export_sfc = (sfc, props) => {
32
+ const target = sfc.__vccOpts || sfc;
33
+ for (const [key, val] of props) {
34
+ target[key] = val;
35
+ }
36
+ return target;
37
+ };
38
+
39
+ var Calendar = /* @__PURE__ */ _export_sfc(_sfc_main, [["__file", "/Users/wangding/WorkSpace/AsiaInfo/projects/\u524D\u7AEF\u6846\u67B6/touch-vue3-ui/packages/components/calendar/src/calendar.vue"]]);
40
+
41
+ const ToCalendar = withInstall(Calendar);
42
+
43
+ export { ToCalendar };
44
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../../packages/utils/types.ts","../../../../packages/utils/ratio.ts","../../../../packages/components/calendar/src/calendar.vue","../../../../packages/components/calendar/index.ts"],"sourcesContent":["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","<template>\n <div></div>\n</template>\n<script setup lang=\"ts\">\ndefineOptions({\n name: 'ToCalendar',\n});\n</script>\n","import { withInstall, SFCWithInstall } from '@touchvue/utils';\nimport Calendar from './src/calendar.vue';\n\nexport const ToCalendar: SFCWithInstall<typeof Calendar> = withInstall(Calendar);\n"],"names":["_createElementBlock"],"mappings":";;AAUa,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;;;;;;;;;wBCTzC,EAAAA,kBAAA,CAAW,KAAA,CAAA,CAAA;AAAA;;;;;;;;;;;;;;ACEA,MAAA,UAAA,GAA8C,YAAY,QAAQ;;;;"}