@varlet/cli 2.0.0-alpha.1663499244572 → 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 (231) 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 +67 -18
  6. package/lib/commands/changelog.d.ts +6 -6
  7. package/lib/commands/changelog.js +27 -26
  8. package/lib/commands/commitLint.d.ts +1 -1
  9. package/lib/commands/commitLint.js +21 -50
  10. package/lib/commands/compile.d.ts +7 -7
  11. package/lib/commands/compile.js +119 -43
  12. package/lib/commands/create.d.ts +8 -8
  13. package/lib/commands/create.js +181 -90
  14. package/lib/commands/dev.d.ts +5 -5
  15. package/lib/commands/dev.js +123 -44
  16. package/lib/commands/gen.d.ts +8 -8
  17. package/lib/commands/gen.js +140 -85
  18. package/lib/commands/jest.d.ts +8 -0
  19. package/lib/commands/jest.js +85 -0
  20. package/lib/commands/lint.d.ts +1 -1
  21. package/lib/commands/lint.js +123 -48
  22. package/lib/commands/preview.d.ts +1 -1
  23. package/lib/commands/preview.js +74 -23
  24. package/lib/commands/release.d.ts +5 -5
  25. package/lib/commands/release.js +270 -132
  26. package/lib/commands/test.d.ts +7 -7
  27. package/lib/commands/test.js +26 -26
  28. package/lib/commands/useVite.d.ts +1 -0
  29. package/lib/commands/useVite.js +70 -0
  30. package/lib/commands/vite.d.ts +3 -3
  31. package/lib/commands/vite.js +69 -20
  32. package/lib/compiler/compileModule.d.ts +5 -5
  33. package/lib/compiler/compileModule.js +190 -79
  34. package/lib/compiler/compileSFC.d.ts +2 -2
  35. package/lib/compiler/compileSFC.js +135 -86
  36. package/lib/compiler/compileScript.d.ts +17 -17
  37. package/lib/compiler/compileScript.js +194 -152
  38. package/lib/compiler/compileSiteEntry.d.ts +13 -13
  39. package/lib/compiler/compileSiteEntry.js +237 -140
  40. package/lib/compiler/compileStyle.d.ts +11 -11
  41. package/lib/compiler/compileStyle.js +91 -43
  42. package/lib/compiler/compileTemplateHighlight.d.ts +10 -10
  43. package/lib/compiler/compileTemplateHighlight.js +193 -145
  44. package/lib/compiler/compileTypes.d.ts +2 -2
  45. package/lib/compiler/compileTypes.js +85 -49
  46. package/lib/config/babel.config.d.ts +2 -2
  47. package/lib/config/babel.config.js +31 -30
  48. package/lib/config/babel.sfc.transform.d.ts +1 -1
  49. package/lib/config/babel.sfc.transform.js +18 -18
  50. package/lib/config/jest.config.d.ts +1 -0
  51. package/lib/config/jest.config.js +37 -0
  52. package/lib/config/jest.media.mock.d.ts +0 -0
  53. package/lib/config/jest.media.mock.js +2 -0
  54. package/lib/config/jest.style.mock.d.ts +0 -0
  55. package/lib/config/jest.style.mock.js +2 -0
  56. package/lib/config/varlet.config.d.ts +1 -1
  57. package/lib/config/varlet.config.js +24 -23
  58. package/lib/config/vite.config.d.ts +5 -5
  59. package/lib/config/vite.config.js +162 -157
  60. package/lib/config/vitest.config.d.ts +2 -2
  61. package/lib/config/vitest.config.js +28 -28
  62. package/lib/index.d.ts +2 -2
  63. package/lib/index.js +102 -84
  64. package/lib/shared/constant.d.ts +43 -44
  65. package/lib/shared/constant.js +50 -51
  66. package/lib/shared/fsUtils.d.ts +12 -12
  67. package/lib/shared/fsUtils.js +108 -61
  68. package/lib/shared/logger.d.ts +8 -8
  69. package/lib/shared/logger.js +23 -23
  70. package/package.json +11 -10
  71. package/preset.js +3 -3
  72. package/site/components/button/Button.vue +106 -106
  73. package/site/components/button/button.less +183 -183
  74. package/site/components/button/index.ts +10 -10
  75. package/site/components/button/props.ts +78 -78
  76. package/site/components/cell/Cell.vue +54 -54
  77. package/site/components/cell/cell.less +78 -78
  78. package/site/components/cell/index.ts +10 -10
  79. package/site/components/cell/props.ts +27 -27
  80. package/site/components/code-example/CodeExample.vue +137 -137
  81. package/site/components/code-example/codeExample.less +41 -41
  82. package/site/components/code-example/index.ts +10 -10
  83. package/site/components/context/index.ts +21 -21
  84. package/site/components/context/lock.ts +92 -92
  85. package/site/components/context/zIndex.ts +20 -20
  86. package/site/components/icon/Icon.vue +75 -75
  87. package/site/components/icon/icon.less +26 -26
  88. package/site/components/icon/index.ts +10 -10
  89. package/site/components/icon/props.ts +24 -24
  90. package/site/components/loading/Loading.vue +84 -84
  91. package/site/components/loading/index.ts +10 -10
  92. package/site/components/loading/loading.less +505 -505
  93. package/site/components/loading/props.ts +42 -42
  94. package/site/components/popup/Popup.tsx +102 -102
  95. package/site/components/popup/index.ts +10 -10
  96. package/site/components/popup/popup.less +125 -125
  97. package/site/components/popup/props.ts +63 -63
  98. package/site/components/progress/Progress.vue +112 -112
  99. package/site/components/progress/index.ts +10 -10
  100. package/site/components/progress/progress.less +101 -101
  101. package/site/components/progress/props.ts +55 -55
  102. package/site/components/ripple/index.ts +188 -188
  103. package/site/components/ripple/ripple.less +20 -20
  104. package/site/components/snackbar/Snackbar.vue +41 -41
  105. package/site/components/snackbar/core.vue +132 -132
  106. package/site/components/snackbar/index.tsx +270 -270
  107. package/site/components/snackbar/props.ts +97 -97
  108. package/site/components/snackbar/snackbar.less +135 -135
  109. package/site/components/styles/common.less +64 -64
  110. package/site/components/styles/elevation.less +126 -126
  111. package/site/components/styles/var.less +27 -27
  112. package/site/components/utils/components.ts +117 -117
  113. package/site/components/utils/elements.ts +102 -102
  114. package/site/index.html +49 -49
  115. package/site/mobile/App.vue +291 -291
  116. package/site/mobile/components/AppHome.vue +134 -134
  117. package/site/mobile/components/AppType.vue +22 -22
  118. package/site/mobile/components/app-bar/AppBar.vue +65 -65
  119. package/site/mobile/components/app-bar/appBar.less +57 -57
  120. package/site/mobile/components/app-bar/index.ts +10 -10
  121. package/site/mobile/components/app-bar/props.ts +25 -25
  122. package/site/mobile/main.ts +78 -78
  123. package/site/mobile.html +41 -41
  124. package/site/module.d.ts +5 -5
  125. package/site/pc/App.vue +43 -43
  126. package/site/pc/Layout.vue +423 -423
  127. package/site/pc/components/AnimationBox.vue +33 -33
  128. package/site/pc/components/AppHeader.vue +368 -368
  129. package/site/pc/components/AppMobile.vue +60 -60
  130. package/site/pc/components/AppSidebar.vue +143 -143
  131. package/site/pc/components/LogoAnimation.vue +117 -117
  132. package/site/pc/floating.ts +9 -9
  133. package/site/pc/main.ts +100 -100
  134. package/site/pc/pages/index/index.less +176 -176
  135. package/site/pc/pages/index/index.vue +130 -130
  136. package/site/pc/pages/index/locale/en-US.ts +1 -1
  137. package/site/pc/pages/index/locale/zh-CN.ts +1 -1
  138. package/site/tsconfig.json +11 -11
  139. package/site/useProgress.ts +72 -72
  140. package/site/utils.ts +165 -167
  141. package/template/create/__tests__/index.spec.ejs +8 -8
  142. package/template/create/example/index.ejs +15 -15
  143. package/template/create/example/locale/en-US.ts +3 -3
  144. package/template/create/example/locale/index.ts +23 -23
  145. package/template/create/example/locale/zh-CN.ts +3 -3
  146. package/template/create/index.ejs +12 -12
  147. package/template/create/less.ejs +3 -3
  148. package/template/create/props.ts +1 -1
  149. package/template/create/tsx.ejs +13 -13
  150. package/template/create/vue.ejs +17 -17
  151. package/template/generators/base/.prettierignore +9 -9
  152. package/template/generators/base/.prettierrc +5 -5
  153. package/template/generators/base/README.md +82 -82
  154. package/template/generators/base/babel.config.js +10 -10
  155. package/template/generators/base/public/highlight.css +1 -1
  156. package/template/generators/base/public/logo.svg +1 -1
  157. package/template/generators/base/shims/shims-md.d.ts +4 -4
  158. package/template/generators/base/shims/shims-vue.d.ts +6 -6
  159. package/template/generators/base/tsconfig.json +13 -13
  160. package/template/generators/config/default/base/docs/home.zh-CN.md +10 -10
  161. package/template/generators/config/default/base/package.json +105 -105
  162. package/template/generators/config/default/base/types/basicComponent.d.ts +7 -7
  163. package/template/generators/config/default/base/types/button.d.ts +12 -12
  164. package/template/generators/config/default/base/types/index.d.ts +6 -6
  165. package/template/generators/config/default/base/varlet.config.js +110 -110
  166. package/template/generators/config/default/sfc/src/button/Button.vue +30 -30
  167. package/template/generators/config/default/sfc/src/button/__tests__/index.spec.js +7 -7
  168. package/template/generators/config/default/sfc/src/button/button.less +14 -14
  169. package/template/generators/config/default/sfc/src/button/docs/zh-CN.md +47 -47
  170. package/template/generators/config/default/sfc/src/button/example/BasicUse.vue +7 -7
  171. package/template/generators/config/default/sfc/src/button/example/ModifyColor.vue +7 -7
  172. package/template/generators/config/default/sfc/src/button/example/index.vue +13 -13
  173. package/template/generators/config/default/sfc/src/button/index.ts +10 -10
  174. package/template/generators/config/default/tsx/src/button/Button.tsx +29 -29
  175. package/template/generators/config/default/tsx/src/button/__tests__/index.spec.js +7 -7
  176. package/template/generators/config/default/tsx/src/button/button.less +14 -14
  177. package/template/generators/config/default/tsx/src/button/docs/zh-CN.md +47 -47
  178. package/template/generators/config/default/tsx/src/button/example/BasicUse.vue +7 -7
  179. package/template/generators/config/default/tsx/src/button/example/ModifyColor.vue +7 -7
  180. package/template/generators/config/default/tsx/src/button/example/index.vue +13 -13
  181. package/template/generators/config/default/tsx/src/button/index.ts +10 -10
  182. package/template/generators/config/i18n/base/docs/home.en-US.md +11 -11
  183. package/template/generators/config/i18n/base/docs/home.zh-CN.md +10 -10
  184. package/template/generators/config/i18n/base/package.json +105 -105
  185. package/template/generators/config/i18n/base/types/basicComponent.d.ts +7 -7
  186. package/template/generators/config/i18n/base/types/button.d.ts +12 -12
  187. package/template/generators/config/i18n/base/types/index.d.ts +7 -7
  188. package/template/generators/config/i18n/base/types/locale.d.ts +24 -24
  189. package/template/generators/config/i18n/base/varlet.config.js +122 -122
  190. package/template/generators/config/i18n/sfc/src/button/Button.vue +36 -36
  191. package/template/generators/config/i18n/sfc/src/button/__tests__/index.spec.js +7 -7
  192. package/template/generators/config/i18n/sfc/src/button/button.less +14 -14
  193. package/template/generators/config/i18n/sfc/src/button/docs/en-US.md +34 -34
  194. package/template/generators/config/i18n/sfc/src/button/docs/zh-CN.md +34 -34
  195. package/template/generators/config/i18n/sfc/src/button/example/BasicUse.vue +11 -11
  196. package/template/generators/config/i18n/sfc/src/button/example/ModifyColor.vue +11 -11
  197. package/template/generators/config/i18n/sfc/src/button/example/index.vue +13 -13
  198. package/template/generators/config/i18n/sfc/src/button/example/locale/en-US.ts +5 -5
  199. package/template/generators/config/i18n/sfc/src/button/example/locale/index.ts +23 -23
  200. package/template/generators/config/i18n/sfc/src/button/example/locale/zh-CN.ts +5 -5
  201. package/template/generators/config/i18n/sfc/src/button/index.ts +10 -10
  202. package/template/generators/config/i18n/sfc/src/locale/__tests__/index.spec.js +51 -51
  203. package/template/generators/config/i18n/sfc/src/locale/docs/en-US.md +26 -26
  204. package/template/generators/config/i18n/sfc/src/locale/docs/zh-CN.md +25 -25
  205. package/template/generators/config/i18n/sfc/src/locale/en-US.d.ts +5 -5
  206. package/template/generators/config/i18n/sfc/src/locale/en-US.ts +7 -7
  207. package/template/generators/config/i18n/sfc/src/locale/index.ts +67 -67
  208. package/template/generators/config/i18n/sfc/src/locale/zh-CN.d.ts +5 -5
  209. package/template/generators/config/i18n/sfc/src/locale/zh-CN.ts +7 -7
  210. package/template/generators/config/i18n/tsx/src/button/Button.tsx +33 -33
  211. package/template/generators/config/i18n/tsx/src/button/__tests__/index.spec.js +7 -7
  212. package/template/generators/config/i18n/tsx/src/button/button.less +14 -14
  213. package/template/generators/config/i18n/tsx/src/button/docs/en-US.md +34 -34
  214. package/template/generators/config/i18n/tsx/src/button/docs/zh-CN.md +34 -34
  215. package/template/generators/config/i18n/tsx/src/button/example/BasicUse.vue +11 -11
  216. package/template/generators/config/i18n/tsx/src/button/example/ModifyColor.vue +11 -11
  217. package/template/generators/config/i18n/tsx/src/button/example/index.vue +13 -13
  218. package/template/generators/config/i18n/tsx/src/button/example/locale/en-US.ts +5 -5
  219. package/template/generators/config/i18n/tsx/src/button/example/locale/index.ts +23 -23
  220. package/template/generators/config/i18n/tsx/src/button/example/locale/zh-CN.ts +5 -5
  221. package/template/generators/config/i18n/tsx/src/button/index.ts +10 -10
  222. package/template/generators/config/i18n/tsx/src/locale/__tests__/index.spec.js +51 -51
  223. package/template/generators/config/i18n/tsx/src/locale/docs/en-US.md +26 -26
  224. package/template/generators/config/i18n/tsx/src/locale/docs/zh-CN.md +25 -25
  225. package/template/generators/config/i18n/tsx/src/locale/en-US.d.ts +5 -5
  226. package/template/generators/config/i18n/tsx/src/locale/en-US.ts +7 -7
  227. package/template/generators/config/i18n/tsx/src/locale/index.ts +67 -67
  228. package/template/generators/config/i18n/tsx/src/locale/zh-CN.d.ts +5 -5
  229. package/template/generators/config/i18n/tsx/src/locale/zh-CN.ts +7 -7
  230. package/tsconfig.json +14 -15
  231. package/varlet.default.config.js +3 -3
