plugin-ai-chat-file-preview 1.0.5 → 1.0.7
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.
package/dist/client/index.js
CHANGED
|
@@ -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-ai/client"),require("@nocobase/client"),require("react"),require("@ant-design/icons"),require("antd")):"function"==typeof define&&define.amd?define("plugin-ai-chat-file-preview",["@nocobase/plugin-ai/client","@nocobase/client","react","@ant-design/icons","antd"],t):"object"==typeof exports?exports["plugin-ai-chat-file-preview"]=t(require("@nocobase/plugin-ai/client"),require("@nocobase/client"),require("react"),require("@ant-design/icons"),require("antd")):e["plugin-ai-chat-file-preview"]=t(e["@nocobase/plugin-ai/client"],e["@nocobase/client"],e.react,e["@ant-design/icons"],e.antd)}(self,function(e,t,n,r,o){return function(){var i,a,u,l,c,s,f={581: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},645:function(t){"use strict";t.exports=e},721:function(e){"use strict";e.exports=o},156:function(e){"use strict";e.exports=n}},d={};function p(e){var t=d[e];if(void 0!==t)return t.exports;var n=d[e]={exports:{}};return f[e](n,n.exports,p),n.exports}p.m=f,p.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return p.d(t,{a:t}),t},p.d=function(e,t){for(var n in t)p.o(t,n)&&!p.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},p.f={},p.e=function(e){return Promise.all(Object.keys(p.f).reduce(function(t,n){return p.f[n](e,t),t},[]))},p.u=function(e){return""+({395:"0ef9cbd6bccd7aff",463:"7e04271656f34237"})[e]+".js"},p.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}}(),p.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i={},a="plugin-ai-chat-file-preview:",p.l=function(e,t,n,r){if(i[e])return void i[e].push(t);if(void 0!==n)for(var o,u,l=document.getElementsByTagName("script"),c=0;c<l.length;c++){var s=l[c];if(s.getAttribute("src")==e||s.getAttribute("data-webpack")==a+n){o=s;break}}o||(u=!0,(o=document.createElement("script")).charset="utf-8",o.timeout=120,p.nc&&o.setAttribute("nonce",p.nc),o.setAttribute("data-webpack",a+n),o.src=e),i[e]=[t];var f=function(t,n){o.onerror=o.onload=null,clearTimeout(d);var r=i[e];if(delete i[e],o.parentNode&&o.parentNode.removeChild(o),r&&r.forEach(function(e){return e(n)}),t)return t(n)},d=setTimeout(f.bind(null,void 0,{type:"timeout",target:o}),12e4);o.onerror=f.bind(null,o.onerror),o.onload=f.bind(null,o.onload),u&&document.head.appendChild(o)},p.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+="/"),p.p=u+"static/plugins/plugin-ai-chat-file-preview/dist/client/",l={909:0},p.f.j=function(e,t){var n=p.o(l,e)?l[e]:void 0;if(0!==n)if(n)t.push(n[2]);else{var r=new Promise(function(t,r){n=l[e]=[t,r]});t.push(n[2]=r);var o=p.p+p.u(e),i=Error();p.l(o,function(t){if(p.o(l,e)&&(0!==(n=l[e])&&(l[e]=void 0),n)){var r=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;i.message="Loading chunk "+e+" failed.\n("+r+": "+o+")",i.name="ChunkLoadError",i.type=r,i.request=o,n[1](i)}},"chunk-"+e,e)}},c=function(e,t){var n,r,o=t[0],i=t[1],a=t[2],u=0;if(o.some(function(e){return 0!==l[e]})){for(n in i)p.o(i,n)&&(p.m[n]=i[n]);a&&a(p)}for(e&&e(t);u<o.length;u++)r=o[u],p.o(l,r)&&l[r]&&l[r][0](),l[r]=0},(s=self.webpackChunkplugin_ai_chat_file_preview=self.webpackChunkplugin_ai_chat_file_preview||[]).forEach(c.bind(null,0)),s.push=c.bind(null,s.push.bind(s));var v={};return!function(){"use strict";p.r(v),p.d(v,{PluginAIChatFilePreviewClient:function(){return eh},default:function(){return em}});var e=p(772),t=p(156),n=p.n(t),r=p(645),o=p(721),i=p(482);function a(e,t,n,r,o,i,a){try{var u=e[i](a),l=u.value}catch(e){n(e);return}u.done?t(l):Promise.resolve(l).then(r,o)}function u(e){return function(){var t=this,n=arguments;return new Promise(function(r,o){var i=e.apply(t,n);function u(e){a(i,r,o,u,l,"next",e)}function l(e){a(i,r,o,u,l,"throw",e)}u(void 0)})}}function l(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function u(i){return function(u){var l=[i,u];if(n)throw TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&l[0]?r.return:l[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,l[1])).done)return o;switch(r=0,o&&(l=[2&l[0],o.value]),l[0]){case 0:case 1:o=l;break;case 4:return a.label++,{value:l[1],done:!1};case 5:a.label++,r=l[1],l=[0];continue;case 7:l=a.ops.pop(),a.trys.pop();continue;default:if(!(o=(o=a.trys).length>0&&o[o.length-1])&&(6===l[0]||2===l[0])){a=0;continue}if(3===l[0]&&(!o||l[1]>o[0]&&l[1]<o[3])){a.label=l[1];break}if(6===l[0]&&a.label<o[1]){a.label=o[1],o=l;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(l);break}o[2]&&a.ops.pop(),a.trys.pop();continue}l=t.call(e,a)}catch(e){l=[6,e],r=0}finally{n=o=0}if(5&l[0])throw l[1];return{value:l[0]?l[1]:void 0,done:!0}}}}var c="blobs";function s(){return new Promise(function(e,t){var n=indexedDB.open("nb-ai-chat-file-preview",1);n.onupgradeneeded=function(){var e=n.result;e.objectStoreNames.contains(c)||e.createObjectStore(c)},n.onsuccess=function(){return e(n.result)},n.onerror=function(){return t(n.error)}})}function f(e,t){return"".concat(e,":").concat(t)}var d={get:function(e,t){return u(function(){var n;return l(this,function(r){switch(r.label){case 0:return[4,s()];case 1:return n=r.sent(),[2,new Promise(function(r,o){var i=n.transaction(c,"readonly").objectStore(c).get(f(e,t));i.onsuccess=function(){return r(i.result||null)},i.onerror=function(){return o(i.error)}})]}})})()},put:function(e,t,n){return u(function(){var r;return l(this,function(o){switch(o.label){case 0:return[4,s()];case 1:return r=o.sent(),[2,new Promise(function(o,i){var a=r.transaction(c,"readwrite");a.objectStore(c).put(n,f(e,t)),a.oncomplete=function(){return o()},a.onerror=function(){return i(a.error)}})]}})})()},delete:function(e,t){return u(function(){var n;return l(this,function(r){switch(r.label){case 0:return[4,s()];case 1:return n=r.sent(),[2,new Promise(function(r,o){var i=n.transaction(c,"readwrite");i.objectStore(c).delete(f(e,t)),i.oncomplete=function(){return r()},i.onerror=function(){return o(i.error)}})]}})})()},clearSession:function(e){return u(function(){var t;return l(this,function(n){switch(n.label){case 0:return[4,s()];case 1:return t=n.sent(),[2,new Promise(function(n,r){var o=t.transaction(c,"readwrite"),i=o.objectStore(c).openCursor();i.onsuccess=function(){var t=i.result;t&&("string"==typeof t.key&&t.key.startsWith("".concat(e,":"))&&t.delete(),t.continue())},o.oncomplete=function(){return n()},o.onerror=function(){return r(o.error)}})]}})})()},clearAll:function(){return u(function(){var e;return l(this,function(t){switch(t.label){case 0:return[4,s()];case 1:return e=t.sent(),[2,new Promise(function(t,n){var r=e.transaction(c,"readwrite");r.objectStore(c).clear(),r.oncomplete=function(){return t()},r.onerror=function(){return n(r.error)}})]}})})()}};function h(){var t=(0,e.useApp)();return{t:function(e){return t.i18n.t(e,{ns:"@nocobase/plugin-ai-chat-file-preview"})}}}var m=p(581);function y(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 b(e,t,n,r,o,i,a){try{var u=e[i](a),l=u.value}catch(e){n(e);return}u.done?t(l):Promise.resolve(l).then(r,o)}function g(e){return function(){var t=this,n=arguments;return new Promise(function(r,o){var i=e.apply(t,n);function a(e){b(i,r,o,a,u,"next",e)}function u(e){b(i,r,o,a,u,"throw",e)}a(void 0)})}}function w(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,o=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=o){var i=[],a=!0,u=!1;try{for(o=o.call(e);!(a=(n=o.next()).done)&&(i.push(n.value),!t||i.length!==t);a=!0);}catch(e){u=!0,r=e}finally{try{a||null==o.return||o.return()}finally{if(u)throw r}}return i}}(e,t)||function(e,t){if(e){if("string"==typeof e)return y(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 y(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 x(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function u(i){return function(u){var l=[i,u];if(n)throw TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&l[0]?r.return:l[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,l[1])).done)return o;switch(r=0,o&&(l=[2&l[0],o.value]),l[0]){case 0:case 1:o=l;break;case 4:return a.label++,{value:l[1],done:!1};case 5:a.label++,r=l[1],l=[0];continue;case 7:l=a.ops.pop(),a.trys.pop();continue;default:if(!(o=(o=a.trys).length>0&&o[o.length-1])&&(6===l[0]||2===l[0])){a=0;continue}if(3===l[0]&&(!o||l[1]>o[0]&&l[1]<o[3])){a.label=l[1];break}if(6===l[0]&&a.label<o[1]){a.label=o[1],o=l;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(l);break}o[2]&&a.ops.pop(),a.trys.pop();continue}l=t.call(e,a)}catch(e){l=[6,e],r=0}finally{n=o=0}if(5&l[0])throw l[1];return{value:l[0]?l[1]:void 0,done:!0}}}}var S=["application/pdf"],E=["image/png","image/jpeg","image/gif","image/webp","image/svg+xml","image/bmp"],k=["text/plain","text/csv","text/html","text/css","text/javascript","application/json","application/xml","text/xml","text/yaml","application/x-yaml"],j=["application/vnd.openxmlformats-officedocument.wordprocessingml.document"],_=["application/vnd.openxmlformats-officedocument.spreadsheetml.sheet","application/vnd.ms-excel"],C=["pdf"],O=["png","jpg","jpeg","gif","webp","svg","bmp"],P=["txt","csv","html","css","js","json","xml","log","md","yaml","yml","xaml"],L=["docx"],I=["xlsx","xls"];function A(e){var t="string"==typeof e?e:null==e?void 0:e.url;return t?t.startsWith("http://")||t.startsWith("https://")?t:"".concat(location.origin,"/").concat(t.replace(/^\//,"")):""}function R(e,t,n){if((null==e?void 0:e.mimetype)&&t.includes(e.mimetype))return!0;var r,o,i=-1!==(o=(r=("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]).lastIndexOf("."))?r.slice(o+1).toLowerCase().replace(/^\./,""):"";return!!i&&n.includes(i)}var T=function(e){return R(e,S,C)},F=function(e){return R(e,E,O)},U=function(e){return R(e,k,P)},B=function(e){return R(e,j,L)},q=function(e){return R(e,_,I)};function M(e,t){return D.apply(this,arguments)}function D(){return(D=g(function(e,t){return x(this,function(n){switch(n.label){case 0:return[4,e.axios.get(t,{responseType:"blob"})];case 1:return[2,n.sent().data]}})})).apply(this,arguments)}function N(){return(N=g(function(e,t,n){var r,o,i,a,u,l;return x(this,function(c){switch(c.label){case 0:if(r=A(e),o=String((null==e?void 0:e.id)||(null==e?void 0:e.uid)||r),!(i=(null==e?void 0:e.filename)||(null==e?void 0:e.name)||(null==e?void 0:e.title)))return[3,2];return[4,d.get("local_uploads",i).catch(function(){return null})];case 1:if(a=c.sent())return[2,a];c.label=2;case 2:if(!(n&&o))return[3,4];return[4,d.get(n,o).catch(function(){return null})];case 3:if(u=c.sent())return[2,u];c.label=4;case 4:if(!r)throw Error("No valid URL");return[4,M(t,r)];case 5:return l=c.sent(),n&&o&&d.put(n,o,l).catch(function(){}),[2,l]}})})).apply(this,arguments)}function z(){return(z=g(function(e,t){var n,r,o,i;return x(this,function(a){switch(a.label){case 0:return[4,function(e,t,n){return N.apply(this,arguments)}(e,t,"")];case 1:return n=a.sent(),r=(null==e?void 0:e.title)&&(null==e?void 0:e.extname)?"".concat(e.title).concat(e.extname):(null==e?void 0:e.filename)||(null==e?void 0:e.name)||"download",(o=document.createElement("a")).href=i=URL.createObjectURL(n),o.download=r,document.body.appendChild(o),o.click(),document.body.removeChild(o),setTimeout(function(){return URL.revokeObjectURL(i)},1e3),[2]}})})).apply(this,arguments)}function W(e){var t=e.msg;return n().createElement("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100%",width:"100%"}},n().createElement(o.Spin,{tip:t}))}function H(e){var t=e.msg;return n().createElement("div",{style:{padding:20,textAlign:"center",color:"#ff4d4f"}},t)}function X(e,n,r){var o=w((0,t.useState)(null),2),i=o[0],a=o[1],u=w((0,t.useState)(!0),2),l=u[0],c=u[1],s=w((0,t.useState)(null),2),f=s[0],p=s[1],v=(0,t.useRef)(null),h=(null==e?void 0:e.id)||(null==e?void 0:e.uid)||"",m=A(e);return(0,t.useEffect)(function(){var e=!1;if(!m){c(!1),p("No file URL");return}return c(!0),p(null),g(function(){var t,o,i,u,l;return x(this,function(s){switch(s.label){case 0:if(s.trys.push([0,4,,5]),!(r&&h))return[3,2];return[4,d.get(r,String(h))];case 1:if((t=s.sent())&&!e)return v.current=o=URL.createObjectURL(t),a(o),c(!1),[2];s.label=2;case 2:return[4,M(n,m)];case 3:if(i=s.sent(),e)return[2];return r&&h&&d.put(r,String(h),i).catch(function(){}),v.current=u=URL.createObjectURL(i),a(u),c(!1),[3,5];case 4:if(l=s.sent(),e)return[2];return p(l.message||"Failed to load"),c(!1),[3,5];case 5:return[2]}})})(),function(){e=!0,v.current&&(URL.revokeObjectURL(v.current),v.current=null)}},[m,n,r,h]),{blobUrl:i,loading:l,error:f}}function G(t){var r=t.file,o=t.sessionId,i=(0,e.useAPIClient)(),a=h().t,u=X(r,i,o),l=u.blobUrl,c=u.loading,s=u.error;return c?n().createElement(W,{msg:a("Loading preview...")}):s||!l?n().createElement(H,{msg:a("Failed to load file preview")}):n().createElement("iframe",{src:l,width:"100%",height:"100%",style:{border:"none"}})}function $(t){var r=t.file,o=t.sessionId,i=(0,e.useAPIClient)(),a=h().t,u=X(r,i,o),l=u.blobUrl,c=u.loading,s=u.error;return c?n().createElement(W,{msg:a("Loading preview...")}):s||!l?n().createElement(H,{msg:a("Failed to load file preview")}):n().createElement("img",{src:l,style:{maxWidth:"100%",maxHeight:"100%",objectFit:"contain"},alt:(null==r?void 0:r.filename)||""})}function J(r){var o,i,a,u,l,c,s,f,p,v,m,y=r.file,b=r.sessionId,S=(0,e.useAPIClient)(),E=h().t,k=(i=(o=w((0,t.useState)(null),2))[0],a=o[1],l=(u=w((0,t.useState)(!0),2))[0],c=u[1],f=(s=w((0,t.useState)(null),2))[0],p=s[1],v=(null==y?void 0:y.id)||(null==y?void 0:y.uid)||"",m=A(y),(0,t.useEffect)(function(){var e=!1;if(!m){c(!1),p("No file URL");return}return c(!0),p(null),g(function(){var t,n,r,o;return x(this,function(i){switch(i.label){case 0:if(i.trys.push([0,5,,6]),!(b&&v))return[3,3];return[4,d.get(b,String(v))];case 1:if(!((t=i.sent())&&!e))return[3,3];return[4,t.text()];case 2:return a(i.sent()),c(!1),[2];case 3:return[4,fetchFileAsText(S,m)];case 4:if(n=i.sent(),e)return[2];return b&&v&&(r=new Blob([n],{type:"text/plain"}),d.put(b,String(v),r).catch(function(){})),a(n),c(!1),[3,6];case 5:if(o=i.sent(),e)return[2];return p(o.message||"Failed to load"),c(!1),[3,6];case 6:return[2]}})})(),function(){e=!0}},[m,S,b,v]),{text:i,loading:l,error:f}),j=k.text,_=k.loading,C=k.error;return _?n().createElement(W,{msg:E("Loading preview...")}):C||null===j?n().createElement(H,{msg:E("Failed to load file preview")}):n().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"}},j)}function V(r){var o=r.file,i=r.sessionId,a=(0,e.useAPIClient)(),u=h().t,l=(0,t.useRef)(null),c=w((0,t.useState)(!0),2),s=c[0],f=c[1],v=w((0,t.useState)(null),2),y=v[0],b=v[1],S=A(o),E=(null==o?void 0:o.id)||(null==o?void 0:o.uid)||"";return(0,t.useEffect)(function(){var e=!1;if(!S||!l.current){f(!1),b("No file URL");return}return f(!0),b(null),g(function(){var t,n,r,o;return x(this,function(u){switch(u.label){case 0:if(u.trys.push([0,10,,11]),!(i&&E))return[3,5];return[4,d.get(i,String(E))];case 1:if(!((n=u.sent())&&!e))return[3,2];return t=n,[3,4];case 2:return[4,M(a,S)];case 3:if(t=u.sent(),e)return[2];d.put(i,String(E),t).catch(function(){}),u.label=4;case 4:return[3,7];case 5:return[4,M(a,S)];case 6:t=u.sent(),u.label=7;case 7:if(e||!l.current)return[2];return[4,m("imported_-1dm6lbf_component",p.e("395").then(p.bind(p,835)))];case 8:if(r=u.sent(),e||!l.current)return[2];return l.current.innerHTML="",[4,r.renderAsync(t,l.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 9:return u.sent(),f(!1),[3,11];case 10:if(o=u.sent(),e)return[2];return b(o.message||"Failed to render DOCX"),f(!1),[3,11];case 11:return[2]}})})(),function(){e=!0}},[S,a,i,E]),n().createElement("div",{style:{width:"100%",height:"100%",position:"relative"}},s&&n().createElement(W,{msg:u("Loading preview...")}),y&&n().createElement(H,{msg:u("Failed to load file preview")}),n().createElement("div",{ref:l,style:{width:"100%",height:"100%",overflow:"auto",display:s||y?"none":"block"}}))}function Y(r){var o=r.file,i=r.sessionId,a=(0,e.useAPIClient)(),u=h().t,l=w((0,t.useState)(!0),2),c=l[0],s=l[1],f=w((0,t.useState)(null),2),v=f[0],y=f[1],b=w((0,t.useState)([]),2),S=b[0],E=b[1],k=w((0,t.useState)(""),2),j=k[0],_=k[1],C=w((0,t.useState)({}),2),O=C[0],P=C[1],L=A(o),I=(null==o?void 0:o.id)||(null==o?void 0:o.uid)||"";return(0,t.useEffect)(function(){var e=!1;if(!L){s(!1),y("No file URL");return}return s(!0),y(null),g(function(){var t,n,r,o,u,l,c,f,v,h,b,g,w,S;return x(this,function(x){switch(x.label){case 0:if(x.trys.push([0,10,,11]),!(i&&I))return[3,5];return[4,d.get(i,String(I))];case 1:if(!((n=x.sent())&&!e))return[3,2];return t=n,[3,4];case 2:return[4,M(a,L)];case 3:if(t=x.sent(),e)return[2];d.put(i,String(I),t).catch(function(){}),x.label=4;case 4:return[3,7];case 5:return[4,M(a,L)];case 6:t=x.sent(),x.label=7;case 7:if(e)return[2];return[4,m("imported_-1lj2ifg_component",p.e("463").then(p.bind(p,312)))];case 8:if(r=x.sent(),e)return[2];return[4,t.arrayBuffer()];case 9:if(o=x.sent(),e)return[2];l=(u=r.read(o,{type:"array"})).SheetNames,c={},f=!0,v=!1,h=void 0;try{for(b=l[Symbol.iterator]();!(f=(g=b.next()).done);f=!0)c[w=g.value]=r.utils.sheet_to_html(u.Sheets[w],{id:"xlsx-preview-table"})}catch(e){v=!0,h=e}finally{try{f||null==b.return||b.return()}finally{if(v)throw h}}if(e)return[2];return E(l),_(l[0]||""),P(c),s(!1),[3,11];case 10:if(S=x.sent(),e)return[2];return y(S.message||"Failed to render XLSX"),s(!1),[3,11];case 11:return[2]}})})(),function(){e=!0}},[L,a,i,I]),n().createElement("div",{style:{width:"100%",height:"100%",display:"flex",flexDirection:"column"}},c&&n().createElement(W,{msg:u("Loading preview...")}),v&&n().createElement(H,{msg:u("Failed to load file preview")}),!c&&!v&&n().createElement(n().Fragment,null,S.length>1&&n().createElement("div",{style:{display:"flex",gap:0,borderBottom:"1px solid #e8e8e8",background:"#fafafa",padding:"0 8px",flexShrink:0,overflowX:"auto"}},S.map(function(e){return n().createElement("button",{key:e,onClick:function(){return _(e)},style:{padding:"8px 16px",border:"none",borderBottom:j===e?"2px solid #1890ff":"2px solid transparent",background:j===e?"#fff":"transparent",color:j===e?"#1890ff":"#666",fontWeight:j===e?600:400,cursor:"pointer",fontSize:13,whiteSpace:"nowrap",transition:"all 0.2s"}},e)})),n().createElement("div",{style:{flex:1,overflow:"auto",padding:0},dangerouslySetInnerHTML:{__html:O[j]||""}}),n().createElement("style",null,"\n #xlsx-preview-table { border-collapse: collapse; width: 100%; font-size: 13px; }\n #xlsx-preview-table td, #xlsx-preview-table th {\n border: 1px solid #e8e8e8; padding: 6px 10px; text-align: left;\n max-width: 33vw; white-space: normal; word-break: break-word;\n }\n #xlsx-preview-table tr:first-child td, #xlsx-preview-table tr:first-child th {\n background: #fafafa; font-weight: 600; position: sticky; top: 0; z-index: 1;\n }\n #xlsx-preview-table tr:nth-child(even) { background: #fafafa; }\n #xlsx-preview-table tr:hover { background: #f0f7ff; }\n ")))}var K=function(r){var a=r.open,u=r.file,l=r.sessionId,c=r.onClose,s=(0,e.useAPIClient)(),f=h().t,p=w((0,t.useState)(!1),2),v=p[0],m=p[1],y=(null==u?void 0:u.id)||(null==u?void 0:u.uid)||"",b=(0,t.useCallback)(g(function(){return x(this,function(e){switch(e.label){case 0:if(!u)return[2];m(!0),e.label=1;case 1:return e.trys.push([1,3,4,5]),[4,function(e,t){return z.apply(this,arguments)}(u,s)];case 2:return e.sent(),[3,5];case 3:return e.sent(),o.message.error(f("Failed to download file")),[3,5];case 4:return m(!1),[7];case 5:return[2]}})}),[u,s,f]),S=(0,t.useCallback)(g(function(){return x(this,function(e){switch(e.label){case 0:if(!l||!y)return[2];return[4,d.delete(l,String(y))];case 1:return e.sent(),o.message.success(f("Cache cleared")),[2]}})}),[l,y,f]),E=(0,t.useMemo)(function(){return u?T(u)?G:F(u)?$:U(u)?J:B(u)?V:q(u)?Y:null:null},[u]),k=null!=E,j=(null==u?void 0:u.title)&&(null==u?void 0:u.extname)?"".concat(u.title).concat(u.extname):(null==u?void 0:u.filename)||(null==u?void 0:u.name)||"File";return n().createElement(o.Modal,{open:a,title:j,onCancel:c,destroyOnClose:!0,footer:[l&&y?n().createElement(o.Button,{key:"clear-cache",icon:n().createElement(i.DeleteOutlined,null),onClick:S},f("Clear cache")):null,n().createElement(o.Button,{key:"download",icon:n().createElement(i.DownloadOutlined,null),onClick:b,loading:v},f("Download")),n().createElement(o.Button,{key:"close",onClick:c},f("Close"))].filter(Boolean),width:k?"60vw":520,centered:!0},n().createElement("div",{style:{maxWidth:"100%",maxHeight:k?"calc(100vh - 256px)":"auto",height:k?"70vh":"auto",width:"100%",background:"white",display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"center",overflowY:"auto"}},k&&u?n().createElement(E,{file:u,sessionId:l}):n().createElement(o.Alert,{type:"info",style:{width:"100%"},description:f("This file type cannot be previewed. Click Download to save the file."),showIcon:!0})))};function Q(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 Z(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 ee(e){return(ee=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function et(e,t){return null!=t&&"undefined"!=typeof Symbol&&t[Symbol.hasInstance]?!!t[Symbol.hasInstance](e):e instanceof t}function en(e,t){return(en=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function er(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,o=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=o){var i=[],a=!0,u=!1;try{for(o=o.call(e);!(a=(n=o.next()).done)&&(i.push(n.value),!t||i.length!==t);a=!0);}catch(e){u=!0,r=e}finally{try{a||null==o.return||o.return()}finally{if(u)throw r}}return i}}(e,t)||function(e,t){if(e){if("string"==typeof e)return Q(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 Q(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 eo(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(eo=function(){return!!e})()}function ei(e){return{id:e.id,uid:e.uid,url:e.url,filename:e.filename||e.name,name:e.name||e.filename,title:e.title,extname:e.extname,mimetype:e.mimetype,size:e.size}}var ea=function(o){var i=o.children,a=er((0,t.useState)(!1),2),u=a[0],l=a[1],c=er((0,t.useState)(null),2),s=c[0],f=c[1],p=er((0,t.useState)(""),2),v=p[0],h=p[1],m=(0,e.useAPIClient)(),y=r.useChatMessagesStore.use.messages(),b=r.useChatMessagesStore.use.attachments(),g=(0,t.useRef)(y),w=(0,t.useRef)(b);g.current=y,w.current=b;var x=(0,t.useRef)("");(0,t.useEffect)(function(){var e=m.axios.interceptors.request.use(function(e){var t=e.url||"";if(t.includes("aiConversations:getMessages")){var n=t.match(/sessionId=([^&]+)/);n&&(x.current=decodeURIComponent(n[1]))}if(t.includes("aiConversations:sendMessages")&&e.data)try{var r="string"==typeof e.data?JSON.parse(e.data):e.data;(null==r?void 0:r.sessionId)&&(x.current=r.sessionId)}catch(e){}return e});return function(){m.axios.interceptors.request.eject(e)}},[m]),(0,t.useEffect)(function(){var e=function(e){var t;(null==(t=e.dataTransfer)?void 0:t.files)&&Array.from(e.dataTransfer.files).forEach(function(e){e.name&&d.put("local_uploads",e.name,e).catch(function(){})})},t=function(e){var t=e.target;(null==t?void 0:t.type)==="file"&&t.files&&Array.from(t.files).forEach(function(e){e.name&&d.put("local_uploads",e.name,e).catch(function(){})})};return window.addEventListener("drop",e,!0),document.addEventListener("change",t,!0),function(){window.removeEventListener("drop",e,!0),document.removeEventListener("change",t,!0)}},[]),(0,t.useEffect)(function(){(null==b?void 0:b.length)&&b.forEach(function(e){var t=e.originFileObj||e;if(et(t,Blob)||et(t,File)){var n=e.name||e.filename||t.name;n&&d.put("local_uploads",n,t).catch(function(){})}})},[b]),(0,t.useEffect)(function(){var e=document.createElement("style");return e.innerHTML='\n div[class*="attachment-list-card"] {\n position: relative !important;\n cursor: pointer !important;\n }\n /* Prevent pointer events on inner text and icons so the outer div receives the absolute click */\n div[class*="attachment-list-card"] a,\n div[class*="attachment-list-card"] [class*="-icon"],\n div[class*="attachment-list-card"] span {\n pointer-events: none !important;\n }\n /* Re-enable pointer events for the delete button specifically */\n div[class*="attachment-list-card"] [class*="-remove"],\n div[class*="attachment-list-card"] button,\n div[class*="attachment-list-card"] .ant-btn {\n pointer-events: auto !important;\n }\n /* Visual "Preview" badge at the top-left corner */\n div[class*="attachment-list-card"]::after {\n content: \'\uD83D\uDC41️\';\n position: absolute;\n top: 2px;\n left: 2px;\n background: transparent !important;\n color: inherit;\n font-size: 14px;\n line-height: 1;\n padding: 0;\n z-index: 10;\n pointer-events: none;\n box-shadow: none !important;\n opacity: 0.8;\n }\n /* Hide native antd thumbnail icon if we placed an eye so it doesnt look messy */\n div[class*="attachment-list-card"] .ant-upload-list-item-thumbnail {\n opacity: 0.2;\n }\n ',document.head.appendChild(e),function(){e.remove()}},[]),(0,t.useEffect)(function(){var e=function(e){var t,n,r,o=e.target;if(!o||"function"!=typeof o.closest)return;var i=o.closest('[class*="attachment-list-card"]');if(!(!i||o.closest('[class*="-remove"]')||o.closest(".ant-btn"))){var a=(n=i.querySelector('[class*="ellipsis-prefix"]'),r=i.querySelector('[class*="ellipsis-suffix"]'),n&&r?(n.textContent||"")+(r.textContent||""):(null==(t=i.textContent)?void 0:t.trim())||""),u=i.querySelectorAll("a"),c="";u.forEach(function(e){e.href&&(c=e.href)});var s=function(e,t,n){if(!e)return null;var r=!0,o=!1,i=void 0;try{for(var a,u=t[Symbol.iterator]();!(r=(a=u.next()).done);r=!0){var l=a.value,c=l.content||l,s=null==c?void 0:c.attachments;if(null==s?void 0:s.length){var f=!0,d=!1,p=void 0;try{for(var v,h=s[Symbol.iterator]();!(f=(v=h.next()).done);f=!0){var m=v.value;if((m.filename||m.name||"")===e||"".concat(m.title||"").concat(m.extname||"")===e)return ei(m)}}catch(e){d=!0,p=e}finally{try{f||null==h.return||h.return()}finally{if(d)throw p}}}}}catch(e){o=!0,i=e}finally{try{r||null==u.return||u.return()}finally{if(o)throw i}}var y=!0,b=!1,g=void 0;try{for(var w,x=(n||[])[Symbol.iterator]();!(y=(w=x.next()).done);y=!0){var S=w.value;if((S.filename||S.name||"")===e||"".concat(S.title||"").concat(S.extname||"")===e)return ei(S)}}catch(e){b=!0,g=e}finally{try{y||null==x.return||x.return()}finally{if(b)throw g}}return null}(a,g.current,w.current)||function(e,t,n){if(!e)return null;var r=function(e,t){return!!e&&!!t&&e.split("?")[0].replace(location.origin,"").replace(/^\//,"")===t.split("?")[0].replace(location.origin,"").replace(/^\//,"")},o=!0,i=!1,a=void 0;try{for(var u,l=t[Symbol.iterator]();!(o=(u=l.next()).done);o=!0){var c=u.value,s=c.content||c,f=null==s?void 0:s.attachments;if(null==f?void 0:f.length){var d=!0,p=!1,v=void 0;try{for(var h,m=f[Symbol.iterator]();!(d=(h=m.next()).done);d=!0){var y=h.value;if(r(y.url,e)||r(y.preview,e))return ei(y)}}catch(e){p=!0,v=e}finally{try{d||null==m.return||m.return()}finally{if(p)throw v}}}}}catch(e){i=!0,a=e}finally{try{o||null==l.return||l.return()}finally{if(i)throw a}}var b=!0,g=!1,w=void 0;try{for(var x,S=(n||[])[Symbol.iterator]();!(b=(x=S.next()).done);b=!0){var E=x.value;if(r(E.url,e)||r(E.preview,e))return ei(E)}}catch(e){g=!0,w=e}finally{try{b||null==S.return||S.return()}finally{if(g)throw w}}return null}(c,g.current,w.current);s&&(T(s)||F(s)||U(s)||B(s)||q(s))&&(e.preventDefault(),e.stopPropagation(),h(x.current||""),f(s),l(!0))}};return document.addEventListener("click",e,{capture:!0}),function(){return document.removeEventListener("click",e,{capture:!0})}},[]),(0,t.useEffect)(function(){var e=m.axios.interceptors.response.use(function(e){try{var t,n=(null==(t=e.config)?void 0:t.url)||"";if(n.includes("aiConversations:destroy")){var r=n.match(/filterByTk=([^&]+)/);r&&d.clearSession(decodeURIComponent(r[1])).catch(function(){})}}catch(e){}return e});return function(){m.axios.interceptors.response.eject(e)}},[m]);var S=(0,t.useCallback)(function(){l(!1),f(null)},[]);return n().createElement(n().Fragment,null,i,n().createElement(K,{open:u,file:s,sessionId:v,onClose:S}))},eu=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,o;if(!(this instanceof r))throw TypeError("Cannot call a class as a function");return n=r,o=[e],n=ee(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,eo()?Reflect.construct(n,o||[],ee(this).constructor):n.apply(this,o))).state={hasError:!1},t}return r.prototype=Object.create(e&&e.prototype,{constructor:{value:r,writable:!0,configurable:!0}}),e&&en(r,e),n=[{key:"getDerivedStateFromError",value:function(){return{hasError:!0}}}],t=[{key:"render",value:function(){return this.state.hasError,this.props.children}}],Z(r.prototype,t),n&&Z(r,n),r}(n().Component),el=function(e){var t=e.children;return n().createElement(eu,null,n().createElement(ea,null,t))};function ec(e,t,n,r,o,i,a){try{var u=e[i](a),l=u.value}catch(e){n(e);return}u.done?t(l):Promise.resolve(l).then(r,o)}function es(e,t,n){return(es=ev()?Reflect.construct:function(e,t,n){var r=[null];r.push.apply(r,t);var o=new(Function.bind.apply(e,r));return n&&ed(o,n.prototype),o}).apply(null,arguments)}function ef(e){return(ef=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function ed(e,t){return(ed=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function ep(e){var t="function"==typeof Map?new Map:void 0;return(ep=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 es(e,arguments,ef(this).constructor)}return n.prototype=Object.create(e.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),ed(n,e)})(e)}function ev(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(ev=function(){return!!e})()}var eh=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=ef(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,ev()?Reflect.construct(e,t||[],ef(this).constructor):e.apply(this,t))}return n.prototype=Object.create(e&&e.prototype,{constructor:{value:n,writable:!0,configurable:!0}}),e&&ed(n,e),t=[{key:"load",value:function(){var e,t=this;return(e=function(){return function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function u(i){return function(u){var l=[i,u];if(n)throw TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&l[0]?r.return:l[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,l[1])).done)return o;switch(r=0,o&&(l=[2&l[0],o.value]),l[0]){case 0:case 1:o=l;break;case 4:return a.label++,{value:l[1],done:!1};case 5:a.label++,r=l[1],l=[0];continue;case 7:l=a.ops.pop(),a.trys.pop();continue;default:if(!(o=(o=a.trys).length>0&&o[o.length-1])&&(6===l[0]||2===l[0])){a=0;continue}if(3===l[0]&&(!o||l[1]>o[0]&&l[1]<o[3])){a.label=l[1];break}if(6===l[0]&&a.label<o[1]){a.label=o[1],o=l;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(l);break}o[2]&&a.ops.pop(),a.trys.pop();continue}l=t.call(e,a)}catch(e){l=[6,e],r=0}finally{n=o=0}if(5&l[0])throw l[1];return{value:l[0]?l[1]:void 0,done:!0}}}}(this,function(e){return t.app.use(el),[2]})},function(){var t=this,n=arguments;return new Promise(function(r,o){var i=e.apply(t,n);function a(e){ec(i,r,o,a,u,"next",e)}function u(e){ec(i,r,o,a,u,"throw",e)}a(void 0)})})()}}],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}(ep(e.Plugin)),em=eh}(),v}()});
|
|
10
|
+
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("@nocobase/plugin-ai/client"),require("@nocobase/client"),require("react"),require("@ant-design/icons"),require("antd")):"function"==typeof define&&define.amd?define("plugin-ai-chat-file-preview",["@nocobase/plugin-ai/client","@nocobase/client","react","@ant-design/icons","antd"],t):"object"==typeof exports?exports["plugin-ai-chat-file-preview"]=t(require("@nocobase/plugin-ai/client"),require("@nocobase/client"),require("react"),require("@ant-design/icons"),require("antd")):e["plugin-ai-chat-file-preview"]=t(e["@nocobase/plugin-ai/client"],e["@nocobase/client"],e.react,e["@ant-design/icons"],e.antd)}(self,function(e,t,n,r,o){return function(){var i,a,u,l,c,s,f={581: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},645:function(t){"use strict";t.exports=e},721:function(e){"use strict";e.exports=o},156:function(e){"use strict";e.exports=n}},d={};function p(e){var t=d[e];if(void 0!==t)return t.exports;var n=d[e]={exports:{}};return f[e](n,n.exports,p),n.exports}p.m=f,p.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return p.d(t,{a:t}),t},p.d=function(e,t){for(var n in t)p.o(t,n)&&!p.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},p.f={},p.e=function(e){return Promise.all(Object.keys(p.f).reduce(function(t,n){return p.f[n](e,t),t},[]))},p.u=function(e){return""+({395:"0ef9cbd6bccd7aff",463:"7e04271656f34237"})[e]+".js"},p.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}}(),p.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i={},a="plugin-ai-chat-file-preview:",p.l=function(e,t,n,r){if(i[e])return void i[e].push(t);if(void 0!==n)for(var o,u,l=document.getElementsByTagName("script"),c=0;c<l.length;c++){var s=l[c];if(s.getAttribute("src")==e||s.getAttribute("data-webpack")==a+n){o=s;break}}o||(u=!0,(o=document.createElement("script")).charset="utf-8",o.timeout=120,p.nc&&o.setAttribute("nonce",p.nc),o.setAttribute("data-webpack",a+n),o.src=e),i[e]=[t];var f=function(t,n){o.onerror=o.onload=null,clearTimeout(d);var r=i[e];if(delete i[e],o.parentNode&&o.parentNode.removeChild(o),r&&r.forEach(function(e){return e(n)}),t)return t(n)},d=setTimeout(f.bind(null,void 0,{type:"timeout",target:o}),12e4);o.onerror=f.bind(null,o.onerror),o.onload=f.bind(null,o.onload),u&&document.head.appendChild(o)},p.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+="/"),p.p=u+"static/plugins/plugin-ai-chat-file-preview/dist/client/",l={909:0},p.f.j=function(e,t){var n=p.o(l,e)?l[e]:void 0;if(0!==n)if(n)t.push(n[2]);else{var r=new Promise(function(t,r){n=l[e]=[t,r]});t.push(n[2]=r);var o=p.p+p.u(e),i=Error();p.l(o,function(t){if(p.o(l,e)&&(0!==(n=l[e])&&(l[e]=void 0),n)){var r=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;i.message="Loading chunk "+e+" failed.\n("+r+": "+o+")",i.name="ChunkLoadError",i.type=r,i.request=o,n[1](i)}},"chunk-"+e,e)}},c=function(e,t){var n,r,o=t[0],i=t[1],a=t[2],u=0;if(o.some(function(e){return 0!==l[e]})){for(n in i)p.o(i,n)&&(p.m[n]=i[n]);a&&a(p)}for(e&&e(t);u<o.length;u++)r=o[u],p.o(l,r)&&l[r]&&l[r][0](),l[r]=0},(s=self.webpackChunkplugin_ai_chat_file_preview=self.webpackChunkplugin_ai_chat_file_preview||[]).forEach(c.bind(null,0)),s.push=c.bind(null,s.push.bind(s));var v={};return!function(){"use strict";p.r(v),p.d(v,{PluginAIChatFilePreviewClient:function(){return ey},default:function(){return eb}});var e=p(772),t=p(156),n=p.n(t),r=p(645),o=p(721),i=p(482);function a(e,t,n,r,o,i,a){try{var u=e[i](a),l=u.value}catch(e){n(e);return}u.done?t(l):Promise.resolve(l).then(r,o)}function u(e){return function(){var t=this,n=arguments;return new Promise(function(r,o){var i=e.apply(t,n);function u(e){a(i,r,o,u,l,"next",e)}function l(e){a(i,r,o,u,l,"throw",e)}u(void 0)})}}function l(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function u(i){return function(u){var l=[i,u];if(n)throw TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&l[0]?r.return:l[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,l[1])).done)return o;switch(r=0,o&&(l=[2&l[0],o.value]),l[0]){case 0:case 1:o=l;break;case 4:return a.label++,{value:l[1],done:!1};case 5:a.label++,r=l[1],l=[0];continue;case 7:l=a.ops.pop(),a.trys.pop();continue;default:if(!(o=(o=a.trys).length>0&&o[o.length-1])&&(6===l[0]||2===l[0])){a=0;continue}if(3===l[0]&&(!o||l[1]>o[0]&&l[1]<o[3])){a.label=l[1];break}if(6===l[0]&&a.label<o[1]){a.label=o[1],o=l;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(l);break}o[2]&&a.ops.pop(),a.trys.pop();continue}l=t.call(e,a)}catch(e){l=[6,e],r=0}finally{n=o=0}if(5&l[0])throw l[1];return{value:l[0]?l[1]:void 0,done:!0}}}}var c="blobs";function s(){return new Promise(function(e,t){var n=indexedDB.open("nb-ai-chat-file-preview",1);n.onupgradeneeded=function(){var e=n.result;e.objectStoreNames.contains(c)||e.createObjectStore(c)},n.onsuccess=function(){return e(n.result)},n.onerror=function(){return t(n.error)}})}function f(e,t){return"".concat(e,":").concat(t)}var d={get:function(e,t){return u(function(){var n;return l(this,function(r){switch(r.label){case 0:return[4,s()];case 1:return n=r.sent(),[2,new Promise(function(r,o){var i=n.transaction(c,"readonly").objectStore(c).get(f(e,t));i.onsuccess=function(){return r(i.result||null)},i.onerror=function(){return o(i.error)}})]}})})()},has:function(e,t){return u(function(){var n;return l(this,function(r){switch(r.label){case 0:return[4,s()];case 1:return n=r.sent(),[2,new Promise(function(r,o){var i=n.transaction(c,"readonly").objectStore(c).count(f(e,t));i.onsuccess=function(){return r(i.result>0)},i.onerror=function(){return o(i.error)}})]}})})()},listLocalUploads:function(){return u(function(){var e;return l(this,function(t){switch(t.label){case 0:return[4,s()];case 1:return e=t.sent(),[2,new Promise(function(t,n){var r=e.transaction(c,"readonly").objectStore(c).getAllKeys();r.onsuccess=function(){t(r.result.filter(function(e){return e.startsWith("local_uploads:")}).map(function(e){return e.replace("local_uploads:","")}))},r.onerror=function(){return n(r.error)}})]}})})()},put:function(e,t,n){return u(function(){var r;return l(this,function(o){switch(o.label){case 0:return[4,s()];case 1:return r=o.sent(),[2,new Promise(function(o,i){var a=r.transaction(c,"readwrite");a.objectStore(c).put(n,f(e,t)),a.oncomplete=function(){return o()},a.onerror=function(){return i(a.error)}})]}})})()},delete:function(e,t){return u(function(){var n;return l(this,function(r){switch(r.label){case 0:return[4,s()];case 1:return n=r.sent(),[2,new Promise(function(r,o){var i=n.transaction(c,"readwrite");i.objectStore(c).delete(f(e,t)),i.oncomplete=function(){return r()},i.onerror=function(){return o(i.error)}})]}})})()},clearSession:function(e){return u(function(){var t;return l(this,function(n){switch(n.label){case 0:return[4,s()];case 1:return t=n.sent(),[2,new Promise(function(n,r){var o=t.transaction(c,"readwrite"),i=o.objectStore(c).openCursor();i.onsuccess=function(){var t=i.result;t&&("string"==typeof t.key&&t.key.startsWith("".concat(e,":"))&&t.delete(),t.continue())},o.oncomplete=function(){return n()},o.onerror=function(){return r(o.error)}})]}})})()},clearAll:function(){return u(function(){var e;return l(this,function(t){switch(t.label){case 0:return[4,s()];case 1:return e=t.sent(),[2,new Promise(function(t,n){var r=e.transaction(c,"readwrite");r.objectStore(c).clear(),r.oncomplete=function(){return t()},r.onerror=function(){return n(r.error)}})]}})})()}};function h(){var t=(0,e.useApp)();return{t:function(e){return t.i18n.t(e,{ns:"@nocobase/plugin-ai-chat-file-preview"})}}}var m=p(581);function y(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 b(e,t,n,r,o,i,a){try{var u=e[i](a),l=u.value}catch(e){n(e);return}u.done?t(l):Promise.resolve(l).then(r,o)}function g(e){return function(){var t=this,n=arguments;return new Promise(function(r,o){var i=e.apply(t,n);function a(e){b(i,r,o,a,u,"next",e)}function u(e){b(i,r,o,a,u,"throw",e)}a(void 0)})}}function w(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,o=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=o){var i=[],a=!0,u=!1;try{for(o=o.call(e);!(a=(n=o.next()).done)&&(i.push(n.value),!t||i.length!==t);a=!0);}catch(e){u=!0,r=e}finally{try{a||null==o.return||o.return()}finally{if(u)throw r}}return i}}(e,t)||function(e,t){if(e){if("string"==typeof e)return y(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 y(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 x(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function u(i){return function(u){var l=[i,u];if(n)throw TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&l[0]?r.return:l[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,l[1])).done)return o;switch(r=0,o&&(l=[2&l[0],o.value]),l[0]){case 0:case 1:o=l;break;case 4:return a.label++,{value:l[1],done:!1};case 5:a.label++,r=l[1],l=[0];continue;case 7:l=a.ops.pop(),a.trys.pop();continue;default:if(!(o=(o=a.trys).length>0&&o[o.length-1])&&(6===l[0]||2===l[0])){a=0;continue}if(3===l[0]&&(!o||l[1]>o[0]&&l[1]<o[3])){a.label=l[1];break}if(6===l[0]&&a.label<o[1]){a.label=o[1],o=l;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(l);break}o[2]&&a.ops.pop(),a.trys.pop();continue}l=t.call(e,a)}catch(e){l=[6,e],r=0}finally{n=o=0}if(5&l[0])throw l[1];return{value:l[0]?l[1]:void 0,done:!0}}}}var S=["application/pdf"],E=["image/png","image/jpeg","image/gif","image/webp","image/svg+xml","image/bmp"],k=["text/plain","text/csv","text/html","text/css","text/javascript","application/json","application/xml","text/xml","text/yaml","application/x-yaml"],j=["application/vnd.openxmlformats-officedocument.wordprocessingml.document"],C=["application/vnd.openxmlformats-officedocument.spreadsheetml.sheet","application/vnd.ms-excel"],_=["pdf"],P=["png","jpg","jpeg","gif","webp","svg","bmp"],O=["txt","csv","html","css","js","json","xml","log","md","yaml","yml","xaml"],L=["docx"],I=["xlsx","xls"];function A(e){var t="string"==typeof e?e:null==e?void 0:e.url;return t?t.startsWith("http://")||t.startsWith("https://")?t:"".concat(location.origin,"/").concat(t.replace(/^\//,"")):""}function R(e,t,n){if((null==e?void 0:e.mimetype)&&t.includes(e.mimetype))return!0;var r,o,i=-1!==(o=(r=("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]).lastIndexOf("."))?r.slice(o+1).toLowerCase().replace(/^\./,""):"";return!!i&&n.includes(i)}var T=function(e){return R(e,S,_)},F=function(e){return R(e,E,P)},U=function(e){return R(e,k,O)},B=function(e){return R(e,j,L)},M=function(e){return R(e,C,I)};function q(e,t){return z.apply(this,arguments)}function z(){return(z=g(function(e,t){return x(this,function(n){switch(n.label){case 0:return[4,e.axios.get(t,{responseType:"blob"})];case 1:return[2,n.sent().data]}})})).apply(this,arguments)}function D(){return(D=g(function(e,t,n){var r,o,i,a,u,l;return x(this,function(c){switch(c.label){case 0:if(r=A(e),o=String((null==e?void 0:e.id)||(null==e?void 0:e.uid)||r),!(i=(null==e?void 0:e.filename)||(null==e?void 0:e.name)||(null==e?void 0:e.title)))return[3,2];return[4,d.get("local_uploads",i).catch(function(){return null})];case 1:if(a=c.sent())return[2,a];c.label=2;case 2:if(!(n&&o))return[3,4];return[4,d.get(n,o).catch(function(){return null})];case 3:if(u=c.sent())return[2,u];c.label=4;case 4:if(!r)throw Error("No valid URL");return[4,q(t,r)];case 5:return l=c.sent(),n&&o&&d.put(n,o,l).catch(function(){}),[2,l]}})})).apply(this,arguments)}function N(){return(N=g(function(e,t){var n,r,o,i;return x(this,function(a){switch(a.label){case 0:return[4,function(e,t,n){return D.apply(this,arguments)}(e,t,"")];case 1:return n=a.sent(),r=(null==e?void 0:e.title)&&(null==e?void 0:e.extname)?"".concat(e.title).concat(e.extname):(null==e?void 0:e.filename)||(null==e?void 0:e.name)||"download",(o=document.createElement("a")).href=i=URL.createObjectURL(n),o.download=r,document.body.appendChild(o),o.click(),document.body.removeChild(o),setTimeout(function(){return URL.revokeObjectURL(i)},1e3),[2]}})})).apply(this,arguments)}function W(e){var t=e.msg;return n().createElement("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100%",width:"100%"}},n().createElement(o.Spin,{tip:t}))}function H(e){var t=e.msg;return n().createElement("div",{style:{padding:20,textAlign:"center",color:"#ff4d4f"}},t)}function G(e,n,r){var o=w((0,t.useState)(null),2),i=o[0],a=o[1],u=w((0,t.useState)(!0),2),l=u[0],c=u[1],s=w((0,t.useState)(null),2),f=s[0],p=s[1],v=(0,t.useRef)(null),h=(null==e?void 0:e.id)||(null==e?void 0:e.uid)||"",m=A(e);return(0,t.useEffect)(function(){var e=!1;if(!m){c(!1),p("No file URL");return}return c(!0),p(null),g(function(){var t,o,i,u,l;return x(this,function(s){switch(s.label){case 0:if(s.trys.push([0,4,,5]),!(r&&h))return[3,2];return[4,d.get(r,String(h))];case 1:if((t=s.sent())&&!e)return v.current=o=URL.createObjectURL(t),a(o),c(!1),[2];s.label=2;case 2:return[4,q(n,m)];case 3:if(i=s.sent(),e)return[2];return r&&h&&d.put(r,String(h),i).catch(function(){}),v.current=u=URL.createObjectURL(i),a(u),c(!1),[3,5];case 4:if(l=s.sent(),e)return[2];return p(l.message||"Failed to load"),c(!1),[3,5];case 5:return[2]}})})(),function(){e=!0,v.current&&(URL.revokeObjectURL(v.current),v.current=null)}},[m,n,r,h]),{blobUrl:i,loading:l,error:f}}function X(t){var r=t.file,o=t.sessionId,i=(0,e.useAPIClient)(),a=h().t,u=G(r,i,o),l=u.blobUrl,c=u.loading,s=u.error;return c?n().createElement(W,{msg:a("Loading preview...")}):s||!l?n().createElement(H,{msg:a("Failed to load file preview")}):n().createElement("iframe",{src:l,width:"100%",height:"100%",style:{border:"none"}})}function V(t){var r=t.file,o=t.sessionId,i=(0,e.useAPIClient)(),a=h().t,u=G(r,i,o),l=u.blobUrl,c=u.loading,s=u.error;return c?n().createElement(W,{msg:a("Loading preview...")}):s||!l?n().createElement(H,{msg:a("Failed to load file preview")}):n().createElement("img",{src:l,style:{maxWidth:"100%",maxHeight:"100%",objectFit:"contain"},alt:(null==r?void 0:r.filename)||""})}function $(r){var o,i,a,u,l,c,s,f,p,v,m,y=r.file,b=r.sessionId,S=(0,e.useAPIClient)(),E=h().t,k=(i=(o=w((0,t.useState)(null),2))[0],a=o[1],l=(u=w((0,t.useState)(!0),2))[0],c=u[1],f=(s=w((0,t.useState)(null),2))[0],p=s[1],v=(null==y?void 0:y.id)||(null==y?void 0:y.uid)||"",m=A(y),(0,t.useEffect)(function(){var e=!1;if(!m){c(!1),p("No file URL");return}return c(!0),p(null),g(function(){var t,n,r,o;return x(this,function(i){switch(i.label){case 0:if(i.trys.push([0,5,,6]),!(b&&v))return[3,3];return[4,d.get(b,String(v))];case 1:if(!((t=i.sent())&&!e))return[3,3];return[4,t.text()];case 2:return a(i.sent()),c(!1),[2];case 3:return[4,fetchFileAsText(S,m)];case 4:if(n=i.sent(),e)return[2];return b&&v&&(r=new Blob([n],{type:"text/plain"}),d.put(b,String(v),r).catch(function(){})),a(n),c(!1),[3,6];case 5:if(o=i.sent(),e)return[2];return p(o.message||"Failed to load"),c(!1),[3,6];case 6:return[2]}})})(),function(){e=!0}},[m,S,b,v]),{text:i,loading:l,error:f}),j=k.text,C=k.loading,_=k.error;return C?n().createElement(W,{msg:E("Loading preview...")}):_||null===j?n().createElement(H,{msg:E("Failed to load file preview")}):n().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"}},j)}function J(r){var o=r.file,i=r.sessionId,a=(0,e.useAPIClient)(),u=h().t,l=(0,t.useRef)(null),c=w((0,t.useState)(!0),2),s=c[0],f=c[1],v=w((0,t.useState)(null),2),y=v[0],b=v[1],S=A(o),E=(null==o?void 0:o.id)||(null==o?void 0:o.uid)||"";return(0,t.useEffect)(function(){var e=!1;if(!S||!l.current){f(!1),b("No file URL");return}return f(!0),b(null),g(function(){var t,n,r,o;return x(this,function(u){switch(u.label){case 0:if(u.trys.push([0,10,,11]),!(i&&E))return[3,5];return[4,d.get(i,String(E))];case 1:if(!((n=u.sent())&&!e))return[3,2];return t=n,[3,4];case 2:return[4,q(a,S)];case 3:if(t=u.sent(),e)return[2];d.put(i,String(E),t).catch(function(){}),u.label=4;case 4:return[3,7];case 5:return[4,q(a,S)];case 6:t=u.sent(),u.label=7;case 7:if(e||!l.current)return[2];return[4,m("imported_-1dm6lbf_component",p.e("395").then(p.bind(p,835)))];case 8:if(r=u.sent(),e||!l.current)return[2];return l.current.innerHTML="",[4,r.renderAsync(t,l.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 9:return u.sent(),f(!1),[3,11];case 10:if(o=u.sent(),e)return[2];return b(o.message||"Failed to render DOCX"),f(!1),[3,11];case 11:return[2]}})})(),function(){e=!0}},[S,a,i,E]),n().createElement("div",{style:{width:"100%",height:"100%",position:"relative"}},s&&n().createElement(W,{msg:u("Loading preview...")}),y&&n().createElement(H,{msg:u("Failed to load file preview")}),n().createElement("div",{ref:l,style:{width:"100%",height:"100%",overflow:"auto",display:s||y?"none":"block"}}))}function K(r){var o=r.file,i=r.sessionId,a=(0,e.useAPIClient)(),u=h().t,l=w((0,t.useState)(!0),2),c=l[0],s=l[1],f=w((0,t.useState)(null),2),v=f[0],y=f[1],b=w((0,t.useState)([]),2),S=b[0],E=b[1],k=w((0,t.useState)(""),2),j=k[0],C=k[1],_=w((0,t.useState)({}),2),P=_[0],O=_[1],L=A(o),I=(null==o?void 0:o.id)||(null==o?void 0:o.uid)||"";return(0,t.useEffect)(function(){var e=!1;if(!L){s(!1),y("No file URL");return}return s(!0),y(null),g(function(){var t,n,r,o,u,l,c,f,v,h,b,g,w,S;return x(this,function(x){switch(x.label){case 0:if(x.trys.push([0,10,,11]),!(i&&I))return[3,5];return[4,d.get(i,String(I))];case 1:if(!((n=x.sent())&&!e))return[3,2];return t=n,[3,4];case 2:return[4,q(a,L)];case 3:if(t=x.sent(),e)return[2];d.put(i,String(I),t).catch(function(){}),x.label=4;case 4:return[3,7];case 5:return[4,q(a,L)];case 6:t=x.sent(),x.label=7;case 7:if(e)return[2];return[4,m("imported_-1lj2ifg_component",p.e("463").then(p.bind(p,312)))];case 8:if(r=x.sent(),e)return[2];return[4,t.arrayBuffer()];case 9:if(o=x.sent(),e)return[2];l=(u=r.read(o,{type:"array"})).SheetNames,c={},f=!0,v=!1,h=void 0;try{for(b=l[Symbol.iterator]();!(f=(g=b.next()).done);f=!0)c[w=g.value]=r.utils.sheet_to_html(u.Sheets[w],{id:"xlsx-preview-table"})}catch(e){v=!0,h=e}finally{try{f||null==b.return||b.return()}finally{if(v)throw h}}if(e)return[2];return E(l),C(l[0]||""),O(c),s(!1),[3,11];case 10:if(S=x.sent(),e)return[2];return y(S.message||"Failed to render XLSX"),s(!1),[3,11];case 11:return[2]}})})(),function(){e=!0}},[L,a,i,I]),n().createElement("div",{style:{width:"100%",height:"100%",display:"flex",flexDirection:"column"}},c&&n().createElement(W,{msg:u("Loading preview...")}),v&&n().createElement(H,{msg:u("Failed to load file preview")}),!c&&!v&&n().createElement(n().Fragment,null,S.length>1&&n().createElement("div",{style:{display:"flex",gap:0,borderBottom:"1px solid #e8e8e8",background:"#fafafa",padding:"0 8px",flexShrink:0,overflowX:"auto"}},S.map(function(e){return n().createElement("button",{key:e,onClick:function(){return C(e)},style:{padding:"8px 16px",border:"none",borderBottom:j===e?"2px solid #1890ff":"2px solid transparent",background:j===e?"#fff":"transparent",color:j===e?"#1890ff":"#666",fontWeight:j===e?600:400,cursor:"pointer",fontSize:13,whiteSpace:"nowrap",transition:"all 0.2s"}},e)})),n().createElement("div",{style:{flex:1,overflow:"auto",padding:0},dangerouslySetInnerHTML:{__html:P[j]||""}}),n().createElement("style",null,"\n #xlsx-preview-table { border-collapse: collapse; width: 100%; font-size: 13px; }\n #xlsx-preview-table td, #xlsx-preview-table th {\n border: 1px solid #e8e8e8; padding: 6px 10px; text-align: left;\n max-width: 33vw; white-space: normal; word-break: break-word;\n }\n #xlsx-preview-table tr:first-child td, #xlsx-preview-table tr:first-child th {\n background: #fafafa; font-weight: 600; position: sticky; top: 0; z-index: 1;\n }\n #xlsx-preview-table tr:nth-child(even) { background: #fafafa; }\n #xlsx-preview-table tr:hover { background: #f0f7ff; }\n ")))}var Y=function(r){var a=r.open,u=r.file,l=r.sessionId,c=r.onClose,s=(0,e.useAPIClient)(),f=h().t,p=w((0,t.useState)(!1),2),v=p[0],m=p[1],y=(null==u?void 0:u.id)||(null==u?void 0:u.uid)||"",b=(0,t.useCallback)(g(function(){return x(this,function(e){switch(e.label){case 0:if(!u)return[2];m(!0),e.label=1;case 1:return e.trys.push([1,3,4,5]),[4,function(e,t){return N.apply(this,arguments)}(u,s)];case 2:return e.sent(),[3,5];case 3:return e.sent(),o.message.error(f("Failed to download file")),[3,5];case 4:return m(!1),[7];case 5:return[2]}})}),[u,s,f]),S=(0,t.useCallback)(g(function(){return x(this,function(e){switch(e.label){case 0:if(!l||!y)return[2];return[4,d.delete(l,String(y))];case 1:return e.sent(),o.message.success(f("Cache cleared")),[2]}})}),[l,y,f]),E=(0,t.useMemo)(function(){return u?T(u)?X:F(u)?V:U(u)?$:B(u)?J:M(u)?K:null:null},[u]),k=null!=E,j=(null==u?void 0:u.title)&&(null==u?void 0:u.extname)?"".concat(u.title).concat(u.extname):(null==u?void 0:u.filename)||(null==u?void 0:u.name)||"File";return n().createElement(o.Modal,{open:a,title:j,onCancel:c,destroyOnClose:!0,footer:[l&&y?n().createElement(o.Button,{key:"clear-cache",icon:n().createElement(i.DeleteOutlined,null),onClick:S},f("Clear cache")):null,n().createElement(o.Button,{key:"download",icon:n().createElement(i.DownloadOutlined,null),onClick:b,loading:v},f("Download")),n().createElement(o.Button,{key:"close",onClick:c},f("Close"))].filter(Boolean),width:k?"60vw":520,centered:!0},n().createElement("div",{style:{maxWidth:"100%",maxHeight:k?"calc(100vh - 256px)":"auto",height:k?"70vh":"auto",width:"100%",background:"white",display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"center",overflowY:"auto"}},k&&u?n().createElement(E,{file:u,sessionId:l}):n().createElement(o.Alert,{type:"info",style:{width:"100%"},description:f("This file type cannot be previewed. Click Download to save the file."),showIcon:!0})))};function Q(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 Z(e,t,n,r,o,i,a){try{var u=e[i](a),l=u.value}catch(e){n(e);return}u.done?t(l):Promise.resolve(l).then(r,o)}function ee(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 et(e){return(et=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function en(e,t){return null!=t&&"undefined"!=typeof Symbol&&t[Symbol.hasInstance]?!!t[Symbol.hasInstance](e):e instanceof t}function er(e,t){return(er=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function eo(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,o=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=o){var i=[],a=!0,u=!1;try{for(o=o.call(e);!(a=(n=o.next()).done)&&(i.push(n.value),!t||i.length!==t);a=!0);}catch(e){u=!0,r=e}finally{try{a||null==o.return||o.return()}finally{if(u)throw r}}return i}}(e,t)||function(e,t){if(e){if("string"==typeof e)return Q(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 Q(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 ei(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(ei=function(){return!!e})()}function ea(e){var t,n=e.querySelector('[class*="ellipsis-prefix"]'),r=e.querySelector('[class*="ellipsis-suffix"]');return n&&r?(n.textContent||"")+(r.textContent||""):(null==(t=e.textContent)?void 0:t.trim())||""}function eu(e){return{id:e.id,uid:e.uid,url:e.url,filename:e.filename||e.name,name:e.name||e.filename,title:e.title,extname:e.extname,mimetype:e.mimetype,size:e.size}}var el=function(o){var i=o.children,a=eo((0,t.useState)(!1),2),u=a[0],l=a[1],c=eo((0,t.useState)(null),2),s=c[0],f=c[1],p=eo((0,t.useState)(""),2),v=p[0],h=p[1],m=(0,e.useAPIClient)(),y=r.useChatMessagesStore.use.messages(),b=r.useChatMessagesStore.use.attachments(),g=(0,t.useRef)(y),w=(0,t.useRef)(b);g.current=y,w.current=b;var x=(0,t.useRef)("");(0,t.useEffect)(function(){var e=m.axios.interceptors.request.use(function(e){var t=e.url||"";if(t.includes("aiConversations:getMessages")){var n=t.match(/sessionId=([^&]+)/);n&&(x.current=decodeURIComponent(n[1]))}if(t.includes("aiConversations:sendMessages")&&e.data)try{var r="string"==typeof e.data?JSON.parse(e.data):e.data;(null==r?void 0:r.sessionId)&&(x.current=r.sessionId)}catch(e){}return e});return function(){m.axios.interceptors.request.eject(e)}},[m]),(0,t.useEffect)(function(){var e=function(e){var t;(null==(t=e.dataTransfer)?void 0:t.files)&&Array.from(e.dataTransfer.files).forEach(function(e){e.name&&d.put("local_uploads",e.name,e).catch(function(){})})},t=function(e){var t=e.target;(null==t?void 0:t.type)==="file"&&t.files&&Array.from(t.files).forEach(function(e){e.name&&d.put("local_uploads",e.name,e).catch(function(){})})};return window.addEventListener("drop",e,!0),document.addEventListener("change",t,!0),function(){window.removeEventListener("drop",e,!0),document.removeEventListener("change",t,!0)}},[]),(0,t.useEffect)(function(){var e=FormData.prototype.append;return FormData.prototype.append=function(t,n,r){if(en(n,File)||en(n,Blob)){var o=r||n.name;o&&d.put("local_uploads",o,n).catch(function(){})}return e.call(this,t,n,r)},function(){FormData.prototype.append=e}},[]),(0,t.useEffect)(function(){var e,t=setInterval((e=function(){var e;return function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function u(i){return function(u){var l=[i,u];if(n)throw TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&l[0]?r.return:l[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,l[1])).done)return o;switch(r=0,o&&(l=[2&l[0],o.value]),l[0]){case 0:case 1:o=l;break;case 4:return a.label++,{value:l[1],done:!1};case 5:a.label++,r=l[1],l=[0];continue;case 7:l=a.ops.pop(),a.trys.pop();continue;default:if(!(o=(o=a.trys).length>0&&o[o.length-1])&&(6===l[0]||2===l[0])){a=0;continue}if(3===l[0]&&(!o||l[1]>o[0]&&l[1]<o[3])){a.label=l[1];break}if(6===l[0]&&a.label<o[1]){a.label=o[1],o=l;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(l);break}o[2]&&a.ops.pop(),a.trys.pop();continue}l=t.call(e,a)}catch(e){l=[6,e],r=0}finally{n=o=0}if(5&l[0])throw l[1];return{value:l[0]?l[1]:void 0,done:!0}}}}(this,function(t){switch(t.label){case 0:return[4,d.listLocalUploads().catch(function(){return[]})];case 1:return e=new Set(t.sent()),document.querySelectorAll('div[class*="attachment-list-card"]:not([class*="attachment-list-card-"])').forEach(function(t){var n=ea(t);n&&e.has(n)?t.classList.add("is-cached-previewable"):t.classList.remove("is-cached-previewable")}),[2]}})},function(){var t=this,n=arguments;return new Promise(function(r,o){var i=e.apply(t,n);function a(e){Z(i,r,o,a,u,"next",e)}function u(e){Z(i,r,o,a,u,"throw",e)}a(void 0)})}),1500);return function(){return clearInterval(t)}},[]),(0,t.useEffect)(function(){var e=document.createElement("style");return e.innerHTML='\n div[class*="attachment-list-card"]:not([class*="attachment-list-card-"]) {\n position: relative !important;\n cursor: pointer !important;\n }\n /* Prevent pointer events on inner text and icons so the outer div receives the absolute click */\n div[class*="attachment-list-card"]:not([class*="attachment-list-card-"]) a,\n div[class*="attachment-list-card"]:not([class*="attachment-list-card-"]) [class*="-icon"],\n div[class*="attachment-list-card"]:not([class*="attachment-list-card-"]) span {\n pointer-events: none !important;\n }\n /* Re-enable pointer events for the delete button specifically */\n div[class*="attachment-list-card"]:not([class*="attachment-list-card-"]) [class*="-remove"],\n div[class*="attachment-list-card"]:not([class*="attachment-list-card-"]) button,\n div[class*="attachment-list-card"]:not([class*="attachment-list-card-"]) .ant-btn {\n pointer-events: auto !important;\n }\n /* Visual "Preview" badge at the top-left corner using proper SVG */\n div[class*="attachment-list-card"]:not([class*="attachment-list-card-"]).is-cached-previewable::after {\n content: \'\';\n background-image: url("data:image/svg+xml,%3Csvg viewBox=\'64 64 896 896\' xmlns=\'http://www.w3.org/2000/svg\' fill=\'rgba(0,0,0,0.65)\'%3E%3Cpath d=\'M942.2 486.2C847.4 286.5 704.1 186 512 186c-192.2 0-335.4 100.5-430.2 300.3a60.3 60.3 0 000 51.5C176.6 737.5 319.9 838 512 838c192.2 0 335.4-100.5 430.2-300.3 7.7-16.2 7.7-35 0-51.5zM512 766c-161.3 0-279.4-81.8-362.7-254C232.6 339.8 350.7 258 512 258c161.3 0 279.4 81.8 362.7 254C791.5 684.2 673.4 766 512 766zm-4-430c-97.2 0-176 78.8-176 176s78.8 176 176 176 176-78.8 176-176-78.8-176-176-176zm0 288c-61.9 0-112-50.1-112-112s50.1-112 112-112 112 50.1 112 112-50.1 112-112 112z\'/%3E%3C/svg%3E");\n background-size: contain;\n background-repeat: no-repeat;\n position: absolute;\n top: 6px;\n left: 6px;\n width: 14px;\n height: 14px;\n z-index: 10;\n pointer-events: none;\n }\n /* Hide native antd thumbnail icon if we placed an eye so it doesnt look messy */\n div[class*="attachment-list-card"]:not([class*="attachment-list-card-"]).is-cached-previewable .ant-upload-list-item-thumbnail {\n opacity: 0.2;\n }\n ',document.head.appendChild(e),function(){e.remove()}},[]),(0,t.useEffect)(function(){var e=function(e){var t=e.target;if(!t||"function"!=typeof t.closest)return;var n=t.closest('[class*="attachment-list-card"]:not([class*="attachment-list-card-"])');if(!(!n||t.closest('[class*="-remove"]')||t.closest(".ant-btn"))&&n.classList.contains("is-cached-previewable")){var r=ea(n),o=n.querySelectorAll("a"),i="";o.forEach(function(e){e.href&&(i=e.href)});var a=function(e,t,n){if(!e)return null;var r=!0,o=!1,i=void 0;try{for(var a,u=t[Symbol.iterator]();!(r=(a=u.next()).done);r=!0){var l=a.value,c=l.content||l,s=null==c?void 0:c.attachments;if(null==s?void 0:s.length){var f=!0,d=!1,p=void 0;try{for(var v,h=s[Symbol.iterator]();!(f=(v=h.next()).done);f=!0){var m=v.value;if((m.filename||m.name||"")===e||"".concat(m.title||"").concat(m.extname||"")===e)return eu(m)}}catch(e){d=!0,p=e}finally{try{f||null==h.return||h.return()}finally{if(d)throw p}}}}}catch(e){o=!0,i=e}finally{try{r||null==u.return||u.return()}finally{if(o)throw i}}var y=!0,b=!1,g=void 0;try{for(var w,x=(n||[])[Symbol.iterator]();!(y=(w=x.next()).done);y=!0){var S=w.value;if((S.filename||S.name||"")===e||"".concat(S.title||"").concat(S.extname||"")===e)return eu(S)}}catch(e){b=!0,g=e}finally{try{y||null==x.return||x.return()}finally{if(b)throw g}}return null}(r,g.current,w.current)||function(e,t,n){if(!e)return null;var r=function(e,t){return!!e&&!!t&&e.split("?")[0].replace(location.origin,"").replace(/^\//,"")===t.split("?")[0].replace(location.origin,"").replace(/^\//,"")},o=!0,i=!1,a=void 0;try{for(var u,l=t[Symbol.iterator]();!(o=(u=l.next()).done);o=!0){var c=u.value,s=c.content||c,f=null==s?void 0:s.attachments;if(null==f?void 0:f.length){var d=!0,p=!1,v=void 0;try{for(var h,m=f[Symbol.iterator]();!(d=(h=m.next()).done);d=!0){var y=h.value;if(r(y.url,e)||r(y.preview,e))return eu(y)}}catch(e){p=!0,v=e}finally{try{d||null==m.return||m.return()}finally{if(p)throw v}}}}}catch(e){i=!0,a=e}finally{try{o||null==l.return||l.return()}finally{if(i)throw a}}var b=!0,g=!1,w=void 0;try{for(var x,S=(n||[])[Symbol.iterator]();!(b=(x=S.next()).done);b=!0){var E=x.value;if(r(E.url,e)||r(E.preview,e))return eu(E)}}catch(e){g=!0,w=e}finally{try{b||null==S.return||S.return()}finally{if(g)throw w}}return null}(i,g.current,w.current);a&&(T(a)||F(a)||U(a)||B(a)||M(a))&&(e.preventDefault(),e.stopPropagation(),h(x.current||""),f(a),l(!0))}};return document.addEventListener("click",e,{capture:!0}),function(){return document.removeEventListener("click",e,{capture:!0})}},[]),(0,t.useEffect)(function(){var e=m.axios.interceptors.response.use(function(e){try{var t,n=(null==(t=e.config)?void 0:t.url)||"";if(n.includes("aiConversations:destroy")){var r=n.match(/filterByTk=([^&]+)/);r&&d.clearSession(decodeURIComponent(r[1])).catch(function(){})}}catch(e){}return e});return function(){m.axios.interceptors.response.eject(e)}},[m]);var S=(0,t.useCallback)(function(){l(!1),f(null)},[]);return n().createElement(n().Fragment,null,i,n().createElement(Y,{open:u,file:s,sessionId:v,onClose:S}))},ec=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,o;if(!(this instanceof r))throw TypeError("Cannot call a class as a function");return n=r,o=[e],n=et(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,ei()?Reflect.construct(n,o||[],et(this).constructor):n.apply(this,o))).state={hasError:!1},t}return r.prototype=Object.create(e&&e.prototype,{constructor:{value:r,writable:!0,configurable:!0}}),e&&er(r,e),n=[{key:"getDerivedStateFromError",value:function(){return{hasError:!0}}}],t=[{key:"render",value:function(){return this.state.hasError,this.props.children}}],ee(r.prototype,t),n&&ee(r,n),r}(n().Component),es=function(e){var t=e.children;return n().createElement(ec,null,n().createElement(el,null,t))};function ef(e,t,n,r,o,i,a){try{var u=e[i](a),l=u.value}catch(e){n(e);return}u.done?t(l):Promise.resolve(l).then(r,o)}function ed(e,t,n){return(ed=em()?Reflect.construct:function(e,t,n){var r=[null];r.push.apply(r,t);var o=new(Function.bind.apply(e,r));return n&&ev(o,n.prototype),o}).apply(null,arguments)}function ep(e){return(ep=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function ev(e,t){return(ev=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function eh(e){var t="function"==typeof Map?new Map:void 0;return(eh=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 ed(e,arguments,ep(this).constructor)}return n.prototype=Object.create(e.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),ev(n,e)})(e)}function em(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(em=function(){return!!e})()}var ey=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=ep(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,em()?Reflect.construct(e,t||[],ep(this).constructor):e.apply(this,t))}return n.prototype=Object.create(e&&e.prototype,{constructor:{value:n,writable:!0,configurable:!0}}),e&&ev(n,e),t=[{key:"load",value:function(){var e,t=this;return(e=function(){return function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function u(i){return function(u){var l=[i,u];if(n)throw TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&l[0]?r.return:l[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,l[1])).done)return o;switch(r=0,o&&(l=[2&l[0],o.value]),l[0]){case 0:case 1:o=l;break;case 4:return a.label++,{value:l[1],done:!1};case 5:a.label++,r=l[1],l=[0];continue;case 7:l=a.ops.pop(),a.trys.pop();continue;default:if(!(o=(o=a.trys).length>0&&o[o.length-1])&&(6===l[0]||2===l[0])){a=0;continue}if(3===l[0]&&(!o||l[1]>o[0]&&l[1]<o[3])){a.label=l[1];break}if(6===l[0]&&a.label<o[1]){a.label=o[1],o=l;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(l);break}o[2]&&a.ops.pop(),a.trys.pop();continue}l=t.call(e,a)}catch(e){l=[6,e],r=0}finally{n=o=0}if(5&l[0])throw l[1];return{value:l[0]?l[1]:void 0,done:!0}}}}(this,function(e){return t.app.use(es),[2]})},function(){var t=this,n=arguments;return new Promise(function(r,o){var i=e.apply(t,n);function a(e){ef(i,r,o,a,u,"next",e)}function u(e){ef(i,r,o,a,u,"throw",e)}a(void 0)})})()}}],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}(eh(e.Plugin)),eb=ey}(),v}()});
|
package/package.json
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"description": "Preview uploaded file attachments directly in AI Employee chat with in-browser caching.",
|
|
7
7
|
"description.vi-VN": "Xem trước file đính kèm đã tải lên trực tiếp trong chat AI Employee với bộ nhớ đệm trình duyệt.",
|
|
8
8
|
"description.zh-CN": "在AI员工聊天中直接预览上传的文件附件,支持浏览器缓存。",
|
|
9
|
-
"version": "1.0.
|
|
9
|
+
"version": "1.0.7",
|
|
10
10
|
"main": "dist/server/index.js",
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"xlsx": "^0.18.5",
|
|
@@ -183,58 +183,81 @@ const ChatFilePreviewInner: React.FC<{ children: React.ReactNode }> = ({ childre
|
|
|
183
183
|
};
|
|
184
184
|
}, []);
|
|
185
185
|
|
|
186
|
-
// Intercept
|
|
186
|
+
// Intercept all file uploads globally as they are appended to FormData payloads.
|
|
187
|
+
// This is perfectly reliable because it catches the true File object the microsecond before hitting the API!
|
|
187
188
|
useEffect(() => {
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
SessionBlobCache.put('local_uploads', name, fileObj).catch(() => {});
|
|
189
|
+
const originalAppend = FormData.prototype.append;
|
|
190
|
+
FormData.prototype.append = function (name, value: any, filename?: string) {
|
|
191
|
+
if (value instanceof File || value instanceof Blob) {
|
|
192
|
+
const fName = filename || value.name;
|
|
193
|
+
if (fName) {
|
|
194
|
+
SessionBlobCache.put('local_uploads', fName, value).catch(() => {});
|
|
195
195
|
}
|
|
196
196
|
}
|
|
197
|
-
|
|
198
|
-
|
|
197
|
+
return originalAppend.call(this, name, value, filename);
|
|
198
|
+
};
|
|
199
|
+
return () => {
|
|
200
|
+
FormData.prototype.append = originalAppend;
|
|
201
|
+
};
|
|
202
|
+
}, []);
|
|
203
|
+
|
|
204
|
+
// Periodically check cache and ONLY mark DOM cards that physically exist in local IndexedDB.
|
|
205
|
+
// This ensures we never show false icons that lead to 403s on historical cards.
|
|
206
|
+
useEffect(() => {
|
|
207
|
+
const checkInterval = setInterval(async () => {
|
|
208
|
+
const keys = await SessionBlobCache.listLocalUploads().catch(() => []);
|
|
209
|
+
const cachedNamesSet = new Set(keys);
|
|
210
|
+
|
|
211
|
+
const cards = document.querySelectorAll('div[class*="attachment-list-card"]:not([class*="attachment-list-card-"])');
|
|
212
|
+
cards.forEach(card => {
|
|
213
|
+
const el = card as HTMLElement;
|
|
214
|
+
const displayName = getDisplayNameFromCard(el);
|
|
215
|
+
if (displayName && cachedNamesSet.has(displayName)) {
|
|
216
|
+
el.classList.add('is-cached-previewable');
|
|
217
|
+
} else {
|
|
218
|
+
el.classList.remove('is-cached-previewable');
|
|
219
|
+
}
|
|
220
|
+
});
|
|
221
|
+
}, 1500);
|
|
222
|
+
return () => clearInterval(checkInterval);
|
|
223
|
+
}, []);
|
|
199
224
|
|
|
200
225
|
// Inject global CSS for explicit UI and native z-index click interception for child texts/tags
|
|
201
226
|
useEffect(() => {
|
|
202
227
|
const style = document.createElement('style');
|
|
203
228
|
style.innerHTML = `
|
|
204
|
-
div[class*="attachment-list-card"] {
|
|
229
|
+
div[class*="attachment-list-card"]:not([class*="attachment-list-card-"]) {
|
|
205
230
|
position: relative !important;
|
|
206
231
|
cursor: pointer !important;
|
|
207
232
|
}
|
|
208
233
|
/* Prevent pointer events on inner text and icons so the outer div receives the absolute click */
|
|
209
|
-
div[class*="attachment-list-card"] a,
|
|
210
|
-
div[class*="attachment-list-card"] [class*="-icon"],
|
|
211
|
-
div[class*="attachment-list-card"] span {
|
|
234
|
+
div[class*="attachment-list-card"]:not([class*="attachment-list-card-"]) a,
|
|
235
|
+
div[class*="attachment-list-card"]:not([class*="attachment-list-card-"]) [class*="-icon"],
|
|
236
|
+
div[class*="attachment-list-card"]:not([class*="attachment-list-card-"]) span {
|
|
212
237
|
pointer-events: none !important;
|
|
213
238
|
}
|
|
214
239
|
/* Re-enable pointer events for the delete button specifically */
|
|
215
|
-
div[class*="attachment-list-card"] [class*="-remove"],
|
|
216
|
-
div[class*="attachment-list-card"] button,
|
|
217
|
-
div[class*="attachment-list-card"] .ant-btn {
|
|
240
|
+
div[class*="attachment-list-card"]:not([class*="attachment-list-card-"]) [class*="-remove"],
|
|
241
|
+
div[class*="attachment-list-card"]:not([class*="attachment-list-card-"]) button,
|
|
242
|
+
div[class*="attachment-list-card"]:not([class*="attachment-list-card-"]) .ant-btn {
|
|
218
243
|
pointer-events: auto !important;
|
|
219
244
|
}
|
|
220
|
-
/* Visual "Preview" badge at the top-left corner */
|
|
221
|
-
div[class*="attachment-list-card"]::after {
|
|
222
|
-
content: '
|
|
245
|
+
/* Visual "Preview" badge at the top-left corner using proper SVG */
|
|
246
|
+
div[class*="attachment-list-card"]:not([class*="attachment-list-card-"]).is-cached-previewable::after {
|
|
247
|
+
content: '';
|
|
248
|
+
background-image: url("data:image/svg+xml,%3Csvg viewBox='64 64 896 896' xmlns='http://www.w3.org/2000/svg' fill='rgba(0,0,0,0.65)'%3E%3Cpath d='M942.2 486.2C847.4 286.5 704.1 186 512 186c-192.2 0-335.4 100.5-430.2 300.3a60.3 60.3 0 000 51.5C176.6 737.5 319.9 838 512 838c192.2 0 335.4-100.5 430.2-300.3 7.7-16.2 7.7-35 0-51.5zM512 766c-161.3 0-279.4-81.8-362.7-254C232.6 339.8 350.7 258 512 258c161.3 0 279.4 81.8 362.7 254C791.5 684.2 673.4 766 512 766zm-4-430c-97.2 0-176 78.8-176 176s78.8 176 176 176 176-78.8 176-176-78.8-176-176-176zm0 288c-61.9 0-112-50.1-112-112s50.1-112 112-112 112 50.1 112 112-50.1 112-112 112z'/%3E%3C/svg%3E");
|
|
249
|
+
background-size: contain;
|
|
250
|
+
background-repeat: no-repeat;
|
|
223
251
|
position: absolute;
|
|
224
|
-
top:
|
|
225
|
-
left:
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
font-size: 14px;
|
|
229
|
-
line-height: 1;
|
|
230
|
-
padding: 0;
|
|
252
|
+
top: 6px;
|
|
253
|
+
left: 6px;
|
|
254
|
+
width: 14px;
|
|
255
|
+
height: 14px;
|
|
231
256
|
z-index: 10;
|
|
232
257
|
pointer-events: none;
|
|
233
|
-
box-shadow: none !important;
|
|
234
|
-
opacity: 0.8;
|
|
235
258
|
}
|
|
236
259
|
/* Hide native antd thumbnail icon if we placed an eye so it doesnt look messy */
|
|
237
|
-
div[class*="attachment-list-card"] .ant-upload-list-item-thumbnail {
|
|
260
|
+
div[class*="attachment-list-card"]:not([class*="attachment-list-card-"]).is-cached-previewable .ant-upload-list-item-thumbnail {
|
|
238
261
|
opacity: 0.2;
|
|
239
262
|
}
|
|
240
263
|
`;
|
|
@@ -251,12 +274,16 @@ const ChatFilePreviewInner: React.FC<{ children: React.ReactNode }> = ({ childre
|
|
|
251
274
|
if (!el || typeof el.closest !== 'function') return;
|
|
252
275
|
|
|
253
276
|
// Find closest FileCard element — uses ant-design/x class pattern
|
|
254
|
-
const cardEl = el.closest('[class*="attachment-list-card"]') as HTMLElement;
|
|
277
|
+
const cardEl = el.closest('[class*="attachment-list-card"]:not([class*="attachment-list-card-"])') as HTMLElement;
|
|
255
278
|
if (!cardEl) return;
|
|
256
279
|
|
|
257
280
|
// Skip remove button clicks
|
|
258
281
|
if (el.closest('[class*="-remove"]') || el.closest('.ant-btn')) return;
|
|
259
282
|
|
|
283
|
+
// Ensure we only hijack the click if we VERIFIED the file exists in our cache!
|
|
284
|
+
// This strictly prevents the 403 API fallback scenario.
|
|
285
|
+
if (!cardEl.classList.contains('is-cached-previewable')) return;
|
|
286
|
+
|
|
260
287
|
const displayName = getDisplayNameFromCard(cardEl);
|
|
261
288
|
const urlNodes = cardEl.querySelectorAll('a');
|
|
262
289
|
let fallbackUrl = '';
|
|
@@ -41,6 +41,33 @@ export const SessionBlobCache = {
|
|
|
41
41
|
});
|
|
42
42
|
},
|
|
43
43
|
|
|
44
|
+
async has(sessionId: string, fileId: string): Promise<boolean> {
|
|
45
|
+
const db = await openDB();
|
|
46
|
+
return new Promise((resolve, reject) => {
|
|
47
|
+
const tx = db.transaction(STORE_NAME, 'readonly');
|
|
48
|
+
const store = tx.objectStore(STORE_NAME);
|
|
49
|
+
const req = store.count(makeKey(sessionId, fileId));
|
|
50
|
+
req.onsuccess = () => resolve(req.result > 0);
|
|
51
|
+
req.onerror = () => reject(req.error);
|
|
52
|
+
});
|
|
53
|
+
},
|
|
54
|
+
|
|
55
|
+
async listLocalUploads(): Promise<string[]> {
|
|
56
|
+
const db = await openDB();
|
|
57
|
+
return new Promise((resolve, reject) => {
|
|
58
|
+
const tx = db.transaction(STORE_NAME, 'readonly');
|
|
59
|
+
const store = tx.objectStore(STORE_NAME);
|
|
60
|
+
const req = store.getAllKeys();
|
|
61
|
+
req.onsuccess = () => {
|
|
62
|
+
const keys = (req.result as string[])
|
|
63
|
+
.filter((k) => k.startsWith('local_uploads:'))
|
|
64
|
+
.map((k) => k.replace('local_uploads:', ''));
|
|
65
|
+
resolve(keys);
|
|
66
|
+
};
|
|
67
|
+
req.onerror = () => reject(req.error);
|
|
68
|
+
});
|
|
69
|
+
},
|
|
70
|
+
|
|
44
71
|
async put(sessionId: string, fileId: string, blob: Blob): Promise<void> {
|
|
45
72
|
const db = await openDB();
|
|
46
73
|
return new Promise((resolve, reject) => {
|