@varlet/cli 1.27.20 → 2.0.0-alpha.1663742071515

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 (176) hide show
  1. package/LICENCE +1 -1
  2. package/lib/commands/commitLint.js +1 -1
  3. package/lib/commands/compile.d.ts +5 -3
  4. package/lib/commands/compile.js +2 -2
  5. package/lib/commands/create.d.ts +8 -3
  6. package/lib/commands/create.js +100 -51
  7. package/lib/commands/dev.d.ts +4 -2
  8. package/lib/commands/dev.js +3 -3
  9. package/lib/commands/gen.d.ts +8 -1
  10. package/lib/commands/gen.js +61 -33
  11. package/lib/commands/jest.js +11 -7
  12. package/lib/commands/release.d.ts +4 -2
  13. package/lib/commands/release.js +2 -2
  14. package/lib/commands/test.d.ts +7 -0
  15. package/lib/commands/test.js +26 -0
  16. package/lib/commands/useVite.d.ts +1 -0
  17. package/lib/commands/useVite.js +70 -0
  18. package/lib/commands/vite.d.ts +3 -0
  19. package/lib/commands/vite.js +69 -0
  20. package/lib/compiler/compileModule.js +9 -5
  21. package/lib/compiler/compileSFC.js +14 -11
  22. package/lib/compiler/compileScript.js +4 -12
  23. package/lib/compiler/compileStyle.d.ts +1 -1
  24. package/lib/compiler/compileStyle.js +7 -17
  25. package/lib/compiler/compileTypes.js +4 -7
  26. package/lib/config/jest.config.js +1 -0
  27. package/lib/config/vite.config.js +1 -1
  28. package/lib/config/vitest.config.d.ts +2 -0
  29. package/lib/config/vitest.config.js +28 -0
  30. package/lib/index.js +22 -3
  31. package/lib/shared/constant.js +1 -1
  32. package/lib/shared/logger.d.ts +1 -0
  33. package/lib/shared/logger.js +3 -0
  34. package/package.json +16 -12
  35. package/site/components/button/Button.vue +45 -23
  36. package/site/components/button/button.less +6 -6
  37. package/site/components/button/props.ts +10 -2
  38. package/site/components/cell/Cell.vue +24 -12
  39. package/site/components/cell/cell.less +11 -7
  40. package/site/components/cell/props.ts +2 -2
  41. package/site/components/code-example/CodeExample.vue +17 -23
  42. package/site/components/context/index.ts +4 -0
  43. package/site/components/context/lock.ts +30 -41
  44. package/site/components/icon/Icon.vue +16 -9
  45. package/site/components/loading/Loading.vue +54 -25
  46. package/site/components/loading/loading.less +120 -35
  47. package/site/components/loading/props.ts +7 -2
  48. package/site/components/popup/Popup.tsx +102 -0
  49. package/site/components/popup/index.ts +10 -0
  50. package/site/components/popup/popup.less +125 -0
  51. package/site/components/popup/props.ts +63 -0
  52. package/site/components/progress/Progress.vue +28 -24
  53. package/site/components/progress/progress.less +16 -13
  54. package/site/components/progress/props.ts +1 -1
  55. package/site/components/ripple/index.ts +28 -7
  56. package/site/components/ripple/ripple.less +3 -0
  57. package/site/components/snackbar/Snackbar.vue +10 -7
  58. package/site/components/snackbar/core.vue +37 -22
  59. package/site/components/snackbar/index.tsx +14 -14
  60. package/site/components/snackbar/props.ts +10 -7
  61. package/site/components/utils/components.ts +49 -1
  62. package/site/components/utils/elements.ts +17 -0
  63. package/site/mobile/App.vue +42 -42
  64. package/site/mobile/components/AppHome.vue +1 -1
  65. package/site/mobile/components/app-bar/AppBar.vue +17 -21
  66. package/site/mobile/components/app-bar/appBar.less +2 -1
  67. package/site/mobile/main.ts +6 -2
  68. package/site/pc/Layout.vue +93 -67
  69. package/site/pc/components/AnimationBox.vue +3 -15
  70. package/site/pc/components/AppHeader.vue +110 -97
  71. package/site/pc/components/AppMobile.vue +8 -2
  72. package/site/pc/components/AppSidebar.vue +19 -10
  73. package/site/pc/components/LogoAnimation.vue +29 -31
  74. package/site/pc/floating.ts +3 -3
  75. package/site/pc/main.ts +6 -0
  76. package/site/pc/pages/index/index.less +142 -197
  77. package/site/pc/pages/index/index.vue +65 -80
  78. package/site/pc/pages/index/locale/en-US.ts +1 -5
  79. package/site/pc/pages/index/locale/zh-CN.ts +1 -5
  80. package/site/useProgress.ts +14 -17
  81. package/site/utils.ts +32 -20
  82. package/template/create/__tests__/index.spec.ejs +8 -0
  83. package/template/create/docs/en-US.md +0 -0
  84. package/template/create/docs/zh-CN.md +0 -0
  85. package/template/create/example/index.ejs +15 -0
  86. package/template/create/example/locale/en-US.ts +3 -0
  87. package/{generators/config/i18n/sfc/src/button → template/create}/example/locale/index.ts +0 -0
  88. package/template/create/example/locale/zh-CN.ts +3 -0
  89. package/template/create/index.ejs +12 -0
  90. package/template/create/less.ejs +3 -0
  91. package/template/create/props.ts +1 -0
  92. package/template/create/tsx.ejs +13 -0
  93. package/template/create/vue.ejs +17 -0
  94. package/{generators → template/generators}/base/.prettierignore +0 -0
  95. package/{generators → template/generators}/base/.prettierrc +0 -0
  96. package/{generators → template/generators}/base/README.md +0 -0
  97. package/{generators → template/generators}/base/babel.config.js +0 -0
  98. package/{generators → template/generators}/base/public/highlight.css +0 -0
  99. package/{generators → template/generators}/base/public/logo.svg +0 -0
  100. package/{generators → template/generators}/base/shims/shims-md.d.ts +0 -0
  101. package/{generators → template/generators}/base/shims/shims-vue.d.ts +0 -0
  102. package/{generators → template/generators}/base/tsconfig.json +0 -0
  103. package/{generators → template/generators}/config/default/base/docs/home.zh-CN.md +0 -0
  104. package/{generators → template/generators}/config/default/base/package.json +1 -1
  105. package/{generators → template/generators}/config/default/base/types/basicComponent.d.ts +0 -0
  106. package/{generators → template/generators}/config/default/base/types/button.d.ts +0 -0
  107. package/{generators → template/generators}/config/default/base/types/index.d.ts +0 -0
  108. package/{generators → template/generators}/config/default/base/varlet.config.js +1 -1
  109. package/{generators → template/generators}/config/default/sfc/src/button/Button.vue +6 -6
  110. package/{generators → template/generators}/config/default/sfc/src/button/__tests__/index.spec.js +0 -0
  111. package/{generators/config/default/tsx → template/generators/config/default/sfc}/src/button/button.less +1 -1
  112. package/{generators → template/generators}/config/default/sfc/src/button/docs/zh-CN.md +0 -0
  113. package/{generators → template/generators}/config/default/sfc/src/button/example/BasicUse.vue +0 -0
  114. package/{generators → template/generators}/config/default/sfc/src/button/example/ModifyColor.vue +0 -0
  115. package/{generators → template/generators}/config/default/sfc/src/button/example/index.vue +2 -2
  116. package/{generators → template/generators}/config/default/sfc/src/button/index.ts +0 -0
  117. package/{generators → template/generators}/config/default/tsx/src/button/Button.tsx +11 -13
  118. package/{generators → template/generators}/config/default/tsx/src/button/__tests__/index.spec.js +0 -0
  119. package/{generators/config/i18n → template/generators/config/default}/tsx/src/button/button.less +1 -1
  120. package/{generators → template/generators}/config/default/tsx/src/button/docs/zh-CN.md +0 -0
  121. package/{generators → template/generators}/config/default/tsx/src/button/example/BasicUse.vue +0 -0
  122. package/{generators → template/generators}/config/default/tsx/src/button/example/ModifyColor.vue +0 -0
  123. package/{generators → template/generators}/config/default/tsx/src/button/example/index.vue +2 -2
  124. package/{generators → template/generators}/config/default/tsx/src/button/index.ts +0 -0
  125. package/{generators → template/generators}/config/i18n/base/docs/home.en-US.md +0 -0
  126. package/{generators → template/generators}/config/i18n/base/docs/home.zh-CN.md +0 -0
  127. package/{generators → template/generators}/config/i18n/base/package.json +1 -1
  128. package/{generators → template/generators}/config/i18n/base/types/basicComponent.d.ts +0 -0
  129. package/{generators → template/generators}/config/i18n/base/types/button.d.ts +0 -0
  130. package/{generators → template/generators}/config/i18n/base/types/index.d.ts +0 -0
  131. package/{generators → template/generators}/config/i18n/base/types/locale.d.ts +0 -0
  132. package/{generators → template/generators}/config/i18n/base/varlet.config.js +3 -3
  133. package/{generators → template/generators}/config/i18n/sfc/src/button/Button.vue +7 -7
  134. package/{generators → template/generators}/config/i18n/sfc/src/button/__tests__/index.spec.js +0 -0
  135. package/{generators → template/generators}/config/i18n/sfc/src/button/button.less +1 -1
  136. package/{generators → template/generators}/config/i18n/sfc/src/button/docs/en-US.md +0 -0
  137. package/{generators → template/generators}/config/i18n/sfc/src/button/docs/zh-CN.md +0 -0
  138. package/{generators → template/generators}/config/i18n/sfc/src/button/example/BasicUse.vue +0 -0
  139. package/{generators → template/generators}/config/i18n/sfc/src/button/example/ModifyColor.vue +0 -0
  140. package/{generators → template/generators}/config/i18n/sfc/src/button/example/index.vue +1 -1
  141. package/{generators/config/i18n/tsx → template/generators/config/i18n/sfc}/src/button/example/locale/en-US.ts +1 -1
  142. package/{generators/config/i18n/tsx → template/generators/config/i18n/sfc}/src/button/example/locale/index.ts +0 -0
  143. package/{generators/config/i18n/tsx → template/generators/config/i18n/sfc}/src/button/example/locale/zh-CN.ts +1 -1
  144. package/{generators → template/generators}/config/i18n/sfc/src/button/index.ts +0 -0
  145. package/{generators → template/generators}/config/i18n/sfc/src/locale/__tests__/index.spec.js +0 -0
  146. package/{generators → template/generators}/config/i18n/sfc/src/locale/docs/en-US.md +0 -0
  147. package/{generators → template/generators}/config/i18n/sfc/src/locale/docs/zh-CN.md +0 -0
  148. package/{generators → template/generators}/config/i18n/sfc/src/locale/en-US.d.ts +0 -0
  149. package/{generators/config/i18n/tsx → template/generators/config/i18n/sfc}/src/locale/en-US.ts +1 -1
  150. package/{generators → template/generators}/config/i18n/sfc/src/locale/index.ts +0 -0
  151. package/{generators → template/generators}/config/i18n/sfc/src/locale/zh-CN.d.ts +0 -0
  152. package/{generators/config/i18n/tsx → template/generators/config/i18n/sfc}/src/locale/zh-CN.ts +1 -1
  153. package/{generators → template/generators}/config/i18n/tsx/src/button/Button.tsx +12 -14
  154. package/{generators → template/generators}/config/i18n/tsx/src/button/__tests__/index.spec.js +0 -0
  155. package/{generators/config/default/sfc → template/generators/config/i18n/tsx}/src/button/button.less +1 -1
  156. package/{generators → template/generators}/config/i18n/tsx/src/button/docs/en-US.md +0 -0
  157. package/{generators → template/generators}/config/i18n/tsx/src/button/docs/zh-CN.md +0 -0
  158. package/{generators → template/generators}/config/i18n/tsx/src/button/example/BasicUse.vue +0 -0
  159. package/{generators → template/generators}/config/i18n/tsx/src/button/example/ModifyColor.vue +0 -0
  160. package/{generators → template/generators}/config/i18n/tsx/src/button/example/index.vue +1 -1
  161. package/{generators/config/i18n/sfc → template/generators/config/i18n/tsx}/src/button/example/locale/en-US.ts +1 -1
  162. package/template/generators/config/i18n/tsx/src/button/example/locale/index.ts +23 -0
  163. package/{generators/config/i18n/sfc → template/generators/config/i18n/tsx}/src/button/example/locale/zh-CN.ts +1 -1
  164. package/{generators → template/generators}/config/i18n/tsx/src/button/index.ts +0 -0
  165. package/{generators → template/generators}/config/i18n/tsx/src/locale/__tests__/index.spec.js +0 -0
  166. package/{generators → template/generators}/config/i18n/tsx/src/locale/docs/en-US.md +0 -0
  167. package/{generators → template/generators}/config/i18n/tsx/src/locale/docs/zh-CN.md +0 -0
  168. package/{generators → template/generators}/config/i18n/tsx/src/locale/en-US.d.ts +0 -0
  169. package/{generators/config/i18n/sfc → template/generators/config/i18n/tsx}/src/locale/en-US.ts +1 -1
  170. package/{generators → template/generators}/config/i18n/tsx/src/locale/index.ts +0 -0
  171. package/{generators → template/generators}/config/i18n/tsx/src/locale/zh-CN.d.ts +0 -0
  172. package/{generators/config/i18n/sfc → template/generators/config/i18n/tsx}/src/locale/zh-CN.ts +1 -1
  173. package/varlet.default.config.js +137 -15
  174. package/site/mobile/components/styles/common.less +0 -64
  175. package/site/mobile/components/styles/elevation.less +0 -126
  176. package/site/mobile/components/styles/var.less +0 -27
