@gx-design-vue/image 0.2.0-alpha.1 → 0.2.0-alpha.3

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 (69) hide show
  1. package/dist/Image.d.ts +6 -0
  2. package/dist/Image.js +322 -0
  3. package/dist/ImagePreview.d.ts +6 -0
  4. package/dist/ImagePreview.js +593 -0
  5. package/dist/g-image.esm.js +1590 -0
  6. package/dist/g-image.js +1 -0
  7. package/dist/hooks/useImageBoundary.d.ts +15 -0
  8. package/dist/hooks/useImageBoundary.js +24 -0
  9. package/dist/hooks/useImagePreview.d.ts +23 -0
  10. package/dist/hooks/useImagePreview.js +54 -0
  11. package/dist/hooks/useImageTransform.d.ts +23 -0
  12. package/dist/hooks/useImageTransform.js +92 -0
  13. package/dist/hooks/useMouseEvent.d.ts +22 -0
  14. package/dist/hooks/useMouseEvent.js +71 -0
  15. package/dist/hooks/useTouchEvent.d.ts +23 -0
  16. package/dist/{ImagePreview/hooks → hooks}/useTouchEvent.js +31 -32
  17. package/dist/index.d.ts +4 -5
  18. package/dist/index.js +3 -6
  19. package/dist/interface.d.ts +169 -0
  20. package/dist/interface.js +1 -0
  21. package/dist/style/index.d.ts +7 -0
  22. package/dist/{style.js → style/index.js} +19 -26
  23. package/dist/style/preview.d.ts +14 -0
  24. package/dist/style/preview.js +182 -0
  25. package/dist/theme/augment.d.ts +10 -0
  26. package/dist/theme/augment.js +1 -0
  27. package/dist/theme/interface/components.d.ts +10 -0
  28. package/dist/theme/interface/components.js +1 -0
  29. package/package.json +8 -7
  30. package/dist/GImage.d.ts +0 -162
  31. package/dist/GImage.js +0 -221
  32. package/dist/ImagePreview/Operations.d.ts +0 -83
  33. package/dist/ImagePreview/Operations.js +0 -71
  34. package/dist/ImagePreview/hooks/getFixScaleEleTransPosition.d.ts +0 -19
  35. package/dist/ImagePreview/hooks/getFixScaleEleTransPosition.js +0 -40
  36. package/dist/ImagePreview/hooks/useImageTransform.d.ts +0 -39
  37. package/dist/ImagePreview/hooks/useImageTransform.js +0 -105
  38. package/dist/ImagePreview/hooks/useMouseEvent.d.ts +0 -14
  39. package/dist/ImagePreview/hooks/useMouseEvent.js +0 -100
  40. package/dist/ImagePreview/hooks/useTouchEvent.d.ts +0 -12
  41. package/dist/ImagePreview/index.d.ts +0 -162
  42. package/dist/ImagePreview/index.js +0 -303
  43. package/dist/ImagePreview/props.d.ts +0 -88
  44. package/dist/ImagePreview/props.js +0 -53
  45. package/dist/ImagePreview/style.d.ts +0 -30
  46. package/dist/ImagePreview/style.js +0 -286
  47. package/dist/ImagePreview/typings.d.ts +0 -19
  48. package/dist/ImagePreview/typings.js +0 -1
  49. package/dist/ImagePreview/utils/KeyCode.d.ts +0 -438
  50. package/dist/ImagePreview/utils/KeyCode.js +0 -173
  51. package/dist/ImagePreview/utils/addEventListener.d.ts +0 -6
  52. package/dist/ImagePreview/utils/addEventListener.js +0 -22
  53. package/dist/ImagePreview/utils/util.d.ts +0 -7
  54. package/dist/ImagePreview/utils/util.js +0 -8
  55. package/dist/hooks/useFrameSetState.d.ts +0 -5
  56. package/dist/hooks/useFrameSetState.js +0 -33
  57. package/dist/image.esm.js +0 -2374
  58. package/dist/image.js +0 -1
  59. package/dist/props.d.ts +0 -84
  60. package/dist/props.js +0 -66
  61. package/dist/slots.d.ts +0 -6
  62. package/dist/slots.js +0 -21
  63. package/dist/style.d.ts +0 -9
  64. package/dist/typings.d.ts +0 -6
  65. package/dist/typings.js +0 -1
  66. package/dist/utils/aria.d.ts +0 -15
  67. package/dist/utils/aria.js +0 -16
  68. package/dist/utils/util.d.ts +0 -4
  69. package/dist/utils/util.js +0 -8
