@carbon/ibm-products 2.3.0 → 2.3.2
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/README.md +38 -0
- package/es/components/APIKeyModal/APIKeyModal.js +25 -21
- package/es/components/ActionBar/ActionBar.js +5 -5
- package/es/components/CreateFullPage/CreateFullPage.js +4 -2
- package/es/components/CreateModal/CreateModal.docs-page.js +1 -1
- package/es/components/CreateModal/CreateModal.js +2 -1
- package/es/components/CreateSidePanel/CreateSidePanel.docs-page.js +1 -1
- package/es/components/CreateSidePanel/CreateSidePanel.js +6 -2
- package/es/components/CreateTearsheet/CreateTearsheet.js +3 -1
- package/es/components/CreateTearsheetNarrow/CreateTearsheetNarrow.js +6 -2
- package/es/components/EditSidePanel/EditSidePanel.js +6 -2
- package/es/components/Tearsheet/TearsheetShell.js +2 -1
- package/es/global/js/hooks/useResizeObserver.js +1 -1
- package/lib/components/APIKeyModal/APIKeyModal.js +25 -21
- package/lib/components/ActionBar/ActionBar.js +5 -5
- package/lib/components/CreateFullPage/CreateFullPage.js +4 -2
- package/lib/components/CreateModal/CreateModal.docs-page.js +1 -1
- package/lib/components/CreateModal/CreateModal.js +2 -1
- package/lib/components/CreateSidePanel/CreateSidePanel.docs-page.js +1 -1
- package/lib/components/CreateSidePanel/CreateSidePanel.js +6 -2
- package/lib/components/CreateTearsheet/CreateTearsheet.js +3 -1
- package/lib/components/CreateTearsheetNarrow/CreateTearsheetNarrow.js +6 -2
- package/lib/components/EditSidePanel/EditSidePanel.js +6 -2
- package/lib/components/Tearsheet/TearsheetShell.js +2 -1
- package/lib/global/js/hooks/useResizeObserver.js +1 -1
- package/package.json +3 -3
package/README.md
CHANGED
@@ -104,6 +104,44 @@ const App = () => {
|
|
104
104
|
};
|
105
105
|
```
|
106
106
|
|
107
|
+
### Package prefix
|
108
|
+
|
109
|
+
The `@carbon/ibm-products` package uses a default prefix of `c4p` for CSS
|
110
|
+
selectors and some IDs.
|
111
|
+
|
112
|
+
#### Changing the prefix
|
113
|
+
|
114
|
+
Before any `@carbon/ibm-products` components are loaded in script or styling
|
115
|
+
ensure you have done the following.
|
116
|
+
|
117
|
+
```js
|
118
|
+
import { pkg } from '@carbon/ibm-products/es/settings';
|
119
|
+
|
120
|
+
pkg.prefix = 'tst';
|
121
|
+
```
|
122
|
+
|
123
|
+
When using multiple components from the library:
|
124
|
+
|
125
|
+
```css
|
126
|
+
@use '@carbon/ibm-products/scss' with (
|
127
|
+
$pkg-prefix: 'tst'
|
128
|
+
);
|
129
|
+
```
|
130
|
+
|
131
|
+
When using individual components e.g. AboutModal:
|
132
|
+
|
133
|
+
```css
|
134
|
+
@use '@carbon/ibm-products/scss/config' with (
|
135
|
+
$pkg-prefix: 'tst'
|
136
|
+
);
|
137
|
+
|
138
|
+
@use '@carbon/ibm-products/scss/components/AboutModal';
|
139
|
+
```
|
140
|
+
|
141
|
+
See the
|
142
|
+
[example gallery](https://ibm-products.carbondesignsystem.com/?path=/story/overview-examples--c-4-p-gallery-code-sandbox)
|
143
|
+
for the most up-to-date prefix examples.
|
144
|
+
|
107
145
|
### Enabling Canary components and flagged features
|
108
146
|
|
109
147
|
Components that have not yet completed the release review process are considered
|
@@ -77,18 +77,22 @@ export var APIKeyModal = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
77
77
|
previousStepButtonText = _ref.previousStepButtonText,
|
78
78
|
showAPIKeyLabel = _ref.showAPIKeyLabel,
|
79
79
|
rest = _objectWithoutProperties(_ref, _excluded);
|
80
|
-
var _useState = useState(
|
80
|
+
var _useState = useState(null),
|
81
81
|
_useState2 = _slicedToArray(_useState, 2),
|
82
|
-
|
83
|
-
|
84
|
-
var _useState3 = useState(
|
82
|
+
title = _useState2[0],
|
83
|
+
setTitle = _useState2[1];
|
84
|
+
var _useState3 = useState(false),
|
85
85
|
_useState4 = _slicedToArray(_useState3, 2),
|
86
|
-
|
87
|
-
|
88
|
-
var _useState5 = useState(
|
86
|
+
copyError = _useState4[0],
|
87
|
+
setCopyError = _useState4[1];
|
88
|
+
var _useState5 = useState(apiKeyName),
|
89
89
|
_useState6 = _slicedToArray(_useState5, 2),
|
90
|
-
|
91
|
-
|
90
|
+
name = _useState6[0],
|
91
|
+
setName = _useState6[1];
|
92
|
+
var _useState7 = useState(0),
|
93
|
+
_useState8 = _slicedToArray(_useState7, 2),
|
94
|
+
currentStep = _useState8[0],
|
95
|
+
setCurrentStep = _useState8[1];
|
92
96
|
var copyRef = useRef();
|
93
97
|
var apiKeyInputId = useRef(uuidv4());
|
94
98
|
var nameInputId = useRef(uuidv4());
|
@@ -141,18 +145,17 @@ export var APIKeyModal = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
141
145
|
}
|
142
146
|
return closeButtonText;
|
143
147
|
};
|
144
|
-
|
148
|
+
useEffect(function () {
|
145
149
|
if (editing && editSuccess) {
|
146
|
-
|
147
|
-
}
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
150
|
+
setTitle(editSuccessTitle);
|
151
|
+
} else if (apiKeyLoaded) {
|
152
|
+
setTitle(generateSuccessTitle);
|
153
|
+
} else if (hasSteps) {
|
154
|
+
setTitle(customSteps[currentStep].title);
|
155
|
+
} else {
|
156
|
+
setTitle(generateTitle);
|
153
157
|
}
|
154
|
-
|
155
|
-
};
|
158
|
+
}, [apiKeyLoaded, editing, editSuccess, editSuccessTitle, hasSteps, generateSuccessTitle, generateTitle, currentStep, customSteps]);
|
156
159
|
var setNameHandler = function setNameHandler(evt) {
|
157
160
|
setName(evt.target.value);
|
158
161
|
};
|
@@ -235,7 +238,7 @@ export var APIKeyModal = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
235
238
|
preventCloseOnClickOutside: true
|
236
239
|
}), /*#__PURE__*/React.createElement(ModalHeader, {
|
237
240
|
className: "".concat(blockClass, "__header"),
|
238
|
-
title:
|
241
|
+
title: title,
|
239
242
|
label: modalLabel
|
240
243
|
}), /*#__PURE__*/React.createElement(ModalBody, {
|
241
244
|
className: "".concat(blockClass, "__body-container")
|
@@ -253,7 +256,8 @@ export var APIKeyModal = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
253
256
|
labelText: apiKeyLabel,
|
254
257
|
id: apiKeyInputId.current
|
255
258
|
}), (editing || !apiKeyLoaded && nameRequired) && /*#__PURE__*/React.createElement(Form, {
|
256
|
-
onSubmit: submitHandler
|
259
|
+
onSubmit: submitHandler,
|
260
|
+
"aria-label": title
|
257
261
|
}, /*#__PURE__*/React.createElement(TextInput, {
|
258
262
|
helperText: nameHelperText,
|
259
263
|
placeholder: namePlaceholder,
|
@@ -74,13 +74,12 @@ export var ActionBar = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
74
74
|
className: "".concat(blockClass, "__hidden-sizing-items"),
|
75
75
|
"aria-hidden": true,
|
76
76
|
ref: sizingRef
|
77
|
-
}, /*#__PURE__*/React.createElement("span", {
|
78
|
-
"aria-hidden": false
|
79
|
-
}, /*#__PURE__*/React.createElement(ActionBarOverflowItems, {
|
77
|
+
}, /*#__PURE__*/React.createElement("span", null, /*#__PURE__*/React.createElement(ActionBarOverflowItems, {
|
80
78
|
className: "".concat(blockClass, "__hidden-sizing-item"),
|
81
79
|
overflowAriaLabel: "hidden sizing overflow items",
|
82
80
|
overflowItems: [],
|
83
|
-
key: "hidden-overflow-menu"
|
81
|
+
key: "hidden-overflow-menu",
|
82
|
+
tabIndex: -1
|
84
83
|
}), actions.map(function (_ref2) {
|
85
84
|
var key = _ref2.key,
|
86
85
|
id = _ref2.id,
|
@@ -89,7 +88,8 @@ export var ActionBar = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
89
88
|
// ensure id is not duplicated
|
90
89
|
"data-original-id": id,
|
91
90
|
key: "hidden-item-".concat(key),
|
92
|
-
className: "".concat(blockClass, "__hidden-sizing-item")
|
91
|
+
className: "".concat(blockClass, "__hidden-sizing-item"),
|
92
|
+
tabIndex: -1
|
93
93
|
}));
|
94
94
|
}))));
|
95
95
|
}, [actions]);
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import _extends from "@babel/runtime/helpers/extends";
|
2
2
|
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
3
3
|
import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
|
4
|
-
var _excluded = ["backButtonText", "cancelButtonText", "children", "className", "modalDangerButtonText", "modalDescription", "modalSecondaryButtonText", "modalTitle", "nextButtonText", "onClose", "onRequestSubmit", "firstFocusElement", "submitButtonText"];
|
4
|
+
var _excluded = ["backButtonText", "cancelButtonText", "children", "className", "modalDangerButtonText", "modalDescription", "modalSecondaryButtonText", "modalTitle", "nextButtonText", "onClose", "onRequestSubmit", "firstFocusElement", "submitButtonText", "title"];
|
5
5
|
/**
|
6
6
|
* Copyright IBM Corp. 2021, 2023
|
7
7
|
*
|
@@ -62,6 +62,7 @@ export var CreateFullPage = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
62
62
|
onRequestSubmit = _ref.onRequestSubmit,
|
63
63
|
firstFocusElement = _ref.firstFocusElement,
|
64
64
|
submitButtonText = _ref.submitButtonText,
|
65
|
+
title = _ref.title,
|
65
66
|
rest = _objectWithoutProperties(_ref, _excluded);
|
66
67
|
var _useState = useState([]),
|
67
68
|
_useState2 = _slicedToArray(_useState, 2),
|
@@ -172,7 +173,8 @@ export var CreateFullPage = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
172
173
|
}, /*#__PURE__*/React.createElement("div", {
|
173
174
|
className: "".concat(blockClass, "__content")
|
174
175
|
}, /*#__PURE__*/React.createElement(Form, {
|
175
|
-
className: "".concat(blockClass, "__form")
|
176
|
+
className: "".concat(blockClass, "__form"),
|
177
|
+
"aria-label": title
|
176
178
|
}, /*#__PURE__*/React.createElement(StepsContext.Provider, {
|
177
179
|
value: {
|
178
180
|
currentStep: currentStep,
|
@@ -8,7 +8,7 @@ var DocsPage = function DocsPage() {
|
|
8
8
|
story: stories.Default
|
9
9
|
}, {
|
10
10
|
title: 'Form validation',
|
11
|
-
description: "All forms, including that within the `CreateModal` should follow
|
11
|
+
description: "All forms, including that within the `CreateModal` should follow @carbon/ibm-products guidelines\nfor form validation.\n\nThis includes the following:\n\n- The `Submit` button in the modal should be disabled, until all required inputs\n are filled in and valid\n- All required inputs should _only_ throw an invalid error _after_ the element\n loses focus\n- All optional form fields should have an `(optional)` text at the end of the\n input `labelText`. Optional should always be in parentheses\n\nYou can find more information on how to validate your form fields in\n[Carbon's Form usage page](https://www.carbondesignsystem.com/components/form/usage)."
|
12
12
|
}, {
|
13
13
|
title: 'Overriding Carbon theme',
|
14
14
|
description: "The design recommendation is to use a dark theme for the CreateModal if the\napplication is currently using a light theme, and vice versa. The theme applied\nto the CreateModal can easily be customized as follows:\n\nIn SCSS:",
|
@@ -73,7 +73,8 @@ export var CreateModal = /*#__PURE__*/React.forwardRef(function (_ref2, ref) {
|
|
73
73
|
}, description && /*#__PURE__*/React.createElement("p", {
|
74
74
|
className: "".concat(blockClass, "__description")
|
75
75
|
}, description), /*#__PURE__*/React.createElement(Form, {
|
76
|
-
className: "".concat(blockClass, "__form")
|
76
|
+
className: "".concat(blockClass, "__form"),
|
77
|
+
"aria-label": title
|
77
78
|
}, children)), /*#__PURE__*/React.createElement(ModalFooter, null, /*#__PURE__*/React.createElement(Button, {
|
78
79
|
type: "button",
|
79
80
|
kind: "secondary",
|
@@ -11,7 +11,7 @@ var DocsPage = function DocsPage() {
|
|
11
11
|
story: stories.Default
|
12
12
|
}, {
|
13
13
|
title: 'Form validation',
|
14
|
-
description: "All forms, including that within the `CreateSidePanel` should follow
|
14
|
+
description: "All forms, including that within the `CreateSidePanel` should follow @carbon/ibm-products\nguidelines for form validation.\n\nThis includes the following:\n\n- The `Submit` button in the side panel should be disabled, until all required\n inputs are filled in and valid\n- All required inputs should _only_ throw an invalid error _after_ the element\n loses focus\n- All optional form fields should have an `(optional)` text at the end of the\n input `labelText`. Optional should always be in parentheses\n\nYou can find more information on how to validate your form fields in\n[Carbon's Form usage page](https://www.carbondesignsystem.com/components/form/usage)."
|
15
15
|
}]
|
16
16
|
});
|
17
17
|
};
|
@@ -23,6 +23,7 @@ import { getDevtoolsProps } from '../../global/js/utils/devtools';
|
|
23
23
|
// Carbon and package components we use.
|
24
24
|
import { Form } from '@carbon/react';
|
25
25
|
import { SidePanel } from '../SidePanel';
|
26
|
+
import uuidv4 from '../../global/js/utils/uuidv4';
|
26
27
|
|
27
28
|
// The block part of our conventional BEM class names (blockClass__E--M).
|
28
29
|
var blockClass = "".concat(pkg.prefix, "--create-side-panel");
|
@@ -63,6 +64,7 @@ export var CreateSidePanel = /*#__PURE__*/React.forwardRef(function (_ref, ref)
|
|
63
64
|
onClick: onRequestClose,
|
64
65
|
kind: 'secondary'
|
65
66
|
}];
|
67
|
+
var formTitleId = uuidv4();
|
66
68
|
return selectorPageContent && /*#__PURE__*/React.createElement(SidePanel, _extends({}, rest, _objectSpread({
|
67
69
|
open: open,
|
68
70
|
ref: ref,
|
@@ -79,11 +81,13 @@ export var CreateSidePanel = /*#__PURE__*/React.forwardRef(function (_ref, ref)
|
|
79
81
|
size: "md",
|
80
82
|
actions: actions
|
81
83
|
}), /*#__PURE__*/React.createElement("h3", {
|
82
|
-
className: "".concat(blockClass, "__form-title-text ").concat(blockClass, "__content-text")
|
84
|
+
className: "".concat(blockClass, "__form-title-text ").concat(blockClass, "__content-text"),
|
85
|
+
id: formTitleId
|
83
86
|
}, formTitle), /*#__PURE__*/React.createElement("p", {
|
84
87
|
className: "".concat(blockClass, "__form-description-text ").concat(blockClass, "__content-text")
|
85
88
|
}, formDescription), /*#__PURE__*/React.createElement(Form, {
|
86
|
-
className: "".concat(blockClass, "__form")
|
89
|
+
className: "".concat(blockClass, "__form"),
|
90
|
+
"aria-labelledby": formTitleId
|
87
91
|
}, children));
|
88
92
|
});
|
89
93
|
CreateSidePanel = pkg.checkComponentEnabled(CreateSidePanel, componentName);
|
@@ -196,7 +196,9 @@ export var CreateTearsheet = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
196
196
|
className: "".concat(blockClass, "__content"),
|
197
197
|
onBlur: handleBlur,
|
198
198
|
ref: contentRef
|
199
|
-
}, /*#__PURE__*/React.createElement(Form,
|
199
|
+
}, /*#__PURE__*/React.createElement(Form, {
|
200
|
+
"aria-label": title
|
201
|
+
}, /*#__PURE__*/React.createElement(StepsContext.Provider, {
|
200
202
|
value: {
|
201
203
|
currentStep: currentStep,
|
202
204
|
setIsDisabled: setIsDisabled,
|
@@ -18,6 +18,7 @@ import { Form } from '@carbon/react';
|
|
18
18
|
import { getDevtoolsProps } from '../../global/js/utils/devtools';
|
19
19
|
import { pkg } from '../../settings';
|
20
20
|
import { TearsheetNarrow } from '../Tearsheet/TearsheetNarrow';
|
21
|
+
import uuidv4 from '../../global/js/utils/uuidv4';
|
21
22
|
|
22
23
|
// The block part of our conventional BEM class names (blockClass__E--M).
|
23
24
|
var blockClass = "".concat(pkg.prefix, "--create-tearsheet-narrow");
|
@@ -57,6 +58,7 @@ export var CreateTearsheetNarrow = /*#__PURE__*/React.forwardRef(function (_ref,
|
|
57
58
|
kind: 'secondary'
|
58
59
|
}];
|
59
60
|
var formTextClass = "".concat(blockClass, "__content-text");
|
61
|
+
var formTitleId = uuidv4();
|
60
62
|
return /*#__PURE__*/React.createElement(TearsheetNarrow, _extends({}, rest, {
|
61
63
|
title: title,
|
62
64
|
description: description,
|
@@ -73,11 +75,13 @@ export var CreateTearsheetNarrow = /*#__PURE__*/React.forwardRef(function (_ref,
|
|
73
75
|
verticalPosition: verticalPosition,
|
74
76
|
role: "presentation"
|
75
77
|
}, getDevtoolsProps(componentName)), /*#__PURE__*/React.createElement("h3", {
|
76
|
-
className: cx("".concat(blockClass, "__form-title-text"), formTextClass)
|
78
|
+
className: cx("".concat(blockClass, "__form-title-text"), formTextClass),
|
79
|
+
id: formTitleId
|
77
80
|
}, formTitle), /*#__PURE__*/React.createElement("p", {
|
78
81
|
className: cx("".concat(blockClass, "__form-description-text"), formTextClass)
|
79
82
|
}, formDescription), /*#__PURE__*/React.createElement(Form, {
|
80
|
-
className: "".concat(blockClass, "__form")
|
83
|
+
className: "".concat(blockClass, "__form"),
|
84
|
+
"aria-labelledby": formTitleId
|
81
85
|
}, children));
|
82
86
|
});
|
83
87
|
|
@@ -24,6 +24,7 @@ import { pkg /*, carbon */ } from '../../settings';
|
|
24
24
|
import { Form } from '@carbon/react';
|
25
25
|
import { SidePanel } from '../SidePanel';
|
26
26
|
import '../../global/js/utils/props-helper';
|
27
|
+
import uuidv4 from '../../global/js/utils/uuidv4';
|
27
28
|
|
28
29
|
// The block part of our conventional BEM class names (blockClass__E--M).
|
29
30
|
var blockClass = "".concat(pkg.prefix, "--edit-side-panel");
|
@@ -75,6 +76,7 @@ export var EditSidePanel = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
75
76
|
onClick: onRequestClose,
|
76
77
|
kind: 'secondary'
|
77
78
|
}];
|
79
|
+
var formTitleId = uuidv4();
|
78
80
|
return /*#__PURE__*/React.createElement(SidePanel, _extends({}, rest, _objectSpread({
|
79
81
|
open: open,
|
80
82
|
ref: ref,
|
@@ -92,11 +94,13 @@ export var EditSidePanel = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
92
94
|
preventCloseOnClickOutside: true,
|
93
95
|
actions: actions
|
94
96
|
}), formTitle && /*#__PURE__*/React.createElement("h3", {
|
97
|
+
id: formTitleId,
|
95
98
|
className: "".concat(blockClass, "__form-title-text ").concat(blockClass, "__content-text")
|
96
99
|
}, formTitle), formDescription && /*#__PURE__*/React.createElement("p", {
|
97
100
|
className: "".concat(blockClass, "__form-description-text ").concat(blockClass, "__content-text")
|
98
101
|
}, formDescription), /*#__PURE__*/React.createElement(Form, {
|
99
|
-
className: "".concat(blockClass, "__form")
|
102
|
+
className: "".concat(blockClass, "__form"),
|
103
|
+
"aria-labelledby": formTitleId
|
100
104
|
}, children));
|
101
105
|
});
|
102
106
|
|
@@ -131,7 +135,7 @@ EditSidePanel.propTypes = {
|
|
131
135
|
/**
|
132
136
|
* Specifies a required field that provides a title for a form
|
133
137
|
*/
|
134
|
-
formTitle: PropTypes.node,
|
138
|
+
formTitle: PropTypes.node.isRequired,
|
135
139
|
/**
|
136
140
|
* Specifies an optional handler which is called when the CreateSidePanel
|
137
141
|
* is closed.
|
@@ -261,7 +261,8 @@ export var TearsheetShell = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
261
261
|
actions: actions,
|
262
262
|
buttonSize: wide ? '2xl' : null,
|
263
263
|
className: "".concat(bc, "__buttons"),
|
264
|
-
size: wide ? '2xl' : 'lg'
|
264
|
+
size: wide ? '2xl' : 'lg',
|
265
|
+
"aria-hidden": !open
|
265
266
|
})))), /*#__PURE__*/React.createElement("div", {
|
266
267
|
className: "".concat(bc, "__resize-detector"),
|
267
268
|
ref: resizer
|
@@ -85,18 +85,22 @@ var APIKeyModal = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
|
|
85
85
|
previousStepButtonText = _ref.previousStepButtonText,
|
86
86
|
showAPIKeyLabel = _ref.showAPIKeyLabel,
|
87
87
|
rest = (0, _objectWithoutProperties2.default)(_ref, _excluded);
|
88
|
-
var _useState = (0, _react.useState)(
|
88
|
+
var _useState = (0, _react.useState)(null),
|
89
89
|
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
90
|
-
|
91
|
-
|
92
|
-
var _useState3 = (0, _react.useState)(
|
90
|
+
title = _useState2[0],
|
91
|
+
setTitle = _useState2[1];
|
92
|
+
var _useState3 = (0, _react.useState)(false),
|
93
93
|
_useState4 = (0, _slicedToArray2.default)(_useState3, 2),
|
94
|
-
|
95
|
-
|
96
|
-
var _useState5 = (0, _react.useState)(
|
94
|
+
copyError = _useState4[0],
|
95
|
+
setCopyError = _useState4[1];
|
96
|
+
var _useState5 = (0, _react.useState)(apiKeyName),
|
97
97
|
_useState6 = (0, _slicedToArray2.default)(_useState5, 2),
|
98
|
-
|
99
|
-
|
98
|
+
name = _useState6[0],
|
99
|
+
setName = _useState6[1];
|
100
|
+
var _useState7 = (0, _react.useState)(0),
|
101
|
+
_useState8 = (0, _slicedToArray2.default)(_useState7, 2),
|
102
|
+
currentStep = _useState8[0],
|
103
|
+
setCurrentStep = _useState8[1];
|
100
104
|
var copyRef = (0, _react.useRef)();
|
101
105
|
var apiKeyInputId = (0, _react.useRef)((0, _uuidv.default)());
|
102
106
|
var nameInputId = (0, _react.useRef)((0, _uuidv.default)());
|
@@ -149,18 +153,17 @@ var APIKeyModal = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
|
|
149
153
|
}
|
150
154
|
return closeButtonText;
|
151
155
|
};
|
152
|
-
|
156
|
+
(0, _react.useEffect)(function () {
|
153
157
|
if (editing && editSuccess) {
|
154
|
-
|
155
|
-
}
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
158
|
+
setTitle(editSuccessTitle);
|
159
|
+
} else if (apiKeyLoaded) {
|
160
|
+
setTitle(generateSuccessTitle);
|
161
|
+
} else if (hasSteps) {
|
162
|
+
setTitle(customSteps[currentStep].title);
|
163
|
+
} else {
|
164
|
+
setTitle(generateTitle);
|
161
165
|
}
|
162
|
-
|
163
|
-
};
|
166
|
+
}, [apiKeyLoaded, editing, editSuccess, editSuccessTitle, hasSteps, generateSuccessTitle, generateTitle, currentStep, customSteps]);
|
164
167
|
var setNameHandler = function setNameHandler(evt) {
|
165
168
|
setName(evt.target.value);
|
166
169
|
};
|
@@ -243,7 +246,7 @@ var APIKeyModal = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
|
|
243
246
|
preventCloseOnClickOutside: true
|
244
247
|
}), /*#__PURE__*/_react.default.createElement(_react2.ModalHeader, {
|
245
248
|
className: "".concat(blockClass, "__header"),
|
246
|
-
title:
|
249
|
+
title: title,
|
247
250
|
label: modalLabel
|
248
251
|
}), /*#__PURE__*/_react.default.createElement(_react2.ModalBody, {
|
249
252
|
className: "".concat(blockClass, "__body-container")
|
@@ -261,7 +264,8 @@ var APIKeyModal = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
|
|
261
264
|
labelText: apiKeyLabel,
|
262
265
|
id: apiKeyInputId.current
|
263
266
|
}), (editing || !apiKeyLoaded && nameRequired) && /*#__PURE__*/_react.default.createElement(_react2.Form, {
|
264
|
-
onSubmit: submitHandler
|
267
|
+
onSubmit: submitHandler,
|
268
|
+
"aria-label": title
|
265
269
|
}, /*#__PURE__*/_react.default.createElement(_react2.TextInput, {
|
266
270
|
helperText: nameHelperText,
|
267
271
|
placeholder: namePlaceholder,
|
@@ -79,13 +79,12 @@ var ActionBar = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
|
|
79
79
|
className: "".concat(blockClass, "__hidden-sizing-items"),
|
80
80
|
"aria-hidden": true,
|
81
81
|
ref: sizingRef
|
82
|
-
}, /*#__PURE__*/_react.default.createElement("span", {
|
83
|
-
"aria-hidden": false
|
84
|
-
}, /*#__PURE__*/_react.default.createElement(_ActionBarOverflowItems.ActionBarOverflowItems, {
|
82
|
+
}, /*#__PURE__*/_react.default.createElement("span", null, /*#__PURE__*/_react.default.createElement(_ActionBarOverflowItems.ActionBarOverflowItems, {
|
85
83
|
className: "".concat(blockClass, "__hidden-sizing-item"),
|
86
84
|
overflowAriaLabel: "hidden sizing overflow items",
|
87
85
|
overflowItems: [],
|
88
|
-
key: "hidden-overflow-menu"
|
86
|
+
key: "hidden-overflow-menu",
|
87
|
+
tabIndex: -1
|
89
88
|
}), actions.map(function (_ref2) {
|
90
89
|
var key = _ref2.key,
|
91
90
|
id = _ref2.id,
|
@@ -94,7 +93,8 @@ var ActionBar = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref) {
|
|
94
93
|
// ensure id is not duplicated
|
95
94
|
"data-original-id": id,
|
96
95
|
key: "hidden-item-".concat(key),
|
97
|
-
className: "".concat(blockClass, "__hidden-sizing-item")
|
96
|
+
className: "".concat(blockClass, "__hidden-sizing-item"),
|
97
|
+
tabIndex: -1
|
98
98
|
}));
|
99
99
|
}))));
|
100
100
|
}, [actions]);
|
@@ -19,7 +19,7 @@ var _CreateInfluencer = require("../CreateInfluencer");
|
|
19
19
|
var _ActionSet = require("../ActionSet");
|
20
20
|
var _hooks = require("../../global/js/hooks");
|
21
21
|
var _lastIndexInArray = require("../../global/js/utils/lastIndexInArray");
|
22
|
-
var _excluded = ["backButtonText", "cancelButtonText", "children", "className", "modalDangerButtonText", "modalDescription", "modalSecondaryButtonText", "modalTitle", "nextButtonText", "onClose", "onRequestSubmit", "firstFocusElement", "submitButtonText"];
|
22
|
+
var _excluded = ["backButtonText", "cancelButtonText", "children", "className", "modalDangerButtonText", "modalDescription", "modalSecondaryButtonText", "modalTitle", "nextButtonText", "onClose", "onRequestSubmit", "firstFocusElement", "submitButtonText", "title"];
|
23
23
|
/**
|
24
24
|
* Copyright IBM Corp. 2021, 2023
|
25
25
|
*
|
@@ -71,6 +71,7 @@ var CreateFullPage = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref)
|
|
71
71
|
onRequestSubmit = _ref.onRequestSubmit,
|
72
72
|
firstFocusElement = _ref.firstFocusElement,
|
73
73
|
submitButtonText = _ref.submitButtonText,
|
74
|
+
title = _ref.title,
|
74
75
|
rest = (0, _objectWithoutProperties2.default)(_ref, _excluded);
|
75
76
|
var _useState = (0, _react.useState)([]),
|
76
77
|
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
@@ -181,7 +182,8 @@ var CreateFullPage = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref)
|
|
181
182
|
}, /*#__PURE__*/_react.default.createElement("div", {
|
182
183
|
className: "".concat(blockClass, "__content")
|
183
184
|
}, /*#__PURE__*/_react.default.createElement(_react2.Form, {
|
184
|
-
className: "".concat(blockClass, "__form")
|
185
|
+
className: "".concat(blockClass, "__form"),
|
186
|
+
"aria-label": title
|
185
187
|
}, /*#__PURE__*/_react.default.createElement(StepsContext.Provider, {
|
186
188
|
value: {
|
187
189
|
currentStep: currentStep,
|
@@ -18,7 +18,7 @@ var DocsPage = function DocsPage() {
|
|
18
18
|
story: stories.Default
|
19
19
|
}, {
|
20
20
|
title: 'Form validation',
|
21
|
-
description: "All forms, including that within the `CreateModal` should follow
|
21
|
+
description: "All forms, including that within the `CreateModal` should follow @carbon/ibm-products guidelines\nfor form validation.\n\nThis includes the following:\n\n- The `Submit` button in the modal should be disabled, until all required inputs\n are filled in and valid\n- All required inputs should _only_ throw an invalid error _after_ the element\n loses focus\n- All optional form fields should have an `(optional)` text at the end of the\n input `labelText`. Optional should always be in parentheses\n\nYou can find more information on how to validate your form fields in\n[Carbon's Form usage page](https://www.carbondesignsystem.com/components/form/usage)."
|
22
22
|
}, {
|
23
23
|
title: 'Overriding Carbon theme',
|
24
24
|
description: "The design recommendation is to use a dark theme for the CreateModal if the\napplication is currently using a light theme, and vice versa. The theme applied\nto the CreateModal can easily be customized as follows:\n\nIn SCSS:",
|
@@ -78,7 +78,8 @@ var CreateModal = /*#__PURE__*/_react.default.forwardRef(function (_ref2, ref) {
|
|
78
78
|
}, description && /*#__PURE__*/_react.default.createElement("p", {
|
79
79
|
className: "".concat(blockClass, "__description")
|
80
80
|
}, description), /*#__PURE__*/_react.default.createElement(_react2.Form, {
|
81
|
-
className: "".concat(blockClass, "__form")
|
81
|
+
className: "".concat(blockClass, "__form"),
|
82
|
+
"aria-label": title
|
82
83
|
}, children)), /*#__PURE__*/_react.default.createElement(_react2.ModalFooter, null, /*#__PURE__*/_react.default.createElement(_react2.Button, {
|
83
84
|
type: "button",
|
84
85
|
kind: "secondary",
|
@@ -21,7 +21,7 @@ var DocsPage = function DocsPage() {
|
|
21
21
|
story: stories.Default
|
22
22
|
}, {
|
23
23
|
title: 'Form validation',
|
24
|
-
description: "All forms, including that within the `CreateSidePanel` should follow
|
24
|
+
description: "All forms, including that within the `CreateSidePanel` should follow @carbon/ibm-products\nguidelines for form validation.\n\nThis includes the following:\n\n- The `Submit` button in the side panel should be disabled, until all required\n inputs are filled in and valid\n- All required inputs should _only_ throw an invalid error _after_ the element\n loses focus\n- All optional form fields should have an `(optional)` text at the end of the\n input `labelText`. Optional should always be in parentheses\n\nYou can find more information on how to validate your form fields in\n[Carbon's Form usage page](https://www.carbondesignsystem.com/components/form/usage)."
|
25
25
|
}]
|
26
26
|
});
|
27
27
|
};
|
@@ -15,6 +15,7 @@ var _settings = require("../../settings");
|
|
15
15
|
var _devtools = require("../../global/js/utils/devtools");
|
16
16
|
var _react2 = require("@carbon/react");
|
17
17
|
var _SidePanel = require("../SidePanel");
|
18
|
+
var _uuidv = _interopRequireDefault(require("../../global/js/utils/uuidv4"));
|
18
19
|
var _excluded = ["className", "children", "disableSubmit", "formTitle", "formDescription", "onRequestClose", "onRequestSubmit", "open", "primaryButtonText", "secondaryButtonText", "selectorPageContent", "selectorPrimaryFocus", "subtitle", "title"];
|
19
20
|
/**
|
20
21
|
* Copyright IBM Corp. 2021, 2021
|
@@ -66,6 +67,7 @@ var CreateSidePanel = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref
|
|
66
67
|
onClick: onRequestClose,
|
67
68
|
kind: 'secondary'
|
68
69
|
}];
|
70
|
+
var formTitleId = (0, _uuidv.default)();
|
69
71
|
return selectorPageContent && /*#__PURE__*/_react.default.createElement(_SidePanel.SidePanel, (0, _extends2.default)({}, rest, _objectSpread({
|
70
72
|
open: open,
|
71
73
|
ref: ref,
|
@@ -82,11 +84,13 @@ var CreateSidePanel = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref
|
|
82
84
|
size: "md",
|
83
85
|
actions: actions
|
84
86
|
}), /*#__PURE__*/_react.default.createElement("h3", {
|
85
|
-
className: "".concat(blockClass, "__form-title-text ").concat(blockClass, "__content-text")
|
87
|
+
className: "".concat(blockClass, "__form-title-text ").concat(blockClass, "__content-text"),
|
88
|
+
id: formTitleId
|
86
89
|
}, formTitle), /*#__PURE__*/_react.default.createElement("p", {
|
87
90
|
className: "".concat(blockClass, "__form-description-text ").concat(blockClass, "__content-text")
|
88
91
|
}, formDescription), /*#__PURE__*/_react.default.createElement(_react2.Form, {
|
89
|
-
className: "".concat(blockClass, "__form")
|
92
|
+
className: "".concat(blockClass, "__form"),
|
93
|
+
"aria-labelledby": formTitleId
|
90
94
|
}, children));
|
91
95
|
});
|
92
96
|
exports.CreateSidePanel = CreateSidePanel;
|
@@ -207,7 +207,9 @@ var CreateTearsheet = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
|
|
207
207
|
className: "".concat(blockClass, "__content"),
|
208
208
|
onBlur: handleBlur,
|
209
209
|
ref: contentRef
|
210
|
-
}, /*#__PURE__*/_react.default.createElement(_react2.Form,
|
210
|
+
}, /*#__PURE__*/_react.default.createElement(_react2.Form, {
|
211
|
+
"aria-label": title
|
212
|
+
}, /*#__PURE__*/_react.default.createElement(StepsContext.Provider, {
|
211
213
|
value: {
|
212
214
|
currentStep: currentStep,
|
213
215
|
setIsDisabled: setIsDisabled,
|
@@ -14,6 +14,7 @@ var _react2 = require("@carbon/react");
|
|
14
14
|
var _devtools = require("../../global/js/utils/devtools");
|
15
15
|
var _settings = require("../../settings");
|
16
16
|
var _TearsheetNarrow = require("../Tearsheet/TearsheetNarrow");
|
17
|
+
var _uuidv = _interopRequireDefault(require("../../global/js/utils/uuidv4"));
|
17
18
|
var _excluded = ["children", "className", "description", "disableSubmit", "formDescription", "formTitle", "label", "open", "onRequestClose", "onRequestSubmit", "primaryButtonText", "secondaryButtonText", "selectorPrimaryFocus", "title", "verticalPosition"];
|
18
19
|
/**
|
19
20
|
* Copyright IBM Corp. 2021, 2021
|
@@ -61,6 +62,7 @@ var CreateTearsheetNarrow = /*#__PURE__*/_react.default.forwardRef(function (_re
|
|
61
62
|
kind: 'secondary'
|
62
63
|
}];
|
63
64
|
var formTextClass = "".concat(blockClass, "__content-text");
|
65
|
+
var formTitleId = (0, _uuidv.default)();
|
64
66
|
return /*#__PURE__*/_react.default.createElement(_TearsheetNarrow.TearsheetNarrow, (0, _extends2.default)({}, rest, {
|
65
67
|
title: title,
|
66
68
|
description: description,
|
@@ -77,11 +79,13 @@ var CreateTearsheetNarrow = /*#__PURE__*/_react.default.forwardRef(function (_re
|
|
77
79
|
verticalPosition: verticalPosition,
|
78
80
|
role: "presentation"
|
79
81
|
}, (0, _devtools.getDevtoolsProps)(componentName)), /*#__PURE__*/_react.default.createElement("h3", {
|
80
|
-
className: (0, _classnames.default)("".concat(blockClass, "__form-title-text"), formTextClass)
|
82
|
+
className: (0, _classnames.default)("".concat(blockClass, "__form-title-text"), formTextClass),
|
83
|
+
id: formTitleId
|
81
84
|
}, formTitle), /*#__PURE__*/_react.default.createElement("p", {
|
82
85
|
className: (0, _classnames.default)("".concat(blockClass, "__form-description-text"), formTextClass)
|
83
86
|
}, formDescription), /*#__PURE__*/_react.default.createElement(_react2.Form, {
|
84
|
-
className: "".concat(blockClass, "__form")
|
87
|
+
className: "".concat(blockClass, "__form"),
|
88
|
+
"aria-labelledby": formTitleId
|
85
89
|
}, children));
|
86
90
|
});
|
87
91
|
|
@@ -16,6 +16,7 @@ var _settings = require("../../settings");
|
|
16
16
|
var _react2 = require("@carbon/react");
|
17
17
|
var _SidePanel = require("../SidePanel");
|
18
18
|
require("../../global/js/utils/props-helper");
|
19
|
+
var _uuidv = _interopRequireDefault(require("../../global/js/utils/uuidv4"));
|
19
20
|
var _excluded = ["children", "className", "disableSubmit", "formTitle", "formDescription", "onRequestClose", "onRequestSubmit", "open", "placement", "primaryButtonText", "secondaryButtonText", "selectorPrimaryFocus", "selectorPageContent", "size", "slideIn", "subtitle", "title"];
|
20
21
|
/**
|
21
22
|
* Copyright IBM Corp. 2021, 2021
|
@@ -78,6 +79,7 @@ var EditSidePanel = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref)
|
|
78
79
|
onClick: onRequestClose,
|
79
80
|
kind: 'secondary'
|
80
81
|
}];
|
82
|
+
var formTitleId = (0, _uuidv.default)();
|
81
83
|
return /*#__PURE__*/_react.default.createElement(_SidePanel.SidePanel, (0, _extends2.default)({}, rest, _objectSpread({
|
82
84
|
open: open,
|
83
85
|
ref: ref,
|
@@ -95,11 +97,13 @@ var EditSidePanel = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref)
|
|
95
97
|
preventCloseOnClickOutside: true,
|
96
98
|
actions: actions
|
97
99
|
}), formTitle && /*#__PURE__*/_react.default.createElement("h3", {
|
100
|
+
id: formTitleId,
|
98
101
|
className: "".concat(blockClass, "__form-title-text ").concat(blockClass, "__content-text")
|
99
102
|
}, formTitle), formDescription && /*#__PURE__*/_react.default.createElement("p", {
|
100
103
|
className: "".concat(blockClass, "__form-description-text ").concat(blockClass, "__content-text")
|
101
104
|
}, formDescription), /*#__PURE__*/_react.default.createElement(_react2.Form, {
|
102
|
-
className: "".concat(blockClass, "__form")
|
105
|
+
className: "".concat(blockClass, "__form"),
|
106
|
+
"aria-labelledby": formTitleId
|
103
107
|
}, children));
|
104
108
|
});
|
105
109
|
|
@@ -135,7 +139,7 @@ EditSidePanel.propTypes = {
|
|
135
139
|
/**
|
136
140
|
* Specifies a required field that provides a title for a form
|
137
141
|
*/
|
138
|
-
formTitle: _propTypes.default.node,
|
142
|
+
formTitle: _propTypes.default.node.isRequired,
|
139
143
|
/**
|
140
144
|
* Specifies an optional handler which is called when the CreateSidePanel
|
141
145
|
* is closed.
|
@@ -270,7 +270,8 @@ var TearsheetShell = /*#__PURE__*/_react.default.forwardRef(function (_ref, ref)
|
|
270
270
|
actions: actions,
|
271
271
|
buttonSize: wide ? '2xl' : null,
|
272
272
|
className: "".concat(bc, "__buttons"),
|
273
|
-
size: wide ? '2xl' : 'lg'
|
273
|
+
size: wide ? '2xl' : 'lg',
|
274
|
+
"aria-hidden": !open
|
274
275
|
})))), /*#__PURE__*/_react.default.createElement("div", {
|
275
276
|
className: "".concat(bc, "__resize-detector"),
|
276
277
|
ref: resizer
|
package/package.json
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
{
|
2
2
|
"name": "@carbon/ibm-products",
|
3
3
|
"description": "Carbon for IBM Products",
|
4
|
-
"version": "2.3.
|
4
|
+
"version": "2.3.2",
|
5
5
|
"license": "Apache-2.0",
|
6
6
|
"main": "lib/index.js",
|
7
7
|
"module": "es/index.js",
|
@@ -88,11 +88,11 @@
|
|
88
88
|
"@carbon/grid": "^11.15.0",
|
89
89
|
"@carbon/layout": "^11.15.0",
|
90
90
|
"@carbon/motion": "^11.12.0",
|
91
|
-
"@carbon/react": "
|
91
|
+
"@carbon/react": "^1.31.3",
|
92
92
|
"@carbon/themes": "^11.20.0",
|
93
93
|
"@carbon/type": "^11.19.0",
|
94
94
|
"react": "^16.8.6 || ^17.0.1",
|
95
95
|
"react-dom": "^16.8.6 || ^17.0.1"
|
96
96
|
},
|
97
|
-
"gitHead": "
|
97
|
+
"gitHead": "d10acc630bdeb946d794ea2430d5df1ebf650c14"
|
98
98
|
}
|