@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
package/site/utils.ts CHANGED
@@ -1,153 +1,167 @@
1
- import { onMounted, onUnmounted } from 'vue'
2
- import { get } from 'lodash-es'
3
- import { formatStyleVars } from './components/utils/elements'
4
-
5
- export * from './components/utils/components'
6
- export * from './components/utils/elements'
7
-
8
- export type StyleVars = Record<string, string>
9
-
10
- const mountedVarKeys: string[] = []
11
-
12
- function StyleProvider(styleVars: StyleVars | null = {}) {
13
- mountedVarKeys.forEach((key) => document.documentElement.style.removeProperty(key))
14
- mountedVarKeys.length = 0
15
-
16
- const styles: StyleVars = formatStyleVars(styleVars)
17
- Object.entries(styles).forEach(([key, value]) => {
18
- document.documentElement.style.setProperty(key, value)
19
- mountedVarKeys.push(key)
20
- })
21
- }
22
-
23
- export interface PCLocationInfo {
24
- language: string
25
- menuName: string
26
- }
27
-
28
- export function getPCLocationInfo(): PCLocationInfo {
29
- const [, language, menuName] = window.location.hash.split('/')
30
-
31
- return {
32
- language,
33
- menuName,
34
- }
35
- }
36
-
37
- export function isPhone() {
38
- return /Android|webOS|iPhone|iPod|BlackBerry|Pad/i.test(navigator.userAgent)
39
- }
40
-
41
- export enum MenuTypes {
42
- TITLE = 1,
43
- COMPONENT = 2,
44
- DOCUMENTATION = 3,
45
- }
46
-
47
- export function inIframe() {
48
- return window.self !== window.top
49
- }
50
-
51
- export function removeEmpty(object: Record<string, string> = {}) {
52
- return Object.keys(object).reduce((record: Record<string, string>, key) => {
53
- const value = object[key]
54
- value && (record[key] = value)
55
- return record
56
- }, {})
57
- }
58
-
59
- export function getHashSearch() {
60
- const { href } = window.location
61
- const hashSearch = href.slice(href.indexOf('?'))
62
-
63
- return new URLSearchParams(hashSearch)
64
- }
65
-
66
- export function watchLang(cb: (lang: string) => void, platform: 'pc' | 'mobile' = 'mobile') {
67
- const handleHashchange = () => {
68
- const language = platform === 'mobile' ? getHashSearch().get('language') ?? 'zh-CN' : getPCLocationInfo().language
69
-
70
- cb(language)
71
- }
72
-
73
- addRouteListener(handleHashchange)
74
-
75
- handleHashchange()
76
- }
77
-
78
- export function watchPlatform(cb: (platform: string) => void) {
79
- const handleHashchange = () => {
80
- const platform = getHashSearch().get('platform') ?? 'mobile'
81
- cb(platform)
82
- }
83
-
84
- addRouteListener(handleHashchange)
85
-
86
- handleHashchange()
87
- }
88
-
89
- export function watchThemes(
90
- cb: (themes: 'themes' | 'darkThemes', from: 'pc' | 'mobile' | 'default') => void,
91
- shouldUnmount = true
92
- ) {
93
- const handleThemesChange = (event: MessageEvent) => {
94
- const { data } = event
95
- if (data.action === 'themesChange') {
96
- cb(data.data, data.from)
97
- }
98
- }
99
-
100
- window.addEventListener('message', handleThemesChange)
101
-
102
- if (shouldUnmount) {
103
- onUnmounted(() => {
104
- window.removeEventListener('message', handleThemesChange)
105
- })
106
- }
107
-
108
- cb(getBrowserThemes(), 'default')
109
- }
110
-
111
- export function addRouteListener(cb: () => void) {
112
- onMounted(() => {
113
- window.addEventListener('hashchange', cb)
114
- window.addEventListener('popstate', cb)
115
- })
116
- onUnmounted(() => {
117
- window.removeEventListener('hashchange', cb)
118
- window.removeEventListener('popstate', cb)
119
- })
120
- }
121
-
122
- export function setThemes(config: Record<string, any>, name: 'themes' | 'darkThemes') {
123
- const themes = get(config, name, {})
124
- const styleVars = Object.entries(themes).reduce((styleVars, [key, value]) => {
125
- styleVars[`--site-config-${key}`] = value as string
126
- return styleVars
127
- }, {} as StyleVars)
128
-
129
- StyleProvider(styleVars)
130
- }
131
-
132
- export function getBrowserThemes(themes = 'VARLET_THEMES'): 'darkThemes' | 'themes' {
133
- let currentThemes = window.localStorage.getItem(themes) as 'darkThemes' | 'themes'
134
-
135
- if (!currentThemes) {
136
- currentThemes = window.matchMedia?.('(prefers-color-scheme: dark)').matches ? 'darkThemes' : 'themes'
137
- window.localStorage.setItem(themes, currentThemes)
138
- }
139
-
140
- return currentThemes
141
- }
142
-
143
- export function watchDarkMode(dark: StyleVars, cb?: (themes: 'darkThemes' | 'themes') => void) {
144
- watchThemes((themes) => {
145
- StyleProvider(themes === 'darkThemes' ? dark : null)
146
-
147
- cb?.(themes)
148
- })
149
- }
150
-
151
- export function utoa(data: string): string {
152
- return btoa(unescape(encodeURIComponent(data)))
153
- }
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
+ }
@@ -0,0 +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
+ })
@@ -0,0 +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>
@@ -0,0 +1,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)
@@ -0,0 +1,3 @@
1
+ export default {
2
+ // Example locale
3
+ }
@@ -0,0 +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 %>
@@ -0,0 +1,3 @@
1
+ .<%- namespace %>-<%- kebabCaseName %> {
2
+
3
+ }
@@ -0,0 +1 @@
1
+ export const props = {}
@@ -0,0 +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
+ })
@@ -0,0 +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,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
+ }
@@ -1,82 +1,82 @@
1
- # varlet-cli-app
2
-
3
- ### Reference
4
-
5
- [@varlet/cli 中文文档](https://github.com/varletjs/varlet/blob/dev/packages/varlet-cli/README.md)
6
- [@varlet/cli documentation](https://github.com/varletjs/varlet/blob/dev/packages/varlet-cli/README.en-US.md)
7
-
8
- ### Quickstart
9
-
10
- ```shell
11
- pnpm install
12
- pnpm dev
13
- ```
14
-
15
- ### Commands
16
-
17
- #### Start the development server
18
-
19
- ```shell
20
- pnpm dev
21
- ```
22
-
23
- #### Build documentation site
24
-
25
- ```shell
26
- pnpm build
27
- ```
28
-
29
- #### Building component libraries
30
-
31
- ```shell
32
- pnpm compile
33
- ```
34
-
35
- #### Lint code
36
-
37
- ```shell
38
- pnpm lint
39
- ```
40
-
41
- #### Run unit test
42
-
43
- ```shell
44
- pnpm test
45
- ```
46
-
47
- #### Run unit test in watch mode
48
-
49
- ```shell
50
- pnpm test:watch
51
- or
52
- pnpm test:watchAll
53
- ```
54
-
55
- #### Mount Git Hooks
56
-
57
- ```shell
58
- npx simple-git-hooks
59
- ```
60
-
61
- #### Generate changelog
62
-
63
- ```shell
64
- pnpm changelog
65
- ```
66
-
67
- #### Release
68
-
69
- tips:
70
- - 1.The registry of npm must be the official source of npm
71
- - 2.The npm must be logged in
72
-
73
- ```shell
74
- pnpm release
75
- ```
76
-
77
- #### Create component template files
78
-
79
- ```shell
80
- pnpm create <componentName>
81
- ```
82
-
1
+ # varlet-cli-app
2
+
3
+ ### Reference
4
+
5
+ [@varlet/cli 中文文档](https://github.com/varletjs/varlet/blob/dev/packages/varlet-cli/README.md)
6
+ [@varlet/cli documentation](https://github.com/varletjs/varlet/blob/dev/packages/varlet-cli/README.en-US.md)
7
+
8
+ ### Quickstart
9
+
10
+ ```shell
11
+ pnpm install
12
+ pnpm dev
13
+ ```
14
+
15
+ ### Commands
16
+
17
+ #### Start the development server
18
+
19
+ ```shell
20
+ pnpm dev
21
+ ```
22
+
23
+ #### Build documentation site
24
+
25
+ ```shell
26
+ pnpm build
27
+ ```
28
+
29
+ #### Building component libraries
30
+
31
+ ```shell
32
+ pnpm compile
33
+ ```
34
+
35
+ #### Lint code
36
+
37
+ ```shell
38
+ pnpm lint
39
+ ```
40
+
41
+ #### Run unit test
42
+
43
+ ```shell
44
+ pnpm test
45
+ ```
46
+
47
+ #### Run unit test in watch mode
48
+
49
+ ```shell
50
+ pnpm test:watch
51
+ or
52
+ pnpm test:watchAll
53
+ ```
54
+
55
+ #### Mount Git Hooks
56
+
57
+ ```shell
58
+ npx simple-git-hooks
59
+ ```
60
+
61
+ #### Generate changelog
62
+
63
+ ```shell
64
+ pnpm changelog
65
+ ```
66
+
67
+ #### Release
68
+
69
+ tips:
70
+ - 1.The registry of npm must be the official source of npm
71
+ - 2.The npm must be logged in
72
+
73
+ ```shell
74
+ pnpm release
75
+ ```
76
+
77
+ #### Create component template files
78
+
79
+ ```shell
80
+ pnpm create <componentName>
81
+ ```
82
+