@@ -1,188 +1,188 @@
1
- import context from '../context'
2
- import './ripple.less'
3
- import '../styles/common.less'
4
- import { supportTouch } from '../utils/elements'
5
- import { createNamespace } from '../utils/components'
6
- import type { Directive, Plugin, App } from 'vue'
7
- import type { DirectiveBinding } from '@vue/runtime-core'
8
-
9
- const { n } = createNamespace('ripple')
10
-
11
- interface RippleStyles {
12
- x: number
13
- y: number
14
- centerX: number
15
- centerY: number
16
- size: number
17
- }
18
-
19
- interface RippleOptions {
20
- removeRipple: any
21
- touchmoveForbid: boolean
22
- color?: string
23
- disabled?: boolean
24
- tasker?: number | null
25
- }
26
-
27
- interface RippleHTMLElement extends HTMLElement {
28
- _ripple?: RippleOptions
29
- }
30
-
31
- const ANIMATION_DURATION = 250
32
-
33
- function setStyles(element: RippleHTMLElement) {
34
- const { zIndex, position } = window.getComputedStyle(element)
35
-
36
- element.style.overflow = 'hidden'
37
- element.style.overflowX = 'hidden'
38
- element.style.overflowY = 'hidden'
39
- position === 'static' && (element.style.position = 'relative')
40
- zIndex === 'auto' && (element.style.zIndex = '1')
41
- }
42
-
43
- function computeRippleStyles(element: RippleHTMLElement, event: TouchEvent): RippleStyles {
44
- const { top, left }: DOMRect = element.getBoundingClientRect()
45
- const { clientWidth, clientHeight } = element
46
-
47
- const radius: number = Math.sqrt(clientWidth ** 2 + clientHeight ** 2) / 2
48
- const size: number = radius * 2
49
-
50
- const localX: number = event.touches[0].clientX - left
51
- const localY: number = event.touches[0].clientY - top
52
-
53
- const centerX: number = (clientWidth - radius * 2) / 2
54
- const centerY: number = (clientHeight - radius * 2) / 2
55
-
56
- const x: number = localX - radius
57
- const y: number = localY - radius
58
-
59
- return { x, y, centerX, centerY, size }
60
- }
61
-
62
- function createRipple(this: RippleHTMLElement, event: TouchEvent) {
63
- const _ripple = this._ripple as RippleOptions
64
- _ripple.removeRipple()
65
-
66
- if (_ripple.disabled || _ripple.tasker) {
67
- return
68
- }
69
-
70
- const task = () => {
71
- _ripple.tasker = null
72
-
73
- const { x, y, centerX, centerY, size }: RippleStyles = computeRippleStyles(this, event)
74
- const ripple: RippleHTMLElement = document.createElement('div')
75
- ripple.classList.add(n())
76
- ripple.style.opacity = `0`
77
- ripple.style.transform = `translate(${x}px, ${y}px) scale3d(.3, .3, .3)`
78
- ripple.style.width = `${size}px`
79
- ripple.style.height = `${size}px`
80
- _ripple.color && (ripple.style.backgroundColor = _ripple.color)
81
- ripple.dataset.createdAt = String(performance.now())
82
-
83
- setStyles(this)
84
-
85
- this.appendChild(ripple)
86
-
87
- window.setTimeout(() => {
88
- ripple.style.transform = `translate(${centerX}px, ${centerY}px) scale3d(1, 1, 1)`
89
- ripple.style.opacity = `.25`
90
- }, 20)
91
- }
92
-
93
- _ripple.tasker = window.setTimeout(task, 60)
94
- }
95
-
96
- function removeRipple(this: RippleHTMLElement) {
97
- const _ripple = this._ripple as RippleOptions
98
-
99
- const task = () => {
100
- const ripples: NodeListOf<RippleHTMLElement> = this.querySelectorAll(`.${n()}`)
101
- if (!ripples.length) {
102
- return
103
- }
104
-
105
- const lastRipple: RippleHTMLElement = ripples[ripples.length - 1]
106
- const delay: number = ANIMATION_DURATION - performance.now() + Number(lastRipple.dataset.createdAt)
107
-
108
- setTimeout(() => {
109
- lastRipple.style.opacity = `0`
110
-
111
- setTimeout(() => lastRipple.parentNode?.removeChild(lastRipple), ANIMATION_DURATION)
112
- }, delay)
113
- }
114
-
115
- _ripple.tasker ? setTimeout(task, 60) : task()
116
- }
117
-
118
- function forbidRippleTask(this: RippleHTMLElement) {
119
- const _ripple = this._ripple as RippleOptions
120
-
121
- if (!supportTouch()) {
122
- return
123
- }
124
-
125
- if (!_ripple.touchmoveForbid) {
126
- return
127
- }
128
-
129
- _ripple.tasker && window.clearTimeout(_ripple.tasker)
130
- _ripple.tasker = null
131
- }
132
-
133
- function mounted(el: RippleHTMLElement, binding: DirectiveBinding<RippleOptions>) {
134
- el._ripple = {
135
- tasker: null,
136
- ...(binding.value ?? {}),
137
- touchmoveForbid: binding.value?.touchmoveForbid ?? context.touchmoveForbid,
138
- removeRipple: removeRipple.bind(el),
139
- }
140
-
141
- el.addEventListener('touchstart', createRipple, { passive: true })
142
- el.addEventListener('touchmove', forbidRippleTask, { passive: true })
143
- el.addEventListener('dragstart', removeRipple, { passive: true })
144
- document.addEventListener('touchend', el._ripple.removeRipple, { passive: true })
145
- document.addEventListener('touchcancel', el._ripple.removeRipple, { passive: true })
146
- }
147
-
148
- function unmounted(el: RippleHTMLElement) {
149
- el.removeEventListener('touchstart', createRipple)
150
- el.removeEventListener('touchmove', forbidRippleTask)
151
- el.removeEventListener('dragstart', removeRipple)
152
- document.removeEventListener('touchend', el._ripple!.removeRipple)
153
- document.removeEventListener('touchcancel', el._ripple!.removeRipple)
154
- }
155
-
156
- function updated(el: RippleHTMLElement, binding: DirectiveBinding<RippleOptions>) {
157
- const newBinding = {
158
- touchmoveForbid: binding.value?.touchmoveForbid ?? context.touchmoveForbid,
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
- }
174
- }
175
- }
176
-
177
- const Ripple: Directive & Plugin = {
178
- mounted,
179
- unmounted,
180
- updated,
181
- install(app: App) {
182
- app.directive('ripple', this)
183
- },
184
- }
185
-
186
- export const _RippleComponent = Ripple
187
-
188
- export default Ripple
1
+ import context from '../context'
2
+ import './ripple.less'
3
+ import '../styles/common.less'
4
+ import { supportTouch } from '../utils/elements'
5
+ import { createNamespace } from '../utils/components'
6
+ import type { Directive, Plugin, App } from 'vue'
7
+ import type { DirectiveBinding } from '@vue/runtime-core'
8
+
9
+ const { n } = createNamespace('ripple')
10
+
11
+ interface RippleStyles {
12
+ x: number
13
+ y: number
14
+ centerX: number
15
+ centerY: number
16
+ size: number
17
+ }
18
+
19
+ interface RippleOptions {
20
+ removeRipple: any
21
+ touchmoveForbid: boolean
22
+ color?: string
23
+ disabled?: boolean
24
+ tasker?: number | null
25
+ }
26
+
27
+ interface RippleHTMLElement extends HTMLElement {
28
+ _ripple?: RippleOptions
29
+ }
30
+
31
+ const ANIMATION_DURATION = 250
32
+
33
+ function setStyles(element: RippleHTMLElement) {
34
+ const { zIndex, position } = window.getComputedStyle(element)
35
+
36
+ element.style.overflow = 'hidden'
37
+ element.style.overflowX = 'hidden'
38
+ element.style.overflowY = 'hidden'
39
+ position === 'static' && (element.style.position = 'relative')
40
+ zIndex === 'auto' && (element.style.zIndex = '1')
41
+ }
42
+
43
+ function computeRippleStyles(element: RippleHTMLElement, event: TouchEvent): RippleStyles {
44
+ const { top, left }: DOMRect = element.getBoundingClientRect()
45
+ const { clientWidth, clientHeight } = element
46
+
47
+ const radius: number = Math.sqrt(clientWidth ** 2 + clientHeight ** 2) / 2
48
+ const size: number = radius * 2
49
+
50
+ const localX: number = event.touches[0].clientX - left
51
+ const localY: number = event.touches[0].clientY - top
52
+
53
+ const centerX: number = (clientWidth - radius * 2) / 2
54
+ const centerY: number = (clientHeight - radius * 2) / 2
55
+
56
+ const x: number = localX - radius
57
+ const y: number = localY - radius
58
+
59
+ return { x, y, centerX, centerY, size }
60
+ }
61
+
62
+ function createRipple(this: RippleHTMLElement, event: TouchEvent) {
63
+ const _ripple = this._ripple as RippleOptions
64
+ _ripple.removeRipple()
65
+
66
+ if (_ripple.disabled || _ripple.tasker) {
67
+ return
68
+ }
69
+
70
+ const task = () => {
71
+ _ripple.tasker = null
72
+
73
+ const { x, y, centerX, centerY, size }: RippleStyles = computeRippleStyles(this, event)
74
+ const ripple: RippleHTMLElement = document.createElement('div')
75
+ ripple.classList.add(n())
76
+ ripple.style.opacity = `0`
77
+ ripple.style.transform = `translate(${x}px, ${y}px) scale3d(.3, .3, .3)`
78
+ ripple.style.width = `${size}px`
79
+ ripple.style.height = `${size}px`
80
+ _ripple.color && (ripple.style.backgroundColor = _ripple.color)
81
+ ripple.dataset.createdAt = String(performance.now())
82
+
83
+ setStyles(this)
84
+
85
+ this.appendChild(ripple)
86
+
87
+ window.setTimeout(() => {
88
+ ripple.style.transform = `translate(${centerX}px, ${centerY}px) scale3d(1, 1, 1)`
89
+ ripple.style.opacity = `.25`
90
+ }, 20)
91
+ }
92
+
93
+ _ripple.tasker = window.setTimeout(task, 60)
94
+ }
95
+
96
+ function removeRipple(this: RippleHTMLElement) {
97
+ const _ripple = this._ripple as RippleOptions
98
+
99
+ const task = () => {
100
+ const ripples: NodeListOf<RippleHTMLElement> = this.querySelectorAll(`.${n()}`)
101
+ if (!ripples.length) {
102
+ return
103
+ }
104
+
105
+ const lastRipple: RippleHTMLElement = ripples[ripples.length - 1]
106
+ const delay: number = ANIMATION_DURATION - performance.now() + Number(lastRipple.dataset.createdAt)
107
+
108
+ setTimeout(() => {
109
+ lastRipple.style.opacity = `0`
110
+
111
+ setTimeout(() => lastRipple.parentNode?.removeChild(lastRipple), ANIMATION_DURATION)
112
+ }, delay)
113
+ }
114
+
115
+ _ripple.tasker ? setTimeout(task, 60) : task()
116
+ }
117
+
118
+ function forbidRippleTask(this: RippleHTMLElement) {
119
+ const _ripple = this._ripple as RippleOptions
120
+
121
+ if (!supportTouch()) {
122
+ return
123
+ }
124
+
125
+ if (!_ripple.touchmoveForbid) {
126
+ return
127
+ }
128
+
129
+ _ripple.tasker && window.clearTimeout(_ripple.tasker)
130
+ _ripple.tasker = null
131
+ }
132
+
133
+ function mounted(el: RippleHTMLElement, binding: DirectiveBinding<RippleOptions>) {
134
+ el._ripple = {
135
+ tasker: null,
136
+ ...(binding.value ?? {}),
137
+ touchmoveForbid: binding.value?.touchmoveForbid ?? context.touchmoveForbid,
138
+ removeRipple: removeRipple.bind(el),
139
+ }
140
+
141
+ el.addEventListener('touchstart', createRipple, { passive: true })
142
+ el.addEventListener('touchmove', forbidRippleTask, { passive: true })
143
+ el.addEventListener('dragstart', removeRipple, { passive: true })
144
+ document.addEventListener('touchend', el._ripple.removeRipple, { passive: true })
145
+ document.addEventListener('touchcancel', el._ripple.removeRipple, { passive: true })
146
+ }
147
+
148
+ function unmounted(el: RippleHTMLElement) {
149
+ el.removeEventListener('touchstart', createRipple)
150
+ el.removeEventListener('touchmove', forbidRippleTask)
151
+ el.removeEventListener('dragstart', removeRipple)
152
+ document.removeEventListener('touchend', el._ripple!.removeRipple)
153
+ document.removeEventListener('touchcancel', el._ripple!.removeRipple)
154
+ }
155
+
156
+ function updated(el: RippleHTMLElement, binding: DirectiveBinding<RippleOptions>) {
157
+ const newBinding = {
158
+ touchmoveForbid: binding.value?.touchmoveForbid ?? context.touchmoveForbid,
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
+ }
174
+ }
175
+ }
176
+
177
+ const Ripple: Directive & Plugin = {
178
+ mounted,
179
+ unmounted,
180
+ updated,
181
+ install(app: App) {
182
+ app.directive('ripple', this)
183
+ },
184
+ }
185
+
186
+ export const _RippleComponent = Ripple
187
+
188
+ export default Ripple
@@ -1,20 +1,20 @@
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
+ @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,41 +1,41 @@
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
+ <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>