@oliasoft-open-source/charts-library 5.5.0-beta-3 → 5.5.0-beta-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.
Files changed (37) hide show
  1. package/dist/assets/{Color-AVL7NMMY-Cvup177w.js → Color-AVL7NMMY-m0fFC0hS.js} +1 -1
  2. package/dist/assets/{DocsRenderer-PQXLIZUC-C8oenzCg.js → DocsRenderer-PQXLIZUC-BhZrnj-x.js} +2 -2
  3. package/dist/assets/bar-chart.stories-BFArxuxM.js +145 -0
  4. package/dist/assets/client-SlPkUNtY.js +1 -0
  5. package/dist/assets/{components-Bhnu9xjs.js → components-Bt9IMQSt.js} +1 -1
  6. package/dist/assets/{get-draggableData-Ci7DAhgp.js → get-draggableData-ByrVhmD5.js} +2 -2
  7. package/dist/assets/{iframe-DmiD_XLI.js → iframe-DW2UQNc3.js} +5 -5
  8. package/dist/assets/{legend-DLSpTR0Q.js → legend-C6YWwRpu.js} +7 -7
  9. package/dist/assets/{legend-context-0FoVt6TR.js → legend-context-C2Dt3PJx.js} +3 -3
  10. package/dist/assets/line-chart-CNmqtXk-.js +1 -0
  11. package/dist/assets/{line-chart.stories-SIfsugaw.js → line-chart.stories-Cnj5uyTo.js} +1 -1
  12. package/dist/assets/line-chart.test-case.stories-ClCgTJUJ.js +1545 -0
  13. package/dist/assets/pie-chart.stories-BVUTCp0_.js +45 -0
  14. package/dist/assets/{react-18-DVWhm1ZL.js → react-18-CFvwF0kt.js} +1 -1
  15. package/dist/assets/{react-CG8Fu59u.js → react-BLWr6Eyx.js} +1 -1
  16. package/dist/assets/scatter-chart.stories-CZod9JAT.js +41 -0
  17. package/dist/common/helpers/callout-helpers/callout-helpers.d.ts +2 -2
  18. package/dist/common/helpers/get-chart-from-ctx.d.ts +1 -0
  19. package/dist/common/plugins/annotation-dragger-plugin/annotation-position-storage.d.ts +7 -0
  20. package/dist/common/plugins/annotation-dragger-plugin/event-helpers.d.ts +1 -1
  21. package/dist/iframe.html +1 -1
  22. package/dist/index.js +114 -45
  23. package/dist/index.json +1 -1
  24. package/dist/line-chart/hooks/use-chart-options.d.ts +4 -1
  25. package/dist/project.json +1 -1
  26. package/dist/src/components/common/helpers/callout-helpers/callout-helpers.d.ts +2 -2
  27. package/dist/src/components/common/helpers/get-chart-from-ctx.d.ts +1 -0
  28. package/dist/src/components/common/plugins/annotation-dragger-plugin/annotation-position-storage.d.ts +7 -0
  29. package/dist/src/components/common/plugins/annotation-dragger-plugin/event-helpers.d.ts +1 -1
  30. package/dist/src/components/line-chart/hooks/use-chart-options.d.ts +4 -1
  31. package/package.json +1 -1
  32. package/dist/assets/bar-chart.stories-De78SDiD.js +0 -145
  33. package/dist/assets/client-DsbWhmXk.js +0 -1
  34. package/dist/assets/line-chart-VpvCvObG.js +0 -1
  35. package/dist/assets/line-chart.test-case.stories-B9eK7kjq.js +0 -430
  36. package/dist/assets/pie-chart.stories-CHMHYc28.js +0 -45
  37. package/dist/assets/scatter-chart.stories-HJi4Ssg8.js +0 -41
