highcharts
Version:
JavaScript charting framework
11 lines • 2.81 kB
JavaScript
/**
* Highcharts JS v13.0.1 (2026-08-17)
* @module highcharts/modules/textpath
* @requires highcharts
*
* (c) 2009-2026 Highsoft AS
* Author: Torstein Hønsi
*
* A commercial license may be required depending on use,
* see www.highcharts.com/license
*/import*as t from"../highcharts.js";let e={};e.n=t=>{let a=t&&t.__esModule?()=>t.default:()=>t;return e.d(a,{a:a}),a},e.d=(t,a)=>{if(Array.isArray(a))for(var r=0;r<a.length;){var h=a[r++],n=a[r++];e.o(t,h)?0===n&&r++:0===n?Object.defineProperty(t,h,{enumerable:!0,value:a[r++]}):Object.defineProperty(t,h,{enumerable:!0,get:n})}else for(var h in a)e.o(a,h)&&!e.o(t,h)&&Object.defineProperty(t,h,{enumerable:!0,get:a[h]})},e.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);let a=t.default;var r,h=e.n(a);let{composed:n,deg2rad:s}=h();r=h().SVGElement,(0,a.pushUnique)(n,"TextPath")&&((0,a.addEvent)(r,"afterGetBBox",function(t){let e=t.bBox,a=this.element?.querySelector("textPath");if(a){let t=[],{b:r,h}=this.renderer.fontMetrics(this.element),n=h-r,l=RegExp('(<tspan>|<tspan(?!\\sclass="highcharts-br")[^>]*>|<\\/tspan>)',"g"),i=a.innerHTML.replace(l,"").split(/<tspan class="highcharts-br"[^>]*>/),d=i.length,o=(t,e)=>{let{x:h,y:l}=e,i=(a.getRotationOfChar(t)-90)*s,d=Math.cos(i),o=Math.sin(i);return[[h-n*d,l-n*o],[h+r*d,l+r*o]]};for(let e=0,r=0;r<d;r++){let h=i[r].length;for(let n=0;n<h;n+=5)try{let h=e+n+r,[s,l]=o(h,a.getStartPositionOfChar(h));0===n?(t.push(l),t.push(s)):(0===r&&t.unshift(l),r===d-1&&t.push(s))}catch{break}e+=h-1;try{let h=e+r,n=a.getEndPositionOfChar(h),[s,l]=o(h,n);t.unshift(l),t.unshift(s)}catch{break}}t.length&&t.push(t[0].slice()),e.polygon=t}return e}),(0,a.addEvent)(r,"beforeAddingDataLabel",function(t){let e=t.labelOptions,a=t.point,r=e[a.formatPrefix+"TextPath"]||e.textPath;r&&!e.useHTML&&(this.setTextPath(a.getDataLabelPath?.(this)||a.graphic,r),a.dataLabelPath&&!r.enabled&&(a.dataLabelPath=a.dataLabelPath.destroy()))}),r.prototype.setTextPath=r.prototype.setTextPath??function(t,e){let r=this.renderer.url,h=this.text||this,n=h.textPath,{attributes:s,enabled:l}=(0,a.merge)({enabled:!0,attributes:{dy:-5,startOffset:"50%",textAnchor:"middle"}},e);if(t=t||n&&n.path,n?.undo(),t&&l){let e=(0,a.addEvent)(h,"afterModifyTree",e=>{if(t&&l){let n=t.attr("id");n||t.attr("id",n=(0,a.uniqueKey)());let l={x:0,y:0};(0,a.defined)(s.dx)&&(l.dx=s.dx,delete s.dx),(0,a.defined)(s.dy)&&(l.dy=s.dy,delete s.dy),h.attr(l),this.attr({transform:""}),this.box&&(this.box=this.box.destroy());let i=e.nodes.slice(0);e.nodes.length=0,e.nodes[0]={tagName:"textPath",attributes:(0,a.extend)(s,{"text-anchor":s.textAnchor,href:`${r}#${n}`}),children:i}}});h.textPath={path:t,undo:e}}else h.attr({dx:0,dy:0}),delete h.textPath;return this.added&&(h.textCache="",this.renderer.buildText(h)),this});let l=h();export{l as default};