@varlet/cli 1.27.20 → 2.0.0-alpha.1663499244572

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 (232) hide show
  1. package/LICENCE +21 -21
  2. package/README.en-US.md +401 -401
  3. package/README.md +396 -396
  4. package/lib/commands/build.d.ts +1 -1
  5. package/lib/commands/build.js +18 -67
  6. package/lib/commands/changelog.d.ts +6 -6
  7. package/lib/commands/changelog.js +26 -27
  8. package/lib/commands/commitLint.d.ts +1 -1
  9. package/lib/commands/commitLint.js +50 -21
  10. package/lib/commands/compile.d.ts +7 -5
  11. package/lib/commands/compile.js +43 -119
  12. package/lib/commands/create.d.ts +8 -3
  13. package/lib/commands/create.js +90 -132
  14. package/lib/commands/dev.d.ts +5 -3
  15. package/lib/commands/dev.js +44 -123
  16. package/lib/commands/gen.d.ts +8 -1
  17. package/lib/commands/gen.js +85 -112
  18. package/lib/commands/lint.d.ts +1 -1
  19. package/lib/commands/lint.js +48 -123
  20. package/lib/commands/preview.d.ts +1 -1
  21. package/lib/commands/preview.js +23 -74
  22. package/lib/commands/release.d.ts +5 -3
  23. package/lib/commands/release.js +132 -270
  24. package/lib/commands/test.d.ts +7 -0
  25. package/lib/commands/test.js +26 -0
  26. package/lib/commands/vite.d.ts +3 -0
  27. package/lib/commands/vite.js +20 -0
  28. package/lib/compiler/compileModule.d.ts +5 -5
  29. package/lib/compiler/compileModule.js +79 -186
  30. package/lib/compiler/compileSFC.d.ts +2 -2
  31. package/lib/compiler/compileSFC.js +86 -132
  32. package/lib/compiler/compileScript.d.ts +17 -17
  33. package/lib/compiler/compileScript.js +152 -202
  34. package/lib/compiler/compileSiteEntry.d.ts +13 -13
  35. package/lib/compiler/compileSiteEntry.js +140 -237
  36. package/lib/compiler/compileStyle.d.ts +11 -11
  37. package/lib/compiler/compileStyle.js +43 -101
  38. package/lib/compiler/compileTemplateHighlight.d.ts +10 -10
  39. package/lib/compiler/compileTemplateHighlight.js +145 -193
  40. package/lib/compiler/compileTypes.d.ts +2 -2
  41. package/lib/compiler/compileTypes.js +49 -88
  42. package/lib/config/babel.config.d.ts +2 -2
  43. package/lib/config/babel.config.js +30 -31
  44. package/lib/config/babel.sfc.transform.d.ts +1 -1
  45. package/lib/config/babel.sfc.transform.js +18 -18
  46. package/lib/config/varlet.config.d.ts +1 -1
  47. package/lib/config/varlet.config.js +23 -24
  48. package/lib/config/vite.config.d.ts +5 -5
  49. package/lib/config/vite.config.js +157 -162
  50. package/lib/config/vitest.config.d.ts +2 -0
  51. package/lib/config/vitest.config.js +28 -0
  52. package/lib/index.d.ts +2 -2
  53. package/lib/index.js +84 -83
  54. package/lib/shared/constant.d.ts +44 -43
  55. package/lib/shared/constant.js +51 -50
  56. package/lib/shared/fsUtils.d.ts +12 -12
  57. package/lib/shared/fsUtils.js +61 -108
  58. package/lib/shared/logger.d.ts +8 -7
  59. package/lib/shared/logger.js +23 -20
  60. package/package.json +20 -17
  61. package/preset.js +3 -3
  62. package/site/components/button/Button.vue +106 -84
  63. package/site/components/button/button.less +183 -183
  64. package/site/components/button/index.ts +10 -10
  65. package/site/components/button/props.ts +78 -70
  66. package/site/components/cell/Cell.vue +54 -42
  67. package/site/components/cell/cell.less +78 -74
  68. package/site/components/cell/index.ts +10 -10
  69. package/site/components/cell/props.ts +27 -27
  70. package/site/components/code-example/CodeExample.vue +137 -143
  71. package/site/components/code-example/codeExample.less +41 -41
  72. package/site/components/code-example/index.ts +10 -10
  73. package/site/components/context/index.ts +21 -17
  74. package/site/components/context/lock.ts +92 -103
  75. package/site/components/context/zIndex.ts +20 -20
  76. package/site/components/icon/Icon.vue +75 -68
  77. package/site/components/icon/icon.less +26 -26
  78. package/site/components/icon/index.ts +10 -10
  79. package/site/components/icon/props.ts +24 -24
  80. package/site/components/loading/Loading.vue +84 -55
  81. package/site/components/loading/index.ts +10 -10
  82. package/site/components/loading/loading.less +505 -420
  83. package/site/components/loading/props.ts +42 -37
  84. package/site/components/popup/Popup.tsx +102 -0
  85. package/site/components/popup/index.ts +10 -0
  86. package/site/components/popup/popup.less +125 -0
  87. package/site/components/popup/props.ts +63 -0
  88. package/site/components/progress/Progress.vue +112 -108
  89. package/site/components/progress/index.ts +10 -10
  90. package/site/components/progress/progress.less +101 -98
  91. package/site/components/progress/props.ts +55 -55
  92. package/site/components/ripple/index.ts +188 -167
  93. package/site/components/ripple/ripple.less +20 -17
  94. package/site/components/snackbar/Snackbar.vue +41 -38
  95. package/site/components/snackbar/core.vue +132 -117
  96. package/site/components/snackbar/index.tsx +270 -270
  97. package/site/components/snackbar/props.ts +97 -94
  98. package/site/components/snackbar/snackbar.less +135 -135
  99. package/site/components/styles/common.less +64 -64
  100. package/site/components/styles/elevation.less +126 -126
  101. package/site/components/styles/var.less +27 -27
  102. package/site/components/utils/components.ts +117 -69
  103. package/site/components/utils/elements.ts +102 -85
  104. package/site/index.html +49 -49
  105. package/site/mobile/App.vue +291 -291
  106. package/site/mobile/components/AppHome.vue +134 -134
  107. package/site/mobile/components/AppType.vue +22 -22
  108. package/site/mobile/components/app-bar/AppBar.vue +65 -69
  109. package/site/mobile/components/app-bar/appBar.less +57 -56
  110. package/site/mobile/components/app-bar/index.ts +10 -10
  111. package/site/mobile/components/app-bar/props.ts +25 -25
  112. package/site/mobile/main.ts +78 -74
  113. package/site/mobile.html +41 -41
  114. package/site/module.d.ts +5 -5
  115. package/site/pc/App.vue +43 -43
  116. package/site/pc/Layout.vue +423 -397
  117. package/site/pc/components/AnimationBox.vue +33 -45
  118. package/site/pc/components/AppHeader.vue +368 -355
  119. package/site/pc/components/AppMobile.vue +60 -54
  120. package/site/pc/components/AppSidebar.vue +143 -134
  121. package/site/pc/components/LogoAnimation.vue +117 -119
  122. package/site/pc/floating.ts +9 -9
  123. package/site/pc/main.ts +100 -94
  124. package/site/pc/pages/index/index.less +176 -231
  125. package/site/pc/pages/index/index.vue +130 -145
  126. package/site/pc/pages/index/locale/en-US.ts +1 -5
  127. package/site/pc/pages/index/locale/zh-CN.ts +1 -5
  128. package/site/tsconfig.json +11 -11
  129. package/site/useProgress.ts +72 -75
  130. package/site/utils.ts +167 -153
  131. package/template/create/__tests__/index.spec.ejs +8 -0
  132. package/{lib/config/jest.media.mock.d.ts → template/create/docs/en-US.md} +0 -0
  133. package/{lib/config/jest.style.mock.d.ts → template/create/docs/zh-CN.md} +0 -0
  134. package/template/create/example/index.ejs +15 -0
  135. package/template/create/example/locale/en-US.ts +3 -0
  136. package/{generators/config/i18n/tsx/src/button → template/create}/example/locale/index.ts +23 -23
  137. package/template/create/example/locale/zh-CN.ts +3 -0
  138. package/template/create/index.ejs +12 -0
  139. package/template/create/less.ejs +3 -0
  140. package/template/create/props.ts +1 -0
  141. package/template/create/tsx.ejs +13 -0
  142. package/template/create/vue.ejs +17 -0
  143. package/{generators → template/generators}/base/.prettierignore +9 -9
  144. package/{generators → template/generators}/base/.prettierrc +5 -5
  145. package/{generators → template/generators}/base/README.md +82 -82
  146. package/{generators → template/generators}/base/babel.config.js +10 -10
  147. package/{generators → template/generators}/base/public/highlight.css +1 -1
  148. package/{generators → template/generators}/base/public/logo.svg +1 -1
  149. package/{generators → template/generators}/base/shims/shims-md.d.ts +4 -4
  150. package/{generators → template/generators}/base/shims/shims-vue.d.ts +6 -6
  151. package/{generators → template/generators}/base/tsconfig.json +13 -13
  152. package/{generators → template/generators}/config/default/base/docs/home.zh-CN.md +10 -10
  153. package/{generators → template/generators}/config/default/base/package.json +105 -105
  154. package/{generators/config/i18n → template/generators/config/default}/base/types/basicComponent.d.ts +7 -7
  155. package/{generators/config/i18n → template/generators/config/default}/base/types/button.d.ts +12 -12
  156. package/{generators → template/generators}/config/default/base/types/index.d.ts +6 -6
  157. package/{generators → template/generators}/config/default/base/varlet.config.js +110 -110
  158. package/{generators → template/generators}/config/default/sfc/src/button/Button.vue +30 -30
  159. package/{generators/config/default/tsx → template/generators/config/default/sfc}/src/button/__tests__/index.spec.js +7 -7
  160. package/{generators/config/default/tsx → template/generators/config/default/sfc}/src/button/button.less +14 -14
  161. package/{generators/config/default/tsx → template/generators/config/default/sfc}/src/button/docs/zh-CN.md +47 -47
  162. package/{generators → template/generators}/config/default/sfc/src/button/example/BasicUse.vue +7 -7
  163. package/{generators → template/generators}/config/default/sfc/src/button/example/ModifyColor.vue +7 -7
  164. package/{generators/config/default/tsx → template/generators/config/default/sfc}/src/button/example/index.vue +13 -13
  165. package/{generators → template/generators}/config/default/sfc/src/button/index.ts +10 -10
  166. package/{generators → template/generators}/config/default/tsx/src/button/Button.tsx +29 -31
  167. package/{generators/config/default/sfc → template/generators/config/default/tsx}/src/button/__tests__/index.spec.js +7 -7
  168. package/{generators/config/i18n → template/generators/config/default}/tsx/src/button/button.less +14 -14
  169. package/{generators/config/default/sfc → template/generators/config/default/tsx}/src/button/docs/zh-CN.md +47 -47
  170. package/{generators → template/generators}/config/default/tsx/src/button/example/BasicUse.vue +7 -7
  171. package/{generators → template/generators}/config/default/tsx/src/button/example/ModifyColor.vue +7 -7
  172. package/{generators/config/default/sfc → template/generators/config/default/tsx}/src/button/example/index.vue +13 -13
  173. package/{generators → template/generators}/config/default/tsx/src/button/index.ts +10 -10
  174. package/{generators → template/generators}/config/i18n/base/docs/home.en-US.md +11 -11
  175. package/{generators → template/generators}/config/i18n/base/docs/home.zh-CN.md +10 -10
  176. package/{generators → template/generators}/config/i18n/base/package.json +105 -105
  177. package/{generators/config/default → template/generators/config/i18n}/base/types/basicComponent.d.ts +7 -7
  178. package/{generators/config/default → template/generators/config/i18n}/base/types/button.d.ts +12 -12
  179. package/{generators → template/generators}/config/i18n/base/types/index.d.ts +7 -7
  180. package/{generators → template/generators}/config/i18n/base/types/locale.d.ts +24 -24
  181. package/{generators → template/generators}/config/i18n/base/varlet.config.js +122 -122
  182. package/{generators → template/generators}/config/i18n/sfc/src/button/Button.vue +36 -36
  183. package/{generators → template/generators}/config/i18n/sfc/src/button/__tests__/index.spec.js +7 -7
  184. package/{generators → template/generators}/config/i18n/sfc/src/button/button.less +14 -14
  185. package/{generators → template/generators}/config/i18n/sfc/src/button/docs/en-US.md +34 -34
  186. package/{generators/config/i18n/tsx → template/generators/config/i18n/sfc}/src/button/docs/zh-CN.md +34 -34
  187. package/{generators/config/i18n/tsx → template/generators/config/i18n/sfc}/src/button/example/BasicUse.vue +11 -11
  188. package/{generators/config/i18n/tsx → template/generators/config/i18n/sfc}/src/button/example/ModifyColor.vue +11 -11
  189. package/{generators → template/generators}/config/i18n/sfc/src/button/example/index.vue +13 -13
  190. package/{generators/config/i18n/tsx → template/generators/config/i18n/sfc}/src/button/example/locale/en-US.ts +5 -5
  191. package/{generators → template/generators}/config/i18n/sfc/src/button/example/locale/index.ts +23 -23
  192. package/{generators/config/i18n/tsx → template/generators/config/i18n/sfc}/src/button/example/locale/zh-CN.ts +5 -5
  193. package/{generators → template/generators}/config/i18n/sfc/src/button/index.ts +10 -10
  194. package/{generators/config/i18n/tsx → template/generators/config/i18n/sfc}/src/locale/__tests__/index.spec.js +51 -51
  195. package/{generators/config/i18n/tsx → template/generators/config/i18n/sfc}/src/locale/docs/en-US.md +26 -26
  196. package/{generators → template/generators}/config/i18n/sfc/src/locale/docs/zh-CN.md +25 -25
  197. package/{generators → template/generators}/config/i18n/sfc/src/locale/en-US.d.ts +5 -5
  198. package/{generators/config/i18n/tsx → template/generators/config/i18n/sfc}/src/locale/en-US.ts +7 -7
  199. package/{generators → template/generators}/config/i18n/sfc/src/locale/index.ts +67 -67
  200. package/{generators/config/i18n/tsx → template/generators/config/i18n/sfc}/src/locale/zh-CN.d.ts +5 -5
  201. package/{generators/config/i18n/tsx → template/generators/config/i18n/sfc}/src/locale/zh-CN.ts +7 -7
  202. package/{generators → template/generators}/config/i18n/tsx/src/button/Button.tsx +33 -35
  203. package/{generators → template/generators}/config/i18n/tsx/src/button/__tests__/index.spec.js +7 -7
  204. package/{generators/config/default/sfc → template/generators/config/i18n/tsx}/src/button/button.less +14 -14
  205. package/{generators → template/generators}/config/i18n/tsx/src/button/docs/en-US.md +34 -34
  206. package/{generators/config/i18n/sfc → template/generators/config/i18n/tsx}/src/button/docs/zh-CN.md +34 -34
  207. package/{generators/config/i18n/sfc → template/generators/config/i18n/tsx}/src/button/example/BasicUse.vue +11 -11
  208. package/{generators/config/i18n/sfc → template/generators/config/i18n/tsx}/src/button/example/ModifyColor.vue +11 -11
  209. package/{generators → template/generators}/config/i18n/tsx/src/button/example/index.vue +13 -13
  210. package/{generators/config/i18n/sfc → template/generators/config/i18n/tsx}/src/button/example/locale/en-US.ts +5 -5
  211. package/template/generators/config/i18n/tsx/src/button/example/locale/index.ts +23 -0
  212. package/{generators/config/i18n/sfc → template/generators/config/i18n/tsx}/src/button/example/locale/zh-CN.ts +5 -5
  213. package/{generators → template/generators}/config/i18n/tsx/src/button/index.ts +10 -10
  214. package/{generators/config/i18n/sfc → template/generators/config/i18n/tsx}/src/locale/__tests__/index.spec.js +51 -51
  215. package/{generators/config/i18n/sfc → template/generators/config/i18n/tsx}/src/locale/docs/en-US.md +26 -26
  216. package/{generators → template/generators}/config/i18n/tsx/src/locale/docs/zh-CN.md +25 -25
  217. package/{generators → template/generators}/config/i18n/tsx/src/locale/en-US.d.ts +5 -5
  218. package/{generators/config/i18n/sfc → template/generators/config/i18n/tsx}/src/locale/en-US.ts +7 -7
  219. package/{generators → template/generators}/config/i18n/tsx/src/locale/index.ts +67 -67
  220. package/{generators/config/i18n/sfc → template/generators/config/i18n/tsx}/src/locale/zh-CN.d.ts +5 -5
  221. package/{generators/config/i18n/sfc → template/generators/config/i18n/tsx}/src/locale/zh-CN.ts +7 -7
  222. package/tsconfig.json +15 -14
  223. package/varlet.default.config.js +137 -15
  224. package/lib/commands/jest.d.ts +0 -8
  225. package/lib/commands/jest.js +0 -81
  226. package/lib/config/jest.config.d.ts +0 -1
  227. package/lib/config/jest.config.js +0 -36
  228. package/lib/config/jest.media.mock.js +0 -2
  229. package/lib/config/jest.style.mock.js +0 -2
  230. package/site/mobile/components/styles/common.less +0 -64
  231. package/site/mobile/components/styles/elevation.less +0 -126
  232. package/site/mobile/components/styles/var.less +0 -27