@@ -0,0 +1,45 @@
1
+ import{_t as e,at as t,dt as n}from"./iframe-DW2UQNc3.js";import{$ as r,At as i,Ft as a,I as o,J as s,M as c,Mt as l,Nt as u,Pt as d,Q as ee,S as f,St as te,Tt as ne,V as p,Z as re,at as m,d as h,gt as g,ht as _,kt as v,n as y,tt as b,wt as x,x as ie,yt as ae}from"./legend-context-C2Dt3PJx.js";import{n as oe,t as se}from"./bar-chart-const-D_44J3Hs.js";var ce=e(r(),1),S=e(n(),1),C={chart:`_chart_1jdnu_1`,fixedHeight:`_fixedHeight_1jdnu_13`,stretchHeight:`_stretchHeight_1jdnu_19`,zoomForm:`_zoomForm_1jdnu_32`,zoomReset:`_zoomReset_1jdnu_40`,help:`_help_1jdnu_43`,autoWeight:`_autoWeight_1jdnu_47`},le=e=>({width:e?.width,height:e?.height,maintainAspectRatio:e?.maintainAspectRatio||!1,staticChartHeight:e?.staticChartHeight||!1,performanceMode:e?.performanceMode??!0}),ue=e=>({tooltips:e?.tooltips??!0,showLabelsInTooltips:e?.showLabelsInTooltips||!1,scientificNotation:e?.scientificNotation??!0}),de=e=>({showDataLabels:e?.showDataLabels||!1,stacked:e?.stacked||!1,cutout:e?.cutout||0}),fe=e=>({display:e?.display??!0,useDataset:e?.useDataset||!1,position:e?.position||c.Bottom,align:e?.align||f.Center}),pe=e=>({enableZoom:e?.enableZoom||!1,enablePan:e?.enablePan||!1}),w=e=>({onLegendClick:e?.onLegendClick,onHover:e?.onHover,onUnhover:e?.onUnhover}),T=e=>({labels:e?.labels||[],datasets:e?.datasets||[]});const E=e=>{let t=e?.chart||{},n=t?.options||{};return{testId:t?.testId??null,data:T(t?.data),options:{title:n?.title||``,chartStyling:le(n?.chartStyling),tooltip:ue(n?.tooltip),graph:de(n?.graph),legend:fe(n?.legend),chartOptions:pe(n?.chartOptions),interactions:w(n?.interactions)}}},D=e=>{let[t,n]=(0,S.useState)(!1),{data:r,options:i}=e,a=(e=>{let t=[...e];if(i.graph.stacked){let e={label:t?.[0]?.label??``,backgroundColor:[],borderColor:``,borderWidth:Number(t[0].borderWidth)||1,data:[],borderDash:[]};return r.labels.map((n,r)=>{t.map((t,n)=>{e.data.push(t.data[r]);let{backgroundColor:i}=t,{borderColor:a}=t;e.backgroundColor.push((Array.isArray(i)?i[r%(a?.length||1)]:i)||p[r]+`${99-10*n}`),e.borderColor=a??``})}),[e]}return t.map((e,t)=>{let{borderWidth:n=`1`}=e??{},r=parseFloat(String(n))||1,i=p[t],a=e.borderColor||i,o=e.backgroundColor||h(p);return{...e,borderWidth:r,borderColor:a,backgroundColor:o}})})(r.datasets),o=()=>i.title===``?{}:{display:!0,text:e.options.title},s=(e,t,n)=>{let{chart:r}=n??{};if(t&&r){let{index:e=0}=t;if(r.toggleDataVisibility(e),r.update(),i.interactions?.onLegendClick){let n=r.isDatasetVisible(e);i.interactions.onLegendClick(t.text,!n)}}};return{generatedDatasets:a,getTitle:o,legendClick:s,onClick:(e,t,n)=>{n.resetZoom()},onHover:(e,r)=>{if(t&&!r?.length&&(n(!1),i.interactions.onUnhover&&i.interactions.onUnhover(e)),!t&&r?.length&&(n(!0),i.interactions.onHover)){let{index:t,datasetIndex:n}=r[0],o=a;i.interactions.onHover(e,n,t,o)}},getDatalabels:()=>i.graph.showDataLabels?{display:`auto`,align:`center`,anchor:`center`,formatter:(e,t)=>{if(t.chart.getDatasetMeta(i.graph.stacked?0:t.datasetIndex).data[t.dataIndex].hidden)return``;let n=t.dataset.data[t.dataIndex],r=n?.label||(typeof n==`number`?n:Array.isArray(n)?n.reduce((e,t,n)=>n===0?`${e} ${t}`:`${e}, ${t}`,``):``);return typeof n==`number`?Number.isInteger(r)?r:r.toFixed(2):r}}:{display:!1},getLegend:()=>({position:i.legend.position,display:i.legend.display,align:i.legend.align,labels:{boxHeight:6,boxWidth:6,usePointStyle:!0,filter:e=>i.legend.useDataset?!r.datasets[e.index]?.hideLegend:!0},onClick:s}),getToolTips:()=>{let e=e=>{let t={};return i?.tooltip?.scientificNotation?(Math.abs(e)<1e-4||Math.abs(e)>1e7)&&(t={roundScientificCoefficient:3}):t={scientific:!1},b(m(e),t)};return{callbacks:{title:e=>{let{dataIndex:t}=e[0],n=i.graph.stacked?parseInt(String(t/r.labels.length)):t;return`${r.labels[n]}`},label:t=>{let{dataIndex:n}=t,a=i.graph.stacked?n%r.datasets.length:t.datasetIndex,o=r.datasets.length>1?`${r.datasets[a]?.label}: `:``,s=t.dataset.data[n],c=typeof s==`object`?`${s.value||``} ${i.tooltip.showLabelsInTooltips&&s.label?`(`+s.label+`)`:``}`:s,l=r?.yUnit?`[${r?.yUnit}]`:``;return`${o} ${e(c)} ${l}`}},padding:8,boxWidth:12,boxHeight:12,boxPadding:4,usePointStyle:!0}}}};var O=e(t(),1);ne.register(v,x,i,te,u,a,d,l,g,_);var k=e=>{ie();let t=E(e),n=(0,S.useRef)(null),{data:r,options:i,testId:a}=t,{generatedDatasets:s,getTitle:c,onClick:l,onHover:u,getDatalabels:d,getLegend:ee,getToolTips:f}=D(t);return(0,O.jsx)(`div`,{className:(0,ce.default)(C.chart,!i.chartStyling.width||!i.chartStyling.height?i.chartStyling.staticChartHeight?C.fixedHeight:C.stretchHeight:``),style:{width:i.chartStyling.width||`auto`,height:i.chartStyling.height||`auto`},"data-testid":a,children:(0,O.jsx)(ae,{ref:n,data:{datasets:s,labels:i.graph.stacked?void 0:r.labels},options:{cutout:i.graph.cutout,onClick:l,responsive:!0,maintainAspectRatio:i.chartStyling.maintainAspectRatio,animation:i.chartStyling.performanceMode?!1:{duration:o.FAST},hover:{mode:`nearest`,intersect:!0},onHover:u,plugins:{annotation:!1,title:c(),datalabels:d(),tooltip:f(),legend:ee()}}})})},A=e=>{let{options:t}=E(e);return(0,O.jsx)(y,{options:t,children:(0,O.jsx)(k,{...e})})};A.__docgenInfo={description:``,methods:[],displayName:`PieChartWithLegend`,props:{chart:{required:!0,tsType:{name:`IPieChartData`},description:``},testId:{required:!1,tsType:{name:`union`,raw:`string | null`,elements:[{name:`string`},{name:`null`}]},description:``}}};var j=[`label 1`,`label 2`,`label 3`],M={label:`data1`,data:[3,8,7]},N={label:`data2`,data:[1,2,3]},P={label:`data3`,data:[5,0,4]},F={label:`spacing data`,offset:40,data:[3,8,7]},I={label:`hover data`,data:[3,8,7],hoverOffset:40},L={label:`data`,data:[{value:210,label:`label`},{value:333,label:`labal`},{value:248,label:`lebel`}]},R={label:`data`,data:[210,333,248]},z={data:{labels:j,datasets:[M]}},B={data:{labels:j,datasets:[M,N,P]}},V={data:{labels:j,datasets:[M,N,P]},options:{title:`Stacked`,graph:{stacked:!0}}},me={data:{labels:j,datasets:[L]},options:{title:`With custom datalabels`,graph:{showDataLabels:!0}}},he={data:{labels:j,datasets:[R]},options:{title:`With value as datalabels`,graph:{showDataLabels:!0}}},ge={data:{labels:j,datasets:[L]},options:{title:`With datalabels in tooltips`,tooltip:{showLabelsInTooltips:!0}}},_e={data:{labels:j,datasets:[I]},options:{title:`Hover offset`}},ve={data:{labels:j,datasets:[F]},options:{title:`Segment offset`}},ye={data:{labels:j,datasets:[M]},options:{chartStyling:{performanceMode:!1}}},be={data:{labels:j,datasets:[M]},options:{title:`Cutout 50%`,graph:{cutout:`50%`}}},xe={data:{labels:j,datasets:[M]},options:{title:`Cutout 20 pixels`,graph:{cutout:20}}},Se={title:`PieChart`,component:A,args:{chart:z}},H=e=>(0,O.jsx)(A,{...e});const U=H.bind({}),W=H.bind({});W.args={chart:B};const G=H.bind({});G.args={chart:V};const K=H.bind({});K.args={chart:me};const q=H.bind({});q.args={chart:he};const J=H.bind({});J.args={chart:ge};const Y=H.bind({});Y.args={chart:ye};const X=H.bind({});X.args={chart:be};const Z=H.bind({});Z.args={chart:xe};const Q=H.bind({});Q.args={chart:_e};const $=H.bind({});Q.args={chart:ve},U.parameters={...U.parameters,docs:{...U.parameters?.docs,source:{originalSource:`args => {
2
+ return <PieChart
3
+ // eslint-disable-next-line react/jsx-props-no-spreading
4
+ {...args} />;
5
+ }`,...U.parameters?.docs?.source}}},W.parameters={...W.parameters,docs:{...W.parameters?.docs,source:{originalSource:`args => {
6
+ return <PieChart
7
+ // eslint-disable-next-line react/jsx-props-no-spreading
8
+ {...args} />;
9
+ }`,...W.parameters?.docs?.source}}},G.parameters={...G.parameters,docs:{...G.parameters?.docs,source:{originalSource:`args => {
10
+ return <PieChart
11
+ // eslint-disable-next-line react/jsx-props-no-spreading
12
+ {...args} />;
13
+ }`,...G.parameters?.docs?.source}}},K.parameters={...K.parameters,docs:{...K.parameters?.docs,source:{originalSource:`args => {
14
+ return <PieChart
15
+ // eslint-disable-next-line react/jsx-props-no-spreading
16
+ {...args} />;
17
+ }`,...K.parameters?.docs?.source}}},q.parameters={...q.parameters,docs:{...q.parameters?.docs,source:{originalSource:`args => {
18
+ return <PieChart
19
+ // eslint-disable-next-line react/jsx-props-no-spreading
20
+ {...args} />;
21
+ }`,...q.parameters?.docs?.source}}},J.parameters={...J.parameters,docs:{...J.parameters?.docs,source:{originalSource:`args => {
22
+ return <PieChart
23
+ // eslint-disable-next-line react/jsx-props-no-spreading
24
+ {...args} />;
25
+ }`,...J.parameters?.docs?.source}}},Y.parameters={...Y.parameters,docs:{...Y.parameters?.docs,source:{originalSource:`args => {
26
+ return <PieChart
27
+ // eslint-disable-next-line react/jsx-props-no-spreading
28
+ {...args} />;
29
+ }`,...Y.parameters?.docs?.source}}},X.parameters={...X.parameters,docs:{...X.parameters?.docs,source:{originalSource:`args => {
30
+ return <PieChart
31
+ // eslint-disable-next-line react/jsx-props-no-spreading
32
+ {...args} />;
33
+ }`,...X.parameters?.docs?.source}}},Z.parameters={...Z.parameters,docs:{...Z.parameters?.docs,source:{originalSource:`args => {
34
+ return <PieChart
35
+ // eslint-disable-next-line react/jsx-props-no-spreading
36
+ {...args} />;
37
+ }`,...Z.parameters?.docs?.source}}},Q.parameters={...Q.parameters,docs:{...Q.parameters?.docs,source:{originalSource:`args => {
38
+ return <PieChart
39
+ // eslint-disable-next-line react/jsx-props-no-spreading
40
+ {...args} />;
41
+ }`,...Q.parameters?.docs?.source}}},$.parameters={...$.parameters,docs:{...$.parameters?.docs,source:{originalSource:`args => {
42
+ return <PieChart
43
+ // eslint-disable-next-line react/jsx-props-no-spreading
44
+ {...args} />;
45
+ }`,...$.parameters?.docs?.source}}};const Ce=[`Default`,`MultipleSets`,`MultipleSetsStacked`,`Datalabels`,`DatalabelsValues`,`DatalabelsInTooltips`,`Animated`,`Doughnut`,`DoughnutFixedCutout`,`HoverOffset`,`SegmentOffset`];export{Y as Animated,K as Datalabels,J as DatalabelsInTooltips,q as DatalabelsValues,U as Default,X as Doughnut,Z as DoughnutFixedCutout,Q as HoverOffset,W as MultipleSets,G as MultipleSetsStacked,$ as SegmentOffset,Ce as __namedExportsOrder,Se as default};
@@ -1 +1 @@
1
- import{_t as e,dt as t}from"./iframe-DmiD_XLI.js";import{t as n}from"./client-DsbWhmXk.js";var r=e(t(),1),i=e(n(),1),a=new Map;function o(){return globalThis.IS_REACT_ACT_ENVIRONMENT}var s=({callback:e,children:t})=>{let n=r.useRef();return r.useLayoutEffect(()=>{n.current!==e&&(n.current=e,e())},[e]),t};typeof Promise.withResolvers>`u`&&(Promise.withResolvers=()=>{let e=null,t=null;return{promise:new Promise((n,r)=>{e=n,t=r}),resolve:e,reject:t}});var c=async(e,t,n)=>{let i=await u(t,n);if(o()){i.render(e);return}let{promise:a,resolve:c}=Promise.withResolvers();return i.render(r.createElement(s,{callback:c},e)),a},l=(e,t)=>{let n=a.get(e);n&&(n.unmount(),a.delete(e))},u=async(e,t)=>{let n=a.get(e);return n||(n=i.createRoot(e,t),a.set(e,n)),n};export{c as renderElement,l as unmountElement};
1
+ import{_t as e,dt as t}from"./iframe-DW2UQNc3.js";import{t as n}from"./client-SlPkUNtY.js";var r=e(t(),1),i=e(n(),1),a=new Map;function o(){return globalThis.IS_REACT_ACT_ENVIRONMENT}var s=({callback:e,children:t})=>{let n=r.useRef();return r.useLayoutEffect(()=>{n.current!==e&&(n.current=e,e())},[e]),t};typeof Promise.withResolvers>`u`&&(Promise.withResolvers=()=>{let e=null,t=null;return{promise:new Promise((n,r)=>{e=n,t=r}),resolve:e,reject:t}});var c=async(e,t,n)=>{let i=await u(t,n);if(o()){i.render(e);return}let{promise:a,resolve:c}=Promise.withResolvers();return i.render(r.createElement(s,{callback:c},e)),a},l=(e,t)=>{let n=a.get(e);n&&(n.unmount(),a.delete(e))},u=async(e,t)=>{let n=a.get(e);return n||(n=i.createRoot(e,t),a.set(e,n)),n};export{c as renderElement,l as unmountElement};
@@ -1 +1 @@
1
- import{_t as e,dt as t}from"./iframe-DmiD_XLI.js";var n=e(t(),1),r={},i=n.createContext(r);function a(e){let t=n.useContext(i);return n.useMemo(function(){return typeof e==`function`?e(t):{...t,...e}},[t,e])}function o(e){let t;return t=e.disableParentContext?typeof e.components==`function`?e.components(r):e.components||r:a(e.components),n.createElement(i.Provider,{value:t},e.children)}export{o as MDXProvider,a as useMDXComponents};
1
+ import{_t as e,dt as t}from"./iframe-DW2UQNc3.js";var n=e(t(),1),r={},i=n.createContext(r);function a(e){let t=n.useContext(i);return n.useMemo(function(){return typeof e==`function`?e(t):{...t,...e}},[t,e])}function o(e){let t;return t=e.disableParentContext?typeof e.components==`function`?e.components(r):e.components||r:a(e.components),n.createElement(i.Provider,{value:t},e.children)}export{o as MDXProvider,a as useMDXComponents};
@@ -0,0 +1,41 @@
1
+ import{_t as e,at as t,dt as n}from"./iframe-DW2UQNc3.js";import{Ft as r,I as i,K as a,M as o,N as s,Nt as c,Pt as l,R as u,S as d,Tt as f,V as ee,_ as te,at as p,b as m,bt as h,g,gt as _,ht as v,jt as y,kt as ne,m as re,n as ie,q as ae,tt as oe,w as b,wt as se,x as ce,z as le}from"./legend-context-C2Dt3PJx.js";import{J as ue,Y as de,d as fe,f as pe,g as me,i as he,p as ge,q as _e,r as ve,t as ye}from"./legend-C6YWwRpu.js";import{n as be,t as xe}from"./bar-chart-const-D_44J3Hs.js";var x=e(n(),1);const S=(e,t)=>{let n={};return t?(Math.abs(e)<1e-4||Math.abs(e)>1e7)&&(n={roundScientificCoefficient:3}):n={scientific:!1},oe(p(e),n)};var C=(e,t)=>{if(t?.tooltip?.showLabelsInTooltips){let{label:t}=e[0]?.dataset??{};return t}},w=(e,t)=>{let{raw:n,dataset:r}=e??{},i=n?.label,a=t?.tooltip?.scientificNotation;return`${i??r?.label} ( x: ${S(n?.x,a)} , y: ${S(n?.y,a)} )`};const T=e=>({enabled:e?.tooltip?.enabled,callbacks:{title:t=>C(t,e),label:t=>w(t,e)},backgroundColor:e?.tooltip?.backgroundColor,displayColors:e?.tooltip?.displayColors,padding:7});var E=({options:e,axisType:t=b.X,currentScale:n})=>{let r=m(e.direction),i=n||e?.axes?.[t]?.[0],a=r&&t===b.Y||!r&&t===b.X,o=i?.gridLines||{};return{type:s.Linear,position:i?.position,beginAtZero:e?.additionalAxesOptions?.beginAtZero,reverse:(()=>t===(r?b.Y:b.X)?e?.additionalAxesOptions?.reverse:!1)(),suggestedMax:e?.additionalAxesOptions?.suggestedMax,suggestedMin:e?.additionalAxesOptions?.suggestedMin,min:a?e?.additionalAxesOptions?.min:void 0,max:a?e?.additionalAxesOptions?.max:void 0,title:{display:!!i?.label?.length||!!i?.unit?.length,text:i?.label||i?.unit,padding:0},ticks:(()=>{let n=e?.additionalAxesOptions;return{stepSize:i?.stepSize??(t===b.Y?n?.stepSize:void 0),includeBounds:!1,font:{size:12}}})(),grid:{...o}}};const D=e=>({x:E({options:e,axisType:b.X}),y:E({options:e,axisType:b.Y})}),O=(e,t)=>{let{data:n,options:r}=e,{interactions:a,chartStyling:o}=r,[s,c]=(0,x.useState)(!1),{legend:l,customLegendPlugin:u,legendClick:d}=pe({chartRef:t,options:r}),{state:f}=ge(),{annotation:p}=f,m=(e=>e.map((e,t)=>{let{borderWidth:n=1}=e??{},r=parseFloat(String(n))||1,i=ee[t],a=e.borderColor??i,o=e.backgroundColor??i;return{...e,borderWidth:r,borderColor:a,backgroundColor:o}}))(n.datasets),h=(e,t,n)=>{n.resetZoom()},g=(e,t)=>{if(s&&!t?.length&&(c(!1),a.onUnhover&&a.onUnhover(e)),!s&&t?.length&&(c(!0),a.onHover)){let{index:n,datasetIndex:r}=t[0];a.onHover(e,r,n,m)}};return{generatedDatasets:m,scatterOptions:{onClick:h,onHover:g,...o,interactions:{onLegendClick:d,onHover:g},scales:D(e?.options),animation:o.performanceMode?{duration:i.NO}:{duration:i.FAST,onComplete:a?.onAnimationComplete},plugins:{legend:{...l,display:!1,events:[]},customLegendPlugin:u,title:te(r),annotation:fe(p),chartAreaBorder:{borderColor:le},datalabels:{display:r.graph.showDataLabels},tooltip:T(r)}}}};let k=function(e){return e[e.TopToBottom=0]=`TopToBottom`,e[e.BottomToTop=1]=`BottomToTop`,e[e.LeftToRight=2]=`LeftToRight`,e[e.RightToLeft=3]=`RightToLeft`,e[e.TopLeftToBottomRight=4]=`TopLeftToBottomRight`,e[e.BottomRightToTopLeft=5]=`BottomRightToTopLeft`,e[e.BottomLeftToTopRight=6]=`BottomLeftToTopRight`,e[e.TopRightToBottomLeft=7]=`TopRightToBottomLeft`,e}({});var A=e=>({display:e?.display??!1,gradientColors:e?.gradientColors??ae,direction:e?.direction??k.BottomLeftToTopRight}),j=e=>({width:e?.width??`auto`,height:e?.height??`auto`,maintainAspectRatio:e?.maintainAspectRatio||!1,staticChartHeight:e?.staticChartHeight||!1,performanceMode:e?.performanceMode??!0,gradient:A(e?.gradient)}),M=e=>({enabled:e?.enabled??!0,tooltips:e?.tooltips??!0,showLabelsInTooltips:e?.showLabelsInTooltips||!1,backgroundColor:e?.backgroundColor||`#333`,displayColors:e?.displayColors||!1,scientificNotation:e?.scientificNotation??!0}),Se=e=>({showMinorGridlines:e?.showMinorGridlines??!1,showDataLabels:e?.showDataLabels??!1}),Ce=e=>({display:e?.display??!0,useDataset:e?.useDataset||!1,position:e?.position||o.BottomLeft,align:e?.align||d.Center}),we=e=>({enableZoom:e?.enableZoom||!1,enablePan:e?.enablePan||!1}),Te=e=>({onLegendClick:e?.onLegendClick,onHover:e?.onHover,onUnhover:e?.onUnhover,onAnimationComplete:e?.onAnimationComplete}),Ee=e=>({labels:e?.labels||[],datasets:e?.datasets||[]}),De=e=>e?e.map(e=>({...e,display:e?.display??!0})):[],Oe=e=>({showAnnotations:e?.showAnnotations??!0,controlAnnotation:e?.controlAnnotation||!1,annotationsData:De(e?.annotationsData)}),ke=e=>({x:e?.x||[{}],y:e?.y||[{}]}),Ae=e=>({reverse:e?.reverse||!1,stacked:e?.stacked||!1,beginAtZero:e?.beginAtZero??!0,stepSize:e?.stepSize,suggestedMin:e?.suggestedMin,suggestedMax:e?.suggestedMax,min:e?.min,max:e?.max});const N=e=>{let t=e?.chart||{},n=t?.options||{};return{testId:t?.testId??null,data:Ee(t?.data),options:{title:n?.title||``,axes:ke(n?.axes),additionalAxesOptions:Ae(n?.additionalAxesOptions),direction:n?.direction||ve.VERTICAL,chartStyling:j(n?.chartStyling),tooltip:M(n?.tooltip),graph:Se(n?.graph),legend:Ce(n?.legend),annotations:Oe(n?.annotations),chartOptions:we(n?.chartOptions),interactions:Te(n?.interactions)}}};var je=(e,t)=>{switch(e){case k.TopToBottom:return[t.left,t.top,t.left,t.bottom];case k.BottomToTop:return[t.left,t.bottom,t.left,t.top];case k.LeftToRight:return[t.left,t.top,t.right,t.top];case k.RightToLeft:return[t.right,t.top,t.left,t.top];case k.TopLeftToBottomRight:return[t.left,t.top,t.right,t.bottom];case k.BottomRightToTopLeft:return[t.right,t.bottom,t.left,t.top];case k.BottomLeftToTopRight:return[t.left,t.bottom,t.right,t.top];case k.TopRightToBottomLeft:return[t.right,t.top,t.left,t.bottom];default:return[t.left,t.bottom,t.right,t.top]}};const Me={id:`gradientBackgroundPlugin`,beforeDraw:e=>{let{ctx:t,chartArea:n,options:r}=e;if(!t||!n)return;let{display:i=!1,gradientColors:a,direction:o=k.BottomLeftToTopRight}=r?.gradient??{};if(!i||!a||a.length===0)return;let[s,c,l,u]=je(o,n),d=t.createLinearGradient(s,c,l,u);a.forEach(({offset:e,color:t})=>{d.addColorStop(e,t)}),t.save(),t.globalCompositeOperation=`destination-over`,t.fillStyle=d,t.fillRect(n.left,n.top,n.right-n.left,n.bottom-n.top),t.restore()}};var P={chart:`_chart_1qlu1_1`,canvas:`_canvas_1qlu1_11`,fixedHeight:`_fixedHeight_1qlu1_20`,stretchHeight:`_stretchHeight_1qlu1_26`,squareAspectRatio:`_squareAspectRatio_1qlu1_32`,zoomForm:`_zoomForm_1qlu1_43`,zoomReset:`_zoomReset_1qlu1_51`,help:`_help_1qlu1_54`,autoWeight:`_autoWeight_1qlu1_58`},F=e(t(),1);f.register(ne,y,se,c,r,l,_,v,de,Me);var Ne=e=>{ce();let t=(0,x.useRef)(null),n=N(e),{options:r,testId:i}=n,{scatterOptions:a,generatedDatasets:o}=O(n,t);return(0,F.jsx)(`div`,{className:re(r.chartStyling,P),style:{width:r.chartStyling.width,height:r.chartStyling.height},"data-testid":i,children:(0,F.jsx)(_e,{backend:ue,context:window,children:(0,F.jsxs)(`div`,{className:P.canvas,id:`canvas`,children:[(0,F.jsx)(h,{ref:t,data:{datasets:o},options:a,plugins:g(r.graph,r.legend)}),!!o.length&&(0,F.jsx)(ye,{chartRef:t,legendConfig:{options:r,generatedDatasets:o,chartType:he.SCATTER}})]})})})},I=e=>{let{options:t}=N(e);return(0,F.jsx)(ie,{options:t,children:(0,F.jsx)(Ne,{...e})})};I.__docgenInfo={description:``,methods:[],displayName:`ScatterChartWithLegend`,props:{chart:{required:!0,tsType:{name:`IScatterChartData`},description:``},testId:{required:!1,tsType:{name:`union`,raw:`string | null`,elements:[{name:`string`},{name:`null`}]},description:``}}};var L=[`label 1`,`label 2`,`label 3`],R={label:`Dataset 1`,data:[{x:1,y:5},{x:3,y:7},{x:6,y:2},{x:8,y:6},{x:9,y:4}]},z={label:`Dataset 2`,data:[{x:1,y:3},{x:4,y:5},{x:7,y:9},{x:10,y:2},{x:12,y:7}]},Pe={label:`Dataset 3`,data:[{x:2,y:8},{x:5,y:6},{x:8,y:10},{x:11,y:5},{x:14,y:9}]},B={label:`Dataset 4`,data:[{x:2,y:8},{x:14,y:9}]},Fe={label:`Dataset 5`,data:[{x:14,y:7,label:`Echo`},{x:3,y:18,label:`Lima`},{x:19,y:2,label:`Romeo`},{x:8,y:11,label:`Charlie`},{x:12,y:9,label:`Oscar`}]},Ie={label:`Dataset 6`,data:[{x:15,y:3,label:`Hotel`},{x:9,y:14,label:`Tango`},{x:4,y:17,label:`Whiskey`},{x:11,y:7,label:`Juliet`},{x:13,y:1,label:`Zulu`}]},Le={label:`Dataset Decimals`,data:[{x:4.30021321123002,y:2.30021321123005},{x:5.12321321000003,y:3.23213210000037}]},V={data:{labels:L,datasets:[R]}},Re={data:{labels:L,datasets:[R]},options:{chartStyling:{height:300,width:700}}},ze={data:{labels:L,datasets:[R,z,Pe]}},Be={data:{labels:L,datasets:[R]},options:{title:`With Data Labels`,graph:{showDataLabels:!0}}},Ve={data:{labels:L,datasets:[R,z,Le]},options:{title:`With Tooltips`,tooltip:{title:`Tooltip`,showLabelsInTooltips:!0}}},He={data:{labels:L,datasets:[{...R,backgroundColor:`red`,borderColor:`red`}]}},Ue={data:{labels:L,datasets:[R]},options:{title:`With Annotation`,annotations:{showAnnotations:!0,annotationsData:[{annotationAxis:`y`,label:`Horizontal Annotation`,value:2.5,color:`rgba(96, 32, 196, 0.5)`}]}}},We={data:{labels:L,datasets:[R,z,B]},options:{title:`With Axes Labels`,axes:{x:[{label:`x axis`}],y:[{label:`y axis`}]}}},Ge={...V,options:{title:`With Gradient`,chartStyling:{gradient:{display:!0}}}},H={data:{datasets:[Fe,Ie,B]},options:{title:`With datapoint label showing when hovered`,tooltip:{showLabelsInTooltips:!0}}},Ke={title:`ScatterChart`,component:I,args:{chart:V}},U=e=>(0,F.jsx)(I,{...e});const W=U.bind({});W.args={chart:V};const G=U.bind({});G.args={chart:Re};const K=U.bind({});K.args={chart:ze};const q=U.bind({});q.args={chart:Be};const J=U.bind({});J.args={chart:Ve};const Y=U.bind({});Y.args={chart:Ue};const X=U.bind({});X.args={chart:We};const Z=U.bind({});Z.args={chart:Ge};const Q=U.bind({});Q.args={chart:H};const $=U.bind({});$.args={chart:He},W.parameters={...W.parameters,docs:{...W.parameters?.docs,source:{originalSource:`args => {
2
+ return <ScatterChart
3
+ // eslint-disable-next-line react/jsx-props-no-spreading
4
+ {...args} />;
5
+ }`,...W.parameters?.docs?.source}}},G.parameters={...G.parameters,docs:{...G.parameters?.docs,source:{originalSource:`args => {
6
+ return <ScatterChart
7
+ // eslint-disable-next-line react/jsx-props-no-spreading
8
+ {...args} />;
9
+ }`,...G.parameters?.docs?.source}}},K.parameters={...K.parameters,docs:{...K.parameters?.docs,source:{originalSource:`args => {
10
+ return <ScatterChart
11
+ // eslint-disable-next-line react/jsx-props-no-spreading
12
+ {...args} />;
13
+ }`,...K.parameters?.docs?.source}}},q.parameters={...q.parameters,docs:{...q.parameters?.docs,source:{originalSource:`args => {
14
+ return <ScatterChart
15
+ // eslint-disable-next-line react/jsx-props-no-spreading
16
+ {...args} />;
17
+ }`,...q.parameters?.docs?.source}}},J.parameters={...J.parameters,docs:{...J.parameters?.docs,source:{originalSource:`args => {
18
+ return <ScatterChart
19
+ // eslint-disable-next-line react/jsx-props-no-spreading
20
+ {...args} />;
21
+ }`,...J.parameters?.docs?.source}}},Y.parameters={...Y.parameters,docs:{...Y.parameters?.docs,source:{originalSource:`args => {
22
+ return <ScatterChart
23
+ // eslint-disable-next-line react/jsx-props-no-spreading
24
+ {...args} />;
25
+ }`,...Y.parameters?.docs?.source}}},X.parameters={...X.parameters,docs:{...X.parameters?.docs,source:{originalSource:`args => {
26
+ return <ScatterChart
27
+ // eslint-disable-next-line react/jsx-props-no-spreading
28
+ {...args} />;
29
+ }`,...X.parameters?.docs?.source}}},Z.parameters={...Z.parameters,docs:{...Z.parameters?.docs,source:{originalSource:`args => {
30
+ return <ScatterChart
31
+ // eslint-disable-next-line react/jsx-props-no-spreading
32
+ {...args} />;
33
+ }`,...Z.parameters?.docs?.source}}},Q.parameters={...Q.parameters,docs:{...Q.parameters?.docs,source:{originalSource:`args => {
34
+ return <ScatterChart
35
+ // eslint-disable-next-line react/jsx-props-no-spreading
36
+ {...args} />;
37
+ }`,...Q.parameters?.docs?.source}}},$.parameters={...$.parameters,docs:{...$.parameters?.docs,source:{originalSource:`args => {
38
+ return <ScatterChart
39
+ // eslint-disable-next-line react/jsx-props-no-spreading
40
+ {...args} />;
41
+ }`,...$.parameters?.docs?.source}}};const qe=[`Default`,`StyledChart`,`MultipleDatasets`,`WithDataLabels`,`WithTooltips`,`WithAnnotation`,`WithAxesLabels`,`WithGradient`,`WithDatapointsHavingLabel`,`CustomPointColor`];export{$ as CustomPointColor,W as Default,K as MultipleDatasets,G as StyledChart,Y as WithAnnotation,X as WithAxesLabels,q as WithDataLabels,Q as WithDatapointsHavingLabel,Z as WithGradient,J as WithTooltips,qe as __namedExportsOrder,Ke as default};
@@ -1,6 +1,6 @@
1
1
  import { ICommonAnnotationsData } from '../../common.interface';
