@bmx-labs/chat-widget 0.0.1
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/LICENSE +661 -0
- package/README.md +90 -0
- package/dist/adapters/AnthropicAdapter.d.ts +16 -0
- package/dist/adapters/ContextAdapter.d.ts +19 -0
- package/dist/adapters/CustomAPIAdapter.d.ts +20 -0
- package/dist/adapters/KnowledgeBaseAdapter.d.ts +20 -0
- package/dist/adapters/MockAdapter.d.ts +6 -0
- package/dist/adapters/MorphexAdapter.d.ts +16 -0
- package/dist/adapters/OpenAIAdapter.d.ts +17 -0
- package/dist/adapters/RAGAdapter.d.ts +29 -0
- package/dist/adapters/RestRAGAdapter.d.ts +9 -0
- package/dist/adapters/TestAdapter.d.ts +6 -0
- package/dist/adapters/context/ContextAdapter.d.ts +19 -0
- package/dist/adapters/context/KnowledgeBaseAdapter.d.ts +20 -0
- package/dist/adapters/context/MorphexAdapter.d.ts +16 -0
- package/dist/adapters/context/PineconeRAGAdapter.d.ts +40 -0
- package/dist/adapters/context/RAGAdapter.d.ts +29 -0
- package/dist/adapters/context/index.d.ts +2 -0
- package/dist/adapters/index.d.ts +2 -0
- package/dist/adapters/mock.d.ts +2 -0
- package/dist/adapters/rest.d.ts +7 -0
- package/dist/components/BmxChatBot.d.ts +2 -0
- package/dist/components/LazyComponents.d.ts +3 -0
- package/dist/components/Orb.d.ts +8 -0
- package/dist/components/OrbButton.d.ts +10 -0
- package/dist/components/SimpleIridescence.d.ts +8 -0
- package/dist/components/SimpleOrb.d.ts +8 -0
- package/dist/components/chat/ChatButton.d.ts +10 -0
- package/dist/components/chat/ChatHeader.d.ts +7 -0
- package/dist/components/chat/ChatInput.d.ts +11 -0
- package/dist/components/chat/ChatPanel.d.ts +24 -0
- package/dist/components/chat/SettingsPanel.d.ts +12 -0
- package/dist/components/markdown/index.d.ts +3 -0
- package/dist/components/message/AssistantMessage.d.ts +6 -0
- package/dist/components/message/MessageItem.d.ts +6 -0
- package/dist/components/message/MessageList.d.ts +7 -0
- package/dist/components/message/TypingIndicator.d.ts +1 -0
- package/dist/components/message/UserMessage.d.ts +6 -0
- package/dist/components/ogl/DarkVeil.d.ts +11 -0
- package/dist/components/ogl/Iridescence.d.ts +8 -0
- package/dist/components/ogl/Orb.d.ts +8 -0
- package/dist/components/ogl/OrbButton.d.ts +10 -0
- package/dist/data/morphexData.d.ts +7 -0
- package/dist/framer.js +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -0
- package/dist/ogl.js +1 -0
- package/dist/styles.css +1 -0
- package/dist/styles.css.map +1 -0
- package/dist/styles.js +0 -0
- package/dist/styles.js.map +1 -0
- package/dist/types.d.ts +30 -0
- package/dist/utils/format.d.ts +7 -0
- package/dist/utils/logger.d.ts +43 -0
- package/dist/vendors.js +1 -0
- package/package.json +78 -0
package/dist/ogl.js
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
export const __webpack_esm_id__=407;export const __webpack_esm_ids__=[407];export const __webpack_esm_modules__={788:(t,e,s)=>{function i(t){let e=t[0],s=t[1],i=t[2];return Math.sqrt(e*e+s*s+i*i)}function r(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t}function n(t,e,s){return t[0]=e[0]+s[0],t[1]=e[1]+s[1],t[2]=e[2]+s[2],t}function h(t,e,s){return t[0]=e[0]-s[0],t[1]=e[1]-s[1],t[2]=e[2]-s[2],t}function a(t,e,s){return t[0]=e[0]*s,t[1]=e[1]*s,t[2]=e[2]*s,t}function o(t){let e=t[0],s=t[1],i=t[2];return e*e+s*s+i*i}function l(t,e){let s=e[0],i=e[1],r=e[2],n=s*s+i*i+r*r;return n>0&&(n=1/Math.sqrt(n)),t[0]=e[0]*n,t[1]=e[1]*n,t[2]=e[2]*n,t}function u(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}function c(t,e,s){let i=e[0],r=e[1],n=e[2],h=s[0],a=s[1],o=s[2];return t[0]=r*o-n*a,t[1]=n*h-i*o,t[2]=i*a-r*h,t}s.d(e,{Q1:()=>K,e:()=>Q,BP:()=>A,A4:()=>S,lM:()=>J,eB:()=>g});const d=function(){const t=[0,0,0],e=[0,0,0];return function(s,i){r(t,s),r(e,i),l(t,t),l(e,e);let n=u(t,e);return n>1?0:n<-1?Math.PI:Math.acos(n)}}();class g extends Array{constructor(t=0,e=t,s=t){return super(t,e,s),this}get x(){return this[0]}get y(){return this[1]}get z(){return this[2]}set x(t){this[0]=t}set y(t){this[1]=t}set z(t){this[2]=t}set(t,e=t,s=t){return t.length?this.copy(t):(function(t,e,s,i){t[0]=e,t[1]=s,t[2]=i}(this,t,e,s),this)}copy(t){return r(this,t),this}add(t,e){return e?n(this,t,e):n(this,this,t),this}sub(t,e){return e?h(this,t,e):h(this,this,t),this}multiply(t){var e,s,i;return t.length?(s=this,i=t,(e=this)[0]=s[0]*i[0],e[1]=s[1]*i[1],e[2]=s[2]*i[2]):a(this,this,t),this}divide(t){var e,s,i;return t.length?(s=this,i=t,(e=this)[0]=s[0]/i[0],e[1]=s[1]/i[1],e[2]=s[2]/i[2]):a(this,this,1/t),this}inverse(t=this){var e,s;return s=t,(e=this)[0]=1/s[0],e[1]=1/s[1],e[2]=1/s[2],this}len(){return i(this)}distance(t){return t?function(t,e){let s=e[0]-t[0],i=e[1]-t[1],r=e[2]-t[2];return Math.sqrt(s*s+i*i+r*r)}(this,t):i(this)}squaredLen(){return o(this)}squaredDistance(t){return t?function(t,e){let s=e[0]-t[0],i=e[1]-t[1],r=e[2]-t[2];return s*s+i*i+r*r}(this,t):o(this)}negate(t=this){var e,s;return s=t,(e=this)[0]=-s[0],e[1]=-s[1],e[2]=-s[2],this}cross(t,e){return e?c(this,t,e):c(this,this,t),this}scale(t){return a(this,this,t),this}normalize(){return l(this,this),this}dot(t){return u(this,t)}equals(t){return e=t,this[0]===e[0]&&this[1]===e[1]&&this[2]===e[2];var e}applyMatrix3(t){return function(t,e,s){let i=e[0],r=e[1],n=e[2];t[0]=i*s[0]+r*s[3]+n*s[6],t[1]=i*s[1]+r*s[4]+n*s[7],t[2]=i*s[2]+r*s[5]+n*s[8]}(this,this,t),this}applyMatrix4(t){return function(t,e,s){let i=e[0],r=e[1],n=e[2],h=s[3]*i+s[7]*r+s[11]*n+s[15];h=h||1,t[0]=(s[0]*i+s[4]*r+s[8]*n+s[12])/h,t[1]=(s[1]*i+s[5]*r+s[9]*n+s[13])/h,t[2]=(s[2]*i+s[6]*r+s[10]*n+s[14])/h}(this,this,t),this}scaleRotateMatrix4(t){return function(t,e,s){let i=e[0],r=e[1],n=e[2],h=s[3]*i+s[7]*r+s[11]*n+s[15];h=h||1,t[0]=(s[0]*i+s[4]*r+s[8]*n)/h,t[1]=(s[1]*i+s[5]*r+s[9]*n)/h,t[2]=(s[2]*i+s[6]*r+s[10]*n)/h}(this,this,t),this}applyQuaternion(t){return function(t,e,s){let i=e[0],r=e[1],n=e[2],h=s[0],a=s[1],o=s[2],l=a*n-o*r,u=o*i-h*n,c=h*r-a*i,d=a*c-o*u,g=o*l-h*c,f=h*u-a*l,p=2*s[3];l*=p,u*=p,c*=p,d*=2,g*=2,f*=2,t[0]=i+l+d,t[1]=r+u+g,t[2]=n+c+f}(this,this,t),this}angle(t){return d(this,t)}lerp(t,e){return function(t,e,s,i){let r=e[0],n=e[1],h=e[2];t[0]=r+i*(s[0]-r),t[1]=n+i*(s[1]-n),t[2]=h+i*(s[2]-h)}(this,this,t,e),this}smoothLerp(t,e,s){return function(t,e,s,i,r){const n=Math.exp(-i*r);let h=e[0],a=e[1],o=e[2];t[0]=s[0]+(h-s[0])*n,t[1]=s[1]+(a-s[1])*n,t[2]=s[2]+(o-s[2])*n}(this,this,t,e,s),this}clone(){return new g(this[0],this[1],this[2])}fromArray(t,e=0){return this[0]=t[e],this[1]=t[e+1],this[2]=t[e+2],this}toArray(t=[],e=0){return t[e]=this[0],t[e+1]=this[1],t[e+2]=this[2],t}transformDirection(t){const e=this[0],s=this[1],i=this[2];return this[0]=t[0]*e+t[4]*s+t[8]*i,this[1]=t[1]*e+t[5]*s+t[9]*i,this[2]=t[2]*e+t[6]*s+t[10]*i,this.normalize()}}const f=new g;let p=1,m=1,x=!1;class b{constructor(t,e={}){t.canvas||console.error("gl not passed as first argument to Geometry"),this.gl=t,this.attributes=e,this.id=p++,this.VAOs={},this.drawRange={start:0,count:0},this.instancedCount=0,this.gl.renderer.bindVertexArray(null),this.gl.renderer.currentGeometry=null,this.glState=this.gl.renderer.state;for(let t in e)this.addAttribute(t,e[t])}addAttribute(t,e){if(this.attributes[t]=e,e.id=m++,e.size=e.size||1,e.type=e.type||(e.data.constructor===Float32Array?this.gl.FLOAT:e.data.constructor===Uint16Array?this.gl.UNSIGNED_SHORT:this.gl.UNSIGNED_INT),e.target="index"===t?this.gl.ELEMENT_ARRAY_BUFFER:this.gl.ARRAY_BUFFER,e.normalized=e.normalized||!1,e.stride=e.stride||0,e.offset=e.offset||0,e.count=e.count||(e.stride?e.data.byteLength/e.stride:e.data.length/e.size),e.divisor=e.instanced||0,e.needsUpdate=!1,e.usage=e.usage||this.gl.STATIC_DRAW,e.buffer||this.updateAttribute(e),e.divisor){if(this.isInstanced=!0,this.instancedCount&&this.instancedCount!==e.count*e.divisor)return console.warn("geometry has multiple instanced buffers of different length"),this.instancedCount=Math.min(this.instancedCount,e.count*e.divisor);this.instancedCount=e.count*e.divisor}else"index"===t?this.drawRange.count=e.count:this.attributes.index||(this.drawRange.count=Math.max(this.drawRange.count,e.count))}updateAttribute(t){const e=!t.buffer;e&&(t.buffer=this.gl.createBuffer()),this.glState.boundBuffer!==t.buffer&&(this.gl.bindBuffer(t.target,t.buffer),this.glState.boundBuffer=t.buffer),e?this.gl.bufferData(t.target,t.data,t.usage):this.gl.bufferSubData(t.target,0,t.data),t.needsUpdate=!1}setIndex(t){this.addAttribute("index",t)}setDrawRange(t,e){this.drawRange.start=t,this.drawRange.count=e}setInstancedCount(t){this.instancedCount=t}createVAO(t){this.VAOs[t.attributeOrder]=this.gl.renderer.createVertexArray(),this.gl.renderer.bindVertexArray(this.VAOs[t.attributeOrder]),this.bindAttributes(t)}bindAttributes(t){t.attributeLocations.forEach((t,{name:e,type:s})=>{if(!this.attributes[e])return void console.warn(`active attribute ${e} not being supplied`);const i=this.attributes[e];this.gl.bindBuffer(i.target,i.buffer),this.glState.boundBuffer=i.buffer;let r=1;35674===s&&(r=2),35675===s&&(r=3),35676===s&&(r=4);const n=i.size/r,h=1===r?0:r*r*4,a=1===r?0:4*r;for(let e=0;e<r;e++)this.gl.vertexAttribPointer(t+e,n,i.type,i.normalized,i.stride+h,i.offset+e*a),this.gl.enableVertexAttribArray(t+e),this.gl.renderer.vertexAttribDivisor(t+e,i.divisor)}),this.attributes.index&&this.gl.bindBuffer(this.gl.ELEMENT_ARRAY_BUFFER,this.attributes.index.buffer)}draw({program:t,mode:e=this.gl.TRIANGLES}){this.gl.renderer.currentGeometry!==`${this.id}_${t.attributeOrder}`&&(this.VAOs[t.attributeOrder]||this.createVAO(t),this.gl.renderer.bindVertexArray(this.VAOs[t.attributeOrder]),this.gl.renderer.currentGeometry=`${this.id}_${t.attributeOrder}`),t.attributeLocations.forEach((t,{name:e})=>{const s=this.attributes[e];s.needsUpdate&&this.updateAttribute(s)});let s=2;this.attributes.index?.type===this.gl.UNSIGNED_INT&&(s=4),this.isInstanced?this.attributes.index?this.gl.renderer.drawElementsInstanced(e,this.drawRange.count,this.attributes.index.type,this.attributes.index.offset+this.drawRange.start*s,this.instancedCount):this.gl.renderer.drawArraysInstanced(e,this.drawRange.start,this.drawRange.count,this.instancedCount):this.attributes.index?this.gl.drawElements(e,this.drawRange.count,this.attributes.index.type,this.attributes.index.offset+this.drawRange.start*s):this.gl.drawArrays(e,this.drawRange.start,this.drawRange.count)}getPosition(){const t=this.attributes.position;return t.data?t:x?void 0:(console.warn("No position buffer data found to compute bounds"),x=!0)}computeBoundingBox(t){t||(t=this.getPosition());const e=t.data,s=t.size;this.bounds||(this.bounds={min:new g,max:new g,center:new g,scale:new g,radius:1/0});const i=this.bounds.min,r=this.bounds.max,n=this.bounds.center,h=this.bounds.scale;i.set(1/0),r.set(-1/0);for(let t=0,n=e.length;t<n;t+=s){const s=e[t],n=e[t+1],h=e[t+2];i.x=Math.min(s,i.x),i.y=Math.min(n,i.y),i.z=Math.min(h,i.z),r.x=Math.max(s,r.x),r.y=Math.max(n,r.y),r.z=Math.max(h,r.z)}h.sub(r,i),n.add(i,r).divide(2)}computeBoundingSphere(t){t||(t=this.getPosition());const e=t.data,s=t.size;this.bounds||this.computeBoundingBox(t);let i=0;for(let t=0,r=e.length;t<r;t+=s)f.fromArray(e,t),i=Math.max(i,this.bounds.center.squaredDistance(f));this.bounds.radius=Math.sqrt(i)}remove(){for(let t in this.VAOs)this.gl.renderer.deleteVertexArray(this.VAOs[t]),delete this.VAOs[t];for(let t in this.attributes)this.gl.deleteBuffer(this.attributes[t].buffer),delete this.attributes[t]}}let _=1;const M={};class A{constructor(t,{vertex:e,fragment:s,uniforms:i={},transparent:r=!1,cullFace:n=t.BACK,frontFace:h=t.CCW,depthTest:a=!0,depthWrite:o=!0,depthFunc:l=t.LEQUAL}={}){t.canvas||console.error("gl not passed as first argument to Program"),this.gl=t,this.uniforms=i,this.id=_++,e||console.warn("vertex shader not supplied"),s||console.warn("fragment shader not supplied"),this.transparent=r,this.cullFace=n,this.frontFace=h,this.depthTest=a,this.depthWrite=o,this.depthFunc=l,this.blendFunc={},this.blendEquation={},this.stencilFunc={},this.stencilOp={},this.transparent&&!this.blendFunc.src&&(this.gl.renderer.premultipliedAlpha?this.setBlendFunc(this.gl.ONE,this.gl.ONE_MINUS_SRC_ALPHA):this.setBlendFunc(this.gl.SRC_ALPHA,this.gl.ONE_MINUS_SRC_ALPHA)),this.vertexShader=t.createShader(t.VERTEX_SHADER),this.fragmentShader=t.createShader(t.FRAGMENT_SHADER),this.program=t.createProgram(),t.attachShader(this.program,this.vertexShader),t.attachShader(this.program,this.fragmentShader),this.setShaders({vertex:e,fragment:s})}setShaders({vertex:t,fragment:e}){if(t&&(this.gl.shaderSource(this.vertexShader,t),this.gl.compileShader(this.vertexShader),""!==this.gl.getShaderInfoLog(this.vertexShader)&&console.warn(`${this.gl.getShaderInfoLog(this.vertexShader)}\nVertex Shader\n${w(t)}`)),e&&(this.gl.shaderSource(this.fragmentShader,e),this.gl.compileShader(this.fragmentShader),""!==this.gl.getShaderInfoLog(this.fragmentShader)&&console.warn(`${this.gl.getShaderInfoLog(this.fragmentShader)}\nFragment Shader\n${w(e)}`)),this.gl.linkProgram(this.program),!this.gl.getProgramParameter(this.program,this.gl.LINK_STATUS))return console.warn(this.gl.getProgramInfoLog(this.program));this.uniformLocations=new Map;let s=this.gl.getProgramParameter(this.program,this.gl.ACTIVE_UNIFORMS);for(let t=0;t<s;t++){let e=this.gl.getActiveUniform(this.program,t);this.uniformLocations.set(e,this.gl.getUniformLocation(this.program,e.name));const s=e.name.match(/(\w+)/g);e.uniformName=s[0],e.nameComponents=s.slice(1)}this.attributeLocations=new Map;const i=[],r=this.gl.getProgramParameter(this.program,this.gl.ACTIVE_ATTRIBUTES);for(let t=0;t<r;t++){const e=this.gl.getActiveAttrib(this.program,t),s=this.gl.getAttribLocation(this.program,e.name);-1!==s&&(i[s]=e.name,this.attributeLocations.set(e,s))}this.attributeOrder=i.join("")}setBlendFunc(t,e,s,i){this.blendFunc.src=t,this.blendFunc.dst=e,this.blendFunc.srcAlpha=s,this.blendFunc.dstAlpha=i,t&&(this.transparent=!0)}setBlendEquation(t,e){this.blendEquation.modeRGB=t,this.blendEquation.modeAlpha=e}setStencilFunc(t,e,s){this.stencilRef=e,this.stencilFunc.func=t,this.stencilFunc.ref=e,this.stencilFunc.mask=s}setStencilOp(t,e,s){this.stencilOp.stencilFail=t,this.stencilOp.depthFail=e,this.stencilOp.depthPass=s}applyState(){this.depthTest?this.gl.renderer.enable(this.gl.DEPTH_TEST):this.gl.renderer.disable(this.gl.DEPTH_TEST),this.cullFace?this.gl.renderer.enable(this.gl.CULL_FACE):this.gl.renderer.disable(this.gl.CULL_FACE),this.blendFunc.src?this.gl.renderer.enable(this.gl.BLEND):this.gl.renderer.disable(this.gl.BLEND),this.cullFace&&this.gl.renderer.setCullFace(this.cullFace),this.gl.renderer.setFrontFace(this.frontFace),this.gl.renderer.setDepthMask(this.depthWrite),this.gl.renderer.setDepthFunc(this.depthFunc),this.blendFunc.src&&this.gl.renderer.setBlendFunc(this.blendFunc.src,this.blendFunc.dst,this.blendFunc.srcAlpha,this.blendFunc.dstAlpha),this.gl.renderer.setBlendEquation(this.blendEquation.modeRGB,this.blendEquation.modeAlpha),this.stencilFunc.func||this.stencilOp.stencilFail?this.gl.renderer.enable(this.gl.STENCIL_TEST):this.gl.renderer.disable(this.gl.STENCIL_TEST),this.gl.renderer.setStencilFunc(this.stencilFunc.func,this.stencilFunc.ref,this.stencilFunc.mask),this.gl.renderer.setStencilOp(this.stencilOp.stencilFail,this.stencilOp.depthFail,this.stencilOp.depthPass)}use({flipFaces:t=!1}={}){let e=-1;this.gl.renderer.state.currentProgram===this.id||(this.gl.useProgram(this.program),this.gl.renderer.state.currentProgram=this.id),this.uniformLocations.forEach((t,s)=>{let i=this.uniforms[s.uniformName];for(const t of s.nameComponents){if(!i)break;if(!(t in i)){if(Array.isArray(i.value))break;i=void 0;break}i=i[t]}if(!i)return v(`Active uniform ${s.name} has not been supplied`);if(i&&void 0===i.value)return v(`${s.name} uniform is missing a value parameter`);if(i.value.texture)return e+=1,i.value.update(e),E(this.gl,s.type,t,e);if(i.value.length&&i.value[0].texture){const r=[];return i.value.forEach(t=>{e+=1,t.update(e),r.push(e)}),E(this.gl,s.type,t,r)}E(this.gl,s.type,t,i.value)}),this.applyState(),t&&this.gl.renderer.setFrontFace(this.frontFace===this.gl.CCW?this.gl.CW:this.gl.CCW)}remove(){this.gl.deleteProgram(this.program)}}function E(t,e,s,i){i=i.length?function(t){const e=t.length,s=t[0].length;if(void 0===s)return t;const i=e*s;let r=M[i];r||(M[i]=r=new Float32Array(i));for(let i=0;i<e;i++)r.set(t[i],i*s);return r}(i):i;const r=t.renderer.state.uniformLocations.get(s);if(i.length)if(void 0===r||r.length!==i.length)t.renderer.state.uniformLocations.set(s,i.slice(0));else{if(function(t,e){if(t.length!==e.length)return!1;for(let s=0,i=t.length;s<i;s++)if(t[s]!==e[s])return!1;return!0}(r,i))return;r.set?r.set(i):function(t,e){for(let s=0,i=t.length;s<i;s++)t[s]=e[s]}(r,i),t.renderer.state.uniformLocations.set(s,r)}else{if(r===i)return;t.renderer.state.uniformLocations.set(s,i)}switch(e){case 5126:return i.length?t.uniform1fv(s,i):t.uniform1f(s,i);case 35664:return t.uniform2fv(s,i);case 35665:return t.uniform3fv(s,i);case 35666:return t.uniform4fv(s,i);case 35670:case 5124:case 35678:case 36306:case 35680:case 36289:return i.length?t.uniform1iv(s,i):t.uniform1i(s,i);case 35671:case 35667:return t.uniform2iv(s,i);case 35672:case 35668:return t.uniform3iv(s,i);case 35673:case 35669:return t.uniform4iv(s,i);case 35674:return t.uniformMatrix2fv(s,!1,i);case 35675:return t.uniformMatrix3fv(s,!1,i);case 35676:return t.uniformMatrix4fv(s,!1,i)}}function w(t){let e=t.split("\n");for(let t=0;t<e.length;t++)e[t]=t+1+": "+e[t];return e.join("\n")}let y=0;function v(t){y>100||(console.warn(t),y++,y>100&&console.warn("More than 100 program warnings - stopping logs."))}const F=new g;let C=1;class S{constructor({canvas:t=document.createElement("canvas"),width:e=300,height:s=150,dpr:i=1,alpha:r=!1,depth:n=!0,stencil:h=!1,antialias:a=!1,premultipliedAlpha:o=!1,preserveDrawingBuffer:l=!1,powerPreference:u="default",autoClear:c=!0,webgl:d=2}={}){const g={alpha:r,depth:n,stencil:h,antialias:a,premultipliedAlpha:o,preserveDrawingBuffer:l,powerPreference:u};this.dpr=i,this.alpha=r,this.color=!0,this.depth=n,this.stencil=h,this.premultipliedAlpha=o,this.autoClear=c,this.id=C++,2===d&&(this.gl=t.getContext("webgl2",g)),this.isWebgl2=!!this.gl,this.gl||(this.gl=t.getContext("webgl",g)),this.gl||console.error("unable to create webgl context"),this.gl.renderer=this,this.setSize(e,s),this.state={},this.state.blendFunc={src:this.gl.ONE,dst:this.gl.ZERO},this.state.blendEquation={modeRGB:this.gl.FUNC_ADD},this.state.cullFace=!1,this.state.frontFace=this.gl.CCW,this.state.depthMask=!0,this.state.depthFunc=this.gl.LEQUAL,this.state.premultiplyAlpha=!1,this.state.flipY=!1,this.state.unpackAlignment=4,this.state.framebuffer=null,this.state.viewport={x:0,y:0,width:null,height:null},this.state.textureUnits=[],this.state.activeTextureUnit=0,this.state.boundBuffer=null,this.state.uniformLocations=new Map,this.state.currentProgram=null,this.extensions={},this.isWebgl2?(this.getExtension("EXT_color_buffer_float"),this.getExtension("OES_texture_float_linear")):(this.getExtension("OES_texture_float"),this.getExtension("OES_texture_float_linear"),this.getExtension("OES_texture_half_float"),this.getExtension("OES_texture_half_float_linear"),this.getExtension("OES_element_index_uint"),this.getExtension("OES_standard_derivatives"),this.getExtension("EXT_sRGB"),this.getExtension("WEBGL_depth_texture"),this.getExtension("WEBGL_draw_buffers")),this.getExtension("WEBGL_compressed_texture_astc"),this.getExtension("EXT_texture_compression_bptc"),this.getExtension("WEBGL_compressed_texture_s3tc"),this.getExtension("WEBGL_compressed_texture_etc1"),this.getExtension("WEBGL_compressed_texture_pvrtc"),this.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc"),this.vertexAttribDivisor=this.getExtension("ANGLE_instanced_arrays","vertexAttribDivisor","vertexAttribDivisorANGLE"),this.drawArraysInstanced=this.getExtension("ANGLE_instanced_arrays","drawArraysInstanced","drawArraysInstancedANGLE"),this.drawElementsInstanced=this.getExtension("ANGLE_instanced_arrays","drawElementsInstanced","drawElementsInstancedANGLE"),this.createVertexArray=this.getExtension("OES_vertex_array_object","createVertexArray","createVertexArrayOES"),this.bindVertexArray=this.getExtension("OES_vertex_array_object","bindVertexArray","bindVertexArrayOES"),this.deleteVertexArray=this.getExtension("OES_vertex_array_object","deleteVertexArray","deleteVertexArrayOES"),this.drawBuffers=this.getExtension("WEBGL_draw_buffers","drawBuffers","drawBuffersWEBGL"),this.parameters={},this.parameters.maxTextureUnits=this.gl.getParameter(this.gl.MAX_COMBINED_TEXTURE_IMAGE_UNITS),this.parameters.maxAnisotropy=this.getExtension("EXT_texture_filter_anisotropic")?this.gl.getParameter(this.getExtension("EXT_texture_filter_anisotropic").MAX_TEXTURE_MAX_ANISOTROPY_EXT):0}setSize(t,e){this.width=t,this.height=e,this.gl.canvas.width=t*this.dpr,this.gl.canvas.height=e*this.dpr,this.gl.canvas.style&&Object.assign(this.gl.canvas.style,{width:t+"px",height:e+"px"})}setViewport(t,e,s=0,i=0){this.state.viewport.width===t&&this.state.viewport.height===e||(this.state.viewport.width=t,this.state.viewport.height=e,this.state.viewport.x=s,this.state.viewport.y=i,this.gl.viewport(s,i,t,e))}setScissor(t,e,s=0,i=0){this.gl.scissor(s,i,t,e)}enable(t){!0!==this.state[t]&&(this.gl.enable(t),this.state[t]=!0)}disable(t){!1!==this.state[t]&&(this.gl.disable(t),this.state[t]=!1)}setBlendFunc(t,e,s,i){this.state.blendFunc.src===t&&this.state.blendFunc.dst===e&&this.state.blendFunc.srcAlpha===s&&this.state.blendFunc.dstAlpha===i||(this.state.blendFunc.src=t,this.state.blendFunc.dst=e,this.state.blendFunc.srcAlpha=s,this.state.blendFunc.dstAlpha=i,void 0!==s?this.gl.blendFuncSeparate(t,e,s,i):this.gl.blendFunc(t,e))}setBlendEquation(t,e){t=t||this.gl.FUNC_ADD,this.state.blendEquation.modeRGB===t&&this.state.blendEquation.modeAlpha===e||(this.state.blendEquation.modeRGB=t,this.state.blendEquation.modeAlpha=e,void 0!==e?this.gl.blendEquationSeparate(t,e):this.gl.blendEquation(t))}setCullFace(t){this.state.cullFace!==t&&(this.state.cullFace=t,this.gl.cullFace(t))}setFrontFace(t){this.state.frontFace!==t&&(this.state.frontFace=t,this.gl.frontFace(t))}setDepthMask(t){this.state.depthMask!==t&&(this.state.depthMask=t,this.gl.depthMask(t))}setDepthFunc(t){this.state.depthFunc!==t&&(this.state.depthFunc=t,this.gl.depthFunc(t))}setStencilMask(t){this.state.stencilMask!==t&&(this.state.stencilMask=t,this.gl.stencilMask(t))}setStencilFunc(t,e,s){this.state.stencilFunc===t&&this.state.stencilRef===e&&this.state.stencilFuncMask===s||(this.state.stencilFunc=t||this.gl.ALWAYS,this.state.stencilRef=e||0,this.state.stencilFuncMask=s||0,this.gl.stencilFunc(t||this.gl.ALWAYS,e||0,s||0))}setStencilOp(t,e,s){this.state.stencilFail===t&&this.state.stencilDepthFail===e&&this.state.stencilDepthPass===s||(this.state.stencilFail=t,this.state.stencilDepthFail=e,this.state.stencilDepthPass=s,this.gl.stencilOp(t,e,s))}activeTexture(t){this.state.activeTextureUnit!==t&&(this.state.activeTextureUnit=t,this.gl.activeTexture(this.gl.TEXTURE0+t))}bindFramebuffer({target:t=this.gl.FRAMEBUFFER,buffer:e=null}={}){this.state.framebuffer!==e&&(this.state.framebuffer=e,this.gl.bindFramebuffer(t,e))}getExtension(t,e,s){return e&&this.gl[e]?this.gl[e].bind(this.gl):(this.extensions[t]||(this.extensions[t]=this.gl.getExtension(t)),e?this.extensions[t]?this.extensions[t][s].bind(this.extensions[t]):null:this.extensions[t])}sortOpaque(t,e){return t.renderOrder!==e.renderOrder?t.renderOrder-e.renderOrder:t.program.id!==e.program.id?t.program.id-e.program.id:t.zDepth!==e.zDepth?t.zDepth-e.zDepth:e.id-t.id}sortTransparent(t,e){return t.renderOrder!==e.renderOrder?t.renderOrder-e.renderOrder:t.zDepth!==e.zDepth?e.zDepth-t.zDepth:e.id-t.id}sortUI(t,e){return t.renderOrder!==e.renderOrder?t.renderOrder-e.renderOrder:t.program.id!==e.program.id?t.program.id-e.program.id:e.id-t.id}getRenderList({scene:t,camera:e,frustumCull:s,sort:i}){let r=[];if(e&&s&&e.updateFrustum(),t.traverse(t=>{if(!t.visible)return!0;t.draw&&(s&&t.frustumCulled&&e&&!e.frustumIntersectsMesh(t)||r.push(t))}),i){const t=[],s=[],i=[];r.forEach(r=>{r.program.transparent?r.program.depthTest?s.push(r):i.push(r):t.push(r),r.zDepth=0,0===r.renderOrder&&r.program.depthTest&&e&&(r.worldMatrix.getTranslation(F),F.applyMatrix4(e.projectionViewMatrix),r.zDepth=F.z)}),t.sort(this.sortOpaque),s.sort(this.sortTransparent),i.sort(this.sortUI),r=t.concat(s,i)}return r}render({scene:t,camera:e,target:s=null,update:i=!0,sort:r=!0,frustumCull:n=!0,clear:h}){null===s?(this.bindFramebuffer(),this.setViewport(this.width*this.dpr,this.height*this.dpr)):(this.bindFramebuffer(s),this.setViewport(s.width,s.height)),(h||this.autoClear&&!1!==h)&&(!this.depth||s&&!s.depth||(this.enable(this.gl.DEPTH_TEST),this.setDepthMask(!0)),(this.stencil||!s||s.stencil)&&(this.enable(this.gl.STENCIL_TEST),this.setStencilMask(255)),this.gl.clear((this.color?this.gl.COLOR_BUFFER_BIT:0)|(this.depth?this.gl.DEPTH_BUFFER_BIT:0)|(this.stencil?this.gl.STENCIL_BUFFER_BIT:0))),i&&t.updateMatrixWorld(),e&&e.updateMatrixWorld(),this.getRenderList({scene:t,camera:e,frustumCull:n,sort:r}).forEach(t=>{t.draw({camera:e})})}}function O(t,e,s){let i=e[0],r=e[1],n=e[2],h=e[3],a=s[0],o=s[1],l=s[2],u=s[3];return t[0]=i*u+h*a+r*l-n*o,t[1]=r*u+h*o+n*a-i*l,t[2]=n*u+h*l+i*o-r*a,t[3]=h*u-i*a-r*o-n*l,t}const R=function(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t},T=function(t,e,s,i,r){return t[0]=e,t[1]=s,t[2]=i,t[3]=r,t},B=function(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]+t[3]*e[3]},L=function(t,e){let s=e[0],i=e[1],r=e[2],n=e[3],h=s*s+i*i+r*r+n*n;return h>0&&(h=1/Math.sqrt(h)),t[0]=s*h,t[1]=i*h,t[2]=r*h,t[3]=n*h,t};class I extends Array{constructor(t=0,e=0,s=0,i=1){super(t,e,s,i),this.onChange=()=>{},this._target=this;const r=["0","1","2","3"];return new Proxy(this,{set(t,e){const s=Reflect.set(...arguments);return s&&r.includes(e)&&t.onChange(),s}})}get x(){return this[0]}get y(){return this[1]}get z(){return this[2]}get w(){return this[3]}set x(t){this._target[0]=t,this.onChange()}set y(t){this._target[1]=t,this.onChange()}set z(t){this._target[2]=t,this.onChange()}set w(t){this._target[3]=t,this.onChange()}identity(){var t;return(t=this._target)[0]=0,t[1]=0,t[2]=0,t[3]=1,this.onChange(),this}set(t,e,s,i){return t.length?this.copy(t):(T(this._target,t,e,s,i),this.onChange(),this)}rotateX(t){return function(t,e,s){s*=.5;let i=e[0],r=e[1],n=e[2],h=e[3],a=Math.sin(s),o=Math.cos(s);t[0]=i*o+h*a,t[1]=r*o+n*a,t[2]=n*o-r*a,t[3]=h*o-i*a}(this._target,this._target,t),this.onChange(),this}rotateY(t){return function(t,e,s){s*=.5;let i=e[0],r=e[1],n=e[2],h=e[3],a=Math.sin(s),o=Math.cos(s);t[0]=i*o-n*a,t[1]=r*o+h*a,t[2]=n*o+i*a,t[3]=h*o-r*a}(this._target,this._target,t),this.onChange(),this}rotateZ(t){return function(t,e,s){s*=.5;let i=e[0],r=e[1],n=e[2],h=e[3],a=Math.sin(s),o=Math.cos(s);t[0]=i*o+r*a,t[1]=r*o-i*a,t[2]=n*o+h*a,t[3]=h*o-n*a}(this._target,this._target,t),this.onChange(),this}inverse(t=this._target){return function(t,e){let s=e[0],i=e[1],r=e[2],n=e[3],h=s*s+i*i+r*r+n*n,a=h?1/h:0;t[0]=-s*a,t[1]=-i*a,t[2]=-r*a,t[3]=n*a}(this._target,t),this.onChange(),this}conjugate(t=this._target){var e,s;return s=t,(e=this._target)[0]=-s[0],e[1]=-s[1],e[2]=-s[2],e[3]=s[3],this.onChange(),this}copy(t){return R(this._target,t),this.onChange(),this}normalize(t=this._target){return L(this._target,t),this.onChange(),this}multiply(t,e){return e?O(this._target,t,e):O(this._target,this._target,t),this.onChange(),this}dot(t){return B(this._target,t)}fromMatrix3(t){return function(t,e){let s,i=e[0]+e[4]+e[8];if(i>0)s=Math.sqrt(i+1),t[3]=.5*s,s=.5/s,t[0]=(e[5]-e[7])*s,t[1]=(e[6]-e[2])*s,t[2]=(e[1]-e[3])*s;else{let i=0;e[4]>e[0]&&(i=1),e[8]>e[3*i+i]&&(i=2);let r=(i+1)%3,n=(i+2)%3;s=Math.sqrt(e[3*i+i]-e[3*r+r]-e[3*n+n]+1),t[i]=.5*s,s=.5/s,t[3]=(e[3*r+n]-e[3*n+r])*s,t[r]=(e[3*r+i]+e[3*i+r])*s,t[n]=(e[3*n+i]+e[3*i+n])*s}}(this._target,t),this.onChange(),this}fromEuler(t,e){return function(t,e,s="YXZ"){let i=Math.sin(.5*e[0]),r=Math.cos(.5*e[0]),n=Math.sin(.5*e[1]),h=Math.cos(.5*e[1]),a=Math.sin(.5*e[2]),o=Math.cos(.5*e[2]);"XYZ"===s?(t[0]=i*h*o+r*n*a,t[1]=r*n*o-i*h*a,t[2]=r*h*a+i*n*o,t[3]=r*h*o-i*n*a):"YXZ"===s?(t[0]=i*h*o+r*n*a,t[1]=r*n*o-i*h*a,t[2]=r*h*a-i*n*o,t[3]=r*h*o+i*n*a):"ZXY"===s?(t[0]=i*h*o-r*n*a,t[1]=r*n*o+i*h*a,t[2]=r*h*a+i*n*o,t[3]=r*h*o-i*n*a):"ZYX"===s?(t[0]=i*h*o-r*n*a,t[1]=r*n*o+i*h*a,t[2]=r*h*a-i*n*o,t[3]=r*h*o+i*n*a):"YZX"===s?(t[0]=i*h*o+r*n*a,t[1]=r*n*o+i*h*a,t[2]=r*h*a-i*n*o,t[3]=r*h*o-i*n*a):"XZY"===s&&(t[0]=i*h*o-r*n*a,t[1]=r*n*o-i*h*a,t[2]=r*h*a+i*n*o,t[3]=r*h*o+i*n*a)}(this._target,t,t.order),e||this.onChange(),this}fromAxisAngle(t,e){return function(t,e,s){s*=.5;let i=Math.sin(s);t[0]=i*e[0],t[1]=i*e[1],t[2]=i*e[2],t[3]=Math.cos(s)}(this._target,t,e),this.onChange(),this}slerp(t,e){return function(t,e,s,i){let r,n,h,a,o,l=e[0],u=e[1],c=e[2],d=e[3],g=s[0],f=s[1],p=s[2],m=s[3];n=l*g+u*f+c*p+d*m,n<0&&(n=-n,g=-g,f=-f,p=-p,m=-m),1-n>1e-6?(r=Math.acos(n),h=Math.sin(r),a=Math.sin((1-i)*r)/h,o=Math.sin(i*r)/h):(a=1-i,o=i),t[0]=a*l+o*g,t[1]=a*u+o*f,t[2]=a*c+o*p,t[3]=a*d+o*m}(this._target,this._target,t,e),this.onChange(),this}fromArray(t,e=0){return this._target[0]=t[e],this._target[1]=t[e+1],this._target[2]=t[e+2],this._target[3]=t[e+3],this.onChange(),this}toArray(t=[],e=0){return t[e]=this[0],t[e+1]=this[1],t[e+2]=this[2],t[e+3]=this[3],t}}function P(t){let e=t[0],s=t[1],i=t[2],r=t[3],n=t[4],h=t[5],a=t[6],o=t[7],l=t[8],u=t[9],c=t[10],d=t[11],g=t[12],f=t[13],p=t[14],m=t[15];return(e*h-s*n)*(c*m-d*p)-(e*a-i*n)*(u*m-d*f)+(e*o-r*n)*(u*p-c*f)+(s*a-i*h)*(l*m-d*g)-(s*o-r*h)*(l*p-c*g)+(i*o-r*a)*(l*f-u*g)}function U(t,e,s){let i=e[0],r=e[1],n=e[2],h=e[3],a=e[4],o=e[5],l=e[6],u=e[7],c=e[8],d=e[9],g=e[10],f=e[11],p=e[12],m=e[13],x=e[14],b=e[15],_=s[0],M=s[1],A=s[2],E=s[3];return t[0]=_*i+M*a+A*c+E*p,t[1]=_*r+M*o+A*d+E*m,t[2]=_*n+M*l+A*g+E*x,t[3]=_*h+M*u+A*f+E*b,_=s[4],M=s[5],A=s[6],E=s[7],t[4]=_*i+M*a+A*c+E*p,t[5]=_*r+M*o+A*d+E*m,t[6]=_*n+M*l+A*g+E*x,t[7]=_*h+M*u+A*f+E*b,_=s[8],M=s[9],A=s[10],E=s[11],t[8]=_*i+M*a+A*c+E*p,t[9]=_*r+M*o+A*d+E*m,t[10]=_*n+M*l+A*g+E*x,t[11]=_*h+M*u+A*f+E*b,_=s[12],M=s[13],A=s[14],E=s[15],t[12]=_*i+M*a+A*c+E*p,t[13]=_*r+M*o+A*d+E*m,t[14]=_*n+M*l+A*g+E*x,t[15]=_*h+M*u+A*f+E*b,t}function N(t,e){let s=e[0],i=e[1],r=e[2],n=e[4],h=e[5],a=e[6],o=e[8],l=e[9],u=e[10];return t[0]=Math.hypot(s,i,r),t[1]=Math.hypot(n,h,a),t[2]=Math.hypot(o,l,u),t}const D=function(){const t=[1,1,1];return function(e,s){let i=t;N(i,s);let r=1/i[0],n=1/i[1],h=1/i[2],a=s[0]*r,o=s[1]*n,l=s[2]*h,u=s[4]*r,c=s[5]*n,d=s[6]*h,g=s[8]*r,f=s[9]*n,p=s[10]*h,m=a+c+p,x=0;return m>0?(x=2*Math.sqrt(m+1),e[3]=.25*x,e[0]=(d-f)/x,e[1]=(g-l)/x,e[2]=(o-u)/x):a>c&&a>p?(x=2*Math.sqrt(1+a-c-p),e[3]=(d-f)/x,e[0]=.25*x,e[1]=(o+u)/x,e[2]=(g+l)/x):c>p?(x=2*Math.sqrt(1+c-a-p),e[3]=(g-l)/x,e[0]=(o+u)/x,e[1]=.25*x,e[2]=(d+f)/x):(x=2*Math.sqrt(1+p-a-c),e[3]=(o-u)/x,e[0]=(g+l)/x,e[1]=(d+f)/x,e[2]=.25*x),e}}();function z(t,e,s){return t[0]=e[0]+s[0],t[1]=e[1]+s[1],t[2]=e[2]+s[2],t[3]=e[3]+s[3],t[4]=e[4]+s[4],t[5]=e[5]+s[5],t[6]=e[6]+s[6],t[7]=e[7]+s[7],t[8]=e[8]+s[8],t[9]=e[9]+s[9],t[10]=e[10]+s[10],t[11]=e[11]+s[11],t[12]=e[12]+s[12],t[13]=e[13]+s[13],t[14]=e[14]+s[14],t[15]=e[15]+s[15],t}function q(t,e,s){return t[0]=e[0]-s[0],t[1]=e[1]-s[1],t[2]=e[2]-s[2],t[3]=e[3]-s[3],t[4]=e[4]-s[4],t[5]=e[5]-s[5],t[6]=e[6]-s[6],t[7]=e[7]-s[7],t[8]=e[8]-s[8],t[9]=e[9]-s[9],t[10]=e[10]-s[10],t[11]=e[11]-s[11],t[12]=e[12]-s[12],t[13]=e[13]-s[13],t[14]=e[14]-s[14],t[15]=e[15]-s[15],t}class V extends Array{constructor(t=1,e=0,s=0,i=0,r=0,n=1,h=0,a=0,o=0,l=0,u=1,c=0,d=0,g=0,f=0,p=1){return super(t,e,s,i,r,n,h,a,o,l,u,c,d,g,f,p),this}get x(){return this[12]}get y(){return this[13]}get z(){return this[14]}get w(){return this[15]}set x(t){this[12]=t}set y(t){this[13]=t}set z(t){this[14]=t}set w(t){this[15]=t}set(t,e,s,i,r,n,h,a,o,l,u,c,d,g,f,p){return t.length?this.copy(t):(function(t,e,s,i,r,n,h,a,o,l,u,c,d,g,f,p,m){t[0]=e,t[1]=s,t[2]=i,t[3]=r,t[4]=n,t[5]=h,t[6]=a,t[7]=o,t[8]=l,t[9]=u,t[10]=c,t[11]=d,t[12]=g,t[13]=f,t[14]=p,t[15]=m}(this,t,e,s,i,r,n,h,a,o,l,u,c,d,g,f,p),this)}translate(t,e=this){return function(t,e,s){let i,r,n,h,a,o,l,u,c,d,g,f,p=s[0],m=s[1],x=s[2];e===t?(t[12]=e[0]*p+e[4]*m+e[8]*x+e[12],t[13]=e[1]*p+e[5]*m+e[9]*x+e[13],t[14]=e[2]*p+e[6]*m+e[10]*x+e[14],t[15]=e[3]*p+e[7]*m+e[11]*x+e[15]):(i=e[0],r=e[1],n=e[2],h=e[3],a=e[4],o=e[5],l=e[6],u=e[7],c=e[8],d=e[9],g=e[10],f=e[11],t[0]=i,t[1]=r,t[2]=n,t[3]=h,t[4]=a,t[5]=o,t[6]=l,t[7]=u,t[8]=c,t[9]=d,t[10]=g,t[11]=f,t[12]=i*p+a*m+c*x+e[12],t[13]=r*p+o*m+d*x+e[13],t[14]=n*p+l*m+g*x+e[14],t[15]=h*p+u*m+f*x+e[15])}(this,e,t),this}rotate(t,e,s=this){return function(t,e,s,i){let r,n,h,a,o,l,u,c,d,g,f,p,m,x,b,_,M,A,E,w,y,v,F,C,S=i[0],O=i[1],R=i[2],T=Math.hypot(S,O,R);Math.abs(T)<1e-6||(T=1/T,S*=T,O*=T,R*=T,r=Math.sin(s),n=Math.cos(s),h=1-n,a=e[0],o=e[1],l=e[2],u=e[3],c=e[4],d=e[5],g=e[6],f=e[7],p=e[8],m=e[9],x=e[10],b=e[11],_=S*S*h+n,M=O*S*h+R*r,A=R*S*h-O*r,E=S*O*h-R*r,w=O*O*h+n,y=R*O*h+S*r,v=S*R*h+O*r,F=O*R*h-S*r,C=R*R*h+n,t[0]=a*_+c*M+p*A,t[1]=o*_+d*M+m*A,t[2]=l*_+g*M+x*A,t[3]=u*_+f*M+b*A,t[4]=a*E+c*w+p*y,t[5]=o*E+d*w+m*y,t[6]=l*E+g*w+x*y,t[7]=u*E+f*w+b*y,t[8]=a*v+c*F+p*C,t[9]=o*v+d*F+m*C,t[10]=l*v+g*F+x*C,t[11]=u*v+f*F+b*C,e!==t&&(t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]))}(this,s,t,e),this}scale(t,e=this){return function(t,e,s){let i=s[0],r=s[1],n=s[2];t[0]=e[0]*i,t[1]=e[1]*i,t[2]=e[2]*i,t[3]=e[3]*i,t[4]=e[4]*r,t[5]=e[5]*r,t[6]=e[6]*r,t[7]=e[7]*r,t[8]=e[8]*n,t[9]=e[9]*n,t[10]=e[10]*n,t[11]=e[11]*n,t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]}(this,e,"number"==typeof t?[t,t,t]:t),this}add(t,e){return e?z(this,t,e):z(this,this,t),this}sub(t,e){return e?q(this,t,e):q(this,this,t),this}multiply(t,e){var s,i,r;return t.length?e?U(this,t,e):U(this,this,t):(i=this,r=t,(s=this)[0]=i[0]*r,s[1]=i[1]*r,s[2]=i[2]*r,s[3]=i[3]*r,s[4]=i[4]*r,s[5]=i[5]*r,s[6]=i[6]*r,s[7]=i[7]*r,s[8]=i[8]*r,s[9]=i[9]*r,s[10]=i[10]*r,s[11]=i[11]*r,s[12]=i[12]*r,s[13]=i[13]*r,s[14]=i[14]*r,s[15]=i[15]*r),this}identity(){var t;return(t=this)[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,this}copy(t){var e,s;return s=t,(e=this)[0]=s[0],e[1]=s[1],e[2]=s[2],e[3]=s[3],e[4]=s[4],e[5]=s[5],e[6]=s[6],e[7]=s[7],e[8]=s[8],e[9]=s[9],e[10]=s[10],e[11]=s[11],e[12]=s[12],e[13]=s[13],e[14]=s[14],e[15]=s[15],this}fromPerspective({fov:t,aspect:e,near:s,far:i}={}){return function(t,e,s,i,r){let n=1/Math.tan(e/2),h=1/(i-r);t[0]=n/s,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=n,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=(r+i)*h,t[11]=-1,t[12]=0,t[13]=0,t[14]=2*r*i*h,t[15]=0}(this,t,e,s,i),this}fromOrthogonal({left:t,right:e,bottom:s,top:i,near:r,far:n}){return function(t,e,s,i,r,n,h){let a=1/(e-s),o=1/(i-r),l=1/(n-h);t[0]=-2*a,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*o,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=2*l,t[11]=0,t[12]=(e+s)*a,t[13]=(r+i)*o,t[14]=(h+n)*l,t[15]=1}(this,t,e,s,i,r,n),this}fromQuaternion(t){return function(t,e){let s=e[0],i=e[1],r=e[2],n=e[3],h=s+s,a=i+i,o=r+r,l=s*h,u=i*h,c=i*a,d=r*h,g=r*a,f=r*o,p=n*h,m=n*a,x=n*o;t[0]=1-c-f,t[1]=u+x,t[2]=d-m,t[3]=0,t[4]=u-x,t[5]=1-l-f,t[6]=g+p,t[7]=0,t[8]=d+m,t[9]=g-p,t[10]=1-l-c,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1}(this,t),this}setPosition(t){return this.x=t[0],this.y=t[1],this.z=t[2],this}inverse(t=this){return function(t,e){let s=e[0],i=e[1],r=e[2],n=e[3],h=e[4],a=e[5],o=e[6],l=e[7],u=e[8],c=e[9],d=e[10],g=e[11],f=e[12],p=e[13],m=e[14],x=e[15],b=s*a-i*h,_=s*o-r*h,M=s*l-n*h,A=i*o-r*a,E=i*l-n*a,w=r*l-n*o,y=u*p-c*f,v=u*m-d*f,F=u*x-g*f,C=c*m-d*p,S=c*x-g*p,O=d*x-g*m,R=b*O-_*S+M*C+A*F-E*v+w*y;R&&(R=1/R,t[0]=(a*O-o*S+l*C)*R,t[1]=(r*S-i*O-n*C)*R,t[2]=(p*w-m*E+x*A)*R,t[3]=(d*E-c*w-g*A)*R,t[4]=(o*F-h*O-l*v)*R,t[5]=(s*O-r*F+n*v)*R,t[6]=(m*M-f*w-x*_)*R,t[7]=(u*w-d*M+g*_)*R,t[8]=(h*S-a*F+l*y)*R,t[9]=(i*F-s*S-n*y)*R,t[10]=(f*E-p*M+x*b)*R,t[11]=(c*M-u*E-g*b)*R,t[12]=(a*v-h*C-o*y)*R,t[13]=(s*C-i*v+r*y)*R,t[14]=(p*_-f*A-m*b)*R,t[15]=(u*A-c*_+d*b)*R)}(this,t),this}compose(t,e,s){return function(t,e,s,i){const r=t,n=e[0],h=e[1],a=e[2],o=e[3],l=n+n,u=h+h,c=a+a,d=n*l,g=n*u,f=n*c,p=h*u,m=h*c,x=a*c,b=o*l,_=o*u,M=o*c,A=i[0],E=i[1],w=i[2];r[0]=(1-(p+x))*A,r[1]=(g+M)*A,r[2]=(f-_)*A,r[3]=0,r[4]=(g-M)*E,r[5]=(1-(d+x))*E,r[6]=(m+b)*E,r[7]=0,r[8]=(f+_)*w,r[9]=(m-b)*w,r[10]=(1-(d+p))*w,r[11]=0,r[12]=s[0],r[13]=s[1],r[14]=s[2],r[15]=1}(this,t,e,s),this}decompose(t,e,s){return function(t,e,s,r){let n=i([t[0],t[1],t[2]]);const h=i([t[4],t[5],t[6]]),a=i([t[8],t[9],t[10]]);P(t)<0&&(n=-n),s[0]=t[12],s[1]=t[13],s[2]=t[14];const o=t.slice(),l=1/n,u=1/h,c=1/a;o[0]*=l,o[1]*=l,o[2]*=l,o[4]*=u,o[5]*=u,o[6]*=u,o[8]*=c,o[9]*=c,o[10]*=c,D(e,o),r[0]=n,r[1]=h,r[2]=a}(this,t,e,s),this}getRotation(t){return D(t,this),this}getTranslation(t){var e,s;return s=this,(e=t)[0]=s[12],e[1]=s[13],e[2]=s[14],this}getScaling(t){return N(t,this),this}getMaxScaleOnAxis(){return function(t){let e=t[0],s=t[1],i=t[2],r=t[4],n=t[5],h=t[6],a=t[8],o=t[9],l=t[10];const u=e*e+s*s+i*i,c=r*r+n*n+h*h,d=a*a+o*o+l*l;return Math.sqrt(Math.max(u,c,d))}(this)}lookAt(t,e,s){return function(t,e,s,i){let r=e[0],n=e[1],h=e[2],a=i[0],o=i[1],l=i[2],u=r-s[0],c=n-s[1],d=h-s[2],g=u*u+c*c+d*d;0===g?d=1:(g=1/Math.sqrt(g),u*=g,c*=g,d*=g);let f=o*d-l*c,p=l*u-a*d,m=a*c-o*u;g=f*f+p*p+m*m,0===g&&(l?a+=1e-6:o?l+=1e-6:o+=1e-6,f=o*d-l*c,p=l*u-a*d,m=a*c-o*u,g=f*f+p*p+m*m),g=1/Math.sqrt(g),f*=g,p*=g,m*=g,t[0]=f,t[1]=p,t[2]=m,t[3]=0,t[4]=c*m-d*p,t[5]=d*f-u*m,t[6]=u*p-c*f,t[7]=0,t[8]=u,t[9]=c,t[10]=d,t[11]=0,t[12]=r,t[13]=n,t[14]=h,t[15]=1}(this,t,e,s),this}determinant(){return P(this)}fromArray(t,e=0){return this[0]=t[e],this[1]=t[e+1],this[2]=t[e+2],this[3]=t[e+3],this[4]=t[e+4],this[5]=t[e+5],this[6]=t[e+6],this[7]=t[e+7],this[8]=t[e+8],this[9]=t[e+9],this[10]=t[e+10],this[11]=t[e+11],this[12]=t[e+12],this[13]=t[e+13],this[14]=t[e+14],this[15]=t[e+15],this}toArray(t=[],e=0){return t[e]=this[0],t[e+1]=this[1],t[e+2]=this[2],t[e+3]=this[3],t[e+4]=this[4],t[e+5]=this[5],t[e+6]=this[6],t[e+7]=this[7],t[e+8]=this[8],t[e+9]=this[9],t[e+10]=this[10],t[e+11]=this[11],t[e+12]=this[12],t[e+13]=this[13],t[e+14]=this[14],t[e+15]=this[15],t}}const k=new V;class G extends Array{constructor(t=0,e=t,s=t,i="YXZ"){super(t,e,s),this.order=i,this.onChange=()=>{},this._target=this;const r=["0","1","2"];return new Proxy(this,{set(t,e){const s=Reflect.set(...arguments);return s&&r.includes(e)&&t.onChange(),s}})}get x(){return this[0]}get y(){return this[1]}get z(){return this[2]}set x(t){this._target[0]=t,this.onChange()}set y(t){this._target[1]=t,this.onChange()}set z(t){this._target[2]=t,this.onChange()}set(t,e=t,s=t){return t.length?this.copy(t):(this._target[0]=t,this._target[1]=e,this._target[2]=s,this.onChange(),this)}copy(t){return this._target[0]=t[0],this._target[1]=t[1],this._target[2]=t[2],this.onChange(),this}reorder(t){return this._target.order=t,this.onChange(),this}fromRotationMatrix(t,e=this.order){return function(t,e,s="YXZ"){"XYZ"===s?(t[1]=Math.asin(Math.min(Math.max(e[8],-1),1)),Math.abs(e[8])<.99999?(t[0]=Math.atan2(-e[9],e[10]),t[2]=Math.atan2(-e[4],e[0])):(t[0]=Math.atan2(e[6],e[5]),t[2]=0)):"YXZ"===s?(t[0]=Math.asin(-Math.min(Math.max(e[9],-1),1)),Math.abs(e[9])<.99999?(t[1]=Math.atan2(e[8],e[10]),t[2]=Math.atan2(e[1],e[5])):(t[1]=Math.atan2(-e[2],e[0]),t[2]=0)):"ZXY"===s?(t[0]=Math.asin(Math.min(Math.max(e[6],-1),1)),Math.abs(e[6])<.99999?(t[1]=Math.atan2(-e[2],e[10]),t[2]=Math.atan2(-e[4],e[5])):(t[1]=0,t[2]=Math.atan2(e[1],e[0]))):"ZYX"===s?(t[1]=Math.asin(-Math.min(Math.max(e[2],-1),1)),Math.abs(e[2])<.99999?(t[0]=Math.atan2(e[6],e[10]),t[2]=Math.atan2(e[1],e[0])):(t[0]=0,t[2]=Math.atan2(-e[4],e[5]))):"YZX"===s?(t[2]=Math.asin(Math.min(Math.max(e[1],-1),1)),Math.abs(e[1])<.99999?(t[0]=Math.atan2(-e[9],e[5]),t[1]=Math.atan2(-e[2],e[0])):(t[0]=0,t[1]=Math.atan2(e[8],e[10]))):"XZY"===s&&(t[2]=Math.asin(-Math.min(Math.max(e[4],-1),1)),Math.abs(e[4])<.99999?(t[0]=Math.atan2(e[6],e[5]),t[1]=Math.atan2(e[8],e[0])):(t[0]=Math.atan2(-e[9],e[10]),t[1]=0))}(this._target,t,e),this.onChange(),this}fromQuaternion(t,e=this.order,s){return k.fromQuaternion(t),this._target.fromRotationMatrix(k,e),s||this.onChange(),this}fromArray(t,e=0){return this._target[0]=t[e],this._target[1]=t[e+1],this._target[2]=t[e+2],this}toArray(t=[],e=0){return t[e]=this[0],t[e+1]=this[1],t[e+2]=this[2],t}}class X{constructor(){this.parent=null,this.children=[],this.visible=!0,this.matrix=new V,this.worldMatrix=new V,this.matrixAutoUpdate=!0,this.worldMatrixNeedsUpdate=!1,this.position=new g,this.quaternion=new I,this.scale=new g(1),this.rotation=new G,this.up=new g(0,1,0),this.rotation._target.onChange=()=>this.quaternion.fromEuler(this.rotation,!0),this.quaternion._target.onChange=()=>this.rotation.fromQuaternion(this.quaternion,void 0,!0)}setParent(t,e=!0){this.parent&&t!==this.parent&&this.parent.removeChild(this,!1),this.parent=t,e&&t&&t.addChild(this,!1)}addChild(t,e=!0){~this.children.indexOf(t)||this.children.push(t),e&&t.setParent(this,!1)}removeChild(t,e=!0){~this.children.indexOf(t)&&this.children.splice(this.children.indexOf(t),1),e&&t.setParent(null,!1)}updateMatrixWorld(t){this.matrixAutoUpdate&&this.updateMatrix(),(this.worldMatrixNeedsUpdate||t)&&(null===this.parent?this.worldMatrix.copy(this.matrix):this.worldMatrix.multiply(this.parent.worldMatrix,this.matrix),this.worldMatrixNeedsUpdate=!1,t=!0);for(let e=0,s=this.children.length;e<s;e++)this.children[e].updateMatrixWorld(t)}updateMatrix(){this.matrix.compose(this.quaternion,this.position,this.scale),this.worldMatrixNeedsUpdate=!0}traverse(t){if(!t(this))for(let e=0,s=this.children.length;e<s;e++)this.children[e].traverse(t)}decompose(){this.matrix.decompose(this.quaternion._target,this.position,this.scale),this.rotation.fromQuaternion(this.quaternion)}lookAt(t,e=!1){e?this.matrix.lookAt(this.position,t,this.up):this.matrix.lookAt(t,this.position,this.up),this.matrix.getRotation(this.quaternion._target),this.rotation.fromQuaternion(this.quaternion)}}function W(t,e,s){let i=e[0],r=e[1],n=e[2],h=e[3],a=e[4],o=e[5],l=e[6],u=e[7],c=e[8],d=s[0],g=s[1],f=s[2],p=s[3],m=s[4],x=s[5],b=s[6],_=s[7],M=s[8];return t[0]=d*i+g*h+f*l,t[1]=d*r+g*a+f*u,t[2]=d*n+g*o+f*c,t[3]=p*i+m*h+x*l,t[4]=p*r+m*a+x*u,t[5]=p*n+m*o+x*c,t[6]=b*i+_*h+M*l,t[7]=b*r+_*a+M*u,t[8]=b*n+_*o+M*c,t}class Y extends Array{constructor(t=1,e=0,s=0,i=0,r=1,n=0,h=0,a=0,o=1){return super(t,e,s,i,r,n,h,a,o),this}set(t,e,s,i,r,n,h,a,o){return t.length?this.copy(t):(function(t,e,s,i,r,n,h,a,o,l){t[0]=e,t[1]=s,t[2]=i,t[3]=r,t[4]=n,t[5]=h,t[6]=a,t[7]=o,t[8]=l}(this,t,e,s,i,r,n,h,a,o),this)}translate(t,e=this){return function(t,e,s){let i=e[0],r=e[1],n=e[2],h=e[3],a=e[4],o=e[5],l=e[6],u=e[7],c=e[8],d=s[0],g=s[1];t[0]=i,t[1]=r,t[2]=n,t[3]=h,t[4]=a,t[5]=o,t[6]=d*i+g*h+l,t[7]=d*r+g*a+u,t[8]=d*n+g*o+c}(this,e,t),this}rotate(t,e=this){return function(t,e,s){let i=e[0],r=e[1],n=e[2],h=e[3],a=e[4],o=e[5],l=e[6],u=e[7],c=e[8],d=Math.sin(s),g=Math.cos(s);t[0]=g*i+d*h,t[1]=g*r+d*a,t[2]=g*n+d*o,t[3]=g*h-d*i,t[4]=g*a-d*r,t[5]=g*o-d*n,t[6]=l,t[7]=u,t[8]=c}(this,e,t),this}scale(t,e=this){return function(t,e,s){let i=s[0],r=s[1];t[0]=i*e[0],t[1]=i*e[1],t[2]=i*e[2],t[3]=r*e[3],t[4]=r*e[4],t[5]=r*e[5],t[6]=e[6],t[7]=e[7],t[8]=e[8]}(this,e,t),this}multiply(t,e){return e?W(this,t,e):W(this,this,t),this}identity(){var t;return(t=this)[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,this}copy(t){var e,s;return s=t,(e=this)[0]=s[0],e[1]=s[1],e[2]=s[2],e[3]=s[3],e[4]=s[4],e[5]=s[5],e[6]=s[6],e[7]=s[7],e[8]=s[8],this}fromMatrix4(t){var e,s;return s=t,(e=this)[0]=s[0],e[1]=s[1],e[2]=s[2],e[3]=s[4],e[4]=s[5],e[5]=s[6],e[6]=s[8],e[7]=s[9],e[8]=s[10],this}fromQuaternion(t){return function(t,e){let s=e[0],i=e[1],r=e[2],n=e[3],h=s+s,a=i+i,o=r+r,l=s*h,u=i*h,c=i*a,d=r*h,g=r*a,f=r*o,p=n*h,m=n*a,x=n*o;t[0]=1-c-f,t[3]=u-x,t[6]=d+m,t[1]=u+x,t[4]=1-l-f,t[7]=g-p,t[2]=d-m,t[5]=g+p,t[8]=1-l-c}(this,t),this}fromBasis(t,e,s){return this.set(t[0],t[1],t[2],e[0],e[1],e[2],s[0],s[1],s[2]),this}inverse(t=this){return function(t,e){let s=e[0],i=e[1],r=e[2],n=e[3],h=e[4],a=e[5],o=e[6],l=e[7],u=e[8],c=u*h-a*l,d=-u*n+a*o,g=l*n-h*o,f=s*c+i*d+r*g;f&&(f=1/f,t[0]=c*f,t[1]=(-u*i+r*l)*f,t[2]=(a*i-r*h)*f,t[3]=d*f,t[4]=(u*s-r*o)*f,t[5]=(-a*s+r*n)*f,t[6]=g*f,t[7]=(-l*s+i*o)*f,t[8]=(h*s-i*n)*f)}(this,t),this}getNormalMatrix(t){return function(t,e){let s=e[0],i=e[1],r=e[2],n=e[3],h=e[4],a=e[5],o=e[6],l=e[7],u=e[8],c=e[9],d=e[10],g=e[11],f=e[12],p=e[13],m=e[14],x=e[15],b=s*a-i*h,_=s*o-r*h,M=s*l-n*h,A=i*o-r*a,E=i*l-n*a,w=r*l-n*o,y=u*p-c*f,v=u*m-d*f,F=u*x-g*f,C=c*m-d*p,S=c*x-g*p,O=d*x-g*m,R=b*O-_*S+M*C+A*F-E*v+w*y;R&&(R=1/R,t[0]=(a*O-o*S+l*C)*R,t[1]=(o*F-h*O-l*v)*R,t[2]=(h*S-a*F+l*y)*R,t[3]=(r*S-i*O-n*C)*R,t[4]=(s*O-r*F+n*v)*R,t[5]=(i*F-s*S-n*y)*R,t[6]=(p*w-m*E+x*A)*R,t[7]=(m*M-f*w-x*_)*R,t[8]=(f*E-p*M+x*b)*R)}(this,t),this}}let Z=0;class Q extends X{constructor(t,{geometry:e,program:s,mode:i=t.TRIANGLES,frustumCulled:r=!0,renderOrder:n=0}={}){super(),t.canvas||console.error("gl not passed as first argument to Mesh"),this.gl=t,this.id=Z++,this.geometry=e,this.program=s,this.mode=i,this.frustumCulled=r,this.renderOrder=n,this.modelViewMatrix=new V,this.normalMatrix=new Y,this.beforeRenderCallbacks=[],this.afterRenderCallbacks=[]}onBeforeRender(t){return this.beforeRenderCallbacks.push(t),this}onAfterRender(t){return this.afterRenderCallbacks.push(t),this}draw({camera:t}={}){t&&(this.program.uniforms.modelMatrix||Object.assign(this.program.uniforms,{modelMatrix:{value:null},viewMatrix:{value:null},modelViewMatrix:{value:null},normalMatrix:{value:null},projectionMatrix:{value:null},cameraPosition:{value:null}}),this.program.uniforms.projectionMatrix.value=t.projectionMatrix,this.program.uniforms.cameraPosition.value=t.worldPosition,this.program.uniforms.viewMatrix.value=t.viewMatrix,this.modelViewMatrix.multiply(t.viewMatrix,this.worldMatrix),this.normalMatrix.getNormalMatrix(this.modelViewMatrix),this.program.uniforms.modelMatrix.value=this.worldMatrix,this.program.uniforms.modelViewMatrix.value=this.modelViewMatrix,this.program.uniforms.normalMatrix.value=this.normalMatrix),this.beforeRenderCallbacks.forEach(e=>e&&e({mesh:this,camera:t}));let e=this.program.cullFace&&this.worldMatrix.determinant()<0;this.program.use({flipFaces:e}),this.geometry.draw({mode:this.mode,program:this.program}),this.afterRenderCallbacks.forEach(e=>e&&e({mesh:this,camera:t}))}}new Uint8Array(4);const j={black:"#000000",white:"#ffffff",red:"#ff0000",green:"#00ff00",blue:"#0000ff",fuchsia:"#ff00ff",cyan:"#00ffff",yellow:"#ffff00",orange:"#ff8000"};function $(t){4===t.length&&(t=t[0]+t[1]+t[1]+t[2]+t[2]+t[3]+t[3]);const e=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(t);return e||console.warn(`Unable to convert hex string ${t} to rgb values`),[parseInt(e[1],16)/255,parseInt(e[2],16)/255,parseInt(e[3],16)/255]}function H(t){return void 0===t?[0,0,0]:3===arguments.length?arguments:isNaN(t)?"#"===t[0]?$(t):j[t.toLowerCase()]?$(j[t.toLowerCase()]):(console.warn("Color format not recognised"),[0,0,0]):(e=t,[((e=parseInt(e))>>16&255)/255,(e>>8&255)/255,(255&e)/255]);var e}class K extends Array{constructor(t){return Array.isArray(t)?super(...t):super(...H(...arguments))}get r(){return this[0]}get g(){return this[1]}get b(){return this[2]}set r(t){this[0]=t}set g(t){this[1]=t}set b(t){this[2]=t}set(t){return Array.isArray(t)?this.copy(t):this.copy(H(...arguments))}copy(t){return this[0]=t[0],this[1]=t[1],this[2]=t[2],this}}class J extends b{constructor(t,{attributes:e={}}={}){Object.assign(e,{position:{size:2,data:new Float32Array([-1,-1,3,-1,-1,3])},uv:{size:2,data:new Float32Array([0,0,2,0,0,2])}}),super(t,e)}}const tt="catmullrom",et="cubicbezier",st="quadraticbezier",it=new g,rt=new g,nt=new g,ht=new g;function at(t,e,s,i){const r=1-t;it.copy(e).scale(r**2),rt.copy(s).scale(2*r*t),nt.copy(i).scale(t**2);const n=new g;return n.add(it,rt).add(nt),n}function ot(t,e,s,i,r){const n=1-t;it.copy(e).scale(n**3),rt.copy(s).scale(3*n**2*t),nt.copy(i).scale(3*n*t**2),ht.copy(r).scale(t**3);const h=new g;return h.add(it,rt).add(nt).add(ht),h}class lt{constructor({points:t=[new g(0,0,0),new g(0,1,0),new g(1,1,0),new g(1,0,0)],divisions:e=12,type:s=tt}={}){this.points=t,this.divisions=e,this.type=s}_getQuadraticBezierPoints(t=this.divisions){const e=[],s=this.points.length;if(s<3)return console.warn("Not enough points provided."),[];const i=this.points[0];let r=this.points[1],n=this.points[2];for(let s=0;s<=t;s++){const h=at(s/t,i,r,n);e.push(h)}let h=3;for(;s-h>0;){i.copy(n),r=n.scale(2).sub(r),n=this.points[h];for(let s=1;s<=t;s++){const h=at(s/t,i,r,n);e.push(h)}h++}return e}_getCubicBezierPoints(t=this.divisions){const e=[],s=this.points.length;if(s<4)return console.warn("Not enough points provided."),[];let i=this.points[0],r=this.points[1],n=this.points[2],h=this.points[3];for(let s=0;s<=t;s++){const a=ot(s/t,i,r,n,h);e.push(a)}let a=4;for(;s-a>1;){i.copy(h),r=h.scale(2).sub(n),n=this.points[a],h=this.points[a+1];for(let s=1;s<=t;s++){const a=ot(s/t,i,r,n,h);e.push(a)}a+=2}return e}_getCatmullRomPoints(t=this.divisions,e=.168,s=.168){const i=[];if(this.points.length<=2)return this.points;let r;return this.points.forEach((n,h)=>{if(0===h)r=n;else{const[a,o]=function(t,e,s=.168,i=.168){if(e<1?it.sub(t[1],t[0]).scale(s).add(t[0]):it.sub(t[e+1],t[e-1]).scale(s).add(t[e]),e>t.length-3){const e=t.length-1;rt.sub(t[e-1],t[e]).scale(i).add(t[e])}else rt.sub(t[e],t[e+2]).scale(i).add(t[e+1]);return[it.clone(),rt.clone()]}(this.points,h-1,e,s),l=new lt({points:[r,a,o,n],type:et});i.pop(),i.push(...l.getPoints(t)),r=n}}),i}getPoints(t=this.divisions,e=.168,s=.168){const i=this.type;return i===st?this._getQuadraticBezierPoints(t):i===et?this._getCubicBezierPoints(t):i===tt?this._getCatmullRomPoints(t,e,s):this.points}}lt.CATMULLROM=tt,lt.CUBICBEZIER=et,lt.QUADRATICBEZIER=st,Int8Array,Uint8Array,Int16Array,Uint16Array,Uint32Array,Float32Array,Uint8Array,Uint8Array,Uint8Array}};
|
package/dist/styles.css
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
[data-bmx-chat-bot-root]{--bmx-font-family: "Darker Grotesque", system-ui, -apple-system, Segoe UI, Roboto, Ubuntu, Cantarell, Noto Sans, Helvetica Neue, Arial, sans-serif;--bmx-color-accent: #0153ff;--bmx-color-bg: #060911;--bmx-color-panel: #090d18;--bmx-color-border: #1f2937;--bmx-color-text: #e5e7eb;--bmx-color-title: #f3f4f6;--bmx-color-button-bg: #111827;--bmx-color-user-bubble: #1d4ed8;--bmx-color-input-bg: #0b1220}.orb-container{position:relative;z-index:0;width:100%;height:100%;display:flex;align-items:center;justify-content:center}.orb-container canvas{display:block;width:100% !important;height:100% !important;object-fit:contain}.iridescence-container{width:100%;height:100%}.bmxcb{font-family:var(--bmx-font-family)}.bmxcb__button{cursor:pointer;width:56px;height:56px;border-radius:28px;background:var(--bmx-color-button-bg);color:#fff;border:1px solid var(--bmx-color-bg);box-shadow:0 8px 24px rgba(0,0,0,.3);display:flex;align-items:center;justify-content:center}.bmxcb__orb-button{cursor:pointer;width:60px;height:60px;border:none;border-radius:50%;padding:0;overflow:hidden;background:rgba(0,0,0,0);position:relative;display:flex;align-items:center;justify-content:center;box-shadow:0 8px 24px rgba(0,0,0,.3)}.bmxcb__orb-button .orb-container{width:100%;height:100%;position:relative;display:flex;align-items:center;justify-content:center}.bmxcb__orb-button .orb-container canvas{width:100% !important;height:100% !important;display:block !important;object-fit:contain;border-radius:50%}.bmxcb__panel{position:absolute;right:0;bottom:64px;width:360px;max-width:calc(100vw - 32px);max-height:70vh;min-height:400px;background:var(--bmx-color-bg);color:var(--bmx-color-text);border:1px solid var(--bmx-color-border);border-radius:12px;overflow:hidden;box-shadow:0 16px 48px rgba(0,0,0,.4);display:flex;flex-direction:column}.bmxcb__header{display:flex;align-items:center;justify-content:space-between;padding:6px 12px;font-weight:600;background:var(--bmx-color-panel);color:var(--bmx-color-title);height:45px}.bmxcb__messages{flex:1;overflow-y:auto;padding:12px;display:flex;flex-direction:column;gap:8px;scroll-behavior:smooth;max-height:400px;position:relative}.bmxcb__messages::-webkit-scrollbar{width:6px}.bmxcb__messages::-webkit-scrollbar-track{background:rgba(0,0,0,0)}.bmxcb__messages::-webkit-scrollbar-thumb{background:var(--bmx-color-border);border-radius:3px}.bmxcb__messages::-webkit-scrollbar-thumb:hover{background:var(--bmx-color-text)}.bmxcb__scroll-to-bottom{position:sticky;bottom:12px;width:32px;height:32px;border-radius:50%;background:var(--bmx-color-accent);color:#fff;border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:16px;box-shadow:0 2px 8px rgba(0,0,0,.2);transition:all .2s ease;z-index:10;margin:0 auto;margin-top:auto;flex-shrink:0}.bmxcb__scroll-to-bottom:hover{background:#0041cc;transform:scale(1.1)}.bmxcb__message{margin:8px 0}.bmxcb__message--user{display:flex;justify-content:flex-end;align-self:flex-end;max-width:80%}.bmxcb__message--assistant{display:flex;align-items:flex-start;gap:12px;justify-content:flex-start;align-self:flex-start;max-width:100%}.bmxcb__message-avatar{flex-shrink:0;margin-top:4px}.bmxcb__avatar{width:32px;height:32px;border-radius:50%;background:var(--bmx-color-accent);display:flex;align-items:center;justify-content:center;box-shadow:0 2px 8px rgba(0,0,0,.1);overflow:hidden;border:.5px solid var(--bmx-color-border)}.bmxcb__avatar-icon{font-size:16px;line-height:1}.bmxcb__message-content{min-width:0;position:relative}.bmxcb__typing{display:inline-flex;align-items:center;gap:4px;background:var(--bmx-color-panel);border:1px solid var(--bmx-color-border);border-radius:12px;padding:6px 10px}.bmxcb__dot{width:6px;height:6px;border-radius:50%;background:var(--bmx-color-text);opacity:.4}.bmxcb__message-text{padding:6px 10px;border-radius:10px;font-size:15px;line-height:1.4;word-wrap:break-word;overflow-wrap:break-word;background:var(--bmx-color-accent);color:#fff;text-align:right;display:inline-block;max-width:100%;min-width:0}.bmxcb__message-time{margin-top:4px;font-size:12px;color:#9ca3af}.bmxcb__message-time--user{text-align:right}.bmxcb__input{flex:1;color:var(--bmx-color-text);background:var(--bmx-color-input-bg);border:1px solid var(--bmx-color-border);border-radius:8px;padding:10px 10px;resize:none;font-family:var(--bmx-font-family);font-size:16px;font-weight:400;line-height:12px}.bmxcb__input:focus{outline:none;border-color:var(--bmx-color-accent);box-shadow:0 0 0 2px rgba(1,83,255,.2)}.bmxcb__inputRow{padding:10px;border-top:1px solid var(--bmx-color-border);background:var(--bmx-color-panel);display:flex;align-items:center;gap:8px}.bmxcb__send{background:var(--bmx-color-accent);color:#fff;padding:8px;border-radius:8px;cursor:pointer;border:none;display:flex;align-items:center;justify-content:center;min-width:36px;height:36px;line-height:10px}.bmxcb__send:disabled{cursor:not-allowed;opacity:.6}.bmxcb__close{cursor:pointer;color:var(--bmx-color-text);padding:6px;background:none;border:none;border-radius:4px;display:flex;align-items:center;justify-content:center;transition:background-color .2s ease}.bmxcb__close:hover{background-color:hsla(0,0%,100%,.1)}.bmxcb__header-actions{display:flex;align-items:center;gap:4px}.bmxcb__settings-button{cursor:pointer;color:var(--bmx-color-text);padding:6px;background:none;border:none;border-radius:4px;display:flex;align-items:center;justify-content:center;transition:background-color .2s ease}.bmxcb__settings-button:hover{background-color:hsla(0,0%,100%,.1)}.bmxcb__settings-panel{flex:1;display:flex;flex-direction:column;overflow:hidden}.bmxcb__settings-header{display:flex;align-items:center;justify-content:space-between;padding:6px 24px;border-bottom:1px solid var(--bmx-color-border);background:var(--bmx-color-panel);height:45px}.bmxcb__settings-title{display:flex;align-items:center;gap:8px;font-weight:600;color:var(--bmx-color-title);font-size:16px}.bmxcb__settings-close{cursor:pointer;color:var(--bmx-color-text);padding:6px;background:none;border:none;border-radius:4px;display:flex;align-items:center;justify-content:center;transition:background-color .2s ease}.bmxcb__settings-close:hover{background-color:hsla(0,0%,100%,.1)}.bmxcb__settings-content{flex:1;overflow-y:auto;padding:20px;display:flex;flex-direction:column;gap:24px;justify-content:space-between}.bmxcb__settings-section{display:flex;flex-direction:column;gap:16px}.bmxcb__settings-section-title{display:flex;align-items:center;gap:8px;font-weight:600;color:var(--bmx-color-title);font-size:14px;margin:0}.bmxcb__settings-group{display:flex;flex-direction:column;gap:8px}.bmxcb__settings-label{font-size:14px;color:var(--bmx-color-text);font-weight:500}.bmxcb__settings-slider{width:100%;height:6px;border-radius:3px;background:var(--bmx-color-border);outline:none;cursor:pointer;appearance:none}.bmxcb__settings-slider::-webkit-slider-thumb{appearance:none;width:18px;height:18px;border-radius:50%;background:var(--bmx-color-accent);cursor:pointer;border:2px solid var(--bmx-color-bg);box-shadow:0 2px 4px rgba(0,0,0,.2)}.bmxcb__settings-slider::-moz-range-thumb{width:18px;height:18px;border-radius:50%;background:var(--bmx-color-accent);cursor:pointer;border:2px solid var(--bmx-color-bg);box-shadow:0 2px 4px rgba(0,0,0,.2)}.bmxcb__settings-checkbox-label{display:flex;align-items:center;gap:8px;cursor:pointer;font-size:14px;color:var(--bmx-color-text)}.bmxcb__settings-checkbox{width:16px;height:16px;accent-color:var(--bmx-color-accent);cursor:pointer}.bmxcb__settings-clear-button{display:flex;align-items:center;justify-content:center;gap:8px;padding:8px 16px;background:#dc2626;color:#fff;border:none;border-radius:8px;cursor:pointer;font-size:16px;font-weight:500;line-height:10px;transition:all .2s ease;font-family:var(--bmx-font-family)}.bmxcb__settings-clear-button:hover{background:#b91c1c;transform:translateY(-1px)}.bmxcb__settings-clear-button:active{transform:translateY(0)}.bmxcb__markdown{line-height:1.4;color:inherit;font-size:inherit;font-family:inherit;position:relative;z-index:1}.bmxcb__markdown h1,.bmxcb__markdown h2,.bmxcb__markdown h3,.bmxcb__markdown h4,.bmxcb__markdown h5,.bmxcb__markdown h6{margin:.5em 0 .25em 0;font-weight:600;line-height:1.2;color:var(--bmx-color-text)}.bmxcb__markdown h1{font-size:1.2em}.bmxcb__markdown h2{font-size:1.15em}.bmxcb__markdown h3{font-size:1.1em}.bmxcb__markdown h4,.bmxcb__markdown h5,.bmxcb__markdown h6{font-size:1.05em}.bmxcb__markdown p{margin:.4em 0;line-height:1.4}.bmxcb__markdown ul,.bmxcb__markdown ol{margin:.5em 0;padding-left:1.2em}.bmxcb__markdown li{margin:.2em 0;line-height:1.4}.bmxcb__markdown pre{background:rgba(0,0,0,.05);border:1px solid var(--bmx-color-border);border-radius:6px;padding:.75em;margin:.75em 0;overflow-x:auto;font-family:"Monaco","Menlo","Ubuntu Mono",monospace;font-size:.85em;line-height:1.3}.bmxcb__markdown code{background:rgba(0,0,0,.05);border:1px solid var(--bmx-color-border);border-radius:3px;padding:.15em .3em;font-family:"Monaco","Menlo","Ubuntu Mono",monospace;font-size:.85em;color:var(--bmx-color-accent)}.bmxcb__markdown pre code{background:none;border:none;padding:0;color:inherit}.bmxcb__markdown blockquote{margin:.75em 0;padding:.5em .75em;border-left:3px solid var(--bmx-color-accent);background:rgba(0,0,0,.02);border-radius:0 4px 4px 0;font-style:italic}.bmxcb__markdown table{width:100%;border-collapse:collapse;margin:.75em 0;border:1px solid var(--bmx-color-border);border-radius:6px;overflow:hidden}.bmxcb__markdown th,.bmxcb__markdown td{padding:.5em .75em;text-align:left;border-bottom:1px solid var(--bmx-color-border)}.bmxcb__markdown th{background:rgba(0,0,0,.02);font-weight:600}.bmxcb__markdown tr:last-child td{border-bottom:none}.bmxcb__markdown a{color:var(--bmx-color-accent);text-decoration:none;border-bottom:1px solid rgba(0,0,0,0);transition:border-color .2s ease}.bmxcb__markdown a:hover{border-bottom-color:var(--bmx-color-accent)}.bmxcb__markdown hr{border:none;height:1px;background:var(--bmx-color-border);margin:1em 0}.bmxcb__markdown strong{font-weight:600}.bmxcb__markdown em{font-style:italic}.bmxcb__markdown input[type=checkbox]{margin-right:.5em;accent-color:var(--bmx-color-accent)}.bmxcb__markdown .hljs{background:rgba(0,0,0,0) !important}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"styles.css","mappings":";;;AAAA;EACE;2EAAA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AACF;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;AACF;AACE;EACE;EACA;EACA;EACA;AACJ;;AAGA;EACE;EACA;AAAF;;AAGA;EACE;AAAF;AAEE;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAAJ;AAGE;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AADJ;AAGI;EACE;EACA;EACA;EACA;EACA;EACA;AADN;AAGM;EACE;EACA;EACA;EACA;EACA;AADR;AAME;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAJJ;AAOE;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AALJ;AAQE;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AANJ;AASI;EACE;AAPN;AAUI;EACE;AARN;AAWI;EACE;EACA;AATN;AAYI;EACE;AAVN;AAcE;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAZJ;AAcI;EACE;EACA;AAZN;AAgBE;EACE;AAdJ;AAgBI;EACE;EACA;EACA;EACA;AAdN;AAiBI;EACE;EACA;EACA;EACA;EACA;EACA;AAfN;AAmBE;EACE;EACA;AAjBJ;AAoBE;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAlBJ;AAqBE;EACE;EACA;AAnBJ;AAsBE;EACE;EACA;AApBJ;AAuBE;EACE;EACA;EACA;EACA;EACA;EACA;EACA;AArBJ;AAwBE;EACE;EACA;EACA;EACA;EACA;AAtBJ;AAyBE;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAvBJ;AA0BE;EACE;EACA;EACA;AAxBJ;AA0BI;EACE;AAxBN;AA4BE;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AA1BJ;AA4BI;EACE;EACA;EACA;AA1BN;AA6BI;EACE;EACA;EACA;EACA;EACA;EACA;AA3BN;AA+BE;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AA7BJ;AA+BI;EACE;EACA;AA7BN;AAiCE;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AA/BJ;AAiCI;EACE;AA/BN;AAmCE;EACE;EACA;EACA;AAjCJ;AAqCI;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAnCN;AAqCM;EACE;AAnCR;AAuCI;EACE;EACA;EACA;EACA;AArCN;AAwCI;EACE;EACA;EACA;EACA;EACA;EACA;EACA;AAtCN;AAyCI;EACE;EACA;EACA;EACA;EACA;EACA;AAvCN;AA0CI;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAxCN;AA0CM;EACE;AAxCR;AA4CI;EACE;EACA;EACA;EACA;EACA;EACA;EACA;AA1CN;AA6CI;EACE;EACA;EACA;AA3CN;AA6CM;EACE;EACA;EACA;EACA;EACA;EACA;EACA;AA3CR;AA+CI;EACE;EACA;EACA;AA7CN;AAgDI;EACE;EACA;EACA;AA9CN;AAiDI;EACE;EACA;EACA;EACA;EACA;EACA;EACA;AA/CN;AAiDM;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AA/CR;AAkDM;EACE;EACA;EACA;EACA;EACA;EACA;EACA;AAhDR;AAqDM;EACE;EACA;EACA;EACA;EACA;EACA;AAnDR;AAsDM;EACE;EACA;EACA;EACA;AApDR;AAwDI;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAtDN;AAwDM;EACE;EACA;AAtDR;AAyDM;EACE;AAvDR;AA6DE;EAEE;EACA;EACA;EACA;EACA;EACA;AA5DJ;AA+DI;;;;;;EAME;EACA;EACA;EACA;AA7DN;AAgEI;EACE;AA9DN;AAgEI;EACE;AA9DN;AAgEI;EACE;AA9DN;AAgEI;;;EAGE;AA9DN;AAkEI;EACE;EACA;AAhEN;AAoEI;;EAEE;EACA;AAlEN;AAqEI;EACE;EACA;AAnEN;AAuEI;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AArEN;AAwEI;EACE;EACA;EACA;EACA;EACA;EACA;EACA;AAtEN;AAyEI;EACE;EACA;EACA;EACA;AAvEN;AA2EI;EACE;EACA;EACA;EACA;EACA;EACA;AAzEN;AA6EI;EACE;EACA;EACA;EACA;EACA;EACA;AA3EN;AA8EI;;EAEE;EACA;EACA;AA5EN;AA+EI;EACE;EACA;AA7EN;AAgFI;EACE;AA9EN;AAkFI;EACE;EACA;EACA;EACA;AAhFN;AAkFM;EACE;AAhFR;AAqFI;EACE;EACA;EACA;EACA;AAnFN;AAuFI;EACE;AArFN;AAwFI;EACE;AAtFN;AA0FI;EACE;EACA;AAxFN;AA4FI;EACE;AA1FN,C","sources":["webpack://@bmx-ai/chat-bot/./src/styles.scss"],"sourcesContent":["[data-bmx-chat-bot-root] {\n --bmx-font-family: \"Darker Grotesque\", system-ui, -apple-system, Segoe UI,\n Roboto, Ubuntu, Cantarell, Noto Sans, Helvetica Neue, Arial, sans-serif;\n --bmx-color-accent: #0153ff;\n --bmx-color-bg: #060911;\n --bmx-color-panel: #090d18;\n --bmx-color-border: #1f2937;\n --bmx-color-text: #e5e7eb;\n --bmx-color-title: #f3f4f6;\n --bmx-color-button-bg: #111827;\n --bmx-color-user-bubble: #1d4ed8;\n --bmx-color-input-bg: #0b1220;\n}\n\n.orb-container {\n position: relative;\n z-index: 0;\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n\n canvas {\n display: block;\n width: 100% !important;\n height: 100% !important;\n object-fit: contain;\n }\n}\n\n.iridescence-container {\n width: 100%;\n height: 100%;\n}\n\n.bmxcb {\n font-family: var(--bmx-font-family);\n\n &__button {\n cursor: pointer;\n width: 56px;\n height: 56px;\n border-radius: 28px;\n background: var(--bmx-color-button-bg);\n color: #fff;\n border: 1px solid var(--bmx-color-bg);\n box-shadow: 0 8px 24px rgba(0, 0, 0, 0.3);\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n &__orb-button {\n cursor: pointer;\n width: 60px;\n height: 60px;\n border: none;\n border-radius: 50%;\n padding: 0;\n overflow: hidden;\n background: transparent;\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n box-shadow: 0 8px 24px rgba(0, 0, 0, 0.3);\n\n .orb-container {\n width: 100%;\n height: 100%;\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n\n canvas {\n width: 100% !important;\n height: 100% !important;\n display: block !important;\n object-fit: contain;\n border-radius: 50%;\n }\n }\n }\n\n &__panel {\n position: absolute;\n right: 0;\n bottom: 64px;\n width: 360px;\n max-width: calc(100vw - 32px);\n max-height: 70vh;\n min-height: 400px;\n background: var(--bmx-color-bg);\n color: var(--bmx-color-text);\n border: 1px solid var(--bmx-color-border);\n border-radius: 12px;\n overflow: hidden;\n box-shadow: 0 16px 48px rgba(0, 0, 0, 0.4);\n display: flex;\n flex-direction: column;\n }\n\n &__header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 6px 12px;\n font-weight: 600;\n background: var(--bmx-color-panel);\n color: var(--bmx-color-title);\n height: 45px;\n }\n\n &__messages {\n flex: 1;\n overflow-y: auto;\n padding: 12px;\n display: flex;\n flex-direction: column;\n gap: 8px;\n scroll-behavior: smooth;\n max-height: 400px; // Limit height to ensure scrolling\n position: relative;\n\n // Custom scrollbar styling\n &::-webkit-scrollbar {\n width: 6px;\n }\n\n &::-webkit-scrollbar-track {\n background: transparent;\n }\n\n &::-webkit-scrollbar-thumb {\n background: var(--bmx-color-border);\n border-radius: 3px;\n }\n\n &::-webkit-scrollbar-thumb:hover {\n background: var(--bmx-color-text);\n }\n }\n\n &__scroll-to-bottom {\n position: sticky;\n bottom: 12px;\n width: 32px;\n height: 32px;\n border-radius: 50%;\n background: var(--bmx-color-accent);\n color: #fff;\n border: none;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 16px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);\n transition: all 0.2s ease;\n z-index: 10;\n margin: 0 auto;\n margin-top: auto;\n flex-shrink: 0;\n\n &:hover {\n background: #0041cc;\n transform: scale(1.1);\n }\n }\n\n &__message {\n margin: 8px 0;\n\n &--user {\n display: flex;\n justify-content: flex-end;\n align-self: flex-end;\n max-width: 80%;\n }\n\n &--assistant {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n justify-content: flex-start;\n align-self: flex-start;\n max-width: 100%;\n }\n }\n\n &__message-avatar {\n flex-shrink: 0;\n margin-top: 4px;\n }\n\n &__avatar {\n width: 32px;\n height: 32px;\n border-radius: 50%;\n background: var(--bmx-color-accent);\n display: flex;\n align-items: center;\n justify-content: center;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n overflow: hidden; // ensure canvas is clipped to circle\n border: 0.5px solid var(--bmx-color-border);\n }\n\n &__avatar-icon {\n font-size: 16px;\n line-height: 1;\n }\n\n &__message-content {\n min-width: 0;\n position: relative;\n }\n\n &__typing {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n background: var(--bmx-color-panel);\n border: 1px solid var(--bmx-color-border);\n border-radius: 12px;\n padding: 6px 10px;\n }\n\n &__dot {\n width: 6px;\n height: 6px;\n border-radius: 50%;\n background: var(--bmx-color-text);\n opacity: 0.4;\n }\n\n &__message-text {\n padding: 6px 10px;\n border-radius: 10px;\n font-size: 15px;\n line-height: 1.4;\n word-wrap: break-word;\n overflow-wrap: break-word;\n background: var(--bmx-color-accent);\n color: #fff;\n text-align: right;\n display: inline-block;\n max-width: 100%;\n min-width: 0;\n }\n\n &__message-time {\n margin-top: 4px;\n font-size: 12px;\n color: #9ca3af; // gray-400\n\n &--user {\n text-align: right;\n }\n }\n\n &__input {\n flex: 1;\n color: var(--bmx-color-text);\n background: var(--bmx-color-input-bg);\n border: 1px solid var(--bmx-color-border);\n border-radius: 8px;\n padding: 10px 10px;\n resize: none;\n font-family: var(--bmx-font-family);\n font-size: 16px;\n font-weight: 400;\n line-height: 12px;\n\n &:focus {\n outline: none;\n border-color: var(--bmx-color-accent);\n box-shadow: 0 0 0 2px rgba(1, 83, 255, 0.2);\n }\n\n &Row {\n padding: 10px;\n border-top: 1px solid var(--bmx-color-border);\n background: var(--bmx-color-panel);\n display: flex;\n align-items: center;\n gap: 8px;\n }\n }\n\n &__send {\n background: var(--bmx-color-accent);\n color: #fff;\n padding: 8px;\n border-radius: 8px;\n cursor: pointer;\n border: none;\n display: flex;\n align-items: center;\n justify-content: center;\n min-width: 36px;\n height: 36px;\n line-height: 10px;\n\n &:disabled {\n cursor: not-allowed;\n opacity: 0.6;\n }\n }\n\n &__close {\n cursor: pointer;\n color: var(--bmx-color-text);\n padding: 6px;\n background: none;\n border: none;\n border-radius: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: background-color 0.2s ease;\n\n &:hover {\n background-color: rgba(255, 255, 255, 0.1);\n }\n }\n\n &__header-actions {\n display: flex;\n align-items: center;\n gap: 4px;\n }\n\n &__settings {\n &-button {\n cursor: pointer;\n color: var(--bmx-color-text);\n padding: 6px;\n background: none;\n border: none;\n border-radius: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: background-color 0.2s ease;\n\n &:hover {\n background-color: rgba(255, 255, 255, 0.1);\n }\n }\n\n &-panel {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n }\n\n &-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 6px 24px;\n border-bottom: 1px solid var(--bmx-color-border);\n background: var(--bmx-color-panel);\n height: 45px;\n }\n\n &-title {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n color: var(--bmx-color-title);\n font-size: 16px;\n }\n\n &-close {\n cursor: pointer;\n color: var(--bmx-color-text);\n padding: 6px;\n background: none;\n border: none;\n border-radius: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: background-color 0.2s ease;\n\n &:hover {\n background-color: rgba(255, 255, 255, 0.1);\n }\n }\n\n &-content {\n flex: 1;\n overflow-y: auto;\n padding: 20px;\n display: flex;\n flex-direction: column;\n gap: 24px;\n justify-content: space-between;\n }\n\n &-section {\n display: flex;\n flex-direction: column;\n gap: 16px;\n\n &-title {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n color: var(--bmx-color-title);\n font-size: 14px;\n margin: 0;\n }\n }\n\n &-group {\n display: flex;\n flex-direction: column;\n gap: 8px;\n }\n\n &-label {\n font-size: 14px;\n color: var(--bmx-color-text);\n font-weight: 500;\n }\n\n &-slider {\n width: 100%;\n height: 6px;\n border-radius: 3px;\n background: var(--bmx-color-border);\n outline: none;\n cursor: pointer;\n appearance: none;\n\n &::-webkit-slider-thumb {\n appearance: none;\n width: 18px;\n height: 18px;\n border-radius: 50%;\n background: var(--bmx-color-accent);\n cursor: pointer;\n border: 2px solid var(--bmx-color-bg);\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);\n }\n\n &::-moz-range-thumb {\n width: 18px;\n height: 18px;\n border-radius: 50%;\n background: var(--bmx-color-accent);\n cursor: pointer;\n border: 2px solid var(--bmx-color-bg);\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);\n }\n }\n\n &-checkbox {\n &-label {\n display: flex;\n align-items: center;\n gap: 8px;\n cursor: pointer;\n font-size: 14px;\n color: var(--bmx-color-text);\n }\n\n & {\n width: 16px;\n height: 16px;\n accent-color: var(--bmx-color-accent);\n cursor: pointer;\n }\n }\n\n &-clear-button {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n padding: 8px 16px;\n background: #dc2626;\n color: #fff;\n border: none;\n border-radius: 8px;\n cursor: pointer;\n font-size: 16px;\n font-weight: 500;\n line-height: 10px;\n transition: all 0.2s ease;\n font-family: var(--bmx-font-family);\n\n &:hover {\n background: #b91c1c;\n transform: translateY(-1px);\n }\n\n &:active {\n transform: translateY(0);\n }\n }\n }\n\n // Markdown styles\n &__markdown {\n // Reset and base styles\n line-height: 1.4;\n color: inherit;\n font-size: inherit;\n font-family: inherit;\n position: relative;\n z-index: 1;\n\n // Only style specific markdown elements\n h1,\n h2,\n h3,\n h4,\n h5,\n h6 {\n margin: 0.5em 0 0.25em 0;\n font-weight: 600;\n line-height: 1.2;\n color: var(--bmx-color-text);\n }\n\n h1 {\n font-size: 1.2em;\n }\n h2 {\n font-size: 1.15em;\n }\n h3 {\n font-size: 1.1em;\n }\n h4,\n h5,\n h6 {\n font-size: 1.05em;\n }\n\n // Paragraphs - minimal styling\n p {\n margin: 0.4em 0;\n line-height: 1.4;\n }\n\n // Lists - subtle styling\n ul,\n ol {\n margin: 0.5em 0;\n padding-left: 1.2em;\n }\n\n li {\n margin: 0.2em 0;\n line-height: 1.4;\n }\n\n // Code - only when needed\n pre {\n background: rgba(0, 0, 0, 0.05);\n border: 1px solid var(--bmx-color-border);\n border-radius: 6px;\n padding: 0.75em;\n margin: 0.75em 0;\n overflow-x: auto;\n font-family: \"Monaco\", \"Menlo\", \"Ubuntu Mono\", monospace;\n font-size: 0.85em;\n line-height: 1.3;\n }\n\n code {\n background: rgba(0, 0, 0, 0.05);\n border: 1px solid var(--bmx-color-border);\n border-radius: 3px;\n padding: 0.15em 0.3em;\n font-family: \"Monaco\", \"Menlo\", \"Ubuntu Mono\", monospace;\n font-size: 0.85em;\n color: var(--bmx-color-accent);\n }\n\n pre code {\n background: none;\n border: none;\n padding: 0;\n color: inherit;\n }\n\n // Blockquotes - subtle\n blockquote {\n margin: 0.75em 0;\n padding: 0.5em 0.75em;\n border-left: 3px solid var(--bmx-color-accent);\n background: rgba(0, 0, 0, 0.02);\n border-radius: 0 4px 4px 0;\n font-style: italic;\n }\n\n // Tables - clean and simple\n table {\n width: 100%;\n border-collapse: collapse;\n margin: 0.75em 0;\n border: 1px solid var(--bmx-color-border);\n border-radius: 6px;\n overflow: hidden;\n }\n\n th,\n td {\n padding: 0.5em 0.75em;\n text-align: left;\n border-bottom: 1px solid var(--bmx-color-border);\n }\n\n th {\n background: rgba(0, 0, 0, 0.02);\n font-weight: 600;\n }\n\n tr:last-child td {\n border-bottom: none;\n }\n\n // Links - subtle\n a {\n color: var(--bmx-color-accent);\n text-decoration: none;\n border-bottom: 1px solid transparent;\n transition: border-color 0.2s ease;\n\n &:hover {\n border-bottom-color: var(--bmx-color-accent);\n }\n }\n\n // Horizontal rules\n hr {\n border: none;\n height: 1px;\n background: var(--bmx-color-border);\n margin: 1em 0;\n }\n\n // Text formatting - minimal\n strong {\n font-weight: 600;\n }\n\n em {\n font-style: italic;\n }\n\n // Task lists\n input[type=\"checkbox\"] {\n margin-right: 0.5em;\n accent-color: var(--bmx-color-accent);\n }\n\n // Syntax highlighting - minimal\n .hljs {\n background: transparent !important;\n }\n }\n}\n"],"names":[],"sourceRoot":""}
|
package/dist/styles.js
ADDED
File without changes
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"styles.js","mappings":"SAAA;SACA;;;;;UCDA;UACA;UACA;UACA,uDAAuD,iBAAiB;UACxE;UACA,gDAAgD,aAAa;UAC7D,E;;;;;;;;;ACNA","sources":["webpack://@bmx-ai/chat-bot/webpack/bootstrap","webpack://@bmx-ai/chat-bot/webpack/runtime/make namespace object","webpack://@bmx-ai/chat-bot/./src/styles.scss?7346"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// extracted by mini-css-extract-plugin\nexport {};"],"names":[],"sourceRoot":""}
|
package/dist/types.d.ts
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
import type { ReactNode } from "react";
|
2
|
+
export interface BmxChatBotProps {
|
3
|
+
api: BmxChatApiAdapter;
|
4
|
+
projectId: string;
|
5
|
+
zIndex?: number;
|
6
|
+
storage?: "local" | "none";
|
7
|
+
storageKey?: string;
|
8
|
+
placeholder?: string;
|
9
|
+
title?: string;
|
10
|
+
children?: ReactNode;
|
11
|
+
}
|
12
|
+
export declare enum ChatRole {
|
13
|
+
USER = "user",
|
14
|
+
ASSISTANT = "assistant",
|
15
|
+
SYSTEM = "system"
|
16
|
+
}
|
17
|
+
export type ChatRoleType = "user" | "assistant" | "system";
|
18
|
+
export interface ChatMessage {
|
19
|
+
id: string;
|
20
|
+
role: ChatRoleType;
|
21
|
+
content: string;
|
22
|
+
createdAt?: number;
|
23
|
+
}
|
24
|
+
export interface SendOptions {
|
25
|
+
projectId?: string;
|
26
|
+
signal?: AbortSignal;
|
27
|
+
}
|
28
|
+
export interface BmxChatApiAdapter {
|
29
|
+
sendMessage: (history: ChatMessage[], input: string, options?: SendOptions) => Promise<ChatMessage>;
|
30
|
+
}
|
@@ -0,0 +1,43 @@
|
|
1
|
+
export interface LoggerConfig {
|
2
|
+
enabled: boolean;
|
3
|
+
prefix?: string;
|
4
|
+
showTimestamp?: boolean;
|
5
|
+
}
|
6
|
+
/**
|
7
|
+
* Logger class for logging messages.
|
8
|
+
*/
|
9
|
+
export declare class Logger {
|
10
|
+
private config;
|
11
|
+
/**
|
12
|
+
* Constructor for the Logger class.
|
13
|
+
* @param {LoggerConfig} config - The configuration for the logger.
|
14
|
+
*/
|
15
|
+
constructor(config: LoggerConfig);
|
16
|
+
/**
|
17
|
+
* Format a message with a timestamp and prefix.
|
18
|
+
* @param {string} level - The level of the message.
|
19
|
+
* @param {string} message - The message to log.
|
20
|
+
* @param {any[]} args - The arguments to log.
|
21
|
+
*/
|
22
|
+
private formatMessage;
|
23
|
+
debug(message: string, ...args: any[]): void;
|
24
|
+
info(message: string, ...args: any[]): void;
|
25
|
+
warn(message: string, ...args: any[]): void;
|
26
|
+
error(message: string, ...args: any[]): void;
|
27
|
+
success(message: string, ...args: any[]): void;
|
28
|
+
ragQuery(query: string): void;
|
29
|
+
ragMatches(count: number, scores?: Array<{
|
30
|
+
id: string;
|
31
|
+
score: number;
|
32
|
+
}>): void;
|
33
|
+
ragContent(preview: string): void;
|
34
|
+
ragSystemPrompt(prompt: string): void;
|
35
|
+
ragMessages(messages: Array<{
|
36
|
+
role: string;
|
37
|
+
content: string;
|
38
|
+
}>): void;
|
39
|
+
ragResponse(response: string): void;
|
40
|
+
ragError(error: Error): void;
|
41
|
+
}
|
42
|
+
export declare const defaultLogger: Logger;
|
43
|
+
export declare const devLogger: Logger;
|