@carbon/ibm-products 1.8.0 → 1.11.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/css/index-full-carbon.css +270 -5656
- package/css/index-full-carbon.css.map +1 -1
- package/css/index-full-carbon.min.css +6 -6
- package/css/index-full-carbon.min.css.map +1 -1
- package/css/index-without-carbon-released-only.css +58 -3432
- package/css/index-without-carbon-released-only.css.map +1 -1
- package/css/index-without-carbon-released-only.min.css +3 -3
- package/css/index-without-carbon-released-only.min.css.map +1 -1
- package/css/index-without-carbon.css +238 -3922
- package/css/index-without-carbon.css.map +1 -1
- package/css/index-without-carbon.min.css +6 -6
- package/css/index-without-carbon.min.css.map +1 -1
- package/css/index.css +238 -3923
- package/css/index.css.map +1 -1
- package/css/index.min.css +6 -6
- package/css/index.min.css.map +1 -1
- package/es/components/AddSelect/AddSelect.js +147 -53
- package/es/components/AddSelect/AddSelectBreadcrumbs.js +4 -4
- package/es/components/AddSelect/AddSelectColumn.js +195 -0
- package/es/components/AddSelect/AddSelectList.js +67 -8
- package/es/components/AddSelect/AddSelectSidebar.js +8 -15
- package/es/components/AddSelect/add-select-utils.js +64 -0
- package/es/components/BreadcrumbWithOverflow/BreadcrumbWithOverflow.js +2 -1
- package/es/components/ButtonMenu/ButtonMenu.js +1 -1
- package/es/components/DataSpreadsheet/DataSpreadsheet.js +505 -167
- package/es/components/DataSpreadsheet/DataSpreadsheetBody.js +244 -17
- package/es/components/DataSpreadsheet/DataSpreadsheetHeader.js +74 -8
- package/es/components/DataSpreadsheet/hooks/useMoveActiveCell.js +27 -0
- package/es/components/DataSpreadsheet/hooks/useResetSpreadsheetFocus.js +28 -0
- package/es/components/DataSpreadsheet/hooks/useSpreadsheetOutsideClick.js +41 -0
- package/es/components/DataSpreadsheet/utils/checkActiveHeaderCell.js +34 -0
- package/es/components/DataSpreadsheet/utils/createActiveCellFn.js +58 -0
- package/es/components/DataSpreadsheet/utils/createCellSelectionArea.js +49 -0
- package/es/components/DataSpreadsheet/{generateData.js → utils/generateData.js} +6 -0
- package/es/components/DataSpreadsheet/{getCellSize.js → utils/getCellSize.js} +0 -0
- package/es/components/DataSpreadsheet/utils/handleHeaderCellSelection.js +46 -0
- package/es/components/DataSpreadsheet/utils/handleMultipleKeys.js +82 -0
- package/es/components/DataSpreadsheet/utils/removeCellSelections.js +30 -0
- package/es/components/InlineEdit/InlineEdit.js +80 -39
- package/es/components/OptionsTile/OptionsTile.js +31 -21
- package/es/components/OptionsTile/index.js +1 -1
- package/es/components/PageHeader/PageHeader.js +26 -15
- package/es/components/PageHeader/PageHeaderTitle.js +2 -1
- package/es/components/PageHeader/PageHeaderUtils.js +24 -29
- package/es/components/TagSet/TagSet.js +12 -3
- package/es/components/UserProfileImage/UserProfileImage.js +2 -1
- package/es/global/js/utils/DisplayBox.js +31 -0
- package/es/global/js/utils/deepCloneObject.js +26 -0
- package/lib/components/AddSelect/AddSelect.js +150 -54
- package/lib/components/AddSelect/AddSelectBreadcrumbs.js +2 -3
- package/lib/components/AddSelect/AddSelectColumn.js +219 -0
- package/lib/components/AddSelect/AddSelectList.js +65 -8
- package/lib/components/AddSelect/AddSelectSidebar.js +14 -15
- package/lib/components/AddSelect/add-select-utils.js +78 -0
- package/lib/components/BreadcrumbWithOverflow/BreadcrumbWithOverflow.js +2 -1
- package/lib/components/ButtonMenu/ButtonMenu.js +1 -1
- package/lib/components/DataSpreadsheet/DataSpreadsheet.js +514 -170
- package/lib/components/DataSpreadsheet/DataSpreadsheetBody.js +251 -18
- package/lib/components/DataSpreadsheet/DataSpreadsheetHeader.js +82 -9
- package/lib/components/DataSpreadsheet/hooks/useMoveActiveCell.js +37 -0
- package/lib/components/DataSpreadsheet/hooks/useResetSpreadsheetFocus.js +39 -0
- package/lib/components/DataSpreadsheet/hooks/useSpreadsheetOutsideClick.js +52 -0
- package/lib/components/DataSpreadsheet/utils/checkActiveHeaderCell.js +45 -0
- package/lib/components/DataSpreadsheet/{createActiveCellFn.js → utils/createActiveCellFn.js} +22 -9
- package/lib/components/DataSpreadsheet/utils/createCellSelectionArea.js +60 -0
- package/lib/components/DataSpreadsheet/{generateData.js → utils/generateData.js} +6 -0
- package/lib/components/DataSpreadsheet/{getCellSize.js → utils/getCellSize.js} +0 -0
- package/lib/components/DataSpreadsheet/utils/handleHeaderCellSelection.js +59 -0
- package/lib/components/DataSpreadsheet/utils/handleMultipleKeys.js +92 -0
- package/lib/components/DataSpreadsheet/utils/removeCellSelections.js +41 -0
- package/lib/components/InlineEdit/InlineEdit.js +82 -40
- package/lib/components/OptionsTile/OptionsTile.js +30 -20
- package/lib/components/PageHeader/PageHeader.js +25 -15
- package/lib/components/PageHeader/PageHeaderTitle.js +2 -1
- package/lib/components/PageHeader/PageHeaderUtils.js +24 -29
- package/lib/components/TagSet/TagSet.js +13 -3
- package/lib/components/UserProfileImage/UserProfileImage.js +2 -1
- package/lib/global/js/utils/DisplayBox.js +46 -0
- package/lib/global/js/utils/deepCloneObject.js +37 -0
- package/package.json +17 -17
- package/scss/components/ActionBar/_storybook-styles.scss +8 -0
- package/scss/components/ActionSet/_storybook-styles.scss +1 -3
- package/scss/components/AddSelect/_add-select.scss +99 -14
- package/scss/components/BreadcrumbWithOverflow/_breadcrumb-with-overflow.scss +7 -3
- package/scss/components/BreadcrumbWithOverflow/_storybook-styles.scss +8 -0
- package/scss/components/ButtonSetWithOverflow/_storybook-styles.scss +8 -0
- package/scss/components/CreateInfluencer/_create-influencer.scss +2 -0
- package/scss/components/CreateModal/_create-modal.scss +1 -0
- package/scss/components/CreateSidePanel/_create-side-panel.scss +1 -1
- package/scss/components/CreateSidePanel/_storybook-styles.scss +1 -1
- package/scss/components/CreateTearsheet/_create-tearsheet.scss +1 -0
- package/scss/components/CreateTearsheetNarrow/_create-tearsheet-narrow.scss +1 -0
- package/scss/components/DataSpreadsheet/_data-spreadsheet.scss +42 -6
- package/scss/components/EditSidePanel/_edit-side-panel.scss +9 -0
- package/scss/components/EditSidePanel/_storybook-styles.scss +1 -1
- package/scss/components/InlineEdit/_inline-edit.scss +53 -43
- package/scss/components/InlineEdit/_storybook-styles.scss +2 -0
- package/scss/components/LoadingBar/_loading-bar.scss +13 -0
- package/scss/components/NotificationsPanel/_notifications-panel.scss +3 -0
- package/scss/components/OptionsTile/_index.scss +1 -1
- package/scss/components/OptionsTile/_options-tile.scss +17 -17
- package/scss/components/OptionsTile/_storybook-styles.scss +4 -4
- package/scss/components/PageHeader/_page-header.scss +5 -2
- package/scss/components/SidePanel/_side-panel.scss +19 -12
- package/scss/components/StatusIcon/_status-icon.scss +1 -0
- package/scss/components/TagSet/_storybook-styles.scss +8 -0
- package/scss/components/Tearsheet/_tearsheet.scss +1 -2
- package/scss/components/UserProfileImage/_user-profile-image.scss +9 -0
- package/scss/components/WebTerminal/_web-terminal.scss +2 -0
- package/scss/global/styles/_display-box.scss +62 -0
- package/es/components/DataSpreadsheet/createActiveCellFn.js +0 -45
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright IBM Corp. 2022, 2022
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the Apache-2.0 license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
import { px } from '@carbon/layout';
|
|
8
|
+
import { deepCloneObject } from '../../../global/js/utils/deepCloneObject';
|
|
9
|
+
export var createCellSelectionArea = function createCellSelectionArea(_ref) {
|
|
10
|
+
var area = _ref.area,
|
|
11
|
+
blockClass = _ref.blockClass,
|
|
12
|
+
defaultColumn = _ref.defaultColumn,
|
|
13
|
+
selectionAreas = _ref.selectionAreas,
|
|
14
|
+
setSelectionAreas = _ref.setSelectionAreas;
|
|
15
|
+
var greatestRow = Math.max(area.point1.row, area.point2.row);
|
|
16
|
+
var greatestColumn = Math.max(area.point1.column, area.point2.column);
|
|
17
|
+
var lowestRowIndex = Math.min(area.point1.row, area.point2.row);
|
|
18
|
+
var lowestColumnIndex = Math.min(area.point1.column, area.point2.column);
|
|
19
|
+
var point1Element = document.querySelector("[data-row-index=\"".concat(area.point1.row, "\"][data-column-index=\"").concat(area.point1.column, "\"]")) || document.querySelector(".".concat(blockClass, "__body--td")); // if we can't find the point1 element (this can happen in the case where a virtualized row is not present anymore in the DOM), we get the default height/width of the first body cell we find
|
|
20
|
+
|
|
21
|
+
var selectionAreaCellWidth = point1Element.offsetWidth;
|
|
22
|
+
var selectionAreaCellHeight = point1Element.offsetHeight;
|
|
23
|
+
var selectionAreaTotalWidth = selectionAreaCellWidth * (greatestColumn - lowestColumnIndex + 1);
|
|
24
|
+
var selectionAreaTotalHeight = selectionAreaCellHeight * (greatestRow - lowestRowIndex + 1);
|
|
25
|
+
var bodyContainer = document.querySelector(".".concat(blockClass, "__list--container")).firstElementChild;
|
|
26
|
+
var placementElement = bodyContainer.querySelector("[data-row-index=\"".concat(lowestRowIndex, "\"][data-column-index=\"").concat(lowestColumnIndex, "\"]"));
|
|
27
|
+
var relativePosition = {
|
|
28
|
+
top: placementElement ? placementElement.getBoundingClientRect().top - bodyContainer.getBoundingClientRect().top : lowestRowIndex === 0 ? 0 : selectionAreaCellHeight * lowestRowIndex,
|
|
29
|
+
// calculate top value here if virtualized row is not in DOM
|
|
30
|
+
left: placementElement ? placementElement.getBoundingClientRect().left - bodyContainer.getBoundingClientRect().left : lowestColumnIndex === 0 ? 0 + (defaultColumn.rowHeaderWidth - 4) : selectionAreaCellWidth * lowestColumnIndex + (defaultColumn.rowHeaderWidth - 4) // calculate left value here if virtualized row is not in DOM, accounting for row header cell width (including borders)
|
|
31
|
+
|
|
32
|
+
};
|
|
33
|
+
var selectionAreaElement = document.querySelector("[data-matcher-id=\"".concat(area.matcher, "\"]")) || document.createElement('div');
|
|
34
|
+
selectionAreaElement.classList.add("".concat(blockClass, "__selection-area--element"));
|
|
35
|
+
selectionAreaElement.setAttribute('data-matcher-id', area.matcher);
|
|
36
|
+
selectionAreaElement.style.width = px(selectionAreaTotalWidth);
|
|
37
|
+
selectionAreaElement.style.height = px(selectionAreaTotalHeight);
|
|
38
|
+
selectionAreaElement.style.left = px(relativePosition.left);
|
|
39
|
+
selectionAreaElement.style.top = px(relativePosition.top);
|
|
40
|
+
bodyContainer.appendChild(selectionAreaElement);
|
|
41
|
+
var selectionAreasClone = deepCloneObject(selectionAreas);
|
|
42
|
+
var indexOfCurrentArea = selectionAreasClone.findIndex(function (item) {
|
|
43
|
+
return item.matcher === area.matcher;
|
|
44
|
+
}); // We need to add another property to the selectionAreas object array to
|
|
45
|
+
// let us know if an area has been created for each item already, ie createdArea: true
|
|
46
|
+
|
|
47
|
+
selectionAreasClone[indexOfCurrentArea].areaCreated = true;
|
|
48
|
+
setSelectionAreas(selectionAreasClone);
|
|
49
|
+
};
|
|
@@ -4,6 +4,12 @@ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (O
|
|
|
4
4
|
|
|
5
5
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
6
6
|
|
|
7
|
+
/**
|
|
8
|
+
* Copyright IBM Corp. 2022, 2022
|
|
9
|
+
*
|
|
10
|
+
* This source code is licensed under the Apache-2.0 license found in the
|
|
11
|
+
* LICENSE file in the root directory of this source tree.
|
|
12
|
+
*/
|
|
7
13
|
// cspell:disable
|
|
8
14
|
var pets = ['dog', 'cat', 'bird', 'lizard', 'frog', 'hamster', 'fish', 'rabbit', 'snake'];
|
|
9
15
|
var petNames = ['Bruno', 'Willow', 'Kona', 'Heidi', 'Rusty', 'Bonnie', 'Cash', 'Gucci', 'Brody', 'Emma', 'Loki', 'Angel', 'Astro', 'Sherman', 'Layla', 'Peanut', 'Grace', 'Mickey', 'Sasha', 'Finn', 'Tucker', 'Bear', 'Mocha', 'Roscoe']; // cspell:enable
|
|
File without changes
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright IBM Corp. 2022, 2022
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the Apache-2.0 license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
import uuidv4 from '../../../global/js/utils/uuidv4';
|
|
8
|
+
import { removeCellSelections } from './removeCellSelections';
|
|
9
|
+
export var handleHeaderCellSelection = function handleHeaderCellSelection(_ref) {
|
|
10
|
+
var type = _ref.type,
|
|
11
|
+
activeCellCoordinates = _ref.activeCellCoordinates,
|
|
12
|
+
rows = _ref.rows,
|
|
13
|
+
columns = _ref.columns,
|
|
14
|
+
setActiveCellCoordinates = _ref.setActiveCellCoordinates,
|
|
15
|
+
setCurrentMatcher = _ref.setCurrentMatcher,
|
|
16
|
+
setSelectionAreas = _ref.setSelectionAreas,
|
|
17
|
+
spreadsheetRef = _ref.spreadsheetRef,
|
|
18
|
+
index = _ref.index,
|
|
19
|
+
isKeyboard = _ref.isKeyboard;
|
|
20
|
+
var rowValue = isKeyboard ? activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.row : index;
|
|
21
|
+
var columnValue = isKeyboard ? activeCellCoordinates === null || activeCellCoordinates === void 0 ? void 0 : activeCellCoordinates.column : index;
|
|
22
|
+
var point1 = {
|
|
23
|
+
row: type === 'column' ? 0 : rowValue,
|
|
24
|
+
column: type === 'column' ? columnValue : 0
|
|
25
|
+
};
|
|
26
|
+
var point2 = {
|
|
27
|
+
row: type === 'column' ? rows.length - 1 : rowValue,
|
|
28
|
+
// going to always be the last row
|
|
29
|
+
column: type === 'column' ? columnValue : columns.length - 1
|
|
30
|
+
};
|
|
31
|
+
var tempMatcher = uuidv4();
|
|
32
|
+
setActiveCellCoordinates({
|
|
33
|
+
row: type === 'column' ? 0 : rowValue,
|
|
34
|
+
column: type === 'column' ? columnValue : 0
|
|
35
|
+
});
|
|
36
|
+
setCurrentMatcher(tempMatcher);
|
|
37
|
+
removeCellSelections({
|
|
38
|
+
spreadsheetRef: spreadsheetRef
|
|
39
|
+
});
|
|
40
|
+
setSelectionAreas([{
|
|
41
|
+
point1: point1,
|
|
42
|
+
point2: point2,
|
|
43
|
+
areaCreated: false,
|
|
44
|
+
matcher: tempMatcher
|
|
45
|
+
}]);
|
|
46
|
+
};
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright IBM Corp. 2022, 2022
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the Apache-2.0 license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
import { deepCloneObject } from '../../../global/js/utils/deepCloneObject';
|
|
8
|
+
export var handleMultipleKeys = function handleMultipleKeys(_ref) {
|
|
9
|
+
var _selectionAreasClone$;
|
|
10
|
+
|
|
11
|
+
var activeKeys = _ref.activeKeys,
|
|
12
|
+
selectionAreas = _ref.selectionAreas,
|
|
13
|
+
currentMatcher = _ref.currentMatcher,
|
|
14
|
+
rows = _ref.rows,
|
|
15
|
+
setSelectionAreas = _ref.setSelectionAreas,
|
|
16
|
+
columns = _ref.columns;
|
|
17
|
+
var activeKeyValues = activeKeys.current;
|
|
18
|
+
var selectionAreasClone = deepCloneObject(selectionAreas);
|
|
19
|
+
var indexOfCurrentArea = selectionAreasClone.findIndex(function (item) {
|
|
20
|
+
return item.matcher === currentMatcher;
|
|
21
|
+
});
|
|
22
|
+
var pointToUpdate = (_selectionAreasClone$ = selectionAreasClone[indexOfCurrentArea]) !== null && _selectionAreasClone$ !== void 0 && _selectionAreasClone$.point2 ? selectionAreasClone[indexOfCurrentArea].point2 : selectionAreasClone[indexOfCurrentArea].point1; // Down + Shift
|
|
23
|
+
|
|
24
|
+
if (activeKeyValues.includes('Shift') && activeKeyValues.includes('ArrowDown')) {
|
|
25
|
+
if (rows.length - 1 === pointToUpdate.row) {
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
var newPoint = {
|
|
30
|
+
row: pointToUpdate.row + 1,
|
|
31
|
+
column: pointToUpdate.column
|
|
32
|
+
};
|
|
33
|
+
selectionAreasClone[indexOfCurrentArea].point2 = newPoint;
|
|
34
|
+
selectionAreasClone[indexOfCurrentArea].areaCreated = false;
|
|
35
|
+
setSelectionAreas(selectionAreasClone);
|
|
36
|
+
} // Right + Shift
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
if (activeKeyValues.includes('Shift') && activeKeyValues.includes('ArrowRight')) {
|
|
40
|
+
if (columns.length - 1 === pointToUpdate.column) {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
var _newPoint = {
|
|
45
|
+
row: pointToUpdate.row,
|
|
46
|
+
column: pointToUpdate.column + 1
|
|
47
|
+
};
|
|
48
|
+
selectionAreasClone[indexOfCurrentArea].point2 = _newPoint;
|
|
49
|
+
selectionAreasClone[indexOfCurrentArea].areaCreated = false;
|
|
50
|
+
setSelectionAreas(selectionAreasClone);
|
|
51
|
+
} // Up + Shift
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
if (activeKeyValues.includes('Shift') && activeKeyValues.includes('ArrowUp')) {
|
|
55
|
+
if (pointToUpdate.row === 0) {
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
var _newPoint2 = {
|
|
60
|
+
row: pointToUpdate.row - 1,
|
|
61
|
+
column: pointToUpdate.column
|
|
62
|
+
};
|
|
63
|
+
selectionAreasClone[indexOfCurrentArea].point2 = _newPoint2;
|
|
64
|
+
selectionAreasClone[indexOfCurrentArea].areaCreated = false;
|
|
65
|
+
setSelectionAreas(selectionAreasClone);
|
|
66
|
+
} // Left + Shift
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
if (activeKeyValues.includes('Shift') && activeKeyValues.includes('ArrowLeft')) {
|
|
70
|
+
if (pointToUpdate.column === 0) {
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
var _newPoint3 = {
|
|
75
|
+
row: pointToUpdate.row,
|
|
76
|
+
column: pointToUpdate.column - 1
|
|
77
|
+
};
|
|
78
|
+
selectionAreasClone[indexOfCurrentArea].point2 = _newPoint3;
|
|
79
|
+
selectionAreasClone[indexOfCurrentArea].areaCreated = false;
|
|
80
|
+
setSelectionAreas(selectionAreasClone);
|
|
81
|
+
}
|
|
82
|
+
};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Copyright IBM Corp. 2022, 2022
|
|
5
|
+
*
|
|
6
|
+
* This source code is licensed under the Apache-2.0 license found in the
|
|
7
|
+
* LICENSE file in the root directory of this source tree.
|
|
8
|
+
*/
|
|
9
|
+
import { pkg } from '../../../settings'; // Removes the cell selection elements
|
|
10
|
+
|
|
11
|
+
export var removeCellSelections = function removeCellSelections(_ref) {
|
|
12
|
+
var matcher = _ref.matcher,
|
|
13
|
+
spreadsheetRef = _ref.spreadsheetRef,
|
|
14
|
+
_ref$blockClass = _ref.blockClass,
|
|
15
|
+
blockClass = _ref$blockClass === void 0 ? "".concat(pkg.prefix, "--data-spreadsheet") : _ref$blockClass;
|
|
16
|
+
|
|
17
|
+
if (matcher && typeof matcher === 'string') {
|
|
18
|
+
var selectionToRemove = spreadsheetRef.current.querySelector("[data-matcher-id=\"".concat(matcher, "\"]"));
|
|
19
|
+
|
|
20
|
+
if (selectionToRemove) {
|
|
21
|
+
selectionToRemove.remove();
|
|
22
|
+
}
|
|
23
|
+
} else {
|
|
24
|
+
var cellSelections = spreadsheetRef.current.querySelectorAll(".".concat(blockClass, "__selection-area--element"));
|
|
25
|
+
|
|
26
|
+
_toConsumableArray(cellSelections).forEach(function (element) {
|
|
27
|
+
return element.remove();
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
};
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import _extends from "@babel/runtime/helpers/extends";
|
|
2
2
|
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
3
|
+
import _typeof from "@babel/runtime/helpers/typeof";
|
|
3
4
|
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
4
5
|
import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
|
|
5
|
-
var _excluded = ["cancelDescription", "className", "disabled", "
|
|
6
|
+
var _excluded = ["buttonTooltipAlignment", "buttonTooltipPosition", "cancelDescription", "className", "disabled", "editAlwaysVisible", "editDescription", "id", "invalid", "invalidText", "labelText", "light", "onCancel", "onSave", "onChange", "placeholder", "saveDescription", "size", "value"];
|
|
6
7
|
|
|
7
8
|
/**
|
|
8
9
|
* Copyright IBM Corp. 2022, 2022
|
|
@@ -21,16 +22,19 @@ import { pkg, carbon } from '../../settings'; // Carbon and package components w
|
|
|
21
22
|
/* TODO: @import(s) of carbon components and other package components. */
|
|
22
23
|
|
|
23
24
|
import { Button } from 'carbon-components-react';
|
|
24
|
-
import { Close16, Edit16, EditOff16, Checkmark16, WarningFilled16
|
|
25
|
+
import { Close16, Edit16, EditOff16, Checkmark16, WarningFilled16 } from '@carbon/icons-react'; // The block part of our conventional BEM class names (blockClass__E--M).
|
|
25
26
|
|
|
26
27
|
var blockClass = "".concat(pkg.prefix, "--inline-edit");
|
|
27
28
|
var componentName = 'InlineEdit'; // NOTE: the component SCSS is not imported here: it is rolled up separately.
|
|
28
29
|
|
|
29
30
|
var defaults = {
|
|
31
|
+
buttonTooltipAlignment: 'center',
|
|
32
|
+
buttonTooltipPosition: 'top',
|
|
30
33
|
light: true,
|
|
31
34
|
// defaults to true to reflect design
|
|
32
35
|
size: 'md'
|
|
33
36
|
};
|
|
37
|
+
var buttons = ['cancel', 'edit', 'save'];
|
|
34
38
|
/**
|
|
35
39
|
* TODO: A description of the component.
|
|
36
40
|
*/
|
|
@@ -38,11 +42,13 @@ var defaults = {
|
|
|
38
42
|
export var InlineEdit = /*#__PURE__*/React.forwardRef(function (_ref, refIn) {
|
|
39
43
|
var _cx, _refInput$current, _refInput$current$inn, _cx3;
|
|
40
44
|
|
|
41
|
-
var
|
|
45
|
+
var buttonTooltipAlignment = _ref.buttonTooltipAlignment,
|
|
46
|
+
buttonTooltipPosition = _ref.buttonTooltipPosition,
|
|
47
|
+
cancelDescription = _ref.cancelDescription,
|
|
42
48
|
className = _ref.className,
|
|
43
49
|
disabled = _ref.disabled,
|
|
50
|
+
editAlwaysVisible = _ref.editAlwaysVisible,
|
|
44
51
|
editDescription = _ref.editDescription,
|
|
45
|
-
editVisibleOnHoverOnly = _ref.editVisibleOnHoverOnly,
|
|
46
52
|
id = _ref.id,
|
|
47
53
|
invalid = _ref.invalid,
|
|
48
54
|
invalidText = _ref.invalidText,
|
|
@@ -57,8 +63,6 @@ export var InlineEdit = /*#__PURE__*/React.forwardRef(function (_ref, refIn) {
|
|
|
57
63
|
_ref$size = _ref.size,
|
|
58
64
|
size = _ref$size === void 0 ? defaults.size : _ref$size,
|
|
59
65
|
value = _ref.value,
|
|
60
|
-
warn = _ref.warn,
|
|
61
|
-
warnText = _ref.warnText,
|
|
62
66
|
rest = _objectWithoutProperties(_ref, _excluded);
|
|
63
67
|
|
|
64
68
|
var refInput = useRef(null);
|
|
@@ -75,9 +79,25 @@ export var InlineEdit = /*#__PURE__*/React.forwardRef(function (_ref, refIn) {
|
|
|
75
79
|
internalValue = _useState4[0],
|
|
76
80
|
setInternalValue = _useState4[1];
|
|
77
81
|
|
|
78
|
-
var showValidation = invalid || warn;
|
|
79
|
-
|
|
80
|
-
var
|
|
82
|
+
var showValidation = invalid; // || warn;
|
|
83
|
+
|
|
84
|
+
var validationText = invalidText; // || warnText;
|
|
85
|
+
|
|
86
|
+
var validationIcon = showValidation ? /*#__PURE__*/React.createElement(WarningFilled16, null) : null; // sanitize the tooltip values
|
|
87
|
+
|
|
88
|
+
var alignIsObject = _typeof(buttonTooltipAlignment) === 'object';
|
|
89
|
+
var directionIsObject = _typeof(buttonTooltipPosition) === 'object';
|
|
90
|
+
var tipPositions = buttons.reduce(function (acc, button) {
|
|
91
|
+
var _ref2, _ref3;
|
|
92
|
+
|
|
93
|
+
var tooltipAlignment = (_ref2 = alignIsObject ? buttonTooltipAlignment[button] : buttonTooltipAlignment) !== null && _ref2 !== void 0 ? _ref2 : defaults.buttonTooltipAlignment;
|
|
94
|
+
var tooltipPosition = (_ref3 = directionIsObject ? buttonTooltipPosition[button] : buttonTooltipPosition) !== null && _ref3 !== void 0 ? _ref3 : defaults.buttonTooltipPosition;
|
|
95
|
+
acc[button] = {
|
|
96
|
+
tooltipAlignment: tooltipAlignment,
|
|
97
|
+
tooltipPosition: tooltipPosition
|
|
98
|
+
};
|
|
99
|
+
return acc;
|
|
100
|
+
}, {});
|
|
81
101
|
|
|
82
102
|
var doSetEditing = function doSetEditing(value) {
|
|
83
103
|
if (value === false) {
|
|
@@ -89,6 +109,7 @@ export var InlineEdit = /*#__PURE__*/React.forwardRef(function (_ref, refIn) {
|
|
|
89
109
|
};
|
|
90
110
|
|
|
91
111
|
var handleEdit = function handleEdit(ev) {
|
|
112
|
+
/* istanbul ignore else */
|
|
92
113
|
if (!disabled) {
|
|
93
114
|
var rightOfInput = ev.currentTarget.classList.contains("".concat(blockClass, "__edit")) || ev.target.classList.contains("".concat(blockClass, "__after-input-elements"));
|
|
94
115
|
var leftOfInput = ev.currentTarget = ev.target.classList.contains("".concat(blockClass)); // clicking on the content editable element should not set either of these to true
|
|
@@ -135,9 +156,12 @@ export var InlineEdit = /*#__PURE__*/React.forwardRef(function (_ref, refIn) {
|
|
|
135
156
|
if (onChange) {
|
|
136
157
|
onChange(refInput.current.innerText);
|
|
137
158
|
}
|
|
138
|
-
};
|
|
159
|
+
}; // pasting into contentEditable not supported by userEvent
|
|
160
|
+
|
|
139
161
|
|
|
140
|
-
var handlePaste =
|
|
162
|
+
var handlePaste =
|
|
163
|
+
/* istanbul ignore next */
|
|
164
|
+
function handlePaste(ev) {
|
|
141
165
|
ev.preventDefault(); // Get clipboard as plain text
|
|
142
166
|
|
|
143
167
|
var text = (ev.clipboardData || window.clipboardData).getData('text/plain'); // remove \n
|
|
@@ -182,9 +206,16 @@ export var InlineEdit = /*#__PURE__*/React.forwardRef(function (_ref, refIn) {
|
|
|
182
206
|
};
|
|
183
207
|
|
|
184
208
|
var handleKeyDown = function handleKeyDown(ev) {
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
209
|
+
switch (ev.key) {
|
|
210
|
+
case 'Enter':
|
|
211
|
+
ev.preventDefault();
|
|
212
|
+
refInput.current.blur(); // will cause save
|
|
213
|
+
|
|
214
|
+
break;
|
|
215
|
+
|
|
216
|
+
case 'Escape':
|
|
217
|
+
handleCancel();
|
|
218
|
+
break;
|
|
188
219
|
}
|
|
189
220
|
};
|
|
190
221
|
/*
|
|
@@ -218,7 +249,7 @@ export var InlineEdit = /*#__PURE__*/React.forwardRef(function (_ref, refIn) {
|
|
|
218
249
|
React.createElement("div", {
|
|
219
250
|
className: cx(blockClass, // Apply the block class to the main HTML element
|
|
220
251
|
className, // Apply any supplied class names to the main HTML element.
|
|
221
|
-
"".concat(blockClass, "--").concat(size), (_cx = {}, _defineProperty(_cx, "".concat(blockClass, "--disabled"), disabled), _defineProperty(_cx, "".concat(blockClass, "--editing"), editing), _defineProperty(_cx, "".concat(blockClass, "--invalid"), invalid), _defineProperty(_cx, "".concat(blockClass, "--
|
|
252
|
+
"".concat(blockClass, "--").concat(size), (_cx = {}, _defineProperty(_cx, "".concat(blockClass, "--disabled"), disabled), _defineProperty(_cx, "".concat(blockClass, "--editing"), editing), _defineProperty(_cx, "".concat(blockClass, "--invalid"), invalid), _defineProperty(_cx, "".concat(blockClass, "--light"), light), _defineProperty(_cx, "".concat(blockClass, "--overflows"), refInput.current && refInput.current.scrollWidth > refInput.current.offsetWidth), _cx)),
|
|
222
253
|
onClick: handleEdit // disabled eslint for click handler
|
|
223
254
|
,
|
|
224
255
|
onBlur: handleBlur,
|
|
@@ -249,14 +280,14 @@ export var InlineEdit = /*#__PURE__*/React.forwardRef(function (_ref, refIn) {
|
|
|
249
280
|
className: cx("".concat(blockClass, "__toolbar"), (_cx3 = {}, _defineProperty(_cx3, "".concat(blockClass, "__toolbar--animation"), toolbarAnimation), _defineProperty(_cx3, "".concat(blockClass, "__toolbar--saveable"), refInput.current && value !== internalValue), _cx3))
|
|
250
281
|
}, showValidation && /*#__PURE__*/React.createElement("div", {
|
|
251
282
|
className: "".concat(blockClass, "__validation-icon")
|
|
252
|
-
}, validationIcon), editing ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Button, {
|
|
283
|
+
}, validationIcon), editing ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Button, _extends({
|
|
253
284
|
className: "".concat(blockClass, "__cancel"),
|
|
254
285
|
kind: "ghost",
|
|
255
286
|
hasIconOnly: true,
|
|
256
287
|
iconDescription: cancelDescription,
|
|
257
288
|
onClick: handleCancel,
|
|
258
289
|
renderIcon: Close16
|
|
259
|
-
}), /*#__PURE__*/React.createElement(Button, {
|
|
290
|
+
}, tipPositions.cancel)), /*#__PURE__*/React.createElement(Button, _extends({
|
|
260
291
|
className: "".concat(blockClass, "__save"),
|
|
261
292
|
kind: "ghost",
|
|
262
293
|
hasIconOnly: true,
|
|
@@ -264,9 +295,8 @@ export var InlineEdit = /*#__PURE__*/React.forwardRef(function (_ref, refIn) {
|
|
|
264
295
|
onClick: handleSave,
|
|
265
296
|
renderIcon: Checkmark16,
|
|
266
297
|
disabled: value === internalValue
|
|
267
|
-
})) : /*#__PURE__*/React.createElement(Button, {
|
|
268
|
-
"
|
|
269
|
-
className: cx("".concat(blockClass, "__edit"), _defineProperty({}, "".concat(blockClass, "__edit--hover-visible"), editVisibleOnHoverOnly)),
|
|
298
|
+
}, tipPositions.save))) : /*#__PURE__*/React.createElement(Button, _extends({
|
|
299
|
+
className: cx("".concat(blockClass, "__edit"), _defineProperty({}, "".concat(blockClass, "__edit--always-visible"), editAlwaysVisible)),
|
|
270
300
|
kind: "ghost",
|
|
271
301
|
hasIconOnly: true,
|
|
272
302
|
iconDescription: editDescription,
|
|
@@ -274,7 +304,7 @@ export var InlineEdit = /*#__PURE__*/React.forwardRef(function (_ref, refIn) {
|
|
|
274
304
|
renderIcon: disabled ? EditOff16 : Edit16,
|
|
275
305
|
disabled: disabled,
|
|
276
306
|
tabIndex: -1
|
|
277
|
-
}))), /*#__PURE__*/React.createElement("div", {
|
|
307
|
+
}, tipPositions.edit)))), /*#__PURE__*/React.createElement("div", {
|
|
278
308
|
className: cx("".concat(blockClass, "__disabled-cover"))
|
|
279
309
|
}), showValidation && validationText && validationText.length > 0 && /*#__PURE__*/React.createElement("div", {
|
|
280
310
|
className: "".concat(blockClass, "__validation-text ").concat(carbon.prefix, "--form-requirement")
|
|
@@ -290,6 +320,28 @@ InlineEdit.displayName = componentName; // The types and DocGen commentary for t
|
|
|
290
320
|
// See https://www.npmjs.com/package/prop-types#usage.
|
|
291
321
|
|
|
292
322
|
InlineEdit.propTypes = {
|
|
323
|
+
/**
|
|
324
|
+
* buttonTooltipAlignment from the standard tooltip. Default center.
|
|
325
|
+
*
|
|
326
|
+
* Can be passed either as one of tooltip options or as an object specifying cancel, edit and save separately
|
|
327
|
+
*/
|
|
328
|
+
buttonTooltipAlignment: PropTypes.oneOfType([PropTypes.oneOf(['start', 'center', 'end']), PropTypes.shape({
|
|
329
|
+
cancel: PropTypes.oneOf(['start', 'center', 'end']),
|
|
330
|
+
edit: PropTypes.oneOf(['start', 'center', 'end']),
|
|
331
|
+
save: PropTypes.oneOf(['start', 'center', 'end'])
|
|
332
|
+
})]),
|
|
333
|
+
|
|
334
|
+
/**
|
|
335
|
+
* buttonTooltipPosition from the standard tooltip
|
|
336
|
+
*
|
|
337
|
+
* Can be passed either as one of tooltip options or as an object specifying cancel, edit and save separately
|
|
338
|
+
*/
|
|
339
|
+
buttonTooltipPosition: PropTypes.oneOfType([PropTypes.oneOf(['top', 'right', 'bottom', 'left']), PropTypes.shape({
|
|
340
|
+
cancel: PropTypes.oneOf(['top', 'right', 'bottom', 'left']),
|
|
341
|
+
edit: PropTypes.oneOf(['top', 'right', 'bottom', 'left']),
|
|
342
|
+
save: PropTypes.oneOf(['top', 'right', 'bottom', 'left'])
|
|
343
|
+
})]),
|
|
344
|
+
|
|
293
345
|
/**
|
|
294
346
|
* label for cancel button
|
|
295
347
|
*/
|
|
@@ -306,15 +358,14 @@ InlineEdit.propTypes = {
|
|
|
306
358
|
disabled: PropTypes.bool,
|
|
307
359
|
|
|
308
360
|
/**
|
|
309
|
-
*
|
|
361
|
+
* By default the edit icon is shown on hover only.
|
|
310
362
|
*/
|
|
311
|
-
|
|
363
|
+
editAlwaysVisible: PropTypes.bool,
|
|
312
364
|
|
|
313
365
|
/**
|
|
314
|
-
*
|
|
315
|
-
* the edit icon is redundant. E.g. a spreadsheet a property panel.
|
|
366
|
+
* Label for the edit button
|
|
316
367
|
*/
|
|
317
|
-
|
|
368
|
+
editDescription: PropTypes.string.isRequired,
|
|
318
369
|
|
|
319
370
|
/**
|
|
320
371
|
* ID for inline edit
|
|
@@ -349,14 +400,14 @@ InlineEdit.propTypes = {
|
|
|
349
400
|
/**
|
|
350
401
|
* method called on input event (it's a React thing onChange behaves like on input).
|
|
351
402
|
*
|
|
352
|
-
* NOTE: caller to handle invalid
|
|
403
|
+
* NOTE: caller to handle invalid states and associated text
|
|
353
404
|
*/
|
|
354
405
|
onChange: PropTypes.func,
|
|
355
406
|
|
|
356
407
|
/**
|
|
357
408
|
* method called on change event
|
|
358
409
|
*
|
|
359
|
-
* NOTE: caller to handle invalid
|
|
410
|
+
* NOTE: caller to handle invalid states and associated text
|
|
360
411
|
*/
|
|
361
412
|
onSave: PropTypes.func,
|
|
362
413
|
|
|
@@ -378,15 +429,5 @@ InlineEdit.propTypes = {
|
|
|
378
429
|
/**
|
|
379
430
|
* initial/unedited value
|
|
380
431
|
*/
|
|
381
|
-
value: PropTypes.string
|
|
382
|
-
|
|
383
|
-
/**
|
|
384
|
-
* set warn state for input
|
|
385
|
-
*/
|
|
386
|
-
warn: PropTypes.bool,
|
|
387
|
-
|
|
388
|
-
/**
|
|
389
|
-
* text shown when warn true
|
|
390
|
-
*/
|
|
391
|
-
warnText: PropTypes.string
|
|
432
|
+
value: PropTypes.string
|
|
392
433
|
};
|
|
@@ -2,10 +2,10 @@ import _extends from "@babel/runtime/helpers/extends";
|
|
|
2
2
|
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
3
3
|
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
4
4
|
import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
|
|
5
|
-
var _excluded = ["children", "className", "enabled", "
|
|
5
|
+
var _excluded = ["children", "className", "enabled", "invalid", "invalidText", "locked", "lockedText", "onToggle", "open", "size", "summary", "title", "titleId", "warn", "warnText"];
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
|
-
* Copyright IBM Corp. 2021,
|
|
8
|
+
* Copyright IBM Corp. 2021, 2022
|
|
9
9
|
*
|
|
10
10
|
* This source code is licensed under the Apache-2.0 license found in the
|
|
11
11
|
* LICENSE file in the root directory of this source tree.
|
|
@@ -38,8 +38,6 @@ export var OptionsTile = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
|
38
38
|
var children = _ref.children,
|
|
39
39
|
className = _ref.className,
|
|
40
40
|
enabled = _ref.enabled,
|
|
41
|
-
heading = _ref.heading,
|
|
42
|
-
userDefinedHeadingId = _ref.headingId,
|
|
43
41
|
invalid = _ref.invalid,
|
|
44
42
|
invalidText = _ref.invalidText,
|
|
45
43
|
locked = _ref.locked,
|
|
@@ -49,6 +47,8 @@ export var OptionsTile = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
|
49
47
|
_ref$size = _ref.size,
|
|
50
48
|
size = _ref$size === void 0 ? defaults.size : _ref$size,
|
|
51
49
|
summary = _ref.summary,
|
|
50
|
+
title = _ref.title,
|
|
51
|
+
userDefinedTitleId = _ref.titleId,
|
|
52
52
|
warn = _ref.warn,
|
|
53
53
|
warnText = _ref.warnText,
|
|
54
54
|
rest = _objectWithoutProperties(_ref, _excluded);
|
|
@@ -71,7 +71,7 @@ export var OptionsTile = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
|
71
71
|
var detailsRef = useRef(null);
|
|
72
72
|
var contentRef = useRef(null);
|
|
73
73
|
var id = uuidv4();
|
|
74
|
-
var
|
|
74
|
+
var titleId = userDefinedTitleId !== null && userDefinedTitleId !== void 0 ? userDefinedTitleId : "".concat(id, "-title");
|
|
75
75
|
var isExpandable = children !== undefined;
|
|
76
76
|
var isInvalid = invalid;
|
|
77
77
|
var isWarn = !isInvalid && warn;
|
|
@@ -185,15 +185,25 @@ export var OptionsTile = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
|
185
185
|
} else if (locked) {
|
|
186
186
|
Icon = Locked16;
|
|
187
187
|
summaryClasses.push("".concat(blockClass, "__summary--locked"));
|
|
188
|
+
|
|
189
|
+
if (!text) {
|
|
190
|
+
text = lockedText;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
var hasValidationState = invalid || warn || locked;
|
|
195
|
+
var summaryHidden = !hasValidationState && enabled === false;
|
|
196
|
+
|
|
197
|
+
if (summaryHidden) {
|
|
198
|
+
summaryClasses.push("".concat(blockClass, "__summary--hidden"));
|
|
188
199
|
}
|
|
189
200
|
|
|
190
|
-
var summaryHidden = enabled === false;
|
|
191
201
|
return /*#__PURE__*/React.createElement("div", {
|
|
192
|
-
className: "".concat(blockClass, "__title")
|
|
193
|
-
}, /*#__PURE__*/React.createElement("h6", {
|
|
194
|
-
id: headingId,
|
|
195
202
|
className: "".concat(blockClass, "__heading")
|
|
196
|
-
},
|
|
203
|
+
}, /*#__PURE__*/React.createElement("h6", {
|
|
204
|
+
id: titleId,
|
|
205
|
+
className: "".concat(blockClass, "__title")
|
|
206
|
+
}, title), text && /*#__PURE__*/React.createElement("span", {
|
|
197
207
|
className: cx(summaryClasses),
|
|
198
208
|
"aria-hidden": summaryHidden
|
|
199
209
|
}, Icon && /*#__PURE__*/React.createElement(Icon, null), /*#__PURE__*/React.createElement("span", {
|
|
@@ -214,7 +224,7 @@ export var OptionsTile = /*#__PURE__*/React.forwardRef(function (_ref, ref) {
|
|
|
214
224
|
toggled: enabled,
|
|
215
225
|
labelA: "",
|
|
216
226
|
labelB: "",
|
|
217
|
-
"aria-labelledby":
|
|
227
|
+
"aria-labelledby": titleId,
|
|
218
228
|
onToggle: onToggle,
|
|
219
229
|
size: "sm",
|
|
220
230
|
disabled: isLocked
|
|
@@ -261,16 +271,6 @@ OptionsTile.propTypes = {
|
|
|
261
271
|
*/
|
|
262
272
|
enabled: PropTypes.bool,
|
|
263
273
|
|
|
264
|
-
/**
|
|
265
|
-
* Provide the heading for this OptionsTile.
|
|
266
|
-
*/
|
|
267
|
-
heading: PropTypes.string.isRequired,
|
|
268
|
-
|
|
269
|
-
/**
|
|
270
|
-
* Optionally provide an id which should be used for the heading.
|
|
271
|
-
*/
|
|
272
|
-
headingId: PropTypes.string,
|
|
273
|
-
|
|
274
274
|
/**
|
|
275
275
|
* Whether the OptionsTile is in invalid validation state.
|
|
276
276
|
*/
|
|
@@ -312,6 +312,16 @@ OptionsTile.propTypes = {
|
|
|
312
312
|
*/
|
|
313
313
|
summary: PropTypes.string,
|
|
314
314
|
|
|
315
|
+
/**
|
|
316
|
+
* Provide the title for this OptionsTile.
|
|
317
|
+
*/
|
|
318
|
+
title: PropTypes.string.isRequired,
|
|
319
|
+
|
|
320
|
+
/**
|
|
321
|
+
* Optionally provide an id which should be used for the title.
|
|
322
|
+
*/
|
|
323
|
+
titleId: PropTypes.string,
|
|
324
|
+
|
|
315
325
|
/**
|
|
316
326
|
* Whether the OptionsTile is in warning validation state.
|
|
317
327
|
*/
|