68 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			68 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
import { mergeProps as _mergeProps, createVNode as _createVNode } from "vue";
 | 
						|
import { extend, inBrowser } from "../utils/index.mjs";
 | 
						|
import { mountComponent, usePopupState } from "../utils/mount-component.mjs";
 | 
						|
import VanImagePreview from "./ImagePreview.mjs";
 | 
						|
let instance;
 | 
						|
const defaultConfig = {
 | 
						|
  loop: true,
 | 
						|
  images: [],
 | 
						|
  maxZoom: 3,
 | 
						|
  minZoom: 1 / 3,
 | 
						|
  onScale: void 0,
 | 
						|
  onClose: void 0,
 | 
						|
  onChange: void 0,
 | 
						|
  vertical: false,
 | 
						|
  teleport: "body",
 | 
						|
  className: "",
 | 
						|
  showIndex: true,
 | 
						|
  closeable: false,
 | 
						|
  closeIcon: "clear",
 | 
						|
  transition: void 0,
 | 
						|
  beforeClose: void 0,
 | 
						|
  doubleScale: true,
 | 
						|
  overlayStyle: void 0,
 | 
						|
  overlayClass: void 0,
 | 
						|
  startPosition: 0,
 | 
						|
  swipeDuration: 300,
 | 
						|
  showIndicators: false,
 | 
						|
  closeOnPopstate: true,
 | 
						|
  closeOnClickOverlay: true,
 | 
						|
  closeIconPosition: "top-right"
 | 
						|
};
 | 
						|
function initInstance() {
 | 
						|
  ({
 | 
						|
    instance
 | 
						|
  } = mountComponent({
 | 
						|
    setup() {
 | 
						|
      const {
 | 
						|
        state,
 | 
						|
        toggle
 | 
						|
      } = usePopupState();
 | 
						|
      const onClosed = () => {
 | 
						|
        state.images = [];
 | 
						|
      };
 | 
						|
      return () => _createVNode(VanImagePreview, _mergeProps(state, {
 | 
						|
        "onClosed": onClosed,
 | 
						|
        "onUpdate:show": toggle
 | 
						|
      }), null);
 | 
						|
    }
 | 
						|
  }));
 | 
						|
}
 | 
						|
const showImagePreview = (options, startPosition = 0) => {
 | 
						|
  if (!inBrowser) {
 | 
						|
    return;
 | 
						|
  }
 | 
						|
  if (!instance) {
 | 
						|
    initInstance();
 | 
						|
  }
 | 
						|
  options = Array.isArray(options) ? {
 | 
						|
    images: options,
 | 
						|
    startPosition
 | 
						|
  } : options;
 | 
						|
  instance.open(extend({}, defaultConfig, options));
 | 
						|
  return instance;
 | 
						|
};
 | 
						|
export {
 | 
						|
  showImagePreview
 | 
						|
};
 |