lido-player 0.0.2-beta-19-dev → 0.0.2-beta-21-dev

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/dist/cjs/{decode-Bny56MQ9.js → decode-Buln7Iaf.js} +1 -1
  2. package/dist/cjs/{index-BY9fvbr8.js → index-Bb_TFgTA.js} +1 -1
  3. package/dist/cjs/{index-DjsCseV8.js → index-DBCFoh1I.js} +19 -66
  4. package/dist/cjs/index.cjs.js +2 -2
  5. package/dist/cjs/lido-avatar_22.cjs.entry.js +110 -21
  6. package/dist/cjs/lido-player.cjs.js +2 -2
  7. package/dist/cjs/loader.cjs.js +1 -1
  8. package/dist/collection/collection-manifest.json +1 -1
  9. package/dist/collection/components/trace/lido-trace.js +107 -18
  10. package/dist/components/index.js +1 -1
  11. package/dist/components/lido-home.js +1 -1
  12. package/dist/components/lido-root.js +1 -1
  13. package/dist/components/lido-trace.js +1 -1
  14. package/dist/components/p-BAfFgI9q.js +1 -0
  15. package/dist/components/{p-CWwymnbk.js → p-wF7SBGpr.js} +2 -2
  16. package/dist/esm/{decode-Buyq-Iy5.js → decode-B_VrYFdJ.js} +1 -1
  17. package/dist/esm/{index-CQXciux9.js → index-B-VyHxJa.js} +1 -1
  18. package/dist/esm/{index-DQZfuGjI.js → index-mMpK8062.js} +19 -66
  19. package/dist/esm/index.js +2 -2
  20. package/dist/esm/lido-avatar_22.entry.js +110 -21
  21. package/dist/esm/lido-player.js +3 -3
  22. package/dist/esm/loader.js +2 -2
  23. package/dist/lido-player/index.esm.js +1 -1
  24. package/dist/lido-player/lido-player.esm.js +1 -1
  25. package/dist/lido-player/{p-37736e11.entry.js → p-744dee1c.entry.js} +2 -2
  26. package/dist/lido-player/{p-3Ry570XH.js → p-BK926Rl3.js} +1 -1
  27. package/dist/lido-player/{p-CFtq4Thh.js → p-Cw84dpIR.js} +1 -1
  28. package/dist/lido-player/p-mMpK8062.js +2 -0
  29. package/dist/types/components/trace/lido-trace.d.ts +9 -1
  30. package/dist/types/stencil-public-runtime.d.ts +55 -73
  31. package/loader/index.d.ts +1 -1
  32. package/package.json +3 -3
  33. package/dist/components/p-DYFVwyRr.js +0 -1
  34. package/dist/lido-player/p-DQZfuGjI.js +0 -3
