@varlet/cli 2.0.0-alpha.1663499244572 → 2.0.0-alpha.1664031123039

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 (229) 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 +166 -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 +135 -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/vite.d.ts +3 -3
  27. package/lib/commands/vite.js +69 -20
  28. package/lib/compiler/compileModule.d.ts +5 -5
  29. package/lib/compiler/compileModule.js +190 -79
  30. package/lib/compiler/compileSFC.d.ts +2 -2
  31. package/lib/compiler/compileSFC.js +135 -86
  32. package/lib/compiler/compileScript.d.ts +17 -17
  33. package/lib/compiler/compileScript.js +194 -152
  34. package/lib/compiler/compileSiteEntry.d.ts +13 -13
  35. package/lib/compiler/compileSiteEntry.js +237 -140
  36. package/lib/compiler/compileStyle.d.ts +11 -11
  37. package/lib/compiler/compileStyle.js +91 -43
  38. package/lib/compiler/compileTemplateHighlight.d.ts +10 -10
  39. package/lib/compiler/compileTemplateHighlight.js +193 -145
  40. package/lib/compiler/compileTypes.d.ts +2 -2
  41. package/lib/compiler/compileTypes.js +85 -49
  42. package/lib/config/babel.config.d.ts +2 -2
  43. package/lib/config/babel.config.js +31 -30
  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/jest.config.d.ts +1 -0
  47. package/lib/config/jest.config.js +37 -0
  48. package/lib/config/jest.media.mock.d.ts +0 -0
  49. package/lib/config/jest.media.mock.js +2 -0
  50. package/lib/config/jest.style.mock.d.ts +0 -0
  51. package/lib/config/jest.style.mock.js +2 -0
  52. package/lib/config/varlet.config.d.ts +1 -1
  53. package/lib/config/varlet.config.js +24 -23
  54. package/lib/config/vite.config.d.ts +5 -5
  55. package/lib/config/vite.config.js +162 -157
  56. package/lib/index.d.ts +2 -2
  57. package/lib/index.js +102 -84
  58. package/lib/shared/constant.d.ts +43 -44
  59. package/lib/shared/constant.js +50 -51
  60. package/lib/shared/fsUtils.d.ts +12 -12
  61. package/lib/shared/fsUtils.js +108 -61
  62. package/lib/shared/logger.d.ts +8 -8
  63. package/lib/shared/logger.js +23 -23
  64. package/package.json +11 -11
  65. package/preset.js +3 -3
  66. package/site/components/button/Button.vue +106 -106
  67. package/site/components/button/button.less +183 -183
  68. package/site/components/button/index.ts +10 -10
  69. package/site/components/button/props.ts +78 -78
  70. package/site/components/cell/Cell.vue +54 -54
  71. package/site/components/cell/cell.less +78 -78
  72. package/site/components/cell/index.ts +10 -10
  73. package/site/components/cell/props.ts +27 -27
  74. package/site/components/code-example/CodeExample.vue +137 -137
  75. package/site/components/code-example/codeExample.less +41 -41
  76. package/site/components/code-example/index.ts +10 -10
  77. package/site/components/context/index.ts +21 -21
  78. package/site/components/context/lock.ts +92 -92
  79. package/site/components/context/zIndex.ts +20 -20
  80. package/site/components/icon/Icon.vue +75 -75
  81. package/site/components/icon/icon.less +26 -26
  82. package/site/components/icon/index.ts +10 -10
  83. package/site/components/icon/props.ts +24 -24
  84. package/site/components/loading/Loading.vue +84 -84
  85. package/site/components/loading/index.ts +10 -10
  86. package/site/components/loading/loading.less +505 -505
  87. package/site/components/loading/props.ts +42 -42
  88. package/site/components/popup/Popup.tsx +102 -102
  89. package/site/components/popup/index.ts +10 -10
  90. package/site/components/popup/popup.less +125 -125
  91. package/site/components/popup/props.ts +63 -63
  92. package/site/components/progress/Progress.vue +112 -112
  93. package/site/components/progress/index.ts +10 -10
  94. package/site/components/progress/progress.less +101 -101
  95. package/site/components/progress/props.ts +55 -55
  96. package/site/components/ripple/index.ts +188 -188
  97. package/site/components/ripple/ripple.less +20 -20
  98. package/site/components/snackbar/Snackbar.vue +41 -41
  99. package/site/components/snackbar/core.vue +132 -132
  100. package/site/components/snackbar/index.tsx +270 -270
  101. package/site/components/snackbar/props.ts +97 -97
  102. package/site/components/snackbar/snackbar.less +135 -135
  103. package/site/components/styles/common.less +64 -64
  104. package/site/components/styles/elevation.less +126 -126
  105. package/site/components/styles/var.less +27 -27
  106. package/site/components/utils/components.ts +117 -117
  107. package/site/components/utils/elements.ts +102 -102
  108. package/site/index.html +49 -49
  109. package/site/mobile/App.vue +291 -291
  110. package/site/mobile/components/AppHome.vue +134 -134
  111. package/site/mobile/components/AppType.vue +22 -22
  112. package/site/mobile/components/app-bar/AppBar.vue +65 -65
  113. package/site/mobile/components/app-bar/appBar.less +57 -57
  114. package/site/mobile/components/app-bar/index.ts +10 -10
  115. package/site/mobile/components/app-bar/props.ts +25 -25
  116. package/site/mobile/main.ts +78 -78
  117. package/site/mobile.html +41 -41
  118. package/site/module.d.ts +5 -5
  119. package/site/pc/App.vue +43 -43
  120. package/site/pc/Layout.vue +423 -423
  121. package/site/pc/components/AnimationBox.vue +33 -33
  122. package/site/pc/components/AppHeader.vue +368 -368
  123. package/site/pc/components/AppMobile.vue +60 -60
  124. package/site/pc/components/AppSidebar.vue +143 -143
  125. package/site/pc/components/LogoAnimation.vue +117 -117
  126. package/site/pc/floating.ts +9 -9
  127. package/site/pc/main.ts +100 -100
  128. package/site/pc/pages/index/index.less +176 -176
  129. package/site/pc/pages/index/index.vue +130 -130
  130. package/site/pc/pages/index/locale/en-US.ts +1 -1
  131. package/site/pc/pages/index/locale/zh-CN.ts +1 -1
  132. package/site/tsconfig.json +11 -11
  133. package/site/useProgress.ts +72 -72
  134. package/site/utils.ts +165 -167
  135. package/template/create/{tsx.ejs → [ComponentName].tsx.ejs} +13 -13
  136. package/template/create/{vue.ejs → [ComponentName].vue.ejs} +17 -17
  137. package/template/create/{less.ejs → [componentName].less.ejs} +3 -3
  138. package/template/create/__tests__/{index.spec.ejs → index.spec.js.ejs} +13 -8
  139. package/template/create/example/{index.ejs → index.vue.ejs} +15 -15
  140. package/template/create/example/locale/en-US.ts +3 -3
  141. package/template/create/example/locale/index.ts +23 -23
  142. package/template/create/example/locale/zh-CN.ts +3 -3
  143. package/template/create/{index.ejs → index.ts.ejs} +11 -12
  144. package/template/create/props.ts +1 -1
  145. package/template/generators/base/.prettierignore +14 -9
  146. package/template/generators/base/.prettierrc +5 -5
  147. package/template/generators/base/README.md +82 -82
  148. package/template/generators/base/babel.config.js +10 -10
  149. package/template/generators/base/public/logo.svg +30 -1
  150. package/template/generators/base/shims/shims-md.d.ts +4 -4
  151. package/template/generators/base/shims/shims-vue.d.ts +6 -6
  152. package/template/generators/base/tsconfig.json +13 -13
  153. package/template/generators/config/default/base/docs/home.zh-CN.md +2 -10
  154. package/template/generators/config/default/base/package.json +112 -105
  155. package/template/generators/config/default/base/types/basicComponent.d.ts +7 -7
  156. package/template/generators/config/default/base/types/button.d.ts +12 -12
  157. package/template/generators/config/default/base/types/index.d.ts +6 -6
  158. package/template/generators/config/default/base/varlet.config.js +45 -110
  159. package/template/generators/config/default/sfc/src/button/Button.vue +31 -30
  160. package/template/generators/config/default/sfc/src/button/__tests__/index.spec.js +7 -7
  161. package/template/generators/config/default/sfc/src/button/button.less +14 -14
  162. package/template/generators/config/default/sfc/src/button/docs/zh-CN.md +38 -47
  163. package/template/generators/config/default/sfc/src/button/example/BasicUse.vue +7 -7
  164. package/template/generators/config/default/sfc/src/button/example/ModifyColor.vue +7 -7
  165. package/template/generators/config/default/sfc/src/button/example/index.vue +12 -13
  166. package/template/generators/config/default/sfc/src/button/index.ts +10 -10
  167. package/template/generators/config/default/tsx/src/button/Button.tsx +29 -29
  168. package/template/generators/config/default/tsx/src/button/__tests__/index.spec.js +7 -7
  169. package/template/generators/config/default/tsx/src/button/button.less +14 -14
  170. package/template/generators/config/default/tsx/src/button/docs/zh-CN.md +38 -47
  171. package/template/generators/config/default/tsx/src/button/example/BasicUse.vue +7 -7
  172. package/template/generators/config/default/tsx/src/button/example/ModifyColor.vue +7 -7
  173. package/template/generators/config/default/tsx/src/button/example/index.vue +12 -13
  174. package/template/generators/config/default/tsx/src/button/index.ts +10 -10
  175. package/template/generators/config/i18n/base/docs/home.en-US.md +3 -11
  176. package/template/generators/config/i18n/base/docs/home.zh-CN.md +2 -10
  177. package/template/generators/config/i18n/base/package.json +112 -105
  178. package/template/generators/config/i18n/base/types/basicComponent.d.ts +7 -7
  179. package/template/generators/config/i18n/base/types/button.d.ts +12 -12
  180. package/template/generators/config/i18n/base/types/index.d.ts +7 -7
  181. package/template/generators/config/i18n/base/types/locale.d.ts +24 -24
  182. package/template/generators/config/i18n/base/varlet.config.js +47 -122
  183. package/template/generators/config/i18n/sfc/src/button/Button.vue +37 -36
  184. package/template/generators/config/i18n/sfc/src/button/__tests__/index.spec.js +7 -7
  185. package/template/generators/config/i18n/sfc/src/button/button.less +14 -14
  186. package/template/generators/config/i18n/sfc/src/button/docs/en-US.md +38 -34
  187. package/template/generators/config/i18n/sfc/src/button/docs/zh-CN.md +38 -34
  188. package/template/generators/config/i18n/sfc/src/button/example/BasicUse.vue +11 -11
  189. package/template/generators/config/i18n/sfc/src/button/example/ModifyColor.vue +11 -11
  190. package/template/generators/config/i18n/sfc/src/button/example/index.vue +16 -13
  191. package/template/generators/config/i18n/sfc/src/button/example/locale/en-US.ts +5 -5
  192. package/template/generators/config/i18n/sfc/src/button/example/locale/index.ts +23 -23
  193. package/template/generators/config/i18n/sfc/src/button/example/locale/zh-CN.ts +5 -5
  194. package/template/generators/config/i18n/sfc/src/button/index.ts +10 -10
  195. package/template/generators/config/i18n/sfc/src/locale/__tests__/index.spec.js +51 -51
  196. package/template/generators/config/i18n/sfc/src/locale/docs/en-US.md +26 -26
  197. package/template/generators/config/i18n/sfc/src/locale/docs/zh-CN.md +25 -25
  198. package/template/generators/config/i18n/sfc/src/locale/en-US.d.ts +5 -5
  199. package/template/generators/config/i18n/sfc/src/locale/en-US.ts +7 -7
  200. package/template/generators/config/i18n/sfc/src/locale/index.ts +67 -67
  201. package/template/generators/config/i18n/sfc/src/locale/zh-CN.d.ts +5 -5
  202. package/template/generators/config/i18n/sfc/src/locale/zh-CN.ts +7 -7
  203. package/template/generators/config/i18n/tsx/src/button/Button.tsx +31 -33
  204. package/template/generators/config/i18n/tsx/src/button/__tests__/index.spec.js +7 -7
  205. package/template/generators/config/i18n/tsx/src/button/button.less +14 -14
  206. package/template/generators/config/i18n/tsx/src/button/docs/en-US.md +38 -34
  207. package/template/generators/config/i18n/tsx/src/button/docs/zh-CN.md +38 -34
  208. package/template/generators/config/i18n/tsx/src/button/example/BasicUse.vue +11 -11
  209. package/template/generators/config/i18n/tsx/src/button/example/ModifyColor.vue +11 -11
  210. package/template/generators/config/i18n/tsx/src/button/example/index.vue +15 -13
  211. package/template/generators/config/i18n/tsx/src/button/example/locale/en-US.ts +5 -5
  212. package/template/generators/config/i18n/tsx/src/button/example/locale/index.ts +23 -23
  213. package/template/generators/config/i18n/tsx/src/button/example/locale/zh-CN.ts +5 -5
  214. package/template/generators/config/i18n/tsx/src/button/index.ts +10 -10
  215. package/template/generators/config/i18n/tsx/src/locale/__tests__/index.spec.js +51 -51
  216. package/template/generators/config/i18n/tsx/src/locale/docs/en-US.md +26 -26
  217. package/template/generators/config/i18n/tsx/src/locale/docs/zh-CN.md +25 -25
  218. package/template/generators/config/i18n/tsx/src/locale/en-US.d.ts +5 -5
  219. package/template/generators/config/i18n/tsx/src/locale/en-US.ts +7 -7
  220. package/template/generators/config/i18n/tsx/src/locale/index.ts +67 -67
  221. package/template/generators/config/i18n/tsx/src/locale/zh-CN.d.ts +5 -5
  222. package/template/generators/config/i18n/tsx/src/locale/zh-CN.ts +7 -7
  223. package/tsconfig.json +14 -15
  224. package/varlet.default.config.js +3 -3
  225. package/lib/commands/test.d.ts +0 -7
  226. package/lib/commands/test.js +0 -26
  227. package/lib/config/vitest.config.d.ts +0 -2
  228. package/lib/config/vitest.config.js +0 -28
  229. package/template/generators/base/public/highlight.css +0 -1
