vant 3.2.8 → 3.3.3-beta.nuxt3

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 (189) hide show
  1. package/es/address-edit/AddressEdit.js +154 -180
  2. package/es/address-edit/AddressEditDetail.d.ts +10 -9
  3. package/es/address-edit/AddressEditDetail.js +6 -6
  4. package/es/button/Button.js +2 -2
  5. package/es/calendar/Calendar.js +8 -14
  6. package/es/calendar/CalendarHeader.js +1 -3
  7. package/es/calendar/CalendarMonth.js +11 -10
  8. package/es/calendar/types.d.ts +1 -1
  9. package/es/cascader/Cascader.js +10 -2
  10. package/es/checkbox/Checker.js +1 -1
  11. package/es/checkbox/types.d.ts +2 -6
  12. package/es/composables/use-id.d.ts +1 -0
  13. package/es/composables/use-id.js +14 -0
  14. package/es/composables/use-route.d.ts +1 -1
  15. package/es/composables/use-route.js +4 -4
  16. package/es/count-down/CountDown.js +1 -0
  17. package/es/coupon-list/CouponList.js +40 -24
  18. package/es/coupon-list/index.css +1 -1
  19. package/es/coupon-list/index.less +0 -5
  20. package/es/dropdown-item/DropdownItem.js +7 -2
  21. package/es/dropdown-item/types.d.ts +2 -6
  22. package/es/dropdown-menu/DropdownMenu.js +7 -3
  23. package/es/dropdown-menu/types.d.ts +1 -0
  24. package/es/empty/Network.js +22 -34
  25. package/es/field/Field.d.ts +1 -1
  26. package/es/field/Field.js +13 -5
  27. package/es/field/index.d.ts +2 -2
  28. package/es/field/types.d.ts +7 -6
  29. package/es/form/Form.js +2 -2
  30. package/es/image/Image.js +4 -9
  31. package/es/image-preview/ImagePreview.js +3 -4
  32. package/es/index.d.ts +1 -1
  33. package/es/index.js +1 -1
  34. package/es/lazyload/index.d.ts +1 -1
  35. package/es/lazyload/index.js +1 -1
  36. package/es/lazyload/vue-lazyload/index.d.ts +55 -0
  37. package/es/lazyload/vue-lazyload/index.js +46 -0
  38. package/es/lazyload/vue-lazyload/lazy-component.js +53 -0
  39. package/es/lazyload/vue-lazyload/lazy-container.js +98 -0
  40. package/es/lazyload/vue-lazyload/lazy-image.js +115 -0
  41. package/es/lazyload/vue-lazyload/lazy.js +507 -0
  42. package/es/lazyload/vue-lazyload/listener.js +241 -0
  43. package/es/lazyload/vue-lazyload/util.js +183 -0
  44. package/es/list/List.js +3 -1
  45. package/es/locale/lang/pt-BR.d.ts +73 -0
  46. package/es/locale/lang/pt-BR.js +72 -0
  47. package/es/number-keyboard/NumberKeyboardKey.js +4 -4
  48. package/es/pagination/Pagination.js +67 -49
  49. package/es/pagination/index.css +1 -1
  50. package/es/pagination/index.less +32 -31
  51. package/es/password-input/PasswordInput.d.ts +1 -1
  52. package/es/password-input/index.d.ts +1 -1
  53. package/es/popover/Popover.js +2 -0
  54. package/es/popup/Popup.d.ts +1 -2
  55. package/es/popup/Popup.js +2 -5
  56. package/es/popup/index.d.ts +1 -2
  57. package/es/rate/Rate.js +5 -3
  58. package/es/search/Search.js +8 -2
  59. package/es/sidebar/Sidebar.js +1 -0
  60. package/es/sidebar-item/SidebarItem.js +4 -1
  61. package/es/slider/Slider.js +5 -3
  62. package/es/stepper/Stepper.js +11 -8
  63. package/es/swipe/Swipe.js +11 -6
  64. package/es/swipe/index.css +1 -1
  65. package/es/swipe/index.less +2 -0
  66. package/es/swipe/types.d.ts +1 -3
  67. package/es/switch/Switch.js +1 -0
  68. package/es/switch/index.css +1 -1
  69. package/es/switch/index.less +2 -0
  70. package/es/tab/Tab.js +18 -5
  71. package/es/tab/index.css +1 -1
  72. package/es/tab/index.less +1 -1
  73. package/es/tabbar/Tabbar.d.ts +1 -1
  74. package/es/tabbar/Tabbar.js +10 -10
  75. package/es/tabbar-item/TabbarItem.js +16 -7
  76. package/es/tabs/Tabs.js +10 -5
  77. package/es/tabs/TabsTitle.d.ts +6 -0
  78. package/es/tabs/TabsTitle.js +7 -1
  79. package/es/tabs/types.d.ts +1 -0
  80. package/es/uploader/UploaderPreviewItem.js +4 -1
  81. package/es/uploader/utils.d.ts +2 -2
  82. package/es/uploader/utils.js +2 -2
  83. package/es/utils/dom.d.ts +1 -0
  84. package/es/utils/dom.js +6 -2
  85. package/es/utils/format.js +6 -5
  86. package/es/vue-tsx-shim.d.ts +1 -0
  87. package/lib/address-edit/AddressEdit.js +155 -180
  88. package/lib/address-edit/AddressEditDetail.d.ts +10 -9
  89. package/lib/address-edit/AddressEditDetail.js +6 -6
  90. package/lib/button/Button.js +1 -1
  91. package/lib/calendar/Calendar.js +8 -14
  92. package/lib/calendar/CalendarHeader.js +1 -3
  93. package/lib/calendar/CalendarMonth.js +11 -10
  94. package/lib/calendar/types.d.ts +1 -1
  95. package/lib/cascader/Cascader.js +10 -2
  96. package/lib/checkbox/Checker.js +1 -1
  97. package/lib/checkbox/types.d.ts +2 -6
  98. package/lib/composables/use-id.d.ts +1 -0
  99. package/lib/composables/use-id.js +21 -0
  100. package/lib/composables/use-route.d.ts +1 -1
  101. package/lib/composables/use-route.js +4 -4
  102. package/lib/count-down/CountDown.js +1 -0
  103. package/lib/coupon-list/CouponList.js +39 -22
  104. package/lib/coupon-list/index.css +1 -1
  105. package/lib/coupon-list/index.less +0 -5
  106. package/lib/dropdown-item/DropdownItem.js +7 -2
  107. package/lib/dropdown-item/types.d.ts +2 -6
  108. package/lib/dropdown-menu/DropdownMenu.js +7 -2
  109. package/lib/dropdown-menu/types.d.ts +1 -0
  110. package/lib/empty/Network.js +22 -34
  111. package/lib/field/Field.d.ts +1 -1
  112. package/lib/field/Field.js +14 -5
  113. package/lib/field/index.d.ts +2 -2
  114. package/lib/field/types.d.ts +7 -6
  115. package/lib/form/Form.js +1 -1
  116. package/lib/image/Image.js +4 -9
  117. package/lib/image-preview/ImagePreview.js +1 -2
  118. package/lib/index.css +1 -1
  119. package/lib/index.d.ts +1 -1
  120. package/lib/index.js +1 -1
  121. package/lib/lazyload/index.d.ts +1 -1
  122. package/lib/lazyload/index.js +3 -3
  123. package/lib/lazyload/vue-lazyload/index.d.ts +55 -0
  124. package/lib/lazyload/vue-lazyload/index.js +58 -0
  125. package/lib/lazyload/vue-lazyload/lazy-component.js +62 -0
  126. package/lib/lazyload/vue-lazyload/lazy-container.js +106 -0
  127. package/lib/lazyload/vue-lazyload/lazy-image.js +125 -0
  128. package/lib/lazyload/vue-lazyload/lazy.js +520 -0
  129. package/lib/lazyload/vue-lazyload/listener.js +251 -0
  130. package/lib/lazyload/vue-lazyload/util.js +213 -0
  131. package/lib/list/List.js +3 -1
  132. package/lib/locale/lang/pt-BR.d.ts +73 -0
  133. package/lib/locale/lang/pt-BR.js +77 -0
  134. package/lib/number-keyboard/NumberKeyboardKey.js +3 -3
  135. package/lib/pagination/Pagination.js +65 -47
  136. package/lib/pagination/index.css +1 -1
  137. package/lib/pagination/index.less +32 -31
  138. package/lib/password-input/PasswordInput.d.ts +1 -1
  139. package/lib/password-input/index.d.ts +1 -1
  140. package/lib/popover/Popover.js +2 -0
  141. package/lib/popup/Popup.d.ts +1 -2
  142. package/lib/popup/Popup.js +2 -5
  143. package/lib/popup/index.d.ts +1 -2
  144. package/lib/rate/Rate.js +5 -3
  145. package/lib/search/Search.js +9 -2
  146. package/lib/sidebar/Sidebar.js +1 -0
  147. package/lib/sidebar-item/SidebarItem.js +4 -1
  148. package/lib/slider/Slider.js +5 -3
  149. package/lib/ssr.js +7 -0
  150. package/lib/ssr.mjs +1 -0
  151. package/lib/stepper/Stepper.js +11 -8
  152. package/lib/swipe/Swipe.js +9 -4
  153. package/lib/swipe/index.css +1 -1
  154. package/lib/swipe/index.less +2 -0
  155. package/lib/swipe/types.d.ts +1 -3
  156. package/lib/switch/Switch.js +1 -0
  157. package/lib/switch/index.css +1 -1
  158. package/lib/switch/index.less +2 -0
  159. package/lib/tab/Tab.js +20 -5
  160. package/lib/tab/index.css +1 -1
  161. package/lib/tab/index.less +1 -1
  162. package/lib/tabbar/Tabbar.d.ts +1 -1
  163. package/lib/tabbar/Tabbar.js +10 -10
  164. package/lib/tabbar-item/TabbarItem.js +16 -7
  165. package/lib/tabs/Tabs.js +9 -3
  166. package/lib/tabs/TabsTitle.d.ts +6 -0
  167. package/lib/tabs/TabsTitle.js +7 -1
  168. package/lib/tabs/types.d.ts +1 -0
  169. package/lib/uploader/UploaderPreviewItem.js +3 -0
  170. package/lib/uploader/utils.d.ts +2 -2
  171. package/lib/uploader/utils.js +3 -2
  172. package/lib/utils/dom.d.ts +1 -0
  173. package/lib/utils/dom.js +9 -2
  174. package/lib/utils/format.js +7 -5
  175. package/lib/vant.cjs.js +14407 -0
  176. package/lib/vant.cjs.min.js +1 -0
  177. package/lib/vant.es.js +1125 -2186
  178. package/lib/vant.es.min.js +1125 -2186
  179. package/lib/vant.js +1109 -1089
  180. package/lib/vant.min.js +1 -1
  181. package/lib/vue-tsx-shim.d.ts +1 -0
  182. package/package.json +26 -11
  183. package/vetur/attributes.json +557 -557
  184. package/vetur/tags.json +183 -183
  185. package/vetur/web-types.json +1577 -1577
  186. package/es/composables/use-link-field.d.ts +0 -0
  187. package/es/composables/use-link-field.js +0 -0
  188. package/lib/composables/use-link-field.d.ts +0 -0
  189. package/lib/composables/use-link-field.js +0 -1