@@ -0,0 +1,125 @@
1
+ @site-popup-overlay-background-color: rgba(0, 0, 0, 0.6);
2
+ @site-popup-content-background-color: #fff;
3
+
4
+ :root {
5
+ --site-popup-overlay-background-color: @site-popup-overlay-background-color;
6
+ --site-popup-content-background-color: @site-popup-content-background-color;
7
+ }
8
+
9
+ .var-site {
10
+ &-fade-enter-from,
11
+ &-fade-leave-to {
12
+ opacity: 0;
13
+ }
14
+ &-fade-enter-active,
15
+ &-fade-leave-active {
16
+ transition: opacity 0.25s;
17
+ }
18
+
19
+ &-pop-center-enter-from,
20
+ &-pop-center-leave-to {
21
+ transform: scale(0.3);
22
+ }
23
+ &-pop-center-enter-active,
24
+ &-pop-center-leave-active {
25
+ transition: all 0.25s;
26
+ }
27
+
28
+ &-pop-bottom-enter-from,
29
+ &-pop-bottom-leave-to {
30
+ transform: translateY(100%);
31
+ }
32
+ &-pop-bottom-enter-active,
33
+ &-pop-bottom-leave-active {
34
+ transition: all 0.25s;
35
+ }
36
+
37
+ &-pop-top-enter-from,
38
+ &-pop-top-leave-to {
39
+ transform: translateY(-100%);
40
+ }
41
+ &-pop-top-enter-active,
42
+ &-pop-top-leave-active {
43
+ transition: all 0.25s;
44
+ }
45
+
46
+ &-pop-left-enter-from,
47
+ &-pop-left-leave-to {
48
+ transform: translateX(-100%);
49
+ }
50
+ &-pop-left-enter-active,
51
+ &-pop-left-leave-active {
52
+ transition: all 0.25s;
53
+ }
54
+
55
+ &-pop-right-enter-from,
56
+ &-pop-right-leave-to {
57
+ transform: translateX(100%);
58
+ }
59
+ &-pop-right-enter-active,
60
+ &-pop-right-leave-active {
61
+ transition: all 0.25s;
62
+ }
63
+ }
64
+
65
+ .var-site-popup {
66
+ display: flex;
67
+ justify-content: center;
68
+ align-items: center;
69
+ position: fixed;
70
+ top: 0;
71
+ right: 0;
72
+ bottom: 0;
73
+ left: 0;
74
+
75
+ &__overlay {
76
+ display: flex;
77
+ justify-content: center;
78
+ align-items: center;
79
+ position: fixed;
80
+ top: 0;
81
+ right: 0;
82
+ bottom: 0;
83
+ left: 0;
84
+ background-color: var(--site-popup-overlay-background-color);
85
+ transition: all 0.25s;
86
+ }
87
+
88
+ &__content {
89
+ overflow: auto;
90
+ background-color: var(--site-popup-content-background-color);
91
+ transition: all 0.25s;
92
+ }
93
+
94
+ &--center {
95
+ position: relative;
96
+ }
97
+
98
+ &--bottom {
99
+ min-width: 100%;
100
+ position: absolute;
101
+ left: 0;
102
+ bottom: 0;
103
+ }
104
+
105
+ &--top {
106
+ min-width: 100%;
107
+ position: absolute;
108
+ left: 0;
109
+ top: 0;
110
+ }
111
+
112
+ &--left {
113
+ min-height: 100%;
114
+ position: absolute;
115
+ left: 0;
116
+ top: 0;
117
+ }
118
+
119
+ &--right {
120
+ min-height: 100%;
121
+ position: absolute;
122
+ right: 0;
123
+ top: 0;
124
+ }
125
+ }
@@ -0,0 +1,63 @@
1
+ import type { PropType, TeleportProps } from 'vue'
2
+
3
+ function positionValidator(position: string): boolean {
4
+ return ['top', 'bottom', 'right', 'left', 'center'].includes(position)
5
+ }
6
+
7
+ export const props = {
8
+ show: {
9
+ type: Boolean,
10
+ default: false,
11
+ },
12
+ position: {
13
+ type: String as PropType<'top' | 'bottom' | 'right' | 'left' | 'center'>,
14
+ default: 'center',
15
+ validator: positionValidator,
16
+ },
17
+ transition: {
18
+ type: String,
19
+ },
20
+ overlay: {
21
+ type: Boolean,
22
+ default: true,
23
+ },
24
+ overlayClass: {
25
+ type: String,
26
+ },
27
+ overlayStyle: {
28
+ type: Object,
29
+ },
30
+ lockScroll: {
31
+ type: Boolean,
32
+ default: true,
33
+ },
34
+ closeOnClickOverlay: {
35
+ type: Boolean,
36
+ default: true,
37
+ },
38
+ teleport: {
39
+ type: String as PropType<TeleportProps['to']>,
40
+ },
41
+ onOpen: {
42
+ type: Function as PropType<() => void>,
43
+ },
44
+ onOpened: {
45
+ type: Function as PropType<() => void>,
46
+ },
47
+ onClose: {
48
+ type: Function as PropType<() => void>,
49
+ },
50
+ onClosed: {
51
+ type: Function as PropType<() => void>,
52
+ },
53
+ onClickOverlay: {
54
+ type: Function as PropType<() => void>,
55
+ },
56
+ // internal for Dialog
57
+ onRouteChange: {
58
+ type: Function as PropType<() => void>,
59
+ },
60
+ 'onUpdate:show': {
61
+ type: Function as PropType<(show: boolean) => void>,
62
+ },
63
+ }
@@ -1,46 +1,42 @@
1
1
  <template>