@@ -1 +1 @@
1
- import{L as o,d as s}from"./p-CWwymnbk.js";const m=o,p=s;export{m as LidoHome,p as defineCustomElement}
1
+ import{L as o,d as p}from"./p-wF7SBGpr.js";const r=o,s=p;export{r as LidoHome,s as defineCustomElement}
@@ -1 +1 @@
1
- import{t,p as s,H as o,getAssetPath as e,h as a}from"./index.js";import{d as i,i as l}from"./p-BOQDbCrm.js";import{d as r}from"./p-BeRr8u5m.js";import{d as m}from"./p-BfqihbR6.js";import{d as n}from"./p-B4YAipq-.js";import{d}from"./p-C5WmmkI6.js";import{d as c}from"./p-CgsPIpg0.js";import{d as p}from"./p-CTlcpv4a.js";import{d as u}from"./p-CljvnHkI.js";import{d as h}from"./p-DVTigdH_.js";import{d as b}from"./p-DLyacZap.js";import{d as f}from"./p-CWwymnbk.js";import{d as k}from"./p-C5jvgiPE.js";import{d as E}from"./p-BJMjg5wu.js";import{d as j}from"./p-B8nzzM8c.js";import{d as g}from"./p-CXHPZN3m.js";import{d as x}from"./p-DONbWJGn.js";import{d as v}from"./p-C70ykycD.js";import{d as C}from"./p-CwIlwnQk.js";import{d as B}from"./p-BBHM059l.js";import{d as w}from"./p-DYFVwyRr.js";import{d as L}from"./p-CCR42e0i.js";const U=s(class extends o{constructor(t){super(),!1!==t&&this.__registerHost(),this.Lang="",this.xmlPath="",this.initialIndex=0,this.margin="",this.canplay=!0,this.baseUrl="",this.zipUrl=""}connectedCallback(){this.setLanguage(this.Lang)}onLangChange(t){this.setLanguage(t)}setLanguage(t){l.changeLanguage(t||l.language)}async componentWillLoad(){var t,s;if(this.zipUrl)return void(this.xmlData="");const o=null!==(t=this.xmlPath)&&void 0!==t?t:this.baseUrl+((null===(s=this.baseUrl)||void 0===s?void 0:s.endsWith("/"))?"index.xml":"/index.xml");try{const t=o.startsWith("http")?o:e(o),s=await fetch(t);if(!s.ok)throw Error("Failed to fetch XML data: "+s.statusText);const a=await s.text();this.xmlData=a}catch(t){console.error("Error fetching XML data:",t),this.xmlData=null}}render(){return void 0===this.xmlData?a("div",null,"Loading..."):null===this.xmlData?a("div",null,"Error loading XML data. Please check the path or URL."):a("lido-home",Object.assign({showNav:!0,activeContainerIndexes:[],initialIndex:this.initialIndex,canplay:this.canplay,xmlData:this.xmlData,baseUrl:this.baseUrl},this.zipUrl?{zipUrl:this.zipUrl}:{},{exitButtonUrl:this.exitButtonUrl,prevButtonUrl:this.prevButtonUrl,nextButtonUrl:this.nextButtonUrl,speakerButtonUrl:this.speakerButtonUrl}))}static get assetsDirs(){return["assets"]}static get watchers(){return{Lang:[{onLangChange:0}]}}},[0,"lido-root",{Lang:[1,"lang"],xmlPath:[1,"xml-path"],initialIndex:[2,"initial-index"],margin:[1],canplay:[4],baseUrl:[1,"base-url"],zipUrl:[1,"zip-url"],exitButtonUrl:[1,"exit-button-url"],prevButtonUrl:[1,"prev-button-url"],nextButtonUrl:[1,"next-button-url"],speakerButtonUrl:[1,"speaker-button-url"],xmlData:[32]},void 0,{Lang:[{onLangChange:0}]}]);function y(){"undefined"!=typeof customElements&&["lido-root","lido-avatar","lido-balance","lido-calculator","lido-canvas","lido-cell","lido-col","lido-container","lido-flash-card","lido-float","lido-home","lido-image","lido-keyboard","lido-math-matrix","lido-pos","lido-random","lido-row","lido-shape","lido-slide-fill","lido-text","lido-trace","lido-wrap"].forEach((s=>{switch(s){case"lido-root":customElements.get(t(s))||customElements.define(t(s),U);break;case"lido-avatar":customElements.get(t(s))||r();break;case"lido-balance":customElements.get(t(s))||m();break;case"lido-calculator":customElements.get(t(s))||n();break;case"lido-canvas":customElements.get(t(s))||d();break;case"lido-cell":customElements.get(t(s))||c();break;case"lido-col":customElements.get(t(s))||p();break;case"lido-container":customElements.get(t(s))||u();break;case"lido-flash-card":customElements.get(t(s))||h();break;case"lido-float":customElements.get(t(s))||b();break;case"lido-home":customElements.get(t(s))||f();break;case"lido-image":customElements.get(t(s))||k();break;case"lido-keyboard":customElements.get(t(s))||E();break;case"lido-math-matrix":customElements.get(t(s))||j();break;case"lido-pos":customElements.get(t(s))||g();break;case"lido-random":customElements.get(t(s))||x();break;case"lido-row":customElements.get(t(s))||v();break;case"lido-shape":customElements.get(t(s))||C();break;case"lido-slide-fill":customElements.get(t(s))||B();break;case"lido-text":customElements.get(t(s))||i();break;case"lido-trace":customElements.get(t(s))||w();break;case"lido-wrap":customElements.get(t(s))||L()}}))}y();const D=U,I=y;export{D as LidoRoot,I as defineCustomElement}
1
+ import{t,p as s,H as o,getAssetPath as e,h as a}from"./index.js";import{d as i,i as l}from"./p-BOQDbCrm.js";import{d as r}from"./p-BeRr8u5m.js";import{d as m}from"./p-BfqihbR6.js";import{d as n}from"./p-B4YAipq-.js";import{d}from"./p-C5WmmkI6.js";import{d as c}from"./p-CgsPIpg0.js";import{d as p}from"./p-CTlcpv4a.js";import{d as u}from"./p-CljvnHkI.js";import{d as h}from"./p-DVTigdH_.js";import{d as f}from"./p-DLyacZap.js";import{d as b}from"./p-wF7SBGpr.js";import{d as k}from"./p-C5jvgiPE.js";import{d as E}from"./p-BJMjg5wu.js";import{d as g}from"./p-B8nzzM8c.js";import{d as j}from"./p-CXHPZN3m.js";import{d as x}from"./p-DONbWJGn.js";import{d as v}from"./p-C70ykycD.js";import{d as B}from"./p-CwIlwnQk.js";import{d as C}from"./p-BBHM059l.js";import{d as w}from"./p-BAfFgI9q.js";import{d as L}from"./p-CCR42e0i.js";const U=s(class extends o{constructor(t){super(),!1!==t&&this.__registerHost(),this.Lang="",this.xmlPath="",this.initialIndex=0,this.margin="",this.canplay=!0,this.baseUrl="",this.zipUrl=""}connectedCallback(){this.setLanguage(this.Lang)}onLangChange(t){this.setLanguage(t)}setLanguage(t){l.changeLanguage(t||l.language)}async componentWillLoad(){var t,s;if(this.zipUrl)return void(this.xmlData="");const o=null!==(t=this.xmlPath)&&void 0!==t?t:this.baseUrl+((null===(s=this.baseUrl)||void 0===s?void 0:s.endsWith("/"))?"index.xml":"/index.xml");try{const t=o.startsWith("http")?o:e(o),s=await fetch(t);if(!s.ok)throw Error("Failed to fetch XML data: "+s.statusText);const a=await s.text();this.xmlData=a}catch(t){console.error("Error fetching XML data:",t),this.xmlData=null}}render(){return void 0===this.xmlData?a("div",null,"Loading..."):null===this.xmlData?a("div",null,"Error loading XML data. Please check the path or URL."):a("lido-home",Object.assign({showNav:!0,activeContainerIndexes:[],initialIndex:this.initialIndex,canplay:this.canplay,xmlData:this.xmlData,baseUrl:this.baseUrl},this.zipUrl?{zipUrl:this.zipUrl}:{},{exitButtonUrl:this.exitButtonUrl,prevButtonUrl:this.prevButtonUrl,nextButtonUrl:this.nextButtonUrl,speakerButtonUrl:this.speakerButtonUrl}))}static get assetsDirs(){return["assets"]}static get watchers(){return{Lang:[{onLangChange:0}]}}},[0,"lido-root",{Lang:[1,"lang"],xmlPath:[1,"xml-path"],initialIndex:[2,"initial-index"],margin:[1],canplay:[4],baseUrl:[1,"base-url"],zipUrl:[1,"zip-url"],exitButtonUrl:[1,"exit-button-url"],prevButtonUrl:[1,"prev-button-url"],nextButtonUrl:[1,"next-button-url"],speakerButtonUrl:[1,"speaker-button-url"],xmlData:[32]},void 0,{Lang:[{onLangChange:0}]}]);function y(){"undefined"!=typeof customElements&&["lido-root","lido-avatar","lido-balance","lido-calculator","lido-canvas","lido-cell","lido-col","lido-container","lido-flash-card","lido-float","lido-home","lido-image","lido-keyboard","lido-math-matrix","lido-pos","lido-random","lido-row","lido-shape","lido-slide-fill","lido-text","lido-trace","lido-wrap"].forEach((s=>{switch(s){case"lido-root":customElements.get(t(s))||customElements.define(t(s),U);break;case"lido-avatar":customElements.get(t(s))||r();break;case"lido-balance":customElements.get(t(s))||m();break;case"lido-calculator":customElements.get(t(s))||n();break;case"lido-canvas":customElements.get(t(s))||d();break;case"lido-cell":customElements.get(t(s))||c();break;case"lido-col":customElements.get(t(s))||p();break;case"lido-container":customElements.get(t(s))||u();break;case"lido-flash-card":customElements.get(t(s))||h();break;case"lido-float":customElements.get(t(s))||f();break;case"lido-home":customElements.get(t(s))||b();break;case"lido-image":customElements.get(t(s))||k();break;case"lido-keyboard":customElements.get(t(s))||E();break;case"lido-math-matrix":customElements.get(t(s))||g();break;case"lido-pos":customElements.get(t(s))||j();break;case"lido-random":customElements.get(t(s))||x();break;case"lido-row":customElements.get(t(s))||v();break;case"lido-shape":customElements.get(t(s))||B();break;case"lido-slide-fill":customElements.get(t(s))||C();break;case"lido-text":customElements.get(t(s))||i();break;case"lido-trace":customElements.get(t(s))||w();break;case"lido-wrap":customElements.get(t(s))||L()}}))}y();const D=U,I=y;export{D as LidoRoot,I as defineCustomElement}
@@ -1 +1 @@
1
- import{L as o,d as r}from"./p-DYFVwyRr.js";const s=o,p=r;export{s as LidoTrace,p as defineCustomElement}
1
+ import{L as o,d as s}from"./p-BAfFgI9q.js";const p=o,r=s;export{p as LidoTrace,r as defineCustomElement}
@@ -0,0 +1 @@
1
+ import{t,p as i,H as e,B as s,getAssetPath as n,c as o,k as r,E as a,F as h,s as l,f as c,w as d,g as u,j as f,a as w,h as g,b as m}from"./index.js";const v=i(class extends e{constructor(t){super(),!1!==t&&this.__registerHost(),this.showSpeakIcon=!1,this.id="",this.svgSource="",this.svgUrls=[],this.audioUrls=[],this.currentSvgIndex=0,this.moving=!1,this.value="",this.height="auto",this.width="auto",this.audio="",this.x="0px",this.y="0px",this.z="0",this.ariaLabel="",this.ariaHidden="",this.tabIndex=0,this.mode=s.ShowFlow,this.fingerHintUrl=n("assets/Tracing-hand.svg"),this.highlightTextId="",this.animationTrace=!1,this.delayVisible="",this.disableSpeak=!1,this.style={},this.handleWindowResize=()=>this.updateStyles(),this.handleWindowLoad=()=>this.updateStyles(),this.fileIndex=-1,this.isDragging=!1,this.activePointerId=null,this.activeTraceState=null,this.freeTraceUpdateCounter=0,this.idleTimer=null,this.fingerImg=null}async initializeSVG(){this.cleanupTraceState(this.activeTraceState);let t={fileIndex:-1,currentPathIndex:0,lastLength:0,totalPathLength:0,isDragging:!1,circle:null,paths:[],svg:null,proximityThreshold:60,freeTraceProximityThreshold:350,rafId:null,pointerMoveEvent:null,activePointerId:null,mode:this.mode,flowMarkers:[],freeTraceLines:[],currentFreePath:[],lastPointerPos:null,dragOffset:null,isCompletingPath:!1,touchProximityThreshold:null,pointerTransform:null,pointerRect:null};this.activeTraceState=t;const i=this.svgUrls[this.currentSvgIndex];i&&""!==i.trim()?(await this.fetchSVG(o(i)),await this.loadAnotherSVG(t,!0)):console.error("No SVG URL provided or index out of bounds.")}componentDidLoad(){r(this.el,this.delayVisible)}componentWillLoad(){this.updateStyles(),window.addEventListener("resize",this.handleWindowResize),window.addEventListener("load",this.handleWindowLoad),this.svgUrls=this.svgSource.split(";").map((t=>t.trim())),this.currentSvgIndex=0,this.showSpeakIcon&&(a(this.el),this.el.append(a(this.el))),this.initializeSVG()}disconnectedCallback(){window.removeEventListener("resize",this.handleWindowResize),window.removeEventListener("load",this.handleWindowLoad),this.cleanupTraceState(this.activeTraceState),this.activeTraceState=null}cleanupTraceState(t){var i;t&&(null===(i=t.cleanup)||void 0===i||i.call(t),t.rafId&&cancelAnimationFrame(t.rafId),t.rafId=null,t.pointerMoveEvent=null,t.pathSamples=[],t.paths=[],t.svg=null,null!==this.idleTimer&&(clearTimeout(this.idleTimer),this.idleTimer=null),this.hideFingerHint())}resetIdleTimer(t){null!==this.idleTimer&&(clearTimeout(this.idleTimer),this.idleTimer=null),this.idleTimer=window.setTimeout((()=>{this.showFingerHint(t)}),3e3)}showFingerHint(t){var i;if(this.fingerImg)return;const e=t.paths[t.currentPathIndex];if(!e)return;const s=document.createElementNS("http://www.w3.org/2000/svg","image"),n=new Image;n.onload=()=>{s.setAttributeNS("http://www.w3.org/1999/xlink","href",o(this.fingerHintUrl))},n.onerror=()=>{s.setAttributeNS("http://www.w3.org/1999/xlink","href",o(h))},n.src=o(this.fingerHintUrl||h),s.setAttribute("width","40"),s.setAttribute("height","40"),s.setAttribute("id","lido-finger-hint"),s.style.pointerEvents="none",s.style.opacity="0.8",s.setAttribute("x","0"),s.setAttribute("y","0");const r=document.createElementNS("http://www.w3.org/2000/svg","animateMotion");r.setAttribute("dur","2s"),r.setAttribute("repeatCount","indefinite");const a=document.createElementNS("http://www.w3.org/2000/svg","mpath");a.setAttributeNS("http://www.w3.org/1999/xlink","href",`#${e.id}`),r.appendChild(a),s.appendChild(r),null===(i=t.svg)||void 0===i||i.appendChild(s),this.fingerImg=s}hideFingerHint(){this.fingerImg&&this.fingerImg.parentNode&&this.fingerImg.parentNode.removeChild(this.fingerImg),this.fingerImg=null}async fetchSVG(t){const i=await fetch(t);if(!i.ok)throw new Error(`Failed to fetch SVG (${t}): ${i.statusText}`);return await i.text()}calculateBoundingBox(t,i=22){let e=1/0,s=1/0,n=-1/0,o=-1/0;return t.forEach((t=>{const i=t.getTotalLength();for(let r=0;r<=100;r++){const a=t.getPointAtLength(r/100*i);a.x<e&&(e=a.x),a.y<s&&(s=a.y),a.x>n&&(n=a.x),a.y>o&&(o=a.y)}})),e-=i,s-=i,n+=i,o+=i,{minX:e,minY:s,maxX:n,maxY:o}}insertSVG(t){const i=document.getElementById("lido-svgContainer");if(!i)return;i.innerHTML=t;const e=i.querySelector("svg");e.classList.add("lido-trace-svg"),e.removeAttribute("width"),e.removeAttribute("height");const s=e.querySelectorAll("path, line"),n=this.calculateBoundingBox(Array.from(s));e.setAttribute("viewBox",`${n.minX} ${n.minY} ${n.maxX-n.minX} ${n.maxY-n.minY}`)}getSVGElement(){return document.getElementById("lido-svgContainer").querySelector("svg")}getPaths(t){return Array.from(t.querySelectorAll("path, line"))}createFlowMarkersForPath(t){var i;if(!t)return;const e=t.ownerSVGElement;if(!e)return;const s=document.createElementNS("http://www.w3.org/2000/svg","path");s.setAttribute("d",t.getAttribute("d")||""),s.setAttribute("stroke","blue"),s.setAttribute("stroke-width","2"),s.setAttribute("stroke-dasharray","6,6"),s.setAttribute("fill","none"),s.setAttribute("class","lido-flow-indicator"),null===(i=t.parentNode)||void 0===i||i.appendChild(s);let n=e.querySelector("defs#lido-flow-defs");n||(n=document.createElementNS("http://www.w3.org/2000/svg","defs"),n.setAttribute("id","lido-flow-defs"),e.insertBefore(n,e.firstChild));const o=`arrow-${Math.random().toString(36)}`,r=document.createElementNS("http://www.w3.org/2000/svg","marker");r.setAttribute("id",o),r.setAttribute("markerWidth","10"),r.setAttribute("markerHeight","10"),r.setAttribute("refX","5"),r.setAttribute("refY","5"),r.setAttribute("orient","auto"),r.setAttribute("markerUnits","strokeWidth");const a=document.createElementNS("http://www.w3.org/2000/svg","path");return a.setAttribute("d","M0,0 L10,5 L0,10 L2,5 Z"),a.setAttribute("fill","blue"),r.appendChild(a),n.appendChild(r),s.setAttribute("marker-end",`url(#${o})`),s}updateFlowIndicators(t){t.svg.querySelectorAll(".lido-flow-indicator").forEach((i=>{t.mode===s.NoFlow?i.style.display="none":t.mode===s.ShowFlow&&(i.style.display="block")}))}setupDrawingPath(t){t.paths.forEach(((i,e)=>{const n=i.getTotalLength();i._lidoTraceLength=n,i._lidoTraceStart=i.getPointAtLength(0),i._lidoTraceEnd=i.getPointAtLength(n),i._lidoTraceIsClosed=this.getDistanceSquared(i._lidoTraceStart,i._lidoTraceEnd)<200;const o=n/192||1,r=[];for(let t=0;t<=192;t++){const e=Math.min(n,t*o),s=i.getPointAtLength(e);r.push({x:s.x,y:s.y,length:e})}i._lidoTraceSamples=r,i._lidoTraceSampleStep=o,i.setAttribute("id","lido-path-"+e);const a=i.cloneNode();a.style.opacity="100",a.style["stroke-opacity"]="100";const h=i.style["stroke-width"]||i.getAttribute("stroke-width");a.setAttribute("stroke-width",h),a.setAttribute("stroke-dasharray",n.toString()),a.setAttribute("stroke-dashoffset",n.toString()),i.parentNode.appendChild(a,i),i.setAttribute("class","lido-trace-path"),a.setAttribute("class","lido-trace-path-green"),i.greenPath=a,i.classList.add(t.mode),t.mode===s.BlindTracing||t.mode===s.BlindFreeTrace?i.setAttribute("stroke","none"):(i.setAttribute("stroke","#000"),i.setAttribute("stroke-width",h),i.setAttribute("fill","none"),i.setAttribute("stroke-dasharray",n.toString()),i.setAttribute("stroke-dashoffset","0")),e===t.currentPathIndex&&t.mode===s.ShowFlow&&(t.flowMarkers=this.createFlowMarkersForPath(i))})),t.totalPathLength=t.paths[t.currentPathIndex]._lidoTraceLength}setupDraggableCircle(t){var i;const e=t.paths[0].getPointAtLength(0),s=document.createElementNS("http://www.w3.org/2000/svg","circle");t.paths[t.currentPathIndex].style["stroke-width"]||t.paths[t.currentPathIndex].getAttribute("stroke-width"),s.setAttribute("id","lido-draggableCircle"),s.setAttribute("cx",e.x.toString()),s.setAttribute("cy",e.y.toString()),s.setAttribute("r","20"),s.setAttribute("fill","#CF1565"),null===(i=t.svg)||void 0===i||i.appendChild(s),t.circle=s,this.resetIdleTimer(t)}addEventListeners(t){var i,e,s,n;if(!t.circle||!t.paths||0===t.paths.length)return;t.svg.style.touchAction="none",t.circle.style.touchAction="none";const o=i=>{i.preventDefault(),t.pointerRect=t.svg.getBoundingClientRect(),t.pointerTransform=this.getSvgViewBoxTransform(t.svg,t.pointerRect);const e=this.getPointerPosition(i,t.svg,t.pointerTransform,t.pointerRect),s={x:parseFloat(t.circle.getAttribute("cx")),y:parseFloat(t.circle.getAttribute("cy"))},n=this.getDistanceSquared(e,s),o=this.getProximityThresholdForEvent(t,i);if(n<=o*o||"touch"===i.pointerType){t.isDragging=!0,t.activePointerId=i.pointerId,t.dragOffset={x:e.x-s.x,y:e.y-s.y};try{t.circle.setPointerCapture(i.pointerId)}catch(t){}t.lastPointerPos=s}this.hideFingerHint(),this.resetIdleTimer(t)},r=i=>{t.isDragging&&i.pointerId===t.activePointerId&&(i.preventDefault(),t.pointerMoveEvent=i,t.rafId||(t.rafId=requestAnimationFrame((()=>{this.handlePointerMove(t),t.rafId=null}))))},a=i=>{i.pointerId===t.activePointerId&&(t.isDragging=!1,t.activePointerId=null,t.lastPointerPos=null,t.dragOffset=null,this.hideFingerHint(),this.resetIdleTimer(t))};null===(i=t.svg)||void 0===i||i.addEventListener("pointerup",a),null===(e=t.svg)||void 0===e||e.addEventListener("pointercancel",a);const h=t=>{t.preventDefault()};t.circle.addEventListener("pointerdown",o,{passive:!1}),null===(s=t.svg)||void 0===s||s.addEventListener("pointermove",r),null===(n=t.svg)||void 0===n||n.addEventListener("contextmenu",h),t.cleanup=()=>{var i,e,s,n,l;null===(i=t.circle)||void 0===i||i.removeEventListener("pointerdown",o),null===(e=t.svg)||void 0===e||e.removeEventListener("pointermove",r),null===(s=t.svg)||void 0===s||s.removeEventListener("pointerup",a),null===(n=t.svg)||void 0===n||n.removeEventListener("pointercancel",a),null===(l=t.svg)||void 0===l||l.removeEventListener("contextmenu",h),t.isDragging=!1,t.activePointerId=null}}async handlePointerMove(t){var i,e,n,o,r;if(!t.isDragging)return;if(!t.circle||!t.paths||0===t.paths.length)return;if(t.isCompletingPath)return;this.hideFingerHint();const a=t.pointerMoveEvent,h=this.getPointerPosition(a,t.svg,t.pointerTransform,t.pointerRect),l=t.dragOffset?{x:h.x-t.dragOffset.x,y:h.y-t.dragOffset.y}:h,c={x:parseFloat(t.circle.getAttribute("cx")),y:parseFloat(t.circle.getAttribute("cy"))};let d=1/0;if(t.lastPointerPos){const i=l.x-t.lastPointerPos.x,e=l.y-t.lastPointerPos.y;if(d=i*i+e*e,d<1)return}const u=t.paths[t.currentPathIndex];if(!u)return void console.error("No valid path found at the current index");const f=this.getProximityThresholdForEvent(t,a),w=f*f;if(this.getDistanceSquared(l,c)>w)return;const g=t.mode===s.FreeTrace||t.mode===s.BlindFreeTrace,m=this.getClosestPointOnPath(u,l,g?void 0:t.lastLength);if(this.getDistanceSquared(l,m)>w)return;if(g){if(this.freeTraceUpdateCounter=(this.freeTraceUpdateCounter||0)+1,this.freeTraceUpdateCounter%2!=0)return;if(t.currentFreePath||(t.currentFreePath=[]),!t.currentFreePath[t.currentPathIndex]){const e=document.createElementNS("http://www.w3.org/2000/svg","polyline"),s=t.paths[t.currentPathIndex].style["stroke-width"]||t.paths[t.currentPathIndex].getAttribute("stroke-width");e.setAttribute("stroke-width",s),e.setAttribute("fill","none"),e.setAttribute("stroke-linecap","round"),e.setAttribute("stroke","lightgreen"),e.setAttribute("points",`${l.x},${l.y}`),null===(i=t.svg)||void 0===i||i.appendChild(e),t.currentFreePath[t.currentPathIndex]=e,t.currentFreePolylinePoints=t.currentFreePolylinePoints||[],t.currentFreePolylinePoints[t.currentPathIndex]=[{x:l.x,y:l.y}],t.lastPointerPos=l,t.freeTracePointsCount=1}const s=10;if(t.freeTracePointsCount=(t.freeTracePointsCount||1)+1,t.freeTracePointsCount>s)return;t.currentFreePolylinePoints=t.currentFreePolylinePoints||[];let n=t.currentFreePolylinePoints[t.currentPathIndex]||[];n.push({x:l.x,y:l.y}),t.currentFreePolylinePoints[t.currentPathIndex]=n;const o=n.map((t=>`${t.x},${t.y}`)).join(" ");return t.currentFreePath[t.currentPathIndex].setAttribute("points",o),t.circle.setAttribute("cx",l.x.toString()),t.circle.setAttribute("cy",l.y.toString()),t.circle.parentNode!==t.svg&&(null===(e=t.svg)||void 0===e||e.appendChild(t.circle)),t.lastPointerPos=l,void(n.length>=s&&(this.moveToNextPath(t),t.currentFreePath[t.currentPathIndex]=null,t.currentFreePolylinePoints[t.currentPathIndex]=[],t.freeTracePointsCount=0))}const v=Math.min(320,Math.max(160,.45*t.totalPathLength)),p=Math.min(60,Math.max(24,.12*t.totalPathLength));let x=m,y=x.length>=t.lastLength-20&&x.length-t.lastLength<=80;if(!y){const i=this.getClosestPointOnPath(u,l),e=this.getDistanceSquared(l,i);d>=64&&e<=w&&i.length>=t.lastLength-20&&i.length-t.lastLength<=v&&i.length<t.totalPathLength-p&&(x=i,y=!0)}if(t.isDragging&&y)if(t.lastLength=Math.max(t.lastLength,x.length),t.lastPointerPos=l,(Math.abs(x.x-c.x)>1||Math.abs(x.y-c.y)>1)&&(t.circle.setAttribute("cx",x.x.toString()),t.circle.setAttribute("cy",x.y.toString())),t.circle.parentNode!==t.svg&&(null===(n=t.svg)||void 0===n||n.appendChild(t.circle)),null===(o=u.greenPath)||void 0===o||o.setAttribute("stroke-dashoffset",(t.totalPathLength-t.lastLength).toString()),null!==(r=u._lidoTraceIsClosed)&&void 0!==r&&r&&t.totalPathLength>50){if(t.lastLength/t.totalPathLength>=.95){if(t.isCompletingPath)return;t.isCompletingPath=!0,await this.animatePathToEnd(t,u),t.currentPathIndex<t.paths.length-1?this.moveToNextPath(t):t.currentPathIndex===t.paths.length-1&&this.moveToNextContainer()}}else if(t.totalPathLength-1-t.lastLength<5&&t.currentPathIndex<t.paths.length-1){if(t.isCompletingPath)return;t.isCompletingPath=!0,this.moveToNextPath(t)}else if(t.totalPathLength-1-t.lastLength<5&&t.currentPathIndex===t.paths.length-1){if(t.isCompletingPath)return;t.isCompletingPath=!0,this.moveToNextContainer()}}animatePathToEnd(t,i,e=300){if(!i||!t.svg)return Promise.resolve();if(t._animatingToEnd)return Promise.resolve();t._animatingToEnd=!0;const s=t.lastLength||0,n=i.getTotalLength(),o=performance.now(),r=i.greenPath||i.parentNode&&i.parentNode.querySelector(".lido-trace-path-green");return new Promise((a=>{const h=l=>{const c=Math.min(1,(l-o)/e),d=s+(n-s)*c;t.lastLength=d;const u=i.getPointAtLength(d);if(t.circle&&(t.circle.setAttribute("cx",u.x.toString()),t.circle.setAttribute("cy",u.y.toString())),r&&r.setAttribute("stroke-dashoffset",(t.totalPathLength-d).toString()),c<1)requestAnimationFrame(h);else{if(t.lastLength=n,t.circle){const e=i.getPointAtLength(n);t.circle.setAttribute("cx",e.x.toString()),t.circle.setAttribute("cy",e.y.toString())}r&&r.setAttribute("stroke-dashoffset","0"),t._animatingToEnd=!1,a()}};requestAnimationFrame(h)}))}async moveToNextContainer(){if(this.isDragging=!1,this.moving)return;if(this.moving=!0,this.highlightTextId&&this.highlightLetter(this.currentSvgIndex),this.animationTrace&&await this.playTraceAnimation(),l(!0),this.currentSvgIndex<this.svgUrls.length-1)return await new Promise((t=>setTimeout(t,1e3))),this.currentSvgIndex++,await this.initializeSVG(),document.getElementById("lido-svgContainer").style.visibility="visible",this.moving=!1,void(this.el&&this.onCorrect&&await c(this.onCorrect,this.el));const t=document.querySelector(d),i=t.getAttribute("onCorrect");t&&i&&(await new Promise((t=>setTimeout(t,1e3))),await c(i,this.el)),u(),f()}getPointerPosition(t,i,e,s){var n;const o=this.getPointerPositionFromViewBox(t,i,e,s);if(o)return o;const r=i.createSVGPoint();r.x=t.clientX,r.y=t.clientY;const a=null===(n=i.getScreenCTM())||void 0===n?void 0:n.inverse();return a?r.matrixTransform(a):{x:t.clientX,y:t.clientY}}getPointerPositionFromViewBox(t,i,e,s){const n=s||i.getBoundingClientRect(),o=i.viewBox.baseVal;if(!(n.width&&n.height&&o.width&&o.height))return null;const{offsetX:r,offsetY:a,scaleX:h,scaleY:l}=e||this.getSvgViewBoxTransform(i,n);return{x:o.x+(t.clientX-n.left-r)/h,y:o.y+(t.clientY-n.top-a)/l}}getSvgViewBoxTransform(t,i=t.getBoundingClientRect()){const e=t.viewBox.baseVal,s=t.preserveAspectRatio.baseVal,n=i.width/e.width,o=i.height/e.height;if(1===s.align)return{offsetX:0,offsetY:0,scaleX:n,scaleY:o};const r=2===s.meetOrSlice?Math.max(n,o):Math.min(n,o),a=e.width*r,h=e.height*r;let l=0,c=0;const d=s.align;return 3===d||6===d||9===d?l=(i.width-a)/2:4!==d&&7!==d&&10!==d||(l=i.width-a),5===d||6===d||7===d?c=(i.height-h)/2:8!==d&&9!==d&&10!==d||(c=i.height-h),{offsetX:l,offsetY:c,scaleX:r,scaleY:r}}getProximityThresholdForEvent(t,i){const e=t.mode===s.FreeTrace||t.mode===s.BlindFreeTrace?t.freeTraceProximityThreshold:t.proximityThreshold;if("touch"!==(null==i?void 0:i.pointerType)||!t.svg)return e;const n=t.svg.getBoundingClientRect(),o=t.svg.viewBox.baseVal;if(!(n.width&&n.height&&o.width&&o.height))return e;const{scaleX:r,scaleY:a}=this.getSvgViewBoxTransform(t.svg,n),h=44*Math.max(1/r,1/a);return Math.max(e,h)}getDistanceSquared(t,i){const e=t.x-i.x,s=t.y-i.y;return e*e+s*s}getClosestPointOnPath(t,i,e){var s;const n=null!==(s=t._lidoTraceLength)&&void 0!==s?s:t.getTotalLength(),o=t._lidoTraceSamples,r=t._lidoTraceSampleStep;if((null==o?void 0:o.length)&&r){const s=void 0===e?n:150,a=void 0===e?0:Math.max(0,e-s),h=void 0===e?n:Math.min(n,e+s);let l=o[Math.max(0,Math.min(o.length-1,Math.round((e||0)/r)))],c=1/0;for(const t of o){if(t.length<a||t.length>h)continue;const e=this.getDistanceSquared(i,t);e<c&&(c=e,l=t)}const d=6,u=Math.max(a,l.length-r),f=Math.min(h,l.length+r);let w=Object.assign({},l),g=c;for(let e=u;e<=f;e+=d){const s=t.getPointAtLength(e),n=this.getDistanceSquared(i,s);n<g&&(g=n,w={x:s.x,y:s.y,length:e})}return w}let a={x:0,y:0,length:0},h=1/0,l=0,c=n;void 0!==e&&(l=Math.max(0,e-150),c=Math.min(n,e+150));let d={length:l};for(let e=l;e<=c;e+=40){const s=t.getPointAtLength(e),n=this.getDistanceSquared(i,s);n<h&&(h=n,d={x:s.x,y:s.y,length:e})}const u=Math.max(0,d.length-40),f=Math.min(n,d.length+40);h=1/0;for(let e=u;e<=f;e+=6){const s=t.getPointAtLength(e),n=this.getDistanceSquared(i,s);n<h&&(h=n,a={x:s.x,y:s.y,length:e})}return a}async loadAnotherSVG(t,i){t.isDragging=!1;try{t.svg&&this.cleanupPreviousSVG(t);const i=await this.fetchSVG(o(this.svgSource.split(";").map((t=>t.trim()))[this.currentSvgIndex]));this.insertSVG(i),t.svg=this.getSVGElement(),this.mode!==s.BlindTracing&&this.mode!==s.BlindFreeTrace||t.svg.querySelectorAll("image").forEach((t=>{t.style.display="none"})),t.paths=this.getPaths(t.svg),this.setupDrawingPath(t),this.setupDraggableCircle(t),this.addEventListeners(t)}catch(t){console.error(`Error loading SVG (${this.svgSource}):`,t)}}cleanupPreviousSVG(t){var i,e;t.circle&&(null===(i=t.svg)||void 0===i||i.removeChild(t.circle),t.circle=null),(null===(e=t.svg)||void 0===e?void 0:e.querySelectorAll(".lido-flow-indicator")).forEach((t=>{t.remove()})),t.currentPathIndex=0,t.lastLength=0,t.totalPathLength=t.paths[0].getTotalLength(),this.hideFingerHint(),this.resetIdleTimer(t)}async moveToNextPath(t){var i,e;if(t.isDragging=!1,t.currentPathIndex++,t.lastLength=0,t.isCompletingPath=!1,this.hideFingerHint(),t.currentPathIndex>=t.paths.length)return void this.moveToNextContainer();const n=t.paths[t.currentPathIndex];if(!n)return void console.error("No valid path found at the next index");t.totalPathLength=n.getTotalLength();const o=n.getPointAtLength(0);null===(i=t.circle)||void 0===i||i.setAttribute("cx",o.x.toString()),null===(e=t.circle)||void 0===e||e.setAttribute("cy",o.y.toString()),t.mode===s.ShowFlow&&(t.flowMarkers=this.createFlowMarkersForPath(n)),this.resetIdleTimer(t)}async playTraceAnimation(){const t=document.getElementById(this.id);t&&(t.classList.add("trace-animate"),await new Promise((t=>setTimeout(t,500))),t.classList.remove("trace-animate"))}async highlightLetter(t){if(!document.getElementById(d))return;const i=this.el;if(!i)return;const e=this.highlightTextId;if(!e)return;const s=document.getElementById(e);if(!s)return;const n=this.audio;if(!n)return;this.audioUrls=n.split(";").map((t=>t.trim()));const r=s.getAttribute("span-type");if(!r)return;const a=s.querySelector(".lido-text-content");if(a){if("letters"===r){const e=a.querySelectorAll(".text-letters");if(t<0||t>=e.length)return;const n=e[t];if(n){const t=i.querySelector("#lido-svgContainer");if(await c("this.alignMatch='true';",s,t),t.style.animation="trace-animation 0.4s forwards",t.style.setProperty("--trace-width",n.offsetWidth-5+"px"),t.style.setProperty("--trace-height",n.offsetHeight-5+"px"),await c("this.alignMatch='true';",n,t),setTimeout((()=>{n.classList.add("letter-highlight"),t.style.transform="",t.style.animation="",t.style.visibility="hidden"}),500),this.audioUrls[this.currentSvgIndex]){const t=new Audio(o(this.audioUrls[this.currentSvgIndex]));await t.play()}}}if("words"===r){const i=a.querySelectorAll(".text-words");if(t<0||t>=i.length)return;const e=i[t];if(e&&(e.classList.add("word-highlight"),this.audioUrls[this.currentSvgIndex])){const t=new Audio(o(this.audioUrls[this.currentSvgIndex]));await t.play()}}}}updateStyles(){const t=window.innerHeight>window.innerWidth?"portrait":"landscape";this.style={height:w(this.height,t),width:w(this.width,t),top:w(this.y,t),left:w(this.x,t),zIndex:this.z}}render(){return g(m,{key:"f4c270d9319e1115d966a6d9b697a4413ca87885",class:"lido-trace",id:this.id,audio:this.audio,onCorrect:this.onCorrect,onInCorrect:this.onInCorrect,style:this.style,"aria-label":this.ariaLabel,"aria-hidden":this.ariaHidden,tabindex:this.tabIndex,"disable-speak":this.disableSpeak},g("div",{key:"efbbaf5c796c9cfe8516fe5d47265e3a01b28a25",style:this.style,id:"lido-svgContainer"}))}static get assetsDirs(){return["assets"]}get el(){return this}static get watchers(){return{svgSource:[{initializeSVG:0}],mode:[{initializeSVG:0}]}}static get style(){return":host{display:block;position:relative}#lido-svgContainer{display:flex;justify-content:center;align-items:center;overflow:hidden}.lido-trace-svg{width:100%;height:100%;touch-action:none}#lido-draggableCircle{cursor:pointer;fill:#CF1565;transition:fill 0.2s, r 0.2s}.lido-blindTracing{stroke:none !important}.lido-blindFreeTrace{stroke:none !important}.lido-hovered{cursor:grab;fill:darkred}#lido-controls{position:fixed;bottom:0;left:0;right:0;display:flex;justify-content:space-between;padding:10px;background-color:#f0f0f0;border-top:1px solid #ccc}button{padding:10px;font-size:16px}@media (max-width: 600px){button{padding:8px;font-size:14px}}.lido-trace-path-green{}.lido-flow-indicator{stroke:blue;stroke-width:2;stroke-dasharray:6, 6;fill:none}.lido-trace{height:700px;width:700px;z-index:1;justify-items:center;align-content:center}.trace-animate{animation:trace-bounce 0.5s}@keyframes trace-bounce{0%{transform:scale(1)}30%{transform:scale(1.05)}60%{transform:scale(0.95)}100%{transform:scale(1)}}"}},[0,"lido-trace",{showSpeakIcon:[4,"show-speak-icon"],id:[1],svgSource:[1,"svg-source"],value:[1],height:[1],width:[1],audio:[1],x:[1],y:[1],z:[1],ariaLabel:[1,"aria-label"],ariaHidden:[1,"aria-hidden"],tabIndex:[2,"tab-index"],mode:[1],fingerHintUrl:[1,"finger-hint-url"],onInCorrect:[1,"on-in-correct"],onCorrect:[1,"on-correct"],highlightTextId:[1,"highlight-text-id"],animationTrace:[4,"animation-trace"],delayVisible:[1,"delay-visible"],disableSpeak:[4,"disable-speak"],svgUrls:[32],audioUrls:[32],currentSvgIndex:[32],moving:[32],style:[32],fileIndex:[32],isDragging:[32],activePointerId:[32],idleTimer:[32],fingerImg:[32]},void 0,{svgSource:[{initializeSVG:0}],mode:[{initializeSVG:0}]}]);function p(){"undefined"!=typeof customElements&&["lido-trace"].forEach((i=>{"lido-trace"===i&&(customElements.get(t(i))||customElements.define(t(i),v))}))}p();export{v as L,p as d}