@varlet/cli 1.27.17-alpha.1656907860130 → 1.27.19

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 (210) hide show
  1. package/LICENCE +21 -21
  2. package/README.en-US.md +401 -401
  3. package/README.md +396 -396
  4. package/generators/base/.prettierignore +9 -9
  5. package/generators/base/.prettierrc +5 -5
  6. package/generators/base/README.md +82 -82
  7. package/generators/base/babel.config.js +10 -10
  8. package/generators/base/public/highlight.css +1 -1
  9. package/generators/base/public/logo.svg +1 -1
  10. package/generators/base/shims/shims-md.d.ts +4 -4
  11. package/generators/base/shims/shims-vue.d.ts +6 -6
  12. package/generators/base/tsconfig.json +13 -13
  13. package/generators/config/default/base/docs/home.zh-CN.md +10 -10
  14. package/generators/config/default/base/package.json +6 -0
  15. package/generators/config/default/base/types/basicComponent.d.ts +7 -7
  16. package/generators/config/default/base/types/button.d.ts +12 -12
  17. package/generators/config/default/base/types/index.d.ts +6 -6
  18. package/generators/config/default/base/varlet.config.js +110 -110
  19. package/generators/config/default/sfc/src/button/Button.vue +30 -30
  20. package/generators/config/default/sfc/src/button/__tests__/index.spec.js +7 -7
  21. package/generators/config/default/sfc/src/button/button.less +14 -14
  22. package/generators/config/default/sfc/src/button/docs/zh-CN.md +47 -47
  23. package/generators/config/default/sfc/src/button/example/BasicUse.vue +7 -7
  24. package/generators/config/default/sfc/src/button/example/ModifyColor.vue +7 -7
  25. package/generators/config/default/sfc/src/button/example/index.vue +13 -13
  26. package/generators/config/default/sfc/src/button/index.ts +10 -10
  27. package/generators/config/default/tsx/src/button/Button.tsx +31 -31
  28. package/generators/config/default/tsx/src/button/__tests__/index.spec.js +7 -7
  29. package/generators/config/default/tsx/src/button/button.less +14 -14
  30. package/generators/config/default/tsx/src/button/docs/zh-CN.md +47 -47
  31. package/generators/config/default/tsx/src/button/example/BasicUse.vue +7 -7
  32. package/generators/config/default/tsx/src/button/example/ModifyColor.vue +7 -7
  33. package/generators/config/default/tsx/src/button/example/index.vue +13 -13
  34. package/generators/config/default/tsx/src/button/index.ts +10 -10
  35. package/generators/config/i18n/base/docs/home.en-US.md +11 -11
  36. package/generators/config/i18n/base/docs/home.zh-CN.md +10 -10
  37. package/generators/config/i18n/base/package.json +6 -0
  38. package/generators/config/i18n/base/types/basicComponent.d.ts +7 -7
  39. package/generators/config/i18n/base/types/button.d.ts +12 -12
  40. package/generators/config/i18n/base/types/index.d.ts +7 -7
  41. package/generators/config/i18n/base/types/locale.d.ts +24 -24
  42. package/generators/config/i18n/base/varlet.config.js +122 -122
  43. package/generators/config/i18n/sfc/src/button/Button.vue +36 -36
  44. package/generators/config/i18n/sfc/src/button/__tests__/index.spec.js +7 -7
  45. package/generators/config/i18n/sfc/src/button/button.less +14 -14
  46. package/generators/config/i18n/sfc/src/button/docs/en-US.md +34 -34
  47. package/generators/config/i18n/sfc/src/button/docs/zh-CN.md +34 -34
  48. package/generators/config/i18n/sfc/src/button/example/BasicUse.vue +11 -11
  49. package/generators/config/i18n/sfc/src/button/example/ModifyColor.vue +11 -11
  50. package/generators/config/i18n/sfc/src/button/example/index.vue +13 -13
  51. package/generators/config/i18n/sfc/src/button/example/locale/en-US.ts +5 -5
  52. package/generators/config/i18n/sfc/src/button/example/locale/index.ts +23 -23
  53. package/generators/config/i18n/sfc/src/button/example/locale/zh-CN.ts +5 -5
  54. package/generators/config/i18n/sfc/src/button/index.ts +10 -10
  55. package/generators/config/i18n/sfc/src/locale/__tests__/index.spec.js +51 -51
  56. package/generators/config/i18n/sfc/src/locale/docs/en-US.md +26 -26
  57. package/generators/config/i18n/sfc/src/locale/docs/zh-CN.md +25 -25
  58. package/generators/config/i18n/sfc/src/locale/en-US.d.ts +5 -5
  59. package/generators/config/i18n/sfc/src/locale/en-US.ts +7 -7
  60. package/generators/config/i18n/sfc/src/locale/index.ts +67 -67
  61. package/generators/config/i18n/sfc/src/locale/zh-CN.d.ts +5 -5
  62. package/generators/config/i18n/sfc/src/locale/zh-CN.ts +7 -7
  63. package/generators/config/i18n/tsx/src/button/Button.tsx +35 -35
  64. package/generators/config/i18n/tsx/src/button/__tests__/index.spec.js +7 -7
  65. package/generators/config/i18n/tsx/src/button/button.less +14 -14
  66. package/generators/config/i18n/tsx/src/button/docs/en-US.md +34 -34
  67. package/generators/config/i18n/tsx/src/button/docs/zh-CN.md +34 -34
  68. package/generators/config/i18n/tsx/src/button/example/BasicUse.vue +11 -11
  69. package/generators/config/i18n/tsx/src/button/example/ModifyColor.vue +11 -11
  70. package/generators/config/i18n/tsx/src/button/example/index.vue +13 -13
  71. package/generators/config/i18n/tsx/src/button/example/locale/en-US.ts +5 -5
  72. package/generators/config/i18n/tsx/src/button/example/locale/index.ts +23 -23
  73. package/generators/config/i18n/tsx/src/button/example/locale/zh-CN.ts +5 -5
  74. package/generators/config/i18n/tsx/src/button/index.ts +10 -10
  75. package/generators/config/i18n/tsx/src/locale/__tests__/index.spec.js +51 -51
  76. package/generators/config/i18n/tsx/src/locale/docs/en-US.md +26 -26
  77. package/generators/config/i18n/tsx/src/locale/docs/zh-CN.md +25 -25
  78. package/generators/config/i18n/tsx/src/locale/en-US.d.ts +5 -5
  79. package/generators/config/i18n/tsx/src/locale/en-US.ts +7 -7
  80. package/generators/config/i18n/tsx/src/locale/index.ts +67 -67
  81. package/generators/config/i18n/tsx/src/locale/zh-CN.d.ts +5 -5
  82. package/generators/config/i18n/tsx/src/locale/zh-CN.ts +7 -7
  83. package/lib/commands/build.d.ts +1 -1
  84. package/lib/commands/build.js +67 -67
  85. package/lib/commands/changelog.d.ts +6 -6
  86. package/lib/commands/changelog.js +27 -27
  87. package/lib/commands/commitLint.d.ts +1 -1
  88. package/lib/commands/commitLint.js +21 -21
  89. package/lib/commands/compile.d.ts +5 -5
  90. package/lib/commands/compile.js +119 -119
  91. package/lib/commands/create.d.ts +3 -3
  92. package/lib/commands/create.js +132 -132
  93. package/lib/commands/dev.d.ts +3 -3
  94. package/lib/commands/dev.js +123 -123
  95. package/lib/commands/gen.d.ts +1 -1
  96. package/lib/commands/gen.js +112 -112
  97. package/lib/commands/jest.d.ts +8 -8
  98. package/lib/commands/jest.js +81 -81
  99. package/lib/commands/lint.d.ts +1 -1
  100. package/lib/commands/lint.js +123 -123
  101. package/lib/commands/preview.d.ts +1 -1
  102. package/lib/commands/preview.js +74 -74
  103. package/lib/commands/release.d.ts +3 -3
  104. package/lib/commands/release.js +270 -267
  105. package/lib/compiler/compileModule.d.ts +5 -5
  106. package/lib/compiler/compileModule.js +186 -186
  107. package/lib/compiler/compileSFC.d.ts +2 -2
  108. package/lib/compiler/compileSFC.js +132 -132
  109. package/lib/compiler/compileScript.d.ts +17 -17
  110. package/lib/compiler/compileScript.js +202 -202
  111. package/lib/compiler/compileSiteEntry.d.ts +13 -13
  112. package/lib/compiler/compileSiteEntry.js +237 -237
  113. package/lib/compiler/compileStyle.d.ts +11 -11
  114. package/lib/compiler/compileStyle.js +101 -101
  115. package/lib/compiler/compileTemplateHighlight.d.ts +10 -10
  116. package/lib/compiler/compileTemplateHighlight.js +193 -193
  117. package/lib/compiler/compileTypes.d.ts +2 -2
  118. package/lib/compiler/compileTypes.js +88 -88
  119. package/lib/config/babel.config.d.ts +2 -2
  120. package/lib/config/babel.config.js +31 -31
  121. package/lib/config/babel.sfc.transform.d.ts +1 -1
  122. package/lib/config/babel.sfc.transform.js +18 -18
  123. package/lib/config/jest.config.d.ts +1 -1
  124. package/lib/config/jest.config.js +36 -36
  125. package/lib/config/jest.media.mock.js +2 -2
  126. package/lib/config/jest.style.mock.js +2 -2
  127. package/lib/config/varlet.config.d.ts +1 -1
  128. package/lib/config/varlet.config.js +24 -24
  129. package/lib/config/vite.config.d.ts +5 -5
  130. package/lib/config/vite.config.js +162 -162
  131. package/lib/index.d.ts +2 -2
  132. package/lib/index.js +83 -83
  133. package/lib/shared/constant.d.ts +43 -43
  134. package/lib/shared/constant.js +50 -50
  135. package/lib/shared/fsUtils.d.ts +12 -12
  136. package/lib/shared/fsUtils.js +108 -108
  137. package/lib/shared/logger.d.ts +7 -7
  138. package/lib/shared/logger.js +20 -20
  139. package/package.json +7 -7
  140. package/preset.js +3 -3
  141. package/site/components/button/Button.vue +84 -84
  142. package/site/components/button/button.less +183 -183
  143. package/site/components/button/index.ts +10 -10
  144. package/site/components/button/props.ts +70 -70
  145. package/site/components/cell/Cell.vue +42 -42
  146. package/site/components/cell/cell.less +74 -74
  147. package/site/components/cell/index.ts +10 -10
  148. package/site/components/cell/props.ts +27 -27
  149. package/site/components/code-example/CodeExample.vue +143 -143
  150. package/site/components/code-example/codeExample.less +41 -41
  151. package/site/components/code-example/index.ts +10 -10
  152. package/site/components/context/index.ts +17 -17
  153. package/site/components/context/lock.ts +103 -103
  154. package/site/components/context/zIndex.ts +20 -20
  155. package/site/components/icon/Icon.vue +68 -68
  156. package/site/components/icon/icon.less +26 -26
  157. package/site/components/icon/index.ts +10 -10
  158. package/site/components/icon/props.ts +24 -24
  159. package/site/components/loading/Loading.vue +55 -55
  160. package/site/components/loading/index.ts +10 -10
  161. package/site/components/loading/loading.less +420 -420
  162. package/site/components/loading/props.ts +37 -37
  163. package/site/components/progress/Progress.vue +108 -108
  164. package/site/components/progress/index.ts +10 -10
  165. package/site/components/progress/progress.less +98 -98
  166. package/site/components/progress/props.ts +55 -55
  167. package/site/components/ripple/index.ts +167 -167
  168. package/site/components/ripple/ripple.less +17 -17
  169. package/site/components/snackbar/Snackbar.vue +38 -38
  170. package/site/components/snackbar/core.vue +117 -117
  171. package/site/components/snackbar/index.tsx +270 -270
  172. package/site/components/snackbar/props.ts +94 -94
  173. package/site/components/snackbar/snackbar.less +135 -135
  174. package/site/components/styles/common.less +64 -64
  175. package/site/components/styles/elevation.less +126 -126
  176. package/site/components/styles/var.less +27 -27
  177. package/site/components/utils/components.ts +69 -69
  178. package/site/components/utils/elements.ts +85 -85
  179. package/site/index.html +49 -49
  180. package/site/mobile/App.vue +291 -291
  181. package/site/mobile/components/AppHome.vue +134 -134
  182. package/site/mobile/components/AppType.vue +22 -22
  183. package/site/mobile/components/app-bar/AppBar.vue +69 -69
  184. package/site/mobile/components/app-bar/appBar.less +56 -56
  185. package/site/mobile/components/app-bar/index.ts +10 -10
  186. package/site/mobile/components/app-bar/props.ts +25 -25
  187. package/site/mobile/components/styles/common.less +64 -64
  188. package/site/mobile/components/styles/elevation.less +126 -126
  189. package/site/mobile/components/styles/var.less +27 -27
  190. package/site/mobile/main.ts +74 -74
  191. package/site/mobile.html +41 -41
  192. package/site/module.d.ts +5 -5
  193. package/site/pc/App.vue +43 -43
  194. package/site/pc/Layout.vue +397 -397
  195. package/site/pc/components/AnimationBox.vue +45 -45
  196. package/site/pc/components/AppHeader.vue +355 -355
  197. package/site/pc/components/AppMobile.vue +54 -54
  198. package/site/pc/components/AppSidebar.vue +134 -134
  199. package/site/pc/components/LogoAnimation.vue +119 -119
  200. package/site/pc/floating.ts +9 -9
  201. package/site/pc/main.ts +94 -94
  202. package/site/pc/pages/index/index.less +231 -194
  203. package/site/pc/pages/index/index.vue +145 -128
  204. package/site/pc/pages/index/locale/en-US.ts +5 -3
  205. package/site/pc/pages/index/locale/zh-CN.ts +5 -3
  206. package/site/tsconfig.json +11 -11
  207. package/site/useProgress.ts +75 -75
  208. package/site/utils.ts +153 -153
  209. package/tsconfig.json +14 -14
  210. package/varlet.default.config.js +145 -151
