@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,12 +1,13 @@
1
- <script lang="ts">
1
+ <script lang="ts" setup>
2
2
  import config from '@config'
3
3
  import AppMobile from './components/AppMobile.vue'
4
4
  import AppHeader from './components/AppHeader.vue'
5
5
  import AppSidebar from './components/AppSidebar.vue'
6
- import { defineComponent, nextTick, onMounted, ref, watch } from 'vue'
6
+ import context from '../components/context'
7
+ import { nextTick, onMounted, ref, watch } from 'vue'
7
8
  import { useRoute } from 'vue-router'
8
9
  import { get } from 'lodash-es'
9
- import { getPCLocationInfo, MenuTypes } from '../utils'
10
+ import { getPCLocationInfo, MenuTypes } from "../utils";
10
11
  import type { Ref } from 'vue'
11
12
 
12
13
  export interface Menu {
@@ -15,81 +16,80 @@ export interface Menu {
15
16
  type: MenuTypes
16
17
  }
17
18
 
18
- export default defineComponent({
19
- components: {
20
- AppMobile,
21
- AppHeader,
22
- AppSidebar
23
- },
24
- setup() {
25
- const menu: Ref<Menu[]> = ref(get(config, 'pc.menu', []))
26
- const useMobile = ref(get(config, 'useMobile'))
27
- const mobileRedirect = get(config, 'mobile.redirect')
28
-
29
- const language: Ref<string> = ref('')
30
- const componentName: Ref<null | string> = ref(null)
31
- const menuName: Ref<string> = ref('')
32
- const doc: Ref<HTMLElement | null> = ref(null)
33
- const route = useRoute()
34
-
35
- const getComponentNameByMenuName = (menuName: string) => {
36
- const currentMenu = menu.value.find(menu => menu.doc === menuName)
37
- return currentMenu?.type === MenuTypes.COMPONENT ? menuName : mobileRedirect.slice(1)
38
- }
19
+ const menu: Ref<Menu[]> = ref(get(config, 'pc.menu', []))
20
+ const useMobile = ref(get(config, 'useMobile'))
21
+ const mobileRedirect = get(config, 'mobile.redirect')
39
22
 
40
- const init = () => {
41
- const { menuName } = getPCLocationInfo()
23
+ const language: Ref<string> = ref('')
24
+ const componentName: Ref<null | string> = ref(null)
25
+ const menuName: Ref<string> = ref('')
26
+ const doc: Ref<HTMLElement | null> = ref(null)
27
+ const route = useRoute()
42
28
 
43
- nextTick(() => {
44
- const children = document
45
- .querySelector('.varlet-site-sidebar')!
46
- .getElementsByClassName('var-site-cell')
47
- const index = menu.value.findIndex((item) => item.doc === menuName)
29
+ const getComponentNameByMenuName = (menuName: string) => {
30
+ const currentMenu = menu.value.find(menu => menu.doc === menuName)
31
+ return currentMenu?.type === MenuTypes.COMPONENT ? menuName : mobileRedirect.slice(1)
32
+ }
48
33
 
49
- if (index !== -1) {
50
- children[index].scrollIntoView({
51
- block: 'center',
52
- inline: 'start',
53
- })
54
- }
34
+ const init = () => {
35
+ const { menuName } = getPCLocationInfo()
36
+
37
+ nextTick(() => {
38
+ const children = document
39
+ .querySelector('.varlet-site-sidebar')!
40
+ .getElementsByClassName('var-site-cell')
41
+ const index = menu.value.findIndex((item) => item.doc === menuName)
42
+
43
+ if (index !== -1) {
44
+ children[index].scrollIntoView({
45
+ block: 'center',
46
+ inline: 'start',
55
47
  })
56
48
  }
49
+ })
50
+ }
57
51
 
58
- const handleSidebarChange = (menu: Menu) => {
59
- doc.value!.scrollTop = 0
60
- componentName.value = getComponentNameByMenuName(menu.doc)
61
- menuName.value = menu.doc
62
- }
52
+ const handleSidebarChange = (menu: Menu) => {
53
+ doc.value!.scrollTop = 0
54
+ componentName.value = getComponentNameByMenuName(menu.doc)
55
+ menuName.value = menu.doc
56
+ }
63
57
 
64
- onMounted(init)
58
+ const confirmClose = () => {
59
+ if (!window.confirm('The code will no longer be saved after closing. Are you sure you want to close?')) {
60
+ return
61
+ }
65
62
 
66
- watch(
67
- () => route.path,
68
- () => {
69
- const { language: lang, menuName: _menuName } = getPCLocationInfo()
70
- if (!lang || !_menuName) {
71
- return
72
- }
63
+ context.showPlayground = false
64
+ }
73
65
 
74
- componentName.value = getComponentNameByMenuName(_menuName)
75
- menuName.value = _menuName
76
- language.value = lang
77
- document.title = get(config, 'pc.title')[lang] as string
78
- },
79
- { immediate: true }
80
- )
81
-
82
- return {
83
- menu,
84
- language,
85
- componentName,
86
- menuName,
87
- doc,
88
- useMobile,
89
- handleSidebarChange,
66
+ onMounted(() => {
67
+ init()
68
+
69
+ window.addEventListener('message', (event) => {
70
+ const { data } = event
71
+
72
+ if (data.action === 'playground-close') {
73
+ confirmClose()
90
74
  }
91
- },
75
+ })
92
76
  })
77
+
78
+ watch(
79
+ () => route.path,
80
+ () => {
81
+ const { language: lang, menuName: _menuName } = getPCLocationInfo()
82
+ if (!lang || !_menuName) {
83
+ return
84
+ }
85
+
86
+ componentName.value = getComponentNameByMenuName(_menuName)
87
+ menuName.value = _menuName
88
+ language.value = lang
89
+ document.title = get(config, 'pc.title')[lang] as string
90
+ },
91
+ { immediate: true }
92
+ )
93
93
  </script>
94
94
 
95
95
  <template>
@@ -120,9 +120,34 @@ export default defineComponent({
120
120
  />
121
121
  </div>
122
122
  </div>
123
+
124
+ <var-popup
125
+ position="right"
126
+ :show="context.showPlayground"
127
+ @click-overlay="confirmClose"
128
+ >
129
+ <div class="varlet-site-playground-container">
130
+ <iframe id="playground" class="varlet-site-playground-iframe" :src="context.playgroundURL" frameborder="0"></iframe>
131
+ </div>
132
+ </var-popup>
123
133
  </template>
124
134
 
125
135
  <style>
136
+ .varlet-site-playground-container {
137
+ width: calc(100vw - 256px);
138
+ max-width: 1360px;
139
+ height: 100vh;
140
+ }
141
+
142
+ .varlet-site-playground-iframe {
143
+ width: 100%;
144
+ height: 100%;
145
+ }
146
+
147
+ .var-site-popup__content {
148
+ background-color: rgba(0, 0, 0, 0)
149
+ }
150
+
126
151
  .hljs {
127
152
  background: var(--site-config-color-hl-background) !important;
128
153
  padding: 0 !important;
@@ -230,6 +255,7 @@ iframe {
230
255
  &-site {
231
256
  min-width: 1200px;
232
257
  padding: 60px 0 0;
258
+
233
259
  &-content {
234
260
  display: flex;
235
261
  background: var(--site-config-color-body);
@@ -1,30 +1,18 @@
1
1
  <script lang="ts">
2
- import { defineComponent, onMounted, onBeforeUnmount, onUnmounted, ref, useAttrs } from 'vue'
3
- import { animationBoxData, animationEl, animationElClientRect } from '../floating'
2
+ import { defineComponent, onMounted, onUnmounted, ref, useAttrs } from 'vue'
3
+ import { animationBoxData, animationEl, animationElClientRect, isMountedCount } from '../floating'
4
4
 
5
5
  export default defineComponent({
6
6
  name: 'AnimationBox',
7
7
  setup() {
8
- const mutationObserver = ref<MutationObserver>()
9
8
  const varletLogoAnimationRef = ref<HTMLElement>()
10
9
  animationBoxData.attrs = useAttrs()
11
10
 
12
11
  onMounted(() => {
13
12
  animationEl.value = varletLogoAnimationRef.value
14
13
  animationElClientRect.value = varletLogoAnimationRef?.value?.getBoundingClientRect();
15
- mutationObserver.value = new MutationObserver(() => {
16
- animationElClientRect.value = varletLogoAnimationRef?.value?.getBoundingClientRect();
17
- });
18
- const logoContainer = varletLogoAnimationRef.value?.parentNode?.parentNode
19
- mutationObserver.value.observe(logoContainer || document.body, {
20
- attributes: true,
21
- subtree: true,
22
- childList:true
23
- });
24
- })
25
14
 
26
- onBeforeUnmount(() => {
27
- mutationObserver.value?.disconnect();
15
+ isMountedCount.value <= 2 && (isMountedCount.value += 1)
28
16
  })
29
17
 
30
18
  onUnmounted(() => {
@@ -1,88 +1,8 @@
1
- <template>
2
- <div class="varlet-site-header">
3
- <div class="varlet-site-header__lead">
4
- <animation-box class="varlet-site-header__logo" @click="backRoot" />
5
- <div class="varlet-site-header__title" v-if="title" @click="backRoot">{{ title }}</div>
6
- </div>
7
-
8
- <div class="varlet-site-header__tail">
9
- <div
10
- class="varlet-site-header__versions"
11
- @mouseenter="isOpenVersionsMenu = true"
12
- @mouseleave="isOpenVersionsMenu = false"
13
- v-if="versionItems"
14
- >
15
- <span style="font-size: 14px;">{{ currentVersion }}</span>
16
- <var-site-icon name="chevron-down" />
17
- <transition name="fade">
18
- <div
19
- class="varlet-site-header__animation-list varlet-site-header__animation-versions var-site-elevation--5"
20
- v-show="isOpenVersionsMenu"
21
- :style="{ pointerEvents: isOpenVersionsMenu ? 'auto' : 'none' }"
22
- >
23
- <var-site-cell
24
- v-for="(value, key) in nonEmptyVersions"
25
- v-ripple
26
- :key="key"
27
- :class="{ 'varlet-site-header__animation-list--active': currentVersion === key }"
28
- @click="open(value)"
29
- >{{ key }}
30
- </var-site-cell>
31
- </div>
32
- </transition>
33
- </div>
34
-
35
- <a class="varlet-site-header__link" target="_blank" :href="playground" v-ripple v-if="playground">
36
- <var-site-icon name="code-json" :size="24" />
37
- </a>
38
- <a class="varlet-site-header__link" target="_blank" :href="github" v-ripple v-if="github">
39
- <var-site-icon name="github" :size="28" />
40
- </a>
41
- <div class="varlet-site-header__theme" v-ripple v-if="darkMode" @click="toggleTheme">
42
- <var-site-icon
43
- size="26px"
44
- :name="currentThemes === 'themes' ? 'white-balance-sunny' : 'weather-night'"
45
- :style="{
46
- marginBottom: currentThemes === 'darkThemes' && '2px',
47
- marginTop: currentThemes === 'themes' && '2px',
48
- }"
49
- />
50
- </div>
51
- <div
52
- class="varlet-site-header__language"
53
- @mouseenter="isOpenLanguageMenu = true"
54
- @mouseleave="isOpenLanguageMenu = false"
55
- v-if="languages"
56
- >
57
- <var-site-icon name="translate" size="26px" />
58
- <var-site-icon name="chevron-down" />
59
- <transition name="fade">
60
- <div
61
- class="varlet-site-header__animation-list var-site-elevation--5"
62
- v-show="isOpenLanguageMenu"
63
- :style="{ pointerEvents: isOpenLanguageMenu ? 'auto' : 'none' }"
64
- >
65
- <var-site-cell
66
- v-for="(value, key) in nonEmptyLanguages"
67
- v-ripple
68
- :key="key"
69
- :class="{ 'varlet-site-header__animation-list--active': language === key }"
70
- @click="handleLanguageChange(key)"
71
- >{{ value }}
72
- </var-site-cell>
73
- </div>
74
- </transition>
75
- </div>
76
-
77
- </div>
78
- </div>
79
- </template>
80
-
81
1
  <script lang="ts">
82
2
  import config from '@config'
83
3
  import { ref, computed, defineComponent } from 'vue'
84
4
  import { get } from 'lodash-es'
85
- import { getBrowserThemes, getPCLocationInfo, removeEmpty, setThemes, watchThemes } from '../../utils'
5
+ import { getBrowserTheme, getPCLocationInfo, removeEmpty, setTheme, Theme, watchTheme } from "../../utils";
86
6
  import { useRouter } from 'vue-router'
87
7
  import AnimationBox from './AnimationBox.vue'
88
8
  import type { Ref, ComputedRef } from 'vue'
@@ -98,7 +18,6 @@ export default defineComponent({
98
18
  setup() {
99
19
  const title: Ref<string> = ref(get(config, 'title'))
100
20
  const logo: Ref<string> = ref(get(config, 'logo'))
101
- const themesKey = get(config, 'themesKey')
102
21
  const languages: Ref<Record<string, string>> = ref(get(config, 'pc.header.i18n'))
103
22
  const currentVersion: Ref<string> = ref(get(config, 'pc.header.version.current'))
104
23
  const versionItems: Ref<Record<string, string>> = ref(get(config, 'pc.header.version.items'))
@@ -106,7 +25,7 @@ export default defineComponent({
106
25
  const github: Ref<string> = ref(get(config, 'pc.header.github'))
107
26
  const redirect = get(config, 'pc.redirect')
108
27
  const darkMode: Ref<boolean> = ref(get(config, 'pc.header.darkMode'))
109
- const currentThemes = ref(getBrowserThemes(themesKey))
28
+ const currentTheme = ref(getBrowserTheme())
110
29
 
111
30
  const isOpenLanguageMenu: Ref<boolean> = ref(false)
112
31
  const isOpenVersionsMenu: Ref<boolean> = ref(false)
@@ -125,18 +44,25 @@ export default defineComponent({
125
44
  isOpenLanguageMenu.value = false
126
45
  }
127
46
 
128
- const setCurrentThemes = (themes: 'themes' | 'darkThemes') => {
129
- currentThemes.value = themes
130
- setThemes(config, currentThemes.value)
131
- window.localStorage.setItem(themesKey, currentThemes.value)
47
+ const setCurrentTheme = (theme: Theme) => {
48
+ currentTheme.value = theme
49
+ setTheme(config, currentTheme.value)
50
+ window.localStorage.setItem(get(config, 'themeKey'), currentTheme.value)
132
51
  }
133
52
 
134
- const getThemesMessage = () => ({ action: 'themesChange', from: 'pc', data: currentThemes.value })
53
+ const getThemeMessage = () => ({ action: 'theme-change', from: 'pc', data: currentTheme.value })
135
54
 
136
55
  const toggleTheme = () => {
137
- setCurrentThemes(currentThemes.value === 'darkThemes' ? 'themes' : 'darkThemes')
138
- window.postMessage(getThemesMessage(), '*')
139
- ;(document.getElementById('mobile') as HTMLIFrameElement).contentWindow!.postMessage(getThemesMessage(), '*')
56
+ setCurrentTheme(currentTheme.value === 'darkTheme' ? 'lightTheme' : 'darkTheme')
57
+
58
+ window.postMessage(getThemeMessage(), '*')
59
+ notifyThemeChange('mobile')
60
+ }
61
+
62
+ const notifyThemeChange = (target: 'mobile' | 'window') => {
63
+ const contentWindow = target === 'window' ? window : (document.getElementById(target) as HTMLIFrameElement).contentWindow!
64
+
65
+ contentWindow.postMessage(getThemeMessage(), '*')
140
66
  }
141
67
 
142
68
  const open = (value: string) => {
@@ -145,12 +71,19 @@ export default defineComponent({
145
71
  }, 350);
146
72
  }
147
73
 
148
- watchThemes((themes, from) => {
149
- from === 'mobile' && setCurrentThemes(themes)
74
+ watchTheme((theme, from) => {
75
+ if (from === 'mobile') {
76
+ setCurrentTheme(theme)
77
+ }
78
+
79
+ if (from === 'playground') {
80
+ setCurrentTheme(theme)
81
+ notifyThemeChange('mobile')
82
+ }
150
83
  })
151
84
 
152
- setThemes(config, currentThemes.value)
153
- window.postMessage(getThemesMessage(), '*')
85
+ setTheme(config, currentTheme.value)
86
+ notifyThemeChange('window')
154
87
 
155
88
  return {
156
89
  logo,
@@ -165,7 +98,7 @@ export default defineComponent({
165
98
  isOpenLanguageMenu,
166
99
  isOpenVersionsMenu,
167
100
  darkMode,
168
- currentThemes,
101
+ currentTheme,
169
102
  open,
170
103
  backRoot,
171
104
  handleLanguageChange,
@@ -175,6 +108,86 @@ export default defineComponent({
175
108
  })
176
109
  </script>
177
110
 
111
+ <template>
112
+ <div class="varlet-site-header">
113
+ <div class="varlet-site-header__lead">
114
+ <animation-box class="varlet-site-header__logo" @click="backRoot" />
115
+ <div class="varlet-site-header__title" v-if="title" @click="backRoot">{{ title }}</div>
116
+ </div>
117
+
118
+ <div class="varlet-site-header__tail">
119
+ <div
120
+ class="varlet-site-header__versions"
121
+ @mouseenter="isOpenVersionsMenu = true"
122
+ @mouseleave="isOpenVersionsMenu = false"
123
+ v-if="versionItems"
124
+ >
125
+ <span style="font-size: 14px;">{{ currentVersion }}</span>
126
+ <var-icon name="chevron-down" />
127
+ <transition name="fade">
128
+ <div
129
+ class="varlet-site-header__animation-list varlet-site-header__animation-versions var-site-elevation--5"
130
+ v-show="isOpenVersionsMenu"
131
+ :style="{ pointerEvents: isOpenVersionsMenu ? 'auto' : 'none' }"
132
+ >
133
+ <var-cell
134
+ v-for="(value, key) in nonEmptyVersions"
135
+ v-ripple
136
+ :key="key"
137
+ :class="{ 'varlet-site-header__animation-list--active': currentVersion === key }"
138
+ @click="open(value)"
139
+ >{{ key }}
140
+ </var-cell>
141
+ </div>
142
+ </transition>
143
+ </div>
144
+
145
+ <a class="varlet-site-header__link" target="_blank" :href="playground" v-ripple v-if="playground">
146
+ <var-icon name="code-json" :size="24" />
147
+ </a>
148
+ <a class="varlet-site-header__link" target="_blank" :href="github" v-ripple v-if="github">
149
+ <var-icon name="github" :size="28" />
150
+ </a>
151
+ <div class="varlet-site-header__theme" v-ripple v-if="darkMode" @click="toggleTheme">
152
+ <var-icon
153
+ size="26px"
154
+ :name="currentTheme === 'lightTheme' ? 'white-balance-sunny' : 'weather-night'"
155
+ :style="{
156
+ marginBottom: currentTheme === 'darkTheme' && '2px',
157
+ marginTop: currentTheme === 'lightTheme' && '2px',
158
+ }"
159
+ />
160
+ </div>
161
+ <div
162
+ class="varlet-site-header__language"
163
+ @mouseenter="isOpenLanguageMenu = true"
164
+ @mouseleave="isOpenLanguageMenu = false"
165
+ v-if="languages"
166
+ >
167
+ <var-icon name="translate" size="26px" />
168
+ <var-icon name="chevron-down" />
169
+ <transition name="fade">
170
+ <div
171
+ class="varlet-site-header__animation-list var-site-elevation--5"
172
+ v-show="isOpenLanguageMenu"
173
+ :style="{ pointerEvents: isOpenLanguageMenu ? 'auto' : 'none' }"
174
+ >
175
+ <var-cell
176
+ v-for="(value, key) in nonEmptyLanguages"
177
+ v-ripple
178
+ :key="key"
179
+ :class="{ 'varlet-site-header__animation-list--active': language === key }"
180
+ @click="handleLanguageChange(key)"
181
+ >{{ value }}
182
+ </var-cell>
183
+ </div>
184
+ </transition>
185
+ </div>
186
+
187
+ </div>
188
+ </div>
189
+ </template>
190
+
178
191
  <style scoped lang="less">
179
192
  .fade-enter-active {
180
193
  animation-name: fade-in;
@@ -248,7 +261,7 @@ export default defineComponent({
248
261
  align-items: center;
249
262
  }
250
263
 
251
- @media screen and (max-width: 400px) {
264
+ @media screen and (max-width: 562px) {
252
265
  &__tail {
253
266
  display: none;
254
267
  }
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <div class="varlet-site-mobile">
2
+ <div class="varlet-site-mobile varlet-site-mobile--375">
3
3
  <div class="varlet-site-mobile-content">
4
4
  <iframe id="mobile" :src="`./mobile.html#/${componentName}?language=${language}&platform=pc&replace=${replace}`"></iframe>
5
5
  </div>
@@ -26,7 +26,7 @@ export default {
26
26
  <style scoped lang="less">
27
27
  .varlet-site-mobile {
28
28
  position: sticky;
29
- flex: 0 0 325px;
29
+ flex: 0 0 330px;
30
30
  top: 80px;
31
31
  height: calc(100vh - 100px);
32
32
  margin-right: 38px;
@@ -34,6 +34,12 @@ export default {
34
34
  box-shadow: 0 0 14px 6px var(--site-config-color-shadow);
35
35
  border-radius: 2px;
36
36
 
37
+ @media screen and (min-width: 1600px) {
38
+ &--375 {
39
+ flex: 0 0 375px;
40
+ }
41
+ }
42
+
37
43
  &-content {
38
44
  width: 100%;
39
45
  height: 100%;
@@ -1,6 +1,6 @@
1
1
  <template>
2
2
  <div class="varlet-site-sidebar var-elevation--3">
3
- <var-site-cell
3
+ <var-cell
4
4
  class="varlet-site-sidebar__item"
5
5
  :id="item.doc"
6
6
  :class="{
@@ -11,25 +11,23 @@
11
11
  :key="index"
12
12
  v-for="(item, index) in menu"
13
13
  v-ripple="{
14
- touchmoveForbid: false,
15
14
  disabled: item.type === menuTypes.TITLE,
16
- color: themes['color-side-bar']
17
15
  }"
18
16
  @click="changeRoute(item)"
19
17
  >
20
- <span class="varlet-site-sidebar__item--title" v-if="item.type === menuTypes.TITLE">{{ item.text[language] }}</span>
18
+ <span class="varlet-site-sidebar__indicator"></span>
19
+ <span class="varlet-site-sidebar__item--title" v-if="item.type === menuTypes.TITLE">{{ item.text[language]
20
+ }}</span>
21
21
  <span v-else>{{ item.text[language] }}</span>
22
- </var-site-cell>
22
+ </var-cell>
23
23
  </div>
24
24
  </template>
25
25
 
26
26
  <script lang="ts">
27
- import config from '@config'
28
27
  import { MenuTypes } from '../../utils'
29
- import { reactive, ref, defineComponent } from 'vue'
28
+ import { reactive, defineComponent } from 'vue'
30
29
  import type { PropType } from 'vue'
31
30
  import type { Menu } from '../Layout.vue'
32
- import { get } from 'lodash-es'
33
31
 
34
32
  export default defineComponent({
35
33
  name: 'AppSidebar',
@@ -47,7 +45,6 @@ export default defineComponent({
47
45
  emits: ['change'],
48
46
  setup(props, { emit }) {
49
47
  const menuTypes = reactive(MenuTypes)
50
- const themes = ref(get(config, 'themes'))
51
48
 
52
49
  const changeRoute = (item: Menu) => {
53
50
  if (item.type === MenuTypes.TITLE || props.menuName === item.doc) {
@@ -59,7 +56,6 @@ export default defineComponent({
59
56
 
60
57
  return {
61
58
  menuTypes,
62
- themes,
63
59
  changeRoute
64
60
  }
65
61
  }
@@ -67,6 +63,18 @@ export default defineComponent({
67
63
  </script>
68
64
 
69
65
  <style scoped lang="less">
66
+ @keyframes indicator-fade-in {
67
+ from {
68
+ transform: scaleY(0);
69
+ opacity: .3;
70
+ }
71
+
72
+ to {
73
+ transform: scaleY(1);
74
+ opacity: 1;
75
+ }
76
+ }
77
+
70
78
  .varlet-site-sidebar {
71
79
  padding: 0 0 15px;
72
80
  position: fixed;
@@ -112,6 +120,7 @@ export default defineComponent({
112
120
  height: 40px;
113
121
  position: absolute;
114
122
  left: 0;
123
+ animation: indicator-fade-in .25s;
115
124
  }
116
125
  }
117
126
  }