@@ -1,17 +1,20 @@
1
- @site-ripple-cubic-bezier: cubic-bezier(0.68, 0.01, 0.62, 0.6);
2
-
3
- :root {
4
- --site-ripple-cubic-bezier: @site-ripple-cubic-bezier;
5
- }
6
-
7
- .var-site-ripple {
8
- position: absolute;
9
- transition: transform 0.2s var(--site-ripple-cubic-bezier), opacity 0.14s linear;
10
- top: 0;
11
- left: 0;
12
- border-radius: 50%;
13
- opacity: 0;
14
- will-change: transform, opacity;
15
- pointer-events: none;
16
- z-index: 100;
17
- }
1
+ @site-ripple-cubic-bezier: cubic-bezier(0.68, 0.01, 0.62, 0.6);
2
+ @site-ripple-color: currentColor;
3
+
4
+ :root {
5
+ --site-ripple-cubic-bezier: @site-ripple-cubic-bezier;
6
+ --site-ripple-color: @site-ripple-color;
7
+ }
8
+
9
+ .var-site-ripple {
10
+ position: absolute;
11
+ transition: transform 0.2s var(--site-ripple-cubic-bezier), opacity 0.14s linear;
12
+ top: 0;
13
+ left: 0;
14
+ border-radius: 50%;
15
+ opacity: 0;
16
+ will-change: transform, opacity;
17
+ pointer-events: none;
18
+ z-index: 100;
19
+ background-color: var(--site-ripple-color);
20
+ }
@@ -1,38 +1,41 @@
1
- <template>
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">
5
- <slot>{{ content }}</slot>
6
- <template #action>
7
- <slot name="action" />
8
- </template>
9
- </var-site-snackbar-core>
10
- </transition>
11
- </teleport>
12
- </template>
13
-
14
- <script>
15
- import VarSiteSnackbarCore from './core'
16
- import { defineComponent } from 'vue'
17
- import { useTeleport } from '../utils/components'
18
- import { props } from './props'
19
-
20
- export default defineComponent({
21
- name: 'VarSiteSnackbar',
22
- components: {
23
- VarSiteSnackbarCore,
24
- },
25
- props,
26
- setup() {
27
- const { disabled } = useTeleport()
28
-
29
- return {
30
- disabled,
31
- }
32
- },
33
- })
34
- </script>
35
-
36
- <style lang="less">
37
- @import '../styles/common';
38
- </style>
1
+ <template>
2
+ <teleport :to="teleport" :disabled="disabled">
3
+ <transition :name="`${n()}-fade`" @after-enter="onOpened" @after-leave="onClosed">
4
+ <var-snackbar-core v-bind="$props" :class="n('transition')">
5
+ <slot>{{ content }}</slot>
6
+ <template #action>
7
+ <slot name="action" />
8
+ </template>
9
+ </var-snackbar-core>
10
+ </transition>
11
+ </teleport>
12
+ </template>
13
+
14
+ <script>
15
+ import { defineComponent } from 'vue'
16
+ import VarSnackbarCore from './core'
17
+ import { createNamespace, useTeleport } from '../utils/components'
18
+ import { props } from './props'
19
+
20
+ const { n } = createNamespace('snackbar')
21
+
22
+ export default defineComponent({
23
+ name: 'VarSnackbar',
24
+ components: {
25
+ VarSnackbarCore,
26
+ },
27
+ props,
28
+ setup() {
29
+ const { disabled } = useTeleport()
30
+
31
+ return {
32
+ n,
33
+ disabled,
34
+ }
35
+ },
36
+ })
37
+ </script>
38
+
39
+ <style lang="less">
40
+ @import '../styles/common';
41
+ </style>
@@ -1,117 +1,132 @@
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]">
5
- <slot>{{ content }}</slot>
6
- </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" />
10
- <slot name="action" />
11
- </div>
12
- </div>
13
- </div>
14
- </template>
15
-
16
- <script lang="ts">
17
- import { defineComponent, watch, ref, onMounted, computed } from 'vue'
18
- import VarSiteLoading from '../loading'
19
- import VarSiteIcon from '../icon'
20
- import { useZIndex } from '../context/zIndex'
21
- import { props } from './props'
22
- import { useLock } from '../context/lock'
23
- import { SNACKBAR_TYPE } from './index'
24
- import type { Ref, ComputedRef } from 'vue'
25
- import type { SnackbarType } from './index'
26
-
27
- const ICON_TYPE_DICT: Record<SnackbarType, string> = {
28
- success: 'checkbox-marked-circle',
29
- warning: 'warning',
30
- info: 'information',
31
- error: 'error',
32
- loading: '',
33
- }
34
-
35
- export default defineComponent({
36
- name: 'VarSiteSnackbarCore',
37
- components: {
38
- VarSiteLoading,
39
- VarSiteIcon,
40
- },
41
- props,
42
- setup(props) {
43
- const timer: Ref = ref(null)
44
- const { zIndex } = useZIndex(() => props.show, 1)
45
-
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
- })
57
-
58
- const isForbidClick: ComputedRef<boolean> = computed(() => props.type === 'loading' || props.forbidClick)
59
-
60
- const iconName: ComputedRef<string> = computed(() => {
61
- if (!props.type) return ''
62
-
63
- return ICON_TYPE_DICT[props.type]
64
- })
65
-
66
- const updateAfterDuration = () => {
67
- timer.value = setTimeout(() => {
68
- props.type !== 'loading' && props['onUpdate:show']?.(false)
69
- }, props.duration)
70
- }
71
-
72
- watch(
73
- () => props.show,
74
- (show) => {
75
- if (show) {
76
- props.onOpen?.()
77
- updateAfterDuration()
78
- } else if (show === false) {
79
- clearTimeout(timer.value)
80
- props.onClose?.()
81
- }
82
- }
83
- )
84
-
85
- watch(
86
- () => props._update,
87
- () => {
88
- clearTimeout(timer.value)
89
- updateAfterDuration()
90
- }
91
- )
92
-
93
- onMounted(() => {
94
- if (props.show) {
95
- props.onOpen?.()
96
- updateAfterDuration()
97
- }
98
- })
99
-
100
- return {
101
- zIndex,
102
- snackbarClass,
103
- iconName,
104
- isForbidClick,
105
- }
106
- },
107
- })
108
- </script>
109
-
110
- <style lang="less">
111
- @import '../styles/common';
112
- @import '../styles/elevation';
113
- @import '../loading/loading';
114
- @import '../button/button';
115
- @import '../icon/icon';
116
- @import './snackbar';
117
- </style>
1
+ <template>
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]">
16
+ <slot>{{ content }}</slot>
17
+ </div>
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
+ />
27
+ <slot name="action" />
28
+ </div>
29
+ </div>
30
+ </div>
31
+ </template>
32
+
33
+ <script lang="ts">
34
+ import { defineComponent, watch, ref, onMounted, computed } from 'vue'
35
+ import VarLoading from '../loading'
36
+ import VarIcon from '../icon'
37
+ import { useZIndex } from '../context/zIndex'
38
+ import { props } from './props'
39
+ import { useLock } from '../context/lock'
40
+ import { SNACKBAR_TYPE } from './index'
41
+ import type { Ref, ComputedRef } from 'vue'
42
+ import type { SnackbarType } from './index'
43
+ import { createNamespace } from '../utils/components'
44
+
45
+ const { n, classes } = createNamespace('snackbar')
46
+
47
+ const ICON_TYPE_DICT: Record<SnackbarType, string> = {
48
+ success: 'checkbox-marked-circle',
49
+ warning: 'warning',
50
+ info: 'information',
51
+ error: 'error',
52
+ loading: '',
53
+ }
54
+
55
+ export default defineComponent({
56
+ name: 'VarSiteSnackbarCore',
57
+ components: {
58
+ VarLoading,
59
+ VarIcon,
60
+ },
61
+ props,
62
+ setup(props) {
63
+ const timer: Ref = ref(null)
64
+ const { zIndex } = useZIndex(() => props.show, 1)
65
+
66
+ useLock(
67
+ () => props.show,
68
+ () => props.lockScroll
69
+ )
70
+
71
+ const isForbidClick: ComputedRef<boolean> = computed(() => props.type === 'loading' || props.forbidClick)
72
+
73
+ const iconName: ComputedRef<string> = computed(() => {
74
+ if (!props.type) return ''
75
+
76
+ return ICON_TYPE_DICT[props.type]
77
+ })
78
+
79
+ const updateAfterDuration = () => {
80
+ timer.value = setTimeout(() => {
81
+ props.type !== 'loading' && props['onUpdate:show']?.(false)
82
+ }, props.duration)
83
+ }
84
+
85
+ watch(
86
+ () => props.show,
87
+ (show) => {
88
+ if (show) {
89
+ props.onOpen?.()
90
+ updateAfterDuration()
91
+ } else if (show === false) {
92
+ clearTimeout(timer.value)
93
+ props.onClose?.()
94
+ }
95
+ }
96
+ )
97
+
98
+ watch(
99
+ () => props._update,
100
+ () => {
101
+ clearTimeout(timer.value)
102
+ updateAfterDuration()
103
+ }
104
+ )
105
+
106
+ onMounted(() => {
107
+ if (props.show) {
108
+ props.onOpen?.()
109
+ updateAfterDuration()
110
+ }
111
+ })
112
+
113
+ return {
114
+ SNACKBAR_TYPE,
115
+ n,
116
+ classes,
117
+ zIndex,
118
+ iconName,
119
+ isForbidClick,
120
+ }
121
+ },
122
+ })
123
+ </script>
124
+
125
+ <style lang="less">
126
+ @import '../styles/common';
127
+ @import '../styles/elevation';
128
+ @import '../loading/loading';
129
+ @import '../button/button';
130
+ @import '../icon/icon';
131
+ @import './snackbar';
132
+ </style>