@scality/core-ui 0.173.0 → 0.175.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.
Files changed (30) hide show
  1. package/dist/components/barchartv2/Barchart.component.d.ts +1 -0
  2. package/dist/components/barchartv2/Barchart.component.d.ts.map +1 -1
  3. package/dist/components/barchartv2/Barchart.component.js +10 -12
  4. package/dist/components/icon/Icon.component.d.ts +1 -0
  5. package/dist/components/icon/Icon.component.d.ts.map +1 -1
  6. package/dist/components/icon/Icon.component.js +1 -0
  7. package/dist/components/inputv2/inputv2.d.ts +5 -0
  8. package/dist/components/inputv2/inputv2.d.ts.map +1 -1
  9. package/dist/components/inputv2/inputv2.js +3 -3
  10. package/dist/components/linetimeseriechart/linetimeseriechart.component.d.ts.map +1 -1
  11. package/dist/components/linetimeseriechart/linetimeseriechart.component.js +6 -6
  12. package/dist/components/scrollbarwrapper/ScrollbarWrapper.component.d.ts.map +1 -1
  13. package/dist/components/scrollbarwrapper/ScrollbarWrapper.component.js +2 -0
  14. package/dist/components/searchinput/SearchInput.component.d.ts +4 -0
  15. package/dist/components/searchinput/SearchInput.component.d.ts.map +1 -1
  16. package/dist/components/searchinput/SearchInput.component.js +2 -2
  17. package/dist/components/sparkline/sparkline.component.d.ts +2 -1
  18. package/dist/components/sparkline/sparkline.component.d.ts.map +1 -1
  19. package/dist/components/sparkline/sparkline.component.js +3 -3
  20. package/package.json +1 -1
  21. package/src/lib/components/barchartv2/Barchart.component.tsx +14 -18
  22. package/src/lib/components/icon/Icon.component.tsx +1 -0
  23. package/src/lib/components/inputv2/inputv2.tsx +13 -4
  24. package/src/lib/components/linetimeseriechart/linetimeseriechart.component.tsx +9 -7
  25. package/src/lib/components/scrollbarwrapper/ScrollbarWrapper.component.tsx +3 -1
  26. package/src/lib/components/searchinput/SearchInput.component.tsx +9 -2
  27. package/src/lib/components/sparkline/sparkline.component.tsx +5 -3
  28. package/stories/SearchInput/searchinput.stories.tsx +74 -0
  29. package/stories/sparkline.stories.tsx +19 -0
  30. package/stories/icons.mdx +0 -115
