carbon-react 104.1.0 → 104.4.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.
@@ -13,11 +13,9 @@ var _propTypes = _interopRequireDefault(require("prop-types"));
13
13
 
14
14
  var _core = require("@popperjs/core");
15
15
 
16
- var _styledComponents = require("styled-components");
17
-
18
16
  var _useResizeObserver = _interopRequireDefault(require("../../hooks/__internal__/useResizeObserver"));
19
17
 
20
- var _carbonScopedTokensProvider = require("../../style/design-tokens/carbon-scoped-tokens-provider/carbon-scoped-tokens-provider.component");
18
+ var _carbonScopedTokensProvider = _interopRequireDefault(require("../../style/design-tokens/carbon-scoped-tokens-provider/carbon-scoped-tokens-provider.component"));
21
19
 
22
20
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
23
21
 
@@ -34,11 +32,9 @@ const Popover = ({
34
32
  modifiers
35
33
  }) => {
36
34
  const elementDOM = (0, _react.useRef)();
37
- const theme = (0, _react.useContext)(_styledComponents.ThemeContext);
38
35
 
39
36
  if (!elementDOM.current && !disablePortal) {
40
37
  elementDOM.current = document.createElement("div");
41
- elementDOM.current.classList.add((0, _carbonScopedTokensProvider.tokensClassName)(theme === null || theme === void 0 ? void 0 : theme.name));
42
38
  document.body.appendChild(elementDOM.current);
43
39
  }
44
40
 
@@ -98,7 +94,7 @@ const Popover = ({
98
94
  return content;
99
95
  }
100
96
 
101
- return /*#__PURE__*/_reactDom.default.createPortal(content, elementDOM.current);
97
+ return /*#__PURE__*/_reactDom.default.createPortal( /*#__PURE__*/_react.default.createElement(_carbonScopedTokensProvider.default, null, content), elementDOM.current);
102
98
  };
103
99
 
104
100
  Popover.propTypes = {
@@ -14,6 +14,7 @@ export interface TooltipProviderProps {
14
14
  focusable?: boolean;
15
15
  tooltipVisible?: boolean;
16
16
  disabled?: boolean;
17
+ target?: Element;
17
18
  }
18
19
 
19
20
  declare const ToolbarContext: React.Context<ToolbarContextProps>;
@@ -21,14 +21,16 @@ const TooltipProvider = ({
21
21
  helpAriaLabel,
22
22
  focusable = true,
23
23
  tooltipVisible,
24
- disabled = false
24
+ disabled = false,
25
+ target
25
26
  }) => /*#__PURE__*/_react.default.createElement(TooltipContext.Provider, {
26
27
  value: {
27
28
  tooltipPosition,
28
29
  helpAriaLabel,
29
30
  focusable,
30
31
  tooltipVisible,
31
- disabled
32
+ disabled,
33
+ target
32
34
  }
33
35
  }, children);
34
36
 
@@ -39,5 +41,6 @@ TooltipProvider.propTypes = {
39
41
  helpAriaLabel: _propTypes.default.string,
40
42
  focusable: _propTypes.default.bool,
41
43
  tooltipVisible: _propTypes.default.bool,
42
- disabled: _propTypes.default.bool
44
+ disabled: _propTypes.default.bool,
45
+ target: _propTypes.default.instanceOf(Element)
43
46
  };
@@ -37,18 +37,11 @@ const StyledAccordionContainer = _styledComponents.default.div`
37
37
  width: ${({
38
38
  width
39
39
  }) => width || "100%"};
40
- color: ${({
41
- theme
42
- }) => theme.text.color};
40
+ color: var(--colorsUtilityYin090);
43
41
  background-color: ${({
44
- scheme,
45
- theme
46
- }) => scheme === "white" ? theme.colors.white : "transparent"};
47
- ${({
48
- theme
49
- }) => (0, _styledComponents.css)`
50
- border: 1px solid ${theme.accordion.border};
51
- `}
42
+ scheme
43
+ }) => scheme === "white" ? "var(--colorsUtilityYang100)" : "var(--colorsUtilityMajorTransparent)"};
44
+ border: 1px solid var(--colorsUtilityMajor100);
52
45
  ${({
53
46
  borders
54
47
  }) => borders === "default" && (0, _styledComponents.css)`
@@ -63,12 +56,8 @@ const StyledAccordionContainer = _styledComponents.default.div`
63
56
 
64
57
  & + & {
65
58
  margin-top: -1px;
66
- border-top: 1px solid ${({
67
- theme
68
- }) => theme.accordion.border};
69
- border-bottom: 1px solid ${({
70
- theme
71
- }) => theme.accordion.border};
59
+ border-top: 1px solid var(--colorsUtilityMajor100);
60
+ border-bottom: 1px solid var(--colorsUtilityMajor100);
72
61
  }
73
62
  `;
74
63
  exports.StyledAccordionContainer = StyledAccordionContainer;
@@ -91,15 +80,15 @@ exports.StyledAccordionSubTitle = StyledAccordionSubTitle;
91
80
  const StyledAccordionIcon = (0, _styledComponents.default)(_icon.default)`
92
81
  transition: transform 0.3s;
93
82
  margin-right: ${({
94
- iconAlign,
95
- theme
96
- }) => iconAlign === "left" ? theme.spacing * 2 : 0}px;
83
+ iconAlign
84
+ }) => iconAlign === "left" ? "var(--spacing200)" : "var(--spacing000)"};
97
85
  ${({
98
86
  isExpanded,
99
87
  iconAlign
100
88
  }) => {
101
89
  return !isExpanded && (iconAlign === "right" ? "transform: rotate(90deg)" : "transform: rotate(-90deg)");
102
90
  }};
91
+ color: var(--colorsActionMinor500);
103
92
  `;
104
93
  exports.StyledAccordionIcon = StyledAccordionIcon;
105
94
  const StyledAccordionHeadingsContainer = _styledComponents.default.div`
@@ -134,10 +123,9 @@ const StyledAccordionTitleContainer = _styledComponents.default.div`
134
123
  buttonWidth,
135
124
  iconAlign,
136
125
  size,
137
- theme,
138
126
  hasButtonProps
139
127
  }) => (0, _styledComponents.css)`
140
- padding: ${size === "small" ? theme.spacing * 2 : theme.spacing * 3}px;
128
+ padding: ${size === "small" ? "var(--spacing200)" : "var(--spacing300)"};
141
129
  ${_styledSystem.space}
142
130
  display: flex;
143
131
  align-items: center;
@@ -152,12 +140,12 @@ const StyledAccordionTitleContainer = _styledComponents.default.div`
152
140
  z-index: 1;
