@spaced-out/ui-design-system 0.3.8-beta.0 → 0.3.9

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/CHANGELOG.md CHANGED
@@ -2,6 +2,15 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
4
4
 
5
+ ### [0.3.9](https://github.com/spaced-out/ui-design-system/compare/v0.3.8...v0.3.9) (2024-12-17)
6
+
7
+
8
+ ### Features
9
+
10
+ * [GDS-473] introduces withBorder and labelMap props in the score-bar component. ([#297](https://github.com/spaced-out/ui-design-system/issues/297)) ([9c741d2](https://github.com/spaced-out/ui-design-system/commit/9c741d285aa91f97f1afb35bc4e9379d3bf09d0b))
11
+
12
+ ### [0.3.8](https://github.com/spaced-out/ui-design-system/compare/v0.3.8-beta.0...v0.3.8) (2024-12-13)
13
+
5
14
  ### [0.3.8-beta.0](https://github.com/spaced-out/ui-design-system/compare/v0.3.7...v0.3.8-beta.0) (2024-12-12)
6
15
 
7
16
 
@@ -261,23 +261,23 @@
261
261
  "score-bar": {
262
262
  "level": {
263
263
  "1": {
264
- "value": "{baseColor.red.400.value}"
264
+ "value": "{baseColor.gray.400.value}"
265
265
  },
266
266
  "2": {
267
- "value": "{baseColor.orange.400.value}"
267
+ "value": "{baseColor.red.400.value}"
268
268
  },
269
269
  "3": {
270
- "value": "{baseColor.blue.400.value}"
270
+ "value": "{baseColor.orange.400.value}"
271
271
  },
272
272
  "4": {
273
- "value": "{baseColor.green.300.value}"
273
+ "value": "{baseColor.blue.400.value}"
274
274
  },
275
275
  "5": {
276
- "value": "{baseColor.green.700.value}"
276
+ "value": "{baseColor.green.400.value}"
277
277
  }
278
278
  },
279
279
  "inactive": {
280
- "value": "{baseColor.indigo.200.value}"
280
+ "value": "{baseColor.gray.200.value}"
281
281
  }
282
282
  },
283
283
  "gray.lightest": {
@@ -11,6 +11,7 @@ var _color = require("../../styles/variables/_color.js");
11
11
  var _size = require("../../styles/variables/_size");
12
12
  var _classify = require("../../utils/classify");
13
13
  var _scoreBar = require("../../utils/score-bar");
14
+ var _Text = require("../Text");
14
15
  var _ScoreBarModule = _interopRequireDefault(require("./ScoreBar.module.css"));
15
16
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
16
17
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
@@ -37,13 +38,18 @@ const ScoreBar = /*#__PURE__*/React.forwardRef((_ref, ref) => {
37
38
  colorMap = DEFAULT_COLOR_MAP,
38
39
  totalBars = DEFAULT_BARS_COUNT,
39
40
  direction = 'vertical',
40
- classNames
41
+ classNames,
42
+ withBorder = false,
43
+ labelMap
41
44
  } = _ref;
42
45
  (0, _invariant.default)(totalBars > 0, JSON.stringify(_scoreBar.SCORE_BAR_ERRORS.INVALID_BAR_COUNT));
46
+ const activeLabel = (0, _scoreBar.getLabelByScorePercentage)(score, totalBars, labelMap);
43
47
  return /*#__PURE__*/React.createElement("div", {
44
48
  ref: ref,
45
49
  "data-testid": "ScoreBar",
46
- className: (0, _classify.classify)(_ScoreBarModule.default.scoreBarWrapper, classNames?.wrapper)
50
+ className: (0, _classify.classify)(_ScoreBarModule.default.scoreBarWrapper, {
51
+ [_ScoreBarModule.default.scoreBarBorder]: withBorder
52
+ }, classNames?.wrapper)
47
53
  }, /*#__PURE__*/React.createElement("div", {
48
54
  className: (0, _classify.classify)(_ScoreBarModule.default.scoreBarContainer, classNames?.container),
49
55
  style: {
@@ -59,6 +65,8 @@ const ScoreBar = /*#__PURE__*/React.forwardRef((_ref, ref) => {
59
65
  '--width': direction === Direction.vertical ? _size.size18 : _size.size2
60
66
  },
61
67
  key: count
62
- }))));
68
+ }))), activeLabel && /*#__PURE__*/React.createElement(_Text.SubTitleExtraSmall, {
69
+ className: (0, _classify.classify)(_ScoreBarModule.default.scoreBarLabel, classNames?.label)
70
+ }, activeLabel));
63
71
  });
