plugin-file-preview-auth 1.1.4 → 1.1.9

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.
@@ -7,4 +7,4 @@
7
7
  * For more information, please refer to: https://www.nocobase.com/agreement.
8
8
  */
9
9
 
10
- !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("@nocobase/plugin-file-manager/client"),require("@nocobase/client"),require("react"),require("@ant-design/icons"),require("antd")):"function"==typeof define&&define.amd?define("plugin-file-preview-auth",["@nocobase/plugin-file-manager/client","@nocobase/client","react","@ant-design/icons","antd"],t):"object"==typeof exports?exports["plugin-file-preview-auth"]=t(require("@nocobase/plugin-file-manager/client"),require("@nocobase/client"),require("react"),require("@ant-design/icons"),require("antd")):e["plugin-file-preview-auth"]=t(e["@nocobase/plugin-file-manager/client"],e["@nocobase/client"],e.react,e["@ant-design/icons"],e.antd)}(self,function(e,t,n,r,i){return function(){var o,l,a,u,c,s,f={41:function(e){e.exports=function(e,t){return"undefined"!=typeof __deoptimization_sideEffect__&&__deoptimization_sideEffect__(e,t),t}},482:function(e){"use strict";e.exports=r},772:function(e){"use strict";e.exports=t},183:function(t){"use strict";t.exports=e},721:function(e){"use strict";e.exports=i},156:function(e){"use strict";e.exports=n}},p={};function d(e){var t=p[e];if(void 0!==t)return t.exports;var n=p[e]={exports:{}};return f[e](n,n.exports,d),n.exports}d.m=f,d.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return d.d(t,{a:t}),t},d.d=function(e,t){for(var n in t)d.o(t,n)&&!d.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},d.f={},d.e=function(e){return Promise.all(Object.keys(d.f).reduce(function(t,n){return d.f[n](e,t),t},[]))},d.u=function(e){return""+e+"."+({166:"17caa11c2ba40313",374:"96762d13b15e7467"})[e]+".js"},d.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}}(),d.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},o={},l="plugin-file-preview-auth:",d.l=function(e,t,n,r){if(o[e])return void o[e].push(t);if(void 0!==n)for(var i,a,u=document.getElementsByTagName("script"),c=0;c<u.length;c++){var s=u[c];if(s.getAttribute("src")==e||s.getAttribute("data-webpack")==l+n){i=s;break}}i||(a=!0,(i=document.createElement("script")).charset="utf-8",i.timeout=120,d.nc&&i.setAttribute("nonce",d.nc),i.setAttribute("data-webpack",l+n),i.src=e),o[e]=[t];var f=function(t,n){i.onerror=i.onload=null,clearTimeout(p);var r=o[e];if(delete o[e],i.parentNode&&i.parentNode.removeChild(i),r&&r.forEach(function(e){return e(n)}),t)return t(n)},p=setTimeout(f.bind(null,void 0,{type:"timeout",target:i}),12e4);i.onerror=f.bind(null,i.onerror),i.onload=f.bind(null,i.onload),a&&document.head.appendChild(i)},d.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(a=window.__webpack_public_path__||"/").endsWith("/")||(a+="/"),d.p=a+"static/plugins/plugin-file-preview-auth/dist/client/",u={909:0},d.f.j=function(e,t){var n=d.o(u,e)?u[e]:void 0;if(0!==n)if(n)t.push(n[2]);else{var r=new Promise(function(t,r){n=u[e]=[t,r]});t.push(n[2]=r);var i=d.p+d.u(e),o=Error();d.l(i,function(t){if(d.o(u,e)&&(0!==(n=u[e])&&(u[e]=void 0),n)){var r=t&&("load"===t.type?"missing":t.type),i=t&&t.target&&t.target.src;o.message="Loading chunk "+e+" failed.\n("+r+": "+i+")",o.name="ChunkLoadError",o.type=r,o.request=i,n[1](o)}},"chunk-"+e,e)}},c=function(e,t){var n,r,i=t[0],o=t[1],l=t[2],a=0;if(i.some(function(e){return 0!==u[e]})){for(n in o)d.o(o,n)&&(d.m[n]=o[n]);l&&l(d)}for(e&&e(t);a<i.length;a++)r=i[a],d.o(u,r)&&u[r]&&u[r][0](),u[r]=0},(s=self.webpackChunkplugin_file_preview_auth=self.webpackChunkplugin_file_preview_auth||[]).forEach(c.bind(null,0)),s.push=c.bind(null,s.push.bind(s));var m={};return!function(){"use strict";d.r(m),d.d(m,{default:function(){return ei},PluginFilePreviewAuthClient:function(){return er}});var e=d(156),t=d.n(e),n=d(482),r=d(721),i=d(772),o=d(183),l=JSON.parse('{"u2":"plugin-file-preview-auth"}');function a(){var e=(0,i.useApp)();return function(t){return e.i18n.t(t,{ns:[l.u2,"client"]})}}var u=d(41);function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function s(e,t,n,r,i,o,l){try{var a=e[o](l),u=a.value}catch(e){n(e);return}a.done?t(u):Promise.resolve(u).then(r,i)}function f(e){return function(){var t=this,n=arguments;return new Promise(function(r,i){var o=e.apply(t,n);function l(e){s(o,r,i,l,a,"next",e)}function a(e){s(o,r,i,l,a,"throw",e)}l(void 0)})}}function p(e,t,n){return(p=x()?Reflect.construct:function(e,t,n){var r=[null];r.push.apply(r,t);var i=new(Function.bind.apply(e,r));return n&&b(i,n.prototype),i}).apply(null,arguments)}function h(e){return(h=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function v(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r;r=n[t],t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r})}return e}function y(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(t)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}),e}function b(e,t){return(b=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function g(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,i=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=i){var o=[],l=!0,a=!1;try{for(i=i.call(e);!(l=(n=i.next()).done)&&(o.push(n.value),!t||o.length!==t);l=!0);}catch(e){a=!0,r=e}finally{try{l||null==i.return||i.return()}finally{if(a)throw r}}return o}}(e,t)||function(e,t){if(e){if("string"==typeof e)return c(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return c(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function w(e){var t="function"==typeof Map?new Map:void 0;return(w=function(e){if(null===e||-1===Function.toString.call(e).indexOf("[native code]"))return e;if("function"!=typeof e)throw TypeError("Super expression must either be null or a function");if(void 0!==t){if(t.has(e))return t.get(e);t.set(e,n)}function n(){return p(e,arguments,h(this).constructor)}return n.prototype=Object.create(e.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),b(n,e)})(e)}function x(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(x=function(){return!!e})()}function k(e,t){var n,r,i,o,l={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function a(o){return function(a){var u=[o,a];if(n)throw TypeError("Generator is already executing.");for(;l;)try{if(n=1,r&&(i=2&u[0]?r.return:u[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,u[1])).done)return i;switch(r=0,i&&(u=[2&u[0],i.value]),u[0]){case 0:case 1:i=u;break;case 4:return l.label++,{value:u[1],done:!1};case 5:l.label++,r=u[1],u=[0];continue;case 7:u=l.ops.pop(),l.trys.pop();continue;default:if(!(i=(i=l.trys).length>0&&i[i.length-1])&&(6===u[0]||2===u[0])){l=0;continue}if(3===u[0]&&(!i||u[1]>i[0]&&u[1]<i[3])){l.label=u[1];break}if(6===u[0]&&l.label<i[1]){l.label=i[1],i=u;break}if(i&&l.label<i[2]){l.label=i[2],l.ops.push(u);break}i[2]&&l.ops.pop(),l.trys.pop();continue}u=t.call(e,l)}catch(e){u=[6,e],r=0}finally{n=i=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}}}var E=["application/pdf"],O=["image/png","image/jpeg","image/gif","image/webp","image/svg+xml","image/bmp"],j=["text/plain","text/csv","text/html","text/css","text/javascript","application/json","application/xml","text/xml","text/yaml","application/x-yaml"],S=["application/vnd.openxmlformats-officedocument.wordprocessingml.document"],P=["application/vnd.openxmlformats-officedocument.spreadsheetml.sheet","application/vnd.ms-excel"],C=["pdf"],_=["png","jpg","jpeg","gif","webp","svg","bmp"],L=["txt","csv","html","css","js","json","xml","log","md","yaml","yml","xaml"],T=["docx"],F=["xlsx","xls"],A=function(e){var t=("string"==typeof e?e:(null==e?void 0:e.extname)||(null==e?void 0:e.name)||(null==e?void 0:e.filename)||(null==e?void 0:e.url)||"").split("?")[0].split("#")[0],n=t.lastIndexOf(".");return -1!==n?t.slice(n+1).toLowerCase().replace(/^\./,""):""},R=function(e){var t="string"==typeof e?e:null==e?void 0:e.url;return t?t.startsWith("https://")||t.startsWith("http://")?t:"".concat(location.origin,"/").concat(t.replace(/^\//,"")):""},I=function(e){if((null==e?void 0:e.mimetype)&&E.includes(e.mimetype))return!0;var t=A(e);return!!t&&C.includes(t)},U=function(e){if((null==e?void 0:e.mimetype)&&O.includes(e.mimetype)||(null==e?void 0:e.mimetype)&&(0,i.matchMimetype)(e,"image/*"))return!0;var t=A(e);return!!t&&_.includes(t)},D=function(e){if((null==e?void 0:e.mimetype)&&j.includes(e.mimetype))return!0;var t=A(e);return!!t&&L.includes(t)},B=function(e){if((null==e?void 0:e.mimetype)&&S.includes(e.mimetype))return!0;var t=A(e);return!!t&&T.includes(t)},M=function(e){if((null==e?void 0:e.mimetype)&&P.includes(e.mimetype))return!0;var t=A(e);return!!t&&F.includes(t)},q=function(e){return e?e.title&&e.extname?"".concat(e.title).concat(e.extname):e.filename||e.name||e.title||"download":"download"};function z(e,t){return N.apply(this,arguments)}function N(){return(N=f(function(e,t){var n,r;return k(this,function(i){switch(i.label){case 0:return n={},t&&(n.Authorization="Bearer ".concat(t)),[4,fetch(e,{method:"GET",headers:n,credentials:"include"})];case 1:if(!(r=i.sent()).ok)throw Error("Failed to fetch file: ".concat(r.status," ").concat(r.statusText));return[2,r.blob()]}})})).apply(this,arguments)}function W(){return(W=f(function(e,t){var n,r;return k(this,function(i){switch(i.label){case 0:return n={},t&&(n.Authorization="Bearer ".concat(t)),[4,fetch(e,{method:"GET",headers:n,credentials:"include"})];case 1:if(!(r=i.sent()).ok)throw Error("Failed to fetch file: ".concat(r.status," ").concat(r.statusText));return[2,r.text()]}})})).apply(this,arguments)}function H(e,t){return X.apply(this,arguments)}function X(){return(X=f(function(e,t){var n,r,i,o,l;return k(this,function(a){switch(a.label){case 0:if(!(n=R(e)))return[2];return[4,z(n,t)];case 1:return r=a.sent(),i=q(e),(o=document.createElement("a")).href=l=URL.createObjectURL(r),o.download=i,document.body.appendChild(o),o.click(),document.body.removeChild(o),setTimeout(function(){return URL.revokeObjectURL(l)},1e3),[2]}})})).apply(this,arguments)}function G(t,n){var r=g((0,e.useState)(null),2),i=r[0],o=r[1],l=g((0,e.useState)(!0),2),a=l[0],u=l[1],c=g((0,e.useState)(null),2),s=c[0],f=c[1],p=(0,e.useRef)(null);return(0,e.useEffect)(function(){var e=!1,r=R(t);if(!r){u(!1),f("No file URL");return}return u(!0),f(null),z(r,n).then(function(t){if(!e){var n=URL.createObjectURL(t);p.current=n,o(n),u(!1)}}).catch(function(t){e||(f(t.message||"Failed to load"),u(!1))}),function(){e=!0,p.current&&(URL.revokeObjectURL(p.current),p.current=null)}},["string"==typeof t?t:null==t?void 0:t.url,n]),{blobUrl:i,loading:a,error:s}}function Y(e){var n=e.message;return t().createElement("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100%",width:"100%"}},t().createElement(r.Spin,{tip:n}))}function J(e){var n=e.message;return t().createElement("div",{style:{padding:20,textAlign:"center",color:"#ff4d4f"}},n)}function $(e){var n,r=e.file,o=(0,i.useAPIClient)(),l=a(),u=G(r,(null==(n=o.auth)?void 0:n.token)||""),c=u.blobUrl,s=u.loading,f=u.error;return s?t().createElement(Y,{message:l("Loading preview...")}):f||!c?t().createElement(J,{message:l("Failed to load file preview")}):t().createElement("iframe",{src:c,width:"100%",height:"100%",style:{border:"none"}})}function K(e){var n,r=e.file,o=(0,i.useAPIClient)(),l=a(),u=G(r,(null==(n=o.auth)?void 0:n.token)||""),c=u.blobUrl,s=u.loading,f=u.error;return s?t().createElement(Y,{message:l("Loading preview...")}):f||!c?t().createElement(J,{message:l("Failed to load file preview")}):t().createElement("img",{src:c,style:{maxWidth:"100%",maxHeight:"100%",objectFit:"contain"},alt:(null==r?void 0:r.title)||(null==r?void 0:r.filename)||""})}function Q(n){var r,o,l,u,c,s,f,p,d,m,h=n.file,v=(0,i.useAPIClient)(),y=a(),b=(null==(m=v.auth)?void 0:m.token)||"",w=(o=(r=g((0,e.useState)(null),2))[0],l=r[1],c=(u=g((0,e.useState)(!0),2))[0],s=u[1],p=(f=g((0,e.useState)(null),2))[0],d=f[1],(0,e.useEffect)(function(){var e=!1,t=R(h);if(!t){s(!1),d("No file URL");return}return s(!0),d(null),(function(e,t){return W.apply(this,arguments)})(t,b).then(function(t){e||(l(t),s(!1))}).catch(function(t){e||(d(t.message||"Failed to load"),s(!1))}),function(){e=!0}},["string"==typeof h?h:null==h?void 0:h.url,b]),{text:o,loading:c,error:p}),x=w.text,k=w.loading,E=w.error;return k?t().createElement(Y,{message:y("Loading preview...")}):E||null===x?t().createElement(J,{message:y("Failed to load file preview")}):t().createElement("pre",{style:{width:"100%",height:"100%",overflow:"auto",padding:16,margin:0,fontSize:13,lineHeight:1.6,whiteSpace:"pre-wrap",wordWrap:"break-word",background:"#f5f5f5",border:"none"}},x)}function V(n){var r,o=n.file,l=(0,i.useAPIClient)(),c=a(),s=(null==(r=l.auth)?void 0:r.token)||"",p=(0,e.useRef)(null),m=g((0,e.useState)(!0),2),h=m[0],v=m[1],y=g((0,e.useState)(null),2),b=y[0],w=y[1];return(0,e.useEffect)(function(){var e=!1,t=R(o);if(!t||!p.current){v(!1),w("No file URL");return}return v(!0),w(null),f(function(){var n,r,i;return k(this,function(o){switch(o.label){case 0:return o.trys.push([0,4,,5]),[4,z(t,s)];case 1:if(n=o.sent(),e)return[2];return[4,u("imported_-1dm6lbf_component",d.e("374").then(d.bind(d,335)))];case 2:if(r=o.sent(),e||!p.current)return[2];return p.current.innerHTML="",[4,r.renderAsync(n,p.current,void 0,{className:"docx-preview-wrapper",inWrapper:!0,ignoreWidth:!1,ignoreHeight:!1,ignoreFonts:!1,breakPages:!0,ignoreLastRenderedPageBreak:!0,experimental:!1,trimXmlDeclaration:!0,useBase64URL:!0,renderHeaders:!0,renderFooters:!0,renderFootnotes:!0,renderEndnotes:!0})];case 3:return o.sent(),v(!1),[3,5];case 4:if(i=o.sent(),e)return[2];return w(i.message||"Failed to render DOCX"),v(!1),[3,5];case 5:return[2]}})})(),function(){e=!0}},["string"==typeof o?o:null==o?void 0:o.url,s]),t().createElement("div",{style:{width:"100%",height:"100%",position:"relative"}},h&&t().createElement(Y,{message:c("Loading preview...")}),b&&t().createElement(J,{message:c("Failed to load file preview")}),t().createElement("div",{ref:p,style:{width:"100%",height:"100%",overflow:"auto",display:h||b?"none":"block"}}))}function Z(n){var r,o=n.file,l=(0,i.useAPIClient)(),c=a(),s=(null==(r=l.auth)?void 0:r.token)||"",p=(0,e.useRef)(null),m=g((0,e.useState)(!0),2),h=m[0],v=m[1],y=g((0,e.useState)(null),2),b=y[0],w=y[1],x=g((0,e.useState)([]),2),E=x[0],O=x[1],j=g((0,e.useState)(""),2),S=j[0],P=j[1],C=g((0,e.useState)({}),2),_=C[0],L=C[1];return(0,e.useEffect)(function(){var e=!1,t=R(o);if(!t){v(!1),w("No file URL");return}return v(!0),w(null),f(function(){var n,r,i,o,l,a,c,f,p,m,h,y,b,g;return k(this,function(x){switch(x.label){case 0:return x.trys.push([0,4,,5]),[4,z(t,s)];case 1:if(n=x.sent(),e)return[2];return[4,u("imported_-1lj2ifg_component",d.e("166").then(d.bind(d,907)))];case 2:if(r=x.sent(),e)return[2];return[4,n.arrayBuffer()];case 3:if(i=x.sent(),e)return[2];l=(o=r.read(i,{type:"array"})).SheetNames,a={},c=!0,f=!1,p=void 0;try{for(m=l[Symbol.iterator]();!(c=(h=m.next()).done);c=!0)y=h.value,b=o.Sheets[y],a[y]=r.utils.sheet_to_html(b,{id:"xlsx-preview-table"})}catch(e){f=!0,p=e}finally{try{c||null==m.return||m.return()}finally{if(f)throw p}}if(e)return[2];return O(l),P(l[0]||""),L(a),v(!1),[3,5];case 4:if(g=x.sent(),e)return[2];return w(g.message||"Failed to render XLSX"),v(!1),[3,5];case 5:return[2]}})})(),function(){e=!0}},["string"==typeof o?o:null==o?void 0:o.url,s]),t().createElement("div",{style:{width:"100%",height:"100%",display:"flex",flexDirection:"column"}},h&&t().createElement(Y,{message:c("Loading preview...")}),b&&t().createElement(J,{message:c("Failed to load file preview")}),!h&&!b&&t().createElement(t().Fragment,null,E.length>1&&t().createElement("div",{style:{display:"flex",gap:0,borderBottom:"1px solid #e8e8e8",background:"#fafafa",padding:"0 8px",flexShrink:0,overflowX:"auto"}},E.map(function(e){return t().createElement("button",{key:e,onClick:function(){return P(e)},style:{padding:"8px 16px",border:"none",borderBottom:S===e?"2px solid #1890ff":"2px solid transparent",background:S===e?"#fff":"transparent",color:S===e?"#1890ff":"#666",fontWeight:S===e?600:400,cursor:"pointer",fontSize:13,whiteSpace:"nowrap",transition:"all 0.2s"}},e)})),t().createElement("div",{ref:p,style:{flex:1,overflow:"auto",padding:0},dangerouslySetInnerHTML:{__html:_[S]||""}}),t().createElement("style",null,"\n #xlsx-preview-table {\n border-collapse: collapse;\n width: 100%;\n font-size: 13px;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n }\n #xlsx-preview-table td,\n #xlsx-preview-table th {\n border: 1px solid #e8e8e8;\n padding: 6px 10px;\n text-align: left;\n max-width: 33vw;\n white-space: normal;\n word-break: break-word;\n }\n #xlsx-preview-table tr:first-child td,\n #xlsx-preview-table tr:first-child th {\n background: #fafafa;\n font-weight: 600;\n position: sticky;\n top: 0;\n z-index: 1;\n }\n #xlsx-preview-table tr:nth-child(even) {\n background: #fafafa;\n }\n #xlsx-preview-table tr:hover {\n background: #f0f7ff;\n }\n ")))}var ee=function(o){return function(l){var u,c=l.open,s=l.onOpenChange,p=l.onClose,d=l.file,m=l.index,h=l.list,b=l.onSwitchIndex;l.onDownload;var g=(0,i.useAPIClient)(),w=a(),x=(0,e.useCallback)((u=f(function(e){var t,n,i;return k(this,function(o){switch(o.label){case 0:if(!(n=e||d))return[2];i=(null==(t=g.auth)?void 0:t.token)||"",o.label=1;case 1:return o.trys.push([1,3,,4]),[4,H(n,i)];case 2:return o.sent(),[3,4];case 3:return o.sent(),r.message.error(w("Failed to download file")),[3,4];case 4:return[2]}})}),function(e){return u.apply(this,arguments)}),[d,g,w]);if("boolean"!=typeof c)return t().createElement(o,y(v({},l),{onDownload:x}));var E=q(d),O="number"==typeof m&&!!b&&m>0,j="number"==typeof m&&!!b&&m<h.length-1;return t().createElement(r.Modal,{open:c,title:E,onCancel:function(){null==s||s(!1),null==p||p()},footer:t().createElement(r.Space,{size:14,style:{fontSize:"20px"}},t().createElement(n.LeftOutlined,{style:{cursor:O?"pointer":"not-allowed"},onClick:function(){return O&&(null==b?void 0:b(m-1))}}),t().createElement(n.RightOutlined,{style:{cursor:j?"pointer":"not-allowed"},onClick:function(){return j&&(null==b?void 0:b(m+1))}}),t().createElement(n.DownloadOutlined,{onClick:function(){return x(d)}})),width:"90%",centered:!0},t().createElement("div",{style:{maxWidth:"100%",maxHeight:"calc(100vh - 256px)",height:"80vh",width:"100%",background:"white",display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"center",overflowY:"auto"}},t().createElement(o,y(v({},l),{onDownload:x}))))}};function et(n){var o,l,u=n.index,c=n.list,s=n.onSwitchIndex,p=a(),d=(0,i.useAPIClient)(),m=c[u],h=g((0,e.useState)(!1),2),v=h[0],y=h[1],b=(0,e.useCallback)((o=f(function(e){var t,n,i,o;return k(this,function(l){switch(l.label){case 0:null==e||null==(t=e.preventDefault)||t.call(e),null==e||null==(n=e.stopPropagation)||n.call(e),o=(null==(i=d.auth)?void 0:i.token)||"",y(!0),l.label=1;case 1:return l.trys.push([1,3,4,5]),[4,H(m,o)];case 2:return l.sent(),[3,5];case 3:return l.sent(),r.message.error(p("Failed to download file")),[3,5];case 4:return y(!1),[7];case 5:return[2]}})}),function(e){return o.apply(this,arguments)}),[m,d,p]),w=(0,e.useCallback)((l=f(function(e){var t,n,i,o,l,a,u;return k(this,function(c){switch(c.label){case 0:if(null==e||null==(t=e.preventDefault)||t.call(e),null==e||null==(n=e.stopPropagation)||n.call(e),o=(null==(i=d.auth)?void 0:i.token)||"",!(l=R(m)))return[2];c.label=1;case 1:return c.trys.push([1,3,,4]),[4,z(l,o)];case 2:return a=c.sent(),u=URL.createObjectURL(a),window.open(u),[3,4];case 3:return c.sent(),r.message.error(p("Failed to load file preview")),[3,4];case 4:return[2]}})}),function(e){return l.apply(this,arguments)}),[m,d,p]),x=(0,e.useCallback)(function(){s(null)},[s]),E=(0,e.useMemo)(function(){return I(m)?$:U(m)?K:D(m)?Q:B(m)?V:M(m)?Z:null},[m]),O=null!=E;return t().createElement(r.Modal,{open:null!=u,title:(null==m?void 0:m.title)||(null==m?void 0:m.filename)||(null==m?void 0:m.name)||"File",onCancel:x,footer:[O&&t().createElement(r.Button,{key:"open",onClick:w},p("Open in new window")),t().createElement(r.Button,{key:"download",onClick:b,loading:v},p("Download")),t().createElement(r.Button,{key:"close",onClick:x},p("Close"))].filter(Boolean),width:O?"90%":520,centered:!0},t().createElement("div",{style:{maxWidth:"100%",maxHeight:O?"calc(100vh - 256px)":"auto",height:O?"70vh":"auto",width:"100%",background:"white",display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"center",overflowY:"auto"}},O?t().createElement(E,{file:m}):t().createElement(r.Alert,{type:"info",style:{width:"100%"},description:p("This file type cannot be previewed. Click Download to save the file."),showIcon:!0})))}function en(n){var o=n.file,l=(0,i.useAPIClient)(),u=a(),c=(0,e.useCallback)(f(function(){var e,t;return k(this,function(n){switch(n.label){case 0:t=(null==(e=l.auth)?void 0:e.token)||"",n.label=1;case 1:return n.trys.push([1,3,,4]),[4,H(o,t)];case 2:return n.sent(),[3,4];case 3:return n.sent(),r.message.error(u("Failed to download file")),[3,4];case 4:return[2]}})}),[o,l,u]);return t().createElement(r.Alert,{type:"info",style:{width:"100%"},description:t().createElement("span",null,u("This file type cannot be previewed. ")," ",t().createElement("a",{onClick:c,style:{textDecoration:"underline",cursor:"pointer"}},u("Download"))),showIcon:!0})}var er=function(e){var t;if("function"!=typeof e&&null!==e)throw TypeError("Super expression must either be null or a function");function n(){var e,t;if(!(this instanceof n))throw TypeError("Cannot call a class as a function");return e=n,t=arguments,e=h(e),function(e,t){var n;if(t&&("object"==((n=t)&&"undefined"!=typeof Symbol&&n.constructor===Symbol?"symbol":typeof n)||"function"==typeof t))return t;if(void 0===e)throw ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(this,x()?Reflect.construct(e,t||[],h(this).constructor):e.apply(this,t))}return n.prototype=Object.create(e&&e.prototype,{constructor:{value:n,writable:!0,configurable:!0}}),e&&b(n,e),t=[{key:"load",value:function(){return f(function(){return k(this,function(e){return i.attachmentFileTypes.add({match:function(){return!0},Previewer:et}),o.filePreviewTypes.add({match:function(){return!0},Previewer:ee(en)}),o.filePreviewTypes.add({match:I,Previewer:ee($)}),o.filePreviewTypes.add({match:U,getThumbnailURL:function(e){return(null==e?void 0:e.url)||(null==e?void 0:e.preview)||null},Previewer:ee(K)}),o.filePreviewTypes.add({match:D,Previewer:ee(Q)}),o.filePreviewTypes.add({match:B,Previewer:ee(V)}),o.filePreviewTypes.add({match:M,Previewer:ee(Z)}),[2]})})()}}],function(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}(n.prototype,t),n}(w(i.Plugin)),ei=er}(),m}()});
10
+ !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("@nocobase/plugin-ai/client"),require("@nocobase/plugin-file-manager/client"),require("@nocobase/client"),require("react"),require("@ant-design/icons"),require("antd")):"function"==typeof define&&define.amd?define("plugin-file-preview-auth",["@nocobase/plugin-ai/client","@nocobase/plugin-file-manager/client","@nocobase/client","react","@ant-design/icons","antd"],t):"object"==typeof exports?exports["plugin-file-preview-auth"]=t(require("@nocobase/plugin-ai/client"),require("@nocobase/plugin-file-manager/client"),require("@nocobase/client"),require("react"),require("@ant-design/icons"),require("antd")):e["plugin-file-preview-auth"]=t(e["@nocobase/plugin-ai/client"],e["@nocobase/plugin-file-manager/client"],e["@nocobase/client"],e.react,e["@ant-design/icons"],e.antd)}(self,function(e,t,n,r,i,o){return function(){var l,a,u,c,s,f,p={41:function(e){e.exports=function(e,t){return"undefined"!=typeof __deoptimization_sideEffect__&&__deoptimization_sideEffect__(e,t),t}},482:function(e){"use strict";e.exports=i},772:function(e){"use strict";e.exports=n},645:function(t){"use strict";t.exports=e},183:function(e){"use strict";e.exports=t},721:function(e){"use strict";e.exports=o},156:function(e){"use strict";e.exports=r}},d={};function m(e){var t=d[e];if(void 0!==t)return t.exports;var n=d[e]={exports:{}};return p[e](n,n.exports,m),n.exports}m.m=p,m.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return m.d(t,{a:t}),t},m.d=function(e,t){for(var n in t)m.o(t,n)&&!m.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},m.f={},m.e=function(e){return Promise.all(Object.keys(m.f).reduce(function(t,n){return m.f[n](e,t),t},[]))},m.u=function(e){return""+e+"."+({166:"17caa11c2ba40313",351:"0f0ce45c92425c8f",374:"96762d13b15e7467",514:"2a8b6aa0d2fcd4b2"})[e]+".js"},m.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}}(),m.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},l={},a="plugin-file-preview-auth:",m.l=function(e,t,n,r){if(l[e])return void l[e].push(t);if(void 0!==n)for(var i,o,u=document.getElementsByTagName("script"),c=0;c<u.length;c++){var s=u[c];if(s.getAttribute("src")==e||s.getAttribute("data-webpack")==a+n){i=s;break}}i||(o=!0,(i=document.createElement("script")).charset="utf-8",i.timeout=120,m.nc&&i.setAttribute("nonce",m.nc),i.setAttribute("data-webpack",a+n),i.src=e),l[e]=[t];var f=function(t,n){i.onerror=i.onload=null,clearTimeout(p);var r=l[e];if(delete l[e],i.parentNode&&i.parentNode.removeChild(i),r&&r.forEach(function(e){return e(n)}),t)return t(n)},p=setTimeout(f.bind(null,void 0,{type:"timeout",target:i}),12e4);i.onerror=f.bind(null,i.onerror),i.onload=f.bind(null,i.onload),o&&document.head.appendChild(i)},m.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(u=window.__webpack_public_path__||"/").endsWith("/")||(u+="/"),m.p=u+"static/plugins/plugin-file-preview-auth/dist/client/",c={909:0},m.f.j=function(e,t){var n=m.o(c,e)?c[e]:void 0;if(0!==n)if(n)t.push(n[2]);else{var r=new Promise(function(t,r){n=c[e]=[t,r]});t.push(n[2]=r);var i=m.p+m.u(e),o=Error();m.l(i,function(t){if(m.o(c,e)&&(0!==(n=c[e])&&(c[e]=void 0),n)){var r=t&&("load"===t.type?"missing":t.type),i=t&&t.target&&t.target.src;o.message="Loading chunk "+e+" failed.\n("+r+": "+i+")",o.name="ChunkLoadError",o.type=r,o.request=i,n[1](o)}},"chunk-"+e,e)}},s=function(e,t){var n,r,i=t[0],o=t[1],l=t[2],a=0;if(i.some(function(e){return 0!==c[e]})){for(n in o)m.o(o,n)&&(m.m[n]=o[n]);l&&l(m)}for(e&&e(t);a<i.length;a++)r=i[a],m.o(c,r)&&c[r]&&c[r][0](),c[r]=0},(f=self.webpackChunkplugin_file_preview_auth=self.webpackChunkplugin_file_preview_auth||[]).forEach(s.bind(null,0)),f.push=s.bind(null,f.push.bind(f));var v={};return!function(){"use strict";m.r(v),m.d(v,{default:function(){return eO},PluginFilePreviewAuthClient:function(){return eS}});var e=m(156),t=m.n(e),n=m(482),r=m(721),i=m(772),o=m(183),l=JSON.parse('{"u2":"plugin-file-preview-auth"}');function a(){var e=(0,i.useApp)();return function(t){return e.i18n.t(t,{ns:[l.u2,"client"]})}}var u=m(645);function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function s(e,t,n,r,i,o,l){try{var a=e[o](l),u=a.value}catch(e){n(e);return}a.done?t(u):Promise.resolve(u).then(r,i)}function f(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function p(e){return(p=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function d(e,t){return(d=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function h(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,i=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=i){var o=[],l=!0,a=!1;try{for(i=i.call(e);!(l=(n=i.next()).done)&&(o.push(n.value),!t||o.length!==t);l=!0);}catch(e){a=!0,r=e}finally{try{l||null==i.return||i.return()}finally{if(a)throw r}}return o}}(e,t)||b(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function y(e){return function(e){if(Array.isArray(e))return c(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||b(e)||function(){throw TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function b(e,t){if(e){if("string"==typeof e)return c(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return c(e,t)}}function g(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(g=function(){return!!e})()}var w="file-preview",x="plugin-file-preview-auth.aiEmployee";function E(e){return e?e.title&&e.extname?"".concat(e.title).concat(e.extname):e.filename||e.name||e.title||"file":"file"}var k=function(e){var t,n;if("function"!=typeof e&&null!==e)throw TypeError("Super expression must either be null or a function");function r(e){var t,n,i;if(!(this instanceof r))throw TypeError("Cannot call a class as a function");return n=r,i=[e],n=p(n),(t=function(e,t){var n;if(t&&("object"==((n=t)&&"undefined"!=typeof Symbol&&n.constructor===Symbol?"symbol":typeof n)||"function"==typeof t))return t;if(void 0===e)throw ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(this,g()?Reflect.construct(n,i||[],p(this).constructor):n.apply(this,i))).state={hasError:!1},t}return r.prototype=Object.create(e&&e.prototype,{constructor:{value:r,writable:!0,configurable:!0}}),e&&d(r,e),n=[{key:"getDerivedStateFromError",value:function(){return{hasError:!0}}}],t=[{key:"render",value:function(){return this.state.hasError?null:this.props.children}}],f(r.prototype,t),n&&f(r,n),r}(t().Component),S=function(i){var o,l,c=i.file,f=a(),p=(0,u.useAIConfigRepository)(),d=(0,u.useChatBoxActions)().triggerTask,m=h((0,e.useState)([]),2),v=m[0],b=m[1],g=h((0,e.useState)(!1),2),k=g[0],S=g[1],O=h((0,e.useState)(!1),2),P=O[0],j=O[1];(0,e.useEffect)(function(){var e=!1;if(null==p?void 0:p.getAIEmployees){var t=p.aiEmployees||[];return t.length?void b(y(t)):(S(!0),p.getAIEmployees().then(function(t){e||b(y(t||[]))}).catch(function(){e||b([])}).finally(function(){e||S(!1)}),function(){e=!0})}},[p]);var C=(0,e.useMemo)(function(){var e=function(){try{return window.localStorage.getItem(x)||""}catch(e){return""}}();return e?y(v).sort(function(t,n){return t.username===e?-1:+(n.username===e)}):v},[v]),_=(0,e.useCallback)((o=function(e){return function(e,t){var n,r,i,o,l={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function a(o){return function(a){var u=[o,a];if(n)throw TypeError("Generator is already executing.");for(;l;)try{if(n=1,r&&(i=2&u[0]?r.return:u[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,u[1])).done)return i;switch(r=0,i&&(u=[2&u[0],i.value]),u[0]){case 0:case 1:i=u;break;case 4:return l.label++,{value:u[1],done:!1};case 5:l.label++,r=u[1],u=[0];continue;case 7:u=l.ops.pop(),l.trys.pop();continue;default:if(!(i=(i=l.trys).length>0&&i[i.length-1])&&(6===u[0]||2===u[0])){l=0;continue}if(3===u[0]&&(!i||u[1]>i[0]&&u[1]<i[3])){l.label=u[1];break}if(6===u[0]&&l.label<i[1]){l.label=i[1],i=u;break}if(i&&l.label<i[2]){l.label=i[2],l.ops.push(u);break}i[2]&&l.ops.pop(),l.trys.pop();continue}u=t.call(e,l)}catch(e){u=[6,e],r=0}finally{n=i=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}}}(this,function(t){switch(t.label){case 0:if(!e||!c)return[2];j(!0),t.label=1;case 1:t.trys.push([1,3,4,5]);var n,i,o,l,a,u=e.username;try{window.localStorage.setItem(x,u)}catch(e){}return[4,d({aiEmployee:e,tasks:[{title:E(c),message:{user:f("Please help me analyze the file currently open in preview."),workContext:[{type:w,uid:(a=null!=(l=null!=(o=null!=(i=null!=(n=null==c?void 0:c.id)?n:null==c?void 0:c.uid)?i:null==c?void 0:c.url)?o:null==c?void 0:c.path)?l:E(c),"file-preview:".concat(String(a))),title:E(c),content:{source:"plugin-file-preview-auth",file:{id:null==c?void 0:c.id,uid:null==c?void 0:c.uid,url:null==c?void 0:c.url,preview:null==c?void 0:c.preview,filename:(null==c?void 0:c.filename)||(null==c?void 0:c.name),name:(null==c?void 0:c.name)||(null==c?void 0:c.filename),title:null==c?void 0:c.title,extname:null==c?void 0:c.extname,mimetype:null==c?void 0:c.mimetype,size:null==c?void 0:c.size,path:null==c?void 0:c.path,storageId:null==c?void 0:c.storageId}}}]},autoSend:!1}]})];case 2:return t.sent(),[3,5];case 3:return t.sent(),r.message.error(f("Failed to open AI chat")),[3,5];case 4:return j(!1),[7];case 5:return[2]}})},l=function(){var e=this,t=arguments;return new Promise(function(n,r){var i=o.apply(e,t);function l(e){s(i,n,r,l,a,"next",e)}function a(e){s(i,n,r,l,a,"throw",e)}l(void 0)})},function(e){return l.apply(this,arguments)}),[c,f,d]),A=C.map(function(e){return{key:e.username,label:(null==e?void 0:e.nickname)||(null==e?void 0:e.username)||"",onClick:function(){return _(e)}}});return k||C.length?1===C.length?t().createElement(r.Tooltip,{title:f("Ask AI")},t().createElement(r.Button,{type:"text",size:"small",icon:t().createElement(n.RobotOutlined,null),loading:P||k,onClick:function(e){e.stopPropagation(),_(C[0])}},f("Ask AI"))):t().createElement(r.Tooltip,{title:f("Ask AI")},t().createElement(r.Dropdown,{menu:{items:A},trigger:["click"],placement:"bottomRight",disabled:P||k},t().createElement(r.Button,{type:"text",size:"small",icon:t().createElement(n.RobotOutlined,null),loading:P||k,onClick:function(e){return e.stopPropagation()}},f("Ask AI")))):null},O=function(e){var n=e.file;return t().createElement(k,null,t().createElement(S,{file:n}))},P=m(41);function j(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function C(e,t,n,r,i,o,l){try{var a=e[o](l),u=a.value}catch(e){n(e);return}a.done?t(u):Promise.resolve(u).then(r,i)}function _(e){return function(){var t=this,n=arguments;return new Promise(function(r,i){var o=e.apply(t,n);function l(e){C(o,r,i,l,a,"next",e)}function a(e){C(o,r,i,l,a,"throw",e)}l(void 0)})}}function A(e,t,n){return(A=B()?Reflect.construct:function(e,t,n){var r=[null];r.push.apply(r,t);var i=new(Function.bind.apply(e,r));return n&&F(i,n.prototype),i}).apply(null,arguments)}function T(e){return(T=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function I(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r;r=n[t],t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r})}return e}function R(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(t)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}),e}function F(e,t){return(F=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function L(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,i=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=i){var o=[],l=!0,a=!1;try{for(i=i.call(e);!(l=(n=i.next()).done)&&(o.push(n.value),!t||o.length!==t);l=!0);}catch(e){a=!0,r=e}finally{try{l||null==i.return||i.return()}finally{if(a)throw r}}return o}}(e,t)||function(e,t){if(e){if("string"==typeof e)return j(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return j(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function U(e){var t="function"==typeof Map?new Map:void 0;return(U=function(e){if(null===e||-1===Function.toString.call(e).indexOf("[native code]"))return e;if("function"!=typeof e)throw TypeError("Super expression must either be null or a function");if(void 0!==t){if(t.has(e))return t.get(e);t.set(e,n)}function n(){return A(e,arguments,T(this).constructor)}return n.prototype=Object.create(e.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),F(n,e)})(e)}function B(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(B=function(){return!!e})()}function D(e,t){var n,r,i,o,l={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function a(o){return function(a){var u=[o,a];if(n)throw TypeError("Generator is already executing.");for(;l;)try{if(n=1,r&&(i=2&u[0]?r.return:u[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,u[1])).done)return i;switch(r=0,i&&(u=[2&u[0],i.value]),u[0]){case 0:case 1:i=u;break;case 4:return l.label++,{value:u[1],done:!1};case 5:l.label++,r=u[1],u=[0];continue;case 7:u=l.ops.pop(),l.trys.pop();continue;default:if(!(i=(i=l.trys).length>0&&i[i.length-1])&&(6===u[0]||2===u[0])){l=0;continue}if(3===u[0]&&(!i||u[1]>i[0]&&u[1]<i[3])){l.label=u[1];break}if(6===u[0]&&l.label<i[1]){l.label=i[1],i=u;break}if(i&&l.label<i[2]){l.label=i[2],l.ops.push(u);break}i[2]&&l.ops.pop(),l.trys.pop();continue}u=t.call(e,l)}catch(e){u=[6,e],r=0}finally{n=i=0}if(5&u[0])throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}}}var M=["application/pdf"],z=["image/png","image/jpeg","image/gif","image/webp","image/svg+xml","image/bmp"],W=["text/plain","text/csv","text/html","text/css","text/javascript","application/json","application/xml","text/xml","text/yaml","application/x-yaml"],q=["application/vnd.openxmlformats-officedocument.wordprocessingml.document"],N=["application/vnd.openxmlformats-officedocument.spreadsheetml.sheet","application/vnd.ms-excel"],H=["pdf"],X=["png","jpg","jpeg","gif","webp","svg","bmp"],G=["txt","csv","html","css","js","json","xml","log","md","yaml","yml","xaml"],Y=["docx"],$=["xlsx","xls"],J=["application/vnd.openxmlformats-officedocument.presentationml.presentation","application/vnd.ms-powerpoint"],K=["pptx","ppt"],Q=function(e){var t=("string"==typeof e?e:(null==e?void 0:e.extname)||(null==e?void 0:e.name)||(null==e?void 0:e.filename)||(null==e?void 0:e.url)||"").split("?")[0].split("#")[0],n=t.lastIndexOf(".");return -1!==n?t.slice(n+1).toLowerCase().replace(/^\./,""):""},V=function(e){var t="string"==typeof e?e:null==e?void 0:e.url;return t?t.startsWith("https://")||t.startsWith("http://")?t:"".concat(location.origin,"/").concat(t.replace(/^\//,"")):""},Z=function(e){if((null==e?void 0:e.mimetype)&&M.includes(e.mimetype))return!0;var t=Q(e);return!!t&&H.includes(t)},ee=function(e){if((null==e?void 0:e.mimetype)&&z.includes(e.mimetype)||(null==e?void 0:e.mimetype)&&(0,i.matchMimetype)(e,"image/*"))return!0;var t=Q(e);return!!t&&X.includes(t)},et=function(e){if((null==e?void 0:e.mimetype)&&W.includes(e.mimetype))return!0;var t=Q(e);return!!t&&G.includes(t)},en=function(e){if((null==e?void 0:e.mimetype)&&q.includes(e.mimetype))return!0;var t=Q(e);return!!t&&Y.includes(t)},er=function(e){if((null==e?void 0:e.mimetype)&&N.includes(e.mimetype))return!0;var t=Q(e);return!!t&&$.includes(t)},ei=function(e){if((null==e?void 0:e.mimetype)&&J.includes(e.mimetype))return!0;var t=Q(e);return!!t&&K.includes(t)},eo=function(e){return e?e.title&&e.extname?"".concat(e.title).concat(e.extname):e.filename||e.name||e.title||"download":"download"};function el(e,t){return ea.apply(this,arguments)}function ea(){return(ea=_(function(e,t){var n,r;return D(this,function(i){switch(i.label){case 0:return n={},t&&(n.Authorization="Bearer ".concat(t)),[4,fetch(e,{method:"GET",headers:n,credentials:"include"})];case 1:if(!(r=i.sent()).ok)throw Error("Failed to fetch file: ".concat(r.status," ").concat(r.statusText));return[2,r.blob()]}})})).apply(this,arguments)}function eu(){return(eu=_(function(e,t){var n,r;return D(this,function(i){switch(i.label){case 0:return n={},t&&(n.Authorization="Bearer ".concat(t)),[4,fetch(e,{method:"GET",headers:n,credentials:"include"})];case 1:if(!(r=i.sent()).ok)throw Error("Failed to fetch file: ".concat(r.status," ").concat(r.statusText));return[2,r.text()]}})})).apply(this,arguments)}function ec(e,t){return es.apply(this,arguments)}function es(){return(es=_(function(e,t){var n,r,i,o,l;return D(this,function(a){switch(a.label){case 0:if(!(n=V(e)))return[2];return[4,el(n,t)];case 1:return r=a.sent(),i=eo(e),(o=document.createElement("a")).href=l=URL.createObjectURL(r),o.download=i,document.body.appendChild(o),o.click(),document.body.removeChild(o),setTimeout(function(){return URL.revokeObjectURL(l)},1e3),[2]}})})).apply(this,arguments)}function ef(t,n){var r=L((0,e.useState)(null),2),i=r[0],o=r[1],l=L((0,e.useState)(!0),2),a=l[0],u=l[1],c=L((0,e.useState)(null),2),s=c[0],f=c[1],p=(0,e.useRef)(null);return(0,e.useEffect)(function(){var e=!1,r=V(t);if(!r){u(!1),f("No file URL");return}return u(!0),f(null),el(r,n).then(function(t){if(!e){var n=URL.createObjectURL(t);p.current=n,o(n),u(!1)}}).catch(function(t){e||(f(t.message||"Failed to load"),u(!1))}),function(){e=!0,p.current&&(URL.revokeObjectURL(p.current),p.current=null)}},["string"==typeof t?t:null==t?void 0:t.url,n]),{blobUrl:i,loading:a,error:s}}function ep(e){var n=e.message;return t().createElement("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100%",width:"100%"}},t().createElement(r.Spin,{tip:n}))}function ed(e){var n=e.message;return t().createElement("div",{style:{padding:20,textAlign:"center",color:"#ff4d4f"}},n)}function em(e){var n=e.file,r=e.title;return t().createElement("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:12,paddingRight:40}},t().createElement("span",{style:{minWidth:0,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},title:r},r),t().createElement(O,{file:n}))}function ev(e){var n,r=e.file,o=(0,i.useAPIClient)(),l=a(),u=ef(r,(null==(n=o.auth)?void 0:n.token)||""),c=u.blobUrl,s=u.loading,f=u.error;return s?t().createElement(ep,{message:l("Loading preview...")}):f||!c?t().createElement(ed,{message:l("Failed to load file preview")}):t().createElement("iframe",{src:c,width:"100%",height:"100%",style:{border:"none"}})}function eh(e){var n,r=e.file,o=(0,i.useAPIClient)(),l=a(),u=ef(r,(null==(n=o.auth)?void 0:n.token)||""),c=u.blobUrl,s=u.loading,f=u.error;return s?t().createElement(ep,{message:l("Loading preview...")}):f||!c?t().createElement(ed,{message:l("Failed to load file preview")}):t().createElement("img",{src:c,style:{maxWidth:"100%",maxHeight:"100%",objectFit:"contain"},alt:(null==r?void 0:r.title)||(null==r?void 0:r.filename)||""})}function ey(n){var r,o,l,u,c,s,f,p,d,m,v=n.file,h=(0,i.useAPIClient)(),y=a(),b=(null==(m=h.auth)?void 0:m.token)||"",g=(o=(r=L((0,e.useState)(null),2))[0],l=r[1],c=(u=L((0,e.useState)(!0),2))[0],s=u[1],p=(f=L((0,e.useState)(null),2))[0],d=f[1],(0,e.useEffect)(function(){var e=!1,t=V(v);if(!t){s(!1),d("No file URL");return}return s(!0),d(null),(function(e,t){return eu.apply(this,arguments)})(t,b).then(function(t){e||(l(t),s(!1))}).catch(function(t){e||(d(t.message||"Failed to load"),s(!1))}),function(){e=!0}},["string"==typeof v?v:null==v?void 0:v.url,b]),{text:o,loading:c,error:p}),w=g.text,x=g.loading,E=g.error;return x?t().createElement(ep,{message:y("Loading preview...")}):E||null===w?t().createElement(ed,{message:y("Failed to load file preview")}):t().createElement("pre",{style:{width:"100%",height:"100%",overflow:"auto",padding:16,margin:0,fontSize:13,lineHeight:1.6,whiteSpace:"pre-wrap",wordWrap:"break-word",background:"#f5f5f5",border:"none"}},w)}function eb(n){var r,o=n.file,l=(0,i.useAPIClient)(),u=a(),c=(null==(r=l.auth)?void 0:r.token)||"",s=(0,e.useRef)(null),f=L((0,e.useState)(!0),2),p=f[0],d=f[1],v=L((0,e.useState)(null),2),h=v[0],y=v[1];return(0,e.useEffect)(function(){var e=!1,t=V(o);if(!t||!s.current){d(!1),y("No file URL");return}return d(!0),y(null),_(function(){var n,r,i;return D(this,function(o){switch(o.label){case 0:return o.trys.push([0,4,,5]),[4,el(t,c)];case 1:if(n=o.sent(),e)return[2];return[4,P("imported_-1dm6lbf_component",m.e("374").then(m.bind(m,335)))];case 2:if(r=o.sent(),e||!s.current)return[2];return s.current.innerHTML="",[4,r.renderAsync(n,s.current,void 0,{className:"docx-preview-wrapper",inWrapper:!0,ignoreWidth:!1,ignoreHeight:!1,ignoreFonts:!1,breakPages:!0,ignoreLastRenderedPageBreak:!0,experimental:!1,trimXmlDeclaration:!0,useBase64URL:!0,renderHeaders:!0,renderFooters:!0,renderFootnotes:!0,renderEndnotes:!0})];case 3:return o.sent(),d(!1),[3,5];case 4:if(i=o.sent(),e)return[2];return y(i.message||"Failed to render DOCX"),d(!1),[3,5];case 5:return[2]}})})(),function(){e=!0}},["string"==typeof o?o:null==o?void 0:o.url,c]),t().createElement("div",{style:{width:"100%",height:"100%",position:"relative"}},p&&t().createElement(ep,{message:u("Loading preview...")}),h&&t().createElement(ed,{message:u("Failed to load file preview")}),t().createElement("div",{ref:s,style:{width:"100%",height:"100%",overflow:"auto",display:p||h?"none":"block"}}))}function eg(n){var r,o=n.file,l=(0,i.useAPIClient)(),u=a(),c=(null==(r=l.auth)?void 0:r.token)||"",s=(0,e.useRef)(null),f=L((0,e.useState)(!0),2),p=f[0],d=f[1],v=L((0,e.useState)(null),2),h=v[0],y=v[1],b=L((0,e.useState)([]),2),g=b[0],w=b[1],x=L((0,e.useState)(""),2),E=x[0],k=x[1],S=L((0,e.useState)({}),2),O=S[0],j=S[1];return(0,e.useEffect)(function(){var e=!1,t=V(o);if(!t){d(!1),y("No file URL");return}return d(!0),y(null),_(function(){var n,r,i,o,l,a,u,s,f,p,v,h,b,g;return D(this,function(x){switch(x.label){case 0:return x.trys.push([0,4,,5]),[4,el(t,c)];case 1:if(n=x.sent(),e)return[2];return[4,P("imported_-1lj2ifg_component",m.e("166").then(m.bind(m,907)))];case 2:if(r=x.sent(),e)return[2];return[4,n.arrayBuffer()];case 3:if(i=x.sent(),e)return[2];l=(o=r.read(i,{type:"array"})).SheetNames,a={},u=!0,s=!1,f=void 0;try{for(p=l[Symbol.iterator]();!(u=(v=p.next()).done);u=!0)h=v.value,b=o.Sheets[h],a[h]=r.utils.sheet_to_html(b,{id:"xlsx-preview-table"})}catch(e){s=!0,f=e}finally{try{u||null==p.return||p.return()}finally{if(s)throw f}}if(e)return[2];return w(l),k(l[0]||""),j(a),d(!1),[3,5];case 4:if(g=x.sent(),e)return[2];return y(g.message||"Failed to render XLSX"),d(!1),[3,5];case 5:return[2]}})})(),function(){e=!0}},["string"==typeof o?o:null==o?void 0:o.url,c]),t().createElement("div",{style:{width:"100%",height:"100%",display:"flex",flexDirection:"column"}},p&&t().createElement(ep,{message:u("Loading preview...")}),h&&t().createElement(ed,{message:u("Failed to load file preview")}),!p&&!h&&t().createElement(t().Fragment,null,g.length>1&&t().createElement("div",{style:{display:"flex",gap:0,borderBottom:"1px solid #e8e8e8",background:"#fafafa",padding:"0 8px",flexShrink:0,overflowX:"auto"}},g.map(function(e){return t().createElement("button",{key:e,onClick:function(){return k(e)},style:{padding:"8px 16px",border:"none",borderBottom:E===e?"2px solid #1890ff":"2px solid transparent",background:E===e?"#fff":"transparent",color:E===e?"#1890ff":"#666",fontWeight:E===e?600:400,cursor:"pointer",fontSize:13,whiteSpace:"nowrap",transition:"all 0.2s"}},e)})),t().createElement("div",{ref:s,style:{flex:1,overflow:"auto",padding:0},dangerouslySetInnerHTML:{__html:O[E]||""}}),t().createElement("style",null,"\n #xlsx-preview-table {\n border-collapse: collapse;\n width: 100%;\n font-size: 13px;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n }\n #xlsx-preview-table td,\n #xlsx-preview-table th {\n border: 1px solid #e8e8e8;\n padding: 6px 10px;\n text-align: left;\n max-width: 33vw;\n white-space: normal;\n word-break: break-word;\n }\n #xlsx-preview-table tr:first-child td,\n #xlsx-preview-table tr:first-child th {\n background: #fafafa;\n font-weight: 600;\n position: sticky;\n top: 0;\n z-index: 1;\n }\n #xlsx-preview-table tr:nth-child(even) {\n background: #fafafa;\n }\n #xlsx-preview-table tr:hover {\n background: #f0f7ff;\n }\n ")))}function ew(n){var r,o=n.file,l=(0,i.useAPIClient)(),u=a(),c=(null==(r=l.auth)?void 0:r.token)||"",s=L((0,e.useState)(!0),2),f=s[0],p=s[1],d=L((0,e.useState)(null),2),v=d[0],h=d[1],y=L((0,e.useState)(null),2),b=y[0],g=y[1],w=L((0,e.useState)(null),2),x=w[0],E=w[1];return(0,e.useEffect)(function(){var e=!1,t=V(o);if(!t){p(!1),h("No file URL");return}return p(!0),h(null),_(function(){var n,r,i,o,l;return D(this,function(a){switch(a.label){case 0:return a.trys.push([0,3,,4]),[4,Promise.all([el(t,c),P("imported_tpp3om_component",m.e("514").then(m.bind(m,581)))])];case 1:if(r=(n=L.apply(void 0,[a.sent(),2]))[0],i=n[1],e)return[2];return[4,r.arrayBuffer()];case 2:if(o=a.sent(),e)return[2];return g(o),E(function(){return i.PptxPreview}),p(!1),[3,4];case 3:if(l=a.sent(),e)return[2];return h(l.message||"Failed to render PPTX"),p(!1),[3,4];case 4:return[2]}})})(),function(){e=!0}},["string"==typeof o?o:null==o?void 0:o.url,c]),t().createElement("div",{style:{width:"100%",height:"100%",position:"relative"}},f&&t().createElement(ep,{message:u("Loading preview...")}),v&&t().createElement(ed,{message:u("Failed to load file preview")}),!f&&!v&&x&&t().createElement("div",{style:{width:"100%",height:"100%",overflow:"auto"}},t().createElement(x,{file:b})))}var ex=function(o){return function(l){var u,c=l.open,s=l.onOpenChange,f=l.onClose,p=l.file,d=l.index,m=l.list,v=l.onSwitchIndex;l.onDownload;var h=(0,i.useAPIClient)(),y=a(),b=(0,e.useCallback)((u=_(function(e){var t,n,i;return D(this,function(o){switch(o.label){case 0:if(!(n=e||p))return[2];i=(null==(t=h.auth)?void 0:t.token)||"",o.label=1;case 1:return o.trys.push([1,3,,4]),[4,ec(n,i)];case 2:return o.sent(),[3,4];case 3:return o.sent(),r.message.error(y("Failed to download file")),[3,4];case 4:return[2]}})}),function(e){return u.apply(this,arguments)}),[p,h,y]);if("boolean"!=typeof c)return t().createElement(o,R(I({},l),{onDownload:b}));var g=eo(p),w="number"==typeof d&&!!v&&d>0,x="number"==typeof d&&!!v&&d<m.length-1;return t().createElement(r.Modal,{open:c,title:t().createElement(em,{file:p,title:g}),onCancel:function(){null==s||s(!1),null==f||f()},footer:t().createElement(r.Space,{size:14,style:{fontSize:"20px"}},t().createElement(n.LeftOutlined,{style:{cursor:w?"pointer":"not-allowed"},onClick:function(){return w&&(null==v?void 0:v(d-1))}}),t().createElement(n.RightOutlined,{style:{cursor:x?"pointer":"not-allowed"},onClick:function(){return x&&(null==v?void 0:v(d+1))}}),t().createElement(n.DownloadOutlined,{onClick:function(){return b(p)}})),width:"90%",centered:!0},t().createElement("div",{style:{maxWidth:"100%",maxHeight:"calc(100vh - 256px)",height:"80vh",width:"100%",background:"white",display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"center",overflowY:"auto"}},t().createElement(o,R(I({},l),{onDownload:b}))))}};function eE(n){var o,l=n.index,u=n.list,c=n.onSwitchIndex,s=a(),f=(0,i.useAPIClient)(),p=u[l],d=L((0,e.useState)(!1),2),m=d[0],v=d[1],h=(0,e.useCallback)((o=_(function(e){var t,n,i,o;return D(this,function(l){switch(l.label){case 0:null==e||null==(t=e.preventDefault)||t.call(e),null==e||null==(n=e.stopPropagation)||n.call(e),o=(null==(i=f.auth)?void 0:i.token)||"",v(!0),l.label=1;case 1:return l.trys.push([1,3,4,5]),[4,ec(p,o)];case 2:return l.sent(),[3,5];case 3:return l.sent(),r.message.error(s("Failed to download file")),[3,5];case 4:return v(!1),[7];case 5:return[2]}})}),function(e){return o.apply(this,arguments)}),[p,f,s]),y=(0,e.useCallback)(function(){c(null)},[c]),b=(0,e.useMemo)(function(){return Z(p)?ev:ee(p)?eh:et(p)?ey:en(p)?eb:er(p)?eg:ei(p)?ew:null},[p]),g=null!=b;return t().createElement(r.Modal,{open:null!=l,title:t().createElement(em,{file:p,title:(null==p?void 0:p.title)||(null==p?void 0:p.filename)||(null==p?void 0:p.name)||"File"}),onCancel:y,footer:[t().createElement(r.Button,{key:"download",onClick:h,loading:m},s("Download")),t().createElement(r.Button,{key:"close",onClick:y},s("Close"))].filter(Boolean),width:g?"90%":520,centered:!0},t().createElement("div",{style:{maxWidth:"100%",maxHeight:g?"calc(100vh - 256px)":"auto",height:g?"70vh":"auto",width:"100%",background:"white",display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"center",overflowY:"auto"}},g?t().createElement(b,{file:p}):t().createElement(r.Alert,{type:"info",style:{width:"100%"},description:s("This file type cannot be previewed. Click Download to save the file."),showIcon:!0})))}function ek(n){var o=n.file,l=(0,i.useAPIClient)(),u=a(),c=(0,e.useCallback)(_(function(){var e,t;return D(this,function(n){switch(n.label){case 0:t=(null==(e=l.auth)?void 0:e.token)||"",n.label=1;case 1:return n.trys.push([1,3,,4]),[4,ec(o,t)];case 2:return n.sent(),[3,4];case 3:return n.sent(),r.message.error(u("Failed to download file")),[3,4];case 4:return[2]}})}),[o,l,u]);return t().createElement(r.Alert,{type:"info",style:{width:"100%"},description:t().createElement("span",null,u("This file type cannot be previewed. ")," ",t().createElement("a",{onClick:c,style:{textDecoration:"underline",cursor:"pointer"}},u("Download"))),showIcon:!0})}var eS=function(e){var l;if("function"!=typeof e&&null!==e)throw TypeError("Super expression must either be null or a function");function a(){var e,t;if(!(this instanceof a))throw TypeError("Cannot call a class as a function");return e=a,t=arguments,e=T(e),function(e,t){var n;if(t&&("object"==((n=t)&&"undefined"!=typeof Symbol&&n.constructor===Symbol?"symbol":typeof n)||"function"==typeof t))return t;if(void 0===e)throw ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(this,B()?Reflect.construct(e,t||[],T(this).constructor):e.apply(this,t))}return a.prototype=Object.create(e&&e.prototype,{constructor:{value:a,writable:!0,configurable:!0}}),e&&F(a,e),l=[{key:"load",value:function(){var e=this;return _(function(){return D(this,function(l){return!function(e){try{i=e.pm.get("ai")}catch(e){return}var i,o,l=null==i?void 0:i.aiManager;if(null==l?void 0:l.registerWorkContext)try{(null==(o=l.getWorkContext)?void 0:o.call(l,w))||l.registerWorkContext(w,{name:w,tag:{Component:function(e){var i=e.item;return t().createElement(r.Space,null,t().createElement(n.FileTextOutlined,null),t().createElement("span",null,(null==i?void 0:i.title)||""))}},chatbox:{Component:function(e){var i=e.item;return t().createElement(r.Space,null,t().createElement(n.FileTextOutlined,null),t().createElement("span",null,(null==i?void 0:i.title)||""))}}})}catch(e){}}(e.app),i.attachmentFileTypes.add({match:function(){return!0},Previewer:eE}),o.filePreviewTypes.add({match:function(){return!0},Previewer:ex(ek)}),o.filePreviewTypes.add({match:Z,Previewer:ex(ev)}),o.filePreviewTypes.add({match:ee,getThumbnailURL:function(e){return(null==e?void 0:e.url)||(null==e?void 0:e.preview)||null},Previewer:ex(eh)}),o.filePreviewTypes.add({match:et,Previewer:ex(ey)}),o.filePreviewTypes.add({match:en,Previewer:ex(eb)}),o.filePreviewTypes.add({match:er,Previewer:ex(eg)}),o.filePreviewTypes.add({match:ei,Previewer:ex(ew)}),[2]})})()}}],function(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}(a.prototype,l),a}(U(i.Plugin)),eO=eS}(),v}()});
@@ -11,8 +11,9 @@ module.exports = {
11
11
  "react": "18.2.0",
12
12
  "@ant-design/icons": "5.6.1",
13
13
  "antd": "5.24.2",
14
- "@nocobase/client": "2.0.38",
15
- "@nocobase/plugin-file-manager": "2.0.38",
16
- "@nocobase/actions": "2.0.38",
17
- "@nocobase/server": "2.0.38"
14
+ "@nocobase/client": "2.0.41",
15
+ "@nocobase/plugin-ai": "2.0.41",
16
+ "@nocobase/plugin-file-manager": "2.0.41",
17
+ "@nocobase/actions": "2.0.41",
18
+ "@nocobase/server": "2.0.41"
18
19
  };
@@ -4,8 +4,11 @@
4
4
  "Download": "Download",
5
5
  "Close": "Close",
6
6
  "Loading preview...": "Loading preview...",
7
- "Failed to load file preview": "Failed to load file preview",
8
- "Failed to download file": "Failed to download file",
9
- "This file type cannot be previewed. Click Download to save the file.": "This file type cannot be previewed. Click Download to save the file.",
10
- "This file type cannot be previewed. ": "This file type cannot be previewed. "
11
- }
7
+ "Failed to load file preview": "Failed to load file preview",
8
+ "Failed to download file": "Failed to download file",
9
+ "Ask AI": "Ask AI",
10
+ "Please help me analyze the file currently open in preview.": "Please help me analyze the file currently open in preview.",
11
+ "Failed to open AI chat": "Failed to open AI chat",
12
+ "This file type cannot be previewed. Click Download to save the file.": "This file type cannot be previewed. Click Download to save the file.",
13
+ "This file type cannot be previewed. ": "This file type cannot be previewed. "
14
+ }
@@ -1,11 +1,14 @@
1
- {
2
- "Preview": "Xem trước",
3
- "Open in new window": "Mở trong cửa sổ mới",
4
- "Download": "Tải xuống",
5
- "Close": "Đóng",
6
- "Loading preview...": "Đang tải xem trước...",
7
- "Failed to load file preview": "Không thể tải xem trước file",
8
- "Failed to download file": "Không thể tải file",
9
- "This file type cannot be previewed. Click Download to save the file.": "Loại file này không thể xem trước. Nhấn Tải xuống để lưu file.",
10
- "This file type cannot be previewed. ": "Loại file này không thể xem trước. "
11
- }
1
+ {
2
+ "Preview": "Xem trước",
3
+ "Open in new window": "Mở trong cửa sổ mới",
4
+ "Download": "Tải xuống",
5
+ "Close": "Đóng",
6
+ "Loading preview...": "Đang tải xem trước...",
7
+ "Failed to load file preview": "Không thể tải xem trước file",
8
+ "Failed to download file": "Không thể tải file",
9
+ "Ask AI": "Hỏi AI",
10
+ "Please help me analyze the file currently open in preview.": "Hãy giúp tôi phân tích file đang được mở xem trước.",
11
+ "Failed to open AI chat": "Không thể mở chat AI",
12
+ "This file type cannot be previewed. Click Download to save the file.": "Loại file này không thể xem trước. Nhấn Tải xuống để lưu file.",
13
+ "This file type cannot be previewed. ": "Loại file này không thể xem trước. "
14
+ }
@@ -1,11 +1,14 @@
1
- {
2
- "Preview": "预览",
3
- "Open in new window": "在新窗口中打开",
4
- "Download": "下载",
5
- "Close": "关闭",
6
- "Loading preview...": "正在加载预览...",
7
- "Failed to load file preview": "无法加载文件预览",
8
- "Failed to download file": "无法下载文件",
9
- "This file type cannot be previewed. Click Download to save the file.": "此文件类型不支持预览。请点击下载以保存文件。",
10
- "This file type cannot be previewed. ": "此文件类型不支持预览。"
11
- }
1
+ {
2
+ "Preview": "预览",
3
+ "Open in new window": "在新窗口中打开",
4
+ "Download": "下载",
5
+ "Close": "关闭",
6
+ "Loading preview...": "正在加载预览...",
7
+ "Failed to load file preview": "无法加载文件预览",
8
+ "Failed to download file": "无法下载文件",
9
+ "Ask AI": "询问 AI",
10
+ "Please help me analyze the file currently open in preview.": "请帮我分析当前正在预览的文件。",
11
+ "Failed to open AI chat": "无法打开 AI 聊天",
12
+ "This file type cannot be previewed. Click Download to save the file.": "此文件类型不支持预览。请点击下载以保存文件。",
13
+ "This file type cannot be previewed. ": "此文件类型不支持预览。"
14
+ }
@@ -32,17 +32,32 @@ __export(plugin_exports, {
32
32
  module.exports = __toCommonJS(plugin_exports);
33
33
  var import_server = require("@nocobase/server");
34
34
  var import_excel_parser_handler = require("./excel-parser-handler");
35
+ const FILE_PREVIEW_WORK_CONTEXT_TYPE = "file-preview";
36
+ const MAX_AI_CONTEXT_CHARS = 5e4;
35
37
  class PluginFilePreviewAuthServer extends import_server.Plugin {
36
38
  async load() {
37
39
  this.registerExcelParser();
40
+ this.registerAIWorkContext();
38
41
  this.registerDownloadApi();
39
42
  }
40
43
  registerDownloadApi() {
41
44
  this.app.resourcer.define({
42
45
  name: "filePreviewAuth",
43
46
  actions: {
47
+ getContent: async (ctx, next) => {
48
+ const params = ctx.action.params || {};
49
+ const values = params.values || {};
50
+ const attachment = await this.resolveAttachment(ctx, values.file || params.file || params);
51
+ this.assertAuthenticated(ctx);
52
+ const text = await this.extractAttachmentText(ctx, attachment);
53
+ ctx.body = {
54
+ filename: getAttachmentDisplayName(attachment),
55
+ mimetype: getAttachmentValue(attachment, "mimetype") || "",
56
+ content: this.formatAttachmentWorkContext(attachment, text)
57
+ };
58
+ await next();
59
+ },
44
60
  download: async (ctx, next) => {
45
- var _a;
46
61
  const { url } = ctx.action.params;
47
62
  if (!url) {
48
63
  ctx.throw(400, "url is required");
@@ -51,10 +66,6 @@ class PluginFilePreviewAuthServer extends import_server.Plugin {
51
66
  if (!fileManager) {
52
67
  ctx.throw(500, "File manager plugin not found");
53
68
  }
54
- const currentUser = ctx.state.currentUser;
55
- if (!currentUser) {
56
- ctx.throw(401, "Unauthorized");
57
- }
58
69
  const attachmentRepo = this.db.getRepository("attachments");
59
70
  const attachment = await attachmentRepo.findOne({
60
71
  filter: { url }
@@ -62,11 +73,7 @@ class PluginFilePreviewAuthServer extends import_server.Plugin {
62
73
  if (!attachment) {
63
74
  ctx.throw(404, "Attachment not found for this URL");
64
75
  }
65
- const isOwner = attachment.createdById === currentUser.id;
66
- const isAdmin = (_a = currentUser.roles) == null ? void 0 : _a.some((r) => r.name === "root" || r === "root" || r.name === "admin");
67
- if (!isOwner && !isAdmin) {
68
- ctx.throw(403, "Permission denied: you cannot view other users' files");
69
- }
76
+ await this.assertCanAccessAttachment(ctx, attachment);
70
77
  try {
71
78
  const storageModel = fileManager.storagesCache.get(attachment.storageId);
72
79
  if (storageModel && (storageModel.type === "s3" || storageModel.type === "aws-s3")) {
@@ -99,8 +106,131 @@ class PluginFilePreviewAuthServer extends import_server.Plugin {
99
106
  }
100
107
  }
101
108
  });
109
+ this.app.acl.allow("filePreviewAuth", ["download", "getContent"], "loggedIn");
102
110
  this.log.info("[FilePreviewAuth] Registered /api/filePreviewAuth:download endpoint");
103
111
  }
112
+ registerAIWorkContext() {
113
+ var _a;
114
+ let aiPlugin;
115
+ try {
116
+ aiPlugin = this.pm.get("ai") || this.pm.get("@nocobase/plugin-ai");
117
+ } catch {
118
+ aiPlugin = null;
119
+ }
120
+ if (!((_a = aiPlugin == null ? void 0 : aiPlugin.workContextHandler) == null ? void 0 : _a.registerStrategy)) {
121
+ this.log.debug("[FilePreviewAuth] plugin-ai not found - file preview AI context skipped");
122
+ return;
123
+ }
124
+ try {
125
+ aiPlugin.workContextHandler.registerStrategy(FILE_PREVIEW_WORK_CONTEXT_TYPE, {
126
+ resolve: async (ctx, contextItem) => {
127
+ var _a2;
128
+ const file = ((_a2 = contextItem == null ? void 0 : contextItem.content) == null ? void 0 : _a2.file) || (contextItem == null ? void 0 : contextItem.content) || contextItem;
129
+ const attachment = await this.resolveAttachment(ctx, file);
130
+ this.assertAuthenticated(ctx);
131
+ const text = await this.extractAttachmentText(ctx, attachment);
132
+ return this.formatAttachmentWorkContext(attachment, text);
133
+ }
134
+ });
135
+ this.log.info("[FilePreviewAuth] AI file-preview work context registered");
136
+ } catch (err) {
137
+ this.log.warn(`[FilePreviewAuth] AI file-preview work context registration skipped: ${err}`);
138
+ }
139
+ }
140
+ async resolveAttachment(ctx, input) {
141
+ const file = (input == null ? void 0 : input.file) || input || {};
142
+ const collectionNames = [
143
+ file.collectionName,
144
+ "attachments",
145
+ "aiFiles"
146
+ ].filter(Boolean);
147
+ const ids = [file.id, file.uid].filter((value) => isLikelyRecordId(value));
148
+ for (const collectionName of collectionNames) {
149
+ if (!ctx.db.getCollection(collectionName)) continue;
150
+ const repo = ctx.db.getRepository(collectionName);
151
+ for (const id of ids) {
152
+ const record = await repo.findOne({ filter: { id } });
153
+ if (record) return record;
154
+ }
155
+ }
156
+ const urlCandidates = getUrlCandidates(file.url || file.preview || file.path);
157
+ for (const collectionName of collectionNames) {
158
+ if (!ctx.db.getCollection(collectionName)) continue;
159
+ const repo = ctx.db.getRepository(collectionName);
160
+ for (const url of urlCandidates) {
161
+ const record = await repo.findOne({ filter: { url } });
162
+ if (record) return record;
163
+ }
164
+ }
165
+ ctx.throw(404, "Attachment not found for this preview file");
166
+ }
167
+ async assertCanAccessAttachment(ctx, attachment) {
168
+ const currentUser = this.assertAuthenticated(ctx);
169
+ const createdById = getAttachmentValue(attachment, "createdById");
170
+ const currentRoles = ctx.state.currentRoles || [];
171
+ const userRoles = currentUser.roles || [];
172
+ const isOwner = createdById != null && String(createdById) === String(currentUser.id);
173
+ const isAdmin = currentRoles.includes("root") || currentRoles.includes("admin") || userRoles.some((role) => role === "root" || role === "admin" || (role == null ? void 0 : role.name) === "root" || (role == null ? void 0 : role.name) === "admin");
174
+ if (!isOwner && !isAdmin) {
175
+ ctx.throw(403, "Permission denied: you cannot view other users' files");
176
+ }
177
+ }
178
+ assertAuthenticated(ctx) {
179
+ const currentUser = ctx.state.currentUser;
180
+ if (!currentUser) {
181
+ ctx.throw(401, "Unauthorized");
182
+ }
183
+ return currentUser;
184
+ }
185
+ async extractAttachmentText(ctx, attachment) {
186
+ var _a;
187
+ const docParserPlugin = this.pm.get("@nocobase/plugin-document-parser");
188
+ if (docParserPlugin == null ? void 0 : docParserPlugin.internalParserRegistry) {
189
+ try {
190
+ const result = await docParserPlugin.internalParserRegistry.parse(attachment, ctx);
191
+ if ((result == null ? void 0 : result.handled) && ((_a = result.text) == null ? void 0 : _a.trim())) {
192
+ return result.text;
193
+ }
194
+ } catch (err) {
195
+ this.log.warn(`[FilePreviewAuth] Document parser failed: ${err}`);
196
+ }
197
+ }
198
+ if (isPlainTextAttachment(attachment)) {
199
+ return await this.readAttachmentAsText(attachment);
200
+ }
201
+ return "";
202
+ }
203
+ async readAttachmentAsText(attachment) {
204
+ const fileManager = this.pm.get("@nocobase/plugin-file-manager") || this.pm.get("file-manager");
205
+ if (!(fileManager == null ? void 0 : fileManager.getFileStream)) {
206
+ return "";
207
+ }
208
+ const { stream } = await fileManager.getFileStream(attachment);
209
+ const chunks = [];
210
+ for await (const chunk of stream) {
211
+ chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
212
+ }
213
+ return Buffer.concat(chunks).toString("utf-8");
214
+ }
215
+ formatAttachmentWorkContext(attachment, text) {
216
+ const filename = sanitizeXmlAttr(getAttachmentDisplayName(attachment));
217
+ const mimetype = sanitizeXmlAttr(getAttachmentValue(attachment, "mimetype") || "");
218
+ const extname = sanitizeXmlAttr(getAttachmentValue(attachment, "extname") || "");
219
+ const size = sanitizeXmlAttr(getAttachmentValue(attachment, "size") || "");
220
+ const content = truncateForContext((text == null ? void 0 : text.trim()) || "");
221
+ if (!content) {
222
+ return [
223
+ `<file_preview filename="${filename}" type="${mimetype}" extname="${extname}" size="${size}">`,
224
+ "The user is previewing this file, but no extractable text content was found by the server parser.",
225
+ "</file_preview>"
226
+ ].join("\n");
227
+ }
228
+ return [
229
+ `<file_preview filename="${filename}" type="${mimetype}" extname="${extname}" size="${size}">`,
230
+ content,
231
+ "</file_preview>"
232
+ ].join("\n");
233
+ }
104
234
  /**
105
235
  * Register Excel handler into plugin-document-parser's InternalParserRegistry.
106
236
  * Uses prepend:true so SheetJS takes priority over the AI-loader fallback.
@@ -121,6 +251,65 @@ class PluginFilePreviewAuthServer extends import_server.Plugin {
121
251
  }
122
252
  }
123
253
  var plugin_default = PluginFilePreviewAuthServer;
254
+ function getAttachmentValue(attachment, key) {
255
+ if (!attachment) return void 0;
256
+ if (typeof attachment.get === "function") return attachment.get(key);
257
+ return attachment[key];
258
+ }
259
+ function getAttachmentDisplayName(attachment) {
260
+ const title = getAttachmentValue(attachment, "title");
261
+ const extname = getAttachmentValue(attachment, "extname");
262
+ if (title && extname) return `${title}${extname}`;
263
+ return getAttachmentValue(attachment, "filename") || getAttachmentValue(attachment, "name") || "file";
264
+ }
265
+ function isLikelyRecordId(value) {
266
+ if (value === void 0 || value === null || value === "") return false;
267
+ const text = String(value);
268
+ return !text.includes("/") && !text.startsWith("http://") && !text.startsWith("https://");
269
+ }
270
+ function getUrlCandidates(value) {
271
+ if (!value) return [];
272
+ const original = decodePossiblyEncodedUrl(String(value));
273
+ const candidates = /* @__PURE__ */ new Set();
274
+ const add = (url) => {
275
+ if (!url) return;
276
+ candidates.add(url);
277
+ candidates.add(url.split("?")[0]);
278
+ candidates.add(url.replace(/^\//, ""));
279
+ candidates.add(`/${url.replace(/^\//, "")}`);
280
+ };
281
+ add(original);
282
+ try {
283
+ const parsed = new URL(original, "http://local");
284
+ if (parsed.pathname.includes("/api/filePreviewAuth:download")) {
285
+ add(decodePossiblyEncodedUrl(parsed.searchParams.get("url") || ""));
286
+ } else if (parsed.origin !== "http://local") {
287
+ add(`${parsed.pathname}${parsed.search}`);
288
+ }
289
+ } catch {
290
+ }
291
+ return [...candidates].filter(Boolean);
292
+ }
293
+ function decodePossiblyEncodedUrl(value) {
294
+ try {
295
+ return decodeURIComponent(value);
296
+ } catch {
297
+ return value;
298
+ }
299
+ }
300
+ function isPlainTextAttachment(attachment) {
301
+ const mimetype = String(getAttachmentValue(attachment, "mimetype") || "").toLowerCase();
302
+ const extname = String(getAttachmentValue(attachment, "extname") || "").toLowerCase();
303
+ return mimetype.startsWith("text/") || ["application/json", "application/xml", "application/x-yaml"].includes(mimetype) || [".txt", ".md", ".csv", ".json", ".xml", ".yaml", ".yml", ".log"].includes(extname);
304
+ }
305
+ function truncateForContext(text) {
306
+ if (!text || text.length <= MAX_AI_CONTEXT_CHARS) return text;
307
+ return `${text.slice(0, MAX_AI_CONTEXT_CHARS)}
308
+ ...[truncated]`;
309
+ }
310
+ function sanitizeXmlAttr(value) {
311
+ return String(value ?? "").replace(/&/g, "&amp;").replace(/"/g, "&quot;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
312
+ }
124
313
  // Annotate the CommonJS export names for ESM import in node:
125
314
  0 && (module.exports = {
126
315
  PluginFilePreviewAuthServer
package/package.json CHANGED
@@ -1,36 +1,43 @@
1
- {
2
- "name": "plugin-file-preview-auth",
3
- "displayName": "Authenticated File Previewer",
4
- "displayName.vi-VN": "Xem trước file có xác thực",
5
- "displayName.zh-CN": "认证文件预览",
6
- "description": "Preview PDF, image, and text files with Bearer token authentication via blob URLs.",
7
- "description.vi-VN": "Xem trước file PDF, hình ảnh và văn bản với xác thực Bearer token qua blob URL.",
8
- "description.zh-CN": "通过 Bearer 令牌认证和 Blob URL 预览 PDF、图片和文本文件。",
9
- "version": "1.1.4",
10
- "main": "dist/server/index.js",
11
- "files": [
12
- "dist",
13
- "public",
14
- "client.js",
15
- "client.d.ts",
16
- "server.js",
17
- "server.d.ts",
18
- "README.md"
19
- ],
20
- "peerDependencies": {
21
- "@nocobase/client": "2.x",
22
- "@nocobase/plugin-file-manager": "2.x",
23
- "@nocobase/server": "2.x",
24
- "@nocobase/test": "2.x"
25
- },
26
- "devDependencies": {
27
- "docx-preview": "^0.3.3",
28
- "xlsx": "^0.18.5"
29
- },
30
- "keywords": [
31
- "File manager",
32
- "File preview",
33
- "Authentication"
34
- ],
35
- "license": "Apache-2.0"
36
- }
1
+ {
2
+ "name": "plugin-file-preview-auth",
3
+ "displayName": "Authenticated File Previewer",
4
+ "displayName.vi-VN": "Xem trước file có xác thực",
5
+ "displayName.zh-CN": "认证文件预览",
6
+ "description": "Preview PDF, image, and text files with Bearer token authentication via blob URLs.",
7
+ "description.vi-VN": "Xem trước file PDF, hình ảnh và văn bản với xác thực Bearer token qua blob URL.",
8
+ "description.zh-CN": "通过 Bearer 令牌认证和 Blob URL 预览 PDF、图片和文本文件。",
9
+ "version": "1.1.9",
10
+ "main": "dist/server/index.js",
11
+ "files": [
12
+ "dist",
13
+ "public",
14
+ "client.js",
15
+ "client.d.ts",
16
+ "server.js",
17
+ "server.d.ts",
18
+ "README.md"
19
+ ],
20
+ "peerDependencies": {
21
+ "@nocobase/client": "2.x",
22
+ "@nocobase/plugin-ai": "2.x",
23
+ "@nocobase/plugin-file-manager": "2.x",
24
+ "@nocobase/server": "2.x"
25
+ },
26
+ "peerDependenciesMeta": {
27
+ "@nocobase/plugin-ai": {
28
+ "optional": true
29
+ }
30
+ },
31
+ "devDependencies": {},
32
+ "keywords": [
33
+ "File manager",
34
+ "File preview",
35
+ "Authentication"
36
+ ],
37
+ "license": "Apache-2.0",
38
+ "dependencies": {
39
+ "docx-preview": "^0.3.3",
40
+ "react-pptx-preview-kit": "^0.1.9",
41
+ "xlsx": "^0.18.5"
42
+ }
43
+ }
@@ -1,13 +0,0 @@
1
- /**
2
- * This file is part of the NocoBase (R) project.
3
- * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
- * Authors: NocoBase Team.
5
- *
6
- * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
- * For more information, please refer to: https://www.nocobase.com/agreement.
8
- */
9
- import { Plugin } from '@nocobase/client';
10
- export declare class PluginFilePreviewAuthClient extends Plugin {
11
- load(): Promise<void>;
12
- }
13
- export default PluginFilePreviewAuthClient;
@@ -1,10 +0,0 @@
1
- /**
2
- * This file is part of the NocoBase (R) project.
3
- * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
- * Authors: NocoBase Team.
5
- *
6
- * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
- * For more information, please refer to: https://www.nocobase.com/agreement.
8
- */
9
- export declare function useT(): (str: string) => string;
10
- export declare function tStr(key: string): string;
package/dist/index.d.ts DELETED
@@ -1,10 +0,0 @@
1
- /**
2
- * This file is part of the NocoBase (R) project.
3
- * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
- * Authors: NocoBase Team.
5
- *
6
- * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
- * For more information, please refer to: https://www.nocobase.com/agreement.
8
- */
9
- export * from './server';
10
- export { default } from './server';