@varlet/cli 1.27.20 → 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 (176) hide show
  1. package/LICENCE +1 -1
  2. package/lib/commands/commitLint.js +1 -1
  3. package/lib/commands/compile.d.ts +5 -3
  4. package/lib/commands/compile.js +2 -2
  5. package/lib/commands/create.d.ts +8 -3
  6. package/lib/commands/create.js +100 -51
  7. package/lib/commands/dev.d.ts +4 -2
  8. package/lib/commands/dev.js +3 -3
  9. package/lib/commands/gen.d.ts +8 -1
  10. package/lib/commands/gen.js +61 -33
  11. package/lib/commands/jest.js +11 -7
  12. package/lib/commands/release.d.ts +4 -2
  13. package/lib/commands/release.js +2 -2
  14. package/lib/commands/test.d.ts +7 -0
  15. package/lib/commands/test.js +26 -0
  16. package/lib/commands/useVite.d.ts +1 -0
  17. package/lib/commands/useVite.js +70 -0
  18. package/lib/commands/vite.d.ts +3 -0
  19. package/lib/commands/vite.js +69 -0
  20. package/lib/compiler/compileModule.js +9 -5
  21. package/lib/compiler/compileSFC.js +14 -11
  22. package/lib/compiler/compileScript.js +4 -12
  23. package/lib/compiler/compileStyle.d.ts +1 -1
  24. package/lib/compiler/compileStyle.js +7 -17
  25. package/lib/compiler/compileTypes.js +4 -7
  26. package/lib/config/jest.config.js +1 -0
  27. package/lib/config/vite.config.js +1 -1
  28. package/lib/config/vitest.config.d.ts +2 -0
  29. package/lib/config/vitest.config.js +28 -0
  30. package/lib/index.js +22 -3
  31. package/lib/shared/constant.js +1 -1
  32. package/lib/shared/logger.d.ts +1 -0
  33. package/lib/shared/logger.js +3 -0
  34. package/package.json +16 -12
  35. package/site/components/button/Button.vue +45 -23
  36. package/site/components/button/button.less +6 -6
  37. package/site/components/button/props.ts +10 -2
  38. package/site/components/cell/Cell.vue +24 -12
  39. package/site/components/cell/cell.less +11 -7
  40. package/site/components/cell/props.ts +2 -2
  41. package/site/components/code-example/CodeExample.vue +17 -23
  42. package/site/components/context/index.ts +4 -0
  43. package/site/components/context/lock.ts +30 -41
  44. package/site/components/icon/Icon.vue +16 -9
  45. package/site/components/loading/Loading.vue +54 -25
  46. package/site/components/loading/loading.less +120 -35
  47. package/site/components/loading/props.ts +7 -2
  48. package/site/components/popup/Popup.tsx +102 -0
  49. package/site/components/popup/index.ts +10 -0
  50. package/site/components/popup/popup.less +125 -0
  51. package/site/components/popup/props.ts +63 -0
  52. package/site/components/progress/Progress.vue +28 -24
  53. package/site/components/progress/progress.less +16 -13
  54. package/site/components/progress/props.ts +1 -1
  55. package/site/components/ripple/index.ts +28 -7
  56. package/site/components/ripple/ripple.less +3 -0
  57. package/site/components/snackbar/Snackbar.vue +10 -7
  58. package/site/components/snackbar/core.vue +37 -22
  59. package/site/components/snackbar/index.tsx +14 -14
  60. package/site/components/snackbar/props.ts +10 -7
  61. package/site/components/utils/components.ts +49 -1
  62. package/site/components/utils/elements.ts +17 -0
  63. package/site/mobile/App.vue +42 -42
  64. package/site/mobile/components/AppHome.vue +1 -1
  65. package/site/mobile/components/app-bar/AppBar.vue +17 -21
  66. package/site/mobile/components/app-bar/appBar.less +2 -1
  67. package/site/mobile/main.ts +6 -2
  68. package/site/pc/Layout.vue +93 -67
  69. package/site/pc/components/AnimationBox.vue +3 -15
  70. package/site/pc/components/AppHeader.vue +110 -97
  71. package/site/pc/components/AppMobile.vue +8 -2
  72. package/site/pc/components/AppSidebar.vue +19 -10
  73. package/site/pc/components/LogoAnimation.vue +29 -31
  74. package/site/pc/floating.ts +3 -3
  75. package/site/pc/main.ts +6 -0
  76. package/site/pc/pages/index/index.less +142 -197
  77. package/site/pc/pages/index/index.vue +65 -80
  78. package/site/pc/pages/index/locale/en-US.ts +1 -5
  79. package/site/pc/pages/index/locale/zh-CN.ts +1 -5
  80. package/site/useProgress.ts +14 -17
  81. package/site/utils.ts +32 -20
  82. package/template/create/__tests__/index.spec.ejs +8 -0
  83. package/template/create/docs/en-US.md +0 -0
  84. package/template/create/docs/zh-CN.md +0 -0
  85. package/template/create/example/index.ejs +15 -0
  86. package/template/create/example/locale/en-US.ts +3 -0
  87. package/{generators/config/i18n/sfc/src/button → template/create}/example/locale/index.ts +0 -0
  88. package/template/create/example/locale/zh-CN.ts +3 -0
  89. package/template/create/index.ejs +12 -0
  90. package/template/create/less.ejs +3 -0
  91. package/template/create/props.ts +1 -0
  92. package/template/create/tsx.ejs +13 -0
  93. package/template/create/vue.ejs +17 -0
  94. package/{generators → template/generators}/base/.prettierignore +0 -0
  95. package/{generators → template/generators}/base/.prettierrc +0 -0
  96. package/{generators → template/generators}/base/README.md +0 -0
  97. package/{generators → template/generators}/base/babel.config.js +0 -0
  98. package/{generators → template/generators}/base/public/highlight.css +0 -0
  99. package/{generators → template/generators}/base/public/logo.svg +0 -0
  100. package/{generators → template/generators}/base/shims/shims-md.d.ts +0 -0
  101. package/{generators → template/generators}/base/shims/shims-vue.d.ts +0 -0
  102. package/{generators → template/generators}/base/tsconfig.json +0 -0
  103. package/{generators → template/generators}/config/default/base/docs/home.zh-CN.md +0 -0
  104. package/{generators → template/generators}/config/default/base/package.json +1 -1
  105. package/{generators → template/generators}/config/default/base/types/basicComponent.d.ts +0 -0
  106. package/{generators → template/generators}/config/default/base/types/button.d.ts +0 -0
  107. package/{generators → template/generators}/config/default/base/types/index.d.ts +0 -0
  108. package/{generators → template/generators}/config/default/base/varlet.config.js +1 -1
  109. package/{generators → template/generators}/config/default/sfc/src/button/Button.vue +6 -6
  110. package/{generators → template/generators}/config/default/sfc/src/button/__tests__/index.spec.js +0 -0
  111. package/{generators/config/default/tsx → template/generators/config/default/sfc}/src/button/button.less +1 -1
  112. package/{generators → template/generators}/config/default/sfc/src/button/docs/zh-CN.md +0 -0
  113. package/{generators → template/generators}/config/default/sfc/src/button/example/BasicUse.vue +0 -0
  114. package/{generators → template/generators}/config/default/sfc/src/button/example/ModifyColor.vue +0 -0
  115. package/{generators → template/generators}/config/default/sfc/src/button/example/index.vue +2 -2
  116. package/{generators → template/generators}/config/default/sfc/src/button/index.ts +0 -0
  117. package/{generators → template/generators}/config/default/tsx/src/button/Button.tsx +11 -13
  118. package/{generators → template/generators}/config/default/tsx/src/button/__tests__/index.spec.js +0 -0
  119. package/{generators/config/i18n → template/generators/config/default}/tsx/src/button/button.less +1 -1
  120. package/{generators → template/generators}/config/default/tsx/src/button/docs/zh-CN.md +0 -0
  121. package/{generators → template/generators}/config/default/tsx/src/button/example/BasicUse.vue +0 -0
  122. package/{generators → template/generators}/config/default/tsx/src/button/example/ModifyColor.vue +0 -0
  123. package/{generators → template/generators}/config/default/tsx/src/button/example/index.vue +2 -2
  124. package/{generators → template/generators}/config/default/tsx/src/button/index.ts +0 -0
  125. package/{generators → template/generators}/config/i18n/base/docs/home.en-US.md +0 -0
  126. package/{generators → template/generators}/config/i18n/base/docs/home.zh-CN.md +0 -0
  127. package/{generators → template/generators}/config/i18n/base/package.json +1 -1
  128. package/{generators → template/generators}/config/i18n/base/types/basicComponent.d.ts +0 -0
  129. package/{generators → template/generators}/config/i18n/base/types/button.d.ts +0 -0
  130. package/{generators → template/generators}/config/i18n/base/types/index.d.ts +0 -0
  131. package/{generators → template/generators}/config/i18n/base/types/locale.d.ts +0 -0
  132. package/{generators → template/generators}/config/i18n/base/varlet.config.js +3 -3
  133. package/{generators → template/generators}/config/i18n/sfc/src/button/Button.vue +7 -7
  134. package/{generators → template/generators}/config/i18n/sfc/src/button/__tests__/index.spec.js +0 -0
  135. package/{generators → template/generators}/config/i18n/sfc/src/button/button.less +1 -1
  136. package/{generators → template/generators}/config/i18n/sfc/src/button/docs/en-US.md +0 -0
  137. package/{generators → template/generators}/config/i18n/sfc/src/button/docs/zh-CN.md +0 -0
  138. package/{generators → template/generators}/config/i18n/sfc/src/button/example/BasicUse.vue +0 -0
  139. package/{generators → template/generators}/config/i18n/sfc/src/button/example/ModifyColor.vue +0 -0
  140. package/{generators → template/generators}/config/i18n/sfc/src/button/example/index.vue +1 -1
  141. package/{generators/config/i18n/tsx → template/generators/config/i18n/sfc}/src/button/example/locale/en-US.ts +1 -1
  142. package/{generators/config/i18n/tsx → template/generators/config/i18n/sfc}/src/button/example/locale/index.ts +0 -0
  143. package/{generators/config/i18n/tsx → template/generators/config/i18n/sfc}/src/button/example/locale/zh-CN.ts +1 -1
  144. package/{generators → template/generators}/config/i18n/sfc/src/button/index.ts +0 -0
  145. package/{generators → template/generators}/config/i18n/sfc/src/locale/__tests__/index.spec.js +0 -0
  146. package/{generators → template/generators}/config/i18n/sfc/src/locale/docs/en-US.md +0 -0
  147. package/{generators → template/generators}/config/i18n/sfc/src/locale/docs/zh-CN.md +0 -0
  148. package/{generators → template/generators}/config/i18n/sfc/src/locale/en-US.d.ts +0 -0
  149. package/{generators/config/i18n/tsx → template/generators/config/i18n/sfc}/src/locale/en-US.ts +1 -1
  150. package/{generators → template/generators}/config/i18n/sfc/src/locale/index.ts +0 -0
  151. package/{generators → template/generators}/config/i18n/sfc/src/locale/zh-CN.d.ts +0 -0
  152. package/{generators/config/i18n/tsx → template/generators/config/i18n/sfc}/src/locale/zh-CN.ts +1 -1
  153. package/{generators → template/generators}/config/i18n/tsx/src/button/Button.tsx +12 -14
  154. package/{generators → template/generators}/config/i18n/tsx/src/button/__tests__/index.spec.js +0 -0
  155. package/{generators/config/default/sfc → template/generators/config/i18n/tsx}/src/button/button.less +1 -1
  156. package/{generators → template/generators}/config/i18n/tsx/src/button/docs/en-US.md +0 -0
  157. package/{generators → template/generators}/config/i18n/tsx/src/button/docs/zh-CN.md +0 -0
  158. package/{generators → template/generators}/config/i18n/tsx/src/button/example/BasicUse.vue +0 -0
  159. package/{generators → template/generators}/config/i18n/tsx/src/button/example/ModifyColor.vue +0 -0
  160. package/{generators → template/generators}/config/i18n/tsx/src/button/example/index.vue +1 -1
  161. package/{generators/config/i18n/sfc → template/generators/config/i18n/tsx}/src/button/example/locale/en-US.ts +1 -1
  162. package/template/generators/config/i18n/tsx/src/button/example/locale/index.ts +23 -0
  163. package/{generators/config/i18n/sfc → template/generators/config/i18n/tsx}/src/button/example/locale/zh-CN.ts +1 -1
  164. package/{generators → template/generators}/config/i18n/tsx/src/button/index.ts +0 -0
  165. package/{generators → template/generators}/config/i18n/tsx/src/locale/__tests__/index.spec.js +0 -0
  166. package/{generators → template/generators}/config/i18n/tsx/src/locale/docs/en-US.md +0 -0
  167. package/{generators → template/generators}/config/i18n/tsx/src/locale/docs/zh-CN.md +0 -0
  168. package/{generators → template/generators}/config/i18n/tsx/src/locale/en-US.d.ts +0 -0
  169. package/{generators/config/i18n/sfc → template/generators/config/i18n/tsx}/src/locale/en-US.ts +1 -1
  170. package/{generators → template/generators}/config/i18n/tsx/src/locale/index.ts +0 -0
  171. package/{generators → template/generators}/config/i18n/tsx/src/locale/zh-CN.d.ts +0 -0
  172. package/{generators/config/i18n/sfc → template/generators/config/i18n/tsx}/src/locale/zh-CN.ts +1 -1
  173. package/varlet.default.config.js +137 -15
  174. package/site/mobile/components/styles/common.less +0 -64
  175. package/site/mobile/components/styles/elevation.less +0 -126
  176. package/site/mobile/components/styles/var.less +0 -27
