@foodpilot/foods 2.14.2 → 2.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/Chart/HorizontalGauge/HorizontalGaugeChart.js +6 -6
- package/dist/components/Chart/HorizontalGauge/components/GaugeBorders.d.ts +1 -1
- package/dist/components/Chart/HorizontalGauge/components/GaugeBorders.js +6 -6
- package/dist/components/Chart/HorizontalGauge/components/GaugeLabels.d.ts +1 -1
- package/dist/components/Chart/HorizontalGauge/components/GaugeLabels.js +9 -4
- package/dist/components/Chart/HorizontalGauge/components/GaugeMarkers.js +8 -8
- package/dist/components/Chart/HorizontalGauge/constants.d.ts +9 -4
- package/dist/components/Chart/HorizontalGauge/constants.js +1 -1
- package/dist/components/Chart/HorizontalGauge/hooks/useGaugeCalculations.js +1 -1
- package/dist/components/Chart/HorizontalGauge/types.d.ts +14 -5
- package/dist/components/Chart/HorizontalGauge/utils/utils.d.ts +0 -1
- package/dist/components/Chart/HorizontalGauge/utils/utils.js +1 -1
- package/dist/components/Chart/TrajectoryChart/TrajectoryLegend/LegendBlockComponent.js +1 -1
- package/dist/components/ComparisonBlock/ComparisonBlock.d.ts +2 -0
- package/dist/components/ComparisonBlock/ComparisonBlock.js +4 -4
- package/dist/components/ComparisonBlock/useColorAndArrow.d.ts +7 -1
- package/dist/components/ComparisonBlock/useColorAndArrow.js +1 -1
- package/dist/components/ComparisonBlock/useColorAndArrow.test.d.ts +1 -0
- package/package.json +2 -2
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import{jsx as a,jsxs as e}from"react/jsx-runtime";import{GAUGE_CONSTANTS as
|
|
2
|
-
return a(
|
|
3
|
-
/* @__PURE__ */a(
|
|
4
|
-
/* @__PURE__ */a(
|
|
5
|
-
/* @__PURE__ */a(
|
|
6
|
-
/* @__PURE__ */a(
|
|
1
|
+
import{jsx as a,jsxs as e}from"react/jsx-runtime";import{GAUGE_CONSTANTS as i}from"./constants.js";import{useGaugeCalculations as o}from"./hooks/useGaugeCalculations.js";import{GaugeBorders as r}from"./components/GaugeBorders.js";import{GaugeMarkers as l}from"./components/GaugeMarkers.js";import{GaugeLabels as m}from"./components/GaugeLabels.js";import{GaugeBackground as n}from"./components/GaugeBackground.js";import{Box as t}from"@mui/material";import{useContainerWidth as s}from"./hooks/useContainerWidth.js";import{useTheme as u}from"@mui/material/styles";const p=p=>{const c=u(),{minValue:g,maxValue:d,medianValue:b,averageValue:h,companyValue:v,labelAverage:A=i.TEXT.DEFAULT_AVERAGE_LABEL,labelCompany:E=i.TEXT.DEFAULT_COMPANY_LABEL,labelMinimum:V=i.TEXT.DEFAULT_MINIMUM_LABEL,labelMedian:L=i.TEXT.DEFAULT_MEDIAN_LABEL,labelMaximum:M=i.TEXT.DEFAULT_MAXIMUM_LABEL,width:T,height:y=i.DEFAULT_HEIGHT,label:f,animated:k=!1,backgroundProps:F,precision:P=0,unit:_="",ariaLabel:D,valueFormatter:U=c.numbers.valueFormatterFn}=p,{containerRef:Y,containerWidth:j}=s(),x=j||T||i.DEFAULT_WIDTH,{scale:B,companyPosition:w,averagePosition:C,gaugeBackgroundProps:G,markerY:I,companyMarkerY:X,averageMarkerY:H,labelY:N,labelPositions:W}=o({minValue:g,maxValue:d,companyValue:v,averageValue:h,labelCompany:E,labelAverage:A,width:x,height:y});/* @__PURE__ */
|
|
2
|
+
return a(t,{ref:Y,width:T||"100%",height:y,position:"relative",children:/* @__PURE__ */e("svg",{width:j,height:y,style:{overflow:"visible"},role:D?"img":void 0,"aria-label":D,"aria-hidden":!D||void 0,children:[
|
|
3
|
+
/* @__PURE__ */a(r,{width:j,height:y,scale:B,medianValue:b,animated:k}),
|
|
4
|
+
/* @__PURE__ */a(n,{...G,backgroundProps:F,animated:k}),
|
|
5
|
+
/* @__PURE__ */a(l,{width:j,scale:B,companyValue:v,averageValue:h,markersYPosition:I,companyMarkerY:X,averageMarkerY:H,minValue:g,maxValue:d,animated:k,precision:P,unit:_,labelCompany:E,labelAverage:A,valueFormatter:U}),
|
|
6
|
+
/* @__PURE__ */a(m,{minValue:g,maxValue:d,medianValue:b,companyValue:v,averageValue:h,companyPosition:w,averagePosition:C,labelCompany:E,labelAverage:A,labelMinimum:V,labelMedian:L,labelMaximum:M,labelYPositions:N,labelPositions:W,animated:k,precision:P,unit:_,valueFormatter:U})]})})};export{p as HorizontalGaugeChart};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { GaugeBordersProps } from '../types';
|
|
2
|
-
export declare const GaugeBorders: ({ width, height,
|
|
2
|
+
export declare const GaugeBorders: ({ width, height, medianValue, scale, animated }: GaugeBordersProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import{jsxs as t,jsx as r}from"react/jsx-runtime";import{useRef as
|
|
2
|
-
/* @__PURE__ */r("line",{x1:
|
|
3
|
-
/* @__PURE__ */r("line",{x1:
|
|
4
|
-
/* @__PURE__ */r("line",{x1:
|
|
5
|
-
/* @__PURE__ */r("line",{x1:
|
|
6
|
-
/* @__PURE__ */r("line",{x1:
|
|
1
|
+
import{jsxs as t,jsx as r}from"react/jsx-runtime";import{useRef as e,useEffect as D}from"react";import{GAUGE_CONSTANTS as E}from"../constants.js";const G=({width:G,height:s,medianValue:a,scale:o,animated:i=!1})=>{const A=e(null);return D(()=>{if(A.current&&i){const t=A.current;t.style.opacity="0",setTimeout(()=>{t.style.transition="all 0.5s linear",t.style.opacity="1"},300)}},[i]),/* @__PURE__ */t("g",{ref:A,style:{opacity:i?"0":"1"},children:[
|
|
2
|
+
/* @__PURE__ */r("line",{x1:E.GAUGE_PADDING,y1:1,x2:G-E.GAUGE_PADDING,y2:1,stroke:E.COLORS.BORDER,strokeWidth:"1",strokeDasharray:E.BORDER_DASH_PATTERN}),
|
|
3
|
+
/* @__PURE__ */r("line",{x1:E.GAUGE_PADDING,y1:s-E.LEGEND_HEIGHT,x2:G-E.GAUGE_PADDING,y2:s-E.LEGEND_HEIGHT,stroke:E.COLORS.BORDER,strokeWidth:"1",strokeDasharray:E.BORDER_DASH_PATTERN}),
|
|
4
|
+
/* @__PURE__ */r("line",{x1:E.GAUGE_PADDING,y1:0,x2:E.GAUGE_PADDING,y2:s-E.LEGEND_HEIGHT,stroke:E.COLORS.BORDER,strokeWidth:"1",strokeDasharray:E.BORDER_DASH_PATTERN}),
|
|
5
|
+
/* @__PURE__ */r("line",{x1:G-E.GAUGE_PADDING,y1:0,x2:G-E.GAUGE_PADDING,y2:s-E.LEGEND_HEIGHT,stroke:E.COLORS.BORDER,strokeWidth:"1",strokeDasharray:E.BORDER_DASH_PATTERN}),
|
|
6
|
+
/* @__PURE__ */r("line",{"data-testid":"horizontal-gauge-median-guide",x1:o(a)+E.GAUGE_PADDING,y1:0,x2:o(a)+E.GAUGE_PADDING,y2:s-E.LEGEND_HEIGHT,stroke:E.COLORS.BORDER,strokeWidth:"1",strokeDasharray:E.BORDER_DASH_PATTERN})]})};export{G as GaugeBorders};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { GaugeLabelsProps } from '../types';
|
|
2
|
-
export declare const GaugeLabels: ({ minValue, maxValue, companyValue, averageValue, companyPosition, averagePosition, labelCompany, labelAverage, labelYPositions, labelPositions, animated, precision, unit, valueFormatter, }: GaugeLabelsProps) => import("react/jsx-runtime").JSX.Element;
|
|
2
|
+
export declare const GaugeLabels: ({ minValue, maxValue, medianValue, companyValue, averageValue, companyPosition, averagePosition, labelCompany, labelAverage, labelMinimum, labelMedian, labelMaximum, labelYPositions, labelPositions, animated, precision, unit, valueFormatter, }: GaugeLabelsProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,4 +1,9 @@
|
|
|
1
|
-
import{jsxs as
|
|
2
|
-
/* @__PURE__ */
|
|
3
|
-
/* @__PURE__ */e("text",{
|
|
4
|
-
/* @__PURE__ */
|
|
1
|
+
import{jsxs as e,jsx as t}from"react/jsx-runtime";import{useRef as i,useEffect as n}from"react";import{FoodsTooltip as l}from"../../../Tooltip/FoodsTooltip.js";import{GaugeTooltip as a}from"./GaugeTooltip.js";import{formatValue as o}from"../utils/formatters.js";import{useTheme as r}from"@mui/material";const m=({minValue:m,maxValue:s,medianValue:d,companyValue:c,averageValue:h,companyPosition:u,averagePosition:f,labelCompany:x,labelAverage:p,labelMinimum:y,labelMedian:g,labelMaximum:b,labelYPositions:v,labelPositions:W,animated:A,precision:z=0,unit:B="",valueFormatter:S})=>{const V=r(),j=i(null),F={transition:A?"transform 0.3s linear":"none"},P=V.custom.grey[2800],T=e=>e>=m&&e<=s;return n(()=>{if(j.current&&A){const e=j.current;e.style.opacity="0",setTimeout(()=>{e.style.transition="all 0.5s linear",e.style.opacity="1"},300)}},[A]),/* @__PURE__ */e("g",{ref:j,children:[
|
|
2
|
+
/* @__PURE__ */e("g",{children:[
|
|
3
|
+
/* @__PURE__ */e("text",{x:W.min.x,y:v.values,fill:P,fontSize:"12",fontWeight:"bold",textAnchor:W.min.anchor,dominantBaseline:"middle",style:F,children:[S?S(m):o(m,z),
|
|
4
|
+
/* @__PURE__ */e("tspan",{x:W.min.x,y:v.legend,fontWeight:"400","aria-hidden":"true",children:["(",y,")"]})]}),
|
|
5
|
+
/* @__PURE__ */e("text",{x:W.median.x,y:v.values,fill:P,fontSize:"12",fontWeight:"bold",textAnchor:W.median.anchor,dominantBaseline:"middle",style:F,children:[S?S(d):o(d,z),
|
|
6
|
+
/* @__PURE__ */e("tspan",{x:W.median.x,y:v.legend,fontWeight:"400","aria-hidden":"true",children:["(",g,")"]})]}),
|
|
7
|
+
/* @__PURE__ */e("text",{x:W.max.x,y:v.values,fill:P,fontSize:"12",fontWeight:"bold",textAnchor:W.max.anchor,dominantBaseline:"middle",style:F,children:[S?S(s):o(s,z),
|
|
8
|
+
/* @__PURE__ */e("tspan",{x:W.max.x,y:v.legend,fontWeight:"400","aria-hidden":"true",children:["(",b,")"]})]})]}),
|
|
9
|
+
/* @__PURE__ */e("g",{cursor:"default",children:[T(c)&&/* @__PURE__ */t(l,{width:"unset",title:/* @__PURE__ */t(a,{label:x,value:c,unit:B,precision:z,valueFormatter:S}),children:/* @__PURE__ */t("text",{transform:`translate(${u.x}, ${v.company})`,fill:P,textAnchor:u.anchor,dominantBaseline:"middle",fontWeight:"700",fontSize:"12",style:F,children:x})}),T(h)&&/* @__PURE__ */t(l,{width:"unset",title:/* @__PURE__ */t(a,{label:p,value:h,unit:B,precision:z,valueFormatter:S}),children:/* @__PURE__ */t("text",{transform:`translate(${f.x}, ${v.average})`,fill:P,fontSize:"12",fontWeight:"500",textAnchor:f.anchor,dominantBaseline:"middle",style:F,children:p})})]})]})};export{m as GaugeLabels};
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import{jsxs as
|
|
2
|
-
return
|
|
3
|
-
/* @__PURE__ */
|
|
4
|
-
/* @__PURE__ */
|
|
5
|
-
/* @__PURE__ */
|
|
6
|
-
/* @__PURE__ */
|
|
7
|
-
/* @__PURE__ */
|
|
8
|
-
/* @__PURE__ */
|
|
1
|
+
import{jsxs as e,jsx as t}from"react/jsx-runtime";import{useRef as r,useEffect as a}from"react";import{GAUGE_CONSTANTS as o}from"../constants.js";import{FoodsTooltip as i}from"../../../Tooltip/FoodsTooltip.js";import{GaugeTooltip as l}from"./GaugeTooltip.js";import{useTheme as n}from"@mui/material";const s=({scale:s,companyValue:m,averageValue:c,markersYPosition:u,companyMarkerY:A,averageMarkerY:p,animated:y=!1,minValue:d,maxValue:E,precision:G=2,unit:R="",labelCompany:h="",labelAverage:f="",valueFormatter:k})=>{const g=n(),D=r(null),_={transition:y?"transform 0.3s linear":"none"},I=g.custom.grey[2800],T=e=>e>=d&&e<=E;return a(()=>{if(D.current&&y){const e=D.current;e.style.opacity="0",setTimeout(()=>{e.style.transition="all 0.5s linear",e.style.opacity="1"},300)}},[y]),/* @__PURE__ */e("g",{ref:D,children:[[d,E].map((r,a)=>{const i=`edge-${a}`,l=o.GAUGE_PADDING+s(r);/* @__PURE__ */
|
|
2
|
+
return e("g",{transform:`translate(${l}, 0)`,style:_,children:[
|
|
3
|
+
/* @__PURE__ */t("circle",{cy:u,r:o.MARKER.EDGE_RADIUS,fill:I}),
|
|
4
|
+
/* @__PURE__ */t("line",{y1:u-o.GAUGE_HEIGHT/2,y2:u+o.GAUGE_HEIGHT/2,stroke:I,strokeWidth:"2"})]},i)}),T(m)&&/* @__PURE__ */t(i,{width:"unset",title:/* @__PURE__ */t(l,{label:h,value:m,unit:R,precision:G,valueFormatter:k}),children:/* @__PURE__ */e("g",{transform:`translate(${o.GAUGE_PADDING+s(m)}, 0)`,style:_,children:[
|
|
5
|
+
/* @__PURE__ */t("line",{y1:A.start,y2:A.end,stroke:I,strokeWidth:"1"}),
|
|
6
|
+
/* @__PURE__ */t("circle",{cy:u,r:o.MARKER.COMPANY_RADIUS,stroke:I,strokeWidth:o.MARKER.COMPANY_STROKE_WIDTH,fill:g.palette.common.white})]})}),T(c)&&/* @__PURE__ */t(i,{width:"unset",title:/* @__PURE__ */t(l,{label:f,value:c,unit:R,precision:G,valueFormatter:k}),children:/* @__PURE__ */e("g",{"data-testid":"horizontal-gauge-average-marker",transform:`translate(${o.GAUGE_PADDING+s(c)}, 0)`,style:_,children:[
|
|
7
|
+
/* @__PURE__ */t("line",{y1:p.start,y2:p.end,stroke:I,strokeWidth:"1"}),
|
|
8
|
+
/* @__PURE__ */t("circle",{cy:u,r:o.MARKER.AVERAGE_RADIUS,fill:g.palette.common.white,stroke:I,strokeWidth:o.MARKER.AVERAGE_STROKE_WIDTH})]})})]})};export{s as GaugeMarkers};
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
export declare const GAUGE_CONSTANTS: {
|
|
2
2
|
readonly DEFAULT_WIDTH: 500;
|
|
3
|
-
readonly DEFAULT_HEIGHT:
|
|
3
|
+
readonly DEFAULT_HEIGHT: 220;
|
|
4
4
|
readonly GAUGE_HEIGHT: 28;
|
|
5
5
|
readonly GAUGE_PADDING: 8;
|
|
6
|
-
readonly
|
|
6
|
+
readonly LEGEND_HEIGHT: 48;
|
|
7
7
|
readonly FONT_SIZE: {
|
|
8
8
|
readonly DEFAULT: 12;
|
|
9
9
|
readonly LABEL: 14;
|
|
@@ -16,7 +16,7 @@ export declare const GAUGE_CONSTANTS: {
|
|
|
16
16
|
readonly EDGE_RADIUS: 3;
|
|
17
17
|
};
|
|
18
18
|
readonly COLORS: {
|
|
19
|
-
readonly BORDER: "#
|
|
19
|
+
readonly BORDER: "#E0DEDD";
|
|
20
20
|
readonly TEXT: "#393A36";
|
|
21
21
|
readonly MARKER: "#393A36";
|
|
22
22
|
readonly GRADIENT: {
|
|
@@ -24,9 +24,13 @@ export declare const GAUGE_CONSTANTS: {
|
|
|
24
24
|
readonly END: "#EB9411";
|
|
25
25
|
};
|
|
26
26
|
};
|
|
27
|
+
readonly BORDER_DASH_PATTERN: "4 4";
|
|
27
28
|
readonly TEXT: {
|
|
28
29
|
readonly DEFAULT_COMPANY_LABEL: "";
|
|
29
30
|
readonly DEFAULT_AVERAGE_LABEL: "";
|
|
31
|
+
readonly DEFAULT_MINIMUM_LABEL: "Min";
|
|
32
|
+
readonly DEFAULT_MEDIAN_LABEL: "Median";
|
|
33
|
+
readonly DEFAULT_MAXIMUM_LABEL: "Max";
|
|
30
34
|
};
|
|
31
35
|
readonly LAYOUT: {
|
|
32
36
|
readonly COMPANY_MARKER_OFFSET: 18;
|
|
@@ -37,6 +41,7 @@ export declare const GAUGE_CONSTANTS: {
|
|
|
37
41
|
readonly COMPANY_LABEL_OFFSET: 8;
|
|
38
42
|
readonly AVERAGE_LABEL_OFFSET: 12;
|
|
39
43
|
readonly TITLE_OFFSET: 35;
|
|
40
|
-
readonly VALUES_LABEL_OFFSET:
|
|
44
|
+
readonly VALUES_LABEL_OFFSET: 28;
|
|
45
|
+
readonly LEGEND_LABEL_OFFSET: 8;
|
|
41
46
|
};
|
|
42
47
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const E={DEFAULT_WIDTH:500,DEFAULT_HEIGHT:
|
|
1
|
+
const E={DEFAULT_WIDTH:500,DEFAULT_HEIGHT:220,GAUGE_HEIGHT:28,GAUGE_PADDING:8,LEGEND_HEIGHT:48,FONT_SIZE:{DEFAULT:12},MARKER:{COMPANY_RADIUS:5,COMPANY_STROKE_WIDTH:3,AVERAGE_RADIUS:3,AVERAGE_STROKE_WIDTH:2,EDGE_RADIUS:3},COLORS:{BORDER:"#E0DEDD",GRADIENT:{START:"#F0DF46",END:"#EB9411"}},BORDER_DASH_PATTERN:"4 4",TEXT:{DEFAULT_COMPANY_LABEL:"",DEFAULT_AVERAGE_LABEL:"",DEFAULT_MINIMUM_LABEL:"Min",DEFAULT_MEDIAN_LABEL:"Median",DEFAULT_MAXIMUM_LABEL:"Max"},LAYOUT:{COMPANY_MARKER_OFFSET:18,AVERAGE_MARKER_TOP_OFFSET:12,AVERAGE_MARKER_BOTTOM_OFFSET:4,COMPANY_LABEL_VERTICAL_RATIO:.25,AVERAGE_LABEL_VERTICAL_RATIO:.75,COMPANY_LABEL_OFFSET:8,AVERAGE_LABEL_OFFSET:12,TITLE_OFFSET:35,VALUES_LABEL_OFFSET:28,LEGEND_LABEL_OFFSET:8}};export{E as GAUGE_CONSTANTS};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{GAUGE_CONSTANTS as A}from"../constants.js";import{getLabelPosition as E,
|
|
1
|
+
import{GAUGE_CONSTANTS as A}from"../constants.js";import{getLabelPosition as E,createScale as a}from"../utils/utils.js";const e=({minValue:e,maxValue:T,companyValue:_,averageValue:G,labelCompany:O,labelAverage:L,width:r,height:n})=>{const o=a(e,T,r),t=E(_,O,o,r),i=E(G,L,o,r),l=n/2,U=l-A.GAUGE_HEIGHT,m=U+A.GAUGE_HEIGHT/2,Y={start:l-A.LAYOUT.COMPANY_MARKER_OFFSET,end:U-A.LAYOUT.COMPANY_MARKER_OFFSET},F={start:l-A.LAYOUT.AVERAGE_MARKER_TOP_OFFSET,end:l+A.GAUGE_HEIGHT-A.LAYOUT.AVERAGE_MARKER_BOTTOM_OFFSET},s={company:n*A.LAYOUT.COMPANY_LABEL_VERTICAL_RATIO-A.LAYOUT.COMPANY_LABEL_OFFSET,average:n*A.LAYOUT.AVERAGE_LABEL_VERTICAL_RATIO-A.LAYOUT.AVERAGE_LABEL_OFFSET,title:U-A.LAYOUT.TITLE_OFFSET,values:n-A.LAYOUT.VALUES_LABEL_OFFSET,legend:n-A.LAYOUT.LEGEND_LABEL_OFFSET},R={min:{x:A.GAUGE_PADDING,anchor:"middle"},median:{x:r/2,anchor:"middle"},max:{x:r-A.GAUGE_PADDING,anchor:"middle"}};return{scale:o,companyPosition:t,averagePosition:i,gaugeBackgroundProps:{x:A.GAUGE_PADDING,y:m-A.GAUGE_HEIGHT/2,width:r-2*A.GAUGE_PADDING,height:A.GAUGE_HEIGHT,animated:!1},markerY:m,companyMarkerY:Y,averageMarkerY:F,labelY:s,labelPositions:R}};export{e as useGaugeCalculations};
|
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
export type HorizontalGaugeChartProps = {
|
|
2
2
|
minValue: number;
|
|
3
3
|
maxValue: number;
|
|
4
|
+
medianValue: number;
|
|
4
5
|
companyValue: number;
|
|
5
6
|
averageValue: number;
|
|
7
|
+
labelMinimum?: string;
|
|
8
|
+
labelMedian?: string;
|
|
9
|
+
labelMaximum?: string;
|
|
6
10
|
labelAverage?: string;
|
|
7
11
|
labelCompany?: string;
|
|
8
12
|
width?: number;
|
|
@@ -12,6 +16,7 @@ export type HorizontalGaugeChartProps = {
|
|
|
12
16
|
backgroundProps?: BackgroundProps;
|
|
13
17
|
precision?: number;
|
|
14
18
|
unit?: string;
|
|
19
|
+
ariaLabel?: string;
|
|
15
20
|
valueFormatter?: (value: number, precision?: number) => string;
|
|
16
21
|
};
|
|
17
22
|
export type TextAnchor = "start" | "middle" | "end";
|
|
@@ -47,11 +52,12 @@ export type LabelYPositions = {
|
|
|
47
52
|
average: number;
|
|
48
53
|
title: number;
|
|
49
54
|
values: number;
|
|
55
|
+
legend: number;
|
|
50
56
|
};
|
|
51
57
|
export type LabelXPositions = {
|
|
52
|
-
min:
|
|
53
|
-
|
|
54
|
-
|
|
58
|
+
min: LabelPosition;
|
|
59
|
+
median: LabelPosition;
|
|
60
|
+
max: LabelPosition;
|
|
55
61
|
};
|
|
56
62
|
export type GaugeCalculationProps = {
|
|
57
63
|
minValue: number;
|
|
@@ -66,7 +72,6 @@ export type GaugeCalculationProps = {
|
|
|
66
72
|
};
|
|
67
73
|
export type GaugeCalculations = {
|
|
68
74
|
scale: (value: number) => number;
|
|
69
|
-
averageValueBoundaries: number;
|
|
70
75
|
companyPosition: LabelPosition;
|
|
71
76
|
averagePosition: LabelPosition;
|
|
72
77
|
gaugeBackgroundProps: GaugeBackgroundProps;
|
|
@@ -79,7 +84,7 @@ export type GaugeCalculations = {
|
|
|
79
84
|
export type GaugeBordersProps = {
|
|
80
85
|
width: number;
|
|
81
86
|
height: number;
|
|
82
|
-
|
|
87
|
+
medianValue: number;
|
|
83
88
|
scale: (value: number) => number;
|
|
84
89
|
animated: boolean;
|
|
85
90
|
};
|
|
@@ -103,12 +108,16 @@ export type GaugeMarkersProps = {
|
|
|
103
108
|
export type GaugeLabelsProps = {
|
|
104
109
|
minValue: number;
|
|
105
110
|
maxValue: number;
|
|
111
|
+
medianValue: number;
|
|
106
112
|
companyValue: number;
|
|
107
113
|
averageValue: number;
|
|
108
114
|
companyPosition: LabelPosition;
|
|
109
115
|
averagePosition: LabelPosition;
|
|
110
116
|
labelCompany: string;
|
|
111
117
|
labelAverage: string;
|
|
118
|
+
labelMinimum: string;
|
|
119
|
+
labelMedian: string;
|
|
120
|
+
labelMaximum: string;
|
|
112
121
|
labelYPositions: LabelYPositions;
|
|
113
122
|
labelPositions: LabelXPositions;
|
|
114
123
|
animated: boolean;
|
|
@@ -2,5 +2,4 @@ import { LabelPosition } from '../types';
|
|
|
2
2
|
export declare const createScale: (minValue: number, maxValue: number, width: number) => (value: number) => number;
|
|
3
3
|
export declare const approximateTextWidth: (text: string, fontSize?: 12) => number;
|
|
4
4
|
export declare const getLabelPosition: (value: number, text: string, scale: (value: number) => number, width: number, fontSize?: 12) => LabelPosition;
|
|
5
|
-
export declare const calculateAverageBoundary: (minValue: number, maxValue: number) => number;
|
|
6
5
|
export declare const getMarkerPositions: (width: number) => number[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{GAUGE_CONSTANTS as G}from"../constants.js";const A=(A,D,E)=>A===D?()=>(E-2*G.GAUGE_PADDING)/2:n=>(n-A)/(D-A)*(E-2*G.GAUGE_PADDING),D=(A,D=G.FONT_SIZE.DEFAULT)=>A.length*(.6*D),E=(A,E,n,t,o=G.FONT_SIZE.DEFAULT)=>{const r=G.GAUGE_PADDING+n(A),I=D(E,o)/2;return r-I<G.GAUGE_PADDING?{x:G.GAUGE_PADDING,anchor:"start"}:r+I>t-G.GAUGE_PADDING?{x:t-G.GAUGE_PADDING,anchor:"end"}:{x:r,anchor:"middle"}}
|
|
1
|
+
import{GAUGE_CONSTANTS as G}from"../constants.js";const A=(A,D,E)=>A===D?()=>(E-2*G.GAUGE_PADDING)/2:n=>(n-A)/(D-A)*(E-2*G.GAUGE_PADDING),D=(A,D=G.FONT_SIZE.DEFAULT)=>A.length*(.6*D),E=(A,E,n,t,o=G.FONT_SIZE.DEFAULT)=>{const r=G.GAUGE_PADDING+n(A),I=D(E,o)/2;return r-I<G.GAUGE_PADDING?{x:G.GAUGE_PADDING,anchor:"start"}:r+I>t-G.GAUGE_PADDING?{x:t-G.GAUGE_PADDING,anchor:"end"}:{x:r,anchor:"middle"}};export{D as approximateTextWidth,A as createScale,E as getLabelPosition};
|
|
@@ -3,7 +3,7 @@ return e(a,{sx:{display:"flex",flexDirection:"column",alignItems:"flex-start",pa
|
|
|
3
3
|
/* @__PURE__ */e(n,{direction:"row",alignItems:"flex-start",justifyContent:"flex-start",spacing:h.spacing(2),minHeight:h.spacing(4),sx:{width:"100%"},children:[
|
|
4
4
|
/* @__PURE__ */e(n,{direction:"row",alignItems:"flex-start",spacing:1.5,children:[p.isLine?/* @__PURE__ */i(a,{sx:{width:h.spacing(2),transform:`translateY(${h.spacing(1)})`,height:h.spacing(.25),backgroundColor:p.color}}):/* @__PURE__ */i(a,{sx:{minWidth:h.spacing(2),transform:`translateY(${h.spacing(.25)})`,height:h.spacing(2),backgroundColor:p.color,borderRadius:h.spacing(.5)}}),
|
|
5
5
|
/* @__PURE__ */i(r,{variant:"body2",sx:{fontWeight:h.typography.fontWeightBold},children:p.label})]}),
|
|
6
|
-
/* @__PURE__ */i(n,{children:p.complete&&/* @__PURE__ */i(s,{startIcon:"circleCheck",variant:"tags-green",label:m.complete||"",disabled:!0})})]}),p.dataPoints&&p.dataPoints.length>0&&/* @__PURE__ */i(n,{spacing:2,sx:{mt:p.dataPoints[0].startValue&&p.dataPoints[0].endValue?h.spacing(1):0},children:p.dataPoints.map((t,a)=>/* @__PURE__ */e(n,{direction:"row",alignItems:"center",spacing:.5,children:[!!t.startValue&&!!t.endValue&&/* @__PURE__ */i(c,{currentValue:t.endValue,comparedTo:{value:t.startValue,label:t.label},improvement:g,layout:{direction:"horizontal",size:"M"},disableText:!0}),
|
|
6
|
+
/* @__PURE__ */i(n,{children:p.complete&&/* @__PURE__ */i(s,{startIcon:"circleCheck",variant:"tags-green",label:m.complete||"",disabled:!0})})]}),p.dataPoints&&p.dataPoints.length>0&&/* @__PURE__ */i(n,{spacing:2,sx:{mt:p.dataPoints[0].startValue&&p.dataPoints[0].endValue?h.spacing(1):0},children:p.dataPoints.map((t,a)=>/* @__PURE__ */e(n,{direction:"row",alignItems:"center",spacing:.5,children:[!!t.startValue&&!!t.endValue&&/* @__PURE__ */i(c,{currentValue:t.endValue,comparedTo:{value:t.startValue,label:t.label},improvement:g,layout:{direction:"horizontal",size:"M"},mode:"difference",disableText:!0}),
|
|
7
7
|
/* @__PURE__ */i(n,{direction:"column",alignItems:"flex-start",spacing:1,children:t.label&&/* @__PURE__ */i(r,{variant:"small",children:t.label})})]},`${p.key}-${a}`))}),
|
|
8
8
|
/* @__PURE__ */i(a,{children:p.dataPoints&&p.dataPoints.map((t,a)=>t.link&&/* @__PURE__ */i(o,{href:t.link.url,target:"_blank",rel:"noopener noreferrer",sx:{display:"flex",alignItems:"center",textDecoration:"none",gap:h.spacing(1),cursor:"pointer"},children:/* @__PURE__ */e(n,{direction:"row",alignItems:"center",spacing:h.spacing(1),color:h.palette.primary.main,mt:h.spacing(2),sx:{"&:hover":{opacity:.8}},children:[
|
|
9
9
|
/* @__PURE__ */i(l,{icon:t.link.icon,size:1}),
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export type Improvement = "increase" | "decrease";
|
|
2
|
+
export type ComparisonMode = "performance" | "difference";
|
|
2
3
|
type Horizontal2RowsLayout = {
|
|
3
4
|
direction: "horizontal-2-rows";
|
|
4
5
|
size: "M";
|
|
@@ -25,6 +26,7 @@ type ComparisonBlockProps = {
|
|
|
25
26
|
comparisonText?: string;
|
|
26
27
|
layout?: Layout;
|
|
27
28
|
locale?: string;
|
|
29
|
+
mode?: ComparisonMode;
|
|
28
30
|
};
|
|
29
31
|
export declare const ComparisonBlock: (props: ComparisonBlockProps) => import("react/jsx-runtime").JSX.Element | undefined;
|
|
30
32
|
export {};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{jsxs as o,jsx as r}from"react/jsx-runtime";import e from"@mui/material/Box";import{HorizontalMediumBlock as i}from"./Blocks/HorizontalMediumBlock.js";import{useColorAndArrowIcon as t}from"./useColorAndArrow.js";import{VerticalLargeBlock as a}from"./Blocks/VerticalLargeBlock.js";import{VerticalMediumBlock as l}from"./Blocks/VerticalMediumBlock.js";import{HorizontalLargeBlock as c}from"./Blocks/HorizontalLargeBlock.js";import{HorizontalSmallBlock as n}from"./Blocks/HorizontalSmallBlock.js";import{Horizontal2RowsBlock as m}from"./Blocks/Horizontal2RowsBlock.js";const s=s=>{const{currentValue:p,comparedTo:u,comparisonText:d="par rapport à",improvement:f,layout:k={direction:"vertical",size:"L"},disableText:x=!1,locale:z}=s,
|
|
2
|
-
return o(e,{sx:{borderRadius:"12px",background:
|
|
3
|
-
return r(e,{sx:{borderRadius:"12px",background:
|
|
4
|
-
return r(i,{...
|
|
1
|
+
import{jsxs as o,jsx as r}from"react/jsx-runtime";import e from"@mui/material/Box";import{HorizontalMediumBlock as i}from"./Blocks/HorizontalMediumBlock.js";import{useColorAndArrowIcon as t}from"./useColorAndArrow.js";import{VerticalLargeBlock as a}from"./Blocks/VerticalLargeBlock.js";import{VerticalMediumBlock as l}from"./Blocks/VerticalMediumBlock.js";import{HorizontalLargeBlock as c}from"./Blocks/HorizontalLargeBlock.js";import{HorizontalSmallBlock as n}from"./Blocks/HorizontalSmallBlock.js";import{Horizontal2RowsBlock as m}from"./Blocks/Horizontal2RowsBlock.js";const s=s=>{const{currentValue:p,comparedTo:u,comparisonText:d="par rapport à",improvement:f,layout:k={direction:"vertical",size:"L"},disableText:x=!1,locale:z,mode:B="performance"}=s,b=Number(u.value),y=t({currentValue:p,previousValue:b,improvement:f,layout:k,mode:B}),g=b>0?Math.abs(100-p/b*100):null,w=null!==g?new Intl.NumberFormat(z,{style:"percent",notation:"compact",minimumFractionDigits:0,maximumFractionDigits:0}).format(g/100):"",h=new Intl.NumberFormat(z).format(b),j={comparisonText:d,percentageDifference:w,comparedTo:{...u,value:h},iconName:y.icon,colors:y.color,disableText:x};if("vertical"===k.direction)/* @__PURE__ */
|
|
2
|
+
return o(e,{sx:{borderRadius:"12px",background:y.color.secondaryColor,width:"fit-content",padding:"M"===s.layout?.size?"8px":"16px"},className:"comparison-block-wrapper",children:["L"===s.layout?.size&&/* @__PURE__ */r(a,{...j}),"M"===s.layout?.size&&/* @__PURE__ */r(l,{...j})]});if("horizontal"===k.direction){if("L"===s.layout?.size)/* @__PURE__ */
|
|
3
|
+
return r(e,{sx:{borderRadius:"12px",background:y.color.secondaryColor,width:"fit-content",padding:"24px 16px"},className:"comparison-block-wrapper",children:/* @__PURE__ */r(c,{...j})});if("M"===s.layout?.size)/* @__PURE__ */
|
|
4
|
+
return r(i,{...j})}return"horizontal-2-rows"===k.direction&&"M"===k.size?/* @__PURE__ */r(e,{children:/* @__PURE__ */r(m,{...j})}):"S"===s.layout?.size?/* @__PURE__ */r(n,{...j}):void 0};export{s as ComparisonBlock};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { IconMapping } from '../Icons/index.ts';
|
|
2
|
-
import { Improvement, Layout } from './ComparisonBlock.tsx';
|
|
2
|
+
import { ComparisonMode, Improvement, Layout } from './ComparisonBlock.tsx';
|
|
3
3
|
export type ColorSet = {
|
|
4
4
|
primaryColor: string;
|
|
5
5
|
secondaryColor: string;
|
|
@@ -13,6 +13,12 @@ type Options = {
|
|
|
13
13
|
previousValue: number;
|
|
14
14
|
improvement: Improvement;
|
|
15
15
|
layout: Layout;
|
|
16
|
+
mode?: ComparisonMode;
|
|
16
17
|
};
|
|
18
|
+
type Indicator = {
|
|
19
|
+
icon: keyof IconMapping;
|
|
20
|
+
tone: "good" | "bad" | "neutral";
|
|
21
|
+
};
|
|
22
|
+
export declare const getComparisonIndicator: (options: Options) => Indicator;
|
|
17
23
|
export declare const useColorAndArrowIcon: (options: Options) => IconAndColor;
|
|
18
24
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{useTheme as o}from"@mui/material";const r=
|
|
1
|
+
import{useTheme as o}from"@mui/material";const r=o=>{const{currentValue:r,previousValue:e,improvement:n,layout:t,mode:i="performance"}=o;if(r===e)return{icon:"equal",tone:"neutral"};const a=r>e;if("difference"===i)return{icon:a?"plus":"minus",tone:"neutral"};const c="M"===t.size&&"horizontal"===t.direction;return{icon:a?c?"plus":"arrowUpRight":c?"minus":"arrowDownRight",tone:("increase"===n?a:!a)?"good":"bad"}},e=e=>{const n=o(),t={primaryColor:n.custom.green[500],secondaryColor:n.custom.green[100]},i={primaryColor:n.custom.red[500],secondaryColor:n.custom.red[100]},a={primaryColor:n.palette.primary[700],secondaryColor:n.palette.primary[100]},c={primaryColor:n.custom.grey[2800],secondaryColor:n.custom.grey[300]},m=r(e);return{color:"good"===m.tone?t:"bad"===m.tone?i:"difference"===e.mode?a:c,icon:m.icon}};export{r as getComparisonIndicator,e as useColorAndArrowIcon};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@foodpilot/foods",
|
|
3
3
|
"private": false,
|
|
4
|
-
"version": "2.
|
|
4
|
+
"version": "2.15.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/main.js",
|
|
7
7
|
"module": "./dist/main.js",
|
|
@@ -192,6 +192,7 @@
|
|
|
192
192
|
"preview": "vite preview",
|
|
193
193
|
"storybook": "storybook dev --no-open",
|
|
194
194
|
"local-storybook": "storybook dev -p 6007",
|
|
195
|
+
"test": "vitest run",
|
|
195
196
|
"build-storybook": "storybook build",
|
|
196
197
|
"lint:fix": "npm run lint --fix",
|
|
197
198
|
"prepare": "husky install",
|
|
@@ -205,7 +206,6 @@
|
|
|
205
206
|
"publish:minor": "gh workflow run release.yml --ref main --field version_type=minor",
|
|
206
207
|
"publish:major": "gh workflow run release.yml --ref main --field version_type=major",
|
|
207
208
|
"size": "size-limit",
|
|
208
|
-
"test": "vitest run",
|
|
209
209
|
"test:watch": "vitest"
|
|
210
210
|
},
|
|
211
211
|
"peerDependencies": {
|