2
2
  type TCalloutCfg = NonNullable<NonNullable<ICommonAnnotationsData['labelConfig']>['callout']>;
3
- export declare const resolveCalloutXAdjust: (ctx: any, refAnnotation: ICommonAnnotationsData, calloutCfg: TCalloutCfg, index: number) => any;
4
- export declare const resolveCalloutYAdjust: (ctx: any, refAnnotation: ICommonAnnotationsData, calloutCfg: TCalloutCfg, index: number) => any;
3
+ export declare const resolveCalloutXValue: (ctx: any, refAnnotation: ICommonAnnotationsData, calloutCfg: TCalloutCfg, index: number) => number | undefined;
4
+ export declare const resolveCalloutYValue: (ctx: any, refAnnotation: ICommonAnnotationsData, calloutCfg: TCalloutCfg, index: number) => number | undefined;
5
5
  export declare const isCalloutAnchorInChartArea: (ctx: any, refAnnotation: ICommonAnnotationsData, margin?: number) => boolean;
6
6
  export {};
@@ -0,0 +1 @@
1
+ export declare const getChartFromCtx: (ctx: any) => any;
@@ -0,0 +1,7 @@
1
+ export interface TStoredAnnotationPosition {
2
+ x: number;
3
+ y: number;
4
+ [key: string]: any;
5
+ }
6
+ export declare const setAnnotationPosition: (persistenceId: string | undefined, annotationId: string, pos: TStoredAnnotationPosition) => void;
7
+ export declare const getAnnotationPosition: (persistenceId: string | undefined, annotationId: string) => TStoredAnnotationPosition | undefined;
@@ -3,4 +3,4 @@ import { IScales } from './annotation-dragger-plugin';
3
3
  import { ICommonAnnotationsData } from '../../common.interface';