2
- <div class="var-site-progress">
3
- <div class="var-site-progress-linear" v-if="mode === 'linear'">
4
- <div class="var-site-progress-linear__block" :style="{ height: `${lineWidth}px` }" v-bind="$attrs">
5
- <div class="var-site-progress-linear__background" v-if="track" :style="{ background: trackColor }"></div>
2
+ <div :class="n()">
3
+ <div :class="n('linear')" v-if="mode === 'linear'">
4
+ <div :class="n('linear-block')" :style="{ height: toSizeUnit(lineWidth) }" v-bind="$attrs">
5
+ <div :class="n('linear-background')" v-if="track" :style="{ background: trackColor }"></div>
6
6
  <div
7
- :class="`var-site-progress-linear__certain${ripple ? ' var-site-progress-linear__ripple' : ''}`"
7
+ :class="classes(n('linear-certain'), [ripple, n('linear-ripple')])"
8
8
  :style="{ background: color, width: linearProps.width }"
9
9
  ></div>
10
10
  </div>
11
- <div class="var-site-progress-linear__label" v-bind="$attrs" v-if="label">
11
+ <div :class="n('linear-label')" v-bind="$attrs" v-if="label">
12
12
  <slot>
13
13
  {{ linearProps.roundValue }}
14
14
  </slot>