package/site/utils.ts CHANGED
@@ -1,167 +1,165 @@
1
- import { onMounted, onUnmounted } from 'vue'
2
- import { get } from 'lodash-es'
3
- import { formatStyleVars } from './components/utils/elements'
4
- import config from "@config";
5
-
6
- export * from './components/utils/components'
7
- export * from './components/utils/elements'
8
-
9
- export type StyleVars = Record<string, string>
10
-
11
- const mountedVarKeys: string[] = []
12
-
13
- function StyleProvider(styleVars: StyleVars | null = {}) {
14
- mountedVarKeys.forEach((key) => document.documentElement.style.removeProperty(key))
15
- mountedVarKeys.length = 0
16
-
17
- const styles: StyleVars = formatStyleVars(styleVars)
18
- Object.entries(styles).forEach(([key, value]) => {
19
- document.documentElement.style.setProperty(key, value)
20
- mountedVarKeys.push(key)
21
- })
22
- }
23
-
24
- export interface PCLocationInfo {
25
- language: string
26
- menuName: string
27
- }
28
-
29
- export function getPCLocationInfo(): PCLocationInfo {
30
- const [, language, menuName] = window.location.hash.split('/')
31
-
32
- return {
33
- language,
34
- menuName,
35
- }
36
- }
37
-
38
- export function isPhone() {
39
- return /Android|webOS|iPhone|iPod|BlackBerry|Pad/i.test(navigator.userAgent)
40
- }
41
-
42
- export enum MenuTypes {
43
- TITLE = 1,
44
- COMPONENT = 2,
45
- DOCUMENTATION = 3,
46
- }
47
-
48
- export function inIframe() {
49
- return window.self !== window.top
50
- }
51
-
52
- export function removeEmpty(object: Record<string, string> = {}) {
53
- return Object.keys(object).reduce((record: Record<string, string>, key) => {
54
- const value = object[key]
55
- value && (record[key] = value)
56
- return record
57
- }, {})
58
- }
59
-
60
- export function getHashSearch() {
61
- const { href } = window.location
62
- const hashSearch = href.slice(href.indexOf('?'))
63
-
64
- return new URLSearchParams(hashSearch)
65
- }
66
-
67
- export function watchLang(cb: (lang: string) => void, platform: 'pc' | 'mobile' = 'mobile') {
68
- const handleHashchange = () => {
69
- const language = platform === 'mobile' ? getHashSearch().get('language') ?? 'zh-CN' : getPCLocationInfo().language
70
-
71
- cb(language)
72
- }
73
-
74
- addRouteListener(handleHashchange)
75
-
76
- handleHashchange()
77
- }
78
-
79
- export function watchPlatform(cb: (platform: string) => void) {
80
- const handleHashchange = () => {
81
- const platform = getHashSearch().get('platform') ?? 'mobile'
82
- cb(platform)
83
- }
84
-
85
- addRouteListener(handleHashchange)
86
-
87
- handleHashchange()
88
- }
89
-
90
- export function watchTheme(
91
- cb: (theme: Theme, from: 'pc' | 'mobile' | 'default' | 'playground') => void,
92
- shouldUnmount = true
93
- ) {
94
- const handleThemeChange = (event: MessageEvent) => {
95
- const { data } = event
96
- if (data.action === 'theme-change') {
97
- cb(data.data, data.from)
98
- }
99
- }
100
-
101
- window.addEventListener('message', handleThemeChange)
102
-
103
- if (shouldUnmount) {
104
- onUnmounted(() => {
105
- window.removeEventListener('message', handleThemeChange)
106
- })
107
- }
108
-
109
- cb(getBrowserTheme(), 'default')
110
- }
111
-
112
- export function addRouteListener(cb: () => void) {
113
- onMounted(() => {
114
- window.addEventListener('hashchange', cb)
115
- window.addEventListener('popstate', cb)
116
- })
117
- onUnmounted(() => {
118
- window.removeEventListener('hashchange', cb)
119
- window.removeEventListener('popstate', cb)
120
- })
121
- }
122
-
123
- export type Theme = 'lightTheme' | 'darkTheme'
124
-
125
- export function setTheme(config: Record<string, any>, name: Theme) {
126
- const themeConfig = get(config, name, {})
127
- const styleVars = Object.entries(themeConfig).reduce((styleVars, [key, value]) => {
128
- styleVars[`--site-config-${key}`] = value as string
129
- return styleVars
130
- }, {} as StyleVars)
131
-
132
- StyleProvider(styleVars)
133
- }
134
-
135
- export function getBrowserTheme(): Theme {
136
- const themeKey = get(config, 'themeKey')
137
- const darkThemeConfig = get(config, 'darkTheme')
138
-
139
- if (!darkThemeConfig) {
140
- return 'lightTheme'
141
- }
142
-
143
- const storageTheme = window.localStorage.getItem(themeKey) as Theme
144
-
145
- if (!storageTheme) {
146
- const preferTheme = window.matchMedia?.('(prefers-color-scheme: dark)').matches
147
- ? 'darkTheme'
148
- : 'lightTheme'
149
- window.localStorage.setItem(themeKey, preferTheme)
150
-
151
- return preferTheme
152
- }
153
-
154
- return storageTheme
155
- }
156
-
157
- export function watchDarkMode(dark: StyleVars, cb?: (theme: Theme) => void) {
158
- watchTheme((theme) => {
159
- StyleProvider(theme === 'darkTheme' ? dark : null)
160
-
161
- cb?.(theme)
162
- })
163
- }
164
-
165
- export function utoa(data: string): string {
166
- return btoa(unescape(encodeURIComponent(data)))
167
- }
1
+ import { onMounted, onUnmounted } from 'vue'
2
+ import { get } from 'lodash-es'
3
+ import { formatStyleVars } from './components/utils/elements'
4
+ import config from '@config'
5
+
6
+ export * from './components/utils/components'
7
+ export * from './components/utils/elements'
8
+
9
+ export type StyleVars = Record<string, string>
10
+
11
+ const mountedVarKeys: string[] = []
12
+
13
+ function StyleProvider(styleVars: StyleVars | null = {}) {
14
+ mountedVarKeys.forEach((key) => document.documentElement.style.removeProperty(key))
15
+ mountedVarKeys.length = 0
16
+
17
+ const styles: StyleVars = formatStyleVars(styleVars)
18
+ Object.entries(styles).forEach(([key, value]) => {
19
+ document.documentElement.style.setProperty(key, value)
20
+ mountedVarKeys.push(key)
21
+ })
22
+ }
23
+
24
+ export interface PCLocationInfo {
25
+ language: string
26
+ menuName: string
27
+ }
28
+
29
+ export function getPCLocationInfo(): PCLocationInfo {
30
+ const [, language, menuName] = window.location.hash.split('/')
31
+
32
+ return {
33
+ language,
34
+ menuName,
35
+ }
36
+ }
37
+
38
+ export function isPhone() {
39
+ return /Android|webOS|iPhone|iPod|BlackBerry|Pad/i.test(navigator.userAgent)
40
+ }
41
+
42
+ export enum MenuTypes {
43
+ TITLE = 1,
44
+ COMPONENT = 2,
45
+ DOCUMENTATION = 3,
46
+ }
47
+
48
+ export function inIframe() {
49
+ return window.self !== window.top
50
+ }
51
+
52
+ export function removeEmpty(object: Record<string, string> = {}) {
53
+ return Object.keys(object).reduce((record: Record<string, string>, key) => {
54
+ const value = object[key]
55
+ value && (record[key] = value)
56
+ return record
57
+ }, {})
58
+ }
59
+
60
+ export function getHashSearch() {
61
+ const { href } = window.location
62
+ const hashSearch = href.slice(href.indexOf('?'))
63
+
64
+ return new URLSearchParams(hashSearch)
65
+ }
66
+
67
+ export function watchLang(cb: (lang: string) => void, platform: 'pc' | 'mobile' = 'mobile') {
68
+ const handleHashchange = () => {
69
+ const language = platform === 'mobile' ? getHashSearch().get('language') ?? 'zh-CN' : getPCLocationInfo().language
70
+
71
+ cb(language)
72
+ }
73
+
74
+ addRouteListener(handleHashchange)
75
+
76
+ handleHashchange()
77
+ }
78
+
79
+ export function watchPlatform(cb: (platform: string) => void) {
80
+ const handleHashchange = () => {
81
+ const platform = getHashSearch().get('platform') ?? 'mobile'
82
+ cb(platform)
83
+ }
84
+
85
+ addRouteListener(handleHashchange)
86
+
87
+ handleHashchange()
88
+ }
89
+
90
+ export function watchTheme(
91
+ cb: (theme: Theme, from: 'pc' | 'mobile' | 'default' | 'playground') => void,
92
+ shouldUnmount = true
93
+ ) {
94
+ const handleThemeChange = (event: MessageEvent) => {
95
+ const { data } = event
96
+ if (data.action === 'theme-change') {
97
+ cb(data.data, data.from)
98
+ }
99
+ }
100
+
101
+ window.addEventListener('message', handleThemeChange)
102
+
103
+ if (shouldUnmount) {
104
+ onUnmounted(() => {
105
+ window.removeEventListener('message', handleThemeChange)
106
+ })
107
+ }
108
+
109
+ cb(getBrowserTheme(), 'default')
110
+ }
111
+
112
+ export function addRouteListener(cb: () => void) {
113
+ onMounted(() => {
114
+ window.addEventListener('hashchange', cb)
115
+ window.addEventListener('popstate', cb)
116
+ })
117
+ onUnmounted(() => {
118
+ window.removeEventListener('hashchange', cb)
119
+ window.removeEventListener('popstate', cb)
120
+ })
121
+ }
122
+
123
+ export type Theme = 'lightTheme' | 'darkTheme'
124
+
125
+ export function setTheme(config: Record<string, any>, name: Theme) {
126
+ const themeConfig = get(config, name, {})
127
+ const styleVars = Object.entries(themeConfig).reduce((styleVars, [key, value]) => {
128
+ styleVars[`--site-config-${key}`] = value as string
129
+ return styleVars
130
+ }, {} as StyleVars)
131
+
132
+ StyleProvider(styleVars)
133
+ }
134
+
135
+ export function getBrowserTheme(): Theme {
136
+ const themeKey = get(config, 'themeKey')
137
+ const darkThemeConfig = get(config, 'darkTheme')
138
+
139
+ if (!darkThemeConfig) {
140
+ return 'lightTheme'
141
+ }
142
+
143
+ const storageTheme = window.localStorage.getItem(themeKey) as Theme
144
+
145
+ if (!storageTheme) {
146
+ const preferTheme = window.matchMedia?.('(prefers-color-scheme: dark)').matches ? 'darkTheme' : 'lightTheme'
147
+ window.localStorage.setItem(themeKey, preferTheme)
148
+
149
+ return preferTheme
150
+ }
151
+
152
+ return storageTheme
153
+ }
154
+
155
+ export function watchDarkMode(dark: StyleVars, cb?: (theme: Theme) => void) {
156
+ watchTheme((theme) => {
157
+ StyleProvider(theme === 'darkTheme' ? dark : null)
158
+
159
+ cb?.(theme)
160
+ })
161
+ }
162
+
163
+ export function utoa(data: string): string {
164
+ return btoa(unescape(encodeURIComponent(data)))
165
+ }
@@ -1,13 +1,13 @@
1
- import { defineComponent } from 'vue'
2
- import { props } from './props'
3
- import './<%- kebabCaseName %>.less'
4
-
5
- export default defineComponent({
6
- name: '<%- bigCamelizeNamespace + bigCamelizeName %>',
7
- props,
8
- setup(props, { slots }) {
9
- return () => {
10
- return <div>{ slots.default?.() }</div>
11
- }
12
- },
13
- })
1
+ import { defineComponent } from 'vue'
2
+ import { props } from './props'
3
+ import './<%- camelizeName %>.less'
4
+
5
+ export default defineComponent({
6
+ name: '<%- bigCamelizeNamespace + bigCamelizeName %>',
7
+ props,
8
+ setup(props, { slots }) {
9
+ return () => {
10
+ return <div class="<%- namespace %>-<%- kebabCaseName %>">{ slots.default?.() }</div>
11
+ }
12
+ },
13
+ })
@@ -1,17 +1,17 @@
1
- <template>
2
- <div class="var-<%- kebabCaseName %>"></div>
3
- </template>
4
-
5
- <script lang="ts">
6
- import { defineComponent } from 'vue'
7
- import { props } from './props'
8
-
9
- export default defineComponent({
10
- name: '<%- bigCamelizeNamespace + bigCamelizeName %>',
11
- props
12
- })
13
- </script>
14
-
15
- <style lang="less">
16
- @import './<%- kebabCaseName %>.less';
17
- </style>
1
+ <template>
2
+ <div class="<%- namespace %>-<%- kebabCaseName %>"></div>
3
+ </template>
4
+
5
+ <script lang="ts">
6
+ import { defineComponent } from 'vue'
7
+ import { props } from './props'
8
+
9
+ export default defineComponent({
10
+ name: '<%- bigCamelizeNamespace + bigCamelizeName %>',
11
+ props
12
+ })
13
+ </script>
14
+
15
+ <style lang="less">
16
+ @import './<%- camelizeName %>.less';
17
+ </style>
@@ -1,3 +1,3 @@
1
- .<%- namespace %>-<%- kebabCaseName %> {
2
-
3
- }
1
+ .<%- namespace %>-<%- kebabCaseName %> {
2
+
3
+ }
@@ -1,8 +1,13 @@
1
- import <%- bigCamelizeName %> from '..'
2
- import { createApp } from 'vue'
3
- import { mount } from '@vue/test-utils'
4
-
5
- test('test <%- kebabCaseName %> use', () => {
6
- const app = createApp({}).use(<%- bigCamelizeName %>)
7
- expect(app.component(<%- bigCamelizeName %>.name)).toBeTruthy()
8
- })
1
+ import <%- bigCamelizeName %> from '..'
2
+ import { createApp } from 'vue'
3
+ import { mount } from '@vue/test-utils'
4
+
5
+ test('test <%- kebabCaseName %> plugin', () => {
6
+ const app = createApp({}).use(<%- bigCamelizeName %>)
7
+ expect(app.component(<%- bigCamelizeName %>.name)).toBeTruthy()
8
+ })
9
+
10
+ test('test <%- kebabCaseName %> snapshot', () => {
11
+ const wrapper = mount(<%- bigCamelizeName %>)
12
+ expect(wrapper.html()).toMatchSnapshot()
13
+ })
@@ -1,15 +1,15 @@
1
- <script setup>
2
- import <%- bigCamelizeNamespace + bigCamelizeName %> from '../index'
3
- import AppType from '@varlet/cli/site/mobile/components/AppType'
4
- <% if (locale) { -%>
5
- import { watchLang } from '@varlet/cli/site/utils'
6
- import { use, pack } from './locale'
7
-
8
- watchLang(use)
9
- <% } -%>
10
- </script>
11
-
12
- <template>
13
- <app-type>Mobile phone example code</app-type>
14
- <var-<%- kebabCaseName %>/>
15
- </template>
1
+ <script setup>
2
+ import <%- bigCamelizeNamespace + bigCamelizeName %> from '../index'
3
+ import AppType from '@varlet/cli/site/mobile/components/AppType'
4
+ <% if (locale) { -%>
5
+ import { watchLang } from '@varlet/cli/site/utils'
6
+ import { use, pack } from './locale'
7
+
8
+ watchLang(use)
9
+ <% } -%>
10
+ </script>
11
+
12
+ <template>
13
+ <app-type>Mobile phone example code</app-type>
14
+ <var-<%- kebabCaseName %>/>
15
+ </template>
@@ -1,3 +1,3 @@
1
- export default {
2
- // Example locale
3
- }
1
+ export default {
2
+ // Example locale
3
+ }
@@ -1,23 +1,23 @@
1
- // lib
2
- import _zhCN from '../../../locale/zh-CN'
3
- import _enCN from '../../../locale/en-US'
4
- // mobile example doc
5
- import zhCN from './zh-CN'
6
- import enUS from './en-US'
7
- import { useLocale, add as _add, use as _use } from '../../../locale'
8
-
9
- const { add, use: exampleUse, pack, packs, merge } = useLocale()
10
-
11
- const use = (lang: string) => {
12
- _use(lang)
13
- exampleUse(lang)
14
- }
15
-
16
- export { add, pack, packs, merge, use }
17
-
18
- // lib
19
- _add('zh-CN', _zhCN)
20
- _add('en-US', _enCN)
21
- // mobile example doc
22
- add('zh-CN', zhCN as any)
23
- add('en-US', enUS as any)
1
+ // lib
2
+ import _zhCN from '../../../locale/zh-CN'
3
+ import _enCN from '../../../locale/en-US'
4
+ // mobile example doc
5
+ import zhCN from './zh-CN'
6
+ import enUS from './en-US'
7
+ import { useLocale, add as _add, use as _use } from '../../../locale'
8
+
9
+ const { add, use: exampleUse, pack, packs, merge } = useLocale()
10
+
11
+ const use = (lang: string) => {
12
+ _use(lang)
13
+ exampleUse(lang)
14
+ }
15
+
16
+ export { add, pack, packs, merge, use }
17
+
18
+ // lib
19
+ _add('zh-CN', _zhCN)
20
+ _add('en-US', _enCN)
21
+ // mobile example doc
22
+ add('zh-CN', zhCN as any)
23
+ add('en-US', enUS as any)
@@ -1,3 +1,3 @@
1
- export default {
2
- // Example locale
3
- }
1
+ export default {
2
+ // Example locale
3
+ }
@@ -1,12 +1,11 @@
1
- // Component entry, the folder where the file exists will be exposed to the user
2
-
3
- import <%- bigCamelizeName %> from './<%- bigCamelizeName %>.vue'
4
- import type { App } from 'vue'
5
-
6
- <%- bigCamelizeName %>.install = function(app: App) {
7
- app.component(<%- bigCamelizeName %>.name, <%- bigCamelizeName %>)
8
- }
9
-
10
- export const _<%- bigCamelizeName %>Component = <%- bigCamelizeName %>
11
-
12
- export default <%- bigCamelizeName %>
1
+ // Component entry, the folder where the file exists will be exposed to the user
2
+ import <%- bigCamelizeName %> from './<%- bigCamelizeName %>.vue'
3
+ import type { App } from 'vue'
4
+
5
+ <%- bigCamelizeName %>.install = function(app: App) {
6
+ app.component(<%- bigCamelizeName %>.name, <%- bigCamelizeName %>)
7
+ }
8
+
9
+ export const _<%- bigCamelizeName %>Component = <%- bigCamelizeName %>
10
+
11
+ export default <%- bigCamelizeName %>
@@ -1 +1 @@
1
- export const props = {}
1
+ export const props = {}
@@ -1,9 +1,14 @@
1
- coverage/**
2
- es/**
3
- umd/**
4
- site/**
5
- public/**
6
- types/global.d.ts
7
- *.md
8
- package.json
9
-
1
+ coverage/**
2
+ highlight/**
3
+ es/**
4
+ umd/**
5
+ lib/**
6
+ site/**
7
+ public/**
8
+ .varlet/**
9
+ types/index.d.ts
10
+ *.md
11
+ package.json
12
+
13
+ pnpm-lock.yaml
14
+ pnpm-workspace.yaml
@@ -1,5 +1,5 @@
1
- {
2
- "printWidth": 120,
3
- "singleQuote": true,
4
- "semi": false
5
- }
1
+ {
2
+ "printWidth": 120,
3
+ "singleQuote": true,
4
+ "semi": false
5
+ }