@@ -0,0 +1 @@
1
+ (function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports,require(`vue`),require(`@antdv-next/icons`),require(`@gx-design-vue/pro-provider`),require(`antdv-next/config-provider/context`),require(`antdv-next/config-provider/hooks/useCSSVarCls`),require(`antdv-next`)):typeof define==`function`&&define.amd?define([`exports`,`vue`,`@antdv-next/icons`,`@gx-design-vue/pro-provider`,`antdv-next/config-provider/context`,`antdv-next/config-provider/hooks/useCSSVarCls`,`antdv-next`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e.GImage={},e.Vue,e._antdv_next_icons,e._gx_design_vue_pro_provider,e.antdv_next_config_provider_context,e.antdv_next_config_provider_hooks_useCSSVarCls,e.antdv_next))})(this,function(e,t,n,r,i,a,o){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var s=Object.create,c=Object.defineProperty,l=Object.getOwnPropertyDescriptor,u=Object.getOwnPropertyNames,d=Object.getPrototypeOf,f=Object.prototype.hasOwnProperty,p=(e,t,n,r)=>{if(t&&typeof t==`object`||typeof t==`function`)for(var i=u(t),a=0,o=i.length,s;a<o;a++)s=i[a],!f.call(e,s)&&s!==n&&c(e,s,{get:(e=>t[e]).bind(null,s),enumerable:!(r=l(t,s))||r.enumerable});return e};a=((e,t,n)=>(n=e==null?{}:s(d(e)),p(t||!e||!e.__esModule?c(n,`default`,{value:e,enumerable:!0}):n,e)))(a,1);function m(e,t){return Object.prototype.toString.call(e)===`[object ${t}]`}function h(e){return typeof e==`boolean`}function g(e){return typeof e==`number`}function _(e){return Array.isArray===void 0?Object.prototype.toString.call(e)===`[object Array]`:Array.isArray(e)}function v(e){return e!==null&&m(e,`Object`)}function y(e){return typeof e==`string`}var b=typeof window>`u`,x=e=>setTimeout(e,16),S=e=>clearTimeout(e);typeof window<`u`&&`requestAnimationFrame`in window&&(x=e=>window.requestAnimationFrame(e),S=e=>window.cancelAnimationFrame(e));var C=0,w=new Map;function T(e){w.delete(e)}function E(e,t=1){C+=1;let n=C;function r(t){if(t===0)T(n),e();else{let e=x(()=>{r(t-1)});w.set(n,e)}}return r(t),n}E.cancel=e=>{let t=w.get(e);return T(t),S(t)};function D(e){return e.replace(/[-_](.)/g,(e,t)=>t.toUpperCase())}function O(e,t){if(b||!e||!t)return``;t=D(t),t===`float`&&(t=`cssFloat`);try{let n=e.style[t];if(n)return n;let r=document?.defaultView?.getComputedStyle(e,``);return r?r[t]:``}catch{return e.style[t]}}function k(e,t){if(!b)return(t==null?O(e,`overflow`):t?O(e,`overflow-y`):O(e,`overflow-x`)).match(/(scroll|auto|overlay)/)}function ee(e,t){if(b)return;let n=e;for(;n;){if([window,document,document.documentElement].includes(n))return window;if(k(n,t))return n;n=n.parentNode}return n}function A(...e){let t=[];for(let n=0;n<e.length;n++){let r=e[n];if(r){if(y(r))t.push(r);else if(_(r))for(let e=0;e<r.length;e++){let n=A(r[e]);n&&t.push(n)}else if(v(r))for(let e in r)r[e]&&t.push(e)}}return t.filter(e=>e).join(` `)}function j({vnode:e,defaultVNode:t},...n){return e===!1?null:typeof e==`function`?e?.(...n):e||t}function M({value:e,slotsValue:n,defaultVNode:r,render:i}){return e===!1?!1:e===!0?n??r:v(e)&&i?(0,t.isVNode)(e)?e:n:e||n}function N(e,...t){let{slots:n,key:r=`default`,render:i,props:a,defaultChildren:o}=e,s=a[r],c=n?.[r],l=typeof o==`function`?o?.():o,u=M({value:s,slotsValue:c,defaultVNode:l,render:i});return u===!1?!1:i?j({vnode:u,defaultVNode:l},...t):u}function P(e,...t){let{slots:n,key:r=`default`,props:i,defaultChildren:a}=e,o=i[r],s=n?.[r]?.(...t),c=typeof a==`function`?a?.():a,l=M({value:o,slotsValue:s,defaultVNode:c,render:!0});return l===!1?!1:j({vnode:l,defaultVNode:c},...t)}function te(e,...t){let{slots:n,props:r,keys:i,render:a,defaultVNodes:o}=e,s={};return i.forEach((e,i)=>{let c=o?o[i]:null,l=a?P({slots:n,props:r,key:e,defaultChildren:c},...t):N({slots:n,props:r,key:e,render:!1,defaultChildren:c},...t);(h(l)||l)&&(s[e]=l)}),s}function F(e,n){return(0,t.getCurrentScope)()?((0,t.onScopeDispose)(e,n),!0):!1}var I=new WeakMap,L=(...e)=>{let n=e[0],r=(0,t.getCurrentInstance)()?.proxy??(0,t.getCurrentScope)();if(r==null&&!(0,t.hasInjectionContext)())throw Error(`injectLocal must be called in setup`);return r&&I.has(r)&&n in I.get(r)?I.get(r)[n]:(0,t.inject)(...e)},R=typeof window<`u`&&typeof document<`u`;typeof WorkerGlobalScope<`u`&&globalThis instanceof WorkerGlobalScope;var z=Object.prototype.toString,B=e=>z.call(e)===`[object Object]`,V=()=>{},H=U();function U(){var e,t;return R&&!!(!((e=window)==null||(e=e.navigator)==null)&&e.userAgent)&&(/iP(?:ad|hone|od)/.test(window.navigator.userAgent)||((t=window)==null||(t=t.navigator)==null?void 0:t.maxTouchPoints)>2&&/iPad|Macintosh/.test(window?.navigator.userAgent))}function ne(...e){if(e.length!==1)return(0,t.toRef)(...e);let n=e[0];return typeof n==`function`?(0,t.readonly)((0,t.customRef)(()=>({get:n,set:V}))):(0,t.ref)(n)}function re(e,t){function n(...n){return new Promise((r,i)=>{Promise.resolve(e(()=>t.apply(this,n),{fn:t,thisArg:this,args:n})).then(r).catch(i)})}return n}function ie(...e){let n=0,r,i=!0,a=V,o,s,c,l,u;!(0,t.isRef)(e[0])&&typeof e[0]==`object`?{delay:s,trailing:c=!0,leading:l=!0,rejectOnCancel:u=!1}=e[0]:[s,c=!0,l=!0,u=!1]=e;let d=()=>{r&&(clearTimeout(r),r=void 0,a(),a=V)};return e=>{let f=(0,t.toValue)(s),p=Date.now()-n,m=()=>o=e();return d(),f<=0?(n=Date.now(),m()):(p>f?(n=Date.now(),(l||!i)&&m()):c&&(o=new Promise((e,t)=>{a=u?t:e,r=setTimeout(()=>{n=Date.now(),i=!0,e(m()),d()},Math.max(0,f-p))})),!l&&!r&&(r=setTimeout(()=>i=!0,f)),i=!1,o)}}function W(e){return e.endsWith(`rem`)?Number.parseFloat(e)*16:Number.parseFloat(e)}function G(e){return Array.isArray(e)?e:[e]}function ae(e){return e||(0,t.getCurrentInstance)()}function oe(e,t=200,n=!1,r=!0,i=!1){return re(ie(t,n,r,i),e)}function se(e,n=!0,r){ae(r)?(0,t.onMounted)(e,r):n?e():(0,t.nextTick)(e)}function ce(e,n,r){return(0,t.watch)(e,n,{...r,immediate:!0})}var K=R?window:void 0;R&&window.document,R&&window.navigator,R&&window.location;function q(e){let n=(0,t.toValue)(e);return n?.$el??n}function J(...e){let n=(e,t,n,r)=>(e.addEventListener(t,n,r),()=>e.removeEventListener(t,n,r)),r=(0,t.computed)(()=>{let n=G((0,t.toValue)(e[0])).filter(e=>e!=null);return n.every(e=>typeof e!=`string`)?n:void 0});return ce(()=>[r.value?.map(e=>q(e))??[K].filter(e=>e!=null),G((0,t.toValue)(r.value?e[1]:e[0])),G((0,t.unref)(r.value?e[2]:e[1])),(0,t.toValue)(r.value?e[3]:e[2])],([e,t,r,i],a,o)=>{if(!e?.length||!t?.length||!r?.length)return;let s=B(i)?{...i}:i,c=e.flatMap(e=>t.flatMap(t=>r.map(r=>n(e,t,r,s))));o(()=>{c.forEach(e=>e())})},{flush:`post`})}function le(){let e=(0,t.shallowRef)(!1),n=(0,t.getCurrentInstance)();return n&&(0,t.onMounted)(()=>{e.value=!0},n),e}function ue(e){let n=le();return(0,t.computed)(()=>(n.value,!!e()))}var de=Symbol(`vueuse-ssr-width`);function fe(){let e=(0,t.hasInjectionContext)()?L(de,null):null;return typeof e==`number`?e:void 0}function pe(e,n={}){let{window:r=K,ssrWidth:i=fe()}=n,a=ue(()=>r&&`matchMedia`in r&&typeof r.matchMedia==`function`),o=(0,t.shallowRef)(typeof i==`number`),s=(0,t.shallowRef)(),c=(0,t.shallowRef)(!1);return(0,t.watchEffect)(()=>{if(o.value){o.value=!a.value,c.value=(0,t.toValue)(e).split(`,`).some(e=>{let t=e.includes(`not all`),n=e.match(/\(\s*min-width:\s*(-?\d+(?:\.\d*)?[a-z]+\s*)\)/),r=e.match(/\(\s*max-width:\s*(-?\d+(?:\.\d*)?[a-z]+\s*)\)/),a=!!(n||r);return n&&a&&(a=i>=W(n[1])),r&&a&&(a=i<=W(r[1])),t?!a:a});return}a.value&&(s.value=r.matchMedia((0,t.toValue)(e)),c.value=s.value.matches)}),J(s,`change`,e=>{c.value=e.matches},{passive:!0}),(0,t.computed)(()=>c.value)}function me(e){return typeof Window<`u`&&e instanceof Window?e.document.documentElement:typeof Document<`u`&&e instanceof Document?e.documentElement:e}function he(e){let t=window.getComputedStyle(e);if(t.overflowX===`scroll`||t.overflowY===`scroll`||t.overflowX===`auto`&&e.clientWidth<e.scrollWidth||t.overflowY===`auto`&&e.clientHeight<e.scrollHeight)return!0;{let t=e.parentNode;return!t||t.tagName===`BODY`?!1:he(t)}}function ge(e){let t=e||window.event,n=t.target;return he(n)?!1:t.touches.length>1?!0:(t.preventDefault&&t.preventDefault(),!1)}var _e=new WeakMap;function ve(e,n=!1){let r=(0,t.shallowRef)(n),i=null,a=``;(0,t.watch)(ne(e),e=>{let n=me((0,t.toValue)(e));if(n){let e=n;if(_e.get(e)||_e.set(e,e.style.overflow),e.style.overflow!==`hidden`&&(a=e.style.overflow),e.style.overflow===`hidden`)return r.value=!0;if(r.value)return e.style.overflow=`hidden`}},{immediate:!0});let o=()=>{let n=me((0,t.toValue)(e));!n||r.value||(H&&(i=J(n,`touchmove`,e=>{ge(e)},{passive:!1})),n.style.overflow=`hidden`,r.value=!0)},s=()=>{let n=me((0,t.toValue)(e));!n||!r.value||(H&&i?.(),n.style.overflow=a,_e.delete(n),r.value=!1)};return F(s),(0,t.computed)({get(){return r.value},set(e){e?o():s()}})}function ye(e={}){let{window:n=K,initialWidth:r=1/0,initialHeight:i=1/0,listenOrientation:a=!0,includeScrollbar:o=!0,type:s=`inner`}=e,c=(0,t.shallowRef)(r),l=(0,t.shallowRef)(i),u=()=>{if(n)if(s===`outer`)c.value=n.outerWidth,l.value=n.outerHeight;else if(s===`visual`&&n.visualViewport){let{width:e,height:t,scale:r}=n.visualViewport;c.value=Math.round(e*r),l.value=Math.round(t*r)}else o?(c.value=n.innerWidth,l.value=n.innerHeight):(c.value=n.document.documentElement.clientWidth,l.value=n.document.documentElement.clientHeight)};u(),se(u);let d={passive:!0};return J(`resize`,u,d),n&&s===`visual`&&n.visualViewport&&J(n.visualViewport,`resize`,u,d),a&&(0,t.watch)(pe(`(orientation: portrait)`),()=>u()),{width:c,height:l}}function be(e){let{canPreview:n}=e,r=(0,t.ref)(!1),i=(0,t.ref)(null),a=ve(document.body,!1),o;return(0,t.onScopeDispose)(()=>{o!==void 0&&(window.cancelAnimationFrame(o),o=void 0),a.value=!1}),J(`wheel`,e=>{r.value&&e.ctrlKey&&e.preventDefault()},{passive:!1}),{showViewer:r,mousePosition:i,openPreview:e=>{n.value&&(o!==void 0&&(window.cancelAnimationFrame(o),o=void 0),e?i.value={x:e.clientX,y:e.clientY}:i.value=null,r.value=!0,o=window.requestAnimationFrame(()=>{a.value=!0,o=void 0}))},closePreview:()=>{o!==void 0&&(window.cancelAnimationFrame(o),o=void 0),r.value=!1,i.value=null,a.value=!1}}}var xe=(typeof window>`u`?!1:/iPad|iPhone|iPod/.test(navigator.platform)||navigator.platform===`MacIntel`&&navigator.maxTouchPoints>1)&&!window.MSStream;typeof window>`u`||xe||window.safari;function Se(e){let n=(0,t.ref)(typeof e==`function`?e():e);function r(e){n.value=e}return[n,r]}function Ce(e,n){let{defaultValue:r,value:i=(0,t.ref)()}=n||{},a=typeof e==`function`?e():e;i.value!==void 0&&(a=(0,t.unref)(i)),r!==void 0&&(a=typeof r==`function`?r():r);let o=(0,t.ref)(a),s=(0,t.ref)(a),[c,l]=Se([s.value]),u=(0,t.watchEffect)(()=>{let e=i.value===void 0?o.value:i.value;n?.postState&&(e=n.postState(e,o.value)),s.value=e}),d=(0,t.watch)(c,()=>{let e=c.value[0];o.value!==e&&n?.onChange?.(o.value,e)},{deep:!0});function f(e){o.value=e}function p(e){f(e),l([s.value])}let m=(0,t.watch)(i,()=>{o.value=i.value});return(0,t.onScopeDispose)(()=>{u(),d(),m()}),[s,p,o]}var we={x:0,y:0,rotate:0,scale:1,flipX:!1,flipY:!1};function Te(e){let{imageRef:n,minScale:r,maxScale:i,windowWidth:a,windowHeight:o,onTransform:s}=e,c=(0,t.ref)(null),l=(0,t.ref)([]),[u,d]=Se({...we}),f=e=>{let t={...u.value};d({...we}),(t.x!==0||t.y!==0||t.scale!==1||t.rotate!==0||t.flipX||t.flipY)&&s?.({transform:{...we},action:e})},p=(e,t)=>{c.value===null&&(l.value=[],c.value=E(()=>{let e={...u.value};for(let t of l.value)e={...e,...t};c.value=null,s?.({transform:e,action:t}),d(e)})),l.value.push({...u.value,...e})};return{transform:u,resetTransform:f,updateTransform:p,dispatchZoomChange:(e,t,s,c,l)=>{let d=n.value;if(!d)return;let{width:f,height:m,offsetWidth:h,offsetHeight:g,offsetLeft:_,offsetTop:v}=d,y=e,b=u.value.scale*e;b>i.value?(b=i.value,y=i.value/u.value.scale):b<r.value&&(b=l?b:r.value,y=b/u.value.scale);let x=s??a.value/2,S=c??o.value/2,C=y-1,w=C*f*.5,T=C*m*.5,E=C*(x-u.value.x-_),D=C*(S-u.value.y-v),O=u.value.x-(E-w),k=u.value.y-(D-T);if(e<1&&b===1){let e=h*b,t=g*b;e<=a.value&&t<=o.value&&(O=0,k=0)}p({x:O,y:k,scale:b},t)}}}function Ee(e,t,n,r){let i=t+n,a=(n-r)/2;if(n>r){if(t>0)return{[e]:a};if(t<0&&i<r)return{[e]:-a}}else if(t<0||i>r)return{[e]:t<0?a:-a};return{}}function De(e){let{imageWidth:t,imageHeight:n,imageLeft:r,imageTop:i,windowWidth:a,windowHeight:o}=e;return t<=a&&n<=o?{x:0,y:0}:t>a||n>o?{...Ee(`x`,r,t,a),...Ee(`y`,i,n,o)}:null}var Oe=1,ke=2;function Ae(e){let{imageRef:n,movable:r,visible:i,scaleStep:a,transform:o,updateTransform:s,dispatchZoomChange:c,windowWidth:l,windowHeight:u}=e,d=(0,t.ref)(!1),f=(0,t.ref)({diffX:0,diffY:0,transformX:0,transformY:0});return J(window,`mouseup`,()=>{if(!i.value||!d.value)return;d.value=!1;let{transformX:e,transformY:t}=f.value;if(!(o.value.x!==e&&o.value.y!==t))return;let r=n.value;if(!r)return;let a=r.offsetWidth*o.value.scale,c=r.offsetHeight*o.value.scale,{left:p,top:m}=r.getBoundingClientRect(),h=o.value.rotate%180!=0,g=De({imageWidth:h?c:a,imageHeight:h?a:c,imageLeft:p,imageTop:m,windowWidth:l.value,windowHeight:u.value});g&&s({...g},`dragRebound`)}),J(window,`mousemove`,e=>{!i.value||!d.value||s({x:e.pageX-f.value.diffX,y:e.pageY-f.value.diffY},`move`)}),{isMoving:d,onMouseDown:e=>{!r.value||e.button!==0||(e.preventDefault(),e.stopPropagation(),f.value={diffX:e.pageX-o.value.x,diffY:e.pageY-o.value.y,transformX:o.value.x,transformY:o.value.y},d.value=!0)},onWheel:e=>{if(!i.value||e.deltaY===0)return;let t=Oe+Math.min(Math.abs(e.deltaY/100),ke)*a.value;e.deltaY>0&&(t=Oe/t),c(t,`wheel`,e.clientX,e.clientY)}}}function Y(e,t){return Math.hypot(e.x-t.x,e.y-t.y)}function je(e,t,n,r){let i=Y(e,n),a=Y(t,r);if(i===0&&a===0)return[e.x,e.y];let o=i/(i+a);return[e.x+o*(t.x-e.x),e.y+o*(t.y-e.y)]}function Me(e){let{imageRef:n,movable:r,visible:i,minScale:a,transform:o,updateTransform:s,dispatchZoomChange:c,windowWidth:l,windowHeight:u}=e,d=(0,t.ref)(!1),f=(0,t.ref)({point1:{x:0,y:0},point2:{x:0,y:0},eventType:`none`}),p=e=>{f.value={...f.value,...e}};return J(window,`touchmove`,e=>{i.value&&r.value&&e.preventDefault()},{passive:!1}),{isTouching:d,onTouchStart:e=>{if(!r.value)return;e.stopPropagation(),d.value=!0;let{touches:t=[]}=e;t.length>1?p({point1:{x:t[0].clientX,y:t[0].clientY},point2:{x:t[1].clientX,y:t[1].clientY},eventType:`touchZoom`}):p({point1:{x:t[0].clientX-o.value.x,y:t[0].clientY-o.value.y},eventType:`move`})},onTouchMove:e=>{let{touches:t=[]}=e,{point1:n,point2:r,eventType:i}=f.value;if(t.length>1&&i===`touchZoom`){let e={x:t[0].clientX,y:t[0].clientY},i={x:t[1].clientX,y:t[1].clientY},[a,o]=je(n,r,e,i);c(Y(e,i)/Y(n,r),`touchZoom`,a,o,!0),p({point1:e,point2:i,eventType:`touchZoom`})}else i===`move`&&(s({x:t[0].clientX-n.x,y:t[0].clientY-n.y},`move`),p({eventType:`move`}))},onTouchEnd:()=>{if(!i.value)return;if(d.value&&=!1,p({eventType:`none`}),a.value>o.value.scale)return s({x:0,y:0,scale:a.value},`touchZoom`);let e=n.value;if(!e)return;let t=e.offsetWidth*o.value.scale,r=e.offsetHeight*o.value.scale,{left:c,top:f}=e.getBoundingClientRect(),m=o.value.rotate%180!=0,h=De({imageWidth:m?r:t,imageHeight:m?t:r,imageLeft:c,imageTop:f,windowWidth:l.value,windowHeight:u.value});h&&s({...h},`dragRebound`)}}}function Ne(e){return{zIndexPopup:`calc(${e.zIndexPopupBase} + 80)`,previewOperationColor:e.colorTextDescription,previewOperationHoverColor:e.colorText,previewOperationColorDisabled:e.colorTextDisabled,imagePreviewSwitchSize:e.controlHeightLG,previewOperationSize:e.fontSizeLG}}var Pe=e=>{let t=e.componentCls,{motionEaseOut:n,motionDurationSlow:i,previewOperationSize:a,zIndexPopup:o}=e,s={position:`absolute`,color:e.previewOperationColor,backgroundColor:e.colorBgContainer,borderRadius:`50%`,width:e.controlHeightLG,height:e.controlHeightLG,padding:0,outline:0,border:0,boxShadow:e.boxShadowTertiary,cursor:`pointer`,transition:`all ${i}`,display:`flex`,alignItems:`center`,justifyContent:`center`,fontSize:a,"&:hover":{color:e.previewOperationHoverColor,backgroundColor:e.colorBgContainer},"&:active":{backgroundColor:e.colorBgContainer},svg:{stroke:`currentColor`}};return{[t]:{textAlign:`center`,inset:0,position:`fixed`,userSelect:`none`,zIndex:o,[`${t}-mask`]:{position:`absolute`,inset:0,background:`color-mix(in srgb, ${e.colorBgLayout} 90%, transparent)`,backdropFilter:`blur(0px)`,transition:`background-color ${i}, backdrop-filter ${i}`,[`&${t}-mask-blur`]:{backdropFilter:`blur(4px)`},[`&${t}-mask-hidden`]:{display:`none`}},[`${t}-body`]:{position:`absolute`,inset:0,overflow:`hidden`,display:`flex`,alignItems:`center`,justifyContent:`center`,pointerEvents:`none`,"> *":{pointerEvents:`auto`}},[`${t}-img`]:{maxWidth:`100%`,maxHeight:`70%`,verticalAlign:`middle`,transform:`scale3d(1, 1, 1)`,transition:`transform ${i} ${n} 0s`,userSelect:`none`},[`&-movable ${t}-img`]:{cursor:`grab`},[`&-moving ${t}-img`]:{cursor:`grabbing`},[`${t}-close`]:{...s,top:e.marginSM,insetInlineEnd:e.marginSM},[`${t}-switch`]:{...s,top:`50%`,transform:`translateY(-50%)`,"&-disabled":{"&, &:hover, &:active":{color:e.previewOperationColorDisabled,backgroundColor:e.colorBgContainer,cursor:`not-allowed`}},"&-prev":{insetInlineStart:e.marginSM},"&-next":{insetInlineEnd:e.marginSM}},[`${t}-footer`]:{position:`absolute`,bottom:e.marginXL,left:{_skip_check_:!0,value:`50%`},display:`flex`,flexDirection:`column`,alignItems:`center`,color:e.previewOperationColor,transform:`translateX(-50%)`,gap:e.marginXS},[`${t}-progress`]:{color:e.previewOperationColor},[`${t}-actions`]:{display:`flex`,alignItems:`center`,gap:e.marginXXS,padding:e.paddingXXS,color:e.previewOperationColor,backgroundColor:e.colorBgContainer,border:`${(0,r.unit)(e.lineWidth)} ${e.lineType} ${e.colorFillTertiary}`,borderRadius:e.borderRadiusLG,fontSize:a,"&-action":{color:`inherit`,background:`transparent`,border:0,font:`inherit`,lineHeight:1,width:e.controlHeight,height:e.controlHeight,padding:0,cursor:`pointer`,transition:`all ${i}`,display:`flex`,alignItems:`center`,justifyContent:`center`,borderRadius:e.borderRadius,userSelect:`none`,[`&:not(${t}-actions-action-disabled):hover`]:{color:e.colorTextSecondary,backgroundColor:e.colorFillTertiary},[`&:not(${t}-actions-action-disabled):active`]:{color:e.colorText,backgroundColor:e.colorFillSecondary},"&-disabled":{cursor:`not-allowed`,opacity:.5},svg:{stroke:`currentColor`}}}}}},Fe=e=>{let t=e.componentCls,{motionDurationSlow:n,motionEaseOut:r}=e;return{[`${t}`]:{"&-fade-enter-active, &-fade-leave-active":{transition:`visibility ${n}`,[`${t}-mask`]:{transition:`background-color ${n}, backdrop-filter ${n}`},[`${t}-body`]:{transition:`transform ${n} ${r}`},[`${t}-close, ${t}-switch, ${t}-footer`]:{transition:`opacity ${n}, all ${n}`}},"&-fade-enter-from, &-fade-leave-to":{visibility:`visible`,[`${t}-mask`]:{backgroundColor:`transparent`,backdropFilter:`blur(0px)`},[`${t}-body`]:{transform:`scale(0)`},[`${t}-close, ${t}-switch, ${t}-footer`]:{opacity:0}},"&-fade-enter-to, &-fade-leave-from":{[`${t}-mask`]:{backgroundColor:`color-mix(in srgb, ${e.colorBgLayout} 90%, transparent)`,[`&${t}-mask-blur`]:{backdropFilter:`blur(4px)`}},[`${t}-close, ${t}-switch, ${t}-footer`]:{opacity:1}}}}},Ie=(0,r.proGenStyleHooks)(`GImagePreview`,e=>[Pe(e),Fe(e)],Ne),X=1,Z={rotateLeft:(0,t.createVNode)(n.RotateLeftOutlined,null,null),rotateRight:(0,t.createVNode)(n.RotateRightOutlined,null,null),zoomIn:(0,t.createVNode)(n.ZoomInOutlined,null,null),zoomOut:(0,t.createVNode)(n.ZoomOutOutlined,null,null),flipX:(0,t.createVNode)(n.SwapOutlined,null,null),flipY:(0,t.createVNode)(n.SwapOutlined,{rotate:90},null),copy:(0,t.createVNode)(n.CopyOutlined,null,null),download:(0,t.createVNode)(n.DownloadOutlined,null,null)},Q={copySuccess:`复制成功`,copyFailed:`复制失败`,downloadSuccess:`下载成功`,downloadFailed:`下载失败`};function Le(e){try{let t=new URL(e,window.location.href).pathname.match(/\/([^/]+)$/)?.[1];return t?decodeURIComponent(t):`image`}catch{let t=e.split(`?`)[0]?.split(`#`)[0]?.split(`/`).pop();return t?decodeURIComponent(t):`image`}}function Re(e){let t={"image/gif":`gif`,"image/jpg":`jpg`,"image/jpeg":`jpg`,"image/png":`png`,"image/svg+xml":`svg`,"image/webp":`webp`},n=e?.toLowerCase();return t[n]||n?.split(`/`)[1]?.split(`+`)[0]||`png`}async function ze(e){let t=await fetch(e,{mode:`cors`});if(!t.ok)throw Error(`Failed to fetch image: ${t.status}`);return t.blob()}async function Be(e){return new Promise((t,n)=>{let r=new Image,i=URL.createObjectURL(e);r.onload=()=>{URL.revokeObjectURL(i);let e=document.createElement(`canvas`);e.width=r.naturalWidth,e.height=r.naturalHeight;let a=e.getContext(`2d`);if(!a){n(Error(`Canvas context not available`));return}a.drawImage(r,0,0),e.toBlob(e=>{e?t(e):n(Error(`Failed to convert to PNG`))},`image/png`,1)},r.onerror=()=>{URL.revokeObjectURL(i),n(Error(`Failed to load image for PNG conversion`))},r.src=i})}async function Ve(e){let t=(e.type||``).toLowerCase();return t===`image/png`||t===`image/svg+xml`?{[t]:e}:{"image/png":await Be(e)}}function He(e,t){let n=Le(e);return n.includes(`.`)?n.endsWith(`.svg+xml`)?n.replace(/\.svg\+xml$/i,`.svg`):n:`${n}.${Re(t)}`}function Ue(e,t){let n=URL.createObjectURL(e),r=document.createElement(`a`);r.href=n,r.download=t,r.style.display=`none`,document.body.appendChild(r),r.click(),r.remove(),URL.revokeObjectURL(n)}var We=(0,t.defineComponent)((e,{emit:r,slots:s,expose:c})=>{let{width:l,height:u}=ye(),{prefixCls:d}=(0,i.useBaseConfig)(`pro-image-preview`,e),f=(0,a.default)(d),[p,m]=Ie(d,f),[h,g]=Ce(e.open,{value:(0,t.toRef)(e,`open`),onChange:t=>{e.onOpenChange?.(t),r(`update:open`,t)}}),_=(0,t.ref)(!0),v=(0,t.ref)(),y=(0,t.ref)(),b=(0,t.ref)(e.current??0),x=(0,t.ref)(!1),S=(0,t.ref)(!1),{transform:C,resetTransform:w,updateTransform:T,dispatchZoomChange:E}=Te({imageRef:v,minScale:(0,t.toRef)(e,`minScale`),maxScale:(0,t.toRef)(e,`maxScale`),windowWidth:l,windowHeight:u,onTransform:e.onTransform}),{isMoving:D,onMouseDown:O,onWheel:k}=Ae({imageRef:v,movable:(0,t.toRef)(e,`movable`),visible:h,scaleStep:(0,t.toRef)(e,`scaleStep`),transform:C,updateTransform:T,dispatchZoomChange:E,windowWidth:l,windowHeight:u}),{isTouching:ee,onTouchStart:j,onTouchMove:M,onTouchEnd:N}=Me({imageRef:v,movable:(0,t.toRef)(e,`movable`),visible:h,minScale:(0,t.toRef)(e,`minScale`),transform:C,updateTransform:T,dispatchZoomChange:E,windowWidth:l,windowHeight:u}),F=(0,t.computed)(()=>e.urls[b.value]),I=(0,t.computed)(()=>e.urls.length>1),L=(0,t.computed)(()=>e.urls.length>=1),R=(0,t.computed)(()=>e.mask===!1?{visible:!1,blur:!1}:e.mask&&typeof e.mask==`object`&&!(`type`in e.mask)?{visible:!0,blur:e.mask.blur!==!1}:{visible:!0,blur:!0}),z=(0,t.computed)(()=>{let t={};return e.mousePosition&&(t.transformOrigin=`${e.mousePosition.x}px ${e.mousePosition.y}px`),t});(0,t.watch)(()=>e.current,e=>{e!==void 0&&(b.value=e)}),(0,t.watch)(()=>e.current,e=>{e!==void 0&&(b.value=e)});let B=()=>{g(!1),e.onClose?.(),r(`close`)},V=()=>{D.value||B()},H=()=>{if(b.value>0||e.infinite){let n=b.value-1<0?e.urls.length-1:b.value-1;_.value=!1,b.value=n,w(`prev`),(0,t.nextTick)(()=>{_.value=!0})}},U=()=>{if(b.value<e.urls.length-1||e.infinite){let n=b.value+1>e.urls.length-1?0:b.value+1;_.value=!1,b.value=n,w(`next`),(0,t.nextTick)(()=>{_.value=!0})}},ne=()=>{E(X+(e.scaleStep??.5),`zoomIn`)},re=()=>{E(X/(X+(e.scaleStep??.5)),`zoomOut`)},ie=()=>{T({rotate:C.value.rotate+90},`rotateRight`)},W=()=>{T({rotate:C.value.rotate-90},`rotateLeft`)},G=()=>{T({flipX:!C.value.flipX},`flipX`)},ae=()=>{T({flipY:!C.value.flipY},`flipY`)},oe=async()=>{if(!(!F.value||x.value)){if(!navigator.clipboard||!window.ClipboardItem){o.message.error(Q.copyFailed);return}x.value=!0;try{let e=await Ve(await ze(F.value));await navigator.clipboard.write([new ClipboardItem(e)]),o.message.success(Q.copySuccess)}catch{o.message.error(Q.copyFailed)}finally{x.value=!1}}},se=async()=>{if(!(!F.value||S.value)){S.value=!0;try{let e=await ze(F.value);Ue(e,He(F.value,e.type)),o.message.success(Q.downloadSuccess)}catch{o.message.error(Q.downloadFailed)}finally{S.value=!1}}},ce=t=>{h.value&&(C.value.scale===1?E(X+(e.scaleStep??.5),`doubleClick`,t.clientX,t.clientY):T({x:0,y:0,scale:1},`doubleClick`))},K=e=>{if(e.key===`Escape`){B();return}!h.value||!I.value||(e.key===`ArrowLeft`?H():e.key===`ArrowRight`&&U())},q;(0,t.onMounted)(()=>{let e=e=>K(e);window.addEventListener(`keydown`,e),q=()=>window.removeEventListener(`keydown`,e)}),(0,t.onUnmounted)(()=>{q?.()}),c({setOpen:t=>{g(t),b.value=e.current??0}});let J=()=>te({slots:s,props:{...e.icons},keys:[`flipY`,`flipX`,`rotateLeft`,`rotateRight`,`zoomOut`,`zoomIn`,`copy`,`download`],render:!0,defaultVNodes:[Z.flipY,Z.flipX,Z.rotateLeft,Z.rotateRight,Z.zoomOut,Z.zoomIn,Z.copy,Z.download]}),le=()=>{let r=J();return[{icon:r.flipY,onClick:ae,type:`flipY`},{icon:r.flipX,onClick:G,type:`flipX`},{icon:r.rotateLeft,onClick:W,type:`rotateLeft`},{icon:r.rotateRight,onClick:ie,type:`rotateRight`},{icon:r.zoomOut,onClick:re,type:`zoomOut`,disabled:(0,t.computed)(()=>C.value.scale<=(e.minScale??1))},{icon:r.zoomIn,onClick:ne,type:`zoomIn`,disabled:(0,t.computed)(()=>C.value.scale===(e.maxScale??50))},{icon:x.value?(0,t.createVNode)(n.LoadingOutlined,{spin:!0},null):r.copy,onClick:oe,type:`copy`,disabled:(0,t.computed)(()=>x.value)},{icon:S.value?(0,t.createVNode)(n.LoadingOutlined,{spin:!0},null):r.download,onClick:se,type:`download`,disabled:(0,t.computed)(()=>S.value)}]};return()=>{let r={transform:`translate3d(${C.value.x}px, ${C.value.y}px, 0) scale3d(${C.value.flipX?`-`:``}${C.value.scale}, ${C.value.flipY?`-`:``}${C.value.scale}, 1) rotate(${C.value.rotate}deg)`,transitionDuration:!_.value||ee.value?`0s`:void 0},i=P({slots:s,props:{close:e.icons?.close},key:`close`}),a=P({slots:s,props:{left:e.icons?.left},key:`left`}),o=P({slots:s,props:{right:e.icons?.right},key:`right`}),c=`${d.value}-actions-action`,l=le();return(0,t.createVNode)(t.Teleport,{to:e.getContainer||`body`},{default:()=>[(0,t.createVNode)(t.Transition,{name:`${d.value}-fade`,appear:!0,onAfterLeave:()=>w(`close`)},{default:()=>[h.value&&(0,t.createVNode)(`div`,{ref:y,class:A(d.value,p.value,m.value,f.value,{[`${d.value}-movable`]:e.movable,[`${d.value}-moving`]:D.value}),style:{zIndex:e.zIndex},role:`dialog`,"aria-modal":`true`,"aria-label":`Image`,tabindex:-1},[R.value.visible&&(0,t.createVNode)(`div`,{class:A(`${d.value}-mask`,e.maskClass,{[`${d.value}-mask-blur`]:R.value.blur}),onClick:e.onHideOnClickModal?V:void 0},null),(0,t.createVNode)(`div`,{class:`${d.value}-body`,style:z.value},[(0,t.createVNode)(`img`,{ref:v,class:`${d.value}-img`,src:F.value,alt:`Image`,loading:`eager`,decoding:`sync`,style:r,onWheel:k,onMousedown:O,onDblclick:ce,onTouchstart:j,onTouchmove:M,onTouchend:N,onTouchcancel:N},null)]),(0,t.createVNode)(`button`,{type:`button`,class:`${d.value}-close`,onClick:B},[i||(0,t.createVNode)(n.CloseOutlined,null,null)]),I.value&&(0,t.createVNode)(t.Fragment,null,[(0,t.createVNode)(`button`,{type:`button`,class:A(`${d.value}-switch`,`${d.value}-switch-prev`,{[`${d.value}-switch-disabled`]:!e.infinite&&b.value===0}),onClick:e=>{e.preventDefault(),e.stopPropagation(),H()}},[a||(0,t.createVNode)(n.LeftOutlined,null,null)]),(0,t.createVNode)(`button`,{type:`button`,class:A(`${d.value}-switch`,`${d.value}-switch-next`,{[`${d.value}-switch-disabled`]:!e.infinite&&b.value===e.urls.length-1}),onClick:e=>{e.preventDefault(),e.stopPropagation(),U()}},[o||(0,t.createVNode)(n.RightOutlined,null,null)])]),(0,t.createVNode)(`div`,{class:`${d.value}-footer`},[L.value&&(0,t.createVNode)(`div`,{class:`${d.value}-progress`},[e.countRender?e.countRender(b.value+1,e.urls.length):`${b.value+1} / ${e.urls.length}`]),(0,t.createVNode)(`div`,{class:`${d.value}-actions`},[l.map(({icon:e,onClick:n,type:r,disabled:i})=>(0,t.createVNode)(`button`,{type:`button`,class:A(c,`${c}-${r}`,{[`${c}-disabled`]:i&&i.value}),onClick:()=>{i?.value||n()},disabled:i?i.value:!1,"aria-label":r,key:r},[e]))])])])]})]})}},{props:(0,t.mergeDefaults)({class:{type:String,required:!1},style:{type:Object,required:!1},rootClass:{type:String,required:!1},prefixCls:{type:String,required:!1},urls:{type:Array,required:!0},open:{type:Boolean,required:!1,default:void 0},scaleStep:{type:Number,required:!1},minScale:{type:Number,required:!1},maxScale:{type:Number,required:!1},movable:{type:Boolean,required:!1,default:void 0},disabled:{type:Boolean,required:!1,default:void 0},zIndex:{type:Number,required:!1},current:{type:Number,required:!1},infinite:{type:Boolean,required:!1,default:void 0},getContainer:{type:String,required:!1},onHideOnClickModal:{type:Boolean,required:!1,default:void 0},mask:{type:[Object,Boolean],required:!1,default:void 0},maskClass:{type:String,required:!1},mousePosition:{type:[Object,null],required:!1},countRender:{type:[Function,Boolean],required:!1,default:void 0},icons:{type:Object,required:!1},onClose:{type:Function,required:!1},onTransform:{type:Function,required:!1},onOpenChange:{type:Function,required:!1},"onUpdate:open":{type:Function,required:!1}},{open:!1,scaleStep:.5,minScale:1,maxScale:50,movable:!0,zIndex:2e3,current:0,infinite:!0,onHideOnClickModal:!0,urls:[],icons:{}}),emits:[`close`,`transform`,`update:open`],name:`GImagePreview`,inheritAttrs:!1}),Ge=e=>{let{motionDurationSlow:t,paddingXXS:n,marginXXS:i,colorTextLightSolid:a}=e;return{position:`absolute`,inset:0,display:`flex`,alignItems:`center`,justifyContent:`center`,color:a,background:`rgba(0, 0, 0, 0.5)`,cursor:`pointer`,opacity:0,transition:`opacity ${t}`,[`.${e.componentCls}-mask-info`]:{overflow:`hidden`,whiteSpace:`nowrap`,textOverflow:`ellipsis`,padding:`0 ${(0,r.unit)(n)}`,".anticon":{marginInlineEnd:i,svg:{verticalAlign:`baseline`}}}}},Ke=e=>{let t={width:`100%`,height:`100%`};return{[e.componentCls]:{display:`inline-block`,position:`relative`,overflow:`hidden`,[`${e.componentCls}-img`]:{...t,verticalAlign:`top`,opacity:1,[`&${e.componentCls}-img-preview`]:{userSelect:`none`,cursor:`pointer`},"&-placeholder":{...t,backgroundColor:e.colorBgContainerDisabled,backgroundImage:`url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTQuNSAyLjVoLTEzQS41LjUgMCAwIDAgMSAzdjEwYS41LjUgMCAwIDAgLjUuNWgxM2EuNS41IDAgMCAwIC41LS41VjNhLjUuNSAwIDAgMC0uNS0uNXpNNS4yODEgNC43NWExIDEgMCAwIDEgMCAyIDEgMSAwIDAgMSAwLTJ6bTguMDMgNi44M2EuMTI3LjEyNyAwIDAgMS0uMDgxLjAzSDIuNzY5YS4xMjUuMTI1IDAgMCAxLS4wOTYtLjIwN2wyLjY2MS0zLjE1NmEuMTI2LjEyNiAwIDAgMSAuMTc3LS4wMTZsLjAxNi4wMTZMNy4wOCAxMC4wOWwyLjQ3LTIuOTNhLjEyNi4xMjYgMCAwIDEgLjE3Ny0uMDE2bC4wMTUuMDE2IDMuNTg4IDQuMjQ0YS4xMjcuMTI3IDAgMCAxLS4wMi4xNzV6IiBmaWxsPSIjOEM4QzhDIiBmaWxsLXJ1bGU9Im5vbnplcm8iLz48L3N2Zz4=')`,backgroundRepeat:`no-repeat`,backgroundPosition:`center center`,backgroundSize:`30%`}},[`${e.componentCls}-error`]:{...t,display:`flex`,alignItems:`center`,justifyContent:`center`},[`${e.componentCls}-placeholder`]:{position:`absolute`,inset:0},[`${e.componentCls}-mask`]:{...Ge(e)},[`${e.componentCls}-mask:hover`]:{opacity:1}}}},qe=(0,r.proGenStyleHooks)(`GImage`,e=>[Ke(e)]),Je={src:``,alt:``,fit:`contain`,preview:!0,loading:`eager`};function Ye(e){return e&&e.nodeType===1}var $=(0,t.defineComponent)((e,{emit:o,slots:s,expose:c,attrs:l})=>{let u=R&&`loading`in HTMLImageElement.prototype,{prefixCls:d}=(0,i.useBaseConfig)(`pro-image`,e),f=(0,a.default)(d),[p,m]=qe(d,f),h=(0,t.ref)(),_=(0,t.ref)(!1),v=(0,t.ref)(!0),b=(0,t.ref)(),x=(0,t.ref)(),S,C=(0,t.computed)(()=>e.loading===`eager`?!1:!u&&e.loading===`lazy`||e.lazy),w=(0,t.computed)(()=>R&&e.fit?{...e.imageStyle,objectFit:e.fit}:{...e.imageStyle}),T=(0,t.computed)(()=>typeof e.preview==`object`?e.preview:{}),E=(0,t.computed)(()=>!!e.preview),D=(0,t.computed)(()=>{let{urls:t=[],current:n=0}=T.value;if(g(n))return t.length>=n?n:0;let r=t.indexOf(e.src??``);return r>=0?r:0}),O=(0,t.computed)(()=>(0,r.unit)(e.width)),k=(0,t.computed)(()=>(0,r.unit)(e.height)),{showViewer:j,mousePosition:M,openPreview:N,closePreview:P}=be({canPreview:E}),F=()=>{R&&(v.value=!0,_.value=!1,h.value=e.src)},I=t=>{_.value||(v.value=!1,_.value=!1,e.onLoad?.(t),o(`load`,t))},L=t=>{v.value=!1,_.value=!0,e.onError?.(t),o(`error`,t)},z=()=>{if(!b.value||!x.value)return!1;let e=b.value.getBoundingClientRect(),t=x.value.getBoundingClientRect?x.value.getBoundingClientRect():{top:0,bottom:x.value.innerHeight??0,left:0,right:x.value.innerWidth??0};return e.top<t.bottom&&e.bottom>t.top&&e.left<t.right&&e.right>t.left},B=oe(()=>{z()&&(F(),S?.(),S=void 0)},200,!0),V=async()=>{if(!R)return;await(0,t.nextTick)();let{scrollContainer:n}=e;Ye(n)?x.value=n:y(n)&&n!==``?x.value=document.querySelector(n)??void 0:b.value&&(x.value=ee(b.value)),x.value&&(S=J(x.value,`scroll`,B),setTimeout(B,100))},H=t=>{let n=v.value?`loaded`:_.value?`error`:`success`;if(e.onClick?.(n),o(`click`,n),!(v.value||_.value)&&E.value){let e=t.currentTarget?.getBoundingClientRect();N(e?{...t,clientX:e.x+e.width/2,clientY:e.y+e.height/2}:t)}};return(0,t.watch)(()=>e.src,()=>{C.value?(v.value=!0,_.value=!1,S?.(),V()):F()}),(0,t.onMounted)(()=>{C.value?V():F()}),c({setOpen:e=>{e?N():P()}}),()=>{let i={},a={};for(let[e,t]of Object.entries(l))/^(?:data-|on[A-Z])/i.test(e)||[`id`,`style`,`class`].includes(e)?i[e]=t:a[e]=t;let o=te({slots:s,props:e,keys:[`fallback`,`mask`,`placeholder`],render:!0});return(0,t.createVNode)(`div`,(0,t.mergeProps)({class:A(d.value,p.value,m.value,f.value,e.class),ref:b},i,{style:{width:(0,r.unit)(e.size)||O.value,height:(0,r.unit)(e.size)||k.value,...i.style||{}},onClick:e=>{_.value&&H(e)}}),[_.value?(0,t.createVNode)(`div`,{class:A(`${d.value}-error`)},[o.fallback]):(0,t.createVNode)(t.Fragment,null,[(0,t.createVNode)(`img`,(0,t.mergeProps)(a,{src:h.value,loading:e.loading,style:w.value,class:A(e.imageClass,`${d.value}-img`,{[`${d.value}-img-placeholder`]:e.placeholder===!0,[`${d.value}-img-preview`]:E.value}),crossorigin:e.crossOrigin,width:O.value,height:k.value,onClick:H,onLoad:I,onError:L}),null),v.value&&(0,t.createVNode)(`div`,{class:A(`${d.value}-placeholder`),onClick:H},[o.placeholder])]),T.value.mask&&E.value&&(0,t.createVNode)(`div`,{class:A(`${d.value}-mask`,T.value.maskClass),style:{display:i.style?.display===`none`?`none`:void 0}},[o.mask||(0,t.createVNode)(`div`,{class:A(`${d.value}-mask-info`)},[(0,t.createVNode)(n.EyeOutlined,null,null)])]),E.value&&(0,t.createVNode)(We,(0,t.mergeProps)(T.value,{urls:T.value.urls||(e.src?[e.src]:[]),current:D.value,zIndex:e.zIndex??T.value.zIndex,open:j.value,mousePosition:M.value,onClose:()=>P()}),s)])}},{props:(0,t.mergeDefaults)({rootClass:{type:String,required:!1},prefixCls:{type:String,required:!1},src:{type:String,required:!1},alt:{type:String,required:!1},width:{type:Number,required:!1},height:{type:Number,required:!1},size:{type:Number,required:!1},fit:{type:String,required:!1},loading:{type:String,required:!1},crossOrigin:{type:String,required:!1},imageStyle:{type:Object,required:!1},imageClass:{type:String,required:!1},preview:{type:[Boolean,Object],required:!1,default:void 0},zIndex:{type:Number,required:!1},lazy:{type:Boolean,required:!1,default:void 0},scrollContainer:{required:!1},placeholder:{type:[Function,Object,String,Number,Boolean,null,Array],required:!1,default:void 0},fallback:{type:[Function,Object,String,Number,Boolean,null,Array],required:!1,default:void 0},onLoad:{type:Function,required:!1},onError:{type:Function,required:!1},onClick:{type:Function,required:!1},"onUpdate:open":{type:Function,required:!1}},Je),emits:[`click`,`load`,`error`],name:`GImage`,inheritAttrs:!1});$.isGImage=!0,$.install=e=>(e.component($.name,$),e),e.GImage=$,e.GImagePreview=We});
@@ -0,0 +1,15 @@
1
+ //#region src/hooks/useImageBoundary.d.ts
2
+ interface BoundaryDimensions {
3
+ imageWidth: number;
4
+ imageHeight: number;
5
+ imageLeft: number;
6
+ imageTop: number;
7
+ windowWidth: number;
8
+ windowHeight: number;
9
+ }
10
+ declare function getImageBoundaryFix(dimensions: BoundaryDimensions): {
11
+ x?: number;
12
+ y?: number;
13
+ };
14
+ //#endregion
15
+ export { BoundaryDimensions, getImageBoundaryFix };
@@ -0,0 +1,24 @@
1
+ //#region src/hooks/useImageBoundary.ts
2
+ function fixPoint(axis, start, length, clientLength) {
3
+ const startAddLength = start + length;
4
+ const offsetStart = (length - clientLength) / 2;
5
+ if (length > clientLength) {
6
+ if (start > 0) return { [axis]: offsetStart };
7
+ if (start < 0 && startAddLength < clientLength) return { [axis]: -offsetStart };
8
+ } else if (start < 0 || startAddLength > clientLength) return { [axis]: start < 0 ? offsetStart : -offsetStart };
9
+ return {};
10
+ }
11
+ function getImageBoundaryFix(dimensions) {
12
+ const { imageWidth, imageHeight, imageLeft, imageTop, windowWidth, windowHeight } = dimensions;
13
+ if (imageWidth <= windowWidth && imageHeight <= windowHeight) return {
14
+ x: 0,
15
+ y: 0
16
+ };
17
+ if (imageWidth > windowWidth || imageHeight > windowHeight) return {
18
+ ...fixPoint("x", imageLeft, imageWidth, windowWidth),
19
+ ...fixPoint("y", imageTop, imageHeight, windowHeight)
20
+ };
21
+ return null;
22
+ }
23
+ //#endregion
24
+ export { getImageBoundaryFix };
@@ -0,0 +1,23 @@
1
+ import { Ref } from "vue";
2
+
3
+ //#region src/hooks/useImagePreview.d.ts
4
+ interface UseImagePreviewOptions {
5
+ canPreview: Ref<boolean>;
6
+ }
7
+ declare function useImagePreview(options: UseImagePreviewOptions): {
8
+ showViewer: Ref<boolean, boolean>;
9
+ mousePosition: Ref<{
10
+ x: number;
11
+ y: number;
12
+ }, {
13
+ x: number;
14
+ y: number;
15
+ } | {
16
+ x: number;
17
+ y: number;
18
+ }>;
19
+ openPreview: (clickEvent?: MouseEvent) => void;
20
+ closePreview: () => void;
21
+ };
22
+ //#endregion
23
+ export { UseImagePreviewOptions, useImagePreview as default };
@@ -0,0 +1,54 @@
1
+ import { onScopeDispose, ref } from "vue";
2
+ import { useEventListener, useScrollLock } from "@vueuse/core";
3
+ //#region src/hooks/useImagePreview.ts
4
+ function useImagePreview(options) {
5
+ const { canPreview } = options;
6
+ const showViewer = ref(false);
7
+ const mousePosition = ref(null);
8
+ const isScrollLocked = useScrollLock(document.body, false);
9
+ let lockFrame;
10
+ const openPreview = (clickEvent) => {
11
+ if (!canPreview.value) return;
12
+ if (lockFrame !== void 0) {
13
+ window.cancelAnimationFrame(lockFrame);
14
+ lockFrame = void 0;
15
+ }
16
+ if (clickEvent) mousePosition.value = {
17
+ x: clickEvent.clientX,
18
+ y: clickEvent.clientY
19
+ };
20
+ else mousePosition.value = null;
21
+ showViewer.value = true;
22
+ lockFrame = window.requestAnimationFrame(() => {
23
+ isScrollLocked.value = true;
24
+ lockFrame = void 0;
25
+ });
26
+ };
27
+ const closePreview = () => {
28
+ if (lockFrame !== void 0) {
29
+ window.cancelAnimationFrame(lockFrame);
30
+ lockFrame = void 0;
31
+ }
32
+ showViewer.value = false;
33
+ mousePosition.value = null;
34
+ isScrollLocked.value = false;
35
+ };
36
+ onScopeDispose(() => {
37
+ if (lockFrame !== void 0) {
38
+ window.cancelAnimationFrame(lockFrame);
39
+ lockFrame = void 0;
40
+ }
41
+ isScrollLocked.value = false;
42
+ });
43
+ useEventListener("wheel", (event) => {
44
+ if (showViewer.value && event.ctrlKey) event.preventDefault();
45
+ }, { passive: false });
46
+ return {
47
+ showViewer,
48
+ mousePosition,
49
+ openPreview,
50
+ closePreview
51
+ };
52
+ }
53
+ //#endregion
54
+ export { useImagePreview as default };
@@ -0,0 +1,23 @@
1
+ import { DispatchZoomChangeFunc, TransformAction, TransformType, UpdateTransformFunc } from "../interface.js";
2
+ import { Ref } from "vue";
3
+
4
+ //#region src/hooks/useImageTransform.d.ts
5
+ interface UseImageTransformOptions {
6
+ imageRef: Ref<HTMLImageElement | undefined>;
7
+ minScale: Ref<number>;
8
+ maxScale: Ref<number>;
9
+ windowWidth: Ref<number>;
10
+ windowHeight: Ref<number>;
11
+ onTransform?: (info: {
12
+ transform: TransformType;
13
+ action: TransformAction;
14
+ }) => void;
15
+ }
16
+ declare function useImageTransform(options: UseImageTransformOptions): {
17
+ transform: Ref<TransformType, TransformType>;
18
+ resetTransform: (action: TransformAction) => void;
19
+ updateTransform: UpdateTransformFunc;
20
+ dispatchZoomChange: DispatchZoomChangeFunc;
21
+ };
22
+ //#endregion
23
+ export { UseImageTransformOptions, useImageTransform as default };
@@ -0,0 +1,92 @@
1
+ import { ref } from "vue";
2
+ import { raf } from "@gx-design-vue/pro-utils";
3
+ import { useState } from "@gx-design-vue/pro-hooks";
4
+ //#region src/hooks/useImageTransform.ts
5
+ const initialTransform = {
6
+ x: 0,
7
+ y: 0,
8
+ rotate: 0,
9
+ scale: 1,
10
+ flipX: false,
11
+ flipY: false
12
+ };
13
+ function useImageTransform(options) {
14
+ const { imageRef, minScale, maxScale, windowWidth, windowHeight, onTransform } = options;
15
+ const frameId = ref(null);
16
+ const updateQueue = ref([]);
17
+ const [transform, setTransform] = useState({ ...initialTransform });
18
+ const resetTransform = (action) => {
19
+ const oldTransform = { ...transform.value };
20
+ setTransform({ ...initialTransform });
21
+ if (oldTransform.x !== 0 || oldTransform.y !== 0 || oldTransform.scale !== 1 || oldTransform.rotate !== 0 || oldTransform.flipX || oldTransform.flipY) onTransform?.({
22
+ transform: { ...initialTransform },
23
+ action
24
+ });
25
+ };
26
+ const updateTransform = (newTransform, action) => {
27
+ if (frameId.value === null) {
28
+ updateQueue.value = [];
29
+ frameId.value = raf(() => {
30
+ let mergedState = { ...transform.value };
31
+ for (const queuedState of updateQueue.value) mergedState = {
32
+ ...mergedState,
33
+ ...queuedState
34
+ };
35
+ frameId.value = null;
36
+ onTransform?.({
37
+ transform: mergedState,
38
+ action
39
+ });
40
+ setTransform(mergedState);
41
+ });
42
+ }
43
+ updateQueue.value.push({
44
+ ...transform.value,
45
+ ...newTransform
46
+ });
47
+ };
48
+ const dispatchZoomChange = (ratio, action, centerX, centerY, isTouch) => {
49
+ const imageElement = imageRef.value;
50
+ if (!imageElement) return;
51
+ const { width, height, offsetWidth, offsetHeight, offsetLeft, offsetTop } = imageElement;
52
+ let adjustedRatio = ratio;
53
+ let newScale = transform.value.scale * ratio;
54
+ if (newScale > maxScale.value) {
55
+ newScale = maxScale.value;
56
+ adjustedRatio = maxScale.value / transform.value.scale;
57
+ } else if (newScale < minScale.value) {
58
+ newScale = isTouch ? newScale : minScale.value;
59
+ adjustedRatio = newScale / transform.value.scale;
60
+ }
61
+ const mergedCenterX = centerX ?? windowWidth.value / 2;
62
+ const mergedCenterY = centerY ?? windowHeight.value / 2;
63
+ const diffRatio = adjustedRatio - 1;
64
+ const diffImageX = diffRatio * width * .5;
65
+ const diffImageY = diffRatio * height * .5;
66
+ const diffOffsetLeft = diffRatio * (mergedCenterX - transform.value.x - offsetLeft);
67
+ const diffOffsetTop = diffRatio * (mergedCenterY - transform.value.y - offsetTop);
68
+ let newX = transform.value.x - (diffOffsetLeft - diffImageX);
69
+ let newY = transform.value.y - (diffOffsetTop - diffImageY);
70
+ if (ratio < 1 && newScale === 1) {
71
+ const scaledWidth = offsetWidth * newScale;
72
+ const scaledHeight = offsetHeight * newScale;
73
+ if (scaledWidth <= windowWidth.value && scaledHeight <= windowHeight.value) {
74
+ newX = 0;
75
+ newY = 0;
76
+ }
77
+ }
78
+ updateTransform({
79
+ x: newX,
80
+ y: newY,
81
+ scale: newScale
82
+ }, action);
83
+ };
84
+ return {
85
+ transform,
86
+ resetTransform,
87
+ updateTransform,
88
+ dispatchZoomChange
89
+ };
90
+ }
91
+ //#endregion
92
+ export { useImageTransform as default };
@@ -0,0 +1,22 @@
1
+ import { DispatchZoomChangeFunc, TransformType, UpdateTransformFunc } from "../interface.js";
2
+ import { Ref } from "vue";
3
+
4
+ //#region src/hooks/useMouseEvent.d.ts
5
+ interface UseMouseEventOptions {
6
+ imageRef: Ref<HTMLImageElement | undefined>;
7
+ movable: Ref<boolean>;
8
+ visible: Ref<boolean>;
9
+ scaleStep: Ref<number>;
10
+ transform: Ref<TransformType>;
11
+ updateTransform: UpdateTransformFunc;
12
+ dispatchZoomChange: DispatchZoomChangeFunc;
13
+ windowWidth: Ref<number>;
14
+ windowHeight: Ref<number>;
15
+ }
16
+ declare function useMouseEvent(options: UseMouseEventOptions): {
17
+ isMoving: Ref<boolean, boolean>;
18
+ onMouseDown: (event: MouseEvent) => void;
19
+ onWheel: (event: WheelEvent) => void;
20
+ };
21
+ //#endregion
22
+ export { UseMouseEventOptions, useMouseEvent as default };
@@ -0,0 +1,71 @@
1
+ import { getImageBoundaryFix } from "./useImageBoundary.js";
2
+ import { ref } from "vue";
3
+ import { useEventListener } from "@vueuse/core";
4
+ //#region src/hooks/useMouseEvent.ts
5
+ const BASE_SCALE_RATIO = 1;
6
+ const WHEEL_MAX_SCALE_RATIO = 2;
7
+ function useMouseEvent(options) {
8
+ const { imageRef, movable, visible, scaleStep, transform, updateTransform, dispatchZoomChange, windowWidth, windowHeight } = options;
9
+ const isMoving = ref(false);
10
+ const startPosition = ref({
11
+ diffX: 0,
12
+ diffY: 0,
13
+ transformX: 0,
14
+ transformY: 0
15
+ });
16
+ const onMouseDown = (event) => {
17
+ if (!movable.value || event.button !== 0) return;
18
+ event.preventDefault();
19
+ event.stopPropagation();
20
+ startPosition.value = {
21
+ diffX: event.pageX - transform.value.x,
22
+ diffY: event.pageY - transform.value.y,
23
+ transformX: transform.value.x,
24
+ transformY: transform.value.y
25
+ };
26
+ isMoving.value = true;
27
+ };
28
+ const onMouseMove = (event) => {
29
+ if (!visible.value || !isMoving.value) return;
30
+ updateTransform({
31
+ x: event.pageX - startPosition.value.diffX,
32
+ y: event.pageY - startPosition.value.diffY
33
+ }, "move");
34
+ };
35
+ const onMouseUp = () => {
36
+ if (!visible.value || !isMoving.value) return;
37
+ isMoving.value = false;
38
+ const { transformX, transformY } = startPosition.value;
39
+ if (!(transform.value.x !== transformX && transform.value.y !== transformY)) return;
40
+ const imageElement = imageRef.value;
41
+ if (!imageElement) return;
42
+ const scaledWidth = imageElement.offsetWidth * transform.value.scale;
43
+ const scaledHeight = imageElement.offsetHeight * transform.value.scale;
44
+ const { left, top } = imageElement.getBoundingClientRect();
45
+ const isRotated = transform.value.rotate % 180 !== 0;
46
+ const boundaryFix = getImageBoundaryFix({
47
+ imageWidth: isRotated ? scaledHeight : scaledWidth,
48
+ imageHeight: isRotated ? scaledWidth : scaledHeight,
49
+ imageLeft: left,
50
+ imageTop: top,
51
+ windowWidth: windowWidth.value,
52
+ windowHeight: windowHeight.value
53
+ });
54
+ if (boundaryFix) updateTransform({ ...boundaryFix }, "dragRebound");
55
+ };
56
+ const onWheel = (event) => {
57
+ if (!visible.value || event.deltaY === 0) return;
58
+ let ratio = BASE_SCALE_RATIO + Math.min(Math.abs(event.deltaY / 100), WHEEL_MAX_SCALE_RATIO) * scaleStep.value;
59
+ if (event.deltaY > 0) ratio = BASE_SCALE_RATIO / ratio;
60
+ dispatchZoomChange(ratio, "wheel", event.clientX, event.clientY);
61
+ };
62
+ useEventListener(window, "mouseup", onMouseUp);
63
+ useEventListener(window, "mousemove", onMouseMove);
64
+ return {
65
+ isMoving,
66
+ onMouseDown,
67
+ onWheel
68
+ };
69
+ }
70
+ //#endregion
71
+ export { useMouseEvent as default };
@@ -0,0 +1,23 @@
1
+ import { DispatchZoomChangeFunc, TransformType, UpdateTransformFunc } from "../interface.js";
2
+ import { Ref } from "vue";
3
+
4
+ //#region src/hooks/useTouchEvent.d.ts
5
+ interface UseTouchEventOptions {
6
+ imageRef: Ref<HTMLImageElement | undefined>;
7
+ movable: Ref<boolean>;
8
+ visible: Ref<boolean>;
9
+ minScale: Ref<number>;
10
+ transform: Ref<TransformType>;
11
+ updateTransform: UpdateTransformFunc;
12
+ dispatchZoomChange: DispatchZoomChangeFunc;
13
+ windowWidth: Ref<number>;
14
+ windowHeight: Ref<number>;
15
+ }
16
+ declare function useTouchEvent(options: UseTouchEventOptions): {
17
+ isTouching: Ref<boolean, boolean>;
18
+ onTouchStart: (event: TouchEvent) => void;
19
+ onTouchMove: (event: TouchEvent) => void;
20
+ onTouchEnd: () => void;
21
+ };
22
+ //#endregion
23
+ export { UseTouchEventOptions, useTouchEvent as default };
@@ -1,23 +1,20 @@
1
- import addEventListenerWrap from "../utils/addEventListener.js";
2
- import getFixScaleEleTransPosition from "./getFixScaleEleTransPosition.js";
1
+ import { getImageBoundaryFix } from "./useImageBoundary.js";
3
2
  import { ref } from "vue";
