carbon-react 142.5.0 → 142.6.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/components/breadcrumbs/__internal__/breadcrumbs.context.d.ts +6 -0
- package/esm/components/breadcrumbs/__internal__/breadcrumbs.context.js +5 -0
- package/esm/components/breadcrumbs/breadcrumbs.component.d.ts +2 -0
- package/esm/components/breadcrumbs/breadcrumbs.component.js +9 -2
- package/esm/components/breadcrumbs/crumb/crumb.component.js +20 -9
- package/esm/components/breadcrumbs/crumb/crumb.style.d.ts +6 -8
- package/esm/components/breadcrumbs/crumb/crumb.style.js +19 -12
- package/esm/components/textarea/textarea.component.d.ts +2 -0
- package/esm/components/textarea/textarea.component.js +16 -11
- package/esm/components/textarea/textarea.style.d.ts +3 -2
- package/esm/components/textarea/textarea.style.js +4 -2
- package/lib/components/breadcrumbs/__internal__/breadcrumbs.context.d.ts +6 -0
- package/lib/components/breadcrumbs/__internal__/breadcrumbs.context.js +12 -0
- package/lib/components/breadcrumbs/breadcrumbs.component.d.ts +2 -0
- package/lib/components/breadcrumbs/breadcrumbs.component.js +9 -2
- package/lib/components/breadcrumbs/crumb/crumb.component.js +22 -9
- package/lib/components/breadcrumbs/crumb/crumb.style.d.ts +6 -8
- package/lib/components/breadcrumbs/crumb/crumb.style.js +19 -12
- package/lib/components/textarea/textarea.component.d.ts +2 -0
- package/lib/components/textarea/textarea.component.js +15 -10
- package/lib/components/textarea/textarea.style.d.ts +3 -2
- package/lib/components/textarea/textarea.style.js +5 -3
- package/package.json +1 -1
|
@@ -4,6 +4,8 @@ import { TagProps } from "../../__internal__/utils/helpers/tags";
|
|
|
4
4
|
export interface BreadcrumbsProps extends TagProps, SpaceProps {
|
|
5
5
|
/** Child crumbs to display */
|
|
6
6
|
children: React.ReactNode;
|
|
7
|
+
/** Sets the colour styling when component is rendered on a dark background */
|
|
8
|
+
isDarkBackground?: boolean;
|
|
7
9
|
}
|
|
8
10
|
export declare const Breadcrumbs: React.ForwardRefExoticComponent<BreadcrumbsProps & React.RefAttributes<HTMLElement>>;
|
|
9
11
|
export default Breadcrumbs;
|
|
@@ -4,17 +4,23 @@ import PropTypes from "prop-types";
|
|
|
4
4
|
import tagComponent from "../../__internal__/utils/helpers/tags";
|
|
5
5
|
import StyledBreadcrumbs from "./breadcrumbs.style";
|
|
6
6
|
import useLocale from "../../hooks/__internal__/useLocale";
|
|
7
|
+
import BreadcrumbsContext from "./__internal__/breadcrumbs.context";
|
|
7
8
|
const Breadcrumbs = /*#__PURE__*/React.forwardRef(({
|
|
8
9
|
children,
|
|
10
|
+
isDarkBackground = false,
|
|
9
11
|
...rest
|
|
10
12
|
}, ref) => {
|
|
11
13
|
const l = useLocale();
|
|
12
|
-
return /*#__PURE__*/React.createElement(
|
|
14
|
+
return /*#__PURE__*/React.createElement(BreadcrumbsContext.Provider, {
|
|
15
|
+
value: {
|
|
16
|
+
isDarkBackground
|
|
17
|
+
}
|
|
18
|
+
}, /*#__PURE__*/React.createElement(StyledBreadcrumbs, _extends({
|
|
13
19
|
ref: ref,
|
|
14
20
|
role: "navigation"
|
|
15
21
|
}, tagComponent("breadcrumbs", rest), {
|
|
16
22
|
"aria-label": l.breadcrumbs.ariaLabel()
|
|
17
|
-
}, rest), /*#__PURE__*/React.createElement("ol", null, children));
|
|
23
|
+
}, rest), /*#__PURE__*/React.createElement("ol", null, children)));
|
|
18
24
|
});
|
|
19
25
|
if (process.env.NODE_ENV !== "production") {
|
|
20
26
|
Breadcrumbs.propTypes = {
|
|
@@ -22,6 +28,7 @@ if (process.env.NODE_ENV !== "production") {
|
|
|
22
28
|
"data-component": PropTypes.string,
|
|
23
29
|
"data-element": PropTypes.string,
|
|
24
30
|
"data-role": PropTypes.string,
|
|
31
|
+
"isDarkBackground": PropTypes.bool,
|
|
25
32
|
"m": PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.oneOf([null]), PropTypes.number, PropTypes.shape({
|
|
26
33
|
"__@toStringTag": PropTypes.string.isRequired,
|
|
27
34
|
"description": PropTypes.string,
|
|
@@ -1,22 +1,33 @@
|
|
|
1
1
|
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
|
|
2
|
-
import React from "react";
|
|
2
|
+
import React, { useContext } from "react";
|
|
3
3
|
import PropTypes from "prop-types";
|
|
4
4
|
import tagComponent from "../../../__internal__/utils/helpers/tags";
|
|
5
5
|
import { StyledCrumb, Divider } from "./crumb.style";
|
|
6
|
+
import BreadcrumbsContext from "../__internal__/breadcrumbs.context";
|
|
6
7
|
const Crumb = /*#__PURE__*/React.forwardRef(({
|
|
7
8
|
href,
|
|
8
9
|
isCurrent,
|
|
9
10
|
children,
|
|
10
11
|
onClick,
|
|
11
12
|
...rest
|
|
12
|
-
}, ref) =>
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
13
|
+
}, ref) => {
|
|
14
|
+
const {
|
|
15
|
+
isDarkBackground
|
|
16
|
+
} = useContext(BreadcrumbsContext);
|
|
17
|
+
return /*#__PURE__*/React.createElement("li", null, /*#__PURE__*/React.createElement(StyledCrumb, _extends({
|
|
18
|
+
ref: ref,
|
|
19
|
+
isCurrent: isCurrent,
|
|
20
|
+
"aria-current": isCurrent ? "page" : undefined,
|
|
21
|
+
isDarkBackground: isDarkBackground
|
|
22
|
+
}, tagComponent("crumb", rest), rest, !isCurrent && {
|
|
23
|
+
href,
|
|
24
|
+
onClick
|
|
25
|
+
}), children), !isCurrent && /*#__PURE__*/React.createElement(Divider, {
|
|
26
|
+
"data-role": "crumb-divider",
|
|
27
|
+
"aria-hidden": "true",
|
|
28
|
+
isDarkBackground: isDarkBackground
|
|
29
|
+
}));
|
|
30
|
+
});
|
|
20
31
|
if (process.env.NODE_ENV !== "production") {
|
|
21
32
|
Crumb.propTypes = {
|
|
22
33
|
"aria-activedescendant": PropTypes.string,
|
|
@@ -2,17 +2,15 @@
|
|
|
2
2
|
import { LinkProps } from "../../link";
|
|
3
3
|
interface StyleCrumbProps extends LinkProps {
|
|
4
4
|
isCurrent?: boolean;
|
|
5
|
+
isDarkBackground: boolean;
|
|
5
6
|
}
|
|
6
7
|
export declare const StyledCrumb: import("styled-components").StyledComponent<import("react").ForwardRefExoticComponent<LinkProps & import("react").RefAttributes<HTMLButtonElement | HTMLLinkElement>>, any, StyleCrumbProps, never>;
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
interface DividerProps {
|
|
9
|
+
isDarkBackground: boolean;
|
|
10
|
+
}
|
|
11
|
+
export declare const Divider: import("styled-components").StyledComponent<"span", any, DividerProps, never>;
|
|
11
12
|
declare const _default: {
|
|
12
13
|
StyledCrumb: import("styled-components").StyledComponent<import("react").ForwardRefExoticComponent<LinkProps & import("react").RefAttributes<HTMLButtonElement | HTMLLinkElement>>, any, StyleCrumbProps, never>;
|
|
13
|
-
Divider: import("styled-components").StyledComponent<"span", any,
|
|
14
|
-
children: "/";
|
|
15
|
-
"aria-hidden": "true";
|
|
16
|
-
}, "aria-hidden" | "children">;
|
|
14
|
+
Divider: import("styled-components").StyledComponent<"span", any, DividerProps, never>;
|
|
17
15
|
};
|
|
18
16
|
export default _default;
|
|
@@ -1,31 +1,38 @@
|
|
|
1
1
|
import styled, { css } from "styled-components";
|
|
2
2
|
import Link from "../../link";
|
|
3
|
+
const getCurrentCrumbColor = isDarkBackground => {
|
|
4
|
+
return isDarkBackground ? "var(--colorsUtilityYang100)" : "var(--colorsUtilityYin090)";
|
|
5
|
+
};
|
|
3
6
|
export const StyledCrumb = styled(Link)`
|
|
4
7
|
font: var(--typographyLinkTextM);
|
|
5
8
|
${({
|
|
6
|
-
isCurrent
|
|
9
|
+
isCurrent,
|
|
10
|
+
isDarkBackground
|
|
7
11
|
}) => isCurrent && css`
|
|
8
12
|
a {
|
|
9
|
-
color:
|
|
13
|
+
color: ${getCurrentCrumbColor(isDarkBackground)};
|
|
10
14
|
text-decoration: none;
|
|
11
15
|
font: var(--typographyBreadcrumbCurrentPageM);
|
|
12
|
-
cursor: text;
|
|
13
16
|
:hover {
|
|
14
|
-
color:
|
|
17
|
+
color: ${getCurrentCrumbColor(isDarkBackground)};
|
|
15
18
|
text-decoration: none;
|
|
16
19
|
cursor: text;
|
|
17
20
|
}
|
|
18
21
|
}
|
|
19
22
|
`}
|
|
20
23
|
`;
|
|
21
|
-
export const Divider = styled.span
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
24
|
+
export const Divider = styled.span`
|
|
25
|
+
::after {
|
|
26
|
+
content: "/";
|
|
27
|
+
margin: 0px var(--spacing050) 0px var(--spacing100);
|
|
28
|
+
line-height: 16px;
|
|
29
|
+
font: var(--typographyBreadcrumbSeparatorM);
|
|
30
|
+
${({
|
|
31
|
+
isDarkBackground
|
|
32
|
+
}) => css`
|
|
33
|
+
color: ${isDarkBackground ? "var(--colorsUtilityYang100)" : "var(--colorsUtilityYin055)"};
|
|
34
|
+
`}
|
|
35
|
+
}
|
|
29
36
|
`;
|
|
30
37
|
export default {
|
|
31
38
|
StyledCrumb,
|
|
@@ -102,6 +102,8 @@ export interface TextareaProps extends ValidationProps, MarginProps, Omit<Common
|
|
|
102
102
|
borderRadius?: BorderRadiusType | BorderRadiusType[];
|
|
103
103
|
/** Hides the borders for the component. Please note that validation and focus styling will still be applied */
|
|
104
104
|
hideBorders?: boolean;
|
|
105
|
+
/** Specify the minimum height */
|
|
106
|
+
minHeight?: number;
|
|
105
107
|
}
|
|
106
108
|
export declare const Textarea: React.ForwardRefExoticComponent<TextareaProps & React.RefAttributes<HTMLTextAreaElement>>;
|
|
107
109
|
export { Textarea as OriginalTextarea };
|
|
@@ -8,7 +8,7 @@ import Input from "../../__internal__/input/input.component";
|
|
|
8
8
|
import { InputBehaviour } from "../../__internal__/input-behaviour";
|
|
9
9
|
import InputIconToggle from "../../__internal__/input-icon-toggle";
|
|
10
10
|
import guid from "../../__internal__/utils/helpers/guid";
|
|
11
|
-
import StyledTextarea, {
|
|
11
|
+
import StyledTextarea, { DEFAULT_MIN_HEIGHT } from "./textarea.style";
|
|
12
12
|
import { TooltipProvider } from "../../__internal__/tooltip-provider";
|
|
13
13
|
import useInputAccessibility from "../../hooks/__internal__/useInputAccessibility";
|
|
14
14
|
import NewValidationContext from "../carbon-provider/__internal__/new-validation.context";
|
|
@@ -60,11 +60,13 @@ const Textarea = /*#__PURE__*/React.forwardRef(({
|
|
|
60
60
|
hideBorders = false,
|
|
61
61
|
required,
|
|
62
62
|
isOptional,
|
|
63
|
+
minHeight = DEFAULT_MIN_HEIGHT,
|
|
63
64
|
...rest
|
|
64
65
|
}, ref) => {
|
|
65
66
|
const {
|
|
66
67
|
validationRedesignOptIn
|
|
67
68
|
} = useContext(NewValidationContext);
|
|
69
|
+
const [textareaMinHeight, setTextareaMinHeight] = useState(DEFAULT_MIN_HEIGHT);
|
|
68
70
|
const computeLabelPropValues = prop => validationRedesignOptIn ? undefined : prop;
|
|
69
71
|
const {
|
|
70
72
|
current: id
|
|
@@ -105,10 +107,9 @@ const Textarea = /*#__PURE__*/React.forwardRef(({
|
|
|
105
107
|
console.warn("The `borderRadius` prop in `Textarea` component only supports up to 4 values.");
|
|
106
108
|
warnBorderRadiusArrayTooLarge = true;
|
|
107
109
|
}
|
|
108
|
-
const
|
|
109
|
-
const expandTextarea = () => {
|
|
110
|
+
const expandTextarea = useCallback(() => {
|
|
110
111
|
const textarea = internalRef.current;
|
|
111
|
-
if (textarea?.scrollHeight && textarea?.scrollHeight >
|
|
112
|
+
if (textarea?.scrollHeight && textarea?.scrollHeight > textareaMinHeight) {
|
|
112
113
|
// need to reset scroll position of the nearest parent which scrolls
|
|
113
114
|
let scrollElement = textarea;
|
|
114
115
|
while (scrollElement && !scrollElement?.scrollTop) {
|
|
@@ -117,12 +118,12 @@ const Textarea = /*#__PURE__*/React.forwardRef(({
|
|
|
117
118
|
const scrollPosition = scrollElement?.scrollTop;
|
|
118
119
|
textarea.style.height = "0px";
|
|
119
120
|
// Set the height so all content is shown
|
|
120
|
-
textarea.style.height = `${Math.max(textarea.scrollHeight,
|
|
121
|
+
textarea.style.height = `${Math.max(textarea.scrollHeight, textareaMinHeight)}px`;
|
|
121
122
|
if (scrollElement && scrollPosition) {
|
|
122
123
|
scrollElement.scrollTop = scrollPosition;
|
|
123
124
|
}
|
|
124
125
|
}
|
|
125
|
-
};
|
|
126
|
+
}, [textareaMinHeight]);
|
|
126
127
|
const {
|
|
127
128
|
labelId,
|
|
128
129
|
validationId,
|
|
@@ -140,9 +141,11 @@ const Textarea = /*#__PURE__*/React.forwardRef(({
|
|
|
140
141
|
const [characterCount, visuallyHiddenHintId] = useCharacterCount(value, characterLimit, characterCountAriaLive);
|
|
141
142
|
useEffect(() => {
|
|
142
143
|
if (rows) {
|
|
143
|
-
|
|
144
|
+
setTextareaMinHeight(internalRef?.current?.scrollHeight || 0);
|
|
145
|
+
} else {
|
|
146
|
+
setTextareaMinHeight(minHeight > DEFAULT_MIN_HEIGHT ? minHeight : DEFAULT_MIN_HEIGHT);
|
|
144
147
|
}
|
|
145
|
-
}, [rows]);
|
|
148
|
+
}, [minHeight, rows]);
|
|
146
149
|
useEffect(() => {
|
|
147
150
|
if (expandable) {
|
|
148
151
|
expandTextarea();
|
|
@@ -151,7 +154,7 @@ const Textarea = /*#__PURE__*/React.forwardRef(({
|
|
|
151
154
|
useEffect(() => {
|
|
152
155
|
if (expandable) {
|
|
153
156
|
window.addEventListener("resize", expandTextarea);
|
|
154
|
-
|
|
157
|
+
setTextareaMinHeight(internalRef?.current?.clientHeight || 0);
|
|
155
158
|
// need to also run expandTextarea when the Sage UI font completes loading, to prevent strange scroll
|
|
156
159
|
// behaviour when it only loads after the component is rendered
|
|
157
160
|
document.fonts?.addEventListener("loadingdone", expandTextarea);
|
|
@@ -162,7 +165,7 @@ const Textarea = /*#__PURE__*/React.forwardRef(({
|
|
|
162
165
|
document.fonts?.removeEventListener("loadingdone", expandTextarea);
|
|
163
166
|
}
|
|
164
167
|
};
|
|
165
|
-
}, [expandable]);
|
|
168
|
+
}, [expandTextarea, expandable]);
|
|
166
169
|
const hasIconInside = !!(inputIcon || validationId && !validationOnLabel);
|
|
167
170
|
const hintId = useRef(guid());
|
|
168
171
|
const inputHintId = inputHint ? hintId.current : undefined;
|
|
@@ -216,7 +219,8 @@ const Textarea = /*#__PURE__*/React.forwardRef(({
|
|
|
216
219
|
"data-component": dataComponent,
|
|
217
220
|
"data-role": dataRole,
|
|
218
221
|
"data-element": dataElement,
|
|
219
|
-
hasIcon: hasIconInside
|
|
222
|
+
hasIcon: hasIconInside,
|
|
223
|
+
minHeight: textareaMinHeight
|
|
220
224
|
}, marginProps), /*#__PURE__*/React.createElement(FormField, {
|
|
221
225
|
fieldHelp: computeLabelPropValues(fieldHelp),
|
|
222
226
|
fieldHelpId: fieldHelpId,
|
|
@@ -475,6 +479,7 @@ if (process.env.NODE_ENV !== "production") {
|
|
|
475
479
|
"valueOf": PropTypes.func.isRequired
|
|
476
480
|
}), PropTypes.string]),
|
|
477
481
|
"min": PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
|
|
482
|
+
"minHeight": PropTypes.number,
|
|
478
483
|
"minLength": PropTypes.number,
|
|
479
484
|
"ml": PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.oneOf([null]), PropTypes.number, PropTypes.shape({
|
|
480
485
|
"__@toStringTag": PropTypes.string.isRequired,
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
export
|
|
1
|
+
import { TextareaProps } from "./textarea.component";
|
|
2
|
+
export declare const DEFAULT_MIN_HEIGHT = 64;
|
|
3
|
+
export interface StyledTextAreaProps extends Pick<TextareaProps, "minHeight"> {
|
|
3
4
|
/** When true, label is placed in line an input */
|
|
4
5
|
labelInline?: boolean;
|
|
5
6
|
/** When true, adjusts padding for icon */
|
|
@@ -4,14 +4,16 @@ import StyledInput from "../../__internal__/input/input.style";
|
|
|
4
4
|
import { StyledLabelContainer } from "../../__internal__/label/label.style";
|
|
5
5
|
import InputIconToggleStyle from "../../__internal__/input-icon-toggle/input-icon-toggle.style";
|
|
6
6
|
import BaseTheme from "../../style/themes/base";
|
|
7
|
-
export const
|
|
7
|
+
export const DEFAULT_MIN_HEIGHT = 64;
|
|
8
8
|
const StyledTextarea = styled.div`
|
|
9
9
|
${margin};
|
|
10
10
|
|
|
11
11
|
${StyledInput} {
|
|
12
12
|
box-sizing: border-box;
|
|
13
13
|
resize: none;
|
|
14
|
-
|
|
14
|
+
${({
|
|
15
|
+
minHeight
|
|
16
|
+
}) => `min-height: ${minHeight || DEFAULT_MIN_HEIGHT}px;`}
|
|
15
17
|
padding: var(--spacing150) var(--spacing200);
|
|
16
18
|
|
|
17
19
|
${({
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _react = _interopRequireDefault(require("react"));
|
|
8
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
9
|
+
const BreadcrumbsContext = /*#__PURE__*/_react.default.createContext({
|
|
10
|
+
isDarkBackground: false
|
|
11
|
+
});
|
|
12
|
+
var _default = exports.default = BreadcrumbsContext;
|
|
@@ -4,6 +4,8 @@ import { TagProps } from "../../__internal__/utils/helpers/tags";
|
|
|
4
4
|
export interface BreadcrumbsProps extends TagProps, SpaceProps {
|
|
5
5
|
/** Child crumbs to display */
|
|
6
6
|
children: React.ReactNode;
|
|
7
|
+
/** Sets the colour styling when component is rendered on a dark background */
|
|
8
|
+
isDarkBackground?: boolean;
|
|
7
9
|
}
|
|
8
10
|
export declare const Breadcrumbs: React.ForwardRefExoticComponent<BreadcrumbsProps & React.RefAttributes<HTMLElement>>;
|
|
9
11
|
export default Breadcrumbs;
|
|
@@ -9,19 +9,25 @@ var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
|
9
9
|
var _tags = _interopRequireDefault(require("../../__internal__/utils/helpers/tags"));
|
|
10
10
|
var _breadcrumbs = _interopRequireDefault(require("./breadcrumbs.style"));
|
|
11
11
|
var _useLocale = _interopRequireDefault(require("../../hooks/__internal__/useLocale"));
|
|
12
|
+
var _breadcrumbs2 = _interopRequireDefault(require("./__internal__/breadcrumbs.context"));
|
|
12
13
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
13
14
|
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
|
|
14
15
|
const Breadcrumbs = exports.Breadcrumbs = /*#__PURE__*/_react.default.forwardRef(({
|
|
15
16
|
children,
|
|
17
|
+
isDarkBackground = false,
|
|
16
18
|
...rest
|
|
17
19
|
}, ref) => {
|
|
18
20
|
const l = (0, _useLocale.default)();
|
|
19
|
-
return /*#__PURE__*/_react.default.createElement(
|
|
21
|
+
return /*#__PURE__*/_react.default.createElement(_breadcrumbs2.default.Provider, {
|
|
22
|
+
value: {
|
|
23
|
+
isDarkBackground
|
|
24
|
+
}
|
|
25
|
+
}, /*#__PURE__*/_react.default.createElement(_breadcrumbs.default, _extends({
|
|
20
26
|
ref: ref,
|
|
21
27
|
role: "navigation"
|
|
22
28
|
}, (0, _tags.default)("breadcrumbs", rest), {
|
|
23
29
|
"aria-label": l.breadcrumbs.ariaLabel()
|
|
24
|
-
}, rest), /*#__PURE__*/_react.default.createElement("ol", null, children));
|
|
30
|
+
}, rest), /*#__PURE__*/_react.default.createElement("ol", null, children)));
|
|
25
31
|
});
|
|
26
32
|
if (process.env.NODE_ENV !== "production") {
|
|
27
33
|
Breadcrumbs.propTypes = {
|
|
@@ -29,6 +35,7 @@ if (process.env.NODE_ENV !== "production") {
|
|
|
29
35
|
"data-component": _propTypes.default.string,
|
|
30
36
|
"data-element": _propTypes.default.string,
|
|
31
37
|
"data-role": _propTypes.default.string,
|
|
38
|
+
"isDarkBackground": _propTypes.default.bool,
|
|
32
39
|
"m": _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.oneOf([null]), _propTypes.default.number, _propTypes.default.shape({
|
|
33
40
|
"__@toStringTag": _propTypes.default.string.isRequired,
|
|
34
41
|
"description": _propTypes.default.string,
|
|
@@ -4,11 +4,14 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
-
var _react =
|
|
7
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
8
8
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
9
9
|
var _tags = _interopRequireDefault(require("../../../__internal__/utils/helpers/tags"));
|
|
10
10
|
var _crumb = require("./crumb.style");
|
|
11
|
+
var _breadcrumbs = _interopRequireDefault(require("../__internal__/breadcrumbs.context"));
|
|
11
12
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
13
|
+
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); }
|
|
14
|
+
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 && {}.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
15
|
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
|
|
13
16
|
const Crumb = /*#__PURE__*/_react.default.forwardRef(({
|
|
14
17
|
href,
|
|
@@ -16,14 +19,24 @@ const Crumb = /*#__PURE__*/_react.default.forwardRef(({
|
|
|
16
19
|
children,
|
|
17
20
|
onClick,
|
|
18
21
|
...rest
|
|
19
|
-
}, ref) =>
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
22
|
+
}, ref) => {
|
|
23
|
+
const {
|
|
24
|
+
isDarkBackground
|
|
25
|
+
} = (0, _react.useContext)(_breadcrumbs.default);
|
|
26
|
+
return /*#__PURE__*/_react.default.createElement("li", null, /*#__PURE__*/_react.default.createElement(_crumb.StyledCrumb, _extends({
|
|
27
|
+
ref: ref,
|
|
28
|
+
isCurrent: isCurrent,
|
|
29
|
+
"aria-current": isCurrent ? "page" : undefined,
|
|
30
|
+
isDarkBackground: isDarkBackground
|
|
31
|
+
}, (0, _tags.default)("crumb", rest), rest, !isCurrent && {
|
|
32
|
+
href,
|
|
33
|
+
onClick
|
|
34
|
+
}), children), !isCurrent && /*#__PURE__*/_react.default.createElement(_crumb.Divider, {
|
|
35
|
+
"data-role": "crumb-divider",
|
|
36
|
+
"aria-hidden": "true",
|
|
37
|
+
isDarkBackground: isDarkBackground
|
|
38
|
+
}));
|
|
39
|
+
});
|
|
27
40
|
if (process.env.NODE_ENV !== "production") {
|
|
28
41
|
Crumb.propTypes = {
|
|
29
42
|
"aria-activedescendant": _propTypes.default.string,
|
|
@@ -2,17 +2,15 @@
|
|
|
2
2
|
import { LinkProps } from "../../link";
|
|
3
3
|
interface StyleCrumbProps extends LinkProps {
|
|
4
4
|
isCurrent?: boolean;
|
|
5
|
+
isDarkBackground: boolean;
|
|
5
6
|
}
|
|
6
7
|
export declare const StyledCrumb: import("styled-components").StyledComponent<import("react").ForwardRefExoticComponent<LinkProps & import("react").RefAttributes<HTMLButtonElement | HTMLLinkElement>>, any, StyleCrumbProps, never>;
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
interface DividerProps {
|
|
9
|
+
isDarkBackground: boolean;
|
|
10
|
+
}
|
|
11
|
+
export declare const Divider: import("styled-components").StyledComponent<"span", any, DividerProps, never>;
|
|
11
12
|
declare const _default: {
|
|
12
13
|
StyledCrumb: import("styled-components").StyledComponent<import("react").ForwardRefExoticComponent<LinkProps & import("react").RefAttributes<HTMLButtonElement | HTMLLinkElement>>, any, StyleCrumbProps, never>;
|
|
13
|
-
Divider: import("styled-components").StyledComponent<"span", any,
|
|
14
|
-
children: "/";
|
|
15
|
-
"aria-hidden": "true";
|
|
16
|
-
}, "aria-hidden" | "children">;
|
|
14
|
+
Divider: import("styled-components").StyledComponent<"span", any, DividerProps, never>;
|
|
17
15
|
};
|
|
18
16
|
export default _default;
|
|
@@ -9,32 +9,39 @@ var _link = _interopRequireDefault(require("../../link"));
|
|
|
9
9
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
10
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
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 && {}.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 getCurrentCrumbColor = isDarkBackground => {
|
|
13
|
+
return isDarkBackground ? "var(--colorsUtilityYang100)" : "var(--colorsUtilityYin090)";
|
|
14
|
+
};
|
|
12
15
|
const StyledCrumb = exports.StyledCrumb = (0, _styledComponents.default)(_link.default)`
|
|
13
16
|
font: var(--typographyLinkTextM);
|
|
14
17
|
${({
|
|
15
|
-
isCurrent
|
|
18
|
+
isCurrent,
|
|
19
|
+
isDarkBackground
|
|
16
20
|
}) => isCurrent && (0, _styledComponents.css)`
|
|
17
21
|
a {
|
|
18
|
-
color:
|
|
22
|
+
color: ${getCurrentCrumbColor(isDarkBackground)};
|
|
19
23
|
text-decoration: none;
|
|
20
24
|
font: var(--typographyBreadcrumbCurrentPageM);
|
|
21
|
-
cursor: text;
|
|
22
25
|
:hover {
|
|
23
|
-
color:
|
|
26
|
+
color: ${getCurrentCrumbColor(isDarkBackground)};
|
|
24
27
|
text-decoration: none;
|
|
25
28
|
cursor: text;
|
|
26
29
|
}
|
|
27
30
|
}
|
|
28
31
|
`}
|
|
29
32
|
`;
|
|
30
|
-
const Divider = exports.Divider = _styledComponents.default.span
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
33
|
+
const Divider = exports.Divider = _styledComponents.default.span`
|
|
34
|
+
::after {
|
|
35
|
+
content: "/";
|
|
36
|
+
margin: 0px var(--spacing050) 0px var(--spacing100);
|
|
37
|
+
line-height: 16px;
|
|
38
|
+
font: var(--typographyBreadcrumbSeparatorM);
|
|
39
|
+
${({
|
|
40
|
+
isDarkBackground
|
|
41
|
+
}) => (0, _styledComponents.css)`
|
|
42
|
+
color: ${isDarkBackground ? "var(--colorsUtilityYang100)" : "var(--colorsUtilityYin055)"};
|
|
43
|
+
`}
|
|
44
|
+
}
|
|
38
45
|
`;
|
|
39
46
|
var _default = exports.default = {
|
|
40
47
|
StyledCrumb,
|
|
@@ -102,6 +102,8 @@ export interface TextareaProps extends ValidationProps, MarginProps, Omit<Common
|
|
|
102
102
|
borderRadius?: BorderRadiusType | BorderRadiusType[];
|
|
103
103
|
/** Hides the borders for the component. Please note that validation and focus styling will still be applied */
|
|
104
104
|
hideBorders?: boolean;
|
|
105
|
+
/** Specify the minimum height */
|
|
106
|
+
minHeight?: number;
|
|
105
107
|
}
|
|
106
108
|
export declare const Textarea: React.ForwardRefExoticComponent<TextareaProps & React.RefAttributes<HTMLTextAreaElement>>;
|
|
107
109
|
export { Textarea as OriginalTextarea };
|
|
@@ -69,11 +69,13 @@ const Textarea = exports.OriginalTextarea = exports.Textarea = /*#__PURE__*/_rea
|
|
|
69
69
|
hideBorders = false,
|
|
70
70
|
required,
|
|
71
71
|
isOptional,
|
|
72
|
+
minHeight = _textarea.DEFAULT_MIN_HEIGHT,
|
|
72
73
|
...rest
|
|
73
74
|
}, ref) => {
|
|
74
75
|
const {
|
|
75
76
|
validationRedesignOptIn
|
|
76
77
|
} = (0, _react.useContext)(_newValidation.default);
|
|
78
|
+
const [textareaMinHeight, setTextareaMinHeight] = (0, _react.useState)(_textarea.DEFAULT_MIN_HEIGHT);
|
|
77
79
|
const computeLabelPropValues = prop => validationRedesignOptIn ? undefined : prop;
|
|
78
80
|
const {
|
|
79
81
|
current: id
|
|
@@ -114,10 +116,9 @@ const Textarea = exports.OriginalTextarea = exports.Textarea = /*#__PURE__*/_rea
|
|
|
114
116
|
console.warn("The `borderRadius` prop in `Textarea` component only supports up to 4 values.");
|
|
115
117
|
warnBorderRadiusArrayTooLarge = true;
|
|
116
118
|
}
|
|
117
|
-
const
|
|
118
|
-
const expandTextarea = () => {
|
|
119
|
+
const expandTextarea = (0, _react.useCallback)(() => {
|
|
119
120
|
const textarea = internalRef.current;
|
|
120
|
-
if (textarea?.scrollHeight && textarea?.scrollHeight >
|
|
121
|
+
if (textarea?.scrollHeight && textarea?.scrollHeight > textareaMinHeight) {
|
|
121
122
|
// need to reset scroll position of the nearest parent which scrolls
|
|
122
123
|
let scrollElement = textarea;
|
|
123
124
|
while (scrollElement && !scrollElement?.scrollTop) {
|
|
@@ -126,12 +127,12 @@ const Textarea = exports.OriginalTextarea = exports.Textarea = /*#__PURE__*/_rea
|
|
|
126
127
|
const scrollPosition = scrollElement?.scrollTop;
|
|
127
128
|
textarea.style.height = "0px";
|
|
128
129
|
// Set the height so all content is shown
|
|
129
|
-
textarea.style.height = `${Math.max(textarea.scrollHeight,
|
|
130
|
+
textarea.style.height = `${Math.max(textarea.scrollHeight, textareaMinHeight)}px`;
|
|
130
131
|
if (scrollElement && scrollPosition) {
|
|
131
132
|
scrollElement.scrollTop = scrollPosition;
|
|
132
133
|
}
|
|
133
134
|
}
|
|
134
|
-
};
|
|
135
|
+
}, [textareaMinHeight]);
|
|
135
136
|
const {
|
|
136
137
|
labelId,
|
|
137
138
|
validationId,
|
|
@@ -149,9 +150,11 @@ const Textarea = exports.OriginalTextarea = exports.Textarea = /*#__PURE__*/_rea
|
|
|
149
150
|
const [characterCount, visuallyHiddenHintId] = (0, _useCharacterCount.default)(value, characterLimit, characterCountAriaLive);
|
|
150
151
|
(0, _react.useEffect)(() => {
|
|
151
152
|
if (rows) {
|
|
152
|
-
|
|
153
|
+
setTextareaMinHeight(internalRef?.current?.scrollHeight || 0);
|
|
154
|
+
} else {
|
|
155
|
+
setTextareaMinHeight(minHeight > _textarea.DEFAULT_MIN_HEIGHT ? minHeight : _textarea.DEFAULT_MIN_HEIGHT);
|
|
153
156
|
}
|
|
154
|
-
}, [rows]);
|
|
157
|
+
}, [minHeight, rows]);
|
|
155
158
|
(0, _react.useEffect)(() => {
|
|
156
159
|
if (expandable) {
|
|
157
160
|
expandTextarea();
|
|
@@ -160,7 +163,7 @@ const Textarea = exports.OriginalTextarea = exports.Textarea = /*#__PURE__*/_rea
|
|
|
160
163
|
(0, _react.useEffect)(() => {
|
|
161
164
|
if (expandable) {
|
|
162
165
|
window.addEventListener("resize", expandTextarea);
|
|
163
|
-
|
|
166
|
+
setTextareaMinHeight(internalRef?.current?.clientHeight || 0);
|
|
164
167
|
// need to also run expandTextarea when the Sage UI font completes loading, to prevent strange scroll
|
|
165
168
|
// behaviour when it only loads after the component is rendered
|
|
166
169
|
document.fonts?.addEventListener("loadingdone", expandTextarea);
|
|
@@ -171,7 +174,7 @@ const Textarea = exports.OriginalTextarea = exports.Textarea = /*#__PURE__*/_rea
|
|
|
171
174
|
document.fonts?.removeEventListener("loadingdone", expandTextarea);
|
|
172
175
|
}
|
|
173
176
|
};
|
|
174
|
-
}, [expandable]);
|
|
177
|
+
}, [expandTextarea, expandable]);
|
|
175
178
|
const hasIconInside = !!(inputIcon || validationId && !validationOnLabel);
|
|
176
179
|
const hintId = (0, _react.useRef)((0, _guid.default)());
|
|
177
180
|
const inputHintId = inputHint ? hintId.current : undefined;
|
|
@@ -225,7 +228,8 @@ const Textarea = exports.OriginalTextarea = exports.Textarea = /*#__PURE__*/_rea
|
|
|
225
228
|
"data-component": dataComponent,
|
|
226
229
|
"data-role": dataRole,
|
|
227
230
|
"data-element": dataElement,
|
|
228
|
-
hasIcon: hasIconInside
|
|
231
|
+
hasIcon: hasIconInside,
|
|
232
|
+
minHeight: textareaMinHeight
|
|
229
233
|
}, marginProps), /*#__PURE__*/_react.default.createElement(_formField.default, {
|
|
230
234
|
fieldHelp: computeLabelPropValues(fieldHelp),
|
|
231
235
|
fieldHelpId: fieldHelpId,
|
|
@@ -484,6 +488,7 @@ if (process.env.NODE_ENV !== "production") {
|
|
|
484
488
|
"valueOf": _propTypes.default.func.isRequired
|
|
485
489
|
}), _propTypes.default.string]),
|
|
486
490
|
"min": _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string]),
|
|
491
|
+
"minHeight": _propTypes.default.number,
|
|
487
492
|
"minLength": _propTypes.default.number,
|
|
488
493
|
"ml": _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.oneOf([null]), _propTypes.default.number, _propTypes.default.shape({
|
|
489
494
|
"__@toStringTag": _propTypes.default.string.isRequired,
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
export
|
|
1
|
+
import { TextareaProps } from "./textarea.component";
|
|
2
|
+
export declare const DEFAULT_MIN_HEIGHT = 64;
|
|
3
|
+
export interface StyledTextAreaProps extends Pick<TextareaProps, "minHeight"> {
|
|
3
4
|
/** When true, label is placed in line an input */
|
|
4
5
|
labelInline?: boolean;
|
|
5
6
|
/** When true, adjusts padding for icon */
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.default = exports.
|
|
6
|
+
exports.default = exports.DEFAULT_MIN_HEIGHT = void 0;
|
|
7
7
|
var _styledComponents = _interopRequireWildcard(require("styled-components"));
|
|
8
8
|
var _styledSystem = require("styled-system");
|
|
9
9
|
var _input = _interopRequireDefault(require("../../__internal__/input/input.style"));
|
|
@@ -13,14 +13,16 @@ var _base = _interopRequireDefault(require("../../style/themes/base"));
|
|
|
13
13
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
14
14
|
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); }
|
|
15
15
|
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 && {}.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; }
|
|
16
|
-
const
|
|
16
|
+
const DEFAULT_MIN_HEIGHT = exports.DEFAULT_MIN_HEIGHT = 64;
|
|
17
17
|
const StyledTextarea = _styledComponents.default.div`
|
|
18
18
|
${_styledSystem.margin};
|
|
19
19
|
|
|
20
20
|
${_input.default} {
|
|
21
21
|
box-sizing: border-box;
|
|
22
22
|
resize: none;
|
|
23
|
-
|
|
23
|
+
${({
|
|
24
|
+
minHeight
|
|
25
|
+
}) => `min-height: ${minHeight || DEFAULT_MIN_HEIGHT}px;`}
|
|
24
26
|
padding: var(--spacing150) var(--spacing200);
|
|
25
27
|
|
|
26
28
|
${({
|