15
15
  </div>
16
16
  </div>
17
17
 
18
- <div class="var-site-progress-circle" v-if="mode === 'circle'" :style="{ width: `${size}px`, height: `${size}px` }">
19
- <svg
20
- class="var-site-progress-circle__svg"
21
- :style="{ transform: `rotate(${rotate - 90}deg)` }"
22
- :viewBox="circleProps.viewBox"
23
- >
18
+ <div :class="n('circle')" v-if="mode === 'circle'" :style="{ width: toSizeUnit(size), height: toSizeUnit(size) }">
19
+ <svg :class="n('circle-svg')" :style="{ transform: `rotate(${rotate - 90}deg)` }" :viewBox="circleProps.viewBox">
24
20
  <circle
25
21
  v-if="track"
26
- class="var-site-progress-circle__background"
27
- :cx="size / 2"
28
- :cy="size / 2"
22
+ :class="n('circle-background')"
23
+ :cx="multiplySizeUnit(size, 0.5)"
24
+ :cy="multiplySizeUnit(size, 0.5)"
29
25
  :r="circleProps.radius"
30
26
  fill="transparent"
31
- :stroke-width="lineWidth"
27
+ :stroke-width="toSizeUnit(lineWidth)"
32
28
  :style="{
33
29
  strokeDasharray: circleProps.perimeter,
