@zkwq/business 0.0.1

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 (231) hide show
  1. package/dist/index.css +1 -0
  2. package/dist/index.js +21861 -0
  3. package/dist/index.umd.cjs +46 -0
  4. package/package.json +27 -0
  5. package/src/components/base/ui/alert/Alert.vue +94 -0
  6. package/src/components/base/ui/autocomplete/autocomplete-suggestions.vue +77 -0
  7. package/src/components/base/ui/autocomplete/autocomplete.vue +305 -0
  8. package/src/components/base/ui/backtop/main.vue +112 -0
  9. package/src/components/base/ui/button/Button.vue +84 -0
  10. package/src/components/base/ui/button/ButtonGroup.vue +10 -0
  11. package/src/components/base/ui/carousel/Carousel.vue +304 -0
  12. package/src/components/base/ui/carousel/CarouselItem.vue +137 -0
  13. package/src/components/base/ui/cascader/cascader.vue +650 -0
  14. package/src/components/base/ui/cascader-panel/cascader-menu.vue +138 -0
  15. package/src/components/base/ui/cascader-panel/cascader-node.vue +246 -0
  16. package/src/components/base/ui/cascader-panel/cascader-panel.vue +382 -0
  17. package/src/components/base/ui/cascader-panel/node.js +166 -0
  18. package/src/components/base/ui/cascader-panel/store.js +62 -0
  19. package/src/components/base/ui/checkbox/checkbox-button.vue +199 -0
  20. package/src/components/base/ui/checkbox/checkbox-group.vue +48 -0
  21. package/src/components/base/ui/checkbox/checkbox.vue +222 -0
  22. package/src/components/base/ui/col/col.js +71 -0
  23. package/src/components/base/ui/collapse/collapse-item.vue +180 -0
  24. package/src/components/base/ui/collapse/collapse.vue +73 -0
  25. package/src/components/base/ui/color-picker/color.js +317 -0
  26. package/src/components/base/ui/color-picker/components/alpha-slider.vue +132 -0
  27. package/src/components/base/ui/color-picker/components/hue-slider.vue +123 -0
  28. package/src/components/base/ui/color-picker/components/picker-dropdown.vue +119 -0
  29. package/src/components/base/ui/color-picker/components/predefine.vue +61 -0
  30. package/src/components/base/ui/color-picker/components/sv-panel.vue +100 -0
  31. package/src/components/base/ui/color-picker/draggable.js +36 -0
  32. package/src/components/base/ui/color-picker/index.js +2 -0
  33. package/src/components/base/ui/color-picker/main.vue +188 -0
  34. package/src/components/base/ui/date-picker/basic/date-table.vue +441 -0
  35. package/src/components/base/ui/date-picker/basic/month-table.vue +254 -0
  36. package/src/components/base/ui/date-picker/basic/time-spinner.vue +304 -0
  37. package/src/components/base/ui/date-picker/basic/year-table.vue +101 -0
  38. package/src/components/base/ui/date-picker/panel/date-range.vue +680 -0
  39. package/src/components/base/ui/date-picker/panel/date.vue +597 -0
  40. package/src/components/base/ui/date-picker/panel/month-range.vue +289 -0
  41. package/src/components/base/ui/date-picker/panel/time-range.vue +248 -0
  42. package/src/components/base/ui/date-picker/panel/time-select.vue +178 -0
  43. package/src/components/base/ui/date-picker/panel/time.vue +186 -0
  44. package/src/components/base/ui/date-picker/picker/date-picker.js +43 -0
  45. package/src/components/base/ui/date-picker/picker/time-picker.js +39 -0
  46. package/src/components/base/ui/date-picker/picker/time-select.js +21 -0
  47. package/src/components/base/ui/date-picker/picker.vue +942 -0
  48. package/src/components/base/ui/dialog/Index.vue +212 -0
  49. package/src/components/base/ui/directive/repeat-click.js +24 -0
  50. package/src/components/base/ui/directive/ripple.js +303 -0
  51. package/src/components/base/ui/divider/Divider.vue +37 -0
  52. package/src/components/base/ui/drawer/Drawer.vue +202 -0
  53. package/src/components/base/ui/dropdown/dropdown-item.vue +39 -0
  54. package/src/components/base/ui/dropdown/dropdown-menu.vue +63 -0
  55. package/src/components/base/ui/dropdown/dropdown.vue +308 -0
  56. package/src/components/base/ui/form/Form.vue +167 -0
  57. package/src/components/base/ui/form/FormItem.vue +334 -0
  58. package/src/components/base/ui/form/LabelWrap.vue +69 -0
  59. package/src/components/base/ui/icon/icon.vue +13 -0
  60. package/src/components/base/ui/image/image-viewer.vue +302 -0
  61. package/src/components/base/ui/image/main.vue +248 -0
  62. package/src/components/base/ui/index.js +189 -0
  63. package/src/components/base/ui/input/Input.vue +438 -0
  64. package/src/components/base/ui/input/calcTextareaHeight.js +104 -0
  65. package/src/components/base/ui/input-number/input-number.vue +285 -0
  66. package/src/components/base/ui/locale/format.js +32 -0
  67. package/src/components/base/ui/locale/index.js +48 -0
  68. package/src/components/base/ui/locale/lang/zh-CN.js +120 -0
  69. package/src/components/base/ui/menu/menu-item-group.vue +45 -0
  70. package/src/components/base/ui/menu/menu-item.vue +112 -0
  71. package/src/components/base/ui/menu/menu-mixin.js +44 -0
  72. package/src/components/base/ui/menu/menu.vue +312 -0
  73. package/src/components/base/ui/menu/submenu.vue +408 -0
  74. package/src/components/base/ui/message/index.js +2 -0
  75. package/src/components/base/ui/message/main.js +87 -0
  76. package/src/components/base/ui/message/main.vue +110 -0
  77. package/src/components/base/ui/message-box/main.js +216 -0
  78. package/src/components/base/ui/message-box/main.vue +323 -0
  79. package/src/components/base/ui/mixin/emitter.js +31 -0
  80. package/src/components/base/ui/mixin/focus.js +9 -0
  81. package/src/components/base/ui/mixin/locale.js +9 -0
  82. package/src/components/base/ui/mixin/migrating.js +33 -0
  83. package/src/components/base/ui/pagination/pager.vue +163 -0
  84. package/src/components/base/ui/pagination/pagination.jsx +391 -0
  85. package/src/components/base/ui/popover/directive.js +20 -0
  86. package/src/components/base/ui/popover/index.js +14 -0
  87. package/src/components/base/ui/popover/main.vue +236 -0
  88. package/src/components/base/ui/progress/Progress.vue +227 -0
  89. package/src/components/base/ui/radio/radio-button.vue +114 -0
  90. package/src/components/base/ui/radio/radio-group.vue +111 -0
  91. package/src/components/base/ui/radio/radio.vue +134 -0
  92. package/src/components/base/ui/row/row.js +47 -0
  93. package/src/components/base/ui/scrollbar/bar.jsx +91 -0
  94. package/src/components/base/ui/scrollbar/index.jsx +203 -0
  95. package/src/components/base/ui/scrollbar/util.js +32 -0
  96. package/src/components/base/ui/select/Option.vue +168 -0
  97. package/src/components/base/ui/select/OptionGroup.vue +60 -0
  98. package/src/components/base/ui/select/Select.vue +920 -0
  99. package/src/components/base/ui/select/SelectDropdown.vue +74 -0
  100. package/src/components/base/ui/select/navigation-mixin.js +54 -0
  101. package/src/components/base/ui/skeleton/index.js +8 -0
  102. package/src/components/base/ui/skeleton/src/img-placeholder.vue +16 -0
  103. package/src/components/base/ui/skeleton/src/index.vue +80 -0
  104. package/src/components/base/ui/skeleton/src/item.vue +22 -0
  105. package/src/components/base/ui/skeleton-item/index.js +8 -0
  106. package/src/components/base/ui/slider/button.vue +238 -0
  107. package/src/components/base/ui/slider/main.vue +427 -0
  108. package/src/components/base/ui/slider/marker.js +18 -0
  109. package/src/components/base/ui/style/alert.scss +147 -0
  110. package/src/components/base/ui/style/animations.scss +65 -0
  111. package/src/components/base/ui/style/autocomplete.scss +81 -0
  112. package/src/components/base/ui/style/backtop.scss +20 -0
  113. package/src/components/base/ui/style/button-group.scss +0 -0
  114. package/src/components/base/ui/style/button.scss +380 -0
  115. package/src/components/base/ui/style/carousel-item.scss +50 -0
  116. package/src/components/base/ui/style/carousel.scss +161 -0
  117. package/src/components/base/ui/style/cascader-panel.scss +120 -0
  118. package/src/components/base/ui/style/cascader.scss +185 -0
  119. package/src/components/base/ui/style/checkbox-button.scss +0 -0
  120. package/src/components/base/ui/style/checkbox-group.scss +0 -0
  121. package/src/components/base/ui/style/checkbox.scss +360 -0
  122. package/src/components/base/ui/style/col.scss +156 -0
  123. package/src/components/base/ui/style/collapse-item.scss +0 -0
  124. package/src/components/base/ui/style/collapse.scss +114 -0
  125. package/src/components/base/ui/style/color-picker.scss +387 -0
  126. package/src/components/base/ui/style/config.scss +4 -0
  127. package/src/components/base/ui/style/date-picker/date-picker.scss +97 -0
  128. package/src/components/base/ui/style/date-picker/date-range-picker.scss +101 -0
  129. package/src/components/base/ui/style/date-picker/date-table.scss +151 -0
  130. package/src/components/base/ui/style/date-picker/month-table.scss +82 -0
  131. package/src/components/base/ui/style/date-picker/picker-panel.scss +117 -0
  132. package/src/components/base/ui/style/date-picker/picker.scss +197 -0
  133. package/src/components/base/ui/style/date-picker/time-picker.scss +85 -0
  134. package/src/components/base/ui/style/date-picker/time-range-picker.scss +31 -0
  135. package/src/components/base/ui/style/date-picker/time-spinner.scss +110 -0
  136. package/src/components/base/ui/style/date-picker/year-table.scss +51 -0
  137. package/src/components/base/ui/style/date-picker.scss +12 -0
  138. package/src/components/base/ui/style/dialog.scss +123 -0
  139. package/src/components/base/ui/style/divider.scss +47 -0
  140. package/src/components/base/ui/style/drawer.scss +218 -0
  141. package/src/components/base/ui/style/dropdown-item.scss +0 -0
  142. package/src/components/base/ui/style/dropdown-menu.scss +0 -0
  143. package/src/components/base/ui/style/dropdown.scss +185 -0
  144. package/src/components/base/ui/style/form-item.scss +0 -0
  145. package/src/components/base/ui/style/form.scss +203 -0
  146. package/src/components/base/ui/style/function.scss +43 -0
  147. package/src/components/base/ui/style/icon.scss +1167 -0
  148. package/src/components/base/ui/style/image.scss +184 -0
  149. package/src/components/base/ui/style/index.scss +57 -0
  150. package/src/components/base/ui/style/input-number.scss +187 -0
  151. package/src/components/base/ui/style/input.scss +477 -0
  152. package/src/components/base/ui/style/menu-item-group.scss +0 -0
  153. package/src/components/base/ui/style/menu-item.scss +0 -0
  154. package/src/components/base/ui/style/menu.scss +294 -0
  155. package/src/components/base/ui/style/message-box.scss +231 -0
  156. package/src/components/base/ui/style/message.scss +120 -0
  157. package/src/components/base/ui/style/mixins.scss +196 -0
  158. package/src/components/base/ui/style/option-group.scss +42 -0
  159. package/src/components/base/ui/style/option.scss +36 -0
  160. package/src/components/base/ui/style/pagination.scss +295 -0
  161. package/src/components/base/ui/style/popover.scss +40 -0
  162. package/src/components/base/ui/style/popper.scss +102 -0
  163. package/src/components/base/ui/style/popup.scss +42 -0
  164. package/src/components/base/ui/style/progress.scss +141 -0
  165. package/src/components/base/ui/style/radio-button.scss +113 -0
  166. package/src/components/base/ui/style/radio-group.scss +9 -0
  167. package/src/components/base/ui/style/radio.scss +203 -0
  168. package/src/components/base/ui/style/ripple.scss +35 -0
  169. package/src/components/base/ui/style/row.scss +39 -0
  170. package/src/components/base/ui/style/scrollbar.scss +75 -0
  171. package/src/components/base/ui/style/select-dropdown.scss +59 -0
  172. package/src/components/base/ui/style/select.scss +154 -0
  173. package/src/components/base/ui/style/skeleton-item.scss +84 -0
  174. package/src/components/base/ui/style/skeleton.scss +40 -0
  175. package/src/components/base/ui/style/slider.scss +250 -0
  176. package/src/components/base/ui/style/switch.scss +116 -0
  177. package/src/components/base/ui/style/tabs.scss +602 -0
  178. package/src/components/base/ui/style/tag.scss +174 -0
  179. package/src/components/base/ui/style/tooltip.scss +146 -0
  180. package/src/components/base/ui/style/transition.scss +138 -0
  181. package/src/components/base/ui/style/upload.scss +603 -0
  182. package/src/components/base/ui/style/utils.scss +39 -0
  183. package/src/components/base/ui/style/var.scss +1007 -0
  184. package/src/components/base/ui/switch/index.vue +174 -0
  185. package/src/components/base/ui/tabs/tab-bar.vue +57 -0
  186. package/src/components/base/ui/tabs/tab-nav.vue +294 -0
  187. package/src/components/base/ui/tabs/tab-pane.vue +56 -0
  188. package/src/components/base/ui/tabs/tabs.vue +191 -0
  189. package/src/components/base/ui/tag/Tag.vue +60 -0
  190. package/src/components/base/ui/tooltip/tooltip.jsx +234 -0
  191. package/src/components/base/ui/upload/Index.vue +340 -0
  192. package/src/components/base/ui/upload/Upload.vue +216 -0
  193. package/src/components/base/ui/upload/UploadDragger.vue +70 -0
  194. package/src/components/base/ui/upload/UploadList.vue +100 -0
  195. package/src/components/base/ui/upload/ajax.js +85 -0
  196. package/src/components/base/ui/util/aria-dialog.js +90 -0
  197. package/src/components/base/ui/util/aria-utils.js +122 -0
  198. package/src/components/base/ui/util/clickoutside.js +76 -0
  199. package/src/components/base/ui/util/date-util.js +292 -0
  200. package/src/components/base/ui/util/date.js +370 -0
  201. package/src/components/base/ui/util/debounce.js +21 -0
  202. package/src/components/base/ui/util/deepmerge.js +100 -0
  203. package/src/components/base/ui/util/dom.js +215 -0
  204. package/src/components/base/ui/util/index.js +262 -0
  205. package/src/components/base/ui/util/menu/aria-menubar.js +14 -0
  206. package/src/components/base/ui/util/menu/aria-menuitem.js +49 -0
  207. package/src/components/base/ui/util/menu/aria-submenu.js +59 -0
  208. package/src/components/base/ui/util/merge.js +14 -0
  209. package/src/components/base/ui/util/popper.js +1235 -0
  210. package/src/components/base/ui/util/popup/index.js +218 -0
  211. package/src/components/base/ui/util/popup/popup-manager.js +194 -0
  212. package/src/components/base/ui/util/resize-events.js +32 -0
  213. package/src/components/base/ui/util/scroll-into-view.js +27 -0
  214. package/src/components/base/ui/util/scrollbar-width.js +29 -0
  215. package/src/components/base/ui/util/shared.js +7 -0
  216. package/src/components/base/ui/util/throttle.js +91 -0
  217. package/src/components/base/ui/util/types.js +24 -0
  218. package/src/components/base/ui/util/vdom.js +5 -0
  219. package/src/components/base/ui/util/vue-popper.js +188 -0
  220. package/src/components/normal/AggsItemH.vue +139 -0
  221. package/src/index.js +10 -0
  222. package/src/static/base-icons.ttf +0 -0
  223. package/src/static/base-icons.woff +0 -0
  224. package/src/static/label_bg.png +0 -0
  225. package/src/static/term-label-bg.png +0 -0
  226. package/src/style/app-article.scss +698 -0
  227. package/src/style/app-comment.scss +259 -0
  228. package/src/style/app-recommend.scss +48 -0
  229. package/src/style/app-richtext.scss +176 -0
  230. package/src/style/index.scss +523 -0
  231. package/vite.config.js +38 -0
