@mappedin/mappedin-js 6.0.1-beta.9 → 6.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +103 -7
- package/THIRD_PARTY_LICENSES.txt +8938 -21631
- package/lib/esm/GLTFExporter-AEIYURV6.js +2 -0
- package/lib/esm/GLTFExporter-AEIYURV6.js.map +7 -0
- package/lib/esm/GLTFLoader-YNJUYSBY.js +2 -0
- package/lib/esm/GLTFLoader-YNJUYSBY.js.map +7 -0
- package/lib/esm/chunk-C5ID5LHV.js +938 -0
- package/lib/esm/chunk-C5ID5LHV.js.map +7 -0
- package/lib/esm/chunk-DBCMQGTD.js +3820 -0
- package/lib/esm/chunk-DBCMQGTD.js.map +7 -0
- package/lib/esm/chunk-KYQ66GHT.js +2048 -0
- package/lib/esm/chunk-KYQ66GHT.js.map +7 -0
- package/lib/esm/chunk-RIFXMIJM.js +2 -0
- package/lib/esm/chunk-RIFXMIJM.js.map +7 -0
- package/lib/esm/chunk-ROCNZJLL.js +2 -0
- package/lib/esm/chunk-ROCNZJLL.js.map +7 -0
- package/lib/esm/fonts/roboto-regular.ttf +0 -0
- package/lib/esm/index.css +2 -1
- package/lib/esm/index.css.map +7 -0
- package/lib/esm/index.d.ts +27257 -25380
- package/lib/esm/index.js +2 -1
- package/lib/esm/index.js.map +7 -0
- package/lib/esm/inspector-2XETNHYZ.css +2 -0
- package/lib/esm/inspector-2XETNHYZ.css.map +7 -0
- package/lib/esm/inspector-J5CSSXEZ.js +483 -0
- package/lib/esm/inspector-J5CSSXEZ.js.map +7 -0
- package/lib/esm/internal-HTTM4ECA.js +2 -0
- package/lib/esm/internal-HTTM4ECA.js.map +7 -0
- package/lib/esm/internal-R5XTRV7Q.css +2 -0
- package/lib/esm/internal-R5XTRV7Q.css.map +7 -0
- package/lib/esm/roboto-regular-R5KXKW73.js +2 -0
- package/lib/esm/roboto-regular-R5KXKW73.js.map +7 -0
- package/lib/esm/text3d-AXM5ZHCS.css +2 -0
- package/lib/esm/text3d-AXM5ZHCS.css.map +7 -0
- package/lib/esm/text3d-FUGEPZHU.js +253 -0
- package/lib/esm/text3d-FUGEPZHU.js.map +7 -0
- package/lib/esm/workers/collision-worker.csp.js +23 -0
- package/lib/esm/workers/maplibre-worker.csp.js +2 -0
- package/lib/index-rn.js +4306 -0
- package/lib/index.css +2 -1
- package/package.json +24 -21
- package/lib/esm/GLTFExporter-DDZP3YM5.js +0 -1
- package/lib/esm/GLTFLoader-54EWX6DJ.js +0 -1
- package/lib/esm/browser-UXFEBJ7R.js +0 -1
- package/lib/esm/chunk-A35HKGOE.js +0 -1
- package/lib/esm/chunk-FE5S74VA.js +0 -1
- package/lib/esm/chunk-NTOUDKDJ.js +0 -1
- package/lib/esm/chunk-RZFBTKMI.js +0 -1
- package/lib/esm/chunk-SHB4JBRW.js +0 -1
- package/lib/esm/chunk-WVWEOR6I.js +0 -1
- package/lib/esm/inspector-HCNPJZJK.js +0 -1
- package/lib/esm/inspector-OZDC5DPH.css +0 -1
- package/lib/esm/internal-4B7MJ7JY.js +0 -1
- package/lib/esm/outdoor-context-v4-M3BL3WQZ.js +0 -1
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../geojson/src/services/text3d/text3d.ts", "../../../../node_modules/.pnpm/troika-three-text@0.52.4_three@0.173.0/node_modules/troika-three-text/dist/troika-three-text.esm.js", "../../../../node_modules/.pnpm/troika-worker-utils@0.52.0/node_modules/troika-worker-utils/dist/troika-worker-utils.esm.js", "../../../../node_modules/.pnpm/webgl-sdf-generator@1.1.1/node_modules/webgl-sdf-generator/dist/webgl-sdf-generator.mjs", "../../../../node_modules/.pnpm/bidi-js@1.0.3/node_modules/bidi-js/dist/bidi.mjs", "../../../../node_modules/.pnpm/troika-three-utils@0.52.4_three@0.173.0/node_modules/troika-three-utils/dist/troika-three-utils.esm.js", "../../../geojson/src/services/text3d/utils.ts"],
|
|
4
|
+
"sourcesContent": ["import { MathUtils, Matrix4, type Mesh, Vector3 } from 'three';\nimport { DEFAULT_TEXT_STYLE, type Text3DStyleComponent } from '../../components/styles';\nimport { BatchedText, Text, configureTextBuilder } from 'troika-three-text';\nimport type { RendererCore } from '../..';\nimport type { Text3DComponent, Text3DProperties } from '../../components/text3d';\nimport { type FloorTextCommonProperties } from '@mappedin/mvf-v2';\nimport { normalizeAngle } from '../../utils';\nimport { syncText, preloadFont as preloadFontFromModule, fitTextToArea, loadDefaultFont } from './utils';\n\nexport function configureTroikaTextBuilder({ useWorker = true }: { useWorker: boolean }) {\n\tconfigureTextBuilder({\n\t\tuseWorker,\n\t});\n}\n\nconst tempMatrix = new Matrix4();\nconst tempVec = new Vector3();\nconst Z_AXIS_BASISVECTOR = new Vector3(0, 0, 1);\n\nexport async function createTroikaTextPoint(\n\tentityId: string | number,\n\ttext3DComponent: Text3DComponent,\n\tstyleComponent: Text3DStyleComponent,\n\tconvertTo3DMapPosition: RendererCore['convertTo3DMapPosition'],\n) {\n\tconst properties = text3DComponent.feature.properties as FloorTextCommonProperties & { verticalOffset: number };\n\n\tconst text = new Text();\n\ttext3DComponent.textMesh = text;\n\ttext.text = properties.text;\n\n\t// Make sure text rendering is same as V5: center aligned.\n\ttext.anchorX = 'center';\n\ttext.anchorY = 'middle';\n\ttext.textAlign = properties.align ?? 'center';\n\ttext.color = properties.color ?? 'black';\n\ttext.fontSize = properties.fontSize || 20;\n\n\t// font handling\n\tconst font = styleComponent.font ?? DEFAULT_TEXT_STYLE.font;\n\tif (font) {\n\t\t// let troika take over the font processing and caching\n\t\ttext.font = font;\n\t} else if (fontPreloadLoadPromise) {\n\t\ttext.font = await fontPreloadLoadPromise;\n\t} else {\n\t\ttext.font = await loadDefaultFont();\n\t}\n\n\t// Mark: handle styles\n\ttext.outlineOpacity = styleComponent.outlineOpacity ?? DEFAULT_TEXT_STYLE.outlineOpacity;\n\ttext.outlineColor = styleComponent.outlineColor ?? DEFAULT_TEXT_STYLE.outlineColor;\n\ttext.outlineOffsetY = styleComponent.outlineOffsetY ?? DEFAULT_TEXT_STYLE.outlineOffsetY;\n\ttext.outlineOffsetX = styleComponent.outlineOffsetX ?? DEFAULT_TEXT_STYLE.outlineOffsetX;\n\ttext.outlineWidth = styleComponent.outlineWidth ?? DEFAULT_TEXT_STYLE.outlineWidth;\n\ttext.outlineBlur = styleComponent.outlineBlur ?? DEFAULT_TEXT_STYLE.outlineBlur;\n\ttext.strokeWidth = styleComponent.strokeWidth ?? DEFAULT_TEXT_STYLE.strokeWidth;\n\ttext.strokeColor = styleComponent.strokeColor ?? DEFAULT_TEXT_STYLE.strokeColor;\n\ttext.strokeOpacity = styleComponent.strokeOpacity ?? DEFAULT_TEXT_STYLE.strokeOpacity;\n\n\tconst position = convertTo3DMapPosition(text3DComponent.feature.geometry.coordinates);\n\n\ttext.position.copy(position);\n\ttext.position.z = properties.verticalOffset;\n\ttext.rotation.z = MathUtils.degToRad(-properties.rotation);\n\n\ttext.userData = { entityId: entityId.toString(), rotationZ: -properties.rotation };\n\n\treturn { text };\n}\n\nexport async function createTroikaTextArea(\n\tentityId: string | number,\n\ttext3DComponent: Text3DComponent,\n\tstyleComponent: Text3DStyleComponent,\n\tconvertTo3DMapPosition: RendererCore['convertTo3DMapPosition'],\n) {\n\tconst properties = text3DComponent.feature.properties as Text3DProperties;\n\tconst { textArea } = properties;\n\tif (!textArea) throw new Error('textArea is required');\n\n\tconst marginOption = styleComponent.margin ?? DEFAULT_TEXT_STYLE.margin;\n\tconst [topM, rightM, bottomM, leftM] = Array.isArray(marginOption)\n\t\t? marginOption\n\t\t: [marginOption, marginOption, marginOption, marginOption];\n\tconst text = new Text();\n\ttext.text = properties.content;\n\n\tconst areaMaxHeight = textArea.maxHeight - topM - bottomM;\n\tconst areaMaxWidth = textArea.maxWidth - leftM - rightM;\n\ttext.fontSize = Math.min(areaMaxHeight, styleComponent.fontSize ?? DEFAULT_TEXT_STYLE.fontSize); // TODO handle default font size\n\ttext.color = styleComponent.color ?? DEFAULT_TEXT_STYLE.color;\n\ttext.maxWidth = styleComponent.maxWidth ?? areaMaxWidth;\n\n\t// Make sure text rendering is same as V5: center aligned.\n\ttext.anchorX = 'center';\n\ttext.anchorY = 'middle';\n\ttext.textAlign = 'center';\n\n\t// font handling\n\tconst font = styleComponent.font ?? DEFAULT_TEXT_STYLE.font;\n\tif (font) {\n\t\t// let troika take over the font processing and caching\n\t\ttext.font = font;\n\t} else if (fontPreloadLoadPromise) {\n\t\t// if font is getting preloaded, we use the preloaded font\n\t\ttext.font = await fontPreloadLoadPromise;\n\t} else {\n\t\t// font is not preloaded and undefined, import the default (Roboto)\n\t\ttext.font = await loadDefaultFont();\n\t}\n\n\t// Mark: handle styles\n\ttext.outlineOpacity = styleComponent.outlineOpacity ?? DEFAULT_TEXT_STYLE.outlineOpacity;\n\ttext.outlineColor = styleComponent.outlineColor ?? DEFAULT_TEXT_STYLE.outlineColor;\n\ttext.outlineOffsetY = styleComponent.outlineOffsetY ?? DEFAULT_TEXT_STYLE.outlineOffsetY;\n\ttext.outlineOffsetX = styleComponent.outlineOffsetX ?? DEFAULT_TEXT_STYLE.outlineOffsetX;\n\ttext.outlineWidth = styleComponent.outlineWidth ?? DEFAULT_TEXT_STYLE.outlineWidth;\n\ttext.outlineBlur = styleComponent.outlineBlur ?? DEFAULT_TEXT_STYLE.outlineBlur;\n\ttext.strokeWidth = styleComponent.strokeWidth ?? DEFAULT_TEXT_STYLE.strokeWidth;\n\ttext.strokeColor = styleComponent.strokeColor ?? DEFAULT_TEXT_STYLE.strokeColor;\n\ttext.strokeOpacity = styleComponent.strokeOpacity ?? DEFAULT_TEXT_STYLE.strokeOpacity;\n\n\tconst pos = convertTo3DMapPosition(textArea.position, tempVec);\n\ttext.position.copy(pos);\n\tconst rotationZ = normalizeAngle(Math.PI / 2 - MathUtils.degToRad(textArea.rotation)); // textArea rotation 90 degrees points to true north, and rotate off that\n\ttext.rotation.z = rotationZ;\n\ttext.userData = { entityId: entityId.toString(), rotationZ };\n\n\tlet textAreaMesh: undefined | Mesh;\n\n\tlet size: [width: number, height: number] | undefined;\n\ttry {\n\t\tsize = (await fitTextToArea(text, areaMaxWidth, areaMaxHeight, text.fontSize * 0.2)).size;\n\t} catch (e) {\n\t\ttext.dispose?.();\n\t\tthrow new Error(`Cannot fit text to area: entityId: ${text3DComponent.polygonEntityId} ${e}`);\n\t}\n\n\tif (!size) return;\n\n\t// handling margin: offset the text along the vector that's rotated correctly\n\ttempMatrix.identity();\n\ttempVec.set(0, 0, 1);\n\ttempMatrix.makeRotationAxis(Z_AXIS_BASISVECTOR, rotationZ);\n\ttempVec.set(textArea.align === 'near' ? leftM + size[0] / 2 : textArea.maxWidth / 2, 0, 0);\n\ttempVec.applyMatrix4(tempMatrix);\n\n\ttext.position.x -= tempVec.x;\n\ttext.position.y -= tempVec.y;\n\ttext3DComponent.textMesh = text;\n\n\tif (textAreaMesh) {\n\t\ttempVec.set(textArea.maxWidth / 2, 0, 0);\n\t\ttempVec.applyMatrix4(tempMatrix);\n\t\ttextAreaMesh.position.x -= tempVec.x;\n\t\ttextAreaMesh.position.y -= tempVec.y;\n\t}\n\n\treturn { text };\n}\n\nexport { BatchedText, Text, syncText };\n\n/**\n * Promise caches the base64 font string. Then shared across all needed\n */\nexport let fontPreloadLoadPromise: Promise<string> | undefined;\n\n/**\n * Preloads a font from the given URL. Enable developer to preload font way before scene is ready\n *\n * @param fontUrl - The URL of the font to preload. When undefined, default font (Roboto) is loaded\n * @returns A promise that resolves when the font is successfully preloaded, or rejects with an error if the font cannot be loaded.\n */\nexport function preloadFont(fontUrl?: string) {\n\tfontPreloadLoadPromise = preloadFontFromModule(fontUrl);\n\n\treturn fontPreloadLoadPromise;\n}\n\n/**\n * typeof module is forbiten in typescript. see: [@typescript-eslint/consistent-type-imports]\n */\nexport type ModuleType = {\n\tcreateTroikaTextPoint: typeof createTroikaTextPoint;\n\tcreateTroikaTextArea: typeof createTroikaTextArea;\n\tconfigureTroikaTextBuilder: typeof configureTroikaTextBuilder;\n\tpreloadFont: typeof preloadFont;\n\tsyncText: typeof syncText;\n\tBatchedText: typeof BatchedText;\n};\n", "import { Texture, LinearFilter, Color, InstancedBufferGeometry, Sphere, Box3, InstancedBufferAttribute, PlaneGeometry, Vector2, Vector4, Matrix3, Mesh, MeshBasicMaterial, DoubleSide, Matrix4, Vector3, DataTexture, RGBAFormat, FloatType, DynamicDrawUsage } from 'three';\nimport { defineWorkerModule, terminateWorker } from 'troika-worker-utils';\nimport createSDFGenerator from 'webgl-sdf-generator';\nimport bidiFactory from 'bidi-js';\nimport { createDerivedMaterial, voidMainRegExp } from 'troika-three-utils';\n\n/*!\nCustom build of Typr.ts (https://github.com/fredli74/Typr.ts) for use in Troika text rendering.\nOriginal MIT license applies: https://github.com/fredli74/Typr.ts/blob/master/LICENSE\n*/\nfunction typrFactory(){return \"undefined\"==typeof window&&(self.window=self),function(r){var e={parse:function(r){var t=e._bin,a=new Uint8Array(r);if(\"ttcf\"==t.readASCII(a,0,4)){var n=4;t.readUshort(a,n),n+=2,t.readUshort(a,n),n+=2;var o=t.readUint(a,n);n+=4;for(var s=[],i=0;i<o;i++){var h=t.readUint(a,n);n+=4,s.push(e._readFont(a,h));}return s}return [e._readFont(a,0)]},_readFont:function(r,t){var a=e._bin,n=t;a.readFixed(r,t),t+=4;var o=a.readUshort(r,t);t+=2,a.readUshort(r,t),t+=2,a.readUshort(r,t),t+=2,a.readUshort(r,t),t+=2;for(var s=[\"cmap\",\"head\",\"hhea\",\"maxp\",\"hmtx\",\"name\",\"OS/2\",\"post\",\"loca\",\"glyf\",\"kern\",\"CFF \",\"GDEF\",\"GPOS\",\"GSUB\",\"SVG \"],i={_data:r,_offset:n},h={},d=0;d<o;d++){var f=a.readASCII(r,t,4);t+=4,a.readUint(r,t),t+=4;var u=a.readUint(r,t);t+=4;var l=a.readUint(r,t);t+=4,h[f]={offset:u,length:l};}for(d=0;d<s.length;d++){var v=s[d];h[v]&&(i[v.trim()]=e[v.trim()].parse(r,h[v].offset,h[v].length,i));}return i},_tabOffset:function(r,t,a){for(var n=e._bin,o=n.readUshort(r,a+4),s=a+12,i=0;i<o;i++){var h=n.readASCII(r,s,4);s+=4,n.readUint(r,s),s+=4;var d=n.readUint(r,s);if(s+=4,n.readUint(r,s),s+=4,h==t)return d}return 0}};e._bin={readFixed:function(r,e){return (r[e]<<8|r[e+1])+(r[e+2]<<8|r[e+3])/65540},readF2dot14:function(r,t){return e._bin.readShort(r,t)/16384},readInt:function(r,t){return e._bin._view(r).getInt32(t)},readInt8:function(r,t){return e._bin._view(r).getInt8(t)},readShort:function(r,t){return e._bin._view(r).getInt16(t)},readUshort:function(r,t){return e._bin._view(r).getUint16(t)},readUshorts:function(r,t,a){for(var n=[],o=0;o<a;o++)n.push(e._bin.readUshort(r,t+2*o));return n},readUint:function(r,t){return e._bin._view(r).getUint32(t)},readUint64:function(r,t){return 4294967296*e._bin.readUint(r,t)+e._bin.readUint(r,t+4)},readASCII:function(r,e,t){for(var a=\"\",n=0;n<t;n++)a+=String.fromCharCode(r[e+n]);return a},readUnicode:function(r,e,t){for(var a=\"\",n=0;n<t;n++){var o=r[e++]<<8|r[e++];a+=String.fromCharCode(o);}return a},_tdec:\"undefined\"!=typeof window&&window.TextDecoder?new window.TextDecoder:null,readUTF8:function(r,t,a){var n=e._bin._tdec;return n&&0==t&&a==r.length?n.decode(r):e._bin.readASCII(r,t,a)},readBytes:function(r,e,t){for(var a=[],n=0;n<t;n++)a.push(r[e+n]);return a},readASCIIArray:function(r,e,t){for(var a=[],n=0;n<t;n++)a.push(String.fromCharCode(r[e+n]));return a},_view:function(r){return r._dataView||(r._dataView=r.buffer?new DataView(r.buffer,r.byteOffset,r.byteLength):new DataView(new Uint8Array(r).buffer))}},e._lctf={},e._lctf.parse=function(r,t,a,n,o){var s=e._bin,i={},h=t;s.readFixed(r,t),t+=4;var d=s.readUshort(r,t);t+=2;var f=s.readUshort(r,t);t+=2;var u=s.readUshort(r,t);return t+=2,i.scriptList=e._lctf.readScriptList(r,h+d),i.featureList=e._lctf.readFeatureList(r,h+f),i.lookupList=e._lctf.readLookupList(r,h+u,o),i},e._lctf.readLookupList=function(r,t,a){var n=e._bin,o=t,s=[],i=n.readUshort(r,t);t+=2;for(var h=0;h<i;h++){var d=n.readUshort(r,t);t+=2;var f=e._lctf.readLookupTable(r,o+d,a);s.push(f);}return s},e._lctf.readLookupTable=function(r,t,a){var n=e._bin,o=t,s={tabs:[]};s.ltype=n.readUshort(r,t),t+=2,s.flag=n.readUshort(r,t),t+=2;var i=n.readUshort(r,t);t+=2;for(var h=s.ltype,d=0;d<i;d++){var f=n.readUshort(r,t);t+=2;var u=a(r,h,o+f,s);s.tabs.push(u);}return s},e._lctf.numOfOnes=function(r){for(var e=0,t=0;t<32;t++)0!=(r>>>t&1)&&e++;return e},e._lctf.readClassDef=function(r,t){var a=e._bin,n=[],o=a.readUshort(r,t);if(t+=2,1==o){var s=a.readUshort(r,t);t+=2;var i=a.readUshort(r,t);t+=2;for(var h=0;h<i;h++)n.push(s+h),n.push(s+h),n.push(a.readUshort(r,t)),t+=2;}if(2==o){var d=a.readUshort(r,t);t+=2;for(h=0;h<d;h++)n.push(a.readUshort(r,t)),t+=2,n.push(a.readUshort(r,t)),t+=2,n.push(a.readUshort(r,t)),t+=2;}return n},e._lctf.getInterval=function(r,e){for(var t=0;t<r.length;t+=3){var a=r[t],n=r[t+1];if(r[t+2],a<=e&&e<=n)return t}return -1},e._lctf.readCoverage=function(r,t){var a=e._bin,n={};n.fmt=a.readUshort(r,t),t+=2;var o=a.readUshort(r,t);return t+=2,1==n.fmt&&(n.tab=a.readUshorts(r,t,o)),2==n.fmt&&(n.tab=a.readUshorts(r,t,3*o)),n},e._lctf.coverageIndex=function(r,t){var a=r.tab;if(1==r.fmt)return a.indexOf(t);if(2==r.fmt){var n=e._lctf.getInterval(a,t);if(-1!=n)return a[n+2]+(t-a[n])}return -1},e._lctf.readFeatureList=function(r,t){var a=e._bin,n=t,o=[],s=a.readUshort(r,t);t+=2;for(var i=0;i<s;i++){var h=a.readASCII(r,t,4);t+=4;var d=a.readUshort(r,t);t+=2;var f=e._lctf.readFeatureTable(r,n+d);f.tag=h.trim(),o.push(f);}return o},e._lctf.readFeatureTable=function(r,t){var a=e._bin,n=t,o={},s=a.readUshort(r,t);t+=2,s>0&&(o.featureParams=n+s);var i=a.readUshort(r,t);t+=2,o.tab=[];for(var h=0;h<i;h++)o.tab.push(a.readUshort(r,t+2*h));return o},e._lctf.readScriptList=function(r,t){var a=e._bin,n=t,o={},s=a.readUshort(r,t);t+=2;for(var i=0;i<s;i++){var h=a.readASCII(r,t,4);t+=4;var d=a.readUshort(r,t);t+=2,o[h.trim()]=e._lctf.readScriptTable(r,n+d);}return o},e._lctf.readScriptTable=function(r,t){var a=e._bin,n=t,o={},s=a.readUshort(r,t);t+=2,s>0&&(o.default=e._lctf.readLangSysTable(r,n+s));var i=a.readUshort(r,t);t+=2;for(var h=0;h<i;h++){var d=a.readASCII(r,t,4);t+=4;var f=a.readUshort(r,t);t+=2,o[d.trim()]=e._lctf.readLangSysTable(r,n+f);}return o},e._lctf.readLangSysTable=function(r,t){var a=e._bin,n={};a.readUshort(r,t),t+=2,n.reqFeature=a.readUshort(r,t),t+=2;var o=a.readUshort(r,t);return t+=2,n.features=a.readUshorts(r,t,o),n},e.CFF={},e.CFF.parse=function(r,t,a){var n=e._bin;(r=new Uint8Array(r.buffer,t,a))[t=0],r[++t],r[++t],r[++t],t++;var o=[];t=e.CFF.readIndex(r,t,o);for(var s=[],i=0;i<o.length-1;i++)s.push(n.readASCII(r,t+o[i],o[i+1]-o[i]));t+=o[o.length-1];var h=[];t=e.CFF.readIndex(r,t,h);var d=[];for(i=0;i<h.length-1;i++)d.push(e.CFF.readDict(r,t+h[i],t+h[i+1]));t+=h[h.length-1];var f=d[0],u=[];t=e.CFF.readIndex(r,t,u);var l=[];for(i=0;i<u.length-1;i++)l.push(n.readASCII(r,t+u[i],u[i+1]-u[i]));if(t+=u[u.length-1],e.CFF.readSubrs(r,t,f),f.CharStrings){t=f.CharStrings;u=[];t=e.CFF.readIndex(r,t,u);var v=[];for(i=0;i<u.length-1;i++)v.push(n.readBytes(r,t+u[i],u[i+1]-u[i]));f.CharStrings=v;}if(f.ROS){t=f.FDArray;var c=[];t=e.CFF.readIndex(r,t,c),f.FDArray=[];for(i=0;i<c.length-1;i++){var p=e.CFF.readDict(r,t+c[i],t+c[i+1]);e.CFF._readFDict(r,p,l),f.FDArray.push(p);}t+=c[c.length-1],t=f.FDSelect,f.FDSelect=[];var U=r[t];if(t++,3!=U)throw U;var g=n.readUshort(r,t);t+=2;for(i=0;i<g+1;i++)f.FDSelect.push(n.readUshort(r,t),r[t+2]),t+=3;}return f.Encoding&&(f.Encoding=e.CFF.readEncoding(r,f.Encoding,f.CharStrings.length)),f.charset&&(f.charset=e.CFF.readCharset(r,f.charset,f.CharStrings.length)),e.CFF._readFDict(r,f,l),f},e.CFF._readFDict=function(r,t,a){var n;for(var o in t.Private&&(n=t.Private[1],t.Private=e.CFF.readDict(r,n,n+t.Private[0]),t.Private.Subrs&&e.CFF.readSubrs(r,n+t.Private.Subrs,t.Private)),t)-1!=[\"FamilyName\",\"FontName\",\"FullName\",\"Notice\",\"version\",\"Copyright\"].indexOf(o)&&(t[o]=a[t[o]-426+35]);},e.CFF.readSubrs=function(r,t,a){var n=e._bin,o=[];t=e.CFF.readIndex(r,t,o);var s,i=o.length;s=i<1240?107:i<33900?1131:32768,a.Bias=s,a.Subrs=[];for(var h=0;h<o.length-1;h++)a.Subrs.push(n.readBytes(r,t+o[h],o[h+1]-o[h]));},e.CFF.tableSE=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,0,111,112,113,114,0,115,116,117,118,119,120,121,122,0,123,0,124,125,126,127,128,129,130,131,0,132,133,0,134,135,136,137,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,138,0,139,0,0,0,0,140,141,142,143,0,0,0,0,0,144,0,0,0,145,0,0,146,147,148,149,0,0,0,0],e.CFF.glyphByUnicode=function(r,e){for(var t=0;t<r.charset.length;t++)if(r.charset[t]==e)return t;return -1},e.CFF.glyphBySE=function(r,t){return t<0||t>255?-1:e.CFF.glyphByUnicode(r,e.CFF.tableSE[t])},e.CFF.readEncoding=function(r,t,a){e._bin;var n=[\".notdef\"],o=r[t];if(t++,0!=o)throw \"error: unknown encoding format: \"+o;var s=r[t];t++;for(var i=0;i<s;i++)n.push(r[t+i]);return n},e.CFF.readCharset=function(r,t,a){var n=e._bin,o=[\".notdef\"],s=r[t];if(t++,0==s)for(var i=0;i<a;i++){var h=n.readUshort(r,t);t+=2,o.push(h);}else {if(1!=s&&2!=s)throw \"error: format: \"+s;for(;o.length<a;){h=n.readUshort(r,t);t+=2;var d=0;1==s?(d=r[t],t++):(d=n.readUshort(r,t),t+=2);for(i=0;i<=d;i++)o.push(h),h++;}}return o},e.CFF.readIndex=function(r,t,a){var n=e._bin,o=n.readUshort(r,t)+1,s=r[t+=2];if(t++,1==s)for(var i=0;i<o;i++)a.push(r[t+i]);else if(2==s)for(i=0;i<o;i++)a.push(n.readUshort(r,t+2*i));else if(3==s)for(i=0;i<o;i++)a.push(16777215&n.readUint(r,t+3*i-1));else if(1!=o)throw \"unsupported offset size: \"+s+\", count: \"+o;return (t+=o*s)-1},e.CFF.getCharString=function(r,t,a){var n=e._bin,o=r[t],s=r[t+1];r[t+2],r[t+3],r[t+4];var i=1,h=null,d=null;o<=20&&(h=o,i=1),12==o&&(h=100*o+s,i=2),21<=o&&o<=27&&(h=o,i=1),28==o&&(d=n.readShort(r,t+1),i=3),29<=o&&o<=31&&(h=o,i=1),32<=o&&o<=246&&(d=o-139,i=1),247<=o&&o<=250&&(d=256*(o-247)+s+108,i=2),251<=o&&o<=254&&(d=256*-(o-251)-s-108,i=2),255==o&&(d=n.readInt(r,t+1)/65535,i=5),a.val=null!=d?d:\"o\"+h,a.size=i;},e.CFF.readCharString=function(r,t,a){for(var n=t+a,o=e._bin,s=[];t<n;){var i=r[t],h=r[t+1];r[t+2],r[t+3],r[t+4];var d=1,f=null,u=null;i<=20&&(f=i,d=1),12==i&&(f=100*i+h,d=2),19!=i&&20!=i||(f=i,d=2),21<=i&&i<=27&&(f=i,d=1),28==i&&(u=o.readShort(r,t+1),d=3),29<=i&&i<=31&&(f=i,d=1),32<=i&&i<=246&&(u=i-139,d=1),247<=i&&i<=250&&(u=256*(i-247)+h+108,d=2),251<=i&&i<=254&&(u=256*-(i-251)-h-108,d=2),255==i&&(u=o.readInt(r,t+1)/65535,d=5),s.push(null!=u?u:\"o\"+f),t+=d;}return s},e.CFF.readDict=function(r,t,a){for(var n=e._bin,o={},s=[];t<a;){var i=r[t],h=r[t+1];r[t+2],r[t+3],r[t+4];var d=1,f=null,u=null;if(28==i&&(u=n.readShort(r,t+1),d=3),29==i&&(u=n.readInt(r,t+1),d=5),32<=i&&i<=246&&(u=i-139,d=1),247<=i&&i<=250&&(u=256*(i-247)+h+108,d=2),251<=i&&i<=254&&(u=256*-(i-251)-h-108,d=2),255==i)throw u=n.readInt(r,t+1)/65535,d=5,\"unknown number\";if(30==i){var l=[];for(d=1;;){var v=r[t+d];d++;var c=v>>4,p=15&v;if(15!=c&&l.push(c),15!=p&&l.push(p),15==p)break}for(var U=\"\",g=[0,1,2,3,4,5,6,7,8,9,\".\",\"e\",\"e-\",\"reserved\",\"-\",\"endOfNumber\"],S=0;S<l.length;S++)U+=g[l[S]];u=parseFloat(U);}if(i<=21)if(f=[\"version\",\"Notice\",\"FullName\",\"FamilyName\",\"Weight\",\"FontBBox\",\"BlueValues\",\"OtherBlues\",\"FamilyBlues\",\"FamilyOtherBlues\",\"StdHW\",\"StdVW\",\"escape\",\"UniqueID\",\"XUID\",\"charset\",\"Encoding\",\"CharStrings\",\"Private\",\"Subrs\",\"defaultWidthX\",\"nominalWidthX\"][i],d=1,12==i)f=[\"Copyright\",\"isFixedPitch\",\"ItalicAngle\",\"UnderlinePosition\",\"UnderlineThickness\",\"PaintType\",\"CharstringType\",\"FontMatrix\",\"StrokeWidth\",\"BlueScale\",\"BlueShift\",\"BlueFuzz\",\"StemSnapH\",\"StemSnapV\",\"ForceBold\",0,0,\"LanguageGroup\",\"ExpansionFactor\",\"initialRandomSeed\",\"SyntheticBase\",\"PostScript\",\"BaseFontName\",\"BaseFontBlend\",0,0,0,0,0,0,\"ROS\",\"CIDFontVersion\",\"CIDFontRevision\",\"CIDFontType\",\"CIDCount\",\"UIDBase\",\"FDArray\",\"FDSelect\",\"FontName\"][h],d=2;null!=f?(o[f]=1==s.length?s[0]:s,s=[]):s.push(u),t+=d;}return o},e.cmap={},e.cmap.parse=function(r,t,a){r=new Uint8Array(r.buffer,t,a),t=0;var n=e._bin,o={};n.readUshort(r,t),t+=2;var s=n.readUshort(r,t);t+=2;var i=[];o.tables=[];for(var h=0;h<s;h++){var d=n.readUshort(r,t);t+=2;var f=n.readUshort(r,t);t+=2;var u=n.readUint(r,t);t+=4;var l=\"p\"+d+\"e\"+f,v=i.indexOf(u);if(-1==v){var c;v=o.tables.length,i.push(u);var p=n.readUshort(r,u);0==p?c=e.cmap.parse0(r,u):4==p?c=e.cmap.parse4(r,u):6==p?c=e.cmap.parse6(r,u):12==p?c=e.cmap.parse12(r,u):console.debug(\"unknown format: \"+p,d,f,u),o.tables.push(c);}if(null!=o[l])throw \"multiple tables for one platform+encoding\";o[l]=v;}return o},e.cmap.parse0=function(r,t){var a=e._bin,n={};n.format=a.readUshort(r,t),t+=2;var o=a.readUshort(r,t);t+=2,a.readUshort(r,t),t+=2,n.map=[];for(var s=0;s<o-6;s++)n.map.push(r[t+s]);return n},e.cmap.parse4=function(r,t){var a=e._bin,n=t,o={};o.format=a.readUshort(r,t),t+=2;var s=a.readUshort(r,t);t+=2,a.readUshort(r,t),t+=2;var i=a.readUshort(r,t);t+=2;var h=i/2;o.searchRange=a.readUshort(r,t),t+=2,o.entrySelector=a.readUshort(r,t),t+=2,o.rangeShift=a.readUshort(r,t),t+=2,o.endCount=a.readUshorts(r,t,h),t+=2*h,t+=2,o.startCount=a.readUshorts(r,t,h),t+=2*h,o.idDelta=[];for(var d=0;d<h;d++)o.idDelta.push(a.readShort(r,t)),t+=2;for(o.idRangeOffset=a.readUshorts(r,t,h),t+=2*h,o.glyphIdArray=[];t<n+s;)o.glyphIdArray.push(a.readUshort(r,t)),t+=2;return o},e.cmap.parse6=function(r,t){var a=e._bin,n={};n.format=a.readUshort(r,t),t+=2,a.readUshort(r,t),t+=2,a.readUshort(r,t),t+=2,n.firstCode=a.readUshort(r,t),t+=2;var o=a.readUshort(r,t);t+=2,n.glyphIdArray=[];for(var s=0;s<o;s++)n.glyphIdArray.push(a.readUshort(r,t)),t+=2;return n},e.cmap.parse12=function(r,t){var a=e._bin,n={};n.format=a.readUshort(r,t),t+=2,t+=2,a.readUint(r,t),t+=4,a.readUint(r,t),t+=4;var o=a.readUint(r,t);t+=4,n.groups=[];for(var s=0;s<o;s++){var i=t+12*s,h=a.readUint(r,i+0),d=a.readUint(r,i+4),f=a.readUint(r,i+8);n.groups.push([h,d,f]);}return n},e.glyf={},e.glyf.parse=function(r,e,t,a){for(var n=[],o=0;o<a.maxp.numGlyphs;o++)n.push(null);return n},e.glyf._parseGlyf=function(r,t){var a=e._bin,n=r._data,o=e._tabOffset(n,\"glyf\",r._offset)+r.loca[t];if(r.loca[t]==r.loca[t+1])return null;var s={};if(s.noc=a.readShort(n,o),o+=2,s.xMin=a.readShort(n,o),o+=2,s.yMin=a.readShort(n,o),o+=2,s.xMax=a.readShort(n,o),o+=2,s.yMax=a.readShort(n,o),o+=2,s.xMin>=s.xMax||s.yMin>=s.yMax)return null;if(s.noc>0){s.endPts=[];for(var i=0;i<s.noc;i++)s.endPts.push(a.readUshort(n,o)),o+=2;var h=a.readUshort(n,o);if(o+=2,n.length-o<h)return null;s.instructions=a.readBytes(n,o,h),o+=h;var d=s.endPts[s.noc-1]+1;s.flags=[];for(i=0;i<d;i++){var f=n[o];if(o++,s.flags.push(f),0!=(8&f)){var u=n[o];o++;for(var l=0;l<u;l++)s.flags.push(f),i++;}}s.xs=[];for(i=0;i<d;i++){var v=0!=(2&s.flags[i]),c=0!=(16&s.flags[i]);v?(s.xs.push(c?n[o]:-n[o]),o++):c?s.xs.push(0):(s.xs.push(a.readShort(n,o)),o+=2);}s.ys=[];for(i=0;i<d;i++){v=0!=(4&s.flags[i]),c=0!=(32&s.flags[i]);v?(s.ys.push(c?n[o]:-n[o]),o++):c?s.ys.push(0):(s.ys.push(a.readShort(n,o)),o+=2);}var p=0,U=0;for(i=0;i<d;i++)p+=s.xs[i],U+=s.ys[i],s.xs[i]=p,s.ys[i]=U;}else {var g;s.parts=[];do{g=a.readUshort(n,o),o+=2;var S={m:{a:1,b:0,c:0,d:1,tx:0,ty:0},p1:-1,p2:-1};if(s.parts.push(S),S.glyphIndex=a.readUshort(n,o),o+=2,1&g){var m=a.readShort(n,o);o+=2;var b=a.readShort(n,o);o+=2;}else {m=a.readInt8(n,o);o++;b=a.readInt8(n,o);o++;}2&g?(S.m.tx=m,S.m.ty=b):(S.p1=m,S.p2=b),8&g?(S.m.a=S.m.d=a.readF2dot14(n,o),o+=2):64&g?(S.m.a=a.readF2dot14(n,o),o+=2,S.m.d=a.readF2dot14(n,o),o+=2):128&g&&(S.m.a=a.readF2dot14(n,o),o+=2,S.m.b=a.readF2dot14(n,o),o+=2,S.m.c=a.readF2dot14(n,o),o+=2,S.m.d=a.readF2dot14(n,o),o+=2);}while(32&g);if(256&g){var y=a.readUshort(n,o);o+=2,s.instr=[];for(i=0;i<y;i++)s.instr.push(n[o]),o++;}}return s},e.GDEF={},e.GDEF.parse=function(r,t,a,n){var o=t;t+=4;var s=e._bin.readUshort(r,t);return {glyphClassDef:0===s?null:e._lctf.readClassDef(r,o+s)}},e.GPOS={},e.GPOS.parse=function(r,t,a,n){return e._lctf.parse(r,t,a,n,e.GPOS.subt)},e.GPOS.subt=function(r,t,a,n){var o=e._bin,s=a,i={};if(i.fmt=o.readUshort(r,a),a+=2,1==t||2==t||3==t||7==t||8==t&&i.fmt<=2){var h=o.readUshort(r,a);a+=2,i.coverage=e._lctf.readCoverage(r,h+s);}if(1==t&&1==i.fmt){var d=o.readUshort(r,a);a+=2,0!=d&&(i.pos=e.GPOS.readValueRecord(r,a,d));}else if(2==t&&i.fmt>=1&&i.fmt<=2){d=o.readUshort(r,a);a+=2;var f=o.readUshort(r,a);a+=2;var u=e._lctf.numOfOnes(d),l=e._lctf.numOfOnes(f);if(1==i.fmt){i.pairsets=[];var v=o.readUshort(r,a);a+=2;for(var c=0;c<v;c++){var p=s+o.readUshort(r,a);a+=2;var U=o.readUshort(r,p);p+=2;for(var g=[],S=0;S<U;S++){var m=o.readUshort(r,p);p+=2,0!=d&&(P=e.GPOS.readValueRecord(r,p,d),p+=2*u),0!=f&&(x=e.GPOS.readValueRecord(r,p,f),p+=2*l),g.push({gid2:m,val1:P,val2:x});}i.pairsets.push(g);}}if(2==i.fmt){var b=o.readUshort(r,a);a+=2;var y=o.readUshort(r,a);a+=2;var F=o.readUshort(r,a);a+=2;var C=o.readUshort(r,a);a+=2,i.classDef1=e._lctf.readClassDef(r,s+b),i.classDef2=e._lctf.readClassDef(r,s+y),i.matrix=[];for(c=0;c<F;c++){var _=[];for(S=0;S<C;S++){var P=null,x=null;0!=d&&(P=e.GPOS.readValueRecord(r,a,d),a+=2*u),0!=f&&(x=e.GPOS.readValueRecord(r,a,f),a+=2*l),_.push({val1:P,val2:x});}i.matrix.push(_);}}}else if(4==t&&1==i.fmt)i.markCoverage=e._lctf.readCoverage(r,o.readUshort(r,a)+s),i.baseCoverage=e._lctf.readCoverage(r,o.readUshort(r,a+2)+s),i.markClassCount=o.readUshort(r,a+4),i.markArray=e.GPOS.readMarkArray(r,o.readUshort(r,a+6)+s),i.baseArray=e.GPOS.readBaseArray(r,o.readUshort(r,a+8)+s,i.markClassCount);else if(6==t&&1==i.fmt)i.mark1Coverage=e._lctf.readCoverage(r,o.readUshort(r,a)+s),i.mark2Coverage=e._lctf.readCoverage(r,o.readUshort(r,a+2)+s),i.markClassCount=o.readUshort(r,a+4),i.mark1Array=e.GPOS.readMarkArray(r,o.readUshort(r,a+6)+s),i.mark2Array=e.GPOS.readBaseArray(r,o.readUshort(r,a+8)+s,i.markClassCount);else {if(9==t&&1==i.fmt){var I=o.readUshort(r,a);a+=2;var w=o.readUint(r,a);if(a+=4,9==n.ltype)n.ltype=I;else if(n.ltype!=I)throw \"invalid extension substitution\";return e.GPOS.subt(r,n.ltype,s+w)}console.debug(\"unsupported GPOS table LookupType\",t,\"format\",i.fmt);}return i},e.GPOS.readValueRecord=function(r,t,a){var n=e._bin,o=[];return o.push(1&a?n.readShort(r,t):0),t+=1&a?2:0,o.push(2&a?n.readShort(r,t):0),t+=2&a?2:0,o.push(4&a?n.readShort(r,t):0),t+=4&a?2:0,o.push(8&a?n.readShort(r,t):0),t+=8&a?2:0,o},e.GPOS.readBaseArray=function(r,t,a){var n=e._bin,o=[],s=t,i=n.readUshort(r,t);t+=2;for(var h=0;h<i;h++){for(var d=[],f=0;f<a;f++)d.push(e.GPOS.readAnchorRecord(r,s+n.readUshort(r,t))),t+=2;o.push(d);}return o},e.GPOS.readMarkArray=function(r,t){var a=e._bin,n=[],o=t,s=a.readUshort(r,t);t+=2;for(var i=0;i<s;i++){var h=e.GPOS.readAnchorRecord(r,a.readUshort(r,t+2)+o);h.markClass=a.readUshort(r,t),n.push(h),t+=4;}return n},e.GPOS.readAnchorRecord=function(r,t){var a=e._bin,n={};return n.fmt=a.readUshort(r,t),n.x=a.readShort(r,t+2),n.y=a.readShort(r,t+4),n},e.GSUB={},e.GSUB.parse=function(r,t,a,n){return e._lctf.parse(r,t,a,n,e.GSUB.subt)},e.GSUB.subt=function(r,t,a,n){var o=e._bin,s=a,i={};if(i.fmt=o.readUshort(r,a),a+=2,1!=t&&2!=t&&4!=t&&5!=t&&6!=t)return null;if(1==t||2==t||4==t||5==t&&i.fmt<=2||6==t&&i.fmt<=2){var h=o.readUshort(r,a);a+=2,i.coverage=e._lctf.readCoverage(r,s+h);}if(1==t&&i.fmt>=1&&i.fmt<=2){if(1==i.fmt)i.delta=o.readShort(r,a),a+=2;else if(2==i.fmt){var d=o.readUshort(r,a);a+=2,i.newg=o.readUshorts(r,a,d),a+=2*i.newg.length;}}else if(2==t&&1==i.fmt){d=o.readUshort(r,a);a+=2,i.seqs=[];for(var f=0;f<d;f++){var u=o.readUshort(r,a)+s;a+=2;var l=o.readUshort(r,u);i.seqs.push(o.readUshorts(r,u+2,l));}}else if(4==t){i.vals=[];d=o.readUshort(r,a);a+=2;for(f=0;f<d;f++){var v=o.readUshort(r,a);a+=2,i.vals.push(e.GSUB.readLigatureSet(r,s+v));}}else if(5==t&&2==i.fmt){if(2==i.fmt){var c=o.readUshort(r,a);a+=2,i.cDef=e._lctf.readClassDef(r,s+c),i.scset=[];var p=o.readUshort(r,a);a+=2;for(f=0;f<p;f++){var U=o.readUshort(r,a);a+=2,i.scset.push(0==U?null:e.GSUB.readSubClassSet(r,s+U));}}}else if(6==t&&3==i.fmt){if(3==i.fmt){for(f=0;f<3;f++){d=o.readUshort(r,a);a+=2;for(var g=[],S=0;S<d;S++)g.push(e._lctf.readCoverage(r,s+o.readUshort(r,a+2*S)));a+=2*d,0==f&&(i.backCvg=g),1==f&&(i.inptCvg=g),2==f&&(i.ahedCvg=g);}d=o.readUshort(r,a);a+=2,i.lookupRec=e.GSUB.readSubstLookupRecords(r,a,d);}}else {if(7==t&&1==i.fmt){var m=o.readUshort(r,a);a+=2;var b=o.readUint(r,a);if(a+=4,9==n.ltype)n.ltype=m;else if(n.ltype!=m)throw \"invalid extension substitution\";return e.GSUB.subt(r,n.ltype,s+b)}console.debug(\"unsupported GSUB table LookupType\",t,\"format\",i.fmt);}return i},e.GSUB.readSubClassSet=function(r,t){var a=e._bin.readUshort,n=t,o=[],s=a(r,t);t+=2;for(var i=0;i<s;i++){var h=a(r,t);t+=2,o.push(e.GSUB.readSubClassRule(r,n+h));}return o},e.GSUB.readSubClassRule=function(r,t){var a=e._bin.readUshort,n={},o=a(r,t),s=a(r,t+=2);t+=2,n.input=[];for(var i=0;i<o-1;i++)n.input.push(a(r,t)),t+=2;return n.substLookupRecords=e.GSUB.readSubstLookupRecords(r,t,s),n},e.GSUB.readSubstLookupRecords=function(r,t,a){for(var n=e._bin.readUshort,o=[],s=0;s<a;s++)o.push(n(r,t),n(r,t+2)),t+=4;return o},e.GSUB.readChainSubClassSet=function(r,t){var a=e._bin,n=t,o=[],s=a.readUshort(r,t);t+=2;for(var i=0;i<s;i++){var h=a.readUshort(r,t);t+=2,o.push(e.GSUB.readChainSubClassRule(r,n+h));}return o},e.GSUB.readChainSubClassRule=function(r,t){for(var a=e._bin,n={},o=[\"backtrack\",\"input\",\"lookahead\"],s=0;s<o.length;s++){var i=a.readUshort(r,t);t+=2,1==s&&i--,n[o[s]]=a.readUshorts(r,t,i),t+=2*n[o[s]].length;}i=a.readUshort(r,t);return t+=2,n.subst=a.readUshorts(r,t,2*i),t+=2*n.subst.length,n},e.GSUB.readLigatureSet=function(r,t){var a=e._bin,n=t,o=[],s=a.readUshort(r,t);t+=2;for(var i=0;i<s;i++){var h=a.readUshort(r,t);t+=2,o.push(e.GSUB.readLigature(r,n+h));}return o},e.GSUB.readLigature=function(r,t){var a=e._bin,n={chain:[]};n.nglyph=a.readUshort(r,t),t+=2;var o=a.readUshort(r,t);t+=2;for(var s=0;s<o-1;s++)n.chain.push(a.readUshort(r,t)),t+=2;return n},e.head={},e.head.parse=function(r,t,a){var n=e._bin,o={};return n.readFixed(r,t),t+=4,o.fontRevision=n.readFixed(r,t),t+=4,n.readUint(r,t),t+=4,n.readUint(r,t),t+=4,o.flags=n.readUshort(r,t),t+=2,o.unitsPerEm=n.readUshort(r,t),t+=2,o.created=n.readUint64(r,t),t+=8,o.modified=n.readUint64(r,t),t+=8,o.xMin=n.readShort(r,t),t+=2,o.yMin=n.readShort(r,t),t+=2,o.xMax=n.readShort(r,t),t+=2,o.yMax=n.readShort(r,t),t+=2,o.macStyle=n.readUshort(r,t),t+=2,o.lowestRecPPEM=n.readUshort(r,t),t+=2,o.fontDirectionHint=n.readShort(r,t),t+=2,o.indexToLocFormat=n.readShort(r,t),t+=2,o.glyphDataFormat=n.readShort(r,t),t+=2,o},e.hhea={},e.hhea.parse=function(r,t,a){var n=e._bin,o={};return n.readFixed(r,t),t+=4,o.ascender=n.readShort(r,t),t+=2,o.descender=n.readShort(r,t),t+=2,o.lineGap=n.readShort(r,t),t+=2,o.advanceWidthMax=n.readUshort(r,t),t+=2,o.minLeftSideBearing=n.readShort(r,t),t+=2,o.minRightSideBearing=n.readShort(r,t),t+=2,o.xMaxExtent=n.readShort(r,t),t+=2,o.caretSlopeRise=n.readShort(r,t),t+=2,o.caretSlopeRun=n.readShort(r,t),t+=2,o.caretOffset=n.readShort(r,t),t+=2,t+=8,o.metricDataFormat=n.readShort(r,t),t+=2,o.numberOfHMetrics=n.readUshort(r,t),t+=2,o},e.hmtx={},e.hmtx.parse=function(r,t,a,n){for(var o=e._bin,s={aWidth:[],lsBearing:[]},i=0,h=0,d=0;d<n.maxp.numGlyphs;d++)d<n.hhea.numberOfHMetrics&&(i=o.readUshort(r,t),t+=2,h=o.readShort(r,t),t+=2),s.aWidth.push(i),s.lsBearing.push(h);return s},e.kern={},e.kern.parse=function(r,t,a,n){var o=e._bin,s=o.readUshort(r,t);if(t+=2,1==s)return e.kern.parseV1(r,t-2,a,n);var i=o.readUshort(r,t);t+=2;for(var h={glyph1:[],rval:[]},d=0;d<i;d++){t+=2;a=o.readUshort(r,t);t+=2;var f=o.readUshort(r,t);t+=2;var u=f>>>8;if(0!=(u&=15))throw \"unknown kern table format: \"+u;t=e.kern.readFormat0(r,t,h);}return h},e.kern.parseV1=function(r,t,a,n){var o=e._bin;o.readFixed(r,t),t+=4;var s=o.readUint(r,t);t+=4;for(var i={glyph1:[],rval:[]},h=0;h<s;h++){o.readUint(r,t),t+=4;var d=o.readUshort(r,t);t+=2,o.readUshort(r,t),t+=2;var f=d>>>8;if(0!=(f&=15))throw \"unknown kern table format: \"+f;t=e.kern.readFormat0(r,t,i);}return i},e.kern.readFormat0=function(r,t,a){var n=e._bin,o=-1,s=n.readUshort(r,t);t+=2,n.readUshort(r,t),t+=2,n.readUshort(r,t),t+=2,n.readUshort(r,t),t+=2;for(var i=0;i<s;i++){var h=n.readUshort(r,t);t+=2;var d=n.readUshort(r,t);t+=2;var f=n.readShort(r,t);t+=2,h!=o&&(a.glyph1.push(h),a.rval.push({glyph2:[],vals:[]}));var u=a.rval[a.rval.length-1];u.glyph2.push(d),u.vals.push(f),o=h;}return t},e.loca={},e.loca.parse=function(r,t,a,n){var o=e._bin,s=[],i=n.head.indexToLocFormat,h=n.maxp.numGlyphs+1;if(0==i)for(var d=0;d<h;d++)s.push(o.readUshort(r,t+(d<<1))<<1);if(1==i)for(d=0;d<h;d++)s.push(o.readUint(r,t+(d<<2)));return s},e.maxp={},e.maxp.parse=function(r,t,a){var n=e._bin,o={},s=n.readUint(r,t);return t+=4,o.numGlyphs=n.readUshort(r,t),t+=2,65536==s&&(o.maxPoints=n.readUshort(r,t),t+=2,o.maxContours=n.readUshort(r,t),t+=2,o.maxCompositePoints=n.readUshort(r,t),t+=2,o.maxCompositeContours=n.readUshort(r,t),t+=2,o.maxZones=n.readUshort(r,t),t+=2,o.maxTwilightPoints=n.readUshort(r,t),t+=2,o.maxStorage=n.readUshort(r,t),t+=2,o.maxFunctionDefs=n.readUshort(r,t),t+=2,o.maxInstructionDefs=n.readUshort(r,t),t+=2,o.maxStackElements=n.readUshort(r,t),t+=2,o.maxSizeOfInstructions=n.readUshort(r,t),t+=2,o.maxComponentElements=n.readUshort(r,t),t+=2,o.maxComponentDepth=n.readUshort(r,t),t+=2),o},e.name={},e.name.parse=function(r,t,a){var n=e._bin,o={};n.readUshort(r,t),t+=2;var s=n.readUshort(r,t);t+=2,n.readUshort(r,t);for(var i,h=[\"copyright\",\"fontFamily\",\"fontSubfamily\",\"ID\",\"fullName\",\"version\",\"postScriptName\",\"trademark\",\"manufacturer\",\"designer\",\"description\",\"urlVendor\",\"urlDesigner\",\"licence\",\"licenceURL\",\"---\",\"typoFamilyName\",\"typoSubfamilyName\",\"compatibleFull\",\"sampleText\",\"postScriptCID\",\"wwsFamilyName\",\"wwsSubfamilyName\",\"lightPalette\",\"darkPalette\"],d=t+=2,f=0;f<s;f++){var u=n.readUshort(r,t);t+=2;var l=n.readUshort(r,t);t+=2;var v=n.readUshort(r,t);t+=2;var c=n.readUshort(r,t);t+=2;var p=n.readUshort(r,t);t+=2;var U=n.readUshort(r,t);t+=2;var g,S=h[c],m=d+12*s+U;if(0==u)g=n.readUnicode(r,m,p/2);else if(3==u&&0==l)g=n.readUnicode(r,m,p/2);else if(0==l)g=n.readASCII(r,m,p);else if(1==l)g=n.readUnicode(r,m,p/2);else if(3==l)g=n.readUnicode(r,m,p/2);else {if(1!=u)throw \"unknown encoding \"+l+\", platformID: \"+u;g=n.readASCII(r,m,p),console.debug(\"reading unknown MAC encoding \"+l+\" as ASCII\");}var b=\"p\"+u+\",\"+v.toString(16);null==o[b]&&(o[b]={}),o[b][void 0!==S?S:c]=g,o[b]._lang=v;}for(var y in o)if(null!=o[y].postScriptName&&1033==o[y]._lang)return o[y];for(var y in o)if(null!=o[y].postScriptName&&0==o[y]._lang)return o[y];for(var y in o)if(null!=o[y].postScriptName&&3084==o[y]._lang)return o[y];for(var y in o)if(null!=o[y].postScriptName)return o[y];for(var y in o){i=y;break}return console.debug(\"returning name table with languageID \"+o[i]._lang),o[i]},e[\"OS/2\"]={},e[\"OS/2\"].parse=function(r,t,a){var n=e._bin.readUshort(r,t);t+=2;var o={};if(0==n)e[\"OS/2\"].version0(r,t,o);else if(1==n)e[\"OS/2\"].version1(r,t,o);else if(2==n||3==n||4==n)e[\"OS/2\"].version2(r,t,o);else {if(5!=n)throw \"unknown OS/2 table version: \"+n;e[\"OS/2\"].version5(r,t,o);}return o},e[\"OS/2\"].version0=function(r,t,a){var n=e._bin;return a.xAvgCharWidth=n.readShort(r,t),t+=2,a.usWeightClass=n.readUshort(r,t),t+=2,a.usWidthClass=n.readUshort(r,t),t+=2,a.fsType=n.readUshort(r,t),t+=2,a.ySubscriptXSize=n.readShort(r,t),t+=2,a.ySubscriptYSize=n.readShort(r,t),t+=2,a.ySubscriptXOffset=n.readShort(r,t),t+=2,a.ySubscriptYOffset=n.readShort(r,t),t+=2,a.ySuperscriptXSize=n.readShort(r,t),t+=2,a.ySuperscriptYSize=n.readShort(r,t),t+=2,a.ySuperscriptXOffset=n.readShort(r,t),t+=2,a.ySuperscriptYOffset=n.readShort(r,t),t+=2,a.yStrikeoutSize=n.readShort(r,t),t+=2,a.yStrikeoutPosition=n.readShort(r,t),t+=2,a.sFamilyClass=n.readShort(r,t),t+=2,a.panose=n.readBytes(r,t,10),t+=10,a.ulUnicodeRange1=n.readUint(r,t),t+=4,a.ulUnicodeRange2=n.readUint(r,t),t+=4,a.ulUnicodeRange3=n.readUint(r,t),t+=4,a.ulUnicodeRange4=n.readUint(r,t),t+=4,a.achVendID=[n.readInt8(r,t),n.readInt8(r,t+1),n.readInt8(r,t+2),n.readInt8(r,t+3)],t+=4,a.fsSelection=n.readUshort(r,t),t+=2,a.usFirstCharIndex=n.readUshort(r,t),t+=2,a.usLastCharIndex=n.readUshort(r,t),t+=2,a.sTypoAscender=n.readShort(r,t),t+=2,a.sTypoDescender=n.readShort(r,t),t+=2,a.sTypoLineGap=n.readShort(r,t),t+=2,a.usWinAscent=n.readUshort(r,t),t+=2,a.usWinDescent=n.readUshort(r,t),t+=2},e[\"OS/2\"].version1=function(r,t,a){var n=e._bin;return t=e[\"OS/2\"].version0(r,t,a),a.ulCodePageRange1=n.readUint(r,t),t+=4,a.ulCodePageRange2=n.readUint(r,t),t+=4},e[\"OS/2\"].version2=function(r,t,a){var n=e._bin;return t=e[\"OS/2\"].version1(r,t,a),a.sxHeight=n.readShort(r,t),t+=2,a.sCapHeight=n.readShort(r,t),t+=2,a.usDefault=n.readUshort(r,t),t+=2,a.usBreak=n.readUshort(r,t),t+=2,a.usMaxContext=n.readUshort(r,t),t+=2},e[\"OS/2\"].version5=function(r,t,a){var n=e._bin;return t=e[\"OS/2\"].version2(r,t,a),a.usLowerOpticalPointSize=n.readUshort(r,t),t+=2,a.usUpperOpticalPointSize=n.readUshort(r,t),t+=2},e.post={},e.post.parse=function(r,t,a){var n=e._bin,o={};return o.version=n.readFixed(r,t),t+=4,o.italicAngle=n.readFixed(r,t),t+=4,o.underlinePosition=n.readShort(r,t),t+=2,o.underlineThickness=n.readShort(r,t),t+=2,o},null==e&&(e={}),null==e.U&&(e.U={}),e.U.codeToGlyph=function(r,e){var t=r.cmap,a=-1;if(null!=t.p0e4?a=t.p0e4:null!=t.p3e1?a=t.p3e1:null!=t.p1e0?a=t.p1e0:null!=t.p0e3&&(a=t.p0e3),-1==a)throw \"no familiar platform and encoding!\";var n=t.tables[a];if(0==n.format)return e>=n.map.length?0:n.map[e];if(4==n.format){for(var o=-1,s=0;s<n.endCount.length;s++)if(e<=n.endCount[s]){o=s;break}if(-1==o)return 0;if(n.startCount[o]>e)return 0;return 65535&(0!=n.idRangeOffset[o]?n.glyphIdArray[e-n.startCount[o]+(n.idRangeOffset[o]>>1)-(n.idRangeOffset.length-o)]:e+n.idDelta[o])}if(12==n.format){if(e>n.groups[n.groups.length-1][1])return 0;for(s=0;s<n.groups.length;s++){var i=n.groups[s];if(i[0]<=e&&e<=i[1])return i[2]+(e-i[0])}return 0}throw \"unknown cmap table format \"+n.format},e.U.glyphToPath=function(r,t){var a={cmds:[],crds:[]};if(r.SVG&&r.SVG.entries[t]){var n=r.SVG.entries[t];return null==n?a:(\"string\"==typeof n&&(n=e.SVG.toPath(n),r.SVG.entries[t]=n),n)}if(r.CFF){var o={x:0,y:0,stack:[],nStems:0,haveWidth:!1,width:r.CFF.Private?r.CFF.Private.defaultWidthX:0,open:!1},s=r.CFF,i=r.CFF.Private;if(s.ROS){for(var h=0;s.FDSelect[h+2]<=t;)h+=2;i=s.FDArray[s.FDSelect[h+1]].Private;}e.U._drawCFF(r.CFF.CharStrings[t],o,s,i,a);}else r.glyf&&e.U._drawGlyf(t,r,a);return a},e.U._drawGlyf=function(r,t,a){var n=t.glyf[r];null==n&&(n=t.glyf[r]=e.glyf._parseGlyf(t,r)),null!=n&&(n.noc>-1?e.U._simpleGlyph(n,a):e.U._compoGlyph(n,t,a));},e.U._simpleGlyph=function(r,t){for(var a=0;a<r.noc;a++){for(var n=0==a?0:r.endPts[a-1]+1,o=r.endPts[a],s=n;s<=o;s++){var i=s==n?o:s-1,h=s==o?n:s+1,d=1&r.flags[s],f=1&r.flags[i],u=1&r.flags[h],l=r.xs[s],v=r.ys[s];if(s==n)if(d){if(!f){e.U.P.moveTo(t,l,v);continue}e.U.P.moveTo(t,r.xs[i],r.ys[i]);}else f?e.U.P.moveTo(t,r.xs[i],r.ys[i]):e.U.P.moveTo(t,(r.xs[i]+l)/2,(r.ys[i]+v)/2);d?f&&e.U.P.lineTo(t,l,v):u?e.U.P.qcurveTo(t,l,v,r.xs[h],r.ys[h]):e.U.P.qcurveTo(t,l,v,(l+r.xs[h])/2,(v+r.ys[h])/2);}e.U.P.closePath(t);}},e.U._compoGlyph=function(r,t,a){for(var n=0;n<r.parts.length;n++){var o={cmds:[],crds:[]},s=r.parts[n];e.U._drawGlyf(s.glyphIndex,t,o);for(var i=s.m,h=0;h<o.crds.length;h+=2){var d=o.crds[h],f=o.crds[h+1];a.crds.push(d*i.a+f*i.b+i.tx),a.crds.push(d*i.c+f*i.d+i.ty);}for(h=0;h<o.cmds.length;h++)a.cmds.push(o.cmds[h]);}},e.U._getGlyphClass=function(r,t){var a=e._lctf.getInterval(t,r);return -1==a?0:t[a+2]},e.U._applySubs=function(r,t,a,n){for(var o=r.length-t-1,s=0;s<a.tabs.length;s++)if(null!=a.tabs[s]){var i,h=a.tabs[s];if(!h.coverage||-1!=(i=e._lctf.coverageIndex(h.coverage,r[t])))if(1==a.ltype)r[t],1==h.fmt?r[t]=r[t]+h.delta:r[t]=h.newg[i];else if(4==a.ltype)for(var d=h.vals[i],f=0;f<d.length;f++){var u=d[f],l=u.chain.length;if(!(l>o)){for(var v=!0,c=0,p=0;p<l;p++){for(;-1==r[t+c+(1+p)];)c++;u.chain[p]!=r[t+c+(1+p)]&&(v=!1);}if(v){r[t]=u.nglyph;for(p=0;p<l+c;p++)r[t+p+1]=-1;break}}}else if(5==a.ltype&&2==h.fmt)for(var U=e._lctf.getInterval(h.cDef,r[t]),g=h.cDef[U+2],S=h.scset[g],m=0;m<S.length;m++){var b=S[m],y=b.input;if(!(y.length>o)){for(v=!0,p=0;p<y.length;p++){var F=e._lctf.getInterval(h.cDef,r[t+1+p]);if(-1==U&&h.cDef[F+2]!=y[p]){v=!1;break}}if(v){var C=b.substLookupRecords;for(f=0;f<C.length;f+=2)C[f],C[f+1];}}}else if(6==a.ltype&&3==h.fmt){if(!e.U._glsCovered(r,h.backCvg,t-h.backCvg.length))continue;if(!e.U._glsCovered(r,h.inptCvg,t))continue;if(!e.U._glsCovered(r,h.ahedCvg,t+h.inptCvg.length))continue;var _=h.lookupRec;for(m=0;m<_.length;m+=2){U=_[m];var P=n[_[m+1]];e.U._applySubs(r,t+U,P,n);}}}},e.U._glsCovered=function(r,t,a){for(var n=0;n<t.length;n++){if(-1==e._lctf.coverageIndex(t[n],r[a+n]))return !1}return !0},e.U.glyphsToPath=function(r,t,a){for(var n={cmds:[],crds:[]},o=0,s=0;s<t.length;s++){var i=t[s];if(-1!=i){for(var h=s<t.length-1&&-1!=t[s+1]?t[s+1]:0,d=e.U.glyphToPath(r,i),f=0;f<d.crds.length;f+=2)n.crds.push(d.crds[f]+o),n.crds.push(d.crds[f+1]);a&&n.cmds.push(a);for(f=0;f<d.cmds.length;f++)n.cmds.push(d.cmds[f]);a&&n.cmds.push(\"X\"),o+=r.hmtx.aWidth[i],s<t.length-1&&(o+=e.U.getPairAdjustment(r,i,h));}}return n},e.U.P={},e.U.P.moveTo=function(r,e,t){r.cmds.push(\"M\"),r.crds.push(e,t);},e.U.P.lineTo=function(r,e,t){r.cmds.push(\"L\"),r.crds.push(e,t);},e.U.P.curveTo=function(r,e,t,a,n,o,s){r.cmds.push(\"C\"),r.crds.push(e,t,a,n,o,s);},e.U.P.qcurveTo=function(r,e,t,a,n){r.cmds.push(\"Q\"),r.crds.push(e,t,a,n);},e.U.P.closePath=function(r){r.cmds.push(\"Z\");},e.U._drawCFF=function(r,t,a,n,o){for(var s=t.stack,i=t.nStems,h=t.haveWidth,d=t.width,f=t.open,u=0,l=t.x,v=t.y,c=0,p=0,U=0,g=0,S=0,m=0,b=0,y=0,F=0,C=0,_={val:0,size:0};u<r.length;){e.CFF.getCharString(r,u,_);var P=_.val;if(u+=_.size,\"o1\"==P||\"o18\"==P)s.length%2!=0&&!h&&(d=s.shift()+n.nominalWidthX),i+=s.length>>1,s.length=0,h=!0;else if(\"o3\"==P||\"o23\"==P){s.length%2!=0&&!h&&(d=s.shift()+n.nominalWidthX),i+=s.length>>1,s.length=0,h=!0;}else if(\"o4\"==P)s.length>1&&!h&&(d=s.shift()+n.nominalWidthX,h=!0),f&&e.U.P.closePath(o),v+=s.pop(),e.U.P.moveTo(o,l,v),f=!0;else if(\"o5\"==P)for(;s.length>0;)l+=s.shift(),v+=s.shift(),e.U.P.lineTo(o,l,v);else if(\"o6\"==P||\"o7\"==P)for(var x=s.length,I=\"o6\"==P,w=0;w<x;w++){var k=s.shift();I?l+=k:v+=k,I=!I,e.U.P.lineTo(o,l,v);}else if(\"o8\"==P||\"o24\"==P){x=s.length;for(var G=0;G+6<=x;)c=l+s.shift(),p=v+s.shift(),U=c+s.shift(),g=p+s.shift(),l=U+s.shift(),v=g+s.shift(),e.U.P.curveTo(o,c,p,U,g,l,v),G+=6;\"o24\"==P&&(l+=s.shift(),v+=s.shift(),e.U.P.lineTo(o,l,v));}else {if(\"o11\"==P)break;if(\"o1234\"==P||\"o1235\"==P||\"o1236\"==P||\"o1237\"==P)\"o1234\"==P&&(p=v,U=(c=l+s.shift())+s.shift(),C=g=p+s.shift(),m=g,y=v,l=(b=(S=(F=U+s.shift())+s.shift())+s.shift())+s.shift(),e.U.P.curveTo(o,c,p,U,g,F,C),e.U.P.curveTo(o,S,m,b,y,l,v)),\"o1235\"==P&&(c=l+s.shift(),p=v+s.shift(),U=c+s.shift(),g=p+s.shift(),F=U+s.shift(),C=g+s.shift(),S=F+s.shift(),m=C+s.shift(),b=S+s.shift(),y=m+s.shift(),l=b+s.shift(),v=y+s.shift(),s.shift(),e.U.P.curveTo(o,c,p,U,g,F,C),e.U.P.curveTo(o,S,m,b,y,l,v)),\"o1236\"==P&&(c=l+s.shift(),p=v+s.shift(),U=c+s.shift(),C=g=p+s.shift(),m=g,b=(S=(F=U+s.shift())+s.shift())+s.shift(),y=m+s.shift(),l=b+s.shift(),e.U.P.curveTo(o,c,p,U,g,F,C),e.U.P.curveTo(o,S,m,b,y,l,v)),\"o1237\"==P&&(c=l+s.shift(),p=v+s.shift(),U=c+s.shift(),g=p+s.shift(),F=U+s.shift(),C=g+s.shift(),S=F+s.shift(),m=C+s.shift(),b=S+s.shift(),y=m+s.shift(),Math.abs(b-l)>Math.abs(y-v)?l=b+s.shift():v=y+s.shift(),e.U.P.curveTo(o,c,p,U,g,F,C),e.U.P.curveTo(o,S,m,b,y,l,v));else if(\"o14\"==P){if(s.length>0&&!h&&(d=s.shift()+a.nominalWidthX,h=!0),4==s.length){var O=s.shift(),T=s.shift(),D=s.shift(),B=s.shift(),A=e.CFF.glyphBySE(a,D),R=e.CFF.glyphBySE(a,B);e.U._drawCFF(a.CharStrings[A],t,a,n,o),t.x=O,t.y=T,e.U._drawCFF(a.CharStrings[R],t,a,n,o);}f&&(e.U.P.closePath(o),f=!1);}else if(\"o19\"==P||\"o20\"==P){s.length%2!=0&&!h&&(d=s.shift()+n.nominalWidthX),i+=s.length>>1,s.length=0,h=!0,u+=i+7>>3;}else if(\"o21\"==P)s.length>2&&!h&&(d=s.shift()+n.nominalWidthX,h=!0),v+=s.pop(),l+=s.pop(),f&&e.U.P.closePath(o),e.U.P.moveTo(o,l,v),f=!0;else if(\"o22\"==P)s.length>1&&!h&&(d=s.shift()+n.nominalWidthX,h=!0),l+=s.pop(),f&&e.U.P.closePath(o),e.U.P.moveTo(o,l,v),f=!0;else if(\"o25\"==P){for(;s.length>6;)l+=s.shift(),v+=s.shift(),e.U.P.lineTo(o,l,v);c=l+s.shift(),p=v+s.shift(),U=c+s.shift(),g=p+s.shift(),l=U+s.shift(),v=g+s.shift(),e.U.P.curveTo(o,c,p,U,g,l,v);}else if(\"o26\"==P)for(s.length%2&&(l+=s.shift());s.length>0;)c=l,p=v+s.shift(),l=U=c+s.shift(),v=(g=p+s.shift())+s.shift(),e.U.P.curveTo(o,c,p,U,g,l,v);else if(\"o27\"==P)for(s.length%2&&(v+=s.shift());s.length>0;)p=v,U=(c=l+s.shift())+s.shift(),g=p+s.shift(),l=U+s.shift(),v=g,e.U.P.curveTo(o,c,p,U,g,l,v);else if(\"o10\"==P||\"o29\"==P){var L=\"o10\"==P?n:a;if(0==s.length)console.debug(\"error: empty stack\");else {var W=s.pop(),M=L.Subrs[W+L.Bias];t.x=l,t.y=v,t.nStems=i,t.haveWidth=h,t.width=d,t.open=f,e.U._drawCFF(M,t,a,n,o),l=t.x,v=t.y,i=t.nStems,h=t.haveWidth,d=t.width,f=t.open;}}else if(\"o30\"==P||\"o31\"==P){var V=s.length,E=(G=0,\"o31\"==P);for(G+=V-(x=-3&V);G<x;)E?(p=v,U=(c=l+s.shift())+s.shift(),v=(g=p+s.shift())+s.shift(),x-G==5?(l=U+s.shift(),G++):l=U,E=!1):(c=l,p=v+s.shift(),U=c+s.shift(),g=p+s.shift(),l=U+s.shift(),x-G==5?(v=g+s.shift(),G++):v=g,E=!0),e.U.P.curveTo(o,c,p,U,g,l,v),G+=4;}else {if(\"o\"==(P+\"\").charAt(0))throw console.debug(\"Unknown operation: \"+P,r),P;s.push(P);}}}t.x=l,t.y=v,t.nStems=i,t.haveWidth=h,t.width=d,t.open=f;};var t=e,a={Typr:t};return r.Typr=t,r.default=a,Object.defineProperty(r,\"__esModule\",{value:!0}),r}({}).Typr}\n\n/*!\nCustom bundle of woff2otf (https://github.com/arty-name/woff2otf) with fflate\n(https://github.com/101arrowz/fflate) for use in Troika text rendering. \nOriginal licenses apply: \n- fflate: https://github.com/101arrowz/fflate/blob/master/LICENSE (MIT)\n- woff2otf.js: https://github.com/arty-name/woff2otf/blob/master/woff2otf.js (Apache2)\n*/\nfunction woff2otfFactory(){return function(r){var e=Uint8Array,n=Uint16Array,t=Uint32Array,a=new e([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),i=new e([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),o=new e([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),f=function(r,e){for(var a=new n(31),i=0;i<31;++i)a[i]=e+=1<<r[i-1];var o=new t(a[30]);for(i=1;i<30;++i)for(var f=a[i];f<a[i+1];++f)o[f]=f-a[i]<<5|i;return [a,o]},u=f(a,2),v=u[0],s=u[1];v[28]=258,s[258]=28;for(var l=f(i,0)[0],c=new n(32768),g=0;g<32768;++g){var h=(43690&g)>>>1|(21845&g)<<1;h=(61680&(h=(52428&h)>>>2|(13107&h)<<2))>>>4|(3855&h)<<4,c[g]=((65280&h)>>>8|(255&h)<<8)>>>1;}var w=function(r,e,t){for(var a=r.length,i=0,o=new n(e);i<a;++i)++o[r[i]-1];var f,u=new n(e);for(i=0;i<e;++i)u[i]=u[i-1]+o[i-1]<<1;if(t){f=new n(1<<e);var v=15-e;for(i=0;i<a;++i)if(r[i])for(var s=i<<4|r[i],l=e-r[i],g=u[r[i]-1]++<<l,h=g|(1<<l)-1;g<=h;++g)f[c[g]>>>v]=s;}else for(f=new n(a),i=0;i<a;++i)r[i]&&(f[i]=c[u[r[i]-1]++]>>>15-r[i]);return f},d=new e(288);for(g=0;g<144;++g)d[g]=8;for(g=144;g<256;++g)d[g]=9;for(g=256;g<280;++g)d[g]=7;for(g=280;g<288;++g)d[g]=8;var m=new e(32);for(g=0;g<32;++g)m[g]=5;var b=w(d,9,1),p=w(m,5,1),y=function(r){for(var e=r[0],n=1;n<r.length;++n)r[n]>e&&(e=r[n]);return e},L=function(r,e,n){var t=e/8|0;return (r[t]|r[t+1]<<8)>>(7&e)&n},U=function(r,e){var n=e/8|0;return (r[n]|r[n+1]<<8|r[n+2]<<16)>>(7&e)},k=[\"unexpected EOF\",\"invalid block type\",\"invalid length/literal\",\"invalid distance\",\"stream finished\",\"no stream handler\",,\"no callback\",\"invalid UTF-8 data\",\"extra field too long\",\"date not in range 1980-2099\",\"filename too long\",\"stream finishing\",\"invalid zip data\"],T=function(r,e,n){var t=new Error(e||k[r]);if(t.code=r,Error.captureStackTrace&&Error.captureStackTrace(t,T),!n)throw t;return t},O=function(r,f,u){var s=r.length;if(!s||u&&!u.l&&s<5)return f||new e(0);var c=!f||u,g=!u||u.i;u||(u={}),f||(f=new e(3*s));var h,d=function(r){var n=f.length;if(r>n){var t=new e(Math.max(2*n,r));t.set(f),f=t;}},m=u.f||0,k=u.p||0,O=u.b||0,A=u.l,x=u.d,E=u.m,D=u.n,M=8*s;do{if(!A){u.f=m=L(r,k,1);var S=L(r,k+1,3);if(k+=3,!S){var V=r[(I=((h=k)/8|0)+(7&h&&1)+4)-4]|r[I-3]<<8,_=I+V;if(_>s){g&&T(0);break}c&&d(O+V),f.set(r.subarray(I,_),O),u.b=O+=V,u.p=k=8*_;continue}if(1==S)A=b,x=p,E=9,D=5;else if(2==S){var j=L(r,k,31)+257,z=L(r,k+10,15)+4,C=j+L(r,k+5,31)+1;k+=14;for(var F=new e(C),P=new e(19),q=0;q<z;++q)P[o[q]]=L(r,k+3*q,7);k+=3*z;var B=y(P),G=(1<<B)-1,H=w(P,B,1);for(q=0;q<C;){var I,J=H[L(r,k,G)];if(k+=15&J,(I=J>>>4)<16)F[q++]=I;else {var K=0,N=0;for(16==I?(N=3+L(r,k,3),k+=2,K=F[q-1]):17==I?(N=3+L(r,k,7),k+=3):18==I&&(N=11+L(r,k,127),k+=7);N--;)F[q++]=K;}}var Q=F.subarray(0,j),R=F.subarray(j);E=y(Q),D=y(R),A=w(Q,E,1),x=w(R,D,1);}else T(1);if(k>M){g&&T(0);break}}c&&d(O+131072);for(var W=(1<<E)-1,X=(1<<D)-1,Y=k;;Y=k){var Z=(K=A[U(r,k)&W])>>>4;if((k+=15&K)>M){g&&T(0);break}if(K||T(2),Z<256)f[O++]=Z;else {if(256==Z){Y=k,A=null;break}var $=Z-254;if(Z>264){var rr=a[q=Z-257];$=L(r,k,(1<<rr)-1)+v[q],k+=rr;}var er=x[U(r,k)&X],nr=er>>>4;er||T(3),k+=15&er;R=l[nr];if(nr>3){rr=i[nr];R+=U(r,k)&(1<<rr)-1,k+=rr;}if(k>M){g&&T(0);break}c&&d(O+131072);for(var tr=O+$;O<tr;O+=4)f[O]=f[O-R],f[O+1]=f[O+1-R],f[O+2]=f[O+2-R],f[O+3]=f[O+3-R];O=tr;}}u.l=A,u.p=Y,u.b=O,A&&(m=1,u.m=E,u.d=x,u.n=D);}while(!m);return O==f.length?f:function(r,a,i){(null==a||a<0)&&(a=0),(null==i||i>r.length)&&(i=r.length);var o=new(r instanceof n?n:r instanceof t?t:e)(i-a);return o.set(r.subarray(a,i)),o}(f,0,O)},A=new e(0);var x=\"undefined\"!=typeof TextDecoder&&new TextDecoder;try{x.decode(A,{stream:!0}),1;}catch(r){}return r.convert_streams=function(r){var e=new DataView(r),n=0;function t(){var r=e.getUint16(n);return n+=2,r}function a(){var r=e.getUint32(n);return n+=4,r}function i(r){m.setUint16(b,r),b+=2;}function o(r){m.setUint32(b,r),b+=4;}for(var f={signature:a(),flavor:a(),length:a(),numTables:t(),reserved:t(),totalSfntSize:a(),majorVersion:t(),minorVersion:t(),metaOffset:a(),metaLength:a(),metaOrigLength:a(),privOffset:a(),privLength:a()},u=0;Math.pow(2,u)<=f.numTables;)u++;u--;for(var v=16*Math.pow(2,u),s=16*f.numTables-v,l=12,c=[],g=0;g<f.numTables;g++)c.push({tag:a(),offset:a(),compLength:a(),origLength:a(),origChecksum:a()}),l+=16;var h,w=new Uint8Array(12+16*c.length+c.reduce((function(r,e){return r+e.origLength+4}),0)),d=w.buffer,m=new DataView(d),b=0;return o(f.flavor),i(f.numTables),i(v),i(u),i(s),c.forEach((function(r){o(r.tag),o(r.origChecksum),o(l),o(r.origLength),r.outOffset=l,(l+=r.origLength)%4!=0&&(l+=4-l%4);})),c.forEach((function(e){var n,t=r.slice(e.offset,e.offset+e.compLength);if(e.compLength!=e.origLength){var a=new Uint8Array(e.origLength);n=new Uint8Array(t,2),O(n,a);}else a=new Uint8Array(t);w.set(a,e.outOffset);var i=0;(l=e.outOffset+e.origLength)%4!=0&&(i=4-l%4),w.set(new Uint8Array(i).buffer,e.outOffset+e.origLength),h=l+i;})),d.slice(0,h)},Object.defineProperty(r,\"__esModule\",{value:!0}),r}({}).convert_streams}\n\n/**\n * A factory wrapper parsing a font file using Typr.\n * Also adds support for WOFF files (not WOFF2).\n */\n\n/**\n * @typedef ParsedFont\n * @property {number} ascender\n * @property {number} descender\n * @property {number} xHeight\n * @property {(number) => boolean} supportsCodePoint\n * @property {(text:string, fontSize:number, letterSpacing:number, callback) => number} forEachGlyph\n * @property {number} lineGap\n * @property {number} capHeight\n * @property {number} unitsPerEm\n */\n\n/**\n * @typedef {(buffer: ArrayBuffer) => ParsedFont} FontParser\n */\n\n/**\n * @returns {FontParser}\n */\nfunction parserFactory(Typr, woff2otf) {\n const cmdArgLengths = {\n M: 2,\n L: 2,\n Q: 4,\n C: 6,\n Z: 0\n };\n\n // {joinType: \"skip+step,...\"}\n const joiningTypeRawData = {\"C\":\"18g,ca,368,1kz\",\"D\":\"17k,6,2,2+4,5+c,2+6,2+1,10+1,9+f,j+11,2+1,a,2,2+1,15+2,3,j+2,6+3,2+8,2,2,2+1,w+a,4+e,3+3,2,3+2,3+5,23+w,2f+4,3,2+9,2,b,2+3,3,1k+9,6+1,3+1,2+2,2+d,30g,p+y,1,1+1g,f+x,2,sd2+1d,jf3+4,f+3,2+4,2+2,b+3,42,2,4+2,2+1,2,3,t+1,9f+w,2,el+2,2+g,d+2,2l,2+1,5,3+1,2+1,2,3,6,16wm+1v\",\"R\":\"17m+3,2,2,6+3,m,15+2,2+2,h+h,13,3+8,2,2,3+1,2,p+1,x,5+4,5,a,2,2,3,u,c+2,g+1,5,2+1,4+1,5j,6+1,2,b,2+2,f,2+1,1s+2,2,3+1,7,1ez0,2,2+1,4+4,b,4,3,b,42,2+2,4,3,2+1,2,o+3,ae,ep,x,2o+2,3+1,3,5+1,6\",\"L\":\"x9u,jff,a,fd,jv\",\"T\":\"4t,gj+33,7o+4,1+1,7c+18,2,2+1,2+1,2,21+a,2,1b+k,h,2u+6,3+5,3+1,2+3,y,2,v+q,2k+a,1n+8,a,p+3,2+8,2+2,2+4,18+2,3c+e,2+v,1k,2,5+7,5,4+6,b+1,u,1n,5+3,9,l+1,r,3+1,1m,5+1,5+1,3+2,4,v+1,4,c+1,1m,5+4,2+1,5,l+1,n+5,2,1n,3,2+3,9,8+1,c+1,v,1q,d,1f,4,1m+2,6+2,2+3,8+1,c+1,u,1n,3,7,6+1,l+1,t+1,1m+1,5+3,9,l+1,u,21,8+2,2,2j,3+6,d+7,2r,3+8,c+5,23+1,s,2,2,1k+d,2+4,2+1,6+a,2+z,a,2v+3,2+5,2+1,3+1,q+1,5+2,h+3,e,3+1,7,g,jk+2,qb+2,u+2,u+1,v+1,1t+1,2+6,9,3+a,a,1a+2,3c+1,z,3b+2,5+1,a,7+2,64+1,3,1n,2+6,2,2,3+7,7+9,3,1d+d,1,1+1,1s+3,1d,2+4,2,6,15+8,d+1,x+3,3+1,2+2,1l,2+1,4,2+2,1n+7,3+1,49+2,2+c,2+6,5,7,4+1,5j+1l,2+4,ek,3+1,r+4,1e+4,6+5,2p+c,1+3,1,1+2,1+b,2db+2,3y,2p+v,ff+3,30+1,n9x,1+2,2+9,x+1,29+1,7l,4,5,q+1,6,48+1,r+h,e,13+7,q+a,1b+2,1d,3+3,3+1,14,1w+5,3+1,3+1,d,9,1c,1g,2+2,3+1,6+1,2,17+1,9,6n,3,5,fn5,ki+f,h+f,5s,6y+2,ea,6b,46+4,1af+2,2+1,6+3,15+2,5,4m+1,fy+3,as+1,4a+a,4x,1j+e,1l+2,1e+3,3+1,1y+2,11+4,2+7,1r,d+1,1h+8,b+3,3,2o+2,3,2+1,7,4h,4+7,m+1,1m+1,4,12+6,4+4,5g+7,3+2,2,o,2d+5,2,5+1,2+1,6n+3,7+1,2+1,s+1,2e+7,3,2+1,2z,2,3+5,2,2u+2,3+3,2+4,78+8,2+1,75+1,2,5,41+3,3+1,5,x+9,15+5,3+3,9,a+5,3+2,1b+c,2+1,bb+6,2+5,2,2b+l,3+6,2+1,2+1,3f+5,4,2+1,2+6,2,21+1,4,2,9o+1,470+8,at4+4,1o+6,t5,1s+3,2a,f5l+1,2+3,43o+2,a+7,1+7,3+6,v+3,45+2,1j0+1i,5+1d,9,f,n+4,2+e,11t+6,2+g,3+6,2+1,2+4,7a+6,c6+3,15t+6,32+6,1,gzau,v+2n,3l+6n\"};\n\n const JT_LEFT = 1, //indicates that a character joins with the subsequent character, but does not join with the preceding character.\n JT_RIGHT = 2, //indicates that a character joins with the preceding character, but does not join with the subsequent character.\n JT_DUAL = 4, //indicates that a character joins with the preceding character and joins with the subsequent character.\n JT_TRANSPARENT = 8, //indicates that the character does not join with adjacent characters and that the character must be skipped over when the shaping engine is evaluating the joining positions in a sequence of characters. When a JT_TRANSPARENT character is encountered in a sequence, the JOINING_TYPE of the preceding character passes through. Diacritical marks are frequently assigned this value.\n JT_JOIN_CAUSING = 16, //indicates that the character forces the use of joining forms with the preceding and subsequent characters. Kashidas and the Zero Width Joiner (U+200D) are both JOIN_CAUSING characters.\n JT_NON_JOINING = 32; //indicates that a character does not join with the preceding or with the subsequent character.,\n\n let joiningTypeMap;\n function getCharJoiningType(ch) {\n if (!joiningTypeMap) {\n const m = {\n R: JT_RIGHT,\n L: JT_LEFT,\n D: JT_DUAL,\n C: JT_JOIN_CAUSING,\n U: JT_NON_JOINING,\n T: JT_TRANSPARENT\n };\n joiningTypeMap = new Map();\n for (let type in joiningTypeRawData) {\n let lastCode = 0;\n joiningTypeRawData[type].split(',').forEach(range => {\n let [skip, step] = range.split('+');\n skip = parseInt(skip,36);\n step = step ? parseInt(step, 36) : 0;\n joiningTypeMap.set(lastCode += skip, m[type]);\n for (let i = step; i--;) {\n joiningTypeMap.set(++lastCode, m[type]);\n }\n });\n }\n }\n return joiningTypeMap.get(ch) || JT_NON_JOINING\n }\n\n const ISOL = 1, INIT = 2, FINA = 3, MEDI = 4;\n const formsToFeatures = [null, 'isol', 'init', 'fina', 'medi'];\n\n function detectJoiningForms(str) {\n // This implements the algorithm described here:\n // https://github.com/n8willis/opentype-shaping-documents/blob/master/opentype-shaping-arabic-general.md\n const joiningForms = new Uint8Array(str.length);\n let prevJoiningType = JT_NON_JOINING;\n let prevForm = ISOL;\n let prevIndex = -1;\n for (let i = 0; i < str.length; i++) {\n const code = str.codePointAt(i);\n let joiningType = getCharJoiningType(code) | 0;\n let form = ISOL;\n if (joiningType & JT_TRANSPARENT) {\n continue\n }\n if (prevJoiningType & (JT_LEFT | JT_DUAL | JT_JOIN_CAUSING)) {\n if (joiningType & (JT_RIGHT | JT_DUAL | JT_JOIN_CAUSING)) {\n form = FINA;\n // isol->init, fina->medi\n if (prevForm === ISOL || prevForm === FINA) {\n joiningForms[prevIndex]++;\n }\n }\n else if (joiningType & (JT_LEFT | JT_NON_JOINING)) {\n // medi->fina, init->isol\n if (prevForm === INIT || prevForm === MEDI) {\n joiningForms[prevIndex]--;\n }\n }\n }\n else if (prevJoiningType & (JT_RIGHT | JT_NON_JOINING)) {\n // medi->fina, init->isol\n if (prevForm === INIT || prevForm === MEDI) {\n joiningForms[prevIndex]--;\n }\n }\n prevForm = joiningForms[i] = form;\n prevJoiningType = joiningType;\n prevIndex = i;\n if (code > 0xffff) i++;\n }\n // console.log(str.split('').map(ch => ch.codePointAt(0).toString(16)))\n // console.log(str.split('').map(ch => getCharJoiningType(ch.codePointAt(0))))\n // console.log(Array.from(joiningForms).map(f => formsToFeatures[f] || 'none'))\n return joiningForms\n }\n\n function stringToGlyphs (font, str) {\n const glyphIds = [];\n for (let i = 0; i < str.length; i++) {\n const cc = str.codePointAt(i);\n if (cc > 0xffff) i++;\n glyphIds.push(Typr.U.codeToGlyph(font, cc));\n }\n\n const gsub = font['GSUB'];\n if (gsub) {\n const {lookupList, featureList} = gsub;\n let joiningForms;\n const supportedFeatures = /^(rlig|liga|mset|isol|init|fina|medi|half|pres|blws|ccmp)$/;\n const usedLookups = [];\n featureList.forEach(feature => {\n if (supportedFeatures.test(feature.tag)) {\n for (let ti = 0; ti < feature.tab.length; ti++) {\n if (usedLookups[feature.tab[ti]]) continue\n usedLookups[feature.tab[ti]] = true;\n const tab = lookupList[feature.tab[ti]];\n const isJoiningFeature = /^(isol|init|fina|medi)$/.test(feature.tag);\n if (isJoiningFeature && !joiningForms) { //lazy\n joiningForms = detectJoiningForms(str);\n }\n for (let ci = 0; ci < glyphIds.length; ci++) {\n if (!joiningForms || !isJoiningFeature || formsToFeatures[joiningForms[ci]] === feature.tag) {\n Typr.U._applySubs(glyphIds, ci, tab, lookupList);\n }\n }\n }\n }\n });\n }\n\n return glyphIds\n }\n\n // Calculate advances and x/y offsets for each glyph, e.g. kerning and mark\n // attachments. This is a more complete version of Typr.U.getPairAdjustment\n // and should become an upstream replacement eventually.\n function calcGlyphPositions(font, glyphIds) {\n const positions = new Int16Array(glyphIds.length * 3); // [offsetX, offsetY, advanceX, ...]\n let glyphIndex = 0;\n for (; glyphIndex < glyphIds.length; glyphIndex++) {\n const glyphId = glyphIds[glyphIndex];\n if (glyphId === -1) continue;\n\n positions[glyphIndex * 3 + 2] = font.hmtx.aWidth[glyphId]; // populate advanceX in...advance.\n\n const gpos = font.GPOS;\n if (gpos) {\n const llist = gpos.lookupList;\n for (let i = 0; i < llist.length; i++) {\n const lookup = llist[i];\n for (let j = 0; j < lookup.tabs.length; j++) {\n const tab = lookup.tabs[j];\n // Single char placement\n if (lookup.ltype === 1) {\n const ind = Typr._lctf.coverageIndex(tab.coverage, glyphId);\n if (ind !== -1 && tab.pos) {\n applyValueRecord(tab.pos, glyphIndex);\n break\n }\n }\n // Pairs (kerning)\n else if (lookup.ltype === 2) {\n let adj = null;\n let prevGlyphIndex = getPrevGlyphIndex();\n if (prevGlyphIndex !== -1) {\n const coverageIndex = Typr._lctf.coverageIndex(tab.coverage, glyphIds[prevGlyphIndex]);\n if (coverageIndex !== -1) {\n if (tab.fmt === 1) {\n const right = tab.pairsets[coverageIndex];\n for (let k = 0; k < right.length; k++) {\n if (right[k].gid2 === glyphId) adj = right[k];\n }\n } else if (tab.fmt === 2) {\n const c1 = Typr.U._getGlyphClass(glyphIds[prevGlyphIndex], tab.classDef1);\n const c2 = Typr.U._getGlyphClass(glyphId, tab.classDef2);\n adj = tab.matrix[c1][c2];\n }\n if (adj) {\n if (adj.val1) applyValueRecord(adj.val1, prevGlyphIndex);\n if (adj.val2) applyValueRecord(adj.val2, glyphIndex);\n break\n }\n }\n }\n }\n // Mark to base\n else if (lookup.ltype === 4) {\n const markArrIndex = Typr._lctf.coverageIndex(tab.markCoverage, glyphId);\n if (markArrIndex !== -1) {\n const baseGlyphIndex = getPrevGlyphIndex(isBaseGlyph);\n const baseArrIndex = baseGlyphIndex === -1 ? -1 : Typr._lctf.coverageIndex(tab.baseCoverage, glyphIds[baseGlyphIndex]);\n if (baseArrIndex !== -1) {\n const markRecord = tab.markArray[markArrIndex];\n const baseAnchor = tab.baseArray[baseArrIndex][markRecord.markClass];\n positions[glyphIndex * 3] = baseAnchor.x - markRecord.x + positions[baseGlyphIndex * 3] - positions[baseGlyphIndex * 3 + 2];\n positions[glyphIndex * 3 + 1] = baseAnchor.y - markRecord.y + positions[baseGlyphIndex * 3 + 1];\n break;\n }\n }\n }\n // Mark to mark\n else if (lookup.ltype === 6) {\n const mark1ArrIndex = Typr._lctf.coverageIndex(tab.mark1Coverage, glyphId);\n if (mark1ArrIndex !== -1) {\n const prevGlyphIndex = getPrevGlyphIndex();\n if (prevGlyphIndex !== -1) {\n const prevGlyphId = glyphIds[prevGlyphIndex];\n if (getGlyphClass(font, prevGlyphId) === 3) { // only check mark glyphs\n const mark2ArrIndex = Typr._lctf.coverageIndex(tab.mark2Coverage, prevGlyphId);\n if (mark2ArrIndex !== -1) {\n const mark1Record = tab.mark1Array[mark1ArrIndex];\n const mark2Anchor = tab.mark2Array[mark2ArrIndex][mark1Record.markClass];\n positions[glyphIndex * 3] = mark2Anchor.x - mark1Record.x + positions[prevGlyphIndex * 3] - positions[prevGlyphIndex * 3 + 2];\n positions[glyphIndex * 3 + 1] = mark2Anchor.y - mark1Record.y + positions[prevGlyphIndex * 3 + 1];\n break;\n }\n }\n }\n }\n }\n }\n }\n }\n // Check kern table if no GPOS\n else if (font.kern && !font.cff) {\n const prevGlyphIndex = getPrevGlyphIndex();\n if (prevGlyphIndex !== -1) {\n const ind1 = font.kern.glyph1.indexOf(glyphIds[prevGlyphIndex]);\n if (ind1 !== -1) {\n const ind2 = font.kern.rval[ind1].glyph2.indexOf(glyphId);\n if (ind2 !== -1) {\n positions[prevGlyphIndex * 3 + 2] += font.kern.rval[ind1].vals[ind2];\n }\n }\n }\n }\n }\n\n return positions;\n\n function getPrevGlyphIndex(filter) {\n for (let i = glyphIndex - 1; i >=0; i--) {\n if (glyphIds[i] !== -1 && (!filter || filter(glyphIds[i]))) {\n return i\n }\n }\n return -1;\n }\n\n function isBaseGlyph(glyphId) {\n return getGlyphClass(font, glyphId) === 1;\n }\n\n function applyValueRecord(source, gi) {\n for (let i = 0; i < 3; i++) {\n positions[gi * 3 + i] += source[i] || 0;\n }\n }\n }\n\n function getGlyphClass(font, glyphId) {\n const classDef = font.GDEF && font.GDEF.glyphClassDef;\n return classDef ? Typr.U._getGlyphClass(glyphId, classDef) : 0;\n }\n\n function firstNum(...args) {\n for (let i = 0; i < args.length; i++) {\n if (typeof args[i] === 'number') {\n return args[i]\n }\n }\n }\n\n /**\n * @returns ParsedFont\n */\n function wrapFontObj(typrFont) {\n const glyphMap = Object.create(null);\n\n const os2 = typrFont['OS/2'];\n const hhea = typrFont.hhea;\n const unitsPerEm = typrFont.head.unitsPerEm;\n const ascender = firstNum(os2 && os2.sTypoAscender, hhea && hhea.ascender, unitsPerEm);\n\n /** @type ParsedFont */\n const fontObj = {\n unitsPerEm,\n ascender,\n descender: firstNum(os2 && os2.sTypoDescender, hhea && hhea.descender, 0),\n capHeight: firstNum(os2 && os2.sCapHeight, ascender),\n xHeight: firstNum(os2 && os2.sxHeight, ascender),\n lineGap: firstNum(os2 && os2.sTypoLineGap, hhea && hhea.lineGap),\n supportsCodePoint(code) {\n return Typr.U.codeToGlyph(typrFont, code) > 0\n },\n forEachGlyph(text, fontSize, letterSpacing, callback) {\n let penX = 0;\n const fontScale = 1 / fontObj.unitsPerEm * fontSize;\n\n const glyphIds = stringToGlyphs(typrFont, text);\n let charIndex = 0;\n const positions = calcGlyphPositions(typrFont, glyphIds);\n\n glyphIds.forEach((glyphId, i) => {\n // Typr returns a glyph index per string codepoint, with -1s in place of those that\n // were omitted due to ligature substitution. So we can track original index in the\n // string via simple increment, and skip everything else when seeing a -1.\n if (glyphId !== -1) {\n let glyphObj = glyphMap[glyphId];\n if (!glyphObj) {\n const {cmds, crds} = Typr.U.glyphToPath(typrFont, glyphId);\n\n // Build path string\n let path = '';\n let crdsIdx = 0;\n for (let i = 0, len = cmds.length; i < len; i++) {\n const numArgs = cmdArgLengths[cmds[i]];\n path += cmds[i];\n for (let j = 1; j <= numArgs; j++) {\n path += (j > 1 ? ',' : '') + crds[crdsIdx++];\n }\n }\n\n // Find extents - Glyf gives this in metadata but not CFF, and Typr doesn't\n // normalize the two, so it's simplest just to iterate ourselves.\n let xMin, yMin, xMax, yMax;\n if (crds.length) {\n xMin = yMin = Infinity;\n xMax = yMax = -Infinity;\n for (let i = 0, len = crds.length; i < len; i += 2) {\n let x = crds[i];\n let y = crds[i + 1];\n if (x < xMin) xMin = x;\n if (y < yMin) yMin = y;\n if (x > xMax) xMax = x;\n if (y > yMax) yMax = y;\n }\n } else {\n xMin = xMax = yMin = yMax = 0;\n }\n\n glyphObj = glyphMap[glyphId] = {\n index: glyphId,\n advanceWidth: typrFont.hmtx.aWidth[glyphId],\n xMin,\n yMin,\n xMax,\n yMax,\n path,\n };\n }\n\n callback.call(\n null,\n glyphObj,\n penX + positions[i * 3] * fontScale,\n positions[i * 3 + 1] * fontScale,\n charIndex\n );\n\n penX += positions[i * 3 + 2] * fontScale;\n if (letterSpacing) {\n penX += letterSpacing * fontSize;\n }\n }\n charIndex += (text.codePointAt(charIndex) > 0xffff ? 2 : 1);\n });\n\n return penX\n }\n };\n\n return fontObj\n }\n\n /**\n * @type FontParser\n */\n return function parse(buffer) {\n // Look to see if we have a WOFF file and convert it if so:\n const peek = new Uint8Array(buffer, 0, 4);\n const tag = Typr._bin.readASCII(peek, 0, 4);\n if (tag === 'wOFF') {\n buffer = woff2otf(buffer);\n } else if (tag === 'wOF2') {\n throw new Error('woff2 fonts not supported')\n }\n return wrapFontObj(Typr.parse(buffer)[0])\n }\n}\n\n\nconst workerModule = /*#__PURE__*/defineWorkerModule({\n name: 'Typr Font Parser',\n dependencies: [typrFactory, woff2otfFactory, parserFactory],\n init(typrFactory, woff2otfFactory, parserFactory) {\n const Typr = typrFactory();\n const woff2otf = woff2otfFactory();\n return parserFactory(Typr, woff2otf)\n }\n});\n\n/*!\nCustom bundle of @unicode-font-resolver/client v1.0.2 (https://github.com/lojjic/unicode-font-resolver)\nfor use in Troika text rendering. \nOriginal MIT license applies\n*/\nfunction unicodeFontResolverClientFactory(){return function(t){var n=function(){this.buckets=new Map;};n.prototype.add=function(t){var n=t>>5;this.buckets.set(n,(this.buckets.get(n)||0)|1<<(31&t));},n.prototype.has=function(t){var n=this.buckets.get(t>>5);return void 0!==n&&0!=(n&1<<(31&t))},n.prototype.serialize=function(){var t=[];return this.buckets.forEach((function(n,r){t.push((+r).toString(36)+\":\"+n.toString(36));})),t.join(\",\")},n.prototype.deserialize=function(t){var n=this;this.buckets.clear(),t.split(\",\").forEach((function(t){var r=t.split(\":\");n.buckets.set(parseInt(r[0],36),parseInt(r[1],36));}));};var r=Math.pow(2,8),e=r-1,o=~e;function a(t){var n=function(t){return t&o}(t).toString(16),e=function(t){return (t&o)+r-1}(t).toString(16);return \"codepoint-index/plane\"+(t>>16)+\"/\"+n+\"-\"+e+\".json\"}function i(t,n){var r=t&e,o=n.codePointAt(r/6|0);return 0!=((o=(o||48)-48)&1<<r%6)}function u(t,n){var r;(r=t,r.replace(/U\\+/gi,\"\").replace(/^,+|,+$/g,\"\").split(/,+/).map((function(t){return t.split(\"-\").map((function(t){return parseInt(t.trim(),16)}))}))).forEach((function(t){var r=t[0],e=t[1];void 0===e&&(e=r),n(r,e);}));}function c(t,n){u(t,(function(t,r){for(var e=t;e<=r;e++)n(e);}));}var s={},f={},l=new WeakMap,v=\"https://cdn.jsdelivr.net/gh/lojjic/unicode-font-resolver@v1.0.1/packages/data\";function d(t){var r=l.get(t);return r||(r=new n,c(t.ranges,(function(t){return r.add(t)})),l.set(t,r)),r}var h,p=new Map;function g(t,n,r){return t[n]?n:t[r]?r:function(t){for(var n in t)return n}(t)}function w(t,n){var r=n;if(!t.includes(r)){r=1/0;for(var e=0;e<t.length;e++)Math.abs(t[e]-n)<Math.abs(r-n)&&(r=t[e]);}return r}function k(t){return h||(h=new Set,c(\"9-D,20,85,A0,1680,2000-200A,2028-202F,205F,3000\",(function(t){h.add(t);}))),h.has(t)}return t.CodePointSet=n,t.clearCache=function(){s={},f={};},t.getFontsForString=function(t,n){void 0===n&&(n={});var r,e=n.lang;void 0===e&&(e=/\\p{Script=Hangul}/u.test(r=t)?\"ko\":/\\p{Script=Hiragana}|\\p{Script=Katakana}/u.test(r)?\"ja\":\"en\");var o=n.category;void 0===o&&(o=\"sans-serif\");var u=n.style;void 0===u&&(u=\"normal\");var c=n.weight;void 0===c&&(c=400);var l=(n.dataUrl||v).replace(/\\/$/g,\"\"),h=new Map,y=new Uint8Array(t.length),b={},m={},A=new Array(t.length),S=new Map,j=!1;function M(t){var n=p.get(t);return n||(n=fetch(l+\"/\"+t).then((function(t){if(!t.ok)throw new Error(t.statusText);return t.json().then((function(t){if(!Array.isArray(t)||1!==t[0])throw new Error(\"Incorrect schema version; need 1, got \"+t[0]);return t[1]}))})).catch((function(n){if(l!==v)return j||(console.error('unicode-font-resolver: Failed loading from dataUrl \"'+l+'\", trying default CDN. '+n.message),j=!0),l=v,p.delete(t),M(t);throw n})),p.set(t,n)),n}for(var P=function(n){var r=t.codePointAt(n),e=a(r);A[n]=e,s[e]||S.has(e)||S.set(e,M(e).then((function(t){s[e]=t;}))),r>65535&&(n++,E=n);},E=0;E<t.length;E++)P(E);return Promise.all(S.values()).then((function(){S.clear();for(var n=function(n){var o=t.codePointAt(n),a=null,u=s[A[n]],c=void 0;for(var l in u){var v=m[l];if(void 0===v&&(v=m[l]=new RegExp(l).test(e||\"en\")),v){for(var d in c=l,u[l])if(i(o,u[l][d])){a=d;break}break}}if(!a)t:for(var h in u)if(h!==c)for(var p in u[h])if(i(o,u[h][p])){a=p;break t}a||(console.debug(\"No font coverage for U+\"+o.toString(16)),a=\"latin\"),A[n]=a,f[a]||S.has(a)||S.set(a,M(\"font-meta/\"+a+\".json\").then((function(t){f[a]=t;}))),o>65535&&(n++,r=n);},r=0;r<t.length;r++)n(r);return Promise.all(S.values())})).then((function(){for(var n,r=null,e=0;e<t.length;e++){var a=t.codePointAt(e);if(r&&(k(a)||d(r).has(a)))y[e]=y[e-1];else {r=f[A[e]];var i=b[r.id];if(!i){var s=r.typeforms,v=g(s,o,\"sans-serif\"),p=g(s[v],u,\"normal\"),m=w(null===(n=s[v])||void 0===n?void 0:n[p],c);i=b[r.id]=l+\"/font-files/\"+r.id+\"/\"+v+\".\"+p+\".\"+m+\".woff\";}var S=h.get(i);null==S&&(S=h.size,h.set(i,S)),y[e]=S;}a>65535&&(e++,y[e]=y[e-1]);}return {fontUrls:Array.from(h.keys()),chars:y}}))},Object.defineProperty(t,\"__esModule\",{value:!0}),t}({})}\n\n/**\n * @typedef {string | {src:string, label?:string, unicodeRange?:string, lang?:string}} UserFont\n */\n\n/**\n * @typedef {ClientOptions} FontResolverOptions\n * @property {Array<UserFont>|UserFont} [fonts]\n * @property {'normal'|'italic'} [style]\n * @property {'normal'|'bold'|number} [style]\n * @property {string} [unicodeFontsURL]\n */\n\n/**\n * @typedef {Object} FontResolverResult\n * @property {Uint8Array} chars\n * @property {Array<ParsedFont & {src:string}>} fonts\n */\n\n/**\n * @typedef {function} FontResolver\n * @param {string} text\n * @param {(FontResolverResult) => void} callback\n * @param {FontResolverOptions} [options]\n */\n\n/**\n * Factory for the FontResolver function.\n * @param {FontParser} fontParser\n * @param {{getFontsForString: function, CodePointSet: function}} unicodeFontResolverClient\n * @return {FontResolver}\n */\nfunction createFontResolver(fontParser, unicodeFontResolverClient) {\n /**\n * @type {Record<string, ParsedFont>}\n */\n const parsedFonts = Object.create(null);\n\n /**\n * @type {Record<string, Array<(ParsedFont) => void>>}\n */\n const loadingFonts = Object.create(null);\n\n /**\n * Load a given font url\n */\n function doLoadFont(url, callback) {\n const onError = err => {\n console.error(`Failure loading font ${url}`, err);\n };\n try {\n const request = new XMLHttpRequest();\n request.open('get', url, true);\n request.responseType = 'arraybuffer';\n request.onload = function () {\n if (request.status >= 400) {\n onError(new Error(request.statusText));\n }\n else if (request.status > 0) {\n try {\n const fontObj = fontParser(request.response);\n fontObj.src = url;\n callback(fontObj);\n } catch (e) {\n onError(e);\n }\n }\n };\n request.onerror = onError;\n request.send();\n } catch(err) {\n onError(err);\n }\n }\n\n\n /**\n * Load a given font url if needed, invoking a callback when it's loaded. If already\n * loaded, the callback will be called synchronously.\n * @param {string} fontUrl\n * @param {(font: ParsedFont) => void} callback\n */\n function loadFont(fontUrl, callback) {\n let font = parsedFonts[fontUrl];\n if (font) {\n callback(font);\n } else if (loadingFonts[fontUrl]) {\n loadingFonts[fontUrl].push(callback);\n } else {\n loadingFonts[fontUrl] = [callback];\n doLoadFont(fontUrl, fontObj => {\n fontObj.src = fontUrl;\n parsedFonts[fontUrl] = fontObj;\n loadingFonts[fontUrl].forEach(cb => cb(fontObj));\n delete loadingFonts[fontUrl];\n });\n }\n }\n\n /**\n * For a given string of text, determine which fonts are required to fully render it and\n * ensure those fonts are loaded.\n */\n return function (text, callback, {\n lang,\n fonts: userFonts = [],\n style = 'normal',\n weight = 'normal',\n unicodeFontsURL\n } = {}) {\n const charResolutions = new Uint8Array(text.length);\n const fontResolutions = [];\n if (!text.length) {\n allDone();\n }\n\n const fontIndices = new Map();\n const fallbackRanges = []; // [[start, end], ...]\n\n if (style !== 'italic') style = 'normal';\n if (typeof weight !== 'number') {\n weight = weight === 'bold' ? 700 : 400;\n }\n\n if (userFonts && !Array.isArray(userFonts)) {\n userFonts = [userFonts];\n }\n userFonts = userFonts.slice()\n // filter by language\n .filter(def => !def.lang || def.lang.test(lang))\n // switch order for easier iteration\n .reverse();\n if (userFonts.length) {\n const UNKNOWN = 0;\n const RESOLVED = 1;\n const NEEDS_FALLBACK = 2;\n let prevCharResult = UNKNOWN\n\n ;(function resolveUserFonts (startIndex = 0) {\n for (let i = startIndex, iLen = text.length; i < iLen; i++) {\n const codePoint = text.codePointAt(i);\n // Carry previous character's result forward if:\n // - it resolved to a font that also covers this character\n // - this character is whitespace\n if (\n (prevCharResult === RESOLVED && fontResolutions[charResolutions[i - 1]].supportsCodePoint(codePoint)) ||\n (i > 0 && /\\s/.test(text[i]))\n ) {\n charResolutions[i] = charResolutions[i - 1];\n if (prevCharResult === NEEDS_FALLBACK) {\n fallbackRanges[fallbackRanges.length - 1][1] = i;\n }\n } else {\n for (let j = charResolutions[i], jLen = userFonts.length; j <= jLen; j++) {\n if (j === jLen) {\n // none of the user fonts matched; needs fallback\n const range = prevCharResult === NEEDS_FALLBACK ?\n fallbackRanges[fallbackRanges.length - 1] :\n (fallbackRanges[fallbackRanges.length] = [i, i]);\n range[1] = i;\n prevCharResult = NEEDS_FALLBACK;\n } else {\n charResolutions[i] = j;\n const { src, unicodeRange } = userFonts[j];\n // filter by optional explicit unicode ranges\n if (!unicodeRange || isCodeInRanges(codePoint, unicodeRange)) {\n const fontObj = parsedFonts[src];\n // font not yet loaded, load it and resume\n if (!fontObj) {\n loadFont(src, () => {\n resolveUserFonts(i);\n });\n return;\n }\n // if the font actually contains a glyph for this char, lock it in\n if (fontObj.supportsCodePoint(codePoint)) {\n let fontIndex = fontIndices.get(fontObj);\n if (typeof fontIndex !== 'number') {\n fontIndex = fontResolutions.length;\n fontResolutions.push(fontObj);\n fontIndices.set(fontObj, fontIndex);\n }\n charResolutions[i] = fontIndex;\n prevCharResult = RESOLVED;\n break;\n }\n }\n }\n }\n }\n\n if (codePoint > 0xffff && i + 1 < iLen) {\n charResolutions[i + 1] = charResolutions[i];\n i++;\n if (prevCharResult === NEEDS_FALLBACK) {\n fallbackRanges[fallbackRanges.length - 1][1] = i;\n }\n }\n }\n resolveFallbacks();\n })();\n } else {\n fallbackRanges.push([0, text.length - 1]);\n resolveFallbacks();\n }\n\n function resolveFallbacks() {\n if (fallbackRanges.length) {\n // Combine all fallback substrings into a single string for querying\n const fallbackString = fallbackRanges.map(range => text.substring(range[0], range[1] + 1)).join('\\n');\n unicodeFontResolverClient.getFontsForString(fallbackString, {\n lang: lang || undefined,\n style,\n weight,\n dataUrl: unicodeFontsURL\n }).then(({fontUrls, chars}) => {\n // Extract results and put them back in the main array\n const fontIndexOffset = fontResolutions.length;\n let charIdx = 0;\n fallbackRanges.forEach(range => {\n for (let i = 0, endIdx = range[1] - range[0]; i <= endIdx; i++) {\n charResolutions[range[0] + i] = chars[charIdx++] + fontIndexOffset;\n }\n charIdx++; //skip segment separator\n });\n\n // Load and parse the fallback fonts - avoiding Promise here to prevent polyfills in the worker\n let loadedCount = 0;\n fontUrls.forEach((url, i) => {\n loadFont(url, fontObj => {\n fontResolutions[i + fontIndexOffset] = fontObj;\n if (++loadedCount === fontUrls.length) {\n allDone();\n }\n });\n });\n });\n } else {\n allDone();\n }\n }\n\n function allDone() {\n callback({\n chars: charResolutions,\n fonts: fontResolutions\n });\n }\n\n function isCodeInRanges(code, ranges) {\n // todo optimize search - CodePointSet from unicode-font-resolver?\n for (let k = 0; k < ranges.length; k++) {\n const [start, end = start] = ranges[k];\n if (start <= code && code <= end) {\n return true\n }\n }\n return false\n }\n }\n}\n\nconst fontResolverWorkerModule = /*#__PURE__*/defineWorkerModule({\n name: 'FontResolver',\n dependencies: [\n createFontResolver,\n workerModule,\n unicodeFontResolverClientFactory,\n ],\n init(createFontResolver, fontParser, unicodeFontResolverClientFactory) {\n return createFontResolver(fontParser, unicodeFontResolverClientFactory());\n }\n});\n\n/**\n * @typedef {number|'left'|'center'|'right'} AnchorXValue\n */\n/**\n * @typedef {number|'top'|'top-baseline'|'top-cap'|'top-ex'|'middle'|'bottom-baseline'|'bottom'} AnchorYValue\n */\n\n/**\n * @typedef {object} TypesetParams\n * @property {string} text\n * @property {UserFont|UserFont[]} [font]\n * @property {string} [lang]\n * @property {number} [sdfGlyphSize=64]\n * @property {number} [fontSize=1]\n * @property {number|'normal'|'bold'} [fontWeight='normal']\n * @property {'normal'|'italic'} [fontStyle='normal']\n * @property {number} [letterSpacing=0]\n * @property {'normal'|number} [lineHeight='normal']\n * @property {number} [maxWidth]\n * @property {'ltr'|'rtl'} [direction='ltr']\n * @property {string} [textAlign='left']\n * @property {number} [textIndent=0]\n * @property {'normal'|'nowrap'} [whiteSpace='normal']\n * @property {'normal'|'break-word'} [overflowWrap='normal']\n * @property {AnchorXValue} [anchorX=0]\n * @property {AnchorYValue} [anchorY=0]\n * @property {boolean} [metricsOnly=false]\n * @property {string} [unicodeFontsURL]\n * @property {FontResolverResult} [preResolvedFonts]\n * @property {boolean} [includeCaretPositions=false]\n * @property {number} [chunkedBoundsSize=8192]\n * @property {{[rangeStartIndex]: number}} [colorRanges]\n */\n\n/**\n * @typedef {object} TypesetResult\n * @property {Uint16Array} glyphIds id for each glyph, specific to that glyph's font\n * @property {Uint8Array} glyphFontIndices index into fontData for each glyph\n * @property {Float32Array} glyphPositions x,y of each glyph's origin in layout\n * @property {{[font]: {[glyphId]: {path: string, pathBounds: number[]}}}} glyphData data about each glyph appearing in the text\n * @property {TypesetFontData[]} fontData data about each font used in the text\n * @property {Float32Array} [caretPositions] startX,endX,bottomY caret positions for each char\n * @property {Uint8Array} [glyphColors] color for each glyph, if color ranges supplied\n * chunkedBounds, //total rects per (n=chunkedBoundsSize) consecutive glyphs\n * fontSize, //calculated em height\n * topBaseline: anchorYOffset + lines[0].baseline, //y coordinate of the top line's baseline\n * blockBounds: [ //bounds for the whole block of text, including vertical padding for lineHeight\n * anchorXOffset,\n * anchorYOffset - totalHeight,\n * anchorXOffset + maxLineWidth,\n * anchorYOffset\n * ],\n * visibleBounds, //total bounds of visible text paths, may be larger or smaller than blockBounds\n * timings\n */\n\n/**\n * @typedef {object} TypesetFontData\n * @property src\n * @property unitsPerEm\n * @property ascender\n * @property descender\n * @property lineHeight\n * @property capHeight\n * @property xHeight\n */\n\n/**\n * @typedef {function} TypesetterTypesetFunction - compute fonts and layout for some text.\n * @param {TypesetParams} params\n * @param {(TypesetResult) => void} callback - function called when typesetting is complete.\n * If the params included `preResolvedFonts`, this will be called synchronously.\n */\n\n/**\n * @typedef {function} TypesetterMeasureFunction - compute width/height for some text.\n * @param {TypesetParams} params\n * @param {(width:number, height:number) => void} callback - function called when measurement is complete.\n * If the params included `preResolvedFonts`, this will be called synchronously.\n */\n\n\n/**\n * Factory function that creates a self-contained environment for processing text typesetting requests.\n *\n * It is important that this function has no closure dependencies, so that it can be easily injected\n * into the source for a Worker without requiring a build step or complex dependency loading. All its\n * dependencies must be passed in at initialization.\n *\n * @param {FontResolver} resolveFonts - function to resolve a string to parsed fonts\n * @param {object} bidi - the bidi.js implementation object\n * @return {{typeset: TypesetterTypesetFunction, measure: TypesetterMeasureFunction}}\n */\nfunction createTypesetter(resolveFonts, bidi) {\n const INF = Infinity;\n\n // Set of Unicode Default_Ignorable_Code_Point characters, these will not produce visible glyphs\n // eslint-disable-next-line no-misleading-character-class\n const DEFAULT_IGNORABLE_CHARS = /[\\u00AD\\u034F\\u061C\\u115F-\\u1160\\u17B4-\\u17B5\\u180B-\\u180E\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u206F\\u3164\\uFE00-\\uFE0F\\uFEFF\\uFFA0\\uFFF0-\\uFFF8]/;\n\n // This regex (instead of /\\s/) allows us to select all whitespace EXCEPT for non-breaking white spaces\n const lineBreakingWhiteSpace = `[^\\\\S\\\\u00A0]`;\n\n // Incomplete set of characters that allow line breaking after them\n // In the future we may consider a full Unicode line breaking algorithm impl: https://www.unicode.org/reports/tr14\n const BREAK_AFTER_CHARS = new RegExp(`${lineBreakingWhiteSpace}|[\\\\-\\\\u007C\\\\u00AD\\\\u2010\\\\u2012-\\\\u2014\\\\u2027\\\\u2056\\\\u2E17\\\\u2E40]`);\n\n /**\n * Load and parse all the necessary fonts to render a given string of text, then group\n * them into consecutive runs of characters sharing a font.\n */\n function calculateFontRuns({text, lang, fonts, style, weight, preResolvedFonts, unicodeFontsURL}, onDone) {\n const onResolved = ({chars, fonts: parsedFonts}) => {\n let curRun, prevVal;\n const runs = [];\n for (let i = 0; i < chars.length; i++) {\n if (chars[i] !== prevVal) {\n prevVal = chars[i];\n runs.push(curRun = { start: i, end: i, fontObj: parsedFonts[chars[i]]});\n } else {\n curRun.end = i;\n }\n }\n onDone(runs);\n };\n if (preResolvedFonts) {\n onResolved(preResolvedFonts);\n } else {\n resolveFonts(\n text,\n onResolved,\n { lang, fonts, style, weight, unicodeFontsURL }\n );\n }\n }\n\n /**\n * Main entry point.\n * Process a text string with given font and formatting parameters, and return all info\n * necessary to render all its glyphs.\n * @type TypesetterTypesetFunction\n */\n function typeset(\n {\n text='',\n font,\n lang,\n sdfGlyphSize=64,\n fontSize=400,\n fontWeight=1,\n fontStyle='normal',\n letterSpacing=0,\n lineHeight='normal',\n maxWidth=INF,\n direction,\n textAlign='left',\n textIndent=0,\n whiteSpace='normal',\n overflowWrap='normal',\n anchorX = 0,\n anchorY = 0,\n metricsOnly=false,\n unicodeFontsURL,\n preResolvedFonts=null,\n includeCaretPositions=false,\n chunkedBoundsSize=8192,\n colorRanges=null\n },\n callback\n ) {\n const mainStart = now();\n const timings = {fontLoad: 0, typesetting: 0};\n\n // Ensure newlines are normalized\n if (text.indexOf('\\r') > -1) {\n console.info('Typesetter: got text with \\\\r chars; normalizing to \\\\n');\n text = text.replace(/\\r\\n/g, '\\n').replace(/\\r/g, '\\n');\n }\n\n // Ensure we've got numbers not strings\n fontSize = +fontSize;\n letterSpacing = +letterSpacing;\n maxWidth = +maxWidth;\n lineHeight = lineHeight || 'normal';\n textIndent = +textIndent;\n\n calculateFontRuns({\n text,\n lang,\n style: fontStyle,\n weight: fontWeight,\n fonts: typeof font === 'string' ? [{src: font}] : font,\n unicodeFontsURL,\n preResolvedFonts\n }, runs => {\n timings.fontLoad = now() - mainStart;\n const hasMaxWidth = isFinite(maxWidth);\n let glyphIds = null;\n let glyphFontIndices = null;\n let glyphPositions = null;\n let glyphData = null;\n let glyphColors = null;\n let caretPositions = null;\n let visibleBounds = null;\n let chunkedBounds = null;\n let maxLineWidth = 0;\n let renderableGlyphCount = 0;\n let canWrap = whiteSpace !== 'nowrap';\n const metricsByFont = new Map(); // fontObj -> metrics\n const typesetStart = now();\n\n // Distribute glyphs into lines based on wrapping\n let lineXOffset = textIndent;\n let prevRunEndX = 0;\n let currentLine = new TextLine();\n const lines = [currentLine];\n runs.forEach(run => {\n const { fontObj } = run;\n const { ascender, descender, unitsPerEm, lineGap, capHeight, xHeight } = fontObj;\n\n // Calculate metrics for each font used\n let fontData = metricsByFont.get(fontObj);\n if (!fontData) {\n // Find conversion between native font units and fontSize units\n const fontSizeMult = fontSize / unitsPerEm;\n\n // Determine appropriate value for 'normal' line height based on the font's actual metrics\n // This does not guarantee individual glyphs won't exceed the line height, e.g. Roboto; should we use yMin/Max instead?\n const calcLineHeight = lineHeight === 'normal' ?\n (ascender - descender + lineGap) * fontSizeMult : lineHeight * fontSize;\n\n // Determine line height and leading adjustments\n const halfLeading = (calcLineHeight - (ascender - descender) * fontSizeMult) / 2;\n const caretHeight = Math.min(calcLineHeight, (ascender - descender) * fontSizeMult);\n const caretTop = (ascender + descender) / 2 * fontSizeMult + caretHeight / 2;\n fontData = {\n index: metricsByFont.size,\n src: fontObj.src,\n fontObj,\n fontSizeMult,\n unitsPerEm,\n ascender: ascender * fontSizeMult,\n descender: descender * fontSizeMult,\n capHeight: capHeight * fontSizeMult,\n xHeight: xHeight * fontSizeMult,\n lineHeight: calcLineHeight,\n baseline: -halfLeading - ascender * fontSizeMult, // baseline offset from top of line height\n // cap: -halfLeading - capHeight * fontSizeMult, // cap from top of line height\n // ex: -halfLeading - xHeight * fontSizeMult, // ex from top of line height\n caretTop,\n caretBottom: caretTop - caretHeight\n };\n metricsByFont.set(fontObj, fontData);\n }\n const { fontSizeMult } = fontData;\n\n const runText = text.slice(run.start, run.end + 1);\n let prevGlyphX, prevGlyphObj;\n fontObj.forEachGlyph(runText, fontSize, letterSpacing, (glyphObj, glyphX, glyphY, charIndex) => {\n glyphX += prevRunEndX;\n charIndex += run.start;\n prevGlyphX = glyphX;\n prevGlyphObj = glyphObj;\n const char = text.charAt(charIndex);\n const glyphWidth = glyphObj.advanceWidth * fontSizeMult;\n const curLineCount = currentLine.count;\n let nextLine;\n\n // Calc isWhitespace and isEmpty once per glyphObj\n if (!('isEmpty' in glyphObj)) {\n glyphObj.isWhitespace = !!char && new RegExp(lineBreakingWhiteSpace).test(char);\n glyphObj.canBreakAfter = !!char && BREAK_AFTER_CHARS.test(char);\n glyphObj.isEmpty = glyphObj.xMin === glyphObj.xMax || glyphObj.yMin === glyphObj.yMax || DEFAULT_IGNORABLE_CHARS.test(char);\n }\n if (!glyphObj.isWhitespace && !glyphObj.isEmpty) {\n renderableGlyphCount++;\n }\n\n // If a non-whitespace character overflows the max width, we need to soft-wrap\n if (canWrap && hasMaxWidth && !glyphObj.isWhitespace && glyphX + glyphWidth + lineXOffset > maxWidth && curLineCount) {\n // If it's the first char after a whitespace, start a new line\n if (currentLine.glyphAt(curLineCount - 1).glyphObj.canBreakAfter) {\n nextLine = new TextLine();\n lineXOffset = -glyphX;\n } else {\n // Back up looking for a whitespace character to wrap at\n for (let i = curLineCount; i--;) {\n // If we got the start of the line there's no soft break point; make hard break if overflowWrap='break-word'\n if (i === 0 && overflowWrap === 'break-word') {\n nextLine = new TextLine();\n lineXOffset = -glyphX;\n break\n }\n // Found a soft break point; move all chars since it to a new line\n else if (currentLine.glyphAt(i).glyphObj.canBreakAfter) {\n nextLine = currentLine.splitAt(i + 1);\n const adjustX = nextLine.glyphAt(0).x;\n lineXOffset -= adjustX;\n for (let j = nextLine.count; j--;) {\n nextLine.glyphAt(j).x -= adjustX;\n }\n break\n }\n }\n }\n if (nextLine) {\n currentLine.isSoftWrapped = true;\n currentLine = nextLine;\n lines.push(currentLine);\n maxLineWidth = maxWidth; //after soft wrapping use maxWidth as calculated width\n }\n }\n\n let fly = currentLine.glyphAt(currentLine.count);\n fly.glyphObj = glyphObj;\n fly.x = glyphX + lineXOffset;\n fly.y = glyphY;\n fly.width = glyphWidth;\n fly.charIndex = charIndex;\n fly.fontData = fontData;\n\n // Handle hard line breaks\n if (char === '\\n') {\n currentLine = new TextLine();\n lines.push(currentLine);\n lineXOffset = -(glyphX + glyphWidth + (letterSpacing * fontSize)) + textIndent;\n }\n });\n // At the end of a run we must capture the x position as the starting point for the next run\n prevRunEndX = prevGlyphX + prevGlyphObj.advanceWidth * fontSizeMult + letterSpacing * fontSize;\n });\n\n // Calculate width/height/baseline of each line (excluding trailing whitespace) and maximum block width\n let totalHeight = 0;\n lines.forEach(line => {\n let isTrailingWhitespace = true;\n for (let i = line.count; i--;) {\n const glyphInfo = line.glyphAt(i);\n // omit trailing whitespace from width calculation\n if (isTrailingWhitespace && !glyphInfo.glyphObj.isWhitespace) {\n line.width = glyphInfo.x + glyphInfo.width;\n if (line.width > maxLineWidth) {\n maxLineWidth = line.width;\n }\n isTrailingWhitespace = false;\n }\n // use the tallest line height, lowest baseline, and highest cap/ex\n let {lineHeight, capHeight, xHeight, baseline} = glyphInfo.fontData;\n if (lineHeight > line.lineHeight) line.lineHeight = lineHeight;\n const baselineDiff = baseline - line.baseline;\n if (baselineDiff < 0) { //shift all metrics down\n line.baseline += baselineDiff;\n line.cap += baselineDiff;\n line.ex += baselineDiff;\n }\n // compare cap/ex based on new lowest baseline\n line.cap = Math.max(line.cap, line.baseline + capHeight);\n line.ex = Math.max(line.ex, line.baseline + xHeight);\n }\n line.baseline -= totalHeight;\n line.cap -= totalHeight;\n line.ex -= totalHeight;\n totalHeight += line.lineHeight;\n });\n\n // Find overall position adjustments for anchoring\n let anchorXOffset = 0;\n let anchorYOffset = 0;\n if (anchorX) {\n if (typeof anchorX === 'number') {\n anchorXOffset = -anchorX;\n }\n else if (typeof anchorX === 'string') {\n anchorXOffset = -maxLineWidth * (\n anchorX === 'left' ? 0 :\n anchorX === 'center' ? 0.5 :\n anchorX === 'right' ? 1 :\n parsePercent(anchorX)\n );\n }\n }\n if (anchorY) {\n if (typeof anchorY === 'number') {\n anchorYOffset = -anchorY;\n }\n else if (typeof anchorY === 'string') {\n anchorYOffset = anchorY === 'top' ? 0 :\n anchorY === 'top-baseline' ? -lines[0].baseline :\n anchorY === 'top-cap' ? -lines[0].cap :\n anchorY === 'top-ex' ? -lines[0].ex :\n anchorY === 'middle' ? totalHeight / 2 :\n anchorY === 'bottom' ? totalHeight :\n anchorY === 'bottom-baseline' ? -lines[lines.length - 1].baseline :\n parsePercent(anchorY) * totalHeight;\n }\n }\n\n if (!metricsOnly) {\n // Resolve bidi levels\n const bidiLevelsResult = bidi.getEmbeddingLevels(text, direction);\n\n // Process each line, applying alignment offsets, adding each glyph to the atlas, and\n // collecting all renderable glyphs into a single collection.\n glyphIds = new Uint16Array(renderableGlyphCount);\n glyphFontIndices = new Uint8Array(renderableGlyphCount);\n glyphPositions = new Float32Array(renderableGlyphCount * 2);\n glyphData = {};\n visibleBounds = [INF, INF, -INF, -INF];\n chunkedBounds = [];\n if (includeCaretPositions) {\n caretPositions = new Float32Array(text.length * 4);\n }\n if (colorRanges) {\n glyphColors = new Uint8Array(renderableGlyphCount * 3);\n }\n let renderableGlyphIndex = 0;\n let prevCharIndex = -1;\n let colorCharIndex = -1;\n let chunk;\n let currentColor;\n lines.forEach((line, lineIndex) => {\n let {count:lineGlyphCount, width:lineWidth} = line;\n\n // Ignore empty lines\n if (lineGlyphCount > 0) {\n // Count trailing whitespaces, we want to ignore these for certain things\n let trailingWhitespaceCount = 0;\n for (let i = lineGlyphCount; i-- && line.glyphAt(i).glyphObj.isWhitespace;) {\n trailingWhitespaceCount++;\n }\n\n // Apply horizontal alignment adjustments\n let lineXOffset = 0;\n let justifyAdjust = 0;\n if (textAlign === 'center') {\n lineXOffset = (maxLineWidth - lineWidth) / 2;\n } else if (textAlign === 'right') {\n lineXOffset = maxLineWidth - lineWidth;\n } else if (textAlign === 'justify' && line.isSoftWrapped) {\n // count non-trailing whitespace characters, and we'll adjust the offsets per character in the next loop\n let whitespaceCount = 0;\n for (let i = lineGlyphCount - trailingWhitespaceCount; i--;) {\n if (line.glyphAt(i).glyphObj.isWhitespace) {\n whitespaceCount++;\n }\n }\n justifyAdjust = (maxLineWidth - lineWidth) / whitespaceCount;\n }\n if (justifyAdjust || lineXOffset) {\n let justifyOffset = 0;\n for (let i = 0; i < lineGlyphCount; i++) {\n let glyphInfo = line.glyphAt(i);\n const glyphObj = glyphInfo.glyphObj;\n glyphInfo.x += lineXOffset + justifyOffset;\n // Expand non-trailing whitespaces for justify alignment\n if (justifyAdjust !== 0 && glyphObj.isWhitespace && i < lineGlyphCount - trailingWhitespaceCount) {\n justifyOffset += justifyAdjust;\n glyphInfo.width += justifyAdjust;\n }\n }\n }\n\n // Perform bidi range flipping\n const flips = bidi.getReorderSegments(\n text, bidiLevelsResult, line.glyphAt(0).charIndex, line.glyphAt(line.count - 1).charIndex\n );\n for (let fi = 0; fi < flips.length; fi++) {\n const [start, end] = flips[fi];\n // Map start/end string indices to indices in the line\n let left = Infinity, right = -Infinity;\n for (let i = 0; i < lineGlyphCount; i++) {\n if (line.glyphAt(i).charIndex >= start) { // gte to handle removed characters\n let startInLine = i, endInLine = i;\n for (; endInLine < lineGlyphCount; endInLine++) {\n let info = line.glyphAt(endInLine);\n if (info.charIndex > end) {\n break\n }\n if (endInLine < lineGlyphCount - trailingWhitespaceCount) { //don't include trailing ws in flip width\n left = Math.min(left, info.x);\n right = Math.max(right, info.x + info.width);\n }\n }\n for (let j = startInLine; j < endInLine; j++) {\n const glyphInfo = line.glyphAt(j);\n glyphInfo.x = right - (glyphInfo.x + glyphInfo.width - left);\n }\n break\n }\n }\n }\n\n // Assemble final data arrays\n let glyphObj;\n const setGlyphObj = g => glyphObj = g;\n for (let i = 0; i < lineGlyphCount; i++) {\n const glyphInfo = line.glyphAt(i);\n glyphObj = glyphInfo.glyphObj;\n const glyphId = glyphObj.index;\n\n // Replace mirrored characters in rtl\n const rtl = bidiLevelsResult.levels[glyphInfo.charIndex] & 1; //odd level means rtl\n if (rtl) {\n const mirrored = bidi.getMirroredCharacter(text[glyphInfo.charIndex]);\n if (mirrored) {\n glyphInfo.fontData.fontObj.forEachGlyph(mirrored, 0, 0, setGlyphObj);\n }\n }\n\n // Add caret positions\n if (includeCaretPositions) {\n const {charIndex, fontData} = glyphInfo;\n const caretLeft = glyphInfo.x + anchorXOffset;\n const caretRight = glyphInfo.x + glyphInfo.width + anchorXOffset;\n caretPositions[charIndex * 4] = rtl ? caretRight : caretLeft; //start edge x\n caretPositions[charIndex * 4 + 1] = rtl ? caretLeft : caretRight; //end edge x\n caretPositions[charIndex * 4 + 2] = line.baseline + fontData.caretBottom + anchorYOffset; //common bottom y\n caretPositions[charIndex * 4 + 3] = line.baseline + fontData.caretTop + anchorYOffset; //common top y\n\n // If we skipped any chars from the previous glyph (due to ligature subs), fill in caret\n // positions for those missing char indices; currently this uses a best-guess by dividing\n // the ligature's width evenly. In the future we may try to use the font's LigatureCaretList\n // table to get better interior caret positions.\n const ligCount = charIndex - prevCharIndex;\n if (ligCount > 1) {\n fillLigatureCaretPositions(caretPositions, prevCharIndex, ligCount);\n }\n prevCharIndex = charIndex;\n }\n\n // Track current color range\n if (colorRanges) {\n const {charIndex} = glyphInfo;\n while(charIndex > colorCharIndex) {\n colorCharIndex++;\n if (colorRanges.hasOwnProperty(colorCharIndex)) {\n currentColor = colorRanges[colorCharIndex];\n }\n }\n }\n\n // Get atlas data for renderable glyphs\n if (!glyphObj.isWhitespace && !glyphObj.isEmpty) {\n const idx = renderableGlyphIndex++;\n const {fontSizeMult, src: fontSrc, index: fontIndex} = glyphInfo.fontData;\n\n // Add this glyph's path data\n const fontGlyphData = glyphData[fontSrc] || (glyphData[fontSrc] = {});\n if (!fontGlyphData[glyphId]) {\n fontGlyphData[glyphId] = {\n path: glyphObj.path,\n pathBounds: [glyphObj.xMin, glyphObj.yMin, glyphObj.xMax, glyphObj.yMax]\n };\n }\n\n // Determine final glyph position and add to glyphPositions array\n const glyphX = glyphInfo.x + anchorXOffset;\n const glyphY = glyphInfo.y + line.baseline + anchorYOffset;\n glyphPositions[idx * 2] = glyphX;\n glyphPositions[idx * 2 + 1] = glyphY;\n\n // Track total visible bounds\n const visX0 = glyphX + glyphObj.xMin * fontSizeMult;\n const visY0 = glyphY + glyphObj.yMin * fontSizeMult;\n const visX1 = glyphX + glyphObj.xMax * fontSizeMult;\n const visY1 = glyphY + glyphObj.yMax * fontSizeMult;\n if (visX0 < visibleBounds[0]) visibleBounds[0] = visX0;\n if (visY0 < visibleBounds[1]) visibleBounds[1] = visY0;\n if (visX1 > visibleBounds[2]) visibleBounds[2] = visX1;\n if (visY1 > visibleBounds[3]) visibleBounds[3] = visY1;\n\n // Track bounding rects for each chunk of N glyphs\n if (idx % chunkedBoundsSize === 0) {\n chunk = {start: idx, end: idx, rect: [INF, INF, -INF, -INF]};\n chunkedBounds.push(chunk);\n }\n chunk.end++;\n const chunkRect = chunk.rect;\n if (visX0 < chunkRect[0]) chunkRect[0] = visX0;\n if (visY0 < chunkRect[1]) chunkRect[1] = visY0;\n if (visX1 > chunkRect[2]) chunkRect[2] = visX1;\n if (visY1 > chunkRect[3]) chunkRect[3] = visY1;\n\n // Add to glyph ids and font indices arrays\n glyphIds[idx] = glyphId;\n glyphFontIndices[idx] = fontIndex;\n\n // Add colors\n if (colorRanges) {\n const start = idx * 3;\n glyphColors[start] = currentColor >> 16 & 255;\n glyphColors[start + 1] = currentColor >> 8 & 255;\n glyphColors[start + 2] = currentColor & 255;\n }\n }\n }\n }\n });\n\n // Fill in remaining caret positions in case the final character was a ligature\n if (caretPositions) {\n const ligCount = text.length - prevCharIndex;\n if (ligCount > 1) {\n fillLigatureCaretPositions(caretPositions, prevCharIndex, ligCount);\n }\n }\n }\n\n // Assemble final data about each font used\n const fontData = [];\n metricsByFont.forEach(({index, src, unitsPerEm, ascender, descender, lineHeight, capHeight, xHeight}) => {\n fontData[index] = {src, unitsPerEm, ascender, descender, lineHeight, capHeight, xHeight};\n });\n\n // Timing stats\n timings.typesetting = now() - typesetStart;\n\n callback({\n glyphIds, //id for each glyph, specific to that glyph's font\n glyphFontIndices, //index into fontData for each glyph\n glyphPositions, //x,y of each glyph's origin in layout\n glyphData, //dict holding data about each glyph appearing in the text\n fontData, //data about each font used in the text\n caretPositions, //startX,endX,bottomY caret positions for each char\n // caretHeight, //height of cursor from bottom to top - todo per glyph?\n glyphColors, //color for each glyph, if color ranges supplied\n chunkedBounds, //total rects per (n=chunkedBoundsSize) consecutive glyphs\n fontSize, //calculated em height\n topBaseline: anchorYOffset + lines[0].baseline, //y coordinate of the top line's baseline\n blockBounds: [ //bounds for the whole block of text, including vertical padding for lineHeight\n anchorXOffset,\n anchorYOffset - totalHeight,\n anchorXOffset + maxLineWidth,\n anchorYOffset\n ],\n visibleBounds, //total bounds of visible text paths, may be larger or smaller than blockBounds\n timings\n });\n });\n }\n\n\n /**\n * For a given text string and font parameters, determine the resulting block dimensions\n * after wrapping for the given maxWidth.\n * @param args\n * @param callback\n */\n function measure(args, callback) {\n typeset({...args, metricsOnly: true}, (result) => {\n const [x0, y0, x1, y1] = result.blockBounds;\n callback({\n width: x1 - x0,\n height: y1 - y0\n });\n });\n }\n\n function parsePercent(str) {\n let match = str.match(/^([\\d.]+)%$/);\n let pct = match ? parseFloat(match[1]) : NaN;\n return isNaN(pct) ? 0 : pct / 100\n }\n\n function fillLigatureCaretPositions(caretPositions, ligStartIndex, ligCount) {\n const ligStartX = caretPositions[ligStartIndex * 4];\n const ligEndX = caretPositions[ligStartIndex * 4 + 1];\n const ligBottom = caretPositions[ligStartIndex * 4 + 2];\n const ligTop = caretPositions[ligStartIndex * 4 + 3];\n const guessedAdvanceX = (ligEndX - ligStartX) / ligCount;\n for (let i = 0; i < ligCount; i++) {\n const startIndex = (ligStartIndex + i) * 4;\n caretPositions[startIndex] = ligStartX + guessedAdvanceX * i;\n caretPositions[startIndex + 1] = ligStartX + guessedAdvanceX * (i + 1);\n caretPositions[startIndex + 2] = ligBottom;\n caretPositions[startIndex + 3] = ligTop;\n }\n }\n\n function now() {\n return (self.performance || Date).now()\n }\n\n // Array-backed structure for a single line's glyphs data\n function TextLine() {\n this.data = [];\n }\n const textLineProps = ['glyphObj', 'x', 'y', 'width', 'charIndex', 'fontData'];\n TextLine.prototype = {\n width: 0,\n lineHeight: 0,\n baseline: 0,\n cap: 0,\n ex: 0,\n isSoftWrapped: false,\n get count() {\n return Math.ceil(this.data.length / textLineProps.length)\n },\n glyphAt(i) {\n let fly = TextLine.flyweight;\n fly.data = this.data;\n fly.index = i;\n return fly\n },\n splitAt(i) {\n let newLine = new TextLine();\n newLine.data = this.data.splice(i * textLineProps.length);\n return newLine\n }\n };\n TextLine.flyweight = textLineProps.reduce((obj, prop, i, all) => {\n Object.defineProperty(obj, prop, {\n get() {\n return this.data[this.index * textLineProps.length + i]\n },\n set(val) {\n this.data[this.index * textLineProps.length + i] = val;\n }\n });\n return obj\n }, {data: null, index: 0});\n\n\n return {\n typeset,\n measure,\n }\n}\n\nconst now = () => (self.performance || Date).now();\n\nconst mainThreadGenerator = /*#__PURE__*/ createSDFGenerator();\n\nlet warned;\n\n/**\n * Generate an SDF texture image for a single glyph path, placing the result into a webgl canvas at a\n * given location and channel. Utilizes the webgl-sdf-generator external package for GPU-accelerated SDF\n * generation when supported.\n */\nfunction generateSDF(width, height, path, viewBox, distance, exponent, canvas, x, y, channel, useWebGL = true) {\n // Allow opt-out\n if (!useWebGL) {\n return generateSDF_JS_Worker(width, height, path, viewBox, distance, exponent, canvas, x, y, channel)\n }\n\n // Attempt GPU-accelerated generation first\n return generateSDF_GL(width, height, path, viewBox, distance, exponent, canvas, x, y, channel).then(\n null,\n err => {\n // WebGL failed either due to a hard error or unexpected results; fall back to JS in workers\n if (!warned) {\n console.warn(`WebGL SDF generation failed, falling back to JS`, err);\n warned = true;\n }\n return generateSDF_JS_Worker(width, height, path, viewBox, distance, exponent, canvas, x, y, channel)\n }\n )\n}\n\nconst queue = [];\nconst chunkTimeBudget = 5; // ms\nlet timer = 0;\n\nfunction nextChunk() {\n const start = now();\n while (queue.length && now() - start < chunkTimeBudget) {\n queue.shift()();\n }\n timer = queue.length ? setTimeout(nextChunk, 0) : 0;\n}\n\n/**\n * WebGL-based implementation executed on the main thread. Requests are executed in time-bounded\n * macrotask chunks to allow render frames to execute in between.\n */\nconst generateSDF_GL = (...args) => {\n return new Promise((resolve, reject) => {\n queue.push(() => {\n const start = now();\n try {\n mainThreadGenerator.webgl.generateIntoCanvas(...args);\n resolve({ timing: now() - start });\n } catch (err) {\n reject(err);\n }\n });\n if (!timer) {\n timer = setTimeout(nextChunk, 0);\n }\n })\n};\n\nconst threadCount = 4; // how many workers to spawn\nconst idleTimeout = 2000; // workers will be terminated after being idle this many milliseconds\nconst threads = {};\nlet callNum = 0;\n\n/**\n * Fallback JS-based implementation, fanned out to a number of worker threads for parallelism\n */\nfunction generateSDF_JS_Worker(width, height, path, viewBox, distance, exponent, canvas, x, y, channel) {\n const workerId = 'TroikaTextSDFGenerator_JS_' + ((callNum++) % threadCount);\n let thread = threads[workerId];\n if (!thread) {\n thread = threads[workerId] = {\n workerModule: defineWorkerModule({\n name: workerId,\n workerId,\n dependencies: [\n createSDFGenerator,\n now\n ],\n init(_createSDFGenerator, now) {\n const generate = _createSDFGenerator().javascript.generate;\n return function (...args) {\n const start = now();\n const textureData = generate(...args);\n return {\n textureData,\n timing: now() - start\n }\n }\n },\n getTransferables(result) {\n return [result.textureData.buffer]\n }\n }),\n requests: 0,\n idleTimer: null\n };\n }\n\n thread.requests++;\n clearTimeout(thread.idleTimer);\n return thread.workerModule(width, height, path, viewBox, distance, exponent)\n .then(({ textureData, timing }) => {\n // copy result data into the canvas\n const start = now();\n // expand single-channel data into rgba\n const imageData = new Uint8Array(textureData.length * 4);\n for (let i = 0; i < textureData.length; i++) {\n imageData[i * 4 + channel] = textureData[i];\n }\n mainThreadGenerator.webglUtils.renderImageData(canvas, imageData, x, y, width, height, 1 << (3 - channel));\n timing += now() - start;\n\n // clean up workers after a while\n if (--thread.requests === 0) {\n thread.idleTimer = setTimeout(() => { terminateWorker(workerId); }, idleTimeout);\n }\n return { timing }\n })\n}\n\nfunction warmUpSDFCanvas(canvas) {\n if (!canvas._warm) {\n mainThreadGenerator.webgl.isSupported(canvas);\n canvas._warm = true;\n }\n}\n\nconst resizeWebGLCanvasWithoutClearing = mainThreadGenerator.webglUtils.resizeWebGLCanvasWithoutClearing;\n\nconst CONFIG = {\n defaultFontURL: null,\n unicodeFontsURL: null,\n sdfGlyphSize: 64,\n sdfMargin: 1 / 16,\n sdfExponent: 9,\n textureWidth: 2048,\n useWorker: true,\n};\nconst tempColor = /*#__PURE__*/new Color();\nlet hasRequested = false;\n\nfunction now$1() {\n return (self.performance || Date).now()\n}\n\n/**\n * Customizes the text builder configuration. This must be called prior to the first font processing\n * request, and applies to all fonts.\n *\n * @param {String} config.defaultFontURL - The URL of the default font to use for text processing\n * requests, in case none is specified or the specifiede font fails to load or parse.\n * Defaults to \"Roboto Regular\" from Google Fonts.\n * @param {String} config.unicodeFontsURL - A custom location for the fallback unicode-font-resolver\n * data and font files, if you don't want to use the default CDN. See\n * https://github.com/lojjic/unicode-font-resolver for details. It can also be\n * configured per text instance, but this lets you do it once globally.\n * @param {Number} config.sdfGlyphSize - The default size of each glyph's SDF (signed distance field)\n * texture used for rendering. Must be a power-of-two number, and applies to all fonts,\n * but note that this can also be overridden per call to `getTextRenderInfo()`.\n * Larger sizes can improve the quality of glyph rendering by increasing the sharpness\n * of corners and preventing loss of very thin lines, at the expense of memory. Defaults\n * to 64 which is generally a good balance of size and quality.\n * @param {Number} config.sdfExponent - The exponent used when encoding the SDF values. A higher exponent\n * shifts the encoded 8-bit values to achieve higher precision/accuracy at texels nearer\n * the glyph's path, with lower precision further away. Defaults to 9.\n * @param {Number} config.sdfMargin - How much space to reserve in the SDF as margin outside the glyph's\n * path, as a percentage of the SDF width. A larger margin increases the quality of\n * extruded glyph outlines, but decreases the precision available for the glyph itself.\n * Defaults to 1/16th of the glyph size.\n * @param {Number} config.textureWidth - The width of the SDF texture; must be a power of 2. Defaults to\n * 2048 which is a safe maximum texture dimension according to the stats at\n * https://webglstats.com/webgl/parameter/MAX_TEXTURE_SIZE and should allow for a\n * reasonably large number of glyphs (default glyph size of 64^2 and safe texture size of\n * 2048^2, times 4 channels, allows for 4096 glyphs.) This can be increased if you need to\n * increase the glyph size and/or have an extraordinary number of glyphs.\n * @param {Boolean} config.useWorker - Whether to run typesetting in a web worker. Defaults to true.\n */\nfunction configureTextBuilder(config) {\n if (hasRequested) {\n console.warn('configureTextBuilder called after first font request; will be ignored.');\n } else {\n assign(CONFIG, config);\n }\n}\n\n/**\n * Repository for all font SDF atlas textures and their glyph mappings. There is a separate atlas for\n * each sdfGlyphSize. Each atlas has a single Texture that holds all glyphs for all fonts.\n *\n * {\n * [sdfGlyphSize]: {\n * glyphCount: number,\n * sdfGlyphSize: number,\n * sdfTexture: Texture,\n * sdfCanvas: HTMLCanvasElement,\n * contextLost: boolean,\n * glyphsByFont: Map<fontURL, Map<glyphID, {path, atlasIndex, sdfViewBox}>>\n * }\n * }\n */\nconst atlases = Object.create(null);\n\n/**\n * @typedef {object} TroikaTextRenderInfo - Format of the result from `getTextRenderInfo`.\n * @property {TypesetParams} parameters - The normalized input arguments to the render call.\n * @property {Texture} sdfTexture - The SDF atlas texture.\n * @property {number} sdfGlyphSize - The size of each glyph's SDF; see `configureTextBuilder`.\n * @property {number} sdfExponent - The exponent used in encoding the SDF's values; see `configureTextBuilder`.\n * @property {Float32Array} glyphBounds - List of [minX, minY, maxX, maxY] quad bounds for each glyph.\n * @property {Float32Array} glyphAtlasIndices - List holding each glyph's index in the SDF atlas.\n * @property {Uint8Array} [glyphColors] - List holding each glyph's [r, g, b] color, if `colorRanges` was supplied.\n * @property {Float32Array} [caretPositions] - A list of caret positions for all characters in the string; each is\n * four elements: the starting X, the ending X, the bottom Y, and the top Y for the caret.\n * @property {number} [caretHeight] - An appropriate height for all selection carets.\n * @property {number} ascender - The font's ascender metric.\n * @property {number} descender - The font's descender metric.\n * @property {number} capHeight - The font's cap height metric, based on the height of Latin capital letters.\n * @property {number} xHeight - The font's x height metric, based on the height of Latin lowercase letters.\n * @property {number} lineHeight - The final computed lineHeight measurement.\n * @property {number} topBaseline - The y position of the top line's baseline.\n * @property {Array<number>} blockBounds - The total [minX, minY, maxX, maxY] rect of the whole text block;\n * this can include extra vertical space beyond the visible glyphs due to lineHeight, and is\n * equivalent to the dimensions of a block-level text element in CSS.\n * @property {Array<number>} visibleBounds - The total [minX, minY, maxX, maxY] rect of the whole text block;\n * unlike `blockBounds` this is tightly wrapped to the visible glyph paths.\n * @property {Array<object>} chunkedBounds - List of bounding rects for each consecutive set of N glyphs,\n * in the format `{start:N, end:N, rect:[minX, minY, maxX, maxY]}`.\n * @property {object} timings - Timing info for various parts of the rendering logic including SDF\n * generation, typesetting, etc.\n * @frozen\n */\n\n/**\n * @callback getTextRenderInfo~callback\n * @param {TroikaTextRenderInfo} textRenderInfo\n */\n\n/**\n * Main entry point for requesting the data needed to render a text string with given font parameters.\n * This is an asynchronous call, performing most of the logic in a web worker thread.\n * @param {TypesetParams} args\n * @param {getTextRenderInfo~callback} callback\n */\nfunction getTextRenderInfo(args, callback) {\n hasRequested = true;\n args = assign({}, args);\n const totalStart = now$1();\n\n // Convert relative URL to absolute so it can be resolved in the worker, and add fallbacks.\n // In the future we'll allow args.font to be a list with unicode ranges too.\n const { defaultFontURL } = CONFIG;\n const fonts = [];\n if (defaultFontURL) {\n fonts.push({label: 'default', src: toAbsoluteURL(defaultFontURL)});\n }\n if (args.font) {\n fonts.push({label: 'user', src: toAbsoluteURL(args.font)});\n }\n args.font = fonts;\n\n // Normalize text to a string\n args.text = '' + args.text;\n\n args.sdfGlyphSize = args.sdfGlyphSize || CONFIG.sdfGlyphSize;\n args.unicodeFontsURL = args.unicodeFontsURL || CONFIG.unicodeFontsURL;\n\n // Normalize colors\n if (args.colorRanges != null) {\n let colors = {};\n for (let key in args.colorRanges) {\n if (args.colorRanges.hasOwnProperty(key)) {\n let val = args.colorRanges[key];\n if (typeof val !== 'number') {\n val = tempColor.set(val).getHex();\n }\n colors[key] = val;\n }\n }\n args.colorRanges = colors;\n }\n\n Object.freeze(args);\n\n // Init the atlas if needed\n const {textureWidth, sdfExponent} = CONFIG;\n const {sdfGlyphSize} = args;\n const glyphsPerRow = (textureWidth / sdfGlyphSize * 4);\n let atlas = atlases[sdfGlyphSize];\n if (!atlas) {\n const canvas = document.createElement('canvas');\n canvas.width = textureWidth;\n canvas.height = sdfGlyphSize * 256 / glyphsPerRow; // start tall enough to fit 256 glyphs\n atlas = atlases[sdfGlyphSize] = {\n glyphCount: 0,\n sdfGlyphSize,\n sdfCanvas: canvas,\n sdfTexture: new Texture(\n canvas,\n undefined,\n undefined,\n undefined,\n LinearFilter,\n LinearFilter\n ),\n contextLost: false,\n glyphsByFont: new Map()\n };\n atlas.sdfTexture.generateMipmaps = false;\n initContextLossHandling(atlas);\n }\n\n const {sdfTexture, sdfCanvas} = atlas;\n\n // Issue request to the typesetting engine in the worker\n const typeset = CONFIG.useWorker ? typesetInWorker : typesetOnMainThread;\n typeset(args).then(result => {\n const {glyphIds, glyphFontIndices, fontData, glyphPositions, fontSize, timings} = result;\n const neededSDFs = [];\n const glyphBounds = new Float32Array(glyphIds.length * 4);\n let boundsIdx = 0;\n let positionsIdx = 0;\n const quadsStart = now$1();\n\n const fontGlyphMaps = fontData.map(font => {\n let map = atlas.glyphsByFont.get(font.src);\n if (!map) {\n atlas.glyphsByFont.set(font.src, map = new Map());\n }\n return map\n });\n\n glyphIds.forEach((glyphId, i) => {\n const fontIndex = glyphFontIndices[i];\n const {src: fontSrc, unitsPerEm} = fontData[fontIndex];\n let glyphInfo = fontGlyphMaps[fontIndex].get(glyphId);\n\n // If this is a glyphId not seen before, add it to the atlas\n if (!glyphInfo) {\n const {path, pathBounds} = result.glyphData[fontSrc][glyphId];\n\n // Margin around path edges in SDF, based on a percentage of the glyph's max dimension.\n // Note we add an extra 0.5 px over the configured value because the outer 0.5 doesn't contain\n // useful interpolated values and will be ignored anyway.\n const fontUnitsMargin = Math.max(pathBounds[2] - pathBounds[0], pathBounds[3] - pathBounds[1])\n / sdfGlyphSize * (CONFIG.sdfMargin * sdfGlyphSize + 0.5);\n\n const atlasIndex = atlas.glyphCount++;\n const sdfViewBox = [\n pathBounds[0] - fontUnitsMargin,\n pathBounds[1] - fontUnitsMargin,\n pathBounds[2] + fontUnitsMargin,\n pathBounds[3] + fontUnitsMargin,\n ];\n fontGlyphMaps[fontIndex].set(glyphId, (glyphInfo = { path, atlasIndex, sdfViewBox }));\n\n // Collect those that need SDF generation\n neededSDFs.push(glyphInfo);\n }\n\n // Calculate bounds for renderable quads\n // TODO can we get this back off the main thread?\n const {sdfViewBox} = glyphInfo;\n const posX = glyphPositions[positionsIdx++];\n const posY = glyphPositions[positionsIdx++];\n const fontSizeMult = fontSize / unitsPerEm;\n glyphBounds[boundsIdx++] = posX + sdfViewBox[0] * fontSizeMult;\n glyphBounds[boundsIdx++] = posY + sdfViewBox[1] * fontSizeMult;\n glyphBounds[boundsIdx++] = posX + sdfViewBox[2] * fontSizeMult;\n glyphBounds[boundsIdx++] = posY + sdfViewBox[3] * fontSizeMult;\n\n // Convert glyphId to SDF index for the shader\n glyphIds[i] = glyphInfo.atlasIndex;\n });\n timings.quads = (timings.quads || 0) + (now$1() - quadsStart);\n\n const sdfStart = now$1();\n timings.sdf = {};\n\n // Grow the texture height by power of 2 if needed\n const currentHeight = sdfCanvas.height;\n const neededRows = Math.ceil(atlas.glyphCount / glyphsPerRow);\n const neededHeight = Math.pow(2, Math.ceil(Math.log2(neededRows * sdfGlyphSize)));\n if (neededHeight > currentHeight) {\n // Since resizing the canvas clears its render buffer, it needs special handling to copy the old contents over\n console.info(`Increasing SDF texture size ${currentHeight}->${neededHeight}`);\n resizeWebGLCanvasWithoutClearing(sdfCanvas, textureWidth, neededHeight);\n // As of Three r136 textures cannot be resized once they're allocated on the GPU, we must dispose to reallocate it\n sdfTexture.dispose();\n }\n\n Promise.all(neededSDFs.map(glyphInfo =>\n generateGlyphSDF(glyphInfo, atlas, args.gpuAccelerateSDF).then(({timing}) => {\n timings.sdf[glyphInfo.atlasIndex] = timing;\n })\n )).then(() => {\n if (neededSDFs.length && !atlas.contextLost) {\n safariPre15Workaround(atlas);\n sdfTexture.needsUpdate = true;\n }\n timings.sdfTotal = now$1() - sdfStart;\n timings.total = now$1() - totalStart;\n // console.log(`SDF - ${timings.sdfTotal}, Total - ${timings.total - timings.fontLoad}`)\n\n // Invoke callback with the text layout arrays and updated texture\n callback(Object.freeze({\n parameters: args,\n sdfTexture,\n sdfGlyphSize,\n sdfExponent,\n glyphBounds,\n glyphAtlasIndices: glyphIds,\n glyphColors: result.glyphColors,\n caretPositions: result.caretPositions,\n chunkedBounds: result.chunkedBounds,\n ascender: result.ascender,\n descender: result.descender,\n lineHeight: result.lineHeight,\n capHeight: result.capHeight,\n xHeight: result.xHeight,\n topBaseline: result.topBaseline,\n blockBounds: result.blockBounds,\n visibleBounds: result.visibleBounds,\n timings: result.timings,\n }));\n });\n });\n\n // While the typesetting request is being handled, go ahead and make sure the atlas canvas context is\n // \"warmed up\"; the first request will be the longest due to shader program compilation so this gets\n // a head start on that process before SDFs actually start getting processed.\n Promise.resolve().then(() => {\n if (!atlas.contextLost) {\n warmUpSDFCanvas(sdfCanvas);\n }\n });\n}\n\nfunction generateGlyphSDF({path, atlasIndex, sdfViewBox}, {sdfGlyphSize, sdfCanvas, contextLost}, useGPU) {\n if (contextLost) {\n // If the context is lost there's nothing we can do, just quit silently and let it\n // get regenerated when the context is restored\n return Promise.resolve({timing: -1})\n }\n const {textureWidth, sdfExponent} = CONFIG;\n const maxDist = Math.max(sdfViewBox[2] - sdfViewBox[0], sdfViewBox[3] - sdfViewBox[1]);\n const squareIndex = Math.floor(atlasIndex / 4);\n const x = squareIndex % (textureWidth / sdfGlyphSize) * sdfGlyphSize;\n const y = Math.floor(squareIndex / (textureWidth / sdfGlyphSize)) * sdfGlyphSize;\n const channel = atlasIndex % 4;\n return generateSDF(sdfGlyphSize, sdfGlyphSize, path, sdfViewBox, maxDist, sdfExponent, sdfCanvas, x, y, channel, useGPU)\n}\n\nfunction initContextLossHandling(atlas) {\n const canvas = atlas.sdfCanvas;\n\n /*\n // Begin context loss simulation\n if (!window.WebGLDebugUtils) {\n let script = document.getElementById('WebGLDebugUtilsScript')\n if (!script) {\n script = document.createElement('script')\n script.id = 'WebGLDebugUtils'\n document.head.appendChild(script)\n script.src = 'https://cdn.jsdelivr.net/gh/KhronosGroup/WebGLDeveloperTools@b42e702/src/debug/webgl-debug.js'\n }\n script.addEventListener('load', () => {\n initContextLossHandling(atlas)\n })\n return\n }\n window.WebGLDebugUtils.makeLostContextSimulatingCanvas(canvas)\n canvas.loseContextInNCalls(500)\n canvas.addEventListener('webglcontextrestored', (event) => {\n canvas.loseContextInNCalls(5000)\n })\n // End context loss simulation\n */\n\n canvas.addEventListener('webglcontextlost', (event) => {\n console.log('Context Lost', event);\n event.preventDefault();\n atlas.contextLost = true;\n });\n canvas.addEventListener('webglcontextrestored', (event) => {\n console.log('Context Restored', event);\n atlas.contextLost = false;\n // Regenerate all glyphs into the restored canvas:\n const promises = [];\n atlas.glyphsByFont.forEach(glyphMap => {\n glyphMap.forEach(glyph => {\n promises.push(generateGlyphSDF(glyph, atlas, true));\n });\n });\n Promise.all(promises).then(() => {\n safariPre15Workaround(atlas);\n atlas.sdfTexture.needsUpdate = true;\n });\n });\n}\n\n/**\n * Preload a given font and optionally pre-generate glyph SDFs for one or more character sequences.\n * This can be useful to avoid long pauses when first showing text in a scene, by preloading the\n * needed fonts and glyphs up front along with other assets.\n *\n * @param {object} options\n * @param {string} options.font - URL of the font file to preload. If not given, the default font will\n * be loaded.\n * @param {string|string[]} options.characters - One or more character sequences for which to pre-\n * generate glyph SDFs. Note that this will honor ligature substitution, so you may need\n * to specify ligature sequences in addition to their individual characters to get all\n * possible glyphs, e.g. `[\"t\", \"h\", \"th\"]` to get the \"t\" and \"h\" glyphs plus the \"th\" ligature.\n * @param {number} options.sdfGlyphSize - The size at which to prerender the SDF textures for the\n * specified `characters`.\n * @param {function} callback - A function that will be called when the preloading is complete.\n */\nfunction preloadFont({font, characters, sdfGlyphSize}, callback) {\n let text = Array.isArray(characters) ? characters.join('\\n') : '' + characters;\n getTextRenderInfo({ font, sdfGlyphSize, text }, callback);\n}\n\n\n// Local assign impl so we don't have to import troika-core\nfunction assign(toObj, fromObj) {\n for (let key in fromObj) {\n if (fromObj.hasOwnProperty(key)) {\n toObj[key] = fromObj[key];\n }\n }\n return toObj\n}\n\n// Utility for making URLs absolute\nlet linkEl;\nfunction toAbsoluteURL(path) {\n if (!linkEl) {\n linkEl = typeof document === 'undefined' ? {} : document.createElement('a');\n }\n linkEl.href = path;\n return linkEl.href\n}\n\n/**\n * Safari < v15 seems unable to use the SDF webgl canvas as a texture. This applies a workaround\n * where it reads the pixels out of that canvas and uploads them as a data texture instead, at\n * a slight performance cost.\n */\nfunction safariPre15Workaround(atlas) {\n // Use createImageBitmap support as a proxy for Safari<15, all other mainstream browsers\n // have supported it for a long while so any false positives should be minimal.\n if (typeof createImageBitmap !== 'function') {\n console.info('Safari<15: applying SDF canvas workaround');\n const {sdfCanvas, sdfTexture} = atlas;\n const {width, height} = sdfCanvas;\n const gl = atlas.sdfCanvas.getContext('webgl');\n let pixels = sdfTexture.image.data;\n if (!pixels || pixels.length !== width * height * 4) {\n pixels = new Uint8Array(width * height * 4);\n sdfTexture.image = {width, height, data: pixels};\n sdfTexture.flipY = false;\n sdfTexture.isDataTexture = true;\n }\n gl.readPixels(0, 0, width, height, gl.RGBA, gl.UNSIGNED_BYTE, pixels);\n }\n}\n\nconst typesetterWorkerModule = /*#__PURE__*/defineWorkerModule({\n name: 'Typesetter',\n dependencies: [\n createTypesetter,\n fontResolverWorkerModule,\n bidiFactory,\n ],\n init(createTypesetter, fontResolver, bidiFactory) {\n return createTypesetter(fontResolver, bidiFactory())\n }\n});\n\nconst typesetInWorker = /*#__PURE__*/defineWorkerModule({\n name: 'Typesetter',\n dependencies: [\n typesetterWorkerModule,\n ],\n init(typesetter) {\n return function(args) {\n return new Promise(resolve => {\n typesetter.typeset(args, resolve);\n })\n }\n },\n getTransferables(result) {\n // Mark array buffers as transferable to avoid cloning during postMessage\n const transferables = [];\n for (let p in result) {\n if (result[p] && result[p].buffer) {\n transferables.push(result[p].buffer);\n }\n }\n return transferables\n }\n});\n\nconst typesetOnMainThread = typesetInWorker.onMainThread;\n\nfunction dumpSDFTextures() {\n Object.keys(atlases).forEach(size => {\n const canvas = atlases[size].sdfCanvas;\n const {width, height} = canvas;\n console.log(\"%c.\", `\n background: url(${canvas.toDataURL()});\n background-size: ${width}px ${height}px;\n color: transparent;\n font-size: 0;\n line-height: ${height}px;\n padding-left: ${width}px;\n `);\n });\n}\n\nconst templateGeometries = {};\n\nfunction getTemplateGeometry(detail) {\n let geom = templateGeometries[detail];\n if (!geom) {\n geom = templateGeometries[detail] = new PlaneGeometry(1, 1, detail, detail).translate(0.5, 0.5, 0);\n }\n return geom\n}\n\nconst glyphBoundsAttrName = 'aTroikaGlyphBounds';\nconst glyphIndexAttrName = 'aTroikaGlyphIndex';\nconst glyphColorAttrName = 'aTroikaGlyphColor';\n\n/**\n@class GlyphsGeometry\n\nA specialized Geometry for rendering a set of text glyphs. Uses InstancedBufferGeometry to\nrender the glyphs using GPU instancing of a single quad, rather than constructing a whole\ngeometry with vertices, for much smaller attribute arraybuffers according to this math:\n\n Where N = number of glyphs...\n\n Instanced:\n - position: 4 * 3\n - index: 2 * 3\n - normal: 4 * 3\n - uv: 4 * 2\n - glyph x/y bounds: N * 4\n - glyph indices: N * 1\n = 5N + 38\n\n Non-instanced:\n - position: N * 4 * 3\n - index: N * 2 * 3\n - normal: N * 4 * 3\n - uv: N * 4 * 2\n - glyph indices: N * 1\n = 39N\n\nA downside of this is the rare-but-possible lack of the instanced arrays extension,\nwhich we could potentially work around with a fallback non-instanced implementation.\n\n*/\nclass GlyphsGeometry extends InstancedBufferGeometry {\n constructor() {\n super();\n\n this.detail = 1;\n this.curveRadius = 0;\n\n // Define groups for rendering text outline as a separate pass; these will only\n // be used when the `material` getter returns an array, i.e. outlineWidth > 0.\n this.groups = [\n {start: 0, count: Infinity, materialIndex: 0},\n {start: 0, count: Infinity, materialIndex: 1}\n ];\n\n // Preallocate empty bounding objects\n this.boundingSphere = new Sphere();\n this.boundingBox = new Box3();\n }\n\n computeBoundingSphere () {\n // No-op; we'll sync the boundingSphere proactively when needed.\n }\n\n computeBoundingBox() {\n // No-op; we'll sync the boundingBox proactively when needed.\n }\n\n set detail(detail) {\n if (detail !== this._detail) {\n this._detail = detail;\n if (typeof detail !== 'number' || detail < 1) {\n detail = 1;\n }\n let tpl = getTemplateGeometry(detail)\n ;['position', 'normal', 'uv'].forEach(attr => {\n this.attributes[attr] = tpl.attributes[attr].clone();\n });\n this.setIndex(tpl.getIndex().clone());\n }\n }\n get detail() {\n return this._detail\n }\n\n set curveRadius(r) {\n if (r !== this._curveRadius) {\n this._curveRadius = r;\n this._updateBounds();\n }\n }\n get curveRadius() {\n return this._curveRadius\n }\n\n /**\n * Update the geometry for a new set of glyphs.\n * @param {Float32Array} glyphBounds - An array holding the planar bounds for all glyphs\n * to be rendered, 4 entries for each glyph: x1,x2,y1,y1\n * @param {Float32Array} glyphAtlasIndices - An array holding the index of each glyph within\n * the SDF atlas texture.\n * @param {Array} blockBounds - An array holding the [minX, minY, maxX, maxY] across all glyphs\n * @param {Array} [chunkedBounds] - An array of objects describing bounds for each chunk of N\n * consecutive glyphs: `{start:N, end:N, rect:[minX, minY, maxX, maxY]}`. This can be\n * used with `applyClipRect` to choose an optimized `instanceCount`.\n * @param {Uint8Array} [glyphColors] - An array holding r,g,b values for each glyph.\n */\n updateGlyphs(glyphBounds, glyphAtlasIndices, blockBounds, chunkedBounds, glyphColors) {\n // Update the instance attributes\n this.updateAttributeData(glyphBoundsAttrName, glyphBounds, 4);\n this.updateAttributeData(glyphIndexAttrName, glyphAtlasIndices, 1);\n this.updateAttributeData(glyphColorAttrName, glyphColors, 3);\n this._blockBounds = blockBounds;\n this._chunkedBounds = chunkedBounds;\n this.instanceCount = glyphAtlasIndices.length;\n this._updateBounds();\n }\n\n _updateBounds() {\n const bounds = this._blockBounds;\n if (bounds) {\n const { curveRadius, boundingBox: bbox } = this;\n if (curveRadius) {\n const { PI, floor, min, max, sin, cos } = Math;\n const halfPi = PI / 2;\n const twoPi = PI * 2;\n const absR = Math.abs(curveRadius);\n const leftAngle = bounds[0] / absR;\n const rightAngle = bounds[2] / absR;\n const minX = floor((leftAngle + halfPi) / twoPi) !== floor((rightAngle + halfPi) / twoPi)\n ? -absR : min(sin(leftAngle) * absR, sin(rightAngle) * absR);\n const maxX = floor((leftAngle - halfPi) / twoPi) !== floor((rightAngle - halfPi) / twoPi)\n ? absR : max(sin(leftAngle) * absR, sin(rightAngle) * absR);\n const maxZ = floor((leftAngle + PI) / twoPi) !== floor((rightAngle + PI) / twoPi)\n ? absR * 2 : max(absR - cos(leftAngle) * absR, absR - cos(rightAngle) * absR);\n bbox.min.set(minX, bounds[1], curveRadius < 0 ? -maxZ : 0);\n bbox.max.set(maxX, bounds[3], curveRadius < 0 ? 0 : maxZ);\n } else {\n bbox.min.set(bounds[0], bounds[1], 0);\n bbox.max.set(bounds[2], bounds[3], 0);\n }\n bbox.getBoundingSphere(this.boundingSphere);\n }\n }\n\n /**\n * Given a clipping rect, and the chunkedBounds from the last updateGlyphs call, choose the lowest\n * `instanceCount` that will show all glyphs within the clipped view. This is an optimization\n * for long blocks of text that are clipped, to skip vertex shader evaluation for glyphs that would\n * be clipped anyway.\n *\n * Note that since `drawElementsInstanced[ANGLE]` only accepts an instance count and not a starting\n * offset, this optimization becomes less effective as the clipRect moves closer to the end of the\n * text block. We could fix that by switching from instancing to a full geometry with a drawRange,\n * but at the expense of much larger attribute buffers (see classdoc above.)\n *\n * @param {Vector4} clipRect\n */\n applyClipRect(clipRect) {\n let count = this.getAttribute(glyphIndexAttrName).count;\n let chunks = this._chunkedBounds;\n if (chunks) {\n for (let i = chunks.length; i--;) {\n count = chunks[i].end;\n let rect = chunks[i].rect;\n // note: both rects are l-b-r-t\n if (rect[1] < clipRect.w && rect[3] > clipRect.y && rect[0] < clipRect.z && rect[2] > clipRect.x) {\n break\n }\n }\n }\n this.instanceCount = count;\n }\n\n /**\n * Utility for updating instance attributes with automatic resizing\n */\n updateAttributeData(attrName, newArray, itemSize) {\n const attr = this.getAttribute(attrName);\n if (newArray) {\n // If length isn't changing, just update the attribute's array data\n if (attr && attr.array.length === newArray.length) {\n attr.array.set(newArray);\n attr.needsUpdate = true;\n } else {\n this.setAttribute(attrName, new InstancedBufferAttribute(newArray, itemSize));\n // If the new attribute has a different size, we also have to (as of r117) manually clear the\n // internal cached max instance count. See https://github.com/mrdoob/three.js/issues/19706\n // It's unclear if this is a threejs bug or a truly unsupported scenario; discussion in\n // that ticket is ambiguous as to whether replacing a BufferAttribute with one of a\n // different size is supported, but https://github.com/mrdoob/three.js/pull/17418 strongly\n // implies it should be supported. It's possible we need to\n delete this._maxInstanceCount; //for r117+, could be fragile\n this.dispose(); //for r118+, more robust feeling, but more heavy-handed than I'd like\n }\n } else if (attr) {\n this.deleteAttribute(attrName);\n }\n }\n}\n\n// language=GLSL\nconst VERTEX_DEFS = `\nuniform vec2 uTroikaSDFTextureSize;\nuniform float uTroikaSDFGlyphSize;\nuniform vec4 uTroikaTotalBounds;\nuniform vec4 uTroikaClipRect;\nuniform mat3 uTroikaOrient;\nuniform bool uTroikaUseGlyphColors;\nuniform float uTroikaEdgeOffset;\nuniform float uTroikaBlurRadius;\nuniform vec2 uTroikaPositionOffset;\nuniform float uTroikaCurveRadius;\nattribute vec4 aTroikaGlyphBounds;\nattribute float aTroikaGlyphIndex;\nattribute vec3 aTroikaGlyphColor;\nvarying vec2 vTroikaGlyphUV;\nvarying vec4 vTroikaTextureUVBounds;\nvarying float vTroikaTextureChannel;\nvarying vec3 vTroikaGlyphColor;\nvarying vec2 vTroikaGlyphDimensions;\n`;\n\n// language=GLSL prefix=\"void main() {\" suffix=\"}\"\nconst VERTEX_TRANSFORM = `\nvec4 bounds = aTroikaGlyphBounds;\nbounds.xz += uTroikaPositionOffset.x;\nbounds.yw -= uTroikaPositionOffset.y;\n\nvec4 outlineBounds = vec4(\n bounds.xy - uTroikaEdgeOffset - uTroikaBlurRadius,\n bounds.zw + uTroikaEdgeOffset + uTroikaBlurRadius\n);\nvec4 clippedBounds = vec4(\n clamp(outlineBounds.xy, uTroikaClipRect.xy, uTroikaClipRect.zw),\n clamp(outlineBounds.zw, uTroikaClipRect.xy, uTroikaClipRect.zw)\n);\n\nvec2 clippedXY = (mix(clippedBounds.xy, clippedBounds.zw, position.xy) - bounds.xy) / (bounds.zw - bounds.xy);\n\nposition.xy = mix(bounds.xy, bounds.zw, clippedXY);\n\nuv = (position.xy - uTroikaTotalBounds.xy) / (uTroikaTotalBounds.zw - uTroikaTotalBounds.xy);\n\nfloat rad = uTroikaCurveRadius;\nif (rad != 0.0) {\n float angle = position.x / rad;\n position.xz = vec2(sin(angle) * rad, rad - cos(angle) * rad);\n normal.xz = vec2(sin(angle), cos(angle));\n}\n \nposition = uTroikaOrient * position;\nnormal = uTroikaOrient * normal;\n\nvTroikaGlyphUV = clippedXY.xy;\nvTroikaGlyphDimensions = vec2(bounds[2] - bounds[0], bounds[3] - bounds[1]);\n\n${''/* NOTE: it seems important to calculate the glyph's bounding texture UVs here in the\n vertex shader, rather than in the fragment shader, as the latter gives strange artifacts\n on some glyphs (those in the leftmost texture column) on some systems. The exact reason\n isn't understood but doing this here, then mix()-ing in the fragment shader, seems to work. */}\nfloat txCols = uTroikaSDFTextureSize.x / uTroikaSDFGlyphSize;\nvec2 txUvPerSquare = uTroikaSDFGlyphSize / uTroikaSDFTextureSize;\nvec2 txStartUV = txUvPerSquare * vec2(\n mod(floor(aTroikaGlyphIndex / 4.0), txCols),\n floor(floor(aTroikaGlyphIndex / 4.0) / txCols)\n);\nvTroikaTextureUVBounds = vec4(txStartUV, vec2(txStartUV) + txUvPerSquare);\nvTroikaTextureChannel = mod(aTroikaGlyphIndex, 4.0);\n`;\n\n// language=GLSL\nconst FRAGMENT_DEFS = `\nuniform sampler2D uTroikaSDFTexture;\nuniform vec2 uTroikaSDFTextureSize;\nuniform float uTroikaSDFGlyphSize;\nuniform float uTroikaSDFExponent;\nuniform float uTroikaEdgeOffset;\nuniform float uTroikaFillOpacity;\nuniform float uTroikaBlurRadius;\nuniform vec3 uTroikaStrokeColor;\nuniform float uTroikaStrokeWidth;\nuniform float uTroikaStrokeOpacity;\nuniform bool uTroikaSDFDebug;\nvarying vec2 vTroikaGlyphUV;\nvarying vec4 vTroikaTextureUVBounds;\nvarying float vTroikaTextureChannel;\nvarying vec2 vTroikaGlyphDimensions;\n\nfloat troikaSdfValueToSignedDistance(float alpha) {\n // Inverse of exponential encoding in webgl-sdf-generator\n ${''/* TODO - there's some slight inaccuracy here when dealing with interpolated alpha values; those\n are linearly interpolated where the encoding is exponential. Look into improving this by rounding\n to nearest 2 whole texels, decoding those exponential values, and linearly interpolating the result.\n */}\n float maxDimension = max(vTroikaGlyphDimensions.x, vTroikaGlyphDimensions.y);\n float absDist = (1.0 - pow(2.0 * (alpha > 0.5 ? 1.0 - alpha : alpha), 1.0 / uTroikaSDFExponent)) * maxDimension;\n float signedDist = absDist * (alpha > 0.5 ? -1.0 : 1.0);\n return signedDist;\n}\n\nfloat troikaGlyphUvToSdfValue(vec2 glyphUV) {\n vec2 textureUV = mix(vTroikaTextureUVBounds.xy, vTroikaTextureUVBounds.zw, glyphUV);\n vec4 rgba = texture2D(uTroikaSDFTexture, textureUV);\n float ch = floor(vTroikaTextureChannel + 0.5); //NOTE: can't use round() in WebGL1\n return ch == 0.0 ? rgba.r : ch == 1.0 ? rgba.g : ch == 2.0 ? rgba.b : rgba.a;\n}\n\nfloat troikaGlyphUvToDistance(vec2 uv) {\n return troikaSdfValueToSignedDistance(troikaGlyphUvToSdfValue(uv));\n}\n\nfloat troikaGetAADist() {\n ${''/*\n When the standard derivatives extension is available, we choose an antialiasing alpha threshold based\n on the potential change in the SDF's alpha from this fragment to its neighbor. This strategy maximizes \n readability and edge crispness at all sizes and screen resolutions.\n */}\n #if defined(GL_OES_standard_derivatives) || __VERSION__ >= 300\n return length(fwidth(vTroikaGlyphUV * vTroikaGlyphDimensions)) * 0.5;\n #else\n return vTroikaGlyphDimensions.x / 64.0;\n #endif\n}\n\nfloat troikaGetFragDistValue() {\n vec2 clampedGlyphUV = clamp(vTroikaGlyphUV, 0.5 / uTroikaSDFGlyphSize, 1.0 - 0.5 / uTroikaSDFGlyphSize);\n float distance = troikaGlyphUvToDistance(clampedGlyphUV);\n \n // Extrapolate distance when outside bounds:\n distance += clampedGlyphUV == vTroikaGlyphUV ? 0.0 : \n length((vTroikaGlyphUV - clampedGlyphUV) * vTroikaGlyphDimensions);\n\n ${''/* \n // TODO more refined extrapolated distance by adjusting for angle of gradient at edge...\n // This has potential but currently gives very jagged extensions, maybe due to precision issues?\n float uvStep = 1.0 / uTroikaSDFGlyphSize;\n vec2 neighbor1UV = clampedGlyphUV + (\n vTroikaGlyphUV.x != clampedGlyphUV.x ? vec2(0.0, uvStep * sign(0.5 - vTroikaGlyphUV.y)) :\n vTroikaGlyphUV.y != clampedGlyphUV.y ? vec2(uvStep * sign(0.5 - vTroikaGlyphUV.x), 0.0) :\n vec2(0.0)\n );\n vec2 neighbor2UV = clampedGlyphUV + (\n vTroikaGlyphUV.x != clampedGlyphUV.x ? vec2(0.0, uvStep * -sign(0.5 - vTroikaGlyphUV.y)) :\n vTroikaGlyphUV.y != clampedGlyphUV.y ? vec2(uvStep * -sign(0.5 - vTroikaGlyphUV.x), 0.0) :\n vec2(0.0)\n );\n float neighbor1Distance = troikaGlyphUvToDistance(neighbor1UV);\n float neighbor2Distance = troikaGlyphUvToDistance(neighbor2UV);\n float distToUnclamped = length((vTroikaGlyphUV - clampedGlyphUV) * vTroikaGlyphDimensions);\n float distToNeighbor = length((clampedGlyphUV - neighbor1UV) * vTroikaGlyphDimensions);\n float gradientAngle1 = min(asin(abs(neighbor1Distance - distance) / distToNeighbor), PI / 2.0);\n float gradientAngle2 = min(asin(abs(neighbor2Distance - distance) / distToNeighbor), PI / 2.0);\n distance += (cos(gradientAngle1) + cos(gradientAngle2)) / 2.0 * distToUnclamped;\n */}\n\n return distance;\n}\n\nfloat troikaGetEdgeAlpha(float distance, float distanceOffset, float aaDist) {\n #if defined(IS_DEPTH_MATERIAL) || defined(IS_DISTANCE_MATERIAL)\n float alpha = step(-distanceOffset, -distance);\n #else\n\n float alpha = smoothstep(\n distanceOffset + aaDist,\n distanceOffset - aaDist,\n distance\n );\n #endif\n\n return alpha;\n}\n`;\n\n// language=GLSL prefix=\"void main() {\" suffix=\"}\"\nconst FRAGMENT_TRANSFORM = `\nfloat aaDist = troikaGetAADist();\nfloat fragDistance = troikaGetFragDistValue();\nfloat edgeAlpha = uTroikaSDFDebug ?\n troikaGlyphUvToSdfValue(vTroikaGlyphUV) :\n troikaGetEdgeAlpha(fragDistance, uTroikaEdgeOffset, max(aaDist, uTroikaBlurRadius));\n\n#if !defined(IS_DEPTH_MATERIAL) && !defined(IS_DISTANCE_MATERIAL)\nvec4 fillRGBA = gl_FragColor;\nfillRGBA.a *= uTroikaFillOpacity;\nvec4 strokeRGBA = uTroikaStrokeWidth == 0.0 ? fillRGBA : vec4(uTroikaStrokeColor, uTroikaStrokeOpacity);\nif (fillRGBA.a == 0.0) fillRGBA.rgb = strokeRGBA.rgb;\ngl_FragColor = mix(fillRGBA, strokeRGBA, smoothstep(\n -uTroikaStrokeWidth - aaDist,\n -uTroikaStrokeWidth + aaDist,\n fragDistance\n));\ngl_FragColor.a *= edgeAlpha;\n#endif\n\nif (edgeAlpha == 0.0) {\n discard;\n}\n`;\n\n\n/**\n * Create a material for rendering text, derived from a baseMaterial\n */\nfunction createTextDerivedMaterial(baseMaterial) {\n const textMaterial = createDerivedMaterial(baseMaterial, {\n chained: true,\n extensions: {\n derivatives: true\n },\n uniforms: {\n uTroikaSDFTexture: {value: null},\n uTroikaSDFTextureSize: {value: new Vector2()},\n uTroikaSDFGlyphSize: {value: 0},\n uTroikaSDFExponent: {value: 0},\n uTroikaTotalBounds: {value: new Vector4(0,0,0,0)},\n uTroikaClipRect: {value: new Vector4(0,0,0,0)},\n uTroikaEdgeOffset: {value: 0},\n uTroikaFillOpacity: {value: 1},\n uTroikaPositionOffset: {value: new Vector2()},\n uTroikaCurveRadius: {value: 0},\n uTroikaBlurRadius: {value: 0},\n uTroikaStrokeWidth: {value: 0},\n uTroikaStrokeColor: {value: new Color()},\n uTroikaStrokeOpacity: {value: 1},\n uTroikaOrient: {value: new Matrix3()},\n uTroikaUseGlyphColors: {value: true},\n uTroikaSDFDebug: {value: false}\n },\n vertexDefs: VERTEX_DEFS,\n vertexTransform: VERTEX_TRANSFORM,\n fragmentDefs: FRAGMENT_DEFS,\n fragmentColorTransform: FRAGMENT_TRANSFORM,\n customRewriter({vertexShader, fragmentShader}) {\n let uDiffuseRE = /\\buniform\\s+vec3\\s+diffuse\\b/;\n if (uDiffuseRE.test(fragmentShader)) {\n // Replace all instances of `diffuse` with our varying\n fragmentShader = fragmentShader\n .replace(uDiffuseRE, 'varying vec3 vTroikaGlyphColor')\n .replace(/\\bdiffuse\\b/g, 'vTroikaGlyphColor');\n // Make sure the vertex shader declares the uniform so we can grab it as a fallback\n if (!uDiffuseRE.test(vertexShader)) {\n vertexShader = vertexShader.replace(\n voidMainRegExp,\n 'uniform vec3 diffuse;\\n$&\\nvTroikaGlyphColor = uTroikaUseGlyphColors ? aTroikaGlyphColor / 255.0 : diffuse;\\n'\n );\n }\n }\n return { vertexShader, fragmentShader }\n }\n });\n\n // Force transparency - TODO is this reasonable?\n textMaterial.transparent = true;\n\n // Force single draw call when double-sided\n textMaterial.forceSinglePass = true;\n\n Object.defineProperties(textMaterial, {\n isTroikaTextMaterial: {value: true},\n\n // WebGLShadowMap reverses the side of the shadow material by default, which fails\n // for planes, so here we force the `shadowSide` to always match the main side.\n shadowSide: {\n get() {\n return this.side\n },\n set() {\n //no-op\n }\n }\n });\n\n return textMaterial\n}\n\nconst defaultMaterial = /*#__PURE__*/ new MeshBasicMaterial({\n color: 0xffffff,\n side: DoubleSide,\n transparent: true\n});\nconst defaultStrokeColor = 0x808080;\n\nconst tempMat4 = /*#__PURE__*/ new Matrix4();\nconst tempVec3a = /*#__PURE__*/ new Vector3();\nconst tempVec3b = /*#__PURE__*/ new Vector3();\nconst tempArray = [];\nconst origin = /*#__PURE__*/ new Vector3();\nconst defaultOrient = '+x+y';\n\nfunction first(o) {\n return Array.isArray(o) ? o[0] : o\n}\n\nlet getFlatRaycastMesh = () => {\n const mesh = new Mesh(\n new PlaneGeometry(1, 1),\n defaultMaterial\n );\n getFlatRaycastMesh = () => mesh;\n return mesh\n};\nlet getCurvedRaycastMesh = () => {\n const mesh = new Mesh(\n new PlaneGeometry(1, 1, 32, 1),\n defaultMaterial\n );\n getCurvedRaycastMesh = () => mesh;\n return mesh\n};\n\nconst syncStartEvent = { type: 'syncstart' };\nconst syncCompleteEvent = { type: 'synccomplete' };\n\nconst SYNCABLE_PROPS = [\n 'font',\n 'fontSize',\n 'fontStyle',\n 'fontWeight',\n 'lang',\n 'letterSpacing',\n 'lineHeight',\n 'maxWidth',\n 'overflowWrap',\n 'text',\n 'direction',\n 'textAlign',\n 'textIndent',\n 'whiteSpace',\n 'anchorX',\n 'anchorY',\n 'colorRanges',\n 'sdfGlyphSize'\n];\n\nconst COPYABLE_PROPS = SYNCABLE_PROPS.concat(\n 'material',\n 'color',\n 'depthOffset',\n 'clipRect',\n 'curveRadius',\n 'orientation',\n 'glyphGeometryDetail'\n);\n\n/**\n * @class Text\n *\n * A ThreeJS Mesh that renders a string of text on a plane in 3D space using signed distance\n * fields (SDF).\n */\nclass Text extends Mesh {\n constructor() {\n const geometry = new GlyphsGeometry();\n super(geometry, null);\n\n // === Text layout properties: === //\n\n /**\n * @member {string} text\n * The string of text to be rendered.\n */\n this.text = '';\n\n /**\n * @member {number|string} anchorX\n * Defines the horizontal position in the text block that should line up with the local origin.\n * Can be specified as a numeric x position in local units, a string percentage of the total\n * text block width e.g. `'25%'`, or one of the following keyword strings: 'left', 'center',\n * or 'right'.\n */\n this.anchorX = 0;\n\n /**\n * @member {number|string} anchorY\n * Defines the vertical position in the text block that should line up with the local origin.\n * Can be specified as a numeric y position in local units (note: down is negative y), a string\n * percentage of the total text block height e.g. `'25%'`, or one of the following keyword strings:\n * 'top', 'top-baseline', 'top-cap', 'top-ex', 'middle', 'bottom-baseline', or 'bottom'.\n */\n this.anchorY = 0;\n\n /**\n * @member {number} curveRadius\n * Defines a cylindrical radius along which the text's plane will be curved. Positive numbers put\n * the cylinder's centerline (oriented vertically) that distance in front of the text, for a concave\n * curvature, while negative numbers put it behind the text for a convex curvature. The centerline\n * will be aligned with the text's local origin; you can use `anchorX` to offset it.\n *\n * Since each glyph is by default rendered with a simple quad, each glyph remains a flat plane\n * internally. You can use `glyphGeometryDetail` to add more vertices for curvature inside glyphs.\n */\n this.curveRadius = 0;\n\n /**\n * @member {string} direction\n * Sets the base direction for the text. The default value of \"auto\" will choose a direction based\n * on the text's content according to the bidi spec. A value of \"ltr\" or \"rtl\" will force the direction.\n */\n this.direction = 'auto';\n\n /**\n * @member {string|null} font\n * URL of a custom font to be used. Font files can be in .ttf, .otf, or .woff (not .woff2) formats.\n * Defaults to Noto Sans.\n */\n this.font = null; //will use default from TextBuilder\n\n this.unicodeFontsURL = null; //defaults to CDN\n\n /**\n * @member {number} fontSize\n * The size at which to render the font in local units; corresponds to the em-box height\n * of the chosen `font`.\n */\n this.fontSize = 0.1;\n\n /**\n * @member {number|'normal'|'bold'}\n * The weight of the font. Currently only used for fallback Noto fonts.\n */\n this.fontWeight = 'normal';\n\n /**\n * @member {'normal'|'italic'}\n * The style of the font. Currently only used for fallback Noto fonts.\n */\n this.fontStyle = 'normal';\n\n /**\n * @member {string|null} lang\n * The language code of this text; can be used for explicitly selecting certain CJK fonts.\n */\n this.lang = null;\n\n /**\n * @member {number} letterSpacing\n * Sets a uniform adjustment to spacing between letters after kerning is applied. Positive\n * numbers increase spacing and negative numbers decrease it.\n */\n this.letterSpacing = 0;\n\n /**\n * @member {number|string} lineHeight\n * Sets the height of each line of text, as a multiple of the `fontSize`. Defaults to 'normal'\n * which chooses a reasonable height based on the chosen font's ascender/descender metrics.\n */\n this.lineHeight = 'normal';\n\n /**\n * @member {number} maxWidth\n * The maximum width of the text block, above which text may start wrapping according to the\n * `whiteSpace` and `overflowWrap` properties.\n */\n this.maxWidth = Infinity;\n\n /**\n * @member {string} overflowWrap\n * Defines how text wraps if the `whiteSpace` property is `normal`. Can be either `'normal'`\n * to break at whitespace characters, or `'break-word'` to allow breaking within words.\n * Defaults to `'normal'`.\n */\n this.overflowWrap = 'normal';\n\n /**\n * @member {string} textAlign\n * The horizontal alignment of each line of text within the overall text bounding box.\n */\n this.textAlign = 'left';\n\n /**\n * @member {number} textIndent\n * Indentation for the first character of a line; see CSS `text-indent`.\n */\n this.textIndent = 0;\n\n /**\n * @member {string} whiteSpace\n * Defines whether text should wrap when a line reaches the `maxWidth`. Can\n * be either `'normal'` (the default), to allow wrapping according to the `overflowWrap` property,\n * or `'nowrap'` to prevent wrapping. Note that `'normal'` here honors newline characters to\n * manually break lines, making it behave more like `'pre-wrap'` does in CSS.\n */\n this.whiteSpace = 'normal';\n\n\n // === Presentation properties: === //\n\n /**\n * @member {THREE.Material} material\n * Defines a _base_ material to be used when rendering the text. This material will be\n * automatically replaced with a material derived from it, that adds shader code to\n * decrease the alpha for each fragment (pixel) outside the text glyphs, with antialiasing.\n * By default it will derive from a simple white MeshBasicMaterial, but you can use any\n * of the other mesh materials to gain other features like lighting, texture maps, etc.\n *\n * Also see the `color` shortcut property.\n */\n this.material = null;\n\n /**\n * @member {string|number|THREE.Color} color\n * This is a shortcut for setting the `color` of the text's material. You can use this\n * if you don't want to specify a whole custom `material`. Also, if you do use a custom\n * `material`, this color will only be used for this particuar Text instance, even if\n * that same material instance is shared across multiple Text objects.\n */\n this.color = null;\n\n /**\n * @member {object|null} colorRanges\n * WARNING: This API is experimental and may change.\n * This allows more fine-grained control of colors for individual or ranges of characters,\n * taking precedence over the material's `color`. Its format is an Object whose keys each\n * define a starting character index for a range, and whose values are the color for each\n * range. The color value can be a numeric hex color value, a `THREE.Color` object, or\n * any of the strings accepted by `THREE.Color`.\n */\n this.colorRanges = null;\n\n /**\n * @member {number|string} outlineWidth\n * WARNING: This API is experimental and may change.\n * The width of an outline/halo to be drawn around each text glyph using the `outlineColor` and `outlineOpacity`.\n * Can be specified as either an absolute number in local units, or as a percentage string e.g.\n * `\"12%\"` which is treated as a percentage of the `fontSize`. Defaults to `0`, which means\n * no outline will be drawn unless an `outlineOffsetX/Y` or `outlineBlur` is set.\n */\n this.outlineWidth = 0;\n\n /**\n * @member {string|number|THREE.Color} outlineColor\n * WARNING: This API is experimental and may change.\n * The color of the text outline, if `outlineWidth`/`outlineBlur`/`outlineOffsetX/Y` are set.\n * Defaults to black.\n */\n this.outlineColor = 0x000000;\n\n /**\n * @member {number} outlineOpacity\n * WARNING: This API is experimental and may change.\n * The opacity of the outline, if `outlineWidth`/`outlineBlur`/`outlineOffsetX/Y` are set.\n * Defaults to `1`.\n */\n this.outlineOpacity = 1;\n\n /**\n * @member {number|string} outlineBlur\n * WARNING: This API is experimental and may change.\n * A blur radius applied to the outer edge of the text's outline. If the `outlineWidth` is\n * zero, the blur will be applied at the glyph edge, like CSS's `text-shadow` blur radius.\n * Can be specified as either an absolute number in local units, or as a percentage string e.g.\n * `\"12%\"` which is treated as a percentage of the `fontSize`. Defaults to `0`.\n */\n this.outlineBlur = 0;\n\n /**\n * @member {number|string} outlineOffsetX\n * WARNING: This API is experimental and may change.\n * A horizontal offset for the text outline.\n * Can be specified as either an absolute number in local units, or as a percentage string e.g. `\"12%\"`\n * which is treated as a percentage of the `fontSize`. Defaults to `0`.\n */\n this.outlineOffsetX = 0;\n\n /**\n * @member {number|string} outlineOffsetY\n * WARNING: This API is experimental and may change.\n * A vertical offset for the text outline.\n * Can be specified as either an absolute number in local units, or as a percentage string e.g. `\"12%\"`\n * which is treated as a percentage of the `fontSize`. Defaults to `0`.\n */\n this.outlineOffsetY = 0;\n\n /**\n * @member {number|string} strokeWidth\n * WARNING: This API is experimental and may change.\n * The width of an inner stroke drawn inside each text glyph using the `strokeColor` and `strokeOpacity`.\n * Can be specified as either an absolute number in local units, or as a percentage string e.g. `\"12%\"`\n * which is treated as a percentage of the `fontSize`. Defaults to `0`.\n */\n this.strokeWidth = 0;\n\n /**\n * @member {string|number|THREE.Color} strokeColor\n * WARNING: This API is experimental and may change.\n * The color of the text stroke, if `strokeWidth` is greater than zero. Defaults to gray.\n */\n this.strokeColor = defaultStrokeColor;\n\n /**\n * @member {number} strokeOpacity\n * WARNING: This API is experimental and may change.\n * The opacity of the stroke, if `strokeWidth` is greater than zero. Defaults to `1`.\n */\n this.strokeOpacity = 1;\n\n /**\n * @member {number} fillOpacity\n * WARNING: This API is experimental and may change.\n * The opacity of the glyph's fill from 0 to 1. This behaves like the material's `opacity` but allows\n * giving the fill a different opacity than the `strokeOpacity`. A fillOpacity of `0` makes the\n * interior of the glyph invisible, leaving just the `strokeWidth`. Defaults to `1`.\n */\n this.fillOpacity = 1;\n\n /**\n * @member {number} depthOffset\n * This is a shortcut for setting the material's `polygonOffset` and related properties,\n * which can be useful in preventing z-fighting when this text is laid on top of another\n * plane in the scene. Positive numbers are further from the camera, negatives closer.\n */\n this.depthOffset = 0;\n\n /**\n * @member {Array<number>} clipRect\n * If specified, defines a `[minX, minY, maxX, maxY]` of a rectangle outside of which all\n * pixels will be discarded. This can be used for example to clip overflowing text when\n * `whiteSpace='nowrap'`.\n */\n this.clipRect = null;\n\n /**\n * @member {string} orientation\n * Defines the axis plane on which the text should be laid out when the mesh has no extra\n * rotation transform. It is specified as a string with two axes: the horizontal axis with\n * positive pointing right, and the vertical axis with positive pointing up. By default this\n * is '+x+y', meaning the text sits on the xy plane with the text's top toward positive y\n * and facing positive z. A value of '+x-z' would place it on the xz plane with the text's\n * top toward negative z and facing positive y.\n */\n this.orientation = defaultOrient;\n\n /**\n * @member {number} glyphGeometryDetail\n * Controls number of vertical/horizontal segments that make up each glyph's rectangular\n * plane. Defaults to 1. This can be increased to provide more geometrical detail for custom\n * vertex shader effects, for example.\n */\n this.glyphGeometryDetail = 1;\n\n /**\n * @member {number|null} sdfGlyphSize\n * The size of each glyph's SDF (signed distance field) used for rendering. This must be a\n * power-of-two number. Defaults to 64 which is generally a good balance of size and quality\n * for most fonts. Larger sizes can improve the quality of glyph rendering by increasing\n * the sharpness of corners and preventing loss of very thin lines, at the expense of\n * increased memory footprint and longer SDF generation time.\n */\n this.sdfGlyphSize = null;\n\n /**\n * @member {boolean} gpuAccelerateSDF\n * When `true`, the SDF generation process will be GPU-accelerated with WebGL when possible,\n * making it much faster especially for complex glyphs, and falling back to a JavaScript version\n * executed in web workers when support isn't available. It should automatically detect support,\n * but it's still somewhat experimental, so you can set it to `false` to force it to use the JS\n * version if you encounter issues with it.\n */\n this.gpuAccelerateSDF = true;\n\n this.debugSDF = false;\n }\n\n /**\n * Updates the text rendering according to the current text-related configuration properties.\n * This is an async process, so you can pass in a callback function to be executed when it\n * finishes.\n * @param {function} [callback]\n */\n sync(callback) {\n if (this._needsSync) {\n this._needsSync = false;\n\n // If there's another sync still in progress, queue\n if (this._isSyncing) {\n (this._queuedSyncs || (this._queuedSyncs = [])).push(callback);\n } else {\n this._isSyncing = true;\n this.dispatchEvent(syncStartEvent);\n\n getTextRenderInfo({\n text: this.text,\n font: this.font,\n lang: this.lang,\n fontSize: this.fontSize || 0.1,\n fontWeight: this.fontWeight || 'normal',\n fontStyle: this.fontStyle || 'normal',\n letterSpacing: this.letterSpacing || 0,\n lineHeight: this.lineHeight || 'normal',\n maxWidth: this.maxWidth,\n direction: this.direction || 'auto',\n textAlign: this.textAlign,\n textIndent: this.textIndent,\n whiteSpace: this.whiteSpace,\n overflowWrap: this.overflowWrap,\n anchorX: this.anchorX,\n anchorY: this.anchorY,\n colorRanges: this.colorRanges,\n includeCaretPositions: true, //TODO parameterize\n sdfGlyphSize: this.sdfGlyphSize,\n gpuAccelerateSDF: this.gpuAccelerateSDF,\n unicodeFontsURL: this.unicodeFontsURL,\n }, textRenderInfo => {\n this._isSyncing = false;\n\n // Save result for later use in onBeforeRender\n this._textRenderInfo = textRenderInfo;\n\n // Update the geometry attributes\n this.geometry.updateGlyphs(\n textRenderInfo.glyphBounds,\n textRenderInfo.glyphAtlasIndices,\n textRenderInfo.blockBounds,\n textRenderInfo.chunkedBounds,\n textRenderInfo.glyphColors\n );\n\n // If we had extra sync requests queued up, kick it off\n const queued = this._queuedSyncs;\n if (queued) {\n this._queuedSyncs = null;\n this._needsSync = true;\n this.sync(() => {\n queued.forEach(fn => fn && fn());\n });\n }\n\n this.dispatchEvent(syncCompleteEvent);\n if (callback) {\n callback();\n }\n });\n }\n }\n }\n\n /**\n * Initiate a sync if needed - note it won't complete until next frame at the\n * earliest so if possible it's a good idea to call sync() manually as soon as\n * all the properties have been set.\n * @override\n */\n onBeforeRender(renderer, scene, camera, geometry, material, group) {\n this.sync();\n\n // This may not always be a text material, e.g. if there's a scene.overrideMaterial present\n if (material.isTroikaTextMaterial) {\n this._prepareForRender(material);\n }\n }\n\n /**\n * Shortcut to dispose the geometry specific to this instance.\n * Note: we don't also dispose the derived material here because if anything else is\n * sharing the same base material it will result in a pause next frame as the program\n * is recompiled. Instead users can dispose the base material manually, like normal,\n * and we'll also dispose the derived material at that time.\n */\n dispose() {\n this.geometry.dispose();\n }\n\n /**\n * @property {TroikaTextRenderInfo|null} textRenderInfo\n * @readonly\n * The current processed rendering data for this TextMesh, returned by the TextBuilder after\n * a `sync()` call. This will be `null` initially, and may be stale for a short period until\n * the asynchrous `sync()` process completes.\n */\n get textRenderInfo() {\n return this._textRenderInfo || null\n }\n\n /**\n * Create the text derived material from the base material. Can be overridden to use a custom\n * derived material.\n */\n createDerivedMaterial(baseMaterial) {\n return createTextDerivedMaterial(baseMaterial)\n }\n\n // Handler for automatically wrapping the base material with our upgrades. We do the wrapping\n // lazily on _read_ rather than write to avoid unnecessary wrapping on transient values.\n get material() {\n let derivedMaterial = this._derivedMaterial;\n const baseMaterial = this._baseMaterial || this._defaultMaterial || (this._defaultMaterial = defaultMaterial.clone());\n if (!derivedMaterial || !derivedMaterial.isDerivedFrom(baseMaterial)) {\n derivedMaterial = this._derivedMaterial = this.createDerivedMaterial(baseMaterial);\n // dispose the derived material when its base material is disposed:\n baseMaterial.addEventListener('dispose', function onDispose() {\n baseMaterial.removeEventListener('dispose', onDispose);\n derivedMaterial.dispose();\n });\n }\n // If text outline is configured, render it as a preliminary draw using Three's multi-material\n // feature (see GlyphsGeometry which sets up `groups` for this purpose) Doing it with multi\n // materials ensures the layers are always rendered consecutively in a consistent order.\n // Each layer will trigger onBeforeRender with the appropriate material.\n if (this.hasOutline()) {\n let outlineMaterial = derivedMaterial._outlineMtl;\n if (!outlineMaterial) {\n outlineMaterial = derivedMaterial._outlineMtl = Object.create(derivedMaterial, {\n id: {value: derivedMaterial.id + 0.1}\n });\n outlineMaterial.isTextOutlineMaterial = true;\n outlineMaterial.depthWrite = false;\n outlineMaterial.map = null; //???\n derivedMaterial.addEventListener('dispose', function onDispose() {\n derivedMaterial.removeEventListener('dispose', onDispose);\n outlineMaterial.dispose();\n });\n }\n return [\n outlineMaterial,\n derivedMaterial\n ]\n } else {\n return derivedMaterial\n }\n }\n set material(baseMaterial) {\n if (baseMaterial && baseMaterial.isTroikaTextMaterial) { //prevent double-derivation\n this._derivedMaterial = baseMaterial;\n this._baseMaterial = baseMaterial.baseMaterial;\n } else {\n this._baseMaterial = baseMaterial;\n }\n }\n\n hasOutline() {\n return !!(this.outlineWidth || this.outlineBlur || this.outlineOffsetX || this.outlineOffsetY)\n }\n\n get glyphGeometryDetail() {\n return this.geometry.detail\n }\n set glyphGeometryDetail(detail) {\n this.geometry.detail = detail;\n }\n\n get curveRadius() {\n return this.geometry.curveRadius\n }\n set curveRadius(r) {\n this.geometry.curveRadius = r;\n }\n\n // Create and update material for shadows upon request:\n get customDepthMaterial() {\n return first(this.material).getDepthMaterial()\n }\n set customDepthMaterial(m) {\n // future: let the user override with their own?\n }\n get customDistanceMaterial() {\n return first(this.material).getDistanceMaterial()\n }\n set customDistanceMaterial(m) {\n // future: let the user override with their own?\n }\n\n _prepareForRender(material) {\n const isOutline = material.isTextOutlineMaterial;\n const uniforms = material.uniforms;\n const textInfo = this.textRenderInfo;\n if (textInfo) {\n const {sdfTexture, blockBounds} = textInfo;\n uniforms.uTroikaSDFTexture.value = sdfTexture;\n uniforms.uTroikaSDFTextureSize.value.set(sdfTexture.image.width, sdfTexture.image.height);\n uniforms.uTroikaSDFGlyphSize.value = textInfo.sdfGlyphSize;\n uniforms.uTroikaSDFExponent.value = textInfo.sdfExponent;\n uniforms.uTroikaTotalBounds.value.fromArray(blockBounds);\n uniforms.uTroikaUseGlyphColors.value = !isOutline && !!textInfo.glyphColors;\n\n let distanceOffset = 0;\n let blurRadius = 0;\n let strokeWidth = 0;\n let fillOpacity;\n let strokeOpacity;\n let strokeColor;\n let offsetX = 0;\n let offsetY = 0;\n\n if (isOutline) {\n let {outlineWidth, outlineOffsetX, outlineOffsetY, outlineBlur, outlineOpacity} = this;\n distanceOffset = this._parsePercent(outlineWidth) || 0;\n blurRadius = Math.max(0, this._parsePercent(outlineBlur) || 0);\n fillOpacity = outlineOpacity;\n offsetX = this._parsePercent(outlineOffsetX) || 0;\n offsetY = this._parsePercent(outlineOffsetY) || 0;\n } else {\n strokeWidth = Math.max(0, this._parsePercent(this.strokeWidth) || 0);\n if (strokeWidth) {\n strokeColor = this.strokeColor;\n uniforms.uTroikaStrokeColor.value.set(strokeColor == null ? defaultStrokeColor : strokeColor);\n strokeOpacity = this.strokeOpacity;\n if (strokeOpacity == null) strokeOpacity = 1;\n }\n fillOpacity = this.fillOpacity;\n }\n\n uniforms.uTroikaEdgeOffset.value = distanceOffset;\n uniforms.uTroikaPositionOffset.value.set(offsetX, offsetY);\n uniforms.uTroikaBlurRadius.value = blurRadius;\n uniforms.uTroikaStrokeWidth.value = strokeWidth;\n uniforms.uTroikaStrokeOpacity.value = strokeOpacity;\n uniforms.uTroikaFillOpacity.value = fillOpacity == null ? 1 : fillOpacity;\n uniforms.uTroikaCurveRadius.value = this.curveRadius || 0;\n\n let clipRect = this.clipRect;\n if (clipRect && Array.isArray(clipRect) && clipRect.length === 4) {\n uniforms.uTroikaClipRect.value.fromArray(clipRect);\n } else {\n // no clipping - choose a finite rect that shouldn't ever be reached by overflowing glyphs or outlines\n const pad = (this.fontSize || 0.1) * 100;\n uniforms.uTroikaClipRect.value.set(\n blockBounds[0] - pad,\n blockBounds[1] - pad,\n blockBounds[2] + pad,\n blockBounds[3] + pad\n );\n }\n this.geometry.applyClipRect(uniforms.uTroikaClipRect.value);\n }\n uniforms.uTroikaSDFDebug.value = !!this.debugSDF;\n material.polygonOffset = !!this.depthOffset;\n material.polygonOffsetFactor = material.polygonOffsetUnits = this.depthOffset || 0;\n\n // Shortcut for setting material color via `color` prop on the mesh; this is\n // applied only to the derived material to avoid mutating a shared base material.\n const color = isOutline ? (this.outlineColor || 0) : this.color;\n\n if (color == null) {\n delete material.color; //inherit from base\n } else {\n const colorObj = material.hasOwnProperty('color') ? material.color : (material.color = new Color());\n if (color !== colorObj._input || typeof color === 'object') {\n colorObj.set(colorObj._input = color);\n }\n }\n\n // base orientation\n let orient = this.orientation || defaultOrient;\n if (orient !== material._orientation) {\n let rotMat = uniforms.uTroikaOrient.value;\n orient = orient.replace(/[^-+xyz]/g, '');\n let match = orient !== defaultOrient && orient.match(/^([-+])([xyz])([-+])([xyz])$/);\n if (match) {\n let [, hSign, hAxis, vSign, vAxis] = match;\n tempVec3a.set(0, 0, 0)[hAxis] = hSign === '-' ? 1 : -1;\n tempVec3b.set(0, 0, 0)[vAxis] = vSign === '-' ? -1 : 1;\n tempMat4.lookAt(origin, tempVec3a.cross(tempVec3b), tempVec3b);\n rotMat.setFromMatrix4(tempMat4);\n } else {\n rotMat.identity();\n }\n material._orientation = orient;\n }\n }\n\n _parsePercent(value) {\n if (typeof value === 'string') {\n let match = value.match(/^(-?[\\d.]+)%$/);\n let pct = match ? parseFloat(match[1]) : NaN;\n value = (isNaN(pct) ? 0 : pct / 100) * this.fontSize;\n }\n return value\n }\n\n /**\n * Translate a point in local space to an x/y in the text plane.\n */\n localPositionToTextCoords(position, target = new Vector2()) {\n target.copy(position); //simple non-curved case is 1:1\n const r = this.curveRadius;\n if (r) { //flatten the curve\n target.x = Math.atan2(position.x, Math.abs(r) - Math.abs(position.z)) * Math.abs(r);\n }\n return target\n }\n\n /**\n * Translate a point in world space to an x/y in the text plane.\n */\n worldPositionToTextCoords(position, target = new Vector2()) {\n tempVec3a.copy(position);\n return this.localPositionToTextCoords(this.worldToLocal(tempVec3a), target)\n }\n\n /**\n * @override Custom raycasting to test against the whole text block's max rectangular bounds\n * TODO is there any reason to make this more granular, like within individual line or glyph rects?\n */\n raycast(raycaster, intersects) {\n const {textRenderInfo, curveRadius} = this;\n if (textRenderInfo) {\n const bounds = textRenderInfo.blockBounds;\n const raycastMesh = curveRadius ? getCurvedRaycastMesh() : getFlatRaycastMesh();\n const geom = raycastMesh.geometry;\n const {position, uv} = geom.attributes;\n for (let i = 0; i < uv.count; i++) {\n let x = bounds[0] + (uv.getX(i) * (bounds[2] - bounds[0]));\n const y = bounds[1] + (uv.getY(i) * (bounds[3] - bounds[1]));\n let z = 0;\n if (curveRadius) {\n z = curveRadius - Math.cos(x / curveRadius) * curveRadius;\n x = Math.sin(x / curveRadius) * curveRadius;\n }\n position.setXYZ(i, x, y, z);\n }\n geom.boundingSphere = this.geometry.boundingSphere;\n geom.boundingBox = this.geometry.boundingBox;\n raycastMesh.matrixWorld = this.matrixWorld;\n raycastMesh.material.side = this.material.side;\n tempArray.length = 0;\n raycastMesh.raycast(raycaster, tempArray);\n for (let i = 0; i < tempArray.length; i++) {\n tempArray[i].object = this;\n intersects.push(tempArray[i]);\n }\n }\n }\n\n copy(source) {\n // Prevent copying the geometry reference so we don't end up sharing attributes between instances\n const geom = this.geometry;\n super.copy(source);\n this.geometry = geom;\n\n COPYABLE_PROPS.forEach(prop => {\n this[prop] = source[prop];\n });\n return this\n }\n\n clone() {\n return new this.constructor().copy(this)\n }\n}\n\n\n// Create setters for properties that affect text layout:\nSYNCABLE_PROPS.forEach(prop => {\n const privateKey = '_private_' + prop;\n Object.defineProperty(Text.prototype, prop, {\n get() {\n return this[privateKey]\n },\n set(value) {\n if (value !== this[privateKey]) {\n this[privateKey] = value;\n this._needsSync = true;\n }\n }\n });\n});\n\nconst syncStartEvent$1 = { type: \"syncstart\" };\nconst syncCompleteEvent$1 = { type: \"synccomplete\" };\nconst memberIndexAttrName = \"aTroikaTextBatchMemberIndex\";\n\n\n/*\nData texture packing strategy:\n\n# Common:\n0-15: matrix\n16-19: uTroikaTotalBounds\n20-23: uTroikaClipRect\n24: diffuse (color/outlineColor)\n25: uTroikaFillOpacity (fillOpacity/outlineOpacity)\n26: uTroikaCurveRadius\n27: <blank>\n\n# Main:\n28: uTroikaStrokeWidth\n29: uTroikaStrokeColor\n30: uTroikaStrokeOpacity\n\n# Outline:\n28-29: uTroikaPositionOffset\n30: uTroikaEdgeOffset\n31: uTroikaBlurRadius\n*/\nconst floatsPerMember = 32;\n\nconst tempBox3 = new Box3();\nconst tempColor$1 = new Color();\n\n/**\n * @experimental\n *\n * A specialized `Text` implementation that accepts any number of `Text` children\n * and automatically batches them together to render in a single draw call.\n *\n * The `material` of each child `Text` will be ignored, and the `material` of the\n * `BatchedText` will be used for all of them instead.\n *\n * NOTE: This only works in WebGL2 or where the OES_texture_float extension is available.\n */\nclass BatchedText extends Text {\n constructor () {\n super();\n\n /**\n * @typedef {Object} PackingInfo\n * @property {number} index - the packing order index when last packed, or -1\n * @property {boolean} dirty - whether it has synced since last pack\n */\n\n /**\n * @type {Map<Text, PackingInfo>}\n */\n this._members = new Map();\n this._dataTextures = {};\n\n this._onMemberSynced = (e) => {\n this._members.get(e.target).dirty = true;\n };\n }\n\n /**\n * @override\n * Batch any Text objects added as children\n */\n add (...objects) {\n for (let i = 0; i < objects.length; i++) {\n if (objects[i] instanceof Text) {\n this.addText(objects[i]);\n } else {\n super.add(objects[i]);\n }\n }\n return this;\n }\n\n /**\n * @override\n */\n remove (...objects) {\n for (let i = 0; i < objects.length; i++) {\n if (objects[i] instanceof Text) {\n this.removeText(objects[i]);\n } else {\n super.remove(objects[i]);\n }\n }\n return this;\n }\n\n /**\n * @param {Text} text\n */\n addText (text) {\n if (!this._members.has(text)) {\n this._members.set(text, {\n index: -1,\n glyphCount: -1,\n dirty: true\n });\n text.addEventListener(\"synccomplete\", this._onMemberSynced);\n }\n }\n\n /**\n * @param {Text} text\n */\n removeText (text) {\n this._needsRepack = true;\n text.removeEventListener(\"synccomplete\", this._onMemberSynced);\n this._members.delete(text);\n }\n\n /**\n * Use the custom derivation with extra batching logic\n */\n createDerivedMaterial (baseMaterial) {\n return createBatchedTextMaterial(baseMaterial);\n }\n\n updateMatrixWorld (force) {\n super.updateMatrixWorld(force);\n this.updateBounds();\n }\n\n /**\n * Update the batched geometry bounds to hold all members\n */\n updateBounds () {\n // Update member local matrices and the overall bounds\n const bbox = this.geometry.boundingBox.makeEmpty();\n this._members.forEach((_, text) => {\n if (text.matrixAutoUpdate) text.updateMatrix(); // ignore world matrix\n tempBox3.copy(text.geometry.boundingBox).applyMatrix4(text.matrix);\n bbox.union(tempBox3);\n });\n bbox.getBoundingSphere(this.geometry.boundingSphere);\n }\n\n /** @override */\n hasOutline() {\n // Iterator.some() not supported in Safari\n for (let member of this._members.keys()) {\n if (member.hasOutline()) return true;\n }\n return false;\n }\n\n /**\n * @override\n * Copy member matrices and uniform values into the data texture\n */\n _prepareForRender (material) {\n const isOutline = material.isTextOutlineMaterial;\n material.uniforms.uTroikaIsOutline.value = isOutline;\n\n // Resize the texture to fit in powers of 2\n let texture = this._dataTextures[isOutline ? 'outline' : 'main'];\n const dataLength = Math.pow(2, Math.ceil(Math.log2(this._members.size * floatsPerMember)));\n if (!texture || dataLength !== texture.image.data.length) {\n // console.log(`resizing: ${dataLength}`);\n if (texture) texture.dispose();\n const width = Math.min(dataLength / 4, 1024);\n texture = this._dataTextures[isOutline ? 'outline' : 'main'] = new DataTexture(\n new Float32Array(dataLength),\n width,\n dataLength / 4 / width,\n RGBAFormat,\n FloatType\n );\n }\n\n const texData = texture.image.data;\n const setTexData = (index, value) => {\n if (value !== texData[index]) {\n texData[index] = value;\n texture.needsUpdate = true;\n }\n };\n this._members.forEach(({ index, dirty }, text) => {\n if (index > -1) {\n const startIndex = index * floatsPerMember;\n\n // Matrix\n const matrix = text.matrix.elements;\n for (let i = 0; i < 16; i++) {\n setTexData(startIndex + i, matrix[i]);\n }\n\n // Let the member populate the uniforms, since that does all the appropriate\n // logic and handling of defaults, and we'll just grab the results from there\n text._prepareForRender(material);\n const {\n uTroikaTotalBounds,\n uTroikaClipRect,\n uTroikaPositionOffset,\n uTroikaEdgeOffset,\n uTroikaBlurRadius,\n uTroikaStrokeWidth,\n uTroikaStrokeColor,\n uTroikaStrokeOpacity,\n uTroikaFillOpacity,\n uTroikaCurveRadius,\n } = material.uniforms;\n\n // Total bounds for uv\n for (let i = 0; i < 4; i++) {\n setTexData(startIndex + 16 + i, uTroikaTotalBounds.value.getComponent(i));\n }\n\n // Clip rect\n for (let i = 0; i < 4; i++) {\n setTexData(startIndex + 20 + i, uTroikaClipRect.value.getComponent(i));\n }\n\n // Color\n let color = isOutline ? (text.outlineColor || 0) : text.color;\n if (color == null) color = this.color;\n if (color == null) color = this.material.color;\n if (color == null) color = 0xffffff;\n setTexData(startIndex + 24, tempColor$1.set(color).getHex());\n\n // Fill opacity / outline opacity\n setTexData(startIndex + 25, uTroikaFillOpacity.value);\n\n // Curve radius\n setTexData(startIndex + 26, uTroikaCurveRadius.value);\n\n if (isOutline) {\n // Outline properties\n setTexData(startIndex + 28, uTroikaPositionOffset.value.x);\n setTexData(startIndex + 29, uTroikaPositionOffset.value.y);\n setTexData(startIndex + 30, uTroikaEdgeOffset.value);\n setTexData(startIndex + 31, uTroikaBlurRadius.value);\n } else {\n // Stroke properties\n setTexData(startIndex + 28, uTroikaStrokeWidth.value);\n setTexData(startIndex + 29, tempColor$1.set(uTroikaStrokeColor.value).getHex());\n setTexData(startIndex + 30, uTroikaStrokeOpacity.value);\n }\n }\n });\n material.setMatrixTexture(texture);\n\n // For the non-member-specific uniforms:\n super._prepareForRender(material);\n }\n\n sync (callback) {\n // TODO: skip members updating their geometries, just use textRenderInfo directly\n\n // Trigger sync on all members that need it\n let syncPromises = this._needsRepack ? [] : null;\n this._needsRepack = false;\n this._members.forEach((packingInfo, text) => {\n if (packingInfo.dirty || text._needsSync) {\n packingInfo.dirty = false;\n (syncPromises || (syncPromises = [])).push(new Promise(resolve => {\n if (text._needsSync) {\n text.sync(resolve);\n } else {\n resolve();\n }\n }));\n }\n });\n\n // If any needed syncing, wait for them and then repack the batched geometry\n if (syncPromises) {\n this.dispatchEvent(syncStartEvent$1);\n\n Promise.all(syncPromises).then(() => {\n const { geometry } = this;\n const batchedAttributes = geometry.attributes;\n let memberIndexes = batchedAttributes[memberIndexAttrName] && batchedAttributes[memberIndexAttrName].array || new Uint16Array(0);\n let batchedGlyphIndexes = batchedAttributes[glyphIndexAttrName] && batchedAttributes[glyphIndexAttrName].array || new Float32Array(0);\n let batchedGlyphBounds = batchedAttributes[glyphBoundsAttrName] && batchedAttributes[glyphBoundsAttrName].array || new Float32Array(0);\n\n // Initial pass to collect total glyph count and resize the arrays if needed\n let totalGlyphCount = 0;\n this._members.forEach((packingInfo, { textRenderInfo }) => {\n if (textRenderInfo) {\n totalGlyphCount += textRenderInfo.glyphAtlasIndices.length;\n this._textRenderInfo = textRenderInfo; // TODO - need this, but be smarter\n }\n });\n if (totalGlyphCount !== memberIndexes.length) {\n memberIndexes = cloneAndResize(memberIndexes, totalGlyphCount);\n batchedGlyphIndexes = cloneAndResize(batchedGlyphIndexes, totalGlyphCount);\n batchedGlyphBounds = cloneAndResize(batchedGlyphBounds, totalGlyphCount * 4);\n }\n\n // Populate batch arrays\n let memberIndex = 0;\n let glyphIndex = 0;\n this._members.forEach((packingInfo, { textRenderInfo }) => {\n if (textRenderInfo) {\n const glyphCount = textRenderInfo.glyphAtlasIndices.length;\n memberIndexes.fill(memberIndex, glyphIndex, glyphIndex + glyphCount);\n\n // TODO can skip these for members that are not dirty or shifting overall position:\n batchedGlyphIndexes.set(textRenderInfo.glyphAtlasIndices, glyphIndex, glyphIndex + glyphCount);\n batchedGlyphBounds.set(textRenderInfo.glyphBounds, glyphIndex * 4, (glyphIndex + glyphCount) * 4);\n\n glyphIndex += glyphCount;\n packingInfo.index = memberIndex++;\n }\n });\n\n // Update the geometry attributes\n geometry.updateAttributeData(memberIndexAttrName, memberIndexes, 1);\n geometry.getAttribute(memberIndexAttrName).setUsage(DynamicDrawUsage);\n geometry.updateAttributeData(glyphIndexAttrName, batchedGlyphIndexes, 1);\n geometry.updateAttributeData(glyphBoundsAttrName, batchedGlyphBounds, 4);\n\n this.updateBounds();\n\n this.dispatchEvent(syncCompleteEvent$1);\n if (callback) {\n callback();\n }\n });\n }\n }\n\n copy (source) {\n if (source instanceof BatchedText) {\n super.copy(source);\n this._members.forEach((_, text) => this.removeText(text));\n source._members.forEach((_, text) => this.addText(text));\n }\n return this;\n }\n\n dispose () {\n super.dispose();\n Object.values(this._dataTextures).forEach(tex => tex.dispose());\n }\n}\n\nfunction cloneAndResize (source, newLength) {\n const copy = new source.constructor(newLength);\n copy.set(source.subarray(0, newLength));\n return copy;\n}\n\nfunction createBatchedTextMaterial (baseMaterial) {\n const texUniformName = \"uTroikaMatricesTexture\";\n const texSizeUniformName = \"uTroikaMatricesTextureSize\";\n\n // Due to how vertexTransform gets injected, the matrix transforms must happen\n // in the base material of TextDerivedMaterial, but other transforms to its\n // shader must come after, so we sandwich it between two derivations.\n\n // Transform the vertex position\n let batchMaterial = createDerivedMaterial(baseMaterial, {\n chained: true,\n uniforms: {\n [texSizeUniformName]: { value: new Vector2() },\n [texUniformName]: { value: null }\n },\n // language=GLSL\n vertexDefs: `\n uniform highp sampler2D ${texUniformName};\n uniform vec2 ${texSizeUniformName};\n attribute float ${memberIndexAttrName};\n\n vec4 troikaBatchTexel(float offset) {\n offset += ${memberIndexAttrName} * ${floatsPerMember.toFixed(1)} / 4.0;\n float w = ${texSizeUniformName}.x;\n vec2 uv = (vec2(mod(offset, w), floor(offset / w)) + 0.5) / ${texSizeUniformName};\n return texture2D(${texUniformName}, uv);\n }\n `,\n // language=GLSL prefix=\"void main() {\" suffix=\"}\"\n vertexTransform: `\n mat4 matrix = mat4(\n troikaBatchTexel(0.0),\n troikaBatchTexel(1.0),\n troikaBatchTexel(2.0),\n troikaBatchTexel(3.0)\n );\n position.xyz = (matrix * vec4(position, 1.0)).xyz;\n `,\n });\n\n // Add the text shaders\n batchMaterial = createTextDerivedMaterial(batchMaterial);\n\n // Now make other changes to the derived text shader code\n batchMaterial = createDerivedMaterial(batchMaterial, {\n chained: true,\n uniforms: {\n uTroikaIsOutline: {value: false},\n },\n customRewriter(shaders) {\n // Convert some text shader uniforms to varyings\n const varyingUniforms = [\n 'uTroikaTotalBounds',\n 'uTroikaClipRect',\n 'uTroikaPositionOffset',\n 'uTroikaEdgeOffset',\n 'uTroikaBlurRadius',\n 'uTroikaStrokeWidth',\n 'uTroikaStrokeColor',\n 'uTroikaStrokeOpacity',\n 'uTroikaFillOpacity',\n 'uTroikaCurveRadius',\n 'diffuse'\n ];\n varyingUniforms.forEach(uniformName => {\n shaders = uniformToVarying(shaders, uniformName);\n });\n return shaders\n },\n // language=GLSL\n vertexDefs: `\n uniform bool uTroikaIsOutline;\n vec3 troikaFloatToColor(float v) {\n return mod(floor(vec3(v / 65536.0, v / 256.0, v)), 256.0) / 256.0;\n }\n `,\n // language=GLSL prefix=\"void main() {\" suffix=\"}\"\n vertexTransform: `\n uTroikaTotalBounds = troikaBatchTexel(4.0);\n uTroikaClipRect = troikaBatchTexel(5.0);\n \n vec4 data = troikaBatchTexel(6.0);\n diffuse = troikaFloatToColor(data.x);\n uTroikaFillOpacity = data.y;\n uTroikaCurveRadius = data.z;\n \n data = troikaBatchTexel(7.0);\n if (uTroikaIsOutline) {\n if (data == vec4(0.0)) { // degenerate if zero outline\n position = vec3(0.0);\n } else {\n uTroikaPositionOffset = data.xy;\n uTroikaEdgeOffset = data.z;\n uTroikaBlurRadius = data.w;\n }\n } else {\n uTroikaStrokeWidth = data.x;\n uTroikaStrokeColor = troikaFloatToColor(data.y);\n uTroikaStrokeOpacity = data.z;\n }\n `,\n });\n\n batchMaterial.setMatrixTexture = (texture) => {\n batchMaterial.uniforms[texUniformName].value = texture;\n batchMaterial.uniforms[texSizeUniformName].value.set(texture.image.width, texture.image.height);\n };\n return batchMaterial;\n}\n\n/**\n * Turn a uniform into a varying/writeable value.\n * - If the uniform was used in the fragment shader, it will become a varying in both shaders.\n * - If the uniform was only used in the vertex shader, it will become a writeable var.\n */\nfunction uniformToVarying({vertexShader, fragmentShader}, uniformName, varyingName = uniformName) {\n const uniformRE = new RegExp(`uniform\\\\s+(bool|float|vec[234]|mat[34])\\\\s+${uniformName}\\\\b`);\n\n let type;\n let hadFragmentUniform = false;\n fragmentShader = fragmentShader.replace(uniformRE, ($0, $1) => {\n hadFragmentUniform = true;\n return `varying ${type = $1} ${varyingName}`\n });\n\n let hadVertexUniform = false;\n vertexShader = vertexShader.replace(uniformRE, (_, $1) => {\n hadVertexUniform = true;\n return `${hadFragmentUniform ? 'varying' : ''} ${type = $1} ${varyingName}`\n });\n if (!hadVertexUniform) {\n vertexShader = `${hadFragmentUniform ? 'varying' : ''} ${type} ${varyingName};\\n${vertexShader}`;\n }\n return {vertexShader, fragmentShader}\n}\n\n//=== Utility functions for dealing with carets and selection ranges ===//\n\n/**\n * @typedef {object} TextCaret\n * @property {number} x - x position of the caret\n * @property {number} y - y position of the caret's bottom\n * @property {number} height - height of the caret\n * @property {number} charIndex - the index in the original input string of this caret's target\n * character; the caret will be for the position _before_ that character.\n */\n\n/**\n * Given a local x/y coordinate in the text block plane, find the nearest caret position.\n * @param {TroikaTextRenderInfo} textRenderInfo - a result object from TextBuilder#getTextRenderInfo\n * @param {number} x\n * @param {number} y\n * @return {TextCaret | null}\n */\nfunction getCaretAtPoint(textRenderInfo, x, y) {\n let closestCaret = null;\n const rows = groupCaretsByRow(textRenderInfo);\n\n // Find nearest row by y first\n let closestRow = null;\n rows.forEach(row => {\n if (!closestRow || Math.abs(y - (row.top + row.bottom) / 2) < Math.abs(y - (closestRow.top + closestRow.bottom) / 2)) {\n closestRow = row;\n }\n });\n\n // Then find closest caret by x within that row\n closestRow.carets.forEach(caret => {\n if (!closestCaret || Math.abs(x - caret.x) < Math.abs(x - closestCaret.x)) {\n closestCaret = caret;\n }\n });\n return closestCaret\n}\n\n\nconst _rectsCache = new WeakMap();\n\n/**\n * Given start and end character indexes, return a list of rectangles covering all the\n * characters within that selection.\n * @param {TroikaTextRenderInfo} textRenderInfo\n * @param {number} start - index of the first char in the selection\n * @param {number} end - index of the first char after the selection\n * @return {Array<{left, top, right, bottom}> | null}\n */\nfunction getSelectionRects(textRenderInfo, start, end) {\n let rects;\n if (textRenderInfo) {\n // Check cache - textRenderInfo is frozen so it's safe to cache based on it\n let prevResult = _rectsCache.get(textRenderInfo);\n if (prevResult && prevResult.start === start && prevResult.end === end) {\n return prevResult.rects\n }\n\n const {caretPositions} = textRenderInfo;\n\n // Normalize\n if (end < start) {\n const s = start;\n start = end;\n end = s;\n }\n start = Math.max(start, 0);\n end = Math.min(end, caretPositions.length + 1);\n\n // Build list of rects, expanding the current rect for all characters in a run and starting\n // a new rect whenever reaching a new line or a new bidi direction\n rects = [];\n let currentRect = null;\n for (let i = start; i < end; i++) {\n const x1 = caretPositions[i * 4];\n const x2 = caretPositions[i * 4 + 1];\n const left = Math.min(x1, x2);\n const right = Math.max(x1, x2);\n const bottom = caretPositions[i * 4 + 2];\n const top = caretPositions[i * 4 + 3];\n if (!currentRect || bottom !== currentRect.bottom || top !== currentRect.top || left > currentRect.right || right < currentRect.left) {\n currentRect = {\n left: Infinity,\n right: -Infinity,\n bottom,\n top,\n };\n rects.push(currentRect);\n }\n currentRect.left = Math.min(left, currentRect.left);\n currentRect.right = Math.max(right, currentRect.right);\n }\n\n // Merge any overlapping rects, e.g. those formed by adjacent bidi runs\n rects.sort((a, b) => b.bottom - a.bottom || a.left - b.left);\n for (let i = rects.length - 1; i-- > 0;) {\n const rectA = rects[i];\n const rectB = rects[i + 1];\n if (rectA.bottom === rectB.bottom && rectA.top === rectB.top && rectA.left <= rectB.right && rectA.right >= rectB.left) {\n rectB.left = Math.min(rectB.left, rectA.left);\n rectB.right = Math.max(rectB.right, rectA.right);\n rects.splice(i, 1);\n }\n }\n\n _rectsCache.set(textRenderInfo, {start, end, rects});\n }\n return rects\n}\n\nconst _caretsByRowCache = new WeakMap();\n\n/**\n * Group a set of carets by row of text, caching the result. A single row of text may contain carets of\n * differing positions/heights if it has multiple fonts, and they may overlap slightly across rows, so this\n * uses an assumption of \"at least overlapping by half\" to put them in the same row.\n * @return Array<{bottom: number, top: number, carets: TextCaret[]}>\n */\nfunction groupCaretsByRow(textRenderInfo) {\n // textRenderInfo is frozen so it's safe to cache based on it\n let rows = _caretsByRowCache.get(textRenderInfo);\n if (!rows) {\n rows = [];\n const {caretPositions} = textRenderInfo;\n let curRow;\n\n const visitCaret = (x, bottom, top, charIndex) => {\n // new row if not overlapping by at least half\n if (!curRow || (top < (curRow.top + curRow.bottom) / 2)) {\n rows.push(curRow = {bottom, top, carets: []});\n }\n // expand vertical limits if necessary\n if (top > curRow.top) curRow.top = top;\n if (bottom < curRow.bottom) curRow.bottom = bottom;\n curRow.carets.push({\n x,\n y: bottom,\n height: top - bottom,\n charIndex,\n });\n };\n\n let i = 0;\n for (; i < caretPositions.length; i += 4) {\n visitCaret(caretPositions[i], caretPositions[i + 2], caretPositions[i + 3], i / 4);\n }\n // Add one more caret after the final char\n visitCaret(caretPositions[i - 3], caretPositions[i - 2], caretPositions[i - 1], i / 4);\n }\n _caretsByRowCache.set(textRenderInfo, rows);\n return rows\n}\n\nexport { BatchedText, GlyphsGeometry, Text, configureTextBuilder, createTextDerivedMaterial, dumpSDFTextures, fontResolverWorkerModule, getCaretAtPoint, getSelectionRects, getTextRenderInfo, preloadFont, typesetterWorkerModule };\n", "/**\n * Main content for the worker that handles the loading and execution of\n * modules within it.\n */\nfunction workerBootstrap() {\n var modules = Object.create(null);\n\n // Handle messages for registering a module\n function registerModule(ref, callback) {\n var id = ref.id;\n var name = ref.name;\n var dependencies = ref.dependencies; if ( dependencies === void 0 ) dependencies = [];\n var init = ref.init; if ( init === void 0 ) init = function(){};\n var getTransferables = ref.getTransferables; if ( getTransferables === void 0 ) getTransferables = null;\n\n // Only register once\n if (modules[id]) { return }\n\n try {\n // If any dependencies are modules, ensure they're registered and grab their value\n dependencies = dependencies.map(function (dep) {\n if (dep && dep.isWorkerModule) {\n registerModule(dep, function (depResult) {\n if (depResult instanceof Error) { throw depResult }\n });\n dep = modules[dep.id].value;\n }\n return dep\n });\n\n // Rehydrate functions\n init = rehydrate((\"<\" + name + \">.init\"), init);\n if (getTransferables) {\n getTransferables = rehydrate((\"<\" + name + \">.getTransferables\"), getTransferables);\n }\n\n // Initialize the module and store its value\n var value = null;\n if (typeof init === 'function') {\n value = init.apply(void 0, dependencies);\n } else {\n console.error('worker module init function failed to rehydrate');\n }\n modules[id] = {\n id: id,\n value: value,\n getTransferables: getTransferables\n };\n callback(value);\n } catch(err) {\n if (!(err && err.noLog)) {\n console.error(err);\n }\n callback(err);\n }\n }\n\n // Handle messages for calling a registered module's result function\n function callModule(ref, callback) {\n var ref$1;\n\n var id = ref.id;\n var args = ref.args;\n if (!modules[id] || typeof modules[id].value !== 'function') {\n callback(new Error((\"Worker module \" + id + \": not found or its 'init' did not return a function\")));\n }\n try {\n var result = (ref$1 = modules[id]).value.apply(ref$1, args);\n if (result && typeof result.then === 'function') {\n result.then(handleResult, function (rej) { return callback(rej instanceof Error ? rej : new Error('' + rej)); });\n } else {\n handleResult(result);\n }\n } catch(err) {\n callback(err);\n }\n function handleResult(result) {\n try {\n var tx = modules[id].getTransferables && modules[id].getTransferables(result);\n if (!tx || !Array.isArray(tx) || !tx.length) {\n tx = undefined; //postMessage is very picky about not passing null or empty transferables\n }\n callback(result, tx);\n } catch(err) {\n console.error(err);\n callback(err);\n }\n }\n }\n\n function rehydrate(name, str) {\n var result = void 0;\n self.troikaDefine = function (r) { return result = r; };\n var url = URL.createObjectURL(\n new Blob(\n [(\"/** \" + (name.replace(/\\*/g, '')) + \" **/\\n\\ntroikaDefine(\\n\" + str + \"\\n)\")],\n {type: 'application/javascript'}\n )\n );\n try {\n importScripts(url);\n } catch(err) {\n console.error(err);\n }\n URL.revokeObjectURL(url);\n delete self.troikaDefine;\n return result\n }\n\n // Handler for all messages within the worker\n self.addEventListener('message', function (e) {\n var ref = e.data;\n var messageId = ref.messageId;\n var action = ref.action;\n var data = ref.data;\n try {\n // Module registration\n if (action === 'registerModule') {\n registerModule(data, function (result) {\n if (result instanceof Error) {\n postMessage({\n messageId: messageId,\n success: false,\n error: result.message\n });\n } else {\n postMessage({\n messageId: messageId,\n success: true,\n result: {isCallable: typeof result === 'function'}\n });\n }\n });\n }\n // Invocation\n if (action === 'callModule') {\n callModule(data, function (result, transferables) {\n if (result instanceof Error) {\n postMessage({\n messageId: messageId,\n success: false,\n error: result.message\n });\n } else {\n postMessage({\n messageId: messageId,\n success: true,\n result: result\n }, transferables || undefined);\n }\n });\n }\n } catch(err) {\n postMessage({\n messageId: messageId,\n success: false,\n error: err.stack\n });\n }\n });\n}\n\n/**\n * Fallback for `defineWorkerModule` that behaves identically but runs in the main\n * thread, for when the execution environment doesn't support web workers or they\n * are disallowed due to e.g. CSP security restrictions.\n */\nfunction defineMainThreadModule(options) {\n var moduleFunc = function() {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n return moduleFunc._getInitResult().then(function (initResult) {\n if (typeof initResult === 'function') {\n return initResult.apply(void 0, args)\n } else {\n throw new Error('Worker module function was called but `init` did not return a callable function')\n }\n })\n };\n moduleFunc._getInitResult = function() {\n // We can ignore getTransferables in main thread. TODO workerId?\n var dependencies = options.dependencies;\n var init = options.init;\n\n // Resolve dependencies\n dependencies = Array.isArray(dependencies) ? dependencies.map(function (dep) {\n if (dep) {\n // If it's a worker module, use its main thread impl\n dep = dep.onMainThread || dep;\n // If it's a main thread worker module, use its init return value\n if (dep._getInitResult) {\n dep = dep._getInitResult();\n }\n }\n return dep\n }) : [];\n\n // Invoke init with the resolved dependencies\n var initPromise = Promise.all(dependencies).then(function (deps) {\n return init.apply(null, deps)\n });\n\n // Cache the resolved promise for subsequent calls\n moduleFunc._getInitResult = function () { return initPromise; };\n\n return initPromise\n };\n return moduleFunc\n}\n\nvar supportsWorkers = function () {\n var supported = false;\n\n // Only attempt worker initialization in browsers; elsewhere it would just be\n // noise e.g. loading into a Node environment for SSR.\n if (typeof window !== 'undefined' && typeof window.document !== 'undefined') {\n try {\n // TODO additional checks for things like importScripts within the worker?\n // Would need to be an async check.\n var worker = new Worker(\n URL.createObjectURL(new Blob([''], { type: 'application/javascript' }))\n );\n worker.terminate();\n supported = true;\n } catch (err) {\n if (typeof process !== 'undefined' && process.env.NODE_ENV === 'test') ; else {\n console.log(\n (\"Troika createWorkerModule: web workers not allowed; falling back to main thread execution. Cause: [\" + (err.message) + \"]\")\n );\n }\n }\n }\n\n // Cached result\n supportsWorkers = function () { return supported; };\n return supported\n};\n\nvar _workerModuleId = 0;\nvar _messageId = 0;\nvar _allowInitAsString = false;\nvar workers = Object.create(null);\nvar registeredModules = Object.create(null); //workerId -> Set<unregisterFn>\nvar openRequests = Object.create(null);\n\n\n/**\n * Define a module of code that will be executed with a web worker. This provides a simple\n * interface for moving chunks of logic off the main thread, and managing their dependencies\n * among one another.\n *\n * @param {object} options\n * @param {function} options.init\n * @param {array} [options.dependencies]\n * @param {function} [options.getTransferables]\n * @param {string} [options.name]\n * @param {string} [options.workerId]\n * @return {function(...[*]): {then}}\n */\nfunction defineWorkerModule(options) {\n if ((!options || typeof options.init !== 'function') && !_allowInitAsString) {\n throw new Error('requires `options.init` function')\n }\n var dependencies = options.dependencies;\n var init = options.init;\n var getTransferables = options.getTransferables;\n var workerId = options.workerId;\n\n var onMainThread = defineMainThreadModule(options);\n\n if (workerId == null) {\n workerId = '#default';\n }\n var id = \"workerModule\" + (++_workerModuleId);\n var name = options.name || id;\n var registrationPromise = null;\n\n dependencies = dependencies && dependencies.map(function (dep) {\n // Wrap raw functions as worker modules with no dependencies\n if (typeof dep === 'function' && !dep.workerModuleData) {\n _allowInitAsString = true;\n dep = defineWorkerModule({\n workerId: workerId,\n name: (\"<\" + name + \"> function dependency: \" + (dep.name)),\n init: (\"function(){return (\\n\" + (stringifyFunction(dep)) + \"\\n)}\")\n });\n _allowInitAsString = false;\n }\n // Grab postable data for worker modules\n if (dep && dep.workerModuleData) {\n dep = dep.workerModuleData;\n }\n return dep\n });\n\n function moduleFunc() {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n if (!supportsWorkers()) {\n return onMainThread.apply(void 0, args)\n }\n\n // Register this module if needed\n if (!registrationPromise) {\n registrationPromise = callWorker(workerId,'registerModule', moduleFunc.workerModuleData);\n var unregister = function () {\n registrationPromise = null;\n registeredModules[workerId].delete(unregister);\n }\n ;(registeredModules[workerId] || (registeredModules[workerId] = new Set())).add(unregister);\n }\n\n // Invoke the module, returning a promise\n return registrationPromise.then(function (ref) {\n var isCallable = ref.isCallable;\n\n if (isCallable) {\n return callWorker(workerId,'callModule', {id: id, args: args})\n } else {\n throw new Error('Worker module function was called but `init` did not return a callable function')\n }\n })\n }\n moduleFunc.workerModuleData = {\n isWorkerModule: true,\n id: id,\n name: name,\n dependencies: dependencies,\n init: stringifyFunction(init),\n getTransferables: getTransferables && stringifyFunction(getTransferables)\n };\n\n moduleFunc.onMainThread = onMainThread;\n\n return moduleFunc\n}\n\n/**\n * Terminate an active Worker by a workerId that was passed to defineWorkerModule.\n * This only terminates the Worker itself; the worker module will remain available\n * and if you call it again its Worker will be respawned.\n * @param {string} workerId\n */\nfunction terminateWorker(workerId) {\n // Unregister all modules that were registered in that worker\n if (registeredModules[workerId]) {\n registeredModules[workerId].forEach(function (unregister) {\n unregister();\n });\n }\n // Terminate the Worker object\n if (workers[workerId]) {\n workers[workerId].terminate();\n delete workers[workerId];\n }\n}\n\n/**\n * Stringifies a function into a form that can be deserialized in the worker\n * @param fn\n */\nfunction stringifyFunction(fn) {\n var str = fn.toString();\n // If it was defined in object method/property format, it needs to be modified\n if (!/^function/.test(str) && /^\\w+\\s*\\(/.test(str)) {\n str = 'function ' + str;\n }\n return str\n}\n\n\nfunction getWorker(workerId) {\n var worker = workers[workerId];\n if (!worker) {\n // Bootstrap the worker's content\n var bootstrap = stringifyFunction(workerBootstrap);\n\n // Create the worker from the bootstrap function content\n worker = workers[workerId] = new Worker(\n URL.createObjectURL(\n new Blob(\n [(\"/** Worker Module Bootstrap: \" + (workerId.replace(/\\*/g, '')) + \" **/\\n\\n;(\" + bootstrap + \")()\")],\n {type: 'application/javascript'}\n )\n )\n );\n\n // Single handler for response messages from the worker\n worker.onmessage = function (e) {\n var response = e.data;\n var msgId = response.messageId;\n var callback = openRequests[msgId];\n if (!callback) {\n throw new Error('WorkerModule response with empty or unknown messageId')\n }\n delete openRequests[msgId];\n callback(response);\n };\n }\n return worker\n}\n\n// Issue a call to the worker with a callback to handle the response\nfunction callWorker(workerId, action, data) {\n return new Promise(function (resolve, reject) {\n var messageId = ++_messageId;\n openRequests[messageId] = function (response) {\n if (response.success) {\n resolve(response.result);\n } else {\n reject(new Error((\"Error in worker \" + action + \" call: \" + (response.error))));\n }\n };\n getWorker(workerId).postMessage({\n messageId: messageId,\n action: action,\n data: data\n });\n })\n}\n\nexport { defineWorkerModule, stringifyFunction, terminateWorker };\n", "function SDFGenerator() {\nvar exports = (function (exports) {\n\n /**\n * Find the point on a quadratic bezier curve at t where t is in the range [0, 1]\n */\n function pointOnQuadraticBezier (x0, y0, x1, y1, x2, y2, t, pointOut) {\n var t2 = 1 - t;\n pointOut.x = t2 * t2 * x0 + 2 * t2 * t * x1 + t * t * x2;\n pointOut.y = t2 * t2 * y0 + 2 * t2 * t * y1 + t * t * y2;\n }\n\n /**\n * Find the point on a cubic bezier curve at t where t is in the range [0, 1]\n */\n function pointOnCubicBezier (x0, y0, x1, y1, x2, y2, x3, y3, t, pointOut) {\n var t2 = 1 - t;\n pointOut.x = t2 * t2 * t2 * x0 + 3 * t2 * t2 * t * x1 + 3 * t2 * t * t * x2 + t * t * t * x3;\n pointOut.y = t2 * t2 * t2 * y0 + 3 * t2 * t2 * t * y1 + 3 * t2 * t * t * y2 + t * t * t * y3;\n }\n\n /**\n * Parse a path string into its constituent line/curve commands, invoking a callback for each.\n * @param {string} pathString - An SVG-like path string to parse; should only contain commands: M/L/Q/C/Z\n * @param {function(\n * command: 'L'|'Q'|'C',\n * startX: number,\n * startY: number,\n * endX: number,\n * endY: number,\n * ctrl1X?: number,\n * ctrl1Y?: number,\n * ctrl2X?: number,\n * ctrl2Y?: number\n * )} commandCallback - A callback function that will be called once for each parsed path command, passing the\n * command identifier (only L/Q/C commands) and its numeric arguments.\n */\n function forEachPathCommand(pathString, commandCallback) {\n var segmentRE = /([MLQCZ])([^MLQCZ]*)/g;\n var match, firstX, firstY, prevX, prevY;\n while ((match = segmentRE.exec(pathString))) {\n var args = match[2]\n .replace(/^\\s*|\\s*$/g, '')\n .split(/[,\\s]+/)\n .map(function (v) { return parseFloat(v); });\n switch (match[1]) {\n case 'M':\n prevX = firstX = args[0];\n prevY = firstY = args[1];\n break\n case 'L':\n if (args[0] !== prevX || args[1] !== prevY) { // yup, some fonts have zero-length line commands\n commandCallback('L', prevX, prevY, (prevX = args[0]), (prevY = args[1]));\n }\n break\n case 'Q': {\n commandCallback('Q', prevX, prevY, (prevX = args[2]), (prevY = args[3]), args[0], args[1]);\n break\n }\n case 'C': {\n commandCallback('C', prevX, prevY, (prevX = args[4]), (prevY = args[5]), args[0], args[1], args[2], args[3]);\n break\n }\n case 'Z':\n if (prevX !== firstX || prevY !== firstY) {\n commandCallback('L', prevX, prevY, firstX, firstY);\n }\n break\n }\n }\n }\n\n /**\n * Convert a path string to a series of straight line segments\n * @param {string} pathString - An SVG-like path string to parse; should only contain commands: M/L/Q/C/Z\n * @param {function(x1:number, y1:number, x2:number, y2:number)} segmentCallback - A callback\n * function that will be called once for every line segment\n * @param {number} [curvePoints] - How many straight line segments to use when approximating a\n * bezier curve in the path. Defaults to 16.\n */\n function pathToLineSegments (pathString, segmentCallback, curvePoints) {\n if ( curvePoints === void 0 ) curvePoints = 16;\n\n var tempPoint = { x: 0, y: 0 };\n forEachPathCommand(pathString, function (command, startX, startY, endX, endY, ctrl1X, ctrl1Y, ctrl2X, ctrl2Y) {\n switch (command) {\n case 'L':\n segmentCallback(startX, startY, endX, endY);\n break\n case 'Q': {\n var prevCurveX = startX;\n var prevCurveY = startY;\n for (var i = 1; i < curvePoints; i++) {\n pointOnQuadraticBezier(\n startX, startY,\n ctrl1X, ctrl1Y,\n endX, endY,\n i / (curvePoints - 1),\n tempPoint\n );\n segmentCallback(prevCurveX, prevCurveY, tempPoint.x, tempPoint.y);\n prevCurveX = tempPoint.x;\n prevCurveY = tempPoint.y;\n }\n break\n }\n case 'C': {\n var prevCurveX$1 = startX;\n var prevCurveY$1 = startY;\n for (var i$1 = 1; i$1 < curvePoints; i$1++) {\n pointOnCubicBezier(\n startX, startY,\n ctrl1X, ctrl1Y,\n ctrl2X, ctrl2Y,\n endX, endY,\n i$1 / (curvePoints - 1),\n tempPoint\n );\n segmentCallback(prevCurveX$1, prevCurveY$1, tempPoint.x, tempPoint.y);\n prevCurveX$1 = tempPoint.x;\n prevCurveY$1 = tempPoint.y;\n }\n break\n }\n }\n });\n }\n\n var viewportQuadVertex = \"precision highp float;attribute vec2 aUV;varying vec2 vUV;void main(){vUV=aUV;gl_Position=vec4(mix(vec2(-1.0),vec2(1.0),aUV),0.0,1.0);}\";\n\n var copyTexFragment = \"precision highp float;uniform sampler2D tex;varying vec2 vUV;void main(){gl_FragColor=texture2D(tex,vUV);}\";\n\n var cache = new WeakMap();\n\n var glContextParams = {\n premultipliedAlpha: false,\n preserveDrawingBuffer: true,\n antialias: false,\n depth: false,\n };\n\n /**\n * This is a little helper library for WebGL. It assists with state management for a GL context.\n * It's pretty tightly wrapped to the needs of this package, not very general-purpose.\n *\n * @param { WebGLRenderingContext | HTMLCanvasElement | OffscreenCanvas } glOrCanvas - the GL context to wrap\n * @param { ({gl, getExtension, withProgram, withTexture, withTextureFramebuffer, handleContextLoss}) => void } callback\n */\n function withWebGLContext (glOrCanvas, callback) {\n var gl = glOrCanvas.getContext ? glOrCanvas.getContext('webgl', glContextParams) : glOrCanvas;\n var wrapper = cache.get(gl);\n if (!wrapper) {\n var isWebGL2 = typeof WebGL2RenderingContext !== 'undefined' && gl instanceof WebGL2RenderingContext;\n var extensions = {};\n var programs = {};\n var textures = {};\n var textureUnit = -1;\n var framebufferStack = [];\n\n gl.canvas.addEventListener('webglcontextlost', function (e) {\n handleContextLoss();\n e.preventDefault();\n }, false);\n\n function getExtension (name) {\n var ext = extensions[name];\n if (!ext) {\n ext = extensions[name] = gl.getExtension(name);\n if (!ext) {\n throw new Error((name + \" not supported\"))\n }\n }\n return ext\n }\n\n function compileShader (src, type) {\n var shader = gl.createShader(type);\n gl.shaderSource(shader, src);\n gl.compileShader(shader);\n // const status = gl.getShaderParameter(shader, gl.COMPILE_STATUS)\n // if (!status && !gl.isContextLost()) {\n // throw new Error(gl.getShaderInfoLog(shader).trim())\n // }\n return shader\n }\n\n function withProgram (name, vert, frag, func) {\n if (!programs[name]) {\n var attributes = {};\n var uniforms = {};\n var program = gl.createProgram();\n gl.attachShader(program, compileShader(vert, gl.VERTEX_SHADER));\n gl.attachShader(program, compileShader(frag, gl.FRAGMENT_SHADER));\n gl.linkProgram(program);\n\n programs[name] = {\n program: program,\n transaction: function transaction (func) {\n gl.useProgram(program);\n func({\n setUniform: function setUniform (type, name) {\n var values = [], len = arguments.length - 2;\n while ( len-- > 0 ) values[ len ] = arguments[ len + 2 ];\n\n var uniformLoc = uniforms[name] || (uniforms[name] = gl.getUniformLocation(program, name));\n gl[(\"uniform\" + type)].apply(gl, [ uniformLoc ].concat( values ));\n },\n\n setAttribute: function setAttribute (name, size, usage, instancingDivisor, data) {\n var attr = attributes[name];\n if (!attr) {\n attr = attributes[name] = {\n buf: gl.createBuffer(), // TODO should we destroy our buffers?\n loc: gl.getAttribLocation(program, name),\n data: null\n };\n }\n gl.bindBuffer(gl.ARRAY_BUFFER, attr.buf);\n gl.vertexAttribPointer(attr.loc, size, gl.FLOAT, false, 0, 0);\n gl.enableVertexAttribArray(attr.loc);\n if (isWebGL2) {\n gl.vertexAttribDivisor(attr.loc, instancingDivisor);\n } else {\n getExtension('ANGLE_instanced_arrays').vertexAttribDivisorANGLE(attr.loc, instancingDivisor);\n }\n if (data !== attr.data) {\n gl.bufferData(gl.ARRAY_BUFFER, data, usage);\n attr.data = data;\n }\n }\n });\n }\n };\n }\n\n programs[name].transaction(func);\n }\n\n function withTexture (name, func) {\n textureUnit++;\n try {\n gl.activeTexture(gl.TEXTURE0 + textureUnit);\n var texture = textures[name];\n if (!texture) {\n texture = textures[name] = gl.createTexture();\n gl.bindTexture(gl.TEXTURE_2D, texture);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);\n }\n gl.bindTexture(gl.TEXTURE_2D, texture);\n func(texture, textureUnit);\n } finally {\n textureUnit--;\n }\n }\n\n function withTextureFramebuffer (texture, textureUnit, func) {\n var framebuffer = gl.createFramebuffer();\n framebufferStack.push(framebuffer);\n gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer);\n gl.activeTexture(gl.TEXTURE0 + textureUnit);\n gl.bindTexture(gl.TEXTURE_2D, texture);\n gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture, 0);\n try {\n func(framebuffer);\n } finally {\n gl.deleteFramebuffer(framebuffer);\n gl.bindFramebuffer(gl.FRAMEBUFFER, framebufferStack[--framebufferStack.length - 1] || null);\n }\n }\n\n function handleContextLoss () {\n extensions = {};\n programs = {};\n textures = {};\n textureUnit = -1;\n framebufferStack.length = 0;\n }\n\n cache.set(gl, wrapper = {\n gl: gl,\n isWebGL2: isWebGL2,\n getExtension: getExtension,\n withProgram: withProgram,\n withTexture: withTexture,\n withTextureFramebuffer: withTextureFramebuffer,\n handleContextLoss: handleContextLoss,\n });\n }\n callback(wrapper);\n }\n\n\n function renderImageData(glOrCanvas, imageData, x, y, width, height, channels, framebuffer) {\n if ( channels === void 0 ) channels = 15;\n if ( framebuffer === void 0 ) framebuffer = null;\n\n withWebGLContext(glOrCanvas, function (ref) {\n var gl = ref.gl;\n var withProgram = ref.withProgram;\n var withTexture = ref.withTexture;\n\n withTexture('copy', function (tex, texUnit) {\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, width, height, 0, gl.RGBA, gl.UNSIGNED_BYTE, imageData);\n withProgram('copy', viewportQuadVertex, copyTexFragment, function (ref) {\n var setUniform = ref.setUniform;\n var setAttribute = ref.setAttribute;\n\n setAttribute('aUV', 2, gl.STATIC_DRAW, 0, new Float32Array([0, 0, 2, 0, 0, 2]));\n setUniform('1i', 'image', texUnit);\n gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer || null);\n gl.disable(gl.BLEND);\n gl.colorMask(channels & 8, channels & 4, channels & 2, channels & 1);\n gl.viewport(x, y, width, height);\n gl.scissor(x, y, width, height);\n gl.drawArrays(gl.TRIANGLES, 0, 3);\n });\n });\n });\n }\n\n /**\n * Resizing a canvas clears its contents; this utility copies the previous contents over.\n * @param canvas\n * @param newWidth\n * @param newHeight\n */\n function resizeWebGLCanvasWithoutClearing(canvas, newWidth, newHeight) {\n var width = canvas.width;\n var height = canvas.height;\n withWebGLContext(canvas, function (ref) {\n var gl = ref.gl;\n\n var data = new Uint8Array(width * height * 4);\n gl.readPixels(0, 0, width, height, gl.RGBA, gl.UNSIGNED_BYTE, data);\n canvas.width = newWidth;\n canvas.height = newHeight;\n renderImageData(gl, data, 0, 0, width, height);\n });\n }\n\n var webglUtils = /*#__PURE__*/Object.freeze({\n __proto__: null,\n withWebGLContext: withWebGLContext,\n renderImageData: renderImageData,\n resizeWebGLCanvasWithoutClearing: resizeWebGLCanvasWithoutClearing\n });\n\n function generate$2 (sdfWidth, sdfHeight, path, viewBox, maxDistance, sdfExponent) {\n if ( sdfExponent === void 0 ) sdfExponent = 1;\n\n var textureData = new Uint8Array(sdfWidth * sdfHeight);\n\n var viewBoxWidth = viewBox[2] - viewBox[0];\n var viewBoxHeight = viewBox[3] - viewBox[1];\n\n // Decompose all paths into straight line segments and add them to an index\n var segments = [];\n pathToLineSegments(path, function (x1, y1, x2, y2) {\n segments.push({\n x1: x1, y1: y1, x2: x2, y2: y2,\n minX: Math.min(x1, x2),\n minY: Math.min(y1, y2),\n maxX: Math.max(x1, x2),\n maxY: Math.max(y1, y2)\n });\n });\n\n // Sort segments by maxX, this will let us short-circuit some loops below\n segments.sort(function (a, b) { return a.maxX - b.maxX; });\n\n // For each target SDF texel, find the distance from its center to its nearest line segment,\n // map that distance to an alpha value, and write that alpha to the texel\n for (var sdfX = 0; sdfX < sdfWidth; sdfX++) {\n for (var sdfY = 0; sdfY < sdfHeight; sdfY++) {\n var signedDist = findNearestSignedDistance(\n viewBox[0] + viewBoxWidth * (sdfX + 0.5) / sdfWidth,\n viewBox[1] + viewBoxHeight * (sdfY + 0.5) / sdfHeight\n );\n\n // Use an exponential scale to ensure the texels very near the glyph path have adequate\n // precision, while allowing the distance field to cover the entire texture, given that\n // there are only 8 bits available. Formula visualized: https://www.desmos.com/calculator/uiaq5aqiam\n var alpha = Math.pow((1 - Math.abs(signedDist) / maxDistance), sdfExponent) / 2;\n if (signedDist < 0) {\n alpha = 1 - alpha;\n }\n\n alpha = Math.max(0, Math.min(255, Math.round(alpha * 255))); //clamp\n textureData[sdfY * sdfWidth + sdfX] = alpha;\n }\n }\n\n return textureData\n\n /**\n * For a given x/y, search the index for the closest line segment and return\n * its signed distance. Negative = inside, positive = outside, zero = on edge\n * @param x\n * @param y\n * @returns {number}\n */\n function findNearestSignedDistance (x, y) {\n var closestDistSq = Infinity;\n var closestDist = Infinity;\n\n for (var i = segments.length; i--;) {\n var seg = segments[i];\n if (seg.maxX + closestDist <= x) { break } //sorting by maxX means no more can be closer, so we can short-circuit\n if (x + closestDist > seg.minX && y - closestDist < seg.maxY && y + closestDist > seg.minY) {\n var distSq = absSquareDistanceToLineSegment(x, y, seg.x1, seg.y1, seg.x2, seg.y2);\n if (distSq < closestDistSq) {\n closestDistSq = distSq;\n closestDist = Math.sqrt(closestDistSq);\n }\n }\n }\n\n // Flip to negative distance if inside the poly\n if (isPointInPoly(x, y)) {\n closestDist = -closestDist;\n }\n return closestDist\n }\n\n /**\n * Determine whether the given point lies inside or outside the glyph. Uses a simple\n * winding-number ray casting algorithm using a ray pointing east from the point.\n */\n function isPointInPoly (x, y) {\n var winding = 0;\n for (var i = segments.length; i--;) {\n var seg = segments[i];\n if (seg.maxX <= x) { break } //sorting by maxX means no more can cross, so we can short-circuit\n var intersects = ((seg.y1 > y) !== (seg.y2 > y)) && (x < (seg.x2 - seg.x1) * (y - seg.y1) / (seg.y2 - seg.y1) + seg.x1);\n if (intersects) {\n winding += seg.y1 < seg.y2 ? 1 : -1;\n }\n }\n return winding !== 0\n }\n }\n\n function generateIntoCanvas$2(sdfWidth, sdfHeight, path, viewBox, maxDistance, sdfExponent, canvas, x, y, channel) {\n if ( sdfExponent === void 0 ) sdfExponent = 1;\n if ( x === void 0 ) x = 0;\n if ( y === void 0 ) y = 0;\n if ( channel === void 0 ) channel = 0;\n\n generateIntoFramebuffer$1(sdfWidth, sdfHeight, path, viewBox, maxDistance, sdfExponent, canvas, null, x, y, channel);\n }\n\n function generateIntoFramebuffer$1 (sdfWidth, sdfHeight, path, viewBox, maxDistance, sdfExponent, glOrCanvas, framebuffer, x, y, channel) {\n if ( sdfExponent === void 0 ) sdfExponent = 1;\n if ( x === void 0 ) x = 0;\n if ( y === void 0 ) y = 0;\n if ( channel === void 0 ) channel = 0;\n\n var data = generate$2(sdfWidth, sdfHeight, path, viewBox, maxDistance, sdfExponent);\n // Expand single-channel data to rbga\n var rgbaData = new Uint8Array(data.length * 4);\n for (var i = 0; i < data.length; i++) {\n rgbaData[i * 4 + channel] = data[i];\n }\n renderImageData(glOrCanvas, rgbaData, x, y, sdfWidth, sdfHeight, 1 << (3 - channel), framebuffer);\n }\n\n /**\n * Find the absolute distance from a point to a line segment at closest approach\n */\n function absSquareDistanceToLineSegment (x, y, lineX0, lineY0, lineX1, lineY1) {\n var ldx = lineX1 - lineX0;\n var ldy = lineY1 - lineY0;\n var lengthSq = ldx * ldx + ldy * ldy;\n var t = lengthSq ? Math.max(0, Math.min(1, ((x - lineX0) * ldx + (y - lineY0) * ldy) / lengthSq)) : 0;\n var dx = x - (lineX0 + t * ldx);\n var dy = y - (lineY0 + t * ldy);\n return dx * dx + dy * dy\n }\n\n var javascript = /*#__PURE__*/Object.freeze({\n __proto__: null,\n generate: generate$2,\n generateIntoCanvas: generateIntoCanvas$2,\n generateIntoFramebuffer: generateIntoFramebuffer$1\n });\n\n var mainVertex = \"precision highp float;uniform vec4 uGlyphBounds;attribute vec2 aUV;attribute vec4 aLineSegment;varying vec4 vLineSegment;varying vec2 vGlyphXY;void main(){vLineSegment=aLineSegment;vGlyphXY=mix(uGlyphBounds.xy,uGlyphBounds.zw,aUV);gl_Position=vec4(mix(vec2(-1.0),vec2(1.0),aUV),0.0,1.0);}\";\n\n var mainFragment = \"precision highp float;uniform vec4 uGlyphBounds;uniform float uMaxDistance;uniform float uExponent;varying vec4 vLineSegment;varying vec2 vGlyphXY;float absDistToSegment(vec2 point,vec2 lineA,vec2 lineB){vec2 lineDir=lineB-lineA;float lenSq=dot(lineDir,lineDir);float t=lenSq==0.0 ? 0.0 : clamp(dot(point-lineA,lineDir)/lenSq,0.0,1.0);vec2 linePt=lineA+t*lineDir;return distance(point,linePt);}void main(){vec4 seg=vLineSegment;vec2 p=vGlyphXY;float dist=absDistToSegment(p,seg.xy,seg.zw);float val=pow(1.0-clamp(dist/uMaxDistance,0.0,1.0),uExponent)*0.5;bool crossing=(seg.y>p.y!=seg.w>p.y)&&(p.x<(seg.z-seg.x)*(p.y-seg.y)/(seg.w-seg.y)+seg.x);bool crossingUp=crossing&&vLineSegment.y<vLineSegment.w;gl_FragColor=vec4(crossingUp ? 1.0/255.0 : 0.0,crossing&&!crossingUp ? 1.0/255.0 : 0.0,0.0,val);}\";\n\n var postFragment = \"precision highp float;uniform sampler2D tex;varying vec2 vUV;void main(){vec4 color=texture2D(tex,vUV);bool inside=color.r!=color.g;float val=inside ? 1.0-color.a : color.a;gl_FragColor=vec4(val);}\";\n\n // Single triangle covering viewport\n var viewportUVs = new Float32Array([0, 0, 2, 0, 0, 2]);\n\n var implicitContext = null;\n var isTestingSupport = false;\n var NULL_OBJECT = {};\n var supportByCanvas = new WeakMap(); // canvas -> bool\n\n function validateSupport (glOrCanvas) {\n if (!isTestingSupport && !isSupported(glOrCanvas)) {\n throw new Error('WebGL generation not supported')\n }\n }\n\n function generate$1 (sdfWidth, sdfHeight, path, viewBox, maxDistance, sdfExponent, glOrCanvas) {\n if ( sdfExponent === void 0 ) sdfExponent = 1;\n if ( glOrCanvas === void 0 ) glOrCanvas = null;\n\n if (!glOrCanvas) {\n glOrCanvas = implicitContext;\n if (!glOrCanvas) {\n var canvas = typeof OffscreenCanvas === 'function'\n ? new OffscreenCanvas(1, 1)\n : typeof document !== 'undefined'\n ? document.createElement('canvas')\n : null;\n if (!canvas) {\n throw new Error('OffscreenCanvas or DOM canvas not supported')\n }\n glOrCanvas = implicitContext = canvas.getContext('webgl', { depth: false });\n }\n }\n\n validateSupport(glOrCanvas);\n\n var rgbaData = new Uint8Array(sdfWidth * sdfHeight * 4); //not Uint8ClampedArray, cuz Safari\n\n // Render into a background texture framebuffer\n withWebGLContext(glOrCanvas, function (ref) {\n var gl = ref.gl;\n var withTexture = ref.withTexture;\n var withTextureFramebuffer = ref.withTextureFramebuffer;\n\n withTexture('readable', function (texture, textureUnit) {\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, sdfWidth, sdfHeight, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);\n\n withTextureFramebuffer(texture, textureUnit, function (framebuffer) {\n generateIntoFramebuffer(\n sdfWidth,\n sdfHeight,\n path,\n viewBox,\n maxDistance,\n sdfExponent,\n gl,\n framebuffer,\n 0,\n 0,\n 0 // red channel\n );\n gl.readPixels(0, 0, sdfWidth, sdfHeight, gl.RGBA, gl.UNSIGNED_BYTE, rgbaData);\n });\n });\n });\n\n // Throw away all but the red channel\n var data = new Uint8Array(sdfWidth * sdfHeight);\n for (var i = 0, j = 0; i < rgbaData.length; i += 4) {\n data[j++] = rgbaData[i];\n }\n\n return data\n }\n\n function generateIntoCanvas$1(sdfWidth, sdfHeight, path, viewBox, maxDistance, sdfExponent, canvas, x, y, channel) {\n if ( sdfExponent === void 0 ) sdfExponent = 1;\n if ( x === void 0 ) x = 0;\n if ( y === void 0 ) y = 0;\n if ( channel === void 0 ) channel = 0;\n\n generateIntoFramebuffer(sdfWidth, sdfHeight, path, viewBox, maxDistance, sdfExponent, canvas, null, x, y, channel);\n }\n\n function generateIntoFramebuffer (sdfWidth, sdfHeight, path, viewBox, maxDistance, sdfExponent, glOrCanvas, framebuffer, x, y, channel) {\n if ( sdfExponent === void 0 ) sdfExponent = 1;\n if ( x === void 0 ) x = 0;\n if ( y === void 0 ) y = 0;\n if ( channel === void 0 ) channel = 0;\n\n // Verify support\n validateSupport(glOrCanvas);\n\n // Compute path segments\n var lineSegmentCoords = [];\n pathToLineSegments(path, function (x1, y1, x2, y2) {\n lineSegmentCoords.push(x1, y1, x2, y2);\n });\n lineSegmentCoords = new Float32Array(lineSegmentCoords);\n\n withWebGLContext(glOrCanvas, function (ref) {\n var gl = ref.gl;\n var isWebGL2 = ref.isWebGL2;\n var getExtension = ref.getExtension;\n var withProgram = ref.withProgram;\n var withTexture = ref.withTexture;\n var withTextureFramebuffer = ref.withTextureFramebuffer;\n var handleContextLoss = ref.handleContextLoss;\n\n withTexture('rawDistances', function (intermediateTexture, intermediateTextureUnit) {\n if (sdfWidth !== intermediateTexture._lastWidth || sdfHeight !== intermediateTexture._lastHeight) {\n gl.texImage2D(\n gl.TEXTURE_2D, 0, gl.RGBA,\n intermediateTexture._lastWidth = sdfWidth,\n intermediateTexture._lastHeight = sdfHeight,\n 0, gl.RGBA, gl.UNSIGNED_BYTE, null\n );\n }\n\n // Unsigned distance pass\n withProgram('main', mainVertex, mainFragment, function (ref) {\n var setAttribute = ref.setAttribute;\n var setUniform = ref.setUniform;\n\n // Init extensions\n var instancingExtension = !isWebGL2 && getExtension('ANGLE_instanced_arrays');\n var blendMinMaxExtension = !isWebGL2 && getExtension('EXT_blend_minmax');\n\n // Init/update attributes\n setAttribute('aUV', 2, gl.STATIC_DRAW, 0, viewportUVs);\n setAttribute('aLineSegment', 4, gl.DYNAMIC_DRAW, 1, lineSegmentCoords);\n\n // Init/update uniforms\n setUniform.apply(void 0, [ '4f', 'uGlyphBounds' ].concat( viewBox ));\n setUniform('1f', 'uMaxDistance', maxDistance);\n setUniform('1f', 'uExponent', sdfExponent);\n\n // Render initial unsigned distance / winding number info to a texture\n withTextureFramebuffer(intermediateTexture, intermediateTextureUnit, function (framebuffer) {\n gl.enable(gl.BLEND);\n gl.colorMask(true, true, true, true);\n gl.viewport(0, 0, sdfWidth, sdfHeight);\n gl.scissor(0, 0, sdfWidth, sdfHeight);\n gl.blendFunc(gl.ONE, gl.ONE);\n // Red+Green channels are incremented (FUNC_ADD) for segment-ray crossings to give a \"winding number\".\n // Alpha holds the closest (MAX) unsigned distance.\n gl.blendEquationSeparate(gl.FUNC_ADD, isWebGL2 ? gl.MAX : blendMinMaxExtension.MAX_EXT);\n gl.clear(gl.COLOR_BUFFER_BIT);\n if (isWebGL2) {\n gl.drawArraysInstanced(gl.TRIANGLES, 0, 3, lineSegmentCoords.length / 4);\n } else {\n instancingExtension.drawArraysInstancedANGLE(gl.TRIANGLES, 0, 3, lineSegmentCoords.length / 4);\n }\n // Debug\n // const debug = new Uint8Array(sdfWidth * sdfHeight * 4)\n // gl.readPixels(0, 0, sdfWidth, sdfHeight, gl.RGBA, gl.UNSIGNED_BYTE, debug)\n // console.log('intermediate texture data: ', debug)\n });\n });\n\n // Use the data stored in the texture to apply inside/outside and write to the output framebuffer rect+channel.\n withProgram('post', viewportQuadVertex, postFragment, function (program) {\n program.setAttribute('aUV', 2, gl.STATIC_DRAW, 0, viewportUVs);\n program.setUniform('1i', 'tex', intermediateTextureUnit);\n gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer);\n gl.disable(gl.BLEND);\n gl.colorMask(channel === 0, channel === 1, channel === 2, channel === 3);\n gl.viewport(x, y, sdfWidth, sdfHeight);\n gl.scissor(x, y, sdfWidth, sdfHeight);\n gl.drawArrays(gl.TRIANGLES, 0, 3);\n });\n });\n\n // Handle context loss occurring during any of the above calls\n if (gl.isContextLost()) {\n handleContextLoss();\n throw new Error('webgl context lost')\n }\n });\n }\n\n function isSupported (glOrCanvas) {\n var key = (!glOrCanvas || glOrCanvas === implicitContext) ? NULL_OBJECT : (glOrCanvas.canvas || glOrCanvas);\n var supported = supportByCanvas.get(key);\n if (supported === undefined) {\n isTestingSupport = true;\n var failReason = null;\n try {\n // Since we can't detect all failure modes up front, let's just do a trial run of a\n // simple path and compare what we get back to the correct expected result. This will\n // also serve to prime the shader compilation.\n var expectedResult = [\n 97, 106, 97, 61,\n 99, 137, 118, 80,\n 80, 118, 137, 99,\n 61, 97, 106, 97\n ];\n var testResult = generate$1(\n 4,\n 4,\n 'M8,8L16,8L24,24L16,24Z',\n [0, 0, 32, 32],\n 24,\n 1,\n glOrCanvas\n );\n supported = testResult && expectedResult.length === testResult.length &&\n testResult.every(function (val, i) { return val === expectedResult[i]; });\n if (!supported) {\n failReason = 'bad trial run results';\n console.info(expectedResult, testResult);\n }\n } catch (err) {\n // TODO if it threw due to webgl context loss, should we maybe leave isSupported as null and try again later?\n supported = false;\n failReason = err.message;\n }\n if (failReason) {\n console.warn('WebGL SDF generation not supported:', failReason);\n }\n isTestingSupport = false;\n supportByCanvas.set(key, supported);\n }\n return supported\n }\n\n var webgl = /*#__PURE__*/Object.freeze({\n __proto__: null,\n generate: generate$1,\n generateIntoCanvas: generateIntoCanvas$1,\n generateIntoFramebuffer: generateIntoFramebuffer,\n isSupported: isSupported\n });\n\n /**\n * Generate an SDF texture image for a 2D path.\n *\n * @param {number} sdfWidth - width of the SDF output image in pixels.\n * @param {number} sdfHeight - height of the SDF output image in pixels.\n * @param {string} path - an SVG-like path string describing the glyph; should only contain commands: M/L/Q/C/Z.\n * @param {number[]} viewBox - [minX, minY, maxX, maxY] in font units aligning with the texture's edges.\n * @param {number} maxDistance - the maximum distance from the glyph path in font units that will be encoded; defaults\n * to half the maximum viewBox dimension.\n * @param {number} [sdfExponent] - specifies an exponent for encoding the SDF's distance values; higher exponents\n * will give greater precision nearer the glyph's path.\n * @return {Uint8Array}\n */\n function generate(\n sdfWidth,\n sdfHeight,\n path,\n viewBox,\n maxDistance,\n sdfExponent\n ) {\n if ( maxDistance === void 0 ) maxDistance = Math.max(viewBox[2] - viewBox[0], viewBox[3] - viewBox[1]) / 2;\n if ( sdfExponent === void 0 ) sdfExponent = 1;\n\n try {\n return generate$1.apply(webgl, arguments)\n } catch(e) {\n console.info('WebGL SDF generation failed, falling back to JS', e);\n return generate$2.apply(javascript, arguments)\n }\n }\n\n /**\n * Generate an SDF texture image for a 2D path, inserting the result into a WebGL `canvas` at a given x/y position\n * and color channel. This is generally much faster than calling `generate` because it does not require reading pixels\n * back from the GPU->CPU -- the `canvas` can be used directly as a WebGL texture image, so it all stays on the GPU.\n *\n * @param {number} sdfWidth - width of the SDF output image in pixels.\n * @param {number} sdfHeight - height of the SDF output image in pixels.\n * @param {string} path - an SVG-like path string describing the glyph; should only contain commands: M/L/Q/C/Z.\n * @param {number[]} viewBox - [minX, minY, maxX, maxY] in font units aligning with the texture's edges.\n * @param {number} maxDistance - the maximum distance from the glyph path in font units that will be encoded; defaults\n * to half the maximum viewBox dimension.\n * @param {number} [sdfExponent] - specifies an exponent for encoding the SDF's distance values; higher exponents\n * will give greater precision nearer the glyph's path.\n * @param {HTMLCanvasElement|OffscreenCanvas} canvas - a WebGL-enabled canvas into which the SDF will be rendered.\n * Only the relevant rect/channel will be modified, the rest will be preserved. To avoid unpredictable results\n * due to shared GL context state, this canvas should be dedicated to use by this library alone.\n * @param {number} x - the x position at which to render the SDF.\n * @param {number} y - the y position at which to render the SDF.\n * @param {number} channel - the color channel index (0-4) into which the SDF will be rendered.\n * @return {Uint8Array}\n */\n function generateIntoCanvas(\n sdfWidth,\n sdfHeight,\n path,\n viewBox,\n maxDistance,\n sdfExponent,\n canvas,\n x,\n y,\n channel\n ) {\n if ( maxDistance === void 0 ) maxDistance = Math.max(viewBox[2] - viewBox[0], viewBox[3] - viewBox[1]) / 2;\n if ( sdfExponent === void 0 ) sdfExponent = 1;\n if ( x === void 0 ) x = 0;\n if ( y === void 0 ) y = 0;\n if ( channel === void 0 ) channel = 0;\n\n try {\n return generateIntoCanvas$1.apply(webgl, arguments)\n } catch(e) {\n console.info('WebGL SDF generation failed, falling back to JS', e);\n return generateIntoCanvas$2.apply(javascript, arguments)\n }\n }\n\n exports.forEachPathCommand = forEachPathCommand;\n exports.generate = generate;\n exports.generateIntoCanvas = generateIntoCanvas;\n exports.javascript = javascript;\n exports.pathToLineSegments = pathToLineSegments;\n exports.webgl = webgl;\n exports.webglUtils = webglUtils;\n\n Object.defineProperty(exports, '__esModule', { value: true });\n\n return exports;\n\n}({}));\nreturn exports\n}\n\nexport { SDFGenerator as default };\n", "function bidiFactory() {\nvar bidi = (function (exports) {\n\n // Bidi character types data, auto generated\n var DATA = {\n \"R\": \"13k,1a,2,3,3,2+1j,ch+16,a+1,5+2,2+n,5,a,4,6+16,4+3,h+1b,4mo,179q,2+9,2+11,2i9+7y,2+68,4,3+4,5+13,4+3,2+4k,3+29,8+cf,1t+7z,w+17,3+3m,1t+3z,16o1+5r,8+30,8+mc,29+1r,29+4v,75+73\",\n \"EN\": \"1c+9,3d+1,6,187+9,513,4+5,7+9,sf+j,175h+9,qw+q,161f+1d,4xt+a,25i+9\",\n \"ES\": \"17,2,6dp+1,f+1,av,16vr,mx+1,4o,2\",\n \"ET\": \"z+2,3h+3,b+1,ym,3e+1,2o,p4+1,8,6u,7c,g6,1wc,1n9+4,30+1b,2n,6d,qhx+1,h0m,a+1,49+2,63+1,4+1,6bb+3,12jj\",\n \"AN\": \"16o+5,2j+9,2+1,35,ed,1ff2+9,87+u\",\n \"CS\": \"18,2+1,b,2u,12k,55v,l,17v0,2,3,53,2+1,b\",\n \"B\": \"a,3,f+2,2v,690\",\n \"S\": \"9,2,k\",\n \"WS\": \"c,k,4f4,1vk+a,u,1j,335\",\n \"ON\": \"x+1,4+4,h+5,r+5,r+3,z,5+3,2+1,2+1,5,2+2,3+4,o,w,ci+1,8+d,3+d,6+8,2+g,39+1,9,6+1,2,33,b8,3+1,3c+1,7+1,5r,b,7h+3,sa+5,2,3i+6,jg+3,ur+9,2v,ij+1,9g+9,7+a,8m,4+1,49+x,14u,2+2,c+2,e+2,e+2,e+1,i+n,e+e,2+p,u+2,e+2,36+1,2+3,2+1,b,2+2,6+5,2,2,2,h+1,5+4,6+3,3+f,16+2,5+3l,3+81,1y+p,2+40,q+a,m+13,2r+ch,2+9e,75+hf,3+v,2+2w,6e+5,f+6,75+2a,1a+p,2+2g,d+5x,r+b,6+3,4+o,g,6+1,6+2,2k+1,4,2j,5h+z,1m+1,1e+f,t+2,1f+e,d+3,4o+3,2s+1,w,535+1r,h3l+1i,93+2,2s,b+1,3l+x,2v,4g+3,21+3,kz+1,g5v+1,5a,j+9,n+v,2,3,2+8,2+1,3+2,2,3,46+1,4+4,h+5,r+5,r+a,3h+2,4+6,b+4,78,1r+24,4+c,4,1hb,ey+6,103+j,16j+c,1ux+7,5+g,fsh,jdq+1t,4,57+2e,p1,1m,1m,1m,1m,4kt+1,7j+17,5+2r,d+e,3+e,2+e,2+10,m+4,w,1n+5,1q,4z+5,4b+rb,9+c,4+c,4+37,d+2g,8+b,l+b,5+1j,9+9,7+13,9+t,3+1,27+3c,2+29,2+3q,d+d,3+4,4+2,6+6,a+o,8+6,a+2,e+6,16+42,2+1i\",\n \"BN\": \"0+8,6+d,2s+5,2+p,e,4m9,1kt+2,2b+5,5+5,17q9+v,7k,6p+8,6+1,119d+3,440+7,96s+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+75,6p+2rz,1ben+1,1ekf+1,1ekf+1\",\n \"NSM\": \"lc+33,7o+6,7c+18,2,2+1,2+1,2,21+a,1d+k,h,2u+6,3+5,3+1,2+3,10,v+q,2k+a,1n+8,a,p+3,2+8,2+2,2+4,18+2,3c+e,2+v,1k,2,5+7,5,4+6,b+1,u,1n,5+3,9,l+1,r,3+1,1m,5+1,5+1,3+2,4,v+1,4,c+1,1m,5+4,2+1,5,l+1,n+5,2,1n,3,2+3,9,8+1,c+1,v,1q,d,1f,4,1m+2,6+2,2+3,8+1,c+1,u,1n,g+1,l+1,t+1,1m+1,5+3,9,l+1,u,21,8+2,2,2j,3+6,d+7,2r,3+8,c+5,23+1,s,2,2,1k+d,2+4,2+1,6+a,2+z,a,2v+3,2+5,2+1,3+1,q+1,5+2,h+3,e,3+1,7,g,jk+2,qb+2,u+2,u+1,v+1,1t+1,2+6,9,3+a,a,1a+2,3c+1,z,3b+2,5+1,a,7+2,64+1,3,1n,2+6,2,2,3+7,7+9,3,1d+g,1s+3,1d,2+4,2,6,15+8,d+1,x+3,3+1,2+2,1l,2+1,4,2+2,1n+7,3+1,49+2,2+c,2+6,5,7,4+1,5j+1l,2+4,k1+w,2db+2,3y,2p+v,ff+3,30+1,n9x+3,2+9,x+1,29+1,7l,4,5,q+1,6,48+1,r+h,e,13+7,q+a,1b+2,1d,3+3,3+1,14,1w+5,3+1,3+1,d,9,1c,1g,2+2,3+1,6+1,2,17+1,9,6n,3,5,fn5,ki+f,h+f,r2,6b,46+4,1af+2,2+1,6+3,15+2,5,4m+1,fy+3,as+1,4a+a,4x,1j+e,1l+2,1e+3,3+1,1y+2,11+4,2+7,1r,d+1,1h+8,b+3,3,2o+2,3,2+1,7,4h,4+7,m+1,1m+1,4,12+6,4+4,5g+7,3+2,2,o,2d+5,2,5+1,2+1,6n+3,7+1,2+1,s+1,2e+7,3,2+1,2z,2,3+5,2,2u+2,3+3,2+4,78+8,2+1,75+1,2,5,41+3,3+1,5,x+5,3+1,15+5,3+3,9,a+5,3+2,1b+c,2+1,bb+6,2+5,2d+l,3+6,2+1,2+1,3f+5,4,2+1,2+6,2,21+1,4,2,9o+1,f0c+4,1o+6,t5,1s+3,2a,f5l+1,43t+2,i+7,3+6,v+3,45+2,1j0+1i,5+1d,9,f,n+4,2+e,11t+6,2+g,3+6,2+1,2+4,7a+6,c6+3,15t+6,32+6,gzhy+6n\",\n \"AL\": \"16w,3,2,e+1b,z+2,2+2s,g+1,8+1,b+m,2+t,s+2i,c+e,4h+f,1d+1e,1bwe+dp,3+3z,x+c,2+1,35+3y,2rm+z,5+7,b+5,dt+l,c+u,17nl+27,1t+27,4x+6n,3+d\",\n \"LRO\": \"6ct\",\n \"RLO\": \"6cu\",\n \"LRE\": \"6cq\",\n \"RLE\": \"6cr\",\n \"PDF\": \"6cs\",\n \"LRI\": \"6ee\",\n \"RLI\": \"6ef\",\n \"FSI\": \"6eg\",\n \"PDI\": \"6eh\"\n };\n\n var TYPES = {};\n var TYPES_TO_NAMES = {};\n TYPES.L = 1; //L is the default\n TYPES_TO_NAMES[1] = 'L';\n Object.keys(DATA).forEach(function (type, i) {\n TYPES[type] = 1 << (i + 1);\n TYPES_TO_NAMES[TYPES[type]] = type;\n });\n Object.freeze(TYPES);\n\n var ISOLATE_INIT_TYPES = TYPES.LRI | TYPES.RLI | TYPES.FSI;\n var STRONG_TYPES = TYPES.L | TYPES.R | TYPES.AL;\n var NEUTRAL_ISOLATE_TYPES = TYPES.B | TYPES.S | TYPES.WS | TYPES.ON | TYPES.FSI | TYPES.LRI | TYPES.RLI | TYPES.PDI;\n var BN_LIKE_TYPES = TYPES.BN | TYPES.RLE | TYPES.LRE | TYPES.RLO | TYPES.LRO | TYPES.PDF;\n var TRAILING_TYPES = TYPES.S | TYPES.WS | TYPES.B | ISOLATE_INIT_TYPES | TYPES.PDI | BN_LIKE_TYPES;\n\n var map = null;\n\n function parseData () {\n if (!map) {\n //const start = performance.now()\n map = new Map();\n var loop = function ( type ) {\n if (DATA.hasOwnProperty(type)) {\n var lastCode = 0;\n DATA[type].split(',').forEach(function (range) {\n var ref = range.split('+');\n var skip = ref[0];\n var step = ref[1];\n skip = parseInt(skip, 36);\n step = step ? parseInt(step, 36) : 0;\n map.set(lastCode += skip, TYPES[type]);\n for (var i = 0; i < step; i++) {\n map.set(++lastCode, TYPES[type]);\n }\n });\n }\n };\n\n for (var type in DATA) loop( type );\n //console.log(`char types parsed in ${performance.now() - start}ms`)\n }\n }\n\n /**\n * @param {string} char\n * @return {number}\n */\n function getBidiCharType (char) {\n parseData();\n return map.get(char.codePointAt(0)) || TYPES.L\n }\n\n function getBidiCharTypeName(char) {\n return TYPES_TO_NAMES[getBidiCharType(char)]\n }\n\n // Bidi bracket pairs data, auto generated\n var data$1 = {\n \"pairs\": \"14>1,1e>2,u>2,2wt>1,1>1,1ge>1,1wp>1,1j>1,f>1,hm>1,1>1,u>1,u6>1,1>1,+5,28>1,w>1,1>1,+3,b8>1,1>1,+3,1>3,-1>-1,3>1,1>1,+2,1s>1,1>1,x>1,th>1,1>1,+2,db>1,1>1,+3,3>1,1>1,+2,14qm>1,1>1,+1,4q>1,1e>2,u>2,2>1,+1\",\n \"canonical\": \"6f1>-6dx,6dy>-6dx,6ec>-6ed,6ee>-6ed,6ww>2jj,-2ji>2jj,14r4>-1e7l,1e7m>-1e7l,1e7m>-1e5c,1e5d>-1e5b,1e5c>-14qx,14qy>-14qx,14vn>-1ecg,1ech>-1ecg,1edu>-1ecg,1eci>-1ecg,1eda>-1ecg,1eci>-1ecg,1eci>-168q,168r>-168q,168s>-14ye,14yf>-14ye\"\n };\n\n /**\n * Parses an string that holds encoded codepoint mappings, e.g. for bracket pairs or\n * mirroring characters, as encoded by scripts/generateBidiData.js. Returns an object\n * holding the `map`, and optionally a `reverseMap` if `includeReverse:true`.\n * @param {string} encodedString\n * @param {boolean} includeReverse - true if you want reverseMap in the output\n * @return {{map: Map<number, number>, reverseMap?: Map<number, number>}}\n */\n function parseCharacterMap (encodedString, includeReverse) {\n var radix = 36;\n var lastCode = 0;\n var map = new Map();\n var reverseMap = includeReverse && new Map();\n var prevPair;\n encodedString.split(',').forEach(function visit(entry) {\n if (entry.indexOf('+') !== -1) {\n for (var i = +entry; i--;) {\n visit(prevPair);\n }\n } else {\n prevPair = entry;\n var ref = entry.split('>');\n var a = ref[0];\n var b = ref[1];\n a = String.fromCodePoint(lastCode += parseInt(a, radix));\n b = String.fromCodePoint(lastCode += parseInt(b, radix));\n map.set(a, b);\n includeReverse && reverseMap.set(b, a);\n }\n });\n return { map: map, reverseMap: reverseMap }\n }\n\n var openToClose, closeToOpen, canonical;\n\n function parse$1 () {\n if (!openToClose) {\n //const start = performance.now()\n var ref = parseCharacterMap(data$1.pairs, true);\n var map = ref.map;\n var reverseMap = ref.reverseMap;\n openToClose = map;\n closeToOpen = reverseMap;\n canonical = parseCharacterMap(data$1.canonical, false).map;\n //console.log(`brackets parsed in ${performance.now() - start}ms`)\n }\n }\n\n function openingToClosingBracket (char) {\n parse$1();\n return openToClose.get(char) || null\n }\n\n function closingToOpeningBracket (char) {\n parse$1();\n return closeToOpen.get(char) || null\n }\n\n function getCanonicalBracket (char) {\n parse$1();\n return canonical.get(char) || null\n }\n\n // Local type aliases\n var TYPE_L = TYPES.L;\n var TYPE_R = TYPES.R;\n var TYPE_EN = TYPES.EN;\n var TYPE_ES = TYPES.ES;\n var TYPE_ET = TYPES.ET;\n var TYPE_AN = TYPES.AN;\n var TYPE_CS = TYPES.CS;\n var TYPE_B = TYPES.B;\n var TYPE_S = TYPES.S;\n var TYPE_ON = TYPES.ON;\n var TYPE_BN = TYPES.BN;\n var TYPE_NSM = TYPES.NSM;\n var TYPE_AL = TYPES.AL;\n var TYPE_LRO = TYPES.LRO;\n var TYPE_RLO = TYPES.RLO;\n var TYPE_LRE = TYPES.LRE;\n var TYPE_RLE = TYPES.RLE;\n var TYPE_PDF = TYPES.PDF;\n var TYPE_LRI = TYPES.LRI;\n var TYPE_RLI = TYPES.RLI;\n var TYPE_FSI = TYPES.FSI;\n var TYPE_PDI = TYPES.PDI;\n\n /**\n * @typedef {object} GetEmbeddingLevelsResult\n * @property {{start, end, level}[]} paragraphs\n * @property {Uint8Array} levels\n */\n\n /**\n * This function applies the Bidirectional Algorithm to a string, returning the resolved embedding levels\n * in a single Uint8Array plus a list of objects holding each paragraph's start and end indices and resolved\n * base embedding level.\n *\n * @param {string} string - The input string\n * @param {\"ltr\"|\"rtl\"|\"auto\"} [baseDirection] - Use \"ltr\" or \"rtl\" to force a base paragraph direction,\n * otherwise a direction will be chosen automatically from each paragraph's contents.\n * @return {GetEmbeddingLevelsResult}\n */\n function getEmbeddingLevels (string, baseDirection) {\n var MAX_DEPTH = 125;\n\n // Start by mapping all characters to their unicode type, as a bitmask integer\n var charTypes = new Uint32Array(string.length);\n for (var i = 0; i < string.length; i++) {\n charTypes[i] = getBidiCharType(string[i]);\n }\n\n var charTypeCounts = new Map(); //will be cleared at start of each paragraph\n function changeCharType(i, type) {\n var oldType = charTypes[i];\n charTypes[i] = type;\n charTypeCounts.set(oldType, charTypeCounts.get(oldType) - 1);\n if (oldType & NEUTRAL_ISOLATE_TYPES) {\n charTypeCounts.set(NEUTRAL_ISOLATE_TYPES, charTypeCounts.get(NEUTRAL_ISOLATE_TYPES) - 1);\n }\n charTypeCounts.set(type, (charTypeCounts.get(type) || 0) + 1);\n if (type & NEUTRAL_ISOLATE_TYPES) {\n charTypeCounts.set(NEUTRAL_ISOLATE_TYPES, (charTypeCounts.get(NEUTRAL_ISOLATE_TYPES) || 0) + 1);\n }\n }\n\n var embedLevels = new Uint8Array(string.length);\n var isolationPairs = new Map(); //init->pdi and pdi->init\n\n // === 3.3.1 The Paragraph Level ===\n // 3.3.1 P1: Split the text into paragraphs\n var paragraphs = []; // [{start, end, level}, ...]\n var paragraph = null;\n for (var i$1 = 0; i$1 < string.length; i$1++) {\n if (!paragraph) {\n paragraphs.push(paragraph = {\n start: i$1,\n end: string.length - 1,\n // 3.3.1 P2-P3: Determine the paragraph level\n level: baseDirection === 'rtl' ? 1 : baseDirection === 'ltr' ? 0 : determineAutoEmbedLevel(i$1, false)\n });\n }\n if (charTypes[i$1] & TYPE_B) {\n paragraph.end = i$1;\n paragraph = null;\n }\n }\n\n var FORMATTING_TYPES = TYPE_RLE | TYPE_LRE | TYPE_RLO | TYPE_LRO | ISOLATE_INIT_TYPES | TYPE_PDI | TYPE_PDF | TYPE_B;\n var nextEven = function (n) { return n + ((n & 1) ? 1 : 2); };\n var nextOdd = function (n) { return n + ((n & 1) ? 2 : 1); };\n\n // Everything from here on will operate per paragraph.\n for (var paraIdx = 0; paraIdx < paragraphs.length; paraIdx++) {\n paragraph = paragraphs[paraIdx];\n var statusStack = [{\n _level: paragraph.level,\n _override: 0, //0=neutral, 1=L, 2=R\n _isolate: 0 //bool\n }];\n var stackTop = (void 0);\n var overflowIsolateCount = 0;\n var overflowEmbeddingCount = 0;\n var validIsolateCount = 0;\n charTypeCounts.clear();\n\n // === 3.3.2 Explicit Levels and Directions ===\n for (var i$2 = paragraph.start; i$2 <= paragraph.end; i$2++) {\n var charType = charTypes[i$2];\n stackTop = statusStack[statusStack.length - 1];\n\n // Set initial counts\n charTypeCounts.set(charType, (charTypeCounts.get(charType) || 0) + 1);\n if (charType & NEUTRAL_ISOLATE_TYPES) {\n charTypeCounts.set(NEUTRAL_ISOLATE_TYPES, (charTypeCounts.get(NEUTRAL_ISOLATE_TYPES) || 0) + 1);\n }\n\n // Explicit Embeddings: 3.3.2 X2 - X3\n if (charType & FORMATTING_TYPES) { //prefilter all formatters\n if (charType & (TYPE_RLE | TYPE_LRE)) {\n embedLevels[i$2] = stackTop._level; // 5.2\n var level = (charType === TYPE_RLE ? nextOdd : nextEven)(stackTop._level);\n if (level <= MAX_DEPTH && !overflowIsolateCount && !overflowEmbeddingCount) {\n statusStack.push({\n _level: level,\n _override: 0,\n _isolate: 0\n });\n } else if (!overflowIsolateCount) {\n overflowEmbeddingCount++;\n }\n }\n\n // Explicit Overrides: 3.3.2 X4 - X5\n else if (charType & (TYPE_RLO | TYPE_LRO)) {\n embedLevels[i$2] = stackTop._level; // 5.2\n var level$1 = (charType === TYPE_RLO ? nextOdd : nextEven)(stackTop._level);\n if (level$1 <= MAX_DEPTH && !overflowIsolateCount && !overflowEmbeddingCount) {\n statusStack.push({\n _level: level$1,\n _override: (charType & TYPE_RLO) ? TYPE_R : TYPE_L,\n _isolate: 0\n });\n } else if (!overflowIsolateCount) {\n overflowEmbeddingCount++;\n }\n }\n\n // Isolates: 3.3.2 X5a - X5c\n else if (charType & ISOLATE_INIT_TYPES) {\n // X5c - FSI becomes either RLI or LRI\n if (charType & TYPE_FSI) {\n charType = determineAutoEmbedLevel(i$2 + 1, true) === 1 ? TYPE_RLI : TYPE_LRI;\n }\n\n embedLevels[i$2] = stackTop._level;\n if (stackTop._override) {\n changeCharType(i$2, stackTop._override);\n }\n var level$2 = (charType === TYPE_RLI ? nextOdd : nextEven)(stackTop._level);\n if (level$2 <= MAX_DEPTH && overflowIsolateCount === 0 && overflowEmbeddingCount === 0) {\n validIsolateCount++;\n statusStack.push({\n _level: level$2,\n _override: 0,\n _isolate: 1,\n _isolInitIndex: i$2\n });\n } else {\n overflowIsolateCount++;\n }\n }\n\n // Terminating Isolates: 3.3.2 X6a\n else if (charType & TYPE_PDI) {\n if (overflowIsolateCount > 0) {\n overflowIsolateCount--;\n } else if (validIsolateCount > 0) {\n overflowEmbeddingCount = 0;\n while (!statusStack[statusStack.length - 1]._isolate) {\n statusStack.pop();\n }\n // Add to isolation pairs bidirectional mapping:\n var isolInitIndex = statusStack[statusStack.length - 1]._isolInitIndex;\n if (isolInitIndex != null) {\n isolationPairs.set(isolInitIndex, i$2);\n isolationPairs.set(i$2, isolInitIndex);\n }\n statusStack.pop();\n validIsolateCount--;\n }\n stackTop = statusStack[statusStack.length - 1];\n embedLevels[i$2] = stackTop._level;\n if (stackTop._override) {\n changeCharType(i$2, stackTop._override);\n }\n }\n\n\n // Terminating Embeddings and Overrides: 3.3.2 X7\n else if (charType & TYPE_PDF) {\n if (overflowIsolateCount === 0) {\n if (overflowEmbeddingCount > 0) {\n overflowEmbeddingCount--;\n } else if (!stackTop._isolate && statusStack.length > 1) {\n statusStack.pop();\n stackTop = statusStack[statusStack.length - 1];\n }\n }\n embedLevels[i$2] = stackTop._level; // 5.2\n }\n\n // End of Paragraph: 3.3.2 X8\n else if (charType & TYPE_B) {\n embedLevels[i$2] = paragraph.level;\n }\n }\n\n // Non-formatting characters: 3.3.2 X6\n else {\n embedLevels[i$2] = stackTop._level;\n // NOTE: This exclusion of BN seems to go against what section 5.2 says, but is required for test passage\n if (stackTop._override && charType !== TYPE_BN) {\n changeCharType(i$2, stackTop._override);\n }\n }\n }\n\n // === 3.3.3 Preparations for Implicit Processing ===\n\n // Remove all RLE, LRE, RLO, LRO, PDF, and BN characters: 3.3.3 X9\n // Note: Due to section 5.2, we won't remove them, but we'll use the BN_LIKE_TYPES bitset to\n // easily ignore them all from here on out.\n\n // 3.3.3 X10\n // Compute the set of isolating run sequences as specified by BD13\n var levelRuns = [];\n var currentRun = null;\n for (var i$3 = paragraph.start; i$3 <= paragraph.end; i$3++) {\n var charType$1 = charTypes[i$3];\n if (!(charType$1 & BN_LIKE_TYPES)) {\n var lvl = embedLevels[i$3];\n var isIsolInit = charType$1 & ISOLATE_INIT_TYPES;\n var isPDI = charType$1 === TYPE_PDI;\n if (currentRun && lvl === currentRun._level) {\n currentRun._end = i$3;\n currentRun._endsWithIsolInit = isIsolInit;\n } else {\n levelRuns.push(currentRun = {\n _start: i$3,\n _end: i$3,\n _level: lvl,\n _startsWithPDI: isPDI,\n _endsWithIsolInit: isIsolInit\n });\n }\n }\n }\n var isolatingRunSeqs = []; // [{seqIndices: [], sosType: L|R, eosType: L|R}]\n for (var runIdx = 0; runIdx < levelRuns.length; runIdx++) {\n var run = levelRuns[runIdx];\n if (!run._startsWithPDI || (run._startsWithPDI && !isolationPairs.has(run._start))) {\n var seqRuns = [currentRun = run];\n for (var pdiIndex = (void 0); currentRun && currentRun._endsWithIsolInit && (pdiIndex = isolationPairs.get(currentRun._end)) != null;) {\n for (var i$4 = runIdx + 1; i$4 < levelRuns.length; i$4++) {\n if (levelRuns[i$4]._start === pdiIndex) {\n seqRuns.push(currentRun = levelRuns[i$4]);\n break\n }\n }\n }\n // build flat list of indices across all runs:\n var seqIndices = [];\n for (var i$5 = 0; i$5 < seqRuns.length; i$5++) {\n var run$1 = seqRuns[i$5];\n for (var j = run$1._start; j <= run$1._end; j++) {\n seqIndices.push(j);\n }\n }\n // determine the sos/eos types:\n var firstLevel = embedLevels[seqIndices[0]];\n var prevLevel = paragraph.level;\n for (var i$6 = seqIndices[0] - 1; i$6 >= 0; i$6--) {\n if (!(charTypes[i$6] & BN_LIKE_TYPES)) { //5.2\n prevLevel = embedLevels[i$6];\n break\n }\n }\n var lastIndex = seqIndices[seqIndices.length - 1];\n var lastLevel = embedLevels[lastIndex];\n var nextLevel = paragraph.level;\n if (!(charTypes[lastIndex] & ISOLATE_INIT_TYPES)) {\n for (var i$7 = lastIndex + 1; i$7 <= paragraph.end; i$7++) {\n if (!(charTypes[i$7] & BN_LIKE_TYPES)) { //5.2\n nextLevel = embedLevels[i$7];\n break\n }\n }\n }\n isolatingRunSeqs.push({\n _seqIndices: seqIndices,\n _sosType: Math.max(prevLevel, firstLevel) % 2 ? TYPE_R : TYPE_L,\n _eosType: Math.max(nextLevel, lastLevel) % 2 ? TYPE_R : TYPE_L\n });\n }\n }\n\n // The next steps are done per isolating run sequence\n for (var seqIdx = 0; seqIdx < isolatingRunSeqs.length; seqIdx++) {\n var ref = isolatingRunSeqs[seqIdx];\n var seqIndices$1 = ref._seqIndices;\n var sosType = ref._sosType;\n var eosType = ref._eosType;\n /**\n * All the level runs in an isolating run sequence have the same embedding level.\n * \n * DO NOT change any `embedLevels[i]` within the current scope.\n */\n var embedDirection = ((embedLevels[seqIndices$1[0]]) & 1) ? TYPE_R : TYPE_L;\n\n // === 3.3.4 Resolving Weak Types ===\n\n // W1 + 5.2. Search backward from each NSM to the first character in the isolating run sequence whose\n // bidirectional type is not BN, and set the NSM to ON if it is an isolate initiator or PDI, and to its\n // type otherwise. If the NSM is the first non-BN character, change the NSM to the type of sos.\n if (charTypeCounts.get(TYPE_NSM)) {\n for (var si = 0; si < seqIndices$1.length; si++) {\n var i$8 = seqIndices$1[si];\n if (charTypes[i$8] & TYPE_NSM) {\n var prevType = sosType;\n for (var sj = si - 1; sj >= 0; sj--) {\n if (!(charTypes[seqIndices$1[sj]] & BN_LIKE_TYPES)) { //5.2 scan back to first non-BN\n prevType = charTypes[seqIndices$1[sj]];\n break\n }\n }\n changeCharType(i$8, (prevType & (ISOLATE_INIT_TYPES | TYPE_PDI)) ? TYPE_ON : prevType);\n }\n }\n }\n\n // W2. Search backward from each instance of a European number until the first strong type (R, L, AL, or sos)\n // is found. If an AL is found, change the type of the European number to Arabic number.\n if (charTypeCounts.get(TYPE_EN)) {\n for (var si$1 = 0; si$1 < seqIndices$1.length; si$1++) {\n var i$9 = seqIndices$1[si$1];\n if (charTypes[i$9] & TYPE_EN) {\n for (var sj$1 = si$1 - 1; sj$1 >= -1; sj$1--) {\n var prevCharType = sj$1 === -1 ? sosType : charTypes[seqIndices$1[sj$1]];\n if (prevCharType & STRONG_TYPES) {\n if (prevCharType === TYPE_AL) {\n changeCharType(i$9, TYPE_AN);\n }\n break\n }\n }\n }\n }\n }\n\n // W3. Change all ALs to R\n if (charTypeCounts.get(TYPE_AL)) {\n for (var si$2 = 0; si$2 < seqIndices$1.length; si$2++) {\n var i$10 = seqIndices$1[si$2];\n if (charTypes[i$10] & TYPE_AL) {\n changeCharType(i$10, TYPE_R);\n }\n }\n }\n\n // W4. A single European separator between two European numbers changes to a European number. A single common\n // separator between two numbers of the same type changes to that type.\n if (charTypeCounts.get(TYPE_ES) || charTypeCounts.get(TYPE_CS)) {\n for (var si$3 = 1; si$3 < seqIndices$1.length - 1; si$3++) {\n var i$11 = seqIndices$1[si$3];\n if (charTypes[i$11] & (TYPE_ES | TYPE_CS)) {\n var prevType$1 = 0, nextType = 0;\n for (var sj$2 = si$3 - 1; sj$2 >= 0; sj$2--) {\n prevType$1 = charTypes[seqIndices$1[sj$2]];\n if (!(prevType$1 & BN_LIKE_TYPES)) { //5.2\n break\n }\n }\n for (var sj$3 = si$3 + 1; sj$3 < seqIndices$1.length; sj$3++) {\n nextType = charTypes[seqIndices$1[sj$3]];\n if (!(nextType & BN_LIKE_TYPES)) { //5.2\n break\n }\n }\n if (prevType$1 === nextType && (charTypes[i$11] === TYPE_ES ? prevType$1 === TYPE_EN : (prevType$1 & (TYPE_EN | TYPE_AN)))) {\n changeCharType(i$11, prevType$1);\n }\n }\n }\n }\n\n // W5. A sequence of European terminators adjacent to European numbers changes to all European numbers.\n if (charTypeCounts.get(TYPE_EN)) {\n for (var si$4 = 0; si$4 < seqIndices$1.length; si$4++) {\n var i$12 = seqIndices$1[si$4];\n if (charTypes[i$12] & TYPE_EN) {\n for (var sj$4 = si$4 - 1; sj$4 >= 0 && (charTypes[seqIndices$1[sj$4]] & (TYPE_ET | BN_LIKE_TYPES)); sj$4--) {\n changeCharType(seqIndices$1[sj$4], TYPE_EN);\n }\n for (si$4++; si$4 < seqIndices$1.length && (charTypes[seqIndices$1[si$4]] & (TYPE_ET | BN_LIKE_TYPES | TYPE_EN)); si$4++) {\n if (charTypes[seqIndices$1[si$4]] !== TYPE_EN) {\n changeCharType(seqIndices$1[si$4], TYPE_EN);\n }\n }\n }\n }\n }\n\n // W6. Otherwise, separators and terminators change to Other Neutral.\n if (charTypeCounts.get(TYPE_ET) || charTypeCounts.get(TYPE_ES) || charTypeCounts.get(TYPE_CS)) {\n for (var si$5 = 0; si$5 < seqIndices$1.length; si$5++) {\n var i$13 = seqIndices$1[si$5];\n if (charTypes[i$13] & (TYPE_ET | TYPE_ES | TYPE_CS)) {\n changeCharType(i$13, TYPE_ON);\n // 5.2 transform adjacent BNs too:\n for (var sj$5 = si$5 - 1; sj$5 >= 0 && (charTypes[seqIndices$1[sj$5]] & BN_LIKE_TYPES); sj$5--) {\n changeCharType(seqIndices$1[sj$5], TYPE_ON);\n }\n for (var sj$6 = si$5 + 1; sj$6 < seqIndices$1.length && (charTypes[seqIndices$1[sj$6]] & BN_LIKE_TYPES); sj$6++) {\n changeCharType(seqIndices$1[sj$6], TYPE_ON);\n }\n }\n }\n }\n\n // W7. Search backward from each instance of a European number until the first strong type (R, L, or sos)\n // is found. If an L is found, then change the type of the European number to L.\n // NOTE: implemented in single forward pass for efficiency\n if (charTypeCounts.get(TYPE_EN)) {\n for (var si$6 = 0, prevStrongType = sosType; si$6 < seqIndices$1.length; si$6++) {\n var i$14 = seqIndices$1[si$6];\n var type = charTypes[i$14];\n if (type & TYPE_EN) {\n if (prevStrongType === TYPE_L) {\n changeCharType(i$14, TYPE_L);\n }\n } else if (type & STRONG_TYPES) {\n prevStrongType = type;\n }\n }\n }\n\n // === 3.3.5 Resolving Neutral and Isolate Formatting Types ===\n\n if (charTypeCounts.get(NEUTRAL_ISOLATE_TYPES)) {\n // N0. Process bracket pairs in an isolating run sequence sequentially in the logical order of the text\n // positions of the opening paired brackets using the logic given below. Within this scope, bidirectional\n // types EN and AN are treated as R.\n var R_TYPES_FOR_N_STEPS = (TYPE_R | TYPE_EN | TYPE_AN);\n var STRONG_TYPES_FOR_N_STEPS = R_TYPES_FOR_N_STEPS | TYPE_L;\n\n // * Identify the bracket pairs in the current isolating run sequence according to BD16.\n var bracketPairs = [];\n {\n var openerStack = [];\n for (var si$7 = 0; si$7 < seqIndices$1.length; si$7++) {\n // NOTE: for any potential bracket character we also test that it still carries a NI\n // type, as that may have been changed earlier. This doesn't seem to be explicitly\n // called out in the spec, but is required for passage of certain tests.\n if (charTypes[seqIndices$1[si$7]] & NEUTRAL_ISOLATE_TYPES) {\n var char = string[seqIndices$1[si$7]];\n var oppositeBracket = (void 0);\n // Opening bracket\n if (openingToClosingBracket(char) !== null) {\n if (openerStack.length < 63) {\n openerStack.push({ char: char, seqIndex: si$7 });\n } else {\n break\n }\n }\n // Closing bracket\n else if ((oppositeBracket = closingToOpeningBracket(char)) !== null) {\n for (var stackIdx = openerStack.length - 1; stackIdx >= 0; stackIdx--) {\n var stackChar = openerStack[stackIdx].char;\n if (stackChar === oppositeBracket ||\n stackChar === closingToOpeningBracket(getCanonicalBracket(char)) ||\n openingToClosingBracket(getCanonicalBracket(stackChar)) === char\n ) {\n bracketPairs.push([openerStack[stackIdx].seqIndex, si$7]);\n openerStack.length = stackIdx; //pop the matching bracket and all following\n break\n }\n }\n }\n }\n }\n bracketPairs.sort(function (a, b) { return a[0] - b[0]; });\n }\n // * For each bracket-pair element in the list of pairs of text positions\n for (var pairIdx = 0; pairIdx < bracketPairs.length; pairIdx++) {\n var ref$1 = bracketPairs[pairIdx];\n var openSeqIdx = ref$1[0];\n var closeSeqIdx = ref$1[1];\n // a. Inspect the bidirectional types of the characters enclosed within the bracket pair.\n // b. If any strong type (either L or R) matching the embedding direction is found, set the type for both\n // brackets in the pair to match the embedding direction.\n var foundStrongType = false;\n var useStrongType = 0;\n for (var si$8 = openSeqIdx + 1; si$8 < closeSeqIdx; si$8++) {\n var i$15 = seqIndices$1[si$8];\n if (charTypes[i$15] & STRONG_TYPES_FOR_N_STEPS) {\n foundStrongType = true;\n var lr = (charTypes[i$15] & R_TYPES_FOR_N_STEPS) ? TYPE_R : TYPE_L;\n if (lr === embedDirection) {\n useStrongType = lr;\n break\n }\n }\n }\n // c. Otherwise, if there is a strong type it must be opposite the embedding direction. Therefore, test\n // for an established context with a preceding strong type by checking backwards before the opening paired\n // bracket until the first strong type (L, R, or sos) is found.\n // 1. If the preceding strong type is also opposite the embedding direction, context is established, so\n // set the type for both brackets in the pair to that direction.\n // 2. Otherwise set the type for both brackets in the pair to the embedding direction.\n if (foundStrongType && !useStrongType) {\n useStrongType = sosType;\n for (var si$9 = openSeqIdx - 1; si$9 >= 0; si$9--) {\n var i$16 = seqIndices$1[si$9];\n if (charTypes[i$16] & STRONG_TYPES_FOR_N_STEPS) {\n var lr$1 = (charTypes[i$16] & R_TYPES_FOR_N_STEPS) ? TYPE_R : TYPE_L;\n if (lr$1 !== embedDirection) {\n useStrongType = lr$1;\n } else {\n useStrongType = embedDirection;\n }\n break\n }\n }\n }\n if (useStrongType) {\n charTypes[seqIndices$1[openSeqIdx]] = charTypes[seqIndices$1[closeSeqIdx]] = useStrongType;\n // * Any number of characters that had original bidirectional character type NSM prior to the application\n // of W1 that immediately follow a paired bracket which changed to L or R under N0 should change to match\n // the type of their preceding bracket.\n if (useStrongType !== embedDirection) {\n for (var si$10 = openSeqIdx + 1; si$10 < seqIndices$1.length; si$10++) {\n if (!(charTypes[seqIndices$1[si$10]] & BN_LIKE_TYPES)) {\n if (getBidiCharType(string[seqIndices$1[si$10]]) & TYPE_NSM) {\n charTypes[seqIndices$1[si$10]] = useStrongType;\n }\n break\n }\n }\n }\n if (useStrongType !== embedDirection) {\n for (var si$11 = closeSeqIdx + 1; si$11 < seqIndices$1.length; si$11++) {\n if (!(charTypes[seqIndices$1[si$11]] & BN_LIKE_TYPES)) {\n if (getBidiCharType(string[seqIndices$1[si$11]]) & TYPE_NSM) {\n charTypes[seqIndices$1[si$11]] = useStrongType;\n }\n break\n }\n }\n }\n }\n }\n\n // N1. A sequence of NIs takes the direction of the surrounding strong text if the text on both sides has the\n // same direction.\n // N2. Any remaining NIs take the embedding direction.\n for (var si$12 = 0; si$12 < seqIndices$1.length; si$12++) {\n if (charTypes[seqIndices$1[si$12]] & NEUTRAL_ISOLATE_TYPES) {\n var niRunStart = si$12, niRunEnd = si$12;\n var prevType$2 = sosType; //si === 0 ? sosType : (charTypes[seqIndices[si - 1]] & R_TYPES_FOR_N_STEPS) ? TYPE_R : TYPE_L\n for (var si2 = si$12 - 1; si2 >= 0; si2--) {\n if (charTypes[seqIndices$1[si2]] & BN_LIKE_TYPES) {\n niRunStart = si2; //5.2 treat BNs adjacent to NIs as NIs\n } else {\n prevType$2 = (charTypes[seqIndices$1[si2]] & R_TYPES_FOR_N_STEPS) ? TYPE_R : TYPE_L;\n break\n }\n }\n var nextType$1 = eosType;\n for (var si2$1 = si$12 + 1; si2$1 < seqIndices$1.length; si2$1++) {\n if (charTypes[seqIndices$1[si2$1]] & (NEUTRAL_ISOLATE_TYPES | BN_LIKE_TYPES)) {\n niRunEnd = si2$1;\n } else {\n nextType$1 = (charTypes[seqIndices$1[si2$1]] & R_TYPES_FOR_N_STEPS) ? TYPE_R : TYPE_L;\n break\n }\n }\n for (var sj$7 = niRunStart; sj$7 <= niRunEnd; sj$7++) {\n charTypes[seqIndices$1[sj$7]] = prevType$2 === nextType$1 ? prevType$2 : embedDirection;\n }\n si$12 = niRunEnd;\n }\n }\n }\n }\n\n // === 3.3.6 Resolving Implicit Levels ===\n\n for (var i$17 = paragraph.start; i$17 <= paragraph.end; i$17++) {\n var level$3 = embedLevels[i$17];\n var type$1 = charTypes[i$17];\n // I2. For all characters with an odd (right-to-left) embedding level, those of type L, EN or AN go up one level.\n if (level$3 & 1) {\n if (type$1 & (TYPE_L | TYPE_EN | TYPE_AN)) {\n embedLevels[i$17]++;\n }\n }\n // I1. For all characters with an even (left-to-right) embedding level, those of type R go up one level\n // and those of type AN or EN go up two levels.\n else {\n if (type$1 & TYPE_R) {\n embedLevels[i$17]++;\n } else if (type$1 & (TYPE_AN | TYPE_EN)) {\n embedLevels[i$17] += 2;\n }\n }\n\n // 5.2: Resolve any LRE, RLE, LRO, RLO, PDF, or BN to the level of the preceding character if there is one,\n // and otherwise to the base level.\n if (type$1 & BN_LIKE_TYPES) {\n embedLevels[i$17] = i$17 === 0 ? paragraph.level : embedLevels[i$17 - 1];\n }\n\n // 3.4 L1.1-4: Reset the embedding level of segment/paragraph separators, and any sequence of whitespace or\n // isolate formatting characters preceding them or the end of the paragraph, to the paragraph level.\n // NOTE: this will also need to be applied to each individual line ending after line wrapping occurs.\n if (i$17 === paragraph.end || getBidiCharType(string[i$17]) & (TYPE_S | TYPE_B)) {\n for (var j$1 = i$17; j$1 >= 0 && (getBidiCharType(string[j$1]) & TRAILING_TYPES); j$1--) {\n embedLevels[j$1] = paragraph.level;\n }\n }\n }\n }\n\n // DONE! The resolved levels can then be used, after line wrapping, to flip runs of characters\n // according to section 3.4 Reordering Resolved Levels\n return {\n levels: embedLevels,\n paragraphs: paragraphs\n }\n\n function determineAutoEmbedLevel (start, isFSI) {\n // 3.3.1 P2 - P3\n for (var i = start; i < string.length; i++) {\n var charType = charTypes[i];\n if (charType & (TYPE_R | TYPE_AL)) {\n return 1\n }\n if ((charType & (TYPE_B | TYPE_L)) || (isFSI && charType === TYPE_PDI)) {\n return 0\n }\n if (charType & ISOLATE_INIT_TYPES) {\n var pdi = indexOfMatchingPDI(i);\n i = pdi === -1 ? string.length : pdi;\n }\n }\n return 0\n }\n\n function indexOfMatchingPDI (isolateStart) {\n // 3.1.2 BD9\n var isolationLevel = 1;\n for (var i = isolateStart + 1; i < string.length; i++) {\n var charType = charTypes[i];\n if (charType & TYPE_B) {\n break\n }\n if (charType & TYPE_PDI) {\n if (--isolationLevel === 0) {\n return i\n }\n } else if (charType & ISOLATE_INIT_TYPES) {\n isolationLevel++;\n }\n }\n return -1\n }\n }\n\n // Bidi mirrored chars data, auto generated\n var data = \"14>1,j>2,t>2,u>2,1a>g,2v3>1,1>1,1ge>1,1wd>1,b>1,1j>1,f>1,ai>3,-2>3,+1,8>1k0,-1jq>1y7,-1y6>1hf,-1he>1h6,-1h5>1ha,-1h8>1qi,-1pu>1,6>3u,-3s>7,6>1,1>1,f>1,1>1,+2,3>1,1>1,+13,4>1,1>1,6>1eo,-1ee>1,3>1mg,-1me>1mk,-1mj>1mi,-1mg>1mi,-1md>1,1>1,+2,1>10k,-103>1,1>1,4>1,5>1,1>1,+10,3>1,1>8,-7>8,+1,-6>7,+1,a>1,1>1,u>1,u6>1,1>1,+5,26>1,1>1,2>1,2>2,8>1,7>1,4>1,1>1,+5,b8>1,1>1,+3,1>3,-2>1,2>1,1>1,+2,c>1,3>1,1>1,+2,h>1,3>1,a>1,1>1,2>1,3>1,1>1,d>1,f>1,3>1,1a>1,1>1,6>1,7>1,13>1,k>1,1>1,+19,4>1,1>1,+2,2>1,1>1,+18,m>1,a>1,1>1,lk>1,1>1,4>1,2>1,f>1,3>1,1>1,+3,db>1,1>1,+3,3>1,1>1,+2,14qm>1,1>1,+1,6>1,4j>1,j>2,t>2,u>2,2>1,+1\";\n\n var mirrorMap;\n\n function parse () {\n if (!mirrorMap) {\n //const start = performance.now()\n var ref = parseCharacterMap(data, true);\n var map = ref.map;\n var reverseMap = ref.reverseMap;\n // Combine both maps into one\n reverseMap.forEach(function (value, key) {\n map.set(key, value);\n });\n mirrorMap = map;\n //console.log(`mirrored chars parsed in ${performance.now() - start}ms`)\n }\n }\n\n function getMirroredCharacter (char) {\n parse();\n return mirrorMap.get(char) || null\n }\n\n /**\n * Given a string and its resolved embedding levels, build a map of indices to replacement chars\n * for any characters in right-to-left segments that have defined mirrored characters.\n * @param string\n * @param embeddingLevels\n * @param [start]\n * @param [end]\n * @return {Map<number, string>}\n */\n function getMirroredCharactersMap(string, embeddingLevels, start, end) {\n var strLen = string.length;\n start = Math.max(0, start == null ? 0 : +start);\n end = Math.min(strLen - 1, end == null ? strLen - 1 : +end);\n\n var map = new Map();\n for (var i = start; i <= end; i++) {\n if (embeddingLevels[i] & 1) { //only odd (rtl) levels\n var mirror = getMirroredCharacter(string[i]);\n if (mirror !== null) {\n map.set(i, mirror);\n }\n }\n }\n return map\n }\n\n /**\n * Given a start and end denoting a single line within a string, and a set of precalculated\n * bidi embedding levels, produce a list of segments whose ordering should be flipped, in sequence.\n * @param {string} string - the full input string\n * @param {GetEmbeddingLevelsResult} embeddingLevelsResult - the result object from getEmbeddingLevels\n * @param {number} [start] - first character in a subset of the full string\n * @param {number} [end] - last character in a subset of the full string\n * @return {number[][]} - the list of start/end segments that should be flipped, in order.\n */\n function getReorderSegments(string, embeddingLevelsResult, start, end) {\n var strLen = string.length;\n start = Math.max(0, start == null ? 0 : +start);\n end = Math.min(strLen - 1, end == null ? strLen - 1 : +end);\n\n var segments = [];\n embeddingLevelsResult.paragraphs.forEach(function (paragraph) {\n var lineStart = Math.max(start, paragraph.start);\n var lineEnd = Math.min(end, paragraph.end);\n if (lineStart < lineEnd) {\n // Local slice for mutation\n var lineLevels = embeddingLevelsResult.levels.slice(lineStart, lineEnd + 1);\n\n // 3.4 L1.4: Reset any sequence of whitespace characters and/or isolate formatting characters at the\n // end of the line to the paragraph level.\n for (var i = lineEnd; i >= lineStart && (getBidiCharType(string[i]) & TRAILING_TYPES); i--) {\n lineLevels[i] = paragraph.level;\n }\n\n // L2. From the highest level found in the text to the lowest odd level on each line, including intermediate levels\n // not actually present in the text, reverse any contiguous sequence of characters that are at that level or higher.\n var maxLevel = paragraph.level;\n var minOddLevel = Infinity;\n for (var i$1 = 0; i$1 < lineLevels.length; i$1++) {\n var level = lineLevels[i$1];\n if (level > maxLevel) { maxLevel = level; }\n if (level < minOddLevel) { minOddLevel = level | 1; }\n }\n for (var lvl = maxLevel; lvl >= minOddLevel; lvl--) {\n for (var i$2 = 0; i$2 < lineLevels.length; i$2++) {\n if (lineLevels[i$2] >= lvl) {\n var segStart = i$2;\n while (i$2 + 1 < lineLevels.length && lineLevels[i$2 + 1] >= lvl) {\n i$2++;\n }\n if (i$2 > segStart) {\n segments.push([segStart + lineStart, i$2 + lineStart]);\n }\n }\n }\n }\n }\n });\n return segments\n }\n\n /**\n * @param {string} string\n * @param {GetEmbeddingLevelsResult} embedLevelsResult\n * @param {number} [start]\n * @param {number} [end]\n * @return {string} the new string with bidi segments reordered\n */\n function getReorderedString(string, embedLevelsResult, start, end) {\n var indices = getReorderedIndices(string, embedLevelsResult, start, end);\n var chars = [].concat( string );\n indices.forEach(function (charIndex, i) {\n chars[i] = (\n (embedLevelsResult.levels[charIndex] & 1) ? getMirroredCharacter(string[charIndex]) : null\n ) || string[charIndex];\n });\n return chars.join('')\n }\n\n /**\n * @param {string} string\n * @param {GetEmbeddingLevelsResult} embedLevelsResult\n * @param {number} [start]\n * @param {number} [end]\n * @return {number[]} an array with character indices in their new bidi order\n */\n function getReorderedIndices(string, embedLevelsResult, start, end) {\n var segments = getReorderSegments(string, embedLevelsResult, start, end);\n // Fill an array with indices\n var indices = [];\n for (var i = 0; i < string.length; i++) {\n indices[i] = i;\n }\n // Reverse each segment in order\n segments.forEach(function (ref) {\n var start = ref[0];\n var end = ref[1];\n\n var slice = indices.slice(start, end + 1);\n for (var i = slice.length; i--;) {\n indices[end - i] = slice[i];\n }\n });\n return indices\n }\n\n exports.closingToOpeningBracket = closingToOpeningBracket;\n exports.getBidiCharType = getBidiCharType;\n exports.getBidiCharTypeName = getBidiCharTypeName;\n exports.getCanonicalBracket = getCanonicalBracket;\n exports.getEmbeddingLevels = getEmbeddingLevels;\n exports.getMirroredCharacter = getMirroredCharacter;\n exports.getMirroredCharactersMap = getMirroredCharactersMap;\n exports.getReorderSegments = getReorderSegments;\n exports.getReorderedIndices = getReorderedIndices;\n exports.getReorderedString = getReorderedString;\n exports.openingToClosingBracket = openingToClosingBracket;\n\n Object.defineProperty(exports, '__esModule', { value: true });\n\n return exports;\n\n}({}));\nreturn bidi}\n\nexport default bidiFactory;\n", "import { ShaderChunk, UniformsUtils, MeshDepthMaterial, RGBADepthPacking, MeshDistanceMaterial, ShaderLib, Matrix4, Vector3, Mesh, CylinderGeometry, Vector2, MeshStandardMaterial, DoubleSide } from 'three';\n\n/**\n * Regular expression for matching the `void main() {` opener line in GLSL.\n * @type {RegExp}\n */\nconst voidMainRegExp = /\\bvoid\\s+main\\s*\\(\\s*\\)\\s*{/g;\n\n/**\n * Recursively expands all `#include <xyz>` statements within string of shader code.\n * Copied from three's WebGLProgram#parseIncludes for external use.\n *\n * @param {string} source - The GLSL source code to evaluate\n * @return {string} The GLSL code with all includes expanded\n */\nfunction expandShaderIncludes( source ) {\n const pattern = /^[ \\t]*#include +<([\\w\\d./]+)>/gm;\n function replace(match, include) {\n let chunk = ShaderChunk[include];\n return chunk ? expandShaderIncludes(chunk) : match\n }\n return source.replace( pattern, replace )\n}\n\n/*\n * This is a direct copy of MathUtils.generateUUID from Three.js, to preserve compatibility with three\n * versions before 0.113.0 as it was changed from Math to MathUtils in that version.\n * https://github.com/mrdoob/three.js/blob/dd8b5aa3b270c17096b90945cd2d6d1b13aaec53/src/math/MathUtils.js#L16\n */\n\nconst _lut = [];\n\nfor (let i = 0; i < 256; i++) {\n _lut[i] = (i < 16 ? '0' : '') + (i).toString(16);\n}\n\nfunction generateUUID() {\n\n // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/21963136#21963136\n\n const d0 = Math.random() * 0xffffffff | 0;\n const d1 = Math.random() * 0xffffffff | 0;\n const d2 = Math.random() * 0xffffffff | 0;\n const d3 = Math.random() * 0xffffffff | 0;\n const uuid = _lut[d0 & 0xff] + _lut[d0 >> 8 & 0xff] + _lut[d0 >> 16 & 0xff] + _lut[d0 >> 24 & 0xff] + '-' +\n _lut[d1 & 0xff] + _lut[d1 >> 8 & 0xff] + '-' + _lut[d1 >> 16 & 0x0f | 0x40] + _lut[d1 >> 24 & 0xff] + '-' +\n _lut[d2 & 0x3f | 0x80] + _lut[d2 >> 8 & 0xff] + '-' + _lut[d2 >> 16 & 0xff] + _lut[d2 >> 24 & 0xff] +\n _lut[d3 & 0xff] + _lut[d3 >> 8 & 0xff] + _lut[d3 >> 16 & 0xff] + _lut[d3 >> 24 & 0xff];\n\n // .toUpperCase() here flattens concatenated strings to save heap memory space.\n return uuid.toUpperCase()\n\n}\n\n// Local assign polyfill to avoid importing troika-core\nconst assign = Object.assign || function(/*target, ...sources*/) {\n let target = arguments[0];\n for (let i = 1, len = arguments.length; i < len; i++) {\n let source = arguments[i];\n if (source) {\n for (let prop in source) {\n if (Object.prototype.hasOwnProperty.call(source, prop)) {\n target[prop] = source[prop];\n }\n }\n }\n }\n return target\n};\n\n\nconst epoch = Date.now();\nconst CONSTRUCTOR_CACHE = new WeakMap();\nconst SHADER_UPGRADE_CACHE = new Map();\n\n// Material ids must be integers, but we can't access the increment from Three's `Material` module,\n// so let's choose a sufficiently large starting value that should theoretically never collide.\nlet materialInstanceId = 1e10;\n\n/**\n * A utility for creating a custom shader material derived from another material's\n * shaders. This allows you to inject custom shader logic and transforms into the\n * builtin ThreeJS materials without having to recreate them from scratch.\n *\n * @param {THREE.Material} baseMaterial - the original material to derive from\n *\n * @param {Object} options - How the base material should be modified.\n * @param {Object=} options.defines - Custom `defines` for the material\n * @param {Object=} options.extensions - Custom `extensions` for the material, e.g. `{derivatives: true}`\n * @param {Object=} options.uniforms - Custom `uniforms` for use in the modified shader. These can\n * be accessed and manipulated via the resulting material's `uniforms` property, just like\n * in a ShaderMaterial. You do not need to repeat the base material's own uniforms here.\n * @param {String=} options.timeUniform - If specified, a uniform of this name will be injected into\n * both shaders, and it will automatically be updated on each render frame with a number of\n * elapsed milliseconds. The \"zero\" epoch time is not significant so don't rely on this as a\n * true calendar time.\n * @param {String=} options.vertexDefs - Custom GLSL code to inject into the vertex shader's top-level\n * definitions, above the `void main()` function.\n * @param {String=} options.vertexMainIntro - Custom GLSL code to inject at the top of the vertex\n * shader's `void main` function.\n * @param {String=} options.vertexMainOutro - Custom GLSL code to inject at the end of the vertex\n * shader's `void main` function.\n * @param {String=} options.vertexTransform - Custom GLSL code to manipulate the `position`, `normal`,\n * and/or `uv` vertex attributes. This code will be wrapped within a standalone function with\n * those attributes exposed by their normal names as read/write values.\n * @param {String=} options.fragmentDefs - Custom GLSL code to inject into the fragment shader's top-level\n * definitions, above the `void main()` function.\n * @param {String=} options.fragmentMainIntro - Custom GLSL code to inject at the top of the fragment\n * shader's `void main` function.\n * @param {String=} options.fragmentMainOutro - Custom GLSL code to inject at the end of the fragment\n * shader's `void main` function. You can manipulate `gl_FragColor` here but keep in mind it goes\n * after any of ThreeJS's color postprocessing shader chunks (tonemapping, fog, etc.), so if you\n * want those to apply to your changes use `fragmentColorTransform` instead.\n * @param {String=} options.fragmentColorTransform - Custom GLSL code to manipulate the `gl_FragColor`\n * output value. Will be injected near the end of the `void main` function, but before any\n * of ThreeJS's color postprocessing shader chunks (tonemapping, fog, etc.), and before the\n * `fragmentMainOutro`.\n * @param {function({fragmentShader: string, vertexShader:string}):\n * {fragmentShader: string, vertexShader:string}} options.customRewriter - A function\n * for performing custom rewrites of the full shader code. Useful if you need to do something\n * special that's not covered by the other builtin options. This function will be executed before\n * any other transforms are applied.\n * @param {boolean=} options.chained - Set to `true` to prototype-chain the derived material to the base\n * material, rather than the default behavior of copying it. This allows the derived material to\n * automatically pick up changes made to the base material and its properties. This can be useful\n * where the derived material is hidden from the user as an implementation detail, allowing them\n * to work with the original material like normal. But it can result in unexpected behavior if not\n * handled carefully.\n *\n * @return {THREE.Material}\n *\n * The returned material will also have two new methods, `getDepthMaterial()` and `getDistanceMaterial()`,\n * which can be called to get a variant of the derived material for use in shadow casting. If the\n * target mesh is expected to cast shadows, then you can assign these to the mesh's `customDepthMaterial`\n * (for directional and spot lights) and/or `customDistanceMaterial` (for point lights) properties to\n * allow the cast shadow to honor your derived shader's vertex transforms and discarded fragments. These\n * will also set a custom `#define IS_DEPTH_MATERIAL` or `#define IS_DISTANCE_MATERIAL` that you can look\n * for in your derived shaders with `#ifdef` to customize their behavior for the depth or distance\n * scenarios, e.g. skipping antialiasing or expensive shader logic.\n */\nfunction createDerivedMaterial(baseMaterial, options) {\n // Generate a key that is unique to the content of these `options`. We'll use this\n // throughout for caching and for generating the upgraded shader code. This increases\n // the likelihood that the resulting shaders will line up across multiple calls so\n // their GL programs can be shared and cached.\n const optionsKey = getKeyForOptions(options);\n\n // First check to see if we've already derived from this baseMaterial using this\n // unique set of options, and if so reuse the constructor to avoid some allocations.\n let ctorsByDerivation = CONSTRUCTOR_CACHE.get(baseMaterial);\n if (!ctorsByDerivation) {\n CONSTRUCTOR_CACHE.set(baseMaterial, (ctorsByDerivation = Object.create(null)));\n }\n if (ctorsByDerivation[optionsKey]) {\n return new ctorsByDerivation[optionsKey]()\n }\n\n const privateBeforeCompileProp = `_onBeforeCompile${optionsKey}`;\n\n // Private onBeforeCompile handler that injects the modified shaders and uniforms when\n // the renderer switches to this material's program\n const onBeforeCompile = function (shaderInfo, renderer) {\n baseMaterial.onBeforeCompile.call(this, shaderInfo, renderer);\n\n // Upgrade the shaders, caching the result by incoming source code\n const cacheKey = this.customProgramCacheKey() + '|' + shaderInfo.vertexShader + '|' + shaderInfo.fragmentShader;\n let upgradedShaders = SHADER_UPGRADE_CACHE[cacheKey];\n if (!upgradedShaders) {\n const upgraded = upgradeShaders(this, shaderInfo, options, optionsKey);\n upgradedShaders = SHADER_UPGRADE_CACHE[cacheKey] = upgraded;\n }\n\n // Inject upgraded shaders and uniforms into the program\n shaderInfo.vertexShader = upgradedShaders.vertexShader;\n shaderInfo.fragmentShader = upgradedShaders.fragmentShader;\n assign(shaderInfo.uniforms, this.uniforms);\n\n // Inject auto-updating time uniform if requested\n if (options.timeUniform) {\n shaderInfo.uniforms[options.timeUniform] = {\n get value() {return Date.now() - epoch}\n };\n }\n\n // Users can still add their own handlers on top of ours\n if (this[privateBeforeCompileProp]) {\n this[privateBeforeCompileProp](shaderInfo);\n }\n };\n\n const DerivedMaterial = function DerivedMaterial() {\n return derive(options.chained ? baseMaterial : baseMaterial.clone())\n };\n\n const derive = function(base) {\n // Prototype chain to the base material\n const derived = Object.create(base, descriptor);\n\n // Store the baseMaterial for reference; this is always the original even when cloning\n Object.defineProperty(derived, 'baseMaterial', { value: baseMaterial });\n\n // Needs its own ids\n Object.defineProperty(derived, 'id', { value: materialInstanceId++ });\n derived.uuid = generateUUID();\n\n // Merge uniforms, defines, and extensions\n derived.uniforms = assign({}, base.uniforms, options.uniforms);\n derived.defines = assign({}, base.defines, options.defines);\n derived.defines[`TROIKA_DERIVED_MATERIAL_${optionsKey}`] = ''; //force a program change from the base material\n derived.extensions = assign({}, base.extensions, options.extensions);\n\n // Don't inherit EventDispatcher listeners\n derived._listeners = undefined;\n\n return derived\n };\n\n const descriptor = {\n constructor: {value: DerivedMaterial},\n isDerivedMaterial: {value: true},\n\n type: {\n get: () => baseMaterial.type,\n set: (value) => {baseMaterial.type = value;}\n },\n\n isDerivedFrom: {\n writable: true,\n configurable: true,\n value: function (testMaterial) {\n const base = this.baseMaterial;\n return testMaterial === base || (base.isDerivedMaterial && base.isDerivedFrom(testMaterial)) || false\n }\n },\n\n customProgramCacheKey: {\n writable: true,\n configurable: true,\n value: function () {\n return baseMaterial.customProgramCacheKey() + '|' + optionsKey\n }\n },\n\n onBeforeCompile: {\n get() {\n return onBeforeCompile\n },\n set(fn) {\n this[privateBeforeCompileProp] = fn;\n }\n },\n\n copy: {\n writable: true,\n configurable: true,\n value: function (source) {\n baseMaterial.copy.call(this, source);\n if (!baseMaterial.isShaderMaterial && !baseMaterial.isDerivedMaterial) {\n assign(this.extensions, source.extensions);\n assign(this.defines, source.defines);\n assign(this.uniforms, UniformsUtils.clone(source.uniforms));\n }\n return this\n }\n },\n\n clone: {\n writable: true,\n configurable: true,\n value: function () {\n const newBase = new baseMaterial.constructor();\n return derive(newBase).copy(this)\n }\n },\n\n /**\n * Utility to get a MeshDepthMaterial that will honor this derived material's vertex\n * transformations and discarded fragments.\n */\n getDepthMaterial: {\n writable: true,\n configurable: true,\n value: function() {\n let depthMaterial = this._depthMaterial;\n if (!depthMaterial) {\n depthMaterial = this._depthMaterial = createDerivedMaterial(\n baseMaterial.isDerivedMaterial\n ? baseMaterial.getDepthMaterial()\n : new MeshDepthMaterial({ depthPacking: RGBADepthPacking }),\n options\n );\n depthMaterial.defines.IS_DEPTH_MATERIAL = '';\n depthMaterial.uniforms = this.uniforms; //automatically recieve same uniform values\n }\n return depthMaterial\n }\n },\n\n /**\n * Utility to get a MeshDistanceMaterial that will honor this derived material's vertex\n * transformations and discarded fragments.\n */\n getDistanceMaterial: {\n writable: true,\n configurable: true,\n value: function() {\n let distanceMaterial = this._distanceMaterial;\n if (!distanceMaterial) {\n distanceMaterial = this._distanceMaterial = createDerivedMaterial(\n baseMaterial.isDerivedMaterial\n ? baseMaterial.getDistanceMaterial()\n : new MeshDistanceMaterial(),\n options\n );\n distanceMaterial.defines.IS_DISTANCE_MATERIAL = '';\n distanceMaterial.uniforms = this.uniforms; //automatically recieve same uniform values\n }\n return distanceMaterial\n }\n },\n\n dispose: {\n writable: true,\n configurable: true,\n value() {\n const {_depthMaterial, _distanceMaterial} = this;\n if (_depthMaterial) _depthMaterial.dispose();\n if (_distanceMaterial) _distanceMaterial.dispose();\n baseMaterial.dispose.call(this);\n }\n }\n };\n\n ctorsByDerivation[optionsKey] = DerivedMaterial;\n return new DerivedMaterial()\n}\n\n\nfunction upgradeShaders(material, {vertexShader, fragmentShader}, options, key) {\n let {\n vertexDefs,\n vertexMainIntro,\n vertexMainOutro,\n vertexTransform,\n fragmentDefs,\n fragmentMainIntro,\n fragmentMainOutro,\n fragmentColorTransform,\n customRewriter,\n timeUniform\n } = options;\n\n vertexDefs = vertexDefs || '';\n vertexMainIntro = vertexMainIntro || '';\n vertexMainOutro = vertexMainOutro || '';\n fragmentDefs = fragmentDefs || '';\n fragmentMainIntro = fragmentMainIntro || '';\n fragmentMainOutro = fragmentMainOutro || '';\n\n // Expand includes if needed\n if (vertexTransform || customRewriter) {\n vertexShader = expandShaderIncludes(vertexShader);\n }\n if (fragmentColorTransform || customRewriter) {\n // We need to be able to find postprocessing chunks after include expansion in order to\n // put them after the fragmentColorTransform, so mark them with comments first. Even if\n // this particular derivation doesn't have a fragmentColorTransform, other derivations may,\n // so we still mark them.\n fragmentShader = fragmentShader.replace(\n /^[ \\t]*#include <((?:tonemapping|encodings|colorspace|fog|premultiplied_alpha|dithering)_fragment)>/gm,\n '\\n//!BEGIN_POST_CHUNK $1\\n$&\\n//!END_POST_CHUNK\\n'\n );\n fragmentShader = expandShaderIncludes(fragmentShader);\n }\n\n // Apply custom rewriter function\n if (customRewriter) {\n let res = customRewriter({vertexShader, fragmentShader});\n vertexShader = res.vertexShader;\n fragmentShader = res.fragmentShader;\n }\n\n // The fragmentColorTransform needs to go before any postprocessing chunks, so extract\n // those and re-insert them into the outro in the correct place:\n if (fragmentColorTransform) {\n let postChunks = [];\n fragmentShader = fragmentShader.replace(\n /^\\/\\/!BEGIN_POST_CHUNK[^]+?^\\/\\/!END_POST_CHUNK/gm, // [^]+? = non-greedy match of any chars including newlines\n match => {\n postChunks.push(match);\n return ''\n }\n );\n fragmentMainOutro = `${fragmentColorTransform}\\n${postChunks.join('\\n')}\\n${fragmentMainOutro}`;\n }\n\n // Inject auto-updating time uniform if requested\n if (timeUniform) {\n const code = `\\nuniform float ${timeUniform};\\n`;\n vertexDefs = code + vertexDefs;\n fragmentDefs = code + fragmentDefs;\n }\n\n // Inject a function for the vertexTransform and rename all usages of position/normal/uv\n if (vertexTransform) {\n // Hoist these defs to the very top so they work in other function defs\n vertexShader = `vec3 troika_position_${key};\nvec3 troika_normal_${key};\nvec2 troika_uv_${key};\n${vertexShader}\n`;\n vertexDefs = `${vertexDefs}\nvoid troikaVertexTransform${key}(inout vec3 position, inout vec3 normal, inout vec2 uv) {\n ${vertexTransform}\n}\n`;\n vertexMainIntro = `\ntroika_position_${key} = vec3(position);\ntroika_normal_${key} = vec3(normal);\ntroika_uv_${key} = vec2(uv);\ntroikaVertexTransform${key}(troika_position_${key}, troika_normal_${key}, troika_uv_${key});\n${vertexMainIntro}\n`;\n vertexShader = vertexShader.replace(/\\b(position|normal|uv)\\b/g, (match, match1, index, fullStr) => {\n return /\\battribute\\s+vec[23]\\s+$/.test(fullStr.substr(0, index)) ? match1 : `troika_${match1}_${key}`\n });\n\n // Three r152 introduced the MAP_UV token, replace it too if it's pointing to the main 'uv'\n // Perhaps the other textures too going forward?\n if (!(material.map && material.map.channel > 0)) {\n vertexShader = vertexShader.replace(/\\bMAP_UV\\b/g, `troika_uv_${key}`);\n }\n }\n\n // Inject defs and intro/outro snippets\n vertexShader = injectIntoShaderCode(vertexShader, key, vertexDefs, vertexMainIntro, vertexMainOutro);\n fragmentShader = injectIntoShaderCode(fragmentShader, key, fragmentDefs, fragmentMainIntro, fragmentMainOutro);\n\n return {\n vertexShader,\n fragmentShader\n }\n}\n\nfunction injectIntoShaderCode(shaderCode, id, defs, intro, outro) {\n if (intro || outro || defs) {\n shaderCode = shaderCode.replace(voidMainRegExp, `\n${defs}\nvoid troikaOrigMain${id}() {`\n );\n shaderCode += `\nvoid main() {\n ${intro}\n troikaOrigMain${id}();\n ${outro}\n}`;\n }\n return shaderCode\n}\n\n\nfunction optionsJsonReplacer(key, value) {\n return key === 'uniforms' ? undefined : typeof value === 'function' ? value.toString() : value\n}\n\nlet _idCtr = 0;\nconst optionsHashesToIds = new Map();\nfunction getKeyForOptions(options) {\n const optionsHash = JSON.stringify(options, optionsJsonReplacer);\n let id = optionsHashesToIds.get(optionsHash);\n if (id == null) {\n optionsHashesToIds.set(optionsHash, (id = ++_idCtr));\n }\n return id\n}\n\n// Copied from threejs WebGLPrograms.js so we can resolve builtin materials to their shaders\n// TODO how can we keep this from getting stale?\nconst MATERIAL_TYPES_TO_SHADERS = {\n MeshDepthMaterial: 'depth',\n MeshDistanceMaterial: 'distanceRGBA',\n MeshNormalMaterial: 'normal',\n MeshBasicMaterial: 'basic',\n MeshLambertMaterial: 'lambert',\n MeshPhongMaterial: 'phong',\n MeshToonMaterial: 'toon',\n MeshStandardMaterial: 'physical',\n MeshPhysicalMaterial: 'physical',\n MeshMatcapMaterial: 'matcap',\n LineBasicMaterial: 'basic',\n LineDashedMaterial: 'dashed',\n PointsMaterial: 'points',\n ShadowMaterial: 'shadow',\n SpriteMaterial: 'sprite'\n};\n\n/**\n * Given a Three.js `Material` instance, find the shaders/uniforms that will be\n * used to render that material.\n *\n * @param material - the Material instance\n * @return {object} - the material's shader info: `{uniforms:{}, fragmentShader:'', vertexShader:''}`\n */\nfunction getShadersForMaterial(material) {\n let builtinType = MATERIAL_TYPES_TO_SHADERS[material.type];\n return builtinType ? ShaderLib[builtinType] : material //TODO fallback for unknown type?\n}\n\n/**\n * Find all uniforms and their types within a shader code string.\n *\n * @param {string} shader - The shader code to parse\n * @return {object} mapping of uniform names to their glsl type\n */\nfunction getShaderUniformTypes(shader) {\n let uniformRE = /\\buniform\\s+(int|float|vec[234]|mat[34])\\s+([A-Za-z_][\\w]*)/g;\n let uniforms = Object.create(null);\n let match;\n while ((match = uniformRE.exec(shader)) !== null) {\n uniforms[match[2]] = match[1];\n }\n return uniforms\n}\n\n/**\n * Helper for smoothing out the `m.getInverse(x)` --> `m.copy(x).invert()` conversion\n * that happened in ThreeJS r123.\n * @param {Matrix4} srcMatrix\n * @param {Matrix4} [tgtMatrix]\n */\nfunction invertMatrix4(srcMatrix, tgtMatrix = new Matrix4()) {\n if (typeof tgtMatrix.invert === 'function') {\n tgtMatrix.copy(srcMatrix).invert();\n } else {\n tgtMatrix.getInverse(srcMatrix);\n }\n return tgtMatrix\n}\n\n/*\nInput geometry is a cylinder with r=1, height in y dimension from 0 to 1,\ndivided into a reasonable number of height segments.\n*/\n\nconst vertexDefs = `\nuniform vec3 pointA;\nuniform vec3 controlA;\nuniform vec3 controlB;\nuniform vec3 pointB;\nuniform float radius;\nvarying float bezierT;\n\nvec3 cubicBezier(vec3 p1, vec3 c1, vec3 c2, vec3 p2, float t) {\n float t2 = 1.0 - t;\n float b0 = t2 * t2 * t2;\n float b1 = 3.0 * t * t2 * t2;\n float b2 = 3.0 * t * t * t2;\n float b3 = t * t * t;\n return b0 * p1 + b1 * c1 + b2 * c2 + b3 * p2;\n}\n\nvec3 cubicBezierDerivative(vec3 p1, vec3 c1, vec3 c2, vec3 p2, float t) {\n float t2 = 1.0 - t;\n return -3.0 * p1 * t2 * t2 +\n c1 * (3.0 * t2 * t2 - 6.0 * t2 * t) +\n c2 * (6.0 * t2 * t - 3.0 * t * t) +\n 3.0 * p2 * t * t;\n}\n`;\n\nconst vertexTransform = `\nfloat t = position.y;\nbezierT = t;\nvec3 bezierCenterPos = cubicBezier(pointA, controlA, controlB, pointB, t);\nvec3 bezierDir = normalize(cubicBezierDerivative(pointA, controlA, controlB, pointB, t));\n\n// Make \"sideways\" always perpendicular to the camera ray; this ensures that any twists\n// in the cylinder occur where you won't see them: \nvec3 viewDirection = normalMatrix * vec3(0.0, 0.0, 1.0);\nif (bezierDir == viewDirection) {\n bezierDir = normalize(cubicBezierDerivative(pointA, controlA, controlB, pointB, t == 1.0 ? t - 0.0001 : t + 0.0001));\n}\nvec3 sideways = normalize(cross(bezierDir, viewDirection));\nvec3 upish = normalize(cross(sideways, bezierDir));\n\n// Build a matrix for transforming this disc in the cylinder:\nmat4 discTx;\ndiscTx[0].xyz = sideways * radius;\ndiscTx[1].xyz = bezierDir * radius;\ndiscTx[2].xyz = upish * radius;\ndiscTx[3].xyz = bezierCenterPos;\ndiscTx[3][3] = 1.0;\n\n// Apply transform, ignoring original y\nposition = (discTx * vec4(position.x, 0.0, position.z, 1.0)).xyz;\nnormal = normalize(mat3(discTx) * normal);\n`;\n\nconst fragmentDefs = `\nuniform vec3 dashing;\nvarying float bezierT;\n`;\n\nconst fragmentMainIntro = `\nif (dashing.x + dashing.y > 0.0) {\n float dashFrac = mod(bezierT - dashing.z, dashing.x + dashing.y);\n if (dashFrac > dashing.x) {\n discard;\n }\n}\n`;\n\n// Debugging: separate color for each of the 6 sides:\n// const fragmentColorTransform = `\n// float sideNum = floor(vUV.x * 6.0);\n// vec3 mixColor = sideNum < 1.0 ? vec3(1.0, 0.0, 0.0) :\n// sideNum < 2.0 ? vec3(0.0, 1.0, 1.0) :\n// sideNum < 3.0 ? vec3(1.0, 1.0, 0.0) :\n// sideNum < 4.0 ? vec3(0.0, 0.0, 1.0) :\n// sideNum < 5.0 ? vec3(0.0, 1.0, 0.0) :\n// vec3(1.0, 0.0, 1.0);\n// gl_FragColor.xyz = mix(gl_FragColor.xyz, mixColor, 0.5);\n// `\n\n\n\nfunction createBezierMeshMaterial(baseMaterial) {\n return createDerivedMaterial(\n baseMaterial,\n {\n chained: true,\n uniforms: {\n pointA: {value: new Vector3()},\n controlA: {value: new Vector3()},\n controlB: {value: new Vector3()},\n pointB: {value: new Vector3()},\n radius: {value: 0.01},\n dashing: {value: new Vector3()} //on, off, offset\n },\n vertexDefs,\n vertexTransform,\n fragmentDefs,\n fragmentMainIntro\n }\n )\n}\n\nlet geometry = null;\n\nconst defaultBaseMaterial = /*#__PURE__*/new MeshStandardMaterial({color: 0xffffff, side: DoubleSide});\n\n\n/**\n * A ThreeJS `Mesh` that bends a tube shape along a 3D cubic bezier path. The bending is done\n * by deforming a straight cylindrical geometry in the vertex shader based on a set of four\n * control point uniforms. It patches the necessary GLSL into the mesh's assigned `material`\n * automatically.\n *\n * The cubiz bezier path is determined by its four `Vector3` properties:\n * - `pointA`\n * - `controlA`\n * - `controlB`\n * - `pointB`\n *\n * The tube's radius is controlled by its `radius` property, which defaults to `0.01`.\n *\n * You can also give the tube a dashed appearance with two properties:\n *\n * - `dashArray` - an array of two numbers, defining the length of \"on\" and \"off\" parts of\n * the dash. Each is a 0-1 ratio of the entire path's length. (Actually this is the `t` length\n * used as input to the cubic bezier function, not its visible length.)\n * - `dashOffset` - offset of where the dash starts. You can animate this to make the dashes move.\n *\n * Note that the dashes will appear like a hollow tube, not solid. This will be more apparent on\n * thicker tubes.\n *\n * TODO: proper geometry bounding sphere and raycasting\n * TODO: allow control of the geometry's segment counts\n */\nclass BezierMesh extends Mesh {\n static getGeometry() {\n return geometry || (geometry =\n new CylinderGeometry(1, 1, 1, 6, 64).translate(0, 0.5, 0)\n )\n }\n\n constructor() {\n super(\n BezierMesh.getGeometry(),\n defaultBaseMaterial\n );\n\n this.pointA = new Vector3();\n this.controlA = new Vector3();\n this.controlB = new Vector3();\n this.pointB = new Vector3();\n this.radius = 0.01;\n this.dashArray = new Vector2();\n this.dashOffset = 0;\n\n // TODO - disabling frustum culling until I figure out how to customize the\n // geometry's bounding sphere that gets used\n this.frustumCulled = false;\n }\n\n // Handler for automatically wrapping the base material with our upgrades. We do the wrapping\n // lazily on _read_ rather than write to avoid unnecessary wrapping on transient values.\n get material() {\n let derivedMaterial = this._derivedMaterial;\n const baseMaterial = this._baseMaterial || this._defaultMaterial || (this._defaultMaterial = defaultBaseMaterial.clone());\n if (!derivedMaterial || derivedMaterial.baseMaterial !== baseMaterial) {\n derivedMaterial = this._derivedMaterial = createBezierMeshMaterial(baseMaterial);\n // dispose the derived material when its base material is disposed:\n baseMaterial.addEventListener('dispose', function onDispose() {\n baseMaterial.removeEventListener('dispose', onDispose);\n derivedMaterial.dispose();\n });\n }\n return derivedMaterial\n }\n set material(baseMaterial) {\n this._baseMaterial = baseMaterial;\n }\n\n // Create and update material for shadows upon request:\n get customDepthMaterial() {\n return this.material.getDepthMaterial()\n }\n set customDepthMaterial(m) {\n // future: let the user override with their own?\n }\n get customDistanceMaterial() {\n return this.material.getDistanceMaterial()\n }\n set customDistanceMaterial(m) {\n // future: let the user override with their own?\n }\n\n onBeforeRender() {\n const {uniforms} = this.material;\n const {pointA, controlA, controlB, pointB, radius, dashArray, dashOffset} = this;\n uniforms.pointA.value.copy(pointA);\n uniforms.controlA.value.copy(controlA);\n uniforms.controlB.value.copy(controlB);\n uniforms.pointB.value.copy(pointB);\n uniforms.radius.value = radius;\n uniforms.dashing.value.set(dashArray.x, dashArray.y, dashOffset || 0);\n }\n\n raycast(/*raycaster, intersects*/) {\n // TODO - just fail for now\n }\n}\n\nexport { BezierMesh, createDerivedMaterial, expandShaderIncludes, getShaderUniformTypes, getShadersForMaterial, invertMatrix4, voidMainRegExp };\n", "/**\n * troika text related utilities.\n * Mainly for mocking convenience since both [preloadFont, sync] don't work in jest env.\n * Avoid import this module directly to reduce initial load\n */\nimport { Vector3 } from 'three';\nimport type { Text } from 'troika-three-text';\nimport { preloadFont as preloadFontTroika } from 'troika-three-text';\n\nconst DEFAULT_FONT_CHARACTERS = 'abcdefghijklmnopqrstuvwxyz';\n\n/**\n * Load font file and kick off the font processing.\n * Promise gets resolved when preloadFont finishes.\n */\nexport function preloadFont(fontUrl?: string) {\n\treturn new Promise<string>((res, rej) => {\n\t\tif (!fontUrl) {\n\t\t\t// We are defaulting to roboto as V5\n\t\t\t// Note: keep these as static imports or they break CSP policies\n\t\t\timport('../../fonts/roboto-regular.ttf').then(module => {\n\t\t\t\tpreloadFontTroika(\n\t\t\t\t\t{\n\t\t\t\t\t\tfont: module.default,\n\t\t\t\t\t\tcharacters: DEFAULT_FONT_CHARACTERS,\n\t\t\t\t\t},\n\t\t\t\t\t() => {\n\t\t\t\t\t\tres(module.default);\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t});\n\t\t} else if (typeof fontUrl === 'string') {\n\t\t\t// if user supply a font file we can preload that font as well\n\t\t\tpreloadFontTroika(\n\t\t\t\t{\n\t\t\t\t\tfont: fontUrl,\n\t\t\t\t\tcharacters: DEFAULT_FONT_CHARACTERS,\n\t\t\t\t},\n\t\t\t\t() => {\n\t\t\t\t\tres(fontUrl);\n\t\t\t\t},\n\t\t\t);\n\t\t} else {\n\t\t\trej(new Error(`bad fontUrl ${fontUrl}`));\n\t\t}\n\t});\n}\n\nconst MIN_FONT_SIZE = 0.1;\nconst tempVec = new Vector3();\n/**\n * Fit text to area with a given max width and height, scaling the font size down if necessary.\n */\nexport function fitTextToArea(text: Text, maxWidth: number, maxHeight: number, scaleStep: number) {\n\tif (maxWidth <= 0 || maxHeight <= 0) {\n\t\treturn Promise.reject(`incoorect dimension [${maxWidth}, ${maxHeight}]`);\n\t}\n\n\treturn new Promise<{ size: [width: number, height: number] }>((res, rej) => {\n\t\ttext.sync(syncCallback);\n\n\t\tfunction syncCallback() {\n\t\t\tif (!text.geometry.boundingBox) return;\n\n\t\t\tconst { x: width, y: height } = text.geometry.boundingBox.getSize(tempVec);\n\n\t\t\tif (height > maxHeight || width > maxWidth) {\n\t\t\t\tif (text.fontSize === MIN_FONT_SIZE) {\n\t\t\t\t\treturn rej(\n\t\t\t\t\t\t`cannot find suitable font size for ${text.text}. MaxSize: [${maxWidth}, ${maxHeight}], Current size: [${width}, ${height}]. min font size${MIN_FONT_SIZE}.`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\ttext.fontSize = Math.max(MIN_FONT_SIZE, text.fontSize - scaleStep);\n\t\t\t\ttext.sync(syncCallback);\n\t\t\t} else {\n\t\t\t\treturn res({ size: [width, height] });\n\t\t\t}\n\t\t}\n\t});\n}\n\nexport function syncText(text: Text) {\n\treturn new Promise<void>(resolve => {\n\t\ttext.sync(() => {\n\t\t\tresolve();\n\t\t});\n\t});\n}\n\n/**\n * Loads the default font without additional preprocessing\n */\nexport async function loadDefaultFont(): Promise<string> {\n\t// Note: keep these as static imports or they break CSP policies\n\tconst module = await import('../../fonts/roboto-regular.ttf');\n\n\treturn module.default;\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["init_define_process", "init_define_process", "init_define_process", "workerBootstrap", "modules", "registerModule", "ref", "callback", "id", "name", "dependencies", "init", "getTransferables", "dep", "depResult", "rehydrate", "value", "err", "callModule", "ref$1", "args", "result", "handleResult", "rej", "tx", "str", "r", "url", "e", "messageId", "action", "data", "transferables", "defineMainThreadModule", "options", "moduleFunc", "len", "initResult", "initPromise", "deps", "supportsWorkers", "supported", "worker", "define_process_default", "_workerModuleId", "_messageId", "_allowInitAsString", "workers", "registeredModules", "openRequests", "defineWorkerModule", "workerId", "onMainThread", "registrationPromise", "stringifyFunction", "callWorker", "unregister", "isCallable", "terminateWorker", "fn", "getWorker", "bootstrap", "response", "msgId", "resolve", "reject", "init_define_process", "SDFGenerator", "exports", "pointOnQuadraticBezier", "x0", "y0", "x1", "y1", "x2", "y2", "t", "pointOut", "t2", "pointOnCubicBezier", "x3", "y3", "forEachPathCommand", "pathString", "commandCallback", "segmentRE", "match", "firstX", "firstY", "prevX", "prevY", "args", "v", "pathToLineSegments", "segmentCallback", "curvePoints", "tempPoint", "command", "startX", "startY", "endX", "endY", "ctrl1X", "ctrl1Y", "ctrl2X", "ctrl2Y", "prevCurveX", "prevCurveY", "i", "prevCurveX$1", "prevCurveY$1", "i$1", "viewportQuadVertex", "copyTexFragment", "cache", "glContextParams", "withWebGLContext", "glOrCanvas", "callback", "gl", "wrapper", "getExtension", "name", "ext", "extensions", "compileShader", "src", "type", "shader", "withProgram", "vert", "frag", "func", "programs", "attributes", "uniforms", "program", "values", "len", "uniformLoc", "size", "usage", "instancingDivisor", "data", "attr", "isWebGL2", "withTexture", "textureUnit", "texture", "textures", "withTextureFramebuffer", "framebuffer", "framebufferStack", "handleContextLoss", "e", "renderImageData", "imageData", "x", "y", "width", "height", "channels", "ref", "tex", "texUnit", "setUniform", "setAttribute", "resizeWebGLCanvasWithoutClearing", "canvas", "newWidth", "newHeight", "webglUtils", "generate$2", "sdfWidth", "sdfHeight", "path", "viewBox", "maxDistance", "sdfExponent", "textureData", "viewBoxWidth", "viewBoxHeight", "segments", "a", "b", "sdfX", "sdfY", "signedDist", "findNearestSignedDistance", "alpha", "closestDistSq", "closestDist", "seg", "distSq", "absSquareDistanceToLineSegment", "isPointInPoly", "winding", "intersects", "generateIntoCanvas$2", "channel", "generateIntoFramebuffer$1", "rgbaData", "lineX0", "lineY0", "lineX1", "lineY1", "ldx", "ldy", "lengthSq", "dx", "dy", "javascript", "mainVertex", "mainFragment", "postFragment", "viewportUVs", "implicitContext", "isTestingSupport", "NULL_OBJECT", "supportByCanvas", "validateSupport", "isSupported", "generate$1", "generateIntoFramebuffer", "j", "generateIntoCanvas$1", "lineSegmentCoords", "intermediateTexture", "intermediateTextureUnit", "instancingExtension", "blendMinMaxExtension", "key", "supported", "failReason", "expectedResult", "testResult", "val", "err", "webgl", "generate", "generateIntoCanvas", "init_define_process", "bidiFactory", "bidi", "exports", "DATA", "TYPES", "TYPES_TO_NAMES", "type", "i", "ISOLATE_INIT_TYPES", "STRONG_TYPES", "NEUTRAL_ISOLATE_TYPES", "BN_LIKE_TYPES", "TRAILING_TYPES", "map", "parseData", "loop", "lastCode", "range", "ref", "skip", "step", "getBidiCharType", "char", "getBidiCharTypeName", "data$1", "parseCharacterMap", "encodedString", "includeReverse", "radix", "reverseMap", "prevPair", "visit", "entry", "a", "b", "openToClose", "closeToOpen", "canonical", "parse$1", "openingToClosingBracket", "closingToOpeningBracket", "getCanonicalBracket", "TYPE_L", "TYPE_R", "TYPE_EN", "TYPE_ES", "TYPE_ET", "TYPE_AN", "TYPE_CS", "TYPE_B", "TYPE_S", "TYPE_ON", "TYPE_BN", "TYPE_NSM", "TYPE_AL", "TYPE_LRO", "TYPE_RLO", "TYPE_LRE", "TYPE_RLE", "TYPE_PDF", "TYPE_LRI", "TYPE_RLI", "TYPE_FSI", "TYPE_PDI", "getEmbeddingLevels", "string", "baseDirection", "MAX_DEPTH", "charTypes", "charTypeCounts", "changeCharType", "oldType", "embedLevels", "isolationPairs", "paragraphs", "paragraph", "i$1", "determineAutoEmbedLevel", "FORMATTING_TYPES", "nextEven", "n", "nextOdd", "paraIdx", "statusStack", "stackTop", "overflowIsolateCount", "overflowEmbeddingCount", "validIsolateCount", "i$2", "charType", "level", "level$1", "level$2", "isolInitIndex", "levelRuns", "currentRun", "i$3", "charType$1", "lvl", "isIsolInit", "isPDI", "isolatingRunSeqs", "runIdx", "run", "seqRuns", "pdiIndex", "i$4", "seqIndices", "i$5", "run$1", "j", "firstLevel", "prevLevel", "i$6", "lastIndex", "lastLevel", "nextLevel", "i$7", "seqIdx", "seqIndices$1", "sosType", "eosType", "embedDirection", "si", "i$8", "prevType", "sj", "si$1", "i$9", "sj$1", "prevCharType", "si$2", "i$10", "si$3", "i$11", "prevType$1", "nextType", "sj$2", "sj$3", "si$4", "i$12", "sj$4", "si$5", "i$13", "sj$5", "sj$6", "si$6", "prevStrongType", "i$14", "R_TYPES_FOR_N_STEPS", "STRONG_TYPES_FOR_N_STEPS", "bracketPairs", "openerStack", "si$7", "oppositeBracket", "stackIdx", "stackChar", "pairIdx", "ref$1", "openSeqIdx", "closeSeqIdx", "foundStrongType", "useStrongType", "si$8", "i$15", "lr", "si$9", "i$16", "lr$1", "si$10", "si$11", "si$12", "niRunStart", "niRunEnd", "prevType$2", "si2", "nextType$1", "si2$1", "sj$7", "i$17", "level$3", "type$1", "j$1", "start", "isFSI", "pdi", "indexOfMatchingPDI", "isolateStart", "isolationLevel", "data", "mirrorMap", "parse", "value", "key", "getMirroredCharacter", "getMirroredCharactersMap", "embeddingLevels", "end", "strLen", "mirror", "getReorderSegments", "embeddingLevelsResult", "segments", "lineStart", "lineEnd", "lineLevels", "maxLevel", "minOddLevel", "segStart", "getReorderedString", "embedLevelsResult", "indices", "getReorderedIndices", "chars", "charIndex", "slice", "bidi_default", "init_define_process", "voidMainRegExp", "expandShaderIncludes", "source", "pattern", "replace", "match", "include", "chunk", "ShaderChunk", "_lut", "i", "generateUUID", "d0", "d1", "d2", "d3", "assign", "target", "len", "prop", "epoch", "CONSTRUCTOR_CACHE", "SHADER_UPGRADE_CACHE", "materialInstanceId", "createDerivedMaterial", "baseMaterial", "options", "optionsKey", "getKeyForOptions", "ctorsByDerivation", "privateBeforeCompileProp", "onBeforeCompile", "shaderInfo", "renderer", "cacheKey", "upgradedShaders", "upgraded", "upgradeShaders", "DerivedMaterial", "derive", "base", "derived", "descriptor", "value", "testMaterial", "fn", "UniformsUtils", "newBase", "depthMaterial", "MeshDepthMaterial", "RGBADepthPacking", "distanceMaterial", "MeshDistanceMaterial", "_depthMaterial", "_distanceMaterial", "material", "vertexShader", "fragmentShader", "key", "vertexDefs", "vertexMainIntro", "vertexMainOutro", "vertexTransform", "fragmentDefs", "fragmentMainIntro", "fragmentMainOutro", "fragmentColorTransform", "customRewriter", "timeUniform", "res", "postChunks", "code", "match1", "index", "fullStr", "injectIntoShaderCode", "shaderCode", "id", "defs", "intro", "outro", "optionsJsonReplacer", "_idCtr", "optionsHashesToIds", "optionsHash", "typrFactory", "r", "e", "t", "a", "n", "o", "s", "i", "h", "d", "f", "u", "l", "v", "c", "p", "U", "g", "S", "m", "y", "P", "x", "F", "C", "_", "I", "w", "k", "G", "O", "T", "D", "B", "A", "R", "L", "W", "M", "V", "E", "woff2otfFactory", "b", "j", "z", "q", "H", "J", "K", "N", "Q", "X", "Y", "Z", "$", "rr", "er", "nr", "tr", "parserFactory", "Typr", "woff2otf", "cmdArgLengths", "joiningTypeRawData", "JT_LEFT", "JT_RIGHT", "JT_DUAL", "JT_TRANSPARENT", "JT_JOIN_CAUSING", "JT_NON_JOINING", "joiningTypeMap", "getCharJoiningType", "ch", "type", "lastCode", "range", "skip", "step", "ISOL", "INIT", "FINA", "MEDI", "formsToFeatures", "detectJoiningForms", "str", "joiningForms", "prevJoiningType", "prevForm", "prevIndex", "code", "joiningType", "form", "stringToGlyphs", "font", "glyphIds", "cc", "gsub", "lookupList", "featureList", "supportedFeatures", "usedLookups", "feature", "ti", "tab", "isJoiningFeature", "ci", "calcGlyphPositions", "positions", "glyphIndex", "glyphId", "gpos", "llist", "lookup", "applyValueRecord", "adj", "prevGlyphIndex", "getPrevGlyphIndex", "coverageIndex", "right", "c1", "c2", "markArrIndex", "baseGlyphIndex", "isBaseGlyph", "baseArrIndex", "markRecord", "baseAnchor", "mark1ArrIndex", "prevGlyphId", "getGlyphClass", "mark2ArrIndex", "mark1Record", "mark2Anchor", "ind1", "ind2", "filter", "source", "gi", "classDef", "firstNum", "args", "wrapFontObj", "typrFont", "glyphMap", "os2", "hhea", "unitsPerEm", "ascender", "fontObj", "text", "fontSize", "letterSpacing", "callback", "penX", "fontScale", "charIndex", "glyphObj", "cmds", "crds", "path", "crdsIdx", "len", "numArgs", "xMin", "yMin", "xMax", "yMax", "buffer", "peek", "tag", "workerModule", "defineWorkerModule", "unicodeFontResolverClientFactory", "createFontResolver", "fontParser", "unicodeFontResolverClient", "parsedFonts", "loadingFonts", "doLoadFont", "url", "onError", "err", "request", "loadFont", "fontUrl", "cb", "lang", "userFonts", "style", "weight", "unicodeFontsURL", "charResolutions", "fontResolutions", "allDone", "fontIndices", "fallbackRanges", "def", "prevCharResult", "resolveUserFonts", "startIndex", "iLen", "codePoint", "jLen", "src", "unicodeRange", "isCodeInRanges", "fontIndex", "resolveFallbacks", "fallbackString", "fontUrls", "chars", "fontIndexOffset", "charIdx", "endIdx", "loadedCount", "ranges", "start", "end", "fontResolverWorkerModule", "createTypesetter", "resolveFonts", "bidi", "DEFAULT_IGNORABLE_CHARS", "lineBreakingWhiteSpace", "BREAK_AFTER_CHARS", "calculateFontRuns", "fonts", "preResolvedFonts", "onDone", "onResolved", "curRun", "prevVal", "runs", "typeset", "sdfGlyphSize", "fontWeight", "fontStyle", "lineHeight", "maxWidth", "direction", "textAlign", "textIndent", "whiteSpace", "overflowWrap", "anchorX", "anchorY", "metricsOnly", "includeCaretPositions", "chunkedBoundsSize", "colorRanges", "mainStart", "now", "timings", "hasMaxWidth", "glyphFontIndices", "glyphPositions", "glyphData", "glyphColors", "caretPositions", "visibleBounds", "chunkedBounds", "maxLineWidth", "renderableGlyphCount", "canWrap", "metricsByFont", "typesetStart", "lineXOffset", "prevRunEndX", "currentLine", "TextLine", "lines", "run", "descender", "lineGap", "capHeight", "xHeight", "fontData", "fontSizeMult", "calcLineHeight", "halfLeading", "caretHeight", "caretTop", "runText", "prevGlyphX", "prevGlyphObj", "glyphX", "glyphY", "char", "glyphWidth", "curLineCount", "nextLine", "adjustX", "fly", "totalHeight", "line", "isTrailingWhitespace", "glyphInfo", "baseline", "baselineDiff", "anchorXOffset", "anchorYOffset", "parsePercent", "bidiLevelsResult", "renderableGlyphIndex", "prevCharIndex", "colorCharIndex", "chunk", "currentColor", "lineIndex", "lineGlyphCount", "lineWidth", "trailingWhitespaceCount", "justifyAdjust", "whitespaceCount", "justifyOffset", "flips", "fi", "left", "startInLine", "endInLine", "info", "setGlyphObj", "rtl", "mirrored", "caretLeft", "caretRight", "ligCount", "fillLigatureCaretPositions", "idx", "fontSrc", "fontGlyphData", "visX0", "visY0", "visX1", "visY1", "chunkRect", "index", "measure", "result", "x0", "y0", "x1", "y1", "match", "pct", "ligStartIndex", "ligStartX", "ligEndX", "ligBottom", "ligTop", "guessedAdvanceX", "textLineProps", "newLine", "obj", "prop", "all", "val", "mainThreadGenerator", "SDFGenerator", "warned", "generateSDF", "width", "height", "viewBox", "distance", "exponent", "canvas", "channel", "useWebGL", "generateSDF_GL", "generateSDF_JS_Worker", "queue", "chunkTimeBudget", "timer", "nextChunk", "resolve", "reject", "threadCount", "idleTimeout", "threads", "callNum", "workerId", "thread", "_createSDFGenerator", "generate", "textureData", "timing", "imageData", "terminateWorker", "warmUpSDFCanvas", "resizeWebGLCanvasWithoutClearing", "CONFIG", "tempColor", "Color", "hasRequested", "now$1", "configureTextBuilder", "config", "assign", "atlases", "getTextRenderInfo", "totalStart", "defaultFontURL", "toAbsoluteURL", "colors", "key", "textureWidth", "sdfExponent", "glyphsPerRow", "atlas", "Texture", "LinearFilter", "initContextLossHandling", "sdfTexture", "sdfCanvas", "typesetInWorker", "typesetOnMainThread", "neededSDFs", "glyphBounds", "boundsIdx", "positionsIdx", "quadsStart", "fontGlyphMaps", "map", "pathBounds", "fontUnitsMargin", "atlasIndex", "sdfViewBox", "posX", "posY", "sdfStart", "currentHeight", "neededRows", "neededHeight", "generateGlyphSDF", "safariPre15Workaround", "contextLost", "useGPU", "maxDist", "squareIndex", "event", "promises", "glyph", "preloadFont", "characters", "toObj", "fromObj", "linkEl", "gl", "pixels", "typesetterWorkerModule", "bidi_default", "fontResolver", "bidiFactory", "typesetter", "transferables", "templateGeometries", "getTemplateGeometry", "detail", "geom", "PlaneGeometry", "glyphBoundsAttrName", "glyphIndexAttrName", "glyphColorAttrName", "GlyphsGeometry", "InstancedBufferGeometry", "Sphere", "Box3", "tpl", "attr", "glyphBounds", "glyphAtlasIndices", "blockBounds", "chunkedBounds", "glyphColors", "bounds", "curveRadius", "bbox", "PI", "floor", "min", "max", "sin", "cos", "halfPi", "twoPi", "absR", "leftAngle", "rightAngle", "minX", "maxX", "maxZ", "clipRect", "count", "chunks", "i", "rect", "attrName", "newArray", "itemSize", "InstancedBufferAttribute", "VERTEX_DEFS", "VERTEX_TRANSFORM", "FRAGMENT_DEFS", "FRAGMENT_TRANSFORM", "createTextDerivedMaterial", "baseMaterial", "textMaterial", "createDerivedMaterial", "Vector2", "Vector4", "Color", "Matrix3", "vertexShader", "fragmentShader", "uDiffuseRE", "voidMainRegExp", "defaultMaterial", "MeshBasicMaterial", "DoubleSide", "defaultStrokeColor", "tempMat4", "Matrix4", "tempVec3a", "Vector3", "tempVec3b", "tempArray", "origin", "defaultOrient", "first", "o", "getFlatRaycastMesh", "mesh", "Mesh", "getCurvedRaycastMesh", "syncStartEvent", "syncCompleteEvent", "SYNCABLE_PROPS", "COPYABLE_PROPS", "Text", "geometry", "callback", "getTextRenderInfo", "textRenderInfo", "queued", "fn", "renderer", "scene", "camera", "material", "group", "derivedMaterial", "onDispose", "outlineMaterial", "m", "isOutline", "uniforms", "textInfo", "sdfTexture", "distanceOffset", "blurRadius", "strokeWidth", "fillOpacity", "strokeOpacity", "strokeColor", "offsetX", "offsetY", "outlineWidth", "outlineOffsetX", "outlineOffsetY", "outlineBlur", "outlineOpacity", "pad", "color", "colorObj", "orient", "rotMat", "match", "hSign", "hAxis", "vSign", "vAxis", "value", "pct", "position", "target", "r", "raycaster", "intersects", "raycastMesh", "uv", "x", "y", "z", "source", "prop", "privateKey", "syncStartEvent$1", "syncCompleteEvent$1", "memberIndexAttrName", "floatsPerMember", "tempBox3", "tempColor$1", "BatchedText", "_BatchedText", "e", "objects", "text", "createBatchedTextMaterial", "force", "_", "member", "texture", "dataLength", "width", "DataTexture", "RGBAFormat", "FloatType", "texData", "setTexData", "index", "dirty", "startIndex", "matrix", "uTroikaTotalBounds", "uTroikaClipRect", "uTroikaPositionOffset", "uTroikaEdgeOffset", "uTroikaBlurRadius", "uTroikaStrokeWidth", "uTroikaStrokeColor", "uTroikaStrokeOpacity", "uTroikaFillOpacity", "uTroikaCurveRadius", "syncPromises", "packingInfo", "resolve", "batchedAttributes", "memberIndexes", "batchedGlyphIndexes", "batchedGlyphBounds", "totalGlyphCount", "cloneAndResize", "memberIndex", "glyphIndex", "glyphCount", "DynamicDrawUsage", "tex", "newLength", "copy", "texUniformName", "texSizeUniformName", "batchMaterial", "shaders", "uniformName", "uniformToVarying", "varyingName", "uniformRE", "type", "hadFragmentUniform", "$0", "$1", "hadVertexUniform", "init_define_process", "DEFAULT_FONT_CHARACTERS", "preloadFont", "fontUrl", "res", "rej", "module", "MIN_FONT_SIZE", "tempVec", "Vector3", "fitTextToArea", "text", "maxWidth", "maxHeight", "scaleStep", "syncCallback", "width", "height", "syncText", "resolve", "loadDefaultFont", "configureTroikaTextBuilder", "useWorker", "configureTextBuilder", "tempMatrix", "Matrix4", "tempVec", "Vector3", "Z_AXIS_BASISVECTOR", "createTroikaTextPoint", "entityId", "text3DComponent", "styleComponent", "convertTo3DMapPosition", "properties", "text", "Text", "font", "DEFAULT_TEXT_STYLE", "fontPreloadLoadPromise", "loadDefaultFont", "position", "MathUtils", "createTroikaTextArea", "textArea", "marginOption", "topM", "rightM", "bottomM", "leftM", "areaMaxHeight", "areaMaxWidth", "pos", "rotationZ", "normalizeAngle", "textAreaMesh", "size", "fitTextToArea", "e", "fontPreloadLoadPromise", "preloadFont", "fontUrl"]
|
|
7
|
+
}
|