4
- import { useEffect, useState } from "@gx-design-vue/pro-hooks";
5
-
6
- //#region src/ImagePreview/hooks/useTouchEvent.ts
3
+ import { useEventListener } from "@vueuse/core";
4
+ //#region src/hooks/useTouchEvent.ts
7
5
  function getDistance(a, b) {
8
- const x = a.x - b.x;
9
- const y = a.y - b.y;
10
- return Math.hypot(x, y);
6
+ return Math.hypot(a.x - b.x, a.y - b.y);
11
7
  }
12
- function getCenter(oldPoint1, oldPoint2, newPoint1, newPoint2) {
8
+ function getTouchCenter(oldPoint1, oldPoint2, newPoint1, newPoint2) {
13
9
  const distance1 = getDistance(oldPoint1, newPoint1);
14
10
  const distance2 = getDistance(oldPoint2, newPoint2);
15
11
  if (distance1 === 0 && distance2 === 0) return [oldPoint1.x, oldPoint1.y];
16
12
  const ratio = distance1 / (distance1 + distance2);
17
13
  return [oldPoint1.x + ratio * (oldPoint2.x - oldPoint1.x), oldPoint1.y + ratio * (oldPoint2.y - oldPoint1.y)];
18
14
  }
19
- function useTouchEvent(imgRef, movable, visible, minScale, transform, updateTransform, dispatchZoomChange) {
20
- const [isTouching, setIsTouching] = useState(false);
15
+ function useTouchEvent(options) {
16
+ const { imageRef, movable, visible, minScale, transform, updateTransform, dispatchZoomChange, windowWidth, windowHeight } = options;
17
+ const isTouching = ref(false);
21
18
  const touchPointInfo = ref({
22
19
  point1: {
23
20
  x: 0,
@@ -38,7 +35,7 @@ function useTouchEvent(imgRef, movable, visible, minScale, transform, updateTran
38
35
  const onTouchStart = (event) => {
39
36
  if (!movable.value) return;
40
37
  event.stopPropagation();
41
- setIsTouching(true);
38
+ isTouching.value = true;
42
39
  const { touches = [] } = event;
43
40
  if (touches.length > 1) updateTouchPointInfo({
44
41
  point1: {
@@ -71,7 +68,7 @@ function useTouchEvent(imgRef, movable, visible, minScale, transform, updateTran
71
68
  x: touches[1].clientX,
72
69
  y: touches[1].clientY
73
70
  };
74
- const [centerX, centerY] = getCenter(point1, point2, newPoint1, newPoint2);
71
+ const [centerX, centerY] = getTouchCenter(point1, point2, newPoint1, newPoint2);
75
72
  dispatchZoomChange(getDistance(newPoint1, newPoint2) / getDistance(point1, point2), "touchZoom", centerX, centerY, true);
76
73
  updateTouchPointInfo({
77
74
  point1: newPoint1,
@@ -88,29 +85,32 @@ function useTouchEvent(imgRef, movable, visible, minScale, transform, updateTran
88
85
  };
89
86
  const onTouchEnd = () => {
90
87
  if (!visible.value) return;
91
- if (isTouching) setIsTouching(false);
88
+ if (isTouching.value) isTouching.value = false;
92
89
  updateTouchPointInfo({ eventType: "none" });
93
- if (minScale.value > transform.value.scale)
94
- /** When the scaling ratio is less than the minimum scaling ratio, reset the scaling ratio */
95
- return updateTransform({
90
+ if (minScale.value > transform.value.scale) return updateTransform({
96
91
  x: 0,
97
92
  y: 0,
98
93
  scale: minScale.value
99
94
  }, "touchZoom");
100
- const width = imgRef.value.offsetWidth * transform.value.scale;
101
- const height = imgRef.value.offsetHeight * transform.value.scale;
102
- const { left, top } = imgRef.value.getBoundingClientRect();
103
- const isRotate = transform.value.rotate % 180 !== 0;
104
- const fixState = getFixScaleEleTransPosition(isRotate ? height : width, isRotate ? width : height, left, top);
105
- if (fixState) updateTransform({ ...fixState }, "dragRebound");
95
+ const imageElement = imageRef.value;
96
+ if (!imageElement) return;
97
+ const scaledWidth = imageElement.offsetWidth * transform.value.scale;
98
+ const scaledHeight = imageElement.offsetHeight * transform.value.scale;
99
+ const { left, top } = imageElement.getBoundingClientRect();
100
+ const isRotated = transform.value.rotate % 180 !== 0;
101
+ const boundaryFix = getImageBoundaryFix({
102
+ imageWidth: isRotated ? scaledHeight : scaledWidth,
103
+ imageHeight: isRotated ? scaledWidth : scaledHeight,
104
+ imageLeft: left,
105
+ imageTop: top,
106
+ windowWidth: windowWidth.value,
107
+ windowHeight: windowHeight.value
108
+ });
109
+ if (boundaryFix) updateTransform({ ...boundaryFix }, "dragRebound");
106
110
  };
107
- useEffect(() => {
108
- let onTouchMoveListener;
109
- if (visible.value && movable.value) onTouchMoveListener = addEventListenerWrap(window, "touchmove", (e) => e.preventDefault(), { passive: false });
110
- return () => {
111
- onTouchMoveListener?.remove();
112
- };
113
- }, [visible, movable]);
111
+ useEventListener(window, "touchmove", (event) => {
112
+ if (visible.value && movable.value) event.preventDefault();
113
+ }, { passive: false });
114
114
  return {
115
115
  isTouching,
116
116
  onTouchStart,
@@ -118,6 +118,5 @@ function useTouchEvent(imgRef, movable, visible, minScale, transform, updateTran
118
118
  onTouchEnd
119
119
  };
120
120
  }
121
-
122
121
  //#endregion
123
- export { useTouchEvent as default };
122
+ export { useTouchEvent as default };
package/dist/index.d.ts CHANGED
@@ -1,5 +1,4 @@
1
- import { BaseImagePreviewProps, PreviewPropsIcons } from "./ImagePreview/props.js";
2
- import { baseProps, imageProps } from "./props.js";
3
- import GImage, { GImageProps } from "./GImage.js";
4
- import GImagePreview, { ImagePreviewProps } from "./ImagePreview/index.js";
5
- export { BaseImagePreviewProps, GImage, GImagePreview, type GImageProps, type ImagePreviewProps, PreviewPropsIcons, baseProps, imageProps };
1
+ import { DispatchZoomChangeFunc, ForwardGImageType, ForwardImagePreviewType, GImageEmits, GImageExpose, GImageProps, GImageSlotNames, GImageSlots, ImageFitType, ImageLoadingType, ImagePreviewConfig, ImagePreviewEmits, ImagePreviewExpose, ImagePreviewProps, ImagePreviewSlots, PreviewPropsIcons, PreviewSlotNames, TransformAction, TransformType, UpdateTransformFunc } from "./interface.js";
2
+ import _default from "./Image.js";
3
+ import _default$1 from "./ImagePreview.js";
4
+ export { type DispatchZoomChangeFunc, type ForwardGImageType, type ForwardImagePreviewType, _default as GImage, type GImageEmits, type GImageExpose, _default$1 as GImagePreview, type GImageProps, type GImageSlotNames, type GImageSlots, type ImageFitType, type ImageLoadingType, type ImagePreviewConfig, type ImagePreviewEmits, type ImagePreviewExpose, type ImagePreviewProps, type ImagePreviewSlots, type PreviewPropsIcons, type PreviewSlotNames, type TransformAction, type TransformType, type UpdateTransformFunc };
package/dist/index.js CHANGED
@@ -1,6 +1,3 @@
1
- import { baseProps, imageProps } from "./props.js";
2
- import "./ImagePreview/props.js";
3
- import ImagePreview_default from "./ImagePreview/index.js";
4
- import GImage_default from "./GImage.js";
5
-
6
- export { GImage_default as GImage, ImagePreview_default as GImagePreview, baseProps, imageProps };
1
+ import GImagePreview from "./ImagePreview.js";
2
+ import GImage from "./Image.js";
3
+ export { GImage, GImagePreview };