34
30
  stroke: trackColor,
35
31
  }"
36
32
  ></circle>
37
33
  <circle
38
- class="var-site-progress-circle__certain"
39
- :cx="size / 2"
40
- :cy="size / 2"
34
+ :class="n('circle-certain')"
35
+ :cx="multiplySizeUnit(size, 0.5)"
36
+ :cy="multiplySizeUnit(size, 0.5)"
41
37
  :r="circleProps.radius"
42
38
  fill="transparent"
43
- :stroke-width="lineWidth"
39
+ :stroke-width="toSizeUnit(lineWidth)"
44
40
  :style="{
45
41
  strokeDasharray: circleProps.strokeDasharray,
46
42
  stroke: color,
@@ -48,7 +44,7 @@
48
44
  ></circle>
49
45
  </svg>
50
46
 
51
- <div class="var-site-progress-circle__label" v-if="label" v-bind="$attrs">
47
+ <div :class="n('circle-label')" v-if="label" v-bind="$attrs">
52
48
  <slot>
53
49
  {{ circleProps.roundValue }}
54
50
  </slot>
@@ -61,9 +57,13 @@
61
57
  import { defineComponent, computed } from 'vue'
62
58
  import { props } from './props'
63
59
  import { toNumber } from '@varlet/shared'
60
+ import { toSizeUnit, multiplySizeUnit, toPxNum } from '../utils/elements'
61
+ import { createNamespace } from '../utils/components'
62
+
63
+ const { n, classes } = createNamespace('progress')
64
64
 
