@varlet/cli 2.0.0-alpha.1663499244572 → 2.0.0-alpha.1664031123039

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 (229) hide show
  1. package/LICENCE +21 -21
  2. package/README.en-US.md +401 -401
  3. package/README.md +396 -396
  4. package/lib/commands/build.d.ts +1 -1
  5. package/lib/commands/build.js +67 -18
  6. package/lib/commands/changelog.d.ts +6 -6
  7. package/lib/commands/changelog.js +27 -26
  8. package/lib/commands/commitLint.d.ts +1 -1
  9. package/lib/commands/commitLint.js +21 -50
  10. package/lib/commands/compile.d.ts +7 -7
  11. package/lib/commands/compile.js +119 -43
  12. package/lib/commands/create.d.ts +8 -8
  13. package/lib/commands/create.js +166 -90
  14. package/lib/commands/dev.d.ts +5 -5
  15. package/lib/commands/dev.js +123 -44
  16. package/lib/commands/gen.d.ts +8 -8
  17. package/lib/commands/gen.js +135 -85
  18. package/lib/commands/jest.d.ts +8 -0
  19. package/lib/commands/jest.js +85 -0
  20. package/lib/commands/lint.d.ts +1 -1
  21. package/lib/commands/lint.js +123 -48
  22. package/lib/commands/preview.d.ts +1 -1
  23. package/lib/commands/preview.js +74 -23
  24. package/lib/commands/release.d.ts +5 -5
  25. package/lib/commands/release.js +270 -132
  26. package/lib/commands/vite.d.ts +3 -3
  27. package/lib/commands/vite.js +69 -20
  28. package/lib/compiler/compileModule.d.ts +5 -5
  29. package/lib/compiler/compileModule.js +190 -79
  30. package/lib/compiler/compileSFC.d.ts +2 -2
  31. package/lib/compiler/compileSFC.js +135 -86
  32. package/lib/compiler/compileScript.d.ts +17 -17
  33. package/lib/compiler/compileScript.js +194 -152
  34. package/lib/compiler/compileSiteEntry.d.ts +13 -13
  35. package/lib/compiler/compileSiteEntry.js +237 -140
  36. package/lib/compiler/compileStyle.d.ts +11 -11
  37. package/lib/compiler/compileStyle.js +91 -43
  38. package/lib/compiler/compileTemplateHighlight.d.ts +10 -10
  39. package/lib/compiler/compileTemplateHighlight.js +193 -145
  40. package/lib/compiler/compileTypes.d.ts +2 -2
  41. package/lib/compiler/compileTypes.js +85 -49
  42. package/lib/config/babel.config.d.ts +2 -2
  43. package/lib/config/babel.config.js +31 -30
  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/jest.config.d.ts +1 -0
  47. package/lib/config/jest.config.js +37 -0
  48. package/lib/config/jest.media.mock.d.ts +0 -0
  49. package/lib/config/jest.media.mock.js +2 -0
  50. package/lib/config/jest.style.mock.d.ts +0 -0
  51. package/lib/config/jest.style.mock.js +2 -0
  52. package/lib/config/varlet.config.d.ts +1 -1
  53. package/lib/config/varlet.config.js +24 -23
  54. package/lib/config/vite.config.d.ts +5 -5
  55. package/lib/config/vite.config.js +162 -157
  56. package/lib/index.d.ts +2 -2
  57. package/lib/index.js +102 -84
  58. package/lib/shared/constant.d.ts +43 -44
  59. package/lib/shared/constant.js +50 -51
  60. package/lib/shared/fsUtils.d.ts +12 -12
  61. package/lib/shared/fsUtils.js +108 -61
  62. package/lib/shared/logger.d.ts +8 -8
  63. package/lib/shared/logger.js +23 -23
  64. package/package.json +11 -11
  65. package/preset.js +3 -3
  66. package/site/components/button/Button.vue +106 -106
  67. package/site/components/button/button.less +183 -183
  68. package/site/components/button/index.ts +10 -10
  69. package/site/components/button/props.ts +78 -78
  70. package/site/components/cell/Cell.vue +54 -54
  71. package/site/components/cell/cell.less +78 -78
  72. package/site/components/cell/index.ts +10 -10
  73. package/site/components/cell/props.ts +27 -27
  74. package/site/components/code-example/CodeExample.vue +137 -137
  75. package/site/components/code-example/codeExample.less +41 -41
  76. package/site/components/code-example/index.ts +10 -10
  77. package/site/components/context/index.ts +21 -21
  78. package/site/components/context/lock.ts +92 -92
  79. package/site/components/context/zIndex.ts +20 -20
  80. package/site/components/icon/Icon.vue +75 -75
  81. package/site/components/icon/icon.less +26 -26
  82. package/site/components/icon/index.ts +10 -10
  83. package/site/components/icon/props.ts +24 -24
  84. package/site/components/loading/Loading.vue +84 -84
  85. package/site/components/loading/index.ts +10 -10
  86. package/site/components/loading/loading.less +505 -505
  87. package/site/components/loading/props.ts +42 -42
  88. package/site/components/popup/Popup.tsx +102 -102
  89. package/site/components/popup/index.ts +10 -10
  90. package/site/components/popup/popup.less +125 -125
  91. package/site/components/popup/props.ts +63 -63
  92. package/site/components/progress/Progress.vue +112 -112
  93. package/site/components/progress/index.ts +10 -10
  94. package/site/components/progress/progress.less +101 -101
  95. package/site/components/progress/props.ts +55 -55
  96. package/site/components/ripple/index.ts +188 -188
  97. package/site/components/ripple/ripple.less +20 -20
  98. package/site/components/snackbar/Snackbar.vue +41 -41
  99. package/site/components/snackbar/core.vue +132 -132
  100. package/site/components/snackbar/index.tsx +270 -270
  101. package/site/components/snackbar/props.ts +97 -97
  102. package/site/components/snackbar/snackbar.less +135 -135
  103. package/site/components/styles/common.less +64 -64
  104. package/site/components/styles/elevation.less +126 -126
  105. package/site/components/styles/var.less +27 -27
  106. package/site/components/utils/components.ts +117 -117
  107. package/site/components/utils/elements.ts +102 -102
  108. package/site/index.html +49 -49
  109. package/site/mobile/App.vue +291 -291
  110. package/site/mobile/components/AppHome.vue +134 -134
  111. package/site/mobile/components/AppType.vue +22 -22
  112. package/site/mobile/components/app-bar/AppBar.vue +65 -65
  113. package/site/mobile/components/app-bar/appBar.less +57 -57
  114. package/site/mobile/components/app-bar/index.ts +10 -10
  115. package/site/mobile/components/app-bar/props.ts +25 -25
  116. package/site/mobile/main.ts +78 -78
  117. package/site/mobile.html +41 -41
  118. package/site/module.d.ts +5 -5
  119. package/site/pc/App.vue +43 -43
  120. package/site/pc/Layout.vue +423 -423
  121. package/site/pc/components/AnimationBox.vue +33 -33
  122. package/site/pc/components/AppHeader.vue +368 -368
  123. package/site/pc/components/AppMobile.vue +60 -60
  124. package/site/pc/components/AppSidebar.vue +143 -143
  125. package/site/pc/components/LogoAnimation.vue +117 -117
  126. package/site/pc/floating.ts +9 -9
  127. package/site/pc/main.ts +100 -100
  128. package/site/pc/pages/index/index.less +176 -176
  129. package/site/pc/pages/index/index.vue +130 -130
  130. package/site/pc/pages/index/locale/en-US.ts +1 -1
  131. package/site/pc/pages/index/locale/zh-CN.ts +1 -1
  132. package/site/tsconfig.json +11 -11
  133. package/site/useProgress.ts +72 -72
  134. package/site/utils.ts +165 -167
  135. package/template/create/{tsx.ejs → [ComponentName].tsx.ejs} +13 -13
  136. package/template/create/{vue.ejs → [ComponentName].vue.ejs} +17 -17
  137. package/template/create/{less.ejs → [componentName].less.ejs} +3 -3
  138. package/template/create/__tests__/{index.spec.ejs → index.spec.js.ejs} +13 -8
  139. package/template/create/example/{index.ejs → index.vue.ejs} +15 -15
  140. package/template/create/example/locale/en-US.ts +3 -3
  141. package/template/create/example/locale/index.ts +23 -23
  142. package/template/create/example/locale/zh-CN.ts +3 -3
  143. package/template/create/{index.ejs → index.ts.ejs} +11 -12
  144. package/template/create/props.ts +1 -1
  145. package/template/generators/base/.prettierignore +14 -9
  146. package/template/generators/base/.prettierrc +5 -5
  147. package/template/generators/base/README.md +82 -82
  148. package/template/generators/base/babel.config.js +10 -10
  149. package/template/generators/base/public/logo.svg +30 -1
  150. package/template/generators/base/shims/shims-md.d.ts +4 -4
  151. package/template/generators/base/shims/shims-vue.d.ts +6 -6
  152. package/template/generators/base/tsconfig.json +13 -13
  153. package/template/generators/config/default/base/docs/home.zh-CN.md +2 -10
  154. package/template/generators/config/default/base/package.json +112 -105
  155. package/template/generators/config/default/base/types/basicComponent.d.ts +7 -7
  156. package/template/generators/config/default/base/types/button.d.ts +12 -12
  157. package/template/generators/config/default/base/types/index.d.ts +6 -6
  158. package/template/generators/config/default/base/varlet.config.js +45 -110
  159. package/template/generators/config/default/sfc/src/button/Button.vue +31 -30
  160. package/template/generators/config/default/sfc/src/button/__tests__/index.spec.js +7 -7
  161. package/template/generators/config/default/sfc/src/button/button.less +14 -14
  162. package/template/generators/config/default/sfc/src/button/docs/zh-CN.md +38 -47
  163. package/template/generators/config/default/sfc/src/button/example/BasicUse.vue +7 -7
  164. package/template/generators/config/default/sfc/src/button/example/ModifyColor.vue +7 -7
  165. package/template/generators/config/default/sfc/src/button/example/index.vue +12 -13
  166. package/template/generators/config/default/sfc/src/button/index.ts +10 -10
  167. package/template/generators/config/default/tsx/src/button/Button.tsx +29 -29
  168. package/template/generators/config/default/tsx/src/button/__tests__/index.spec.js +7 -7
  169. package/template/generators/config/default/tsx/src/button/button.less +14 -14
  170. package/template/generators/config/default/tsx/src/button/docs/zh-CN.md +38 -47
  171. package/template/generators/config/default/tsx/src/button/example/BasicUse.vue +7 -7
  172. package/template/generators/config/default/tsx/src/button/example/ModifyColor.vue +7 -7
  173. package/template/generators/config/default/tsx/src/button/example/index.vue +12 -13
  174. package/template/generators/config/default/tsx/src/button/index.ts +10 -10
  175. package/template/generators/config/i18n/base/docs/home.en-US.md +3 -11
  176. package/template/generators/config/i18n/base/docs/home.zh-CN.md +2 -10
  177. package/template/generators/config/i18n/base/package.json +112 -105
  178. package/template/generators/config/i18n/base/types/basicComponent.d.ts +7 -7
  179. package/template/generators/config/i18n/base/types/button.d.ts +12 -12
  180. package/template/generators/config/i18n/base/types/index.d.ts +7 -7
  181. package/template/generators/config/i18n/base/types/locale.d.ts +24 -24
  182. package/template/generators/config/i18n/base/varlet.config.js +47 -122
  183. package/template/generators/config/i18n/sfc/src/button/Button.vue +37 -36
  184. package/template/generators/config/i18n/sfc/src/button/__tests__/index.spec.js +7 -7
  185. package/template/generators/config/i18n/sfc/src/button/button.less +14 -14
  186. package/template/generators/config/i18n/sfc/src/button/docs/en-US.md +38 -34
  187. package/template/generators/config/i18n/sfc/src/button/docs/zh-CN.md +38 -34
  188. package/template/generators/config/i18n/sfc/src/button/example/BasicUse.vue +11 -11
  189. package/template/generators/config/i18n/sfc/src/button/example/ModifyColor.vue +11 -11
  190. package/template/generators/config/i18n/sfc/src/button/example/index.vue +16 -13
  191. package/template/generators/config/i18n/sfc/src/button/example/locale/en-US.ts +5 -5
  192. package/template/generators/config/i18n/sfc/src/button/example/locale/index.ts +23 -23
  193. package/template/generators/config/i18n/sfc/src/button/example/locale/zh-CN.ts +5 -5
  194. package/template/generators/config/i18n/sfc/src/button/index.ts +10 -10
  195. package/template/generators/config/i18n/sfc/src/locale/__tests__/index.spec.js +51 -51
  196. package/template/generators/config/i18n/sfc/src/locale/docs/en-US.md +26 -26
  197. package/template/generators/config/i18n/sfc/src/locale/docs/zh-CN.md +25 -25
  198. package/template/generators/config/i18n/sfc/src/locale/en-US.d.ts +5 -5
  199. package/template/generators/config/i18n/sfc/src/locale/en-US.ts +7 -7
  200. package/template/generators/config/i18n/sfc/src/locale/index.ts +67 -67
  201. package/template/generators/config/i18n/sfc/src/locale/zh-CN.d.ts +5 -5
  202. package/template/generators/config/i18n/sfc/src/locale/zh-CN.ts +7 -7
  203. package/template/generators/config/i18n/tsx/src/button/Button.tsx +31 -33
  204. package/template/generators/config/i18n/tsx/src/button/__tests__/index.spec.js +7 -7
  205. package/template/generators/config/i18n/tsx/src/button/button.less +14 -14
  206. package/template/generators/config/i18n/tsx/src/button/docs/en-US.md +38 -34
  207. package/template/generators/config/i18n/tsx/src/button/docs/zh-CN.md +38 -34
  208. package/template/generators/config/i18n/tsx/src/button/example/BasicUse.vue +11 -11
  209. package/template/generators/config/i18n/tsx/src/button/example/ModifyColor.vue +11 -11
  210. package/template/generators/config/i18n/tsx/src/button/example/index.vue +15 -13
  211. package/template/generators/config/i18n/tsx/src/button/example/locale/en-US.ts +5 -5
  212. package/template/generators/config/i18n/tsx/src/button/example/locale/index.ts +23 -23
  213. package/template/generators/config/i18n/tsx/src/button/example/locale/zh-CN.ts +5 -5
  214. package/template/generators/config/i18n/tsx/src/button/index.ts +10 -10
  215. package/template/generators/config/i18n/tsx/src/locale/__tests__/index.spec.js +51 -51
  216. package/template/generators/config/i18n/tsx/src/locale/docs/en-US.md +26 -26
  217. package/template/generators/config/i18n/tsx/src/locale/docs/zh-CN.md +25 -25
  218. package/template/generators/config/i18n/tsx/src/locale/en-US.d.ts +5 -5
  219. package/template/generators/config/i18n/tsx/src/locale/en-US.ts +7 -7
  220. package/template/generators/config/i18n/tsx/src/locale/index.ts +67 -67
  221. package/template/generators/config/i18n/tsx/src/locale/zh-CN.d.ts +5 -5
  222. package/template/generators/config/i18n/tsx/src/locale/zh-CN.ts +7 -7
  223. package/tsconfig.json +14 -15
  224. package/varlet.default.config.js +3 -3
  225. package/lib/commands/test.d.ts +0 -7
  226. package/lib/commands/test.js +0 -26
  227. package/lib/config/vitest.config.d.ts +0 -2
  228. package/lib/config/vitest.config.js +0 -28
  229. package/template/generators/base/public/highlight.css +0 -1
@@ -1,423 +1,423 @@
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>
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>