@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.
- package/README.md +70 -0
- package/es/components/article/index.js +66 -0
- package/es/components/article/index.js.map +1 -0
- package/es/components/box/index.js +98 -0
- package/es/components/box/index.js.map +1 -0
- package/es/components/button/index.js +96 -0
- package/es/components/button/index.js.map +1 -0
- package/es/components/calendar/index.js +44 -0
- package/es/components/calendar/index.js.map +1 -0
- package/es/components/card/index.js +290 -0
- package/es/components/card/index.js.map +1 -0
- package/es/components/checkbox/index.js +97 -0
- package/es/components/checkbox/index.js.map +1 -0
- package/es/components/datepicker/index.js +44 -0
- package/es/components/datepicker/index.js.map +1 -0
- package/es/components/form/index.js +303 -0
- package/es/components/form/index.js.map +1 -0
- package/es/components/grid/index.js +253 -0
- package/es/components/grid/index.js.map +1 -0
- package/es/components/header/index.js +233 -0
- package/es/components/header/index.js.map +1 -0
- package/es/components/icon/index.js +98 -0
- package/es/components/icon/index.js.map +1 -0
- package/es/components/input/index.js +436 -0
- package/es/components/input/index.js.map +1 -0
- package/es/components/line/index.js +100 -0
- package/es/components/line/index.js.map +1 -0
- package/es/components/msg/index.js +322 -0
- package/es/components/msg/index.js.map +1 -0
- package/es/components/padding/index.js +92 -0
- package/es/components/padding/index.js.map +1 -0
- package/es/components/page/index.js +334 -0
- package/es/components/page/index.js.map +1 -0
- package/es/components/select/index.js +218 -0
- package/es/components/select/index.js.map +1 -0
- package/es/components/space/index.js +88 -0
- package/es/components/space/index.js.map +1 -0
- package/es/components/step/index.js +127 -0
- package/es/components/step/index.js.map +1 -0
- package/es/components/switch/index.js +120 -0
- package/es/components/switch/index.js.map +1 -0
- package/es/components/tab/index.js +227 -0
- package/es/components/tab/index.js.map +1 -0
- package/es/components/table/index.js +893 -0
- package/es/components/table/index.js.map +1 -0
- package/es/directives/dis/index.js +32 -0
- package/es/directives/dis/index.js.map +1 -0
- package/es/directives/size/index.js +23 -0
- package/es/directives/size/index.js.map +1 -0
- package/es/hooks/index.js +2 -0
- package/es/hooks/index.js.map +1 -0
- package/es/index.js +4209 -0
- package/es/index.js.map +1 -0
- package/es/utils/index.js +90 -0
- package/es/utils/index.js.map +1 -0
- package/lib/components/article/index.js +70 -0
- package/lib/components/article/index.js.map +1 -0
- package/lib/components/box/index.js +102 -0
- package/lib/components/box/index.js.map +1 -0
- package/lib/components/button/index.js +98 -0
- package/lib/components/button/index.js.map +1 -0
- package/lib/components/calendar/index.js +46 -0
- package/lib/components/calendar/index.js.map +1 -0
- package/lib/components/card/index.js +292 -0
- package/lib/components/card/index.js.map +1 -0
- package/lib/components/checkbox/index.js +99 -0
- package/lib/components/checkbox/index.js.map +1 -0
- package/lib/components/datepicker/index.js +46 -0
- package/lib/components/datepicker/index.js.map +1 -0
- package/lib/components/form/index.js +306 -0
- package/lib/components/form/index.js.map +1 -0
- package/lib/components/grid/index.js +256 -0
- package/lib/components/grid/index.js.map +1 -0
- package/lib/components/header/index.js +235 -0
- package/lib/components/header/index.js.map +1 -0
- package/lib/components/icon/index.js +101 -0
- package/lib/components/icon/index.js.map +1 -0
- package/lib/components/input/index.js +438 -0
- package/lib/components/input/index.js.map +1 -0
- package/lib/components/line/index.js +102 -0
- package/lib/components/line/index.js.map +1 -0
- package/lib/components/msg/index.js +324 -0
- package/lib/components/msg/index.js.map +1 -0
- package/lib/components/padding/index.js +94 -0
- package/lib/components/padding/index.js.map +1 -0
- package/lib/components/page/index.js +336 -0
- package/lib/components/page/index.js.map +1 -0
- package/lib/components/select/index.js +220 -0
- package/lib/components/select/index.js.map +1 -0
- package/lib/components/space/index.js +90 -0
- package/lib/components/space/index.js.map +1 -0
- package/lib/components/step/index.js +129 -0
- package/lib/components/step/index.js.map +1 -0
- package/lib/components/switch/index.js +122 -0
- package/lib/components/switch/index.js.map +1 -0
- package/lib/components/tab/index.js +230 -0
- package/lib/components/tab/index.js.map +1 -0
- package/lib/components/table/index.js +898 -0
- package/lib/components/table/index.js.map +1 -0
- package/lib/directives/dis/index.js +34 -0
- package/lib/directives/dis/index.js.map +1 -0
- package/lib/directives/size/index.js +25 -0
- package/lib/directives/size/index.js.map +1 -0
- package/lib/hooks/index.js +3 -0
- package/lib/hooks/index.js.map +1 -0
- package/lib/index.js +4251 -0
- package/lib/index.js.map +1 -0
- package/lib/utils/index.js +99 -0
- package/lib/utils/index.js.map +1 -0
- package/package.json +35 -0
- package/theme/components/article/index.css +1 -0
- package/theme/components/box/index.css +1 -0
- package/theme/components/button/index.css +1 -0
- package/theme/components/calendar/index.css +0 -0
- package/theme/components/card/index.css +1 -0
- package/theme/components/checkbox/index.css +1 -0
- package/theme/components/datepicker/index.css +0 -0
- package/theme/components/form/index.css +1 -0
- package/theme/components/grid/index.css +1 -0
- package/theme/components/header/index.css +1 -0
- package/theme/components/icon/index.css +1 -0
- package/theme/components/input/index.css +1 -0
- package/theme/components/line/index.css +1 -0
- package/theme/components/msg/index.css +1 -0
- package/theme/components/padding/index.css +1 -0
- package/theme/components/space/index.css +1 -0
- package/theme/components/step/index.css +1 -0
- package/theme/components/switch/index.css +1 -0
- package/theme/components/tab/index.css +1 -0
- package/theme/components/table/index.css +1 -0
- package/theme/img/default.png +0 -0
- package/theme/img/icon-type-fill.ttf +0 -0
- package/theme/img/icon.ttf +0 -0
- package/theme/img/loading-in.png +0 -0
- package/theme/img/loading-out.png +0 -0
- package/theme/img/msg/error-bg.png +0 -0
- package/theme/img/msg/error-icon.png +0 -0
- package/theme/img/msg/success-bg.png +0 -0
- package/theme/img/msg/success-icon.png +0 -0
- package/theme/index.css +1 -0
- package/theme/skin/default.css +1 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../packages/utils/types.ts","../../../packages/utils/config.ts","../../../packages/utils/ratio.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","import { getCurrentInstance } from 'vue';\nimport type { TouchVueUIOptions } from '../components';\n\n/**\n * 获取组件库全局配置\n * 可以在组件内部使用此函数获取全局配置\n * @returns 全局配置对象\n */\nexport const useGlobalConfig = (): TouchVueUIOptions => {\n const instance = getCurrentInstance();\n if (!instance) {\n console.warn('useGlobalConfig() 只能在setup()或生命周期钩子中调用');\n return {} as TouchVueUIOptions;\n }\n\n // 从应用实例中获取全局配置\n return instance.appContext.config.globalProperties.$TOUCHVUE_CONFIG || {};\n};\n\n/**\n * 获取组件配置\n * 合并全局配置和组件自身的props配置\n * @param props 组件props\n * @param key 配置键名\n * @returns 合并后的配置值\n */\nexport const getComponentConfig = <T>(props: Record<string, any>, key: string): T => {\n const globalConfig = useGlobalConfig();\n\n // 优先使用组件自身的props配置,如果没有则使用全局配置\n return (props[key] ?? globalConfig[key]) as 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"],"names":["ua"],"mappings":"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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var vue = require('vue');
|
|
4
|
+
|
|
5
|
+
const _hoisted_1 = { class: "to-article" };
|
|
6
|
+
const _hoisted_2 = {
|
|
7
|
+
key: 0,
|
|
8
|
+
class: "to-article-header"
|
|
9
|
+
};
|
|
10
|
+
const _hoisted_3 = { class: "to-article-content" };
|
|
11
|
+
const _hoisted_4 = {
|
|
12
|
+
key: 1,
|
|
13
|
+
class: "to-article-footer"
|
|
14
|
+
};
|
|
15
|
+
var _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
16
|
+
...{
|
|
17
|
+
name: "ToArticle"
|
|
18
|
+
},
|
|
19
|
+
__name: "article",
|
|
20
|
+
setup(__props) {
|
|
21
|
+
return (_ctx, _cache) => {
|
|
22
|
+
return vue.openBlock(), vue.createElementBlock("article", _hoisted_1, [
|
|
23
|
+
_ctx.$slots.header ? (vue.openBlock(), vue.createElementBlock("header", _hoisted_2, [
|
|
24
|
+
vue.renderSlot(_ctx.$slots, "header")
|
|
25
|
+
])) : vue.createCommentVNode("v-if", true),
|
|
26
|
+
vue.createElementVNode("section", _hoisted_3, [
|
|
27
|
+
vue.renderSlot(_ctx.$slots, "default")
|
|
28
|
+
]),
|
|
29
|
+
_ctx.$slots.footer ? (vue.openBlock(), vue.createElementBlock("footer", _hoisted_4, [
|
|
30
|
+
vue.renderSlot(_ctx.$slots, "footer")
|
|
31
|
+
])) : vue.createCommentVNode("v-if", true)
|
|
32
|
+
]);
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
var _export_sfc = (sfc, props) => {
|
|
38
|
+
const target = sfc.__vccOpts || sfc;
|
|
39
|
+
for (const [key, val] of props) {
|
|
40
|
+
target[key] = val;
|
|
41
|
+
}
|
|
42
|
+
return target;
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
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"]]);
|
|
46
|
+
|
|
47
|
+
const withInstall = (main, extra) => {
|
|
48
|
+
main.install = (app) => {
|
|
49
|
+
for (const comp of [main, ...Object.values(extra != null ? extra : {})]) {
|
|
50
|
+
app.component(comp.name, comp);
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
if (extra) {
|
|
54
|
+
for (const [key, comp] of Object.entries(extra)) {
|
|
55
|
+
main[key] = comp;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return main;
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
navigator.userAgent.toLowerCase();
|
|
62
|
+
|
|
63
|
+
const articleProps = {};
|
|
64
|
+
|
|
65
|
+
const ToArticle = withInstall(Article);
|
|
66
|
+
|
|
67
|
+
exports.Article = Article;
|
|
68
|
+
exports.ToArticle = ToArticle;
|
|
69
|
+
exports.articleProps = articleProps;
|
|
70
|
+
//# 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,aAAA,EAAA,EAAAC,sBAUU,CAAA,SAAA,EAVV,UAUU,EAAA;AAAA,QATMC,KAAAA,MAAO,CAAA,MAAA,IAArBF,eAAA,EAAAC,sBAAA,CAES,UAFT,UAES,EAAA;AAAA,UADPE,cAAA,CAAsB,IAAA,CAAA,MAAA,EAAA,QAAA,CAAA;AAAA;QAExBC,sBAAA,CAEU,WAFV,UAEU,EAAA;AAAA,UADRD,cAAA,CAAQ,IAAA,CAAA,MAAA,EAAA,SAAA,CAAA;AAAA;QAEID,KAAAA,MAAO,CAAA,MAAA,IAArBF,eAAA,EAAAC,sBAAA,CAES,UAFT,UAES,EAAA;AAAA,UADPE,cAAA,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,102 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var vue = require('vue');
|
|
4
|
+
|
|
5
|
+
var _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
6
|
+
...{
|
|
7
|
+
name: "ToBox"
|
|
8
|
+
},
|
|
9
|
+
__name: "box",
|
|
10
|
+
props: {
|
|
11
|
+
mode: { type: String, required: false, default: "default" },
|
|
12
|
+
color: { type: String, required: false },
|
|
13
|
+
padding: { type: [String, Number], required: false },
|
|
14
|
+
height: { type: [String, Number], required: false },
|
|
15
|
+
cut: { type: Boolean, required: false, default: false },
|
|
16
|
+
link: { type: Boolean, required: false }
|
|
17
|
+
},
|
|
18
|
+
setup(__props) {
|
|
19
|
+
const props = __props;
|
|
20
|
+
const setClass = vue.computed(() => {
|
|
21
|
+
let arr = [];
|
|
22
|
+
if (props.mode) {
|
|
23
|
+
arr.push(`mode-${props.mode}`);
|
|
24
|
+
}
|
|
25
|
+
if (props.cut) {
|
|
26
|
+
arr.push(`is-cut`);
|
|
27
|
+
}
|
|
28
|
+
if (props.link) {
|
|
29
|
+
arr.push(`is-link`);
|
|
30
|
+
}
|
|
31
|
+
if (props.height && props.height === "full") {
|
|
32
|
+
arr.push("height-full");
|
|
33
|
+
}
|
|
34
|
+
return arr;
|
|
35
|
+
});
|
|
36
|
+
const setStyle = vue.computed(() => {
|
|
37
|
+
const obj = {};
|
|
38
|
+
if (props.height && props.height !== "full") {
|
|
39
|
+
if (!isNaN(Number(props.height))) {
|
|
40
|
+
obj.height = props.height + "em";
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
const hasUnit = (val) => /[a-z%]+$/i.test(val);
|
|
44
|
+
if (String(props.padding).trim()) {
|
|
45
|
+
const padded = String(props.padding).trim().split(/\s+/).map((val) => {
|
|
46
|
+
return hasUnit(val) ? val : `${val}em`;
|
|
47
|
+
}).join(" ");
|
|
48
|
+
obj.padding = padded;
|
|
49
|
+
}
|
|
50
|
+
return obj;
|
|
51
|
+
});
|
|
52
|
+
return (_ctx, _cache) => {
|
|
53
|
+
return vue.openBlock(), vue.createElementBlock(
|
|
54
|
+
"div",
|
|
55
|
+
{
|
|
56
|
+
class: vue.normalizeClass(["to-box", setClass.value]),
|
|
57
|
+
style: vue.normalizeStyle(setStyle.value)
|
|
58
|
+
},
|
|
59
|
+
[
|
|
60
|
+
vue.renderSlot(_ctx.$slots, "default")
|
|
61
|
+
],
|
|
62
|
+
6
|
|
63
|
+
/* CLASS, STYLE */
|
|
64
|
+
);
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
var _export_sfc = (sfc, props) => {
|
|
70
|
+
const target = sfc.__vccOpts || sfc;
|
|
71
|
+
for (const [key, val] of props) {
|
|
72
|
+
target[key] = val;
|
|
73
|
+
}
|
|
74
|
+
return target;
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
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"]]);
|
|
78
|
+
|
|
79
|
+
const withInstall = (main, extra) => {
|
|
80
|
+
main.install = (app) => {
|
|
81
|
+
for (const comp of [main, ...Object.values(extra != null ? extra : {})]) {
|
|
82
|
+
app.component(comp.name, comp);
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
if (extra) {
|
|
86
|
+
for (const [key, comp] of Object.entries(extra)) {
|
|
87
|
+
main[key] = comp;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return main;
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
navigator.userAgent.toLowerCase();
|
|
94
|
+
|
|
95
|
+
const boxProps = {};
|
|
96
|
+
|
|
97
|
+
const ToBox = withInstall(Box);
|
|
98
|
+
|
|
99
|
+
exports.Box = Box;
|
|
100
|
+
exports.ToBox = ToBox;
|
|
101
|
+
exports.boxProps = boxProps;
|
|
102
|
+
//# 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":["computed","_createElementBlock","_normalizeClass","_renderSlot"],"mappings":"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"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var vue = require('vue');
|
|
4
|
+
|
|
5
|
+
const _hoisted_1 = { class: "to-button-text" };
|
|
6
|
+
var _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
7
|
+
...{
|
|
8
|
+
name: "ToButton"
|
|
9
|
+
},
|
|
10
|
+
__name: "button",
|
|
11
|
+
props: {
|
|
12
|
+
icon: { type: String, required: false, default: "" },
|
|
13
|
+
mode: { type: String, required: false, default: "default" },
|
|
14
|
+
color: { type: String, required: false, default: "" },
|
|
15
|
+
width: { type: [String, Number], required: false },
|
|
16
|
+
iconPosition: { type: String, required: false, default: "" }
|
|
17
|
+
},
|
|
18
|
+
setup(__props, { expose: __expose }) {
|
|
19
|
+
const el = vue.ref(null);
|
|
20
|
+
const props = __props;
|
|
21
|
+
const setStyle = vue.computed(() => {
|
|
22
|
+
const style = {};
|
|
23
|
+
if (props.width) {
|
|
24
|
+
style.width = `${props.width}em`;
|
|
25
|
+
}
|
|
26
|
+
return style;
|
|
27
|
+
});
|
|
28
|
+
const setClass = vue.computed(() => {
|
|
29
|
+
let arr = [];
|
|
30
|
+
if (props.mode) {
|
|
31
|
+
arr.push(`mode-${props.mode}`);
|
|
32
|
+
}
|
|
33
|
+
if (props.color) {
|
|
34
|
+
arr.push(`color-${props.color}`);
|
|
35
|
+
}
|
|
36
|
+
if (props.iconPosition) {
|
|
37
|
+
arr.push(`icon-position-${props.iconPosition}`);
|
|
38
|
+
}
|
|
39
|
+
return arr;
|
|
40
|
+
});
|
|
41
|
+
__expose({ el });
|
|
42
|
+
return (_ctx, _cache) => {
|
|
43
|
+
const _component_ToIcon = vue.resolveComponent("ToIcon");
|
|
44
|
+
return vue.openBlock(), vue.createElementBlock(
|
|
45
|
+
"button",
|
|
46
|
+
{
|
|
47
|
+
ref_key: "el",
|
|
48
|
+
ref: el,
|
|
49
|
+
class: vue.normalizeClass(["to-button", setClass.value]),
|
|
50
|
+
style: vue.normalizeStyle(setStyle.value)
|
|
51
|
+
},
|
|
52
|
+
[
|
|
53
|
+
_ctx.icon ? (vue.openBlock(), vue.createBlock(_component_ToIcon, {
|
|
54
|
+
key: 0,
|
|
55
|
+
class: "to-button-icon",
|
|
56
|
+
value: _ctx.icon
|
|
57
|
+
}, null, 8, ["value"])) : vue.createCommentVNode("v-if", true),
|
|
58
|
+
vue.createElementVNode("span", _hoisted_1, [
|
|
59
|
+
vue.renderSlot(_ctx.$slots, "default")
|
|
60
|
+
])
|
|
61
|
+
],
|
|
62
|
+
6
|
|
63
|
+
/* CLASS, STYLE */
|
|
64
|
+
);
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
var _export_sfc = (sfc, props) => {
|
|
70
|
+
const target = sfc.__vccOpts || sfc;
|
|
71
|
+
for (const [key, val] of props) {
|
|
72
|
+
target[key] = val;
|
|
73
|
+
}
|
|
74
|
+
return target;
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
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"]]);
|
|
78
|
+
|
|
79
|
+
const withInstall = (main, extra) => {
|
|
80
|
+
main.install = (app) => {
|
|
81
|
+
for (const comp of [main, ...Object.values(extra != null ? extra : {})]) {
|
|
82
|
+
app.component(comp.name, comp);
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
if (extra) {
|
|
86
|
+
for (const [key, comp] of Object.entries(extra)) {
|
|
87
|
+
main[key] = comp;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return main;
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
navigator.userAgent.toLowerCase();
|
|
94
|
+
|
|
95
|
+
const ToButton = withInstall(Button);
|
|
96
|
+
|
|
97
|
+
exports.ToButton = ToButton;
|
|
98
|
+
//# 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":["ref","computed","_createElementBlock","_normalizeClass","icon","_createBlock","_createElementVNode","_renderSlot"],"mappings":";;;;;;;;;;;;;;;;;;AAeA,IAAM,MAAA,EAAA,GAAKA,QAAI,IAAI,CAAA,CAAA;AAUnB,IAAA,MAAM,KAAQ,GAAA,OAAA,CAAA;AAOd,IAAM,MAAA,QAAA,GAAWC,aAAS,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,GAAWA,aAAS,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;;;4BApDjB,EAAAC,sBAAA;AAAA,QAKS,QAAA;AAAA,QAAA;AAAA,iBALG,EAAA,IAAA;AAAA,UAAJ,GAAI,EAAA,EAAA;AAAA,UAAK,OAAKC,kBAAA,CAAA,CAAC,WAAoB,EAAA,QAAA,CAAQ,KAAA,CAAA,CAAA;AAAA,UAAG,KAAA,oBAAO,CAAA,QAAA,CAAQ,KAAA,CAAA;AAAA;;UACrDC,IAAI,CAAA,IAAA,qBAAlBC,gBAAkE,iBAAA,EAAA;AAAA;YAA9C,KAAM,EAAA,gBAAA;AAAA,YAAkB,OAAOD,IAAI,CAAA,IAAA;AAAA;UACvDE,sBAAA,CAEO,QAFP,UAEO,EAAA;AAAA,YADLC,cAAA,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,46 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var vue = require('vue');
|
|
4
|
+
|
|
5
|
+
const withInstall = (main, extra) => {
|
|
6
|
+
main.install = (app) => {
|
|
7
|
+
for (const comp of [main, ...Object.values(extra != null ? extra : {})]) {
|
|
8
|
+
app.component(comp.name, comp);
|
|
9
|
+
}
|
|
10
|
+
};
|
|
11
|
+
if (extra) {
|
|
12
|
+
for (const [key, comp] of Object.entries(extra)) {
|
|
13
|
+
main[key] = comp;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
return main;
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
navigator.userAgent.toLowerCase();
|
|
20
|
+
|
|
21
|
+
var _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
22
|
+
...{
|
|
23
|
+
name: "ToCalendar"
|
|
24
|
+
},
|
|
25
|
+
__name: "calendar",
|
|
26
|
+
setup(__props) {
|
|
27
|
+
return (_ctx, _cache) => {
|
|
28
|
+
return vue.openBlock(), vue.createElementBlock("div");
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
var _export_sfc = (sfc, props) => {
|
|
34
|
+
const target = sfc.__vccOpts || sfc;
|
|
35
|
+
for (const [key, val] of props) {
|
|
36
|
+
target[key] = val;
|
|
37
|
+
}
|
|
38
|
+
return target;
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
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"]]);
|
|
42
|
+
|
|
43
|
+
const ToCalendar = withInstall(Calendar);
|
|
44
|
+
|
|
45
|
+
exports.ToCalendar = ToCalendar;
|
|
46
|
+
//# 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;;;;;;;;;4BCTzC,EAAAA,sBAAA,CAAW,KAAA,CAAA,CAAA;AAAA;;;;;;;;;;;;;;ACEA,MAAA,UAAA,GAA8C,YAAY,QAAQ;;;;"}
|