65
65
  export default defineComponent({
66
- name: 'VarSiteProgress',
66
+ name: 'VarProgress',
67
67
  inheritAttrs: false,
68
68
  props,
69
69
  setup(props) {
@@ -80,9 +80,9 @@ export default defineComponent({
80
80
 
81
81
  const circleProps = computed(() => {
82
82
  const { size, lineWidth, value } = props
83
- const viewBox = `0 0 ${size} ${size}`
83
+ const viewBox = `0 0 ${toPxNum(size)} ${toPxNum(size)}`
84
84
  const roundValue = toNumber(value) > 100 ? 100 : Math.round(toNumber(value))
85
- const radius = (size - toNumber(lineWidth)) / 2
85
+ const radius = (toPxNum(size) - toPxNum(lineWidth)) / 2
86
86
  const perimeter = 2 * Math.PI * radius
87
87
  const strokeDasharray = `${(roundValue / 100) * perimeter}, ${perimeter}`
88
88
 
@@ -95,6 +95,10 @@ export default defineComponent({
95
95
  }
96
96
  })
97
97
  return {
98
+ n,
99
+ classes,
100
+ toSizeUnit,
101
+ multiplySizeUnit,
98
102
  linearProps,
99
103
  circleProps,
100
104
  }
@@ -1,7 +1,7 @@
1
1
  @site-progress-font-size: var(--site-font-size-sm);
2
2
  @site-progress-ripple-color: #fff;
3
3
  @site-progress-track-color: #d8d8d8;
4
- @site-progress-background: var(--site-color-primary);
4
+ @site-progress-background: var(--color-primary);
5
5
 
6
6
  :root {
7
7
  --site-progress-font-size: @site-progress-font-size;
@@ -14,23 +14,24 @@
14
14
  position: relative;
15
15
  font-size: var(--site-progress-font-size);
16
16
 
17
- &-linear {
17
+ &__linear {
18
18
  display: flex;
19
19
  align-items: center;
20
20
 
21
- &__block {
21
+ &-block {
22
22
  flex: 1;
23
23
  position: relative;
24
24
  overflow: hidden;
25
+ height: 4px;
25
26
  }
26
27
 
27
- &__background,
28
- &__certain {
28
+ &-background,
29
+ &-certain {
29
30
  width: 100%;
30
31
  height: 100%;
31
32
  }
32
33
 
33
- &__ripple {
34
+ &-ripple {
34
35
  &::after {
35
36
  position: absolute;
36
37
  width: 0;
@@ -42,11 +43,11 @@
42
43
  }
43
44
  }
44
45
 
45
- &__background {
46
+ &-background {
46
47
  background-color: var(--site-progress-track-color);
47
48
  }
48
49
 
49
- &__certain {
50
+ &-certain {
50
51
  position: absolute;
51
52
  background-color: var(--site-progress-background);
52
53
  top: 0;
@@ -54,7 +55,7 @@
54
55
  transition: all 0.2s, background-color 0.8s;
55
56
  }
56
57
 
57
- &__label {
58
+ &-label {
58
59
  margin-left: 8px;
59
60
  flex: 0;
60
61
  }
@@ -75,20 +76,22 @@
75
76
  }
76
77
  }
77
78
 
78
- &-circle {
79
+ &__circle {
79
80
  position: relative;
81
+ width: 40px;
82
+ height: 40px;
80
83
 
81
- &__background {
84
+ &-background {
82
85
  stroke: var(--site-progress-track-color);
83
86
  }
84
87
 
85
- &__certain {
88
+ &-certain {
86
89
  transition: all 0.2s;
87
90
  stroke: var(--site-progress-background);
88
91
  position: absolute;
89
92
  }
90
93
 
91
- &__label {
94
+ &-label {
92
95
  position: absolute;
93
96
  left: 50%;
94
97
  top: 50%;
@@ -39,7 +39,7 @@ export const props = {
39
39
  },
40
40
  // circle 的尺寸
41
41
  size: {
42
- type: Number,
42
+ type: [Number, String],
43
43
  default: 40,
44
44
  },
45
45
  // circle的原点
@@ -1,9 +1,13 @@
1
1
  import context from '../context'
2
2
  import './ripple.less'
3
3
  import '../styles/common.less'
4
+ import { supportTouch } from '../utils/elements'
5
+ import { createNamespace } from '../utils/components'
4
6
  import type { Directive, Plugin, App } from 'vue'
5
7
  import type { DirectiveBinding } from '@vue/runtime-core'
6
8
 
9
+ const { n } = createNamespace('ripple')
10
+
7
11
  interface RippleStyles {
8
12
  x: number
9
13
  y: number
@@ -68,12 +72,12 @@ function createRipple(this: RippleHTMLElement, event: TouchEvent) {
68
72
 
69
73
  const { x, y, centerX, centerY, size }: RippleStyles = computeRippleStyles(this, event)
70
74
  const ripple: RippleHTMLElement = document.createElement('div')
71
- ripple.classList.add('var-site-ripple')
75
+ ripple.classList.add(n())
72
76
  ripple.style.opacity = `0`
73
77
  ripple.style.transform = `translate(${x}px, ${y}px) scale3d(.3, .3, .3)`
74
78
  ripple.style.width = `${size}px`
75
79
  ripple.style.height = `${size}px`
76
- ripple.style.backgroundColor = _ripple.color ?? 'currentColor'
80
+ _ripple.color && (ripple.style.backgroundColor = _ripple.color)
77
81
  ripple.dataset.createdAt = String(performance.now())
78
82
 
79
83
  setStyles(this)
@@ -93,7 +97,7 @@ function removeRipple(this: RippleHTMLElement) {
93
97
  const _ripple = this._ripple as RippleOptions
94
98
 
95
99
  const task = () => {
96
- const ripples: NodeListOf<RippleHTMLElement> = this.querySelectorAll('.var-site-ripple')
100
+ const ripples: NodeListOf<RippleHTMLElement> = this.querySelectorAll(`.${n()}`)
97
101
  if (!ripples.length) {
98
102
  return
99
103
  }
@@ -113,6 +117,11 @@ function removeRipple(this: RippleHTMLElement) {
113
117
 
114
118
  function forbidRippleTask(this: RippleHTMLElement) {
115
119
  const _ripple = this._ripple as RippleOptions
120
+
121
+ if (!supportTouch()) {
122
+ return
123
+ }
124
+
116
125
  if (!_ripple.touchmoveForbid) {
117
126
  return
118
127
  }
@@ -145,11 +154,23 @@ function unmounted(el: RippleHTMLElement) {
145
154
  }
146
155
 
147
156
  function updated(el: RippleHTMLElement, binding: DirectiveBinding<RippleOptions>) {
148
- el._ripple = {
149
- ...el._ripple,
150
- ...(binding.value ?? {}),
157
+ const newBinding = {
151
158
  touchmoveForbid: binding.value?.touchmoveForbid ?? context.touchmoveForbid,
152
- tasker: null,
159
+ color: binding.value?.color,
160
+ disabled: binding.value?.disabled,
161
+ }
162
+
163
+ const diff =
164
+ newBinding.touchmoveForbid !== el._ripple?.touchmoveForbid ||
165
+ newBinding.color !== el._ripple?.color ||
166
+ newBinding.disabled !== el._ripple?.disabled
167
+
168
+ if (diff) {
169
+ el._ripple = {
170
+ tasker: newBinding.disabled ? null : el._ripple?.tasker,
171
+ removeRipple: el._ripple?.removeRipple,
172
+ ...newBinding,
173
+ }
153
174
  }
154
175
  }
155
176
 
@@ -1,7 +1,9 @@
1
1
  @site-ripple-cubic-bezier: cubic-bezier(0.68, 0.01, 0.62, 0.6);
2
+ @site-ripple-color: currentColor;
2
3
 
3
4
  :root {
4
5
  --site-ripple-cubic-bezier: @site-ripple-cubic-bezier;
6
+ --site-ripple-color: @site-ripple-color;
5
7
  }
6
8
 
7
9
  .var-site-ripple {
@@ -14,4 +16,5 @@
14
16
  will-change: transform, opacity;
15
17
  pointer-events: none;
16
18
  z-index: 100;
19
+ background-color: var(--site-ripple-color);
17
20
  }
@@ -1,32 +1,35 @@
1
1
  <template>
2
2
  <teleport :to="teleport" :disabled="disabled">
3
- <transition name="var-site-snackbar-fade" @after-enter="onOpened" @after-leave="onClosed">
4
- <var-site-snackbar-core v-bind="$props" class="var-site-snackbar-transition">
3
+ <transition :name="`${n()}-fade`" @after-enter="onOpened" @after-leave="onClosed">
4
+ <var-snackbar-core v-bind="$props" :class="n('transition')">
5
5
  <slot>{{ content }}</slot>
6
6
  <template #action>
7
7
  <slot name="action" />
8
8
  </template>
9
- </var-site-snackbar-core>
9
+ </var-snackbar-core>
10
10
  </transition>
11
11
  </teleport>
12
12
  </template>
13
13
 
14
14
  <script>
15
- import VarSiteSnackbarCore from './core'
16
15
  import { defineComponent } from 'vue'
17
- import { useTeleport } from '../utils/components'
16
+ import VarSnackbarCore from './core'
17
+ import { createNamespace, useTeleport } from '../utils/components'
18
18
  import { props } from './props'
19
19
 
20
+ const { n } = createNamespace('snackbar')
21
+
20
22
  export default defineComponent({
21
- name: 'VarSiteSnackbar',
23
+ name: 'VarSnackbar',
22
24
  components: {
23
- VarSiteSnackbarCore,
25
+ VarSnackbarCore,
24
26
  },
25
27
  props,
26
28
  setup() {
27
29
  const { disabled } = useTeleport()
28
30
 
29
31
  return {
32
+ n,
30
33
  disabled,
31
34
  }
32
35
  },
@@ -1,12 +1,29 @@
1
1
  <template>
2
- <div class="var-site-snackbar" :style="{ pointerEvents: isForbidClick ? 'auto' : 'none', zIndex }" v-show="show">
3
- <div :class="snackbarClass" :style="{ zIndex }">
4
- <div class="var-site-snackbar__content" :class="[contentClass]">
2
+ <div :class="n()" :style="{ pointerEvents: isForbidClick ? 'auto' : 'none', zIndex }" v-show="show">
3
+ <div
4
+ :class="
5
+ classes(
6
+ n('wrapper'),
7
+ n(`wrapper-${position}`),
8
+ 'var-site-elevation--4',
9
+ [vertical, n('vertical')],
10
+ [type && SNACKBAR_TYPE.includes(type), n(`wrapper-${type}`)]
11
+ )
12
+ "
13
+ :style="{ zIndex }"
14
+ >
15
+ <div :class="[n('content'), contentClass]">
5
16
  <slot>{{ content }}</slot>
6
17
  </div>
7
- <div class="var-site-snackbar__action">
8
- <var-site-icon v-if="iconName" :name="iconName" />
9
- <var-site-loading v-if="type === 'loading'" :type="loadingType" :size="loadingSize" />
18
+ <div :class="n('action')">
19
+ <var-icon v-if="iconName" :name="iconName" />
20
+ <var-loading
21
+ v-if="type === 'loading'"
22
+ :type="loadingType"
23
+ :size="loadingSize"
24
+ :color="loadingColor"
25
+ :radius="loadingRadius"
26
+ />
10
27
  <slot name="action" />
11
28
  </div>
12
29
  </div>
@@ -15,14 +32,17 @@
15
32
 
16
33
  <script lang="ts">
17
34
  import { defineComponent, watch, ref, onMounted, computed } from 'vue'
18
- import VarSiteLoading from '../loading'
19
- import VarSiteIcon from '../icon'
35
+ import VarLoading from '../loading'
36
+ import VarIcon from '../icon'
20
37
  import { useZIndex } from '../context/zIndex'
21
38
  import { props } from './props'
22
39
  import { useLock } from '../context/lock'
23
40
  import { SNACKBAR_TYPE } from './index'
24
41
  import type { Ref, ComputedRef } from 'vue'
25
42
  import type { SnackbarType } from './index'
43
+ import { createNamespace } from '../utils/components'
44
+
45
+ const { n, classes } = createNamespace('snackbar')
26
46
 
27
47
  const ICON_TYPE_DICT: Record<SnackbarType, string> = {
28
48
  success: 'checkbox-marked-circle',
@@ -35,25 +55,18 @@ const ICON_TYPE_DICT: Record<SnackbarType, string> = {
35
55
  export default defineComponent({
36
56
  name: 'VarSiteSnackbarCore',
37
57
  components: {
38
- VarSiteLoading,
39
- VarSiteIcon,
58
+ VarLoading,
59
+ VarIcon,
40
60
  },
41
61
  props,
42
62
  setup(props) {
43
63
  const timer: Ref = ref(null)
44
64
  const { zIndex } = useZIndex(() => props.show, 1)
45
65
 
46
- useLock(props, 'show', 'lockScroll')
47
-
48
- const snackbarClass: ComputedRef<string> = computed(() => {
49
- const { position, vertical, type } = props
50
-
51
- const baseClass = `var-site-snackbar__wrapper var-site-snackbar__wrapper-${position} var-site-elevation--4`
52
- const verticalClass = vertical ? ' var-site-snackbar__vertical' : ''
53
- const typeClass = type && SNACKBAR_TYPE.includes(type) ? ` var-site-snackbar__wrapper-${type}` : ''
54
-
55
- return `${baseClass}${verticalClass}${typeClass}`
56
- })
66
+ useLock(
67
+ () => props.show,
68
+ () => props.lockScroll
69
+ )
57
70
 
58
71
  const isForbidClick: ComputedRef<boolean> = computed(() => props.type === 'loading' || props.forbidClick)
59
72
 
@@ -98,8 +111,10 @@ export default defineComponent({
98
111
  })
99
112
 
100
113
  return {
114
+ SNACKBAR_TYPE,
115
+ n,
116
+ classes,
101
117
  zIndex,
102
- snackbarClass,
103
118
  iconName,
104
119
  isForbidClick,
105
120
  }