153
141
 
154
142
  &:focus {
155
- outline: ${buttonHeading ? "3px" : "2px"} solid ${theme.colors.focus};
143
+ outline: var(--borderWidth300) solid var(--colorsSemanticFocus500);
156
144
  }
157
145
 
158
146
  ${!buttonHeading && (0, _styledComponents.css)`
159
147
  &:hover {
160
- background-color: ${theme.accordion.background};
148
+ background-color: var(--colorsUtilityMajor050);
161
149
  }
162
150
  `}
163
151
 
@@ -165,10 +153,10 @@ const StyledAccordionTitleContainer = _styledComponents.default.div`
165
153
  box-sizing: border-box;
166
154
  font-weight: 600;
167
155
  text-decoration: none;
168
- font-size: ${theme.text.size};
169
- min-height: ${theme.spacing * 5}px;
156
+ font-size: var(--fontSizes100);
157
+ min-height: var(--spacing500);
170
158
 
171
- color: ${theme.colors.primary};
159
+ color: var(--colorsActionMajor500);
172
160
 
173
161
  ${!hasButtonProps && (0, _styledComponents.css)`
174
162
  ${StyledAccordionHeadingsContainer} {
@@ -177,7 +165,7 @@ const StyledAccordionTitleContainer = _styledComponents.default.div`
177
165
  `}
178
166
 
