| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223 | 
							- import _extends from "@babel/runtime/helpers/esm/extends";
 
- import { createPopper as _createPopper, offsetModifier } from '@vant/popperjs';
 
- import { createNamespace, isServer } from '../utils';
 
- import { BORDER_BOTTOM } from '../utils/constant'; // Mixins
 
- import { ClickOutsideMixin } from '../mixins/click-outside'; // Components
 
- import Icon from '../icon';
 
- import Popup from '../popup';
 
- var _createNamespace = createNamespace('popover'),
 
-     createComponent = _createNamespace[0],
 
-     bem = _createNamespace[1];
 
- export default createComponent({
 
-   mixins: [ClickOutsideMixin({
 
-     event: 'touchstart',
 
-     method: 'onClickOutside'
 
-   })],
 
-   props: {
 
-     value: Boolean,
 
-     trigger: String,
 
-     overlay: Boolean,
 
-     offset: {
 
-       type: Array,
 
-       default: function _default() {
 
-         return [0, 8];
 
-       }
 
-     },
 
-     theme: {
 
-       type: String,
 
-       default: 'light'
 
-     },
 
-     actions: {
 
-       type: Array,
 
-       default: function _default() {
 
-         return [];
 
-       }
 
-     },
 
-     placement: {
 
-       type: String,
 
-       default: 'bottom'
 
-     },
 
-     getContainer: {
 
-       type: [String, Function],
 
-       default: 'body'
 
-     },
 
-     closeOnClickAction: {
 
-       type: Boolean,
 
-       default: true
 
-     }
 
-   },
 
-   watch: {
 
-     value: 'updateLocation',
 
-     placement: 'updateLocation'
 
-   },
 
-   mounted: function mounted() {
 
-     this.updateLocation();
 
-   },
 
-   beforeDestroy: function beforeDestroy() {
 
-     if (this.popper) {
 
-       if (!isServer) {
 
-         window.removeEventListener('animationend', this.updateLocation);
 
-         window.removeEventListener('transitionend', this.updateLocation);
 
-       }
 
-       this.popper.destroy();
 
-       this.popper = null;
 
-     }
 
-   },
 
-   methods: {
 
-     createPopper: function createPopper() {
 
-       var popper = _createPopper(this.$refs.wrapper, this.$refs.popover.$el, {
 
-         placement: this.placement,
 
-         modifiers: [{
 
-           name: 'computeStyles',
 
-           options: {
 
-             adaptive: false,
 
-             gpuAcceleration: false
 
-           }
 
-         }, _extends({}, offsetModifier, {
 
-           options: {
 
-             offset: this.offset
 
-           }
 
-         })]
 
-       });
 
-       if (!isServer) {
 
-         window.addEventListener('animationend', this.updateLocation);
 
-         window.addEventListener('transitionend', this.updateLocation);
 
-       }
 
-       return popper;
 
-     },
 
-     updateLocation: function updateLocation() {
 
-       var _this = this;
 
-       this.$nextTick(function () {
 
-         if (!_this.value) {
 
-           return;
 
-         }
 
-         if (!_this.popper) {
 
-           _this.popper = _this.createPopper();
 
-         } else {
 
-           _this.popper.setOptions({
 
-             placement: _this.placement
 
-           });
 
-         }
 
-       });
 
-     },
 
-     renderAction: function renderAction(action, index) {
 
-       var _this2 = this;
 
-       var h = this.$createElement;
 
-       var icon = action.icon,
 
-           text = action.text,
 
-           disabled = action.disabled,
 
-           className = action.className;
 
-       return h("div", {
 
-         "attrs": {
 
-           "role": "menuitem"
 
-         },
 
-         "class": [bem('action', {
 
-           disabled: disabled,
 
-           'with-icon': icon
 
-         }), className],
 
-         "on": {
 
-           "click": function click() {
 
-             return _this2.onClickAction(action, index);
 
-           }
 
-         }
 
-       }, [icon && h(Icon, {
 
-         "attrs": {
 
-           "name": icon
 
-         },
 
-         "class": bem('action-icon')
 
-       }), h("div", {
 
-         "class": [bem('action-text'), BORDER_BOTTOM]
 
-       }, [text])]);
 
-     },
 
-     onToggle: function onToggle(value) {
 
-       this.$emit('input', value);
 
-     },
 
-     onClickWrapper: function onClickWrapper() {
 
-       if (this.trigger === 'click') {
 
-         this.onToggle(!this.value);
 
-       }
 
-     },
 
-     onTouchstart: function onTouchstart(event) {
 
-       event.stopPropagation();
 
-       this.$emit('touchstart', event);
 
-     },
 
-     onClickAction: function onClickAction(action, index) {
 
-       if (action.disabled) {
 
-         return;
 
-       }
 
-       this.$emit('select', action, index);
 
-       if (this.closeOnClickAction) {
 
-         this.$emit('input', false);
 
-       }
 
-     },
 
-     onClickOutside: function onClickOutside() {
 
-       this.$emit('input', false);
 
-     },
 
-     onOpen: function onOpen() {
 
-       this.$emit('open');
 
-     },
 
-     /* istanbul ignore next */
 
-     onOpened: function onOpened() {
 
-       this.$emit('opened');
 
-     },
 
-     onClose: function onClose() {
 
-       this.$emit('close');
 
-     },
 
-     /* istanbul ignore next */
 
-     onClosed: function onClosed() {
 
-       this.$emit('closed');
 
-     }
 
-   },
 
-   render: function render() {
 
-     var h = arguments[0];
 
-     return h("span", {
 
-       "ref": "wrapper",
 
-       "class": bem('wrapper'),
 
-       "on": {
 
-         "click": this.onClickWrapper
 
-       }
 
-     }, [h(Popup, {
 
-       "ref": "popover",
 
-       "attrs": {
 
-         "value": this.value,
 
-         "overlay": this.overlay,
 
-         "position": null,
 
-         "transition": "van-popover-zoom",
 
-         "lockScroll": false,
 
-         "getContainer": this.getContainer
 
-       },
 
-       "class": bem([this.theme]),
 
-       "on": {
 
-         "open": this.onOpen,
 
-         "close": this.onClose,
 
-         "input": this.onToggle,
 
-         "opened": this.onOpened,
 
-         "closed": this.onClosed
 
-       },
 
-       "nativeOn": {
 
-         "touchstart": this.onTouchstart
 
-       }
 
-     }, [h("div", {
 
-       "class": bem('arrow')
 
-     }), h("div", {
 
-       "class": bem('content'),
 
-       "attrs": {
 
-         "role": "menu"
 
-       }
 
-     }, [this.slots('default') || this.actions.map(this.renderAction)])]), this.slots('reference')]);
 
-   }
 
- });
 
 
  |