@varlet/cli 1.22.0-alpha.6 → 1.22.0-alpha.64

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 (120) hide show
  1. package/README.en-US.md +11 -0
  2. package/README.md +11 -0
  3. package/generators/sfc/package.json +3 -3
  4. package/generators/sfc/varlet.config.js +5 -0
  5. package/generators/tsx/package.json +3 -3
  6. package/generators/tsx/varlet.config.js +5 -0
  7. package/lib/commands/dev.js +14 -3
  8. package/lib/commands/preview.d.ts +1 -0
  9. package/lib/commands/preview.js +65 -0
  10. package/lib/compiler/compileSiteEntry.d.ts +1 -4
  11. package/lib/compiler/compileSiteEntry.js +10 -20
  12. package/lib/config/jest.config.js +0 -1
  13. package/lib/config/vite.config.js +6 -6
  14. package/lib/index.js +2 -0
  15. package/lib/shared/constant.d.ts +1 -9
  16. package/lib/shared/constant.js +2 -10
  17. package/lib/site/components/app-bar/index.d.ts +3 -0
  18. package/lib/site/components/app-bar/index.js +12 -0
  19. package/lib/site/components/app-bar/props.d.ts +21 -0
  20. package/lib/site/components/app-bar/props.js +28 -0
  21. package/lib/site/components/button/index.d.ts +3 -0
  22. package/lib/site/components/button/index.js +12 -0
  23. package/lib/site/components/button/props.d.ts +62 -0
  24. package/lib/site/components/button/props.js +69 -0
  25. package/lib/site/components/cell/index.d.ts +3 -0
  26. package/lib/site/components/cell/index.js +12 -0
  27. package/lib/site/components/cell/props.d.ts +27 -0
  28. package/lib/site/components/cell/props.js +30 -0
  29. package/lib/site/components/context/index.d.ts +15 -0
  30. package/lib/site/components/context/index.js +11 -0
  31. package/lib/site/components/context/lock.d.ts +10 -0
  32. package/lib/site/components/context/lock.js +94 -0
  33. package/lib/site/components/context/zIndex.d.ts +4 -0
  34. package/lib/site/components/context/zIndex.js +19 -0
  35. package/lib/site/components/icon/index.d.ts +3 -0
  36. package/lib/site/components/icon/index.js +12 -0
  37. package/lib/site/components/icon/props.d.ts +23 -0
  38. package/lib/site/components/icon/props.js +25 -0
  39. package/lib/site/components/loading/index.d.ts +3 -0
  40. package/lib/site/components/loading/index.js +12 -0
  41. package/lib/site/components/loading/props.d.ts +26 -0
  42. package/lib/site/components/loading/props.js +34 -0
  43. package/lib/site/components/menu/index.d.ts +3 -0
  44. package/lib/site/components/menu/index.js +12 -0
  45. package/lib/site/components/menu/props.d.ts +40 -0
  46. package/lib/site/components/menu/props.js +43 -0
  47. package/lib/site/components/progress/index.d.ts +3 -0
  48. package/lib/site/components/progress/index.js +12 -0
  49. package/lib/site/components/progress/props.d.ts +43 -0
  50. package/lib/site/components/progress/props.js +57 -0
  51. package/lib/site/components/ripple/index.d.ts +8 -0
  52. package/lib/site/components/ripple/index.js +125 -0
  53. package/lib/site/components/utils/components.d.ts +53 -0
  54. package/lib/site/components/utils/components.js +279 -0
  55. package/lib/site/components/utils/elements.d.ts +30 -0
  56. package/lib/site/components/utils/elements.js +240 -0
  57. package/lib/site/components/utils/shared.d.ts +36 -0
  58. package/lib/site/components/utils/shared.js +181 -0
  59. package/lib/site/mobile/main.d.ts +3 -0
  60. package/lib/site/mobile/main.js +93 -0
  61. package/lib/site/pc/main.d.ts +3 -0
  62. package/lib/site/pc/main.js +69 -0
  63. package/lib/site/useProgress.d.ts +4 -0
  64. package/lib/site/useProgress.js +58 -0
  65. package/lib/site/utils.d.ts +24 -0
  66. package/lib/site/utils.js +133 -0
  67. package/package.json +9 -9
  68. package/site/.DS_Store +0 -0
  69. package/site/components/app-bar/AppBar.vue +45 -0
  70. package/site/components/app-bar/appBar.less +66 -0
  71. package/site/components/app-bar/index.ts +10 -0
  72. package/site/components/app-bar/props.ts +25 -0
  73. package/site/components/button/Button.vue +84 -0
  74. package/site/components/button/button.less +183 -0
  75. package/site/components/button/index.ts +10 -0
  76. package/site/components/button/props.ts +70 -0
  77. package/site/components/cell/Cell.vue +42 -0
  78. package/site/components/cell/cell.less +74 -0
  79. package/site/components/cell/index.ts +10 -0
  80. package/site/components/cell/props.ts +27 -0
  81. package/site/components/context/index.ts +17 -0
  82. package/site/components/context/lock.ts +103 -0
  83. package/site/components/context/zIndex.ts +20 -0
  84. package/site/components/icon/Icon.vue +68 -0
  85. package/site/components/icon/icon.less +25 -0
  86. package/site/components/icon/index.ts +10 -0
  87. package/site/components/icon/props.ts +24 -0
  88. package/site/components/loading/Loading.vue +55 -0
  89. package/site/components/loading/index.ts +10 -0
  90. package/site/components/loading/loading.less +420 -0
  91. package/site/components/loading/props.ts +37 -0
  92. package/site/components/menu/Menu.vue +113 -0
  93. package/site/components/menu/index.ts +10 -0
  94. package/site/components/menu/menu.less +27 -0
  95. package/site/components/menu/props.ts +43 -0
  96. package/site/components/progress/Progress.vue +108 -0
  97. package/site/components/progress/index.ts +10 -0
  98. package/site/components/progress/progress.less +98 -0
  99. package/site/components/progress/props.ts +55 -0
  100. package/site/components/ripple/index.ts +167 -0
  101. package/site/components/ripple/ripple.less +17 -0
  102. package/site/components/styles/common.less +64 -0
  103. package/site/components/styles/elevation.less +126 -0
  104. package/site/components/styles/var.less +27 -0
  105. package/site/components/utils/components.ts +53 -0
  106. package/site/components/utils/elements.ts +83 -0
  107. package/site/components/utils/shared.ts +27 -0
  108. package/site/mobile/App.vue +20 -16
  109. package/site/mobile/components/AppHome.vue +6 -6
  110. package/site/mobile/main.ts +14 -7
  111. package/site/pc/App.vue +15 -10
  112. package/site/pc/components/AppHeader.vue +14 -10
  113. package/site/pc/components/AppMobile.vue +3 -3
  114. package/site/pc/components/AppSidebar.vue +16 -20
  115. package/site/pc/main.ts +7 -4
  116. package/site/useProgress.ts +10 -8
  117. package/site/utils.ts +13 -2
  118. package/varlet.default.config.js +3 -2
  119. package/generators/sfc/yarn.lock +0 -11231
  120. package/generators/tsx/yarn.lock +0 -11231
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.useProgress = void 0;
7
+ var progress_1 = __importDefault(require("./components/progress"));
8
+ var vue_1 = require("vue");
9
+ // @ts-ignore
10
+ var _config_1 = __importDefault(require("@config"));
11
+ // @ts-ignore
12
+ var utils_1 = require("./utils");
13
+ var lodash_es_1 = require("lodash-es");
14
+ function useProgress() {
15
+ var timer;
16
+ var trackColor = lodash_es_1.get(_config_1.default, 'themes.color-progress-track');
17
+ var color = lodash_es_1.get(_config_1.default, 'themes.color-progress');
18
+ var props = vue_1.reactive({
19
+ style: {
20
+ position: 'fixed',
21
+ width: '100%',
22
+ left: 0,
23
+ top: 0,
24
+ zIndex: 10086,
25
+ },
26
+ trackColor: trackColor,
27
+ color: color,
28
+ lineWidth: 3,
29
+ value: 0,
30
+ });
31
+ var changeValue = function () {
32
+ timer = window.setTimeout(function () {
33
+ if (props.value >= 95)
34
+ return;
35
+ var num = Math.random();
36
+ if (props.value < 70)
37
+ num = Math.round(5 * Math.random());
38
+ props.value += num;
39
+ changeValue();
40
+ }, 200);
41
+ };
42
+ var start = function () {
43
+ props.value = 0;
44
+ setTimeout(function () { return (props.color = color); }, 200);
45
+ changeValue();
46
+ };
47
+ var end = function () {
48
+ props.value = 100;
49
+ setTimeout(function () { return (props.color = trackColor); }, 300);
50
+ window.clearTimeout(timer);
51
+ };
52
+ utils_1.mountInstance(progress_1.default, props);
53
+ return {
54
+ start: start,
55
+ end: end,
56
+ };
57
+ }
58
+ exports.useProgress = useProgress;
@@ -0,0 +1,24 @@
1
+ export * from './components/utils/components';
2
+ export * from './components/utils/elements';
3
+ export * from './components/utils/shared';
4
+ export declare type StyleVars = Record<string, string>;
5
+ export declare function camelize(str: string): string;
6
+ export declare function bigCamelize(str: string): string;
7
+ export interface PCLocationInfo {
8
+ language: string;
9
+ menuName: string;
10
+ }
11
+ export declare function getPCLocationInfo(): PCLocationInfo;
12
+ export declare function isPhone(): boolean;
13
+ export declare enum MenuTypes {
14
+ TITLE = 1,
15
+ COMPONENT = 2,
16
+ DOCUMENTATION = 3
17
+ }
18
+ export declare function inIframe(): boolean;
19
+ export declare function removeEmpty(object?: Record<string, string>): Record<string, string>;
20
+ export declare function getHashSearch(): URLSearchParams;
21
+ export declare function watchLang(cb: (lang: string) => void, platform?: 'pc' | 'mobile'): void;
22
+ export declare function watchPlatform(cb: (platform: string) => void): void;
23
+ export declare function addRouteListener(cb: () => void): void;
24
+ export declare function setThemes(config: Record<string, any>): void;
@@ -0,0 +1,133 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11
+ };
12
+ var __read = (this && this.__read) || function (o, n) {
13
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
14
+ if (!m) return o;
15
+ var i = m.call(o), r, ar = [], e;
16
+ try {
17
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
18
+ }
19
+ catch (error) { e = { error: error }; }
20
+ finally {
21
+ try {
22
+ if (r && !r.done && (m = i["return"])) m.call(i);
23
+ }
24
+ finally { if (e) throw e.error; }
25
+ }
26
+ return ar;
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.setThemes = exports.addRouteListener = exports.watchPlatform = exports.watchLang = exports.getHashSearch = exports.removeEmpty = exports.inIframe = exports.MenuTypes = exports.isPhone = exports.getPCLocationInfo = exports.bigCamelize = exports.camelize = void 0;
30
+ var vue_1 = require("vue");
31
+ var lodash_es_1 = require("lodash-es");
32
+ var elements_1 = require("./components/utils/elements");
33
+ __exportStar(require("./components/utils/components"), exports);
34
+ __exportStar(require("./components/utils/elements"), exports);
35
+ __exportStar(require("./components/utils/shared"), exports);
36
+ function StyleProvider(styleVars) {
37
+ if (styleVars === void 0) { styleVars = {}; }
38
+ var styles = elements_1.formatStyleVars(styleVars);
39
+ Object.entries(styles).forEach(function (_a) {
40
+ var _b = __read(_a, 2), key = _b[0], value = _b[1];
41
+ return document.documentElement.style.setProperty(key, value);
42
+ });
43
+ }
44
+ function camelize(str) {
45
+ return str.replace(/-(\w)/g, function (_, p) { return p.toUpperCase(); });
46
+ }
47
+ exports.camelize = camelize;
48
+ function bigCamelize(str) {
49
+ return camelize(str).replace(str.charAt(0), str.charAt(0).toUpperCase());
50
+ }
51
+ exports.bigCamelize = bigCamelize;
52
+ function getPCLocationInfo() {
53
+ var _a = __read(window.location.hash.split('/'), 3), language = _a[1], menuName = _a[2];
54
+ return {
55
+ language: language,
56
+ menuName: menuName
57
+ };
58
+ }
59
+ exports.getPCLocationInfo = getPCLocationInfo;
60
+ function isPhone() {
61
+ return /Android|webOS|iPhone|iPod|BlackBerry|Pad/i.test(navigator.userAgent);
62
+ }
63
+ exports.isPhone = isPhone;
64
+ var MenuTypes;
65
+ (function (MenuTypes) {
66
+ MenuTypes[MenuTypes["TITLE"] = 1] = "TITLE";
67
+ MenuTypes[MenuTypes["COMPONENT"] = 2] = "COMPONENT";
68
+ MenuTypes[MenuTypes["DOCUMENTATION"] = 3] = "DOCUMENTATION";
69
+ })(MenuTypes = exports.MenuTypes || (exports.MenuTypes = {}));
70
+ function inIframe() {
71
+ return window.self !== window.top;
72
+ }
73
+ exports.inIframe = inIframe;
74
+ function removeEmpty(object) {
75
+ if (object === void 0) { object = {}; }
76
+ return Object.keys(object).reduce(function (record, key) {
77
+ var value = object[key];
78
+ value && (record[key] = value);
79
+ return record;
80
+ }, {});
81
+ }
82
+ exports.removeEmpty = removeEmpty;
83
+ function getHashSearch() {
84
+ var href = window.location.href;
85
+ var hashSearch = href.slice(href.indexOf('?'));
86
+ return new URLSearchParams(hashSearch);
87
+ }
88
+ exports.getHashSearch = getHashSearch;
89
+ function watchLang(cb, platform) {
90
+ if (platform === void 0) { platform = 'mobile'; }
91
+ var handleHashchange = function () {
92
+ var _a;
93
+ var language = platform === 'mobile'
94
+ ? ((_a = getHashSearch().get('language')) !== null && _a !== void 0 ? _a : 'zh-CN')
95
+ : getPCLocationInfo().language;
96
+ cb(language);
97
+ };
98
+ addRouteListener(handleHashchange);
99
+ handleHashchange();
100
+ }
101
+ exports.watchLang = watchLang;
102
+ function watchPlatform(cb) {
103
+ var handleHashchange = function () {
104
+ var _a;
105
+ var platform = (_a = getHashSearch().get('platform')) !== null && _a !== void 0 ? _a : 'mobile';
106
+ cb(platform);
107
+ };
108
+ addRouteListener(handleHashchange);
109
+ handleHashchange();
110
+ }
111
+ exports.watchPlatform = watchPlatform;
112
+ function addRouteListener(cb) {
113
+ vue_1.onMounted(function () {
114
+ window.addEventListener('hashchange', cb);
115
+ window.addEventListener('popstate', cb);
116
+ });
117
+ vue_1.onUnmounted(function () {
118
+ window.removeEventListener('hashchange', cb);
119
+ window.removeEventListener('popstate', cb);
120
+ });
121
+ }
122
+ exports.addRouteListener = addRouteListener;
123
+ function setThemes(config) {
124
+ var themes = lodash_es_1.get(config, 'themes', {});
125
+ Object.keys(themes).forEach(function (key) {
126
+ var _a;
127
+ var theme = themes[key];
128
+ StyleProvider((_a = {},
129
+ _a["--site-config-" + key] = theme,
130
+ _a));
131
+ });
132
+ }
133
+ exports.setThemes = setThemes;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@varlet/cli",
3
- "version": "1.22.0-alpha.6+b3e8d150",
3
+ "version": "1.22.0-alpha.64+4e9f81da",
4
4
  "description": "cli of varlet",
5
5
  "bin": {
6
6
  "varlet-cli": "./lib/index.js"
@@ -31,7 +31,7 @@
31
31
  "dev": "tsc --watch",
32
32
  "build": "tsc"
33
33
  },
34
- "gitHead": "b3e8d150b843c603b090d8e2da3ec05e02f2a32e",
34
+ "gitHead": "4e9f81dabf854961e3bd99c445a0a8566b26db66",
35
35
  "dependencies": {
36
36
  "@babel/core": "^7.14.8",
37
37
  "@babel/preset-env": "^7.14.8",
@@ -44,14 +44,14 @@
44
44
  "@varlet/markdown-vite-plugin": "^1.20.0",
45
45
  "@varlet/stylelint-config": "^1.9.0",
46
46
  "@varlet/touch-emulator": "^1.0.1",
47
- "@varlet/ui": "^1.22.0-alpha.6+b3e8d150",
48
47
  "@vitejs/plugin-vue": "1.9.2",
49
48
  "@vitejs/plugin-vue-jsx": "1.1.8",
50
49
  "@vue/babel-plugin-jsx": "^1.0.7",
50
+ "@vue/compiler-sfc": "3.2.16",
51
51
  "@vue/test-utils": "^2.0.0-rc.6",
52
+ "address": "^1.1.2",
52
53
  "babel-jest": "26.6.3",
53
54
  "chalk": "^4.1.0",
54
- "chokidar": "^3.5.2",
55
55
  "clipboard": "^2.0.6",
56
56
  "commander": "^6.2.0",
57
57
  "commitizen": "^4.2.2",
@@ -66,6 +66,7 @@
66
66
  "jest": "^26.6.3",
67
67
  "less": "^3.12.2",
68
68
  "lint-staged": "^10.5.0",
69
+ "live-server": "^1.2.1",
69
70
  "lodash": "^4.17.21",
70
71
  "lodash-es": "^4.17.21",
71
72
  "ora": "^5.4.0",
@@ -75,10 +76,9 @@
75
76
  "stylelint": "^13.13.1",
76
77
  "ts-jest": "^26.5.1",
77
78
  "typescript": "^4.3.5",
78
- "vite": "2.5.10",
79
+ "vite": "2.6.2",
79
80
  "vite-plugin-html": "^2.1.0",
80
81
  "vue-jest": "^5.0.0-alpha.8",
81
- "vue-loader": "16.5.0",
82
82
  "vue-router": "4.0.0-rc.1"
83
83
  },
84
84
  "devDependencies": {
@@ -86,10 +86,10 @@
86
86
  "@types/fs-extra": "^9.0.2",
87
87
  "@types/hash-sum": "^1.0.0",
88
88
  "@types/jest": "^26.0.15",
89
- "@types/lodash": "^4.14.174"
89
+ "@types/lodash": "^4.14.174",
90
+ "@types/lodash-es": "^4.17.5"
90
91
  },
91
92
  "peerDependencies": {
92
- "@vue/compiler-sfc": "3.2.17",
93
- "vue": "3.2.17"
93
+ "vue": "3.2.16"
94
94
  }
95
95
  }
