@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
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,8 +1,8 @@
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 %> use', () => {
6
+ const app = createApp({}).use(<%- bigCamelizeName %>)
7
+ expect(app.component(<%- bigCamelizeName %>.name)).toBeTruthy()
8
+ })
@@ -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,12 @@
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
+
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,3 +1,3 @@
1
- .<%- namespace %>-<%- kebabCaseName %> {
2
-
3
- }
1
+ .<%- namespace %>-<%- kebabCaseName %> {
2
+
3
+ }
@@ -1 +1 @@
1
- export const props = {}
1
+ export const props = {}
@@ -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 './<%- 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,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="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,9 +1,9 @@
1
- coverage/**
2
- es/**
3
- umd/**
4
- site/**
5
- public/**
6
- types/global.d.ts
7
- *.md
8
- package.json
9
-
1
+ coverage/**
2
+ es/**
3
+ umd/**
4
+ site/**
5
+ public/**
6
+ types/global.d.ts
7
+ *.md
8
+ package.json
9
+
@@ -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
+ }