64
72
  exports.ScoreBar = ScoreBar;
@@ -16,8 +16,10 @@ import {size2, size18} from '../../styles/variables/_size';
16
16
  import {classify} from '../../utils/classify';
17
17
  import {
18
18
  getColorByScorePercentage,
19
+ getLabelByScorePercentage,
19
20
  SCORE_BAR_ERRORS,
20
21
  } from '../../utils/score-bar';
22
+ import {SubTitleExtraSmall} from '../Text';
21
23
 
22
24
  import css from './ScoreBar.module.css';
23
25
 
@@ -31,24 +33,24 @@ export type ClassNames = $ReadOnly<{
31
33
  container?: string,
32
34
  wrapper?: string,
33
35
  bar?: string,
36
+ label?: string,
34
37
  }>;
35
38
 
36
39
  export type ScoreBarDirection = $Values<typeof Direction>;
37
40
  export type ScoreBarColorMap = $ReadOnly<{
38
- inactive: string, // percentage > score
39
- '100': string, // score > 80%
40
- '80': string, // score > 60% and score <= %80
41
- '60': string, // score > 40% and score <= %60
42
- '40': string, // score > 20% and score <= 40%
43
- '20': string, // score > 0% and score <= 20%
41
+ [key: string]: string,
44
42
  }>;
45
43
 
44
+ export type ScoreBarLabelMap = ScoreBarColorMap;
45
+
46
46
  export type ScoreBarProps = {
47
47
  classNames?: ClassNames,
48
48
  direction?: ScoreBarDirection,
49
49
  colorMap?: ScoreBarColorMap,
50
+ labelMap?: ScoreBarLabelMap,
50
51
  totalBars?: number,
51
52
  score?: number,
53
+ withBorder?: boolean,
52
54
  };
53
55
 
54
56
  const DEFAULT_BARS_COUNT = 5;
@@ -70,6 +72,8 @@ export const ScoreBar: React$AbstractComponent<ScoreBarProps, HTMLDivElement> =
70
72
  totalBars = DEFAULT_BARS_COUNT,
71
73
  direction = 'vertical',
72
74
  classNames,
75
+ withBorder = false,
76
+ labelMap,
73
77
  }: ScoreBarProps,
74
78
  ref,
75
79
  ): React.Node => {
@@ -78,11 +82,17 @@ export const ScoreBar: React$AbstractComponent<ScoreBarProps, HTMLDivElement> =
78
82
  JSON.stringify(SCORE_BAR_ERRORS.INVALID_BAR_COUNT),
79
83
  );
80
84
 
85
+ const activeLabel = getLabelByScorePercentage(score, totalBars, labelMap);
86
+
81
87
  return (
82
88
  <div
83
89
  ref={ref}
84
90
  data-testid="ScoreBar"
85
- className={classify(css.scoreBarWrapper, classNames?.wrapper)}
91
+ className={classify(
92
+ css.scoreBarWrapper,
93
+ {[css.scoreBarBorder]: withBorder},
94
+ classNames?.wrapper,
95
+ )}
86
96
  >
87
97
  <div
88
98
  className={classify(css.scoreBarContainer, classNames?.container)}
@@ -111,6 +121,14 @@ export const ScoreBar: React$AbstractComponent<ScoreBarProps, HTMLDivElement> =
111
121
  />
112
122
  ))}
113
123
  </div>
124
+
125
+ {activeLabel && (
126
+ <SubTitleExtraSmall
127
+ className={classify(css.scoreBarLabel, classNames?.label)}
128
+ >
129
+ {activeLabel}
130
+ </SubTitleExtraSmall>
131
+ )}
114
132
  </div>
115
133
  );
116
134
  },
@@ -1,31 +1,28 @@
1
1
  @value (
2
+ spaceXSmall,
3
+ spaceXXSmall
4
+ ) from '../../styles/variables/_space.css';
5
+ @value (
6
+ borderRadiusSmall,
2
7
  borderRadiusXSmall
3
8
  ) from '../../styles/variables/_border.css';
4
- @value (
5
- size34,
6
- size18,
7
- size2
8
- ) from '../../styles/variables/_size.css';
9
- @value (
10
- spaceXXSmall,
11
- spaceXSmall
12
- ) from '../../styles/variables/_space.css';
13
9
 
14
10
  .scoreBarWrapper {
15
11
  display: flex;
16
12
  padding: spaceXSmall;
17
13
  align-items: center;
18
14
  justify-content: center;
15
+ width: fit-content;
19
16
  }
