carbon-react 102.0.0 → 102.3.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.
@@ -11,8 +11,6 @@ var _validationIcon = _interopRequireDefault(require("../validations/validation-
11
11
 
12
12
  var _help = _interopRequireDefault(require("../../components/help/help.style"));
13
13
 
14
- var _base = _interopRequireDefault(require("../../style/themes/base"));
15
-
16
14
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
15
 
18
16
  const IconWrapperStyle = _styledComponents.default.div`
@@ -27,17 +25,12 @@ const IconWrapperStyle = _styledComponents.default.div`
27
25
  vertical-align: top;
28
26
 
29
27
  :focus {
30
- outline: ${({
31
- theme
32
- }) => `2px solid ${theme.colors.focus}`};
28
+ outline: 2px solid var(--colorsSemanticFocus500);
33
29
  }
34
30
 
35
31
  ${_validationIcon.default}, ${_help.default} {
36
32
  position: static;
37
33
  }
38
34
  `;
39
- IconWrapperStyle.defaultProps = {
40
- theme: _base.default
41
- };
42
35
  var _default = IconWrapperStyle;
43
36
  exports.default = _default;
@@ -9,8 +9,6 @@ var _styledComponents = _interopRequireWildcard(require("styled-components"));
9
9
 
10
10
  var _propTypes = _interopRequireDefault(require("prop-types"));
11
11
 
12
- var _base = _interopRequireDefault(require("../../style/themes/base"));
13
-
14
12
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
13
 
16
14
  function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
@@ -18,36 +16,30 @@ function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return
18
16
  function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (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; }
19
17
 
20
18
  const LabelStyle = _styledComponents.default.label`
21
- color: ${({
22
- theme
23
- }) => theme.text.color};
19
+ color: var(--colorsYin090);
24
20
  display: block;
25
- font-weight: 600;
21
+ font-weight: 600; //TODO: (tokens) use token var(--fontWeights500)
26
22
 
27
23
  ${({
28
- isRequired,
29
- theme
24
+ isRequired
30
25
  }) => isRequired && (0, _styledComponents.css)`
31
26
  ::after {
32
27
  content: "*";
33
- color: ${theme.colors.asterisk};
28
+ color: var(--colorsSemanticNegative500);
34
29
  font-weight: 700;
35
- margin-left: ${theme.spacing}px;
30
+ margin-left: var(--spacing100);
36
31
  }
37
32
  `}
38
33
 
39
34
  ${({
40
- disabled,
41
- theme
35
+ disabled
42
36
  }) => disabled && (0, _styledComponents.css)`
43
- color: ${theme.disabled.disabled};
37
+ color: var(--colorsYin030);
44
38
  `}
45
39
  `;
46
- LabelStyle.defaultProps = {
47
- theme: _base.default
48
- };
49
40
  LabelStyle.propTypes = {
50
- disabled: _propTypes.default.bool
41
+ disabled: _propTypes.default.bool,
42
+ isRequired: _propTypes.default.bool
51
43
  };
52
44
  const StyledLabelContainer = _styledComponents.default.div`
53
45
  display: flex;
@@ -59,16 +51,15 @@ const StyledLabelContainer = _styledComponents.default.div`
59
51
  inline,
60
52
  pr,
61
53
  pl,
62
- width,
63
- theme
54
+ width
64
55
  }) => inline && (0, _styledComponents.css)`
65
56
  box-sizing: border-box;
66
57
  margin-bottom: 0;
67
58
  ${pr && (0, _styledComponents.css)`
68
- padding-right: ${pr * theme.spacing}px;
59
+ padding-right: var(${pr === 1 ? "--spacing100" : "--spacing200"});
69
60
  `};
70
61
  ${pl && (0, _styledComponents.css)`
71
- padding-left: ${pl * theme.spacing}px;
62
+ padding-left: var(${pl === 1 ? "--spacing100" : "--spacing200"});
72
63
  `};
73
64
  justify-content: ${align === "right" ? "flex-end" : "flex-start"};
74
65
  width: ${width === 0 ? StyledLabelContainer.defaultProps.width : width}%;
@@ -79,7 +70,7 @@ const StyledLabelContainer = _styledComponents.default.div`
79
70
  }) => optional && (0, _styledComponents.css)`
80
71
  ::after {
81
72
  content: "(optional)";
82
- font-weight: 350;
73
+ font-weight: 350; //TODO: (tokens) use token var(--fontWeights400)
83
74
  margin-left: 4px;
84
75
  }
85
76
  `}
@@ -87,14 +78,12 @@ const StyledLabelContainer = _styledComponents.default.div`
87
78
  exports.StyledLabelContainer = StyledLabelContainer;
88
79
  StyledLabelContainer.defaultProps = {
89
80
  align: "right",
90
- theme: _base.default,
91
81
  width: 30
92
82
  };
93
83
  StyledLabelContainer.propTypes = {
94
84
  align: _propTypes.default.oneOf(["left", "right"]),
95
85
  inline: _propTypes.default.bool,
96
86
  width: _propTypes.default.number,
97
- readOnly: _propTypes.default.bool,
98
87
  pr: _propTypes.default.number,
99
88
  pl: _propTypes.default.number
100
89
  };
@@ -19,6 +19,8 @@ function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return
19
19
 
20
20
  function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (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; }
21
21
 
22
+ function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
23
+
22
24
  const ButtonToggleInput = /*#__PURE__*/_react.default.forwardRef((props, forwardRef) => {
23
25
  const {
24
26
  onFocus,
@@ -41,18 +43,13 @@ const ButtonToggleInput = /*#__PURE__*/_react.default.forwardRef((props, forward
41
43
  if (onFocus) onFocus(ev);
42
44
  };
43
45
 
44
- return /*#__PURE__*/_react.default.createElement(_buttonToggle.StyledButtonToggleInput, {
46
+ return /*#__PURE__*/_react.default.createElement(_buttonToggle.StyledButtonToggleInput, _extends({}, props, {
45
47
  type: "radio",
46
- name: props.name,
47
48
  id: props.guid,
48
- disabled: props.disabled,
49
- checked: props.checked,
50
- onChange: props.onChange,
51
49
  onBlur: handleBlur,
52
50
  onFocus: handleFocus,
53
- value: props.value,
54
51
  ref: forwardRef
55
- });
52
+ }));
56
53
  });
57
54
 
58
55
  ButtonToggleInput.propTypes = {
@@ -27,10 +27,15 @@ function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj;
27
27
 
28
28
  const ButtonToggle = props => {
29
29
  const {
30
+ "aria-label": ariaLabel,
31
+ "aria-labelledby": ariaLabelledBy,
30
32
  buttonIcon,
31
33
  buttonIconSize,
32
34
  checked,
33
35
  children,
36
+ "data-component": dataComponent,
37
+ "data-element": dataElement,
38
+ "data-role": dataRole,
34
39
  disabled,
35
40
  grouped,
36
41
  name,
@@ -50,8 +55,10 @@ const ButtonToggle = props => {
50
55
 
51
56
  if (buttonIcon) {
52
57
  icon = /*#__PURE__*/_react.default.createElement(_buttonToggleIcon.default, {
58
+ "aria-hidden": true,
53
59
  buttonIcon: buttonIcon,
54
60
  buttonIconSize: buttonIconSize,
61
+ hasNoContent: !children,
55
62
  disabled: disabled
56
63
  });
57
64
  }
@@ -61,10 +68,15 @@ const ButtonToggle = props => {
61
68
  }
62
69
 
63
70
  return /*#__PURE__*/_react.default.createElement(_buttonToggle.StyledButtonToggle, {
64
- "data-component": "button-toggle",
71
+ "data-component": dataComponent || "button-toggle",
72
+ "data-element": dataElement,
73
+ "data-role": dataRole,
65
74
  grouped: grouped,
66
75
  onClick: handleClick
67
76
  }, /*#__PURE__*/_react.default.createElement(_buttonToggleInput.default, {
77
+ "aria-label": ariaLabel,
78
+ "aria-labelledby": ariaLabelledBy,
79
+ "data-element": "button-toggle-input",
68
80
  name: name,
69
81
  checked: checked,
70
82
  disabled: disabled,
@@ -86,9 +98,24 @@ const ButtonToggle = props => {
86
98
  };
87
99
 
88
100
  ButtonToggle.propTypes = {
101
+ /** Prop to specify the aria-label of the component */
102
+ "aria-label": _propTypes.default.string,
103
+
104
+ /** Prop to specify the aria-labelledby property of the component */
105
+ "aria-labelledby": _propTypes.default.string,
106
+
89
107
  /** Set the checked value of the radio button */
90
108
  checked: _propTypes.default.bool,
91
109
 
110
+ /** Identifier used for testing purposes, applied to the root element of the component. */
111
+ "data-component": _propTypes.default.string,
112
+
113
+ /** Identifier used for testing purposes, applied to the root element of the component. */
114
+ "data-element": _propTypes.default.string,
115
+
116
+ /** Identifier used for testing purposes, applied to the root element of the component. */
117
+ "data-role": _propTypes.default.string,
118
+
92
119
  /** Name used on the hidden radio button. */
93
120
  name: _propTypes.default.string,
94
121
 
@@ -2,10 +2,20 @@ import * as React from "react";
2
2
  import { ButtonToggleIconSizes } from "./button-toggle-types";
3
3
 
4
4
  export interface ButtonToggleProps {
5
+ /** Prop to specify the aria-label of the component */
6
+ "aria-label"?: string;
7
+ /** Prop to specify the aria-labelledby property of the component */
8
+ "aria-labelledby"?: string;
5
9
  /** buttonIcon to render. */
6
10
  buttonIcon?: string;
7
11
  /** Sets the size of the buttonIcon (eg. large) */
8
12
  buttonIconSize?: ButtonToggleIconSizes;
13
+ /** Identifier used for testing purposes, applied to the root element of the component. */
14
+ "data-component"?: string;
15
+ /** Identifier used for testing purposes, applied to the root element of the component. */
16
+ "data-element"?: string;
17
+ /** Identifier used for testing purposes, applied to the root element of the component. */
18
+ "data-role"?: string;
9
19
  /** ButtonToggle size */
10
20
  size?: "small" | "medium" | "large";
11
21
  /** Set the checked value of the radio button */
@@ -134,8 +134,11 @@ const iconFontSizes = {
134
134
  largeIcon: 32
135
135
  };
136
136
  const StyledButtonToggleIcon = _styledComponents.default.div`
137
- margin-right: 8px;
138
-
137
+ ${({
138
+ hasNoContent
139
+ }) => hasNoContent ? "" : (0, _styledComponents.css)`
140
+ margin-right: 8px;
141
+ `}
139
142
  ${({
140
143
  buttonIconSize
141
144
  }) => buttonIconSize === "large" && (0, _styledComponents.css)`
@@ -80,7 +80,7 @@ const ButtonToggleGroup = ({
80
80
  "data-element": dataElement
81
81
  }, validationProps, (0, _utils.filterStyledSystemMarginProps)(props)), /*#__PURE__*/_react.default.createElement(_buttonToggleGroup.default, _extends({
82
82
  "aria-label": label,
83
- role: "group",
83
+ role: "radiogroup",
84
84
  inputWidth: inputWidth
85
85
  }, validationProps), /*#__PURE__*/_react.default.createElement(_radioButtonMapper.default, {
86
86
  name: name,
@@ -37,8 +37,8 @@ const StyledLink = _styledComponents.default.span`
37
37
  line-height: 36px;
38
38
  left: -999em;
39
39
  z-index: ${theme.zIndex.aboveAll};
40
- box-shadow: inset 0 0 0 2px ${theme.colors.primary};
41
- border: 2px solid ${theme.colors.white};
40
+ box-shadow: inset 0 0 0 2px var(--colorsActionMajor500);
41
+ border: 2px solid var(--colorsYang100);
42
42
  }
43
43
 
44
44
  a:focus {
@@ -51,38 +51,38 @@ const StyledLink = _styledComponents.default.span`
51
51
  button {
52
52
  font-size: ${isSkipLink ? "16px" : "14px"};
53
53
  text-decoration: underline;
54
- color: ${isSkipLink ? theme.text.color : theme.colors.primary};
54
+ color: ${isSkipLink ? "var(--colorsYin090)" : "var(--colorsActionMajor500)"};
55
55
  display: inline-block;
56
56
  ${_icon.default} {
57
57
  display: inline-block;
58
58
  position: relative;
59
59
  vertical-align: middle;
60
60
  ${iconAlign === "left" && (0, _styledComponents.css)`
61
- margin-right: ${hasContent ? "5px" : 0};
61
+ margin-right: ${hasContent ? "var(--spacing100)" : 0};
62
62
  `}
63
63
  ${iconAlign === "right" && (0, _styledComponents.css)`
64
64
  margin-right: 0;
65
- margin-left: ${hasContent ? "5px" : 0};
65
+ margin-left: ${hasContent ? "var(--spacing100)" : 0};
66
66
  `}
67
67
  }
68
68
 
69
69
  &:hover {
70
70
  cursor: pointer;
71
- color: ${isSkipLink ? theme.text.color : theme.colors.secondary};
71
+ color: ${isSkipLink ? "var(--colorsYin090)" : "var(--colorsActionMajor600)"};
72
72
  }
73
73
 
74
74
  &:focus {
75
- color: ${theme.text.color};
76
- background-color: ${isSkipLink ? theme.colors.white : theme.colors.focusedLinkBackground};
75
+ color: var(--colorsYin090);
76
+ background-color: ${isSkipLink ? "var(--colorsYang100)" : "var(--colorsSemanticFocus250)"};
77
77
  outline: none;
78
78
  }
79
79
 
80
80
  ${disabled && (0, _styledComponents.css)`
81
- color: ${theme.disabled.text};
81
+ color: var(--colorsYin065);
82
82
  &:hover,
83
83
  &:focus {
84
84
  cursor: not-allowed;
85
- color: ${theme.disabled.text};
85
+ color: var(--colorsYin065);
86
86
  }
87
87
  `}
88
88
  }
@@ -37,10 +37,9 @@ const RadioButtonStyle = (0, _styledComponents.default)(_checkbox.default)`
37
37
  fieldHelpInline,
38
38
  reverse,
39
39
  size,
40
- theme,
41
40
  inline
42
41
  }) => (0, _styledComponents.css)`
43
- margin-bottom: ${theme.space[2]}px;
42
+ margin-bottom: var(--spacing150);
44
43
 
45
44
  :last-of-type {
46
45
  margin-bottom: 0;
@@ -79,16 +78,16 @@ const RadioButtonStyle = (0, _styledComponents.default)(_checkbox.default)`
79
78
  }
80
79
 
81
80
  ${_hiddenCheckableInput.default}:checked + ${_checkableInputSvgWrapper.default} circle {
82
- fill: ${theme.text.color};
81
+ fill: var(--colorsUtilityYin090);
83
82
  }
84
83
 
85
84
  ${disabled && (0, _styledComponents.css)`
86
85
  circle {
87
- fill: ${theme.disabled.input};
86
+ fill: var(--colorsCtilityDisabled400);
88
87
  }
89
88
 
90
89
  ${_hiddenCheckableInput.default}:checked + ${_checkableInputSvgWrapper.default} circle {
91
- fill: ${theme.disabled.border};
90
+ fill: var(--colorsUtilityDisabled600);
92
91
  }
93
92
  `}
94
93
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "carbon-react",
3
- "version": "102.0.0",
3
+ "version": "102.3.0",
4
4
  "description": "A library of reusable React components for easily building user interfaces.",
5
5
  "engineStrict": true,
6
6
  "engines": {
@@ -17,7 +17,8 @@
17
17
  "start:debug-theme": "cross-env STORYBOOK_DEBUG_THEME=true npm run start",
18
18
  "test": "jest --config=./jest.conf.json",
19
19
  "test-update": "jest --config=./jest.conf.json --updateSnapshot",
20
- "test-cypress": "cypress open",
20
+ "test:cypress": "cypress open",
21
+ "cypress:react": "npx cypress open-ct",
21
22
  "debug": "node --inspect ./node_modules/jest-cli/bin/jest --watch --config=./jest.conf.json",
22
23
  "format": "prettier --write './src'",
23
24
  "lint": "eslint ./src",
@@ -27,7 +28,7 @@
27
28
  "watch": "npm run clean-lib && npm run copy-files -- --watch & npm run babel -- --watch",
28
29
  "build-storybook": "build-storybook -c .storybook -s .assets",
29
30
  "start:static": "npx http-server -p 9001 ./storybook-static",
30
- "babel": "cross-env NODE_ENV=production babel ./src --config-file ./babel.config.js --out-dir ./lib --ignore '**/*/__spec__.js','**/*.spec.js','**/__definition__.js' --quiet",
31
+ "babel": "cross-env NODE_ENV=production babel ./src --config-file ./babel.config.js --out-dir ./lib --ignore '**/*/__spec__.js','**/*.spec.js','**/__definition__.js','**/*.test.js' --quiet",
31
32
  "clean-lib": "rimraf ./lib",
32
33
  "copy-files": "cpy \"**/\" \"!**/(*.js|*.md|*.mdx|*.stories.*|*.snap)\" ../lib/ --cwd=src --parents",
33
34
  "commit": "git-cz",
@@ -59,6 +60,8 @@
59
60
  "@babel/preset-typescript": "7.12.7",
60
61
  "@commitlint/cli": "^11.0.0",
61
62
  "@commitlint/config-conventional": "^11.0.0",
63
+ "@cypress/react": "^5.9.2",
64
+ "@cypress/webpack-dev-server": "^1.4.0",
62
65
  "@semantic-release/changelog": "^6.0.1",
63
66
  "@semantic-release/exec": "^6.0.2",
64
67
  "@semantic-release/git": "^10.0.1",
@@ -136,7 +139,8 @@
136
139
  "semver": "^7.3.5",
137
140
  "sprintf-js": "^1.1.2",
138
141
  "styled-components": "^4.4.1",
139
- "typescript": "^3.9.5"
142
+ "typescript": "^3.9.5",
143
+ "webpack-dev-server": "^3.11.2"
140
144
  },
141
145
  "dependencies": {
142
146
  "@octokit/rest": "^18.12.0",