@@ -1,74 +1,74 @@
1
- @site-cell-font-size: var(--site-font-size-md);
2
- @site-cell-desc-font-size: var(--site-font-size-sm);
3
- @site-cell-desc-color: rgba(0, 0, 0, 0.6);
4
- @site-cell-padding: 10px 12px;
5
- @site-cell-min-height: 40px;
6
- @site-cell-border-color: #bcc2cb;
7
- @site-cell-border-left: 12px;
8
- @site-cell-border-right: 12px;
9
- @site-cell-icon-right: 8px;
10
- @site-cell-extra-left: 8px;
11
-
12
- :root {
13
- --site-cell-font-size: @site-cell-font-size;
14
- --site-cell-desc-font-size: @site-cell-desc-font-size;
15
- --site-cell-desc-color: @site-cell-desc-color;
16
- --site-cell-padding: @site-cell-padding;
17
- --site-cell-min-height: @site-cell-min-height;
18
- --site-cell-border-color: @site-cell-border-color;
19
- --site-cell-border-left: @site-cell-border-left;
20
- --site-cell-border-right: @site-cell-border-right;
21
- --site-cell-icon-right: @site-cell-icon-right;
22
- --site-cell-extra-left: @site-cell-extra-left;
23
- }
24
-
25
- .var-site-cell {
26
- align-items: center;
27
- display: flex;
28
- min-height: var(--site-cell-min-height);
29
- outline: none;
30
- padding: var(--site-cell-padding);
31
- position: relative;
32
- box-sizing: border-box;
33
- font-size: var(--site-cell-font-size);
34
-
35
- &--border {
36
- &::after {
37
- position: absolute;
38
- box-sizing: border-box;
39
- content: ' ';
40
- pointer-events: none;
41
- right: var(--site-cell-border-right);
42
- bottom: 0;
43
- left: var(--site-cell-border-left);
44
- border-bottom: 1px solid var(--site-cell-border-color);
45
- transform: scaleY(0.5);
46
- }
47
- }
48
-
49
- &__icon {
50
- margin-right: var(--site-cell-icon-right);
51
- flex: 0;
52
- }
53
-
54
- &__content {
55
- flex: 1;
56
- overflow: hidden;
57
- }
58
-
59
- &__title {
60
- overflow: hidden;
61
- text-overflow: ellipsis;
62
- white-space: nowrap;
63
- }
64
-
65
- &__desc {
66
- font-size: var(--site-cell-desc-font-size);
67
- color: var(--site-cell-desc-color);
68
- }
69
-
70
- &__extra {
71
- flex: 0;
72
- margin-left: var(--site-cell-extra-left);
73
- }
74
- }
1
+ @site-cell-font-size: var(--site-font-size-md);
2
+ @site-cell-desc-font-size: var(--site-font-size-sm);
3
+ @site-cell-desc-color: rgba(0, 0, 0, 0.6);
4
+ @site-cell-padding: 10px 12px;
5
+ @site-cell-min-height: 40px;
6
+ @site-cell-border-color: #bcc2cb;
7
+ @site-cell-border-left: 12px;
8
+ @site-cell-border-right: 12px;
9
+ @site-cell-icon-right: 8px;
10
+ @site-cell-extra-left: 8px;
11
+
12
+ :root {
13
+ --site-cell-font-size: @site-cell-font-size;
14
+ --site-cell-desc-font-size: @site-cell-desc-font-size;
15
+ --site-cell-desc-color: @site-cell-desc-color;
16
+ --site-cell-padding: @site-cell-padding;
17
+ --site-cell-min-height: @site-cell-min-height;
18
+ --site-cell-border-color: @site-cell-border-color;
19
+ --site-cell-border-left: @site-cell-border-left;
20
+ --site-cell-border-right: @site-cell-border-right;
21
+ --site-cell-icon-right: @site-cell-icon-right;
22
+ --site-cell-extra-left: @site-cell-extra-left;
23
+ }
24
+
25
+ .var-site-cell {
26
+ align-items: center;
27
+ display: flex;
28
+ min-height: var(--site-cell-min-height);
29
+ outline: none;
30
+ padding: var(--site-cell-padding);
31
+ position: relative;
32
+ box-sizing: border-box;
33
+ font-size: var(--site-cell-font-size);
34
+
35
+ &--border {
36
+ &::after {
37
+ position: absolute;
38
+ box-sizing: border-box;
39
+ content: ' ';
40
+ pointer-events: none;
41
+ right: var(--site-cell-border-right);
42
+ bottom: 0;
43
+ left: var(--site-cell-border-left);
44
+ border-bottom: 1px solid var(--site-cell-border-color);
45
+ transform: scaleY(0.5);
46
+ }
47
+ }
48
+
49
+ &__icon {
50
+ margin-right: var(--site-cell-icon-right);
51
+ flex: 0;
52
+ }
53
+
54
+ &__content {
55
+ flex: 1;
56
+ overflow: hidden;
57
+ }
58
+
59
+ &__title {
60
+ overflow: hidden;
61
+ text-overflow: ellipsis;
62
+ white-space: nowrap;
63
+ }
64
+
65
+ &__desc {
66
+ font-size: var(--site-cell-desc-font-size);
67
+ color: var(--site-cell-desc-color);
68
+ }
69
+
70
+ &__extra {
71
+ flex: 0;
72
+ margin-left: var(--site-cell-extra-left);
73
+ }
74
+ }
@@ -1,10 +1,10 @@
1
- import type { App } from 'vue'
2
- import Cell from './Cell.vue'
3
-
4
- Cell.install = function (app: App) {
5
- app.component(Cell.name, Cell)
6
- }
7
-
8
- export const _CellComponent = Cell
9
-
10
- export default Cell
1
+ import type { App } from 'vue'
2
+ import Cell from './Cell.vue'
3
+
4
+ Cell.install = function (app: App) {
5
+ app.component(Cell.name, Cell)
6
+ }
7
+
8
+ export const _CellComponent = Cell
9
+
10
+ export default Cell
@@ -1,27 +1,27 @@
1
- export const props = {
2
- title: {
3
- type: [Number, String],
4
- },
5
- icon: {
6
- type: String,
7
- },
8
- desc: {
9
- type: String,
10
- },
11
- border: {
12
- type: Boolean,
13
- default: false,
14
- },
15
- iconClass: {
16
- type: String,
17
- },
18
- titleClass: {
19
- type: String,
20
- },
21
- descClass: {
22
- type: String,
23
- },
24
- extraClass: {
25
- type: String,
26
- },
27
- }
1
+ export const props = {
2
+ title: {
3
+ type: [Number, String],
4
+ },
5
+ icon: {
6
+ type: String,
7
+ },
8
+ desc: {
9
+ type: String,
10
+ },
11
+ border: {
12
+ type: Boolean,
13
+ default: false,
14
+ },
15
+ iconClass: {
16
+ type: String,
17
+ },
18
+ titleClass: {
19
+ type: String,
20
+ },
21
+ descClass: {
22
+ type: String,
23
+ },
24
+ extraClass: {
25
+ type: String,
26
+ },
27
+ }
@@ -1,143 +1,143 @@
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-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,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,17 @@
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
+ }
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)