20
17
 
21
18
  .scoreBarContainer {
19
+ display: flex;
20
+ align-items: center;
21
+ justify-content: space-between;
22
+ gap: calc(spaceXXSmall / 2);
22
23
  width: var(--width);
23
24
  height: var(--height);
24
- gap: calc(spaceXXSmall / 2);
25
- display: flex;
26
25
  flex-direction: var(--direction);
27
- justify-content: space-between;
28
- align-items: center;
29
26
  }
30
27
 
31
28
  .bar {
@@ -34,3 +31,12 @@
34
31
  border-radius: borderRadiusXSmall;
35
32
  background-color: var(--background-color);
36
33
  }
34
+
35
+ .scoreBarBorder {
36
+ composes: borderPrimary from '../../styles/border.module.css';
37
+ border-radius: borderRadiusSmall;
38
+ }
39
+
40
+ .scoreBarLabel {
41
+ padding-left: spaceXSmall;
42
+ }
@@ -162,17 +162,17 @@
162
162
 
163
163
  @value colorDataViz8: #F5EBB4;
164
164
 
165
- @value colorScoreBarLevel1: #e94970;
165
+ @value colorScoreBarLevel1: #7e7e7e;
166
166
 
167
- @value colorScoreBarLevel2: #e5983d;
167
+ @value colorScoreBarLevel2: #e94970;
168
168
 
169
- @value colorScoreBarLevel3: #3987f3;
169
+ @value colorScoreBarLevel3: #e5983d;
170
170
 
171
- @value colorScoreBarLevel4: #56b988;
171
+ @value colorScoreBarLevel4: #3987f3;
172
172
 
173
- @value colorScoreBarLevel5: #026b37;
173
+ @value colorScoreBarLevel5: #35ab71;
174
174
 
175
- @value colorScoreBarInactive: #D3D2E0;
175
+ @value colorScoreBarInactive: #d1d1d1;
176
176
 
177
177
  @value colorGrayLightest: #EBEBEB;
178
178
 
@@ -171,17 +171,17 @@ const colorDataViz7 = '#F5B8E1';
171
171
  exports.colorDataViz7 = colorDataViz7;
172
172
  const colorDataViz8 = '#F5EBB4';
173
173
  exports.colorDataViz8 = colorDataViz8;
174
- const colorScoreBarLevel1 = '#e94970';
174
+ const colorScoreBarLevel1 = '#7e7e7e';
175
175
  exports.colorScoreBarLevel1 = colorScoreBarLevel1;
176
- const colorScoreBarLevel2 = '#e5983d';
176
+ const colorScoreBarLevel2 = '#e94970';
177
177
  exports.colorScoreBarLevel2 = colorScoreBarLevel2;
178
- const colorScoreBarLevel3 = '#3987f3';
178
+ const colorScoreBarLevel3 = '#e5983d';
179
179
  exports.colorScoreBarLevel3 = colorScoreBarLevel3;
180
- const colorScoreBarLevel4 = '#56b988';
180
+ const colorScoreBarLevel4 = '#3987f3';
181
181
  exports.colorScoreBarLevel4 = colorScoreBarLevel4;
182
- const colorScoreBarLevel5 = '#026b37';
182
+ const colorScoreBarLevel5 = '#35ab71';
183
183
  exports.colorScoreBarLevel5 = colorScoreBarLevel5;
184
- const colorScoreBarInactive = '#D3D2E0';
184
+ const colorScoreBarInactive = '#d1d1d1';
185
185
  exports.colorScoreBarInactive = colorScoreBarInactive;
186
186
  const colorGrayLightest = '#EBEBEB';
187
187
  exports.colorGrayLightest = colorGrayLightest;
@@ -164,17 +164,17 @@ export const colorDataViz7 = '#F5B8E1';
164
164
 
165
165
  export const colorDataViz8 = '#F5EBB4';
166
166
 
167
- export const colorScoreBarLevel1 = '#e94970';
167
+ export const colorScoreBarLevel1 = '#7e7e7e';
168
168
 
169
- export const colorScoreBarLevel2 = '#e5983d';
169
+ export const colorScoreBarLevel2 = '#e94970';
170
170
 
171
- export const colorScoreBarLevel3 = '#3987f3';
171
+ export const colorScoreBarLevel3 = '#e5983d';
172
172
 
173
- export const colorScoreBarLevel4 = '#56b988';
173
+ export const colorScoreBarLevel4 = '#3987f3';
174
174
 