179
167
  ${StyledAccordionIcon} {
180
- color: ${theme.colors.primary};
168
+ color: var(--colorsActionMajor500);
181
169
  ${!hasButtonProps && (0, _styledComponents.css)`
182
170
  position: relative;
183
171
  ${iconAlign}: 16px;
@@ -185,9 +173,9 @@ const StyledAccordionTitleContainer = _styledComponents.default.div`
185
173
  }
186
174
 
187
175
  &:hover {
188
- color: ${theme.colors.secondary};
176
+ color: var(--colorsActionMajor600);
189
177
  ${StyledAccordionIcon} {
190
- color: ${theme.colors.secondary};
178
+ color: var(--colorsActionMajor600);
191
179
  }
192
180
  }
193
181
 
@@ -217,9 +205,8 @@ const StyledAccordionContentContainer = _styledComponents.default.div`
217
205
  `;
218
206
  exports.StyledAccordionContentContainer = StyledAccordionContentContainer;
219
207
  const StyledAccordionContent = _styledComponents.default.div`
220
- padding: 0 ${({
221
- theme
222
- }) => theme.spacing * 3}px;
208
+ padding: var(--spacing300);
209
+ padding-top: 0;
223
210
  overflow: hidden;
224
211
 
225
212
  ${({
@@ -237,16 +224,4 @@ StyledAccordionContainer.defaultProps = {
237
224
  };
238
225
  StyledAccordionTitleContainer.defaultProps = {
239
226
  theme: _themes.baseTheme
240
- };
241
- StyledAccordionTitle.defaultProps = {
242
- theme: _themes.baseTheme
243
- };
244
- StyledAccordionIcon.defaultProps = {
245
- theme: _themes.baseTheme
246
- };
247
- StyledAccordionContent.defaultProps = {
248
- theme: _themes.baseTheme
249
- };
250
- StyledAccordionContentContainer.defaultProps = {
251
- theme: _themes.baseTheme
252
227
  };
@@ -1,6 +1,26 @@
1
1
  export default Button;
2
2
  export const ButtonWithForwardRef: React.ForwardRefExoticComponent<React.RefAttributes<any>>;
3
- declare function Button(props: any): JSX.Element;
3
+ declare function Button({ size, subtext, as, children, forwardRef, "aria-label": ariaLabel, disabled, buttonType: buttonTypeProp, iconType, iconPosition, href, m, px, noWrap, target, rel, iconTooltipMessage, iconTooltipPosition, ...rest }: {
4
+ [x: string]: any;
5
+ size: any;
6
+ subtext: any;
7
+ as: any;
8
+ children: any;
9
+ forwardRef: any;
10
+ "aria-label": any;
11
+ disabled: any;
12
+ buttonType: any;
13
+ iconType: any;
14
+ iconPosition: any;
15
+ href: any;
16
+ m?: number | undefined;
17
+ px: any;
18
+ noWrap: any;
19
+ target: any;
20
+ rel: any;
21
+ iconTooltipMessage: any;
22
+ iconTooltipPosition: any;
23
+ }): JSX.Element;
4
24
  declare namespace Button {
5
25
  const propTypes: any;
6
26
  namespace defaultProps {
@@ -17,6 +17,8 @@ var _button = _interopRequireWildcard(require("./button.style"));
17
17
 
18
18
  var _tags = _interopRequireDefault(require("../../__internal__/utils/helpers/tags/tags"));
19
19
 
20
+ var _tooltipProvider = require("../../__internal__/tooltip-provider");
21
+
20
22
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
21
23
 
22
24
  function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
@@ -35,7 +37,8 @@ function renderChildren({
35
37
  disabled,
36
38
  buttonType,
37
39
  iconTooltipMessage,
38
- iconTooltipPosition
40
+ iconTooltipPosition,
41
+ tooltipTarget
39
42
  /* eslint-enable */
40
43
 
41
44
  }) {
@@ -57,43 +60,54 @@ function renderChildren({
57
60
  "data-element": "main-text"
58
61
  }, children), size === "large" && /*#__PURE__*/_react.default.createElement(_button.StyledButtonSubtext, {
59
62
  "data-element": "subtext"
60
- }, subtext)), iconType && !children && /*#__PURE__*/_react.default.createElement(_icon.default, _extends({}, iconProps, {
63
+ }, subtext)), iconType && !children && /*#__PURE__*/_react.default.createElement(_tooltipProvider.TooltipProvider, {
64
+ disabled: disabled,
65
+ focusable: false,
66
+ target: tooltipTarget
67
+ }, /*#__PURE__*/_react.default.createElement(_icon.default, _extends({}, iconProps, {
61
68
  tooltipMessage: iconTooltipMessage,
62
69
  tooltipPosition: iconTooltipPosition
63
- })), iconType && iconPosition === "after" && children && /*#__PURE__*/_react.default.createElement(_icon.default, iconProps));
70
+ }))), iconType && iconPosition === "after" && children && /*#__PURE__*/_react.default.createElement(_icon.default, iconProps));
64
71
  }
65
72
 
66
- const renderStyledButton = buttonProps => {
67
- const {
68
- "aria-label": ariaLabel,
69
- disabled,
70
- buttonType,
71
- iconType,
72
- href,
73
- ref,
74
- m = 0,
75
- px,
76
- size,
77
- noWrap,
78
- tooltipMessage,
79
- target,
80
- rel,
81
- ...rest
82
- } = buttonProps;
73
+ const Button = ({
74
+ size,
75
+ subtext,
76
+ as,
77
+ children,
78
+ forwardRef,
79
+ "aria-label": ariaLabel,
80
+ disabled,
81
+ buttonType: buttonTypeProp,
82
+ iconType,
83
+ iconPosition,
84
+ href,
85
+ m = 0,
86
+ px,
87
+ noWrap,
88
+ target,
89
+ rel,
90
+ iconTooltipMessage,
91
+ iconTooltipPosition,
92
+ ...rest
93
+ }) => {
94
+ const [internalRef, setInternalRef] = (0, _react.useState)(null);
95
+ const buttonType = buttonTypeProp || as;
96
+
97
+ if (subtext.length > 0 && size !== "large") {
98
+ throw new Error("subtext prop has no effect unless the button is large");
99
+ }
100
+
83
101
  let paddingX;
84
102
 
85
103
  const handleLinkKeyDown = event => {
86
104
  // If space key click link
87
105
  if (event.key === " ") {
88
106
  event.preventDefault();
89
- ref.current.click();
107
+ internalRef.click();
90
108
  }
91
109
  };
92
110
 
93
- if (href) {
94
- rest.href = href;
95
- }
96
-
97
111
  switch (size) {
98
112
  case "small":
99
113
  paddingX = 2;
@@ -108,7 +122,7 @@ const renderStyledButton = buttonProps => {
108
122
  }
109
123
 
110
124
  return /*#__PURE__*/_react.default.createElement(_button.default, _extends({
111
- "aria-label": !rest.children && iconType ? ariaLabel || iconType : undefined,
125
+ "aria-label": !children && iconType ? ariaLabel || iconType : undefined,
112
126
  as: !disabled && href ? "a" : "button",
113
127
  onKeyDown: href && handleLinkKeyDown,
114
128
  draggable: false,
@@ -121,36 +135,33 @@ const renderStyledButton = buttonProps => {
121
135
  px: px ?? paddingX,
122
136
  m: m,
123
137
  noWrap: noWrap,
124
- iconOnly: !rest.children && iconType,
138
+ iconOnly: !children && iconType,
139
+ iconPosition: iconPosition,
125
140
  target: target,
126
141
  rel: rel
127
- }, (0, _tags.default)("button", buttonProps), rest, {
128
- ref: ref
129
- }), renderChildren(buttonProps));
130
- };
131
-
132
- const Button = props => {
133
- const {
142
+ }, (0, _tags.default)("button", rest), rest, href && {
143
+ href
144
+ }, {
145
+ ref: reference => {
146
+ if (reference) {
147
+ setInternalRef(reference);
148
+ if (!forwardRef) return;
149
+ if (typeof forwardRef === "object") forwardRef.current = reference;
150
+ if (typeof forwardRef === "function") forwardRef(reference);
151
+ }
152
+ }
153
+ }), renderChildren({
154
+ iconType,
155
+ iconPosition,
134
156
  size,
135
- subtext
136
- } = props;
137
- const linkRef = (0, _react.useRef)(null);
138
- const {
139
- as,
157
+ subtext,
158
+ children,
159
+ disabled,
140
160
  buttonType,
141
- forwardRef,
142
- ...rest
143
- } = props;
144
- const propsWithoutAs = { ...rest,
145
- buttonType: buttonType || as,
146
- ref: forwardRef || linkRef
147
- };
148
-
149
- if (subtext.length > 0 && size !== "large") {
150
- throw new Error("subtext prop has no effect unless the button is large");
151
- }
152
-
153
- return renderStyledButton(propsWithoutAs);
161
+ iconTooltipMessage,
162
+ iconTooltipPosition,
163
+ tooltipTarget: internalRef
164
+ }));
154
165
  };
155
166
 
156
167
  Button.propTypes = {
@@ -1,6 +1,9 @@
1
1
  export default Confirm;
2
- declare function Confirm({ open, children, destructive, cancelButtonDestructive, confirmButtonDestructive, cancelButtonType, confirmButtonType, cancelButtonIconType, cancelButtonIconPosition, confirmButtonIconType, confirmButtonIconPosition, cancelLabel, onCancel, disableCancel, onConfirm, isLoadingConfirm, disableConfirm, confirmLabel, iconType, subtitle, title, ...rest }: {
2
+ declare function Confirm({ "aria-labelledby": ariaLabelledBy, "aria-describedby": ariaDescribedBy, "aria-label": ariaLabel, open, children, destructive, cancelButtonDestructive, confirmButtonDestructive, cancelButtonType, confirmButtonType, cancelButtonIconType, cancelButtonIconPosition, confirmButtonIconType, confirmButtonIconPosition, cancelLabel, onCancel, disableCancel, onConfirm, isLoadingConfirm, disableConfirm, confirmLabel, iconType, subtitle, title, ...rest }: {
3
3
  [x: string]: any;
4
+ "aria-labelledby": any;
5
+ "aria-describedby": any;
6
+ "aria-label": any;
4
7
  open: any;
5
8
  children: any;
6
9
  destructive: any;
@@ -5,10 +5,12 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = void 0;
7
7
 
8
- var _react = _interopRequireDefault(require("react"));
8
+ var _react = _interopRequireWildcard(require("react"));
9
9
 
10
10
  var _propTypes = _interopRequireDefault(require("prop-types"));
11
11
 
12
+ var _guid = _interopRequireDefault(require("../../__internal__/utils/helpers/guid/guid.js"));
13
+
12
14
  var _logger = _interopRequireDefault(require("../../__internal__/utils/logger"));
13
15
 
14
16
  var _heading = _interopRequireDefault(require("../heading"));
@@ -27,11 +29,18 @@ var _useLocale = _interopRequireDefault(require("../../hooks/__internal__/useLoc
27
29
 
28
30
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
29
31
 
32
+ function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; }
33
+
34
+ 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; }
35
+
30
36
  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); }
31
37
 
32
38
  let deprecatedWarnTriggered = false;
33
39
 
34
40
  const Confirm = ({
41
+ "aria-labelledby": ariaLabelledBy,
42
+ "aria-describedby": ariaDescribedBy,
43
+ "aria-label": ariaLabel,
35
44
  open,
36
45
  children,
37
46
  destructive,
@@ -62,6 +71,25 @@ const Confirm = ({
62
71
  }
63
72
 
64
73
  const l = (0, _useLocale.default)();
74
+ const {
75
+ current: titleId
76
+ } = (0, _react.useRef)((0, _guid.default)());
77
+ const {
78
+ current: subtitleId
79
+ } = (0, _react.useRef)((0, _guid.default)());
80
+ const ariaProps = {
81
+ "aria-labelledby": ariaLabelledBy,
82
+ "aria-describedby": ariaDescribedBy,
83
+ "aria-label": ariaLabel
84
+ };
85
+
86
+ if (title && iconType) {
87
+ ariaProps["aria-labelledby"] = titleId;
88
+ }
89
+
90
+ if (subtitle && iconType) {
91
+ ariaProps["aria-describedby"] = subtitleId;
92
+ }
65
93
 
66
94
  const renderCancelButton = () => {
67
95
  if (!onCancel) return null;
@@ -100,9 +128,9 @@ const Confirm = ({
100
128
  fontSize: "medium"
101
129
  }), /*#__PURE__*/_react.default.createElement(_heading.default, {
102
130
  title: title,
103
- titleId: "carbon-dialog-title",
131
+ titleId: titleId,
104
132
  subheader: subtitle,
105
- subtitleId: "carbon-dialog-subtitle",
133
+ subtitleId: subtitleId,
106
134
  divider: false
107
135
  }));
108
136
  }
@@ -118,7 +146,7 @@ const Confirm = ({
118
146
  title: getTitle(),
119
147
  "data-component": "confirm",
120
148
  role: "alertdialog"
121
- }, rest), children, /*#__PURE__*/_react.default.createElement(_confirm.StyledConfirmButtons, null, renderCancelButton(), renderConfirmButton()));
149
+ }, ariaProps, rest), children, /*#__PURE__*/_react.default.createElement(_confirm.StyledConfirmButtons, null, renderCancelButton(), renderConfirmButton()));
122
150
  };
123
151
 
124
152
  Confirm.defaultProps = {
@@ -9,6 +9,8 @@ var _react = _interopRequireWildcard(require("react"));
9
9
 
10
10
  var _propTypes = _interopRequireDefault(require("prop-types"));
11
11
 
12
+ var _guid = _interopRequireDefault(require("../../__internal__/utils/helpers/guid/guid.js"));
13
+
12
14
  var _modal = _interopRequireDefault(require("../modal"));
13
15
 
14
16
  var _heading = _interopRequireDefault(require("../heading"));
@@ -58,6 +60,12 @@ const Dialog = ({
58
60
  const innerContentRef = (0, _react.useRef)();
59
61
  const titleRef = (0, _react.useRef)();
60
62
  const listenersAdded = (0, _react.useRef)(false);
63
+ const {
64
+ current: titleId
65
+ } = (0, _react.useRef)((0, _guid.default)());
66
+ const {
67
+ current: subtitleId
68
+ } = (0, _react.useRef)((0, _guid.default)());
61
69
  const centerDialog = (0, _react.useCallback)(() => {
62
70
  const {
63
71
  width: dialogWidth,
@@ -133,9 +141,9 @@ const Dialog = ({
133
141
  }, typeof title === "string" ? /*#__PURE__*/_react.default.createElement(_heading.default, {
134
142
  "data-element": "dialog-title",
135
143
  title: title,
136
- titleId: "carbon-dialog-title",
144
+ titleId: titleId,
137
145
  subheader: subtitle,
138
- subtitleId: "carbon-dialog-subtitle",
146
+ subtitleId: subtitleId,
139
147
  divider: false,
140
148
  help: help
141
149
  }) : title);
@@ -150,15 +158,10 @@ const Dialog = ({
150
158
  const dialogProps = {
151
159
  size,
152
160
  dialogHeight,
153
- "aria-labelledby": rest["aria-labelledby"],
154
- "aria-describedby": subtitle ? "carbon-dialog-subtitle" : rest["aria-describedby"],
161
+ "aria-labelledby": title && typeof title === "string" ? titleId : rest["aria-labelledby"],
162
+ "aria-describedby": subtitle ? subtitleId : rest["aria-describedby"],
155
163
  "aria-label": rest["aria-label"]
156
164
  };
157
-
158
- if (title && typeof title === "string") {
159
- dialogProps["aria-labelledby"] = "carbon-dialog-title";
160
- }
161
-
162
165
  const componentTags = {
163
166
  "data-component": rest["data-component"] || "dialog",
164
167
  "data-element": rest["data-element"],
@@ -9,6 +9,8 @@ var _react = _interopRequireWildcard(require("react"));
9
9
 
10
10
  var _propTypes = _interopRequireDefault(require("prop-types"));
11
11
 
12
+ var _guid = _interopRequireDefault(require("../../__internal__/utils/helpers/guid/guid.js"));
13
+
12
14
  var _modal = _interopRequireDefault(require("../modal"));
13
15
 
14
16
  var _heading = _interopRequireDefault(require("../heading"));
@@ -51,11 +53,17 @@ const DialogFullScreen = ({
51
53
  onCancel,
52
54
  contentRef,
53
55
  help,
54
- role = "region",
56
+ role = "dialog",
55
57
  ...rest
56
58
  }) => {
57
59
  const dialogRef = (0, _react.useRef)();
58
60
  const headingRef = (0, _react.useRef)();
61
+ const {
62
+ current: titleId
63
+ } = (0, _react.useRef)((0, _guid.default)());
64
+ const {
65
+ current: subtitleId
66
+ } = (0, _react.useRef)((0, _guid.default)());
59
67
 
60
68
  const closeIcon = () => {
61
69
  if (!showCloseIcon || !onCancel) return null;
@@ -74,13 +82,18 @@ const DialogFullScreen = ({
74
82
  }, typeof title === "string" ? /*#__PURE__*/_react.default.createElement(_heading.default, {
75
83
  "data-element": "dialog-title",
76
84
  title: title,
77
- titleId: "carbon-dialog-title",
85
+ titleId: titleId,
78
86
  subheader: subtitle,
79
- subtitleId: "carbon-dialog-subtitle",
87
+ subtitleId: subtitleId,
80
88
  divider: false,
81
89
  help: help
82
90
  }) : title, headerChildren);
83
91
 
92
+ const ariaProps = {
93
+ "aria-labelledby": title && typeof title === "string" ? titleId : ariaLabelledBy,
94
+ "aria-describedby": subtitle ? subtitleId : ariaDescribedBy,
95
+ "aria-label": ariaLabel
96
+ };
84
97
  const componentTags = {
85
98
  "data-component": "dialog-full-screen",
86
99
  "data-element": rest["data-element"],
@@ -94,16 +107,14 @@ const DialogFullScreen = ({
94
107
  autoFocus: !disableAutoFocus,
95
108
  focusFirstElement: focusFirstElement,
96
109
  wrapperRef: dialogRef
97
- }, /*#__PURE__*/_react.default.createElement(_dialogFullScreen.default, {
98
- "aria-modal": true,
99
- "aria-describedby": ariaDescribedBy,
100
- "aria-label": ariaLabel,
101
- "aria-labelledby": ariaLabelledBy || "carbon-dialog-title",
110
+ }, /*#__PURE__*/_react.default.createElement(_dialogFullScreen.default, _extends({
111
+ "aria-modal": true
112
+ }, ariaProps, {
102
113
  ref: dialogRef,
103
114
  "data-element": "dialog-full-screen",
104
115
  pagesStyling: pagesStyling,
105
116
  role: role
106
- }, dialogTitle(), /*#__PURE__*/_react.default.createElement(_content.default, {
117
+ }), dialogTitle(), /*#__PURE__*/_react.default.createElement(_content.default, {
107
118
  hasHeader: title !== undefined,
108
119
  "data-element": "content",
109
120
  ref: contentRef,
@@ -63,7 +63,8 @@ const Icon = /*#__PURE__*/_react.default.forwardRef(({
63
63
  tooltipPosition: tooltipPositionFromContext,
64
64
  focusable: focusableFromContext,
65
65
  tooltipVisible: tooltipVisibleFromContext,
66
- disabled: disabledFromContext
66
+ disabled: disabledFromContext,
67
+ target
67
68
  } = (0, _react.useContext)(_tooltipProvider.TooltipContext);
68
69
  /** Return Icon type with overrides */
69
70
 
@@ -131,7 +132,8 @@ const Icon = /*#__PURE__*/_react.default.forwardRef(({
131
132
  inputSize: inputSize,
132
133
  bgColor: tooltipBgColor,
133
134
  fontColor: tooltipFontColor,
134
- flipOverrides: tooltipFlipOverrides
135
+ flipOverrides: tooltipFlipOverrides,
136
+ target: target
135
137
  }, icon);
136
138
  }
137
139
 
@@ -38,13 +38,8 @@ const IconButton = /*#__PURE__*/_react.default.forwardRef(({
38
38
  disabled,
39
39
  ...rest
40
40
  }, ref) => {
41
+ const [internalRef, setInternalRef] = (0, _react.useState)(null);
41
42
  const marginProps = (0, _utils.filterStyledSystemMarginProps)(rest);
42
- const hasIconWithTooltip = !!_react.default.Children.toArray(children).find(child => {
43
- var _child$props;
44
-
45
- return child === null || child === void 0 ? void 0 : (_child$props = child.props) === null || _child$props === void 0 ? void 0 : _child$props.tooltipMessage;
46
- });
47
- const [tooltipVisible, setTooltipVisible] = (0, _react.useState)(undefined);
48
43
 
49
44
  const onKeyDown = e => {
50
45
  if (_events.default.isEnterKey(e) || _events.default.isSpaceKey(e)) {
@@ -59,26 +54,23 @@ const IconButton = /*#__PURE__*/_react.default.forwardRef(({
59
54
  onAction(e);
60
55
  };
61
56
 
62
- const handleTooltipVisibility = (ev, callbackName) => {
63
- setTooltipVisible(["onFocus", "onMouseEnter"].includes(callbackName));
64
- if (rest[callbackName]) rest[callbackName](ev);
65
- };
66
-
67
57
  return /*#__PURE__*/_react.default.createElement(_iconButton.default, _extends({}, rest, {
68
58
  "aria-label": ariaLabel,
69
59
  onKeyDown: onKeyDown,
70
60
  onClick: handleOnAction,
71
- ref: ref,
61
+ ref: reference => {
62
+ if (reference) {
63
+ setInternalRef(reference);
64
+ if (!ref) return;
65
+ if (typeof ref === "object") ref.current = reference;
66
+ if (typeof ref === "function") ref(reference);
67
+ }
68
+ },
72
69
  disabled: disabled
73
- }, !disabled && hasIconWithTooltip && {
74
- onFocus: ev => handleTooltipVisibility(ev, "onFocus"),
75
- onBlur: ev => handleTooltipVisibility(ev, "onBlur"),
76
- onMouseEnter: ev => handleTooltipVisibility(ev, "onMouseEnter"),
77
- onMouseLeave: ev => handleTooltipVisibility(ev, "onMouseLeave")
78
70
  }, marginProps), /*#__PURE__*/_react.default.createElement(_tooltipProvider.TooltipProvider, {
79
71
  disabled: disabled,
80
- tooltipVisible: tooltipVisible,
81
- focusable: false
72
+ focusable: false,
73
+ target: internalRef
82
74
  }, children));
83
75
  });
84
76
 
@@ -11,13 +11,11 @@ var _propTypes = _interopRequireDefault(require("prop-types"));
11
11
 
12
12
  var _reactDom = _interopRequireDefault(require("react-dom"));
13
13
 
14
- var _styledComponents = require("styled-components");
15
-
16
14
  var _guid = _interopRequireDefault(require("../../__internal__/utils/helpers/guid"));
17
15
 
18
16
  var _browser = _interopRequireDefault(require("../../__internal__/utils/helpers/browser"));
19
17
 
20
- var _carbonScopedTokensProvider = require("../../style/design-tokens/carbon-scoped-tokens-provider/carbon-scoped-tokens-provider.component");
18
+ var _carbonScopedTokensProvider = _interopRequireDefault(require("../../style/design-tokens/carbon-scoped-tokens-provider/carbon-scoped-tokens-provider.component"));
21
19
 
22
20
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
23
21
 
@@ -33,7 +31,6 @@ const Portal = ({
33
31
  }) => {
34
32
  const [portalNode, setPortalNode] = (0, _react.useState)(null);
35
33
  const uniqueId = (0, _react.useMemo)(() => (0, _guid.default)(), []);
36
- const theme = (0, _react.useContext)(_styledComponents.ThemeContext);
37
34
  (0, _react.useEffect)(() => {
38
35
  if (onReposition) {
39
36
  onReposition();
@@ -68,7 +65,7 @@ const Portal = ({
68
65
  setPortalNode(node);
69
66
  } else if (!node) {
70
67
  node = document.createElement("div");
71
- node.classList.add(portalClassName, (0, _carbonScopedTokensProvider.tokensClassName)((theme === null || theme === void 0 ? void 0 : theme.name) || ""));
68
+ node.classList.add(portalClassName);
72
69
  node.setAttribute("data-portal-exit", uniqueId);
73
70
 
74
71
  if (id !== undefined) {
@@ -99,7 +96,7 @@ const Portal = ({
99
96
 
100
97
  return /*#__PURE__*/_react.default.createElement("span", {
101
98
  "data-portal-entrance": uniqueId
102
- }, /*#__PURE__*/_reactDom.default.createPortal(children, getPortalContainer()));
99
+ }, /*#__PURE__*/_reactDom.default.createPortal( /*#__PURE__*/_react.default.createElement(_carbonScopedTokensProvider.default, null, children), getPortalContainer()));
103
100
  };
104
101
 
105
102
  Portal.propTypes = {
@@ -11,15 +11,13 @@ var _propTypes = _interopRequireDefault(require("prop-types"));
11
11
 
12
12
  var _headless = _interopRequireDefault(require("@tippyjs/react/headless"));
13
13
 
14
- var _styledComponents = require("styled-components");
15
-
16
14
  var _tooltip = _interopRequireDefault(require("./tooltip.style"));
17
15
 
18
16
  var _tooltipPointer = _interopRequireDefault(require("./tooltip-pointer.style"));
19
17
 
20
18
  var _tags = _interopRequireDefault(require("../../__internal__/utils/helpers/tags/tags"));
21
19
 
22
- var _carbonScopedTokensProvider = require("../../style/design-tokens/carbon-scoped-tokens-provider/carbon-scoped-tokens-provider.component");
20
+ var _carbonScopedTokensProvider = _interopRequireDefault(require("../../style/design-tokens/carbon-scoped-tokens-provider/carbon-scoped-tokens-provider.component"));
23
21
 
24
22
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
25
23
 
@@ -44,15 +42,14 @@ const Tooltip = /*#__PURE__*/_react.default.forwardRef(({
44
42
  bgColor,
45
43
  fontColor,
46
44
  flipOverrides,
45
+ target,
47
46
  ...rest
48
47
  }, ref) => {
49
48
  const tooltipRef = (0, _react.useRef)(ref || null);
50
- const theme = (0, _react.useContext)(_styledComponents.ThemeContext);
51
49
 
52
50
  const tooltip = (attrs, content) => {
53
51
  const currentPosition = attrs["data-placement"] || position;
54
- return /*#__PURE__*/_react.default.createElement(_tooltip.default, _extends({
55
- className: (0, _carbonScopedTokensProvider.tokensClassName)(theme === null || theme === void 0 ? void 0 : theme.name),
52
+ return /*#__PURE__*/_react.default.createElement(_carbonScopedTokensProvider.default, null, /*#__PURE__*/_react.default.createElement(_tooltip.default, _extends({
56
53
  "data-element": "tooltip",
57
54
  role: "tooltip",
58
55
  tabIndex: "-1",
@@ -75,7 +72,7 @@ const Tooltip = /*#__PURE__*/_react.default.forwardRef(({
75
72
  "data-popper-arrow": "",
76
73
  "data-element": "tooltip-pointer",
77
74
  bgColor: bgColor
78
- })), /*#__PURE__*/_react.default.createElement("div", null, content));
75
+ })), /*#__PURE__*/_react.default.createElement("div", null, content)));
79
76
  };
80
77
 
81
78
  return /*#__PURE__*/_react.default.createElement(_headless.default, _extends({
@@ -85,6 +82,7 @@ const Tooltip = /*#__PURE__*/_react.default.forwardRef(({
85
82
  visible: isVisible
86
83
  }, {
87
84
  render: attrs => tooltip(attrs, message),
85
+ reference: target,
88
86
  popperOptions: {
89
87
  modifiers: [...(flipOverrides ? [{
90
88
  name: "flip",
@@ -123,6 +121,8 @@ Tooltip.propTypes = {
123
121
 
124
122
  /** Defines the size of the tooltip content */
125
123
  size: _propTypes.default.oneOf(["medium", "large"]),
124
+ // Reference element, tooltip will be positioned in relation to this element
125
+ target: _propTypes.default.instanceOf(Element),
126
126
 
127
127
  /** Override background color of the Tooltip, provide any color from palette or any valid css color value. */
128
128
  bgColor: _propTypes.default.string,
@@ -25,6 +25,7 @@ export interface TooltipProps {
25
25
  * (see https://popper.js.org/docs/v2/modifiers/flip/#fallbackplacements)
26
26
  */
27
27
  flipOverrides?: ["top" | "bottom" | "left" | "right"];
28
+ target?: Element;
28
29
  }
29
30
 
30
31
  export interface TooltipInternalProps extends TooltipProps {
@@ -1,6 +1,8 @@
1
- export function tokensClassName(theme: any): string;
2
- export const GlobalTokens: import("styled-components").GlobalStyleComponent<{}, import("styled-components").DefaultTheme>;
3
1
  export default CarbonScopedTokensProvider;
4
- declare function CarbonScopedTokensProvider({ children }: {
5
- children: any;
6
- }): JSX.Element;
2
+ /**
3
+ *
4
+ * Converts theme properties to css variables form and set them locally for
5
+ * given scope
6
+ *
7
+ */
8
+ declare const CarbonScopedTokensProvider: import("styled-components").StyledComponent<"div", any, {}, never>;
@@ -3,20 +3,14 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.default = exports.GlobalTokens = exports.tokensClassName = void 0;
6
+ exports.default = void 0;
7
7
 
8
- var _react = _interopRequireDefault(require("react"));
8
+ var _styledComponents = _interopRequireDefault(require("styled-components"));
9
9
 
10
- var _styledComponents = _interopRequireWildcard(require("styled-components"));
10
+ var _themes = require("../../themes");
11
11
 
12
12
  var _generateCssVariables = _interopRequireDefault(require("../generate-css-variables.util"));
13
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
-
20
14
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
21
15
 
22
16
  /**
@@ -25,37 +19,18 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
25
19
  * given scope
26
20
  *
27
21
  */
28
- const activeThemes = {};
29
- const carbonInstanceId = (0, _guid.default)();
30
-
31
- const kebabCase = input => input && input.toString().toLowerCase().match(/\w*/gm).filter(Boolean).join("-");
32
-
33
- const tokensClassName = theme => `sage-design-tokens-${kebabCase(theme)}-${carbonInstanceId}`;
34
-
35
- exports.tokensClassName = tokensClassName;
36
- const GlobalTokens = (0, _styledComponents.createGlobalStyle)`
37
- ${({
38
- theme
39
- }) => {
40
- const className = tokensClassName(theme.name);
41
- activeThemes[className] = activeThemes[className] || (0, _generateCssVariables.default)(theme.compatibility);
42
- return Object.entries(activeThemes).reduce((acc, [name, definitions]) => `${acc} .${name} { ${definitions} }`, "");
43
- }}`;
44
- exports.GlobalTokens = GlobalTokens;
45
- const TokensProviderWrapper = _styledComponents.default.div.attrs(({
46
- theme
47
- }) => ({
48
- className: tokensClassName(theme.name)
49
- }))`
22
+ const CarbonScopedTokensProvider = _styledComponents.default.div`
50
23
  margin: 0;
51
24
  padding: 0;
52
25
  width: auto;
53
26
  display: inline;
54
- `;
55
-
56
- const CarbonScopedTokensProvider = ({
57
- children
58
- }) => /*#__PURE__*/_react.default.createElement(TokensProviderWrapper, null, /*#__PURE__*/_react.default.createElement(GlobalTokens, null), children);
59
27
 
28
+ ${({
29
+ theme
30
+ }) => (0, _generateCssVariables.default)(theme.compatibility)}
31
+ `;
32
+ CarbonScopedTokensProvider.defaultProps = {
33
+ theme: _themes.baseTheme
34
+ };
60
35
  var _default = CarbonScopedTokensProvider;
61
36
  exports.default = _default;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "carbon-react",
3
- "version": "104.1.0",
3
+ "version": "104.4.0",
4
4
  "description": "A library of reusable React components for easily building user interfaces.",
5
5
  "engineStrict": true,
6
6
  "engines": {
@@ -15,8 +15,8 @@
15
15
  "scripts": {
16
16
  "start": "node ./scripts/check_node_version.js && start-storybook -p 9001 -s .assets -c .storybook",
17
17
  "start:debug-theme": "cross-env STORYBOOK_DEBUG_THEME=true npm run start",
18
- "test": "TZ=UTC jest --config=./jest.conf.json",
19
- "test-update": "TZ=UTC jest --config=./jest.conf.json --updateSnapshot",
18
+ "test": "jest --config=./jest.conf.json",
19
+ "test-update": "jest --config=./jest.conf.json --updateSnapshot",
20
20
  "test:cypress": "cypress open",
21
21
  "cypress:react": "npx cypress open-ct",
22
22
  "debug": "node --inspect ./node_modules/jest-cli/bin/jest --watch --config=./jest.conf.json",
@@ -112,6 +112,7 @@
112
112
  "cypress-real-events": "^1.6.0",
113
113
  "cypress-storybook": "^0.5.1",
114
114
  "cz-conventional-changelog": "^3.3.0",
115
+ "date-fns-tz": "^1.2.2",
115
116
  "draft-js": "^0.11.7",
116
117
  "enzyme": "^3.3.0",
117
118
  "enzyme-adapter-react-16": "^1.14.0",