4
4
  export declare const handleAnnotationMouseDown: (event: MouseEvent, canvas: HTMLCanvasElement, scales: IScales, annotations: Record<string, ICommonAnnotationsData>, setDraggingState: (isDragging: boolean, annotation: ICommonAnnotationsData | null, dragStartX: number, dragStartY: number) => void, hoveredAnnotationId: string | null) => void;
5
5
  export declare const handleAnnotationMouseMove: (event: MouseEvent, canvas: HTMLCanvasElement, scales: IScales, isDragging: boolean, activeAnnotation: ICommonAnnotationsData | null, dragStartX: number, dragStartY: number, chart: Chart) => void;
6
- export declare const handleAnnotationMouseUp: (isDragging: boolean, activeAnnotation: ICommonAnnotationsData | null, chart: Chart, canvas: HTMLCanvasElement, setDraggingState: (isDragging: boolean, annotation: ICommonAnnotationsData | null) => void) => void;
6
+ export declare const handleAnnotationMouseUp: (isDragging: boolean, activeAnnotation: ICommonAnnotationsData | null, chart: Chart, canvas: HTMLCanvasElement, setDraggingState: (isDragging: boolean, annotation: ICommonAnnotationsData | null) => void, persistenceId?: string) => void;
package/dist/iframe.html CHANGED
@@ -529,7 +529,7 @@
529
529
  }
