@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
@@ -1,397 +1,423 @@
1
- <script lang="ts">
2
- import config from '@config'
3
- import AppMobile from './components/AppMobile.vue'
4
- import AppHeader from './components/AppHeader.vue'
5
- import AppSidebar from './components/AppSidebar.vue'
6
- import { defineComponent, nextTick, onMounted, ref, watch } from 'vue'
7
- import { useRoute } from 'vue-router'
8
- import { get } from 'lodash-es'
9
- import { getPCLocationInfo, MenuTypes } from '../utils'
10
- import type { Ref } from 'vue'
11
-
12
- export interface Menu {
13
- doc: string
14
- text: Record<string, string>
15
- type: MenuTypes
16
- }
17
-
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
- }
39
-
40
- const init = () => {
41
- const { menuName } = getPCLocationInfo()
42
-
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)
48
-
49
- if (index !== -1) {
50
- children[index].scrollIntoView({
51
- block: 'center',
52
- inline: 'start',
53
- })
54
- }
55
- })
56
- }
57
-
58
- const handleSidebarChange = (menu: Menu) => {
59
- doc.value!.scrollTop = 0
60
- componentName.value = getComponentNameByMenuName(menu.doc)
61
- menuName.value = menu.doc
62
- }
63
-
64
- onMounted(init)
65
-
66
- watch(
67
- () => route.path,
68
- () => {
69
- const { language: lang, menuName: _menuName } = getPCLocationInfo()
70
- if (!lang || !_menuName) {
71
- return
72
- }
73
-
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,
90
- }
91
- },
92
- })
93
- </script>
94
-
95
- <template>
96
- <div class="varlet-site">
97
- <app-header :language="language" />
98
-
99
- <div class="varlet-site-content">
100
- <app-sidebar
101
- :language="language"
102
- :menu="menu"
103
- :menu-name="menuName"
104
- @change="handleSidebarChange"
105
- />
106
-
107
- <div
108
- class="varlet-site-doc-container"
109
- ref="doc"
110
- :class="[!useMobile && 'varlet-site-doc-container--pc-only']"
111
- >
112
- <router-view />
113
- </div>
114
-
115
- <app-mobile
116
- :component-name="componentName"
117
- :language="language"
118
- :replace="menuName"
119
- v-show="useMobile"
120
- />
121
- </div>
122
- </div>
123
- </template>
124
-
125
- <style>
126
- .hljs {
127
- background: var(--site-config-color-hl-background) !important;
128
- padding: 0 !important;
129
- transition: all .25s
130
- }
131
-
132
- .hljs code {
133
- line-height: 31px;
134
- }
135
-
136
- .hljs-comment, .hljs-meta, .hljs-quote {
137
- color: var(--site-config-color-hl-group-a)
138
- }
139
-
140
- .hljs-keyword, .hljs-name, .hljs-selector-tag, .hljs-tag {
141
- color: var(--site-config-color-hl-group-b)
142
- }
143
-
144
- .hljs-attribute, .hljs-selector-id {
145
- color: var(--site-config-color-hl-group-c)
146
- }
147
-
148
- .hljs-addition, .hljs-selector-attr, .hljs-selector-pseudo, .hljs-string {
149
- color: var(--site-config-color-hl-group-d)
150
- }
151
-
152
- .hljs-subst {
153
- color: var(--site-config-color-hl-group-e)
154
- }
155
-
156
- .hljs-link, .hljs-regexp {
157
- color: var(--site-config-color-hl-group-f)
158
- }
159
-
160
- .hljs-doctag, .hljs-section, .hljs-title, .hljs-type {
161
- color: var(--site-config-color-hl-group-g)
162
- }
163
-
164
- .hljs-bullet, .hljs-literal, .hljs-symbol, .hljs-template-variable, .hljs-variable {
165
- color: var(--site-config-color-hl-group-h)
166
- }
167
-
168
- .hljs-deletion, .hljs-number {
169
- color: var(--site-config-color-hl-group-i)
170
- }
171
- </style>
172
-
173
- <style lang="less">
174
- @doc-active: {
175
- display: inline;
176
- font-family: inherit;
177
- padding: 0;
178
- white-space: pre-wrap;
179
- }
180
-
181
- * {
182
- transition: background-color .25s, box-shadow .25s;
183
- }
184
-
185
- iframe {
186
- display: block;
187
- width: 100%;
188
- height: 100%;
189
- border: none;
190
- }
191
-
192
- .varlet {
193
- &-introduce {
194
- display: flex;
195
- flex-direction: column;
196
- align-items: center;
197
- margin: 20px 0;
198
- padding: 90px 40px;
199
- border-top: 6px solid var(--site-config-color-introduce-border);
200
- border-radius: 2px;
201
- background: var(--site-config-color-bar);
202
- box-shadow: 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12);
203
-
204
- &__row {
205
- display: flex;
206
- align-items: center;
207
- }
208
-
209
- &__image {
210
- width: 60px;
211
- margin-right: 20px;
212
- }
213
-
214
- &__name {
215
- font-size: 60px;
216
- }
217
-
218
- &__des {
219
- color: var(--site-config-color-sub-text);
220
- font-size: 16px;
221
- margin-top: 16px;
222
- -webkit-font-smoothing: antialiased;
223
- }
224
- }
225
-
226
- &-component-preview {
227
- margin-top: 20px;
228
- }
229
-
230
- &-site {
231
- min-width: 1200px;
232
- padding: 60px 0 0;
233
- &-content {
234
- display: flex;
235
- background: var(--site-config-color-body);
236
- margin-left: 240px;
237
- min-height: calc(100vh - 60px);
238
- }
239
-
240
- &-doc-container {
241
- flex: 1 0 0;
242
- min-width: 500px;
243
- padding: 0 25px;
244
- overflow-x: hidden;
245
-
246
- &::-webkit-scrollbar {
247
- display: none;
248
- }
249
-
250
- &--pc-only {
251
- padding: 0 90px 0 30px;
252
- }
253
- }
254
-
255
- &-doc {
256
- a {
257
- color: var(--site-config-color-link);
258
- -webkit-font-smoothing: antialiased;
259
- word-break: keep-all;
260
- font-size: 15px;
261
- @doc-active();
262
-
263
- &:hover {
264
- opacity: 0.8;
265
- }
266
- }
267
-
268
- h1,
269
- h2,
270
- h3,
271
- h4,
272
- h5,
273
- h6 {
274
- position: relative;
275
- color: var(--site-config-color-text);
276
- font-weight: normal;
277
- line-height: 1.5;
278
- }
279
-
280
- h1 {
281
- line-height: 40px;
282
- font-size: 30px;
283
- cursor: default;
284
- }
285
-
286
- h2 {
287
- margin: 30px 0 20px;
288
- font-size: 25px;
289
- }
290
-
291
- h3 {
292
- font-size: 18px;
293
- margin: 0;
294
- }
295
-
296
- h4 {
297
- margin: 18px 0 0;
298
- }
299
-
300
- p,
301
- ul,
302
- ol {
303
- -webkit-font-smoothing: antialiased;
304
- color: var(--site-config-color-text);
305
- font-size: 15px;
306
- line-height: 26px;
307
- border-radius: 4px;
308
- background: var(--site-config-color-bar);
309
- list-style: none;
310
- margin: 14px 0 0;
311
- padding: 0;
312
- }
313
-
314
- pre {
315
- margin: 0;
316
- }
317
-
318
- code {
319
- position: relative;
320
- display: block;
321
- padding: 10px 16px;
322
- overflow-x: auto;
323
- font-size: 13px;
324
- font-family: Consolas, Monaco, monospace;
325
- white-space: pre-wrap;
326
- word-wrap: break-word;
327
- color: var(--site-config-color-hl-code);
328
- }
329
-
330
- p code,
331
- li code,
332
- table code {
333
- -webkit-font-smoothing: antialiased;
334
- word-break: keep-all;
335
- color: var(--site-config-color-primary);
336
- font-size: 15px;
337
- @doc-active();
338
- }
339
-
340
- table {
341
- -webkit-font-smoothing: antialiased;
342
- width: 100%;
343
- margin-top: 12px;
344
- color: var(--site-config-color-text);
345
- background: var(--site-config-color-bar);
346
- font-size: 14px;
347
- line-height: 28px;
348
- border-collapse: collapse;
349
- border-radius: 4px;
350
-
351
- th {
352
- padding: 8px 16px;
353
- font-weight: 500;
354
- text-align: left;
355
- color: var(--site-config-color-sub-text);
356
- font-size: 13px;
357
- -webkit-font-smoothing: antialiased;
358
- border-bottom: 1px solid var(--site-config-color-border);
359
- }
360
-
361
- td {
362
- padding: 8px 16px;
363
- border-bottom: 1px solid var(--site-config-color-border);
364
- color: var(--site-config-color-text);
365
- font-family: Consolas, Monaco, monospace;
366
-
367
- code {
368
- white-space: pre-wrap;
369
- padding: 0;
370
- font-size: 13px;
371
- }
372
- }
373
-
374
- em {
375
- color: var(--site-config-color-type);
376
- font-style: normal;
377
- -webkit-font-smoothing: antialiased;
378
- font-size: 13px;
379
- @doc-active();
380
- }
381
- }
382
-
383
- .card {
384
- border-radius: 4px;
385
- background: var(--site-config-color-bar);
386
- padding: 20px;
387
- margin-bottom: 30px;
388
- box-shadow: 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12);
389
-
390
- &:first-child{
391
- margin-top: 30px;
392
- }
393
- }
394
- }
395
- }
396
- }
397
- </style>
1
+ <script lang="ts" setup>
2
+ import config from '@config'
3
+ import AppMobile from './components/AppMobile.vue'
4
+ import AppHeader from './components/AppHeader.vue'
5
+ import AppSidebar from './components/AppSidebar.vue'
6
+ import context from '../components/context'
7
+ import { nextTick, onMounted, ref, watch } from 'vue'
8
+ import { useRoute } from 'vue-router'
9
+ import { get } from 'lodash-es'
10
+ import { getPCLocationInfo, MenuTypes } from "../utils";
11
+ import type { Ref } from 'vue'
12
+
13
+ export interface Menu {
14
+ doc: string
15
+ text: Record<string, string>
16
+ type: MenuTypes
17
+ }
18
+
19
+ const menu: Ref<Menu[]> = ref(get(config, 'pc.menu', []))
20
+ const useMobile = ref(get(config, 'useMobile'))
21
+ const mobileRedirect = get(config, 'mobile.redirect')
22
+
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()
28
+
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
+ }
33
+
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',
47
+ })
48
+ }
49
+ })
50
+ }
51
+
52
+ const handleSidebarChange = (menu: Menu) => {
53
+ doc.value!.scrollTop = 0
54
+ componentName.value = getComponentNameByMenuName(menu.doc)
55
+ menuName.value = menu.doc
56
+ }
57
+
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
+ }
62
+
63
+ context.showPlayground = false
64
+ }
65
+
66
+ onMounted(() => {
67
+ init()
68
+
69
+ window.addEventListener('message', (event) => {
70
+ const { data } = event
71
+
72
+ if (data.action === 'playground-close') {
73
+ confirmClose()
74
+ }
75
+ })
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
+ </script>
94
+
95
+ <template>
96
+ <div class="varlet-site">
97
+ <app-header :language="language" />
98
+
99
+ <div class="varlet-site-content">
100
+ <app-sidebar
101
+ :language="language"
102
+ :menu="menu"
103
+ :menu-name="menuName"
104
+ @change="handleSidebarChange"
105
+ />
106
+
107
+ <div
108
+ class="varlet-site-doc-container"
109
+ ref="doc"
110
+ :class="[!useMobile && 'varlet-site-doc-container--pc-only']"
111
+ >
112
+ <router-view />
113
+ </div>
114
+
115
+ <app-mobile
116
+ :component-name="componentName"
117
+ :language="language"
118
+ :replace="menuName"
119
+ v-show="useMobile"
120
+ />
121
+ </div>
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>
133
+ </template>
134
+
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
+
151
+ .hljs {
152
+ background: var(--site-config-color-hl-background) !important;
153
+ padding: 0 !important;
154
+ transition: all .25s
155
+ }
156
+
157
+ .hljs code {
158
+ line-height: 31px;
159
+ }
160
+
161
+ .hljs-comment, .hljs-meta, .hljs-quote {
162
+ color: var(--site-config-color-hl-group-a)
163
+ }
164
+
165
+ .hljs-keyword, .hljs-name, .hljs-selector-tag, .hljs-tag {
166
+ color: var(--site-config-color-hl-group-b)
167
+ }
168
+
169
+ .hljs-attribute, .hljs-selector-id {
170
+ color: var(--site-config-color-hl-group-c)
171
+ }
172
+
173
+ .hljs-addition, .hljs-selector-attr, .hljs-selector-pseudo, .hljs-string {
174
+ color: var(--site-config-color-hl-group-d)
175
+ }
176
+
177
+ .hljs-subst {
178
+ color: var(--site-config-color-hl-group-e)
179
+ }
180
+
181
+ .hljs-link, .hljs-regexp {
182
+ color: var(--site-config-color-hl-group-f)
183
+ }
184
+
185
+ .hljs-doctag, .hljs-section, .hljs-title, .hljs-type {
186
+ color: var(--site-config-color-hl-group-g)
187
+ }
188
+
189
+ .hljs-bullet, .hljs-literal, .hljs-symbol, .hljs-template-variable, .hljs-variable {
190
+ color: var(--site-config-color-hl-group-h)
191
+ }
192
+
193
+ .hljs-deletion, .hljs-number {
194
+ color: var(--site-config-color-hl-group-i)
195
+ }
196
+ </style>
197
+
198
+ <style lang="less">
199
+ @doc-active: {
200
+ display: inline;
201
+ font-family: inherit;
202
+ padding: 0;
203
+ white-space: pre-wrap;
204
+ }
205
+
206
+ * {
207
+ transition: background-color .25s, box-shadow .25s;
208
+ }
209
+
210
+ iframe {
211
+ display: block;
212
+ width: 100%;
213
+ height: 100%;
214
+ border: none;
215
+ }
216
+
217
+ .varlet {
218
+ &-introduce {
219
+ display: flex;
220
+ flex-direction: column;
221
+ align-items: center;
222
+ margin: 20px 0;
223
+ padding: 90px 40px;
224
+ border-top: 6px solid var(--site-config-color-introduce-border);
225
+ border-radius: 2px;
226
+ background: var(--site-config-color-bar);
227
+ box-shadow: 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12);
228
+
229
+ &__row {
230
+ display: flex;
231
+ align-items: center;
232
+ }
233
+
234
+ &__image {
235
+ width: 60px;
236
+ margin-right: 20px;
237
+ }
238
+
239
+ &__name {
240
+ font-size: 60px;
241
+ }
242
+
243
+ &__des {
244
+ color: var(--site-config-color-sub-text);
245
+ font-size: 16px;
246
+ margin-top: 16px;
247
+ -webkit-font-smoothing: antialiased;
248
+ }
249
+ }
250
+
251
+ &-component-preview {
252
+ margin-top: 20px;
253
+ }
254
+
255
+ &-site {
256
+ min-width: 1200px;
257
+ padding: 60px 0 0;
258
+
259
+ &-content {
260
+ display: flex;
261
+ background: var(--site-config-color-body);
262
+ margin-left: 240px;
263
+ min-height: calc(100vh - 60px);
264
+ }
265
+
266
+ &-doc-container {
267
+ flex: 1 0 0;
268
+ min-width: 500px;
269
+ padding: 0 25px;
270
+ overflow-x: hidden;
271
+
272
+ &::-webkit-scrollbar {
273
+ display: none;
274
+ }
275
+
276
+ &--pc-only {
277
+ padding: 0 90px 0 30px;
278
+ }
279
+ }
280
+
281
+ &-doc {
282
+ a {
283
+ color: var(--site-config-color-link);
284
+ -webkit-font-smoothing: antialiased;
285
+ word-break: keep-all;
286
+ font-size: 15px;
287
+ @doc-active();
288
+
289
+ &:hover {
290
+ opacity: 0.8;
291
+ }
292
+ }
293
+
294
+ h1,
295
+ h2,
296
+ h3,
297
+ h4,
298
+ h5,
299
+ h6 {
300
+ position: relative;
301
+ color: var(--site-config-color-text);
302
+ font-weight: normal;
303
+ line-height: 1.5;
304
+ }
305
+
306
+ h1 {
307
+ line-height: 40px;
308
+ font-size: 30px;
309
+ cursor: default;
310
+ }
311
+
312
+ h2 {
313
+ margin: 30px 0 20px;
314
+ font-size: 25px;
315
+ }
316
+
317
+ h3 {
318
+ font-size: 18px;
319
+ margin: 0;
320
+ }
321
+
322
+ h4 {
323
+ margin: 18px 0 0;
324
+ }
325
+
326
+ p,
327
+ ul,
328
+ ol {
329
+ -webkit-font-smoothing: antialiased;
330
+ color: var(--site-config-color-text);
331
+ font-size: 15px;
332
+ line-height: 26px;
333
+ border-radius: 4px;
334
+ background: var(--site-config-color-bar);
335
+ list-style: none;
336
+ margin: 14px 0 0;
337
+ padding: 0;
338
+ }
339
+
340
+ pre {
341
+ margin: 0;
342
+ }
343
+
344
+ code {
345
+ position: relative;
346
+ display: block;
347
+ padding: 10px 16px;
348
+ overflow-x: auto;
349
+ font-size: 13px;
350
+ font-family: Consolas, Monaco, monospace;
351
+ white-space: pre-wrap;
352
+ word-wrap: break-word;
353
+ color: var(--site-config-color-hl-code);
354
+ }
355
+
356
+ p code,
357
+ li code,
358
+ table code {
359
+ -webkit-font-smoothing: antialiased;
360
+ word-break: keep-all;
361
+ color: var(--site-config-color-primary);
362
+ font-size: 15px;
363
+ @doc-active();
364
+ }
365
+
366
+ table {
367
+ -webkit-font-smoothing: antialiased;
368
+ width: 100%;
369
+ margin-top: 12px;
370
+ color: var(--site-config-color-text);
371
+ background: var(--site-config-color-bar);
372
+ font-size: 14px;
373
+ line-height: 28px;
374
+ border-collapse: collapse;
375
+ border-radius: 4px;
376
+
377
+ th {
378
+ padding: 8px 16px;
379
+ font-weight: 500;
380
+ text-align: left;
381
+ color: var(--site-config-color-sub-text);
382
+ font-size: 13px;
383
+ -webkit-font-smoothing: antialiased;
384
+ border-bottom: 1px solid var(--site-config-color-border);
385
+ }
386
+
387
+ td {
388
+ padding: 8px 16px;
389
+ border-bottom: 1px solid var(--site-config-color-border);
390
+ color: var(--site-config-color-text);
391
+ font-family: Consolas, Monaco, monospace;
392
+
393
+ code {
394
+ white-space: pre-wrap;
395
+ padding: 0;
396
+ font-size: 13px;
397
+ }
398
+ }
399
+
400
+ em {
401
+ color: var(--site-config-color-type);
402
+ font-style: normal;
403
+ -webkit-font-smoothing: antialiased;
404
+ font-size: 13px;
405
+ @doc-active();
406
+ }
407
+ }
408
+
409
+ .card {
410
+ border-radius: 4px;
411
+ background: var(--site-config-color-bar);
412
+ padding: 20px;
413
+ margin-bottom: 30px;
414
+ box-shadow: 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12);
415
+
416
+ &:first-child{
417
+ margin-top: 30px;
418
+ }
419
+ }
420
+ }
421
+ }
422
+ }
423
+ </style>