diff --git a/patches/aframe-htmlmesh@2.3.0.patch b/patches/aframe-htmlmesh@2.3.0.patch
index 2d66bd0..61af21e 100644
--- a/patches/aframe-htmlmesh@2.3.0.patch
+++ b/patches/aframe-htmlmesh@2.3.0.patch
@@ -1,14 +1,130 @@
+diff --git a/build/aframe-html.js b/build/aframe-html.js
+index 5554a2690ec3d78acce336fa9c63ce50d0a804d0..8c4631ec7d357e07ecd325d35a59daee63e54ebd 100644
+--- a/build/aframe-html.js
++++ b/build/aframe-html.js
+@@ -190,7 +190,43 @@
+
+ }
+
+- function drawText( style, x, y, string ) {
++ function segmentWords(text) {
++ try {
++ const segmenter = new Intl.Segmenter(void 0, {
++ granularity: 'word'
++ });
++ return Array.from(segmenter.segment(text)).map((segment) => segment.segment);
++ } catch (error) {
++ console.error('Error segmenting text:', error);
++ return text.split( " " );
++ }
++ }
++
++ function getLines( ctx, text, maxWidth ) {
++ const words = segmentWords(text);
++
++
++ const lines = [];
++ let currentLine = words[0];
++
++ for (let i = 1; i < words.length; i++) {
++
++ const word = words[i];
++ const width = ctx.measureText( currentLine + " " + word ).width;
++ const safeMaxWith = width * 0.5; // for JP
++ if ( width < safeMaxWith ) {
++ currentLine += " " + word;
++ } else {
++ lines.push( currentLine );
++ console.log('currentLine', currentLine);
++ currentLine = word;
++ }
++ }
++ lines.push(currentLine);
++ return lines;
++ }
++
++ function drawText( style, x, y, string, maxWidth ) {
+
+ if ( string !== '' ) {
+
+@@ -203,7 +239,15 @@
+ context.font = style.fontWeight + ' ' + style.fontSize + ' ' + style.fontFamily;
+ context.textBaseline = 'top';
+ context.fillStyle = style.color;
+- context.fillText( string, x, y + parseFloat( style.fontSize ) * 0.1 );
++
++ if ( !maxWidth ) {
++ context.fillText( string, x, y + parseFloat( style.fontSize ) * 0.1 );
++ } else {
++ const lines = getLines(context, string);
++ lines.forEach(function(line, i) {
++ context.fillText( line, x, y + parseFloat( style.fontSize ) * 0.1 + i * parseFloat( style.fontSize ) * 1.3 );
++ });
++ }
+
+ }
+
+@@ -266,8 +310,7 @@
+ y = rect.top - offset.top - 0.5;
+ width = rect.width;
+ height = rect.height;
+-
+- drawText( style, x, y, element.nodeValue.trim() );
++ drawText( style, x, y, element.nodeValue.trim(), maxWith );
+
+ } else if ( element instanceof HTMLCanvasElement ) {
+
+diff --git a/build/aframe-html.js.map b/build/aframe-html.js.map
+index d970ddde11778258a2a8efc2ce4b710fd4f8a2e6..5cd6c3623306a8f8369ae8bd2a9be40085b0735a 100644
+--- a/build/aframe-html.js.map
++++ b/build/aframe-html.js.map
+@@ -1 +1 @@
+-{"version":3,"file":"aframe-html.js","sources":["../src/HTMLMesh.js","../src/aframe-html.js"],"sourcesContent":["// This is a copy of https://github.com/mrdoob/three.js/blob/0403020848c26a9605eb91c99a949111ad4a532e/examples/jsm/interactive/HTMLMesh.js\n// with the following changes:\n// - Keep compatibility with three r147 aframe 1.4.2, still using \"this.encoding = sRGBEncoding\", otherwise using \"this.colorSpace = SRGBColorSpace;\"\n// - window.dispatchEvent line commented, see the TODO below.\n// Look at https://github.com/mrdoob/three.js/commits/dev/examples/jsm/interactive/HTMLMesh.js\n// to see if there are other changes that can be retrieved here.\nimport {\n\tCanvasTexture,\n\tLinearFilter,\n\tMesh,\n\tMeshBasicMaterial,\n\tPlaneGeometry,\n\tSRGBColorSpace,\n\tsRGBEncoding,\n\tColor\n} from 'three';\n\nclass HTMLMesh extends Mesh {\n\n\tconstructor( dom ) {\n\n\t\tconst texture = new HTMLTexture( dom );\n\n\t\tconst geometry = new PlaneGeometry( texture.image.width * 0.001, texture.image.height * 0.001 );\n\t\tconst material = new MeshBasicMaterial( { map: texture, toneMapped: false, transparent: true } );\n\n\t\tsuper( geometry, material );\n\n\t\tfunction onEvent( event ) {\n\n\t\t\tmaterial.map.dispatchDOMEvent( event );\n\n\t\t}\n\n\t\tthis.addEventListener( 'mousedown', onEvent );\n\t\tthis.addEventListener( 'mousemove', onEvent );\n\t\tthis.addEventListener( 'mouseup', onEvent );\n\t\tthis.addEventListener( 'click', onEvent );\n\n\t\tthis.dispose = function () {\n\n\t\t\tgeometry.dispose();\n\t\t\tmaterial.dispose();\n\n\t\t\tmaterial.map.dispose();\n\n\t\t\tcanvases.delete( dom );\n\n\t\t\tthis.removeEventListener( 'mousedown', onEvent );\n\t\t\tthis.removeEventListener( 'mousemove', onEvent );\n\t\t\tthis.removeEventListener( 'mouseup', onEvent );\n\t\t\tthis.removeEventListener( 'click', onEvent );\n\n\t\t};\n\n\t}\n\n}\n\nclass HTMLTexture extends CanvasTexture {\n\n\tconstructor( dom ) {\n\n\t\tsuper( html2canvas( dom ) );\n\n\t\tthis.dom = dom;\n\n\t\tthis.anisotropy = 16;\n\t\tif ( THREE.REVISION === '147' ) { // Keep compatibility with aframe 1.4.2\n\n\t\t\tthis.encoding = sRGBEncoding;\n\n\t\t} else {\n\n\t\t\tthis.colorSpace = SRGBColorSpace;\n\n\t\t}\n\n\t\tthis.minFilter = LinearFilter;\n\t\tthis.magFilter = LinearFilter;\n\n\t\t// Create an observer on the DOM, and run html2canvas update in the next loop\n\t\tconst observer = new MutationObserver( () => {\n\n\t\t\tif ( ! this.scheduleUpdate ) {\n\n\t\t\t\t// ideally should use xr.requestAnimationFrame, here setTimeout to avoid passing the renderer\n\t\t\t\tthis.scheduleUpdate = setTimeout( () => this.update(), 16 );\n\n\t\t\t}\n\n\t\t} );\n\n\t\tconst config = { attributes: true, childList: true, subtree: true, characterData: true };\n\t\tobserver.observe( dom, config );\n\n\t\tthis.observer = observer;\n\n\t}\n\n\tdispatchDOMEvent( event ) {\n\n\t\tif ( event.data ) {\n\n\t\t\thtmlevent( this.dom, event.type, event.data.x, event.data.y );\n\n\t\t}\n\n\t}\n\n\tupdate() {\n\n\t\tthis.image = html2canvas( this.dom );\n\t\tthis.needsUpdate = true;\n\n\t\tthis.scheduleUpdate = null;\n\n\t}\n\n\tdispose() {\n\n\t\tif ( this.observer ) {\n\n\t\t\tthis.observer.disconnect();\n\n\t\t}\n\n\t\tthis.scheduleUpdate = clearTimeout( this.scheduleUpdate );\n\n\t\tsuper.dispose();\n\n\t}\n\n}\n\n\n//\n\nconst canvases = new WeakMap();\n\nfunction html2canvas( element ) {\n\n\tconst range = document.createRange();\n\tconst color = new Color();\n\n\tfunction Clipper( context ) {\n\n\t\tconst clips = [];\n\t\tlet isClipping = false;\n\n\t\tfunction doClip() {\n\n\t\t\tif ( isClipping ) {\n\n\t\t\t\tisClipping = false;\n\t\t\t\tcontext.restore();\n\n\t\t\t}\n\n\t\t\tif ( clips.length === 0 ) return;\n\n\t\t\tlet minX = - Infinity, minY = - Infinity;\n\t\t\tlet maxX = Infinity, maxY = Infinity;\n\n\t\t\tfor ( let i = 0; i < clips.length; i ++ ) {\n\n\t\t\t\tconst clip = clips[ i ];\n\n\t\t\t\tminX = Math.max( minX, clip.x );\n\t\t\t\tminY = Math.max( minY, clip.y );\n\t\t\t\tmaxX = Math.min( maxX, clip.x + clip.width );\n\t\t\t\tmaxY = Math.min( maxY, clip.y + clip.height );\n\n\t\t\t}\n\n\t\t\tcontext.save();\n\t\t\tcontext.beginPath();\n\t\t\tcontext.rect( minX, minY, maxX - minX, maxY - minY );\n\t\t\tcontext.clip();\n\n\t\t\tisClipping = true;\n\n\t\t}\n\n\t\treturn {\n\n\t\t\tadd: function ( clip ) {\n\n\t\t\t\tclips.push( clip );\n\t\t\t\tdoClip();\n\n\t\t\t},\n\n\t\t\tremove: function () {\n\n\t\t\t\tclips.pop();\n\t\t\t\tdoClip();\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\tfunction drawText( style, x, y, string ) {\n\n\t\tif ( string !== '' ) {\n\n\t\t\tif ( style.textTransform === 'uppercase' ) {\n\n\t\t\t\tstring = string.toUpperCase();\n\n\t\t\t}\n\n\t\t\tcontext.font = style.fontWeight + ' ' + style.fontSize + ' ' + style.fontFamily;\n\t\t\tcontext.textBaseline = 'top';\n\t\t\tcontext.fillStyle = style.color;\n\t\t\tcontext.fillText( string, x, y + parseFloat( style.fontSize ) * 0.1 );\n\n\t\t}\n\n\t}\n\n\tfunction buildRectPath( x, y, w, h, r ) {\n\n\t\tif ( w < 2 * r ) r = w / 2;\n\t\tif ( h < 2 * r ) r = h / 2;\n\n\t\tcontext.beginPath();\n\t\tcontext.moveTo( x + r, y );\n\t\tcontext.arcTo( x + w, y, x + w, y + h, r );\n\t\tcontext.arcTo( x + w, y + h, x, y + h, r );\n\t\tcontext.arcTo( x, y + h, x, y, r );\n\t\tcontext.arcTo( x, y, x + w, y, r );\n\t\tcontext.closePath();\n\n\t}\n\n\tfunction drawBorder( style, which, x, y, width, height ) {\n\n\t\tconst borderWidth = style[ which + 'Width' ];\n\t\tconst borderStyle = style[ which + 'Style' ];\n\t\tconst borderColor = style[ which + 'Color' ];\n\n\t\tif ( borderWidth !== '0px' && borderStyle !== 'none' && borderColor !== 'transparent' && borderColor !== 'rgba(0, 0, 0, 0)' ) {\n\n\t\t\tcontext.strokeStyle = borderColor;\n\t\t\tcontext.lineWidth = parseFloat( borderWidth );\n\t\t\tcontext.beginPath();\n\t\t\tcontext.moveTo( x, y );\n\t\t\tcontext.lineTo( x + width, y + height );\n\t\t\tcontext.stroke();\n\n\t\t}\n\n\t}\n\n\tfunction drawElement( element, style ) {\n\n\t\t// Do not render invisible elements, comments and scripts.\n\t\tif ( element.nodeType === Node.COMMENT_NODE || element.nodeName === 'SCRIPT' || ( element.style && element.style.display === 'none' ) ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tlet x = 0, y = 0, width = 0, height = 0;\n\n\t\tif ( element.nodeType === Node.TEXT_NODE ) {\n\n\t\t\t// text\n\n\t\t\trange.selectNode( element );\n\n\t\t\tconst rect = range.getBoundingClientRect();\n\n\t\t\tx = rect.left - offset.left - 0.5;\n\t\t\ty = rect.top - offset.top - 0.5;\n\t\t\twidth = rect.width;\n\t\t\theight = rect.height;\n\n\t\t\tdrawText( style, x, y, element.nodeValue.trim() );\n\n\t\t} else if ( element instanceof HTMLCanvasElement ) {\n\n\t\t\t// Canvas element\n\n\t\t\tconst rect = element.getBoundingClientRect();\n\n\t\t\tx = rect.left - offset.left - 0.5;\n\t\t\ty = rect.top - offset.top - 0.5;\n\n\t\t context.save();\n\t\t\tconst dpr = window.devicePixelRatio;\n\t\t\tcontext.scale( 1 / dpr, 1 / dpr );\n\t\t\tcontext.drawImage( element, x, y );\n\t\t\tcontext.restore();\n\n\t\t} else if ( element instanceof HTMLImageElement ) {\n\n\t\t\tconst rect = element.getBoundingClientRect();\n\n\t\t\tx = rect.left - offset.left - 0.5;\n\t\t\ty = rect.top - offset.top - 0.5;\n\t\t\twidth = rect.width;\n\t\t\theight = rect.height;\n\n\t\t\tcontext.drawImage( element, x, y, width, height );\n\n\t\t} else {\n\n\t\t\tconst rect = element.getBoundingClientRect();\n\n\t\t\tx = rect.left - offset.left - 0.5;\n\t\t\ty = rect.top - offset.top - 0.5;\n\t\t\twidth = rect.width;\n\t\t\theight = rect.height;\n\n\t\t\tstyle = window.getComputedStyle( element );\n\n\t\t\t// Get the border of the element used for fill and border\n\n\t\t\tbuildRectPath( x, y, width, height, parseFloat( style.borderRadius ) );\n\n\t\t\tconst backgroundColor = style.backgroundColor;\n\n\t\t\tif ( backgroundColor !== 'transparent' && backgroundColor !== 'rgba(0, 0, 0, 0)' ) {\n\n\t\t\t\tcontext.fillStyle = backgroundColor;\n\t\t\t\tcontext.fill();\n\n\t\t\t}\n\n\t\t\t// If all the borders match then stroke the round rectangle\n\n\t\t\tconst borders = [ 'borderTop', 'borderLeft', 'borderBottom', 'borderRight' ];\n\n\t\t\tlet match = true;\n\t\t\tlet prevBorder = null;\n\n\t\t\tfor ( const border of borders ) {\n\n\t\t\t\tif ( prevBorder !== null ) {\n\n\t\t\t\t\tmatch = ( style[ border + 'Width' ] === style[ prevBorder + 'Width' ] ) &&\n\t\t\t\t\t( style[ border + 'Color' ] === style[ prevBorder + 'Color' ] ) &&\n\t\t\t\t\t( style[ border + 'Style' ] === style[ prevBorder + 'Style' ] );\n\n\t\t\t\t}\n\n\t\t\t\tif ( match === false ) break;\n\n\t\t\t\tprevBorder = border;\n\n\t\t\t}\n\n\t\t\tif ( match === true ) {\n\n\t\t\t\t// They all match so stroke the rectangle from before allows for border-radius\n\n\t\t\t\tconst width = parseFloat( style.borderTopWidth );\n\n\t\t\t\tif ( style.borderTopWidth !== '0px' && style.borderTopStyle !== 'none' && style.borderTopColor !== 'transparent' && style.borderTopColor !== 'rgba(0, 0, 0, 0)' ) {\n\n\t\t\t\t\tcontext.strokeStyle = style.borderTopColor;\n\t\t\t\t\tcontext.lineWidth = width;\n\t\t\t\t\tcontext.stroke();\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// Otherwise draw individual borders\n\n\t\t\t\tdrawBorder( style, 'borderTop', x, y, width, 0 );\n\t\t\t\tdrawBorder( style, 'borderLeft', x, y, 0, height );\n\t\t\t\tdrawBorder( style, 'borderBottom', x, y + height, width, 0 );\n\t\t\t\tdrawBorder( style, 'borderRight', x + width, y, 0, height );\n\n\t\t\t}\n\n\t\t\tif ( element instanceof HTMLInputElement ) {\n\n\t\t\t\tlet accentColor = style.accentColor;\n\n\t\t\t\tif ( accentColor === undefined || accentColor === 'auto' ) accentColor = style.color;\n\n\t\t\t\tcolor.set( accentColor );\n\n\t\t\t\tconst luminance = Math.sqrt( 0.299 * ( color.r ** 2 ) + 0.587 * ( color.g ** 2 ) + 0.114 * ( color.b ** 2 ) );\n\t\t\t\tconst accentTextColor = luminance < 0.5 ? 'white' : '#111111';\n\n\t\t\t\tif ( element.type === 'radio' ) {\n\n\t\t\t\t\tbuildRectPath( x, y, width, height, height );\n\n\t\t\t\t\tcontext.fillStyle = 'white';\n\t\t\t\t\tcontext.strokeStyle = accentColor;\n\t\t\t\t\tcontext.lineWidth = 1;\n\t\t\t\t\tcontext.fill();\n\t\t\t\t\tcontext.stroke();\n\n\t\t\t\t\tif ( element.checked ) {\n\n\t\t\t\t\t\tbuildRectPath( x + 2, y + 2, width - 4, height - 4, height );\n\n\t\t\t\t\t\tcontext.fillStyle = accentColor;\n\t\t\t\t\t\tcontext.strokeStyle = accentTextColor;\n\t\t\t\t\t\tcontext.lineWidth = 2;\n\t\t\t\t\t\tcontext.fill();\n\t\t\t\t\t\tcontext.stroke();\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( element.type === 'checkbox' ) {\n\n\t\t\t\t\tbuildRectPath( x, y, width, height, 2 );\n\n\t\t\t\t\tcontext.fillStyle = element.checked ? accentColor : 'white';\n\t\t\t\t\tcontext.strokeStyle = element.checked ? accentTextColor : accentColor;\n\t\t\t\t\tcontext.lineWidth = 1;\n\t\t\t\t\tcontext.stroke();\n\t\t\t\t\tcontext.fill();\n\n\t\t\t\t\tif ( element.checked ) {\n\n\t\t\t\t\t\tconst currentTextAlign = context.textAlign;\n\n\t\t\t\t\t\tcontext.textAlign = 'center';\n\n\t\t\t\t\t\tconst properties = {\n\t\t\t\t\t\t\tcolor: accentTextColor,\n\t\t\t\t\t\t\tfontFamily: style.fontFamily,\n\t\t\t\t\t\t\tfontSize: height + 'px',\n\t\t\t\t\t\t\tfontWeight: 'bold'\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tdrawText( properties, x + ( width / 2 ), y, '✔' );\n\n\t\t\t\t\t\tcontext.textAlign = currentTextAlign;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( element.type === 'range' ) {\n\n\t\t\t\t\tconst [ min, max, value ] = [ 'min', 'max', 'value' ].map( property => parseFloat( element[ property ] ) );\n\t\t\t\t\tconst position = ( ( value - min ) / ( max - min ) ) * ( width - height );\n\n\t\t\t\t\tbuildRectPath( x, y + ( height / 4 ), width, height / 2, height / 4 );\n\t\t\t\t\tcontext.fillStyle = accentTextColor;\n\t\t\t\t\tcontext.strokeStyle = accentColor;\n\t\t\t\t\tcontext.lineWidth = 1;\n\t\t\t\t\tcontext.fill();\n\t\t\t\t\tcontext.stroke();\n\n\t\t\t\t\tbuildRectPath( x, y + ( height / 4 ), position + ( height / 2 ), height / 2, height / 4 );\n\t\t\t\t\tcontext.fillStyle = accentColor;\n\t\t\t\t\tcontext.fill();\n\n\t\t\t\t\tbuildRectPath( x + position, y, height, height, height / 2 );\n\t\t\t\t\tcontext.fillStyle = accentColor;\n\t\t\t\t\tcontext.fill();\n\n\t\t\t\t}\n\n\t\t\t\tif ( element.type === 'color' || element.type === 'text' || element.type === 'number' ) {\n\n\t\t\t\t\tclipper.add( { x: x, y: y, width: width, height: height } );\n\n\t\t\t\t\tdrawText( style, x + parseInt( style.paddingLeft ), y + parseInt( style.paddingTop ), element.value );\n\n\t\t\t\t\tclipper.remove();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t/*\n\t\t// debug\n\t\tcontext.strokeStyle = '#' + Math.random().toString( 16 ).slice( - 3 );\n\t\tcontext.strokeRect( x - 0.5, y - 0.5, width + 1, height + 1 );\n\t\t*/\n\n\t\tconst isClipping = style.overflow === 'auto' || style.overflow === 'hidden';\n\n\t\tif ( isClipping ) clipper.add( { x: x, y: y, width: width, height: height } );\n\n\t\tfor ( let i = 0; i < element.childNodes.length; i ++ ) {\n\n\t\t\tdrawElement( element.childNodes[ i ], style );\n\n\t\t}\n\n\t\tif ( isClipping ) clipper.remove();\n\n\t}\n\n\tconst offset = element.getBoundingClientRect();\n\n\tlet canvas = canvases.get( element );\n\n\tif ( canvas === undefined ) {\n\n\t\tcanvas = document.createElement( 'canvas' );\n\t\tcanvas.width = offset.width;\n\t\tcanvas.height = offset.height;\n\t\tcanvases.set( element, canvas );\n\n\t}\n\n\tconst context = canvas.getContext( '2d'/*, { alpha: false }*/ );\n\n\tconst clipper = new Clipper( context );\n\n\t// console.time( 'drawElement' );\n\n\tcontext.clearRect(0, 0, canvas.width, canvas.height);\n\n\tdrawElement( element );\n\n\t// console.timeEnd( 'drawElement' );\n\n\treturn canvas;\n\n}\n\nfunction htmlevent( element, event, x, y ) {\n\n\tconst mouseEventInit = {\n\t\tclientX: ( x * element.offsetWidth ) + element.offsetLeft,\n\t\tclientY: ( y * element.offsetHeight ) + element.offsetTop,\n\t\tview: element.ownerDocument.defaultView\n\t};\n\n\t// TODO: Find out why this is added. Keep commented out when this file is updated\n\t// window.dispatchEvent( new MouseEvent( event, mouseEventInit ) );\n\n\tconst rect = element.getBoundingClientRect();\n\n\tx = x * rect.width + rect.left;\n\ty = y * rect.height + rect.top;\n\n\tfunction traverse( element ) {\n\n\t\tif ( element.nodeType !== Node.TEXT_NODE && element.nodeType !== Node.COMMENT_NODE ) {\n\n\t\t\tconst rect = element.getBoundingClientRect();\n\n\t\t\tif ( x > rect.left && x < rect.right && y > rect.top && y < rect.bottom ) {\n\n\t\t\t\telement.dispatchEvent( new MouseEvent( event, mouseEventInit ) );\n\n\t\t\t\tif ( element instanceof HTMLInputElement && element.type === 'range' && ( event === 'mousedown' || event === 'click' ) ) {\n\n\t\t\t\t\tconst [ min, max ] = [ 'min', 'max' ].map( property => parseFloat( element[ property ] ) );\n\n\t\t\t\t\tconst width = rect.width;\n\t\t\t\t\tconst offsetX = x - rect.x;\n\t\t\t\t\tconst proportion = offsetX / width;\n\t\t\t\t\telement.value = min + ( max - min ) * proportion;\n\t\t\t\t\telement.dispatchEvent( new InputEvent( 'input', { bubbles: true } ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0; i < element.childNodes.length; i ++ ) {\n\n\t\t\t\ttraverse( element.childNodes[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttraverse( element );\n\n}\n\nexport { HTMLMesh };\n","/* jshint esversion: 9, -W097 */\n/* For dealing with spline curves */\n/* global THREE, AFRAME, setTimeout, console */\n'use strict';\n\nimport { HTMLMesh } from './HTMLMesh.js';\n\nconst schemaHTML = {\n\thtml: {\n\t\ttype: 'selector',\n\t},\n\tcursor: {\n\t\ttype: 'selector',\n\t}\n};\n\ndocumentation:\n{\n\tschemaHTML.html.description = `HTML element to use.`;\n\tschemaHTML.cursor.description = `Visual indicator for where the user is currently pointing`;\n}\n\nconst _pointer = new THREE.Vector2();\nconst _event = { type: '', data: _pointer };\nAFRAME.registerComponent('html', {\n\tschema: schemaHTML,\n\tinit() {\n\t\tthis.rerender = this.rerender.bind(this);\n\t\tthis.handle = this.handle.bind(this);\n\t\tthis.onClick = e => this.handle('click', e);\n\t\tthis.onMouseLeave = e => this.handle('mouseleave', e);\n\t\tthis.onMouseEnter = e => this.handle('mouseenter', e);\n\t\tthis.onMouseUp = e => this.handle('mouseup', e);\n\t\tthis.onMouseDown = e => this.handle('mousedown', e);\n\t\tthis.mouseMoveDetail = {\n\t\t\tdetail: {\n\t\t\t\tcursorEl: null,\n\t\t\t\tintersection: null\n\t\t\t}\n\t\t};\n\t},\n\tplay() {\n\t\tthis.el.addEventListener('click', this.onClick);\n\t\tthis.el.addEventListener('mouseleave', this.onMouseLeave);\n\t\tthis.el.addEventListener('mouseenter', this.onMouseEnter);\n\t\tthis.el.addEventListener('mouseup', this.onMouseUp);\n\t\tthis.el.addEventListener('mousedown', this.onMouseDown);\n\t},\n\tpause() {\n\t\tthis.el.removeEventListener('click', this.onClick);\n\t\tthis.el.removeEventListener('mouseleave', this.onMouseLeave);\n\t\tthis.el.removeEventListener('mouseenter', this.onMouseEnter);\n\t\tthis.el.removeEventListener('mouseup', this.onMouseUp);\n\t\tthis.el.removeEventListener('mousedown', this.onMouseDown);\n\t},\n\tupdate() {\n\t\tthis.remove();\n\t\tif (!this.data.html) return;\n\t\tconst mesh = new HTMLMesh(this.data.html);\n\t\tthis.el.setObject3D('html', mesh);\n\t\tthis.data.html.addEventListener('input', this.rerender);\n\t\tthis.data.html.addEventListener('change', this.rerender);\n\t\tthis.cursor = this.data.cursor ? this.data.cursor.object3D : null;\n\t},\n\ttick() {\n\t\tif (this.activeRaycaster) {\n\t\t\tconst intersection = this.activeRaycaster.components.raycaster.getIntersection(this.el);\n\t\t\tthis.mouseMoveDetail.detail.cursorEl = this.activeRaycaster;\n\t\t\tthis.mouseMoveDetail.detail.intersection = intersection;\n\t\t\tthis.handle('mousemove', this.mouseMoveDetail);\n\t\t}\n\t},\n\thandle(type, evt) {\n\t\tconst intersection = evt.detail.intersection;\n\t\tconst raycaster = evt.detail.cursorEl;\n\t\tif (type === 'mouseenter') {\n\t\t\tthis.activeRaycaster = raycaster;\n\t\t}\n\t\tif (type === 'mouseleave' && this.activeRaycaster === raycaster) {\n\t\t\tthis.activeRaycaster = null;\n\t\t}\n\t\tif (this.cursor) this.cursor.visible = false;\n\t\tif (intersection) {\n\t\t\tconst mesh = this.el.getObject3D('html');\n\t\t\tconst uv = intersection.uv;\n\t\t\t_event.type = type;\n\t\t\t_event.data.set( uv.x, 1 - uv.y );\n\t\t\tmesh.dispatchEvent( _event );\n\n\t\t\tif (this.cursor) {\n\t\t\t\tthis.cursor.visible = true;\n\t\t\t\tthis.cursor.parent.worldToLocal(this.cursor.position.copy(intersection.point));\n\t\t\t}\n\t\t}\n\t},\n\trerender() {\n\t\tconst mesh = this.el.getObject3D('html');\n\t\tif (mesh && !mesh.material.map.scheduleUpdate) {\n\t\t\tmesh.material.map.scheduleUpdate = setTimeout( () => mesh.material.map.update(), 16 );\n\t\t}\n\t},\n\tremove() {\n\t\tconst mesh = this.el.getObject3D('html');\n\t\tif (mesh) {\n\t\t\tthis.el.removeObject3D('html');\n\t\t\tthis.data.html.removeEventListener('input', this.rerender);\n\t\t\tthis.data.html.removeEventListener('change', this.rerender);\n\t\t\tmesh.dispose();\n\t\t}\n\t\tthis.activeRaycaster = null;\n\t\tthis.mouseMoveDetail.detail.cursorEl = null;\n\t\tthis.mouseMoveDetail.detail.intersection = null;\n\t\tthis.cursor = null;\n\t},\n});\n"],"names":["Mesh","PlaneGeometry","MeshBasicMaterial","CanvasTexture","sRGBEncoding","SRGBColorSpace","LinearFilter","Color"],"mappings":"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"}
+\ No newline at end of file
++{"version":3,"file":"aframe-html.js","sources":["../src/HTMLMesh.js","../src/aframe-html.js"],"sourcesContent":["// This is a copy of https://github.com/mrdoob/three.js/blob/0403020848c26a9605eb91c99a949111ad4a532e/examples/jsm/interactive/HTMLMesh.js\n// with the following changes:\n// - Keep compatibility with three r147 aframe 1.4.2, still using \"this.encoding = sRGBEncoding\", otherwise using \"this.colorSpace = SRGBColorSpace;\"\n// - window.dispatchEvent line commented, see the TODO below.\n// Look at https://github.com/mrdoob/three.js/commits/dev/examples/jsm/interactive/HTMLMesh.js\n// to see if there are other changes that can be retrieved here.\nimport {\n\tCanvasTexture,\n\tLinearFilter,\n\tMesh,\n\tMeshBasicMaterial,\n\tPlaneGeometry,\n\tSRGBColorSpace,\n\tsRGBEncoding,\n\tColor\n} from 'three';\n\nclass HTMLMesh extends Mesh {\n\n\tconstructor( dom ) {\n\n\t\tconst texture = new HTMLTexture( dom );\n\n\t\tconst geometry = new PlaneGeometry( texture.image.width * 0.001, texture.image.height * 0.001 );\n\t\tconst material = new MeshBasicMaterial( { map: texture, toneMapped: false, transparent: true } );\n\n\t\tsuper( geometry, material );\n\n\t\tfunction onEvent( event ) {\n\n\t\t\tmaterial.map.dispatchDOMEvent( event );\n\n\t\t}\n\n\t\tthis.addEventListener( 'mousedown', onEvent );\n\t\tthis.addEventListener( 'mousemove', onEvent );\n\t\tthis.addEventListener( 'mouseup', onEvent );\n\t\tthis.addEventListener( 'click', onEvent );\n\n\t\tthis.dispose = function () {\n\n\t\t\tgeometry.dispose();\n\t\t\tmaterial.dispose();\n\n\t\t\tmaterial.map.dispose();\n\n\t\t\tcanvases.delete( dom );\n\n\t\t\tthis.removeEventListener( 'mousedown', onEvent );\n\t\t\tthis.removeEventListener( 'mousemove', onEvent );\n\t\t\tthis.removeEventListener( 'mouseup', onEvent );\n\t\t\tthis.removeEventListener( 'click', onEvent );\n\n\t\t};\n\n\t}\n\n}\n\nclass HTMLTexture extends CanvasTexture {\n\n\tconstructor( dom ) {\n\n\t\tsuper( html2canvas( dom ) );\n\n\t\tthis.dom = dom;\n\n\t\tthis.anisotropy = 16;\n\t\tif ( THREE.REVISION === '147' ) { // Keep compatibility with aframe 1.4.2\n\n\t\t\tthis.encoding = sRGBEncoding;\n\n\t\t} else {\n\n\t\t\tthis.colorSpace = SRGBColorSpace;\n\n\t\t}\n\n\t\tthis.minFilter = LinearFilter;\n\t\tthis.magFilter = LinearFilter;\n\n\t\t// Create an observer on the DOM, and run html2canvas update in the next loop\n\t\tconst observer = new MutationObserver( () => {\n\n\t\t\tif ( ! this.scheduleUpdate ) {\n\n\t\t\t\t// ideally should use xr.requestAnimationFrame, here setTimeout to avoid passing the renderer\n\t\t\t\tthis.scheduleUpdate = setTimeout( () => this.update(), 16 );\n\n\t\t\t}\n\n\t\t} );\n\n\t\tconst config = { attributes: true, childList: true, subtree: true, characterData: true };\n\t\tobserver.observe( dom, config );\n\n\t\tthis.observer = observer;\n\n\t}\n\n\tdispatchDOMEvent( event ) {\n\n\t\tif ( event.data ) {\n\n\t\t\thtmlevent( this.dom, event.type, event.data.x, event.data.y );\n\n\t\t}\n\n\t}\n\n\tupdate() {\n\n\t\tthis.image = html2canvas( this.dom );\n\t\tthis.needsUpdate = true;\n\n\t\tthis.scheduleUpdate = null;\n\n\t}\n\n\tdispose() {\n\n\t\tif ( this.observer ) {\n\n\t\t\tthis.observer.disconnect();\n\n\t\t}\n\n\t\tthis.scheduleUpdate = clearTimeout( this.scheduleUpdate );\n\n\t\tsuper.dispose();\n\n\t}\n\n}\n\n\n//\n\nconst canvases = new WeakMap();\n\nfunction html2canvas( element ) {\n\n\tconst range = document.createRange();\n\tconst color = new Color();\n\n\tfunction Clipper( context ) {\n\n\t\tconst clips = [];\n\t\tlet isClipping = false;\n\n\t\tfunction doClip() {\n\n\t\t\tif ( isClipping ) {\n\n\t\t\t\tisClipping = false;\n\t\t\t\tcontext.restore();\n\n\t\t\t}\n\n\t\t\tif ( clips.length === 0 ) return;\n\n\t\t\tlet minX = - Infinity, minY = - Infinity;\n\t\t\tlet maxX = Infinity, maxY = Infinity;\n\n\t\t\tfor ( let i = 0; i < clips.length; i ++ ) {\n\n\t\t\t\tconst clip = clips[ i ];\n\n\t\t\t\tminX = Math.max( minX, clip.x );\n\t\t\t\tminY = Math.max( minY, clip.y );\n\t\t\t\tmaxX = Math.min( maxX, clip.x + clip.width );\n\t\t\t\tmaxY = Math.min( maxY, clip.y + clip.height );\n\n\t\t\t}\n\n\t\t\tcontext.save();\n\t\t\tcontext.beginPath();\n\t\t\tcontext.rect( minX, minY, maxX - minX, maxY - minY );\n\t\t\tcontext.clip();\n\n\t\t\tisClipping = true;\n\n\t\t}\n\n\t\treturn {\n\n\t\t\tadd: function ( clip ) {\n\n\t\t\t\tclips.push( clip );\n\t\t\t\tdoClip();\n\n\t\t\t},\n\n\t\t\tremove: function () {\n\n\t\t\t\tclips.pop();\n\t\t\t\tdoClip();\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\tfunction segmentWords(text) {\n try {\n\t\t\tconst segmenter = new Intl.Segmenter(void 0, {\n\t\t\t\t\tgranularity: 'word'\n\t\t\t});\n\t\t\treturn Array.from(segmenter.segment(text)).map((segment) => segment.segment);\n\t\t} catch (error) {\n\t\t\tconsole.error('Error segmenting text:', error);\n\t\t\treturn text.split( \" \" );\n\t\t}\n\t}\n\n\tfunction getLines( ctx, text, maxWidth ) {\n\t\tconst words = segmentWords(text);\n\n\n\t\tconst lines = [];\n\t\tlet currentLine = words[0];\n\n\t\tfor (let i = 1; i < words.length; i++) {\n\n\t\t\tconst word = words[i];\n\t\t\tconst width = ctx.measureText( currentLine + \" \" + word ).width;\n\t\t\tconst safeMaxWith = width * 0.5; // for JP\n\t\t\tif ( width < safeMaxWith ) {\n\t\t\t\tcurrentLine += \" \" + word;\n\t\t\t} else {\n\t\t\t\tlines.push( currentLine );\n\t\t\t\tconsole.log('currentLine', currentLine);\n\t\t\t\tcurrentLine = word;\n\t\t\t}\n\t\t}\n\t\tlines.push(currentLine);\n\t\treturn lines;\n\t}\n\n\tfunction drawText( style, x, y, string, maxWidth ) {\n\n\t\tif ( string !== '' ) {\n\n\t\t\tif ( style.textTransform === 'uppercase' ) {\n\n\t\t\t\tstring = string.toUpperCase();\n\n\t\t\t}\n\n\t\t\tcontext.font = style.fontWeight + ' ' + style.fontSize + ' ' + style.fontFamily;\n\t\t\tcontext.textBaseline = 'top';\n\t\t\tcontext.fillStyle = style.color;\n\n\t\t\tif ( !maxWidth ) {\n\t\t\t\tcontext.fillText( string, x, y + parseFloat( style.fontSize ) * 0.1 );\n\t\t\t} else {\n\t\t\t\tconst lines = getLines(context, string, maxWidth);\n\t\t\t\tlines.forEach(function(line, i) {\n\t\t\t\t\tcontext.fillText( line, x, y + parseFloat( style.fontSize ) * 0.1 + i * parseFloat( style.fontSize ) * 1.3 );\n\t\t\t\t});\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction buildRectPath( x, y, w, h, r ) {\n\n\t\tif ( w < 2 * r ) r = w / 2;\n\t\tif ( h < 2 * r ) r = h / 2;\n\n\t\tcontext.beginPath();\n\t\tcontext.moveTo( x + r, y );\n\t\tcontext.arcTo( x + w, y, x + w, y + h, r );\n\t\tcontext.arcTo( x + w, y + h, x, y + h, r );\n\t\tcontext.arcTo( x, y + h, x, y, r );\n\t\tcontext.arcTo( x, y, x + w, y, r );\n\t\tcontext.closePath();\n\n\t}\n\n\tfunction drawBorder( style, which, x, y, width, height ) {\n\n\t\tconst borderWidth = style[ which + 'Width' ];\n\t\tconst borderStyle = style[ which + 'Style' ];\n\t\tconst borderColor = style[ which + 'Color' ];\n\n\t\tif ( borderWidth !== '0px' && borderStyle !== 'none' && borderColor !== 'transparent' && borderColor !== 'rgba(0, 0, 0, 0)' ) {\n\n\t\t\tcontext.strokeStyle = borderColor;\n\t\t\tcontext.lineWidth = parseFloat( borderWidth );\n\t\t\tcontext.beginPath();\n\t\t\tcontext.moveTo( x, y );\n\t\t\tcontext.lineTo( x + width, y + height );\n\t\t\tcontext.stroke();\n\n\t\t}\n\n\t}\n\n\tfunction drawElement( element, style ) {\n\n\t\t// Do not render invisible elements, comments and scripts.\n\t\tif ( element.nodeType === Node.COMMENT_NODE || element.nodeName === 'SCRIPT' || ( element.style && element.style.display === 'none' ) ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tlet x = 0, y = 0, width = 0, height = 0;\n\n\t\tif ( element.nodeType === Node.TEXT_NODE ) {\n\n\t\t\t// text\n\n\t\t\trange.selectNode( element );\n\n\t\t\tconst rect = range.getBoundingClientRect();\n\n\t\t\tx = rect.left - offset.left - 0.5;\n\t\t\ty = rect.top - offset.top - 0.5;\n\t\t\twidth = rect.width;\n\t\t\theight = rect.height;\n\t\t\t// On Quest the font used to draw on canvas is bigger than on\n\t\t\t// the desktop, compensate for this.\n\t\t\tconst maxWidth = width * 1.01; // 1.005 is good, but use 1.01 to be sure\n\t\t\tdrawText( style, x, y, element.nodeValue.trim(), maxWith );\n\n\t\t} else if ( element instanceof HTMLCanvasElement ) {\n\n\t\t\t// Canvas element\n\n\t\t\tconst rect = element.getBoundingClientRect();\n\n\t\t\tx = rect.left - offset.left - 0.5;\n\t\t\ty = rect.top - offset.top - 0.5;\n\n\t\t context.save();\n\t\t\tconst dpr = window.devicePixelRatio;\n\t\t\tcontext.scale( 1 / dpr, 1 / dpr );\n\t\t\tcontext.drawImage( element, x, y );\n\t\t\tcontext.restore();\n\n\t\t} else if ( element instanceof HTMLImageElement ) {\n\n\t\t\tconst rect = element.getBoundingClientRect();\n\n\t\t\tx = rect.left - offset.left - 0.5;\n\t\t\ty = rect.top - offset.top - 0.5;\n\t\t\twidth = rect.width;\n\t\t\theight = rect.height;\n\n\t\t\tcontext.drawImage( element, x, y, width, height );\n\n\t\t} else {\n\n\t\t\tconst rect = element.getBoundingClientRect();\n\n\t\t\tx = rect.left - offset.left - 0.5;\n\t\t\ty = rect.top - offset.top - 0.5;\n\t\t\twidth = rect.width;\n\t\t\theight = rect.height;\n\n\t\t\tstyle = window.getComputedStyle( element );\n\n\t\t\t// Get the border of the element used for fill and border\n\n\t\t\tbuildRectPath( x, y, width, height, parseFloat( style.borderRadius ) );\n\n\t\t\tconst backgroundColor = style.backgroundColor;\n\n\t\t\tif ( backgroundColor !== 'transparent' && backgroundColor !== 'rgba(0, 0, 0, 0)' ) {\n\n\t\t\t\tcontext.fillStyle = backgroundColor;\n\t\t\t\tcontext.fill();\n\n\t\t\t}\n\n\t\t\t// If all the borders match then stroke the round rectangle\n\n\t\t\tconst borders = [ 'borderTop', 'borderLeft', 'borderBottom', 'borderRight' ];\n\n\t\t\tlet match = true;\n\t\t\tlet prevBorder = null;\n\n\t\t\tfor ( const border of borders ) {\n\n\t\t\t\tif ( prevBorder !== null ) {\n\n\t\t\t\t\tmatch = ( style[ border + 'Width' ] === style[ prevBorder + 'Width' ] ) &&\n\t\t\t\t\t( style[ border + 'Color' ] === style[ prevBorder + 'Color' ] ) &&\n\t\t\t\t\t( style[ border + 'Style' ] === style[ prevBorder + 'Style' ] );\n\n\t\t\t\t}\n\n\t\t\t\tif ( match === false ) break;\n\n\t\t\t\tprevBorder = border;\n\n\t\t\t}\n\n\t\t\tif ( match === true ) {\n\n\t\t\t\t// They all match so stroke the rectangle from before allows for border-radius\n\n\t\t\t\tconst width = parseFloat( style.borderTopWidth );\n\n\t\t\t\tif ( style.borderTopWidth !== '0px' && style.borderTopStyle !== 'none' && style.borderTopColor !== 'transparent' && style.borderTopColor !== 'rgba(0, 0, 0, 0)' ) {\n\n\t\t\t\t\tcontext.strokeStyle = style.borderTopColor;\n\t\t\t\t\tcontext.lineWidth = width;\n\t\t\t\t\tcontext.stroke();\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// Otherwise draw individual borders\n\n\t\t\t\tdrawBorder( style, 'borderTop', x, y, width, 0 );\n\t\t\t\tdrawBorder( style, 'borderLeft', x, y, 0, height );\n\t\t\t\tdrawBorder( style, 'borderBottom', x, y + height, width, 0 );\n\t\t\t\tdrawBorder( style, 'borderRight', x + width, y, 0, height );\n\n\t\t\t}\n\n\t\t\tif ( element instanceof HTMLInputElement ) {\n\n\t\t\t\tlet accentColor = style.accentColor;\n\n\t\t\t\tif ( accentColor === undefined || accentColor === 'auto' ) accentColor = style.color;\n\n\t\t\t\tcolor.set( accentColor );\n\n\t\t\t\tconst luminance = Math.sqrt( 0.299 * ( color.r ** 2 ) + 0.587 * ( color.g ** 2 ) + 0.114 * ( color.b ** 2 ) );\n\t\t\t\tconst accentTextColor = luminance < 0.5 ? 'white' : '#111111';\n\n\t\t\t\tif ( element.type === 'radio' ) {\n\n\t\t\t\t\tbuildRectPath( x, y, width, height, height );\n\n\t\t\t\t\tcontext.fillStyle = 'white';\n\t\t\t\t\tcontext.strokeStyle = accentColor;\n\t\t\t\t\tcontext.lineWidth = 1;\n\t\t\t\t\tcontext.fill();\n\t\t\t\t\tcontext.stroke();\n\n\t\t\t\t\tif ( element.checked ) {\n\n\t\t\t\t\t\tbuildRectPath( x + 2, y + 2, width - 4, height - 4, height );\n\n\t\t\t\t\t\tcontext.fillStyle = accentColor;\n\t\t\t\t\t\tcontext.strokeStyle = accentTextColor;\n\t\t\t\t\t\tcontext.lineWidth = 2;\n\t\t\t\t\t\tcontext.fill();\n\t\t\t\t\t\tcontext.stroke();\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( element.type === 'checkbox' ) {\n\n\t\t\t\t\tbuildRectPath( x, y, width, height, 2 );\n\n\t\t\t\t\tcontext.fillStyle = element.checked ? accentColor : 'white';\n\t\t\t\t\tcontext.strokeStyle = element.checked ? accentTextColor : accentColor;\n\t\t\t\t\tcontext.lineWidth = 1;\n\t\t\t\t\tcontext.stroke();\n\t\t\t\t\tcontext.fill();\n\n\t\t\t\t\tif ( element.checked ) {\n\n\t\t\t\t\t\tconst currentTextAlign = context.textAlign;\n\n\t\t\t\t\t\tcontext.textAlign = 'center';\n\n\t\t\t\t\t\tconst properties = {\n\t\t\t\t\t\t\tcolor: accentTextColor,\n\t\t\t\t\t\t\tfontFamily: style.fontFamily,\n\t\t\t\t\t\t\tfontSize: height + 'px',\n\t\t\t\t\t\t\tfontWeight: 'bold'\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tdrawText( properties, x + ( width / 2 ), y, '✔' );\n\n\t\t\t\t\t\tcontext.textAlign = currentTextAlign;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( element.type === 'range' ) {\n\n\t\t\t\t\tconst [ min, max, value ] = [ 'min', 'max', 'value' ].map( property => parseFloat( element[ property ] ) );\n\t\t\t\t\tconst position = ( ( value - min ) / ( max - min ) ) * ( width - height );\n\n\t\t\t\t\tbuildRectPath( x, y + ( height / 4 ), width, height / 2, height / 4 );\n\t\t\t\t\tcontext.fillStyle = accentTextColor;\n\t\t\t\t\tcontext.strokeStyle = accentColor;\n\t\t\t\t\tcontext.lineWidth = 1;\n\t\t\t\t\tcontext.fill();\n\t\t\t\t\tcontext.stroke();\n\n\t\t\t\t\tbuildRectPath( x, y + ( height / 4 ), position + ( height / 2 ), height / 2, height / 4 );\n\t\t\t\t\tcontext.fillStyle = accentColor;\n\t\t\t\t\tcontext.fill();\n\n\t\t\t\t\tbuildRectPath( x + position, y, height, height, height / 2 );\n\t\t\t\t\tcontext.fillStyle = accentColor;\n\t\t\t\t\tcontext.fill();\n\n\t\t\t\t}\n\n\t\t\t\tif ( element.type === 'color' || element.type === 'text' || element.type === 'number' ) {\n\n\t\t\t\t\tclipper.add( { x: x, y: y, width: width, height: height } );\n\n\t\t\t\t\tdrawText( style, x + parseInt( style.paddingLeft ), y + parseInt( style.paddingTop ), element.value );\n\n\t\t\t\t\tclipper.remove();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t/*\n\t\t// debug\n\t\tcontext.strokeStyle = '#' + Math.random().toString( 16 ).slice( - 3 );\n\t\tcontext.strokeRect( x - 0.5, y - 0.5, width + 1, height + 1 );\n\t\t*/\n\n\t\tconst isClipping = style.overflow === 'auto' || style.overflow === 'hidden';\n\n\t\tif ( isClipping ) clipper.add( { x: x, y: y, width: width, height: height } );\n\n\t\tfor ( let i = 0; i < element.childNodes.length; i ++ ) {\n\n\t\t\tdrawElement( element.childNodes[ i ], style );\n\n\t\t}\n\n\t\tif ( isClipping ) clipper.remove();\n\n\t}\n\n\tconst offset = element.getBoundingClientRect();\n\n\tlet canvas = canvases.get( element );\n\n\tif ( canvas === undefined ) {\n\n\t\tcanvas = document.createElement( 'canvas' );\n\t\tcanvas.width = offset.width;\n\t\tcanvas.height = offset.height;\n\t\tcanvases.set( element, canvas );\n\n\t}\n\n\tconst context = canvas.getContext( '2d'/*, { alpha: false }*/ );\n\n\tconst clipper = new Clipper( context );\n\n\t// console.time( 'drawElement' );\n\n\tcontext.clearRect(0, 0, canvas.width, canvas.height);\n\n\tdrawElement( element );\n\n\t// console.timeEnd( 'drawElement' );\n\n\treturn canvas;\n\n}\n\nfunction htmlevent( element, event, x, y ) {\n\n\tconst mouseEventInit = {\n\t\tclientX: ( x * element.offsetWidth ) + element.offsetLeft,\n\t\tclientY: ( y * element.offsetHeight ) + element.offsetTop,\n\t\tview: element.ownerDocument.defaultView\n\t};\n\n\t// TODO: Find out why this is added. Keep commented out when this file is updated\n\t// window.dispatchEvent( new MouseEvent( event, mouseEventInit ) );\n\n\tconst rect = element.getBoundingClientRect();\n\n\tx = x * rect.width + rect.left;\n\ty = y * rect.height + rect.top;\n\n\tfunction traverse( element ) {\n\n\t\tif ( element.nodeType !== Node.TEXT_NODE && element.nodeType !== Node.COMMENT_NODE ) {\n\n\t\t\tconst rect = element.getBoundingClientRect();\n\n\t\t\tif ( x > rect.left && x < rect.right && y > rect.top && y < rect.bottom ) {\n\n\t\t\t\telement.dispatchEvent( new MouseEvent( event, mouseEventInit ) );\n\n\t\t\t\tif ( element instanceof HTMLInputElement && element.type === 'range' && ( event === 'mousedown' || event === 'click' ) ) {\n\n\t\t\t\t\tconst [ min, max ] = [ 'min', 'max' ].map( property => parseFloat( element[ property ] ) );\n\n\t\t\t\t\tconst width = rect.width;\n\t\t\t\t\tconst offsetX = x - rect.x;\n\t\t\t\t\tconst proportion = offsetX / width;\n\t\t\t\t\telement.value = min + ( max - min ) * proportion;\n\t\t\t\t\telement.dispatchEvent( new InputEvent( 'input', { bubbles: true } ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0; i < element.childNodes.length; i ++ ) {\n\n\t\t\t\ttraverse( element.childNodes[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttraverse( element );\n\n}\n\nexport { HTMLMesh };\n","/* jshint esversion: 9, -W097 */\n/* For dealing with spline curves */\n/* global THREE, AFRAME, setTimeout, console */\n'use strict';\n\nimport { HTMLMesh } from './HTMLMesh.js';\n\nconst schemaHTML = {\n\thtml: {\n\t\ttype: 'selector',\n\t},\n\tcursor: {\n\t\ttype: 'selector',\n\t}\n};\n\ndocumentation:\n{\n\tschemaHTML.html.description = `HTML element to use.`;\n\tschemaHTML.cursor.description = `Visual indicator for where the user is currently pointing`;\n}\n\nconst _pointer = new THREE.Vector2();\nconst _event = { type: '', data: _pointer };\nAFRAME.registerComponent('html', {\n\tschema: schemaHTML,\n\tinit() {\n\t\tthis.rerender = this.rerender.bind(this);\n\t\tthis.handle = this.handle.bind(this);\n\t\tthis.onClick = e => this.handle('click', e);\n\t\tthis.onMouseLeave = e => this.handle('mouseleave', e);\n\t\tthis.onMouseEnter = e => this.handle('mouseenter', e);\n\t\tthis.onMouseUp = e => this.handle('mouseup', e);\n\t\tthis.onMouseDown = e => this.handle('mousedown', e);\n\t\tthis.mouseMoveDetail = {\n\t\t\tdetail: {\n\t\t\t\tcursorEl: null,\n\t\t\t\tintersection: null\n\t\t\t}\n\t\t};\n\t},\n\tplay() {\n\t\tthis.el.addEventListener('click', this.onClick);\n\t\tthis.el.addEventListener('mouseleave', this.onMouseLeave);\n\t\tthis.el.addEventListener('mouseenter', this.onMouseEnter);\n\t\tthis.el.addEventListener('mouseup', this.onMouseUp);\n\t\tthis.el.addEventListener('mousedown', this.onMouseDown);\n\t},\n\tpause() {\n\t\tthis.el.removeEventListener('click', this.onClick);\n\t\tthis.el.removeEventListener('mouseleave', this.onMouseLeave);\n\t\tthis.el.removeEventListener('mouseenter', this.onMouseEnter);\n\t\tthis.el.removeEventListener('mouseup', this.onMouseUp);\n\t\tthis.el.removeEventListener('mousedown', this.onMouseDown);\n\t},\n\tupdate() {\n\t\tthis.remove();\n\t\tif (!this.data.html) return;\n\t\tconst mesh = new HTMLMesh(this.data.html);\n\t\tthis.el.setObject3D('html', mesh);\n\t\tthis.data.html.addEventListener('input', this.rerender);\n\t\tthis.data.html.addEventListener('change', this.rerender);\n\t\tthis.cursor = this.data.cursor ? this.data.cursor.object3D : null;\n\t},\n\ttick() {\n\t\tif (this.activeRaycaster) {\n\t\t\tconst intersection = this.activeRaycaster.components.raycaster.getIntersection(this.el);\n\t\t\tthis.mouseMoveDetail.detail.cursorEl = this.activeRaycaster;\n\t\t\tthis.mouseMoveDetail.detail.intersection = intersection;\n\t\t\tthis.handle('mousemove', this.mouseMoveDetail);\n\t\t}\n\t},\n\thandle(type, evt) {\n\t\tconst intersection = evt.detail.intersection;\n\t\tconst raycaster = evt.detail.cursorEl;\n\t\tif (type === 'mouseenter') {\n\t\t\tthis.activeRaycaster = raycaster;\n\t\t}\n\t\tif (type === 'mouseleave' && this.activeRaycaster === raycaster) {\n\t\t\tthis.activeRaycaster = null;\n\t\t}\n\t\tif (this.cursor) this.cursor.visible = false;\n\t\tif (intersection) {\n\t\t\tconst mesh = this.el.getObject3D('html');\n\t\t\tconst uv = intersection.uv;\n\t\t\t_event.type = type;\n\t\t\t_event.data.set( uv.x, 1 - uv.y );\n\t\t\tmesh.dispatchEvent( _event );\n\n\t\t\tif (this.cursor) {\n\t\t\t\tthis.cursor.visible = true;\n\t\t\t\tthis.cursor.parent.worldToLocal(this.cursor.position.copy(intersection.point));\n\t\t\t}\n\t\t}\n\t},\n\trerender() {\n\t\tconst mesh = this.el.getObject3D('html');\n\t\tif (mesh && !mesh.material.map.scheduleUpdate) {\n\t\t\tmesh.material.map.scheduleUpdate = setTimeout( () => mesh.material.map.update(), 16 );\n\t\t}\n\t},\n\tremove() {\n\t\tconst mesh = this.el.getObject3D('html');\n\t\tif (mesh) {\n\t\t\tthis.el.removeObject3D('html');\n\t\t\tthis.data.html.removeEventListener('input', this.rerender);\n\t\t\tthis.data.html.removeEventListener('change', this.rerender);\n\t\t\tmesh.dispose();\n\t\t}\n\t\tthis.activeRaycaster = null;\n\t\tthis.mouseMoveDetail.detail.cursorEl = null;\n\t\tthis.mouseMoveDetail.detail.intersection = null;\n\t\tthis.cursor = null;\n\t},\n});\n"],"names":["Mesh","PlaneGeometry","MeshBasicMaterial","CanvasTexture","sRGBEncoding","SRGBColorSpace","LinearFilter","Color"],"mappings":"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"}
+\ No newline at end of file
+diff --git a/build/aframe-html.min.js b/build/aframe-html.min.js
+index a03956de51324094a68e602721cb17357b7c09d2..fb86ccaa432fa2109913f11e1adf3b21c1c0f64a 100644
+--- a/build/aframe-html.min.js
++++ b/build/aframe-html.min.js
+@@ -1,2 +1,2 @@
+-!function(e){"use strict";class t extends e.Mesh{constructor(t){const s=new i(t),n=new e.PlaneGeometry(.001*s.image.width,.001*s.image.height),r=new e.MeshBasicMaterial({map:s,toneMapped:!1,transparent:!0});function l(e){r.map.dispatchDOMEvent(e)}super(n,r),this.addEventListener("mousedown",l),this.addEventListener("mousemove",l),this.addEventListener("mouseup",l),this.addEventListener("click",l),this.dispose=function(){n.dispose(),r.dispose(),r.map.dispose(),o.delete(t),this.removeEventListener("mousedown",l),this.removeEventListener("mousemove",l),this.removeEventListener("mouseup",l),this.removeEventListener("click",l)}}}class i extends e.CanvasTexture{constructor(t){super(s(t)),this.dom=t,this.anisotropy=16,"147"===THREE.REVISION?this.encoding=e.sRGBEncoding:this.colorSpace=e.SRGBColorSpace,this.minFilter=e.LinearFilter,this.magFilter=e.LinearFilter;const i=new MutationObserver((()=>{this.scheduleUpdate||(this.scheduleUpdate=setTimeout((()=>this.update()),16))}));i.observe(t,{attributes:!0,childList:!0,subtree:!0,characterData:!0}),this.observer=i}dispatchDOMEvent(e){e.data&&function(e,t,i,o){const s={clientX:i*e.offsetWidth+e.offsetLeft,clientY:o*e.offsetHeight+e.offsetTop,view:e.ownerDocument.defaultView},n=e.getBoundingClientRect();function r(e){if(e.nodeType!==Node.TEXT_NODE&&e.nodeType!==Node.COMMENT_NODE){const n=e.getBoundingClientRect();if(i>n.left&&in.top&&oparseFloat(e[t]))),s=n.width,r=(i-n.x)/s;e.value=t+(o-t)*r,e.dispatchEvent(new InputEvent("input",{bubbles:!0}))}for(let t=0;tparseFloat(t[e]))),l=(n-o)/(s-o)*(p-m);r(h,u+m/4,p,m/2,m/4),d.fillStyle=i,d.strokeStyle=e,d.lineWidth=1,d.fill(),d.stroke(),r(h,u+m/4,l+m/2,m/2,m/4),d.fillStyle=e,d.fill(),r(h+l,u,m,m,m/2),d.fillStyle=e,d.fill()}"color"!==t.type&&"text"!==t.type&&"number"!==t.type||(c.add({x:h,y:u,width:p,height:m}),n(o,h+parseInt(o.paddingLeft),u+parseInt(o.paddingTop),t.value),c.remove())}}const v="auto"===o.overflow||"hidden"===o.overflow;v&&c.add({x:h,y:u,width:p,height:m});for(let i=0;ithis.handle("click",e),this.onMouseLeave=e=>this.handle("mouseleave",e),this.onMouseEnter=e=>this.handle("mouseenter",e),this.onMouseUp=e=>this.handle("mouseup",e),this.onMouseDown=e=>this.handle("mousedown",e),this.mouseMoveDetail={detail:{cursorEl:null,intersection:null}}},play(){this.el.addEventListener("click",this.onClick),this.el.addEventListener("mouseleave",this.onMouseLeave),this.el.addEventListener("mouseenter",this.onMouseEnter),this.el.addEventListener("mouseup",this.onMouseUp),this.el.addEventListener("mousedown",this.onMouseDown)},pause(){this.el.removeEventListener("click",this.onClick),this.el.removeEventListener("mouseleave",this.onMouseLeave),this.el.removeEventListener("mouseenter",this.onMouseEnter),this.el.removeEventListener("mouseup",this.onMouseUp),this.el.removeEventListener("mousedown",this.onMouseDown)},update(){if(this.remove(),!this.data.html)return;const e=new t(this.data.html);this.el.setObject3D("html",e),this.data.html.addEventListener("input",this.rerender),this.data.html.addEventListener("change",this.rerender),this.cursor=this.data.cursor?this.data.cursor.object3D:null},tick(){if(this.activeRaycaster){const e=this.activeRaycaster.components.raycaster.getIntersection(this.el);this.mouseMoveDetail.detail.cursorEl=this.activeRaycaster,this.mouseMoveDetail.detail.intersection=e,this.handle("mousemove",this.mouseMoveDetail)}},handle(e,t){const i=t.detail.intersection,o=t.detail.cursorEl;if("mouseenter"===e&&(this.activeRaycaster=o),"mouseleave"===e&&this.activeRaycaster===o&&(this.activeRaycaster=null),this.cursor&&(this.cursor.visible=!1),i){const t=this.el.getObject3D("html"),o=i.uv;n.type=e,n.data.set(o.x,1-o.y),t.dispatchEvent(n),this.cursor&&(this.cursor.visible=!0,this.cursor.parent.worldToLocal(this.cursor.position.copy(i.point)))}},rerender(){const e=this.el.getObject3D("html");e&&!e.material.map.scheduleUpdate&&(e.material.map.scheduleUpdate=setTimeout((()=>e.material.map.update()),16))},remove(){const e=this.el.getObject3D("html");e&&(this.el.removeObject3D("html"),this.data.html.removeEventListener("input",this.rerender),this.data.html.removeEventListener("change",this.rerender),e.dispose()),this.activeRaycaster=null,this.mouseMoveDetail.detail.cursorEl=null,this.mouseMoveDetail.detail.intersection=null,this.cursor=null}})}(THREE);
++!function(e){"use strict";class t extends e.Mesh{constructor(t){const s=new o(t),n=new e.PlaneGeometry(.001*s.image.width,.001*s.image.height),r=new e.MeshBasicMaterial({map:s,toneMapped:!1,transparent:!0});function l(e){r.map.dispatchDOMEvent(e)}super(n,r),this.addEventListener("mousedown",l),this.addEventListener("mousemove",l),this.addEventListener("mouseup",l),this.addEventListener("click",l),this.dispose=function(){n.dispose(),r.dispose(),r.map.dispose(),i.delete(t),this.removeEventListener("mousedown",l),this.removeEventListener("mousemove",l),this.removeEventListener("mouseup",l),this.removeEventListener("click",l)}}}class o extends e.CanvasTexture{constructor(t){super(s(t)),this.dom=t,this.anisotropy=16,"147"===THREE.REVISION?this.encoding=e.sRGBEncoding:this.colorSpace=e.SRGBColorSpace,this.minFilter=e.LinearFilter,this.magFilter=e.LinearFilter;const o=new MutationObserver((()=>{this.scheduleUpdate||(this.scheduleUpdate=setTimeout((()=>this.update()),16))}));o.observe(t,{attributes:!0,childList:!0,subtree:!0,characterData:!0}),this.observer=o}dispatchDOMEvent(e){e.data&&function(e,t,o,i){const s={clientX:o*e.offsetWidth+e.offsetLeft,clientY:i*e.offsetHeight+e.offsetTop,view:e.ownerDocument.defaultView},n=e.getBoundingClientRect();function r(e){if(e.nodeType!==Node.TEXT_NODE&&e.nodeType!==Node.COMMENT_NODE){const n=e.getBoundingClientRect();if(o>n.left&&on.top&&iparseFloat(e[t]))),s=n.width,r=(o-n.x)/s;e.value=t+(i-t)*r,e.dispatchEvent(new InputEvent("input",{bubbles:!0}))}for(let t=0;te.segment))}catch(t){return e.split(" ")}}(t),s=[];let n=i[0];for(let t=1;tparseFloat(t[e]))),a=(r-i)/(s-i)*(p-m);l(n,d+m/4,p,m/2,m/4),c.fillStyle=o,c.strokeStyle=e,c.lineWidth=1,c.fill(),c.stroke(),l(n,d+m/4,a+m/2,m/2,m/4),c.fillStyle=e,c.fill(),l(n+a,d,m,m,m/2),c.fillStyle=e,c.fill()}"color"!==t.type&&"text"!==t.type&&"number"!==t.type||(u.add({x:n,y:d,width:p,height:m}),r(i,n+parseInt(i.paddingLeft),d+parseInt(i.paddingTop),t.value),u.remove())}}const f="auto"===i.overflow||"hidden"===i.overflow;f&&u.add({x:n,y:d,width:p,height:m});for(let o=0;othis.handle("click",e),this.onMouseLeave=e=>this.handle("mouseleave",e),this.onMouseEnter=e=>this.handle("mouseenter",e),this.onMouseUp=e=>this.handle("mouseup",e),this.onMouseDown=e=>this.handle("mousedown",e),this.mouseMoveDetail={detail:{cursorEl:null,intersection:null}}},play(){this.el.addEventListener("click",this.onClick),this.el.addEventListener("mouseleave",this.onMouseLeave),this.el.addEventListener("mouseenter",this.onMouseEnter),this.el.addEventListener("mouseup",this.onMouseUp),this.el.addEventListener("mousedown",this.onMouseDown)},pause(){this.el.removeEventListener("click",this.onClick),this.el.removeEventListener("mouseleave",this.onMouseLeave),this.el.removeEventListener("mouseenter",this.onMouseEnter),this.el.removeEventListener("mouseup",this.onMouseUp),this.el.removeEventListener("mousedown",this.onMouseDown)},update(){if(this.remove(),!this.data.html)return;const e=new t(this.data.html);this.el.setObject3D("html",e),this.data.html.addEventListener("input",this.rerender),this.data.html.addEventListener("change",this.rerender),this.cursor=this.data.cursor?this.data.cursor.object3D:null},tick(){if(this.activeRaycaster){const e=this.activeRaycaster.components.raycaster.getIntersection(this.el);this.mouseMoveDetail.detail.cursorEl=this.activeRaycaster,this.mouseMoveDetail.detail.intersection=e,this.handle("mousemove",this.mouseMoveDetail)}},handle(e,t){const o=t.detail.intersection,i=t.detail.cursorEl;if("mouseenter"===e&&(this.activeRaycaster=i),"mouseleave"===e&&this.activeRaycaster===i&&(this.activeRaycaster=null),this.cursor&&(this.cursor.visible=!1),o){const t=this.el.getObject3D("html"),i=o.uv;n.type=e,n.data.set(i.x,1-i.y),t.dispatchEvent(n),this.cursor&&(this.cursor.visible=!0,this.cursor.parent.worldToLocal(this.cursor.position.copy(o.point)))}},rerender(){const e=this.el.getObject3D("html");e&&!e.material.map.scheduleUpdate&&(e.material.map.scheduleUpdate=setTimeout((()=>e.material.map.update()),16))},remove(){const e=this.el.getObject3D("html");e&&(this.el.removeObject3D("html"),this.data.html.removeEventListener("input",this.rerender),this.data.html.removeEventListener("change",this.rerender),e.dispose()),this.activeRaycaster=null,this.mouseMoveDetail.detail.cursorEl=null,this.mouseMoveDetail.detail.intersection=null,this.cursor=null}})}(THREE);
+ //# sourceMappingURL=aframe-html.min.js.map
+diff --git a/build/aframe-html.min.js.map b/build/aframe-html.min.js.map
+index 2df4329d9bf3d5b555b37e1a87a4097a30a4e7ee..297a86f5b8808af137154da7769e6a431102c5d2 100644
+--- a/build/aframe-html.min.js.map
++++ b/build/aframe-html.min.js.map
+@@ -1 +1 @@
+-{"version":3,"file":"aframe-html.min.js","sources":["../src/HTMLMesh.js","../src/aframe-html.js"],"sourcesContent":["// This is a copy of https://github.com/mrdoob/three.js/blob/0403020848c26a9605eb91c99a949111ad4a532e/examples/jsm/interactive/HTMLMesh.js\n// with the following changes:\n// - Keep compatibility with three r147 aframe 1.4.2, still using \"this.encoding = sRGBEncoding\", otherwise using \"this.colorSpace = SRGBColorSpace;\"\n// - window.dispatchEvent line commented, see the TODO below.\n// Look at https://github.com/mrdoob/three.js/commits/dev/examples/jsm/interactive/HTMLMesh.js\n// to see if there are other changes that can be retrieved here.\nimport {\n\tCanvasTexture,\n\tLinearFilter,\n\tMesh,\n\tMeshBasicMaterial,\n\tPlaneGeometry,\n\tSRGBColorSpace,\n\tsRGBEncoding,\n\tColor\n} from 'three';\n\nclass HTMLMesh extends Mesh {\n\n\tconstructor( dom ) {\n\n\t\tconst texture = new HTMLTexture( dom );\n\n\t\tconst geometry = new PlaneGeometry( texture.image.width * 0.001, texture.image.height * 0.001 );\n\t\tconst material = new MeshBasicMaterial( { map: texture, toneMapped: false, transparent: true } );\n\n\t\tsuper( geometry, material );\n\n\t\tfunction onEvent( event ) {\n\n\t\t\tmaterial.map.dispatchDOMEvent( event );\n\n\t\t}\n\n\t\tthis.addEventListener( 'mousedown', onEvent );\n\t\tthis.addEventListener( 'mousemove', onEvent );\n\t\tthis.addEventListener( 'mouseup', onEvent );\n\t\tthis.addEventListener( 'click', onEvent );\n\n\t\tthis.dispose = function () {\n\n\t\t\tgeometry.dispose();\n\t\t\tmaterial.dispose();\n\n\t\t\tmaterial.map.dispose();\n\n\t\t\tcanvases.delete( dom );\n\n\t\t\tthis.removeEventListener( 'mousedown', onEvent );\n\t\t\tthis.removeEventListener( 'mousemove', onEvent );\n\t\t\tthis.removeEventListener( 'mouseup', onEvent );\n\t\t\tthis.removeEventListener( 'click', onEvent );\n\n\t\t};\n\n\t}\n\n}\n\nclass HTMLTexture extends CanvasTexture {\n\n\tconstructor( dom ) {\n\n\t\tsuper( html2canvas( dom ) );\n\n\t\tthis.dom = dom;\n\n\t\tthis.anisotropy = 16;\n\t\tif ( THREE.REVISION === '147' ) { // Keep compatibility with aframe 1.4.2\n\n\t\t\tthis.encoding = sRGBEncoding;\n\n\t\t} else {\n\n\t\t\tthis.colorSpace = SRGBColorSpace;\n\n\t\t}\n\n\t\tthis.minFilter = LinearFilter;\n\t\tthis.magFilter = LinearFilter;\n\n\t\t// Create an observer on the DOM, and run html2canvas update in the next loop\n\t\tconst observer = new MutationObserver( () => {\n\n\t\t\tif ( ! this.scheduleUpdate ) {\n\n\t\t\t\t// ideally should use xr.requestAnimationFrame, here setTimeout to avoid passing the renderer\n\t\t\t\tthis.scheduleUpdate = setTimeout( () => this.update(), 16 );\n\n\t\t\t}\n\n\t\t} );\n\n\t\tconst config = { attributes: true, childList: true, subtree: true, characterData: true };\n\t\tobserver.observe( dom, config );\n\n\t\tthis.observer = observer;\n\n\t}\n\n\tdispatchDOMEvent( event ) {\n\n\t\tif ( event.data ) {\n\n\t\t\thtmlevent( this.dom, event.type, event.data.x, event.data.y );\n\n\t\t}\n\n\t}\n\n\tupdate() {\n\n\t\tthis.image = html2canvas( this.dom );\n\t\tthis.needsUpdate = true;\n\n\t\tthis.scheduleUpdate = null;\n\n\t}\n\n\tdispose() {\n\n\t\tif ( this.observer ) {\n\n\t\t\tthis.observer.disconnect();\n\n\t\t}\n\n\t\tthis.scheduleUpdate = clearTimeout( this.scheduleUpdate );\n\n\t\tsuper.dispose();\n\n\t}\n\n}\n\n\n//\n\nconst canvases = new WeakMap();\n\nfunction html2canvas( element ) {\n\n\tconst range = document.createRange();\n\tconst color = new Color();\n\n\tfunction Clipper( context ) {\n\n\t\tconst clips = [];\n\t\tlet isClipping = false;\n\n\t\tfunction doClip() {\n\n\t\t\tif ( isClipping ) {\n\n\t\t\t\tisClipping = false;\n\t\t\t\tcontext.restore();\n\n\t\t\t}\n\n\t\t\tif ( clips.length === 0 ) return;\n\n\t\t\tlet minX = - Infinity, minY = - Infinity;\n\t\t\tlet maxX = Infinity, maxY = Infinity;\n\n\t\t\tfor ( let i = 0; i < clips.length; i ++ ) {\n\n\t\t\t\tconst clip = clips[ i ];\n\n\t\t\t\tminX = Math.max( minX, clip.x );\n\t\t\t\tminY = Math.max( minY, clip.y );\n\t\t\t\tmaxX = Math.min( maxX, clip.x + clip.width );\n\t\t\t\tmaxY = Math.min( maxY, clip.y + clip.height );\n\n\t\t\t}\n\n\t\t\tcontext.save();\n\t\t\tcontext.beginPath();\n\t\t\tcontext.rect( minX, minY, maxX - minX, maxY - minY );\n\t\t\tcontext.clip();\n\n\t\t\tisClipping = true;\n\n\t\t}\n\n\t\treturn {\n\n\t\t\tadd: function ( clip ) {\n\n\t\t\t\tclips.push( clip );\n\t\t\t\tdoClip();\n\n\t\t\t},\n\n\t\t\tremove: function () {\n\n\t\t\t\tclips.pop();\n\t\t\t\tdoClip();\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\tfunction drawText( style, x, y, string ) {\n\n\t\tif ( string !== '' ) {\n\n\t\t\tif ( style.textTransform === 'uppercase' ) {\n\n\t\t\t\tstring = string.toUpperCase();\n\n\t\t\t}\n\n\t\t\tcontext.font = style.fontWeight + ' ' + style.fontSize + ' ' + style.fontFamily;\n\t\t\tcontext.textBaseline = 'top';\n\t\t\tcontext.fillStyle = style.color;\n\t\t\tcontext.fillText( string, x, y + parseFloat( style.fontSize ) * 0.1 );\n\n\t\t}\n\n\t}\n\n\tfunction buildRectPath( x, y, w, h, r ) {\n\n\t\tif ( w < 2 * r ) r = w / 2;\n\t\tif ( h < 2 * r ) r = h / 2;\n\n\t\tcontext.beginPath();\n\t\tcontext.moveTo( x + r, y );\n\t\tcontext.arcTo( x + w, y, x + w, y + h, r );\n\t\tcontext.arcTo( x + w, y + h, x, y + h, r );\n\t\tcontext.arcTo( x, y + h, x, y, r );\n\t\tcontext.arcTo( x, y, x + w, y, r );\n\t\tcontext.closePath();\n\n\t}\n\n\tfunction drawBorder( style, which, x, y, width, height ) {\n\n\t\tconst borderWidth = style[ which + 'Width' ];\n\t\tconst borderStyle = style[ which + 'Style' ];\n\t\tconst borderColor = style[ which + 'Color' ];\n\n\t\tif ( borderWidth !== '0px' && borderStyle !== 'none' && borderColor !== 'transparent' && borderColor !== 'rgba(0, 0, 0, 0)' ) {\n\n\t\t\tcontext.strokeStyle = borderColor;\n\t\t\tcontext.lineWidth = parseFloat( borderWidth );\n\t\t\tcontext.beginPath();\n\t\t\tcontext.moveTo( x, y );\n\t\t\tcontext.lineTo( x + width, y + height );\n\t\t\tcontext.stroke();\n\n\t\t}\n\n\t}\n\n\tfunction drawElement( element, style ) {\n\n\t\t// Do not render invisible elements, comments and scripts.\n\t\tif ( element.nodeType === Node.COMMENT_NODE || element.nodeName === 'SCRIPT' || ( element.style && element.style.display === 'none' ) ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tlet x = 0, y = 0, width = 0, height = 0;\n\n\t\tif ( element.nodeType === Node.TEXT_NODE ) {\n\n\t\t\t// text\n\n\t\t\trange.selectNode( element );\n\n\t\t\tconst rect = range.getBoundingClientRect();\n\n\t\t\tx = rect.left - offset.left - 0.5;\n\t\t\ty = rect.top - offset.top - 0.5;\n\t\t\twidth = rect.width;\n\t\t\theight = rect.height;\n\n\t\t\tdrawText( style, x, y, element.nodeValue.trim() );\n\n\t\t} else if ( element instanceof HTMLCanvasElement ) {\n\n\t\t\t// Canvas element\n\n\t\t\tconst rect = element.getBoundingClientRect();\n\n\t\t\tx = rect.left - offset.left - 0.5;\n\t\t\ty = rect.top - offset.top - 0.5;\n\n\t\t context.save();\n\t\t\tconst dpr = window.devicePixelRatio;\n\t\t\tcontext.scale( 1 / dpr, 1 / dpr );\n\t\t\tcontext.drawImage( element, x, y );\n\t\t\tcontext.restore();\n\n\t\t} else if ( element instanceof HTMLImageElement ) {\n\n\t\t\tconst rect = element.getBoundingClientRect();\n\n\t\t\tx = rect.left - offset.left - 0.5;\n\t\t\ty = rect.top - offset.top - 0.5;\n\t\t\twidth = rect.width;\n\t\t\theight = rect.height;\n\n\t\t\tcontext.drawImage( element, x, y, width, height );\n\n\t\t} else {\n\n\t\t\tconst rect = element.getBoundingClientRect();\n\n\t\t\tx = rect.left - offset.left - 0.5;\n\t\t\ty = rect.top - offset.top - 0.5;\n\t\t\twidth = rect.width;\n\t\t\theight = rect.height;\n\n\t\t\tstyle = window.getComputedStyle( element );\n\n\t\t\t// Get the border of the element used for fill and border\n\n\t\t\tbuildRectPath( x, y, width, height, parseFloat( style.borderRadius ) );\n\n\t\t\tconst backgroundColor = style.backgroundColor;\n\n\t\t\tif ( backgroundColor !== 'transparent' && backgroundColor !== 'rgba(0, 0, 0, 0)' ) {\n\n\t\t\t\tcontext.fillStyle = backgroundColor;\n\t\t\t\tcontext.fill();\n\n\t\t\t}\n\n\t\t\t// If all the borders match then stroke the round rectangle\n\n\t\t\tconst borders = [ 'borderTop', 'borderLeft', 'borderBottom', 'borderRight' ];\n\n\t\t\tlet match = true;\n\t\t\tlet prevBorder = null;\n\n\t\t\tfor ( const border of borders ) {\n\n\t\t\t\tif ( prevBorder !== null ) {\n\n\t\t\t\t\tmatch = ( style[ border + 'Width' ] === style[ prevBorder + 'Width' ] ) &&\n\t\t\t\t\t( style[ border + 'Color' ] === style[ prevBorder + 'Color' ] ) &&\n\t\t\t\t\t( style[ border + 'Style' ] === style[ prevBorder + 'Style' ] );\n\n\t\t\t\t}\n\n\t\t\t\tif ( match === false ) break;\n\n\t\t\t\tprevBorder = border;\n\n\t\t\t}\n\n\t\t\tif ( match === true ) {\n\n\t\t\t\t// They all match so stroke the rectangle from before allows for border-radius\n\n\t\t\t\tconst width = parseFloat( style.borderTopWidth );\n\n\t\t\t\tif ( style.borderTopWidth !== '0px' && style.borderTopStyle !== 'none' && style.borderTopColor !== 'transparent' && style.borderTopColor !== 'rgba(0, 0, 0, 0)' ) {\n\n\t\t\t\t\tcontext.strokeStyle = style.borderTopColor;\n\t\t\t\t\tcontext.lineWidth = width;\n\t\t\t\t\tcontext.stroke();\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// Otherwise draw individual borders\n\n\t\t\t\tdrawBorder( style, 'borderTop', x, y, width, 0 );\n\t\t\t\tdrawBorder( style, 'borderLeft', x, y, 0, height );\n\t\t\t\tdrawBorder( style, 'borderBottom', x, y + height, width, 0 );\n\t\t\t\tdrawBorder( style, 'borderRight', x + width, y, 0, height );\n\n\t\t\t}\n\n\t\t\tif ( element instanceof HTMLInputElement ) {\n\n\t\t\t\tlet accentColor = style.accentColor;\n\n\t\t\t\tif ( accentColor === undefined || accentColor === 'auto' ) accentColor = style.color;\n\n\t\t\t\tcolor.set( accentColor );\n\n\t\t\t\tconst luminance = Math.sqrt( 0.299 * ( color.r ** 2 ) + 0.587 * ( color.g ** 2 ) + 0.114 * ( color.b ** 2 ) );\n\t\t\t\tconst accentTextColor = luminance < 0.5 ? 'white' : '#111111';\n\n\t\t\t\tif ( element.type === 'radio' ) {\n\n\t\t\t\t\tbuildRectPath( x, y, width, height, height );\n\n\t\t\t\t\tcontext.fillStyle = 'white';\n\t\t\t\t\tcontext.strokeStyle = accentColor;\n\t\t\t\t\tcontext.lineWidth = 1;\n\t\t\t\t\tcontext.fill();\n\t\t\t\t\tcontext.stroke();\n\n\t\t\t\t\tif ( element.checked ) {\n\n\t\t\t\t\t\tbuildRectPath( x + 2, y + 2, width - 4, height - 4, height );\n\n\t\t\t\t\t\tcontext.fillStyle = accentColor;\n\t\t\t\t\t\tcontext.strokeStyle = accentTextColor;\n\t\t\t\t\t\tcontext.lineWidth = 2;\n\t\t\t\t\t\tcontext.fill();\n\t\t\t\t\t\tcontext.stroke();\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( element.type === 'checkbox' ) {\n\n\t\t\t\t\tbuildRectPath( x, y, width, height, 2 );\n\n\t\t\t\t\tcontext.fillStyle = element.checked ? accentColor : 'white';\n\t\t\t\t\tcontext.strokeStyle = element.checked ? accentTextColor : accentColor;\n\t\t\t\t\tcontext.lineWidth = 1;\n\t\t\t\t\tcontext.stroke();\n\t\t\t\t\tcontext.fill();\n\n\t\t\t\t\tif ( element.checked ) {\n\n\t\t\t\t\t\tconst currentTextAlign = context.textAlign;\n\n\t\t\t\t\t\tcontext.textAlign = 'center';\n\n\t\t\t\t\t\tconst properties = {\n\t\t\t\t\t\t\tcolor: accentTextColor,\n\t\t\t\t\t\t\tfontFamily: style.fontFamily,\n\t\t\t\t\t\t\tfontSize: height + 'px',\n\t\t\t\t\t\t\tfontWeight: 'bold'\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tdrawText( properties, x + ( width / 2 ), y, '✔' );\n\n\t\t\t\t\t\tcontext.textAlign = currentTextAlign;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( element.type === 'range' ) {\n\n\t\t\t\t\tconst [ min, max, value ] = [ 'min', 'max', 'value' ].map( property => parseFloat( element[ property ] ) );\n\t\t\t\t\tconst position = ( ( value - min ) / ( max - min ) ) * ( width - height );\n\n\t\t\t\t\tbuildRectPath( x, y + ( height / 4 ), width, height / 2, height / 4 );\n\t\t\t\t\tcontext.fillStyle = accentTextColor;\n\t\t\t\t\tcontext.strokeStyle = accentColor;\n\t\t\t\t\tcontext.lineWidth = 1;\n\t\t\t\t\tcontext.fill();\n\t\t\t\t\tcontext.stroke();\n\n\t\t\t\t\tbuildRectPath( x, y + ( height / 4 ), position + ( height / 2 ), height / 2, height / 4 );\n\t\t\t\t\tcontext.fillStyle = accentColor;\n\t\t\t\t\tcontext.fill();\n\n\t\t\t\t\tbuildRectPath( x + position, y, height, height, height / 2 );\n\t\t\t\t\tcontext.fillStyle = accentColor;\n\t\t\t\t\tcontext.fill();\n\n\t\t\t\t}\n\n\t\t\t\tif ( element.type === 'color' || element.type === 'text' || element.type === 'number' ) {\n\n\t\t\t\t\tclipper.add( { x: x, y: y, width: width, height: height } );\n\n\t\t\t\t\tdrawText( style, x + parseInt( style.paddingLeft ), y + parseInt( style.paddingTop ), element.value );\n\n\t\t\t\t\tclipper.remove();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t/*\n\t\t// debug\n\t\tcontext.strokeStyle = '#' + Math.random().toString( 16 ).slice( - 3 );\n\t\tcontext.strokeRect( x - 0.5, y - 0.5, width + 1, height + 1 );\n\t\t*/\n\n\t\tconst isClipping = style.overflow === 'auto' || style.overflow === 'hidden';\n\n\t\tif ( isClipping ) clipper.add( { x: x, y: y, width: width, height: height } );\n\n\t\tfor ( let i = 0; i < element.childNodes.length; i ++ ) {\n\n\t\t\tdrawElement( element.childNodes[ i ], style );\n\n\t\t}\n\n\t\tif ( isClipping ) clipper.remove();\n\n\t}\n\n\tconst offset = element.getBoundingClientRect();\n\n\tlet canvas = canvases.get( element );\n\n\tif ( canvas === undefined ) {\n\n\t\tcanvas = document.createElement( 'canvas' );\n\t\tcanvas.width = offset.width;\n\t\tcanvas.height = offset.height;\n\t\tcanvases.set( element, canvas );\n\n\t}\n\n\tconst context = canvas.getContext( '2d'/*, { alpha: false }*/ );\n\n\tconst clipper = new Clipper( context );\n\n\t// console.time( 'drawElement' );\n\n\tcontext.clearRect(0, 0, canvas.width, canvas.height);\n\n\tdrawElement( element );\n\n\t// console.timeEnd( 'drawElement' );\n\n\treturn canvas;\n\n}\n\nfunction htmlevent( element, event, x, y ) {\n\n\tconst mouseEventInit = {\n\t\tclientX: ( x * element.offsetWidth ) + element.offsetLeft,\n\t\tclientY: ( y * element.offsetHeight ) + element.offsetTop,\n\t\tview: element.ownerDocument.defaultView\n\t};\n\n\t// TODO: Find out why this is added. Keep commented out when this file is updated\n\t// window.dispatchEvent( new MouseEvent( event, mouseEventInit ) );\n\n\tconst rect = element.getBoundingClientRect();\n\n\tx = x * rect.width + rect.left;\n\ty = y * rect.height + rect.top;\n\n\tfunction traverse( element ) {\n\n\t\tif ( element.nodeType !== Node.TEXT_NODE && element.nodeType !== Node.COMMENT_NODE ) {\n\n\t\t\tconst rect = element.getBoundingClientRect();\n\n\t\t\tif ( x > rect.left && x < rect.right && y > rect.top && y < rect.bottom ) {\n\n\t\t\t\telement.dispatchEvent( new MouseEvent( event, mouseEventInit ) );\n\n\t\t\t\tif ( element instanceof HTMLInputElement && element.type === 'range' && ( event === 'mousedown' || event === 'click' ) ) {\n\n\t\t\t\t\tconst [ min, max ] = [ 'min', 'max' ].map( property => parseFloat( element[ property ] ) );\n\n\t\t\t\t\tconst width = rect.width;\n\t\t\t\t\tconst offsetX = x - rect.x;\n\t\t\t\t\tconst proportion = offsetX / width;\n\t\t\t\t\telement.value = min + ( max - min ) * proportion;\n\t\t\t\t\telement.dispatchEvent( new InputEvent( 'input', { bubbles: true } ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0; i < element.childNodes.length; i ++ ) {\n\n\t\t\t\ttraverse( element.childNodes[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttraverse( element );\n\n}\n\nexport { HTMLMesh };\n","/* jshint esversion: 9, -W097 */\n/* For dealing with spline curves */\n/* global THREE, AFRAME, setTimeout, console */\n'use strict';\n\nimport { HTMLMesh } from './HTMLMesh.js';\n\nconst schemaHTML = {\n\thtml: {\n\t\ttype: 'selector',\n\t},\n\tcursor: {\n\t\ttype: 'selector',\n\t}\n};\n\ndocumentation:\n{\n\tschemaHTML.html.description = `HTML element to use.`;\n\tschemaHTML.cursor.description = `Visual indicator for where the user is currently pointing`;\n}\n\nconst _pointer = new THREE.Vector2();\nconst _event = { type: '', data: _pointer };\nAFRAME.registerComponent('html', {\n\tschema: schemaHTML,\n\tinit() {\n\t\tthis.rerender = this.rerender.bind(this);\n\t\tthis.handle = this.handle.bind(this);\n\t\tthis.onClick = e => this.handle('click', e);\n\t\tthis.onMouseLeave = e => this.handle('mouseleave', e);\n\t\tthis.onMouseEnter = e => this.handle('mouseenter', e);\n\t\tthis.onMouseUp = e => this.handle('mouseup', e);\n\t\tthis.onMouseDown = e => this.handle('mousedown', e);\n\t\tthis.mouseMoveDetail = {\n\t\t\tdetail: {\n\t\t\t\tcursorEl: null,\n\t\t\t\tintersection: null\n\t\t\t}\n\t\t};\n\t},\n\tplay() {\n\t\tthis.el.addEventListener('click', this.onClick);\n\t\tthis.el.addEventListener('mouseleave', this.onMouseLeave);\n\t\tthis.el.addEventListener('mouseenter', this.onMouseEnter);\n\t\tthis.el.addEventListener('mouseup', this.onMouseUp);\n\t\tthis.el.addEventListener('mousedown', this.onMouseDown);\n\t},\n\tpause() {\n\t\tthis.el.removeEventListener('click', this.onClick);\n\t\tthis.el.removeEventListener('mouseleave', this.onMouseLeave);\n\t\tthis.el.removeEventListener('mouseenter', this.onMouseEnter);\n\t\tthis.el.removeEventListener('mouseup', this.onMouseUp);\n\t\tthis.el.removeEventListener('mousedown', this.onMouseDown);\n\t},\n\tupdate() {\n\t\tthis.remove();\n\t\tif (!this.data.html) return;\n\t\tconst mesh = new HTMLMesh(this.data.html);\n\t\tthis.el.setObject3D('html', mesh);\n\t\tthis.data.html.addEventListener('input', this.rerender);\n\t\tthis.data.html.addEventListener('change', this.rerender);\n\t\tthis.cursor = this.data.cursor ? this.data.cursor.object3D : null;\n\t},\n\ttick() {\n\t\tif (this.activeRaycaster) {\n\t\t\tconst intersection = this.activeRaycaster.components.raycaster.getIntersection(this.el);\n\t\t\tthis.mouseMoveDetail.detail.cursorEl = this.activeRaycaster;\n\t\t\tthis.mouseMoveDetail.detail.intersection = intersection;\n\t\t\tthis.handle('mousemove', this.mouseMoveDetail);\n\t\t}\n\t},\n\thandle(type, evt) {\n\t\tconst intersection = evt.detail.intersection;\n\t\tconst raycaster = evt.detail.cursorEl;\n\t\tif (type === 'mouseenter') {\n\t\t\tthis.activeRaycaster = raycaster;\n\t\t}\n\t\tif (type === 'mouseleave' && this.activeRaycaster === raycaster) {\n\t\t\tthis.activeRaycaster = null;\n\t\t}\n\t\tif (this.cursor) this.cursor.visible = false;\n\t\tif (intersection) {\n\t\t\tconst mesh = this.el.getObject3D('html');\n\t\t\tconst uv = intersection.uv;\n\t\t\t_event.type = type;\n\t\t\t_event.data.set( uv.x, 1 - uv.y );\n\t\t\tmesh.dispatchEvent( _event );\n\n\t\t\tif (this.cursor) {\n\t\t\t\tthis.cursor.visible = true;\n\t\t\t\tthis.cursor.parent.worldToLocal(this.cursor.position.copy(intersection.point));\n\t\t\t}\n\t\t}\n\t},\n\trerender() {\n\t\tconst mesh = this.el.getObject3D('html');\n\t\tif (mesh && !mesh.material.map.scheduleUpdate) {\n\t\t\tmesh.material.map.scheduleUpdate = setTimeout( () => mesh.material.map.update(), 16 );\n\t\t}\n\t},\n\tremove() {\n\t\tconst mesh = this.el.getObject3D('html');\n\t\tif (mesh) {\n\t\t\tthis.el.removeObject3D('html');\n\t\t\tthis.data.html.removeEventListener('input', this.rerender);\n\t\t\tthis.data.html.removeEventListener('change', this.rerender);\n\t\t\tmesh.dispose();\n\t\t}\n\t\tthis.activeRaycaster = null;\n\t\tthis.mouseMoveDetail.detail.cursorEl = null;\n\t\tthis.mouseMoveDetail.detail.intersection = null;\n\t\tthis.cursor = null;\n\t},\n});\n"],"names":["HTMLMesh","Mesh","constructor","dom","texture","HTMLTexture","geometry","PlaneGeometry","image","width","height","material","MeshBasicMaterial","map","toneMapped","transparent","onEvent","event","dispatchDOMEvent","super","this","addEventListener","dispose","canvases","delete","removeEventListener","CanvasTexture","html2canvas","anisotropy","THREE","REVISION","encoding","sRGBEncoding","colorSpace","SRGBColorSpace","minFilter","LinearFilter","magFilter","observer","MutationObserver","scheduleUpdate","setTimeout","update","observe","attributes","childList","subtree","characterData","data","element","x","y","mouseEventInit","clientX","offsetWidth","offsetLeft","clientY","offsetHeight","offsetTop","view","ownerDocument","defaultView","rect","getBoundingClientRect","traverse","nodeType","Node","TEXT_NODE","COMMENT_NODE","left","right","top","bottom","dispatchEvent","MouseEvent","HTMLInputElement","type","min","max","property","parseFloat","proportion","value","InputEvent","bubbles","i","childNodes","length","htmlevent","needsUpdate","disconnect","clearTimeout","WeakMap","range","document","createRange","color","Color","drawText","style","string","textTransform","toUpperCase","context","font","fontWeight","fontSize","fontFamily","textBaseline","fillStyle","fillText","buildRectPath","w","h","r","beginPath","moveTo","arcTo","closePath","drawBorder","which","borderWidth","borderStyle","borderColor","strokeStyle","lineWidth","lineTo","stroke","offset","canvas","get","undefined","createElement","set","getContext","clipper","clips","isClipping","doClip","restore","minX","Infinity","minY","maxX","maxY","clip","Math","save","add","push","remove","pop","clearRect","drawElement","nodeName","display","selectNode","nodeValue","trim","HTMLCanvasElement","dpr","window","devicePixelRatio","scale","drawImage","HTMLImageElement","getComputedStyle","borderRadius","backgroundColor","fill","borders","match","prevBorder","border","borderTopWidth","borderTopStyle","borderTopColor","accentColor","accentTextColor","sqrt","g","b","checked","currentTextAlign","textAlign","position","parseInt","paddingLeft","paddingTop","overflow","_event","Vector2","AFRAME","registerComponent","schema","html","cursor","init","rerender","bind","handle","onClick","e","onMouseLeave","onMouseEnter","onMouseUp","onMouseDown","mouseMoveDetail","detail","cursorEl","intersection","play","el","pause","mesh","setObject3D","object3D","tick","activeRaycaster","components","raycaster","getIntersection","evt","visible","getObject3D","uv","parent","worldToLocal","copy","point","removeObject3D"],"mappings":"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"}
+\ No newline at end of file
++{"version":3,"file":"aframe-html.min.js","sources":["../src/HTMLMesh.js","../src/aframe-html.js"],"sourcesContent":["// This is a copy of https://github.com/mrdoob/three.js/blob/0403020848c26a9605eb91c99a949111ad4a532e/examples/jsm/interactive/HTMLMesh.js\n// with the following changes:\n// - Keep compatibility with three r147 aframe 1.4.2, still using \"this.encoding = sRGBEncoding\", otherwise using \"this.colorSpace = SRGBColorSpace;\"\n// - window.dispatchEvent line commented, see the TODO below.\n// Look at https://github.com/mrdoob/three.js/commits/dev/examples/jsm/interactive/HTMLMesh.js\n// to see if there are other changes that can be retrieved here.\nimport {\n\tCanvasTexture,\n\tLinearFilter,\n\tMesh,\n\tMeshBasicMaterial,\n\tPlaneGeometry,\n\tSRGBColorSpace,\n\tsRGBEncoding,\n\tColor\n} from 'three';\n\nclass HTMLMesh extends Mesh {\n\n\tconstructor( dom ) {\n\n\t\tconst texture = new HTMLTexture( dom );\n\n\t\tconst geometry = new PlaneGeometry( texture.image.width * 0.001, texture.image.height * 0.001 );\n\t\tconst material = new MeshBasicMaterial( { map: texture, toneMapped: false, transparent: true } );\n\n\t\tsuper( geometry, material );\n\n\t\tfunction onEvent( event ) {\n\n\t\t\tmaterial.map.dispatchDOMEvent( event );\n\n\t\t}\n\n\t\tthis.addEventListener( 'mousedown', onEvent );\n\t\tthis.addEventListener( 'mousemove', onEvent );\n\t\tthis.addEventListener( 'mouseup', onEvent );\n\t\tthis.addEventListener( 'click', onEvent );\n\n\t\tthis.dispose = function () {\n\n\t\t\tgeometry.dispose();\n\t\t\tmaterial.dispose();\n\n\t\t\tmaterial.map.dispose();\n\n\t\t\tcanvases.delete( dom );\n\n\t\t\tthis.removeEventListener( 'mousedown', onEvent );\n\t\t\tthis.removeEventListener( 'mousemove', onEvent );\n\t\t\tthis.removeEventListener( 'mouseup', onEvent );\n\t\t\tthis.removeEventListener( 'click', onEvent );\n\n\t\t};\n\n\t}\n\n}\n\nclass HTMLTexture extends CanvasTexture {\n\n\tconstructor( dom ) {\n\n\t\tsuper( html2canvas( dom ) );\n\n\t\tthis.dom = dom;\n\n\t\tthis.anisotropy = 16;\n\t\tif ( THREE.REVISION === '147' ) { // Keep compatibility with aframe 1.4.2\n\n\t\t\tthis.encoding = sRGBEncoding;\n\n\t\t} else {\n\n\t\t\tthis.colorSpace = SRGBColorSpace;\n\n\t\t}\n\n\t\tthis.minFilter = LinearFilter;\n\t\tthis.magFilter = LinearFilter;\n\n\t\t// Create an observer on the DOM, and run html2canvas update in the next loop\n\t\tconst observer = new MutationObserver( () => {\n\n\t\t\tif ( ! this.scheduleUpdate ) {\n\n\t\t\t\t// ideally should use xr.requestAnimationFrame, here setTimeout to avoid passing the renderer\n\t\t\t\tthis.scheduleUpdate = setTimeout( () => this.update(), 16 );\n\n\t\t\t}\n\n\t\t} );\n\n\t\tconst config = { attributes: true, childList: true, subtree: true, characterData: true };\n\t\tobserver.observe( dom, config );\n\n\t\tthis.observer = observer;\n\n\t}\n\n\tdispatchDOMEvent( event ) {\n\n\t\tif ( event.data ) {\n\n\t\t\thtmlevent( this.dom, event.type, event.data.x, event.data.y );\n\n\t\t}\n\n\t}\n\n\tupdate() {\n\n\t\tthis.image = html2canvas( this.dom );\n\t\tthis.needsUpdate = true;\n\n\t\tthis.scheduleUpdate = null;\n\n\t}\n\n\tdispose() {\n\n\t\tif ( this.observer ) {\n\n\t\t\tthis.observer.disconnect();\n\n\t\t}\n\n\t\tthis.scheduleUpdate = clearTimeout( this.scheduleUpdate );\n\n\t\tsuper.dispose();\n\n\t}\n\n}\n\n\n//\n\nconst canvases = new WeakMap();\n\nfunction html2canvas( element ) {\n\n\tconst range = document.createRange();\n\tconst color = new Color();\n\n\tfunction Clipper( context ) {\n\n\t\tconst clips = [];\n\t\tlet isClipping = false;\n\n\t\tfunction doClip() {\n\n\t\t\tif ( isClipping ) {\n\n\t\t\t\tisClipping = false;\n\t\t\t\tcontext.restore();\n\n\t\t\t}\n\n\t\t\tif ( clips.length === 0 ) return;\n\n\t\t\tlet minX = - Infinity, minY = - Infinity;\n\t\t\tlet maxX = Infinity, maxY = Infinity;\n\n\t\t\tfor ( let i = 0; i < clips.length; i ++ ) {\n\n\t\t\t\tconst clip = clips[ i ];\n\n\t\t\t\tminX = Math.max( minX, clip.x );\n\t\t\t\tminY = Math.max( minY, clip.y );\n\t\t\t\tmaxX = Math.min( maxX, clip.x + clip.width );\n\t\t\t\tmaxY = Math.min( maxY, clip.y + clip.height );\n\n\t\t\t}\n\n\t\t\tcontext.save();\n\t\t\tcontext.beginPath();\n\t\t\tcontext.rect( minX, minY, maxX - minX, maxY - minY );\n\t\t\tcontext.clip();\n\n\t\t\tisClipping = true;\n\n\t\t}\n\n\t\treturn {\n\n\t\t\tadd: function ( clip ) {\n\n\t\t\t\tclips.push( clip );\n\t\t\t\tdoClip();\n\n\t\t\t},\n\n\t\t\tremove: function () {\n\n\t\t\t\tclips.pop();\n\t\t\t\tdoClip();\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\tfunction segmentWords(text) {\n try {\n\t\t\tconst segmenter = new Intl.Segmenter(void 0, {\n\t\t\t\t\tgranularity: 'word'\n\t\t\t});\n\t\t\treturn Array.from(segmenter.segment(text)).map((segment) => segment.segment);\n\t\t} catch (error) {\n\t\t\tconsole.error('Error segmenting text:', error);\n\t\t\treturn text.split( \" \" );\n\t\t}\n\t}\n\n\tfunction getLines( ctx, text, maxWidth ) {\n\t\tconst words = segmentWords(text);\n\n\n\t\tconst lines = [];\n\t\tlet currentLine = words[0];\n\n\t\tfor (let i = 1; i < words.length; i++) {\n\n\t\t\tconst word = words[i];\n\t\t\tconst width = ctx.measureText( currentLine + \" \" + word ).width;\n\t\t\tconst safeMaxWith = width * 0.5; // for JP\n\t\t\tif ( width < safeMaxWith ) {\n\t\t\t\tcurrentLine += \" \" + word;\n\t\t\t} else {\n\t\t\t\tlines.push( currentLine );\n\t\t\t\tconsole.log('currentLine', currentLine);\n\t\t\t\tcurrentLine = word;\n\t\t\t}\n\t\t}\n\t\tlines.push(currentLine);\n\t\treturn lines;\n\t}\n\n\tfunction drawText( style, x, y, string, maxWidth ) {\n\n\t\tif ( string !== '' ) {\n\n\t\t\tif ( style.textTransform === 'uppercase' ) {\n\n\t\t\t\tstring = string.toUpperCase();\n\n\t\t\t}\n\n\t\t\tcontext.font = style.fontWeight + ' ' + style.fontSize + ' ' + style.fontFamily;\n\t\t\tcontext.textBaseline = 'top';\n\t\t\tcontext.fillStyle = style.color;\n\n\t\t\tif ( !maxWidth ) {\n\t\t\t\tcontext.fillText( string, x, y + parseFloat( style.fontSize ) * 0.1 );\n\t\t\t} else {\n\t\t\t\tconst lines = getLines(context, string, maxWidth);\n\t\t\t\tlines.forEach(function(line, i) {\n\t\t\t\t\tcontext.fillText( line, x, y + parseFloat( style.fontSize ) * 0.1 + i * parseFloat( style.fontSize ) * 1.3 );\n\t\t\t\t});\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction buildRectPath( x, y, w, h, r ) {\n\n\t\tif ( w < 2 * r ) r = w / 2;\n\t\tif ( h < 2 * r ) r = h / 2;\n\n\t\tcontext.beginPath();\n\t\tcontext.moveTo( x + r, y );\n\t\tcontext.arcTo( x + w, y, x + w, y + h, r );\n\t\tcontext.arcTo( x + w, y + h, x, y + h, r );\n\t\tcontext.arcTo( x, y + h, x, y, r );\n\t\tcontext.arcTo( x, y, x + w, y, r );\n\t\tcontext.closePath();\n\n\t}\n\n\tfunction drawBorder( style, which, x, y, width, height ) {\n\n\t\tconst borderWidth = style[ which + 'Width' ];\n\t\tconst borderStyle = style[ which + 'Style' ];\n\t\tconst borderColor = style[ which + 'Color' ];\n\n\t\tif ( borderWidth !== '0px' && borderStyle !== 'none' && borderColor !== 'transparent' && borderColor !== 'rgba(0, 0, 0, 0)' ) {\n\n\t\t\tcontext.strokeStyle = borderColor;\n\t\t\tcontext.lineWidth = parseFloat( borderWidth );\n\t\t\tcontext.beginPath();\n\t\t\tcontext.moveTo( x, y );\n\t\t\tcontext.lineTo( x + width, y + height );\n\t\t\tcontext.stroke();\n\n\t\t}\n\n\t}\n\n\tfunction drawElement( element, style ) {\n\n\t\t// Do not render invisible elements, comments and scripts.\n\t\tif ( element.nodeType === Node.COMMENT_NODE || element.nodeName === 'SCRIPT' || ( element.style && element.style.display === 'none' ) ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tlet x = 0, y = 0, width = 0, height = 0;\n\n\t\tif ( element.nodeType === Node.TEXT_NODE ) {\n\n\t\t\t// text\n\n\t\t\trange.selectNode( element );\n\n\t\t\tconst rect = range.getBoundingClientRect();\n\n\t\t\tx = rect.left - offset.left - 0.5;\n\t\t\ty = rect.top - offset.top - 0.5;\n\t\t\twidth = rect.width;\n\t\t\theight = rect.height;\n\t\t\t// On Quest the font used to draw on canvas is bigger than on\n\t\t\t// the desktop, compensate for this.\n\t\t\tconst maxWidth = width * 1.01; // 1.005 is good, but use 1.01 to be sure\n\t\t\tdrawText( style, x, y, element.nodeValue.trim(), maxWith );\n\n\t\t} else if ( element instanceof HTMLCanvasElement ) {\n\n\t\t\t// Canvas element\n\n\t\t\tconst rect = element.getBoundingClientRect();\n\n\t\t\tx = rect.left - offset.left - 0.5;\n\t\t\ty = rect.top - offset.top - 0.5;\n\n\t\t context.save();\n\t\t\tconst dpr = window.devicePixelRatio;\n\t\t\tcontext.scale( 1 / dpr, 1 / dpr );\n\t\t\tcontext.drawImage( element, x, y );\n\t\t\tcontext.restore();\n\n\t\t} else if ( element instanceof HTMLImageElement ) {\n\n\t\t\tconst rect = element.getBoundingClientRect();\n\n\t\t\tx = rect.left - offset.left - 0.5;\n\t\t\ty = rect.top - offset.top - 0.5;\n\t\t\twidth = rect.width;\n\t\t\theight = rect.height;\n\n\t\t\tcontext.drawImage( element, x, y, width, height );\n\n\t\t} else {\n\n\t\t\tconst rect = element.getBoundingClientRect();\n\n\t\t\tx = rect.left - offset.left - 0.5;\n\t\t\ty = rect.top - offset.top - 0.5;\n\t\t\twidth = rect.width;\n\t\t\theight = rect.height;\n\n\t\t\tstyle = window.getComputedStyle( element );\n\n\t\t\t// Get the border of the element used for fill and border\n\n\t\t\tbuildRectPath( x, y, width, height, parseFloat( style.borderRadius ) );\n\n\t\t\tconst backgroundColor = style.backgroundColor;\n\n\t\t\tif ( backgroundColor !== 'transparent' && backgroundColor !== 'rgba(0, 0, 0, 0)' ) {\n\n\t\t\t\tcontext.fillStyle = backgroundColor;\n\t\t\t\tcontext.fill();\n\n\t\t\t}\n\n\t\t\t// If all the borders match then stroke the round rectangle\n\n\t\t\tconst borders = [ 'borderTop', 'borderLeft', 'borderBottom', 'borderRight' ];\n\n\t\t\tlet match = true;\n\t\t\tlet prevBorder = null;\n\n\t\t\tfor ( const border of borders ) {\n\n\t\t\t\tif ( prevBorder !== null ) {\n\n\t\t\t\t\tmatch = ( style[ border + 'Width' ] === style[ prevBorder + 'Width' ] ) &&\n\t\t\t\t\t( style[ border + 'Color' ] === style[ prevBorder + 'Color' ] ) &&\n\t\t\t\t\t( style[ border + 'Style' ] === style[ prevBorder + 'Style' ] );\n\n\t\t\t\t}\n\n\t\t\t\tif ( match === false ) break;\n\n\t\t\t\tprevBorder = border;\n\n\t\t\t}\n\n\t\t\tif ( match === true ) {\n\n\t\t\t\t// They all match so stroke the rectangle from before allows for border-radius\n\n\t\t\t\tconst width = parseFloat( style.borderTopWidth );\n\n\t\t\t\tif ( style.borderTopWidth !== '0px' && style.borderTopStyle !== 'none' && style.borderTopColor !== 'transparent' && style.borderTopColor !== 'rgba(0, 0, 0, 0)' ) {\n\n\t\t\t\t\tcontext.strokeStyle = style.borderTopColor;\n\t\t\t\t\tcontext.lineWidth = width;\n\t\t\t\t\tcontext.stroke();\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// Otherwise draw individual borders\n\n\t\t\t\tdrawBorder( style, 'borderTop', x, y, width, 0 );\n\t\t\t\tdrawBorder( style, 'borderLeft', x, y, 0, height );\n\t\t\t\tdrawBorder( style, 'borderBottom', x, y + height, width, 0 );\n\t\t\t\tdrawBorder( style, 'borderRight', x + width, y, 0, height );\n\n\t\t\t}\n\n\t\t\tif ( element instanceof HTMLInputElement ) {\n\n\t\t\t\tlet accentColor = style.accentColor;\n\n\t\t\t\tif ( accentColor === undefined || accentColor === 'auto' ) accentColor = style.color;\n\n\t\t\t\tcolor.set( accentColor );\n\n\t\t\t\tconst luminance = Math.sqrt( 0.299 * ( color.r ** 2 ) + 0.587 * ( color.g ** 2 ) + 0.114 * ( color.b ** 2 ) );\n\t\t\t\tconst accentTextColor = luminance < 0.5 ? 'white' : '#111111';\n\n\t\t\t\tif ( element.type === 'radio' ) {\n\n\t\t\t\t\tbuildRectPath( x, y, width, height, height );\n\n\t\t\t\t\tcontext.fillStyle = 'white';\n\t\t\t\t\tcontext.strokeStyle = accentColor;\n\t\t\t\t\tcontext.lineWidth = 1;\n\t\t\t\t\tcontext.fill();\n\t\t\t\t\tcontext.stroke();\n\n\t\t\t\t\tif ( element.checked ) {\n\n\t\t\t\t\t\tbuildRectPath( x + 2, y + 2, width - 4, height - 4, height );\n\n\t\t\t\t\t\tcontext.fillStyle = accentColor;\n\t\t\t\t\t\tcontext.strokeStyle = accentTextColor;\n\t\t\t\t\t\tcontext.lineWidth = 2;\n\t\t\t\t\t\tcontext.fill();\n\t\t\t\t\t\tcontext.stroke();\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( element.type === 'checkbox' ) {\n\n\t\t\t\t\tbuildRectPath( x, y, width, height, 2 );\n\n\t\t\t\t\tcontext.fillStyle = element.checked ? accentColor : 'white';\n\t\t\t\t\tcontext.strokeStyle = element.checked ? accentTextColor : accentColor;\n\t\t\t\t\tcontext.lineWidth = 1;\n\t\t\t\t\tcontext.stroke();\n\t\t\t\t\tcontext.fill();\n\n\t\t\t\t\tif ( element.checked ) {\n\n\t\t\t\t\t\tconst currentTextAlign = context.textAlign;\n\n\t\t\t\t\t\tcontext.textAlign = 'center';\n\n\t\t\t\t\t\tconst properties = {\n\t\t\t\t\t\t\tcolor: accentTextColor,\n\t\t\t\t\t\t\tfontFamily: style.fontFamily,\n\t\t\t\t\t\t\tfontSize: height + 'px',\n\t\t\t\t\t\t\tfontWeight: 'bold'\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tdrawText( properties, x + ( width / 2 ), y, '✔' );\n\n\t\t\t\t\t\tcontext.textAlign = currentTextAlign;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( element.type === 'range' ) {\n\n\t\t\t\t\tconst [ min, max, value ] = [ 'min', 'max', 'value' ].map( property => parseFloat( element[ property ] ) );\n\t\t\t\t\tconst position = ( ( value - min ) / ( max - min ) ) * ( width - height );\n\n\t\t\t\t\tbuildRectPath( x, y + ( height / 4 ), width, height / 2, height / 4 );\n\t\t\t\t\tcontext.fillStyle = accentTextColor;\n\t\t\t\t\tcontext.strokeStyle = accentColor;\n\t\t\t\t\tcontext.lineWidth = 1;\n\t\t\t\t\tcontext.fill();\n\t\t\t\t\tcontext.stroke();\n\n\t\t\t\t\tbuildRectPath( x, y + ( height / 4 ), position + ( height / 2 ), height / 2, height / 4 );\n\t\t\t\t\tcontext.fillStyle = accentColor;\n\t\t\t\t\tcontext.fill();\n\n\t\t\t\t\tbuildRectPath( x + position, y, height, height, height / 2 );\n\t\t\t\t\tcontext.fillStyle = accentColor;\n\t\t\t\t\tcontext.fill();\n\n\t\t\t\t}\n\n\t\t\t\tif ( element.type === 'color' || element.type === 'text' || element.type === 'number' ) {\n\n\t\t\t\t\tclipper.add( { x: x, y: y, width: width, height: height } );\n\n\t\t\t\t\tdrawText( style, x + parseInt( style.paddingLeft ), y + parseInt( style.paddingTop ), element.value );\n\n\t\t\t\t\tclipper.remove();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t/*\n\t\t// debug\n\t\tcontext.strokeStyle = '#' + Math.random().toString( 16 ).slice( - 3 );\n\t\tcontext.strokeRect( x - 0.5, y - 0.5, width + 1, height + 1 );\n\t\t*/\n\n\t\tconst isClipping = style.overflow === 'auto' || style.overflow === 'hidden';\n\n\t\tif ( isClipping ) clipper.add( { x: x, y: y, width: width, height: height } );\n\n\t\tfor ( let i = 0; i < element.childNodes.length; i ++ ) {\n\n\t\t\tdrawElement( element.childNodes[ i ], style );\n\n\t\t}\n\n\t\tif ( isClipping ) clipper.remove();\n\n\t}\n\n\tconst offset = element.getBoundingClientRect();\n\n\tlet canvas = canvases.get( element );\n\n\tif ( canvas === undefined ) {\n\n\t\tcanvas = document.createElement( 'canvas' );\n\t\tcanvas.width = offset.width;\n\t\tcanvas.height = offset.height;\n\t\tcanvases.set( element, canvas );\n\n\t}\n\n\tconst context = canvas.getContext( '2d'/*, { alpha: false }*/ );\n\n\tconst clipper = new Clipper( context );\n\n\t// console.time( 'drawElement' );\n\n\tcontext.clearRect(0, 0, canvas.width, canvas.height);\n\n\tdrawElement( element );\n\n\t// console.timeEnd( 'drawElement' );\n\n\treturn canvas;\n\n}\n\nfunction htmlevent( element, event, x, y ) {\n\n\tconst mouseEventInit = {\n\t\tclientX: ( x * element.offsetWidth ) + element.offsetLeft,\n\t\tclientY: ( y * element.offsetHeight ) + element.offsetTop,\n\t\tview: element.ownerDocument.defaultView\n\t};\n\n\t// TODO: Find out why this is added. Keep commented out when this file is updated\n\t// window.dispatchEvent( new MouseEvent( event, mouseEventInit ) );\n\n\tconst rect = element.getBoundingClientRect();\n\n\tx = x * rect.width + rect.left;\n\ty = y * rect.height + rect.top;\n\n\tfunction traverse( element ) {\n\n\t\tif ( element.nodeType !== Node.TEXT_NODE && element.nodeType !== Node.COMMENT_NODE ) {\n\n\t\t\tconst rect = element.getBoundingClientRect();\n\n\t\t\tif ( x > rect.left && x < rect.right && y > rect.top && y < rect.bottom ) {\n\n\t\t\t\telement.dispatchEvent( new MouseEvent( event, mouseEventInit ) );\n\n\t\t\t\tif ( element instanceof HTMLInputElement && element.type === 'range' && ( event === 'mousedown' || event === 'click' ) ) {\n\n\t\t\t\t\tconst [ min, max ] = [ 'min', 'max' ].map( property => parseFloat( element[ property ] ) );\n\n\t\t\t\t\tconst width = rect.width;\n\t\t\t\t\tconst offsetX = x - rect.x;\n\t\t\t\t\tconst proportion = offsetX / width;\n\t\t\t\t\telement.value = min + ( max - min ) * proportion;\n\t\t\t\t\telement.dispatchEvent( new InputEvent( 'input', { bubbles: true } ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0; i < element.childNodes.length; i ++ ) {\n\n\t\t\t\ttraverse( element.childNodes[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttraverse( element );\n\n}\n\nexport { HTMLMesh };\n","/* jshint esversion: 9, -W097 */\n/* For dealing with spline curves */\n/* global THREE, AFRAME, setTimeout, console */\n'use strict';\n\nimport { HTMLMesh } from './HTMLMesh.js';\n\nconst schemaHTML = {\n\thtml: {\n\t\ttype: 'selector',\n\t},\n\tcursor: {\n\t\ttype: 'selector',\n\t}\n};\n\ndocumentation:\n{\n\tschemaHTML.html.description = `HTML element to use.`;\n\tschemaHTML.cursor.description = `Visual indicator for where the user is currently pointing`;\n}\n\nconst _pointer = new THREE.Vector2();\nconst _event = { type: '', data: _pointer };\nAFRAME.registerComponent('html', {\n\tschema: schemaHTML,\n\tinit() {\n\t\tthis.rerender = this.rerender.bind(this);\n\t\tthis.handle = this.handle.bind(this);\n\t\tthis.onClick = e => this.handle('click', e);\n\t\tthis.onMouseLeave = e => this.handle('mouseleave', e);\n\t\tthis.onMouseEnter = e => this.handle('mouseenter', e);\n\t\tthis.onMouseUp = e => this.handle('mouseup', e);\n\t\tthis.onMouseDown = e => this.handle('mousedown', e);\n\t\tthis.mouseMoveDetail = {\n\t\t\tdetail: {\n\t\t\t\tcursorEl: null,\n\t\t\t\tintersection: null\n\t\t\t}\n\t\t};\n\t},\n\tplay() {\n\t\tthis.el.addEventListener('click', this.onClick);\n\t\tthis.el.addEventListener('mouseleave', this.onMouseLeave);\n\t\tthis.el.addEventListener('mouseenter', this.onMouseEnter);\n\t\tthis.el.addEventListener('mouseup', this.onMouseUp);\n\t\tthis.el.addEventListener('mousedown', this.onMouseDown);\n\t},\n\tpause() {\n\t\tthis.el.removeEventListener('click', this.onClick);\n\t\tthis.el.removeEventListener('mouseleave', this.onMouseLeave);\n\t\tthis.el.removeEventListener('mouseenter', this.onMouseEnter);\n\t\tthis.el.removeEventListener('mouseup', this.onMouseUp);\n\t\tthis.el.removeEventListener('mousedown', this.onMouseDown);\n\t},\n\tupdate() {\n\t\tthis.remove();\n\t\tif (!this.data.html) return;\n\t\tconst mesh = new HTMLMesh(this.data.html);\n\t\tthis.el.setObject3D('html', mesh);\n\t\tthis.data.html.addEventListener('input', this.rerender);\n\t\tthis.data.html.addEventListener('change', this.rerender);\n\t\tthis.cursor = this.data.cursor ? this.data.cursor.object3D : null;\n\t},\n\ttick() {\n\t\tif (this.activeRaycaster) {\n\t\t\tconst intersection = this.activeRaycaster.components.raycaster.getIntersection(this.el);\n\t\t\tthis.mouseMoveDetail.detail.cursorEl = this.activeRaycaster;\n\t\t\tthis.mouseMoveDetail.detail.intersection = intersection;\n\t\t\tthis.handle('mousemove', this.mouseMoveDetail);\n\t\t}\n\t},\n\thandle(type, evt) {\n\t\tconst intersection = evt.detail.intersection;\n\t\tconst raycaster = evt.detail.cursorEl;\n\t\tif (type === 'mouseenter') {\n\t\t\tthis.activeRaycaster = raycaster;\n\t\t}\n\t\tif (type === 'mouseleave' && this.activeRaycaster === raycaster) {\n\t\t\tthis.activeRaycaster = null;\n\t\t}\n\t\tif (this.cursor) this.cursor.visible = false;\n\t\tif (intersection) {\n\t\t\tconst mesh = this.el.getObject3D('html');\n\t\t\tconst uv = intersection.uv;\n\t\t\t_event.type = type;\n\t\t\t_event.data.set( uv.x, 1 - uv.y );\n\t\t\tmesh.dispatchEvent( _event );\n\n\t\t\tif (this.cursor) {\n\t\t\t\tthis.cursor.visible = true;\n\t\t\t\tthis.cursor.parent.worldToLocal(this.cursor.position.copy(intersection.point));\n\t\t\t}\n\t\t}\n\t},\n\trerender() {\n\t\tconst mesh = this.el.getObject3D('html');\n\t\tif (mesh && !mesh.material.map.scheduleUpdate) {\n\t\t\tmesh.material.map.scheduleUpdate = setTimeout( () => mesh.material.map.update(), 16 );\n\t\t}\n\t},\n\tremove() {\n\t\tconst mesh = this.el.getObject3D('html');\n\t\tif (mesh) {\n\t\t\tthis.el.removeObject3D('html');\n\t\t\tthis.data.html.removeEventListener('input', this.rerender);\n\t\t\tthis.data.html.removeEventListener('change', this.rerender);\n\t\t\tmesh.dispose();\n\t\t}\n\t\tthis.activeRaycaster = null;\n\t\tthis.mouseMoveDetail.detail.cursorEl = null;\n\t\tthis.mouseMoveDetail.detail.intersection = null;\n\t\tthis.cursor = null;\n\t},\n});\n"],"names":["HTMLMesh","Mesh","constructor","dom","texture","HTMLTexture","geometry","PlaneGeometry","image","width","height","material","MeshBasicMaterial","map","toneMapped","transparent","onEvent","event","dispatchDOMEvent","super","this","addEventListener","dispose","canvases","delete","removeEventListener","CanvasTexture","html2canvas","anisotropy","THREE","REVISION","encoding","sRGBEncoding","colorSpace","SRGBColorSpace","minFilter","LinearFilter","magFilter","observer","MutationObserver","scheduleUpdate","setTimeout","update","observe","attributes","childList","subtree","characterData","data","element","x","y","mouseEventInit","clientX","offsetWidth","offsetLeft","clientY","offsetHeight","offsetTop","view","ownerDocument","defaultView","rect","getBoundingClientRect","traverse","nodeType","Node","TEXT_NODE","COMMENT_NODE","left","right","top","bottom","dispatchEvent","MouseEvent","HTMLInputElement","type","min","max","property","parseFloat","proportion","value","InputEvent","bubbles","i","childNodes","length","htmlevent","needsUpdate","disconnect","clearTimeout","WeakMap","range","document","createRange","color","Color","getLines","ctx","text","maxWidth","words","segmenter","Intl","Segmenter","granularity","Array","from","segment","error","split","segmentWords","lines","currentLine","word","measureText","push","drawText","style","string","textTransform","toUpperCase","context","font","fontWeight","fontSize","fontFamily","textBaseline","fillStyle","forEach","line","fillText","buildRectPath","w","h","r","beginPath","moveTo","arcTo","closePath","drawBorder","which","borderWidth","borderStyle","borderColor","strokeStyle","lineWidth","lineTo","stroke","offset","canvas","get","undefined","createElement","set","getContext","clipper","clips","isClipping","doClip","restore","minX","Infinity","minY","maxX","maxY","clip","Math","save","add","remove","pop","clearRect","drawElement","nodeName","display","selectNode","nodeValue","trim","maxWith","HTMLCanvasElement","dpr","window","devicePixelRatio","scale","drawImage","HTMLImageElement","getComputedStyle","borderRadius","backgroundColor","fill","borders","match","prevBorder","border","borderTopWidth","borderTopStyle","borderTopColor","accentColor","accentTextColor","sqrt","g","b","checked","currentTextAlign","textAlign","position","parseInt","paddingLeft","paddingTop","overflow","_event","Vector2","AFRAME","registerComponent","schema","html","cursor","init","rerender","bind","handle","onClick","e","onMouseLeave","onMouseEnter","onMouseUp","onMouseDown","mouseMoveDetail","detail","cursorEl","intersection","play","el","pause","mesh","setObject3D","object3D","tick","activeRaycaster","components","raycaster","getIntersection","evt","visible","getObject3D","uv","parent","worldToLocal","copy","point","removeObject3D"],"mappings":"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"}
+\ No newline at end of file
diff --git a/src/HTMLMesh.js b/src/HTMLMesh.js
-index 61be00ea704e775e3a15b42717ec76a35b58c8b7..992c1cfc553875cf8e35dce4bcbaf0c82c19d0f1 100644
+index 61be00ea704e775e3a15b42717ec76a35b58c8b7..333b8cdfb44bfb139ce3cc0bee0c663cf4a6e885 100644
--- a/src/HTMLMesh.js
+++ b/src/HTMLMesh.js
-@@ -202,7 +202,27 @@ function html2canvas( element ) {
+@@ -202,7 +202,43 @@ function html2canvas( element ) {
}
- function drawText( style, x, y, string ) {
++ function segmentWords(text) {
++ try {
++ const segmenter = new Intl.Segmenter(void 0, {
++ granularity: 'word'
++ });
++ return Array.from(segmenter.segment(text)).map((segment) => segment.segment);
++ } catch (error) {
++ console.error('Error segmenting text:', error);
++ return text.split( " " );
++ }
++ }
++
+ function getLines( ctx, text, maxWidth ) {
-+ const words = text.split( " " );
++ const words = segmentWords(text);
++
++
+ const lines = [];
+ let currentLine = words[0];
+
@@ -16,10 +132,12 @@ index 61be00ea704e775e3a15b42717ec76a35b58c8b7..992c1cfc553875cf8e35dce4bcbaf0c8
+
+ const word = words[i];
+ const width = ctx.measureText( currentLine + " " + word ).width;
-+ if ( width < maxWidth ) {
++ const safeMaxWith = width * 0.5; // for JP
++ if ( width < safeMaxWith ) {
+ currentLine += " " + word;
+ } else {
+ lines.push( currentLine );
++ console.log('currentLine', currentLine);
+ currentLine = word;
+ }
+ }
@@ -31,7 +149,7 @@ index 61be00ea704e775e3a15b42717ec76a35b58c8b7..992c1cfc553875cf8e35dce4bcbaf0c8
if ( string !== '' ) {
-@@ -215,7 +235,15 @@ function html2canvas( element ) {
+@@ -215,7 +251,15 @@ function html2canvas( element ) {
context.font = style.fontWeight + ' ' + style.fontSize + ' ' + style.fontFamily;
context.textBaseline = 'top';
context.fillStyle = style.color;
@@ -48,16 +166,16 @@ index 61be00ea704e775e3a15b42717ec76a35b58c8b7..992c1cfc553875cf8e35dce4bcbaf0c8
}
-@@ -278,8 +306,11 @@ function html2canvas( element ) {
+@@ -278,8 +322,10 @@ function html2canvas( element ) {
y = rect.top - offset.top - 0.5;
width = rect.width;
height = rect.height;
+-
+- drawText( style, x, y, element.nodeValue.trim() );
+ // On Quest the font used to draw on canvas is bigger than on
+ // the desktop, compensate for this.
+ const maxWidth = width * 1.01; // 1.005 is good, but use 1.01 to be sure
-
-- drawText( style, x, y, element.nodeValue.trim() );
-+ drawText( style, x, y, element.nodeValue.trim(), maxWidth );
++ drawText( style, x, y, element.nodeValue.trim(), maxWith );
} else if ( element instanceof HTMLCanvasElement ) {
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index a0c6848..160d38c 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -9,7 +9,7 @@ patchedDependencies:
hash: fkxkmk4446wrhwzvr25ai6luki
path: patches/@babylonjs__addons@7.40.2.patch
aframe-htmlmesh@2.3.0:
- hash: 2l6ilim4ajdexz7jd7jycj3654
+ hash: j64wlmxnxf3o2rbubtoiazcn4y
path: patches/aframe-htmlmesh@2.3.0.patch
dependencies:
@@ -30,7 +30,7 @@ dependencies:
version: 1.6.0
aframe-htmlmesh:
specifier: ^2.3.0
- version: 2.3.0(patch_hash=2l6ilim4ajdexz7jd7jycj3654)
+ version: 2.3.0(patch_hash=j64wlmxnxf3o2rbubtoiazcn4y)
babylon-htmlmesh:
specifier: ^2.0.1
version: 2.0.1(@babylonjs/core@7.40.2)
@@ -462,7 +462,7 @@ packages:
negotiator: 0.6.3
dev: true
- /aframe-htmlmesh@2.3.0(patch_hash=2l6ilim4ajdexz7jd7jycj3654):
+ /aframe-htmlmesh@2.3.0(patch_hash=j64wlmxnxf3o2rbubtoiazcn4y):
resolution: {integrity: sha512-YI8CycK+JcpSiem4E6sMoUcn6xmsrC8i4s+vTVhJeGrcAJ2NXOWJg2iiZjbgCZ+bLsW1LSGm9IeVMjPaMTr0jQ==}
dependencies:
three: 0.140.2