@d3plus/text 3.0.3 → 3.0.5

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.
@@ -1,43 +1,148 @@
1
1
  /*
2
- @d3plus/text v3.0.3
2
+ @d3plus/text v3.0.5
3
3
  A smart SVG text box with line wrapping and automatic font size scaling.
4
4
  Copyright (c) 2025 D3plus - https://d3plus.org
5
5
  @license MIT
6
6
  */
7
- (u=>{"function"==typeof define&&define.amd?define(u):u()})(function(){if("undefined"!=typeof window){try{if("undefined"==typeof SVGElement||Boolean(SVGElement.prototype.innerHTML))return}catch(u){return}function C(u){switch(u.nodeType){case 1:var A=u,t="";return t+="<"+A.tagName,A.hasAttributes()&&[].forEach.call(A.attributes,function(u){t+=" "+u.name+'="'+u.value+'"'}),t+=">",A.hasChildNodes()&&[].forEach.call(A.childNodes,function(u){t+=C(u)}),t+="</"+A.tagName+">";case 3:return u.textContent.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;");case 8:return"\x3c!--"+u.nodeValue+"--\x3e"}}Object.defineProperty(SVGElement.prototype,"innerHTML",{get:function(){var A="";return[].forEach.call(this.childNodes,function(u){A+=C(u)}),A},set:function(u){for(;this.firstChild;)this.removeChild(this.firstChild);try{var A=new DOMParser,t=(A.async=!1,"<svg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'>"+u+"</svg>"),C=A.parseFromString(t,"text/xml").documentElement;[].forEach.call(C.childNodes,function(u){this.appendChild(this.ownerDocument.importNode(u,!0))}.bind(this))}catch(u){throw new Error("Error parsing markup string")}}}),Object.defineProperty(SVGElement.prototype,"innerSVG",{get:function(){return this.innerHTML},set:function(u){this.innerHTML=u}})}}),((u,A)=>{"object"==typeof exports&&"undefined"!=typeof module?A(exports):"function"==typeof define&&define.amd?define("@d3plus/text",["exports"],A):A((u="undefined"!=typeof globalThis?globalThis:u||self).d3plus={})})(this,function(u){
7
+ (t=>{"function"==typeof define&&define.amd?define(t):t()})(function(){if("undefined"!=typeof window){try{if("undefined"==typeof SVGElement||Boolean(SVGElement.prototype.innerHTML))return}catch(t){return}function r(t){switch(t.nodeType){case 1:var e=t,n="";return n+="<"+e.tagName,e.hasAttributes()&&[].forEach.call(e.attributes,function(t){n+=" "+t.name+'="'+t.value+'"'}),n+=">",e.hasChildNodes()&&[].forEach.call(e.childNodes,function(t){n+=r(t)}),n+="</"+e.tagName+">";case 3:return t.textContent.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;");case 8:return"\x3c!--"+t.nodeValue+"--\x3e"}}Object.defineProperty(SVGElement.prototype,"innerHTML",{get:function(){var e="";return[].forEach.call(this.childNodes,function(t){e+=r(t)}),e},set:function(t){for(;this.firstChild;)this.removeChild(this.firstChild);try{var e=new DOMParser,n=(e.async=!1,"<svg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'>"+t+"</svg>"),r=e.parseFromString(n,"text/xml").documentElement;[].forEach.call(r.childNodes,function(t){this.appendChild(this.ownerDocument.importNode(t,!0))}.bind(this))}catch(t){throw new Error("Error parsing markup string")}}}),Object.defineProperty(SVGElement.prototype,"innerSVG",{get:function(){return this.innerHTML},set:function(t){this.innerHTML=t}})}}),((t,e)=>{"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define("@d3plus/text",["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).d3plus={})})(this,function(t){
8
+ /**
9
+ @const fontFamily
10
+ @desc The default fallback font list used for all text labels as an Array of Strings.
11
+ @returns {Array<string>}
12
+ */var i,l,n,s,e,a;
13
+ /**
14
+ @const fontFamilyStringify
15
+ @desc Converts an Array of font-family names into a CSS font-family string.
16
+ @param {String|Array<string>} *family*
17
+ @returns {String}
18
+ */
8
19
  /**
9
20
  @function stringify
10
21
  @desc Coerces value into a String.
11
22
  @param {String} value
12
- */function d(u){return void 0===u?u="undefined":"string"==typeof u||u instanceof String||(u=JSON.stringify(u)),u}
23
+ */function A(t){return void 0===t?t="undefined":"string"==typeof t||t instanceof String||(t=JSON.stringify(t)),t}
13
24
  // great unicode list: http://asecuritysite.com/coding/asc2
14
- let B=[[/[\300-\305]/g,"A"],[/[\340-\345]/g,"a"],[/[\306]/g,"AE"],[/[\346]/g,"ae"],[/[\337]/g,"B"],[/[\307]/g,"C"],[/[\347]/g,"c"],[/[\320\336\376]/g,"D"],[/[\360]/g,"d"],[/[\310-\313]/g,"E"],[/[\350-\353]/g,"e"],[/[\314-\317]/g,"I"],[/[\354-\357]/g,"i"],[/[\321]/g,"N"],[/[\361]/g,"n"],[/[\u014c\322-\326\330]/g,"O"],[/[\u014d\362-\366\370]/g,"o"],[/[\u016a\331-\334]/g,"U"],[/[\u016b\371-\374]/g,"u"],[/[\327]/g,"x"],[/[\335]/g,"Y"],[/[\375\377]/g,"y"]];
25
+ let o=[[/[\300-\305]/g,"A"],[/[\340-\345]/g,"a"],[/[\306]/g,"AE"],[/[\346]/g,"ae"],[/[\337]/g,"B"],[/[\307]/g,"C"],[/[\347]/g,"c"],[/[\320\336\376]/g,"D"],[/[\360]/g,"d"],[/[\310-\313]/g,"E"],[/[\350-\353]/g,"e"],[/[\314-\317]/g,"I"],[/[\354-\357]/g,"i"],[/[\321]/g,"N"],[/[\361]/g,"n"],[/[\u014c\322-\326\330]/g,"O"],[/[\u014d\362-\366\370]/g,"o"],[/[\u016a\331-\334]/g,"U"],[/[\u016b\371-\374]/g,"u"],[/[\327]/g,"x"],[/[\335]/g,"Y"],[/[\375\377]/g,"y"]];
15
26
  /**
16
27
  @function strip
17
28
  @desc Removes all non ASCII characters from a string.
18
29
  @param {String} value
19
30
  @param {String} [spacer = "-"]
20
- */
21
- // scraped from http://www.fileformat.info/info/unicode/category/Mc/list.htm
22
- // and http://www.fileformat.info/info/unicode/category/Mn/list.htm
23
- // JSON.stringify([].slice.call(document.getElementsByClassName("table-list")[0].getElementsByTagName("tr")).filter(function(d){ return d.getElementsByTagName("a").length && d.getElementsByTagName("a")[0].innerHTML.length === 6; }).map(function(d){ return d.getElementsByTagName("a")[0].innerHTML.replace("U", "u").replace("+", ""); }).sort());
24
- // The following unicode characters combine to form new characters and should never be split from surrounding characters.
25
- var A=["u0903","u093B","u093E","u093F","u0940","u0949","u094A","u094B","u094C","u094E","u094F","u0982","u0983","u09BE","u09BF","u09C0","u09C7","u09C8","u09CB","u09CC","u09D7","u0A03","u0A3E","u0A3F","u0A40","u0A83","u0ABE","u0ABF","u0AC0","u0AC9","u0ACB","u0ACC","u0B02","u0B03","u0B3E","u0B40","u0B47","u0B48","u0B4B","u0B4C","u0B57","u0BBE","u0BBF","u0BC1","u0BC2","u0BC6","u0BC7","u0BC8","u0BCA","u0BCB","u0BCC","u0BD7","u0C01","u0C02","u0C03","u0C41","u0C42","u0C43","u0C44","u0C82","u0C83","u0CBE","u0CC0","u0CC1","u0CC2","u0CC3","u0CC4","u0CC7","u0CC8","u0CCA","u0CCB","u0CD5","u0CD6","u0D02","u0D03","u0D3E","u0D3F","u0D40","u0D46","u0D47","u0D48","u0D4A","u0D4B","u0D4C","u0D57","u0D82","u0D83","u0DCF","u0DD0","u0DD1","u0DD8","u0DD9","u0DDA","u0DDB","u0DDC","u0DDD","u0DDE","u0DDF","u0DF2","u0DF3","u0F3E","u0F3F","u0F7F","u102B","u102C","u1031","u1038","u103B","u103C","u1056","u1057","u1062","u1063","u1064","u1067","u1068","u1069","u106A","u106B","u106C","u106D","u1083","u1084","u1087","u1088","u1089","u108A","u108B","u108C","u108F","u109A","u109B","u109C","u17B6","u17BE","u17BF","u17C0","u17C1","u17C2","u17C3","u17C4","u17C5","u17C7","u17C8","u1923","u1924","u1925","u1926","u1929","u192A","u192B","u1930","u1931","u1933","u1934","u1935","u1936","u1937","u1938","u1A19","u1A1A","u1A55","u1A57","u1A61","u1A63","u1A64","u1A6D","u1A6E","u1A6F","u1A70","u1A71","u1A72","u1B04","u1B35","u1B3B","u1B3D","u1B3E","u1B3F","u1B40","u1B41","u1B43","u1B44","u1B82","u1BA1","u1BA6","u1BA7","u1BAA","u1BE7","u1BEA","u1BEB","u1BEC","u1BEE","u1BF2","u1BF3","u1C24","u1C25","u1C26","u1C27","u1C28","u1C29","u1C2A","u1C2B","u1C34","u1C35","u1CE1","u1CF2","u1CF3","u302E","u302F","uA823","uA824","uA827","uA880","uA881","uA8B4","uA8B5","uA8B6","uA8B7","uA8B8","uA8B9","uA8BA","uA8BB","uA8BC","uA8BD","uA8BE","uA8BF","uA8C0","uA8C1","uA8C2","uA8C3","uA952","uA953","uA983","uA9B4","uA9B5","uA9BA","uA9BB","uA9BD","uA9BE","uA9BF","uA9C0","uAA2F","uAA30","uAA33","uAA34","uAA4D","uAA7B","uAA7D","uAAEB","uAAEE","uAAEF","uAAF5","uABE3","uABE4","uABE6","uABE7","uABE9","uABEA","uABEC"].concat(["u0300","u0301","u0302","u0303","u0304","u0305","u0306","u0307","u0308","u0309","u030A","u030B","u030C","u030D","u030E","u030F","u0310","u0311","u0312","u0313","u0314","u0315","u0316","u0317","u0318","u0319","u031A","u031B","u031C","u031D","u031E","u031F","u0320","u0321","u0322","u0323","u0324","u0325","u0326","u0327","u0328","u0329","u032A","u032B","u032C","u032D","u032E","u032F","u0330","u0331","u0332","u0333","u0334","u0335","u0336","u0337","u0338","u0339","u033A","u033B","u033C","u033D","u033E","u033F","u0340","u0341","u0342","u0343","u0344","u0345","u0346","u0347","u0348","u0349","u034A","u034B","u034C","u034D","u034E","u034F","u0350","u0351","u0352","u0353","u0354","u0355","u0356","u0357","u0358","u0359","u035A","u035B","u035C","u035D","u035E","u035F","u0360","u0361","u0362","u0363","u0364","u0365","u0366","u0367","u0368","u0369","u036A","u036B","u036C","u036D","u036E","u036F","u0483","u0484","u0485","u0486","u0487","u0591","u0592","u0593","u0594","u0595","u0596","u0597","u0598","u0599","u059A","u059B","u059C","u059D","u059E","u059F","u05A0","u05A1","u05A2","u05A3","u05A4","u05A5","u05A6","u05A7","u05A8","u05A9","u05AA","u05AB","u05AC","u05AD","u05AE","u05AF","u05B0","u05B1","u05B2","u05B3","u05B4","u05B5","u05B6","u05B7","u05B8","u05B9","u05BA","u05BB","u05BC","u05BD","u05BF","u05C1","u05C2","u05C4","u05C5","u05C7","u0610","u0611","u0612","u0613","u0614","u0615","u0616","u0617","u0618","u0619","u061A","u064B","u064C","u064D","u064E","u064F","u0650","u0651","u0652","u0653","u0654","u0655","u0656","u0657","u0658","u0659","u065A","u065B","u065C","u065D","u065E","u065F","u0670","u06D6","u06D7","u06D8","u06D9","u06DA","u06DB","u06DC","u06DF","u06E0","u06E1","u06E2","u06E3","u06E4","u06E7","u06E8","u06EA","u06EB","u06EC","u06ED","u0711","u0730","u0731","u0732","u0733","u0734","u0735","u0736","u0737","u0738","u0739","u073A","u073B","u073C","u073D","u073E","u073F","u0740","u0741","u0742","u0743","u0744","u0745","u0746","u0747","u0748","u0749","u074A","u07A6","u07A7","u07A8","u07A9","u07AA","u07AB","u07AC","u07AD","u07AE","u07AF","u07B0","u07EB","u07EC","u07ED","u07EE","u07EF","u07F0","u07F1","u07F2","u07F3","u0816","u0817","u0818","u0819","u081B","u081C","u081D","u081E","u081F","u0820","u0821","u0822","u0823","u0825","u0826","u0827","u0829","u082A","u082B","u082C","u082D","u0859","u085A","u085B","u08E3","u08E4","u08E5","u08E6","u08E7","u08E8","u08E9","u08EA","u08EB","u08EC","u08ED","u08EE","u08EF","u08F0","u08F1","u08F2","u08F3","u08F4","u08F5","u08F6","u08F7","u08F8","u08F9","u08FA","u08FB","u08FC","u08FD","u08FE","u08FF","u0900","u0901","u0902","u093A","u093C","u0941","u0942","u0943","u0944","u0945","u0946","u0947","u0948","u094D","u0951","u0952","u0953","u0954","u0955","u0956","u0957","u0962","u0963","u0981","u09BC","u09C1","u09C2","u09C3","u09C4","u09CD","u09E2","u09E3","u0A01","u0A02","u0A3C","u0A41","u0A42","u0A47","u0A48","u0A4B","u0A4C","u0A4D","u0A51","u0A70","u0A71","u0A75","u0A81","u0A82","u0ABC","u0AC1","u0AC2","u0AC3","u0AC4","u0AC5","u0AC7","u0AC8","u0ACD","u0AE2","u0AE3","u0B01","u0B3C","u0B3F","u0B41","u0B42","u0B43","u0B44","u0B4D","u0B56","u0B62","u0B63","u0B82","u0BC0","u0BCD","u0C00","u0C3E","u0C3F","u0C40","u0C46","u0C47","u0C48","u0C4A","u0C4B","u0C4C","u0C4D","u0C55","u0C56","u0C62","u0C63","u0C81","u0CBC","u0CBF","u0CC6","u0CCC","u0CCD","u0CE2","u0CE3","u0D01","u0D41","u0D42","u0D43","u0D44","u0D4D","u0D62","u0D63","u0DCA","u0DD2","u0DD3","u0DD4","u0DD6","u0E31","u0E34","u0E35","u0E36","u0E37","u0E38","u0E39","u0E3A","u0E47","u0E48","u0E49","u0E4A","u0E4B","u0E4C","u0E4D","u0E4E","u0EB1","u0EB4","u0EB5","u0EB6","u0EB7","u0EB8","u0EB9","u0EBB","u0EBC","u0EC8","u0EC9","u0ECA","u0ECB","u0ECC","u0ECD","u0F18","u0F19","u0F35","u0F37","u0F39","u0F71","u0F72","u0F73","u0F74","u0F75","u0F76","u0F77","u0F78","u0F79","u0F7A","u0F7B","u0F7C","u0F7D","u0F7E","u0F80","u0F81","u0F82","u0F83","u0F84","u0F86","u0F87","u0F8D","u0F8E","u0F8F","u0F90","u0F91","u0F92","u0F93","u0F94","u0F95","u0F96","u0F97","u0F99","u0F9A","u0F9B","u0F9C","u0F9D","u0F9E","u0F9F","u0FA0","u0FA1","u0FA2","u0FA3","u0FA4","u0FA5","u0FA6","u0FA7","u0FA8","u0FA9","u0FAA","u0FAB","u0FAC","u0FAD","u0FAE","u0FAF","u0FB0","u0FB1","u0FB2","u0FB3","u0FB4","u0FB5","u0FB6","u0FB7","u0FB8","u0FB9","u0FBA","u0FBB","u0FBC","u0FC6","u102D","u102E","u102F","u1030","u1032","u1033","u1034","u1035","u1036","u1037","u1039","u103A","u103D","u103E","u1058","u1059","u105E","u105F","u1060","u1071","u1072","u1073","u1074","u1082","u1085","u1086","u108D","u109D","u135D","u135E","u135F","u1712","u1713","u1714","u1732","u1733","u1734","u1752","u1753","u1772","u1773","u17B4","u17B5","u17B7","u17B8","u17B9","u17BA","u17BB","u17BC","u17BD","u17C6","u17C9","u17CA","u17CB","u17CC","u17CD","u17CE","u17CF","u17D0","u17D1","u17D2","u17D3","u17DD","u180B","u180C","u180D","u18A9","u1920","u1921","u1922","u1927","u1928","u1932","u1939","u193A","u193B","u1A17","u1A18","u1A1B","u1A56","u1A58","u1A59","u1A5A","u1A5B","u1A5C","u1A5D","u1A5E","u1A60","u1A62","u1A65","u1A66","u1A67","u1A68","u1A69","u1A6A","u1A6B","u1A6C","u1A73","u1A74","u1A75","u1A76","u1A77","u1A78","u1A79","u1A7A","u1A7B","u1A7C","u1A7F","u1AB0","u1AB1","u1AB2","u1AB3","u1AB4","u1AB5","u1AB6","u1AB7","u1AB8","u1AB9","u1ABA","u1ABB","u1ABC","u1ABD","u1B00","u1B01","u1B02","u1B03","u1B34","u1B36","u1B37","u1B38","u1B39","u1B3A","u1B3C","u1B42","u1B6B","u1B6C","u1B6D","u1B6E","u1B6F","u1B70","u1B71","u1B72","u1B73","u1B80","u1B81","u1BA2","u1BA3","u1BA4","u1BA5","u1BA8","u1BA9","u1BAB","u1BAC","u1BAD","u1BE6","u1BE8","u1BE9","u1BED","u1BEF","u1BF0","u1BF1","u1C2C","u1C2D","u1C2E","u1C2F","u1C30","u1C31","u1C32","u1C33","u1C36","u1C37","u1CD0","u1CD1","u1CD2","u1CD4","u1CD5","u1CD6","u1CD7","u1CD8","u1CD9","u1CDA","u1CDB","u1CDC","u1CDD","u1CDE","u1CDF","u1CE0","u1CE2","u1CE3","u1CE4","u1CE5","u1CE6","u1CE7","u1CE8","u1CED","u1CF4","u1CF8","u1CF9","u1DC0","u1DC1","u1DC2","u1DC3","u1DC4","u1DC5","u1DC6","u1DC7","u1DC8","u1DC9","u1DCA","u1DCB","u1DCC","u1DCD","u1DCE","u1DCF","u1DD0","u1DD1","u1DD2","u1DD3","u1DD4","u1DD5","u1DD6","u1DD7","u1DD8","u1DD9","u1DDA","u1DDB","u1DDC","u1DDD","u1DDE","u1DDF","u1DE0","u1DE1","u1DE2","u1DE3","u1DE4","u1DE5","u1DE6","u1DE7","u1DE8","u1DE9","u1DEA","u1DEB","u1DEC","u1DED","u1DEE","u1DEF","u1DF0","u1DF1","u1DF2","u1DF3","u1DF4","u1DF5","u1DFC","u1DFD","u1DFE","u1DFF","u20D0","u20D1","u20D2","u20D3","u20D4","u20D5","u20D6","u20D7","u20D8","u20D9","u20DA","u20DB","u20DC","u20E1","u20E5","u20E6","u20E7","u20E8","u20E9","u20EA","u20EB","u20EC","u20ED","u20EE","u20EF","u20F0","u2CEF","u2CF0","u2CF1","u2D7F","u2DE0","u2DE1","u2DE2","u2DE3","u2DE4","u2DE5","u2DE6","u2DE7","u2DE8","u2DE9","u2DEA","u2DEB","u2DEC","u2DED","u2DEE","u2DEF","u2DF0","u2DF1","u2DF2","u2DF3","u2DF4","u2DF5","u2DF6","u2DF7","u2DF8","u2DF9","u2DFA","u2DFB","u2DFC","u2DFD","u2DFE","u2DFF","u302A","u302B","u302C","u302D","u3099","u309A","uA66F","uA674","uA675","uA676","uA677","uA678","uA679","uA67A","uA67B","uA67C","uA67D","uA69E","uA69F","uA6F0","uA6F1","uA802","uA806","uA80B","uA825","uA826","uA8C4","uA8E0","uA8E1","uA8E2","uA8E3","uA8E4","uA8E5","uA8E6","uA8E7","uA8E8","uA8E9","uA8EA","uA8EB","uA8EC","uA8ED","uA8EE","uA8EF","uA8F0","uA8F1","uA926","uA927","uA928","uA929","uA92A","uA92B","uA92C","uA92D","uA947","uA948","uA949","uA94A","uA94B","uA94C","uA94D","uA94E","uA94F","uA950","uA951","uA980","uA981","uA982","uA9B3","uA9B6","uA9B7","uA9B8","uA9B9","uA9BC","uA9E5","uAA29","uAA2A","uAA2B","uAA2C","uAA2D","uAA2E","uAA31","uAA32","uAA35","uAA36","uAA43","uAA4C","uAA7C","uAAB0","uAAB2","uAAB3","uAAB4","uAAB7","uAAB8","uAABE","uAABF","uAAC1","uAAEC","uAAED","uAAF6","uABE5","uABE8","uABED","uFB1E","uFE00","uFE01","uFE02","uFE03","uFE04","uFE05","uFE06","uFE07","uFE08","uFE09","uFE0A","uFE0B","uFE0C","uFE0D","uFE0E","uFE0F","uFE20","uFE21","uFE22","uFE23","uFE24","uFE25","uFE26","uFE27","uFE28","uFE29","uFE2A","uFE2B","uFE2C","uFE2D","uFE2E","uFE2F"]);function t(u){return Array.from(function*(u){for(var A of u)yield*A}(u))}var C=["-",";",":","&","|","u0E2F","u0EAF","u0EC6","u0ECC","u104A","u104B","u104C","u104D","u104E","u104F","u2013","u2014","u2027","u3000","u3001","u3002","uFF0C","uFF5E"];let F=["'",">",")","}","]",".","!","?","/","u00BB","u300B","u3009"].concat(C);var e="က-ဪဿ-၉ၐ-ၕ㐀-龿぀-ゟ゠-ヿ＀-+--}⦅-゚㐀-䶿ກ-ຮະ-ໄ່-໋ໍ-ໝ";let D=new RegExp(`(\\${C.join("|\\")})*[^\\s|\\${C.join("|\\")}]*(\\${C.join("|\\")})*`,"g"),E=new RegExp(`[${e}]`),n=new RegExp(`(\\${["'","<","(","{","[","u00AB","u300A","u3008"].join("|\\")})*[${e}](\\${F.join("|\\")}|\\${A.join("|\\")})*|[a-z0-9]+`,"gi");
31
+ */function r(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}function u(){if(!l){l=1;
32
+ /* build fixed length tree */for(var y=0,w=-3,A=new r,m=new r,o=new Uint8Array(30),u=new Uint16Array(30),f=new Uint8Array(30),c=new Uint16Array(30),P=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),L=new r,x=new Uint8Array(320),a=new Uint16Array(16),
33
+ /* -------------------- *
34
+ * -- initialization -- *
35
+ * -------------------- */ /* build fixed huffman trees */t=A,e=m,n=0;n<7;++n)t.table[n]=0;for(t.table[7]=24,t.table[8]=152,t.table[9]=112,n=0;n<24;++n)t.trans[n]=256+n;for(n=0;n<144;++n)t.trans[24+n]=n;for(n=0;n<8;++n)t.trans[168+n]=280+n;for(n=0;n<112;++n)t.trans[176+n]=144+n;
36
+ /* build fixed distance tree */for(n=0;n<5;++n)e.table[n]=0;for(e.table[5]=32,n=0;n<32;++n)e.trans[n]=n;
37
+ /* build extra bits and base tables */s(o,u,4,3),s(f,c,2,1),
38
+ /* fix a special case */o[28]=0,u[28]=258,i=
39
+ /* inflate stream from source to dest */function(t,e){var n,r,s,i=new C(t,e);do{
40
+ /* decompress block */switch(s=void 0,
41
+ /* check if tag is empty */(r=i).bitcount--||(
42
+ /* load next tag */r.tag=r.source[r.sourceIndex++],r.bitcount=7)
43
+ /* shift bit out of tag */,s=1&r.tag,r.tag>>>=1,
44
+ /* read final block flag */r=s,X(i,2,0)){case 0:
45
+ /* decompress uncompressed block */n=(
46
+ /* inflate an uncompressed block of data */t=>{
47
+ /* unread from bitbuffer */for(var e,n;8<t.bitcount;)t.sourceIndex--,t.bitcount-=8;
48
+ /* get length */
49
+ /* check length */if((e=256*t.source[t.sourceIndex+1]+t.source[t.sourceIndex])!==(65535&~(256*t.source[t.sourceIndex+3]+t.source[t.sourceIndex+2])))return w;
50
+ /* copy block */for(t.sourceIndex+=4,n=e;n;--n)t.dest[t.destLen++]=t.source[t.sourceIndex++];
51
+ /* make sure we start next block on a byte boundary */return t.bitcount=0,y})(i);break;case 1:
52
+ /* decompress block with fixed huffman trees */n=U(i,A,m);break;case 2:v=b=g=p=a=d=h=l=c=f=u=o=void 0;for(
53
+ /* decompress block with dynamic huffman trees */var a,o=i,u=i.ltree,f=i.dtree,
54
+ /* get 5 bits HLIT (257-286) */c=X(o,5,257),
55
+ /* get 5 bits HDIST (1-32) */l=X(o,5,1),
56
+ /* get 4 bits HCLEN (4-19) */h=X(o,4,4),d=0;d<19;++d)x[d]=0;
57
+ /* read code lengths for code length alphabet */for(d=0;d<h;++d){
58
+ /* get 3 bits code length (0-7) */var g=X(o,3,0);x[P[d]]=g}
59
+ /* build code length tree */
60
+ /* decode code lengths for the dynamic trees */for(z(L,x,0,19),a=0;a<c+l;){var b=H(o,L);switch(b){case 16:for(
61
+ /* copy previous code length 3-6 times (read 2 bits) */var v=x[a-1],p=X(o,2,3);p;--p)x[a++]=v;break;case 17:
62
+ /* repeat code length 0 for 3-10 times (read 3 bits) */for(p=X(o,3,3);p;--p)x[a++]=0;break;case 18:
63
+ /* repeat code length 0 for 11-138 times (read 7 bits) */for(p=X(o,7,11);p;--p)x[a++]=0;break;default:
64
+ /* values 0-15 represent the actual code lengths */x[a++]=b}}
65
+ /* build dynamic trees */z(u,x,0,c),z(f,x,c,l),n=U(i,i.ltree,i.dtree);break;default:n=w}if(n!==y)throw new Error("Data error")}while(!r);return i.destLen<i.dest.length?"function"==typeof i.dest.slice?i.dest.slice(0,i.destLen):i.dest.subarray(0,i.destLen):i.dest}}return i;function r(){this.table=new Uint16Array(16),/* table of code length counts */
66
+ this.trans=new Uint16Array(288)}function C(t,e){this.source=t,this.sourceIndex=0,this.tag=0,this.bitcount=0,this.dest=e,this.destLen=0,this.ltree=new r,/* dynamic length/symbol tree */
67
+ this.dtree=new r}
68
+ /* --------------------------------------------------- *
69
+ * -- uninitialized global data (static structures) -- *
70
+ * --------------------------------------------------- */
71
+ /* ----------------------- *
72
+ * -- utility functions -- *
73
+ * ----------------------- */ /* build extra bits and base tables */function s(t,e,n,r){
74
+ /* build bits table */for(var s,i=0;i<n;++i)t[i]=0;for(i=0;i<30-n;++i)t[i+n]=i/n|0;
75
+ /* build base table */for(s=r,i=0;i<30;++i)e[i]=s,s+=1<<t[i]}
76
+ /* build the fixed huffman trees */function z(t,e,n,r){
77
+ /* clear code length count table */for(var s,i=0;i<16;++i)t.table[i]=0;
78
+ /* scan symbol lengths, and sum code length counts */for(i=0;i<r;++i)t.table[e[n+i]]++;
79
+ /* compute offset table for distribution sort */for(i=s=t.table[0]=0;i<16;++i)a[i]=s,s+=t.table[i];
80
+ /* create code->symbol translation table (symbols sorted by code) */for(i=0;i<r;++i)e[n+i]&&(t.trans[a[e[n+i]]++]=i)}
81
+ /* ---------------------- *
82
+ * -- decode functions -- *
83
+ * ---------------------- */ /* get one bit from source stream */
84
+ /* read a num bit value from a stream and add base */function X(t,e,n){if(!e)return n;for(;t.bitcount<24;)t.tag|=t.source[t.sourceIndex++]<<t.bitcount,t.bitcount+=8;var r=t.tag&65535>>>16-e;return t.tag>>>=e,t.bitcount-=e,r+n}
85
+ /* given a data stream and a tree, decode a symbol */function H(t,e){for(;t.bitcount<24;)t.tag|=t.source[t.sourceIndex++]<<t.bitcount,t.bitcount+=8;
86
+ /* get more bits while code value is above sum */for(var n=0,r=0,s=0,i=t.tag;r=2*r+(1&i),i>>>=1,n+=e.table[++s],0<=(r-=e.table[s]););return t.tag=i,t.bitcount-=s,e.trans[n+r]}
87
+ /* given a data stream, decode dynamic trees from it */
88
+ /* ----------------------------- *
89
+ * -- block inflate functions -- *
90
+ * ----------------------------- */ /* given a stream and two trees, inflate a block of data */function U(t,e,n){for(;;){var r=H(t,e);
91
+ /* check for end of block */if(256===r)return y;if(r<256)t.dest[t.destLen++]=r;else
92
+ /* copy match */for(var s,
93
+ /* possibly get more bits from length code */i=X(t,o[r-=257],u[r]),r=H(t,n),a=
94
+ /* possibly get more bits from distance code */s=t.destLen-X(t,f[r],c[r]);a<s+i;++a)t.dest[t.destLen++]=t.dest[a]}}}function f(){if(!s){s=1;let e=18===new Uint8Array(new Uint32Array([305419896]).buffer)[0],r=(t,e,n)=>{var r=t[e];t[e]=t[n],t[n]=r};n={swap32LE:t=>{e&&(e=>{var n=e.length;for(let t=0;t<n;t+=4)r(e,t,t+3),r(e,t+1,t+2)})(t)}}}return n}var c,h,d,g,b,v,p,y,w,m=r((()=>{if(!a){a=1;let r=u(),s=f().swap32LE;e=class{get(t){let e;return t<0||1114111<t?this.errorValue:t<55296||56319<t&&t<=65535?(
95
+ // Ordinary BMP code point, excluding leading surrogates.
96
+ // BMP uses a single level lookup. BMP index starts at offset 0 in the index.
97
+ // data is stored in the index array itself.
98
+ e=(this.data[t>>5]<<2)+(31&t),this.data[e]):t<=65535?(
99
+ // Lead Surrogate Code Point. A Separate index section is stored for
100
+ // lead surrogate code units and code points.
101
+ // The main index has the code unit data.
102
+ // For this function, we need the code point data.
103
+ e=(this.data[2048+(t-55296>>5)]<<2)+(31&t),this.data[e]):t<this.highStart?(
104
+ // Supplemental code point, use two-level lookup.
105
+ e=this.data[2080+(t>>11)],e=((e=this.data[e+(t>>5&63)])<<2)+(31&t),this.data[e]):this.data[this.data.length-4]}constructor(e){var n="function"==typeof e.readUInt32BE&&"function"==typeof e.slice;if(n||e instanceof Uint8Array){
106
+ // read binary format
107
+ let t;e=n?(this.highStart=e.readUInt32LE(0),this.errorValue=e.readUInt32LE(4),t=e.readUInt32LE(8),e.slice(12)):(n=new DataView(e.buffer),this.highStart=n.getUint32(0,!0),this.errorValue=n.getUint32(4,!0),t=n.getUint32(8,!0),e.subarray(12)),
108
+ // double inflate the actual trie data
109
+ e=r(e,new Uint8Array(t)),e=r(e,new Uint8Array(t)),
110
+ // swap bytes from little-endian
111
+ s(e),this.data=new Uint32Array(e.buffer)}else
112
+ // pre-parsed data
113
+ ({data:this.data,highStart:this.highStart,errorValue:this.errorValue}=e)}}}return e})()),P={};function L(t){t=t.charCodeAt(0);return t===h||t===p?62:t===d||t===y?63:t<g?-1:t<g+10?t-g+26+26:t<v+26?t-v:t<b+26?t-b+26:void 0}S||(S=1,w="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",S=P,c="undefined"!=typeof Uint8Array?Uint8Array:Array,h="+".charCodeAt(0),d="/".charCodeAt(0),g="0".charCodeAt(0),b="a".charCodeAt(0),v="A".charCodeAt(0),p="-".charCodeAt(0),y="_".charCodeAt(0),S.toByteArray=function(t){var e,n;if(0<t.length%4)throw new Error("Invalid string. Length must be a multiple of 4");
114
+ // the number of equal signs (place holders)
115
+ // if there are two placeholders, than the two characters before it
116
+ // represent one byte
117
+ // if there is only one, then the three characters before it represent 2 bytes
118
+ // this is just a cheap hack to not do indexOf twice
119
+ var r="="===t.charAt((r=t.length)-2)?2:"="===t.charAt(r-1)?1:0,
120
+ // base64 is 4/3 + up to two characters of the original data
121
+ s=new c(3*t.length/4-r),
122
+ // if there are placeholders, only get up to the last complete 4 chars
123
+ i=0<r?t.length-4:t.length,a=0;function o(t){s[a++]=t}for(e=0;e<i;e+=4,0)o((16711680&(n=L(t.charAt(e))<<18|L(t.charAt(e+1))<<12|L(t.charAt(e+2))<<6|L(t.charAt(e+3))))>>16),o((65280&n)>>8),o(255&n);return 2==r?o(255&(n=L(t.charAt(e))<<2|L(t.charAt(e+1))>>4)):1==r&&(o((n=L(t.charAt(e))<<10|L(t.charAt(e+1))<<4|L(t.charAt(e+2))>>2)>>8&255),o(255&n)),s},S.fromByteArray=function(t){var e,n,r,s,i=t.length%3,a="";function o(t){return w.charAt(t)}
124
+ // go through the array every three bytes, we'll deal with trailing stuff later
125
+ for(e=0,r=t.length-i;e<r;e+=3)n=(t[e]<<16)+(t[e+1]<<8)+t[e+2],a+=o((s=n)>>18&63)+o(s>>12&63)+o(s>>6&63)+o(63&s);
126
+ // pad the end with zeros, but make sure to not forget the extra bytes
127
+ switch(i){case 1:a=(a+=o((n=t[t.length-1])>>2))+o(n<<4&63)+"==";break;case 2:a=(a=(a+=o((n=(t[t.length-2]<<8)+t[t.length-1])>>10))+o(n>>4&63))+o(n<<2&63)+"="}return a});var x={};function C(t){switch(t){case 33:return 12;case 39:case 40:case 42:return 12;case 35:return 5;default:return t}}function z(t){switch(t){case 37:case 38:return 34;case 41:return 22;default:return t}}// Prohibited break
128
+ let X=[
129
+ //OP , CL , CP , QU , GL , NS , EX , SY , IS , PR , PO , NU , AL , HL , ID , IN , HY , BA , BB , B2 , ZW , CM , WJ , H2 , H3 , JL , JV , JT , RI , EB , EM , ZWJ , CB
130
+ [4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4],[0,4,4,1,1,4,4,4,4,1,1,0,0,0,0,1,1,1,0,0,4,2,4,0,0,0,0,0,0,0,0,1,0],[0,4,4,1,1,4,4,4,4,1,1,1,1,1,0,1,1,1,0,0,4,2,4,0,0,0,0,0,0,0,0,1,0],[4,4,4,1,1,1,4,4,4,1,1,1,1,1,1,1,1,1,1,1,4,2,4,1,1,1,1,1,1,1,1,1,1],[1,4,4,1,1,1,4,4,4,1,1,1,1,1,1,1,1,1,1,1,4,2,4,1,1,1,1,1,1,1,1,1,1],[0,4,4,1,1,1,4,4,4,0,0,0,0,0,0,1,1,1,0,0,4,2,4,0,0,0,0,0,0,0,0,1,0],[0,4,4,1,1,1,4,4,4,0,0,0,0,0,0,1,1,1,0,0,4,2,4,0,0,0,0,0,0,0,0,1,0],[0,4,4,1,1,1,4,4,4,0,0,1,0,1,0,1,1,1,0,0,4,2,4,0,0,0,0,0,0,0,0,1,0],[0,4,4,1,1,1,4,4,4,0,0,1,1,1,0,1,1,1,0,0,4,2,4,0,0,0,0,0,0,0,0,1,0],[1,4,4,1,1,1,4,4,4,0,0,1,1,1,1,1,1,1,0,0,4,2,4,1,1,1,1,1,0,1,1,1,0],[1,4,4,1,1,1,4,4,4,0,0,1,1,1,0,1,1,1,0,0,4,2,4,0,0,0,0,0,0,0,0,1,0],[1,4,4,1,1,1,4,4,4,1,1,1,1,1,0,1,1,1,0,0,4,2,4,0,0,0,0,0,0,0,0,1,0],[1,4,4,1,1,1,4,4,4,1,1,1,1,1,0,1,1,1,0,0,4,2,4,0,0,0,0,0,0,0,0,1,0],[1,4,4,1,1,1,4,4,4,1,1,1,1,1,0,1,1,1,0,0,4,2,4,0,0,0,0,0,0,0,0,1,0],[0,4,4,1,1,1,4,4,4,0,1,0,0,0,0,1,1,1,0,0,4,2,4,0,0,0,0,0,0,0,0,1,0],[0,4,4,1,1,1,4,4,4,0,0,0,0,0,0,1,1,1,0,0,4,2,4,0,0,0,0,0,0,0,0,1,0],[0,4,4,1,0,1,4,4,4,0,0,1,0,0,0,1,1,1,0,0,4,2,4,0,0,0,0,0,0,0,0,1,0],[0,4,4,1,0,1,4,4,4,0,0,0,0,0,0,1,1,1,0,0,4,2,4,0,0,0,0,0,0,0,0,1,0],[1,4,4,1,1,1,4,4,4,1,1,1,1,1,1,1,1,1,1,1,4,2,4,1,1,1,1,1,1,1,1,1,0],[0,4,4,1,1,1,4,4,4,0,0,0,0,0,0,1,1,1,0,4,4,2,4,0,0,0,0,0,0,0,0,1,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0],[1,4,4,1,1,1,4,4,4,1,1,1,1,1,0,1,1,1,0,0,4,2,4,0,0,0,0,0,0,0,0,1,0],[1,4,4,1,1,1,4,4,4,1,1,1,1,1,1,1,1,1,1,1,4,2,4,1,1,1,1,1,1,1,1,1,1],[0,4,4,1,1,1,4,4,4,0,1,0,0,0,0,1,1,1,0,0,4,2,4,0,0,0,1,1,0,0,0,1,0],[0,4,4,1,1,1,4,4,4,0,1,0,0,0,0,1,1,1,0,0,4,2,4,0,0,0,0,1,0,0,0,1,0],[0,4,4,1,1,1,4,4,4,0,1,0,0,0,0,1,1,1,0,0,4,2,4,1,1,1,1,0,0,0,0,1,0],[0,4,4,1,1,1,4,4,4,0,1,0,0,0,0,1,1,1,0,0,4,2,4,0,0,0,1,1,0,0,0,1,0],[0,4,4,1,1,1,4,4,4,0,1,0,0,0,0,1,1,1,0,0,4,2,4,0,0,0,0,1,0,0,0,1,0],[0,4,4,1,1,1,4,4,4,0,0,0,0,0,0,1,1,1,0,0,4,2,4,0,0,0,0,0,1,0,0,1,0],[0,4,4,1,1,1,4,4,4,0,1,0,0,0,0,1,1,1,0,0,4,2,4,0,0,0,0,0,0,0,1,1,0],[0,4,4,1,1,1,4,4,4,0,1,0,0,0,0,1,1,1,0,0,4,2,4,0,0,0,0,0,0,0,0,1,0],[1,4,4,1,1,1,4,4,4,1,1,1,1,1,0,1,1,1,0,0,4,2,4,0,0,0,0,0,0,0,0,1,0],[0,4,4,1,1,0,4,4,4,0,0,0,0,0,0,0,0,0,0,0,4,2,4,0,0,0,0,0,0,0,0,1,0]],H=new m(r(P).toByteArray("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"));class U{constructor(t,e=!1){this.position=t,this.required=e}}
26
131
  /**
27
132
  @function textSplit
28
133
  @desc Splits a given sentence into an array of words.
29
134
  @param {String} sentence
30
- */function r(u){return E.test(u)?t(d(u).match(D).map(u=>E.test(u)?u.match(n):[u])):d(u).match(D).filter(u=>u.length)}
135
+ */function V(t){var e=new x(t);let n,r,s=[];for(;n=e.nextBreak();){var i=t.slice(r,n.position);s.push(i),r=n.position}return s}
31
136
  /**
32
137
  * Strips HTML and "un-escapes" escape characters.
33
138
  * @param {String} input
34
- */function i(u){var A;return""!==u.replace(/\s+/g,"")&&(A=(new DOMParser).parseFromString(u.replace(/<[^>]+>/g,""),"text/html")).documentElement?A.documentElement.textContent:u}
139
+ */function W(t){var e;return""!==t.replace(/\s+/g,"")&&(e=(new DOMParser).parseFromString(t.replace(/<[^>]+>/g,""),"text/html")).documentElement?e.documentElement.textContent:t}
35
140
  /**
36
141
  @function textWidth
37
142
  @desc Given a text string, returns the predicted pixel width of the string when placed into DOM.
38
143
  @param {String|Array} text Can be either a single string or an array of strings to analyze.
39
144
  @param {Object} [style] An object of CSS font styles to apply. Accepts any of the valid [CSS font property](http://www.w3schools.com/cssref/pr_font_font.asp) values.
40
- */function m(u,A){A=Object.assign({"font-size":10,"font-family":"sans-serif","font-style":"normal","font-weight":400,"font-variant":"normal"},A);var t=document.createElement("canvas").getContext("2d"),C=[];return C.push(A["font-style"]),C.push(A["font-variant"]),C.push(A["font-weight"]),C.push("string"==typeof A["font-size"]?A["font-size"]:"".concat(A["font-size"],"px")),C.push(A["font-family"]),t.font=C.join(" "),A=u,(null!=(C=Array)&&"undefined"!=typeof Symbol&&C[Symbol.hasInstance]?C[Symbol.hasInstance](A):A instanceof C)?u.map(function(u){return t.measureText(i(u)).width}):t.measureText(i(u)).width}
145
+ */function N(t,e){e=Object.assign({"font-size":10,"font-family":"sans-serif","font-style":"normal","font-weight":400,"font-variant":"normal"},e);var n=document.createElement("canvas").getContext("2d"),r=[];return r.push(e["font-style"]),r.push(e["font-variant"]),r.push(e["font-weight"]),r.push("string"==typeof e["font-size"]?e["font-size"]:"".concat(e["font-size"],"px")),r.push(e["font-family"]),n.font=r.join(" "),e=t,(null!=(r=Array)&&"undefined"!=typeof Symbol&&r[Symbol.hasInstance]?r[Symbol.hasInstance](e):e instanceof r)?t.map(function(t){return n.measureText(W(t)).width}):n.measureText(W(t)).width}
41
146
  /**
42
147
  @function trim
43
148
  @desc Cross-browser implementation of [trim](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/Trim).
@@ -47,68 +152,86 @@ var A=["u0903","u093B","u093E","u093F","u0940","u0949","u094A","u094B","u094C","
47
152
  @function trimRight
48
153
  @desc Cross-browser implementation of [trimRight](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/TrimRight).
49
154
  @param {String} str
50
- */function y(u){return u.toString().replace(/\s+$/,"")}
155
+ */function O(t){return t.toString().replace(/\s+$/,"")}
51
156
  /**
52
157
  @function textWrap
53
158
  @desc Based on the defined styles and dimensions, breaks a string into an array of strings for each line of text.
54
- */let o=["a","an","and","as","at","but","by","for","from","if","in","into","near","nor","of","on","onto","or","per","that","the","to","with","via","vs","vs."],a=["CEO","CFO","CNC","COO","CPU","GDP","HVAC","ID","IT","R&D","TV","UI"];u.fontFamily=["Inter","Helvetica Neue","HelveticaNeue","Helvetica","Arial","sans-serif"],u.fontFamilyStringify=u=>("string"==typeof u?[u]:u).map(u=>u.match(/^[a-z-_]{1,}$/)?u:`'${u}'`).join(", "),u.stringify=d,u.strip=function(u,C="-"){return(""+u).replace(/[^A-Za-z0-9\-_\u0621-\u064A]/g,A=>{if(" "===A)return C;let t=!1;for(let u=0;u<B.length;u++)if(new RegExp(B[u][0]).test(A)){t=B[u][1];break}return t||""})},u.textSplit=r,u.textWrap=function(){let o="sans-serif",a=10,f=400,s=200,l,c=null,g=!1,h=r,p=200;
159
+ */x=class{nextCodePoint(){var t=this.string.charCodeAt(this.pos++),e=this.string.charCodeAt(this.pos);
160
+ // If a surrogate pair
161
+ return 55296<=t&&t<=56319&&56320<=e&&e<=57343?(this.pos++,1024*(t-55296)+(e-56320)+65536):t}nextCharClass(){return C(H.get(this.nextCodePoint()))}getSimpleBreak(){
162
+ // handle classes not handled by the pair table
163
+ switch(this.nextClass){case 41:return!1;case 34:case 37:case 38:return!(this.curClass=34);case 36:return!(this.curClass=36)}return null}getPairTableBreak(t){
164
+ // if not handled already, use the pair table
165
+ let e=!1;switch(X[this.curClass][this.nextClass]){case 0:e=!0;break;case 1:e=41===t;break;case 2:if(e=41===t)break;return e=!1;case 3:if(41!==t)return e}return this.LB8a&&(e=!1),
166
+ // Rule LB21a
167
+ !this.LB21a||16!==this.curClass&&17!==this.curClass?this.LB21a=13===this.curClass:(e=!1,this.LB21a=!1),
168
+ // Rule LB30a
169
+ 28===this.curClass?(this.LB30a++,2==this.LB30a&&28===this.nextClass&&(e=!0,this.LB30a=0)):this.LB30a=0,this.curClass=this.nextClass,e}nextBreak(){
170
+ // get the first char if we're at the beginning of the string
171
+ var t;for(null==this.curClass&&(t=this.nextCharClass(),this.curClass=z(t),this.nextClass=t,this.LB8a=31===t,this.LB30a=0);this.pos<this.string.length;){this.lastPos=this.pos;var e=this.nextClass;
172
+ // explicit newline
173
+ if(this.nextClass=this.nextCharClass(),34===this.curClass||36===this.curClass&&37!==this.nextClass)return this.curClass=z(C(this.nextClass)),new U(this.lastPos,!0);let t=this.getSimpleBreak();if(null===t&&(t=this.getPairTableBreak(e)),
174
+ // Rule LB8a
175
+ this.LB8a=31===this.nextClass,t)return new U(this.lastPos)}return this.lastPos<this.string.length?(this.lastPos=this.string.length,new U(this.string.length)):null}constructor(t){this.string=t,this.pos=0,this.lastPos=0,this.curClass=null,this.nextClass=null,this.LB8a=!1,this.LB21a=!1,this.LB30a=0}};let B=["a","an","and","as","at","but","by","for","from","if","in","into","near","nor","of","on","onto","or","per","that","the","to","with","via","vs","vs."];var S=["CEO","CFO","CNC","COO","CPU","GDP","HVAC","ID","IT","R&D","TV","UI"];let T=S.reduce((t,e)=>(t.push(e+"s"),t),S.map(t=>t.toLowerCase()));
176
+ /**
177
+ @function titleCase
178
+ @desc Capitalizes the first letter of each word in a phrase/sentence, accounting for words in English that should be kept lowercase such as "and" or "of", as well as acronym that should be kept uppercase such as "CEO" or "TVs".
179
+ @param {String} str The string to apply the title case logic.
180
+ */t.fontFamily=["Inter","Helvetica Neue","HelveticaNeue","Helvetica","Arial","sans-serif"],t.fontFamilyStringify=t=>("string"==typeof t?[t]:t).map(t=>t.match(/^[a-z-_]{1,}$/)?t:`'${t}'`).join(", "),t.stringify=A,t.strip=function(t,r="-"){return(""+t).replace(/[^A-Za-z0-9\-_\u0621-\u064A]/g,e=>{if(" "===e)return r;let n=!1;for(let t=0;t<o.length;t++)if(new RegExp(o[t][0]).test(e)){n=o[t][1];break}return n||""})},t.textSplit=V,t.textWrap=function(){let l="sans-serif",h=10,d=400,g=200,b,v=null,p=!1,y=V,w=200;
55
181
  /**
56
182
  The inner return object and wraps the text and returns the line data array.
57
183
  @private
58
- */function A(A){A=d(A),void 0===l&&(l=Math.ceil(1.4*a));var t=h(A),u={"font-family":o,"font-size":a,"font-weight":f,"line-height":l};let C=1,B="",e=!1,D=0;var E=[],n=m(t,u),F=m(" ",u);for(let u=0;u<t.length;u++){var r=t[u],i=n[t.indexOf(r)];if(r+=A.slice(B.length+r.length).match("^( |\n)*","g")[0],"\n"===B.slice(-1)||D+i>p){if(!u&&!g){e=!0;break}if(E.length>=C&&(E[C-1]=y(E[C-1])),C++,l*C>s||i>p&&!g||c&&C>c){e=!0;break}D=0,E.push(r)}else u?E[C-1]+=r:E[0]=r;B+=r,D=(D+=i)+r.match(/[\s]*$/g)[0].length*F}return{lines:E,sentence:A,truncated:e,widths:m(E,u),words:t}}
184
+ */function e(t){t=A(t),void 0===b&&(b=Math.ceil(1.4*h));var e=y(t),n={"font-family":l,"font-size":h,"font-weight":d,"line-height":b};let r=1,s="",i=!1,a=0;var o=[],u=N(e,n);for(let t=0;t<e.length;t++){var f=e[t],c=u[e.indexOf(f)];
185
+ // newline if breaking character or not enough width
186
+ if("\n"===s.slice(-1)||a+c>w){if(!t&&!p){i=!0;break}if(o.length>=r&&(o[r-1]=O(o[r-1])),r++,b*r>g||c>w&&!p||v&&r>v){i=!0;break}a=0,o.push(f)}else t?o[r-1]+=f:o[0]=f;s+=f,a+=c}return{lines:o,sentence:t,truncated:i,widths:N(o,n),words:e}}
59
187
  /**
60
188
  @memberof textWrap
61
189
  @desc If *value* is specified, sets the font family accessor to the specified function or string and returns this generator. If *value* is not specified, returns the current font family.
62
190
  @param {Function|String} [*value* = "sans-serif"]
63
- */return A.fontFamily=function(u){return arguments.length?(o=u,A):o},
191
+ */return e.fontFamily=function(t){return arguments.length?(l=t,e):l},
64
192
  /**
65
193
  @memberof textWrap
66
194
  @desc If *value* is specified, sets the font size accessor to the specified function or number and returns this generator. If *value* is not specified, returns the current font size.
67
195
  @param {Function|Number} [*value* = 10]
68
- */A.fontSize=function(u){return arguments.length?(a=u,A):a},
196
+ */e.fontSize=function(t){return arguments.length?(h=t,e):h},
69
197
  /**
70
198
  @memberof textWrap
71
199
  @desc If *value* is specified, sets the font weight accessor to the specified function or number and returns this generator. If *value* is not specified, returns the current font weight.
72
200
  @param {Function|Number|String} [*value* = 400]
73
- */A.fontWeight=function(u){return arguments.length?(f=u,A):f},
201
+ */e.fontWeight=function(t){return arguments.length?(d=t,e):d},
74
202
  /**
75
203
  @memberof textWrap
76
204
  @desc If *value* is specified, sets height limit to the specified value and returns this generator. If *value* is not specified, returns the current value.
77
205
  @param {Number} [*value* = 200]
78
- */A.height=function(u){return arguments.length?(s=u,A):s},
206
+ */e.height=function(t){return arguments.length?(g=t,e):g},
79
207
  /**
80
208
  @memberof textWrap
81
209
  @desc If *value* is specified, sets the line height accessor to the specified function or number and returns this generator. If *value* is not specified, returns the current line height accessor, which is 1.1 times the [font size](#textWrap.fontSize) by default.
82
210
  @param {Function|Number} [*value*]
83
- */A.lineHeight=function(u){return arguments.length?(l=u,A):l},
211
+ */e.lineHeight=function(t){return arguments.length?(b=t,e):b},
84
212
  /**
85
213
  @memberof textWrap
86
214
  @desc If *value* is specified, sets the maximum number of lines allowed when wrapping.
87
215
  @param {Function|Number} [*value*]
88
- */A.maxLines=function(u){return arguments.length?(c=u,A):c},
216
+ */e.maxLines=function(t){return arguments.length?(v=t,e):v},
89
217
  /**
90
218
  @memberof textWrap
91
219
  @desc If *value* is specified, sets the overflow to the specified boolean and returns this generator. If *value* is not specified, returns the current overflow value.
92
220
  @param {Boolean} [*value* = false]
93
- */A.overflow=function(u){return arguments.length?(g=u,A):g},
221
+ */e.overflow=function(t){return arguments.length?(p=t,e):p},
94
222
  /**
95
223
  @memberof textWrap
96
224
  @desc If *value* is specified, sets the word split function to the specified function and returns this generator. If *value* is not specified, returns the current word split function.
97
225
  @param {Function} [*value*] A function that, when passed a string, is expected to return that string split into an array of words to textWrap. The default split function splits strings on the following characters: `-`, `/`, `;`, `:`, `&`
98
- */A.split=function(u){return arguments.length?(h=u,A):h},
226
+ */e.split=function(t){return arguments.length?(y=t,e):y},
99
227
  /**
100
228
  @memberof textWrap
101
229
  @desc If *value* is specified, sets width limit to the specified value and returns this generator. If *value* is not specified, returns the current value.
102
230
  @param {Number} [*value* = 200]
103
- */A.width=function(u){return arguments.length?(p=u,A):p},A},u.titleCase=
104
- /**
105
- @function titleCase
106
- @desc Capitalizes the first letter of each word in a phrase/sentence.
107
- @param {String} str The string to apply the title case logic.
108
- */function(C){if(void 0===C)return"";let e=o.map(u=>u.toLowerCase()),D=a.slice(),E=(D=D.concat(D.map(u=>u+"s"))).map(u=>u.toLowerCase()),n=r(C);return n.map((u,A)=>{var t,C,B;return u?(t=u.toLowerCase(),C=F.includes(t.charAt(t.length-1))?t.slice(0,-1):t,0<=(B=E.indexOf(C))?D[B]:e.includes(C)&&0!==A&&A!==n.length-1?t:u.charAt(0).toUpperCase()+u.substr(1).toLowerCase()):""}).reduce((u,A,t)=>(t&&" "===C.charAt(u.length)&&(u+=" "),u+=A),"")},u.trim=function(u){return u.toString().replace(/^\s+|\s+$/g,"")}
231
+ */e.width=function(t){return arguments.length?(w=t,e):w},e},t.titleCase=function(t){return void 0===t?"":V(t).reduce((t,e,n)=>{let r=e;var s=e.toLowerCase().slice(0,-1),n=T.includes(s)||B.includes(s)&&0!==n&&e.toLowerCase()!==s;return t+(r=n?r:e.charAt(0).toUpperCase()+e.slice(1))},"")},t.trim=function(t){return t.toString().replace(/^\s+|\s+$/g,"")}
109
232
  /**
110
233
  @function trimLeft
111
234
  @desc Cross-browser implementation of [trimLeft](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/TrimLeft).
112
235
  @param {String} str
113
- */,u.trimLeft=function(u){return u.toString().replace(/^\s+/,"")},u.trimRight=y});
236
+ */,t.trimLeft=function(t){return t.toString().replace(/^\s+/,"")},t.trimRight=O});
114
237
  //# sourceMappingURL=d3plus-text.full.js.map