@foodpilot/foods 2.18.1 → 2.18.2

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,6 +1,7 @@
1
- import{jsxs as t,jsx as i}from"react/jsx-runtime";import{useMemo as e,useState as o,useRef as n,useCallback as a,useEffect as r}from"react";import{useTheme as s,Box as l}from"@mui/material";import{ResponsiveContainer as m,ScatterChart as h,CartesianGrid as c,XAxis as d,YAxis as p}from"recharts";import{useScatterPlotInteraction as u}from"./useScatterPlotInteraction.js";import{ScatterPlotHoverOverlay as v}from"./ScatterPlotHoverOverlay.js";import{ScatterPlotTooltip as x}from"./ScatterPlotTooltip.js";import{ScatterPlotPoints as f}from"./ScatterPlotPoints.js";import{processScatterPlotData as g,createGroupedData as y,ANIMATION_DURATION as M,CHART_MARGIN_BOTTOM as w,CHART_MARGIN_LEFT as D,CHART_MARGIN_RIGHT as P,CHART_MARGIN_TOP as k}from"./utils.js";import L from"i18next";const F=F=>{const T=s(),{values:E,xMin:S,xMax:b,yMin:z,yMax:I,valueFormatterFn:j=T.numbers.valueFormatterFn,precision:O,language:C,unit:W,xUnit:R,yUnit:U,textOptions:A,showSeriesInTooltip:H=!0,tooltipOptions:K}=F,{hoveredIndex:$,hover:B,pinnedIndex:X,pinnedHover:Y,isPinned:q,handlePointEnter:G,handlePointClick:J,handlePointLeave:N,handleTooltipEnter:Q,handleTooltipLeave:V,handleChartMouseLeave:Z,handleDismissTooltip:_}=u(),{allPoints:tt,shouldShowLabels:it}=e(()=>g(E,T.custom.dataviz.colorsWithExtra),[E,T.custom.dataviz.colorsWithExtra]),et=e(()=>y(E,T.custom.dataviz.colorsWithExtra,tt),[E,T.custom.dataviz.colorsWithExtra,tt]),{xDomain:ot,yDomain:nt}=e(()=>{const t=E.flatMap(t=>t.data);if(0===t.length)return{xDomain:void 0!==S&&void 0!==b?[S,b]:[0,100],yDomain:void 0!==z&&void 0!==I?[z,I]:[0,100]};const i=t.map(t=>t.x),e=t.map(t=>t.y),o=Math.min(...i),n=Math.max(...i),a=Math.min(...e),r=Math.max(...e);return{xDomain:void 0!==S&&void 0!==b?[S,b]:[Math.max(0,o),n],yDomain:void 0!==z&&void 0!==I?[z,I]:[Math.max(0,a),r]}},[E,S,b,z,I]),[at,rt]=o(!0),st=n(null),lt=n(null),[mt,ht]=o({height:0,width:0}),ct=C??L.language,dt="number"==typeof O?Math.min(100,Math.max(0,O)):void 0,pt=a(t=>j(t,dt),[j,dt]);return r(()=>{const t=setTimeout(()=>{rt(!1)},M);return()=>clearTimeout(t)},[]),r(()=>{const t=st.current;if(!t)return;const i=(t,i)=>{ht(e=>e.width===t&&e.height===i?e:{width:t,height:i})},e=t.getBoundingClientRect();i(e.width,e.height);const o=new ResizeObserver(([t])=>{t&&i(t.contentRect.width,t.contentRect.height)});return o.observe(t),()=>o.disconnect()},[]),/* @__PURE__ */t(l,{onClick:t=>{const i=t.target;if(i.classList.contains("recharts-dot"))return;const e=lt.current;e&&e.contains(i)||_()},onMouseLeave:Z,ref:st,sx:{position:"relative",width:"100%",height:"100%"},children:[mt.width>0&&mt.height>0&&/* @__PURE__ */i(m,{width:"100%",height:"100%",initialDimension:mt,children:/* @__PURE__ */t(h,{margin:{top:k,right:P,left:D,bottom:w},children:[
2
- /* @__PURE__ */i(c,{strokeDasharray:"4 4",stroke:T.palette.divider}),
3
- /* @__PURE__ */i(d,{type:"number",dataKey:"x",domain:ot,tickLine:!1,axisLine:{stroke:T.palette.divider},tick:{fontFamily:"Montserrat",fontSize:14,style:{transform:`translateY(${T.spacing(2)})`}},tickFormatter:pt,allowDecimals:!0}),
1
+ import{jsxs as t,jsx as i}from"react/jsx-runtime";import{useMemo as o,useState as e,useRef as n,useCallback as r,useEffect as a}from"react";import{useTheme as s,Box as l}from"@mui/material";import{ResponsiveContainer as m,ScatterChart as c,CartesianGrid as h,XAxis as d,YAxis as p}from"recharts";import{useScatterPlotInteraction as u}from"./useScatterPlotInteraction.js";import{ScatterPlotHoverOverlay as v}from"./ScatterPlotHoverOverlay.js";import{ScatterPlotTooltip as x}from"./ScatterPlotTooltip.js";import{ScatterPlotPoints as f}from"./ScatterPlotPoints.js";import{processScatterPlotData as g,createGroupedData as y,ANIMATION_DURATION as M,CHART_MARGIN_BOTTOM as w,CHART_MARGIN_LEFT as P,CHART_MARGIN_RIGHT as D,CHART_MARGIN_TOP as k}from"./utils.js";import L from"i18next";const F=F=>{const T=s(),{values:S,xMin:E,xMax:b,yMin:z,yMax:C,valueFormatterFn:I=T.numbers.valueFormatterFn,precision:j,language:O,unit:W,xUnit:R,yUnit:U,textOptions:A,showSeriesInTooltip:H=!0,tooltipOptions:K}=F,{hoveredIndex:$,hover:B,pinnedIndex:X,pinnedHover:Y,isPinned:q,handlePointEnter:G,handlePointClick:J,handlePointLeave:N,handleTooltipEnter:Q,handleTooltipLeave:V,handleChartMouseLeave:Z,handleDismissTooltip:_}=u(),{allPoints:tt,shouldShowLabels:it}=o(()=>g(S,T.custom.dataviz.colorsWithExtra),[S,T.custom.dataviz.colorsWithExtra]),ot=o(()=>y(S,T.custom.dataviz.colorsWithExtra,tt),[S,T.custom.dataviz.colorsWithExtra,tt]),{xDomain:et,yDomain:nt}=o(()=>{const t=S.flatMap(t=>t.data);if(0===t.length)return{xDomain:void 0!==E&&void 0!==b?[E,b]:[0,100],yDomain:void 0!==z&&void 0!==C?[z,C]:[0,100]};const i=t.map(t=>t.x),o=t.map(t=>t.y),e=Math.min(...i),n=Math.max(...i),r=Math.min(...o),a=Math.max(...o);return{xDomain:void 0!==E&&void 0!==b?[E,b]:[Math.max(0,e),n],yDomain:void 0!==z&&void 0!==C?[z,C]:[Math.max(0,r),a]}},[S,E,b,z,C]),[rt,at]=e(!0),st=n(null),lt=n(null),[mt,ct]=e({height:0,width:0}),ht=O??L.language,dt="number"==typeof j?Math.min(100,Math.max(0,j)):void 0,pt=r(t=>I(t,dt),[I,dt]);a(()=>{const t=setTimeout(()=>{at(!1)},M);return()=>clearTimeout(t)},[]),a(()=>{const t=st.current;if(!t)return;const i=(t,i)=>{ct(o=>o.width===t&&o.height===i?o:{width:t,height:i})},o=t.getBoundingClientRect();i(o.width,o.height);const e=new ResizeObserver(([t])=>{t&&i(t.contentRect.width,t.contentRect.height)});return e.observe(t),()=>e.disconnect()},[]);const ut=!!(q&&null!==X&&Y&&tt[X]),vt=null!==$?tt[$]:void 0;/* @__PURE__ */
2
+ return t(l,{onClick:t=>{const i=t.target;if(i.classList.contains("recharts-dot"))return;const o=lt.current;o&&o.contains(i)||_()},onMouseLeave:Z,ref:st,sx:{position:"relative",width:"100%",height:"100%"},children:[mt.width>0&&mt.height>0&&/* @__PURE__ */i(m,{width:"100%",height:"100%",initialDimension:mt,children:/* @__PURE__ */t(c,{margin:{top:k,right:D,left:P,bottom:w},children:[
3
+ /* @__PURE__ */i(h,{strokeDasharray:"4 4",stroke:T.palette.divider}),
4
+ /* @__PURE__ */i(d,{type:"number",dataKey:"x",domain:et,tickLine:!1,axisLine:{stroke:T.palette.divider},tick:{fontFamily:"Montserrat",fontSize:14,style:{transform:`translateY(${T.spacing(2)})`}},tickFormatter:pt,allowDecimals:!0}),
4
5
  /* @__PURE__ */i(p,{type:"number",dataKey:"y",domain:nt,tickLine:!1,axisLine:{stroke:T.palette.divider},tick:{fontFamily:"Montserrat",fontSize:14,style:{transform:`translateX(-${T.spacing(2)})`,pointerEvents:"none"}},tickFormatter:pt,allowDecimals:!0,style:{pointerEvents:"none"}}),
5
- /* @__PURE__ */i(v,{hover:B,valueFormatterFn:j,precision:dt,language:ct,xDomain:ot,yDomain:nt}),
6
- /* @__PURE__ */i(f,{groupedData:et,allPoints:tt,hoveredIndex:$,pinnedIndex:X,isTooltipActive:!!(q&&null!==X&&Y&&tt[X]),isAnimationActive:at,shouldShowLabels:it,containerWidth:mt.width,onPointEnter:G,onPointLeave:N,onPointClick:(t,i,e,o)=>{o.stopPropagation(),J(t,i,e)}})]})}),!!(q&&null!==X&&Y&&tt[X])&&/* @__PURE__ */i(x,{ref:lt,point:tt[X],coordinate:Y,series:E,valueFormatterFn:j,precision:O,unit:W,xUnit:R,yUnit:U,textOptions:A,showSeriesInTooltip:H,handleDismissTooltip:_,tooltipOptions:K,onTooltipEnter:Q,onTooltipLeave:V})]})};export{F as ScatterPlotCore};
6
+ /* @__PURE__ */i(v,{hover:B,valueFormatterFn:I,precision:dt,language:ht,xDomain:et,yDomain:nt,pointColor:vt?.seriesColor,isPointSelected:ut&&$===X}),
7
+ /* @__PURE__ */i(f,{groupedData:ot,allPoints:tt,hoveredIndex:$,pinnedIndex:X,isTooltipActive:ut,isAnimationActive:rt,shouldShowLabels:it,containerWidth:mt.width,onPointEnter:G,onPointLeave:N,onPointClick:(t,i,o,e)=>{e.stopPropagation(),J(t,i,o)}})]})}),!!(q&&null!==X&&Y&&tt[X])&&/* @__PURE__ */i(x,{ref:lt,point:tt[X],coordinate:Y,series:S,valueFormatterFn:I,precision:j,unit:W,xUnit:R,yUnit:U,textOptions:A,showSeriesInTooltip:H,handleDismissTooltip:_,tooltipOptions:K,onTooltipEnter:Q,onTooltipLeave:V})]})};export{F as ScatterPlotCore};
@@ -6,6 +6,8 @@ type OverlayProps = {
6
6
  language?: string;
7
7
  xDomain: number[];
8
8
  yDomain: number[];
9
+ pointColor?: string;
10
+ isPointSelected?: boolean;
9
11
  };