package/site/.DS_Store ADDED
Binary file
@@ -0,0 +1,45 @@
1
+ <template>
2
+ <div
3
+ class="var-site-app-bar"
4
+ :class="{ 'var-site-elevation--3': elevation }"
5
+ :style="{
6
+ background: color,
7
+ color: textColor,
8
+ }"
9
+ >
10
+ <div class="var-site-app-bar__left" v-if="$slots.left">
11
+ <slot name="left" />
12
+ </div>
13
+
14
+ <div
15
+ class="var-site-app-bar__title"
16
+ :class="`var-site-app-bar__title-${titlePosition}`"
17
+ :style="{
18
+ paddingLeft: $slots.left && titlePosition !== 'center' ? '30px' : '10px',
19
+ paddingRight: $slots.right && titlePosition !== 'center' ? '30px' : '10px',
20
+ }"
21
+ >
22
+ <slot>{{ title }}</slot>
23
+ </div>
24
+
25
+ <div class="var-site-app-bar__right" v-if="$slots.right">
26
+ <slot name="right" />
27
+ </div>
28
+ </div>
29
+ </template>
30
+
31
+ <script lang="ts">
32
+ import { defineComponent } from 'vue'
33
+ import { props } from './props'
34
+
35
+ export default defineComponent({
36
+ name: 'VarSiteAppBar',
37
+ props,
38
+ })
39
+ </script>
40
+
41
+ <style lang="less">
42
+ @import '../styles/common';
43
+ @import '../styles/elevation';
44
+ @import './appBar';
45
+ </style>
@@ -0,0 +1,66 @@
1
+ @site-app-bar-color: var(--site-color-primary);
2
+ @site-app-bar-text-color: #fff;
3
+ @site-app-bar-height: 50px;
4
+ @site-app-bar-padding: 0 10px;
5
+ @site-app-bar-title-line-height: 50px;
6
+
7
+ :root {
8
+ --site-app-bar-color: @site-app-bar-color;
9
+ --site-app-bar-text-color: #fff;
10
+ --site-app-bar-height: @site-app-bar-height;
11
+ --site-app-bar-padding: @site-app-bar-padding;
12
+ --site-app-bar-title-line-height: @site-app-bar-title-line-height;
13
+ }
14
+
15
+ .var-site-app-bar {
16
+ position: relative;
17
+ display: flex;
18
+ justify-content: center;
19
+ align-items: center;
20
+ height: var(--site-app-bar-height);
21
+ padding: var(--site-app-bar-padding);
22
+ background: var(--site-app-bar-color);
23
+ color: var(--site-app-bar-text-color);
24
+
25
+ &__title {
26
+ flex: 1;
27
+ white-space: nowrap;
28
+ text-overflow: ellipsis;
29
+ overflow: hidden;
30
+ line-height: var(--site-app-bar-title-line-height);
31
+ display: flex;
32
+ }
33
+
34
+ &__title-center {
35
+ justify-content: center;
36
+ }
37
+
38
+ &__title-left {
39
+ justify-content: flex-start;
40
+ }
41
+
42
+ &__title-right {
43
+ justify-content: flex-end;
44
+ }
45
+
46
+ &__left,
47
+ &__right {
48
+ display: flex;
49
+ justify-content: flex-start;
50
+ align-items: center;
51
+ height: 100%;
52
+ z-index: 2;
53
+ }
54
+
55
+ &__left {
56
+ position: absolute;
57
+ top: 0;
58
+ left: 0;
59
+ }
60
+
61
+ &__right {
62
+ position: absolute;
63
+ top: 0;
64
+ right: 0;
65
+ }
66
+ }
@@ -0,0 +1,10 @@
1
+ import type { App } from 'vue'
2
+ import AppBar from './AppBar.vue'
3
+
4
+ AppBar.install = function (app: App) {
5
+ app.component(AppBar.name, AppBar)
6
+ }
7
+
8
+ export const _AppBarComponent = AppBar
9
+
10
+ export default AppBar
@@ -0,0 +1,25 @@
1
+ export function positionValidator(position: string): boolean {
2
+ const validPositions = ['left', 'center', 'right']
3
+ return validPositions.includes(position)
4
+ }
5
+
6
+ export const props = {
7
+ color: {
8
+ type: String,
9
+ },
10
+ textColor: {
11
+ type: String,
12
+ },
13
+ title: {
14
+ type: String,
15
+ },
16
+ titlePosition: {
17
+ type: String,
18
+ default: 'left',
19
+ validator: positionValidator,
20
+ },
21
+ elevation: {
22
+ type: Boolean,
23
+ default: true,
24
+ },
25
+ }
@@ -0,0 +1,84 @@
1
+ <template>
2
+ <button
3
+ v-ripple="{ disabled: disabled || !ripple }"
4
+ class="var-site-button var-site--box"
5
+ :class="[
6
+ `var-site-button--${size}`,
7
+ block ? 'var-site--flex var-site-button--block' : 'var-site--inline-flex',
8
+ disabled ? 'var-site-button--disabled' : null,
9
+ text ? `var-site-button--text-${type}` : `var-site-button--${type}`,
10
+ text ? 'var-site-button--text' : 'var-elevation--1',
11
+ text && disabled ? 'var-site-button--text-disabled' : null,
12
+ round ? 'var-site-button--round' : null,
13
+ outline ? 'var-site-button--outline' : null,
14
+ ]"
15
+ :style="{
16
+ color: textColor,
17
+ background: color,
18
+ }"
19
+ :disabled="disabled"
20
+ @click="handleClick"
21
+ @touchstart="handleTouchstart"
22
+ >
23
+ <var-site-loading
24
+ class="var-site-button__loading"
25
+ :type="loadingType"
26
+ :size="loadingSize"
27
+ :radius="loadingRadius"
28
+ v-if="loading"
29
+ />
30
+ <div class="var-site-button__content" :class="[loading ? 'var-site-button--hidden' : null]">
31
+ <slot />
32
+ </div>
33
+ </button>
34
+ </template>
35
+
36
+ <script lang="ts">
37
+ import Ripple from '../ripple'
38
+ import Loading from '../loading'
39
+ import { defineComponent } from 'vue'
40
+ import { props } from './props'
41
+
42
+ export default defineComponent({
43
+ name: 'VarSiteButton',
44
+ components: {
45
+ [Loading.name]: Loading,
46
+ },
47
+ directives: { Ripple },
48
+ props,
49
+ setup(props) {
50
+ const handleClick = (e: Event) => {
51
+ const { loading, disabled, onClick } = props
52
+
53
+ if (loading || disabled) {
54
+ return
55
+ }
56
+
57
+ onClick?.(e)
58
+ }
59
+
60
+ const handleTouchstart = (e: Event) => {
61
+ const { loading, disabled, onTouchstart } = props
62
+
63
+ if (loading || disabled) {
64
+ return
65
+ }
66
+
67
+ onTouchstart?.(e)
68
+ }
69
+
70
+ return {
71
+ handleClick,
72
+ handleTouchstart,
73
+ }
74
+ },
75
+ })
76
+ </script>
77
+
78
+ <style lang="less">
79
+ @import '../styles/common';
80
+ @import '../styles/elevation';
81
+ @import '../ripple/ripple';
82
+ @import '../loading/loading';
83
+ @import './button';
84
+ </style>
@@ -0,0 +1,183 @@
1
+ @site-button-default-color: #f5f5f5;
2
+ @site-button-primary-color: var(--site-color-primary);
3
+ @site-button-danger-color: var(--site-color-danger);
4
+ @site-button-success-color: var(--site-color-success);
5
+ @site-button-warning-color: var(--site-color-warning);
6
+ @site-button-info-color: var(--site-color-info);
7
+ @site-button-disabled-color: var(--site-color-disabled);
8
+ @site-button-disabled-text-color: #bdbdbd;
9
+ @site-button-border-radius: 4px;
10
+ @site-button-mini-padding: 0 9px;
11
+ @site-button-small-padding: 0 11px;
12
+ @site-button-normal-padding: 0 15px;
13
+ @site-button-large-padding: 0 22px;
14
+ @site-button-round-padding: 6px;
15
+ @site-button-mini-height: 20px;
16
+ @site-button-small-height: 28px;
17
+ @site-button-normal-height: 36px;
18
+ @site-button-large-height: 44px;
19
+
20
+ :root {
21
+ --site-button-default-color: @site-button-default-color;
22
+ --site-button-primary-color: @site-button-primary-color;
23
+ --site-button-danger-color: @site-button-danger-color;
24
+ --site-button-success-color: @site-button-success-color;
25
+ --site-button-warning-color: @site-button-warning-color;
26
+ --site-button-info-color: @site-button-info-color;
27
+ --site-button-disabled-color: @site-button-disabled-color;
28
+ --site-button-disabled-text-color: @site-button-disabled-text-color;
29
+ --site-button-border-radius: @site-button-border-radius;
30
+ --site-button-mini-padding: @site-button-mini-padding;
31
+ --site-button-small-padding: @site-button-small-padding;
32
+ --site-button-normal-padding: @site-button-normal-padding;
33
+ --site-button-large-padding: @site-button-large-padding;
34
+ --site-button-round-padding: @site-button-round-padding;
35
+ --site-button-mini-height: @site-button-mini-height;
36
+ --site-button-small-height: @site-button-small-height;
37
+ --site-button-normal-height: @site-button-normal-height;
38
+ --site-button-large-height: @site-button-large-height;
39
+ }
40
+
41
+ .var-site-button {
42
+ position: relative;
43
+ justify-content: center;
44
+ align-items: center;
45
+ outline: none;
46
+ border: none;
47
+ line-height: 1.2;
48
+ border-radius: var(--site-button-border-radius);
49
+ user-select: none;
50
+ cursor: pointer;
51
+ font-family: inherit;
52
+ transition: box-shadow 0.2s;
53
+ will-change: box-shadow;
54
+ -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
55
+ white-space: nowrap;
56
+
57
+ &:active {
58
+ box-shadow: 0 3px 5px -1px var(--site-shadow-key-umbra-opacity), 0 5px 8px 0 var(--site-shadow-key-penumbra-opacity),
59
+ 0 1px 14px 0 var(--site-shadow-key-ambient-opacity);
60
+ }
61
+
62
+ &__loading {
63
+ position: absolute;
64
+ top: 50%;
65
+ left: 50%;
66
+ transform: translate(-50%, -50%);
67
+ }
68
+
69
+ &--default {
70
+ color: inherit;
71
+ background-color: var(--site-button-default-color);
72
+ }
73
+
74
+ &--primary {
75
+ color: #fff;
76
+ background-color: var(--site-button-primary-color);
77
+ }
78
+
79
+ &--info {
80
+ color: #fff;
81
+ background-color: var(--site-button-info-color);
82
+ }
83
+
84
+ &--success {
85
+ color: #fff;
86
+ background-color: var(--site-button-success-color);
87
+ }
88
+
89
+ &--warning {
90
+ color: #fff;
91
+ background-color: var(--site-button-warning-color);
92
+ }
93
+
94
+ &--danger {
95
+ color: #fff;
96
+ background-color: var(--site-button-danger-color);
97
+ }
98
+
99
+ &--disabled {
100
+ background-color: var(--site-button-disabled-color);
101
+ color: var(--site-button-disabled-text-color);
102
+ cursor: not-allowed;
103
+ box-shadow: none !important;
104
+ }
105
+
106
+ &--block {
107
+ width: 100%;
108
+ }
109
+
110
+ &--text {
111
+ background-color: transparent;
112
+
113
+ &:active {
114
+ box-shadow: none;
115
+ }
116
+ }
117
+
118
+ &--text-default {
119
+ color: inherit;
120
+ }
121
+
122
+ &--text-primary {
123
+ color: var(--site-button-primary-color);
124
+ }
125
+
126
+ &--text-info {
127
+ color: var(--site-button-info-color);
128
+ }
129
+
130
+ &--text-success {
131
+ color: var(--site-button-success-color);
132
+ }
133
+
134
+ &--text-warning {
135
+ color: var(--site-button-warning-color);
136
+ }
137
+
138
+ &--text-danger {
139
+ color: var(--site-button-danger-color);
140
+ }
141
+
142
+ &--text-disabled {
143
+ color: var(--site-button-disabled-text-color);
144
+ }
145
+
146
+ &--normal {
147
+ height: var(--site-button-normal-height);
148
+ padding: var(--site-button-normal-padding);
149
+ font-size: var(--site-font-size-md);
150
+ }
151
+
152
+ &--large {
153
+ height: var(--site-button-large-height);
154
+ padding: var(--site-button-large-padding);
155
+ font-size: var(--site-font-size-lg);
156
+ }
157
+
158
+ &--small {
159
+ height: var(--site-button-small-height);
160
+ padding: var(--site-button-small-padding);
161
+ font-size: var(--site-font-size-sm);
162
+ }
163
+
164
+ &--mini {
165
+ height: var(--site-button-mini-height);
166
+ padding: var(--site-button-mini-padding);
167
+ font-size: var(--site-font-size-xs);
168
+ }
169
+
170
+ &--round {
171
+ padding: var(--site-button-round-padding);
172
+ border-radius: 50%;
173
+ height: auto;
174
+ }
175
+
176
+ &--outline {
177
+ border: thin solid currentColor;
178
+ }
179
+
180
+ &--hidden {
181
+ opacity: 0;
182
+ }
183
+ }