carbon-react 101.4.2 → 102.0.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/lib/__internal__/character-count/character-count.component.js +3 -2
- package/lib/__internal__/label/label.component.js +4 -8
- package/lib/__internal__/popover/popover.component.js +3 -0
- package/lib/__internal__/validations/validation-icon.component.js +2 -1
- package/lib/__internal__/validations/validation-icon.style.js +12 -2
- package/lib/components/decimal/decimal.component.js +178 -241
- package/lib/components/help/help.component.js +1 -1
- package/lib/components/help/help.d.ts +1 -1
- package/lib/components/portal/portal.js +3 -1
- package/lib/style/design-tokens/carbon-scoped-tokens-provider/carbon-scoped-tokens-provider.component.js +34 -6
- package/package.json +1 -1
|
@@ -25,8 +25,9 @@ const CharacterCount = ({
|
|
|
25
25
|
theme,
|
|
26
26
|
...props
|
|
27
27
|
}) => /*#__PURE__*/_react.default.createElement(_characterCount.default, _extends({
|
|
28
|
-
theme: theme
|
|
29
|
-
|
|
28
|
+
theme: theme,
|
|
29
|
+
"aria-live": "polite"
|
|
30
|
+
}, props), `${value}/${limit}`);
|
|
30
31
|
|
|
31
32
|
exports.CharacterCount = CharacterCount;
|
|
32
33
|
CharacterCount.propTypes = {
|
|
@@ -65,8 +65,9 @@ const Label = ({
|
|
|
65
65
|
pl,
|
|
66
66
|
isRequired
|
|
67
67
|
}) => {
|
|
68
|
-
const [isFocused, setFocus] = (0, _react.useState)(false);
|
|
69
68
|
const {
|
|
69
|
+
hasFocus,
|
|
70
|
+
hasMouseOver,
|
|
70
71
|
onMouseEnter,
|
|
71
72
|
onMouseLeave
|
|
72
73
|
} = (0, _react.useContext)(_inputBehaviour.InputContext);
|
|
@@ -86,11 +87,6 @@ const Label = ({
|
|
|
86
87
|
};
|
|
87
88
|
|
|
88
89
|
const icon = () => {
|
|
89
|
-
const wrapperProps = {
|
|
90
|
-
onFocus: () => setFocus(true),
|
|
91
|
-
onBlur: () => setFocus(false)
|
|
92
|
-
};
|
|
93
|
-
|
|
94
90
|
if (useValidationIcon && shouldDisplayValidationIcon({
|
|
95
91
|
error,
|
|
96
92
|
warning,
|
|
@@ -113,11 +109,11 @@ const Label = ({
|
|
|
113
109
|
}));
|
|
114
110
|
}
|
|
115
111
|
|
|
116
|
-
return help && /*#__PURE__*/_react.default.createElement(_iconWrapper.default,
|
|
112
|
+
return help && /*#__PURE__*/_react.default.createElement(_iconWrapper.default, null, /*#__PURE__*/_react.default.createElement(_help.default, {
|
|
117
113
|
tooltipId: tooltipId,
|
|
118
114
|
tabIndex: helpTabIndex,
|
|
119
115
|
type: helpIcon,
|
|
120
|
-
isFocused:
|
|
116
|
+
isFocused: hasFocus || hasMouseOver
|
|
121
117
|
}, help));
|
|
122
118
|
};
|
|
123
119
|
|
|
@@ -15,6 +15,8 @@ var _core = require("@popperjs/core");
|
|
|
15
15
|
|
|
16
16
|
var _useResizeObserver = _interopRequireDefault(require("../../hooks/__internal__/useResizeObserver"));
|
|
17
17
|
|
|
18
|
+
var _carbonScopedTokensProvider = require("../../style/design-tokens/carbon-scoped-tokens-provider/carbon-scoped-tokens-provider.component");
|
|
19
|
+
|
|
18
20
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
19
21
|
|
|
20
22
|
function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
|
|
@@ -33,6 +35,7 @@ const Popover = ({
|
|
|
33
35
|
|
|
34
36
|
if (!elementDOM.current && !disablePortal) {
|
|
35
37
|
elementDOM.current = document.createElement("div");
|
|
38
|
+
elementDOM.current.classList.add(_carbonScopedTokensProvider.tokensClassName);
|
|
36
39
|
document.body.appendChild(elementDOM.current);
|
|
37
40
|
}
|
|
38
41
|
|
|
@@ -91,7 +91,8 @@ const ValidationIcon = ({
|
|
|
91
91
|
onBlur: e => {
|
|
92
92
|
setTriggeredByIcon(false);
|
|
93
93
|
if (onBlur) onBlur(e);
|
|
94
|
-
}
|
|
94
|
+
},
|
|
95
|
+
isPartOfInput: isPartOfInput
|
|
95
96
|
}, (0, _utils.filterStyledSystemMarginProps)(rest)), /*#__PURE__*/_react.default.createElement(_icon.default, {
|
|
96
97
|
key: `${validationType}-icon`,
|
|
97
98
|
type: validationType,
|
|
@@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
7
|
|
|
8
|
-
var _styledComponents =
|
|
8
|
+
var _styledComponents = _interopRequireWildcard(require("styled-components"));
|
|
9
9
|
|
|
10
10
|
var _styledSystem = require("styled-system");
|
|
11
11
|
|
|
@@ -15,9 +15,13 @@ var _icon = _interopRequireDefault(require("../../components/icon/icon.style"));
|
|
|
15
15
|
|
|
16
16
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
17
17
|
|
|
18
|
+
function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
|
|
19
|
+
|
|
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
|
+
|
|
18
22
|
const ValidationIconStyle = _styledComponents.default.span`
|
|
19
23
|
background: none;
|
|
20
|
-
cursor:
|
|
24
|
+
cursor: default;
|
|
21
25
|
display: flex;
|
|
22
26
|
align-items: center;
|
|
23
27
|
margin-top: 0;
|
|
@@ -25,6 +29,12 @@ const ValidationIconStyle = _styledComponents.default.span`
|
|
|
25
29
|
border: 0;
|
|
26
30
|
outline: none;
|
|
27
31
|
|
|
32
|
+
${({
|
|
33
|
+
isPartOfInput
|
|
34
|
+
}) => isPartOfInput && (0, _styledComponents.css)`
|
|
35
|
+
cursor: pointer;
|
|
36
|
+
`}
|
|
37
|
+
|
|
28
38
|
${_icon.default}:before {
|
|
29
39
|
color: ${({
|
|
30
40
|
validationType,
|
|
@@ -5,7 +5,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
7
|
|
|
8
|
-
var _react =
|
|
8
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
9
9
|
|
|
10
10
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
11
11
|
|
|
@@ -21,268 +21,211 @@ var _i18nContext = _interopRequireDefault(require("../../__internal__/i18n-conte
|
|
|
21
21
|
|
|
22
22
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
23
23
|
|
|
24
|
-
function
|
|
25
|
-
|
|
26
|
-
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
27
|
-
|
|
28
|
-
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
|
|
29
|
-
|
|
30
|
-
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
|
|
31
|
-
|
|
32
|
-
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
|
|
33
|
-
|
|
34
|
-
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
|
|
35
|
-
|
|
36
|
-
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
|
|
37
|
-
|
|
38
|
-
function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
|
|
39
|
-
|
|
40
|
-
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
|
|
41
|
-
|
|
42
|
-
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
24
|
+
function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
|
|
43
25
|
|
|
44
|
-
function
|
|
26
|
+
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; }
|
|
45
27
|
|
|
46
|
-
function
|
|
28
|
+
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); }
|
|
47
29
|
|
|
48
30
|
const marginPropTypes = (0, _utils.filterStyledSystemMarginProps)(_propTypes2.default.space);
|
|
49
31
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
_this.setState({
|
|
78
|
-
value: _this.toStandardDecimal(value),
|
|
79
|
-
visibleValue: value
|
|
80
|
-
}, () => {
|
|
81
|
-
_this.callOnChange();
|
|
82
|
-
});
|
|
83
|
-
});
|
|
84
|
-
|
|
85
|
-
_defineProperty(_assertThisInitialized(_this), "onBlur", () => {
|
|
86
|
-
let shouldCallOnChange = false;
|
|
87
|
-
|
|
88
|
-
_this.setState(({
|
|
89
|
-
value,
|
|
90
|
-
visibleValue
|
|
91
|
-
}) => {
|
|
92
|
-
if (!visibleValue) {
|
|
93
|
-
shouldCallOnChange = value !== _this.emptyValue;
|
|
94
|
-
return {
|
|
95
|
-
value: _this.emptyValue,
|
|
96
|
-
visibleValue: _this.formatValue(_this.emptyValue)
|
|
97
|
-
};
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
return {
|
|
101
|
-
visibleValue: _this.formatValue(value)
|
|
102
|
-
};
|
|
103
|
-
}, () => {
|
|
104
|
-
if (shouldCallOnChange) {
|
|
105
|
-
_this.callOnChange();
|
|
106
|
-
}
|
|
32
|
+
const Decimal = ({
|
|
33
|
+
align = "right",
|
|
34
|
+
defaultValue,
|
|
35
|
+
precision = 2,
|
|
36
|
+
inputWidth,
|
|
37
|
+
readOnly,
|
|
38
|
+
onChange,
|
|
39
|
+
onBlur,
|
|
40
|
+
onKeyPress,
|
|
41
|
+
id,
|
|
42
|
+
name,
|
|
43
|
+
allowEmptyValue = false,
|
|
44
|
+
required,
|
|
45
|
+
locale,
|
|
46
|
+
value,
|
|
47
|
+
...rest
|
|
48
|
+
}) => {
|
|
49
|
+
const l = (0, _react.useContext)(_i18nContext.default);
|
|
50
|
+
const emptyValue = allowEmptyValue ? "" : "0.00";
|
|
51
|
+
|
|
52
|
+
const getSafeValueProp = initialValue => {
|
|
53
|
+
// We're intentionally preventing the use of number values to help prevent any unintentional rounding issues
|
|
54
|
+
(0, _invariant.default)(typeof initialValue === "string", "Decimal `value` prop must be a string");
|
|
55
|
+
|
|
56
|
+
if (initialValue && !allowEmptyValue) {
|
|
57
|
+
(0, _invariant.default)(initialValue !== "", "Decimal `value` must not be an empty string. Please use `allowEmptyValue` or `0.00`");
|
|
58
|
+
}
|
|
107
59
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
}
|
|
111
|
-
});
|
|
112
|
-
});
|
|
60
|
+
return initialValue;
|
|
61
|
+
};
|
|
113
62
|
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
formattedValue
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
};
|
|
128
|
-
});
|
|
63
|
+
const getSeparator = (0, _react.useCallback)(separatorType => {
|
|
64
|
+
const numberWithGroupAndDecimalSeparator = 10000.1;
|
|
65
|
+
return Intl.NumberFormat(locale || l.locale()).formatToParts(numberWithGroupAndDecimalSeparator).find(part => part.type === separatorType).value;
|
|
66
|
+
}, [l, locale]);
|
|
67
|
+
const isNaN = (0, _react.useCallback)(valueToTest => {
|
|
68
|
+
return Number.isNaN(Number(valueToTest));
|
|
69
|
+
}, []);
|
|
70
|
+
/**
|
|
71
|
+
* Format a user defined value
|
|
72
|
+
*/
|
|
129
73
|
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
74
|
+
const formatValue = (0, _react.useCallback)(valueToFormat => {
|
|
75
|
+
if (isNaN(valueToFormat)) {
|
|
76
|
+
return valueToFormat;
|
|
77
|
+
}
|
|
78
|
+
/* Guards against any white-space only strings like " " being
|
|
79
|
+
mishandled and returned as `NaN` for the value displayed in the textbox */
|
|
133
80
|
|
|
134
|
-
_defineProperty(_assertThisInitialized(_this), "getSafeValueProp", isInitialValue => {
|
|
135
|
-
const {
|
|
136
|
-
value,
|
|
137
|
-
allowEmptyValue
|
|
138
|
-
} = _this.props; // We're intentionally preventing the use of number values to help prevent any unintentional rounding issues
|
|
139
81
|
|
|
140
|
-
|
|
82
|
+
if (valueToFormat === "" || valueToFormat.match(/\s+/g)) {
|
|
83
|
+
return valueToFormat;
|
|
84
|
+
}
|
|
141
85
|
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
86
|
+
const separator = getSeparator("decimal");
|
|
87
|
+
const [integer, remainder] = valueToFormat.split(".");
|
|
88
|
+
const formattedInteger = Intl.NumberFormat(locale || l.locale(), {
|
|
89
|
+
maximumFractionDigits: 0
|
|
90
|
+
}).format(integer);
|
|
91
|
+
let formattedNumber = formattedInteger;
|
|
92
|
+
|
|
93
|
+
if ((remainder === null || remainder === void 0 ? void 0 : remainder.length) > precision) {
|
|
94
|
+
formattedNumber += `${separator + remainder}`;
|
|
95
|
+
} else if ((remainder === null || remainder === void 0 ? void 0 : remainder.length) <= precision) {
|
|
96
|
+
formattedNumber += `${separator + remainder + "0".repeat(precision - remainder.length)}`;
|
|
97
|
+
} else {
|
|
98
|
+
formattedNumber += `${precision ? separator + "0".repeat(precision) : ""}`;
|
|
99
|
+
}
|
|
145
100
|
|
|
146
|
-
|
|
147
|
-
|
|
101
|
+
return formattedNumber;
|
|
102
|
+
}, [getSeparator, isNaN, l, locale, precision]); // Return previous value before state is changed. Used to compare prevState and newState.
|
|
148
103
|
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
104
|
+
function usePrevious(arg) {
|
|
105
|
+
const ref = (0, _react.useRef)();
|
|
106
|
+
(0, _react.useEffect)(() => {
|
|
107
|
+
ref.current = arg;
|
|
152
108
|
});
|
|
109
|
+
return ref.current;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Determine if the precision value has changed from the previous ref value for precision
|
|
113
|
+
*/
|
|
153
114
|
|
|
154
|
-
_defineProperty(_assertThisInitialized(_this), "formatValue", value => {
|
|
155
|
-
if (_this.isNaN(value)) {
|
|
156
|
-
return value;
|
|
157
|
-
}
|
|
158
|
-
/* Guards against any white-space only strings like " " being
|
|
159
|
-
mishandled and returned as `NaN` for visibleValue */
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
if (value === "" || value.match(/\s+/g)) {
|
|
163
|
-
return value;
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
const separator = _this.getSeparator("decimal");
|
|
167
|
-
|
|
168
|
-
const [integer, remainder] = value.split(".");
|
|
169
|
-
const formattedInteger = Intl.NumberFormat(_this.props.locale || _this.context.locale(), {
|
|
170
|
-
maximumFractionDigits: 0
|
|
171
|
-
}).format(integer);
|
|
172
|
-
let formattedNumber = formattedInteger;
|
|
173
|
-
|
|
174
|
-
if (remainder && remainder.length > _this.props.precision) {
|
|
175
|
-
formattedNumber += `${separator + remainder}`;
|
|
176
|
-
} else if (remainder && remainder.length <= _this.props.precision) {
|
|
177
|
-
formattedNumber += `${separator + remainder + "0".repeat(_this.props.precision - remainder.length)}`;
|
|
178
|
-
} else {
|
|
179
|
-
formattedNumber += `${_this.props.precision ? separator + "0".repeat(_this.props.precision) : ""}`;
|
|
180
|
-
}
|
|
181
115
|
|
|
182
|
-
|
|
183
|
-
|
|
116
|
+
const prevPrecisionValue = usePrevious(precision);
|
|
117
|
+
(0, _react.useEffect)(() => {
|
|
118
|
+
if (prevPrecisionValue && prevPrecisionValue !== precision) {
|
|
119
|
+
// eslint-disable-next-line no-console
|
|
120
|
+
console.error("Decimal `precision` prop has changed value. Changing the Decimal `precision` prop has no effect.");
|
|
121
|
+
}
|
|
122
|
+
}, [precision]);
|
|
123
|
+
const removeDelimiters = (0, _react.useCallback)(valueToFormat => {
|
|
124
|
+
const delimiterMatcher = new RegExp(`[\\${getSeparator("group")} ]*`, "g");
|
|
125
|
+
return valueToFormat.replace(delimiterMatcher, "");
|
|
126
|
+
}, [getSeparator]);
|
|
127
|
+
/**
|
|
128
|
+
* Convert raw input to a standard decimal format
|
|
129
|
+
*/
|
|
184
130
|
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
131
|
+
const toStandardDecimal = (0, _react.useCallback)(i18nValue => {
|
|
132
|
+
const valueWithoutNBS = getSeparator("group").match(/\s+/) && !i18nValue.match(/\s{2,}/) ? i18nValue.replace(/\s+/g, "") : i18nValue;
|
|
133
|
+
/* If a value is passed in that is a number but has too many delimiters in succession, we want to handle this
|
|
134
|
+
value without formatting it or removing delimiters. We also want to consider that,
|
|
135
|
+
if a value consists of only delimiters, we want to treat that
|
|
136
|
+
value in the same way as if the value was NaN. We want to pass this value to the
|
|
137
|
+
formatValue function, before the delimiters can be removed. */
|
|
192
138
|
|
|
193
|
-
|
|
139
|
+
const errorsWithDelimiter = new RegExp(`([^A-Za-z0-9]{2,})|(^[^A-Za-z0-9-]+)|([^0-9a-z-,.])|([^0-9-,.]+)|([W,.])$`, "g");
|
|
140
|
+
const separator = getSeparator("decimal");
|
|
141
|
+
const separatorRegex = new RegExp(separator === "." ? `\\${separator}` : separator, "g");
|
|
194
142
|
|
|
195
|
-
|
|
143
|
+
if (valueWithoutNBS.match(errorsWithDelimiter) || (valueWithoutNBS.match(separatorRegex) || []).length > 1) {
|
|
144
|
+
return valueWithoutNBS;
|
|
145
|
+
}
|
|
196
146
|
|
|
197
|
-
|
|
147
|
+
const withoutDelimiters = removeDelimiters(valueWithoutNBS);
|
|
148
|
+
return withoutDelimiters.replace(new RegExp(`\\${separator}`, "g"), ".");
|
|
149
|
+
}, [getSeparator, removeDelimiters]);
|
|
150
|
+
const decimalValue = getSafeValueProp(defaultValue || value || emptyValue);
|
|
151
|
+
const [stateValue, setStateValue] = (0, _react.useState)(isNaN(toStandardDecimal(decimalValue)) ? decimalValue : formatValue(decimalValue));
|
|
198
152
|
|
|
199
|
-
|
|
200
|
-
|
|
153
|
+
const createEvent = (formatted, raw) => {
|
|
154
|
+
return {
|
|
155
|
+
target: {
|
|
156
|
+
name,
|
|
157
|
+
id,
|
|
158
|
+
value: {
|
|
159
|
+
formattedValue: formatValue(toStandardDecimal(formatted)),
|
|
160
|
+
rawValue: raw || toStandardDecimal(formatted)
|
|
161
|
+
}
|
|
201
162
|
}
|
|
202
|
-
|
|
203
|
-
const withoutDelimiters = _this.removeDelimiters(valueWithoutNBS);
|
|
204
|
-
|
|
205
|
-
return withoutDelimiters.replace(new RegExp(`\\${separator}`, "g"), ".");
|
|
206
|
-
});
|
|
207
|
-
|
|
208
|
-
const isControlled = _this.isControlled();
|
|
209
|
-
|
|
210
|
-
const _value = isControlled ? _this.getSafeValueProp(true) : _this.props.defaultValue || _this.emptyValue;
|
|
211
|
-
|
|
212
|
-
_this.state = {
|
|
213
|
-
value: _value,
|
|
214
|
-
visibleValue: _this.formatValue(_value),
|
|
215
|
-
isControlled
|
|
216
163
|
};
|
|
217
|
-
|
|
218
|
-
|
|
164
|
+
};
|
|
165
|
+
|
|
166
|
+
const handleOnChange = ev => {
|
|
167
|
+
const {
|
|
168
|
+
value: val
|
|
169
|
+
} = ev.target;
|
|
170
|
+
setStateValue(val);
|
|
171
|
+
if (onChange) onChange(createEvent(val));
|
|
172
|
+
};
|
|
173
|
+
|
|
174
|
+
const handleOnBlur = ev => {
|
|
175
|
+
const {
|
|
176
|
+
value: updatedValue
|
|
177
|
+
} = ev.target;
|
|
178
|
+
let event;
|
|
179
|
+
|
|
180
|
+
if (updatedValue) {
|
|
181
|
+
const standardVisible = toStandardDecimal(updatedValue);
|
|
182
|
+
const formattedValue = isNaN(standardVisible) ? updatedValue : formatValue(standardVisible);
|
|
183
|
+
event = createEvent(formattedValue, standardVisible);
|
|
184
|
+
setStateValue(formattedValue);
|
|
185
|
+
} else {
|
|
186
|
+
event = createEvent(emptyValue);
|
|
187
|
+
setStateValue(emptyValue);
|
|
188
|
+
}
|
|
219
189
|
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
value: function componentDidUpdate(prevProps, prevState) {
|
|
223
|
-
const message = "Input elements should not switch from uncontrolled to controlled (or vice versa). " + "Decide between using a controlled or uncontrolled input element for the lifetime of the component";
|
|
224
|
-
const isControlled = this.isControlled();
|
|
225
|
-
(0, _invariant.default)(this.state.isControlled === isControlled, message);
|
|
190
|
+
if (onBlur) onBlur(event);
|
|
191
|
+
};
|
|
226
192
|
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
193
|
+
const isComponentControlled = value !== undefined;
|
|
194
|
+
const prevControlledState = usePrevious(isComponentControlled);
|
|
195
|
+
(0, _react.useEffect)(() => {
|
|
196
|
+
const message = "Input elements should not switch from uncontrolled to controlled (or vice versa). " + "Decide between using a controlled or uncontrolled input element for the lifetime of the component";
|
|
197
|
+
(0, _invariant.default)(prevControlledState !== isComponentControlled, message);
|
|
198
|
+
}, [isComponentControlled]);
|
|
199
|
+
(0, _react.useEffect)(() => {
|
|
200
|
+
const unformattedValue = toStandardDecimal(stateValue);
|
|
231
201
|
|
|
232
|
-
|
|
233
|
-
|
|
202
|
+
if (isComponentControlled) {
|
|
203
|
+
const valueProp = getSafeValueProp(value);
|
|
234
204
|
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
value: valueProp,
|
|
238
|
-
visibleValue: this.formatValue(valueProp)
|
|
239
|
-
});
|
|
240
|
-
}
|
|
205
|
+
if (unformattedValue !== valueProp) {
|
|
206
|
+
setStateValue(formatValue(value));
|
|
241
207
|
}
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
name,
|
|
263
|
-
defaultValue,
|
|
264
|
-
locale,
|
|
265
|
-
...rest
|
|
266
|
-
} = this.props;
|
|
267
|
-
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_textbox.default, _extends({}, rest, {
|
|
268
|
-
onChange: this.onChange,
|
|
269
|
-
onBlur: this.onBlur,
|
|
270
|
-
value: this.state.visibleValue
|
|
271
|
-
})), /*#__PURE__*/_react.default.createElement("input", {
|
|
272
|
-
name: name,
|
|
273
|
-
value: this.toStandardDecimal(this.state.visibleValue),
|
|
274
|
-
type: "hidden",
|
|
275
|
-
"data-component": "hidden-input"
|
|
276
|
-
}));
|
|
277
|
-
}
|
|
278
|
-
}]);
|
|
279
|
-
|
|
280
|
-
return Decimal;
|
|
281
|
-
}(_react.default.Component);
|
|
282
|
-
|
|
283
|
-
_defineProperty(Decimal, "maxPrecision", 15);
|
|
208
|
+
} // eslint-disable-next-line react-hooks/exhaustive-deps
|
|
209
|
+
|
|
210
|
+
}, [value]);
|
|
211
|
+
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_textbox.default, _extends({
|
|
212
|
+
onKeyPress: onKeyPress,
|
|
213
|
+
align: align,
|
|
214
|
+
readOnly: readOnly,
|
|
215
|
+
required: required,
|
|
216
|
+
inputWidth: inputWidth,
|
|
217
|
+
onChange: handleOnChange,
|
|
218
|
+
onBlur: handleOnBlur,
|
|
219
|
+
value: stateValue,
|
|
220
|
+
"data-component": "decimal"
|
|
221
|
+
}, rest)), /*#__PURE__*/_react.default.createElement("input", {
|
|
222
|
+
name: name,
|
|
223
|
+
value: toStandardDecimal(stateValue),
|
|
224
|
+
type: "hidden",
|
|
225
|
+
"data-component": "hidden-input"
|
|
226
|
+
}));
|
|
227
|
+
};
|
|
284
228
|
|
|
285
|
-
Decimal.contextType = _i18nContext.default;
|
|
286
229
|
Decimal.propTypes = {
|
|
287
230
|
/** Styled-system margin props */
|
|
288
231
|
...marginPropTypes,
|
|
@@ -300,7 +243,7 @@ Decimal.propTypes = {
|
|
|
300
243
|
*/
|
|
301
244
|
// eslint-disable-next-line consistent-return
|
|
302
245
|
precision: props => {
|
|
303
|
-
if (!Number.isInteger(props.precision) || props.precision < 0 || props.precision >
|
|
246
|
+
if (!Number.isInteger(props.precision) || props.precision < 0 || props.precision > 15) {
|
|
304
247
|
return new Error("Precision prop must be a number greater than 0 or equal to or less than 15.");
|
|
305
248
|
}
|
|
306
249
|
},
|
|
@@ -366,11 +309,5 @@ Decimal.propTypes = {
|
|
|
366
309
|
/** Aria label for rendered help component */
|
|
367
310
|
helpAriaLabel: _propTypes.default.string
|
|
368
311
|
};
|
|
369
|
-
Decimal.defaultProps = {
|
|
370
|
-
align: "right",
|
|
371
|
-
precision: 2,
|
|
372
|
-
allowEmptyValue: false,
|
|
373
|
-
"data-component": "decimal"
|
|
374
|
-
};
|
|
375
312
|
var _default = Decimal;
|
|
376
313
|
exports.default = _default;
|
|
@@ -139,7 +139,7 @@ Help.propTypes = { ...marginPropTypes,
|
|
|
139
139
|
/** A path for the anchor */
|
|
140
140
|
href: _propTypes.default.string,
|
|
141
141
|
|
|
142
|
-
/**
|
|
142
|
+
/** Overrides the visibility of the Tooltip if true */
|
|
143
143
|
isFocused: _propTypes.default.bool,
|
|
144
144
|
|
|
145
145
|
/** <a href="https://brand.sage.com/d/NdbrveWvNheA/foundations#/icons/icons" target="_blank">List of supported icons</a>
|
|
@@ -13,7 +13,7 @@ export interface HelpProps extends MarginProps {
|
|
|
13
13
|
helpId?: string;
|
|
14
14
|
/** A path for the anchor */
|
|
15
15
|
href?: string;
|
|
16
|
-
/**
|
|
16
|
+
/** Overrides the visibility of the Tooltip if true */
|
|
17
17
|
isFocused?: boolean;
|
|
18
18
|
/** Overrides the default tabindex of the component */
|
|
19
19
|
tabIndex?: number | string;
|
|
@@ -15,6 +15,8 @@ var _guid = _interopRequireDefault(require("../../__internal__/utils/helpers/gui
|
|
|
15
15
|
|
|
16
16
|
var _browser = _interopRequireDefault(require("../../__internal__/utils/helpers/browser"));
|
|
17
17
|
|
|
18
|
+
var _carbonScopedTokensProvider = require("../../style/design-tokens/carbon-scoped-tokens-provider/carbon-scoped-tokens-provider.component");
|
|
19
|
+
|
|
18
20
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
19
21
|
|
|
20
22
|
function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
|
|
@@ -63,7 +65,7 @@ const Portal = ({
|
|
|
63
65
|
setPortalNode(node);
|
|
64
66
|
} else if (!node) {
|
|
65
67
|
node = document.createElement("div");
|
|
66
|
-
node.classList.add(portalClassName);
|
|
68
|
+
node.classList.add(portalClassName, _carbonScopedTokensProvider.tokensClassName);
|
|
67
69
|
node.setAttribute("data-portal-exit", uniqueId);
|
|
68
70
|
|
|
69
71
|
if (id !== undefined) {
|
|
@@ -3,28 +3,56 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.default = void 0;
|
|
6
|
+
exports.default = exports.GlobalTokens = exports.tokensClassName = void 0;
|
|
7
7
|
|
|
8
|
-
var
|
|
8
|
+
var _react = _interopRequireDefault(require("react"));
|
|
9
|
+
|
|
10
|
+
var _styledComponents = _interopRequireWildcard(require("styled-components"));
|
|
9
11
|
|
|
10
12
|
var _generateCssVariables = _interopRequireDefault(require("../generate-css-variables.util"));
|
|
11
13
|
|
|
14
|
+
var _guid = _interopRequireDefault(require("../../../__internal__/utils/helpers/guid"));
|
|
15
|
+
|
|
16
|
+
function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
|
|
17
|
+
|
|
18
|
+
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
|
+
|
|
12
20
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
13
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
|
+
|
|
14
24
|
/**
|
|
15
25
|
*
|
|
16
26
|
* Converts theme properties to css variables form and set them locally for
|
|
17
27
|
* given scope
|
|
18
28
|
*
|
|
19
29
|
*/
|
|
20
|
-
const
|
|
30
|
+
const tokensClassName = `sageDesignTokens-${(0, _guid.default)()}`;
|
|
31
|
+
exports.tokensClassName = tokensClassName;
|
|
32
|
+
const GlobalTokens = (0, _styledComponents.createGlobalStyle)`
|
|
33
|
+
.${tokensClassName} {
|
|
34
|
+
${({
|
|
35
|
+
theme
|
|
36
|
+
}) => (0, _generateCssVariables.default)(theme.compatibility)}
|
|
37
|
+
}
|
|
38
|
+
`;
|
|
39
|
+
exports.GlobalTokens = GlobalTokens;
|
|
40
|
+
const TokensProviderWrapper = _styledComponents.default.div`
|
|
21
41
|
margin: 0;
|
|
22
42
|
padding: 0;
|
|
23
43
|
width: auto;
|
|
24
44
|
display: inline;
|
|
25
|
-
${({
|
|
26
|
-
theme
|
|
27
|
-
}) => (0, _generateCssVariables.default)(theme.compatibility)}
|
|
28
45
|
`;
|
|
46
|
+
|
|
47
|
+
const CarbonScopedTokensProvider = ({
|
|
48
|
+
children,
|
|
49
|
+
theme,
|
|
50
|
+
...props
|
|
51
|
+
}) => /*#__PURE__*/_react.default.createElement(TokensProviderWrapper, _extends({}, props, {
|
|
52
|
+
className: tokensClassName
|
|
53
|
+
}), /*#__PURE__*/_react.default.createElement(GlobalTokens, {
|
|
54
|
+
theme: theme
|
|
55
|
+
}), children);
|
|
56
|
+
|
|
29
57
|
var _default = CarbonScopedTokensProvider;
|
|
30
58
|
exports.default = _default;
|