sakura-preview-file 1.0.0

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.
@@ -0,0 +1 @@
1
+ !function(e,l){"object"==typeof exports&&"undefined"!=typeof module?l(exports,require("vue"),require("sakura-utils"),require("vue-pdf-embed"),require("pdfjs-dist"),require("@vueuse/core"),require("docx-preview")):"function"==typeof define&&define.amd?define(["exports","vue","sakura-utils","vue-pdf-embed","pdfjs-dist","@vueuse/core","docx-preview"],l):l((e="undefined"!=typeof globalThis?globalThis:e||self).SakuraPreviewFile={},e.Vue,e.sakuraUtils,e.VuePdfEmbed,null,e.core,e.docxPreview)}(this,(function(e,l,a,o,t,n,r){"use strict";const s=["stroke"],i=(e,l)=>{const a=e.__vccOpts||e;for(const[o,t]of l)a[o]=t;return a},c={Circle:i(l.defineComponent({__name:"Circle",props:{size:{default:50},color:{default:"#409eff"},duration:{default:2}},setup(e){const o=e,t=l.computed(()=>{const{size:e,duration:l}=o;return{"--circle-size":a.addUnit(e),"--circle-duration":l+"s"}});return(a,o)=>(l.openBlock(),l.createElementBlock("svg",{class:"circular",viewBox:"0 0 50 50",style:l.normalizeStyle([t.value])},[l.createElementVNode("circle",{class:"circular__path-inner",cx:"25",cy:"25",r:"20",fill:"none",stroke:e.color,"stroke-width":"4","stroke-miterlimit":"10"},null,8,s)],4))}}),[["__scopeId","data-v-51d1fa15"]]),Dot:i(l.defineComponent({__name:"Dot",props:{gap:{default:6},color:{default:"var(--preview-file-primary-color)"},size:{default:10},duration:{default:1.4}},setup(e){const o=e,t=l.computed(()=>{const{size:e,gap:l,duration:t,color:n}=o;return{"--dot-size":a.addUnit(e),"--dot-duration":t+"s","--dot-gap":a.addUnit(l),"--dot-color":n}});return(e,a)=>(l.openBlock(),l.createElementBlock("div",{class:"dot",style:l.normalizeStyle([t.value])},[...a[0]||(a[0]=[l.createElementVNode("div",{class:"dot__item"},null,-1),l.createElementVNode("div",{class:"dot__item"},null,-1),l.createElementVNode("div",{class:"dot__item"},null,-1)])],4))}}),[["__scopeId","data-v-2acd99b5"]]),Progress:i(l.defineComponent({__name:"Progress",props:{width:{default:200},height:{default:4},background:{default:"#ebeef5"},radius:{},color:{default:"var(--preview-file-primary-color)"},duration:{default:2}},setup(e){const o=e,t=l.computed(()=>{const{width:e,height:l,color:t,duration:n,radius:r,background:s}=o;return{"--progress-width":a.addUnit(e),"--progress-height":a.addUnit(l),"--progress-border-radius":a.addUnit(r||Number(l)/2),"--progress-background":s,"--progress-duration":n+"s","--progress-color":t}});return(e,a)=>(l.openBlock(),l.createElementBlock("div",{class:"progress",style:l.normalizeStyle([t.value])},[...a[0]||(a[0]=[l.createElementVNode("div",{class:"progress__bar"},null,-1)])],4))}}),[["__scopeId","data-v-3a710001"]]),Cube:i(l.defineComponent({__name:"Cube",props:{size:{default:40},color:{default:"var(--preview-file-primary-color)"},duration:{default:1.3}},setup(e){const o=e,t=l.computed(()=>{const{size:e,duration:l,color:t}=o;return{"--cube-size":a.addUnit(e),"--cube-color":t,"--cube-duration":l+"s"}});return(e,a)=>(l.openBlock(),l.createElementBlock("div",{class:"cube",style:l.normalizeStyle([t.value])},[(l.openBlock(),l.createElementBlock(l.Fragment,null,l.renderList(9,e=>l.createElementVNode("div",{key:e,class:"cube__item"})),64))],4))}}),[["__scopeId","data-v-0e6bb9d0"]])},u=(e,l,a,o,t)=>{let n=e+"-"+l;return a&&(n+="-"+a),o&&(n+="__"+o),t&&(n+="--"+t),n},d=e=>{const o=l.ref(""),t=l.computed(()=>a.isEmpty(o.value)?a.FILE_TYPE.IMAGE:a.getFileType(e.convertToLocalFileUrl?e.src:o.value));return l.watchEffect(async()=>{const{src:l}=e;o.value="",l instanceof Blob?o.value=a.base64ToFileUrl(await a.blobToBase64(l)):a.isBase64File(l)?o.value=a.base64ToFileUrl(l):o.value=e.convertToLocalFileUrl?await a.networkFileUrlToLocalFileUrl(l):l}),{fileType:t,fileUrl:o}},m=(e={})=>{const{maxScale:o=3,minScale:t=.4,stepNum:r=.2,wheelNum:s=.3}=e,i=l.ref(1),c=l.computed(()=>a.numberToFixed(100*i.value,0)+"%"),u=(e=r)=>{i.value=Math.max(t,i.value-=e)},d=(e=r)=>{i.value=(i.value+=e)>o?o:i.value},m=n.useThrottleFn(()=>u(),300),p=n.useThrottleFn(()=>d(),300);return{clickMinusScale:m,clickPlusScale:p,scale:i,scaleText:c,onWheel:e=>{e.ctrlKey&&(e.preventDefault(),e.deltaY>0?u(Math.random()*s):d(Math.random()*s))},resetWheelState:()=>{i.value=1}}},p=(e,a)=>{const{onWheel:o,clickMinusScale:t,clickPlusScale:n,resetWheelState:r,scale:s,scaleText:i}=m(),{isMouseDown:c,onMouseStart:u,resetMouseState:d,translateX:p,translateY:f}=(()=>{const e=l.ref(!1),a=l.ref(0),o=l.ref(0),t=l.ref(0),n=l.ref(0),r=l=>{if(!e.value)return;l.preventDefault();const r=l.clientX,s=l.clientY;t.value=r-a.value,n.value=s-o.value},s=()=>{e.value=!1,window.removeEventListener("mousemove",r),window.removeEventListener("mouseup",s)};return{resetMouseState:()=>{a.value=0,o.value=0,t.value=0,n.value=0,e.value=!1},onMouseStart:l=>{e.value=!0,a.value=l.clientX-t.value,o.value=l.clientY-n.value,window.addEventListener("mousemove",r),window.addEventListener("mouseup",s)},translateX:t,translateY:n,isMouseDown:e}})(),v=l.computed(()=>({transform:`translate(${p.value}px, ${f.value}px) scale(${s.value})`,transformOrigin:"center center"})),g=()=>{d(),r()};l.watch(()=>null==a?void 0:a.value,g);const k=l.ref(null);return l.watch(()=>e.value,()=>{k.value&&(k.value.scrollTop=0,g())}),{wrapperRef:k,onWheel:o,clickMinusScale:t,clickPlusScale:n,resetWheelState:r,scale:s,scaleText:i,isMouseDown:c,onMouseStart:u,resetMouseState:d,translateX:p,translateY:f,wrapperStyle:v}};var f=(e=>(e["完成"]="loaded",e["改变"]="change",e["下一页"]="next",e["上一页"]="prev",e["放大"]="zoomIn",e["缩小"]="zoomOut",e))(f||{});const v={class:"file-data__tools"},g={class:"file-data__page"},k={class:"file-data__text"},b={key:1,class:"file-data__scale"},w={class:"file-data__scale-text"},h=l.defineComponent({__name:"Tools",props:l.mergeModels({showTools:{type:Boolean},total:{},scaleText:{},nextPageDisabled:{type:Boolean},prevPageDisabled:{type:Boolean},enablePagination:{type:Boolean},enableMove:{type:Boolean},enableScale:{type:Boolean}},{modelValue:{type:Number,default:1},modelModifiers:{}}),emits:l.mergeModels([f.改变,f.下一页,f.上一页,f.放大,f.缩小],["update:modelValue"]),setup(e,{emit:a}){const o=a,t=l.useModel(e,"modelValue");return(a,n)=>(l.openBlock(),l.createElementBlock("div",v,[l.renderSlot(a.$slots,"default"),e.showTools?(l.openBlock(),l.createElementBlock(l.Fragment,{key:0},[e.enablePagination?(l.openBlock(),l.createElementBlock(l.Fragment,{key:0},[l.createElementVNode("div",{class:l.normalizeClass(["file-data__arrow file-data__arrow-prev",[e.prevPageDisabled?"is-disabled":""]]),onClick:n[0]||(n[0]=e=>o(l.unref(f).上一页))},null,2),l.createElementVNode("div",g,[l.withDirectives(l.createElementVNode("input",{class:"file-data__input","onUpdate:modelValue":n[1]||(n[1]=e=>t.value=e),onBlur:n[2]||(n[2]=e=>o(l.unref(f).改变))},null,544),[[l.vModelText,t.value]]),l.createElementVNode("span",k," / "+l.toDisplayString(e.total),1)]),l.createElementVNode("div",{class:l.normalizeClass(["file-data__arrow file-data__arrow-next",[e.nextPageDisabled?"is-disabled":""]]),onClick:n[3]||(n[3]=e=>o(l.unref(f).下一页))},null,2)],64)):l.createCommentVNode("",!0),e.enableScale?(l.openBlock(),l.createElementBlock("div",b,[l.createElementVNode("div",{class:"file-data__icon file-data__minus",onClick:n[4]||(n[4]=e=>o(l.unref(f).缩小))}),l.createElementVNode("span",w,l.toDisplayString(e.scaleText),1),l.createElementVNode("div",{class:"file-data__icon file-data__plus",onClick:n[5]||(n[5]=e=>o(l.unref(f).放大))})])):l.createCommentVNode("",!0)],64)):l.createCommentVNode("",!0)]))}}),y={class:"file-data"},_=l.defineComponent({__name:"Pdf",props:l.mergeModels({enablePagination:{type:Boolean,default:!0},enableScale:{type:Boolean,default:!0},enableMove:{type:Boolean,default:!0},fileUrl:{},showTools:{type:Boolean,default:!0}},{modelValue:{type:Boolean,default:!1},modelModifiers:{}}),emits:l.mergeModels([f.完成],["update:modelValue"]),setup(e,{emit:t}){const r=e,s=t,i=l.useModel(e,"modelValue"),c=l.computed(()=>({url:r.fileUrl,fontExtraProperties:!0,cMapUrl:"./cmaps/",cMapPacked:!0,disableFontFace:!1,enableXfa:!0,fontLoadTimeout:3e4,verbosity:0})),u=l.reactive({pageNum:1,total:0,isError:!1}),d=l.ref(0),m=async e=>{var o;u.total=e._pdfInfo.numPages,await l.nextTick(),await a.sleep(50),d.value=(null==(o=document.querySelector(".vue-file-dataembed"))?void 0:o.clientHeight)??0},v=()=>{u.isError=!0},g=async()=>{await a.sleep(300),i.value=!1,s(f.完成)},{prevPageDisabled:k,nextPageDisabled:b,nextPage:w,_pageNum:_,onPageNumChange:B,prevPage:V}=(e=>{const a=l.computed(()=>e.pageNum>=e.total),o=n.useThrottleFn(()=>{a.value||e.pageNum++},500),t=l.computed(()=>e.pageNum<=1),r=n.useThrottleFn(()=>{t.value||e.pageNum--},500),s=l.ref(1);return l.watchEffect(()=>{s.value=e.pageNum}),{nextPage:o,nextPageDisabled:a,prevPage:r,prevPageDisabled:t,_pageNum:s,onPageNumChange:()=>{const{total:l}=e;e.pageNum=Math.max(Math.min(s.value,l),1)}}})(u),N=()=>{i.value=!0,_.value=1,a.extend(u,{pageNum:1,total:0,isError:!1})};l.watch(()=>r.fileUrl,N),l.onMounted(N);const{pageNum:E}=l.toRefs(u),{fileUrl:S}=l.toRefs(r),{onWheel:M,clickMinusScale:x,clickPlusScale:C,isMouseDown:P,scaleText:T,onMouseStart:U,wrapperStyle:F}=p(S,E);return(a,t)=>(l.openBlock(),l.createElementBlock("div",y,[l.createElementVNode("div",{ref:"wrapperRef",class:l.normalizeClass(["file-data__wrapper",[l.unref(P)?"is-drag":""]]),onMousedown:t[0]||(t[0]=a=>e.enableMove&&l.unref(U)(a)),onWheel:t[1]||(t[1]=a=>e.enableScale&&l.unref(M)(a))},[l.createElementVNode("div",{style:l.normalizeStyle([l.unref(F)])},[l.createVNode(l.unref(o),{class:"pdf",source:c.value,page:e.enablePagination?u.pageNum:void 0,scale:1,onLoaded:m,onRendered:g,onError:v},null,8,["source","page"])],4)],34),e.enablePagination||e.enableScale||e.showTools?(l.openBlock(),l.createBlock(h,{key:0,modelValue:l.unref(_),"onUpdate:modelValue":t[2]||(t[2]=e=>l.isRef(_)?_.value=e:null),total:u.total,"prev-page-disabled":l.unref(k),"next-page-disabled":l.unref(b),"scale-text":l.unref(T),"show-tools":e.showTools,"enable-pagination":e.enablePagination,"enable-scale":e.enableScale,"enable-move":e.enableMove,onChange:l.unref(B),onNext:l.unref(w),onPrev:l.unref(V),onZoomIn:l.unref(C),onZoomOut:l.unref(x)},{default:l.withCtx(()=>[l.renderSlot(a.$slots,"default",{fileDataState:u})]),_:3},8,["modelValue","total","prev-page-disabled","next-page-disabled","scale-text","show-tools","enable-pagination","enable-scale","enable-move","onChange","onNext","onPrev","onZoomIn","onZoomOut"])):l.createCommentVNode("",!0)]))}}),B={class:"file-data"},V=l.defineComponent({__name:"Word",props:l.mergeModels({enablePagination:{type:Boolean},enableScale:{type:Boolean},enableMove:{type:Boolean},fileUrl:{},showTools:{type:Boolean,default:!0},isLocalFile:{type:Boolean,default:!1},enableWrapper:{type:Boolean,default:!0}},{modelValue:{type:Boolean,default:!1},modelModifiers:{}}),emits:l.mergeModels([f.完成],["update:modelValue"]),setup(e,{emit:o}){const t=e,n=l.useModel(e,"modelValue"),s=l.useTemplateRef("wordFileRef"),i=async()=>{try{n.value=!0,s.value&&(s.value.innerHTML="");const e=await(async()=>{const e=await fetch(t.fileUrl),l=await e.blob();return a.base64ToFile(await a.blobToBase64(l),a.generateId()+".docx")})();await r.renderAsync(e,s.value,void 0,{className:"docx",inWrapper:t.enableWrapper,ignoreWidth:!0,ignoreHeight:!1,ignoreFonts:!0,breakPages:!0,ignoreLastRenderedPageBreak:!0,experimental:!1,trimXmlDeclaration:!0}),await l.nextTick()}catch(e){console.log("fileUrl---",t.fileUrl),console.log("加载word文件失败----",e)}finally{n.value=!1}};l.onMounted(i),l.watch(()=>t.fileUrl,i);const{fileUrl:c}=l.toRefs(t),{onWheel:u,clickMinusScale:d,clickPlusScale:m,isMouseDown:f,scaleText:v,onMouseStart:g,wrapperStyle:k}=p(c);return(a,o)=>(l.openBlock(),l.createElementBlock("div",B,[l.createElementVNode("div",{ref:"wrapperRef",class:l.normalizeClass(["file-data__wrapper",[l.unref(f)?"is-drag":"",e.enableWrapper?"is-enable-wrapper":""]]),onMousedown:o[0]||(o[0]=a=>e.enableMove&&l.unref(g)(a)),onWheel:o[1]||(o[1]=a=>e.enableScale&&l.unref(u)(a))},[l.createElementVNode("div",{ref_key:"wordFileRef",ref:s,style:l.normalizeStyle([l.unref(k)])},null,4)],34),e.enablePagination||e.enableScale||e.showTools?(l.openBlock(),l.createBlock(h,{key:0,"scale-text":l.unref(v),"show-tools":e.showTools,"enable-scale":e.enableScale,"enable-move":e.enableMove,onZoomIn:l.unref(m),onZoomOut:l.unref(d)},{default:l.withCtx(()=>[l.renderSlot(a.$slots,"default")]),_:3},8,["scale-text","show-tools","enable-scale","enable-move","onZoomIn","onZoomOut"])):l.createCommentVNode("",!0)]))}}),N={width:"24",height:"24",fill:"none"};const E=i({},[["render",function(e,a){return l.openBlock(),l.createElementBlock("svg",N,[...a[0]||(a[0]=[l.createElementVNode("circle",{cx:"10.5",cy:"10.5",r:"6.5",stroke:"#fff","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1),l.createElementVNode("path",{d:"M15.5 15.5L20 20",stroke:"#fff","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])])}]]),S={width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"};const M=i({},[["render",function(e,a){return l.openBlock(),l.createElementBlock("svg",S,[...a[0]||(a[0]=[l.createElementVNode("circle",{cx:"10.5",cy:"10.5",r:"6.5",stroke:"#fff","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1),l.createElementVNode("path",{d:"M7.5 10.5H13.5",stroke:"#fff","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1),l.createElementVNode("path",{d:"M15.5 15.5L20 20",stroke:"#fff","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])])}]]),x={width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"};const C=i({},[["render",function(e,a){return l.openBlock(),l.createElementBlock("svg",x,[...a[0]||(a[0]=[l.createElementVNode("path",{d:"M7 7L17 17",stroke:"#fff","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1),l.createElementVNode("path",{d:"M7 17L17 7",stroke:"#fff","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])])}]]),P={class:"file-data"},T={class:"file-data__wrapper is-image"},U=["src"],F={class:"sakura-preview__image--data"},z=["src"],D={key:0,class:"sakura-preview__image--tools"},L=l.defineComponent({__name:"Image",props:l.mergeModels({enablePagination:{type:Boolean},enableScale:{type:Boolean},enableMove:{type:Boolean},fileUrl:{},showTools:{type:Boolean}},{modelValue:{type:Boolean,default:!1},modelModifiers:{}}),emits:["update:modelValue"],setup(e){const o=e,t=l.useModel(e,"modelValue"),r=()=>{t.value=!1},{width:s,height:i}=n.useWindowSize(),c=l.ref(0),u=l.ref(0);l.onMounted(async()=>{const e=o.fileUrl;c.value=0,u.value=0;const l=new Image;l.src=e,l.onload=()=>{c.value=l.width,u.value=l.height}});const d=l.computed(()=>c.value>s.value?{width:"auto",height:a.addUnit(i.value)}:{width:a.addUnit(c.value),height:a.addUnit(u.value)}),{fileUrl:m}=l.toRefs(o),{onWheel:f,onMouseStart:v,isMouseDown:g,clickMinusScale:k,clickPlusScale:b,wrapperStyle:w}=p(m),h=l.ref(!1),y=()=>{h.value=!h.value};return(a,o)=>(l.openBlock(),l.createElementBlock(l.Fragment,null,[l.createElementVNode("div",P,[l.createElementVNode("div",T,[l.createElementVNode("img",{class:"file-data__image",src:l.unref(m),alt:"",onLoad:r,onClick:y},null,40,U)])]),(l.openBlock(),l.createBlock(l.Teleport,{to:"body"},[l.createElementVNode("div",{class:l.normalizeClass(["sakura-preview-dialog",[h.value?"is-visible":""]])},[o[2]||(o[2]=l.createElementVNode("div",{class:"sakura-preview__image--mark"},null,-1)),l.createElementVNode("div",{ref:"wrapperRef",class:l.normalizeClass(["sakura-preview__image",[l.unref(g)?"is-drag":""]]),onMousedown:o[0]||(o[0]=a=>e.enableMove&&l.unref(v)(a)),onWheel:o[1]||(o[1]=a=>e.enableScale&&l.unref(f)(a))},[l.createElementVNode("div",F,[l.createElementVNode("img",{class:"dot-move",src:l.unref(m),style:l.normalizeStyle([d.value,l.unref(w)]),alt:""},null,12,z)]),l.createElementVNode("div",{class:"sakura-preview__image--close",onClick:y},[l.createVNode(C)]),e.enableScale?(l.openBlock(),l.createElementBlock("div",D,[l.createVNode(E,{onClick:l.unref(b)},null,8,["onClick"]),l.createVNode(M,{onClick:l.unref(k)},null,8,["onClick"])])):l.createCommentVNode("",!0)],34)],2)]))],64))}}),$=Symbol("PreviewFile"),W=l.defineComponent({__name:"preview-file",props:{width:{default:"100%"},height:{default:"100%"},src:{},enablePagination:{type:Boolean,default:!0},enableScale:{type:Boolean,default:!0},enableMove:{type:Boolean,default:!0},loadingType:{default:"circle"},loadingState:{default:()=>({})},convertToLocalFileUrl:{type:Boolean,default:!1},themeColor:{default:"#409eff"}},setup(e){const o=e;l.provide($,o);const t=((e,a)=>{const o=l.unref(a)??"sakura"??e,t=e=>`${o}-${e}`,n=(e,l)=>`${o}-${e}-${l}`;return{b:(l="")=>u(o,e,l,"",""),e:(l="")=>l?u(o,e,"",l,""):"",m:(l="")=>l?u(o,e,"","",l):"",be:(l="",a="")=>l&&a?u(o,e,l,a,""):"",em:(l="",a="")=>l&&a?u(o,e,"",l,a):"",bm:(l="",a="")=>l&&a?u(o,e,l,"",a):"",bem:(l="",a="",t="")=>l&&a&&t?u(o,e,l,a,t):"",is:(e,...l)=>(!l.length||l[0])&&e?"is-"+e:"",cssVar:e=>{const l={};for(const a in e)e[a]&&(l[`--${o}-${a} `]=e[a]);return l},cssBlockVar:(e,l)=>{const a={};for(const t in l)l[t]&&(a[`--${o}-${e}-${t}`]=l[t]);return a},cssVarName:t,cssBlockVarName:n,cssVarNameValue:e=>`var(--${t(e)})`,cssBlockVarNameValue:(e,l)=>`var(--${n(e,l)})`}})("preview-file"),n=l.computed(()=>{const{width:e,height:l,themeColor:t}=o,n={"--preview-file-primary-color":t};return a.isEmpty(e)||(n.width=a.addUnit(e)),a.isEmpty(l)||(n.height=a.addUnit(l)),n}),{fileType:r,fileUrl:s}=d(o),i=l.ref(!0),m=l.computed(()=>{const{loadingType:e}=o;switch(e){case"circle":return c.Circle;case"dot":return c.Dot;case"cube":return c.Cube;case"progress":default:return c.Progress}});return(c,u)=>(l.openBlock(),l.createElementBlock("div",{class:l.normalizeClass(l.unref(t).b()),style:l.normalizeStyle([n.value])},[l.unref(a.isEmpty)(l.unref(s))?l.createCommentVNode("",!0):(l.openBlock(),l.createElementBlock("div",{key:0,class:l.normalizeClass([l.unref(t).e("wrapper")])},[l.unref(a.isPdfFile)(l.unref(r))?(l.openBlock(),l.createBlock(_,{key:0,modelValue:i.value,"onUpdate:modelValue":u[0]||(u[0]=e=>i.value=e),"file-url":l.unref(s),"show-tools":!c.$slots.default,"enable-pagination":e.enablePagination,"enable-scale":e.enableScale,"enable-move":e.enableMove},{default:l.withCtx(({fileDataState:e})=>[l.renderSlot(c.$slots,"default",{fileState:e,data:o})]),_:3},8,["modelValue","file-url","show-tools","enable-pagination","enable-scale","enable-move"])):l.createCommentVNode("",!0),l.unref(a.isWordFile)(l.unref(r))?(l.openBlock(),l.createBlock(V,{key:1,modelValue:i.value,"onUpdate:modelValue":u[1]||(u[1]=e=>i.value=e),"file-url":l.unref(s),"show-tools":!c.$slots.default,"enable-pagination":e.enablePagination,"enable-scale":e.enableScale,"enable-move":e.enableMove,"is-local-file":e.convertToLocalFileUrl},null,8,["modelValue","file-url","show-tools","enable-pagination","enable-scale","enable-move","is-local-file"])):l.unref(a.isImageFile)(l.unref(r))?(l.openBlock(),l.createBlock(L,{key:2,modelValue:i.value,"onUpdate:modelValue":u[2]||(u[2]=e=>i.value=e),"file-url":l.unref(s),"show-tools":!c.$slots.default,"enable-scale":e.enableScale,"enable-move":e.enableMove},null,8,["modelValue","file-url","show-tools","enable-scale","enable-move"])):l.createCommentVNode("",!0)],2)),l.withDirectives(l.createElementVNode("div",{class:l.normalizeClass([l.unref(t).e("loading")])},[l.createElementVNode("div",{class:l.normalizeClass([l.unref(t).e("loading-spinner")])},[(l.openBlock(),l.createBlock(l.resolveDynamicComponent(m.value),l.normalizeProps(l.guardReactiveProps({...e.loadingState,color:e.themeColor})),null,16))],2)],2),[[l.vShow,i.value]])],6))}}),I=W;I.install=e=>{e.component("PreviewFile",W),e.component("Loading",c)},e.Loading=c,e.default=I,Object.defineProperties(e,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})}));
package/dist/style.css ADDED
@@ -0,0 +1 @@
1
+ .circular[data-v-51d1fa15]{position:relative;width:var(--circle-size);height:var(--circle-size)}.circular__path-inner[data-v-51d1fa15]{animation:dash-51d1fa15 var(--circle-duration) ease-in-out infinite;stroke-linecap:round}@keyframes dash-51d1fa15{0%{stroke-dasharray:1,150;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-35}to{stroke-dasharray:90,150;stroke-dashoffset:-124}}.dot[data-v-2acd99b5]{display:flex;align-items:center;justify-content:center;gap:var(--dot-gap)}.dot__item[data-v-2acd99b5]{width:var(--dot-size);height:var(--dot-size);border-radius:50%;background-color:var(--dot-color);animation:bounce-2acd99b5 var(--dot-duration) ease-in-out infinite}.dot__item[data-v-2acd99b5]:nth-child(2){animation-delay:-.32s}.dot__item[data-v-2acd99b5]:nth-child(3){animation-delay:-.16s}@keyframes bounce-2acd99b5{0%,80%,to{transform:scale(0);opacity:.5}40%{transform:scale(1);opacity:1}}.progress[data-v-3a710001]{width:var(--progress-width);height:var(--progress-height);background-color:var(--progress-background);border-radius:var(--progress-border-radius);overflow:hidden;position:relative}.progress__bar[data-v-3a710001]{position:absolute;width:100%;height:100%;background-color:var(--progress-color);border-radius:var(--progress-border-radius);animation:progress-3a710001 var(--progress-duration) ease-in-out infinite}@keyframes progress-3a710001{0%{transform:translate(-100%)}to{transform:translate(100%)}}.cube[data-v-0e6bb9d0]{width:var(--cube-size);height:var(--cube-size);position:relative;display:flex;flex-wrap:wrap}.cube__item[data-v-0e6bb9d0]{width:33%;height:33%;background-color:var(--cube-color);animation:cubeGrid-0e6bb9d0 var(--cube-duration) infinite ease-in-out}.cube__item[data-v-0e6bb9d0]:nth-child(1){animation-delay:.2s}.cube__item[data-v-0e6bb9d0]:nth-child(2){animation-delay:.3s}.cube__item[data-v-0e6bb9d0]:nth-child(3){animation-delay:.4s}.cube__item[data-v-0e6bb9d0]:nth-child(4){animation-delay:.1s}.cube__item[data-v-0e6bb9d0]:nth-child(5){animation-delay:.2s}.cube__item[data-v-0e6bb9d0]:nth-child(6){animation-delay:.3s}.cube__item[data-v-0e6bb9d0]:nth-child(7){animation-delay:0s}.cube__item[data-v-0e6bb9d0]:nth-child(8){animation-delay:.1s}.cube__item[data-v-0e6bb9d0]:nth-child(9){animation-delay:.2s}@keyframes cubeGrid-0e6bb9d0{0%,70%,to{transform:scaleZ(1)}35%{transform:scale3D(0,0,1)}}
package/package.json ADDED
@@ -0,0 +1,59 @@
1
+ {
2
+ "name": "sakura-preview-file",
3
+ "version": "1.0.0",
4
+ "description": "预览文件",
5
+ "type": "module",
6
+ "sideEffects": false,
7
+ "private": false,
8
+ "main": "./dist/sakura-preview-file.umd.cjs",
9
+ "module": "./dist/sakura-preview-file.js",
10
+ "types": "./dist/types/index.d.ts",
11
+ "exports": {
12
+ ".": {
13
+ "types": "./dist/types/index.d.ts",
14
+ "import": "./dist/sakura-preview-file.js",
15
+ "require": "./dist/sakura-preview-file.umd.cjs"
16
+ },
17
+ "./dist/style.css": "./dist/style.css",
18
+ "./*": "./*"
19
+ },
20
+ "files": [
21
+ "dist",
22
+ "src"
23
+ ],
24
+ "scripts": {
25
+ "dev": "vite",
26
+ "build": "npm run build:bundle",
27
+ "build:bundle": "vite build",
28
+ "build:types": "npx vue-tsc --declaration --emitDeclarationOnly --outDir dist/types",
29
+ "type-check": "npx vue-tsc --noEmit",
30
+ "test": "vitest",
31
+ "test:ui": "vitest --ui",
32
+ "test:coverage": "vitest run --coverage",
33
+ "lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix",
34
+ "prepublishOnly": "npm run build"
35
+ },
36
+ "peerDependencies": {
37
+ "@vueuse/core": "^12.3.0",
38
+ "docx-preview": "^0.3.7",
39
+ "pdfjs-dist": "2.3.200",
40
+ "sakura-utils": "^1.0.7",
41
+ "vue": "^3.3.0",
42
+ "vue-pdf-app": "^2.1.0",
43
+ "vue-pdf-embed": "^2.1.3"
44
+ },
45
+ "devDependencies": {
46
+ "@types/node": "^20.0.0",
47
+ "@types/pdfjs-dist": "^2.10.378",
48
+ "@vitejs/plugin-vue": "^4.0.0",
49
+ "@vitest/ui": "^0.34.0",
50
+ "@vue/test-utils": "^2.4.0",
51
+ "@vue/tsconfig": "^0.4.0",
52
+ "happy-dom": "^9.0.0",
53
+ "sass": "^1.97.0",
54
+ "typescript": "^5.0.0",
55
+ "vite": "^4.0.0",
56
+ "vitest": "^0.34.0",
57
+ "vue-tsc": "^3.2.1"
58
+ }
59
+ }
package/src/App.vue ADDED
@@ -0,0 +1,70 @@
1
+ <template>
2
+ <div class="preview-data">
3
+ <PreviewFile
4
+ :src="fileUrl"
5
+ enable-pagination
6
+ loading-type="cube"
7
+ convert-to-local-file-url
8
+ theme-color="red"
9
+ >
10
+
11
+ </PreviewFile>
12
+ </div>
13
+ <button @click="fileUrl = pdfFileUrl">change-pdf</button>
14
+ <button @click="fileUrl = pdfFileUrl2">change-pdf2</button>
15
+ <button @click="fileUrl = wordFileUrl">change-word</button>
16
+ <button @click="fileUrl = wordFileUrl2">change-word2</button>
17
+ <button @click="fileUrl = imageFileUrl">change-image</button>
18
+ <button @click="fileUrl = imageFileUrl2">change-image2</button>
19
+ </template>
20
+
21
+ <script setup lang="ts">
22
+ import PreviewFile from '../lib/preview-file/preview-file.vue'
23
+ import { ref } from 'vue'
24
+ // import VuePdfApp from 'vue-pdf-app'
25
+ // import 'vue-pdf-app/dist/icons/main.css'
26
+
27
+ const pdfFileUrl = 'https://zxfwzj.nbcourt.gov.cn/yszh/fp/yszh/wjsc/2025/12/23/df6c7058c11f4d7bac0a10b1fd59cc29/snoxw8mb806obnzg.pdf?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20251223T061644Z&X-Amz-SignedHeaders=host&X-Amz-Credential=0XKH2ncdi90pe1sthp7B%2F20251223%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Expires=10800&X-Amz-Signature=3d26133f9d77d9f21d4a07a3cad4712aa3aec6647aa482ee7dc24683fdcf8a5c'
28
+ const pdfFileUrl2 = 'https://zxfwzj.nbcourt.gov.cn/yszh/fp/yszh/wjsc/2025/12/23/59aabc90f0f34a94b49b68781f40cab9/scp6283zhf2q7rct.pdf?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20251223T061704Z&X-Amz-SignedHeaders=host&X-Amz-Credential=0XKH2ncdi90pe1sthp7B%2F20251223%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Expires=10800&X-Amz-Signature=bb5d7147e6b4ff874c614932b9403c87f1451c063efb803620df44761a8dc723'
29
+ const wordFileUrl = 'https://zxfwzj.nbcourt.gov.cn/yszh/fp/yszh/wjsc/2025/12/23/cbdf7b1ee4fd479690098f90e24d241c/shgjkeii8d16x1tq.docx?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20251223T060912Z&X-Amz-SignedHeaders=host&X-Amz-Credential=0XKH2ncdi90pe1sthp7B%2F20251223%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Expires=10800&X-Amz-Signature=d5f117023be0169818eed0699433c0b1b3810b88cbffa5a93f6f04b8f2a6cb16'
30
+ const wordFileUrl2 = 'https://zxfwzj.nbcourt.gov.cn/yszh/fp/yszh/wjsc/2025/12/23/590bbe20a7304ab6ab1419eb9add0465/s897q3svi80vnjxr.docx?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20251223T061108Z&X-Amz-SignedHeaders=host&X-Amz-Credential=0XKH2ncdi90pe1sthp7B%2F20251223%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Expires=10800&X-Amz-Signature=df34e4b5b6e42682ca9ef303644934b8be034e73b084dcf775540541f2a7306a'
31
+ const imageFileUrl = 'https://fuss10.elemecdn.com/d/e6/c4d93a3805b3ce3f323f7974e6f78jpeg.jpeg'
32
+ const imageFileUrl2 = 'https://zxfwzj.nbcourt.gov.cn/yszh/fp/yszh/wjsc/2025/12/23/01c9bc0af9544ed29e11c968e344c474/syx8iucxw3kcekml.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20251223T074254Z&X-Amz-SignedHeaders=host&X-Amz-Credential=0XKH2ncdi90pe1sthp7B%2F20251223%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Expires=10800&X-Amz-Signature=43af96c90ca6a477c4f3373a24ca978d45184e5badeb2f2afa82adb79cce8805'
33
+
34
+ const fileUrl = ref(wordFileUrl2)
35
+
36
+ const config = {
37
+ // 工具栏配置
38
+ toolbar: {
39
+ toolbarViewerRight: {
40
+ presentationMode: false, // 演示模式
41
+ openFile: false, // 打开文件
42
+ print: true, // 打印
43
+ download: true, // 下载
44
+ viewBookmark: false, // 书签
45
+ secondaryToolbarToggle: false // 次级工具栏
46
+ },
47
+ toolbarViewerLeft: {
48
+ pageNumber: true, // 页码
49
+ numPages: true, // 总页数
50
+ zoomOut: true, // 缩小
51
+ zoomIn: true, // 放大
52
+ scaleSelectContainer: true, // 缩放选择
53
+ previous: true, // 上一页
54
+ next: true // 下一页
55
+ }
56
+ },
57
+ // 查看器配置
58
+ viewer: {
59
+ scrollMode: 0, // 0: 垂直, 1: 水平, 2: 连续
60
+ spreadMode: 0 // 0: 单页, 1: 双页, 2: 连续双页
61
+ }
62
+ }
63
+ </script>
64
+
65
+ <style scoped lang="scss">
66
+ .preview-data {
67
+ width: 842px;
68
+ height: 800px;
69
+ }
70
+ </style>
package/src/main.ts ADDED
@@ -0,0 +1,7 @@
1
+ import { createApp } from 'vue'
2
+ import App from './App.vue'
3
+ import '../lib/style/index.scss'
4
+
5
+ const app = document.querySelector<HTMLDivElement>('#app')
6
+ createApp(App).mount(app!)
7
+
package/src/style.css ADDED
@@ -0,0 +1,95 @@
1
+ :root {
2
+ font-family: system-ui, Avenir, Helvetica, Arial, sans-serif;
3
+ line-height: 1.5;
4
+ font-weight: 400;
5
+
6
+ color-scheme: light dark;
7
+ color: rgba(255, 255, 255, 0.87);
8
+ background-color: #242424;
9
+
10
+ font-synthesis: none;
11
+ text-rendering: optimizeLegibility;
12
+ -webkit-font-smoothing: antialiased;
13
+ -moz-osx-font-smoothing: grayscale;
14
+ }
15
+
16
+ a {
17
+ font-weight: 500;
18
+ color: #646cff;
19
+ text-decoration: inherit;
20
+ }
21
+ a:hover {
22
+ color: #535bf2;
23
+ }
24
+
25
+ body {
26
+ margin: 0;
27
+ display: flex;
28
+ place-items: center;
29
+ min-width: 320px;
30
+ min-height: 100vh;
31
+ }
32
+
33
+ h1 {
34
+ font-size: 3.2em;
35
+ line-height: 1.1;
36
+ }
37
+
38
+ #app {
39
+ max-width: 1280px;
40
+ margin: 0 auto;
41
+ padding: 2rem;
42
+ text-align: center;
43
+ }
44
+
45
+ .logo {
46
+ height: 6em;
47
+ padding: 1.5em;
48
+ will-change: filter;
49
+ }
50
+ .logo:hover {
51
+ filter: drop-shadow(0 0 2em #646cffaa);
52
+ }
53
+ .logo.vanilla:hover {
54
+ filter: drop-shadow(0 0 2em #3178c6aa);
55
+ }
56
+
57
+ .card {
58
+ padding: 2em;
59
+ }
60
+
61
+ .read-the-docs {
62
+ color: #888;
63
+ }
64
+
65
+ button {
66
+ border-radius: 8px;
67
+ border: 1px solid transparent;
68
+ padding: 0.6em 1.2em;
69
+ font-size: 1em;
70
+ font-weight: 500;
71
+ font-family: inherit;
72
+ background-color: #1a1a1a;
73
+ cursor: pointer;
74
+ transition: border-color 0.25s;
75
+ }
76
+ button:hover {
77
+ border-color: #646cff;
78
+ }
79
+ button:focus,
80
+ button:focus-visible {
81
+ outline: 4px auto -webkit-focus-ring-color;
82
+ }
83
+
84
+ @media (prefers-color-scheme: light) {
85
+ :root {
86
+ color: #213547;
87
+ background-color: #ffffff;
88
+ }
89
+ a:hover {
90
+ color: #747bff;
91
+ }
92
+ button {
93
+ background-color: #f9f9f9;
94
+ }
95
+ }
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="32" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path fill="#007ACC" d="M0 128v128h256V0H0z"></path><path fill="#FFF" d="m56.612 128.85l-.081 10.483h33.32v94.68h23.568v-94.68h33.321v-10.28c0-5.69-.122-10.444-.284-10.566c-.122-.162-20.4-.244-44.983-.203l-44.74.122l-.121 10.443Zm149.955-10.742c6.501 1.625 11.459 4.51 16.01 9.224c2.357 2.52 5.851 7.111 6.136 8.208c.08.325-11.053 7.802-17.798 11.988c-.244.162-1.22-.894-2.317-2.52c-3.291-4.795-6.745-6.867-12.028-7.233c-7.76-.528-12.759 3.535-12.718 10.321c0 1.992.284 3.17 1.097 4.795c1.707 3.536 4.876 5.649 14.832 9.956c18.326 7.883 26.168 13.084 31.045 20.48c5.445 8.249 6.664 21.415 2.966 31.208c-4.063 10.646-14.14 17.879-28.323 20.276c-4.388.772-14.79.65-19.504-.203c-10.28-1.828-20.033-6.908-26.047-13.572c-2.357-2.6-6.949-9.387-6.664-9.874c.122-.163 1.178-.813 2.356-1.504c1.138-.65 5.446-3.129 9.509-5.485l7.355-4.267l1.544 2.276c2.154 3.29 6.867 7.801 9.712 9.305c8.167 4.307 19.383 3.698 24.909-1.26c2.357-2.153 3.332-4.388 3.332-7.68c0-2.966-.366-4.266-1.91-6.501c-1.99-2.845-6.054-5.242-17.595-10.24c-13.206-5.69-18.895-9.224-24.096-14.832c-3.007-3.25-5.852-8.452-7.03-12.8c-.975-3.617-1.22-12.678-.447-16.335c2.723-12.76 12.353-21.659 26.25-24.3c4.51-.853 14.994-.528 19.424.569Z"></path></svg>
@@ -0,0 +1,7 @@
1
+ /// <reference types="vite/client" />
2
+
3
+ declare module 'pdfjs-dist' {
4
+ const pdfjsLib: any
5
+ export default pdfjsLib
6
+ export * from 'pdfjs-dist'
7
+ }