175
- export const colorScoreBarLevel5 = '#026b37';
175
+ export const colorScoreBarLevel5 = '#35ab71';
176
176
 
177
- export const colorScoreBarInactive = '#D3D2E0';
177
+ export const colorScoreBarInactive = '#d1d1d1';
178
178
 
179
179
  export const colorGrayLightest = '#EBEBEB';
180
180
 
@@ -138,17 +138,17 @@
138
138
 
139
139
  @value colorDataViz8: #F5EBB4;
140
140
 
141
- @value colorScoreBarLevel1: #e94970;
141
+ @value colorScoreBarLevel1: #7e7e7e;
142
142
 
143
- @value colorScoreBarLevel2: #e5983d;
143
+ @value colorScoreBarLevel2: #e94970;
144
144
 
145
- @value colorScoreBarLevel3: #3987f3;
145
+ @value colorScoreBarLevel3: #e5983d;
146
146
 
147
- @value colorScoreBarLevel4: #56b988;
147
+ @value colorScoreBarLevel4: #3987f3;
148
148
 
149
- @value colorScoreBarLevel5: #026b37;
149
+ @value colorScoreBarLevel5: #35ab71;
150
150
 
151
- @value colorScoreBarInactive: #D3D2E0;
151
+ @value colorScoreBarInactive: #d1d1d1;
152
152
 
153
153
  @value colorGrayLightest: #EBEBEB;
154
154
 
@@ -146,17 +146,17 @@ const colorDataViz7 = '#F5B8E1';
146
146
  exports.colorDataViz7 = colorDataViz7;
147
147
  const colorDataViz8 = '#F5EBB4';
148
148
  exports.colorDataViz8 = colorDataViz8;
149
- const colorScoreBarLevel1 = '#e94970';
149
+ const colorScoreBarLevel1 = '#7e7e7e';
150
150
  exports.colorScoreBarLevel1 = colorScoreBarLevel1;
151
- const colorScoreBarLevel2 = '#e5983d';
151
+ const colorScoreBarLevel2 = '#e94970';
152
152
  exports.colorScoreBarLevel2 = colorScoreBarLevel2;
153
- const colorScoreBarLevel3 = '#3987f3';
153
+ const colorScoreBarLevel3 = '#e5983d';
154
154
  exports.colorScoreBarLevel3 = colorScoreBarLevel3;
155
- const colorScoreBarLevel4 = '#56b988';
155
+ const colorScoreBarLevel4 = '#3987f3';
156
156
  exports.colorScoreBarLevel4 = colorScoreBarLevel4;
157
- const colorScoreBarLevel5 = '#026b37';
157
+ const colorScoreBarLevel5 = '#35ab71';
158
158
  exports.colorScoreBarLevel5 = colorScoreBarLevel5;
159
- const colorScoreBarInactive = '#D3D2E0';
159
+ const colorScoreBarInactive = '#d1d1d1';
160
160
  exports.colorScoreBarInactive = colorScoreBarInactive;
161
161
  const colorGrayLightest = '#EBEBEB';
162
162
  exports.colorGrayLightest = colorGrayLightest;
@@ -140,17 +140,17 @@ export const colorDataViz7 = '#F5B8E1';
140
140
 
141
141
  export const colorDataViz8 = '#F5EBB4';
142
142
 
143
- export const colorScoreBarLevel1 = '#e94970';
143
+ export const colorScoreBarLevel1 = '#7e7e7e';
144
144
 
145
- export const colorScoreBarLevel2 = '#e5983d';
145
+ export const colorScoreBarLevel2 = '#e94970';
146
146
 
147
- export const colorScoreBarLevel3 = '#3987f3';
147
+ export const colorScoreBarLevel3 = '#e5983d';
148
148
 
149
- export const colorScoreBarLevel4 = '#56b988';
149
+ export const colorScoreBarLevel4 = '#3987f3';
150
150
 
151
- export const colorScoreBarLevel5 = '#026b37';
151
+ export const colorScoreBarLevel5 = '#35ab71';
152
152
 
153
- export const colorScoreBarInactive = '#D3D2E0';
153
+ export const colorScoreBarInactive = '#d1d1d1';
154
154
 
155
155
  export const colorGrayLightest = '#EBEBEB';
156
156
 
@@ -3,21 +3,35 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.getColorByScorePercentage = exports.SCORE_BAR_ERRORS = void 0;
6
+ exports.getLabelByScorePercentage = exports.getColorByScorePercentage = exports.SCORE_BAR_ERRORS = void 0;
7
7
 
