@farris/ui-vue
Version:
Farris Vue, a Farris Design based Vue3 component library.
2 lines (1 loc) • 26 kB
JavaScript
(function(x,e){typeof exports=="object"&&typeof module<"u"?e(exports,require("vue"),require("../locale/index.umd.js"),require("../common/index.umd.js"),require("../property-panel/index.umd.js")):typeof define=="function"&&define.amd?define(["exports","vue","../locale/index.umd.js","../common/index.umd.js","../property-panel/index.umd.js"],e):(x=typeof globalThis<"u"?globalThis:x||self,e(x.modal={},x.Vue,x.locale,x.common,x.propertyPanel))})(this,function(x,e,A,J,fe){"use strict";var je=Object.defineProperty;var We=(x,e,A)=>e in x?je(x,e,{enumerable:!0,configurable:!0,writable:!0,value:A}):x[e]=A;var Y=(x,e,A)=>We(x,typeof e!="symbol"?e+"":e,A);const ae={allowClickMaskToClose:{type:Boolean,default:!1},beforeClose:{type:Function,default:()=>!0},class:{type:String,default:""},maskClass:{type:String,default:""},title:{type:String,default:""},width:{type:Number,default:500},height:{type:Number,default:320},buttons:{type:Array,default:[]},modelValue:{type:Boolean,default:!1},mask:{type:Boolean,default:!0},showHeader:{type:Boolean,default:!0},showButtons:{type:Boolean,default:!0},fitContent:{type:Boolean,default:!0},showCloseButton:{type:Boolean,default:!0},showMaxButton:{type:Boolean,default:!1},minHeight:{type:Number},maxHeight:{type:Number},minWidth:{type:Number},maxWidth:{type:Number},containment:{type:Object,default:null},resizeable:{type:Boolean,default:!1},draggable:{type:Boolean,default:!1},dragHandle:{type:Object,default:null},closedCallback:{type:Function,default:null},openedCallback:{type:Function,default:null},resizeHandle:{type:Function,default:null},render:{type:Function,default:null},acceptCallback:{type:Function,default:null},rejectCallback:{type:Function,default:null},enableEsc:{type:Boolean,default:!0},enableEnter:{type:Boolean,default:!1},dialogType:{type:String,default:""},src:{type:String,default:""},footerHeight:{type:Number,default:60},host:{type:Object,default:"body"},isMessager:{type:Boolean,default:!1},maximized:{type:Boolean,default:!1}};class z{constructor(a,n){this.x=a,this.y=n}static getTransformInfo(a){const o=window.getComputedStyle(a).getPropertyValue("transform").replace(/[^-\d,]/g,"").split(",");if(o.length>=6){const v=parseInt(o[4],10),g=parseInt(o[5],10);return{x:v,y:g}}return{x:0,y:0}}static fromEvent(a,n=null){if(this.isMouseEvent(a))return new z(a.clientX,a.clientY);if(n===null||a.changedTouches.length===1)return new z(a.changedTouches[0].clientX,a.changedTouches[0].clientY);for(let o=0;o<a.changedTouches.length;o++)if(a.changedTouches[o].target===n)return new z(a.changedTouches[o].clientX,a.changedTouches[o].clientY)}static isMouseEvent(a){return Object.prototype.toString.apply(a).indexOf("MouseEvent")===8}static isIPosition(a){return!!a&&"x"in a&&"y"in a}static getCurrent(a){const n=new z(0,0);if(window){const o=window.getComputedStyle(a);if(o){const v=parseInt(o.getPropertyValue("left"),10),g=parseInt(o.getPropertyValue("top"),10);n.x=isNaN(v)?0:v,n.y=isNaN(g)?0:g}return n}return null}static copy(a){return new z(0,0).set(a)}get value(){return{x:this.x,y:this.y}}add(a){return this.x+=a.x,this.y+=a.y,this}subtract(a){return this.x-=a.x,this.y-=a.y,this}multiply(a){this.x*=a,this.y*=a}divide(a){this.x/=a,this.y/=a}reset(){return this.x=0,this.y=0,this}set(a){return this.x=a.x,this.y=a.y,this}}class U{constructor(a,n){this.width=a,this.height=n}static getCurrent(a){const n=new U(0,0);if(window){const o=window.getComputedStyle(a);return o&&(n.width=parseInt(o.getPropertyValue("width"),10),n.height=parseInt(o.getPropertyValue("height"),10)),n}return null}static copy(a){return new U(0,0).set(a)}set(a){return this.width=a.width,this.height=a.height,this}}function le(t,a){const n=e.ref(),o=e.ref(),v=e.ref(),g=e.ref(),f=e.ref(),c=e.ref(),d=e.ref(),m=e.ref(),M=e.ref(),p=e.ref(),R=e.ref(),j=e.ref(t.resizeable),N=e.ref(),I=e.ref(t.draggable),P=e.ref(!1);function S(){const s=o.value||document.body,i=window.getComputedStyle(s);if(!i||!n.value)return;const w=z.getTransformInfo(n.value),b={};d.value&&(b.deltaL=n.value.offsetLeft-d.value.x,b.deltaT=n.value.offsetTop-d.value.y);const B=i.getPropertyValue("position");b.width=s.clientWidth,b.height=s.clientHeight,b.pr=parseInt(i.getPropertyValue("padding-right"),10),b.pb=parseInt(i.getPropertyValue("padding-bottom"),10),b.position=i.getPropertyValue("position"),B==="static"&&(s.style.position="relative"),b.translateX=w.x,b.translateY=w.y,p.value=b}function H(s){if(n.value){g.value=U.getCurrent(n.value),f.value=z.getCurrent(n.value),c.value=g.value?U.copy(g.value):null,d.value=f.value?z.copy(f.value):null,S();const i=s.target.getAttribute("type")||"";m.value={n:!!i.match(/n/),s:!!i.match(/s/),w:!!i.match(/w/),e:!!i.match(/e/)}}}function E(){var s,i,w,b;if(n.value){const B=n.value;m.value&&((m.value.n||m.value.s)&&((s=c.value)!=null&&s.height)&&(B.style.height=c.value.height+"px"),(m.value.w||m.value.e)&&((i=c.value)!=null&&i.width)&&(B.style.width=c.value.width+"px"),d.value&&((w=d.value)!=null&&w.x&&(B.style.left=d.value.x+"px"),(b=d.value)!=null&&b.y&&(B.style.top=d.value.y+"px")))}}function W(){const s=t.minHeight?t.minHeight:1,i=t.minWidth?t.minWidth:1;c.value&&d.value&&m.value&&g.value&&(c.value.height<s&&(c.value.height=s,m.value.n&&f.value&&(d.value.y=f.value.y+(g.value.height-s))),c.value.width<i&&(c.value.width=i,m.value.w&&f.value&&(d.value.x=f.value.x+(g.value.width-i))),t.maxHeight&&c.value.height>t.maxHeight&&(c.value.height=t.maxHeight,f.value&&m.value.n&&(d.value.y=f.value.y+(g.value.height-t.maxHeight))),t.maxWidth&&c.value.width>t.maxWidth&&(c.value.width=t.maxWidth,m.value.w&&f.value&&(d.value.x=f.value.x+(g.value.width-t.maxWidth))))}function F(){if(o.value){const s=p.value;if(d.value&&c.value&&m.value&&g.value){const i=s.width-s.pr-s.deltaL-s.translateX-d.value.x,w=s.height-s.pb-s.deltaT-s.translateY-d.value.y;m.value.n&&d.value.y+s.translateY<0&&f.value&&(d.value.y=-s.translateY,c.value.height=g.value.height+f.value.y+s.translateY),m.value.w&&d.value.x+s.translateX<0&&f.value&&(d.value.x=-s.translateX,c.value.width=g.value.width+f.value.x+s.translateX),c.value.width>i&&(c.value.width=i),c.value.height>w&&(c.value.height=w)}}}function L(s){if(!v.value||!g.value||!f.value||!m.value)return;s.subtract(v.value);const i=s.x,w=s.y;m.value.n?(d.value.y=f.value.y+w,c.value.height=g.value.height-w):m.value.s&&(c.value.height=g.value.height+w),m.value.e?c.value.width=g.value.width+i:m.value.w&&(c.value.width=g.value.width-i,d.value.x=f.value.x+i),F(),W(),E()}function u(s){if(!M.value)return;const i=z.fromEvent(s);i&&L(i)}function r(){if(n.value){const{width:s,height:i,x:w,y:b}=n.value.getBoundingClientRect(),B=z.getTransformInfo(n.value);return{size:{width:s,height:i},position:{x:w-B.x,y:b-B.y}}}return null}function y(s){if(n.value){const i=r();R.value=i}v.value=void 0,g.value=null,f.value=null,c.value=null,d.value=null,m.value=null,M.value=null,document.removeEventListener("mousemove",u),document.removeEventListener("mouseup",y)}function T(){document.addEventListener("mousemove",u),document.addEventListener("mouseup",y)}function C(s){s instanceof MouseEvent&&s.button===2||I.value&&(document.body.click(),s.stopPropagation(),s.preventDefault(),v.value=z.fromEvent(s),M.value=s.target,H(s),T())}function O(s){return n.value=s,j.value&&e.createVNode(e.Fragment,null,[e.createVNode("div",{class:"fv-resizable-handle fv-resizable-n",type:"n",onMousedown:i=>C(i)},null),e.createVNode("div",{class:"fv-resizable-handle fv-resizable-e",type:"e",onMousedown:i=>C(i)},null),e.createVNode("div",{class:"fv-resizable-handle fv-resizable-s",type:"s",onMousedown:i=>C(i)},null),e.createVNode("div",{class:"fv-resizable-handle fv-resizable-w",type:"w",onMousedown:i=>C(i)},null),e.createVNode("div",{class:"fv-resizable-handle fv-resizable-ne",type:"ne",onMousedown:i=>C(i)},null),e.createVNode("div",{class:"fv-resizable-handle fv-resizable-se fv-resizable-diagonal",type:"se",onMousedown:i=>C(i)},null),e.createVNode("div",{class:"fv-resizable-handle fv-resizable-sw",type:"sw",onMousedown:i=>C(i)},null),e.createVNode("div",{class:"fv-resizable-handle fv-resizable-nw",type:"nw",onMousedown:i=>C(i)},null)])}function q(s=!0){document.body.click();const i=o.value||document.body,w=U.getCurrent(i),b=n.value;s&&b&&(N.value=r(),N.value.transform=b.style.transform),w&&b&&(c.value=w,c.value.height-=14,c.value.width-=14,b.style.height=c.value.height+"px",b.style.width=c.value.width+"px",b.style.left="7px",b.style.top="7px",b.style.transform="",R.value={size:c.value,position:{x:0,y:0}},I.value=!1,P.value=!0)}function Z(){var s,i;if(document.body.click(),N.value){const w={width:N.value.size.width||0,height:N.value.size.height||0},b={x:(window.innerWidth-w.width)/2,y:(window.innerHeight-w.height)/2};(s=c.value)==null||s.set(w),(i=d.value)==null||i.set(b);const B=n.value;B.style.height=w.height+"px",B.style.width=w.width+"px",B.style.left=`${b.x}px`,B.style.top=`${b.y}px`,B.style.transform="",R.value={size:w,position:b},I.value=t.draggable,P.value=!1}}function _(){if(n.value){const s=U.getCurrent(n.value);if(s){const{width:i,height:w}=s;n.value.style.left=`${(window.innerWidth-i)/2}px`,n.value.style.top=`${(window.innerHeight-w)/2}px`,n.value.style.transform=""}}}function $(){const s=()=>{P.value?q(!1):_(),document.body.click()};return window.addEventListener("resize",s),()=>{window.removeEventListener("resize",s)}}const G=$();return{renderResizeBar:O,boundingElement:o,resizedEventParam:R,maximize:q,restore:Z,allowDrag:I,isMaximized:P,unWindowResizeHandle:G,moveToCenter:_}}function ne(t,a,n){const o=e.ref(),v=e.ref(t.draggable),g=e.ref(t.lockAxis),f=e.ref(),c=e.ref(),d=e.ref(!1),m=e.ref(new z(0,0)),M=e.ref(new z(0,0)),p=e.ref(new z(0,0)),R=e.ref(new z(0,0));e.watch(()=>n.value,u=>{f.value.style.cursor=u?"move":"default"});function j(u,r){if(r.tagName==="BUTTON")return!1;if(r===u)return!0;for(const y in r.children)if(Object.prototype.hasOwnProperty.call(r.children,y)&&j(u,r.children[y]))return!0;return!1}function N(){var T,C;let u=p.value.x+M.value.x,r=p.value.y+M.value.y;g.value==="x"?(u=((T=m.value)==null?void 0:T.x)||0,p.value.x=0):g.value==="y"&&(r=((C=m.value)==null?void 0:C.y)||0,p.value.y=0);const y=`translate3d(${Math.round(u)}px, ${Math.round(r)}px, 0px)`;o.value&&(o.value.style.transform=y),R.value.x=u,R.value.y=r}function I(){if(!c.value||!o.value)return null;const u=c.value.getBoundingClientRect(),r=o.value.getBoundingClientRect(),y={top:u.top<r.top,right:u.right>r.right,bottom:u.bottom>r.bottom,left:u.left<r.left};return y.top||(p.value.y-=r.top-u.top),y.bottom||(p.value.y-=r.bottom-u.bottom),y.right||(p.value.x-=r.right-u.right),y.left||(p.value.x-=r.left-u.left),N(),y}function P(u){u&&(m.value&&u.subtract(m.value),p.value.set(u),N(),I())}function S(u){d.value&&v.value&&(u.stopPropagation(),u.preventDefault(),P(z.fromEvent(u,f.value)))}function H(){var u;d.value&&(d.value=!1,M.value.add(p.value),p.value.reset(),(u=o.value)==null||u.classList.remove("ng-dragging"),a.emit("stopMove"),document.removeEventListener("mousemove",S),document.removeEventListener("mouseup",H))}function E(){!d.value&&f.value&&(d.value=!0,f.value.classList.add("ng-dragging"),document.addEventListener("mousemove",S),document.addEventListener("mouseup",H))}function W(){if(o.value){const u=z.getTransformInfo(o.value);M.value.set(u);return}M.value.reset()}function F(u){if(!n.value||u instanceof MouseEvent&&u.button===2)return;const r=u.target||u.srcElement;f.value!==void 0&&r&&!j(r,f.value)||v.value!==!1&&(document.body.click(),u.stopPropagation(),u.preventDefault(),m.value=z.fromEvent(u,o.value),W(),E())}function L(u,r,y){if(v.value&&r){if(u)f.value=u;else if(t.dragHandle){if(t.dragHandle instanceof HTMLElement)f.value=t.dragHandle;else if(typeof t.dragHandle=="string"){const T=r.querySelector(t.dragHandle);T&&(f.value=T)}}o.value=r,c.value=y,f.value?(f.value.classList.add("ng-draggable"),f.value.addEventListener("mousedown",F)):v.value=!1}}return{registerDraggle:L,resetTranslate:W}}function oe(t,a){if(t){const n=o=>{o.key.toLowerCase()===t.toLowerCase()&&a({event:o,key:t})};return document.addEventListener("keydown",n),()=>{document.removeEventListener("keydown",n)}}}function he(t,a){const n=e.ref(t.enableEsc);let o=null;return n.value?(o=oe("Escape",v=>{a.emit("esc",{event:v.event,type:"esc"})}),{remove:o}):null}function ve(t,a){const n=e.ref(t.enableEnter);let o=null;return n.value?(o=oe("Enter",v=>{a.emit("enter",{event:v.event,type:"enter"})}),{remove:o}):null}const X=e.defineComponent({name:"FModal",props:ae,emits:["update:modelValue","accept","cancel","closed","resize","esc","enter","stopMove"],setup(t,a){const n=e.ref(t.width||300),o=e.ref(t.height||200),v=e.ref(t.modelValue),g=e.ref(""),f=e.ref(t.class),c=e.ref(t.fitContent),d=e.ref(t.showHeader),m=e.ref(""),M=e.ref(t.showCloseButton),p=e.ref(t.showMaxButton),R=e.ref(!1),j=e.ref(t.dialogType),N=e.ref(t.src),I=e.ref(""),P=e.ref(t.showButtons),S=e.ref(t.title),H=e.ref(t.containment||null),E=e.ref();S.value==="错误提示"&&(S.value=A.LocaleService.getLocaleValue("messageBox.errorTitle"));const W=e.ref(!1);function F(l,h){const k=h?"accept":"cancel";Promise.resolve().then(()=>{var V;return(V=t.beforeClose)==null?void 0:V.call(t,{closeType:k})}).then(V=>{V&&(v.value=!1,a.emit("update:modelValue",!1),h!=null&&a.emit(h?"accept":"cancel"),a.emit("closed",l))})}const L=[{name:"cancel",text:A.LocaleService.getLocaleValue("messageBox.cancel")||"取消",class:"btn btn-secondary",handle:l=>{F(l,!1)}},{name:"accept",text:A.LocaleService.getLocaleValue("messageBox.ok")||"确定",class:"btn btn-primary",handle:l=>{F(l,!0)}}],u=e.ref(t.buttons&&t.buttons.length?t.buttons:L),r=e.computed(()=>!!m.value),y=e.computed(()=>!!P.value&&!!u.value),T=e.ref(),C=e.ref(),O=e.ref(t.maximized||!1),{renderResizeBar:q,maximize:Z,restore:_,boundingElement:$,resizedEventParam:G,allowDrag:s,unWindowResizeHandle:i,moveToCenter:w}=le(t),{registerDraggle:b}=ne(t,a,s);function B(){return!!document.querySelectorAll(".farris-modal").length&&document.body.classList.contains("modal-open")}function be(){const l=document.querySelectorAll(".farris-modal").length;(!l||l-1<=0)&&document.body.classList.remove("modal-open"),E.value&&E.value.classList.remove("show")}e.watch(()=>t.title,(l,h)=>{l!==h&&(S.value=l)}),e.watch(()=>t.modelValue,(l,h)=>{l!==h&&(v.value=l,v.value&&t.draggable&&e.nextTick(()=>{C.value&&!H.value&&(H.value=C.value.parentElement,$.value=H.value,b(T.value,C.value,$.value),w())}),l||(H.value&&(H.value=null),be())),v.value?W.value=B():(O.value=!1,s.value=t.draggable)}),e.watch(()=>t.showHeader,(l,h)=>{l!==h&&(d.value=l)}),e.watch(()=>t.showButtons,(l,h)=>{l!==h&&(P.value=l)}),e.watch(()=>G.value,(l,h)=>{const k=l||{},V=h||{};JSON.stringify(k)!==JSON.stringify(V)&&a.emit("resize",{newSize:l,oldSize:h,isMaximized:O.value})}),e.watch([()=>t.width,()=>t.height],(l,h)=>{(l[0]!==h[0]||l[1]!==h[1])&&(n.value=l[0]||500,o.value=l[1]||600)}),e.watch(()=>t.class,(l,h)=>{f.value=l});const K=e.computed(()=>(v.value&&document.body.classList.add("modal-open"),v.value)),we=e.computed(()=>{var k;const l={modal:!0,"farris-modal":!0,fade:!0};l["f-modal-fitContent"]=!!c.value,l.show=!!K.value;const h=(k=t.maskClass)==null?void 0:k.split(" ");return h==null||h.reduce((V,D)=>(V[D]=!0,V),l),l}),pe=e.computed(()=>{var k;const l={"modal-dialog":!0},h=(k=f.value)==null?void 0:k.split(" ");return h==null||h.reduce((V,D)=>(V[D]=!0,V),l),l}),ue=()=>J.isMobilePhone()&&!t.isMessager,xe=e.computed(()=>{const l=document.documentElement.clientWidth,h=document.documentElement.clientHeight;if(O.value)return{position:"fixed",top:"0px",left:"0px",width:"100vw",height:"100vh",margin:"0"};const k=Math.min(n.value,l),V=c.value?"auto":`${Math.min(o.value,h-10)}px`,D={position:"absolute",top:`${(window.innerHeight-parseInt(V==="auto"?"0":V))/2}px`,left:`${(window.innerWidth-k)/2}px`,width:`${k}px`,height:V};return ue()&&(D.top="0px",D.left="0px",D.width=`${window.innerWidth}px`,D.height=`${window.innerHeight}px`),t.mask||(D.pointerEvents="auto"),D}),ce=e.ref(J.getMaxZIndex()||1050),Ce=e.computed(()=>{const l={display:"block",overflow:"hidden"};return t.mask||(l.pointerEvents="none",l.backgroundColor="transparent"),W.value&&(l.backgroundColor="transparent"),l.zIndex=ce.value,l}),Me=e.computed(()=>({"modal-content":!0,"modal-content-has-header":d.value,"is-mobile":ue()})),Ee=e.computed(()=>{const l={display:d.value?"":"none"};return l["pointer-events"]=s.value?"auto":"none",l}),ze=e.computed(()=>({"f-icon":!0,modal_maximize:!0,modalrevert:O.value})),ke=e.computed(()=>({"modal-body":!0,"f-utils-flex-column":j.value==="iframe","f-utils-fill":!0}));function Be(){return{height:`${t.footerHeight||60}px`}}const He=e.computed(()=>{const l={textAlgin:I.value},h=Be();return Object.assign(l,h)});function Q(l){if(l==null||l.stopPropagation(),O.value){O.value=!1,_();return}Z(),O.value=!0}async function Te(l,h){l.handle&&await l.handle(h,l)&&a.emit("closed",h)}function Ve(l){l.width&&(n.value=l.width),l.height&&(o.value=l.height),l.buttons&&(u.value=l.buttons),l.title&&(S.value=l.title)}let ee=null,te=null;e.onBeforeMount(()=>{W.value=B()}),e.onMounted(()=>{C.value&&!H.value&&(H.value=C.value.parentElement,$.value=H.value,b(T.value,C.value,$.value)),K.value&&document.body.classList.add("modal-open"),ee=he(t,a),te=ve(t,a)}),e.onUnmounted(()=>{i&&i(),ee&&ee.remove(),te&&te.remove()}),a.expose({modalElementRef:C,updateModalOptions:Ve,close:F,maxDialog:Q,isMaximized:O,disableButtons:(l,h=!0)=>{u.value.forEach(k=>{k.name&&l.includes(k.name)&&(k.disabled=h)})}});function Ne(){return e.createVNode("ul",null,[R.value&&e.createVNode("li",{class:"f-btn-icon f-bare"},[e.createVNode("span",{class:"f-icon modal_minimize"},null)]),p.value&&e.createVNode("li",{onClick:Q,class:"f-btn-icon f-bare",style:"pointer-events: auto;"},[e.createVNode("span",{class:ze.value},null)]),M.value&&e.createVNode("li",{class:"f-btn-icon f-bare",onClick:l=>F(l,!1),style:"pointer-events: auto;"},[e.createVNode("span",{class:"f-icon modal_close"},null)])])}function Se(){return e.createVNode("div",{class:"modal-footer",style:He.value},[u.value&&u.value.map(l=>{const h=e.ref(l.disabled);return e.createVNode("button",{name:l.name,style:l.styles,type:"button",disabled:h.value,class:l.class+(l.iconClass?" btn-icontext":""),onClick:k=>{Te(l,k)}},[!!l.iconClass&&e.createVNode("i",{class:l.iconClass},null),l.text])})])}function de(l){p.value&&Q()}function Re(){return e.createVNode(e.Fragment,null,[O.value&&e.createVNode("div",{class:"modal-header",style:"position: absolute;background: transparent;height: 45px;width: 100%;",onDblclick:l=>de()},null),e.createVNode("div",{ref:T,class:"modal-header",style:Ee.value,onDblclick:l=>de()},[a.slots.headerTemplate?a.slots.headerTemplate():e.createVNode("div",{class:"modal-title"},[r.value&&e.createVNode("span",{class:m.value,style:"margin-right: 8px"},null),e.createVNode("span",{class:"modal-title-label"},[S.value])]),e.createVNode("div",{class:"actions"},[Ne()])])])}function Pe(){return a.slots.footerTemplate?a.slots.footerTemplate():y.value&&Se()}function Ie(l){if(l.stopPropagation(),t.allowClickMaskToClose){if(l.target!==E.value)return;F(l,!1)}}function Le(){var l,h;return e.createVNode("div",{id:g.value,class:pe.value,style:xe.value,ref:C},[e.createVNode("div",{class:Me.value},[d.value&&Re(),e.createVNode("div",{class:ke.value},[(h=(l=a.slots).default)==null?void 0:h.call(l),j.value==="iframe"&&e.createVNode("iframe",{title:g.value,class:"f-utils-fill",width:"100%",frameborder:"0",src:N.value},null)]),Pe()]),!c.value&&C.value&&!O.value&&q(C.value)])}function Oe(l){return l||"body"}return e.watchEffect(()=>{K.value&&(ce.value=J.getMaxZIndex()||1050)}),()=>e.createVNode(e.Teleport,{to:Oe(t.host)},{default:()=>[K.value&&e.createVNode(e.Transition,{name:"fade",appear:!0},{default:()=>[e.createVNode("div",{ref:E,class:we.value,style:Ce.value,onClick:Ie},[Le()])]})]})}});function se(t){if(t.content&&t.content.render)return t.content.render;if(t.render&&typeof t.render=="function")return t.render}function me(t){const a=document.createElement("div");a.style.display="contents";const n=e.createApp({setup(o,v){e.onUnmounted(()=>{document.body.removeChild(a)});const g=e.ref(),f=e.ref(t.class||""),c=e.ref(!!t.showButtons),d=e.ref(!!t.showHeader),m=e.ref(t.showCloseButton==null?!0:t.showCloseButton),M=e.ref(!0),p=e.ref(t.title||""),R=t.acceptCallback||(()=>{}),j=t.rejectCallback||(()=>{}),N=t.closedCallback||(E=>{}),I=t.resizeHandle||(E=>{}),P=t.stopMoveHandle||(E=>{}),S=se(t),H=E=>{M.value=!1,n.unmount(),N(E)};return e.onMounted(()=>{}),v.expose({modalRef:g}),()=>e.createVNode(X,{ref:g,class:f.value,modelValue:M.value,"onUpdate:modelValue":E=>M.value=E,title:p.value,width:t.width,height:t.height,buttons:t.buttons,"show-header":d.value,"show-buttons":c.value,"show-close-button":m.value,"show-max-button":!1,onAccept:R,onCancel:j,fitContent:t.fitContent==null?!0:t.fitContent,onClosed:H,onResize:I,onStopMove:P},{default:()=>[S&&S(n)]})}});return document.body.appendChild(a),n.use(A.LocaleService.i18n),n.mount(a),n}class ie{constructor(a){Y(this,"appContext",null);Y(this,"modalRef",e.ref());Y(this,"activeModalIndex",e.ref(0));Y(this,"modalRefs",{});Y(this,"isUseEscCloseModal",e.ref(!1));this.app=a,this.appContext=a?a._context:null}getCurrentModal(){return this.modalRefs[this.activeModalIndex.value]}adaptToWindow(a,n){const{width:o,height:v}={width:window.innerWidth,height:window.innerHeight};return o<a&&(a=o-14),v<n&&(n=v-14),{width:a,height:n}}static show(a){const n=Object.assign({title:"",showButtons:!0,showHeader:!0},a);return me(n)}close(a){var n,o;a?(o=a.value)==null||o.close():(n=this.getCurrentModal())==null||n.close()}open(a){const n=document.createDocumentFragment();a.showMaxButton&&a.fitContent&&(a.showMaxButton=!1);const o=e.shallowRef(Object.assign({title:"",showButtons:!0,showHeader:!0,maximized:!1},a)),v=e.ref(!0),g=o.value.acceptCallback||(()=>{}),f=o.value.rejectCallback||(()=>{}),c=o.value.closedCallback||((r,y)=>{}),d=o.value.openedCallback||(r=>{}),m=o.value.resizeHandle||(r=>{}),M=a.stopMoveHandle||(r=>{});let p;const R=se(o.value),j=r=>{var T;v.value=!1;const y=(T=r==null?void 0:r.target)==null?void 0:T.classList.contains("modal_close");c(r,this.isUseEscCloseModal.value?"esc":y?"icon":"button")},N=r=>{j(r),p&&e.nextTick(()=>{if(this.modalRefs[this.activeModalIndex.value]&&delete this.modalRefs[this.activeModalIndex.value],e.render(null,n),p=null,this.modalRef.value=null,this.modalRefs){const y=Object.keys(this.modalRefs).map(T=>Number(T));y.length>0?this.activeModalIndex.value=Math.max(...y):this.activeModalIndex.value=0}this.isUseEscCloseModal.value=!1})},I=r=>{var y;this.isUseEscCloseModal.value=!0,(y=this.getCurrentModal())==null||y.close(r==null?void 0:r.event)},{width:P,height:S}=o.value,H=this.adaptToWindow(P||500,S||320);Object.assign(o.value,H);const E=e.ref(),W=()=>e.createVNode(X,e.mergeProps({ref:E,modelValue:v.value,"onUpdate:modelValue":r=>v.value=r},o.value,{isMessager:o.value.class&&o.value.class.indexOf("modal-message")>-1,onAccept:g,onCancel:f,onClosed:N,onResize:m,onEsc:I,onStopMove:M,maximized:o.value.maximized}),{default:()=>[R&&R(this.app)]});p=(r=>{const y=e.h(W,r);return y.appContext=this.appContext,e.render(y,n),y})({...o.value}),this.activeModalIndex.value++;const L=this.activeModalIndex.value;this.modalRefs[L]=E.value;const u=r=>{o.value={...o.value,...r},p&&e.render(e.cloneVNode(p,{...o}),n)};return e.nextTick(()=>{this.modalRefs[L]=E.value,this.modalRef.value=E.value,d(new Event("opened"))}),{update:u,destroy:N,modalRef:this.modalRef,close:()=>{this.modalRefs[L]&&this.modalRefs[L].close()},disableButtons:(r,y=!0)=>{this.modalRefs[L]&&this.modalRefs[L].disableButtons(r,y)}}}}const ge=[{label:"beforeClose",name:"关闭前事件"},{label:"onAccept",name:"确定事件"},{label:"onCancel",name:"取消事件"}];class ye extends fe.BaseControlProperty{constructor(n,o){super(n,o);Y(this,"numberEditor",{type:"number-spinner",useThousands:!1})}getPropertyConfig(n){const o=this.getEventPropConfig(n);return this.propertyConfig.categories.dialog=this.getDialogPropertyConfig(n),this.propertyConfig.categories.eventsEditor=o,this.propertyConfig}getDialogPropertyConfig(n){return{description:"窗口尺寸配置",title:"窗口",parentPropertyID:"dialog",properties:{title:{description:"标题",title:"标题",type:"string",visible:!0},width:{description:"窗口宽度,单位:px,最小值:300px,最大值:3000px",title:"宽度",type:"number",editor:{...this.numberEditor,min:300,max:3e3}},height:{description:"窗口高度,单位:px,最小值:200px,最大值:2000px",title:"高度",type:"number",editor:{...this.numberEditor,min:200,max:2e3}},resizeable:{description:"允许鼠标拖拽窗口边缘调整尺寸",title:"允许调整窗口尺寸",type:"boolean",visible:!0},enableEsc:{description:"允许ESC关闭",title:"允许ESC关闭",type:"boolean",visible:!1},showMaxButton:{description:"显示最大化按钮",title:"显示最大化按钮",type:"boolean",visible:!0},showCloseButton:{description:"显示关闭按钮",title:"显示关闭按钮",type:"boolean",visible:!0},showButtons:{description:"是否显示底部按钮组",title:"显示底部按钮组",type:"boolean",refreshPanelAfterChanged:!0,visible:!0}}}}getEventPropConfig(n){const o=this,v=ge,g=o.eventsEditorUtils.formProperties(n,o.viewModelId,v);return{title:"事件",hideTitle:!0,properties:o.createBaseEventProperty(g),refreshPanelAfterChanged:!0,tabId:"commands",tabName:"交互",setPropertyRelates(c,d){const m=c.propertyValue;delete n[o.viewModelId],m&&o.eventsEditorUtils.saveRelatedParameters(n,o.viewModelId,m.events,m),v.forEach(M=>{d[M.label]=n[M.label]})}}}}const re=Symbol("FModalService");X.install=t=>{t.component(X.name,X);const a=new ie(t);t.provide(re,a),t.provide("FModalService",a)},x.FModal=X,x.FModalService=ie,x.F_MODAL_SERVICE_TOKEN=re,x.ModalProperty=ye,x.default=X,x.modalProps=ae,x.useDraggable=ne,x.useResizeable=le,Object.defineProperties(x,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});