@@ -0,0 +1,520 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports.default = _default;
5
+
6
+ var _vue = require("vue");
7
+
8
+ var _use = require("@vant/use");
9
+
10
+ var _util = require("./util");
11
+
12
+ var _utils = require("../../utils");
13
+
14
+ var _listener = _interopRequireDefault(require("./listener"));
15
+
16
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
+
18
+ var DEFAULT_URL = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';
19
+ var DEFAULT_EVENTS = ['scroll', 'wheel', 'mousewheel', 'resize', 'animationend', 'transitionend', 'touchmove'];
20
+ var DEFAULT_OBSERVER_OPTIONS = {
21
+ rootMargin: '0px',
22
+ threshold: 0
23
+ };
24
+
25
+ function _default() {
26
+ return class Lazy {
27
+ constructor(_ref) {
28
+ var {
29
+ preLoad,
30
+ error,
31
+ throttleWait,
32
+ preLoadTop,
33
+ dispatchEvent,
34
+ loading,
35
+ attempt,
36
+ silent = true,
37
+ scale,
38
+ listenEvents,
39
+ filter,
40
+ adapter,
41
+ observer,
42
+ observerOptions
43
+ } = _ref;
44
+ this.mode = _util.modeType.event;
45
+ this.listeners = [];
46
+ this.targetIndex = 0;
47
+ this.targets = [];
48
+ this.options = {
49
+ silent,
50
+ dispatchEvent: !!dispatchEvent,
51
+ throttleWait: throttleWait || 200,
52
+ preLoad: preLoad || 1.3,
53
+ preLoadTop: preLoadTop || 0,
54
+ error: error || DEFAULT_URL,
55
+ loading: loading || DEFAULT_URL,
56
+ attempt: attempt || 3,
57
+ scale: scale || (0, _util.getDPR)(scale),
58
+ ListenEvents: listenEvents || DEFAULT_EVENTS,
59
+ supportWebp: (0, _util.supportWebp)(),
60
+ filter: filter || {},
61
+ adapter: adapter || {},
62
+ observer: !!observer,
63
+ observerOptions: observerOptions || DEFAULT_OBSERVER_OPTIONS
64
+ };
65
+ this.initEvent();
66
+ this.imageCache = new _util.ImageCache({
67
+ max: 200
68
+ });
69
+ this.lazyLoadHandler = (0, _util.throttle)(this.lazyLoadHandler.bind(this), this.options.throttleWait);
70
+ this.setMode(this.options.observer ? _util.modeType.observer : _util.modeType.event);
71
+ }
72
+ /**
73
+ * update config
74
+ * @param {Object} config params
75
+ * @return
76
+ */
77
+
78
+
79
+ config(options) {
80
+ if (options === void 0) {
81
+ options = {};
82
+ }
83
+
84
+ Object.assign(this.options, options);
85
+ }
86
+ /**
87
+ * output listener's load performance
88
+ * @return {Array}
89
+ */
90
+
91
+
92
+ performance() {
93
+ return this.listeners.map(item => item.performance());
94
+ }
95
+ /*
96
+ * add lazy component to queue
97
+ * @param {Vue} vm lazy component instance
98
+ * @return
99
+ */
100
+
101
+
102
+ addLazyBox(vm) {
103
+ this.listeners.push(vm);
104
+
105
+ if (_use.inBrowser) {
106
+ this.addListenerTarget(window);
107
+ this.observer && this.observer.observe(vm.el);
108
+
109
+ if (vm.$el && vm.$el.parentNode) {
110
+ this.addListenerTarget(vm.$el.parentNode);
111
+ }
112
+ }
113
+ }
114
+ /*
115
+ * add image listener to queue
116
+ * @param {DOM} el
117
+ * @param {object} binding vue directive binding
118
+ * @param {vnode} vnode vue directive vnode
119
+ * @return
120
+ */
121
+
122
+
123
+ add(el, binding, vnode) {
124
+ if (this.listeners.some(item => item.el === el)) {
125
+ this.update(el, binding);
126
+ return (0, _vue.nextTick)(this.lazyLoadHandler);
127
+ }
128
+
129
+ var value = this.valueFormatter(binding.value);
130
+ var {
131
+ src
132
+ } = value;
133
+ (0, _vue.nextTick)(() => {
134
+ src = (0, _util.getBestSelectionFromSrcset)(el, this.options.scale) || src;
135
+ this.observer && this.observer.observe(el);
136
+ var container = Object.keys(binding.modifiers)[0];
137
+ var $parent;
138
+
139
+ if (container) {
140
+ $parent = vnode.context.$refs[container]; // if there is container passed in, try ref first, then fallback to getElementById to support the original usage
141
+
142
+ $parent = $parent ? $parent.$el || $parent : document.getElementById(container);
143
+ }
144
+
145
+ if (!$parent) {
146
+ $parent = (0, _use.getScrollParent)(el);
147
+ }
148
+
149
+ var newListener = new _listener.default({
150
+ bindType: binding.arg,
151
+ $parent,
152
+ el,
153
+ src,
154
+ loading: value.loading,
155
+ error: value.error,
156
+ cors: value.cors,
157
+ elRenderer: this.elRenderer.bind(this),
158
+ options: this.options,
159
+ imageCache: this.imageCache
160
+ });
161
+ this.listeners.push(newListener);
162
+
163
+ if (_use.inBrowser) {
164
+ this.addListenerTarget(window);
165
+ this.addListenerTarget($parent);
166
+ }
167
+
168
+ this.lazyLoadHandler();
169
+ (0, _vue.nextTick)(() => this.lazyLoadHandler());
170
+ });
171
+ }
172
+ /**
173
+ * update image src
174
+ * @param {DOM} el
175
+ * @param {object} vue directive binding
176
+ * @return
177
+ */
178
+
179
+
180
+ update(el, binding, vnode) {
181
+ var value = this.valueFormatter(binding.value);
182
+ var {
183
+ src
184
+ } = value;
185
+ src = (0, _util.getBestSelectionFromSrcset)(el, this.options.scale) || src;
186
+ var exist = this.listeners.find(item => item.el === el);
187
+
188
+ if (!exist) {
189
+ this.add(el, binding, vnode);
190
+ } else {
191
+ exist.update({
192
+ src,
193
+ error: value.error,
194
+ loading: value.loading
195
+ });
196
+ }
197
+
198
+ if (this.observer) {
199
+ this.observer.unobserve(el);
200
+ this.observer.observe(el);
201
+ }
202
+
203
+ this.lazyLoadHandler();
204
+ (0, _vue.nextTick)(() => this.lazyLoadHandler());
205
+ }
206
+ /**
207
+ * remove listener form list
208
+ * @param {DOM} el
209
+ * @return
210
+ */
211
+
212
+
213
+ remove(el) {
214
+ if (!el) return;
215
+ this.observer && this.observer.unobserve(el);
216
+ var existItem = this.listeners.find(item => item.el === el);
217
+
218
+ if (existItem) {
219
+ this.removeListenerTarget(existItem.$parent);
220
+ this.removeListenerTarget(window);
221
+ (0, _util.remove)(this.listeners, existItem);
222
+ existItem.$destroy();
223
+ }
224
+ }
225
+ /*
226
+ * remove lazy components form list
227
+ * @param {Vue} vm Vue instance
228
+ * @return
229
+ */
230
+
231
+
232
+ removeComponent(vm) {
233
+ if (!vm) return;
234
+ (0, _util.remove)(this.listeners, vm);
235
+ this.observer && this.observer.unobserve(vm.el);
236
+
237
+ if (vm.$parent && vm.$el.parentNode) {
238
+ this.removeListenerTarget(vm.$el.parentNode);
239
+ }
240
+
241
+ this.removeListenerTarget(window);
242
+ }
243
+
244
+ setMode(mode) {
245
+ if (!_util.hasIntersectionObserver && mode === _util.modeType.observer) {
246
+ mode = _util.modeType.event;
247
+ }
248
+
249
+ this.mode = mode; // event or observer
250
+
251
+ if (mode === _util.modeType.event) {
252
+ if (this.observer) {
253
+ this.listeners.forEach(listener => {
254
+ this.observer.unobserve(listener.el);
255
+ });
256
+ this.observer = null;
257
+ }
258
+
259
+ this.targets.forEach(target => {
260
+ this.initListen(target.el, true);
261
+ });
262
+ } else {
263
+ this.targets.forEach(target => {
264
+ this.initListen(target.el, false);
265
+ });
266
+ this.initIntersectionObserver();
267
+ }
268
+ }
269
+ /*
270
+ *** Private functions ***
271
+ */
272
+
273
+ /*
274
+ * add listener target
275
+ * @param {DOM} el listener target
276
+ * @return
277
+ */
278
+
279
+
280
+ addListenerTarget(el) {
281
+ if (!el) return;
282
+ var target = this.targets.find(target => target.el === el);
283
+
284
+ if (!target) {
285
+ target = {
286
+ el,
287
+ id: ++this.targetIndex,
288
+ childrenCount: 1,
289
+ listened: true
290
+ };
291
+ this.mode === _util.modeType.event && this.initListen(target.el, true);
292
+ this.targets.push(target);
293
+ } else {
294
+ target.childrenCount++;
295
+ }
296
+
297
+ return this.targetIndex;
298
+ }
299
+ /*
300
+ * remove listener target or reduce target childrenCount
301
+ * @param {DOM} el or window
302
+ * @return
303
+ */
304
+
305
+
306
+ removeListenerTarget(el) {
307
+ this.targets.forEach((target, index) => {
308
+ if (target.el === el) {
309
+ target.childrenCount--;
310
+
311
+ if (!target.childrenCount) {
312
+ this.initListen(target.el, false);
313
+ this.targets.splice(index, 1);
314
+ target = null;
315
+ }
316
+ }
317
+ });
318
+ }
319
+ /*
320
+ * add or remove eventlistener
321
+ * @param {DOM} el DOM or Window
322
+ * @param {boolean} start flag
323
+ * @return
324
+ */
325
+
326
+
327
+ initListen(el, start) {
328
+ this.options.ListenEvents.forEach(evt => (start ? _util.on : _util.off)(el, evt, this.lazyLoadHandler));
329
+ }
330
+
331
+ initEvent() {
332
+ var _this = this;
333
+
334
+ this.Event = {
335
+ listeners: {
336
+ loading: [],
337
+ loaded: [],
338
+ error: []
339
+ }
340
+ };
341
+
342
+ this.$on = (event, func) => {
343
+ if (!this.Event.listeners[event]) this.Event.listeners[event] = [];
344
+ this.Event.listeners[event].push(func);
345
+ };
346
+
347
+ this.$once = (event, func) => {
348
+ var on = function () {
349
+ _this.$off(event, on);
350
+
351
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
352
+ args[_key] = arguments[_key];
353
+ }
354
+
355
+ func.apply(_this, args);
356
+ };
357
+
358
+ this.$on(event, on);
359
+ };
360
+
361
+ this.$off = (event, func) => {
362
+ if (!func) {
363
+ if (!this.Event.listeners[event]) return;
364
+ this.Event.listeners[event].length = 0;
365
+ return;
366
+ }
367
+
368
+ (0, _util.remove)(this.Event.listeners[event], func);
369
+ };
370
+
371
+ this.$emit = (event, context, inCache) => {
372
+ if (!this.Event.listeners[event]) return;
373
+ this.Event.listeners[event].forEach(func => func(context, inCache));
374
+ };
375
+ }
376
+ /**
377
+ * find nodes which in viewport and trigger load
378
+ * @return
379
+ */
380
+
381
+
382
+ lazyLoadHandler() {
383
+ var freeList = [];
384
+ this.listeners.forEach(listener => {
385
+ if (!listener.el || !listener.el.parentNode) {
386
+ freeList.push(listener);
387
+ }
388
+
389
+ var catIn = listener.checkInView();
390
+ if (!catIn) return;
391
+ listener.load();
392
+ });
393
+ freeList.forEach(item => {
394
+ (0, _util.remove)(this.listeners, item);
395
+ item.$destroy();
396
+ });
397
+ }
398
+ /**
399
+ * init IntersectionObserver
400
+ * set mode to observer
401
+ * @return
402
+ */
403
+
404
+
405
+ initIntersectionObserver() {
406
+ if (!_util.hasIntersectionObserver) {
407
+ return;
408
+ }
409
+
410
+ this.observer = new IntersectionObserver(this.observerHandler.bind(this), this.options.observerOptions);
411
+
412
+ if (this.listeners.length) {
413
+ this.listeners.forEach(listener => {
414
+ this.observer.observe(listener.el);
415
+ });
416
+ }
417
+ }
418
+ /**
419
+ * init IntersectionObserver
420
+ * @return
421
+ */
422
+
423
+
424
+ observerHandler(entries) {
425
+ entries.forEach(entry => {
426
+ if (entry.isIntersecting) {
427
+ this.listeners.forEach(listener => {
428
+ if (listener.el === entry.target) {
429
+ if (listener.state.loaded) return this.observer.unobserve(listener.el);
430
+ listener.load();
431
+ }
432
+ });
433
+ }
434
+ });
435
+ }
436
+ /**
437
+ * set element attribute with image'url and state
438
+ * @param {object} lazyload listener object
439
+ * @param {string} state will be rendered
440
+ * @param {bool} inCache is rendered from cache
441
+ * @return
442
+ */
443
+
444
+
445
+ elRenderer(listener, state, cache) {
446
+ if (!listener.el) return;
447
+ var {
448
+ el,
449
+ bindType
450
+ } = listener;
451
+ var src;
452
+
453
+ switch (state) {
454
+ case 'loading':
455
+ src = listener.loading;
456
+ break;
457
+
458
+ case 'error':
459
+ src = listener.error;
460
+ break;
461
+
462
+ default:
463
+ ({
464
+ src
465
+ } = listener);
466
+ break;
467
+ }
468
+
469
+ if (bindType) {
470
+ el.style[bindType] = 'url("' + src + '")';
471
+ } else if (el.getAttribute('src') !== src) {
472
+ el.setAttribute('src', src);
473
+ }
474
+
475
+ el.setAttribute('lazy', state);
476
+ this.$emit(state, listener, cache);
477
+ this.options.adapter[state] && this.options.adapter[state](listener, this.options);
478
+
479
+ if (this.options.dispatchEvent) {
480
+ var event = new CustomEvent(state, {
481
+ detail: listener
482
+ });
483
+ el.dispatchEvent(event);
484
+ }
485
+ }
486
+ /**
487
+ * generate loading loaded error image url
488
+ * @param {string} image's src
489
+ * @return {object} image's loading, loaded, error url
490
+ */
491
+
492
+
493
+ valueFormatter(value) {
494
+ var src = value;
495
+ var {
496
+ loading,
497
+ error
498
+ } = this.options; // value is object
499
+
500
+ if ((0, _utils.isObject)(value)) {
501
+ if (process.env.NODE_ENV !== 'production' && !value.src && !this.options.silent) {
502
+ console.error('[@vant/lazyload] miss src with ' + value);
503
+ }
504
+
505
+ ({
506
+ src
507
+ } = value);
508
+ loading = value.loading || this.options.loading;
509
+ error = value.error || this.options.error;
510
+ }
511
+
512
+ return {
513
+ src,
514
+ loading,
515
+ error
516
+ };
517
+ }
518
+
519
+ };
520
+ }