@molin.ai/shop-ai 0.9.36 → 0.9.37
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.
|
@@ -1281,7 +1281,7 @@ var $a=Object.create;var Pi=Object.defineProperty;var Sa=Object.getOwnPropertyDe
|
|
|
1281
1281
|
</div>
|
|
1282
1282
|
</div>
|
|
1283
1283
|
</div>
|
|
1284
|
-
`}#e(){this.dispatchEvent(new t.NewChatClickEvent)}#t(){this.dispatchEvent(new t.CloseClickEvent)}};Le.NewChatClickEvent=class extends CustomEvent{static type="mw:new-chat-click";constructor(e={}){super(Le.NewChatClickEvent.type,{...e})}};Le.CloseClickEvent=class extends CustomEvent{static type="mw:close-click";constructor(e={}){super(Le.CloseClickEvent.type,{...e})}};customElements.get("mw-chat-header")||customElements.define("mw-chat-header",Le);var xo=Aa(bo(),1);var se=Object.freeze({PENDING:"pending",READY:"ready",ERROR:"error"}),Cr=class{#e;#t;#r=null;#n=!1;#i=null;#s=[];constructor(e,r){this.#e=e,this.#t={acceptedTypes:["image/jpeg","image/png","image/gif","image/webp","image/svg+xml","image/heic"],maxFileSize:10*1024*1024,maxFiles:3,onError:()=>{},enabled:!0,isConnected:()=>!1,onConnect:()=>{},...r},e.addController(this),this.#l()}hostDisconnected(){this.#a(),this.#c(),this.#r&&this.#r.parentNode&&this.#r.parentNode.removeChild(this.#r)}#o(){this.#t.enabled&&(this.#e.addEventListener("dragover",this.#m),this.#e.addEventListener("dragenter",this.#y),this.#e.addEventListener("dragleave",this.#v),this.#e.addEventListener("drop",this.#b))}#a(){this.#e.removeEventListener("dragover",this.#m),this.#e.removeEventListener("dragenter",this.#y),this.#e.removeEventListener("dragleave",this.#v),this.#e.removeEventListener("drop",this.#b)}#h(){this.#t.enabled&&this.#e.addEventListener("paste",this.#g)}#c(){this.#e.removeEventListener("paste",this.#g)}#l(){this.#r=document.createElement("input"),this.#r.type="file",this.#r.accept=this.#t.acceptedTypes.join(","),this.#r.multiple=this.#t.maxFiles>1,this.#r.style.display="none",this.#r.addEventListener("change",this.#p),document.body.appendChild(this.#r)}#p=e=>{let r=e.target,n=Array.from(r.files||[]);this.#t.isConnected()||this.#t.onConnect?.(),this.#k(n),r.value=""};#m=e=>{e.preventDefault(),e.dataTransfer&&(e.dataTransfer.dropEffect="copy")};#y=e=>{e.preventDefault(),e.dataTransfer&&this.#x(e.dataTransfer)&&this.#w(!0)};#v=e=>{e.preventDefault();let r=e.relatedTarget;this.#e.contains(r)||this.#w(!1)};#b=e=>{if(e.preventDefault(),this.#w(!1),e.dataTransfer){let r=Array.from(e.dataTransfer.files||[]);this.#k(r)}};#g=e=>{if(!e.clipboardData)return;let n=Array.from(e.clipboardData.items||[]).filter(s=>s.type.startsWith("image/"));if(n.length===0)return;e.preventDefault();let i=n.map(s=>s.getAsFile()).
|
|
1284
|
+
`}#e(){this.dispatchEvent(new t.NewChatClickEvent)}#t(){this.dispatchEvent(new t.CloseClickEvent)}};Le.NewChatClickEvent=class extends CustomEvent{static type="mw:new-chat-click";constructor(e={}){super(Le.NewChatClickEvent.type,{...e})}};Le.CloseClickEvent=class extends CustomEvent{static type="mw:close-click";constructor(e={}){super(Le.CloseClickEvent.type,{...e})}};customElements.get("mw-chat-header")||customElements.define("mw-chat-header",Le);var xo=Aa(bo(),1);var se=Object.freeze({PENDING:"pending",READY:"ready",ERROR:"error"}),Cr=class{#e;#t;#r=null;#n=!1;#i=null;#s=[];constructor(e,r){this.#e=e,this.#t={acceptedTypes:["image/jpeg","image/png","image/gif","image/webp","image/svg+xml","image/heic"],maxFileSize:10*1024*1024,maxFiles:3,onError:()=>{},enabled:!0,isConnected:()=>!1,onConnect:()=>{},...r},e.addController(this),this.#l()}hostDisconnected(){this.#a(),this.#c(),this.#r&&this.#r.parentNode&&this.#r.parentNode.removeChild(this.#r)}#o(){this.#t.enabled&&(this.#e.addEventListener("dragover",this.#m),this.#e.addEventListener("dragenter",this.#y),this.#e.addEventListener("dragleave",this.#v),this.#e.addEventListener("drop",this.#b))}#a(){this.#e.removeEventListener("dragover",this.#m),this.#e.removeEventListener("dragenter",this.#y),this.#e.removeEventListener("dragleave",this.#v),this.#e.removeEventListener("drop",this.#b)}#h(){this.#t.enabled&&this.#e.addEventListener("paste",this.#g)}#c(){this.#e.removeEventListener("paste",this.#g)}#l(){this.#r=document.createElement("input"),this.#r.type="file",this.#r.accept=this.#t.acceptedTypes.join(","),this.#r.multiple=this.#t.maxFiles>1,this.#r.style.display="none",this.#r.addEventListener("change",this.#p),document.body.appendChild(this.#r)}#p=e=>{let r=e.target,n=Array.from(r.files||[]);this.#t.isConnected()||this.#t.onConnect?.(),this.#k(n),r.value=""};#m=e=>{e.preventDefault(),e.dataTransfer&&(e.dataTransfer.dropEffect="copy")};#y=e=>{e.preventDefault(),e.dataTransfer&&this.#x(e.dataTransfer)&&this.#w(!0)};#v=e=>{e.preventDefault();let r=e.relatedTarget;this.#e.contains(r)||this.#w(!1)};#b=e=>{if(e.preventDefault(),this.#w(!1),e.dataTransfer){let r=Array.from(e.dataTransfer.files||[]);this.#k(r)}};#g=e=>{if(!e.clipboardData)return;let n=Array.from(e.clipboardData.items||[]).filter(s=>s.type.startsWith("image/"));if(n.length===0)return;e.preventDefault();let i=n.map(s=>s.getAsFile()).flatMap(s=>s?[s]:[]);this.#k(i)};#x(e){return e.types&&e.types.includes("Files")}#w(e){this.#n!==e&&(this.#n=e,this.#e.requestUpdate())}#u(e){this.#i=e,this.#t.onError(e),this.#e.requestUpdate(),setTimeout(()=>{this.#d()},6e3)}#d(){this.#i=null,this.#e.requestUpdate()}async#k(e){if(e.length===0)return;this.#d();let r=e.filter(o=>this.#C(o));if(r.length===0)return;let n=this.#s.length,i=this.#t.maxFiles??1/0,s=r.length;if(n+s>i){this.#u(`You can upload a maximum of ${i} files`);return}try{let c=(await Promise.all(r.map(l=>this.#f(l)))).filter(l=>!this.#s.some(a=>a.dataUrl===l.dataUrl));this.#s=[...this.#s,...c],this.#e.requestUpdate(),await pn({times:5,delay:2e3},async()=>{if(this.#t.isConnected())await dn(3,c,async l=>{await this.#$(l)});else throw new Error("Not connected yet")}),this.#e.requestUpdate()}catch(o){console.error("Failed to process and upload images:",o),this.#u("Upload failed")}}#C(e){return this.#t.acceptedTypes.includes(e.type)?e.size>this.#t.maxFileSize?(this.#u(`Max file size: ${this.#t.maxFileSize/(1024*1024)}MB`),!1):!0:(this.#u("Invalid file type"),!1)}async#f(e){try{let r=await(0,xo.fileToBase64)(e);return{id:crypto.randomUUID(),name:e.name,type:e.type,size:e.size,dataUrl:r,file:e,processingState:se.PENDING}}catch(r){let n=r instanceof Error?r:new Error(String(r));throw new Error(`Failed to read file: ${e.name} - ${n.message}`)}}async#$(e){if(!e){console.error("No image provided to upload"),this.#u("No image provided");return}if(!this.#t?.uploadUrl){console.error("Missing uploadUrl in options"),this.#u("Upload URL not configured");return}e.processingState=se.PENDING,this.#e.requestUpdate();let r=new FormData;r.append("file",e.file),r.append("imageId",e.id),r.append("role",this.#t.role||"user"),this.#t.conversationId&&r.append("conversationId",this.#t.conversationId),this.#t.widgetId&&r.append("widgetId",this.#t.widgetId);try{let n=await fetch(this.#t.uploadUrl,{method:"POST",body:r});if(!n.ok)throw new Error(`Upload failed with status: ${n.status}`);let i=await n.json();if(!!!i?.success){let o=i?.error||"Upload failed";throw new Error(o)}i.imageUrl&&i.imageId?(e.imageUrl=i.imageUrl,e.id=i.imageId,e.processingState=se.READY):e.processingState=se.PENDING,this.#e.requestUpdate()}catch(n){let i=n instanceof Error?n:new Error(String(n));console.error("Upload error:",i.message),this.#u(i.message),e.processingState=se.ERROR,this.#e.requestUpdate()}}get isDragging(){return this.#n}get error(){return this.#i}get selectedImages(){return this.#s}get hasPendingImages(){return this.#s.some(e=>e.processingState===se.PENDING)}openImagePicker=()=>{if(!this.#t.enabled||!this.#t.widgetId){console.warn("Image uploads are disabled");return}this.#r&&this.#r.click()};clearError(){this.#d()}updateUploadOptions(e){e.conversationId!==void 0&&(this.#t.conversationId=e.conversationId),e.widgetId!==void 0&&(this.#t.widgetId=e.widgetId),e.enabled!==void 0&&(this.#t.enabled=!!e.enabled),e.isConnected!==void 0&&(this.#t.isConnected=e.isConnected),e.onConnect!==void 0&&(this.#t.onConnect=e.onConnect),this.#t.enabled?(this.#o(),this.#h()):(this.#a(),this.#c())}restoreImages(e){if(!Array.isArray(e)||e.length===0){this.#s=[],this.#e.requestUpdate();return}let r=e.map(n=>{let i=new File([],n.name,{type:n.type});return{id:n.id,name:n.name,type:n.type,size:n.size,dataUrl:n.url,file:i,processingState:se.READY,imageUrl:n.url}});this.#s=r,this.#e.requestUpdate()}clearImages(){this.#s=[],this.clearError(),this.#e.requestUpdate()}onImageDelete=e=>{this.#t.onImageDelete&&this.#t.onImageDelete(e),this.#s=this.#s.filter(r=>r.id!==e),this.#d(),this.#e.requestUpdate()}};var ei={maxHeight:120,initialHeight:32,paddingY:12},he=class t extends C(v){static properties={disabled:{type:Boolean},streaming:{type:Boolean},loading:{type:Boolean},placeholder:{type:String},color:{type:String},enableImageUpload:{type:Boolean},onImageUploadClick:{type:Function},images:{type:Array},onImageDelete:{type:Function}};#e=new Date;constructor(){super(),this.disabled=!1,this.streaming=!1,this.loading=!1,this.placeholder="Type a message...",this.enableImageUpload=!1,this.onImageUploadClick=void 0,this.images=[],this.onImageDelete=void 0,this.color="#8B5CF6"}get value(){return this.#t?.value?.trim()??""}render(){return u`
|
|
1285
1285
|
<div
|
|
1286
1286
|
class="focus-within:ring-opacity-50 ${this.enableImageUpload&&this.images.length>0?`ring-2 ring-[${this.color}] ring-opacity-50`:""} w-full overflow-hidden rounded-[18px] bg-white shadow-[0px_3px_20px_0px_rgba(0,0,0,0.2)] transition-all duration-200 focus-within:ring-2 focus-within:ring-[${this.color}]">
|
|
1287
1287
|
<!-- Image preview area -->
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@molin.ai/shop-ai",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.37",
|
|
4
4
|
"description": "Molin Shop AI",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"molin",
|
|
@@ -23,9 +23,8 @@
|
|
|
23
23
|
"scripts": {
|
|
24
24
|
"start": "esbuild molin-shop-ai=./src/molin-shop-ai.js --bundle --watch --target=es2022 --platform=neutral --sourcemap=inline --main-fields=es2015,browser,module,main --define:process.env.NODE_ENV=\\\"development\\\" --conditions=browser,module,import --outdir=demo/dist --servedir=demo",
|
|
25
25
|
"build": "esbuild molin-shop-ai.min=./src/molin-shop-ai.js --bundle --minify --analyze --target=es2022 --platform=neutral --main-fields=es2015,browser,module,main --define:process.env.NODE_ENV=\\\"production\\\" --conditions=browser,module,import --outdir=dist",
|
|
26
|
-
"
|
|
27
|
-
"publish:
|
|
28
|
-
"publish:beta": "npm publish --access public --tag beta"
|
|
26
|
+
"publish:latest": "npm run build && npm publish --access public --tag latest",
|
|
27
|
+
"publish:beta": "npm run build && npm publish --access public --tag beta"
|
|
29
28
|
},
|
|
30
29
|
"files": [
|
|
31
30
|
"/dist/molin-shop-ai.min.js"
|