@@ -1,44 +1,23 @@
1
1
  <script setup lang="ts">
2
2
  import AnimationBox from '../../components/AnimationBox.vue'
3
3
  import config from '@config'
4
- import VarSiteButton from '../../../components/button'
5
- import VarSiteIcon from '../../../components/icon'
6
4
  import { get } from 'lodash-es'
7
- import { ref, watch, computed } from 'vue'
5
+ import { ref, watch } from 'vue'
8
6
  import { useRoute, useRouter } from 'vue-router'
9
- import { getBrowserThemes, setThemes } from '../../../utils'
10
- import { getPCLocationInfo, watchThemes } from '@varlet/cli/site/utils'
11
- import en_US from './locale/en-US'
12
- import zh_CN from './locale/zh-CN'
13
- import type { Ref, ComputedRef } from 'vue'
7
+ import { getBrowserTheme, setTheme, Theme } from "../../../utils";
8
+ import { getPCLocationInfo, watchTheme } from '@varlet/cli/site/utils'
9
+ import type { Ref } from 'vue'
14
10
 
15
11
  const route = useRoute()
16
12
  const router = useRouter()
17
- const packs = {
18
- 'zh-CN': zh_CN,
19
- 'en-US': en_US,
20
- } as any
21
13
 
22
14
  const github = get(config, 'pc.header.github')
