vdesign-ui 0.2.6 → 0.2.7

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 (195) hide show
  1. package/dist/components/actionbar/index.js +8 -0
  2. package/dist/components/actionbar/index.vue +39 -0
  3. package/dist/components/actionbar/style.less +44 -0
  4. package/dist/components/actionbar-cell/index.js +7 -0
  5. package/dist/components/actionbar-cell/index.vue +38 -0
  6. package/dist/components/actions/index.js +7 -0
  7. package/dist/components/actions/index.vue +76 -0
  8. package/dist/components/actions/style.less +109 -0
  9. package/dist/components/actions-cell/index.js +7 -0
  10. package/dist/components/actions-cell/index.vue +94 -0
  11. package/dist/components/actions-cell/style.less +39 -0
  12. package/dist/components/activityviews/index.js +8 -0
  13. package/dist/components/activityviews/index.vue +192 -0
  14. package/dist/components/activityviews/style.less +152 -0
  15. package/dist/components/badge/index.js +8 -0
  16. package/dist/components/badge/index.vue +49 -0
  17. package/dist/components/badge/style.less +54 -0
  18. package/dist/components/button/index.js +8 -0
  19. package/dist/components/button/index.vue +93 -0
  20. package/dist/components/button/style.less +558 -0
  21. package/dist/components/calendar/end.png +0 -0
  22. package/dist/components/calendar/index-element.vue +84 -0
  23. package/dist/components/calendar/index.js +8 -0
  24. package/dist/components/calendar/index.vue +52 -0
  25. package/dist/components/calendar/start.png +0 -0
  26. package/dist/components/calendar/style.less +138 -0
  27. package/dist/components/checkbox/index.js +8 -0
  28. package/dist/components/checkbox/index.vue +161 -0
  29. package/dist/components/checkbox/style.less +289 -0
  30. package/dist/components/checkbox-group/index.js +7 -0
  31. package/dist/components/checkbox-group/index.vue +69 -0
  32. package/dist/components/common/state/index.vue +33 -0
  33. package/dist/components/common/state/style.less +48 -0
  34. package/dist/components/data-list/index.js +10 -0
  35. package/dist/components/data-list/index.vue +19 -0
  36. package/dist/components/data-list/style.less +623 -0
  37. package/dist/components/datetime-picker/index.js +8 -0
  38. package/dist/components/datetime-picker/index.vue +37 -0
  39. package/dist/components/datetime-picker/style.less +24 -0
  40. package/dist/components/dialog/index.js +8 -0
  41. package/dist/components/dialog/index.vue +164 -0
  42. package/dist/components/dialog/overlay-manager.js +18 -0
  43. package/dist/components/dialog/style.less +139 -0
  44. package/dist/components/divider/index.js +8 -0
  45. package/dist/components/divider/index.vue +54 -0
  46. package/dist/components/divider/style.less +92 -0
  47. package/dist/components/dropdown/index.js +8 -0
  48. package/dist/components/dropdown/index.vue +218 -0
  49. package/dist/components/dropdown/style.less +432 -0
  50. package/dist/components/empty/404-dark.png +0 -0
  51. package/dist/components/empty/404.png +0 -0
  52. package/dist/components/empty/index.js +8 -0
  53. package/dist/components/empty/index.vue +138 -0
  54. package/dist/components/empty/network-dark.png +0 -0
  55. package/dist/components/empty/network.png +0 -0
  56. package/dist/components/empty/nocoupons-dark.png +0 -0
  57. package/dist/components/empty/nocoupons.png +0 -0
  58. package/dist/components/empty/nodata-dark.png +0 -0
  59. package/dist/components/empty/nodata.png +0 -0
  60. package/dist/components/empty/nomargin-dark.png +0 -0
  61. package/dist/components/empty/nomargin.png +0 -0
  62. package/dist/components/empty/nonotice-dark.png +0 -0
  63. package/dist/components/empty/nonotice.png +0 -0
  64. package/dist/components/empty/noocomments-dark.png +0 -0
  65. package/dist/components/empty/noocomments.png +0 -0
  66. package/dist/components/empty/noorders-dark.png +0 -0
  67. package/dist/components/empty/noorders.png +0 -0
  68. package/dist/components/empty/noposition-dark.png +0 -0
  69. package/dist/components/empty/noposition.png +0 -0
  70. package/dist/components/empty/nosearch-dark.png +0 -0
  71. package/dist/components/empty/nosearch.png +0 -0
  72. package/dist/components/empty/style.less +61 -0
  73. package/dist/components/footer/index.js +7 -0
  74. package/dist/components/footer/index.vue +33 -0
  75. package/dist/components/footer/style.less +21 -0
  76. package/dist/components/footnav/index.js +7 -0
  77. package/dist/components/footnav/index.vue +93 -0
  78. package/dist/components/footnav/style.less +23 -0
  79. package/dist/components/footnav-item/index.js +7 -0
  80. package/dist/components/footnav-item/index.vue +50 -0
  81. package/dist/components/footnav-item/style.less +39 -0
  82. package/dist/components/form/index.js +7 -0
  83. package/dist/components/form/index.vue +12 -0
  84. package/dist/components/headnav/index.js +7 -0
  85. package/dist/components/headnav/index.vue +185 -0
  86. package/dist/components/headnav/style.less +232 -0
  87. package/dist/components/icon/font/iconfont.css +163 -0
  88. package/dist/components/icon/font/iconfont.js +6 -0
  89. package/dist/components/icon/index.js +9 -0
  90. package/dist/components/icon/index.vue +96 -0
  91. package/dist/components/icon/style.less +44 -0
  92. package/dist/components/input/calcTextareaHeight.js +162 -0
  93. package/dist/components/input/index.js +8 -0
  94. package/dist/components/input/index.vue +345 -0
  95. package/dist/components/input/style.less +471 -0
  96. package/dist/components/list/index.js +8 -0
  97. package/dist/components/list/index.vue +152 -0
  98. package/dist/components/list/style.less +213 -0
  99. package/dist/components/loading/index.js +7 -0
  100. package/dist/components/loading/index.vue +68 -0
  101. package/dist/components/loading/style.less +54 -0
  102. package/dist/components/mixins/clickoutside.js +81 -0
  103. package/dist/components/mixins/dom.js +41 -0
  104. package/dist/components/mixins/languageMixin.js +41 -0
  105. package/dist/components/mixins/outlineConfigPlugin.js +45 -0
  106. package/dist/components/mixins/router-link.js +23 -0
  107. package/dist/components/mixins/themeMixin.js +43 -0
  108. package/dist/components/noticebar/index.js +8 -0
  109. package/dist/components/noticebar/index.vue +258 -0
  110. package/dist/components/noticebar/style.less +328 -0
  111. package/dist/components/overlay/index.js +8 -0
  112. package/dist/components/overlay/index.vue +184 -0
  113. package/dist/components/overlay/style.less +23 -0
  114. package/dist/components/pagebreak/index.js +7 -0
  115. package/dist/components/pagebreak/index.vue +67 -0
  116. package/dist/components/pagebreak/style.less +42 -0
  117. package/dist/components/password/index.js +8 -0
  118. package/dist/components/password/index.vue +60 -0
  119. package/dist/components/popover/index.js +8 -0
  120. package/dist/components/popover/index.vue +100 -0
  121. package/dist/components/popover/style.less +346 -0
  122. package/dist/components/popover/vue-popover.vue +314 -0
  123. package/dist/components/popup/index.js +7 -0
  124. package/dist/components/popup/index.vue +243 -0
  125. package/dist/components/radio/index.js +8 -0
  126. package/dist/components/radio/index.vue +184 -0
  127. package/dist/components/radio/style.less +294 -0
  128. package/dist/components/radio-group/index.js +6 -0
  129. package/dist/components/radio-group/index.vue +58 -0
  130. package/dist/components/result/completed-dark.png +0 -0
  131. package/dist/components/result/completed.png +0 -0
  132. package/dist/components/result/error-dark.png +0 -0
  133. package/dist/components/result/error.png +0 -0
  134. package/dist/components/result/index.js +8 -0
  135. package/dist/components/result/index.vue +73 -0
  136. package/dist/components/result/style.less +44 -0
  137. package/dist/components/result/wait-dark.png +0 -0
  138. package/dist/components/result/wait.png +0 -0
  139. package/dist/components/search/index.js +8 -0
  140. package/dist/components/search/index.vue +66 -0
  141. package/dist/components/selector/index.js +8 -0
  142. package/dist/components/selector/index.vue +161 -0
  143. package/dist/components/selector/style.less +484 -0
  144. package/dist/components/skeleton/index.js +7 -0
  145. package/dist/components/skeleton/index.vue +206 -0
  146. package/dist/components/skeleton/style.less +197 -0
  147. package/dist/components/slider/draggable.js +49 -0
  148. package/dist/components/slider/index.js +7 -0
  149. package/dist/components/slider/index.vue +167 -0
  150. package/dist/components/slider/style.less +100 -0
  151. package/dist/components/slider/utils.js +60 -0
  152. package/dist/components/step/index.js +7 -0
  153. package/dist/components/step/index.vue +48 -0
  154. package/dist/components/step/style.less +58 -0
  155. package/dist/components/step-item/index.js +7 -0
  156. package/dist/components/step-item/index.vue +126 -0
  157. package/dist/components/step-item/style.less +362 -0
  158. package/dist/components/stepper/index.js +8 -0
  159. package/dist/components/stepper/index.vue +146 -0
  160. package/dist/components/style/index.vue +42 -0
  161. package/dist/components/switch/index.js +8 -0
  162. package/dist/components/switch/index.vue +72 -0
  163. package/dist/components/switch/style.less +56 -0
  164. package/dist/components/tab/index.js +7 -0
  165. package/dist/components/tab/index.vue +53 -0
  166. package/dist/components/tabs/index.js +8 -0
  167. package/dist/components/tabs/index.vue +172 -0
  168. package/dist/components/tabs/style.less +377 -0
  169. package/dist/components/tag/index.js +7 -0
  170. package/dist/components/tag/index.vue +64 -0
  171. package/dist/components/tag/style.less +211 -0
  172. package/dist/components/title/index.js +8 -0
  173. package/dist/components/title/index.vue +99 -0
  174. package/dist/components/title/style.less +188 -0
  175. package/dist/components/toast/index.js +83 -0
  176. package/dist/components/toast/index.vue +49 -0
  177. package/dist/components/toast/style.less +55 -0
  178. package/dist/components/transition/index.js +8 -0
  179. package/dist/components/transition/index.vue +13 -0
  180. package/dist/components/transition/style.less +208 -0
  181. package/dist/components/upload/index.js +7 -0
  182. package/dist/components/upload/index.vue +106 -0
  183. package/dist/components/upload/style.less +147 -0
  184. package/dist/components/utils/assist.js +34 -0
  185. package/dist/components/utils/env.js +2 -0
  186. package/dist/demo.html +10 -0
  187. package/dist/locale/ar.js +98 -0
  188. package/dist/locale/en.js +98 -0
  189. package/dist/locale/zh.js +98 -0
  190. package/dist/token.css +2990 -0
  191. package/dist/vdesign-ui.common.js +27076 -0
  192. package/dist/vdesign-ui.css +1 -0
  193. package/dist/vdesign-ui.umd.js +27086 -0
  194. package/dist/vdesign-ui.umd.min.js +32 -0
  195. package/package.json +1 -1