@@ -0,0 +1,212 @@
1
+ <template>
2
+ <transition
3
+ name="dialog-fade"
4
+ @after-enter="afterEnter"
5
+ @after-leave="afterLeave">
6
+ <div
7
+ v-show="visible"
8
+ class="base-dialog__wrapper"
9
+ @click.self="handleWrapperClick">
10
+ <div
11
+ role="dialog"
12
+ :key="key"
13
+ aria-modal="true"
14
+ :aria-label="title || 'dialog'"
15
+ :class="['base-dialog', { 'is-fullscreen': fullscreen, 'base-dialog--center': center }, customClass]"
16
+ ref="dialog"
17
+ :style="style">
18
+ <div class="base-dialog__header">
19
+ <slot name="title">
20
+ <span class="base-dialog__title">{{ title }}</span>
21
+ </slot>
22
+ <button
23
+ type="button"
24
+ class="base-dialog__headerbtn"
25
+ aria-label="Close"
26
+ v-if="showClose"
27
+ @click="handleClose">
28
+ <i class="base-dialog__close base-icon base-icon-close"></i>
29
+ </button>
30
+ </div>
31
+ <div class="base-dialog__body" v-if="rendered"><slot></slot></div>
32
+ <div class="base-dialog__footer" v-if="$slots.footer">
33
+ <slot name="footer"></slot>
34
+ </div>
35
+ </div>
36
+ </div>
37
+ </transition>
38
+ </template>
39
+
40
+ <script>
41
+ import Popup from '../util/popup'
42
+ import Migrating from '../mixin/migrating'
43
+ import emitter from '../mixin/emitter'
44
+
45
+ export default {
46
+ name: 'BaseDialog',
47
+
48
+ mixins: [Popup, emitter, Migrating],
49
+
50
+ props: {
51
+ title: {
52
+ type: String,
53
+ default: ''
54
+ },
55
+
56
+ modal: {
57
+ type: Boolean,
58
+ default: true
59
+ },
60
+
61
+ modalAppendToBody: {
62
+ type: Boolean,
63
+ default: true
64
+ },
65
+
66
+ appendToBody: {
67
+ type: Boolean,
68
+ default: false
69
+ },
70
+
71
+ lockScroll: {
72
+ type: Boolean,
73
+ default: true
74
+ },
75
+
76
+ closeOnClickModal: {
77
+ type: Boolean,
78
+ default: true
79
+ },
80
+
81
+ closeOnPressEscape: {
82
+ type: Boolean,
83
+ default: true
84
+ },
85
+
86
+ showClose: {
87
+ type: Boolean,
88
+ default: true
89
+ },
90
+
91
+ width: String,
92
+
93
+ fullscreen: Boolean,
94
+
95
+ customClass: {
96
+ type: String,
97
+ default: ''
98
+ },
99
+
100
+ top: {
101
+ type: String,
102
+ default: '15vh'
103
+ },
104
+ beforeClose: Function,
105
+ center: {
106
+ type: Boolean,
107
+ default: false
108
+ },
109
+
110
+ destroyOnClose: Boolean
111
+ },
112
+
113
+ data() {
114
+ return {
115
+ closed: false,
116
+ key: 0
117
+ };
118
+ },
119
+
120
+ watch: {
121
+ visible(val) {
122
+ if (val) {
123
+ this.closed = false;
124
+ this.$emit('open');
125
+ this.$el.addEventListener('scroll', this.updatePopper);
126
+ this.$nextTick(() => {
127
+ this.$refs.dialog.scrollTop = 0;
128
+ });
129
+ if (this.appendToBody) {
130
+ document.body.appendChild(this.$el);
131
+ }
132
+ } else {
133
+ this.$el.removeEventListener('scroll', this.updatePopper);
134
+ if (!this.closed) this.$emit('close');
135
+ if (this.destroyOnClose) {
136
+ this.$nextTick(() => {
137
+ this.key++;
138
+ });
139
+ }
140
+ }
141
+ }
142
+ },
143
+
144
+ computed: {
145
+ style() {
146
+ let style = {};
147
+ if (!this.fullscreen) {
148
+ style.marginTop = this.top;
149
+ if (this.width) {
150
+ style.width = this.width;
151
+ }
152
+ }
153
+ return style;
154
+ }
155
+ },
156
+
157
+ methods: {
158
+ getMigratingConfig() {
159
+ return {
160
+ props: {
161
+ 'size': 'size is removed.'
162
+ }
163
+ };
164
+ },
165
+ handleWrapperClick() {
166
+ if (!this.closeOnClickModal) return;
167
+ this.handleClose();
168
+ },
169
+ handleClose() {
170
+ if (typeof this.beforeClose === 'function') {
171
+ this.beforeClose(this.hide);
172
+ } else {
173
+ this.hide();
174
+ }
175
+ },
176
+ hide(cancel) {
177
+ if (cancel !== false) {
178
+ this.$emit('update:visible', false);
179
+ this.$emit('close');
180
+ this.closed = true;
181
+ }
182
+ },
183
+ updatePopper() {
184
+ this.broadcast('BaseSelectDropdown', 'updatePopper');
185
+ this.broadcast('BaseDropdownMenu', 'updatePopper');
186
+ },
187
+ afterEnter() {
188
+ this.$emit('opened');
189
+ },
190
+ afterLeave() {
191
+ this.$emit('closed');
192
+ }
193
+ },
194
+
195
+ mounted() {
196
+ if (this.visible) {
197
+ this.rendered = true;
198
+ this.open();
199
+ if (this.appendToBody) {
200
+ document.body.appendChild(this.$el);
201
+ }
202
+ }
203
+ },
204
+
205
+ destroyed() {
206
+ // if appendToBody is true, remove DOM node after destroy
207
+ if (this.appendToBody && this.$el && this.$el.parentNode) {
208
+ this.$el.parentNode.removeChild(this.$el);
209
+ }
210
+ }
211
+ };
212
+ </script>
@@ -0,0 +1,24 @@
1
+ import { once, on } from '../util/dom';
2
+
3
+ export default {
4
+ bind(el, binding, vnode) {
5
+ let interval = null;
6
+ let startTime;
7
+ const handler = () => vnode.context[binding.expression].apply();
8
+ const clear = () => {
9
+ if (Date.now() - startTime < 100) {
10
+ handler();
11
+ }
12
+ clearInterval(interval);
13
+ interval = null;
14
+ };
15
+
16
+ on(el, 'mousedown', (e) => {
17
+ if (e.button !== 0) return;
18
+ startTime = Date.now();
19
+ once(document, 'mouseup', clear);
20
+ clearInterval(interval);
21
+ interval = setInterval(handler, 100);
22
+ });
23
+ }
24
+ };
@@ -0,0 +1,303 @@
1
+ const DELAY_RIPPLE = 80
2
+
3
+ function transform (el, value) {
4
+ el.style.transform = value
5
+ el.style.webkitTransform = value
6
+ }
7
+
8
+ function opacity (el, value) {
9
+ el.style.opacity = value.toString()
10
+ }
11
+
12
+ function isTouchEvent (e) {
13
+ return e.constructor.name === 'TouchEvent'
14
+ }
15
+
16
+ function isKeyboardEvent (e) {
17
+ return e.constructor.name === 'KeyboardEvent'
18
+ }
19
+
20
+ const calculate = (e, el, value) => {
21
+ let localX = 0
22
+ let localY = 0
23
+
24
+ if (!isKeyboardEvent(e)) {
25
+ const offset = el.getBoundingClientRect()
26
+ const target = isTouchEvent(e) ? e.touches[e.touches.length - 1] : e
27
+
28
+ localX = target.clientX - offset.left
29
+ localY = target.clientY - offset.top
30
+ }
31
+
32
+ let radius = 0
33
+ let scale = 0.3
34
+ if (el._ripple && el._ripple.circle) {
35
+ scale = 0.15
36
+ radius = el.offsetWidth / 2
37
+ radius = value.center ? radius : radius + Math.sqrt((localX - radius) ** 2 + (localY - radius) ** 2) / 4
38
+ } else {
39
+ radius = Math.sqrt(el.offsetWidth ** 2 + el.offsetHeight ** 2) / 2
40
+ }
41
+ const centerX = `${(el.offsetWidth - (radius * 2)) / 2}px`
42
+ const centerY = `${(el.offsetHeight - (radius * 2)) / 2}px`
43
+
44
+ const x = value.center ? centerX : `${localX - radius}px`
45
+ const y = value.center ? centerY : `${localY - radius}px`
46
+
47
+ return { radius, scale, x, y, centerX, centerY }
48
+ }
49
+
50
+
51
+ const ripples = {
52
+ /**
53
+ * @param {Event} e
54
+ * @param {Element} el
55
+ * @param {{ class?: string, center?: boolean }} [value={}]
56
+ */
57
+ show (e, el, value = {}) {
58
+ if (!el._ripple || !el._ripple.enabled) {
59
+ return
60
+ }
61
+
62
+ const container = document.createElement('span')
63
+ const animation = document.createElement('span')
64
+
65
+ container.appendChild(animation)
66
+ container.className = 'v-ripple__container'
67
+
68
+ if (value.class) {
69
+ container.className += ` ${value.class}`
70
+ }
71
+
72
+ const { radius, scale, x, y, centerX, centerY } = calculate(e, el, value)
73
+
74
+ const size = `${radius * 2}px`
75
+ animation.className = 'v-ripple__animation'
76
+ animation.style.width = size
77
+ animation.style.height = size
78
+
79
+ el.appendChild(container)
80
+
81
+ const computed = window.getComputedStyle(el)
82
+ if (computed && computed.position === 'static') {
83
+ el.style.position = 'relative'
84
+ el.dataset.previousPosition = 'static'
85
+ }
86
+
87
+ animation.classList.add('v-ripple__animation--enter')
88
+ animation.classList.add('v-ripple__animation--visible')
89
+ transform(animation, `translate(${x}, ${y}) scale3d(${scale},${scale},${scale})`)
90
+ opacity(animation, 0)
91
+ animation.dataset.activated = String(performance.now())
92
+
93
+ setTimeout(() => {
94
+ animation.classList.remove('v-ripple__animation--enter')
95
+ animation.classList.add('v-ripple__animation--in')
96
+ transform(animation, `translate(${centerX}, ${centerY}) scale3d(1,1,1)`)
97
+ opacity(animation, 0.25)
98
+ }, 0)
99
+ },
100
+
101
+
102
+ hide: el => {
103
+ if (!el || !el._ripple || !el._ripple.enabled) return
104
+
105
+ const ripples = el.getElementsByClassName('v-ripple__animation')
106
+
107
+ if (ripples.length === 0) return
108
+ const animation = ripples[ripples.length - 1]
109
+
110
+ if (animation.dataset.isHiding) return
111
+ else animation.dataset.isHiding = 'true'
112
+
113
+ const diff = performance.now() - Number(animation.dataset.activated)
114
+ const delay = Math.max(250 - diff, 0)
115
+
116
+ setTimeout(() => {
117
+ animation.classList.remove('v-ripple__animation--in')
118
+ animation.classList.add('v-ripple__animation--out')
119
+ opacity(animation, 0)
120
+
121
+ setTimeout(() => {
122
+ const ripples = el.getElementsByClassName('v-ripple__animation')
123
+ if (ripples.length === 1 && el.dataset.previousPosition) {
124
+ el.style.position = el.dataset.previousPosition
125
+ delete el.dataset.previousPosition
126
+ }
127
+
128
+ animation.parentNode && el.removeChild(animation.parentNode)
129
+ }, 300)
130
+ }, delay)
131
+ }
132
+ }
133
+
134
+ function isRippleEnabled (value) {
135
+ return typeof value === 'undefined' || !!value
136
+ }
137
+
138
+ function rippleShow (e) {
139
+ const value = {}
140
+ const element = e.currentTarget
141
+ if (!element || !element._ripple || element._ripple.touched) return
142
+ if (isTouchEvent(e)) {
143
+ element._ripple.touched = true
144
+ element._ripple.isTouch = true
145
+ } else {
146
+ // It's possible for touch events to fire
147
+ // as mouse events on Android/iOS, this
148
+ // will skip the event call if it has
149
+ // already been registered as touch
150
+ if (element._ripple.isTouch) return
151
+ }
152
+ value.center = element._ripple.centered || isKeyboardEvent(e)
153
+ if (element._ripple.class) {
154
+ value.class = element._ripple.class
155
+ }
156
+
157
+ if (isTouchEvent(e)) {
158
+ // already queued that shows or hides the ripple
159
+ if (element._ripple.showTimerCommit) return
160
+
161
+ element._ripple.showTimerCommit = () => {
162
+ ripples.show(e, element, value)
163
+ }
164
+ element._ripple.showTimer = window.setTimeout(() => {
165
+ if (element && element._ripple && element._ripple.showTimerCommit) {
166
+ element._ripple.showTimerCommit()
167
+ element._ripple.showTimerCommit = null
168
+ }
169
+ }, DELAY_RIPPLE)
170
+ } else {
171
+ ripples.show(e, element, value)
172
+ }
173
+ }
174
+
175
+ function rippleHide (e) {
176
+ const element = e.currentTarget
177
+ if (!element || !element._ripple) return
178
+
179
+ window.clearTimeout(element._ripple.showTimer)
180
+
181
+ // The touch interaction occurs before the show timer is triggered.
182
+ // We still want to show ripple effect.
183
+ if (e.type === 'touchend' && element._ripple.showTimerCommit) {
184
+ element._ripple.showTimerCommit()
185
+ element._ripple.showTimerCommit = null
186
+
187
+ // re-queue ripple hiding
188
+ element._ripple.showTimer = setTimeout(() => {
189
+ rippleHide(e)
190
+ })
191
+ return
192
+ }
193
+
194
+ window.setTimeout(() => {
195
+ if (element._ripple) {
196
+ element._ripple.touched = false
197
+ }
198
+ })
199
+ ripples.hide(element)
200
+ }
201
+
202
+ function rippleCancelShow (e) {
203
+ const element = e.currentTarget
204
+
205
+ if (!element || !element._ripple) return
206
+
207
+ if (element._ripple.showTimerCommit) {
208
+ element._ripple.showTimerCommit = null
209
+ }
210
+
211
+ window.clearTimeout(element._ripple.showTimer)
212
+ }
213
+
214
+ let keyboardRipple = false
215
+
216
+ function keyboardRippleShow (e) {
217
+ if (!keyboardRipple && (e.keyCode === keyCodes.enter || e.keyCode === keyCodes.space)) {
218
+ keyboardRipple = true
219
+ rippleShow(e)
220
+ }
221
+ }
222
+
223
+ function keyboardRippleHide (e) {
224
+ keyboardRipple = false
225
+ rippleHide(e)
226
+ }
227
+
228
+ function updateRipple (el, binding, wasEnabled) {
229
+ const enabled = isRippleEnabled(binding.value)
230
+ if (!enabled) {
231
+ ripples.hide(el)
232
+ }
233
+ el._ripple = el._ripple || {}
234
+ el._ripple.enabled = enabled
235
+ const value = binding.value || {}
236
+ if (value.center) {
237
+ el._ripple.centered = true
238
+ }
239
+ if (value.class) {
240
+ el._ripple.class = binding.value.class
241
+ }
242
+ if (value.circle) {
243
+ el._ripple.circle = value.circle
244
+ }
245
+ if (enabled && !wasEnabled) {
246
+ el.addEventListener('touchstart', rippleShow, { passive: true })
247
+ el.addEventListener('touchend', rippleHide, { passive: true })
248
+ el.addEventListener('touchmove', rippleCancelShow, { passive: true })
249
+ el.addEventListener('touchcancel', rippleHide)
250
+
251
+ el.addEventListener('mousedown', rippleShow)
252
+ el.addEventListener('mouseup', rippleHide)
253
+ el.addEventListener('mouseleave', rippleHide)
254
+
255
+ el.addEventListener('keydown', keyboardRippleShow)
256
+ el.addEventListener('keyup', keyboardRippleHide)
257
+
258
+ // Anchor tags can be dragged, causes other hides to fail - #1537
259
+ el.addEventListener('dragstart', rippleHide, { passive: true })
260
+ } else if (!enabled && wasEnabled) {
261
+ removeListeners(el)
262
+ }
263
+ }
264
+
265
+ function removeListeners (el) {
266
+ el.removeEventListener('mousedown', rippleShow)
267
+ el.removeEventListener('touchstart', rippleShow)
268
+ el.removeEventListener('touchend', rippleHide)
269
+ el.removeEventListener('touchmove', rippleCancelShow)
270
+ el.removeEventListener('touchcancel', rippleHide)
271
+ el.removeEventListener('mouseup', rippleHide)
272
+ el.removeEventListener('mouseleave', rippleHide)
273
+ el.removeEventListener('keydown', keyboardRippleShow)
274
+ el.removeEventListener('keyup', keyboardRippleHide)
275
+ el.removeEventListener('dragstart', rippleHide)
276
+ }
277
+
278
+ function directive (el, binding) {
279
+ updateRipple(el, binding, false)
280
+ }
281
+
282
+ function unbind (el) {
283
+ delete el._ripple
284
+ removeListeners(el)
285
+ }
286
+
287
+ function update (el, binding) {
288
+ if (binding.value === binding.oldValue) {
289
+ return
290
+ }
291
+
292
+ const wasEnabled = isRippleEnabled(binding.oldValue)
293
+ updateRipple(el, binding, wasEnabled)
294
+ }
295
+
296
+ export const Ripple = {
297
+ name: 'ripple',
298
+ bind: directive,
299
+ unbind: unbind,
300
+ update: update
301
+ }
302
+
303
+ export default Ripple
@@ -0,0 +1,37 @@
1
+ <template functional>
2
+ <div
3
+ v-bind="data.attrs"
4
+ v-on="listeners"
5
+ :class="[data.staticClass, 'base-divider', `base-divider--${props.direction}`]"
6
+ >
7
+ <div
8
+ v-if="slots().default && props.direction !== 'vertical'"
9
+ :class="['base-divider__text', `is-${props.contentPosition}`]"
10
+ >
11
+ <slot />
12
+ </div>
13
+ </div>
14
+ </template>
15
+
16
+ <script>
17
+ export default {
18
+ name: 'BaseDivider',
19
+ props: {
20
+ direction: {
21
+ type: String,
22
+ default: 'horizontal',
23
+ validator(val) {
24
+ return ['horizontal', 'vertical'].indexOf(val) !== -1
25
+ }
26
+ },
27
+ contentPosition: {
28
+ type: String,
29
+ default: 'center',
30
+ validator(val) {
31
+ return ['left', 'center', 'right'].indexOf(val) !== -1
32
+ }
33
+ }
34
+ }
35
+ }
36
+
37
+ </script>