@@ -79,6 +79,7 @@ interface CustomTickProps {
79
79
  */
80
80
  export declare const formatDate: (timestamp: number, interval: number) => React.ReactNode;
81
81
  export declare const CustomTick: ({ x, y, payload, visibleTicksCount, width, type, }: CustomTickProps) => import("react/jsx-runtime").JSX.Element;
82
+ export declare const StyledResponsiveContainer: import("styled-components").StyledComponent<import("react").ForwardRefExoticComponent<import("recharts").ResponsiveContainerProps & import("react").RefAttributes<HTMLDivElement>>, import("styled-components").DefaultTheme, {}, never>;
82
83
  export declare const Barchart: <T extends BarchartBars>(props: BarchartProps<T>) => import("react/jsx-runtime").JSX.Element;
83
84
  export {};
84
85
  //# sourceMappingURL=Barchart.component.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Barchart.component.d.ts","sourceRoot":"","sources":["../../../src/lib/components/barchartv2/Barchart.component.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Barchart.component.d.ts","sourceRoot":"","sources":["../../../src/lib/components/barchartv2/Barchart.component.tsx"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useState } from 'react';
3
- import { Bar, BarChart, CartesianGrid, ReferenceLine, ResponsiveContainer, Tooltip, XAxis, YAxis, } from 'recharts';
3
+ import { Bar, BarChart, CartesianGrid, ResponsiveContainer, Tooltip, XAxis, YAxis, } from 'recharts';
4
4
  import styled, { useTheme } from 'styled-components';
5
5
  import { spacing, Stack, Wrap } from '../../spacing';
6
6
  import { chartColors, fontSize } from '../../style/theme';
@@ -55,7 +55,7 @@ export const CustomTick = ({ x, y, payload, visibleTicksCount, width, type, }) =
55
55
  const theme = useTheme();
56
56
  const tickWidth = width / visibleTicksCount - CHART_CONSTANTS.TICK_WIDTH_OFFSET;
57
57
  const centerX = x - tickWidth / 2;
58
- return (_jsx("foreignObject", { x: centerX, y: y, width: tickWidth, color: theme.textSecondary, overflow: "visible", children: _jsx(ConstrainedText, { color: "textSecondary", text: _jsx(Text, { variant: "Smaller", children: type.type === 'time'
58
+ return (_jsx("foreignObject", { x: centerX, y: y - 8, width: tickWidth, color: theme.textSecondary, overflow: "visible", children: _jsx(ConstrainedText, { color: "textSecondary", text: _jsx(Text, { variant: "Smaller", children: type.type === 'time'
59
59
  ? formatDate(payload.value, type.timeRange.interval)
60
60
  : String(payload.value) }), centered: true, tooltipStyle: {
61
61
  backgroundColor: theme.backgroundLevel1,
@@ -65,7 +65,7 @@ export const CustomTick = ({ x, y, payload, visibleTicksCount, width, type, }) =
65
65
  position: 'absolute',
66
66
  } }) }));
67
67
  };
68
- const StyledResponsiveContainer = styled(ResponsiveContainer) `
68
+ export const StyledResponsiveContainer = styled(ResponsiveContainer) `
69
69
  // Avoid tooltip over constrained text to be cut off
70
70
  & .recharts-surface {
71
71
  overflow: visible;
@@ -105,22 +105,20 @@ export const Barchart = (props) => {
105
105
  return acc;
106
106
  }, {});
107
107
  const { rechartsBars, unitLabel, roundReferenceValue, rechartsData } = useChartData(bars || [], type, colorSet || {}, stacked, defaultSort, unitRange, stackedBarSort);
108
- return (_jsxs(Stack, { direction: "vertical", gap: "r8", children: [_jsx(ChartHeader, { title: title, secondaryTitle: secondaryTitle, helpTooltip: helpTooltip, rightTitle: rightTitle }), isError || (!bars && !isLoading) ? (_jsx(Error, { height: height })) : isLoading ? (_jsx(Loading, { height: height })) : (_jsx(StyledResponsiveContainer, { width: "100%", height: height, children: _jsxs(BarChart, { data: rechartsData, accessibilityLayer: true, barSize: type.type === 'category'
108
+ return (_jsxs(Stack, { direction: "vertical", children: [_jsx(ChartHeader, { title: title, secondaryTitle: secondaryTitle, helpTooltip: helpTooltip, rightTitle: rightTitle }), isError || (!bars && !isLoading) ? (_jsx(Error, { height: height })) : isLoading ? (_jsx(Loading, { height: height })) : (_jsx(StyledResponsiveContainer, { width: "100%", height: height, children: _jsxs(BarChart, { data: rechartsData, accessibilityLayer: true, barSize: type.type === 'category'
109
109
  ? type.gap === 0
110
110
  ? undefined
111
111
  : CHART_CONSTANTS.BAR_SIZE
112
- : CHART_CONSTANTS.BAR_SIZE, height: height, margin: CHART_CONSTANTS.CHART_MARGIN, barCategoryGap: type.type === 'category' ? type.gap : undefined, children: [_jsx(CartesianGrid, { vertical: false, horizontal: false, fill: theme.backgroundLevel1 }), rechartsBars.map((bar) => {
112
+ : CHART_CONSTANTS.BAR_SIZE, height: height, margin: CHART_CONSTANTS.CHART_MARGIN, barCategoryGap: type.type === 'category' ? type.gap : undefined, children: [_jsx(CartesianGrid, { vertical: true, horizontal: true, verticalPoints: [0], horizontalPoints: [0], stroke: theme.border, fill: theme.backgroundLevel4, strokeWidth: 1 }), rechartsBars.map((bar) => {
113
113
  const { fill, dataKey, stackId } = bar;
114
114
  return (_jsx(Bar, { dataKey: dataKey, fill: chartColors[fill] || fill, minPointSize: stacked ? 0 : CHART_CONSTANTS.MIN_POINT_SIZE, stackId: stackId, isAnimationActive: false, onMouseOver: () => setHoveredValue(dataKey), onMouseLeave: () => setHoveredValue(undefined) }, dataKey));
115
- }), _jsx(YAxis, { tickCount: 1, unit: ` ${unitLabel}`, domain: [0, roundReferenceValue], tickFormatter: (value) => new Intl.NumberFormat('fr-FR').format(value.toFixed(0)) // Add a space as thousand separator
116
- , axisLine: false, tick: {
115
+ }), _jsx(YAxis, { tickCount: 1, interval: 0, unit: ` ${unitLabel}`, domain: [0, roundReferenceValue], tickFormatter: (value) => new Intl.NumberFormat('fr-FR').format(value.toFixed(0)) // Add a space as thousand separator
116
+ , axisLine: { stroke: theme.border }, tick: {
117
117
  fill: theme.textSecondary,
118
118
  fontSize: fontSize.smaller,
119
- }, tickLine: false, label: {
120
- fill: theme.textSecondary,
121
- }, orientation: "right" }), _jsx(ReferenceLine, { y: roundReferenceValue, fill: theme.border, strokeWidth: 0.5 }), _jsx(XAxis, { dataKey: "category", tick: (props) => _jsx(CustomTick, { ...props, type: type }), type: "category", interval: 0, allowDataOverflow: true, tickLine: {
122
- stroke: theme.textSecondary,
119
+ }, orientation: "right" }), _jsx(XAxis, { dataKey: "category", tick: (props) => _jsx(CustomTick, { ...props, type: type }), type: "category", interval: 0, allowDataOverflow: true, tickLine: {
120
+ stroke: theme.border,
123
121
  }, axisLine: {
124
- stroke: theme.textSecondary,
122
+ stroke: theme.border,
125
123
  } }), _jsx(Tooltip, { content: (props) => (_jsx(BarchartTooltip, { type: type, colorSet: colorSet, tooltipProps: props, hoveredValue: hoveredValue, tooltip: tooltip, unitLabel: unitLabel })), cursor: false })] }) }))] }));
126
124
  };
@@ -128,6 +128,7 @@ export declare const iconTable: {
128
128
  Mail: string;
129
129
  ThumbsUp: string;
130
130
  ThumbsDown: string;
131
+ Sidebar: string;
131
132
  };
132
133
  type IconProps = {
133
134
  'aria-label'?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"Icon.component.d.ts","sourceRoot":"","sources":["../../../src/lib/components/icon/Icon.component.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAE7D,OAAO,EACL,aAAa,EAKd,MAAM,OAAO,CAAC;AAEf,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAOhD,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+HrB,CAAC;AAEF,KAAK,SAAS,GAAG;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE,SAAS,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,CAOtG,CAAC;AAgBF,MAAM,MAAM,QAAQ,GAAG,MAAM,OAAO,SAAS,GAAG,MAAM,OAAO,WAAW,CAAC;AACzE,MAAM,MAAM,SAAS,GAAG,MAAM,WAAW,CAAC;AAC1C,KAAK,KAAK,GAAG;IACX,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,KAAK,CAAC,EAAE,SAAS,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAiBF,eAAO,MAAM,WAAW;UAAsB,QAAQ;SAiCrD,CAAC;AA2DF,iBAAS,IAAI,CAAC,EAAE,WAAW,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,2CAU7C;AAED,OAAO,EAAE,IAAI,EAAE,CAAC"}
1
+ {"version":3,"file":"Icon.component.d.ts","sourceRoot":"","sources":["../../../src/lib/components/icon/Icon.component.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAE7D,OAAO,EACL,aAAa,EAKd,MAAM,OAAO,CAAC;AAEf,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAOhD,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgIrB,CAAC;AAEF,KAAK,SAAS,GAAG;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE,SAAS,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,CAOtG,CAAC;AAgBF,MAAM,MAAM,QAAQ,GAAG,MAAM,OAAO,SAAS,GAAG,MAAM,OAAO,WAAW,CAAC;AACzE,MAAM,MAAM,SAAS,GAAG,MAAM,WAAW,CAAC;AAC1C,KAAK,KAAK,GAAG;IACX,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,KAAK,CAAC,EAAE,SAAS,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAiBF,eAAO,MAAM,WAAW;UAAsB,QAAQ;SAiCrD,CAAC;AA2DF,iBAAS,IAAI,CAAC,EAAE,WAAW,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,2CAU7C;AAED,OAAO,EAAE,IAAI,EAAE,CAAC"}
@@ -133,6 +133,7 @@ export const iconTable = {
133
133
  Mail: 'fas faEnvelope',
134
134
  ThumbsUp: 'far faThumbsUp',
135
135
  ThumbsDown: 'far faThumbsDown',
136
+ Sidebar: 'fas faColumns',
136
137
  };
137
138
  export const customIcons = {
138
139
  'Remote-user': ({ 'aria-label': ariaLabel, color, size }) => (_jsx(RemoteUser, { ariaLabel: ariaLabel, color: color, size: size })),
@@ -1,19 +1,24 @@
1
1
  import { InputHTMLAttributes } from 'react';
2
2
  import { IconName } from '../icon/Icon.component';
3
+ import { CoreUITheme } from '../../style/theme';
3
4
  export declare const convertSizeToRem: (size?: "1" | "2/3" | "1/2" | "1/3") => "14rem" | "6rem" | "10rem" | "20.5rem";
4
5
  export type InputSize = '1' | '2/3' | '1/2' | '1/3';
5
6
  export type InputProps = {
6
7
  error?: string;
7
8
  id: string;
8
9
  leftIcon?: IconName;
10
+ leftIconColor?: keyof CoreUITheme;
9
11
  rightIcon?: IconName;
12
+ rightIconColor?: keyof CoreUITheme;
10
13
  size?: InputSize;
11
14
  } & Omit<InputHTMLAttributes<HTMLInputElement>, 'size'>;
12
15
  export declare const Input: import("react").ForwardRefExoticComponent<{
13
16
  error?: string;
14
17
  id: string;
15
18
  leftIcon?: IconName;
19
+ leftIconColor?: keyof CoreUITheme;
16
20
  rightIcon?: IconName;
21
+ rightIconColor?: keyof CoreUITheme;
17
22
  size?: InputSize;
18
23
  } & Omit<InputHTMLAttributes<HTMLInputElement>, "size"> & import("react").RefAttributes<HTMLInputElement>>;
19
24
  //# sourceMappingURL=inputv2.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"inputv2.d.ts","sourceRoot":"","sources":["../../../src/lib/components/inputv2/inputv2.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAc,mBAAmB,EAAE,MAAM,OAAO,CAAC;AAIxD,OAAO,EAAQ,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAExD,eAAO,MAAM,gBAAgB,UAAW,GAAG,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,2CAKlE,CAAC;AAwFF,MAAM,MAAM,SAAS,GAAG,GAAG,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;AAEpD,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,SAAS,CAAC,EAAE,QAAQ,CAAC;IACrB,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB,GAAG,IAAI,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC,CAAC;AAExD,eAAO,MAAM,KAAK;YAPR,MAAM;QACV,MAAM;eACC,QAAQ;gBACP,QAAQ;WACb,SAAS;0GAmDjB,CAAC"}
1
+ {"version":3,"file":"inputv2.d.ts","sourceRoot":"","sources":["../../../src/lib/components/inputv2/inputv2.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAc,mBAAmB,EAAE,MAAM,OAAO,CAAC;AAIxD,OAAO,EAAQ,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,eAAO,MAAM,gBAAgB,UAAW,GAAG,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,2CAKlE,CAAC;AAwFF,MAAM,MAAM,SAAS,GAAG,GAAG,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;AAEpD,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,WAAW,CAAC;IAClC,SAAS,CAAC,EAAE,QAAQ,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,WAAW,CAAC;IACnC,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB,GAAG,IAAI,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC,CAAC;AAExD,eAAO,MAAM,KAAK;YATR,MAAM;QACV,MAAM;eACC,QAAQ;oBACH,MAAM,WAAW;gBACrB,QAAQ;qBACH,MAAM,WAAW;WAC3B,SAAS;0GAyDjB,CAAC"}
@@ -81,10 +81,10 @@ const InputBorder = styled.div `
81
81
  `;
82
82
  const SelfCenterredIcon = styled(Icon) `
83
83
  align-self: center;
84
- color: ${(props) => props.theme.textSecondary};
84
+ color: ${(props) => props.theme[props.color]};
85
85
  `;
86
- export const Input = forwardRef(({ error, disabled, id, leftIcon, rightIcon, placeholder, size, ...inputProps }, ref) => {
86
+ export const Input = forwardRef(({ error, disabled, id, leftIcon, leftIconColor = 'textSecondary', rightIcon, rightIconColor = 'textSecondary', placeholder, size, ...inputProps }, ref) => {
87
87
  const { isContextAvailable, disabled: disabledFromFieldContext, error: errorFromFieldContext, } = useFieldContext();
88
88
  placeholder = placeholder ? `Example: ${placeholder}` : undefined;
89
- return (_jsx(InputBorder, { disabled: !!(disabled || disabledFromFieldContext), hasError: !!(error || errorFromFieldContext), width: convertSizeToRem(size), children: _jsxs(InputContainer, { isContextAvailable: isContextAvailable, disabled: !!(disabled || disabledFromFieldContext), hasError: !!(error || errorFromFieldContext), children: [leftIcon && _jsx(SelfCenterredIcon, { name: leftIcon }), _jsx(StyledInput, { ref: ref, disabled: disabled || disabledFromFieldContext, "aria-invalid": !!(error || errorFromFieldContext), "aria-describedby": `${DESCRIPTION_PREFIX}${id}`, hasIcon: !!(leftIcon || rightIcon), id: id, ...inputProps, placeholder: placeholder }), rightIcon && _jsx(SelfCenterredIcon, { name: rightIcon })] }) }));
89
+ return (_jsx(InputBorder, { disabled: !!(disabled || disabledFromFieldContext), hasError: !!(error || errorFromFieldContext), width: convertSizeToRem(size), children: _jsxs(InputContainer, { isContextAvailable: isContextAvailable, disabled: !!(disabled || disabledFromFieldContext), hasError: !!(error || errorFromFieldContext), children: [leftIcon && (_jsx(SelfCenterredIcon, { name: leftIcon, color: leftIconColor })), _jsx(StyledInput, { ref: ref, disabled: disabled || disabledFromFieldContext, "aria-invalid": !!(error || errorFromFieldContext), "aria-describedby": `${DESCRIPTION_PREFIX}${id}`, hasIcon: !!(leftIcon || rightIcon), id: id, ...inputProps, placeholder: placeholder }), rightIcon && (_jsx(SelfCenterredIcon, { name: rightIcon, color: rightIconColor }))] }) }));
90
90
  });
@@ -1 +1 @@
1
- {"version":3,"file":"linetimeseriechart.component.d.ts","sourceRoot":"","sources":["../../../src/lib/components/linetimeseriechart/linetimeseriechart.component.tsx"],"names":[],"mappings":"AAAA,OAAO,EAOL,mBAAmB,EAGpB,MAAM,UAAU,CAAC;AAqClB,MAAM,MAAM,KAAK,GAAG;IAElB,QAAQ,EAAE,MAAM,CAAC;IAEjB,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;IAEzC,eAAe,EAAE,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAEtE,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF,KAAK,wBAAwB,GAAG;IAC9B,SAAS,CAAC,EAAE,SAAS,GAAG,YAAY,CAAC;IACrC,MAAM,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC;CAC7B,CAAC;AAGF,KAAK,qBAAqB,GAAG;IAC3B,SAAS,EAAE,aAAa,CAAC;IACzB,MAAM,EACF;QACE,KAAK,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC;QAC3B,KAAK,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC;KAC5B,GACD,SAAS,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,CACzB,wBAAwB,GACxB,qBAAqB,CACxB,GAAG;IACF,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE;QACV,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,EAAE,MAAM,CAAC;KACf,EAAE,CAAC;IACJ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;OAIG;IACH,UAAU,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC;IAClC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,CACd,YAAY,EAAE,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,EACjD,SAAS,CAAC,EAAE,MAAM,EAClB,UAAU,CAAC,EAAE,WAAW,GAAG,MAAM,KAC9B,KAAK,CAAC,SAAS,CAAC;CACtB,CAAC;AA6FF,wBAAgB,kBAAkB,CAAC,EACjC,MAAM,EACN,KAAK,EACL,MAAM,EACN,iBAAiB,EACjB,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,SAAiB,EACjB,UAAwB,EACxB,SAAqB,EACrB,UAAU,EACV,QAAQ,EACR,MAAM,EACN,aAAa,EACb,GAAG,IAAI,EACR,EAAE,cAAc,2CAwWhB"}
1
+ {"version":3,"file":"linetimeseriechart.component.d.ts","sourceRoot":"","sources":["../../../src/lib/components/linetimeseriechart/linetimeseriechart.component.tsx"],"names":[],"mappings":"AAAA,OAAO,EAML,mBAAmB,EAGpB,MAAM,UAAU,CAAC;AAqClB,MAAM,MAAM,KAAK,GAAG;IAElB,QAAQ,EAAE,MAAM,CAAC;IAEjB,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;IAEzC,eAAe,EAAE,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAEtE,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF,KAAK,wBAAwB,GAAG;IAC9B,SAAS,CAAC,EAAE,SAAS,GAAG,YAAY,CAAC;IACrC,MAAM,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC;CAC7B,CAAC;AAGF,KAAK,qBAAqB,GAAG;IAC3B,SAAS,EAAE,aAAa,CAAC;IACzB,MAAM,EACF;QACE,KAAK,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC;QAC3B,KAAK,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC;KAC5B,GACD,SAAS,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,CACzB,wBAAwB,GACxB,qBAAqB,CACxB,GAAG;IACF,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE;QACV,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,EAAE,MAAM,CAAC;KACf,EAAE,CAAC;IACJ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;OAIG;IACH,UAAU,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC;IAClC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,CACd,YAAY,EAAE,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,EACjD,SAAS,CAAC,EAAE,MAAM,EAClB,UAAU,CAAC,EAAE,WAAW,GAAG,MAAM,KAC9B,KAAK,CAAC,SAAS,CAAC;CACtB,CAAC;AA6FF,wBAAgB,kBAAkB,CAAC,EACjC,MAAM,EACN,KAAK,EACL,MAAM,EACN,iBAAiB,EACjB,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,SAAiB,EACjB,UAAwB,EACxB,SAAqB,EACrB,UAAU,EACV,QAAQ,EACR,MAAM,EACN,aAAa,EACb,GAAG,IAAI,EACR,EAAE,cAAc,2CA2WhB"}
@@ -1,5 +1,5 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { CartesianGrid, Line, LineChart, ReferenceLine, ResponsiveContainer, Tooltip, XAxis, YAxis, } from 'recharts';
2
+ import { CartesianGrid, Line, LineChart, ReferenceLine, Tooltip, XAxis, YAxis, } from 'recharts';
3
3
  import { useCallback, useMemo, useRef, useState } from 'react';
4
4
  import styled, { useTheme } from 'styled-components';
5
5
  import { spacing } from '../../spacing';
@@ -15,11 +15,11 @@ import { Tooltip as TooltipComponent } from '../tooltip/Tooltip.component';
15
15
  import { formatXAxisLabel } from './utils';
16
16
  import { ChartTooltipContainer, ChartTooltipItem, ChartTooltipHeader, ChartTooltipItemsContainer, } from '../charttooltip/ChartTooltip';
17
17
  import { LegendShape } from '../chartlegend/ChartLegend';
18
+ import { StyledResponsiveContainer } from '../barchartv2/Barchart.component';
18
19
  const LineTemporalChartWrapper = styled.div `
19
20
  display: flex;
20
21
  flex-direction: column;
21
22
  justify-content: flex-start;
22
- flex: 1;
23
23
  `;
24
24
  const ChartHeader = styled.div `
25
25
  display: flex;
@@ -220,10 +220,10 @@ export function LineTimeSerieChart({ series, title, height, startingTimeStamp, i
220
220
  }, [series, getColor, selectedResources]);
221
221
  // Format time for display the tick in the x axis
222
222
  const formatXAxisLabelCallback = useCallback((timestamp) => formatXAxisLabel(timestamp, timeFormat, chartData), [timeFormat, chartData]);
223
- return (_jsxs(LineTemporalChartWrapper, { children: [_jsxs(ChartHeader, { children: [_jsxs(ChartTitleText, { children: [title, " ", unitLabel && `(${unitLabel})`] }), helpText && (_jsx(Box, { ml: spacing.r4, children: _jsx(TooltipComponent, { placement: 'right', overlay: _jsx(SmallerText, { children: helpText }), children: _jsx(Icon, { name: "Info", color: theme.buttonSecondary }) }) })), isLoading && _jsx(Loader, {})] }), _jsx("div", { onFocus: () => setIsChartActive(true), onBlur: () => setIsChartActive(false), onFocusCapture: () => setIsChartActive(true), onBlurCapture: () => setIsChartActive(false), children: _jsx(ResponsiveContainer, { width: "100%", height: height, children: _jsxs(LineChart, { data: rechartsData, ref: chartRef, margin: { top: 0, right: 0, bottom: 0, left: 0 }, "aria-label": `Time series chart for ${title}`, syncId: syncId, onMouseEnter: () => setIsChartActive(true), onMouseLeave: () => setIsChartActive(false), children: [_jsx(CartesianGrid, { vertical: true, horizontal: true, verticalPoints: [0], horizontalPoints: [0], stroke: theme.border, fill: theme.backgroundLevel4, strokeWidth: 1 }), _jsx(XAxis, { dataKey: "timestamp", type: "number", domain: ['dataMin', 'dataMax'], ticks: xAxisTicks, tickFormatter: formatXAxisLabelCallback, tickCount: 5, tick: {
223
+ return (_jsxs(LineTemporalChartWrapper, { children: [_jsxs(ChartHeader, { children: [_jsxs(ChartTitleText, { children: [title, " ", unitLabel && `(${unitLabel})`] }), helpText && (_jsx(Box, { ml: spacing.r4, children: _jsx(TooltipComponent, { placement: 'right', overlay: _jsx(SmallerText, { children: helpText }), children: _jsx(Icon, { name: "Info", color: theme.buttonSecondary }) }) })), isLoading && _jsx(Loader, {})] }), _jsx("div", { onFocus: () => setIsChartActive(true), onBlur: () => setIsChartActive(false), onFocusCapture: () => setIsChartActive(true), onBlurCapture: () => setIsChartActive(false), children: _jsx(StyledResponsiveContainer, { width: "100%", height: height, children: _jsxs(LineChart, { data: rechartsData, ref: chartRef, margin: { top: 0, right: 0, bottom: 0, left: 0 }, "aria-label": `Time series chart for ${title}`, syncId: syncId, onMouseEnter: () => setIsChartActive(true), onMouseLeave: () => setIsChartActive(false), accessibilityLayer: true, children: [_jsx(CartesianGrid, { vertical: true, horizontal: true, verticalPoints: [0], horizontalPoints: [0], stroke: theme.border, fill: theme.backgroundLevel4, strokeWidth: 1 }), _jsx(XAxis, { dataKey: "timestamp", type: "number", domain: ['dataMin', 'dataMax'], ticks: xAxisTicks, tickFormatter: formatXAxisLabelCallback, tickCount: 5, tick: {
224
224
  fill: theme.textSecondary,
225
225
  fontSize: fontSize.smaller,
226
- }, axisLine: { stroke: theme.border } }), _jsx(YAxis, { orientation: "right", allowDataOverflow: false, label: {
226
+ }, axisLine: { stroke: theme.border } }), _jsx(YAxis, { orientation: "right", label: {
227
227
  value: yAxisTitle,
228
228
  angle: 90,
229
229
  position: 'insideRight',
@@ -239,8 +239,8 @@ export function LineTimeSerieChart({ series, title, height, startingTimeStamp, i
239
239
  : [0, topValue], axisLine: { stroke: theme.border }, tick: {
240
240
  fill: theme.textSecondary,
241
241
  fontSize: fontSize.smaller,
242
- }, tickFormatter: (value) => Math.round(value).toString(), tickCount: 5, interval: 'preserveStartEnd' }), _jsx(Tooltip, { content: (props) => (_jsx(LineTimeSerieChartTooltip, { unitLabel: unitLabel, timeFormat: timeFormat, renderTooltip: renderTooltip, tooltipProps: props, isChartActive: isChartActive, hoveredValue: hoveredValue })) }), yAxisType === 'symmetrical' && (_jsx(ReferenceLine, { y: 0, stroke: theme.border })), Object.entries(groupedSeries).map(([resource, resourceSeries]) => resourceSeries.map((serie, serieIndex) => {
242
+ }, tickFormatter: (value) => new Intl.NumberFormat('fr-FR').format(value.toFixed(0)), tickCount: 5, interval: 0 }), _jsx(Tooltip, { content: (props) => (_jsx(LineTimeSerieChartTooltip, { unitLabel: unitLabel, timeFormat: timeFormat, renderTooltip: renderTooltip, tooltipProps: props, isChartActive: isChartActive, hoveredValue: hoveredValue })) }), yAxisType === 'symmetrical' && (_jsx(ReferenceLine, { y: 0, stroke: theme.border })), Object.entries(groupedSeries).map(([resource, resourceSeries]) => resourceSeries.map((serie, serieIndex) => {
243
243
  const label = serie.getTooltipLabel(serie.metricPrefix, serie.resource);
244
- return (_jsx(Line, { type: "monotone", dataKey: label, stroke: colorMapping[resource], dot: false, isAnimationActive: false, onMouseEnter: () => setHoveredValue(label), onMouseLeave: () => setHoveredValue(undefined) }, `${title}-${resource}-${serieIndex}`));
244
+ return (_jsx(Line, { type: "monotone", dataKey: label, stroke: colorMapping[resource], dot: false, isAnimationActive: false, strokeDasharray: serie.isLineDashed ? '4 4' : undefined, onMouseEnter: () => setHoveredValue(label), onMouseLeave: () => setHoveredValue(undefined) }, `${title}-${resource}-${serieIndex}`));
245
245
  }))] }) }) })] }));
246
246
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ScrollbarWrapper.component.d.ts","sourceRoot":"","sources":["../../../src/lib/components/scrollbarwrapper/ScrollbarWrapper.component.tsx"],"names":[],"mappings":"AAEA,KAAK,KAAK,GAAG;IACX,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,CAAC;AAmDF,iBAAS,gBAAgB,CAAC,EAAE,QAAQ,EAAE,EAAE,KAAK,2CAO5C;AAED,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
1
+ {"version":3,"file":"ScrollbarWrapper.component.d.ts","sourceRoot":"","sources":["../../../src/lib/components/scrollbarwrapper/ScrollbarWrapper.component.tsx"],"names":[],"mappings":"AAEA,KAAK,KAAK,GAAG;IACX,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,CAAC;AAqDF,iBAAS,gBAAgB,CAAC,EAAE,QAAQ,EAAE,EAAE,KAAK,2CAO5C;AAED,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
@@ -20,6 +20,7 @@ ${(props) => {
20
20
  width: 4px;
21
21
  height: 4px;
22
22
  min-height: 20px;
23
+ background: ${brand.border}; // fallback for gradient themes
23
24
  background: ${brand.buttonSecondary};
24
25
  border-radius: 4px;
25
26
  -webkit-border-radius: 4px;
@@ -42,6 +43,7 @@ ${(props) => {
42
43
  }
43
44
 
44
45
  // Firefox
46
+ scrollbar-color: ${brand.border} ${brand.backgroundLevel3}; // fallback for gradient themes
45
47
  scrollbar-color: ${brand.buttonSecondary} ${brand.backgroundLevel3};
46
48
  scrollbar-width: thin;
47
49
  }
@@ -1,5 +1,7 @@
1
1
  import { ChangeEvent } from 'react';
2
+ import { IconName } from '../icon/Icon.component';
2
3
  import { InputSize } from '../inputv2/inputv2';
4
+ import { CoreUITheme } from '../../style/theme';
3
5
  export type Props = {
4
6
  placeholder?: string;
5
7
  value: string;
@@ -9,6 +11,8 @@ export type Props = {
9
11
  id?: string;
10
12
  size?: InputSize;
11
13
  autoComplete?: 'on' | 'off';
14
+ searchIcon?: IconName;
15
+ searchIconColor?: keyof CoreUITheme;
12
16
  };
13
17
  declare const SearchInput: import("react").ForwardRefExoticComponent<Props & import("react").RefAttributes<unknown>>;
14
18
  export { SearchInput };
@@ -1 +1 @@
1
- {"version":3,"file":"SearchInput.component.d.ts","sourceRoot":"","sources":["../../../src/lib/components/searchinput/SearchInput.component.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAA2C,MAAM,OAAO,CAAC;AAG7E,OAAO,EAAS,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAGtD,MAAM,MAAM,KAAK,GAAG;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,CAAC,EAAE,WAAW,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IACrD,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,YAAY,CAAC,EAAE,IAAI,GAAG,KAAK,CAAC;CAC7B,CAAC;AAuCF,QAAA,MAAM,WAAW,2FAuFhB,CAAC;AAEF,OAAO,EAAE,WAAW,EAAE,CAAC"}
1
+ {"version":3,"file":"SearchInput.component.d.ts","sourceRoot":"","sources":["../../../src/lib/components/searchinput/SearchInput.component.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAA2C,MAAM,OAAO,CAAC;AAE7E,OAAO,EAAQ,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAS,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAGtD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,MAAM,MAAM,KAAK,GAAG;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,CAAC,EAAE,WAAW,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IACrD,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,YAAY,CAAC,EAAE,IAAI,GAAG,KAAK,CAAC;IAC5B,UAAU,CAAC,EAAE,QAAQ,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,WAAW,CAAC;CACrC,CAAC;AAuCF,QAAA,MAAM,WAAW,2FA0FhB,CAAC;AAEF,OAAO,EAAE,WAAW,EAAE,CAAC"}
@@ -38,7 +38,7 @@ const ClearButton = styled.div `
38
38
  right: 1px;
39
39
  top: 0px;
40
40
  `;
41
- const SearchInput = forwardRef(({ placeholder, value, onChange, onReset, disabled, id, size, autoComplete = 'on', ...rest }, forwardedRef) => {
41
+ const SearchInput = forwardRef(({ placeholder, value, onChange, onReset, disabled, id, size, autoComplete = 'on', searchIcon = 'Search', searchIconColor = 'textSecondary', ...rest }, forwardedRef) => {
42
42
  const myInputRef = useRef(null);
43
43
  const debounce = useRef(null);
44
44
  const [debouncedValue, setDebouncedValue] = useState(value);
@@ -64,7 +64,7 @@ const SearchInput = forwardRef(({ placeholder, value, onChange, onReset, disable
64
64
  onChange(e);
65
65
  }, 300);
66
66
  };
67
- return (_jsxs(SearchInputContainer, { className: "sc-searchinput", disabled: disabled, ...rest, children: [_jsx(Input, { autoComplete: autoComplete, min: '1', id: id || 'search', type: "search", "aria-label": "search", name: "search", placeholder: placeholder, value: debouncedValue, onChange: handleChange, onReset: reset, size: size, leftIcon: "Search", className: "search-box", disabled: disabled, ref: (element) => {
67
+ return (_jsxs(SearchInputContainer, { className: "sc-searchinput", disabled: disabled, ...rest, children: [_jsx(Input, { autoComplete: autoComplete, min: '1', id: id || 'search', type: "search", "aria-label": "search", name: "search", placeholder: placeholder, value: debouncedValue, onChange: handleChange, onReset: reset, size: size, leftIcon: searchIcon, leftIconColor: searchIconColor, className: "search-box", disabled: disabled, ref: (element) => {
68
68
  myInputRef.current = element;
69
69
  if (typeof forwardedRef === 'function') {
70
70
  forwardedRef(element);
@@ -6,11 +6,12 @@ type SparklineProps = {
6
6
  startingTimeStamp: number;
7
7
  sampleDuration: number;
8
8
  sampleInterval: number;
9
+ yAxisType?: 'default' | 'percentage';
9
10
  };
10
11
  /**
11
12
  * Sparkline is a simple dynamically sized area chart.
12
13
  * Used to show trends in data over time.
13
14
  */
14
- export declare function Sparkline({ serie, startingTimeStamp, sampleDuration, sampleInterval }: SparklineProps): import("react/jsx-runtime").JSX.Element;
15
+ export declare function Sparkline({ serie, startingTimeStamp, sampleDuration, sampleInterval, yAxisType }: SparklineProps): import("react/jsx-runtime").JSX.Element;
15
16
  export {};
16
17
  //# sourceMappingURL=sparkline.component.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sparkline.component.d.ts","sourceRoot":"","sources":["../../../src/lib/components/sparkline/sparkline.component.tsx"],"names":[],"mappings":"AAMA,KAAK,cAAc,GAAG;IACpB,KAAK,EAAE;QACL,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,GAAC,IAAI,CAAC,EAAE,CAAC;QAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAA;CACvB,CAAC;AAEF;;;GAGG;AACH,wBAAgB,SAAS,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,cAAc,EAAE,EAAE,cAAc,2CAiCrG"}
1
+ {"version":3,"file":"sparkline.component.d.ts","sourceRoot":"","sources":["../../../src/lib/components/sparkline/sparkline.component.tsx"],"names":[],"mappings":"AAMA,KAAK,cAAc,GAAG;IACpB,KAAK,EAAE;QACL,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,GAAC,IAAI,CAAC,EAAE,CAAC;QAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,SAAS,GAAG,YAAY,CAAC;CACtC,CAAC;AAEF;;;GAGG;AACH,wBAAgB,SAAS,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,cAAc,EAAE,SAAS,EAAE,EAAE,cAAc,2CAkChH"}
@@ -1,6 +1,6 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useMemo } from "react";
3
- import { Area, AreaChart, CartesianGrid, ResponsiveContainer } from "recharts";
3
+ import { Area, AreaChart, CartesianGrid, ResponsiveContainer, YAxis } from "recharts";
4
4
  import { useTheme } from "styled-components";
5
5
  import { chartColors } from "../../style/theme";
6
6
  import { addMissingDataPoint } from "../linetemporalchart/ChartUtil";
@@ -8,7 +8,7 @@ import { addMissingDataPoint } from "../linetemporalchart/ChartUtil";
8
8
  * Sparkline is a simple dynamically sized area chart.
9
9
  * Used to show trends in data over time.
10
10
  */
11
- export function Sparkline({ serie, startingTimeStamp, sampleDuration, sampleInterval }) {
11
+ export function Sparkline({ serie, startingTimeStamp, sampleDuration, sampleInterval, yAxisType }) {
12
12
  var _a;
13
13
  const data = useMemo(() => {
14
14
  const dataMdp = addMissingDataPoint(serie.data, startingTimeStamp, sampleDuration, sampleInterval);
@@ -16,5 +16,5 @@ export function Sparkline({ serie, startingTimeStamp, sampleDuration, sampleInte
16
16
  }, [serie.data]);
17
17
  const color = (_a = serie.color) !== null && _a !== void 0 ? _a : chartColors.lineColor1;
18
18
  const strokeGridColor = useTheme().border;
19
- return (_jsx(ResponsiveContainer, { children: _jsxs(AreaChart, { data: data, children: [_jsx("defs", { children: _jsxs("linearGradient", { id: `gradient-${color}`, x1: "0", y1: "0", x2: "0", y2: "1", children: [_jsx("stop", { offset: "0%", stopColor: color, stopOpacity: 0.7 }), _jsx("stop", { offset: "100%", stopColor: color, stopOpacity: 0.1 })] }) }), _jsx(CartesianGrid, { horizontal: false, stroke: strokeGridColor, strokeOpacity: 0.5 }), _jsx(Area, { type: "linear", dataKey: "y", stroke: color, fill: `url(#gradient-${color})`, dot: false, activeDot: false, isAnimationActive: false })] }) }));
19
+ return (_jsx(ResponsiveContainer, { children: _jsxs(AreaChart, { data: data, children: [_jsx("defs", { children: _jsxs("linearGradient", { id: `gradient-${color}`, x1: "0", y1: "0", x2: "0", y2: "1", children: [_jsx("stop", { offset: "0%", stopColor: color, stopOpacity: 0.7 }), _jsx("stop", { offset: "100%", stopColor: color, stopOpacity: 0.1 })] }) }), _jsx(CartesianGrid, { horizontal: false, stroke: strokeGridColor, strokeOpacity: 0.5 }), _jsx(Area, { type: "linear", dataKey: "y", stroke: color, fill: `url(#gradient-${color})`, dot: false, activeDot: false, isAnimationActive: false }), yAxisType === 'percentage' && _jsx(YAxis, { domain: [0, 100], hide: true })] }) }));
20
20
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@scality/core-ui",
3
- "version": "0.173.0",
3
+ "version": "0.175.0",
4
4
  "description": "Scality common React component library",
5
5
  "author": "Scality Engineering",
6
6
  "license": "SEE LICENSE IN LICENSE",
@@ -158,7 +158,7 @@ export const CustomTick = ({
158
158
  return (
159
159
  <foreignObject
160
160
  x={centerX}
161
- y={y}
161
+ y={y - 8}
162
162
  width={tickWidth}
163
163
  color={theme.textSecondary}
164
164
  overflow="visible"
@@ -185,7 +185,7 @@ export const CustomTick = ({
185
185
  );
186
186
  };
187
187
 
188
- const StyledResponsiveContainer = styled(ResponsiveContainer)`
188
+ export const StyledResponsiveContainer = styled(ResponsiveContainer)`
189
189
  // Avoid tooltip over constrained text to be cut off
190
190
  & .recharts-surface {
191
191
  overflow: visible;
@@ -304,7 +304,7 @@ export const Barchart = <T extends BarchartBars>(props: BarchartProps<T>) => {
304
304
  );
305
305
 
306
306
  return (
307
- <Stack direction="vertical" gap="r8">
307
+ <Stack direction="vertical">
308
308
  <ChartHeader
309
309
  title={title}
310
310
  secondaryTitle={secondaryTitle}
@@ -332,9 +332,13 @@ export const Barchart = <T extends BarchartBars>(props: BarchartProps<T>) => {
332
332
  barCategoryGap={type.type === 'category' ? type.gap : undefined}
333
333
  >
334
334
  <CartesianGrid
335
- vertical={false}
336
- horizontal={false}
337
- fill={theme.backgroundLevel1}
335
+ vertical={true}
336
+ horizontal={true}
337
+ verticalPoints={[0]}
338
+ horizontalPoints={[0]}
339
+ stroke={theme.border}
340
+ fill={theme.backgroundLevel4}
341
+ strokeWidth={1}
338
342
  />
339
343
  {rechartsBars.map((bar) => {
340
344
  const { fill, dataKey, stackId } = bar;
@@ -354,29 +358,21 @@ export const Barchart = <T extends BarchartBars>(props: BarchartProps<T>) => {
354
358
 
355
359
  <YAxis
356
360
  tickCount={1}
361
+ interval={0}
357
362
  unit={` ${unitLabel}`}
358
363
  domain={[0, roundReferenceValue]}
359
364
  tickFormatter={
360
365
  (value) =>
361
366
  new Intl.NumberFormat('fr-FR').format(value.toFixed(0)) // Add a space as thousand separator
362
367
  }
363
- axisLine={false}
368
+ axisLine={{ stroke: theme.border }}
364
369
  tick={{
365
370
  fill: theme.textSecondary,
366
371
  fontSize: fontSize.smaller,
367
372
  }}
368
- tickLine={false}
369
- label={{
370
- fill: theme.textSecondary,
371
- }}
372
373
  orientation="right"
373
374
  />
374
375
 
375
- <ReferenceLine
376
- y={roundReferenceValue}
377
- fill={theme.border}
378
- strokeWidth={0.5} // Reduce stroke width to make it less visible
379
- />
380
376
  <XAxis
381
377
  dataKey="category"
382
378
  tick={(props) => <CustomTick {...props} type={type} />}
@@ -384,10 +380,10 @@ export const Barchart = <T extends BarchartBars>(props: BarchartProps<T>) => {
384
380
  interval={0}
385
381
  allowDataOverflow={true}
386
382
  tickLine={{
387
- stroke: theme.textSecondary,
383
+ stroke: theme.border,
388
384
  }}
389
385
  axisLine={{
390
- stroke: theme.textSecondary,
386
+ stroke: theme.border,
391
387
  }}
392
388
  />
393
389
 
@@ -142,6 +142,7 @@ export const iconTable = {
142
142
  Mail: 'fas faEnvelope',
143
143
  ThumbsUp: 'far faThumbsUp',
144
144
  ThumbsDown: 'far faThumbsDown',
145
+ Sidebar: 'fas faColumns',
145
146
  };
146
147
 
147
148
  type IconProps = {
@@ -3,6 +3,7 @@ import styled, { css } from 'styled-components';
3
3
  import { spacing } from '../../spacing';
4
4
  import { DESCRIPTION_PREFIX, useFieldContext } from '../form/Form.component';
5
5
  import { Icon, IconName } from '../icon/Icon.component';
6
+ import { CoreUITheme } from '../../style/theme';
6
7
 
7
8
  export const convertSizeToRem = (size?: '1' | '2/3' | '1/2' | '1/3') => {
8
9
  if (size === '2/3') return '14rem';
@@ -92,9 +93,9 @@ const InputBorder = styled.div<{
92
93
  }
93
94
  `;
94
95
 
95
- const SelfCenterredIcon = styled(Icon)`
96
+ const SelfCenterredIcon = styled(Icon)<{ color: keyof CoreUITheme }>`
96
97
  align-self: center;
97
- color: ${(props) => props.theme.textSecondary};
98
+ color: ${(props) => props.theme[props.color]};
98
99
  `;
99
100
 
100
101
  export type InputSize = '1' | '2/3' | '1/2' | '1/3';
@@ -103,7 +104,9 @@ export type InputProps = {
103
104
  error?: string;
104
105
  id: string;
105
106
  leftIcon?: IconName;
107
+ leftIconColor?: keyof CoreUITheme;
106
108
  rightIcon?: IconName;
109
+ rightIconColor?: keyof CoreUITheme;
107
110
  size?: InputSize;
108
111
  } & Omit<InputHTMLAttributes<HTMLInputElement>, 'size'>;
109
112
 
@@ -114,7 +117,9 @@ export const Input = forwardRef<HTMLInputElement, InputProps>(
114
117
  disabled,
115
118
  id,
116
119
  leftIcon,
120
+ leftIconColor = 'textSecondary',
117
121
  rightIcon,
122
+ rightIconColor = 'textSecondary',
118
123
  placeholder,
119
124
  size,
120
125
  ...inputProps
@@ -139,7 +144,9 @@ export const Input = forwardRef<HTMLInputElement, InputProps>(
139
144
  disabled={!!(disabled || disabledFromFieldContext)}
140
145
  hasError={!!(error || errorFromFieldContext)}
141
146
  >
142
- {leftIcon && <SelfCenterredIcon name={leftIcon} />}
147
+ {leftIcon && (
148
+ <SelfCenterredIcon name={leftIcon} color={leftIconColor} />
149
+ )}
143
150
  <StyledInput
144
151
  ref={ref}
145
152
  disabled={disabled || disabledFromFieldContext}
@@ -150,7 +157,9 @@ export const Input = forwardRef<HTMLInputElement, InputProps>(
150
157
  {...inputProps}
151
158
  placeholder={placeholder}
152
159
  />
153
- {rightIcon && <SelfCenterredIcon name={rightIcon} />}
160
+ {rightIcon && (
161
+ <SelfCenterredIcon name={rightIcon} color={rightIconColor} />
162
+ )}
154
163
  </InputContainer>
155
164
  </InputBorder>
156
165
  );
@@ -3,7 +3,6 @@ import {
3
3
  Line,
4
4
  LineChart,
5
5
  ReferenceLine,
6
- ResponsiveContainer,
7
6
  Tooltip,
8
7
  TooltipContentProps,
9
8
  XAxis,
@@ -32,12 +31,12 @@ import {
32
31
  ChartTooltipItemsContainer,
33
32
  } from '../charttooltip/ChartTooltip';
34
33
  import { LegendShape } from '../chartlegend/ChartLegend';
34
+ import { StyledResponsiveContainer } from '../barchartv2/Barchart.component';
35
35
 
36
36
  const LineTemporalChartWrapper = styled.div`
37
37
  display: flex;
38
38
  flex-direction: column;
39
39
  justify-content: flex-start;
40
- flex: 1;
41
40
  `;
42
41
 
43
42
  const ChartHeader = styled.div`
@@ -467,7 +466,7 @@ export function LineTimeSerieChart({
467
466
  onFocusCapture={() => setIsChartActive(true)}
468
467
  onBlurCapture={() => setIsChartActive(false)}
469
468
  >
470
- <ResponsiveContainer width="100%" height={height}>
469
+ <StyledResponsiveContainer width="100%" height={height}>
471
470
  <LineChart
472
471
  data={rechartsData}
473
472
  ref={chartRef}
@@ -476,6 +475,7 @@ export function LineTimeSerieChart({
476
475
  syncId={syncId}
477
476
  onMouseEnter={() => setIsChartActive(true)}
478
477
  onMouseLeave={() => setIsChartActive(false)}
478
+ accessibilityLayer
479
479
  >
480
480
  <CartesianGrid
481
481
  vertical={true}
@@ -501,7 +501,6 @@ export function LineTimeSerieChart({
501
501
  />
502
502
  <YAxis
503
503
  orientation="right"
504
- allowDataOverflow={false}
505
504
  label={{
506
505
  value: yAxisTitle,
507
506
  angle: 90,
@@ -524,9 +523,11 @@ export function LineTimeSerieChart({
524
523
  fill: theme.textSecondary,
525
524
  fontSize: fontSize.smaller,
526
525
  }}
527
- tickFormatter={(value) => Math.round(value).toString()}
526
+ tickFormatter={(value) =>
527
+ new Intl.NumberFormat('fr-FR').format(value.toFixed(0))
528
+ }
528
529
  tickCount={5}
529
- interval={'preserveStartEnd'}
530
+ interval={0}
530
531
  />
531
532
  <Tooltip
532
533
  content={(props: TooltipContentProps<number, string>) => (
@@ -560,6 +561,7 @@ export function LineTimeSerieChart({
560
561
  stroke={colorMapping[resource]}
561
562
  dot={false}
562
563
  isAnimationActive={false}
564
+ strokeDasharray={serie.isLineDashed ? '4 4' : undefined}
563
565
  onMouseEnter={() => setHoveredValue(label)}
564
566
  onMouseLeave={() => setHoveredValue(undefined)}
565
567
  />
@@ -567,7 +569,7 @@ export function LineTimeSerieChart({
567
569
  }),
568
570
  )}
569
571
  </LineChart>
570
- </ResponsiveContainer>
572
+ </StyledResponsiveContainer>
571
573
  </div>
572
574
  </LineTemporalChartWrapper>
573
575
  );
@@ -1,4 +1,4 @@
1
- import styled, { createGlobalStyle, css } from 'styled-components';
1
+ import { createGlobalStyle, css } from 'styled-components';
2
2
 
3
3
  type Props = {
4
4
  children: React.ReactNode;
@@ -24,6 +24,7 @@ ${(props) => {
24
24
  width: 4px;
25
25
  height: 4px;
26
26
  min-height: 20px;
27
+ background: ${brand.border}; // fallback for gradient themes
27
28
  background: ${brand.buttonSecondary};
28
29
  border-radius: 4px;
29
30
  -webkit-border-radius: 4px;
@@ -46,6 +47,7 @@ ${(props) => {
46
47
  }
47
48
 
48
49
  // Firefox
50
+ scrollbar-color: ${brand.border} ${brand.backgroundLevel3}; // fallback for gradient themes
49
51
  scrollbar-color: ${brand.buttonSecondary} ${brand.backgroundLevel3};
50
52
  scrollbar-width: thin;
51
53
  }
@@ -1,9 +1,11 @@
1
1
  import { ChangeEvent, forwardRef, useEffect, useRef, useState } from 'react';
2
2
  import styled, { css } from 'styled-components';
3
- import { Icon } from '../icon/Icon.component';
3
+ import { Icon, IconName } from '../icon/Icon.component';
4
4
  import { Input, InputSize } from '../inputv2/inputv2';
5
5
  import { Button } from '../buttonv2/Buttonv2.component';
6
6
  import { spacing } from '../../spacing';
7
+ import { CoreUITheme } from '../../style/theme';
8
+
7
9
  export type Props = {
8
10
  placeholder?: string;
9
11
  value: string;
@@ -13,6 +15,8 @@ export type Props = {
13
15
  id?: string;
14
16
  size?: InputSize;
15
17
  autoComplete?: 'on' | 'off';
18
+ searchIcon?: IconName;
19
+ searchIconColor?: keyof CoreUITheme;
16
20
  };
17
21
  const SearchInputContainer = styled.div<{
18
22
  docked?: boolean;
@@ -63,6 +67,8 @@ const SearchInput = forwardRef(
63
67
  id,
64
68
  size,
65
69
  autoComplete = 'on',
70
+ searchIcon = 'Search',
71
+ searchIconColor = 'textSecondary',
66
72
  ...rest
67
73
  }: Props,
68
74
  forwardedRef,
@@ -115,7 +121,8 @@ const SearchInput = forwardRef(
115
121
  onChange={handleChange}
116
122
  onReset={reset}
117
123
  size={size}
118
- leftIcon="Search"
124
+ leftIcon={searchIcon}
125
+ leftIconColor={searchIconColor}
119
126
  className="search-box"
120
127
  disabled={disabled}
121
128
  ref={(element) => {
@@ -1,5 +1,5 @@
1
1
  import { useMemo } from "react";
2
- import { Area, AreaChart, CartesianGrid, ResponsiveContainer } from "recharts";
2
+ import { Area, AreaChart, CartesianGrid, ResponsiveContainer, YAxis } from "recharts";
3
3
  import { useTheme } from "styled-components";
4
4
  import { chartColors } from "../../style/theme";
5
5
  import { addMissingDataPoint } from "../linetemporalchart/ChartUtil";
@@ -11,14 +11,15 @@ type SparklineProps = {
11
11
  },
12
12
  startingTimeStamp: number,
13
13
  sampleDuration: number,
14
- sampleInterval: number
14
+ sampleInterval: number,
15
+ yAxisType?: 'default' | 'percentage',
15
16
  };
16
17
 
17
18
  /**
18
19
  * Sparkline is a simple dynamically sized area chart.
19
20
  * Used to show trends in data over time.
20
21
  */
21
- export function Sparkline({ serie, startingTimeStamp, sampleDuration, sampleInterval }: SparklineProps) {
22
+ export function Sparkline({ serie, startingTimeStamp, sampleDuration, sampleInterval, yAxisType }: SparklineProps) {
22
23
  const data = useMemo(
23
24
  () => {
24
25
  const dataMdp = addMissingDataPoint(serie.data, startingTimeStamp, sampleDuration, sampleInterval);
@@ -48,6 +49,7 @@ export function Sparkline({ serie, startingTimeStamp, sampleDuration, sampleInte
48
49
  activeDot={false}
49
50
  isAnimationActive={false}
50
51
  />
52
+ {yAxisType === 'percentage' && <YAxis domain={[0, 100]} hide />}
51
53
  </AreaChart>
52
54
  </ResponsiveContainer>
53
55
  );
@@ -97,3 +97,77 @@ export const Debounce = {
97
97
  );
98
98
  },
99
99
  };
100
+
101
+ export const WithCustomIconColor = {
102
+ render: (args) => {
103
+ const [value, setValue] = useState('');
104
+ return (
105
+ <Wrapper>
106
+ <Title>SearchInput with Custom Icon Colors</Title>
107
+ <div
108
+ style={{
109
+ width: '250px',
110
+ marginBottom: '20px',
111
+ }}
112
+ >
113
+ <SearchInput
114
+ placeholder="Primary color..."
115
+ value={value}
116
+ onChange={(e) => {
117
+ setValue(e.target.value);
118
+ action('on input change')(e.target.value);
119
+ }}
120
+ onReset={() => {
121
+ setValue('');
122
+ action('on input reset')();
123
+ }}
124
+ searchIconColor="infoPrimary"
125
+ {...args}
126
+ />
127
+ </div>
128
+ <div
129
+ style={{
130
+ width: '250px',
131
+ marginBottom: '20px',
132
+ }}
133
+ >
134
+ <SearchInput
135
+ placeholder="Success color..."
136
+ value={value}
137
+ onChange={(e) => {
138
+ setValue(e.target.value);
139
+ action('on input change')(e.target.value);
140
+ }}
141
+ onReset={() => {
142
+ setValue('');
143
+ action('on input reset')();
144
+ }}
145
+ searchIconColor="statusHealthy"
146
+ {...args}
147
+ />
148
+ </div>
149
+ <div
150
+ style={{
151
+ width: '250px',
152
+ marginBottom: '20px',
153
+ }}
154
+ >
155
+ <SearchInput
156
+ placeholder="Warning color..."
157
+ value={value}
158
+ onChange={(e) => {
159
+ setValue(e.target.value);
160
+ action('on input change')(e.target.value);
161
+ }}
162
+ onReset={() => {
163
+ setValue('');
164
+ action('on input reset')();
165
+ }}
166
+ searchIconColor="statusWarning"
167
+ {...args}
168
+ />
169
+ </div>
170
+ </Wrapper>
171
+ );
172
+ },
173
+ };
@@ -166,3 +166,22 @@ export const FlatWithMissingData: Story = {
166
166
  },
167
167
  },
168
168
  };
169
+
170
+ export const PercentageYAxis: Story = {
171
+ args: {
172
+ serie: {
173
+ data: trendingUpData,
174
+ },
175
+ startingTimeStamp: 1740405600,
176
+ sampleDuration: 7200,
177
+ sampleInterval: 720,
178
+ yAxisType: 'percentage',
179
+ },
180
+ parameters: {
181
+ docs: {
182
+ description: {
183
+ story: 'Sparkline with Y-axis range is set as [0-100].',
184
+ },
185
+ },
186
+ },
187
+ };
package/stories/icons.mdx DELETED
@@ -1,115 +0,0 @@
1
- import ImageFile from './pictures/icon-design-system.png';
2
- import { Meta } from '@storybook/addon-docs';
3
- import { Icon } from '../src/lib/components/icon/Icon.component';
4
- import { QueryClientProvider, QueryClient } from 'react-query';
5
-
6
- <Meta title="Style/Icons" />
7
-
8
- # Icons
9
-
10
- ## Style
11
-
12
- Icon style should be consistent.
13
- The style is rather outlined.
14
- If two options are possible when choosing an icon, choose the simpler one.
15
-
16
- <img src={ImageFile} />
17
-
18
- ## Size
19
-
20
- When next to a text, the icon and the text should have the same size.
21
-
22
- ## Icon set table
23
-
24
- | Icons | Name | Category | Origin | FontAwesome name | FontAwesome code | Icon Style & Prefix | FA free | Use case |
25
- | :----------------------------------------------------------------------------------------------------------: | -------------------- | ------------- | ------ | -------------------- | ----------------------------------------------- | ------------------- | ------- | ------------------------------------------------------- |
26
- | <i className="fas fa-wallet fa-3x" /> | Account | Entities | FA | wallet | `<i className="fas fa-wallet" />` | solid Style (fas) | yes | Hero |
27
- | <i className="fas fa-network-wired fa-3x" /> | Backend | Entities | FA | network-wired | `<i className="fas fa-network-wired" />` | solid Style (fas) | yes | Hero |
28
- | <i className="fas fa-tape fa-3x" /> | Tape | Entities | FA | tape | `<i className="fas fa-tape" />` | solid Style (fas) | yes | Hero |
29
- | <i className="fas fa-server fa-3x" /> | Node-backend | Entities | FA | server | `<i className="fas fa-server" />` | solid Style (fas) | yes | Hero |
30
- | <i className="fas fa-hdd fa-3x" /> | Volume-backend | Entities | FA | hdd | `<i className="fas fa-hdd" />` | solid Style (fas) | yes | Hero |
31
- | <i className="fas fa-database fa-3x" /> | Node-ptf | Entities | FA | database | `<i className="fas fa-database" />` | solid Style (fas) | yes | Hero |
32
- | <i className="fas fa-compact-disc fa-3x" /> | Volume-ptf | Entities | FA | compact-disc | `<i className="fas fa-compact-disc" />` | solid Style (fas) | yes | Hero |
33
- | <i className="fas fa-project-diagram fa-3x" /> | Network | Entities | FA | project-diagram | `<i className="fas fa-project-diagram" />` | solid Style (fas) | yes | Hero |
34
- | <i className="fas fa-glass-whiskey fa-3x" /> | Bucket | Entities | FA | glass-whiskey | `<i className="fas fa-glass-whiskey" />` | solid Style (fas) | yes | Hero |
35
- | <i className="fas fa-cloud fa-3x" /> | Cloud-backend | Entities | FA | cloud | `<i className="fas fa-cloud" />` | solid Style (fas) | yes | Hero |
36
- | <i className="fas fa-warehouse fa-3x" /> | Datacenter | Entities | FA | warehouse | `<i className="fas fa-warehouse" />` | solid Style (fas) | yes | Hero |
37
- | <i className="fas fa-user-cog fa-3x" /> | User | Menu | FA | user-cog | `<i className="fas fa-user-cog" />` | solid Style (fas) | yes | Top navbar |
38
- | <i className="fas fa-bell fa-3x" /> | Alert | Menu | FA | bell | `<i className="fas fa-bell" />` | solid Style (fas) | yes | |
39
- | <i className="fas fa-bars fa-3x" /> | Lat-menu | Menu | FA | bars | `<i className="fas fa-bars" />` | solid Style (fas) | yes | Expanded version of lat navbar |
40
- | <i className="fas fa-desktop fa-3x" /> | Dashboard | Menu | FA | desktop | `<i className="fas fa-desktop" />` | solid Style (fas) | yes | |
41
- | <i className="fas fa-stopwatch fa-3x" /> | Expiration | Workflow | FA | stopwatch | `<i className="fas fa-stopwatch" />` | solid Style (fas) | yes | |
42
- | <i className="fas fa-coins fa-3x" /> | Replication | Workflow | FA | coins | `<i className="fas fa-coins" />` | solid Style (fas) | yes | |
43
- | <i className="fas fa-rocket fa-3x" /> | Transition | Workflow | FA | rocket | `<i className="fas fa-rocket" />` | solid Style (fas) | yes | |
44
- | <i className="fas fa-reply fa-3x" /> | Discovery | Workflow | FA | reply | `<i className="fas fa-reply" />` | solid Style (fas) | yes | |
45
- | <i className="fas fa-chart-line fa-3x" /> | Metrics | Action icon | FA | chart-line | `<i className="fas fa-chart-line" />` | solid Style (fas) | yes | Last column of Tables |
46
- | <i className="far fa-file-alt fa-3x" /> | Logs | Action icon | FA | file-alt | `<i className="far fa-file-alt" />` | regular Style (far) | yes | |
47
- | <i className="fas fa-edit fa-3x" /> | Edit | Action icon | FA | edit | `<i className="fas fa-edit" />` | solid Style (fas) | yes | Field editable |
48
- | <i className="fas fa-plus fa-3x" /> | Create-add | Button-action | FA | plus | `<i className="fas fa-plus" />` | solid Style (fas) | yes | New entity creation |
49
- | <i className="fas fa-trash fa-3x" /> | Delete | Button-action | FA | trash | `<i className="fas fa-trash" />` | solid Style (fas) | yes | Entity deletion |
50
- | <i className="fas fa-save fa-3x" /> | Save | Button-action | FA | save | `<i className="fas fa-save" />` | solid Style (fas) | yes | Save changes on an entity |
51
- | <i className="fas fa-external-link-alt fa-3x" /> | External-link | Button-action | FA | external-link-alt | `<i className="fas fa-external-link-alt" />` | solid Style (fas) | yes | Open an external link |
52
- | <i className="fas fa-times fa-3x" /> | Close | Button-action | FA | times | `<i className="fas fa-times" />` | solid Style (fas) | yes | Close a window/modal |
53
- | <i className="fas fa-caret-down fa-3x" /> | Dropdown-down | Button-action | FA | caret-down | `<i className="fas fa-caret-down" />` | solid Style (fas) | yes | Expand a drop-down |
54
- | <i className="fas fa-caret-up fa-3x" /> | Dropdown-up | Button-action | FA | caret-up | `<i className="fas fa-caret-up" />` | solid Style (fas) | yes | Dropdown expanded |
55
- | <i className="fas fa-search fa-3x" /> | Search | Button-action | FA | search | `<i className="fas fa-search" />` | solid Style (fas) | yes | Search bar |
56
- | <i className="fas fa-ellipsis-v fa-3x" /> | More | Button-action | FA | ellipsis-v | `<i className="fas fa-ellipsis-v" />` | solid Style (fas) | yes | End of tables (not enough space to display all actions) |
57
- | <i className="fas fa-question-circle fa-3x" /> | Info | Button-action | FA | question-circle | `<i className="fas fa-question-circle" />` | solid Style (fas) | yes | Display tooltip info AND "About" (top menu) |
58
- | <i className="fas fa-sync fa-3x" /> | Sync | Button-action | FA | sync | `<i className="fas fa-sync" />` | solid Style (fas) | yes | Refresh the metrics |
59
- | <i className="fas fa-file-export fa-3x" /> | Export | Button-action | FA | file-export | `<i className="fas fa-file-export" />` | solid Style (fas) | yes | Export the data in predefined format |
60
- | <i className="far fa-clone fa-3x" /> | Copy | Button-action | FA | clone | `<i className="far fa-clone" />` | regular Style (far) | yes | Small icon next to a field that can be copied |
61
- | <i className="fas fa-file-upload fa-3x" /> | Upload | Button-action | FA | file-upload | `<i className="fas fa-file-upload" />` | solid Style (fas) | yes | Upload object |
62
- | <i className="fas fa-plus-square fa-3x" /> | Add-plus | Button-action | FA | plus-square | `<i className="fas fa-plus-square" />` | solid Style (fas) | yes | Add an item in a list |
63
- | <i className="fas fa-minus-square fa-3x" /> | Remove-minus | Button-action | FA | minus-square | `<i className="fas fa-minus-square" />` | solid Style (fas) | yes | Remove an item in a list |
64
- | <i className="fas fa-sort fa-3x" /> | Sort | Table | FA | sort | `<i className="fas fa-sort" />` | solid Style (fas) | yes | Sort |
65
- | <i className="fas fa-sort-up fa-3x" /> | Sort-up | Table | FA | sort-up | `<i className="fas fa-sort-up" />` | solid Style (fas) | yes | Sort |
66
- | <i className="fas fa-sort-down fa-3x" /> | Sort-down | Table | FA | sort-down | `<i className="fas fa-sort-down" />` | solid Style (fas) | yes | Sort |
67
- | <i className="fas fa-calendar-week fa-3x" /> | Calendar | Pill | FA | calendar-week | `<i className="fas fa-calendar-week" />` | solid Style (fas) | yes | Metric over a period |
68
- | <i className="fas fa-arrow-up fa-3x" /> | Arrow-up | Pill | FA | arrow-up | `<i className="fas fa-arrow-up" />` | solid Style (fas) | yes | Show an increase in trend |
69
- | <i className="fas fa-arrow-down fa-3x" /> | Arrow-down | Pill | FA | arrow-down | `<i className="fas fa-arrow-down" />` | solid Style (fas) | yes | Show a decrease in trend |
70
- | <i className="far fa-folder fa-3x" /> | Folder | Browsing | FA | folder | `<i className="far fa-folder" />` | regular Style (far) | yes | Browsing |
71
- | <i className="far fa-file fa-3x" /> | File | Browsing | FA | file | `<i className="far fa-file" />` | regular Style (far) | yes | Browsing |
72
- | <i className="fas fa-ban fa-3x" /> | Deletion-marker | Browsing | FA | ban | `<i className="fas fa-ban" />` | solid Style (fas) | yes | Browsing - deletion markers on objects |
73
- | <i className="fas fa-info-circle fa-3x" /> | Info-circle | Status | FA | info-circle | `<i className="fas fa-info-circle" />` | solid Style (fas) | yes | Grey empty state-status (charts, tables) |
74
- | <i className="fas fa-exclamation-triangle fa-3x" /> | Exclamation-triangle | Status | FA | exclamation-triangle | `<i className="fas fa-exclamation-triangle" />` | solid Style (fas) | yes | Yellow warning status (alerts list) |
75
- | <i className="fas fa-exclamation-circle fa-3x" /> | Exclamation-circle | Status | FA | exclamation-circle | `<i className="fas fa-exclamation-circle" />` | solid Style (fas) | yes | Red critical alerts |
76
- | <i className="fas fa-check fa-3x" /> | Check | Status | FA | check | `<i className="fas fa-check" />` | solid Style (fas) | yes | Healthy status AND successful operation |
77
- | <i className="fas fa-shield-alt fa-3x" /> | Protected | Status | FA | shield-alt | `<i className="fas fa-shield-alt" />` | solid Style (fas) | yes | Extra protection status |
78
- | <i className="fas fa-bars fa-3x" /> | Bars | Menu | FA | bars | `<i className="fas fa-bars" />` | solid Style (fas) | yes | Expand/collapse the lat navbar |
79
- | <i className="fas fa-link fa-3x" /> | Bound | Status | FA | link | `<i className="fas fa-link" />` | solid Style (fas) | yes | Bound status |
80
- | <i className="fas fa-unlink fa-3x" /> | Unbound | Status | FA | unlink | `<i className="fas fa-unlink" />` | solid Style (fas) | yes | Unbound status |
81
- | <i className="fas fa-exclamation fa-3x" /> | Exclamation | Status | FA | exclamation | `<i className="fas fa-exclamation" />` | solid Style (fas) | yes | Issue status |
82
- | <i className="fas fa-minus fa-3x" /> | Hyphen | Status | FA | minus | `<i class="fas fa-minus" />` | solid Style (fas) | yes | No status, in tables |
83
- | <i className="fas fa-times-circle fa-3x" /> | Remove-circle | Action | FA | times-circle | `<i class="fas fa-times-circle" />` | solid Style (fas) | yes | Remove a criteria in a search |
84
- | <i className="fas fa-file-upload fa-3x" /> | Object-upload | Action | FA | file-upload | `<i class="fas fa-file-upload" />` | solid Style (fas) | yes | When uploading an object |
85
- | <i className="fas fa-chevron-left fa-3x" /> | Chevron-left | Navigation | FA | chevron-left | `<i className="fas fa-chevron-left" />` | solid Style (fas) | yes | Expand tabs |
86
- | <i className="fas fa-chevron-right fa-3x" /> | Chevron-right | Navigation | FA | chevron-right | `<i className="fas fa-chevron-right" />` | solid Style (fas) | yes | Expand tables |
87
- | <i className="fas fa-angle-double-right fa-3x" /> | Angle-double-right | Status | FA | angle-double-right | `<i className="fas fa-angle-double-right" />` | solid Style (fas) | yes | Show an increase "From 1 value to another one" |
88
- | <i className="fas fa-language fa-3x" /> | Language | Menu | FA | language | `<i className="fas fa-language" />` | solid Style (fas) | yes | Select the language in the top menu |
89
- | <i className="fas fa-palette fa-3x" /> | Theme | Menu | FA | palette | `<i className="fas fa-palette" />` | solid Style (fas) | yes | Select the theme in the top menu |
90
- | <i className="fas fa-clipboard-list fa-3x" /> | Documentation | Menu | FA | clipboard-list | `<i className="fas fa-clipboard-list" />` | solid Style (fas) | yes | Access to the documentation link |
91
- | <i className="fas fa-comments fa-3x" /> | Support | Menu | FA | comments | `<i className="fas fa-comments" />` | solid Style (fas) | yes | Access to the support link |
92
- | <i className="fas fa-file-contract fa-3x" /> | EULA | Menu | FA | file-contract | `<i className="fas fa-file-contract" />` | solid Style (fas) | yes | Access to the "Terms of use" link |
93
- | <i className="fas fa-sign-out-alt fa-3x" /> | Log-out | Menu | FA | sign-out-alt | `<i className="fas fa-sign-out-alt" />` | solid Style (fas) | yes | Log out action |
94
- | <i className="far fa-hourglass fa-3x" /> | Hourglass | Status | FA | hourglass | `<i className="far fa-hourglass" />` | regular Style (far) | ? | Workflow delayed |
95
- | <i className="fas fa-pause fa-3x" /> | Pause | Status | FA | pause | `<i className="fas fa-pause" />` | solid Style (fas) | yes | Workflow paused |
96
- | <i className="fas fa-stop fa-3x" /> | Stop | Status | FA | stop | `<i className="fas fa-stop" />` | solid Style (fas) | yes | Upload stop |
97
- | <i className="fas fa-play fa-3x" /> | Play | Status | FA | play | `<i className="fas fa-play" />` | solid Style (fas) | yes | Upload play |
98
- | <i className="fas fa-level-up-alt fa-3x" /> | Upgrade | Button-action | FA | level-up-alt | `<i className="fas fa-level-up-alt" />` | solid Style (fas) | yes | Upgrade version |
99
- | <i className="fas fa-expand-alt fa-3x" /> | Expansion | Button-action | FA | expand-alt | `<i className="fas fa-expand-alt" />` | solid Style (fas) | yes | Expand with no rebalancing |
100
- | <i className="fas fa-balance-scale fa-3x" /> | Rebalance | Button-action | FA | balance-scale | `<i className="fas fa-balance-scale" />` | solid Style (fas) | yes | Expand with rebalancing |
101
- | <i className="fas fa-hard-hat fa-3x" /> | Maintenance | Button-action | FA | hard-hat | `<i className="fas fa-hard-hat" />` | solid Style (fas) | yes | Switch to "maintenance mode" |
102
- | <i className="fas fa-exchange-alt fa-3x" /> | Change-erasure | Button-action | FA | exchange-alt | `<i className="fas fa-exchange-alt" />` | solid Style (fas) | yes | Change erasure code level |
103
- | <i className="fas fa-circle fa-3x" /> | Circle-health | Status | FA | circle | `<i className="fas-circle" />` | solid Style (fas) | yes | Display status (Healthy, Warning, Critical) |
104
- | <i className="far fa-circle fa-3x" /> | Circle-empty | Status | FA | circle | `<i className="far-circle" />` | regular Style (far) | yes | Display empty health status |
105
- | <i className="fas fa-toolbox fa-3x" /> | Services | Status | FA | toolbox | `<i className="fas fa-toolbox" />` | solid Style (fas) | yes | Status icon for Services |
106
- | <i className="fas fa-cubes fa-3x" /> | Data-services | Hero | FA | cubes | `<i className="fas fa-cubes" />` | solid Style (fas) | yes | Hero icon for Data-services |
107
- | <i className="fas fa-arrow-right fa-3x" /> | Arrow-right | Navigation | FA | arrow-right | `<i className="fas fa-right-up" />` | solid Style (fas) | yes | Button as "Continue", next step |
108
- | <i className="fas fa-arrow-left fa-3x" /> | Arrow-left | Navigation | FA | arrow-left | `<i className="fas fa-arrow-left" />` | solid Style (fas) | yes | Go back to a previous status/page |
109
- | <i className="fas fa-certificate fa-3x" /> | Certificate | Entities | FA | certificate | `<i className="fas fa-certificate" />` | solid Style (fas) | yes | Certificate |
110
- | <i className="fas fa-download fa-3x" /> | Download | Action icon | FA | download | `<i className="fas fa-download" />` | solid Style (fas) | yes | Download |
111
- | <i className="fas fa-id-card fa-3x" /> | ID-card | Entities | FA | id-card | `<i className="fas fa-id-card"/>` | solid Style (fas) | yes | Identity |
112
- | <i className="fas fa-cog fa-3x" /> | Setting | Action | FA | cog | `<i className="fas fa-cog"/>` | solid Style (fas) | yes | Global Settings |
113
- | <i className="fas fa-ring fa-3x" /> | Ring | Entities | FA | ring | `<i className="fas fa-ring"/>` | solid Style (fas) | yes | Ring |
114
- | <QueryClientProvider client={new QueryClient()}><Icon name="Remote-user" size="3x" /></QueryClientProvider> | Remote-user | Entities | Custom | - | - | custom icon | - | Remote user in Identity UI |
115
- | <QueryClientProvider client={new QueryClient()}><Icon name="Remote-group" size="3x" /></QueryClientProvider> | Remote-group | Entities | Custom | - | - | custom icon | - | Remote group in Identity UI |