@@ -0,0 +1,213 @@
1
+ @title-prefix-cls: vd-list;
2
+ .@{title-prefix-cls} {
3
+ position: relative;
4
+ display: flex;
5
+ align-items: center;
6
+ justify-content: space-between;
7
+ background-color: var(--bg-color-1);
8
+
9
+ &--right {
10
+ display: flex;
11
+ align-items: center;
12
+ }
13
+
14
+ &-content {
15
+ display: flex;
16
+ align-items: center;
17
+ }
18
+
19
+ &-content-common {
20
+ flex-direction: column;
21
+ align-items: flex-start;
22
+ }
23
+
24
+ &__arrow {
25
+ display: flex;
26
+ margin-inline-start: var(--spacing-list-info_icon-margin_y);
27
+ color: var(--text-color-h2);
28
+ }
29
+
30
+ &__multext {
31
+ font-size: var(--en-single-f-c-s-fontSize);
32
+ font-weight: var(--en-single-f-c-s-fontWeight);
33
+ color: var(--text-color-h1);
34
+ }
35
+
36
+ &-xsmall {
37
+ padding-block-start: var(--spacing-list-info_s-padding_top);
38
+ padding-block-end: var(--spacing-list-info_s-padding_bottom);
39
+
40
+ &__icon--right {
41
+ color: var(--text-color-h2);
42
+ }
43
+
44
+ &__title {
45
+ margin-inline-end: var(--spacing-list-info_icon-margin_y);
46
+ color: var(--text-color-h2);
47
+ font-size: var(--en-single-f-c-r-fontSize);
48
+ font-weight: var(--en-single-f-c-r-fontWeight);
49
+ }
50
+
51
+ &__text--right {
52
+ font-size: var(--en-single-f-c-r-fontSize);
53
+ font-weight: var(--en-single-f-c-r-fontWeight);
54
+ color: var(--text-color-h1);
55
+ }
56
+ }
57
+
58
+ &-small {
59
+ padding-block-start: var(--spacing-list-info_m-padding_top);
60
+ padding-block-end: var(--spacing-list-info_m-padding_bottom);
61
+
62
+ &__icon--right {
63
+ color: var(--text-color-h2);
64
+ }
65
+
66
+ &__title {
67
+ margin-inline-end: var(--spacing-list-info_icon-margin_y);
68
+ color: var(--text-color-h1);
69
+ font-size: var(--en-single-f-c-r-fontSize);
70
+ font-weight: var(--en-single-f-c-r-fontWeight);
71
+ }
72
+
73
+ &__text--right {
74
+ font-size: var(--en-single-f-c-s-fontSize);
75
+ font-weight: var(--en-single-f-c-s-fontWeight);
76
+ color: var(--text-color-h1);
77
+ }
78
+ }
79
+
80
+ &-medium {
81
+ padding-block-start: var(--spacing-list-info_l-padding_top);
82
+ padding-block-end: var(--spacing-list-info_l-padding_bottom);
83
+
84
+ &__icon--right {
85
+ color: var(--text-color-h2);
86
+ }
87
+
88
+ &__title {
89
+ margin-inline-end: var(--spacing-list-info_icon-margin_y);
90
+ color: var(--text-color-h2);
91
+ font-size: var(--en-single-f-c-r-fontSize);
92
+ font-weight: var(--en-single-f-c-r-fontWeight);
93
+ }
94
+
95
+ &__text--right {
96
+ font-size: var(--en-single-f-d-r-fontSize);
97
+ font-weight: var(--en-single-f-d-r-fontWeight);
98
+ color: var(--text-color-h1);
99
+ }
100
+ }
101
+
102
+ &-large {
103
+ height: var(--height-super-large);
104
+
105
+ &__icon--right {
106
+ color: var(--text-color-h2);
107
+ }
108
+
109
+ &__title {
110
+ margin-inline-end: var(--spacing-list-info_icon-margin_y);
111
+ color: var(--text-color-h1);
112
+ font-size: var(--en-single-f-c-r-fontSize);
113
+ font-weight: var(--en-single-f-c-r-fontWeight);
114
+ }
115
+
116
+ &__text--right {
117
+ font-size: var(--en-single-f-d-s-fontSize);
118
+ font-weight: var(--en-single-f-d-s-fontWeight);
119
+ color: var(--text-color-h1);
120
+ }
121
+ }
122
+
123
+ &-common {
124
+ padding-block-start: var(--spacing-list-common-padding_x);
125
+ padding-block-end: var(--spacing-list-common-padding_x);
126
+ padding-inline-start: var(--spacing-list-common-padding_y);
127
+ padding-inline-end: var(--spacing-list-common-padding_y);
128
+
129
+ &--left {
130
+ display: flex;
131
+ align-items: center;
132
+ }
133
+ &__icon--leftcus {
134
+ margin-inline-end: var(--spacing-list-common_icon-margin_right);
135
+ color: var(--text-color-h2);
136
+ }
137
+
138
+ &__title {
139
+ color: var(--color-list-title);
140
+ font-size: var(--en-multi-f-d-s-fontSize);
141
+ font-weight: var(--en-multi-f-d-s-fontWeight);
142
+ line-height: var(--en-multi-f-d-s-lineHeight);
143
+
144
+ &--with-subtitle {
145
+ line-height: inherit;
146
+ font-size: var(--en-single-f-d-s-fontSize);
147
+ font-weight: var(--en-single-f-d-s-fontWeight);
148
+ }
149
+ }
150
+
151
+ &__text--right {
152
+ margin-inline-start: var(--spacing-list-common_describe-margin_xy);
153
+ font-size: var(--en-single-f-c-r-fontSize);
154
+ font-weight: var(--en-single-f-c-r-fontWeight);
155
+ color: var(--color-list-text);
156
+ }
157
+
158
+ &__subtitle {
159
+ margin-block-start: var(--spacing-list-common_describe-margin_xy);
160
+ color: var(--color-list-text);
161
+ font-size: var(--en-multi-f-c-r-fontSize);
162
+ font-weight: var(--en-multi-f-c-r-fontWeight);
163
+ line-height: var(--en-multi-f-c-r-lineHeight);
164
+ }
165
+
166
+ &__badge {
167
+ margin-inline-start: var(--spacing-list-common_badge-margin_left);
168
+ }
169
+ }
170
+
171
+ &-check {
172
+ padding-block-start: var(--spacing-list-common-padding_x);
173
+ padding-block-end: var(--spacing-list-common-padding_x);
174
+
175
+ &--active {
176
+ .@{title-prefix-cls}-check__select {
177
+ margin-inline-start: var(--spacing-list-check-margin_left);
178
+
179
+ .vd-iconfont {
180
+ transform: scaleX(1) !important;
181
+ direction: ltr;
182
+ font-size: var(--icon-list-check);
183
+ }
184
+ }
185
+
186
+ .@{title-prefix-cls}-check__title {
187
+ font-size: var(--en-multi-f-d-s-fontSize);
188
+ font-weight: var(--en-multi-f-d-s-fontWeight);
189
+ }
190
+ }
191
+
192
+ &__title {
193
+ color: var(--color-list-title);
194
+ font-size: var(--en-multi-f-d-r-fontSize);
195
+ font-weight: var(--en-multi-f-d-r-fontWeight);
196
+ }
197
+
198
+ &__icon--leftcus {
199
+ margin-inline-end: var(--spacing-list-check_icon-margin_right);
200
+ color: var(--text-color-h2);
201
+ }
202
+ }
203
+
204
+ &__icon--extra {
205
+ margin-inline-end: var(--spacing-list-info_icon-margin_y);
206
+ color: var(--text-color-h2);
207
+ }
208
+
209
+ &__switch {
210
+ display: flex;
211
+ margin-inline-start: var(--spacing-list-common_switch-margin_left);
212
+ }
213
+ }
@@ -0,0 +1,7 @@
1
+ import Loading from './index.vue';
2
+ import './style.less';
3
+ Loading.install = function(Vue) {
4
+ Vue.component(Loading.name, Loading)
5
+ }
6
+
7
+ export default Loading;
@@ -0,0 +1,68 @@
1
+ <template>
2
+ <div class="vd-loading-wrapper">
3
+ <div v-if="isLoading" class="vd-loading">
4
+ <slot>
5
+ <img src="https://r.sahmcapital.com/fe/hs-sa-res/commons/images/img_status_loading_white_ani.svg" alt="">
6
+ </slot>
7
+ <span class="vd-loading__text" v-if="text">{{ text }}</span>
8
+ </div>
9
+ <div class="vd-refresh" :class="refreshClasses" v-else>
10
+ <slot>
11
+ <img src="https://r.sahmcapital.com/fe/hs-sa-res/commons/images/img_status_refresh_ani.svg" alt="">
12
+ </slot>
13
+ </div>
14
+ </div>
15
+ </template>
16
+
17
+ <script>
18
+
19
+ export default {
20
+ name:'vd-loading',
21
+ props:{
22
+ type:{
23
+ type: String,
24
+ default:'null',
25
+ },
26
+ text:{
27
+ type: String,
28
+ default:''
29
+ },
30
+ loading:{
31
+ type: Boolean,
32
+ default:true
33
+ },
34
+ size:{
35
+ type: String,
36
+ default:'large',
37
+ validator: value => ['large', 'small'].includes(value)
38
+ }
39
+ },
40
+ data(){
41
+ return {
42
+ }
43
+ },
44
+ computed:{
45
+ isLoading() {
46
+ if (this.type === 'loading') {
47
+ return true;
48
+ } else if (this.type === 'refresh') {
49
+ return false;
50
+ } else {
51
+ return this.loading;
52
+ }
53
+ },
54
+ refreshClasses() {
55
+ return ['vd-refresh', `vd-refresh--${this.size}`];
56
+ }
57
+ },
58
+ methods:{
59
+ },
60
+ mounted(){
61
+
62
+ }
63
+ }
64
+ </script>
65
+
66
+ <style lang="less">
67
+ @import './style.less';
68
+ </style>
@@ -0,0 +1,54 @@
1
+ .vd-loading {
2
+ position: fixed;
3
+ left: 50%;
4
+ top: 50%;
5
+ transform: translate(-50%, -50%);
6
+ margin-block-start: -16px;
7
+ display: flex;
8
+ align-items: center;
9
+ flex-direction: column;
10
+ justify-content: center;
11
+ width: fit-content;
12
+ min-height: var(--height-loading-small);
13
+ min-width: var(--width-loading-small);
14
+ max-width: var(--width-loading-large);
15
+ background-color: var(--color-loading-bg);
16
+ border-radius: var(--radius-loading-size);
17
+ padding: var(--spacing-loading-padding_x) var(--spacing-loading-padding_y);
18
+
19
+ &__text {
20
+ margin-block-start: var(--spacing-loading-icon-margin_bottom);
21
+ font-size: var(--en-single-f-c-r-fontSize);
22
+ font-weight: var(--en-single-f-c-r-fontWeight);
23
+ color: var(--color-loading-text);
24
+ }
25
+
26
+ img {
27
+ margin: 0 auto;
28
+ width: var(--icon-loading-size);
29
+ }
30
+ }
31
+
32
+ .vd-refresh {
33
+ position: absolute;
34
+ left: 50%;
35
+ transform: translateX(-50%);
36
+
37
+ &--large {
38
+ width: var(--icon-loading-refres_large);
39
+
40
+ img {
41
+ border: 0;
42
+ max-width: 100%;
43
+ }
44
+ }
45
+
46
+ &--small {
47
+ width: var(--icon-loading-refres_small);
48
+
49
+ img {
50
+ border: 0;
51
+ max-width: 100%;
52
+ }
53
+ }
54
+ }
@@ -0,0 +1,81 @@
1
+ import Vue from 'vue';
2
+ import { on } from './dom';
3
+ // 定义一个空数组 nodeList,用于存储绑定了该指令的元素。
4
+ const nodeList = [];
5
+ //定义一个常量 ctx,用于标识特殊属性名。
6
+ const ctx = '@@clickoutsideContext';
7
+ // 定义一个变量 startClick,用于存储点击开始时的事件对象。
8
+ let startClick;
9
+ // 定义一个变量 seed,用作节点标识的种子。
10
+ let seed = 0;
11
+ // 在文档上添加一个 mousedown 事件监听器,用于记录点击开始时的事件对象。
12
+ !Vue.prototype.$isServer && on(document, 'mousedown', e => (startClick = e));
13
+ // 添加一个 mouseup 事件监听器。当鼠标放开时,
14
+ !Vue.prototype.$isServer && on(document, 'mouseup', e => {
15
+ // 遍历 nodeList 数组中的每个元素,并执行它们的 documentHandler 函数。
16
+ nodeList.forEach(node => node[ctx].documentHandler(e, startClick));
17
+ });
18
+ // 创建一个处理文档点击事件的函数。
19
+ // 该函数返回一个闭包函数,用于检查点击事件是否发生在绑定的元素外部,并执行相应的回调函数。
20
+ function createDocumentHandler(el, binding, vnode) {
21
+ return function (mouseup = {}, mousedown = {}) {
22
+ if (!vnode ||
23
+ !vnode.context ||
24
+ !mouseup.target ||
25
+ !mousedown.target ||
26
+ el.contains(mouseup.target) ||
27
+ el.contains(mousedown.target) ||
28
+ el === mouseup.target ||
29
+ (vnode.context.popperElm &&
30
+ (vnode.context.popperElm.contains(mouseup.target) ||
31
+ vnode.context.popperElm.contains(mousedown.target)))) return;
32
+
33
+ if (binding.expression &&
34
+ el[ctx].methodName &&
35
+ vnode.context[el[ctx].methodName]) {
36
+ vnode.context[el[ctx].methodName](mouseup.target);
37
+ } else {
38
+ el[ctx].bindingFn && el[ctx].bindingFn();
39
+ }
40
+ };
41
+ }
42
+
43
+ /**
44
+ * v-clickoutside
45
+ * @desc 点击元素外面才会触发的事件
46
+ * @example
47
+ * ```vue
48
+ * <div v-element-clickoutside="handleClose">
49
+ * ```
50
+ */
51
+ export default {
52
+ // 将元素添加到 nodeList 数组中,并为该元素添加一个包含事件处理函数的特殊属性。
53
+ bind(el, binding, vnode) {
54
+ nodeList.push(el);
55
+ const id = seed++;
56
+ el[ctx] = {
57
+ id,
58
+ documentHandler: createDocumentHandler(el, binding, vnode),
59
+ methodName: binding.expression,
60
+ bindingFn: binding.value
61
+ };
62
+ },
63
+ // 当指令所在组件的 VNode 更新时调用,更新元素的事件处理函数和绑定方法。
64
+ update(el, binding, vnode) {
65
+ el[ctx].documentHandler = createDocumentHandler(el, binding, vnode);
66
+ el[ctx].methodName = binding.expression;
67
+ el[ctx].bindingFn = binding.value;
68
+ },
69
+ // 从 nodeList 中移除对应的元素,并删除特殊属性。
70
+ unbind(el) {
71
+ let len = nodeList.length;
72
+
73
+ for (let i = 0; i < len; i++) {
74
+ if (nodeList[i][ctx].id === el[ctx].id) {
75
+ nodeList.splice(i, 1);
76
+ break;
77
+ }
78
+ }
79
+ delete el[ctx];
80
+ }
81
+ };
@@ -0,0 +1,41 @@
1
+ /* istanbul ignore next */
2
+
3
+ import Vue from 'vue';
4
+
5
+ const isServer = Vue.prototype.$isServer;
6
+ /* istanbul ignore next */
7
+ export const on = (function () {
8
+ // 添加事件监听器
9
+ if (!isServer && document.addEventListener) {
10
+ return function (element, event, handler) {
11
+ if (element && event && handler) {
12
+ element.addEventListener(event, handler, false);
13
+ }
14
+ };
15
+ } else {
16
+ // IE8 及其以下版本没有 addEventListener 方法
17
+ return function (element, event, handler) {
18
+ if (element && event && handler) {
19
+ element.attachEvent('on' + event, handler);
20
+ }
21
+ };
22
+ }
23
+ })();
24
+
25
+ /* istanbul ignore next */
26
+ export const off = (function () {
27
+ // 移除事件监听器
28
+ if (!isServer && document.removeEventListener) {
29
+ return function (element, event, handler) {
30
+ if (element && event) {
31
+ element.removeEventListener(event, handler, false);
32
+ }
33
+ };
34
+ } else {
35
+ return function (element, event, handler) {
36
+ if (element && event) {
37
+ element.detachEvent('on' + event, handler);
38
+ }
39
+ };
40
+ }
41
+ })();
@@ -0,0 +1,41 @@
1
+ import { inBrowser } from '../utils/env';
2
+
3
+ export default {
4
+ data() {
5
+ return {
6
+ language: inBrowser ? document.documentElement.lang || 'en' : 'en' // 初始语言
7
+ }
8
+ },
9
+ mounted() {
10
+ if (inBrowser) {
11
+ this.updateLanguage();
12
+ this.setupLanguageObserver();
13
+ }
14
+ },
15
+ methods: {
16
+ updateLanguage() {
17
+ this.language = document.documentElement.lang || 'en';
18
+ },
19
+ setupLanguageObserver() {
20
+ const observer = new MutationObserver(() => {
21
+ this.updateLanguage();
22
+ });
23
+
24
+ observer.observe(document.documentElement, {
25
+ attributes: true,
26
+ attributeFilter: ['lang']
27
+ });
28
+
29
+ // 在组件销毁时断开观察者
30
+ this.$once('hook:beforeDestroy', () => {
31
+ observer.disconnect();
32
+ });
33
+ }
34
+ },
35
+ watch: {
36
+ // language(newLang) {
37
+ // // 当 language 变化时执行的操作
38
+ // console.log('Language changed to:', newLang);
39
+ // }
40
+ }
41
+ }
@@ -0,0 +1,45 @@
1
+ // outlineConfigPlugin.js
2
+ import { inBrowser } from '../utils/env'
3
+ // __debug=1&__debug_vdesign_token=1
4
+ const OutlineConfig = {
5
+ install(Vue, options = {}) {
6
+ const outlineConfig = Vue.observable({
7
+ outlineEnabled: options.outlineEnabled ||false,
8
+ });
9
+
10
+ Vue.prototype.$outlineConfig = outlineConfig;
11
+
12
+ Vue.mixin({
13
+ created() {
14
+ if (inBrowser) {
15
+ this.$outlineConfig.outlineEnabled = this.shouldEnableOutline()
16
+ this.$watch('$outlineConfig.outlineEnabled', (newValue) => {
17
+ document.documentElement.style.setProperty('--outline-visible', newValue ? '1px' : '0');
18
+ }, { immediate: true });
19
+ }
20
+ },
21
+ methods:{
22
+ shouldEnableOutline() {
23
+ if (!inBrowser) {
24
+ // 如果是在服务端渲染,返回默认值 false
25
+ return false;
26
+ }
27
+ // 获取URL的查询参数部分
28
+ const searchParams = new URLSearchParams(window.location.search);
29
+ // 对于哈希模式,也解析哈希中的查询字符串
30
+ const hashParams = window.location.hash.split('?')[1] ? new URLSearchParams(window.location.hash.split('?')[1]) : null;
31
+
32
+ // 检查查询参数或哈希中的参数
33
+ const debug = searchParams.has('__debug') || (hashParams && hashParams.has('__debug')) ? searchParams.get('__debug') === '1' || (hashParams && hashParams.get('__debug') === '1') : false;
34
+ const vdesignToken = searchParams.has('__debug_vdesign_token') || (hashParams && hashParams.has('__debug_vdesign_token')) ? searchParams.get('__debug_vdesign_token') === '1' || (hashParams && hashParams.get('__debug_vdesign_token') === '1') : false;
35
+
36
+ return debug && vdesignToken;
37
+ }
38
+ }
39
+ });
40
+ }
41
+ };
42
+
43
+
44
+
45
+ export default OutlineConfig;
@@ -0,0 +1,23 @@
1
+ /**
2
+ * add Vue-Router support
3
+ */
4
+
5
+ export default {
6
+ props: {
7
+ url: String,
8
+ replace: Boolean,
9
+ to: [String, Object]
10
+ },
11
+
12
+ methods: {
13
+ routerLink() {
14
+ const { to, url, $router, replace } = this;
15
+ if (to && $router) {
16
+ $router[replace ? 'replace' : 'push'](to);
17
+ } else if (url) {
18
+ replace ? location.replace(url) : location.href = url;
19
+ }
20
+ }
21
+ }
22
+ };
23
+
@@ -0,0 +1,43 @@
1
+ // import Vue from 'vue'
2
+ import { inBrowser } from '../utils/env';
3
+
4
+ export const themeMixin = {
5
+ data() {
6
+ return {
7
+ theme: 'light' // 设置默认主题
8
+ };
9
+ },
10
+ mounted() {
11
+ if (inBrowser) {
12
+ // 在客户端环境中,可以安全地访问 'document'
13
+ this.theme = document.documentElement.getAttribute('theme') || 'light';
14
+ this.observeThemeChanges(); // 开始监听主题变化
15
+ }
16
+ },
17
+ methods: {
18
+ observeThemeChanges() {
19
+ if (inBrowser) {
20
+ // 创建一个 MutationObserver 实例
21
+ const observer = new MutationObserver((mutations) => {
22
+ mutations.forEach((mutation) => {
23
+ // 检查变化的属性是否为 'theme'
24
+ if (mutation.attributeName === 'theme') {
25
+ // 更新组件的主题
26
+ this.theme = document.documentElement.getAttribute('theme') || 'light';
27
+ }
28
+ });
29
+ });
30
+
31
+ // 配置观察器,监视 html 元素的属性变化
32
+ observer.observe(document.documentElement, {
33
+ attributes: true // 仅监视属性变化
34
+ });
35
+
36
+ // 在组件销毁时断开观察器
37
+ this.$once('hook:beforeDestroy', () => {
38
+ observer.disconnect();
39
+ });
40
+ }
41
+ }
42
+ }
43
+ };
@@ -0,0 +1,8 @@
1
+ import Noticebar from './index.vue';
2
+ import './style.less';
3
+
4
+ Noticebar.install = function (Vue) {
5
+ Vue.component(Noticebar.name, Noticebar);
6
+ };
7
+
8
+ export default Noticebar;