530
530
  </script>
531
531
 
532
- <script type="module" crossorigin src="./assets/iframe-DmiD_XLI.js"></script>
532
+ <script type="module" crossorigin src="./assets/iframe-DW2UQNc3.js"></script>
533
533
  <link rel="modulepreload" crossorigin href="./assets/preload-helper-Dr7BywEQ.js">
534
534
 
535
535
  </head>
package/dist/index.js CHANGED
@@ -19317,51 +19317,61 @@ var getYScale = (chart$4, axisId) => {
19317
19317
  const key = Object.keys(chart$4?.scales ?? {})?.find((k) => k?.toLowerCase()?.includes("y"));
19318
19318
  return key ? chart$4?.scales?.[key] : void 0;
19319
19319
  };
19320
- const resolveCalloutXAdjust = (ctx, refAnnotation, calloutCfg, index$2) => {
19321
- if (typeof calloutCfg?.xAdjust === "function") return calloutCfg?.xAdjust?.(ctx);
19320
+ const resolveCalloutXValue = (ctx, refAnnotation, calloutCfg, index$2) => {
19322
19321
  const chart$4 = ctx?.chart;
19323
- const scale = getXScale(chart$4, refAnnotation?.annotationAxis);
19324
19322
  const xVal = refAnnotation?.xValue;
19325
- if (!scale || typeof xVal !== "number") return 0;
19326
- const area = chart$4?.chartArea;
19327
- const halfW = ((ctx?.element)?.width ?? 0) / 2;
19323
+ if (typeof xVal !== "number") return 0;
19324
+ if (!chart$4) return xVal;
19325
+ const scale = getXScale(chart$4, refAnnotation?.annotationAxis);
19326
+ if (!scale) return xVal;
19327
+ const hasCustomOffset = typeof calloutCfg?.xAdjust === "number";
19328
+ const side = index$2 % 2 === 0 ? 1 : -1;
19329
+ const dx = hasCustomOffset ? calloutCfg?.xAdjust : side * 60;
19330
+ const basePx = scale.getPixelForValue(xVal);
19331
+ const cxBase = basePx + dx;
19332
+ const area = chart$4.chartArea;
19333
+ const el = ctx?.element;
19334
+ if (!area || !el) return scale.getValueForPixel(cxBase);
19328
19335
  const margin = calloutCfg?.margin ?? 8;
19329
- const basePx = scale?.getPixelForValue(xVal);
19330
- let dx = 0;
19331
- if (typeof calloutCfg?.xAdjust === "number") dx = scale?.getPixelForValue(calloutCfg.xAdjust) - basePx;
19332
- else dx = (index$2 % 2 === 0 ? 1 : -1) * 60;
19333
- let cx$1 = basePx + dx;
19336
+ const halfW = (el?.width ?? 0) / 2;
19337
+ let cx$1 = cxBase;
19338
+ let adjDx = dx;
19334
19339
  if (cx$1 - halfW < area.left + margin) {
19335
- dx += area.left + margin + halfW - cx$1;
19336
- cx$1 = basePx + dx;
19340
+ adjDx += area.left + margin + halfW - cx$1;
19341
+ cx$1 = basePx + adjDx;
19337
19342
  } else if (cx$1 + halfW > area.right - margin) {
19338
- dx += area.right - margin - halfW - cx$1;
19339
- cx$1 = basePx + dx;
19343
+ adjDx += area.right - margin - halfW - cx$1;
19344
+ cx$1 = basePx + adjDx;
19340
19345
  }
19341
- return dx;
19346
+ return scale.getValueForPixel(cx$1);
19342
19347
  };
19343
- const resolveCalloutYAdjust = (ctx, refAnnotation, calloutCfg, index$2) => {
19344
- if (typeof calloutCfg?.yAdjust === "function") return calloutCfg.yAdjust(ctx);
19348
+ const resolveCalloutYValue = (ctx, refAnnotation, calloutCfg, index$2) => {
19345
19349
  const chart$4 = ctx?.chart;
19350
+ const yVal = refAnnotation.yValue;
19351
+ if (typeof yVal !== "number") return 0;
19352
+ if (!chart$4) return yVal;
19346
19353
  const scale = getYScale(chart$4, refAnnotation?.annotationAxis);
19347
- const yVal = refAnnotation?.yValue;
19348
- if (!scale || typeof yVal !== "number") return 0;
19349
- const area = chart$4?.chartArea;
19350
- const halfH = ((ctx?.element)?.height ?? 0) / 2;
19354
+ if (!scale) return yVal;
19355
+ const hasCustomOffset = typeof calloutCfg?.yAdjust === "number";
19356
+ const row = Math.floor(index$2 / 2);
19357
+ const dy = hasCustomOffset ? calloutCfg?.yAdjust : -40 - row * 22;
19358
+ const basePx = scale.getPixelForValue(yVal);
19359
+ const cyBase = basePx + dy;
19360
+ const area = chart$4.chartArea;
19361
+ const el = ctx?.element;
19362
+ if (!area || !el) return scale.getValueForPixel(cyBase);
19351
19363
  const margin = calloutCfg?.margin ?? 8;
19352
- const basePx = scale?.getPixelForValue(yVal);
19353
- let dy = 0;
19354
- if (typeof calloutCfg?.yAdjust === "number") dy = scale?.getPixelForValue(calloutCfg.yAdjust) - basePx;
19355
- else dy = -40 - Math.floor(index$2 / 2) * 22;
19356
- let cy = basePx + dy;
19364
+ const halfH = (el?.height ?? 0) / 2;
19365
+ let cy = cyBase;
19366
+ let adjDy = dy;
19357
19367
  if (cy - halfH < area.top + margin) {
19358
- dy += area.top + margin + halfH - cy;
19359
- cy = basePx + dy;
19368
+ adjDy += area.top + margin + halfH - cy;
19369
+ cy = basePx + adjDy;
19360
19370
  } else if (cy + halfH > area.bottom - margin) {
19361
- dy += area.bottom - margin - halfH - cy;
19362
- cy = basePx + dy;
19371
+ adjDy += area.bottom - margin - halfH - cy;
19372
+ cy = basePx + adjDy;
19363
19373
  }
19364
- return dy;
19374
+ return scale.getValueForPixel(cy);
19365
19375
  };
19366
19376
  var isInRange = (v, min, max) => v >= min && v <= max;
19367
19377
  const isCalloutAnchorInChartArea = (ctx, refAnnotation, margin = 0) => {
@@ -19378,6 +19388,47 @@ const isCalloutAnchorInChartArea = (ctx, refAnnotation, margin = 0) => {
19378
19388
  const y = yScale.getPixelForValue(yVal);
19379
19389
  return isInRange(x, area.left + margin, area.right - margin) && isInRange(y, area.top + margin, area.bottom - margin);
19380
19390
  };
19391
+ var STORAGE_PREFIX = "chart_annotations";
19392
+ var getStorageKey = (persistenceId) => {
19393
+ return `${STORAGE_PREFIX}:${persistenceId}`;
19394
+ };
19395
+ var readStorage = (persistenceId) => {
19396
+ try {
19397
+ const raw = window.localStorage.getItem(getStorageKey(persistenceId));
19398
+ if (!raw) return {};
19399
+ const json = JSON.parse(raw);
19400
+ return typeof json === "object" && json !== null ? json : {};
19401
+ } catch {
19402
+ return {};
19403
+ }
19404
+ };
19405
+ var writeStorage = (persistenceId, data) => {
19406
+ try {
19407
+ window.localStorage.setItem(getStorageKey(persistenceId), JSON.stringify(data));
19408
+ } catch {}
19409
+ };
19410
+ const setAnnotationPosition = (persistenceId, annotationId, pos) => {
19411
+ if (!persistenceId) return;
19412
+ const current = readStorage(persistenceId);
19413
+ writeStorage(persistenceId, {
19414
+ ...current,
19415
+ [annotationId]: {
19416
+ ...current[annotationId] ?? {},
19417
+ ...pos
19418
+ }
19419
+ });
19420
+ };
19421
+ const getAnnotationPosition = (persistenceId, annotationId) => {
19422
+ if (!persistenceId) return void 0;
19423
+ return readStorage(persistenceId)[annotationId];
19424
+ };
19425
+ const getChartFromCtx = (ctx) => {
19426
+ if (!ctx) return;
19427
+ if (ctx.chart?.persistenceId !== void 0) return ctx.chart;
19428
+ if (ctx.chart?.chart?.persistenceId !== void 0) return ctx.chart.chart;
19429
+ if (ctx.$context?.chart?.persistenceId !== void 0) return ctx.$context.chart;
19430
+ return ctx.chart?.chart ?? ctx.chart ?? ctx.$context?.chart;
19431
+ };
19381
19432
  var handleLineEnter = (element, chart$4, annotation$1) => {
19382
19433
  chart$4.canvas.style.cursor = CursorStyle.Pointer;
19383
19434
  if (element.options.scaleID?.includes(AxisType.X)) {
@@ -19589,7 +19640,6 @@ var getCalloutAnnotation = (refAnnotation, index$2) => {
19589
19640
  const startOffset = typeof calloutCfg.startOffset === "number" ? calloutCfg.startOffset : 4;
19590
19641
  const endOffset = typeof calloutCfg.endOffset === "number" ? calloutCfg.endOffset : 4;
19591
19642
  return [baseAnnotation, {
19592
- ...baseAnnotation,
19593
19643
  id: `callout-annotation-${index$2}`,
19594
19644
  type: "label",
19595
19645
  backgroundColor: "transparent",
@@ -19600,11 +19650,17 @@ var getCalloutAnnotation = (refAnnotation, index$2) => {
19600
19650
  borderWidth: BORDER_WIDTH.INITIAL,
19601
19651
  padding: 5,
19602
19652
  display: (ctx) => (refAnnotation.display ?? true) && isCalloutAnchorInChartArea(ctx, refAnnotation, calloutCfg.margin ?? 0),
19603
- xAdjust: (ctx) => {
19604
- return resolveCalloutXAdjust(ctx, refAnnotation, calloutCfg, index$2);
19653
+ xValue: (ctx) => {
19654
+ const persistenceId = getChartFromCtx(ctx)?.options?.persistenceId;
19655
+ const stored = getAnnotationPosition(persistenceId, `callout-annotation-${index$2}`);
19656
+ const explicit = typeof calloutCfg.xValue === "number" ? calloutCfg.xValue : void 0;
19657
+ return stored?.x ?? explicit ?? resolveCalloutXValue(ctx, refAnnotation, calloutCfg, index$2);
19605
19658
  },
19606
- yAdjust: (ctx) => {
19607
- return resolveCalloutYAdjust(ctx, refAnnotation, calloutCfg, index$2);
19659
+ yValue: (ctx) => {
19660
+ const persistenceId = getChartFromCtx(ctx)?.options?.persistenceId;
19661
+ const stored = getAnnotationPosition(persistenceId, `callout-annotation-${index$2}`);
19662
+ const explicit = typeof calloutCfg.yValue === "number" ? calloutCfg.yValue : void 0;
19663
+ return stored?.y ?? explicit ?? resolveCalloutYValue(ctx, refAnnotation, calloutCfg, index$2);
19608
19664
  },
19609
19665
  resizable: false,
19610
19666
  displayDragCoordinates: false,
@@ -19615,9 +19671,15 @@ var getCalloutAnnotation = (refAnnotation, index$2) => {
19615
19671
  leave: ({ element }, { chart: chart$4 }) => {
19616
19672
  return handleLabelLeave(element, chart$4, { enableDrag: true });
19617
19673
  },
19618
- onDragStart: calloutCfg?.onDragStart ? () => (coords) => calloutCfg?.onDragStart?.(coords, refAnnotation) : void 0,
19619
- onDrag: calloutCfg?.onDrag ? () => (coords) => calloutCfg?.onDrag?.(coords, refAnnotation) : void 0,
19620
- onDragEnd: calloutCfg?.onDragEnd ? () => (coords) => calloutCfg?.onDragEnd?.(coords, refAnnotation) : void 0,
19674
+ onDragStart: calloutCfg?.onDragStart ? () => (coords) => {
19675
+ return calloutCfg.onDragStart?.(coords, refAnnotation);
19676
+ } : void 0,
19677
+ onDrag: calloutCfg?.onDrag ? () => (coords) => {
19678
+ return calloutCfg.onDrag?.(coords, refAnnotation);
19679
+ } : void 0,
19680
+ onDragEnd: calloutCfg?.onDragEnd ? () => (coords) => {
19681
+ return calloutCfg.onDragEnd?.(coords, refAnnotation);
19682
+ } : void 0,
19621
19683
  calloutConnector: {
19622
19684
  enabled: true,
19623
19685
  fromId: baseId,
@@ -19753,7 +19815,7 @@ const toAnnotationObject = (annotationArr = []) => {
19753
19815
  }, {});
19754
19816
  return { annotations };
19755
19817
  };
19756
- const useChartOptions = ({ chartRef, state, options, dispatch, generatedDatasets }) => {
19818
+ const useChartOptions = ({ chartRef, state, options, dispatch, generatedDatasets, persistenceId }) => {
19757
19819
  const { interactions: { onAnimationComplete }, annotations: { controlAnnotation, showAnnotations = false, annotationsData = [], labelAnnotation: { showLabel, text, position, fontSize, xOffset, yOffset, maxWidth, lineHeight } = {} }, chartStyling: { layoutPadding } } = options;
19758
19820
  const { enableDragPoints, zoomEnabled, panEnabled, lineEnabled } = state;
19759
19821
  const [hoveredPoint, setHoveredPoint] = useState(null);
@@ -19835,6 +19897,7 @@ const useChartOptions = ({ chartRef, state, options, dispatch, generatedDatasets
19835
19897
  ...dragData
19836
19898
  };
19837
19899
  return useMemo(() => ({
19900
+ persistenceId,
19838
19901
  layout: { padding: layoutPadding },
19839
19902
  onHover: onHover(hoveredPoint, setHoveredPoint, generatedDatasets),
19840
19903
  maintainAspectRatio: options?.chartStyling?.maintainAspectRatio,
@@ -20195,7 +20258,7 @@ const handleAnnotationMouseMove = (event, canvas$3, scales$1, isDragging$1, acti
20195
20258
  }
20196
20259
  }
20197
20260
  };
20198
- const handleAnnotationMouseUp = (isDragging$1, activeAnnotation, chart$4, canvas$3, setDraggingState) => {
20261
+ const handleAnnotationMouseUp = (isDragging$1, activeAnnotation, chart$4, canvas$3, setDraggingState, persistenceId) => {
20199
20262
  if (isDragging$1) {
20200
20263
  if (activeAnnotation) {
20201
20264
  const annotationId = activeAnnotation?.id;
@@ -20207,6 +20270,10 @@ const handleAnnotationMouseUp = (isDragging$1, activeAnnotation, chart$4, canvas
20207
20270
  }, activeAnnotation);
20208
20271
  if (!isNil(canvas$3) && !isNil(canvas$3.style)) canvas$3.style.cursor = CursorStyle.Pointer;
20209
20272
  setDraggingState(false, null);
20273
+ setAnnotationPosition(persistenceId, annotationId, {
20274
+ x: centerX,
20275
+ y: centerY
20276
+ });
20210
20277
  }
20211
20278
  }
20212
20279
  };
@@ -20259,7 +20326,8 @@ const annotationDraggerPlugin = {
20259
20326
  }
20260
20327
  },
20261
20328
  afterUpdate(chart$4) {
20262
- const { canvas: canvas$3, scales: scales$1, hoveredAnnotationId } = chart$4 ?? {};
20329
+ const { canvas: canvas$3, scales: scales$1, hoveredAnnotationId, options } = chart$4 ?? {};
20330
+ const persistenceId = options?.persistenceId;
20263
20331
  const pluginOptions = chart$4?.options?.plugins?.annotationDraggerPlugin || { enabled: false };
20264
20332
  if (!canvas$3 || !scales$1 || !pluginOptions || !pluginOptions?.enabled) return;
20265
20333
  const typedScales = {
@@ -20302,7 +20370,7 @@ const annotationDraggerPlugin = {
20302
20370
  });
20303
20371
  canvas$3.addEventListener(MouseEvents.MOUSEUP, (event) => {
20304
20372
  const canvasEvent = event.currentTarget;
20305
- handleAnnotationMouseUp(isDragging$1, activeAnnotation, chart$4, canvasEvent, setDraggingState);
20373
+ handleAnnotationMouseUp(isDragging$1, activeAnnotation, chart$4, canvasEvent, setDraggingState, persistenceId);
20306
20374
  });
20307
20375
  canvas$3.dataset.annotationDraggerInitialized = "true";
20308
20376
  }
@@ -20871,7 +20939,8 @@ var LineChart = (props) => {
20871
20939
  state,
20872
20940
  options,
20873
20941
  dispatch,
20874
- generatedDatasets
20942
+ generatedDatasets,
20943
+ persistenceId
20875
20944
  });
20876
20945
  const usePlugins = useChartPlugins({
20877
20946
  options,