8
- const getColorByPercentage = (totalBars, score, colorMap) => {
9
- if (score <= 0) {
10
- return colorMap.inactive;
11
- }
8
+ const getValidRange = (score, totalBars, keys) => {
12
9
  const scorePercentage = 100 * score / totalBars;
13
- const range = Math.min(Math.ceil(scorePercentage / 20) * 20, 100);
14
- return colorMap[range.toString()] || colorMap.inactive;
10
+ for (const key of keys) {
11
+ if (scorePercentage <= Number(key)) {
12
+ return key;
13
+ }
14
+ }
15
+ return [...keys].pop() || '';
15
16
  };
16
17
  const getColorByScorePercentage = (totalBars, score, currentBarNumber, colorMap) => {
17
- const validColor = getColorByPercentage(totalBars, score, colorMap);
18
+ if (score <= 0) {
19
+ return colorMap.inactive;
20
+ }
21
+ const validRange = getValidRange(score, totalBars, Object.keys(colorMap));
22
+ const validColor = colorMap[validRange];
18
23
  return currentBarNumber < score ? validColor : colorMap.inactive;
19
24
  };
20
25
  exports.getColorByScorePercentage = getColorByScorePercentage;
26
+ const getLabelByScorePercentage = (score, totalBars, labelMap) => {
27
+ if (!labelMap) {
28
+ return '';
29
+ }
30
+ const validRange = getValidRange(score, totalBars, Object.keys(labelMap));
31
+ const validLabel = labelMap[validRange];
32
+ return validLabel || '';
33
+ };
34
+ exports.getLabelByScorePercentage = getLabelByScorePercentage;
21
35
  const SCORE_BAR_ERRORS = Object.freeze({
22
36
  INVALID_BAR_COUNT: {
23
37
  type: 'INVALID_BAR_COUNT',
@@ -1,18 +1,24 @@
1
1
  // @flow strict
2
- import type {ScoreBarColorMap} from '../../components/ScoreBar';
3
2
 
3
+ import type {
4
+ ScoreBarColorMap,
5
+ ScoreBarLabelMap,
6
+ } from '../../components/ScoreBar';
4
7
 
5
- const getColorByPercentage = (
6
- totalBars: number,
8
+
9
+ const getValidRange = (
7
10
  score: number,
8
- colorMap: ScoreBarColorMap,
11
+ totalBars: number,
12
+ keys: Array<string>,
9
13
  ): string => {
10
- if (score <= 0) {
11
- return colorMap.inactive;
12
- }
13
14
  const scorePercentage = (100 * score) / totalBars;
14
- const range = Math.min(Math.ceil(scorePercentage / 20) * 20, 100);
15
- return colorMap[range.toString()] || colorMap.inactive;
15
+ for (const key of keys) {
16
+ if (scorePercentage <= Number(key)) {
17
+ return key;
18
+ }
19
+ }
20
+
21
+ return [...keys].pop() || '';
16
22
  };
17
23
 
18
24
  export const getColorByScorePercentage = (
@@ -21,10 +27,29 @@ export const getColorByScorePercentage = (
21
27
  currentBarNumber: number,
22
28
  colorMap: ScoreBarColorMap,
23
29
  ): string => {
24
- const validColor = getColorByPercentage(totalBars, score, colorMap);
30
+ if (score <= 0) {
31
+ return colorMap.inactive;
32
+ }
33
+ const validRange = getValidRange(score, totalBars, Object.keys(colorMap));
34
+ const validColor = colorMap[validRange];
35
+
25
36
  return currentBarNumber < score ? validColor : colorMap.inactive;
26
37
  };
27
38
 
39
+ export const getLabelByScorePercentage = (
40
+ score: number,
41
+ totalBars: number,
42
+ labelMap?: ScoreBarLabelMap,
43
+ ): string => {
44
+ if (!labelMap) {
45
+ return '';
46
+ }
47
+ const validRange = getValidRange(score, totalBars, Object.keys(labelMap));
48
+ const validLabel = labelMap[validRange];
49
+
50
+ return validLabel || '';
51
+ };
52
+
28
53
  export const SCORE_BAR_ERRORS = Object.freeze({
29
54
  INVALID_BAR_COUNT: {
30
55
  type: 'INVALID_BAR_COUNT',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@spaced-out/ui-design-system",
3
- "version": "0.3.8-beta.0",
3
+ "version": "0.3.9",
4
4
  "main": "index.js",
5
5
  "description": "Sense UI components library",
6
6
  "author": {