@spaced-out/ui-design-system 0.1.130-beta.0 → 0.2.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/CHANGELOG.md +14 -0
- package/design-tokens/color/app-color.json +22 -0
- package/lib/components/ButtonDropdown/ButtonDropdown.js +6 -5
- package/lib/components/ButtonDropdown/ButtonDropdown.js.flow +4 -4
- package/lib/components/ButtonTabs/ButtonTabDropdown.js +6 -5
- package/lib/components/ButtonTabs/ButtonTabDropdown.js.flow +4 -4
- package/lib/components/Dropdown/Dropdown.js +7 -6
- package/lib/components/Dropdown/Dropdown.js.flow +5 -5
- package/lib/components/InlineDropdown/InlineDropdown.js +6 -5
- package/lib/components/InlineDropdown/InlineDropdown.js.flow +4 -4
- package/lib/components/ScoreBar/ScoreBar.js +64 -0
- package/lib/components/ScoreBar/ScoreBar.js.flow +117 -0
- package/lib/components/ScoreBar/ScoreBar.module.css +36 -0
- package/lib/components/ScoreBar/index.js +16 -0
- package/lib/components/ScoreBar/index.js.flow +3 -0
- package/lib/components/Tabs/TabList/TabDropdown.js +6 -5
- package/lib/components/Tabs/TabList/TabDropdown.js.flow +4 -4
- package/lib/components/Typeahead/Typeahead.js +3 -4
- package/lib/components/Typeahead/Typeahead.js.flow +2 -3
- package/lib/styles/index.css +12 -0
- package/lib/styles/index.js +15 -3
- package/lib/styles/index.js.flow +12 -0
- package/lib/styles/variables/_color.css +12 -0
- package/lib/styles/variables/_color.js +14 -1
- package/lib/styles/variables/_color.js.flow +12 -0
- package/lib/utils/click-away/click-away.js +20 -18
- package/lib/utils/click-away/click-away.js.flow +44 -27
- package/lib/utils/index.js +11 -0
- package/lib/utils/index.js.flow +1 -0
- package/lib/utils/merge-refs/merge-refs.js.flow +2 -2
- package/lib/utils/score-bar/index.js +16 -0
- package/lib/utils/score-bar/index.js.flow +3 -0
- package/lib/utils/score-bar/score-bar.js +27 -0
- package/lib/utils/score-bar/score-bar.js.flow +33 -0
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,20 @@
|
|
|
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.2.0](https://github.com/spaced-out/ui-design-system/compare/v0.1.130...v0.2.0) (2024-09-27)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Features
|
|
9
|
+
|
|
10
|
+
* upgrade genesis to react 17 and click away changes ([#270](https://github.com/spaced-out/ui-design-system/issues/270)) ([6ab5f93](https://github.com/spaced-out/ui-design-system/commit/6ab5f930813feb1dffaeb030983d13dbd8ebd3bf))
|
|
11
|
+
|
|
12
|
+
### [0.1.130](https://github.com/spaced-out/ui-design-system/compare/v0.1.130-beta.0...v0.1.130) (2024-09-12)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
### Features
|
|
16
|
+
|
|
17
|
+
* score bar component ([#265](https://github.com/spaced-out/ui-design-system/issues/265)) ([d3adc39](https://github.com/spaced-out/ui-design-system/commit/d3adc3906bf88c8d110d5a65cc6bbbe5cc6c3c23))
|
|
18
|
+
|
|
5
19
|
### [0.1.130-beta.0](https://github.com/spaced-out/ui-design-system/compare/v0.1.129...v0.1.130-beta.0) (2024-09-11)
|
|
6
20
|
|
|
7
21
|
|
|
@@ -255,6 +255,28 @@
|
|
|
255
255
|
"value": "{baseColor.yellow.100.value}"
|
|
256
256
|
}
|
|
257
257
|
},
|
|
258
|
+
"score-bar": {
|
|
259
|
+
"level": {
|
|
260
|
+
"1": {
|
|
261
|
+
"value": "{baseColor.red.400.value}"
|
|
262
|
+
},
|
|
263
|
+
"2": {
|
|
264
|
+
"value": "{baseColor.orange.400.value}"
|
|
265
|
+
},
|
|
266
|
+
"3": {
|
|
267
|
+
"value": "{baseColor.blue.400.value}"
|
|
268
|
+
},
|
|
269
|
+
"4": {
|
|
270
|
+
"value": "{baseColor.green.300.value}"
|
|
271
|
+
},
|
|
272
|
+
"5": {
|
|
273
|
+
"value": "{baseColor.green.700.value}"
|
|
274
|
+
}
|
|
275
|
+
},
|
|
276
|
+
"inactive": {
|
|
277
|
+
"value": "{baseColor.indigo.200.value}"
|
|
278
|
+
}
|
|
279
|
+
},
|
|
258
280
|
"gray.lightest": {
|
|
259
281
|
"value": "{baseColor.gray.75.value}"
|
|
260
282
|
},
|
|
@@ -10,6 +10,7 @@ var _size = require("../../styles/variables/_size");
|
|
|
10
10
|
var _space = require("../../styles/variables/_space");
|
|
11
11
|
var _classify = require("../../utils/classify");
|
|
12
12
|
var _clickAway = require("../../utils/click-away");
|
|
13
|
+
var _mergeRefs = require("../../utils/merge-refs");
|
|
13
14
|
var _Button = require("../Button");
|
|
14
15
|
var _ConditionalWrapper = require("../ConditionalWrapper");
|
|
15
16
|
var _Menu = require("../Menu");
|
|
@@ -84,8 +85,9 @@ const ButtonDropdown = /*#__PURE__*/React.forwardRef((_ref, forwardRef) => {
|
|
|
84
85
|
let {
|
|
85
86
|
isOpen,
|
|
86
87
|
onOpen,
|
|
87
|
-
|
|
88
|
-
|
|
88
|
+
clickAway,
|
|
89
|
+
boundaryRef,
|
|
90
|
+
triggerRef
|
|
89
91
|
} = _ref2;
|
|
90
92
|
return /*#__PURE__*/React.createElement("div", {
|
|
91
93
|
"data-testid": "ButtonDropdown",
|
|
@@ -103,7 +105,7 @@ const ButtonDropdown = /*#__PURE__*/React.forwardRef((_ref, forwardRef) => {
|
|
|
103
105
|
iconRightType: iconRightType,
|
|
104
106
|
disabled: disabled,
|
|
105
107
|
size: size,
|
|
106
|
-
ref: refs.setReference,
|
|
108
|
+
ref: (0, _mergeRefs.mergeRefs)([refs.setReference, triggerRef]),
|
|
107
109
|
onClick: e => {
|
|
108
110
|
onClick?.(e);
|
|
109
111
|
e.stopPropagation();
|
|
@@ -115,8 +117,7 @@ const ButtonDropdown = /*#__PURE__*/React.forwardRef((_ref, forwardRef) => {
|
|
|
115
117
|
icon: classNames?.buttonIcon
|
|
116
118
|
}
|
|
117
119
|
}), children)), isOpen && menu && /*#__PURE__*/React.createElement("div", {
|
|
118
|
-
|
|
119
|
-
ref: refs.setFloating,
|
|
120
|
+
ref: (0, _mergeRefs.mergeRefs)([refs.setFloating, boundaryRef]),
|
|
120
121
|
style: {
|
|
121
122
|
display: 'flex',
|
|
122
123
|
position: strategy,
|
|
@@ -18,6 +18,7 @@ import {sizeFluid} from '../../styles/variables/_size';
|
|
|
18
18
|
import {spaceNone, spaceXXSmall} from '../../styles/variables/_space';
|
|
19
19
|
import {classify} from '../../utils/classify';
|
|
20
20
|
import {type ClickAwayRefType, ClickAway} from '../../utils/click-away';
|
|
21
|
+
import {mergeRefs} from '../../utils/merge-refs';
|
|
21
22
|
import type {ButtonProps} from '../Button';
|
|
22
23
|
import {Button} from '../Button';
|
|
23
24
|
import {ConditionalWrapper} from '../ConditionalWrapper';
|
|
@@ -115,7 +116,7 @@ export const ButtonDropdown: React$AbstractComponent<
|
|
|
115
116
|
|
|
116
117
|
return (
|
|
117
118
|
<ClickAway onChange={onMenuToggle} clickAwayRef={clickAwayRef}>
|
|
118
|
-
{({isOpen, onOpen,
|
|
119
|
+
{({isOpen, onOpen, clickAway, boundaryRef, triggerRef}) => (
|
|
119
120
|
<div
|
|
120
121
|
data-testid="ButtonDropdown"
|
|
121
122
|
className={classify(
|
|
@@ -148,7 +149,7 @@ export const ButtonDropdown: React$AbstractComponent<
|
|
|
148
149
|
iconRightType={iconRightType}
|
|
149
150
|
disabled={disabled}
|
|
150
151
|
size={size}
|
|
151
|
-
ref={refs.setReference}
|
|
152
|
+
ref={mergeRefs([refs.setReference, triggerRef])}
|
|
152
153
|
onClick={(e) => {
|
|
153
154
|
onClick?.(e);
|
|
154
155
|
e.stopPropagation();
|
|
@@ -166,8 +167,7 @@ export const ButtonDropdown: React$AbstractComponent<
|
|
|
166
167
|
|
|
167
168
|
{isOpen && menu && (
|
|
168
169
|
<div
|
|
169
|
-
|
|
170
|
-
ref={refs.setFloating}
|
|
170
|
+
ref={mergeRefs([refs.setFloating, boundaryRef])}
|
|
171
171
|
style={{
|
|
172
172
|
display: 'flex',
|
|
173
173
|
position: strategy,
|
|
@@ -10,6 +10,7 @@ var _lodash = require("lodash");
|
|
|
10
10
|
var _space = require("../../styles/variables/_space");
|
|
11
11
|
var _classify = _interopRequireDefault(require("../../utils/classify"));
|
|
12
12
|
var _clickAway = require("../../utils/click-away");
|
|
13
|
+
var _mergeRefs = require("../../utils/merge-refs");
|
|
13
14
|
var _Menu = require("../Menu");
|
|
14
15
|
var _ButtonTab = require("./ButtonTab");
|
|
15
16
|
var _ButtonTabDropdownModule = _interopRequireDefault(require("./ButtonTabDropdown.module.css"));
|
|
@@ -75,23 +76,23 @@ const ButtonTabDropdown = _ref => {
|
|
|
75
76
|
let {
|
|
76
77
|
isOpen,
|
|
77
78
|
onOpen,
|
|
78
|
-
|
|
79
|
-
|
|
79
|
+
clickAway,
|
|
80
|
+
boundaryRef,
|
|
81
|
+
triggerRef
|
|
80
82
|
} = _ref3;
|
|
81
83
|
return /*#__PURE__*/React.createElement("div", {
|
|
82
84
|
"data-testid": "ButtonTabDropdown",
|
|
83
85
|
ref: menuBtnRef,
|
|
84
86
|
className: (0, _classify.default)(_ButtonTabDropdownModule.default.buttonTabDropDownWrapper, dropdownClass)
|
|
85
87
|
}, /*#__PURE__*/React.createElement(_ButtonTab.ButtonTab, _extends({}, buttonTabProps, {
|
|
86
|
-
ref: refs.setReference,
|
|
88
|
+
ref: (0, _mergeRefs.mergeRefs)([refs.setReference, triggerRef]),
|
|
87
89
|
selectedButtonTabId: moreTabSelectedId,
|
|
88
90
|
onButtonTabSelect: (id, e) => {
|
|
89
91
|
e?.stopPropagation();
|
|
90
92
|
onOpen();
|
|
91
93
|
}
|
|
92
94
|
}), title), isOpen && /*#__PURE__*/React.createElement("div", {
|
|
93
|
-
|
|
94
|
-
ref: refs.setFloating,
|
|
95
|
+
ref: (0, _mergeRefs.mergeRefs)([refs.setFloating, boundaryRef]),
|
|
95
96
|
style: {
|
|
96
97
|
display: 'flex',
|
|
97
98
|
position: strategy,
|
|
@@ -18,6 +18,7 @@ import {includes} from 'lodash';
|
|
|
18
18
|
import {spaceNone, spaceXXSmall} from '../../styles/variables/_space';
|
|
19
19
|
import classify from '../../utils/classify';
|
|
20
20
|
import {ClickAway} from '../../utils/click-away';
|
|
21
|
+
import {mergeRefs} from '../../utils/merge-refs';
|
|
21
22
|
import type {AnchorType} from '../ButtonDropdown';
|
|
22
23
|
import {Menu} from '../Menu';
|
|
23
24
|
|
|
@@ -87,7 +88,7 @@ export const ButtonTabDropdown = ({
|
|
|
87
88
|
|
|
88
89
|
return (
|
|
89
90
|
<ClickAway>
|
|
90
|
-
{({isOpen, onOpen,
|
|
91
|
+
{({isOpen, onOpen, clickAway, boundaryRef, triggerRef}) => (
|
|
91
92
|
<div
|
|
92
93
|
data-testid="ButtonTabDropdown"
|
|
93
94
|
ref={menuBtnRef}
|
|
@@ -95,7 +96,7 @@ export const ButtonTabDropdown = ({
|
|
|
95
96
|
>
|
|
96
97
|
<ButtonTab
|
|
97
98
|
{...buttonTabProps}
|
|
98
|
-
ref={refs.setReference}
|
|
99
|
+
ref={mergeRefs([refs.setReference, triggerRef])}
|
|
99
100
|
selectedButtonTabId={moreTabSelectedId}
|
|
100
101
|
onButtonTabSelect={(id, e) => {
|
|
101
102
|
e?.stopPropagation();
|
|
@@ -106,8 +107,7 @@ export const ButtonTabDropdown = ({
|
|
|
106
107
|
</ButtonTab>
|
|
107
108
|
{isOpen && (
|
|
108
109
|
<div
|
|
109
|
-
|
|
110
|
-
ref={refs.setFloating}
|
|
110
|
+
ref={mergeRefs([refs.setFloating, boundaryRef])}
|
|
111
111
|
style={{
|
|
112
112
|
display: 'flex',
|
|
113
113
|
position: strategy,
|
|
@@ -10,6 +10,7 @@ var _size = require("../../styles/variables/_size");
|
|
|
10
10
|
var _space = require("../../styles/variables/_space");
|
|
11
11
|
var _classify = require("../../utils/classify");
|
|
12
12
|
var _clickAway = require("../../utils/click-away");
|
|
13
|
+
var _mergeRefs = require("../../utils/merge-refs");
|
|
13
14
|
var _Input = require("../Input");
|
|
14
15
|
var _Menu = require("../Menu");
|
|
15
16
|
var _DropdownModule = _interopRequireDefault(require("./Dropdown.module.css"));
|
|
@@ -58,13 +59,14 @@ const Dropdown = /*#__PURE__*/React.forwardRef((_ref, ref) => {
|
|
|
58
59
|
let {
|
|
59
60
|
isOpen,
|
|
60
61
|
onOpen,
|
|
61
|
-
|
|
62
|
-
|
|
62
|
+
clickAway,
|
|
63
|
+
boundaryRef,
|
|
64
|
+
triggerRef
|
|
63
65
|
} = _ref2;
|
|
64
66
|
return /*#__PURE__*/React.createElement("div", {
|
|
65
67
|
"data-testid": "Dropdown",
|
|
66
68
|
className: (0, _classify.classify)(_DropdownModule.default.dropdownContainer, classNames?.wrapper),
|
|
67
|
-
ref: dropdownRef
|
|
69
|
+
ref: (0, _mergeRefs.mergeRefs)([dropdownRef, boundaryRef])
|
|
68
70
|
}, /*#__PURE__*/React.createElement(_Input.Input, _extends({}, inputProps, {
|
|
69
71
|
onKeyDown: e => {
|
|
70
72
|
if (e.keyCode === 32) {
|
|
@@ -72,7 +74,7 @@ const Dropdown = /*#__PURE__*/React.forwardRef((_ref, ref) => {
|
|
|
72
74
|
isOpen ? clickAway() : onOpen();
|
|
73
75
|
}
|
|
74
76
|
},
|
|
75
|
-
boxRef: refs.setReference,
|
|
77
|
+
boxRef: (0, _mergeRefs.mergeRefs)([refs.setReference, triggerRef]),
|
|
76
78
|
size: size,
|
|
77
79
|
placeholder: placeholder,
|
|
78
80
|
value: dropdownInputText,
|
|
@@ -87,8 +89,7 @@ const Dropdown = /*#__PURE__*/React.forwardRef((_ref, ref) => {
|
|
|
87
89
|
},
|
|
88
90
|
ref: ref
|
|
89
91
|
})), isOpen && menu && /*#__PURE__*/React.createElement("div", {
|
|
90
|
-
|
|
91
|
-
ref: refs.setFloating,
|
|
92
|
+
ref: (0, _mergeRefs.mergeRefs)([refs.setFloating, boundaryRef]),
|
|
92
93
|
style: {
|
|
93
94
|
position: strategy,
|
|
94
95
|
top: y ?? _space.spaceNone,
|
|
@@ -16,6 +16,7 @@ import {sizeFluid} from '../../styles/variables/_size';
|
|
|
16
16
|
import {spaceNone, spaceXXSmall} from '../../styles/variables/_space';
|
|
17
17
|
import {classify} from '../../utils/classify';
|
|
18
18
|
import {type ClickAwayRefType, ClickAway} from '../../utils/click-away';
|
|
19
|
+
import {mergeRefs} from '../../utils/merge-refs';
|
|
19
20
|
import type {InputProps} from '../Input';
|
|
20
21
|
import {Input} from '../Input';
|
|
21
22
|
import type {MenuOption, MenuProps} from '../Menu';
|
|
@@ -78,11 +79,11 @@ export const Dropdown: React$AbstractComponent<
|
|
|
78
79
|
|
|
79
80
|
return (
|
|
80
81
|
<ClickAway onChange={onMenuToggle} clickAwayRef={clickAwayRef}>
|
|
81
|
-
{({isOpen, onOpen,
|
|
82
|
+
{({isOpen, onOpen, clickAway, boundaryRef, triggerRef}) => (
|
|
82
83
|
<div
|
|
83
84
|
data-testid="Dropdown"
|
|
84
85
|
className={classify(css.dropdownContainer, classNames?.wrapper)}
|
|
85
|
-
ref={dropdownRef}
|
|
86
|
+
ref={mergeRefs([dropdownRef, boundaryRef])}
|
|
86
87
|
>
|
|
87
88
|
<Input
|
|
88
89
|
{...inputProps}
|
|
@@ -92,7 +93,7 @@ export const Dropdown: React$AbstractComponent<
|
|
|
92
93
|
isOpen ? clickAway() : onOpen();
|
|
93
94
|
}
|
|
94
95
|
}}
|
|
95
|
-
boxRef={refs.setReference}
|
|
96
|
+
boxRef={mergeRefs([refs.setReference, triggerRef])}
|
|
96
97
|
size={size}
|
|
97
98
|
placeholder={placeholder}
|
|
98
99
|
value={dropdownInputText}
|
|
@@ -108,8 +109,7 @@ export const Dropdown: React$AbstractComponent<
|
|
|
108
109
|
|
|
109
110
|
{isOpen && menu && (
|
|
110
111
|
<div
|
|
111
|
-
|
|
112
|
-
ref={refs.setFloating}
|
|
112
|
+
ref={mergeRefs([refs.setFloating, boundaryRef])}
|
|
113
113
|
style={{
|
|
114
114
|
position: strategy,
|
|
115
115
|
top: y ?? spaceNone,
|
|
@@ -9,6 +9,7 @@ var _react2 = require("@floating-ui/react");
|
|
|
9
9
|
var _space = require("../../styles/variables/_space");
|
|
10
10
|
var _classify = require("../../utils/classify");
|
|
11
11
|
var _clickAway = require("../../utils/click-away");
|
|
12
|
+
var _mergeRefs = require("../../utils/merge-refs");
|
|
12
13
|
var _Button = require("../Button");
|
|
13
14
|
var _Icon = require("../Icon");
|
|
14
15
|
var _Menu = require("../Menu");
|
|
@@ -56,8 +57,9 @@ const InlineDropdown = /*#__PURE__*/React.forwardRef((_ref, ref) => {
|
|
|
56
57
|
let {
|
|
57
58
|
isOpen,
|
|
58
59
|
onOpen,
|
|
59
|
-
|
|
60
|
-
|
|
60
|
+
clickAway,
|
|
61
|
+
boundaryRef,
|
|
62
|
+
triggerRef
|
|
61
63
|
} = _ref2;
|
|
62
64
|
return /*#__PURE__*/React.createElement("div", {
|
|
63
65
|
"data-testid": "InlineDropdown",
|
|
@@ -65,7 +67,7 @@ const InlineDropdown = /*#__PURE__*/React.forwardRef((_ref, ref) => {
|
|
|
65
67
|
ref: menuBtnRef
|
|
66
68
|
}, /*#__PURE__*/React.createElement(_Button.UnstyledButton, _extends({}, restButtonProps, {
|
|
67
69
|
disabled: disabled,
|
|
68
|
-
ref: refs.setReference,
|
|
70
|
+
ref: (0, _mergeRefs.mergeRefs)([refs.setReference, triggerRef]),
|
|
69
71
|
onClick: e => {
|
|
70
72
|
e.stopPropagation();
|
|
71
73
|
onOpen();
|
|
@@ -81,8 +83,7 @@ const InlineDropdown = /*#__PURE__*/React.forwardRef((_ref, ref) => {
|
|
|
81
83
|
[_InlineDropdownModule.default.disabled]: disabled
|
|
82
84
|
})
|
|
83
85
|
})), isOpen && menu && /*#__PURE__*/React.createElement("div", {
|
|
84
|
-
|
|
85
|
-
ref: refs.setFloating,
|
|
86
|
+
ref: (0, _mergeRefs.mergeRefs)([refs.setFloating, boundaryRef]),
|
|
86
87
|
style: {
|
|
87
88
|
display: 'flex',
|
|
88
89
|
position: strategy,
|
|
@@ -17,6 +17,7 @@ import {
|
|
|
17
17
|
import {spaceNone, spaceXXSmall} from '../../styles/variables/_space';
|
|
18
18
|
import {classify} from '../../utils/classify';
|
|
19
19
|
import {type ClickAwayRefType, ClickAway} from '../../utils/click-away';
|
|
20
|
+
import {mergeRefs} from '../../utils/merge-refs';
|
|
20
21
|
import type {UnstyledButtonProps} from '../Button';
|
|
21
22
|
import {UnstyledButton} from '../Button';
|
|
22
23
|
import type {AnchorType} from '../ButtonDropdown';
|
|
@@ -82,7 +83,7 @@ export const InlineDropdown: React$AbstractComponent<
|
|
|
82
83
|
|
|
83
84
|
return (
|
|
84
85
|
<ClickAway onChange={onMenuToggle} clickAwayRef={clickAwayRef}>
|
|
85
|
-
{({isOpen, onOpen,
|
|
86
|
+
{({isOpen, onOpen, clickAway, boundaryRef, triggerRef}) => (
|
|
86
87
|
<div
|
|
87
88
|
data-testid="InlineDropdown"
|
|
88
89
|
className={classify(
|
|
@@ -94,7 +95,7 @@ export const InlineDropdown: React$AbstractComponent<
|
|
|
94
95
|
<UnstyledButton
|
|
95
96
|
{...restButtonProps}
|
|
96
97
|
disabled={disabled}
|
|
97
|
-
ref={refs.setReference}
|
|
98
|
+
ref={mergeRefs([refs.setReference, triggerRef])}
|
|
98
99
|
onClick={(e) => {
|
|
99
100
|
e.stopPropagation();
|
|
100
101
|
onOpen();
|
|
@@ -120,8 +121,7 @@ export const InlineDropdown: React$AbstractComponent<
|
|
|
120
121
|
</UnstyledButton>
|
|
121
122
|
{isOpen && menu && (
|
|
122
123
|
<div
|
|
123
|
-
|
|
124
|
-
ref={refs.setFloating}
|
|
124
|
+
ref={mergeRefs([refs.setFloating, boundaryRef])}
|
|
125
125
|
style={{
|
|
126
126
|
display: 'flex',
|
|
127
127
|
position: strategy,
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.ScoreBar = exports.Direction = exports.DEFAULT_COLOR_MAP = void 0;
|
|
7
|
+
var React = _interopRequireWildcard(require("react"));
|
|
8
|
+
var _invariant = _interopRequireDefault(require("invariant"));
|
|
9
|
+
var _clamp = _interopRequireDefault(require("lodash/clamp"));
|
|
10
|
+
var _color = require("../../styles/variables/_color.js");
|
|
11
|
+
var _size = require("../../styles/variables/_size");
|
|
12
|
+
var _classify = require("../../utils/classify");
|
|
13
|
+
var _scoreBar = require("../../utils/score-bar");
|
|
14
|
+
var _ScoreBarModule = _interopRequireDefault(require("./ScoreBar.module.css"));
|
|
15
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
16
|
+
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); }
|
|
17
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
18
|
+
|
|
19
|
+
const Direction = Object.freeze({
|
|
20
|
+
horizontal: 'horizontal',
|
|
21
|
+
vertical: 'vertical'
|
|
22
|
+
});
|
|
23
|
+
exports.Direction = Direction;
|
|
24
|
+
const DEFAULT_BARS_COUNT = 5;
|
|
25
|
+
const DEFAULT_COLOR_MAP = {
|
|
26
|
+
inactive: _color.colorScoreBarInactive,
|
|
27
|
+
'100': _color.colorScoreBarLevel5,
|
|
28
|
+
'80': _color.colorScoreBarLevel4,
|
|
29
|
+
'60': _color.colorScoreBarLevel3,
|
|
30
|
+
'40': _color.colorScoreBarLevel2,
|
|
31
|
+
'20': _color.colorScoreBarLevel1
|
|
32
|
+
};
|
|
33
|
+
exports.DEFAULT_COLOR_MAP = DEFAULT_COLOR_MAP;
|
|
34
|
+
const ScoreBar = /*#__PURE__*/React.forwardRef((_ref, ref) => {
|
|
35
|
+
let {
|
|
36
|
+
score = 0,
|
|
37
|
+
colorMap = DEFAULT_COLOR_MAP,
|
|
38
|
+
totalBars = DEFAULT_BARS_COUNT,
|
|
39
|
+
direction = 'vertical',
|
|
40
|
+
classNames
|
|
41
|
+
} = _ref;
|
|
42
|
+
(0, _invariant.default)(totalBars > 0, JSON.stringify(_scoreBar.SCORE_BAR_ERRORS.INVALID_BAR_COUNT));
|
|
43
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
44
|
+
ref: ref,
|
|
45
|
+
"data-testid": "ScoreBar",
|
|
46
|
+
className: (0, _classify.classify)(_ScoreBarModule.default.scoreBarWrapper, classNames?.wrapper)
|
|
47
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
48
|
+
className: (0, _classify.classify)(_ScoreBarModule.default.scoreBarContainer, classNames?.container),
|
|
49
|
+
style: {
|
|
50
|
+
'--direction': direction === Direction.horizontal ? 'row-reverse' : 'column',
|
|
51
|
+
'--height': direction === Direction.horizontal ? _size.size18 : 'unset',
|
|
52
|
+
'--width': direction === Direction.vertical ? _size.size18 : 'unset'
|
|
53
|
+
}
|
|
54
|
+
}, [...Array(totalBars).keys()].reverse().map(count => /*#__PURE__*/React.createElement("div", {
|
|
55
|
+
className: (0, _classify.classify)(_ScoreBarModule.default.bar, classNames?.bar),
|
|
56
|
+
style: {
|
|
57
|
+
'--background-color': (0, _scoreBar.getColorByScorePercentage)(totalBars, (0, _clamp.default)(score, 0, totalBars), count, colorMap),
|
|
58
|
+
'--height': direction === Direction.horizontal ? _size.size18 : _size.size2,
|
|
59
|
+
'--width': direction === Direction.vertical ? _size.size18 : _size.size2
|
|
60
|
+
},
|
|
61
|
+
key: count
|
|
62
|
+
}))));
|
|
63
|
+
});
|
|
64
|
+
exports.ScoreBar = ScoreBar;
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
// @flow strict
|
|
2
|
+
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import invariant from 'invariant';
|
|
5
|
+
import clamp from 'lodash/clamp';
|
|
6
|
+
|
|
7
|
+
import {
|
|
8
|
+
colorScoreBarInactive,
|
|
9
|
+
colorScoreBarLevel1,
|
|
10
|
+
colorScoreBarLevel2,
|
|
11
|
+
colorScoreBarLevel3,
|
|
12
|
+
colorScoreBarLevel4,
|
|
13
|
+
colorScoreBarLevel5,
|
|
14
|
+
} from '../../styles/variables/_color.js';
|
|
15
|
+
import {size2, size18} from '../../styles/variables/_size';
|
|
16
|
+
import {classify} from '../../utils/classify';
|
|
17
|
+
import {
|
|
18
|
+
getColorByScorePercentage,
|
|
19
|
+
SCORE_BAR_ERRORS,
|
|
20
|
+
} from '../../utils/score-bar';
|
|
21
|
+
|
|
22
|
+
import css from './ScoreBar.module.css';
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
export const Direction = Object.freeze({
|
|
26
|
+
horizontal: 'horizontal',
|
|
27
|
+
vertical: 'vertical',
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
export type ClassNames = $ReadOnly<{
|
|
31
|
+
container?: string,
|
|
32
|
+
wrapper?: string,
|
|
33
|
+
bar?: string,
|
|
34
|
+
}>;
|
|
35
|
+
|
|
36
|
+
export type ScoreBarDirection = $Values<typeof Direction>;
|
|
37
|
+
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%
|
|
44
|
+
}>;
|
|
45
|
+
|
|
46
|
+
export type ScoreBarProps = {
|
|
47
|
+
classNames?: ClassNames,
|
|
48
|
+
direction?: ScoreBarDirection,
|
|
49
|
+
colorMap?: ScoreBarColorMap,
|
|
50
|
+
totalBars?: number,
|
|
51
|
+
score?: number,
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
const DEFAULT_BARS_COUNT = 5;
|
|
55
|
+
export const DEFAULT_COLOR_MAP: ScoreBarColorMap = {
|
|
56
|
+
inactive: colorScoreBarInactive,
|
|
57
|
+
'100': colorScoreBarLevel5,
|
|
58
|
+
'80': colorScoreBarLevel4,
|
|
59
|
+
'60': colorScoreBarLevel3,
|
|
60
|
+
'40': colorScoreBarLevel2,
|
|
61
|
+
'20': colorScoreBarLevel1,
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
export const ScoreBar: React$AbstractComponent<ScoreBarProps, HTMLDivElement> =
|
|
65
|
+
React.forwardRef<ScoreBarProps, HTMLDivElement>(
|
|
66
|
+
(
|
|
67
|
+
{
|
|
68
|
+
score = 0,
|
|
69
|
+
colorMap = DEFAULT_COLOR_MAP,
|
|
70
|
+
totalBars = DEFAULT_BARS_COUNT,
|
|
71
|
+
direction = 'vertical',
|
|
72
|
+
classNames,
|
|
73
|
+
}: ScoreBarProps,
|
|
74
|
+
ref,
|
|
75
|
+
): React.Node => {
|
|
76
|
+
invariant(
|
|
77
|
+
totalBars > 0,
|
|
78
|
+
JSON.stringify(SCORE_BAR_ERRORS.INVALID_BAR_COUNT),
|
|
79
|
+
);
|
|
80
|
+
|
|
81
|
+
return (
|
|
82
|
+
<div
|
|
83
|
+
ref={ref}
|
|
84
|
+
data-testid="ScoreBar"
|
|
85
|
+
className={classify(css.scoreBarWrapper, classNames?.wrapper)}
|
|
86
|
+
>
|
|
87
|
+
<div
|
|
88
|
+
className={classify(css.scoreBarContainer, classNames?.container)}
|
|
89
|
+
style={{
|
|
90
|
+
'--direction':
|
|
91
|
+
direction === Direction.horizontal ? 'row-reverse' : 'column',
|
|
92
|
+
'--height': direction === Direction.horizontal ? size18 : 'unset',
|
|
93
|
+
'--width': direction === Direction.vertical ? size18 : 'unset',
|
|
94
|
+
}}
|
|
95
|
+
>
|
|
96
|
+
{[...Array(totalBars).keys()].reverse().map((count) => (
|
|
97
|
+
<div
|
|
98
|
+
className={classify(css.bar, classNames?.bar)}
|
|
99
|
+
style={{
|
|
100
|
+
'--background-color': getColorByScorePercentage(
|
|
101
|
+
totalBars,
|
|
102
|
+
clamp(score, 0, totalBars),
|
|
103
|
+
count,
|
|
104
|
+
colorMap,
|
|
105
|
+
),
|
|
106
|
+
'--height':
|
|
107
|
+
direction === Direction.horizontal ? size18 : size2,
|
|
108
|
+
'--width': direction === Direction.vertical ? size18 : size2,
|
|
109
|
+
}}
|
|
110
|
+
key={count}
|
|
111
|
+
/>
|
|
112
|
+
))}
|
|
113
|
+
</div>
|
|
114
|
+
</div>
|
|
115
|
+
);
|
|
116
|
+
},
|
|
117
|
+
);
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
@value (
|
|
2
|
+
borderRadiusXSmall
|
|
3
|
+
) 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
|
+
|
|
14
|
+
.scoreBarWrapper {
|
|
15
|
+
display: flex;
|
|
16
|
+
padding: spaceXSmall;
|
|
17
|
+
align-items: center;
|
|
18
|
+
justify-content: center;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.scoreBarContainer {
|
|
22
|
+
width: var(--width);
|
|
23
|
+
height: var(--height);
|
|
24
|
+
gap: calc(spaceXXSmall / 2);
|
|
25
|
+
display: flex;
|
|
26
|
+
flex-direction: var(--direction);
|
|
27
|
+
justify-content: space-between;
|
|
28
|
+
align-items: center;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
.bar {
|
|
32
|
+
width: var(--width);
|
|
33
|
+
height: var(--height);
|
|
34
|
+
border-radius: borderRadiusXSmall;
|
|
35
|
+
background-color: var(--background-color);
|
|
36
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
var _ScoreBar = require("./ScoreBar");
|
|
7
|
+
Object.keys(_ScoreBar).forEach(function (key) {
|
|
8
|
+
if (key === "default" || key === "__esModule") return;
|
|
9
|
+
if (key in exports && exports[key] === _ScoreBar[key]) return;
|
|
10
|
+
Object.defineProperty(exports, key, {
|
|
11
|
+
enumerable: true,
|
|
12
|
+
get: function () {
|
|
13
|
+
return _ScoreBar[key];
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
});
|
|
@@ -9,6 +9,7 @@ var _react2 = require("@floating-ui/react");
|
|
|
9
9
|
var _space = require("../../../styles/variables/_space");
|
|
10
10
|
var _classify = require("../../../utils/classify");
|
|
11
11
|
var _clickAway = require("../../../utils/click-away");
|
|
12
|
+
var _mergeRefs = require("../../../utils/merge-refs");
|
|
12
13
|
var _Menu = require("../../Menu");
|
|
13
14
|
var _Tab = require("../Tab");
|
|
14
15
|
var _TabDropdownModule = _interopRequireDefault(require("./TabDropdown.module.css"));
|
|
@@ -41,8 +42,9 @@ const TabDropdown = _ref => {
|
|
|
41
42
|
let {
|
|
42
43
|
isOpen,
|
|
43
44
|
onOpen,
|
|
44
|
-
|
|
45
|
-
|
|
45
|
+
clickAway,
|
|
46
|
+
boundaryRef,
|
|
47
|
+
triggerRef
|
|
46
48
|
} = _ref2;
|
|
47
49
|
return /*#__PURE__*/React.createElement("div", {
|
|
48
50
|
"data-testid": "TabDropdown",
|
|
@@ -50,7 +52,7 @@ const TabDropdown = _ref => {
|
|
|
50
52
|
ref: menuBtnRef
|
|
51
53
|
}, /*#__PURE__*/React.createElement(_Tab.Tab, _extends({}, props?.tab, {
|
|
52
54
|
size: size,
|
|
53
|
-
ref: refs.setReference,
|
|
55
|
+
ref: (0, _mergeRefs.mergeRefs)([refs.setReference, triggerRef]),
|
|
54
56
|
onClick: e => {
|
|
55
57
|
e.stopPropagation();
|
|
56
58
|
onOpen();
|
|
@@ -60,8 +62,7 @@ const TabDropdown = _ref => {
|
|
|
60
62
|
iconTextWrap: _TabDropdownModule.default.dotTextWrap
|
|
61
63
|
}
|
|
62
64
|
})), isOpen && props?.menu && /*#__PURE__*/React.createElement("div", {
|
|
63
|
-
|
|
64
|
-
ref: refs.setFloating,
|
|
65
|
+
ref: (0, _mergeRefs.mergeRefs)([refs.setFloating, boundaryRef]),
|
|
65
66
|
style: {
|
|
66
67
|
display: 'flex',
|
|
67
68
|
position: strategy,
|