23
- const themesKey = get(config, 'themesKey')
24
- const currentThemes = ref(getBrowserThemes(themesKey))
15
+ const currentTheme = ref(getBrowserTheme())
25
16
  const darkMode: Ref<boolean> = ref(get(config, 'pc.header.darkMode'))
26
17
  const title: Ref<string> = ref(get(config, 'title'))
27
18
  const language: Ref<string> = ref(get(config, 'defaultLanguage'))
28
19
  const languages: Ref<Record<string, string>> = ref(get(config, 'pc.header.i18n'))
29
- const pack: Ref<Record<string, string>> = ref({})
30
-
31
- const description: ComputedRef<string> = computed(() => {
32
- const { indexPage = {} } = get(config, 'pc')
33
-
34
- return indexPage?.description?.[language.value] || pack.value.description
35
- })
36
-
37
- const started: ComputedRef<string> = computed(() => {
38
- const { indexPage = {} } = get(config, 'pc')
39
-
40
- return indexPage?.started?.[language.value] || pack.value.started
41
- })
20
+ const indexPage: Ref<Record<string, any>> = get(config, 'pc.indexPage')
42
21
 
43
22
  const goGithub = () => {
44
23
  window.open(github)
@@ -48,18 +27,18 @@ const getStar = () => {
48
27
  router.push(`/${language.value}/home`)
49
28
  }
50
29
 
51
- const getThemesMessage = () => ({ action: 'themesChange', from: 'pc', data: currentThemes.value })
30
+ const getThemeMessage = () => ({ action: 'theme-change', from: 'pc', data: currentTheme.value })
52
31
 
53
- const setCurrentThemes = (themes: 'themes' | 'darkThemes') => {
54
- currentThemes.value = themes
55
- setThemes(config, currentThemes.value)
56
- window.localStorage.setItem(themesKey, currentThemes.value)
32
+ const setCurrentTheme = (theme: Theme) => {
33
+ currentTheme.value = theme
34
+ setTheme(config, currentTheme.value)
35
+ window.localStorage.setItem(get(config, 'themeKey'), currentTheme.value)
57
36
  }
58
37
 
59
38
  const toggleTheme = () => {
60
- setCurrentThemes(currentThemes.value === 'darkThemes' ? 'themes' : 'darkThemes')
61
- window.postMessage(getThemesMessage(), '*')
62
- ; (document.getElementById('mobile') as HTMLIFrameElement)?.contentWindow!.postMessage(getThemesMessage(), '*')
39
+ setCurrentTheme(currentTheme.value === 'darkTheme' ? 'lightTheme' : 'darkTheme')
40
+ window.postMessage(getThemeMessage(), '*')
41
+ ;(document.getElementById('mobile') as HTMLIFrameElement)?.contentWindow!.postMessage(getThemeMessage(), '*')
63
42
  }
64
43
 
65
44
  const setLocale = () => {
@@ -67,7 +46,6 @@ const setLocale = () => {
67
46
  if (!lang) return
68
47
 
69
48
  language.value = lang
70
- pack.value = packs[lang]
71
49
  document.title = get(config, 'pc.title')[lang] as string
72
50
  }
73
51
 
@@ -81,61 +59,68 @@ const toggleLanguages = () => {
81
59
  router.replace(replaceStr)
82
60
  }
83
61
 
84
- setThemes(config, currentThemes.value)
62
+ setTheme(config, currentTheme.value)
85
63
 
86
- window.postMessage(getThemesMessage(), '*')
64
+ window.postMessage(getThemeMessage(), '*')
87
65
 
88
- watchThemes((themes, from) => {
89
- from === 'mobile' && setCurrentThemes(themes)
66
+ watchTheme((theme, from) => {
67
+ from === 'mobile' && setCurrentTheme(theme)
90
68
  })
91
69
 
92
70
  watch(() => route.path, setLocale, { immediate: true })
93
71
  </script>
94
72
 
95
73
  <template>
96
- <div class="home-page">
97
- <div class="slash-box box-1"></div>
98
- <div class="slash-box box-2"></div>
99
- <div class="slash-box box-3"></div>
100
- <div class="slash-box box-4"></div>
101
- <div class="slash-box box-5"></div>
102
- <div class="profile-container">
103
- <div class="container-box">
104
- <div class="description-container">
105
- <animation-box class="logo-box" />
106
- <div class="base-title">{{ title }}</div>
107
- </div>
108
- <div class="base-description">{{ description }}</div>
109
-
110
- <div class="button-group">
111
- <var-site-button class="common-button github-button" block @click="goGithub">
112
- <div class="block-button-content">
113
- <span>GITHUB</span>
114
- <var-site-icon style="margin-left: 10px" name="github" size="24px" />
115
- </div>
116
- </var-site-button>
117
- <var-site-button class="common-button extra-button margin-left" text v-if="darkMode" @click="toggleTheme">
118
- <var-site-icon size="24px" :name="currentThemes === 'themes' ? 'white-balance-sunny' : 'weather-night'" />
119
- </var-site-button>
120
- </div>
74
+ <div class="varlet-doc-index">
75
+ <div class="varlet-doc-index__layout">
76
+ <div class="varlet-doc-index__logo-container">
77
+ <div class="varlet-doc-index__logo-background-mask"></div>
78
+ <animation-box class="varlet-doc-index__logo" />
79
+ </div>
80
+
81
+ <div class="varlet-doc-index__title">{{ title }}</div>
82
+ <div class="varlet-doc-index__description">{{ indexPage.description[language] }}</div>
83
+ <div class="varlet-doc-index__link-button-group">
84
+ <var-button class="varlet-doc-index__link-button" text outline @click="goGithub">
85
+ <var-icon name="github" size="24px" />
86
+ </var-button>
87
+ <var-button class="varlet-doc-index__link-button" text outline v-if="darkMode" @click="toggleTheme">
88
+ <var-icon size="24px" :name="currentTheme === 'lightTheme' ? 'white-balance-sunny' : 'weather-night'" />
89
+ </var-button>
90
+ <var-button
91
+ class="varlet-doc-index__link-button"
92
+ text
93
+ outline
94
+ v-if="languages"
95
+ @click="toggleLanguages"
96
+ >
97
+ <var-icon name="translate" size="24px" />
98
+ </var-button>
99
+ <var-button class="varlet-doc-index__link-button" type="primary" style="line-height: 1.2" @click="getStar">
100
+ <span class="varlet-doc-index__link-button-text">{{ indexPage.started[language] }}</span>
101
+ <var-icon style="transform: rotate(-90deg)" name="arrow-down" size="24px" />
102
+ </var-button>
103
+ </div>
121
104
 
122
- <div class="button-group">
123
- <var-site-button type="primary" class="common-button primary-button" block @click="getStar">
124
- <div class="block-button-content">
125
- <span>{{ started }}</span>
126
- <var-site-icon style="margin-left: 10px; transform: rotate(-90deg)" name="arrow-down" size="24px" />
127
- </div>
128
- </var-site-button>
129
- <var-site-button
130
- class="common-button extra-button margin-left"
131
- text
132
- v-if="languages"
133
- @click="toggleLanguages"
134
- >
135
- <var-site-icon name="translate" size="24px" />
136
- </var-site-button>
105
+ <div class="varlet-doc-index__features" v-if="indexPage.features">
106
+ <div class="varlet-doc-index__feature" v-for="feature in indexPage.features">
107
+ <div class="varlet-doc-index__feature-name">{{ feature.name[language] }}</div>
108
+ <div class="varlet-doc-index__feature-description">{{ feature.description[language] }}</div>
137
109
  </div>
138
110
  </div>
111
+
112
+ <div class="varlet-doc-index__contributors" v-if="indexPage.contributors">
113
+ <div class="varlet-doc-index__contributors-title">{{ indexPage.contributors.label[language] }}</div>
114
+
115
+ <a class="varlet-doc-index__contributors-link" :href="indexPage.contributors.link">
116
+ <img class="varlet-doc-index__contributors-image" :src="indexPage.contributors.image">
117
+ </a>
118
+ </div>
119
+
120
+ <div class="varlet-doc-index__footer">
121
+ <div class="varlet-doc-index__license">{{ indexPage.license[language] }}</div>
122
+ <div class="varlet-doc-index__copyright">{{ indexPage.copyright[language] }}</div>
123
+ </div>
139
124
  </div>
140
125
  </div>
141
126
  </template>
@@ -1,5 +1 @@
1
- export default {
2
- started: 'GET STARTED',
3
- description: 'Varlet is a Material design mobile component library developed based on Vue3, developed and maintained by partners in the community. ' +
4
- 'Support Typescript, import on demand, dark mode, theme customization, internationalization, and provide VSCode plugin to ensure a good development experience',
5
- }
1
+ // this file used to generate route path ('/en-US/index')
@@ -1,5 +1 @@
1
- export default {
2
- started: '起步',
3
- description: 'Varlet 是一个基于 Vue3 开发的 Material 风格移动端组件库,' +
4
- '全面拥抱 Vue3 生态,由社区团队维护。支持 Typescript、按需引入、暗黑模式、主题定制、国际化,并提供 VSCode 插件保障良好的开发体验',
5
- }
1
+ // this file used to generate route path ('/zh-CN/index')
@@ -1,24 +1,21 @@
1
1
  import Progress from './components/progress'
2
- import { reactive } from 'vue'
3
2
  import config from '@config'
4
- import { getBrowserThemes, mountInstance, watchThemes } from './utils'
3
+ import { reactive } from 'vue'
4
+ import { getBrowserTheme, mountInstance, Theme, watchTheme } from "./utils";
5
5
  import { get } from 'lodash-es'
6
6
 
7
- function getColor(themes?: 'themes' | 'darkThemes') {
8
- const themesKey = get(config, 'themesKey')
9
-
10
- return get(config, `${themes ?? getBrowserThemes(themesKey)}.color-progress`)
7
+ function getColor(theme?: Theme) {
8
+ return get(config, `${theme ?? getBrowserTheme()}.color-progress`)
11
9
  }
12
10
 
13
- function getTrackColor(themes?: 'themes' | 'darkThemes') {
14
- const themesKey = get(config, 'themesKey')
15
-
16
- return get(config, `${themes ?? getBrowserThemes(themesKey)}.color-progress-track`)
11
+ function getTrackColor(theme?: Theme) {
12
+ return get(config, `${theme ?? getBrowserTheme()}.color-progress-track`)
17
13
  }
18
14
 
19
15
  export function useProgress() {
20
16
  let timer: number
21
- let currentThemes: 'themes' | 'darkThemes'
17
+ let currentTheme: Theme
18
+
22
19
  const trackColor = getTrackColor()
23
20
  const color = getColor()
24
21
 
@@ -36,10 +33,10 @@ export function useProgress() {
36
33
  value: 0,
37
34
  })
38
35
 
39
- watchThemes((themes) => {
40
- currentThemes = themes
41
- props.trackColor = getTrackColor(themes)
42
- props.color = props.value === 100 ? getTrackColor(themes) : getColor(themes)
36
+ watchTheme((theme) => {
37
+ currentTheme = theme
38
+ props.trackColor = getTrackColor(theme)
39
+ props.color = props.value === 100 ? getTrackColor(theme) : getColor(theme)
43
40
  }, false)
44
41
 
45
42
  const changeValue = () => {
@@ -56,13 +53,13 @@ export function useProgress() {
56
53
 
57
54
  const start = () => {
58
55
  props.value = 0
59
- setTimeout(() => (props.color = getColor(currentThemes)), 200)
56
+ setTimeout(() => (props.color = getColor(currentTheme)), 200)
60
57
  changeValue()
61
58
  }
62
59
 
63
60
  const end = () => {
64
61
  props.value = 100
65
- setTimeout(() => (props.color = getTrackColor(currentThemes)), 300)
62
+ setTimeout(() => (props.color = getTrackColor(currentTheme)), 300)
66
63
  window.clearTimeout(timer)
67
64
  }
68
65
 
package/site/utils.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import { onMounted, onUnmounted } from 'vue'
2
2
  import { get } from 'lodash-es'
3
3
  import { formatStyleVars } from './components/utils/elements'
4
+ import config from '@config'
4
5
 
5
6
  export * from './components/utils/components'
6
7
  export * from './components/utils/elements'
@@ -86,26 +87,26 @@ export function watchPlatform(cb: (platform: string) => void) {
86
87
  handleHashchange()
87
88
  }
88
89
 
89
- export function watchThemes(
90
- cb: (themes: 'themes' | 'darkThemes', from: 'pc' | 'mobile' | 'default') => void,
90
+ export function watchTheme(
91
+ cb: (theme: Theme, from: 'pc' | 'mobile' | 'default' | 'playground') => void,
91
92
  shouldUnmount = true
92
93
  ) {
93
- const handleThemesChange = (event: MessageEvent) => {
94
+ const handleThemeChange = (event: MessageEvent) => {
94
95
  const { data } = event
95
- if (data.action === 'themesChange') {
96
+ if (data.action === 'theme-change') {
96
97
  cb(data.data, data.from)
97
98
  }
98
99
  }
99
100
 
100
- window.addEventListener('message', handleThemesChange)
101
+ window.addEventListener('message', handleThemeChange)
101
102
 
102
103
  if (shouldUnmount) {
103
104
  onUnmounted(() => {
104
- window.removeEventListener('message', handleThemesChange)
105
+ window.removeEventListener('message', handleThemeChange)
105
106
  })
106
107
  }
107
108
 
108
- cb(getBrowserThemes(), 'default')
109
+ cb(getBrowserTheme(), 'default')
109
110
  }
110
111
 
111
112
  export function addRouteListener(cb: () => void) {
@@ -119,9 +120,11 @@ export function addRouteListener(cb: () => void) {
119
120
  })
120
121
  }
121
122
 
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]) => {
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]) => {
125
128
  styleVars[`--site-config-${key}`] = value as string
126
129
  return styleVars
127
130
  }, {} as StyleVars)
@@ -129,22 +132,31 @@ export function setThemes(config: Record<string, any>, name: 'themes' | 'darkThe
129
132
  StyleProvider(styleVars)
130
133
  }
131
134
 
132
- export function getBrowserThemes(themes = 'VARLET_THEMES'): 'darkThemes' | 'themes' {
133
- let currentThemes = window.localStorage.getItem(themes) as 'darkThemes' | 'themes'
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)
134
148
 
135
- if (!currentThemes) {
136
- currentThemes = window.matchMedia?.('(prefers-color-scheme: dark)').matches ? 'darkThemes' : 'themes'
137
- window.localStorage.setItem(themes, currentThemes)
149
+ return preferTheme
138
150
  }
139
151
 
140
- return currentThemes
152
+ return storageTheme
141
153
  }
142
154
 
143
- export function watchDarkMode(dark: StyleVars, cb?: (themes: 'darkThemes' | 'themes') => void) {
144
- watchThemes((themes) => {
145
- StyleProvider(themes === 'darkThemes' ? dark : null)
155
+ export function watchDarkMode(dark: StyleVars, cb?: (theme: Theme) => void) {
156
+ watchTheme((theme) => {
157
+ StyleProvider(theme === 'darkTheme' ? dark : null)
146
158
 
147
- cb?.(themes)
159
+ cb?.(theme)
148
160
  })
149
161
  }
150
162
 
@@ -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
+ })
File without changes
File without changes
@@ -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
+ }
@@ -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>
@@ -101,5 +101,5 @@
101
101
  "Chrome >= 51",
102
102
  "iOS >= 10"
103
103
  ],
104
- "packageManager": "pnpm@6.24.3"
104
+ "packageManager": "pnpm@7.9.0"
105
105
  }
@@ -26,7 +26,7 @@ module.exports = {
26
26
  'color-pc-language-active-background': '#00968821',
27
27
  'color-mobile-language-active': '#009688',
28
28
  'color-mobile-language-active-background': '#00968821',
29
- 'color-mobile-cell-hover': '#009688'
29
+ 'color-mobile-cell-hover': '#009688',
30
30
  },
31
31
  darkThemes: {
32
32
  'color-body': '#121212',
@@ -10,21 +10,21 @@ export default defineComponent({
10
10
  name: 'BButton',
11
11
  props: {
12
12
  color: {
13
- type: String
13
+ type: String,
14
14
  },
15
15
  onClick: {
16
- type: Function as PropType<(e: Event) => void>
17
- }
16
+ type: Function as PropType<(e: Event) => void>,
17
+ },
18
18
  },
19
19
  setup(props) {
20
20
  const handleClick = (e: Event) => props.onClick?.(e)
21
21
  return {
22
- handleClick
22
+ handleClick,
23
23
  }
24
- }
24
+ },
25
25
  })
26
26
  </script>
27
27
 
28
28
  <style lang="less">
29
- @import "./button";
29
+ @import './button';
30
30
  </style>
@@ -9,6 +9,6 @@
9
9
  cursor: pointer;
10
10
 
11
11
  &:active {
12
- opacity: 0.9
12
+ opacity: 0.9;
13
13
  }
14
14
  }
@@ -6,8 +6,8 @@ import ModifyColor from './ModifyColor'
6
6
 
7
7
  <template>
8
8
  <app-type>基本使用</app-type>
9
- <basic-use/>
9
+ <basic-use />
10
10
 
11
11
  <app-type>修改颜色</app-type>
12
- <modify-color/>
12
+ <modify-color />
13
13
  </template>
@@ -5,11 +5,11 @@ export default defineComponent({
5
5
  name: 'BButton',
6
6
  props: {
7
7
  color: {
8
- type: String
8
+ type: String,
9
9
  },
10
10
  onClick: {
11
- type: Function as PropType<(e: Event) => void>
12
- }
11
+ type: Function as PropType<(e: Event) => void>,
12
+ },
13
13
  },
14
14
  setup(props, { slots }) {
15
15
  const handleClick = (e: Event) => props.onClick?.(e)
@@ -17,15 +17,13 @@ export default defineComponent({
17
17
  return () => {
18
18
  const { color } = props
19
19
 
20
- return <>
21
- <button
22
- class="basic-button"
23
- style={{ background: color }}
24
- onClick={ handleClick }
25
- >
26
- { slots.default?.() }
27
- </button>
28
- </>
20
+ return (
21
+ <>
22
+ <button class="basic-button" style={{ background: color }} onClick={handleClick}>
23
+ {slots.default?.()}
24
+ </button>
25
+ </>
26
+ )
29
27
  }
30
- }
28
+ },
31
29
  })
@@ -9,6 +9,6 @@
9
9
  cursor: pointer;
10
10
 
11
11
  &:active {
12
- opacity: 0.9
12
+ opacity: 0.9;
13
13
  }
14
14
  }