@carbon/react 1.37.0 → 1.38.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/.playwright/INTERNAL_AVT_REPORT_DO_NOT_USE.json +924 -660
- package/es/components/DataTable/DataTable.js +1 -1
- package/es/components/DataTable/Table.js +21 -1
- package/es/components/Grid/CSSGrid.js +1 -1
- package/es/components/Grid/ColumnHang.js +1 -1
- package/es/components/Grid/GridContext.d.ts +2 -2
- package/es/components/Grid/GridContext.js +1 -1
- package/es/components/Heading/index.d.ts +5 -40
- package/es/components/Heading/index.js +11 -6
- package/es/components/Icon/Icon.Skeleton.d.ts +25 -0
- package/es/components/Icon/Icon.Skeleton.js +1 -4
- package/es/components/Icon/index.d.ts +7 -0
- package/es/components/IconButton/index.js +9 -1
- package/es/components/Layer/index.js +5 -3
- package/es/components/ListBox/ListBoxMenuItem.js +2 -1
- package/es/components/Menu/Menu.js +14 -2
- package/es/components/Menu/MenuItem.js +28 -7
- package/es/components/MenuButton/index.js +1 -1
- package/es/components/MultiSelect/FilterableMultiSelect.js +6 -6
- package/es/components/MultiSelect/MultiSelect.js +6 -0
- package/es/components/Notification/Notification.js +4 -2
- package/es/components/Slider/Slider.d.ts +1 -0
- package/es/components/Slider/Slider.js +16 -5
- package/es/components/Tabs/Tabs.js +6 -8
- package/es/components/Tag/Tag.Skeleton.js +6 -3
- package/es/components/Tag/Tag.js +2 -2
- package/es/components/Text/Text.js +1 -1
- package/es/components/TextInput/PasswordInput.js +3 -1
- package/es/components/Theme/index.d.ts +3 -15
- package/es/components/Theme/index.js +6 -3
- package/es/components/TreeView/TreeNode.js +2 -2
- package/es/components/UIShell/HeaderMenu.js +11 -11
- package/es/components/UIShell/HeaderMenuItem.d.ts +9 -5
- package/es/components/UIShell/HeaderMenuItem.js +2 -3
- package/lib/components/DataTable/DataTable.js +1 -1
- package/lib/components/DataTable/Table.js +20 -0
- package/lib/components/Grid/CSSGrid.js +1 -1
- package/lib/components/Grid/ColumnHang.js +1 -1
- package/lib/components/Grid/GridContext.d.ts +2 -2
- package/lib/components/Grid/GridContext.js +1 -1
- package/lib/components/Heading/index.d.ts +5 -40
- package/lib/components/Heading/index.js +11 -6
- package/lib/components/Icon/Icon.Skeleton.d.ts +25 -0
- package/lib/components/Icon/Icon.Skeleton.js +1 -4
- package/lib/components/Icon/index.d.ts +7 -0
- package/lib/components/IconButton/index.js +9 -1
- package/lib/components/Layer/index.js +5 -3
- package/lib/components/ListBox/ListBoxMenuItem.js +2 -1
- package/lib/components/Menu/Menu.js +14 -2
- package/lib/components/Menu/MenuItem.js +30 -9
- package/lib/components/MenuButton/index.js +1 -1
- package/lib/components/MultiSelect/FilterableMultiSelect.js +5 -5
- package/lib/components/MultiSelect/MultiSelect.js +6 -0
- package/lib/components/Notification/Notification.js +4 -2
- package/lib/components/Slider/Slider.d.ts +1 -0
- package/lib/components/Slider/Slider.js +16 -5
- package/lib/components/Tabs/Tabs.js +6 -8
- package/lib/components/Tag/Tag.Skeleton.js +6 -3
- package/lib/components/Tag/Tag.js +2 -2
- package/lib/components/Text/Text.js +1 -1
- package/lib/components/TextInput/PasswordInput.js +3 -1
- package/lib/components/Theme/index.d.ts +3 -15
- package/lib/components/Theme/index.js +6 -3
- package/lib/components/TreeView/TreeNode.js +2 -2
- package/lib/components/UIShell/HeaderMenu.js +11 -11
- package/lib/components/UIShell/HeaderMenuItem.d.ts +9 -5
- package/lib/components/UIShell/HeaderMenuItem.js +2 -3
- package/package.json +5 -5
package/es/components/Tag/Tag.js
CHANGED
|
@@ -37,7 +37,7 @@ const Tag = _ref => {
|
|
|
37
37
|
type,
|
|
38
38
|
filter,
|
|
39
39
|
renderIcon: CustomIconElement,
|
|
40
|
-
title,
|
|
40
|
+
title = 'Clear filter',
|
|
41
41
|
disabled,
|
|
42
42
|
onClose,
|
|
43
43
|
size,
|
|
@@ -75,7 +75,7 @@ const Tag = _ref => {
|
|
|
75
75
|
className: `${prefix}--tag__close-icon`,
|
|
76
76
|
onClick: handleClose,
|
|
77
77
|
disabled: disabled,
|
|
78
|
-
"aria-
|
|
78
|
+
"aria-label": title,
|
|
79
79
|
title: title
|
|
80
80
|
}, _Close || (_Close = /*#__PURE__*/React__default.createElement(Close, null))));
|
|
81
81
|
}
|
|
@@ -66,7 +66,9 @@ const PasswordInput = /*#__PURE__*/React__default.forwardRef(function PasswordIn
|
|
|
66
66
|
[`${prefix}--text-input--light`]: light,
|
|
67
67
|
[`${prefix}--text-input--invalid`]: normalizedProps.invalid,
|
|
68
68
|
[`${prefix}--text-input--warning`]: normalizedProps.warn,
|
|
69
|
-
[`${prefix}--text-input--${size}`]: size
|
|
69
|
+
[`${prefix}--text-input--${size}`]: size,
|
|
70
|
+
// TODO: V12 - Remove this class
|
|
71
|
+
[`${prefix}--layout--size-${size}`]: size
|
|
70
72
|
});
|
|
71
73
|
const sharedTextInputProps = {
|
|
72
74
|
id,
|
|
@@ -5,26 +5,14 @@
|
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*/
|
|
7
7
|
import PropTypes from 'prop-types';
|
|
8
|
-
import React, { ElementType
|
|
8
|
+
import React, { ElementType } from 'react';
|
|
9
9
|
import { PolymorphicProps } from '../../types/common';
|
|
10
10
|
interface GlobalThemeProps {
|
|
11
11
|
theme?: 'white' | 'g10' | 'g90' | 'g100';
|
|
12
|
+
children?: React.ReactNode;
|
|
12
13
|
}
|
|
13
14
|
export declare const ThemeContext: React.Context<GlobalThemeProps>;
|
|
14
|
-
export declare
|
|
15
|
-
export declare namespace GlobalTheme {
|
|
16
|
-
var propTypes: {
|
|
17
|
-
/**
|
|
18
|
-
* Provide child elements to be rendered inside of `GlobalTheme`, this is
|
|
19
|
-
* typically the root of your app
|
|
20
|
-
*/
|
|
21
|
-
children: PropTypes.Requireable<PropTypes.ReactNodeLike>;
|
|
22
|
-
/**
|
|
23
|
-
* Specify the global theme for your app
|
|
24
|
-
*/
|
|
25
|
-
theme: PropTypes.Requireable<string>;
|
|
26
|
-
};
|
|
27
|
-
}
|
|
15
|
+
export declare const GlobalTheme: React.ForwardRefExoticComponent<GlobalThemeProps & React.RefAttributes<unknown>>;
|
|
28
16
|
type ThemeBaseProps = GlobalThemeProps & {
|
|
29
17
|
className?: string;
|
|
30
18
|
};
|
|
@@ -15,7 +15,7 @@ import { LayerContext } from '../Layer/LayerContext.js';
|
|
|
15
15
|
const ThemeContext = /*#__PURE__*/React__default.createContext({
|
|
16
16
|
theme: 'white'
|
|
17
17
|
});
|
|
18
|
-
function GlobalTheme(_ref) {
|
|
18
|
+
const GlobalTheme = /*#__PURE__*/React__default.forwardRef(function GlobalTheme(_ref, ref) {
|
|
19
19
|
let {
|
|
20
20
|
children,
|
|
21
21
|
theme
|
|
@@ -25,10 +25,13 @@ function GlobalTheme(_ref) {
|
|
|
25
25
|
theme
|
|
26
26
|
};
|
|
27
27
|
}, [theme]);
|
|
28
|
+
const childrenWithProps = /*#__PURE__*/React__default.cloneElement(children, {
|
|
29
|
+
ref: ref
|
|
30
|
+
});
|
|
28
31
|
return /*#__PURE__*/React__default.createElement(ThemeContext.Provider, {
|
|
29
32
|
value: value
|
|
30
|
-
},
|
|
31
|
-
}
|
|
33
|
+
}, childrenWithProps);
|
|
34
|
+
});
|
|
32
35
|
GlobalTheme.propTypes = {
|
|
33
36
|
/**
|
|
34
37
|
* Provide child elements to be rendered inside of `GlobalTheme`, this is
|
|
@@ -187,8 +187,8 @@ function TreeNode(_ref) {
|
|
|
187
187
|
return depth + 2.5;
|
|
188
188
|
};
|
|
189
189
|
if (currentNodeLabel.current) {
|
|
190
|
-
currentNodeLabel.current.style.
|
|
191
|
-
currentNodeLabel.current.style.
|
|
190
|
+
currentNodeLabel.current.style.marginInlineStart = `-${calcOffset()}rem`;
|
|
191
|
+
currentNodeLabel.current.style.paddingInlineStart = `${calcOffset()}rem`;
|
|
192
192
|
}
|
|
193
193
|
|
|
194
194
|
// sync props and state
|
|
@@ -57,20 +57,20 @@ class HeaderMenu extends React__default.Component {
|
|
|
57
57
|
});
|
|
58
58
|
/**
|
|
59
59
|
* Handle our blur event from our underlying menuitems. Will mostly be used
|
|
60
|
-
* for
|
|
61
|
-
*
|
|
60
|
+
* for closing our menu in response to a user clicking off or tabbing out of
|
|
61
|
+
* the menu or menubar.
|
|
62
62
|
*/
|
|
63
63
|
_defineProperty(this, "handleOnBlur", event => {
|
|
64
|
-
//
|
|
65
|
-
//
|
|
66
|
-
const
|
|
67
|
-
|
|
68
|
-
|
|
64
|
+
// Close the menu on blur when the related target is not a sibling menu item
|
|
65
|
+
// or a child in a submenu
|
|
66
|
+
const siblingItemBlurredTo = this.items.find(element => element === event.relatedTarget);
|
|
67
|
+
const childItemBlurredTo = this._subMenus.current?.contains(event.relatedTarget);
|
|
68
|
+
if (!siblingItemBlurredTo && !childItemBlurredTo) {
|
|
69
|
+
this.setState({
|
|
70
|
+
expanded: false,
|
|
71
|
+
selectedIndex: null
|
|
72
|
+
});
|
|
69
73
|
}
|
|
70
|
-
this.setState({
|
|
71
|
-
expanded: false,
|
|
72
|
-
selectedIndex: null
|
|
73
|
-
});
|
|
74
74
|
});
|
|
75
75
|
/**
|
|
76
76
|
* ref handler for our menu button. If we are supplied a `focusRef` prop, we also
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* This source code is licensed under the Apache-2.0 license found in the
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*/
|
|
7
|
-
import
|
|
7
|
+
import { type ComponentProps, type ForwardedRef, type ReactNode, ElementType, WeakValidationMap } from 'react';
|
|
8
8
|
import { LinkProps } from './Link';
|
|
9
9
|
type HeaderMenuItemProps<E extends ElementType> = LinkProps<E> & {
|
|
10
10
|
className?: string | undefined;
|
|
@@ -15,8 +15,12 @@ type HeaderMenuItemProps<E extends ElementType> = LinkProps<E> & {
|
|
|
15
15
|
role?: ComponentProps<'li'>['role'];
|
|
16
16
|
tabIndex?: number | undefined;
|
|
17
17
|
};
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
};
|
|
18
|
+
export interface HeaderMenuItemComponent {
|
|
19
|
+
<E extends ElementType = 'a'>(props: HeaderMenuItemProps<E> & {
|
|
20
|
+
ref?: ForwardedRef<ElementType>;
|
|
21
|
+
}): JSX.Element | null;
|
|
22
|
+
displayName?: string;
|
|
23
|
+
propTypes?: WeakValidationMap<HeaderMenuItemProps<any>>;
|
|
24
|
+
}
|
|
25
|
+
declare const HeaderMenuItem: HeaderMenuItemComponent;
|
|
22
26
|
export default HeaderMenuItem;
|
|
@@ -13,7 +13,7 @@ import Link, { LinkPropTypes } from './Link.js';
|
|
|
13
13
|
import { usePrefix } from '../../internal/usePrefix.js';
|
|
14
14
|
import deprecate from '../../prop-types/deprecate.js';
|
|
15
15
|
|
|
16
|
-
function HeaderMenuItemRenderFunction(_ref, ref) {
|
|
16
|
+
const HeaderMenuItem = /*#__PURE__*/forwardRef(function HeaderMenuItemRenderFunction(_ref, ref) {
|
|
17
17
|
let {
|
|
18
18
|
className,
|
|
19
19
|
isActive,
|
|
@@ -45,8 +45,7 @@ function HeaderMenuItemRenderFunction(_ref, ref) {
|
|
|
45
45
|
}), /*#__PURE__*/React__default.createElement("span", {
|
|
46
46
|
className: `${prefix}--text-truncate--end`
|
|
47
47
|
}, children)));
|
|
48
|
-
}
|
|
49
|
-
const HeaderMenuItem = /*#__PURE__*/forwardRef(HeaderMenuItemRenderFunction);
|
|
48
|
+
});
|
|
50
49
|
HeaderMenuItem.displayName = 'HeaderMenuItem';
|
|
51
50
|
HeaderMenuItem.propTypes = {
|
|
52
51
|
/**
|
|
@@ -271,7 +271,7 @@ class DataTable extends React__default["default"].Component {
|
|
|
271
271
|
checked: row.isSelected,
|
|
272
272
|
onSelect: events.composeEventHandlers([_this.handleOnSelectRow(row.id), onClick]),
|
|
273
273
|
id: `${_this.getTablePrefix()}__select-row-${row.id}`,
|
|
274
|
-
name: `select-row
|
|
274
|
+
name: `select-row`,
|
|
275
275
|
ariaLabel: t(translationKey),
|
|
276
276
|
disabled: row.disabled,
|
|
277
277
|
radio: _this.props.radio || null
|
|
@@ -71,6 +71,7 @@ const Table = _ref => {
|
|
|
71
71
|
descriptionId
|
|
72
72
|
} = React.useContext(TableContext.TableContext);
|
|
73
73
|
const prefix = usePrefix.usePrefix();
|
|
74
|
+
const [isScrollable, setIsScrollable] = React.useState(false);
|
|
74
75
|
const tableRef = React.useRef(null);
|
|
75
76
|
const componentClass = cx__default["default"](`${prefix}--data-table`, className, {
|
|
76
77
|
[`${prefix}--data-table--${size}`]: size,
|
|
@@ -109,6 +110,22 @@ const Table = _ref => {
|
|
|
109
110
|
const debouncedSetTableAlignment = debounce__default["default"](setTableAlignment, 100);
|
|
110
111
|
useEvent.useWindowEvent('resize', debouncedSetTableAlignment);
|
|
111
112
|
|
|
113
|
+
// Used to set a tabIndex when the Table is horizontally scrollable
|
|
114
|
+
const setTabIndex = React.useCallback(() => {
|
|
115
|
+
const tableContainer = tableRef?.current?.parentNode;
|
|
116
|
+
const tableHeader = tableRef?.current?.firstChild;
|
|
117
|
+
if (tableHeader?.scrollWidth > tableContainer?.clientWidth) {
|
|
118
|
+
setIsScrollable(true);
|
|
119
|
+
} else {
|
|
120
|
+
setIsScrollable(false);
|
|
121
|
+
}
|
|
122
|
+
}, []);
|
|
123
|
+
const debouncedSetTabIndex = debounce__default["default"](setTabIndex, 100);
|
|
124
|
+
useEvent.useWindowEvent('resize', debouncedSetTabIndex);
|
|
125
|
+
React.useLayoutEffect(() => {
|
|
126
|
+
setTabIndex();
|
|
127
|
+
}, [setTabIndex]);
|
|
128
|
+
|
|
112
129
|
// recalculate table alignment once fonts have loaded
|
|
113
130
|
if (typeof document !== 'undefined' && document?.fonts?.status && document.fonts.status !== 'loaded') {
|
|
114
131
|
document.fonts.ready.then(() => {
|
|
@@ -120,6 +137,9 @@ const Table = _ref => {
|
|
|
120
137
|
}, [setTableAlignment, size]);
|
|
121
138
|
const table = /*#__PURE__*/React__default["default"].createElement("div", {
|
|
122
139
|
className: `${prefix}--data-table-content`
|
|
140
|
+
// eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex
|
|
141
|
+
,
|
|
142
|
+
tabIndex: isScrollable ? 0 : undefined
|
|
123
143
|
}, /*#__PURE__*/React__default["default"].createElement("table", _rollupPluginBabelHelpers["extends"]({
|
|
124
144
|
"aria-labelledby": titleId,
|
|
125
145
|
"aria-describedby": descriptionId
|
|
@@ -129,7 +129,7 @@ Subgrid.propTypes = {
|
|
|
129
129
|
*/
|
|
130
130
|
className: PropTypes__default["default"].string,
|
|
131
131
|
/**
|
|
132
|
-
* Specify the
|
|
132
|
+
* Specify the gutter mode for the subgrid
|
|
133
133
|
*/
|
|
134
134
|
mode: PropTypes__default["default"].oneOf(['wide', 'narrow', 'condensed'])
|
|
135
135
|
};
|
|
@@ -23,7 +23,7 @@ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
|
|
23
23
|
|
|
24
24
|
/**
|
|
25
25
|
* Helper component for rendering content that hangs on the column. Useful when
|
|
26
|
-
* trying to align content across different
|
|
26
|
+
* trying to align content across different gutter modes
|
|
27
27
|
*/
|
|
28
28
|
function ColumnHang(_ref) {
|
|
29
29
|
let {
|
|
@@ -8,7 +8,7 @@ import * as React from 'react';
|
|
|
8
8
|
export type GridMode = 'flexbox' | 'css-grid';
|
|
9
9
|
export interface GridSettingContext {
|
|
10
10
|
/**
|
|
11
|
-
* The
|
|
11
|
+
* The gutter mode for the GridContext
|
|
12
12
|
*/
|
|
13
13
|
mode: GridMode;
|
|
14
14
|
/**
|
|
@@ -23,7 +23,7 @@ export interface GridSettingsProps {
|
|
|
23
23
|
*/
|
|
24
24
|
children?: React.ReactNode;
|
|
25
25
|
/**
|
|
26
|
-
* Specify the
|
|
26
|
+
* Specify the gutter mode for the GridContext
|
|
27
27
|
*/
|
|
28
28
|
mode: GridMode;
|
|
29
29
|
/**
|
|
@@ -67,7 +67,7 @@ GridSettings.propTypes = {
|
|
|
67
67
|
*/
|
|
68
68
|
children: PropTypes__default["default"].node,
|
|
69
69
|
/**
|
|
70
|
-
* Specify the
|
|
70
|
+
* Specify the gutter mode for the GridContext
|
|
71
71
|
*/
|
|
72
72
|
mode: PropTypes__default["default"].oneOf(gridModes).isRequired,
|
|
73
73
|
/**
|
|
@@ -4,48 +4,13 @@
|
|
|
4
4
|
* This source code is licensed under the Apache-2.0 license found in the
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*/
|
|
7
|
-
import
|
|
8
|
-
import { type ElementType } from 'react';
|
|
9
|
-
import type { PolymorphicProps } from '../../types/common';
|
|
7
|
+
import React from 'react';
|
|
10
8
|
type HeadingLevel = 1 | 2 | 3 | 4 | 5 | 6;
|
|
11
9
|
type SectionBaseProps = {
|
|
12
10
|
level?: HeadingLevel;
|
|
13
11
|
};
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* Provide an alternative tag or component to use instead of the default
|
|
20
|
-
* <section> element
|
|
21
|
-
*/
|
|
22
|
-
as: PropTypes.Requireable<PropTypes.ReactComponentLike>;
|
|
23
|
-
/**
|
|
24
|
-
* Specify the content that will be placed in the component
|
|
25
|
-
*/
|
|
26
|
-
children: PropTypes.Requireable<PropTypes.ReactNodeLike>;
|
|
27
|
-
/**
|
|
28
|
-
* Specify a class name for the outermost node of the component
|
|
29
|
-
*/
|
|
30
|
-
className: PropTypes.Requireable<string>;
|
|
31
|
-
/**
|
|
32
|
-
* Overrides the level of the section
|
|
33
|
-
*/
|
|
34
|
-
level: PropTypes.Requireable<number>;
|
|
35
|
-
};
|
|
36
|
-
}
|
|
37
|
-
type HeadingProps = JSX.IntrinsicElements[`h${HeadingLevel}`];
|
|
38
|
-
export declare function Heading(props: HeadingProps): JSX.Element;
|
|
39
|
-
export declare namespace Heading {
|
|
40
|
-
var propTypes: {
|
|
41
|
-
/**
|
|
42
|
-
* Specify the content that will be placed in the component
|
|
43
|
-
*/
|
|
44
|
-
children: PropTypes.Requireable<PropTypes.ReactNodeLike>;
|
|
45
|
-
/**
|
|
46
|
-
* Specify a class name for the outermost node of the component
|
|
47
|
-
*/
|
|
48
|
-
className: PropTypes.Requireable<string>;
|
|
49
|
-
};
|
|
50
|
-
}
|
|
12
|
+
export declare const Section: React.ForwardRefExoticComponent<Pick<SectionBaseProps & Omit<any, "as"> & {
|
|
13
|
+
as?: React.ElementType<any> | undefined;
|
|
14
|
+
}, string | number | symbol> & React.RefAttributes<unknown>>;
|
|
15
|
+
export declare const Heading: React.ForwardRefExoticComponent<Pick<React.ClassAttributes<HTMLHeadingElement> & React.HTMLAttributes<HTMLHeadingElement>, "key" | keyof React.HTMLAttributes<HTMLHeadingElement>> & React.RefAttributes<HTMLHeadingElement>>;
|
|
51
16
|
export {};
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
|
|
10
10
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
11
11
|
|
|
12
|
+
var _rollupPluginBabelHelpers = require('../../_virtual/_rollupPluginBabelHelpers.js');
|
|
12
13
|
var PropTypes = require('prop-types');
|
|
13
14
|
var React = require('react');
|
|
14
15
|
|
|
@@ -18,7 +19,7 @@ var PropTypes__default = /*#__PURE__*/_interopDefaultLegacy(PropTypes);
|
|
|
18
19
|
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
|
19
20
|
|
|
20
21
|
const HeadingContext = /*#__PURE__*/React__default["default"].createContext(1);
|
|
21
|
-
function Section(_ref) {
|
|
22
|
+
const Section = /*#__PURE__*/React__default["default"].forwardRef(function Section(_ref, ref) {
|
|
22
23
|
let {
|
|
23
24
|
as: BaseComponent = 'section',
|
|
24
25
|
level: levelOverride,
|
|
@@ -29,8 +30,10 @@ function Section(_ref) {
|
|
|
29
30
|
const BaseComponentAsAny = BaseComponent;
|
|
30
31
|
return /*#__PURE__*/React__default["default"].createElement(HeadingContext.Provider, {
|
|
31
32
|
value: Math.min(level, 6)
|
|
32
|
-
}, /*#__PURE__*/React__default["default"].createElement(BaseComponentAsAny,
|
|
33
|
-
|
|
33
|
+
}, /*#__PURE__*/React__default["default"].createElement(BaseComponentAsAny, _rollupPluginBabelHelpers["extends"]({
|
|
34
|
+
ref: ref
|
|
35
|
+
}, rest)));
|
|
36
|
+
});
|
|
34
37
|
Section.propTypes = {
|
|
35
38
|
/**
|
|
36
39
|
* Provide an alternative tag or component to use instead of the default
|
|
@@ -50,10 +53,12 @@ Section.propTypes = {
|
|
|
50
53
|
*/
|
|
51
54
|
level: PropTypes__default["default"].number
|
|
52
55
|
};
|
|
53
|
-
function Heading(props) {
|
|
56
|
+
const Heading = /*#__PURE__*/React__default["default"].forwardRef(function Heading(props, ref) {
|
|
54
57
|
const HeadingIntrinsic = `h${React__default["default"].useContext(HeadingContext)}`;
|
|
55
|
-
return /*#__PURE__*/React__default["default"].createElement(HeadingIntrinsic,
|
|
56
|
-
|
|
58
|
+
return /*#__PURE__*/React__default["default"].createElement(HeadingIntrinsic, _rollupPluginBabelHelpers["extends"]({
|
|
59
|
+
ref: ref
|
|
60
|
+
}, props));
|
|
61
|
+
});
|
|
57
62
|
Heading.propTypes = {
|
|
58
63
|
/**
|
|
59
64
|
* Specify the content that will be placed in the component
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright IBM Corp. 2016, 2023
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the Apache-2.0 license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
import PropTypes from 'prop-types';
|
|
8
|
+
import { ComponentProps } from 'react';
|
|
9
|
+
export interface IconSkeletonProps extends ComponentProps<'div'> {
|
|
10
|
+
/**
|
|
11
|
+
* Specify an optional className to add.
|
|
12
|
+
*/
|
|
13
|
+
className?: string;
|
|
14
|
+
}
|
|
15
|
+
declare const IconSkeleton: {
|
|
16
|
+
({ className, ...rest }: IconSkeletonProps): JSX.Element;
|
|
17
|
+
propTypes: {
|
|
18
|
+
/**
|
|
19
|
+
* Specify an optional className to add.
|
|
20
|
+
*/
|
|
21
|
+
className: PropTypes.Requireable<string>;
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
export default IconSkeleton;
|
|
25
|
+
export { IconSkeleton };
|
|
@@ -27,12 +27,9 @@ const IconSkeleton = _ref => {
|
|
|
27
27
|
...rest
|
|
28
28
|
} = _ref;
|
|
29
29
|
const prefix = usePrefix.usePrefix();
|
|
30
|
-
const props = {
|
|
31
|
-
...rest
|
|
32
|
-
};
|
|
33
30
|
return /*#__PURE__*/React__default["default"].createElement("div", _rollupPluginBabelHelpers["extends"]({
|
|
34
31
|
className: cx__default["default"](`${prefix}--icon--skeleton`, className)
|
|
35
|
-
},
|
|
32
|
+
}, rest));
|
|
36
33
|
};
|
|
37
34
|
IconSkeleton.propTypes = {
|
|
38
35
|
/**
|
|
@@ -39,6 +39,7 @@ const IconButton = /*#__PURE__*/React__default["default"].forwardRef(function Ic
|
|
|
39
39
|
leaveDelayMs = 100,
|
|
40
40
|
wrapperClasses,
|
|
41
41
|
size,
|
|
42
|
+
isSelected,
|
|
42
43
|
...rest
|
|
43
44
|
} = props;
|
|
44
45
|
const prefix = usePrefix.usePrefix();
|
|
@@ -58,7 +59,9 @@ const IconButton = /*#__PURE__*/React__default["default"].forwardRef(function Ic
|
|
|
58
59
|
kind: kind,
|
|
59
60
|
ref: ref,
|
|
60
61
|
size: size,
|
|
61
|
-
className: cx__default["default"](`${prefix}--btn--icon-only`,
|
|
62
|
+
className: cx__default["default"](`${prefix}--btn--icon-only`, {
|
|
63
|
+
[`${prefix}--btn--selected`]: isSelected
|
|
64
|
+
}, className)
|
|
62
65
|
}), children));
|
|
63
66
|
});
|
|
64
67
|
IconButton.propTypes = {
|
|
@@ -90,6 +93,11 @@ IconButton.propTypes = {
|
|
|
90
93
|
* Specify the duration in milliseconds to delay before displaying the tooltip
|
|
91
94
|
*/
|
|
92
95
|
enterDelayMs: PropTypes__default["default"].number,
|
|
96
|
+
/**
|
|
97
|
+
* Specify whether the IconButton is currently selected
|
|
98
|
+
*/
|
|
99
|
+
|
|
100
|
+
isSelected: PropTypes__default["default"].bool,
|
|
93
101
|
/**
|
|
94
102
|
* Specify the type of button to be used as the base for the IconButton
|
|
95
103
|
*/
|
|
@@ -36,7 +36,7 @@ function useLayer() {
|
|
|
36
36
|
level
|
|
37
37
|
};
|
|
38
38
|
}
|
|
39
|
-
function Layer(_ref) {
|
|
39
|
+
const Layer = /*#__PURE__*/React__default["default"].forwardRef(function Layer(_ref, ref) {
|
|
40
40
|
let {
|
|
41
41
|
as: BaseComponent = 'div',
|
|
42
42
|
className: customClassName,
|
|
@@ -52,10 +52,12 @@ function Layer(_ref) {
|
|
|
52
52
|
const value = Math.max(0, Math.min(level + 1, MAX_LEVEL));
|
|
53
53
|
return /*#__PURE__*/React__default["default"].createElement(LayerContext.LayerContext.Provider, {
|
|
54
54
|
value: value
|
|
55
|
-
}, /*#__PURE__*/React__default["default"].createElement(BaseComponent, _rollupPluginBabelHelpers["extends"]({
|
|
55
|
+
}, /*#__PURE__*/React__default["default"].createElement(BaseComponent, _rollupPluginBabelHelpers["extends"]({
|
|
56
|
+
ref: ref
|
|
57
|
+
}, rest, {
|
|
56
58
|
className: className
|
|
57
59
|
}), children));
|
|
58
|
-
}
|
|
60
|
+
});
|
|
59
61
|
Layer.propTypes = {
|
|
60
62
|
/**
|
|
61
63
|
* Specify a custom component or element to be rendered as the top-level
|
|
@@ -24,10 +24,11 @@ var PropTypes__default = /*#__PURE__*/_interopDefaultLegacy(PropTypes);
|
|
|
24
24
|
function useIsTruncated(ref) {
|
|
25
25
|
const [isTruncated, setIsTruncated] = React.useState(false);
|
|
26
26
|
React.useEffect(() => {
|
|
27
|
+
const element = ref.current;
|
|
27
28
|
const {
|
|
28
29
|
offsetWidth,
|
|
29
30
|
scrollWidth
|
|
30
|
-
} =
|
|
31
|
+
} = element.lastElementChild?.lastElementChild || element;
|
|
31
32
|
setIsTruncated(offsetWidth < scrollWidth);
|
|
32
33
|
}, [ref, setIsTruncated]);
|
|
33
34
|
return isTruncated;
|
|
@@ -17,6 +17,7 @@ var ReactDOM = require('react-dom');
|
|
|
17
17
|
var useMergedRefs = require('../../internal/useMergedRefs.js');
|
|
18
18
|
var usePrefix = require('../../internal/usePrefix.js');
|
|
19
19
|
var MenuContext = require('./MenuContext.js');
|
|
20
|
+
var useLayoutDirection = require('../LayoutDirection/useLayoutDirection.js');
|
|
20
21
|
var match = require('../../internal/keyboard/match.js');
|
|
21
22
|
var keys = require('../../internal/keyboard/keys.js');
|
|
22
23
|
|
|
@@ -63,6 +64,11 @@ const Menu = /*#__PURE__*/React__default["default"].forwardRef(function Menu(_re
|
|
|
63
64
|
const ref = useMergedRefs.useMergedRefs([forwardRef, menu]);
|
|
64
65
|
const [position, setPosition] = React.useState([-1, -1]);
|
|
65
66
|
const focusableItems = childContext.state.items.filter(item => !item.disabled && item.ref.current);
|
|
67
|
+
|
|
68
|
+
// Set RTL based on document direction or `LayoutDirection`
|
|
69
|
+
const {
|
|
70
|
+
direction
|
|
71
|
+
} = useLayoutDirection.useLayoutDirection();
|
|
66
72
|
function returnFocus() {
|
|
67
73
|
if (focusReturn.current) {
|
|
68
74
|
focusReturn.current.focus();
|
|
@@ -72,8 +78,14 @@ const Menu = /*#__PURE__*/React__default["default"].forwardRef(function Menu(_re
|
|
|
72
78
|
if (menu.current) {
|
|
73
79
|
focusReturn.current = document.activeElement;
|
|
74
80
|
const pos = calculatePosition();
|
|
75
|
-
|
|
76
|
-
|
|
81
|
+
if ((document?.dir === 'rtl' || direction === 'rtl') && !rest?.id?.includes('MenuButton')) {
|
|
82
|
+
menu.current.style.insetInlineStart = `initial`;
|
|
83
|
+
menu.current.style.insetInlineEnd = `${pos[0]}px`;
|
|
84
|
+
} else {
|
|
85
|
+
menu.current.style.insetInlineStart = `${pos[0]}px`;
|
|
86
|
+
menu.current.style.insetInlineEnd = `initial`;
|
|
87
|
+
}
|
|
88
|
+
menu.current.style.insetBlockStart = `${pos[1]}px`;
|
|
77
89
|
setPosition(pos);
|
|
78
90
|
menu.current.focus();
|
|
79
91
|
if (onOpen) {
|
|
@@ -13,12 +13,13 @@ var _rollupPluginBabelHelpers = require('../../_virtual/_rollupPluginBabelHelper
|
|
|
13
13
|
var cx = require('classnames');
|
|
14
14
|
var PropTypes = require('prop-types');
|
|
15
15
|
var React = require('react');
|
|
16
|
-
var
|
|
16
|
+
var iconsReact = require('@carbon/icons-react');
|
|
17
17
|
var useControllableState = require('../../internal/useControllableState.js');
|
|
18
18
|
var useMergedRefs = require('../../internal/useMergedRefs.js');
|
|
19
19
|
var usePrefix = require('../../internal/usePrefix.js');
|
|
20
20
|
var Menu = require('./Menu.js');
|
|
21
21
|
var MenuContext = require('./MenuContext.js');
|
|
22
|
+
var useLayoutDirection = require('../LayoutDirection/useLayoutDirection.js');
|
|
22
23
|
var match = require('../../internal/keyboard/match.js');
|
|
23
24
|
var keys = require('../../internal/keyboard/keys.js');
|
|
24
25
|
|
|
@@ -28,7 +29,7 @@ var cx__default = /*#__PURE__*/_interopDefaultLegacy(cx);
|
|
|
28
29
|
var PropTypes__default = /*#__PURE__*/_interopDefaultLegacy(PropTypes);
|
|
29
30
|
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
|
30
31
|
|
|
31
|
-
var _CaretRight;
|
|
32
|
+
var _CaretLeft, _CaretRight;
|
|
32
33
|
const hoverIntentDelay = 150; // in ms
|
|
33
34
|
|
|
34
35
|
const MenuItem = /*#__PURE__*/React__default["default"].forwardRef(function MenuItem(_ref, forwardRef) {
|
|
@@ -51,6 +52,7 @@ const MenuItem = /*#__PURE__*/React__default["default"].forwardRef(function Menu
|
|
|
51
52
|
x: -1,
|
|
52
53
|
y: -1
|
|
53
54
|
});
|
|
55
|
+
const [isRtl, setRtl] = React.useState(false);
|
|
54
56
|
const hasChildren = Boolean(children);
|
|
55
57
|
const [submenuOpen, setSubmenuOpen] = React.useState(false);
|
|
56
58
|
const hoverIntentTimeout = React.useRef(null);
|
|
@@ -72,10 +74,17 @@ const MenuItem = /*#__PURE__*/React__default["default"].forwardRef(function Menu
|
|
|
72
74
|
width,
|
|
73
75
|
height
|
|
74
76
|
} = menuItem.current.getBoundingClientRect();
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
77
|
+
if (isRtl) {
|
|
78
|
+
setBoundaries({
|
|
79
|
+
x: [-x, x - width],
|
|
80
|
+
y: [y, y + height]
|
|
81
|
+
});
|
|
82
|
+
} else {
|
|
83
|
+
setBoundaries({
|
|
84
|
+
x: [x, x + width],
|
|
85
|
+
y: [y, y + height]
|
|
86
|
+
});
|
|
87
|
+
}
|
|
79
88
|
setSubmenuOpen(true);
|
|
80
89
|
}
|
|
81
90
|
function closeSubmenu() {
|
|
@@ -130,6 +139,18 @@ const MenuItem = /*#__PURE__*/React__default["default"].forwardRef(function Menu
|
|
|
130
139
|
registerItem();
|
|
131
140
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
132
141
|
}, []);
|
|
142
|
+
|
|
143
|
+
// Set RTL based on document direction or `LayoutDirection`
|
|
144
|
+
const {
|
|
145
|
+
direction
|
|
146
|
+
} = useLayoutDirection.useLayoutDirection();
|
|
147
|
+
React.useEffect(() => {
|
|
148
|
+
if (document?.dir === 'rtl' || direction === 'rtl') {
|
|
149
|
+
setRtl(true);
|
|
150
|
+
} else {
|
|
151
|
+
setRtl(false);
|
|
152
|
+
}
|
|
153
|
+
}, [direction]);
|
|
133
154
|
return /*#__PURE__*/React__default["default"].createElement("li", _rollupPluginBabelHelpers["extends"]({
|
|
134
155
|
role: "menuitem"
|
|
135
156
|
}, rest, {
|
|
@@ -151,7 +172,7 @@ const MenuItem = /*#__PURE__*/React__default["default"].forwardRef(function Menu
|
|
|
151
172
|
className: `${prefix}--menu-item__shortcut`
|
|
152
173
|
}, shortcut), hasChildren && /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement("div", {
|
|
153
174
|
className: `${prefix}--menu-item__shortcut`
|
|
154
|
-
}, _CaretRight || (_CaretRight = /*#__PURE__*/React__default["default"].createElement(
|
|
175
|
+
}, isRtl ? _CaretLeft || (_CaretLeft = /*#__PURE__*/React__default["default"].createElement(iconsReact.CaretLeft, null)) : _CaretRight || (_CaretRight = /*#__PURE__*/React__default["default"].createElement(iconsReact.CaretRight, null))), /*#__PURE__*/React__default["default"].createElement(Menu.Menu, {
|
|
155
176
|
label: label,
|
|
156
177
|
open: submenuOpen,
|
|
157
178
|
onClose: () => {
|
|
@@ -232,7 +253,7 @@ const MenuItemSelectable = /*#__PURE__*/React__default["default"].forwardRef(fun
|
|
|
232
253
|
className: classNames,
|
|
233
254
|
role: "menuitemcheckbox",
|
|
234
255
|
"aria-checked": checked,
|
|
235
|
-
renderIcon: checked &&
|
|
256
|
+
renderIcon: checked && iconsReact.Checkmark,
|
|
236
257
|
onClick: handleClick
|
|
237
258
|
}));
|
|
238
259
|
});
|
|
@@ -335,7 +356,7 @@ const MenuItemRadioGroup = /*#__PURE__*/React__default["default"].forwardRef(fun
|
|
|
335
356
|
label: itemToString(item),
|
|
336
357
|
role: "menuitemradio",
|
|
337
358
|
"aria-checked": item === selection,
|
|
338
|
-
renderIcon: item === selection &&
|
|
359
|
+
renderIcon: item === selection && iconsReact.Checkmark,
|
|
339
360
|
onClick: e => {
|
|
340
361
|
handleClick(item, e);
|
|
341
362
|
}
|
|
@@ -65,7 +65,7 @@ const MenuButton = /*#__PURE__*/React__default["default"].forwardRef(function Me
|
|
|
65
65
|
}
|
|
66
66
|
}
|
|
67
67
|
function handleOpen() {
|
|
68
|
-
menuRef.current.style.
|
|
68
|
+
menuRef.current.style.inlineSize = `${width}px`;
|
|
69
69
|
}
|
|
70
70
|
const triggerClasses = cx__default["default"](`${prefix}--menu-button__trigger`, {
|
|
71
71
|
[`${prefix}--menu-button__trigger--open`]: open
|