carbon-react 126.3.0 → 126.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.
- package/esm/__internal__/popover/popover.component.d.ts +3 -2
- package/esm/__internal__/popover/popover.component.js +3 -2
- package/esm/components/popover-container/popover-container.component.js +51 -41
- package/esm/components/step-sequence/step-sequence.component.js +6 -0
- package/esm/components/tile/index.d.ts +2 -0
- package/esm/components/tile/index.js +1 -0
- package/esm/components/tile/tile-footer/tile-footer.component.d.ts +1 -1
- package/esm/components/tile/tile-footer/tile-footer.style.js +6 -1
- package/esm/components/tile/tile-header/index.d.ts +2 -0
- package/esm/components/tile/tile-header/index.js +1 -0
- package/esm/components/tile/tile-header/tile-header.component.d.ts +10 -0
- package/esm/components/tile/tile-header/tile-header.component.js +14 -0
- package/esm/components/tile/tile-header/tile-header.style.d.ts +5 -0
- package/esm/components/tile/tile-header/tile-header.style.js +32 -0
- package/esm/components/tile/tile.component.d.ts +4 -4
- package/esm/components/tile/tile.style.js +27 -2
- package/esm/hooks/__internal__/useFocusPortalContent/index.d.ts +1 -0
- package/esm/hooks/__internal__/useFocusPortalContent/index.js +1 -0
- package/esm/hooks/__internal__/useFocusPortalContent/useFocusPortalContent.d.ts +3 -0
- package/esm/hooks/__internal__/useFocusPortalContent/useFocusPortalContent.js +52 -0
- package/lib/__internal__/popover/popover.component.d.ts +3 -2
- package/lib/__internal__/popover/popover.component.js +3 -2
- package/lib/components/popover-container/popover-container.component.js +51 -41
- package/lib/components/step-sequence/step-sequence.component.js +6 -0
- package/lib/components/tile/index.d.ts +2 -0
- package/lib/components/tile/index.js +7 -0
- package/lib/components/tile/tile-footer/tile-footer.component.d.ts +1 -1
- package/lib/components/tile/tile-footer/tile-footer.style.js +6 -1
- package/lib/components/tile/tile-header/index.d.ts +2 -0
- package/lib/components/tile/tile-header/index.js +13 -0
- package/lib/components/tile/tile-header/package.json +6 -0
- package/lib/components/tile/tile-header/tile-header.component.d.ts +10 -0
- package/lib/components/tile/tile-header/tile-header.component.js +22 -0
- package/lib/components/tile/tile-header/tile-header.style.d.ts +5 -0
- package/lib/components/tile/tile-header/tile-header.style.js +40 -0
- package/lib/components/tile/tile.component.d.ts +4 -4
- package/lib/components/tile/tile.style.js +27 -2
- package/lib/hooks/__internal__/useFocusPortalContent/index.d.ts +1 -0
- package/lib/hooks/__internal__/useFocusPortalContent/index.js +13 -0
- package/lib/hooks/__internal__/useFocusPortalContent/package.json +6 -0
- package/lib/hooks/__internal__/useFocusPortalContent/useFocusPortalContent.d.ts +3 -0
- package/lib/hooks/__internal__/useFocusPortalContent/useFocusPortalContent.js +60 -0
- package/package.json +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React from "react";
|
|
1
|
+
import React, { MutableRefObject } from "react";
|
|
2
2
|
import { Placement, Middleware } from "@floating-ui/dom";
|
|
3
3
|
declare type CustomRefObject<T> = {
|
|
4
4
|
current?: T | null;
|
|
@@ -13,6 +13,7 @@ export interface PopoverProps {
|
|
|
13
13
|
isOpen?: boolean;
|
|
14
14
|
animationFrame?: boolean;
|
|
15
15
|
popoverStrategy?: "absolute" | "fixed";
|
|
16
|
+
childRefOverride?: MutableRefObject<HTMLDivElement | null>;
|
|
16
17
|
}
|
|
17
|
-
declare const Popover: ({ children, placement, disablePortal, reference, middleware, disableBackgroundUI, isOpen, animationFrame, popoverStrategy, }: PopoverProps) => React.JSX.Element;
|
|
18
|
+
declare const Popover: ({ children, placement, disablePortal, reference, middleware, disableBackgroundUI, isOpen, animationFrame, popoverStrategy, childRefOverride, }: PopoverProps) => React.JSX.Element;
|
|
18
19
|
export default Popover;
|
|
@@ -18,7 +18,8 @@ const Popover = ({
|
|
|
18
18
|
disableBackgroundUI,
|
|
19
19
|
isOpen = true,
|
|
20
20
|
animationFrame,
|
|
21
|
-
popoverStrategy = "absolute"
|
|
21
|
+
popoverStrategy = "absolute",
|
|
22
|
+
childRefOverride
|
|
22
23
|
}) => {
|
|
23
24
|
const elementDOM = useRef(null);
|
|
24
25
|
const {
|
|
@@ -30,7 +31,7 @@ const Popover = ({
|
|
|
30
31
|
elementDOM.current = document.createElement("div");
|
|
31
32
|
mountNode.appendChild(elementDOM.current);
|
|
32
33
|
}
|
|
33
|
-
const childRef = React.Children.only(children).ref;
|
|
34
|
+
const childRef = childRefOverride || React.Children.only(children).ref;
|
|
34
35
|
const innerRef = useRef(null);
|
|
35
36
|
const floatingReference = childRef || innerRef;
|
|
36
37
|
let content;
|
|
@@ -13,6 +13,7 @@ import useClickAwayListener from "../../hooks/__internal__/useClickAwayListener"
|
|
|
13
13
|
import Events from "../../__internal__/utils/helpers/events";
|
|
14
14
|
import FocusTrap from "../../__internal__/focus-trap";
|
|
15
15
|
import { ModalContext } from "../modal";
|
|
16
|
+
import useFocusPortalContent from "../../hooks/__internal__/useFocusPortalContent";
|
|
16
17
|
export const renderOpen = ({
|
|
17
18
|
tabIndex,
|
|
18
19
|
onClick,
|
|
@@ -22,18 +23,20 @@ export const renderOpen = ({
|
|
|
22
23
|
id,
|
|
23
24
|
"aria-expanded": ariaExpanded,
|
|
24
25
|
"aria-haspopup": ariaHasPopup
|
|
25
|
-
}) =>
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
26
|
+
}) => {
|
|
27
|
+
return /*#__PURE__*/React.createElement(PopoverContainerOpenIcon, {
|
|
28
|
+
tabIndex: tabIndex,
|
|
29
|
+
onClick: onClick,
|
|
30
|
+
"data-element": dataElement,
|
|
31
|
+
ref: ref,
|
|
32
|
+
"aria-label": ariaLabel,
|
|
33
|
+
"aria-haspopup": ariaHasPopup,
|
|
34
|
+
"aria-expanded": ariaExpanded,
|
|
35
|
+
id: id
|
|
36
|
+
}, /*#__PURE__*/React.createElement(Icon, {
|
|
37
|
+
type: "settings"
|
|
38
|
+
}));
|
|
39
|
+
};
|
|
37
40
|
export const renderClose = ({
|
|
38
41
|
"data-element": dataElement,
|
|
39
42
|
tabIndex,
|
|
@@ -84,8 +87,12 @@ export const PopoverContainer = ({
|
|
|
84
87
|
const isOpen = isControlled ? open : isOpenInternal;
|
|
85
88
|
const reduceMotion = !useMediaQuery("screen and (prefers-reduced-motion: no-preference)");
|
|
86
89
|
const closePopover = useCallback(ev => {
|
|
87
|
-
if (!isControlled)
|
|
88
|
-
|
|
90
|
+
if (!isControlled) {
|
|
91
|
+
setIsOpenInternal(false);
|
|
92
|
+
}
|
|
93
|
+
if (onClose) {
|
|
94
|
+
onClose(ev);
|
|
95
|
+
}
|
|
89
96
|
if (isOpen && openButtonRef.current) {
|
|
90
97
|
openButtonRef.current.focus();
|
|
91
98
|
}
|
|
@@ -115,6 +122,7 @@ export const PopoverContainer = ({
|
|
|
115
122
|
const handleCloseButtonClick = e => {
|
|
116
123
|
closePopover(e);
|
|
117
124
|
};
|
|
125
|
+
useFocusPortalContent(shouldCoverButton ? undefined : popoverContentNodeRef, shouldCoverButton ? undefined : openButtonRef, closePopover);
|
|
118
126
|
const renderOpenComponentProps = {
|
|
119
127
|
tabIndex: 0,
|
|
120
128
|
"aria-expanded": isOpen,
|
|
@@ -139,25 +147,7 @@ export const PopoverContainer = ({
|
|
|
139
147
|
};
|
|
140
148
|
const handleClick = useClickAwayListener(handleClickAway, "mousedown");
|
|
141
149
|
const [isAnimationComplete, setIsAnimationComplete] = useState(false);
|
|
142
|
-
const popover = /*#__PURE__*/React.createElement(
|
|
143
|
-
in: isOpen,
|
|
144
|
-
timeout: {
|
|
145
|
-
exit: 300
|
|
146
|
-
},
|
|
147
|
-
appear: true,
|
|
148
|
-
mountOnEnter: true,
|
|
149
|
-
unmountOnExit: true,
|
|
150
|
-
nodeRef: popoverContentNodeRef,
|
|
151
|
-
onEntered: shouldCoverButton ? /* istanbul ignore next */() => setIsAnimationComplete(true) : undefined,
|
|
152
|
-
onExiting: shouldCoverButton ? /* istanbul ignore next */() => setIsAnimationComplete(false) : undefined
|
|
153
|
-
}, state => isOpen && /*#__PURE__*/React.createElement(Popover, _extends({
|
|
154
|
-
disablePortal: true,
|
|
155
|
-
reference: popoverReference,
|
|
156
|
-
placement: position === "right" ? "bottom-start" : "bottom-end",
|
|
157
|
-
popoverStrategy: disableAnimation || reduceMotion ? "fixed" : "absolute"
|
|
158
|
-
}, shouldCoverButton && {
|
|
159
|
-
middleware: popoverMiddleware
|
|
160
|
-
}), /*#__PURE__*/React.createElement(PopoverContainerContentStyle, _extends({
|
|
150
|
+
const popover = state => /*#__PURE__*/React.createElement(PopoverContainerContentStyle, _extends({
|
|
161
151
|
"data-element": "popover-container-content",
|
|
162
152
|
role: "dialog",
|
|
163
153
|
animationState: state,
|
|
@@ -171,19 +161,39 @@ export const PopoverContainer = ({
|
|
|
171
161
|
}, filterStyledSystemPaddingProps(rest)), /*#__PURE__*/React.createElement(PopoverContainerHeaderStyle, null, /*#__PURE__*/React.createElement(PopoverContainerTitleStyle, {
|
|
172
162
|
id: popoverContainerId,
|
|
173
163
|
"data-element": "popover-container-title"
|
|
174
|
-
}, title), renderCloseComponent(renderCloseComponentProps)), children)
|
|
175
|
-
|
|
176
|
-
"data-component": "popover-container",
|
|
177
|
-
onMouseDown: handleClick
|
|
178
|
-
}, /*#__PURE__*/React.createElement("div", {
|
|
179
|
-
ref: popoverReference
|
|
180
|
-
}, renderOpenComponent(renderOpenComponentProps)), shouldCoverButton ? /*#__PURE__*/React.createElement(ModalContext.Provider, {
|
|
164
|
+
}, title), renderCloseComponent(renderCloseComponentProps)), children);
|
|
165
|
+
const childrenToRender = state => shouldCoverButton ? /*#__PURE__*/React.createElement(ModalContext.Provider, {
|
|
181
166
|
value: {
|
|
182
167
|
isAnimationComplete
|
|
183
168
|
}
|
|
184
169
|
}, /*#__PURE__*/React.createElement(FocusTrap, {
|
|
185
170
|
wrapperRef: popoverContentNodeRef,
|
|
186
171
|
isOpen: isOpen
|
|
187
|
-
}, popover)) : popover);
|
|
172
|
+
}, popover(state))) : popover(state);
|
|
173
|
+
return /*#__PURE__*/React.createElement(PopoverContainerWrapperStyle, {
|
|
174
|
+
"data-component": "popover-container",
|
|
175
|
+
onMouseDown: handleClick
|
|
176
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
177
|
+
ref: popoverReference
|
|
178
|
+
}, renderOpenComponent(renderOpenComponentProps)), /*#__PURE__*/React.createElement(Transition, {
|
|
179
|
+
in: isOpen,
|
|
180
|
+
timeout: {
|
|
181
|
+
exit: 300
|
|
182
|
+
},
|
|
183
|
+
appear: true,
|
|
184
|
+
mountOnEnter: true,
|
|
185
|
+
unmountOnExit: true,
|
|
186
|
+
nodeRef: popoverContentNodeRef,
|
|
187
|
+
onEntered: shouldCoverButton ? /* istanbul ignore next */() => setIsAnimationComplete(true) : undefined,
|
|
188
|
+
onExiting: shouldCoverButton ? /* istanbul ignore next */() => setIsAnimationComplete(false) : undefined
|
|
189
|
+
}, state => isOpen && /*#__PURE__*/React.createElement(Popover, _extends({
|
|
190
|
+
reference: popoverReference,
|
|
191
|
+
placement: position === "right" ? "bottom-start" : "bottom-end",
|
|
192
|
+
popoverStrategy: disableAnimation || reduceMotion ? "fixed" : "absolute"
|
|
193
|
+
}, shouldCoverButton && {
|
|
194
|
+
middleware: popoverMiddleware
|
|
195
|
+
}, {
|
|
196
|
+
childRefOverride: popoverContentNodeRef
|
|
197
|
+
}), childrenToRender(state))));
|
|
188
198
|
};
|
|
189
199
|
export default PopoverContainer;
|
|
@@ -1,15 +1,21 @@
|
|
|
1
1
|
function _extends() { _extends = Object.assign ? Object.assign.bind() : 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); }
|
|
2
2
|
import React from "react";
|
|
3
3
|
import PropTypes from "prop-types";
|
|
4
|
+
import Logger from "../../__internal__/utils/logger";
|
|
4
5
|
import StyledStepSequence from "./step-sequence.style";
|
|
5
6
|
export const StepSequenceContext = /*#__PURE__*/React.createContext({
|
|
6
7
|
orientation: "horizontal"
|
|
7
8
|
});
|
|
9
|
+
let deprecateWarnTriggered = false;
|
|
8
10
|
export const StepSequence = ({
|
|
9
11
|
children,
|
|
10
12
|
orientation = "horizontal",
|
|
11
13
|
...props
|
|
12
14
|
}) => {
|
|
15
|
+
if (!deprecateWarnTriggered) {
|
|
16
|
+
deprecateWarnTriggered = true;
|
|
17
|
+
Logger.deprecate("The `StepSequence` component is deprecated and will soon be removed," + " please use the `StepFlow` component instead.");
|
|
18
|
+
}
|
|
13
19
|
return /*#__PURE__*/React.createElement(StyledStepSequence, _extends({
|
|
14
20
|
"data-component": "step-sequence",
|
|
15
21
|
orientation: orientation,
|
|
@@ -4,6 +4,8 @@ export { default as TileContent } from "./tile-content";
|
|
|
4
4
|
export type { TileContentProps } from "./tile-content";
|
|
5
5
|
export { default as TileFooter } from "./tile-footer";
|
|
6
6
|
export type { TileFooterProps } from "./tile-footer";
|
|
7
|
+
export { default as TileHeader } from "./tile-header";
|
|
8
|
+
export type { TileHeaderProps } from "./tile-header";
|
|
7
9
|
export { default as FlexTileContainer } from "./flex-tile-container";
|
|
8
10
|
export type { FlexTileContainerProps } from "./flex-tile-container";
|
|
9
11
|
export { default as FlexTileCell } from "./flex-tile-cell";
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export { default as Tile } from "./tile.component";
|
|
2
2
|
export { default as TileContent } from "./tile-content";
|
|
3
3
|
export { default as TileFooter } from "./tile-footer";
|
|
4
|
+
export { default as TileHeader } from "./tile-header";
|
|
4
5
|
export { default as FlexTileContainer } from "./flex-tile-container";
|
|
5
6
|
export { default as FlexTileCell } from "./flex-tile-cell";
|
|
6
7
|
export { default as FlexTileDivider } from "./flex-tile-divider";
|
|
@@ -4,7 +4,7 @@ import { TagProps } from "../../../__internal__/utils/helpers/tags";
|
|
|
4
4
|
export interface TileFooterProps extends PaddingProps, TagProps {
|
|
5
5
|
children?: React.ReactNode;
|
|
6
6
|
/** set which background color variant should be used */
|
|
7
|
-
variant?: "default" | "black" | "transparent";
|
|
7
|
+
variant?: "default" | "black" | "transparent" | "grey";
|
|
8
8
|
}
|
|
9
9
|
export declare const TileFooter: ({ variant, children, ...rest }: TileFooterProps) => React.JSX.Element;
|
|
10
10
|
export default TileFooter;
|
|
@@ -7,18 +7,23 @@ const getBackgroundColor = variant => {
|
|
|
7
7
|
return "transparent";
|
|
8
8
|
case "black":
|
|
9
9
|
return "var(--colorsUtilityYin100)";
|
|
10
|
+
case "grey":
|
|
11
|
+
return "var(--colorsUtilityMajor025)";
|
|
10
12
|
default:
|
|
11
13
|
return "var(--colorsUtilityMajor100)";
|
|
12
14
|
}
|
|
13
15
|
};
|
|
14
16
|
const StyledTileFooter = styled.div`
|
|
15
17
|
${padding}
|
|
18
|
+
border-bottom-left-radius: calc(var(--tileBorderRadius) - 1px);
|
|
19
|
+
border-bottom-right-radius: calc(var(--tileBorderRadius) - 1px);
|
|
16
20
|
|
|
17
21
|
${({
|
|
18
22
|
variant
|
|
19
23
|
}) => css`
|
|
20
24
|
background: ${getBackgroundColor(variant)};
|
|
21
|
-
border-top: 1px solid
|
|
25
|
+
border-top: 1px solid
|
|
26
|
+
${variant === "grey" ? "var(--colorsUtilityMajor200)" : "var(--colorsUtilityMajor100)"};
|
|
22
27
|
`}
|
|
23
28
|
`;
|
|
24
29
|
StyledTileFooter.defaultProps = {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from "./tile-header.component";
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { PaddingProps } from "styled-system";
|
|
3
|
+
import { TagProps } from "../../../__internal__/utils/helpers/tags";
|
|
4
|
+
export interface TileHeaderProps extends PaddingProps, TagProps {
|
|
5
|
+
children?: React.ReactNode;
|
|
6
|
+
/** set which background color variant should be used */
|
|
7
|
+
variant?: "default" | "black" | "transparent" | "grey";
|
|
8
|
+
}
|
|
9
|
+
export declare const TileHeader: ({ variant, children, ...rest }: TileHeaderProps) => React.JSX.Element;
|
|
10
|
+
export default TileHeader;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
function _extends() { _extends = Object.assign ? Object.assign.bind() : 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); }
|
|
2
|
+
import React from "react";
|
|
3
|
+
import PropTypes from "prop-types";
|
|
4
|
+
import StyledTileHeader from "./tile-header.style";
|
|
5
|
+
import tagComponent from "../../../__internal__/utils/helpers/tags";
|
|
6
|
+
import filterStyledSystemPaddingProps from "../../../style/utils/filter-styled-system-padding-props";
|
|
7
|
+
export const TileHeader = ({
|
|
8
|
+
variant,
|
|
9
|
+
children,
|
|
10
|
+
...rest
|
|
11
|
+
}) => /*#__PURE__*/React.createElement(StyledTileHeader, _extends({
|
|
12
|
+
variant: variant
|
|
13
|
+
}, filterStyledSystemPaddingProps(rest), tagComponent("tile-header", rest)), children);
|
|
14
|
+
export default TileHeader;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import styled, { css } from "styled-components";
|
|
2
|
+
import { padding } from "styled-system";
|
|
3
|
+
import { baseTheme } from "../../../style/themes";
|
|
4
|
+
const getBackgroundColor = variant => {
|
|
5
|
+
switch (variant) {
|
|
6
|
+
case "transparent":
|
|
7
|
+
return "transparent";
|
|
8
|
+
case "black":
|
|
9
|
+
return "var(--colorsUtilityYin100)";
|
|
10
|
+
case "grey":
|
|
11
|
+
return "var(--colorsUtilityMajor025)";
|
|
12
|
+
default:
|
|
13
|
+
return "var(--colorsUtilityMajor100)";
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
const StyledTileHeader = styled.div`
|
|
17
|
+
${padding}
|
|
18
|
+
border-top-left-radius: calc(var(--tileBorderRadius) - 1px);
|
|
19
|
+
border-top-right-radius: calc(var(--tileBorderRadius) - 1px);
|
|
20
|
+
|
|
21
|
+
${({
|
|
22
|
+
variant
|
|
23
|
+
}) => css`
|
|
24
|
+
background: ${getBackgroundColor(variant)};
|
|
25
|
+
border-bottom: 1px solid
|
|
26
|
+
${variant === "grey" ? "var(--colorsUtilityMajor200)" : "var(--colorsUtilityMajor100)"};
|
|
27
|
+
`}
|
|
28
|
+
`;
|
|
29
|
+
StyledTileHeader.defaultProps = {
|
|
30
|
+
theme: baseTheme
|
|
31
|
+
};
|
|
32
|
+
export default StyledTileHeader;
|
|
@@ -4,8 +4,8 @@ import { SpaceProps, WidthProps } from "styled-system";
|
|
|
4
4
|
import { TagProps } from "../../__internal__/utils/helpers/tags";
|
|
5
5
|
declare type DesignTokensType = keyof typeof DesignTokens;
|
|
6
6
|
export interface TileProps extends SpaceProps, WidthProps, TagProps {
|
|
7
|
-
/** Sets the theme of the tile
|
|
8
|
-
variant?: "tile" | "transparent" | "active";
|
|
7
|
+
/** Sets the theme of the tile */
|
|
8
|
+
variant?: "tile" | "transparent" | "active" | "grey";
|
|
9
9
|
/**
|
|
10
10
|
* The content to render within the tile. Each child will be wrapped with
|
|
11
11
|
* a TileContent wrapper, which allows any individual child component to take a
|
|
@@ -25,8 +25,8 @@ export interface TileProps extends SpaceProps, WidthProps, TagProps {
|
|
|
25
25
|
borderWidth?: Extract<DesignTokensType, `borderWidth${string}`>;
|
|
26
26
|
/** Sets the border variant that should be used */
|
|
27
27
|
borderVariant?: "default" | "selected" | "positive" | "negative" | "caution" | "info";
|
|
28
|
-
/** Sets the level of roundness of the corners, "default" is 8px
|
|
29
|
-
roundness?: "default" | "large";
|
|
28
|
+
/** Sets the level of roundness of the corners, "default" is 8px, "large" is 16px and "small" is 4px */
|
|
29
|
+
roundness?: "default" | "large" | "small";
|
|
30
30
|
/**
|
|
31
31
|
* Set a percentage-based height for the whole Tile component, relative to its parent.
|
|
32
32
|
*/
|
|
@@ -18,6 +18,16 @@ const getBorderColor = borderVariant => {
|
|
|
18
18
|
return "var(--colorsUtilityMajor100)";
|
|
19
19
|
}
|
|
20
20
|
};
|
|
21
|
+
const getBorderRadius = roundness => {
|
|
22
|
+
switch (roundness) {
|
|
23
|
+
case "large":
|
|
24
|
+
return "var(--borderRadius200)";
|
|
25
|
+
case "small":
|
|
26
|
+
return "var(--borderRadius050)";
|
|
27
|
+
default:
|
|
28
|
+
return "var(--borderRadius100)";
|
|
29
|
+
}
|
|
30
|
+
};
|
|
21
31
|
const StyledTile = styled.div`
|
|
22
32
|
${({
|
|
23
33
|
borderVariant,
|
|
@@ -32,8 +42,18 @@ const StyledTile = styled.div`
|
|
|
32
42
|
|
|
33
43
|
box-sizing: border-box;
|
|
34
44
|
border: var(--${borderWidth}) solid ${getBorderColor(borderVariant)};
|
|
35
|
-
border-radius: ${roundness
|
|
36
|
-
|
|
45
|
+
border-radius: ${getBorderRadius(roundness)};
|
|
46
|
+
--tileBorderRadius: ${getBorderRadius(roundness)};
|
|
47
|
+
|
|
48
|
+
> *:first-child {
|
|
49
|
+
border-top-left-radius: calc(${getBorderRadius(roundness)} - 1px);
|
|
50
|
+
border-top-right-radius: calc(${getBorderRadius(roundness)} - 1px);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
> *:last-child {
|
|
54
|
+
border-bottom-left-radius: calc(${getBorderRadius(roundness)} - 1px);
|
|
55
|
+
border-bottom-right-radius: calc(${getBorderRadius(roundness)} - 1px);
|
|
56
|
+
}
|
|
37
57
|
|
|
38
58
|
${variant === "tile" && css`
|
|
39
59
|
background-color: var(--colorsUtilityYang100);
|
|
@@ -48,6 +68,11 @@ const StyledTile = styled.div`
|
|
|
48
68
|
border-color: var(--colorsActionMajor500);
|
|
49
69
|
`}
|
|
50
70
|
|
|
71
|
+
${variant === "grey" && css`
|
|
72
|
+
background-color: var(--colorsUtilityMajor025);
|
|
73
|
+
border-color: var(--colorsUtilityMajor200);
|
|
74
|
+
`}
|
|
75
|
+
|
|
51
76
|
display: flex;
|
|
52
77
|
flex-direction: ${isHorizontal ? "row" : "column"};
|
|
53
78
|
position: relative;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from "./useFocusPortalContent";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from "./useFocusPortalContent";
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { useEffect } from "react";
|
|
2
|
+
import Events from "../../../__internal__/utils/helpers/events";
|
|
3
|
+
import { defaultFocusableSelectors } from "../../../__internal__/focus-trap/focus-trap-utils";
|
|
4
|
+
export default ((container, target, focusCallback) => {
|
|
5
|
+
useEffect(() => {
|
|
6
|
+
const handleFocusPortalContent = ev => {
|
|
7
|
+
if (container?.current && target?.current) {
|
|
8
|
+
const focusableElementsInContainer = Array.from(container.current?.querySelectorAll(defaultFocusableSelectors) || /* istanbul ignore next */[]);
|
|
9
|
+
if (target?.current === document.activeElement) {
|
|
10
|
+
if (Events.isTabKey(ev) && !Events.isShiftKey(ev) && focusableElementsInContainer[0]) {
|
|
11
|
+
ev.preventDefault();
|
|
12
|
+
focusableElementsInContainer[0]?.focus();
|
|
13
|
+
}
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/* istanbul ignore if */
|
|
18
|
+
if (!focusableElementsInContainer.length) {
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
const lastElementFocused = focusableElementsInContainer[focusableElementsInContainer.length - 1] === document.activeElement;
|
|
22
|
+
const firstElementFocused = focusableElementsInContainer[0] === document.activeElement;
|
|
23
|
+
if (Events.isTabKey(ev)) {
|
|
24
|
+
// last element focused inside portal navigate to next element in DOM after the target/ trigger element
|
|
25
|
+
if (lastElementFocused && !Events.isShiftKey(ev)) {
|
|
26
|
+
ev.preventDefault();
|
|
27
|
+
const allFocusableElements = Array.from(document.querySelectorAll(defaultFocusableSelectors) || /* istanbul ignore next */[]);
|
|
28
|
+
const filteredElements = allFocusableElements.filter(el => el === target.current || Number(el.tabIndex) !== -1);
|
|
29
|
+
const nextIndex = filteredElements.indexOf(target.current) + 1;
|
|
30
|
+
focusCallback?.(ev);
|
|
31
|
+
filteredElements[nextIndex]?.focus();
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
// first element focused inside portal navigate back to the target/ trigger element
|
|
35
|
+
if (firstElementFocused && Events.isShiftKey(ev)) {
|
|
36
|
+
ev.preventDefault();
|
|
37
|
+
focusCallback?.(ev);
|
|
38
|
+
|
|
39
|
+
/* istanbul ignore else */
|
|
40
|
+
if (target.current !== document.activeElement) {
|
|
41
|
+
target.current?.focus();
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
document.addEventListener("keydown", handleFocusPortalContent);
|
|
48
|
+
return () => {
|
|
49
|
+
document.removeEventListener("keydown", handleFocusPortalContent);
|
|
50
|
+
};
|
|
51
|
+
}, [target, container, focusCallback]);
|
|
52
|
+
});
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React from "react";
|
|
1
|
+
import React, { MutableRefObject } from "react";
|
|
2
2
|
import { Placement, Middleware } from "@floating-ui/dom";
|
|
3
3
|
declare type CustomRefObject<T> = {
|
|
4
4
|
current?: T | null;
|
|
@@ -13,6 +13,7 @@ export interface PopoverProps {
|
|
|
13
13
|
isOpen?: boolean;
|
|
14
14
|
animationFrame?: boolean;
|
|
15
15
|
popoverStrategy?: "absolute" | "fixed";
|
|
16
|
+
childRefOverride?: MutableRefObject<HTMLDivElement | null>;
|
|
16
17
|
}
|
|
17
|
-
declare const Popover: ({ children, placement, disablePortal, reference, middleware, disableBackgroundUI, isOpen, animationFrame, popoverStrategy, }: PopoverProps) => React.JSX.Element;
|
|
18
|
+
declare const Popover: ({ children, placement, disablePortal, reference, middleware, disableBackgroundUI, isOpen, animationFrame, popoverStrategy, childRefOverride, }: PopoverProps) => React.JSX.Element;
|
|
18
19
|
export default Popover;
|
|
@@ -27,7 +27,8 @@ const Popover = ({
|
|
|
27
27
|
disableBackgroundUI,
|
|
28
28
|
isOpen = true,
|
|
29
29
|
animationFrame,
|
|
30
|
-
popoverStrategy = "absolute"
|
|
30
|
+
popoverStrategy = "absolute",
|
|
31
|
+
childRefOverride
|
|
31
32
|
}) => {
|
|
32
33
|
const elementDOM = (0, _react.useRef)(null);
|
|
33
34
|
const {
|
|
@@ -39,7 +40,7 @@ const Popover = ({
|
|
|
39
40
|
elementDOM.current = document.createElement("div");
|
|
40
41
|
mountNode.appendChild(elementDOM.current);
|
|
41
42
|
}
|
|
42
|
-
const childRef = _react.default.Children.only(children).ref;
|
|
43
|
+
const childRef = childRefOverride || _react.default.Children.only(children).ref;
|
|
43
44
|
const innerRef = (0, _react.useRef)(null);
|
|
44
45
|
const floatingReference = childRef || innerRef;
|
|
45
46
|
let content;
|
|
@@ -18,6 +18,7 @@ var _useClickAwayListener = _interopRequireDefault(require("../../hooks/__intern
|
|
|
18
18
|
var _events = _interopRequireDefault(require("../../__internal__/utils/helpers/events"));
|
|
19
19
|
var _focusTrap = _interopRequireDefault(require("../../__internal__/focus-trap"));
|
|
20
20
|
var _modal = require("../modal");
|
|
21
|
+
var _useFocusPortalContent = _interopRequireDefault(require("../../hooks/__internal__/useFocusPortalContent"));
|
|
21
22
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
22
23
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
23
24
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
@@ -31,18 +32,20 @@ const renderOpen = ({
|
|
|
31
32
|
id,
|
|
32
33
|
"aria-expanded": ariaExpanded,
|
|
33
34
|
"aria-haspopup": ariaHasPopup
|
|
34
|
-
}) =>
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
35
|
+
}) => {
|
|
36
|
+
return /*#__PURE__*/_react.default.createElement(_popoverContainer.PopoverContainerOpenIcon, {
|
|
37
|
+
tabIndex: tabIndex,
|
|
38
|
+
onClick: onClick,
|
|
39
|
+
"data-element": dataElement,
|
|
40
|
+
ref: ref,
|
|
41
|
+
"aria-label": ariaLabel,
|
|
42
|
+
"aria-haspopup": ariaHasPopup,
|
|
43
|
+
"aria-expanded": ariaExpanded,
|
|
44
|
+
id: id
|
|
45
|
+
}, /*#__PURE__*/_react.default.createElement(_icon.default, {
|
|
46
|
+
type: "settings"
|
|
47
|
+
}));
|
|
48
|
+
};
|
|
46
49
|
exports.renderOpen = renderOpen;
|
|
47
50
|
const renderClose = ({
|
|
48
51
|
"data-element": dataElement,
|
|
@@ -95,8 +98,12 @@ const PopoverContainer = ({
|
|
|
95
98
|
const isOpen = isControlled ? open : isOpenInternal;
|
|
96
99
|
const reduceMotion = !(0, _useMediaQuery.default)("screen and (prefers-reduced-motion: no-preference)");
|
|
97
100
|
const closePopover = (0, _react.useCallback)(ev => {
|
|
98
|
-
if (!isControlled)
|
|
99
|
-
|
|
101
|
+
if (!isControlled) {
|
|
102
|
+
setIsOpenInternal(false);
|
|
103
|
+
}
|
|
104
|
+
if (onClose) {
|
|
105
|
+
onClose(ev);
|
|
106
|
+
}
|
|
100
107
|
if (isOpen && openButtonRef.current) {
|
|
101
108
|
openButtonRef.current.focus();
|
|
102
109
|
}
|
|
@@ -126,6 +133,7 @@ const PopoverContainer = ({
|
|
|
126
133
|
const handleCloseButtonClick = e => {
|
|
127
134
|
closePopover(e);
|
|
128
135
|
};
|
|
136
|
+
(0, _useFocusPortalContent.default)(shouldCoverButton ? undefined : popoverContentNodeRef, shouldCoverButton ? undefined : openButtonRef, closePopover);
|
|
129
137
|
const renderOpenComponentProps = {
|
|
130
138
|
tabIndex: 0,
|
|
131
139
|
"aria-expanded": isOpen,
|
|
@@ -150,25 +158,7 @@ const PopoverContainer = ({
|
|
|
150
158
|
};
|
|
151
159
|
const handleClick = (0, _useClickAwayListener.default)(handleClickAway, "mousedown");
|
|
152
160
|
const [isAnimationComplete, setIsAnimationComplete] = (0, _react.useState)(false);
|
|
153
|
-
const popover = /*#__PURE__*/_react.default.createElement(
|
|
154
|
-
in: isOpen,
|
|
155
|
-
timeout: {
|
|
156
|
-
exit: 300
|
|
157
|
-
},
|
|
158
|
-
appear: true,
|
|
159
|
-
mountOnEnter: true,
|
|
160
|
-
unmountOnExit: true,
|
|
161
|
-
nodeRef: popoverContentNodeRef,
|
|
162
|
-
onEntered: shouldCoverButton ? /* istanbul ignore next */() => setIsAnimationComplete(true) : undefined,
|
|
163
|
-
onExiting: shouldCoverButton ? /* istanbul ignore next */() => setIsAnimationComplete(false) : undefined
|
|
164
|
-
}, state => isOpen && /*#__PURE__*/_react.default.createElement(_popover.default, _extends({
|
|
165
|
-
disablePortal: true,
|
|
166
|
-
reference: popoverReference,
|
|
167
|
-
placement: position === "right" ? "bottom-start" : "bottom-end",
|
|
168
|
-
popoverStrategy: disableAnimation || reduceMotion ? "fixed" : "absolute"
|
|
169
|
-
}, shouldCoverButton && {
|
|
170
|
-
middleware: popoverMiddleware
|
|
171
|
-
}), /*#__PURE__*/_react.default.createElement(_popoverContainer.PopoverContainerContentStyle, _extends({
|
|
161
|
+
const popover = state => /*#__PURE__*/_react.default.createElement(_popoverContainer.PopoverContainerContentStyle, _extends({
|
|
172
162
|
"data-element": "popover-container-content",
|
|
173
163
|
role: "dialog",
|
|
174
164
|
animationState: state,
|
|
@@ -182,20 +172,40 @@ const PopoverContainer = ({
|
|
|
182
172
|
}, (0, _utils.filterStyledSystemPaddingProps)(rest)), /*#__PURE__*/_react.default.createElement(_popoverContainer.PopoverContainerHeaderStyle, null, /*#__PURE__*/_react.default.createElement(_popoverContainer.PopoverContainerTitleStyle, {
|
|
183
173
|
id: popoverContainerId,
|
|
184
174
|
"data-element": "popover-container-title"
|
|
185
|
-
}, title), renderCloseComponent(renderCloseComponentProps)), children)
|
|
186
|
-
|
|
187
|
-
"data-component": "popover-container",
|
|
188
|
-
onMouseDown: handleClick
|
|
189
|
-
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
190
|
-
ref: popoverReference
|
|
191
|
-
}, renderOpenComponent(renderOpenComponentProps)), shouldCoverButton ? /*#__PURE__*/_react.default.createElement(_modal.ModalContext.Provider, {
|
|
175
|
+
}, title), renderCloseComponent(renderCloseComponentProps)), children);
|
|
176
|
+
const childrenToRender = state => shouldCoverButton ? /*#__PURE__*/_react.default.createElement(_modal.ModalContext.Provider, {
|
|
192
177
|
value: {
|
|
193
178
|
isAnimationComplete
|
|
194
179
|
}
|
|
195
180
|
}, /*#__PURE__*/_react.default.createElement(_focusTrap.default, {
|
|
196
181
|
wrapperRef: popoverContentNodeRef,
|
|
197
182
|
isOpen: isOpen
|
|
198
|
-
}, popover)) : popover);
|
|
183
|
+
}, popover(state))) : popover(state);
|
|
184
|
+
return /*#__PURE__*/_react.default.createElement(_popoverContainer.PopoverContainerWrapperStyle, {
|
|
185
|
+
"data-component": "popover-container",
|
|
186
|
+
onMouseDown: handleClick
|
|
187
|
+
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
188
|
+
ref: popoverReference
|
|
189
|
+
}, renderOpenComponent(renderOpenComponentProps)), /*#__PURE__*/_react.default.createElement(_reactTransitionGroup.Transition, {
|
|
190
|
+
in: isOpen,
|
|
191
|
+
timeout: {
|
|
192
|
+
exit: 300
|
|
193
|
+
},
|
|
194
|
+
appear: true,
|
|
195
|
+
mountOnEnter: true,
|
|
196
|
+
unmountOnExit: true,
|
|
197
|
+
nodeRef: popoverContentNodeRef,
|
|
198
|
+
onEntered: shouldCoverButton ? /* istanbul ignore next */() => setIsAnimationComplete(true) : undefined,
|
|
199
|
+
onExiting: shouldCoverButton ? /* istanbul ignore next */() => setIsAnimationComplete(false) : undefined
|
|
200
|
+
}, state => isOpen && /*#__PURE__*/_react.default.createElement(_popover.default, _extends({
|
|
201
|
+
reference: popoverReference,
|
|
202
|
+
placement: position === "right" ? "bottom-start" : "bottom-end",
|
|
203
|
+
popoverStrategy: disableAnimation || reduceMotion ? "fixed" : "absolute"
|
|
204
|
+
}, shouldCoverButton && {
|
|
205
|
+
middleware: popoverMiddleware
|
|
206
|
+
}, {
|
|
207
|
+
childRefOverride: popoverContentNodeRef
|
|
208
|
+
}), childrenToRender(state))));
|
|
199
209
|
};
|
|
200
210
|
exports.PopoverContainer = PopoverContainer;
|
|
201
211
|
var _default = exports.default = PopoverContainer;
|
|
@@ -6,17 +6,23 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.default = exports.StepSequenceContext = exports.StepSequence = void 0;
|
|
7
7
|
var _react = _interopRequireDefault(require("react"));
|
|
8
8
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
9
|
+
var _logger = _interopRequireDefault(require("../../__internal__/utils/logger"));
|
|
9
10
|
var _stepSequence = _interopRequireDefault(require("./step-sequence.style"));
|
|
10
11
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
11
12
|
function _extends() { _extends = Object.assign ? Object.assign.bind() : 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); }
|
|
12
13
|
const StepSequenceContext = exports.StepSequenceContext = /*#__PURE__*/_react.default.createContext({
|
|
13
14
|
orientation: "horizontal"
|
|
14
15
|
});
|
|
16
|
+
let deprecateWarnTriggered = false;
|
|
15
17
|
const StepSequence = ({
|
|
16
18
|
children,
|
|
17
19
|
orientation = "horizontal",
|
|
18
20
|
...props
|
|
19
21
|
}) => {
|
|
22
|
+
if (!deprecateWarnTriggered) {
|
|
23
|
+
deprecateWarnTriggered = true;
|
|
24
|
+
_logger.default.deprecate("The `StepSequence` component is deprecated and will soon be removed," + " please use the `StepFlow` component instead.");
|
|
25
|
+
}
|
|
20
26
|
return /*#__PURE__*/_react.default.createElement(_stepSequence.default, _extends({
|
|
21
27
|
"data-component": "step-sequence",
|
|
22
28
|
orientation: orientation,
|
|
@@ -4,6 +4,8 @@ export { default as TileContent } from "./tile-content";
|
|
|
4
4
|
export type { TileContentProps } from "./tile-content";
|
|
5
5
|
export { default as TileFooter } from "./tile-footer";
|
|
6
6
|
export type { TileFooterProps } from "./tile-footer";
|
|
7
|
+
export { default as TileHeader } from "./tile-header";
|
|
8
|
+
export type { TileHeaderProps } from "./tile-header";
|
|
7
9
|
export { default as FlexTileContainer } from "./flex-tile-container";
|
|
8
10
|
export type { FlexTileContainerProps } from "./flex-tile-container";
|
|
9
11
|
export { default as FlexTileCell } from "./flex-tile-cell";
|
|
@@ -39,9 +39,16 @@ Object.defineProperty(exports, "TileFooter", {
|
|
|
39
39
|
return _tileFooter.default;
|
|
40
40
|
}
|
|
41
41
|
});
|
|
42
|
+
Object.defineProperty(exports, "TileHeader", {
|
|
43
|
+
enumerable: true,
|
|
44
|
+
get: function () {
|
|
45
|
+
return _tileHeader.default;
|
|
46
|
+
}
|
|
47
|
+
});
|
|
42
48
|
var _tile = _interopRequireDefault(require("./tile.component"));
|
|
43
49
|
var _tileContent = _interopRequireDefault(require("./tile-content"));
|
|
44
50
|
var _tileFooter = _interopRequireDefault(require("./tile-footer"));
|
|
51
|
+
var _tileHeader = _interopRequireDefault(require("./tile-header"));
|
|
45
52
|
var _flexTileContainer = _interopRequireDefault(require("./flex-tile-container"));
|
|
46
53
|
var _flexTileCell = _interopRequireDefault(require("./flex-tile-cell"));
|
|
47
54
|
var _flexTileDivider = _interopRequireDefault(require("./flex-tile-divider"));
|
|
@@ -4,7 +4,7 @@ import { TagProps } from "../../../__internal__/utils/helpers/tags";
|
|
|
4
4
|
export interface TileFooterProps extends PaddingProps, TagProps {
|
|
5
5
|
children?: React.ReactNode;
|
|
6
6
|
/** set which background color variant should be used */
|
|
7
|
-
variant?: "default" | "black" | "transparent";
|
|
7
|
+
variant?: "default" | "black" | "transparent" | "grey";
|
|
8
8
|
}
|
|
9
9
|
export declare const TileFooter: ({ variant, children, ...rest }: TileFooterProps) => React.JSX.Element;
|
|
10
10
|
export default TileFooter;
|
|
@@ -15,18 +15,23 @@ const getBackgroundColor = variant => {
|
|
|
15
15
|
return "transparent";
|
|
16
16
|
case "black":
|
|
17
17
|
return "var(--colorsUtilityYin100)";
|
|
18
|
+
case "grey":
|
|
19
|
+
return "var(--colorsUtilityMajor025)";
|
|
18
20
|
default:
|
|
19
21
|
return "var(--colorsUtilityMajor100)";
|
|
20
22
|
}
|
|
21
23
|
};
|
|
22
24
|
const StyledTileFooter = _styledComponents.default.div`
|
|
23
25
|
${_styledSystem.padding}
|
|
26
|
+
border-bottom-left-radius: calc(var(--tileBorderRadius) - 1px);
|
|
27
|
+
border-bottom-right-radius: calc(var(--tileBorderRadius) - 1px);
|
|
24
28
|
|
|
25
29
|
${({
|
|
26
30
|
variant
|
|
27
31
|
}) => (0, _styledComponents.css)`
|
|
28
32
|
background: ${getBackgroundColor(variant)};
|
|
29
|
-
border-top: 1px solid
|
|
33
|
+
border-top: 1px solid
|
|
34
|
+
${variant === "grey" ? "var(--colorsUtilityMajor200)" : "var(--colorsUtilityMajor100)"};
|
|
30
35
|
`}
|
|
31
36
|
`;
|
|
32
37
|
StyledTileFooter.defaultProps = {
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
Object.defineProperty(exports, "default", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function () {
|
|
9
|
+
return _tileHeader.default;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
var _tileHeader = _interopRequireDefault(require("./tile-header.component"));
|
|
13
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { PaddingProps } from "styled-system";
|
|
3
|
+
import { TagProps } from "../../../__internal__/utils/helpers/tags";
|
|
4
|
+
export interface TileHeaderProps extends PaddingProps, TagProps {
|
|
5
|
+
children?: React.ReactNode;
|
|
6
|
+
/** set which background color variant should be used */
|
|
7
|
+
variant?: "default" | "black" | "transparent" | "grey";
|
|
8
|
+
}
|
|
9
|
+
export declare const TileHeader: ({ variant, children, ...rest }: TileHeaderProps) => React.JSX.Element;
|
|
10
|
+
export default TileHeader;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = exports.TileHeader = void 0;
|
|
7
|
+
var _react = _interopRequireDefault(require("react"));
|
|
8
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
9
|
+
var _tileHeader = _interopRequireDefault(require("./tile-header.style"));
|
|
10
|
+
var _tags = _interopRequireDefault(require("../../../__internal__/utils/helpers/tags"));
|
|
11
|
+
var _filterStyledSystemPaddingProps = _interopRequireDefault(require("../../../style/utils/filter-styled-system-padding-props"));
|
|
12
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
13
|
+
function _extends() { _extends = Object.assign ? Object.assign.bind() : 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); }
|
|
14
|
+
const TileHeader = ({
|
|
15
|
+
variant,
|
|
16
|
+
children,
|
|
17
|
+
...rest
|
|
18
|
+
}) => /*#__PURE__*/_react.default.createElement(_tileHeader.default, _extends({
|
|
19
|
+
variant: variant
|
|
20
|
+
}, (0, _filterStyledSystemPaddingProps.default)(rest), (0, _tags.default)("tile-header", rest)), children);
|
|
21
|
+
exports.TileHeader = TileHeader;
|
|
22
|
+
var _default = exports.default = TileHeader;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _styledComponents = _interopRequireWildcard(require("styled-components"));
|
|
8
|
+
var _styledSystem = require("styled-system");
|
|
9
|
+
var _themes = require("../../../style/themes");
|
|
10
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
11
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
12
|
+
const getBackgroundColor = variant => {
|
|
13
|
+
switch (variant) {
|
|
14
|
+
case "transparent":
|
|
15
|
+
return "transparent";
|
|
16
|
+
case "black":
|
|
17
|
+
return "var(--colorsUtilityYin100)";
|
|
18
|
+
case "grey":
|
|
19
|
+
return "var(--colorsUtilityMajor025)";
|
|
20
|
+
default:
|
|
21
|
+
return "var(--colorsUtilityMajor100)";
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
const StyledTileHeader = _styledComponents.default.div`
|
|
25
|
+
${_styledSystem.padding}
|
|
26
|
+
border-top-left-radius: calc(var(--tileBorderRadius) - 1px);
|
|
27
|
+
border-top-right-radius: calc(var(--tileBorderRadius) - 1px);
|
|
28
|
+
|
|
29
|
+
${({
|
|
30
|
+
variant
|
|
31
|
+
}) => (0, _styledComponents.css)`
|
|
32
|
+
background: ${getBackgroundColor(variant)};
|
|
33
|
+
border-bottom: 1px solid
|
|
34
|
+
${variant === "grey" ? "var(--colorsUtilityMajor200)" : "var(--colorsUtilityMajor100)"};
|
|
35
|
+
`}
|
|
36
|
+
`;
|
|
37
|
+
StyledTileHeader.defaultProps = {
|
|
38
|
+
theme: _themes.baseTheme
|
|
39
|
+
};
|
|
40
|
+
var _default = exports.default = StyledTileHeader;
|
|
@@ -4,8 +4,8 @@ import { SpaceProps, WidthProps } from "styled-system";
|
|
|
4
4
|
import { TagProps } from "../../__internal__/utils/helpers/tags";
|
|
5
5
|
declare type DesignTokensType = keyof typeof DesignTokens;
|
|
6
6
|
export interface TileProps extends SpaceProps, WidthProps, TagProps {
|
|
7
|
-
/** Sets the theme of the tile
|
|
8
|
-
variant?: "tile" | "transparent" | "active";
|
|
7
|
+
/** Sets the theme of the tile */
|
|
8
|
+
variant?: "tile" | "transparent" | "active" | "grey";
|
|
9
9
|
/**
|
|
10
10
|
* The content to render within the tile. Each child will be wrapped with
|
|
11
11
|
* a TileContent wrapper, which allows any individual child component to take a
|
|
@@ -25,8 +25,8 @@ export interface TileProps extends SpaceProps, WidthProps, TagProps {
|
|
|
25
25
|
borderWidth?: Extract<DesignTokensType, `borderWidth${string}`>;
|
|
26
26
|
/** Sets the border variant that should be used */
|
|
27
27
|
borderVariant?: "default" | "selected" | "positive" | "negative" | "caution" | "info";
|
|
28
|
-
/** Sets the level of roundness of the corners, "default" is 8px
|
|
29
|
-
roundness?: "default" | "large";
|
|
28
|
+
/** Sets the level of roundness of the corners, "default" is 8px, "large" is 16px and "small" is 4px */
|
|
29
|
+
roundness?: "default" | "large" | "small";
|
|
30
30
|
/**
|
|
31
31
|
* Set a percentage-based height for the whole Tile component, relative to its parent.
|
|
32
32
|
*/
|
|
@@ -27,6 +27,16 @@ const getBorderColor = borderVariant => {
|
|
|
27
27
|
return "var(--colorsUtilityMajor100)";
|
|
28
28
|
}
|
|
29
29
|
};
|
|
30
|
+
const getBorderRadius = roundness => {
|
|
31
|
+
switch (roundness) {
|
|
32
|
+
case "large":
|
|
33
|
+
return "var(--borderRadius200)";
|
|
34
|
+
case "small":
|
|
35
|
+
return "var(--borderRadius050)";
|
|
36
|
+
default:
|
|
37
|
+
return "var(--borderRadius100)";
|
|
38
|
+
}
|
|
39
|
+
};
|
|
30
40
|
const StyledTile = _styledComponents.default.div`
|
|
31
41
|
${({
|
|
32
42
|
borderVariant,
|
|
@@ -41,8 +51,18 @@ const StyledTile = _styledComponents.default.div`
|
|
|
41
51
|
|
|
42
52
|
box-sizing: border-box;
|
|
43
53
|
border: var(--${borderWidth}) solid ${getBorderColor(borderVariant)};
|
|
44
|
-
border-radius: ${roundness
|
|
45
|
-
|
|
54
|
+
border-radius: ${getBorderRadius(roundness)};
|
|
55
|
+
--tileBorderRadius: ${getBorderRadius(roundness)};
|
|
56
|
+
|
|
57
|
+
> *:first-child {
|
|
58
|
+
border-top-left-radius: calc(${getBorderRadius(roundness)} - 1px);
|
|
59
|
+
border-top-right-radius: calc(${getBorderRadius(roundness)} - 1px);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
> *:last-child {
|
|
63
|
+
border-bottom-left-radius: calc(${getBorderRadius(roundness)} - 1px);
|
|
64
|
+
border-bottom-right-radius: calc(${getBorderRadius(roundness)} - 1px);
|
|
65
|
+
}
|
|
46
66
|
|
|
47
67
|
${variant === "tile" && (0, _styledComponents.css)`
|
|
48
68
|
background-color: var(--colorsUtilityYang100);
|
|
@@ -57,6 +77,11 @@ const StyledTile = _styledComponents.default.div`
|
|
|
57
77
|
border-color: var(--colorsActionMajor500);
|
|
58
78
|
`}
|
|
59
79
|
|
|
80
|
+
${variant === "grey" && (0, _styledComponents.css)`
|
|
81
|
+
background-color: var(--colorsUtilityMajor025);
|
|
82
|
+
border-color: var(--colorsUtilityMajor200);
|
|
83
|
+
`}
|
|
84
|
+
|
|
60
85
|
display: flex;
|
|
61
86
|
flex-direction: ${isHorizontal ? "row" : "column"};
|
|
62
87
|
position: relative;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from "./useFocusPortalContent";
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
Object.defineProperty(exports, "default", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function () {
|
|
9
|
+
return _useFocusPortalContent.default;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
var _useFocusPortalContent = _interopRequireDefault(require("./useFocusPortalContent"));
|
|
13
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _react = require("react");
|
|
8
|
+
var _events = _interopRequireDefault(require("../../../__internal__/utils/helpers/events"));
|
|
9
|
+
var _focusTrapUtils = require("../../../__internal__/focus-trap/focus-trap-utils");
|
|
10
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
11
|
+
var _default = (container, target, focusCallback) => {
|
|
12
|
+
(0, _react.useEffect)(() => {
|
|
13
|
+
const handleFocusPortalContent = ev => {
|
|
14
|
+
if (container?.current && target?.current) {
|
|
15
|
+
const focusableElementsInContainer = Array.from(container.current?.querySelectorAll(_focusTrapUtils.defaultFocusableSelectors) || /* istanbul ignore next */[]);
|
|
16
|
+
if (target?.current === document.activeElement) {
|
|
17
|
+
if (_events.default.isTabKey(ev) && !_events.default.isShiftKey(ev) && focusableElementsInContainer[0]) {
|
|
18
|
+
ev.preventDefault();
|
|
19
|
+
focusableElementsInContainer[0]?.focus();
|
|
20
|
+
}
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/* istanbul ignore if */
|
|
25
|
+
if (!focusableElementsInContainer.length) {
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
const lastElementFocused = focusableElementsInContainer[focusableElementsInContainer.length - 1] === document.activeElement;
|
|
29
|
+
const firstElementFocused = focusableElementsInContainer[0] === document.activeElement;
|
|
30
|
+
if (_events.default.isTabKey(ev)) {
|
|
31
|
+
// last element focused inside portal navigate to next element in DOM after the target/ trigger element
|
|
32
|
+
if (lastElementFocused && !_events.default.isShiftKey(ev)) {
|
|
33
|
+
ev.preventDefault();
|
|
34
|
+
const allFocusableElements = Array.from(document.querySelectorAll(_focusTrapUtils.defaultFocusableSelectors) || /* istanbul ignore next */[]);
|
|
35
|
+
const filteredElements = allFocusableElements.filter(el => el === target.current || Number(el.tabIndex) !== -1);
|
|
36
|
+
const nextIndex = filteredElements.indexOf(target.current) + 1;
|
|
37
|
+
focusCallback?.(ev);
|
|
38
|
+
filteredElements[nextIndex]?.focus();
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
// first element focused inside portal navigate back to the target/ trigger element
|
|
42
|
+
if (firstElementFocused && _events.default.isShiftKey(ev)) {
|
|
43
|
+
ev.preventDefault();
|
|
44
|
+
focusCallback?.(ev);
|
|
45
|
+
|
|
46
|
+
/* istanbul ignore else */
|
|
47
|
+
if (target.current !== document.activeElement) {
|
|
48
|
+
target.current?.focus();
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
document.addEventListener("keydown", handleFocusPortalContent);
|
|
55
|
+
return () => {
|
|
56
|
+
document.removeEventListener("keydown", handleFocusPortalContent);
|
|
57
|
+
};
|
|
58
|
+
}, [target, container, focusCallback]);
|
|
59
|
+
};
|
|
60
|
+
exports.default = _default;
|