@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,143 +1,137 @@
1
- <template>
2
- <div class="var-site-code-example">
3
- <div class="var-site-code-example__toolbar">
4
- <var-site-button text round @click="toggle" v-if="fold && !disabledFold">
5
- <var-site-icon name="xml" size="18" />
6
- </var-site-button>
7
-
8
- <var-site-button
9
- :id="`clip-trigger-${cid}`"
10
- :data-clipboard-target="`#clip-target-${cid}`"
11
- text
12
- round
13
- v-if="clipboard"
14
- >
15
- <var-site-icon name="content-copy" size="18" />
16
- </var-site-button>
17
-
18
- <var-site-button text round @click="toPlayground" v-if="playground">
19
- <var-site-icon name="code-json" size="18" />
20
- </var-site-button>
21
- </div>
22
- <div
23
- :id="`clip-target-${cid}`"
24
- class="var-site-code-example__code"
25
- :class="[disabledFold ? 'var-site-code-example--scroller' : null]"
26
- ref="code"
27
- :style="{
28
- height: height >= 0 ? `${height}px` : undefined,
29
- }"
30
- >
31
- <slot/>
32
- </div>
33
- </div>
34
- </template>
35
-
36
- <script lang="ts">
37
- import Icon from '../icon'
38
- import Button from '../button'
39
- import Snackbar from '../snackbar'
40
- import Clipboard from 'clipboard'
41
- import config from '@config'
42
- import { defineComponent, nextTick, ref, onMounted } from 'vue'
43
- import { doubleRaf } from '../utils/elements'
44
- import { get } from 'lodash-es'
45
- import { getPCLocationInfo, utoa } from '../../utils'
46
- import type { Ref } from 'vue'
47
-
48
- let clipId = 0
49
- const offset = 10
50
-
51
- export default defineComponent({
52
- name: 'VarSiteCodeExample',
53
- components: {
54
- [Button.name]: Button,
55
- [Icon.name]: Icon
56
- },
57
- props: {
58
- playgroundIgnore: {
59
- type: Boolean,
60
- default: false
61
- }
62
- },
63
- setup(props) {
64
- const code: Ref<HTMLElement | null> = ref(null)
65
- const cid: Ref<number> = ref(clipId++)
66
- const fold: Ref = ref(get(config, 'pc.fold'))
67
- const disabledFold: Ref<boolean> = ref(false)
68
- const clipboard: Ref = ref(get(config, 'pc.clipboard', {}))
69
- const height: Ref<number> = ref(-1)
70
- const playground: Ref<string | undefined> = ref(!props.playgroundIgnore ? get(config, 'pc.header.playground') : undefined )
71
- let timer: any = null
72
-
73
- const toggle = async () => {
74
- const foldHeight = fold.value.foldHeight
75
-
76
- if (height.value === foldHeight) {
77
- height.value = -1
78
- await nextTick()
79
- const { offsetHeight } = code.value as HTMLElement
80
- height.value = foldHeight
81
- await doubleRaf()
82
- height.value = offsetHeight
83
-
84
- timer = setTimeout(() => {
85
- height.value = -1
86
- }, 250)
87
- } else {
88
- clearTimeout(timer)
89
- const { offsetHeight } = code.value as HTMLElement
90
- height.value = offsetHeight
91
- await doubleRaf()
92
- height.value = foldHeight
93
- }
94
- }
95
-
96
- const toPlayground = () => {
97
- const scriptStart = '<script setup>\n'
98
- const scriptEnd = '<\/script>'
99
- const injectImport = 'import { installVarletUI } from \'./varlet-repl-plugin.js\'\n'
100
- const injectCall = '\ninstallVarletUI()\n'
101
- let codeText = code.value?.innerText ?? ''
102
-
103
- if (codeText.includes(scriptStart)) {
104
- codeText = codeText.replace(scriptStart, `${scriptStart}${injectImport}`)
105
- codeText = codeText.replace(scriptEnd, `${injectCall}${scriptEnd}`)
106
- } else {
107
- codeText = `${scriptStart}${injectImport}${injectCall}<\/script>\n\n${codeText}`
108
- }
109
-
110
- const file = { 'App.vue': codeText }
111
- window.open(`${playground.value}/#${utoa(JSON.stringify(file))}`)
112
- }
113
-
114
- onMounted(() => {
115
- const trigger = new Clipboard(`#clip-trigger-${cid.value}`)
116
-
117
- trigger.on('success', () => {
118
- Snackbar.success(clipboard.value[getPCLocationInfo().language])
119
- })
120
-
121
- const { offsetHeight } = code.value as HTMLElement
122
- disabledFold.value = offsetHeight - fold.value.foldHeight < offset
123
- height.value = fold.value?.defaultFold ? fold.value?.foldHeight : -1
124
- })
125
-
126
- return {
127
- code,
128
- height,
129
- cid,
130
- fold,
131
- disabledFold,
132
- clipboard,
133
- playground,
134
- toggle,
135
- toPlayground
136
- }
137
- }
138
- })
139
- </script>
140
-
141
- <style lang="less">
142
- @import "./codeExample";
143
- </style>
1
+ <template>
2
+ <div class="var-site-code-example">
3
+ <div class="var-site-code-example__toolbar">
4
+ <var-button text round @click="toggle" v-if="fold && !disabledFold">
5
+ <var-icon name="xml" size="18" />
6
+ </var-button>
7
+
8
+ <var-button
9
+ :id="`clip-trigger-${cid}`"
10
+ :data-clipboard-target="`#clip-target-${cid}`"
11
+ text
12
+ round
13
+ v-if="clipboard"
14
+ >
15
+ <var-icon name="content-copy" size="18" />
16
+ </var-button>
17
+
18
+ <var-button text round @click="toPlayground" v-if="playground">
19
+ <var-icon name="code-json" size="18" />
20
+ </var-button>
21
+ </div>
22
+ <div
23
+ :id="`clip-target-${cid}`"
24
+ class="var-site-code-example__code"
25
+ :class="[disabledFold ? 'var-site-code-example--scroller' : null]"
26
+ ref="code"
27
+ :style="{
28
+ height: height >= 0 ? `${height}px` : undefined,
29
+ }"
30
+ >
31
+ <slot/>
32
+ </div>
33
+ </div>
34
+ </template>
35
+
36
+ <script lang="ts">
37
+ import Icon from '../icon'
38
+ import Button from '../button'
39
+ import Snackbar from '../snackbar'
40
+ import Clipboard from 'clipboard'
41
+ import context from '../context'
42
+ import config from '@config'
43
+ import { defineComponent, nextTick, ref, onMounted } from 'vue'
44
+ import { doubleRaf } from '../utils/elements'
45
+ import { get } from 'lodash-es'
46
+ import { getBrowserTheme, getPCLocationInfo, utoa } from "../../utils";
47
+ import type { Ref } from 'vue'
48
+
49
+ let clipId = 0
50
+ const offset = 10
51
+
52
+ export default defineComponent({
53
+ name: 'VarSiteCodeExample',
54
+ components: {
55
+ [Button.name]: Button,
56
+ [Icon.name]: Icon
57
+ },
58
+ props: {
59
+ playgroundIgnore: {
60
+ type: Boolean,
61
+ default: false
62
+ }
63
+ },
64
+ setup(props) {
65
+ const code: Ref<HTMLElement | null> = ref(null)
66
+ const cid: Ref<number> = ref(clipId++)
67
+ const fold: Ref = ref(get(config, 'pc.fold'))
68
+ const disabledFold: Ref<boolean> = ref(false)
69
+ const clipboard: Ref = ref(get(config, 'pc.clipboard', {}))
70
+ const height: Ref<number> = ref(-1)
71
+ const playground: Ref<string | undefined> = ref(!props.playgroundIgnore ? get(config, 'pc.header.playground') : undefined )
72
+ let timer: any = null
73
+
74
+ const toggle = async () => {
75
+ const foldHeight = fold.value.foldHeight
76
+
77
+ if (height.value === foldHeight) {
78
+ height.value = -1
79
+ await nextTick()
80
+ const { offsetHeight } = code.value as HTMLElement
81
+ height.value = foldHeight
82
+ await doubleRaf()
83
+ height.value = offsetHeight
84
+
85
+ timer = setTimeout(() => {
86
+ height.value = -1
87
+ }, 250)
88
+ } else {
89
+ clearTimeout(timer)
90
+ const { offsetHeight } = code.value as HTMLElement
91
+ height.value = offsetHeight
92
+ await doubleRaf()
93
+ height.value = foldHeight
94
+ }
95
+ }
96
+
97
+ const toPlayground = () => {
98
+ const codeText = code.value?.innerText ?? ''
99
+
100
+ const file = { 'App.vue': codeText }
101
+
102
+ const initialTheme = getBrowserTheme().replace('Theme', '')
103
+
104
+ context.showPlayground = true
105
+ context.playgroundURL = `${playground.value}/?initialTheme=${initialTheme}#${utoa(JSON.stringify(file))}`
106
+ }
107
+
108
+ onMounted(() => {
109
+ const trigger = new Clipboard(`#clip-trigger-${cid.value}`)
110
+
111
+ trigger.on('success', () => {
112
+ Snackbar.success(clipboard.value[getPCLocationInfo().language])
113
+ })
114
+
115
+ const { offsetHeight } = code.value as HTMLElement
116
+ disabledFold.value = offsetHeight - fold.value.foldHeight < offset
117
+ height.value = fold.value?.defaultFold ? fold.value?.foldHeight : -1
118
+ })
119
+
120
+ return {
121
+ code,
122
+ height,
123
+ cid,
124
+ fold,
125
+ disabledFold,
126
+ clipboard,
127
+ playground,
128
+ toggle,
129
+ toPlayground
130
+ }
131
+ }
132
+ })
133
+ </script>
134
+
135
+ <style lang="less">
136
+ @import "./codeExample";
137
+ </style>
@@ -1,41 +1,41 @@
1
- .var-site-code-example {
2
- margin-top: 16px;
3
- margin-bottom: 4px;
4
- position: relative;
5
- border: thin solid var(--site-config-color-hl-border);
6
- border-radius: 4px;
7
- transition: border .25s;
8
-
9
- &:hover {
10
- .var-site-code-example__toolbar {
11
- opacity: 1;
12
- }
13
- }
14
-
15
- &__toolbar {
16
- display: flex;
17
- align-items: center;
18
- position: absolute;
19
- z-index: 1;
20
- right: 10px;
21
- top: 10px;
22
- opacity: 0;
23
- transition: .25s all;
24
-
25
- button {
26
- color: var(--site-config-color-hl-code) !important;
27
- }
28
- }
29
-
30
- &__code {
31
- transition: all .25s;
32
- overflow: hidden;
33
- border-radius: 4px;
34
- }
35
-
36
- &--scroller {
37
- code {
38
- white-space: nowrap;
39
- }
40
- }
41
- }
1
+ .var-site-code-example {
2
+ margin-top: 16px;
3
+ margin-bottom: 4px;
4
+ position: relative;
5
+ border: thin solid var(--site-config-color-hl-border);
6
+ border-radius: 4px;
7
+ transition: border .25s;
8
+
9
+ &:hover {
10
+ .var-site-code-example__toolbar {
11
+ opacity: 1;
12
+ }
13
+ }
14
+
15
+ &__toolbar {
16
+ display: flex;
17
+ align-items: center;
18
+ position: absolute;
19
+ z-index: 1;
20
+ right: 10px;
21
+ top: 10px;
22
+ opacity: 0;
23
+ transition: .25s all;
24
+
25
+ button {
26
+ color: var(--site-config-color-hl-code) !important;
27
+ }
28
+ }
29
+
30
+ &__code {
31
+ transition: all .25s;
32
+ overflow: hidden;
33
+ border-radius: 4px;
34
+ }
35
+
36
+ &--scroller {
37
+ code {
38
+ white-space: nowrap;
39
+ }
40
+ }
41
+ }
@@ -1,10 +1,10 @@
1
- import type { App } from 'vue'
2
- import CodeExample from './CodeExample.vue'
3
-
4
- CodeExample.install = function (app: App) {
5
- app.component(CodeExample.name, CodeExample)
6
- }
7
-
8
- export const _CodeExampleComponent = CodeExample
9
-
10
- export default CodeExample
1
+ import type { App } from 'vue'
2
+ import CodeExample from './CodeExample.vue'
3
+
4
+ CodeExample.install = function (app: App) {
5
+ app.component(CodeExample.name, CodeExample)
6
+ }
7
+
8
+ export const _CodeExampleComponent = CodeExample
9
+
10
+ export default CodeExample
@@ -1,17 +1,21 @@
1
- import { reactive } from 'vue'
2
-
3
- interface Context {
4
- locks: Record<any, number>
5
- zIndex: number
6
- touchmoveForbid: boolean
7
- }
8
-
9
- const context: Context = {
10
- locks: {},
11
- zIndex: 2000,
12
- touchmoveForbid: true,
13
- }
14
-
15
- export const _ContextComponent = reactive<Context>(context)
16
-
17
- export default reactive<Context>(context)
1
+ import { reactive } from 'vue'
2
+
3
+ interface Context {
4
+ locks: Record<any, number>
5
+ zIndex: number
6
+ touchmoveForbid: boolean
7
+ showPlayground: boolean,
8
+ playgroundURL: string
9
+ }
10
+
11
+ const context: Context = {
12
+ locks: {},
13
+ zIndex: 2000,
14
+ touchmoveForbid: true,
15
+ showPlayground: false,
16
+ playgroundURL: ''
17
+ }
18
+
19
+ export const _ContextComponent = reactive<Context>(context)
20
+
21
+ export default reactive<Context>(context)
@@ -1,103 +1,92 @@
1
- import { watch, onBeforeMount, onUnmounted, onDeactivated, onActivated, getCurrentInstance } from 'vue'
2
- import type { ComponentInternalInstance } from 'vue'
3
- import context from '.'
4
-
5
- export function resolveLock() {
6
- const lockCounts: number = Object.keys(context.locks).length
7
- lockCounts <= 0 ? document.body.classList.remove('var-site--lock') : document.body.classList.add('var-site--lock')
8
- }
9
-
10
- export function addLock(uid: number) {
11
- context.locks[uid] = 1
12
- resolveLock()
13
- }
14
-
15
- export function releaseLock(uid: number) {
16
- delete context.locks[uid]
17
- resolveLock()
18
- }
19
-
20
- /**
21
- * 组件锁操作
22
- * @param props 组件props
23
- * @param state 组件props中控制组件加锁的开关对应的key值
24
- * @param use 组件props中控制组件加锁的开关是否可用对应的key值
25
- */
26
- export function useLock(props: any, state: string, use?: string) {
27
- const { uid } = getCurrentInstance() as ComponentInternalInstance
28
- if (use) {
29
- watch(
30
- () => props[use],
31
- (newValue: boolean) => {
32
- if (newValue === false) {
33
- // 改变为禁用状态 组件解锁
34
- releaseLock(uid)
35
- } else if (newValue === true && props[state] === true) {
36
- // 改变为启用状态 并且popup处于开启状态 组件加锁
37
- addLock(uid)
38
- }
39
- }
40
- )
41
- }
42
-
43
- watch(
44
- () => props[state],
45
- (newValue: boolean) => {
46
- if (use && props[use] === false) {
47
- return
48
- }
49
-
50
- if (newValue === true) {
51
- // popup开启 组件加锁
52
- addLock(uid)
53
- } else {
54
- // popup关闭 组件解锁
55
- releaseLock(uid)
56
- }
57
- }
58
- )
59
-
60
- onBeforeMount(() => {
61
- if (use && props[use] === false) {
62
- return
63
- }
64
-
65
- if (props[state] === true) {
66
- // popup处于开启状态 组件挂载 组件加锁
67
- addLock(uid)
68
- }
69
- })
70
-
71
- onUnmounted(() => {
72
- if (use && props[use] === false) {
73
- return
74
- }
75
-
76
- if (props[state] === true) {
77
- // popup处于开启状态 组件卸载 组件解锁
78
- releaseLock(uid)
79
- }
80
- })
81
-
82
- onActivated(() => {
83
- if (use && props[use] === false) {
84
- return
85
- }
86
-
87
- if (props[state] === true) {
88
- // popup处于开启状态 组件处于keepalive前台 组件加锁
89
- addLock(uid)
90
- }
91
- })
92
-
93
- onDeactivated(() => {
94
- if (use && props[use] === false) {
95
- return
96
- }
97
-
98
- if (props[state] === true) {
99
- // popup处于开启状态 组件处于keepalive后台 组件解锁
100
- releaseLock(uid)
101
- }
102
- })
103
- }
1
+ import { watch, onBeforeMount, onUnmounted, onDeactivated, onActivated, getCurrentInstance } from 'vue'
2
+ import type { ComponentInternalInstance } from 'vue'
3
+ import context from '.'
4
+
5
+ export function resolveLock() {
6
+ const lockCounts: number = Object.keys(context.locks).length
7
+ lockCounts <= 0 ? document.body.classList.remove('var-site--lock') : document.body.classList.add('var-site--lock')
8
+ }
9
+
10
+ export function addLock(uid: number) {
11
+ context.locks[uid] = 1
12
+ resolveLock()
13
+ }
14
+
15
+ export function releaseLock(uid: number) {
16
+ delete context.locks[uid]
17
+ resolveLock()
18
+ }
19
+
20
+ export function useLock(source: any, useSource?: any) {
21
+ const { uid } = getCurrentInstance() as ComponentInternalInstance
22
+
23
+ if (useSource) {
24
+ watch(useSource, (newValue: boolean) => {
25
+ if (newValue === false) {
26
+ // 改变为禁用状态 组件解锁
27
+ releaseLock(uid)
28
+ } else if (newValue === true && source() === true) {
29
+ // 改变为启用状态 并且popup处于开启状态 组件加锁
30
+ addLock(uid)
31
+ }
32
+ })
33
+ }
34
+
35
+ watch(source, (newValue: boolean) => {
36
+ if (useSource && useSource() === false) {
37
+ return
38
+ }
39
+
40
+ if (newValue === true) {
41
+ // popup开启 组件加锁
42
+ addLock(uid)
43
+ } else {
44
+ // popup关闭 组件解锁
45
+ releaseLock(uid)
46
+ }
47
+ })
48
+
49
+ onBeforeMount(() => {
50
+ if (useSource && useSource() === false) {
51
+ return
52
+ }
53
+
54
+ if (source() === true) {
55
+ // popup处于开启状态 组件挂载 组件加锁
56
+ addLock(uid)
57
+ }
58
+ })
59
+
60
+ onUnmounted(() => {
61
+ if (useSource && useSource() === false) {
62
+ return
63
+ }
64
+
65
+ if (source() === true) {
66
+ // popup处于开启状态 组件卸载 组件解锁
67
+ releaseLock(uid)
68
+ }
69
+ })
70
+
71
+ onActivated(() => {
72
+ if (useSource && useSource() === false) {
73
+ return
74
+ }
75
+
76
+ if (source() === true) {
77
+ // popup处于开启状态 组件处于keepalive前台 组件加锁
78
+ addLock(uid)
79
+ }
80
+ })
81
+
82
+ onDeactivated(() => {
83
+ if (useSource && useSource() === false) {
84
+ return
85
+ }
86
+
87
+ if (source() === true) {
88
+ // popup处于开启状态 组件处于keepalive后台 组件解锁
89
+ releaseLock(uid)
90
+ }
91
+ })
92
+ }
@@ -1,20 +1,20 @@
1
- import context from './index'
2
- import { watch, ref } from 'vue'
3
- import type { Ref } from 'vue'
4
-
5
- export function useZIndex(source: any, count: number) {
6
- const zIndex: Ref<number> = ref(context.zIndex)
7
-
8
- watch(
9
- source,
10
- (newValue) => {
11
- if (newValue) {
12
- context.zIndex += count
13
- zIndex.value = context.zIndex
14
- }
15
- },
16
- { immediate: true }
17
- )
18
-
19
- return { zIndex }
20
- }
1
+ import context from './index'
2
+ import { watch, ref } from 'vue'
3
+ import type { Ref } from 'vue'
4
+
5
+ export function useZIndex(source: any, count: number) {
6
+ const zIndex: Ref<number> = ref(context.zIndex)
7
+
8
+ watch(
9
+ source,
10
+ (newValue) => {
11
+ if (newValue) {
12
+ context.zIndex += count
13
+ zIndex.value = context.zIndex
14
+ }
15
+ },
16
+ { immediate: true }
17
+ )
18
+
19
+ return { zIndex }
20
+ }