10
12
  export declare const ScatterPlotHoverOverlay: (props: OverlayProps) => import("react/jsx-runtime").JSX.Element | null;
11
13
  export {};
@@ -1,12 +1,13 @@
1
- import{jsxs as t,Fragment as e,jsx as r}from"react/jsx-runtime";import{useTheme as i}from"@mui/material";import{ReferenceLine as n}from"recharts";const a=a=>{const o=i(),{hover:l,valueFormatterFn:x=o.numbers.valueFormatterFn,precision:d,xDomain:m,yDomain:s}=a;if(!l)return null;const h=t=>parseFloat(o.spacing(t)),y=h(1),c=h(2.5),p=h(3.75),u=h(0),f=o.shape.borderRadius??4,g=o.custom.grey[2800],v=o.palette.common.white,k=t=>x(t,d),w=t=>Math.max(p,Math.round(12*t.length*.6)+2*y);/* @__PURE__ */
2
- return t(e,{children:[
3
- /* @__PURE__ */r(n,{segment:[{x:m[0],y:l.dataY},{x:l.dataX,y:l.dataY}],stroke:o.palette.text.primary,label:e=>{const{viewBox:i}=e;if(!i||!l)/* @__PURE__ */return r("g",{});const n=k(l.dataY),a=w(n),x=i.x-u-a-15,d=i.y-c/2,m=x+a/2,s=d+c/2+1;/* @__PURE__ */
4
- return t("g",{style:{pointerEvents:"none"},children:[
5
- /* @__PURE__ */r("line",{x1:i.x,y1:i.y,x2:i.x-15,y2:i.y,stroke:o.palette.text.primary,strokeWidth:1}),
6
- /* @__PURE__ */r("rect",{x:x,y:d,width:a,height:c,fill:g,rx:f}),
7
- /* @__PURE__ */r("text",{x:m,y:s,fill:v,fontSize:12,fontWeight:600,textAnchor:"middle",dominantBaseline:"middle",children:n})]})}}),
8
- /* @__PURE__ */r(n,{segment:[{x:l.dataX,y:s[0]},{x:l.dataX,y:l.dataY}],stroke:o.palette.text.primary,label:e=>{const{viewBox:i}=e;if(!i||!l)/* @__PURE__ */return r("g",{});const n=k(l.dataX),a=w(n),x=i.x-a/2,d=i.y+i.height+20,m=x+a/2,s=d+c/2+1;/* @__PURE__ */
9
- return t("g",{style:{pointerEvents:"none"},children:[
10
- /* @__PURE__ */r("line",{x1:x+a/2,y1:d+c,x2:x+a/2,y2:d-c,stroke:o.palette.text.primary,strokeWidth:1}),
11
- /* @__PURE__ */r("rect",{x:x,y:d,width:a,height:c,fill:g,rx:f}),
12
- /* @__PURE__ */r("text",{x:m,y:s,fill:v,fontSize:12,fontWeight:600,textAnchor:"middle",dominantBaseline:"middle",children:n})]})}})]})};export{a as ScatterPlotHoverOverlay};
1
+ import{jsxs as e,Fragment as t,jsx as r}from"react/jsx-runtime";import{useTheme as i}from"@mui/material";import{usePlotArea as n,ReferenceLine as o,DefaultZIndexes as a,ZIndexLayer as l,Dot as x}from"recharts";import{POINT_RADIUS as d}from"./utils.js";const s=a.cursorLine,p=a.label+1,m=m=>{const h=i(),c=n(),{hover:y,valueFormatterFn:f=h.numbers.valueFormatterFn,precision:u,xDomain:g,yDomain:v,pointColor:k,isPointSelected:X=!1}=m;if(!y||!c)return null;const Y=e=>parseFloat(h.spacing(e)),z=Y(1),E=Y(2.5),F=Y(3.75),W=Y(0),b=h.shape.borderRadius??4,w=h.custom.grey[2800],I=h.palette.common.white,D=e=>f(e,u),S=e=>Math.max(F,Math.round(12*e.length*.6)+2*z),j=D(y.dataY),A=S(j),B=c.x-W-A-15,M=y.pixelY-E/2,C=B+A/2,L=M+E/2+1,P=D(y.dataX),R=S(P),q=y.pixelX-R/2,G=c.y+c.height+20,H=q+R/2,J=G+E/2+1;/* @__PURE__ */
2
+ return e(t,{children:[
3
+ /* @__PURE__ */r(o,{segment:[{x:g[0],y:y.dataY},{x:y.dataX,y:y.dataY}],stroke:h.palette.text.primary,style:{pointerEvents:"none"},zIndex:s}),
4
+ /* @__PURE__ */r(o,{segment:[{x:y.dataX,y:v[0]},{x:y.dataX,y:y.dataY}],stroke:h.palette.text.primary,style:{pointerEvents:"none"},zIndex:s}),k&&/* @__PURE__ */r(l,{zIndex:a.activeDot,children:/* @__PURE__ */r(x,{cx:y.pixelX,cy:y.pixelY,r:d,fill:k,"data-scatter-hovered-point":"true",style:{pointerEvents:"none",...X?{filter:"drop-shadow(1px 1px 2px rgba(0, 0, 0, 0.5))",stroke:"#fff",strokeWidth:2}:{filter:"none"}}})}),
5
+ /* @__PURE__ */e(l,{zIndex:p,children:[
6
+ /* @__PURE__ */e("g",{"data-scatter-hover-marker":"y",style:{pointerEvents:"none"},children:[
7
+ /* @__PURE__ */r("line",{x1:c.x,y1:y.pixelY,x2:c.x-15,y2:y.pixelY,stroke:h.palette.text.primary,strokeWidth:1}),
8
+ /* @__PURE__ */r("rect",{x:B,y:M,width:A,height:E,fill:w,rx:b}),
9
+ /* @__PURE__ */r("text",{x:C,y:L,fill:I,fontSize:12,fontWeight:600,textAnchor:"middle",dominantBaseline:"middle",children:j})]}),
10
+ /* @__PURE__ */e("g",{"data-scatter-hover-marker":"x",style:{pointerEvents:"none"},children:[
11
+ /* @__PURE__ */r("line",{x1:y.pixelX,y1:G+E,x2:y.pixelX,y2:G-E,stroke:h.palette.text.primary,strokeWidth:1}),
12
+ /* @__PURE__ */r("rect",{x:q,y:G,width:R,height:E,fill:w,rx:b}),
13
+ /* @__PURE__ */r("text",{x:H,y:J,fill:I,fontSize:12,fontWeight:600,textAnchor:"middle",dominantBaseline:"middle",children:P})]})]})]})};export{m as ScatterPlotHoverOverlay};
@@ -1,4 +1,4 @@
1
- import{jsx as t,Fragment as e}from"react/jsx-runtime";import{Scatter as n,LabelList as o,DefaultZIndexes as i,Dot as r}from"recharts";import{useTheme as l}from"@mui/material";import{ANIMATION_DURATION as a,DISABLE_ANIMATIONS_THRESHOLD_POINTS as c,POINT_RADIUS as s,calculateLabelPosition as p,LABEL_FONT_SIZE as d}from"./utils.js";const f=f=>{const{groupedData:m,allPoints:u,hoveredIndex:y,pinnedIndex:x,isTooltipActive:h,isAnimationActive:b,shouldShowLabels:v,containerWidth:g,onPointEnter:I,onPointLeave:A,onPointClick:k}=f,P=l(),S=e=>{const{x:n,y:o,cx:i,cy:r,value:l,payload:a}=e,c=a?.label,s=c||("number"==typeof l?String(l):(l??"").toString());if(!s)return null;const f="number"==typeof i?i:"number"==typeof n?n:void 0,m="number"==typeof r?r:"number"==typeof o?o:void 0;if(void 0===f||void 0===m)return null;const{x:u,y:y,anchor:x}=p(f,m,s,g);/* @__PURE__ */
2
- return t("g",{style:{pointerEvents:"none"},children:/* @__PURE__ */t("text",{x:u,y:y+1,fill:P.palette.text.primary,fontSize:d,fontWeight:600,textAnchor:x,dominantBaseline:"middle",children:s})})};/* @__PURE__ */
3
- return t(e,{children:m.map(e=>/* @__PURE__ */t(n,{isAnimationActive:!1,fill:e.color,data:e.points.map(t=>{const n=null!==y&&t.pointIndex!==y;return{...t,label:t.label,fill:e.color,opacity:n?.4:1,r:s}}),shape:e=>{const{cx:n,cy:o,r:i,fill:l}=e,{pointIndex:s,payload:p}=e,d=p?.pointIndex??s,f=null!==y&&d!==y,m={cursor:"pointer",...void 0!==d&&d===x&&h?{filter:"drop-shadow(1px 1px 2px rgba(0, 0, 0, 0.5))",stroke:"#fff",strokeWidth:2}:{filter:"none"}};/* @__PURE__ */
4
- return t(r,{cx:n,cy:o,r:i,fill:l,"data-scatter-point":"true",style:c<=u.length?m:{...m,transform:`scale(${b?0:1})`,transformOrigin:"50% 50%",opacity:f?.4:1,transition:`all ${a}ms cubic-bezier(0.86, 0, 0.07, 1)`},onMouseEnter:()=>{if("number"==typeof d){const t=u[d];t&&I(t,d,{x:n,y:o})}},onMouseLeave:()=>{A()},onClick:(t,e)=>{if("number"==typeof d){const t=u[d];t&&k(t,d,{x:n,y:o},e)}}})},children:v&&/* @__PURE__ */t(o,{dataKey:"label",content:S,zIndex:i.line})},e.seriesId))})};export{f as ScatterPlotPoints};
1
+ import{jsx as t,Fragment as e}from"react/jsx-runtime";import{Scatter as n,LabelList as o,Dot as i}from"recharts";import{useTheme as r}from"@mui/material";import{ANIMATION_DURATION as l,DISABLE_ANIMATIONS_THRESHOLD_POINTS as a,POINT_RADIUS as c,calculateLabelPosition as s,LABEL_FONT_SIZE as p}from"./utils.js";const d=d=>{const{groupedData:f,allPoints:m,hoveredIndex:u,pinnedIndex:y,isTooltipActive:x,isAnimationActive:h,shouldShowLabels:b,containerWidth:v,onPointEnter:g,onPointLeave:A,onPointClick:I}=d,k=r(),P=e=>{const{x:n,y:o,cx:i,cy:r,value:l,payload:a}=e,c=a?.label,d=c||("number"==typeof l?String(l):(l??"").toString());if(!d)return null;const f="number"==typeof i?i:"number"==typeof n?n:void 0,m="number"==typeof r?r:"number"==typeof o?o:void 0;if(void 0===f||void 0===m)return null;const{x:u,y:y,anchor:x}=s(f,m,d,v);/* @__PURE__ */
2
+ return t("g",{style:{pointerEvents:"none"},children:/* @__PURE__ */t("text",{x:u,y:y+1,fill:k.palette.text.primary,fontSize:p,fontWeight:600,textAnchor:x,dominantBaseline:"middle",children:d})})};/* @__PURE__ */
3
+ return t(e,{children:f.map(e=>/* @__PURE__ */t(n,{isAnimationActive:!1,fill:e.color,data:e.points.map(t=>{const n=null!==u&&t.pointIndex!==u;return{...t,label:t.label,fill:e.color,opacity:n?.4:1,r:c}}),shape:e=>{const{cx:n,cy:o,r:r,fill:c}=e,{pointIndex:s,payload:p}=e,d=p?.pointIndex??s,f=null!==u&&d!==u,b={cursor:"pointer",...void 0!==d&&d===y&&x?{filter:"drop-shadow(1px 1px 2px rgba(0, 0, 0, 0.5))",stroke:"#fff",strokeWidth:2}:{filter:"none"}};/* @__PURE__ */
4
+ return t(i,{cx:n,cy:o,r:r,fill:c,"data-scatter-point":"true",style:a<=m.length?b:{...b,transform:`scale(${h?0:1})`,transformOrigin:"50% 50%",opacity:f?.4:1,transition:`all ${l}ms cubic-bezier(0.86, 0, 0.07, 1)`},onMouseEnter:()=>{if("number"==typeof d){const t=m[d];t&&g(t,d,{x:n,y:o})}},onMouseLeave:()=>{A()},onClick:(t,e)=>{if("number"==typeof d){const t=m[d];t&&I(t,d,{x:n,y:o},e)}}})},children:b&&/* @__PURE__ */t(o,{dataKey:"label",content:P})},e.seriesId))})};export{d as ScatterPlotPoints};
@@ -1,13 +1,13 @@
1
- import{jsxs as t,jsx as n}from"react/jsx-runtime";import{useTheme as i,Stack as e,Typography as o,Box as r,Link as a,Button as s}from"@mui/material";import{calculateTooltipPosition as c,getTooltipContainerStyles as l}from"../shared/tooltipPositioning.js";import{forwardRef as p}from"react";import{FoodsIcon as d}from"../../Icons/FoodsIcon.js";import{FoodsTooltip as g}from"../../Tooltip/FoodsTooltip.js";const h={x:0,y:-5},u=p((p,u)=>{const m=i(),{point:x,coordinate:b,valueFormatterFn:f=m.numbers.valueFormatterFn,precision:y,unit:v,xUnit:w,yUnit:C,textOptions:I,showSeriesInTooltip:k=!0,tooltipOptions:j,onTooltipEnter:z,onTooltipLeave:H,handleDismissTooltip:F}=p,T=x.seriesName,E=C??v,P=w??v,$=I?.for??"for",L=()=>/* @__PURE__ */n(r,{role:"button",onClick:()=>F?.(),sx:{cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center",padding:m.spacing(.25),height:m.spacing(2.75),width:m.spacing(2.75),transform:`translate(${m.spacing(1.25)}, -${m.spacing(1.25)}) rotate(45deg)`,borderRadius:"50%","&:hover":{color:m.palette.common.white,backgroundColor:"text.secondary",boxShadow:"0px 0px 4px rgba(0, 0, 0, 0.1)"}},children:/* @__PURE__ */n(d,{icon:"plus",size:2})}),M=/* @__PURE__ */t(e,{direction:"column",spacing:m.spacing(.5),pb:m.spacing(.25),onClick:t=>t.stopPropagation(),onMouseLeave:()=>H?.(),sx:{pointerEvents:"auto"},children:[
2
- /* @__PURE__ */t(e,{direction:"row",alignItems:"center",justifyContent:"space-between",spacing:m.spacing(1),children:[
3
- /* @__PURE__ */n(o,{variant:"h4",lineHeight:m.spacing(2),children:x.label}),
4
- /* @__PURE__ */n(L,{})]}),
5
- /* @__PURE__ */t(e,{pt:m.spacing(1),direction:"row",spacing:m.spacing(.5),alignItems:"center",flexWrap:"wrap",children:[
6
- /* @__PURE__ */n(o,{variant:"number-small",lineHeight:m.spacing(2),color:"text.primary",children:f(x.y,y)}),
7
- /* @__PURE__ */n(o,{variant:"body2",lineHeight:m.spacing(2),color:"text.secondary",children:E?` ${E}`:""}),
8
- /* @__PURE__ */n(o,{variant:"body2",lineHeight:m.spacing(2),color:"text.primary",children:$}),
9
- /* @__PURE__ */n(o,{variant:"number-small",lineHeight:m.spacing(2),color:"text.primary",children:f(x.x,y)}),
10
- /* @__PURE__ */n(o,{variant:"body2",lineHeight:m.spacing(2),color:"text.secondary",children:P?` ${P}`:""})]}),x.additionalContent&&/* @__PURE__ */n(r,{sx:{pt:m.spacing(2)},children:x.additionalContent}),T&&k&&/* @__PURE__ */n(e,{direction:"row",alignItems:"flex-end",justifyContent:"flex-end",spacing:m.spacing(1),pt:m.spacing(2),children:/* @__PURE__ */t(e,{direction:"row",alignItems:"center",spacing:m.spacing(1),children:[
11
- /* @__PURE__ */n(r,{sx:{width:m.spacing(1.5),height:m.spacing(1.5),borderRadius:"50%",backgroundColor:x.seriesColor}}),
12
- /* @__PURE__ */n(o,{variant:"body2",lineHeight:m.spacing(2),color:"text.secondary",fontWeight:500,children:T})]})}),j?.button?j.button.href?/* @__PURE__ */n(a,{href:j.button.href,target:"_blank",rel:"noopener noreferrer",children:/* @__PURE__ */n(s,{sx:{color:m.palette.text.primary,mt:m.spacing(2)},variant:j?.button?.variant,size:j?.button?.size,startIcon:j?.button?.startIcon,onClick:t=>{t.stopPropagation(),j?.button?.onClick?.()},children:j.button.text})}):/* @__PURE__ */n(s,{sx:{mt:m.spacing(2)},variant:j?.button?.variant,size:j?.button?.size,startIcon:j?.button?.startIcon,onClick:t=>{t.stopPropagation(),j?.button?.onClick?.()},children:j?.button?.text}):null]}),O=c({coordinate:{x:b.xValue,y:b.yValue},placement:"top",offset:h});/* @__PURE__ */
13
- return n(r,{ref:u,style:{position:"absolute",...O,zIndex:m.zIndex.tooltip,pointerEvents:"auto"},onMouseEnter:z,onMouseLeave:H,children:/* @__PURE__ */n(g,{width:"inherit",title:M,placement:"top",arrow:!0,open:!0,sx:{...l()},children:/* @__PURE__ */n("div",{style:{width:1,height:1,visibility:"hidden",pointerEvents:"none"}})})})});export{u as ScatterPlotTooltip};
1
+ import{jsxs as t,jsx as n}from"react/jsx-runtime";import{useTheme as i,Stack as e,Typography as o,Box as r,Link as a,Button as s}from"@mui/material";import{calculateTooltipPosition as c,getTooltipContainerStyles as l}from"../shared/tooltipPositioning.js";import{forwardRef as p}from"react";import{FoodsIcon as d}from"../../Icons/FoodsIcon.js";import{FoodsTooltip as g}from"../../Tooltip/FoodsTooltip.js";const h={x:0,y:-5},m=p((p,m)=>{const u=i(),{point:x,coordinate:b,valueFormatterFn:f=u.numbers.valueFormatterFn,precision:y,unit:v,xUnit:w,yUnit:C,textOptions:I,showSeriesInTooltip:k=!0,tooltipOptions:j,onTooltipEnter:z,onTooltipLeave:F,handleDismissTooltip:H}=p,T=x.seriesName,E=C??v,P=w??v,L=I?.for??"for",M=()=>/* @__PURE__ */n(r,{role:"button",onClick:()=>H?.(),sx:{cursor:"pointer",display:"flex",alignItems:"center",justifyContent:"center",padding:u.spacing(.25),height:u.spacing(2.75),width:u.spacing(2.75),marginTop:-.5,marginRight:-1,borderRadius:"50%","&:hover":{color:u.palette.common.white,backgroundColor:"text.secondary",boxShadow:"0px 0px 4px rgba(0, 0, 0, 0.1)"}},children:/* @__PURE__ */n(r,{sx:{display:"flex",transform:"rotate(45deg)"},children:/* @__PURE__ */n(d,{icon:"plus",size:2})})}),R=/* @__PURE__ */t(e,{direction:"column",spacing:u.spacing(.5),pb:u.spacing(.25),onClick:t=>t.stopPropagation(),onMouseLeave:()=>F?.(),sx:{pointerEvents:"auto"},children:[
2
+ /* @__PURE__ */t(e,{direction:"row",alignItems:"center",justifyContent:"space-between",spacing:u.spacing(1),useFlexGap:!0,children:[
3
+ /* @__PURE__ */n(o,{variant:"h4",lineHeight:u.spacing(2),children:x.label}),
4
+ /* @__PURE__ */n(M,{})]}),
5
+ /* @__PURE__ */t(e,{pt:u.spacing(1),direction:"row",spacing:u.spacing(.5),alignItems:"center",flexWrap:"wrap",children:[
6
+ /* @__PURE__ */n(o,{variant:"number-small",lineHeight:u.spacing(2),color:"text.primary",children:f(x.y,y)}),
7
+ /* @__PURE__ */n(o,{variant:"body2",lineHeight:u.spacing(2),color:"text.secondary",children:E?` ${E}`:""}),
8
+ /* @__PURE__ */n(o,{variant:"body2",lineHeight:u.spacing(2),color:"text.primary",children:L}),
9
+ /* @__PURE__ */n(o,{variant:"number-small",lineHeight:u.spacing(2),color:"text.primary",children:f(x.x,y)}),
10
+ /* @__PURE__ */n(o,{variant:"body2",lineHeight:u.spacing(2),color:"text.secondary",children:P?` ${P}`:""})]}),x.additionalContent&&/* @__PURE__ */n(r,{sx:{pt:u.spacing(2)},children:x.additionalContent}),T&&k&&/* @__PURE__ */n(e,{direction:"row",alignItems:"flex-end",justifyContent:"flex-end",spacing:u.spacing(1),pt:u.spacing(2),children:/* @__PURE__ */t(e,{direction:"row",alignItems:"center",spacing:u.spacing(1),children:[
11
+ /* @__PURE__ */n(r,{sx:{width:u.spacing(1.5),height:u.spacing(1.5),borderRadius:"50%",backgroundColor:x.seriesColor}}),
12
+ /* @__PURE__ */n(o,{variant:"body2",lineHeight:u.spacing(2),color:"text.secondary",fontWeight:500,children:T})]})}),j?.button?j.button.href?/* @__PURE__ */n(a,{href:j.button.href,target:"_blank",rel:"noopener noreferrer",children:/* @__PURE__ */n(s,{sx:{color:u.palette.text.primary,mt:u.spacing(2)},variant:j?.button?.variant,size:j?.button?.size,startIcon:j?.button?.startIcon,onClick:t=>{t.stopPropagation(),j?.button?.onClick?.()},children:j.button.text})}):/* @__PURE__ */n(s,{sx:{mt:u.spacing(2)},variant:j?.button?.variant,size:j?.button?.size,startIcon:j?.button?.startIcon,onClick:t=>{t.stopPropagation(),j?.button?.onClick?.()},children:j?.button?.text}):null]}),O=c({coordinate:{x:b.xValue,y:b.yValue},placement:"top",offset:h});/* @__PURE__ */
13
+ return n(r,{ref:m,style:{position:"absolute",...O,zIndex:u.zIndex.tooltip,pointerEvents:"auto"},onMouseEnter:z,onMouseLeave:F,children:/* @__PURE__ */n(g,{width:"inherit",title:R,placement:"top",arrow:!0,open:!0,sx:{...l()},children:/* @__PURE__ */n("div",{style:{width:1,height:1,visibility:"hidden",pointerEvents:"none"}})})})});export{m as ScatterPlotTooltip};
@@ -1 +1 @@
1
- import{useState as l,useRef as e,useEffect as n,useCallback as a}from"react";const t=()=>{const[t,u]=l(null),[r,x]=l(null),[i,o]=l(null),[d,c]=l(null),[p,y]=l(!1),h=e(null),s=e(!1);n(()=>{s.current=p},[p]);const V=a(()=>{h.current&&(clearTimeout(h.current),h.current=null)},[]),X=a((l,e,n)=>{V(),y(!1),u(e);const a={xValue:n?.x??l.x,yValue:n?.y??l.y,dataX:l.x,dataY:l.y,pixelX:n?.x??l.x,pixelY:n?.y??l.y};x(l=>l&&l.xValue===a.xValue&&l.yValue===a.yValue&&l.dataX===a.dataX&&l.dataY===a.dataY&&l.pixelX===a.pixelX&&l.pixelY===a.pixelY?l:a)},[V]),Y=a((l,e,n)=>{V(),o(e),c({xValue:n?.x??l.x,yValue:n?.y??l.y,dataX:l.x,dataY:l.y,pixelX:n?.x??l.x,pixelY:n?.y??l.y}),y(!0)},[V]),v=a(()=>{V(),s.current||(u(null),x(null))},[V]),m=a(()=>{V()},[V]),T=a(()=>{V(),s.current||(h.current=setTimeout(()=>{u(null),x(null)},1e3))},[V]),P=a(()=>{s.current||(V(),u(null),x(null))},[V]),L=a(()=>{V(),o(null),c(null),x(null),y(!1)},[V]);return{hoveredIndex:t,hover:r,pinnedIndex:i,pinnedHover:d,isPinned:p,handlePointEnter:X,handlePointClick:Y,handlePointLeave:v,handleTooltipEnter:m,handleTooltipLeave:T,handleChartMouseLeave:P,handleDismissTooltip:L}};export{t as useScatterPlotInteraction};
1
+ import{useState as l,useRef as e,useEffect as n,useCallback as a}from"react";const t=()=>{const[t,u]=l(null),[r,x]=l(null),[i,o]=l(null),[d,c]=l(null),[p,y]=l(!1),h=e(null),s=e(!1);n(()=>{s.current=p},[p]);const V=a(()=>{h.current&&(clearTimeout(h.current),h.current=null)},[]),X=a((l,e,n)=>{V(),u(e);const a={xValue:n?.x??l.x,yValue:n?.y??l.y,dataX:l.x,dataY:l.y,pixelX:n?.x??l.x,pixelY:n?.y??l.y};x(l=>l&&l.xValue===a.xValue&&l.yValue===a.yValue&&l.dataX===a.dataX&&l.dataY===a.dataY&&l.pixelX===a.pixelX&&l.pixelY===a.pixelY?l:a)},[V]),Y=a((l,e,n)=>{V(),o(e),c({xValue:n?.x??l.x,yValue:n?.y??l.y,dataX:l.x,dataY:l.y,pixelX:n?.x??l.x,pixelY:n?.y??l.y}),y(!0)},[V]),v=a(()=>{V(),s.current||(u(null),x(null))},[V]),m=a(()=>{V()},[V]),T=a(()=>{V(),s.current||(h.current=setTimeout(()=>{u(null),x(null)},1e3))},[V]),P=a(()=>{s.current||(V(),u(null),x(null))},[V]),L=a(()=>{V(),o(null),c(null),x(null),y(!1)},[V]);return{hoveredIndex:t,hover:r,pinnedIndex:i,pinnedHover:d,isPinned:p,handlePointEnter:X,handlePointClick:Y,handlePointLeave:v,handleTooltipEnter:m,handleTooltipLeave:T,handleChartMouseLeave:P,handleDismissTooltip:L}};export{t as useScatterPlotInteraction};
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@foodpilot/foods",
3
3
  "private": false,
4
- "version": "2.18.1",
4
+ "version": "2.18.2",
5
5
  "type": "module",
6
6
  "main": "./dist/main.js",
7
7
  "module": "./dist/main.js",
@@ -223,7 +223,7 @@
223
223
  "react": "^18.0.0 || ^19.0.0",
224
224
  "react-dom": "^18.0.0 || ^19.0.0",
225
225
  "react-i18next": "^16.5.4",
226
- "recharts": "^3.0.0"
226
+ "recharts": "^3.5.0"
227
227
  },
228
228
  "peerDependenciesMeta": {
229
229
  "@mui/lab": {