@carbon/react 1.28.0-rc.0 → 1.29.0-rc.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/es/components/Checkbox/Checkbox.d.ts +2 -2
- package/es/components/ContainedList/ContainedList.js +48 -3
- package/es/components/DataTable/DataTable.js +21 -20
- package/es/components/DatePicker/DatePicker.Skeleton.d.ts +30 -0
- package/es/components/DatePicker/DatePicker.Skeleton.js +1 -2
- package/es/components/DatePicker/DatePicker.d.ts +131 -0
- package/es/components/DatePicker/DatePicker.js +16 -12
- package/es/components/DatePicker/index.d.ts +10 -0
- package/es/components/DatePicker/index.js +1 -0
- package/es/components/DatePickerInput/DatePickerInput.d.ts +93 -0
- package/es/components/ExpandableSearch/ExpandableSearch.d.ts +1 -0
- package/es/components/ExpandableSearch/ExpandableSearch.js +1 -0
- package/es/components/FluidDatePicker/FluidDatePicker.js +1 -0
- package/es/components/Heading/index.d.ts +51 -0
- package/es/components/Heading/index.js +5 -9
- package/es/components/OverflowMenu/OverflowMenu.js +1 -0
- package/es/components/StructuredList/StructuredList.Skeleton.js +2 -10
- package/es/components/StructuredList/StructuredList.js +2 -2
- package/es/components/Theme/index.d.ts +62 -0
- package/es/components/Theme/index.js +4 -4
- package/es/components/UIShell/HeaderContainer.js +8 -0
- package/es/components/UIShell/HeaderMenuButton.d.ts +38 -0
- package/es/components/UIShell/HeaderMenuButton.js +7 -12
- package/es/components/UIShell/HeaderNavigation.d.ts +24 -0
- package/es/components/UIShell/HeaderNavigation.js +8 -13
- package/es/components/UIShell/HeaderSideNavItems.d.ts +33 -0
- package/es/components/UIShell/HeaderSideNavItems.js +4 -9
- package/es/components/UIShell/SideNav.d.ts +21 -0
- package/es/components/UIShell/SideNav.js +37 -38
- package/es/components/UIShell/SideNavFooter.js +1 -0
- package/es/components/UIShell/SideNavHeader.js +1 -0
- package/es/components/UIShell/SideNavItems.js +1 -0
- package/es/components/UIShell/SideNavMenu.js +1 -0
- package/es/index.js +3 -3
- package/es/internal/useEvent.js +20 -1
- package/es/types/common.d.ts +11 -0
- package/lib/components/Checkbox/Checkbox.d.ts +2 -2
- package/lib/components/ContainedList/ContainedList.js +48 -3
- package/lib/components/DataTable/DataTable.js +21 -20
- package/lib/components/DatePicker/DatePicker.Skeleton.d.ts +30 -0
- package/lib/components/DatePicker/DatePicker.Skeleton.js +1 -2
- package/lib/components/DatePicker/DatePicker.d.ts +131 -0
- package/lib/components/DatePicker/DatePicker.js +16 -12
- package/lib/components/DatePicker/index.d.ts +10 -0
- package/lib/components/DatePicker/index.js +2 -0
- package/lib/components/DatePickerInput/DatePickerInput.d.ts +93 -0
- package/lib/components/ExpandableSearch/ExpandableSearch.d.ts +1 -0
- package/lib/components/ExpandableSearch/ExpandableSearch.js +1 -0
- package/lib/components/FluidDatePicker/FluidDatePicker.js +1 -0
- package/lib/components/Heading/index.d.ts +51 -0
- package/lib/components/Heading/index.js +5 -9
- package/lib/components/OverflowMenu/OverflowMenu.js +1 -0
- package/lib/components/StructuredList/StructuredList.Skeleton.js +2 -10
- package/lib/components/StructuredList/StructuredList.js +2 -2
- package/lib/components/Theme/index.d.ts +62 -0
- package/lib/components/Theme/index.js +4 -4
- package/lib/components/UIShell/HeaderContainer.js +8 -0
- package/lib/components/UIShell/HeaderMenuButton.d.ts +38 -0
- package/lib/components/UIShell/HeaderMenuButton.js +7 -12
- package/lib/components/UIShell/HeaderNavigation.d.ts +24 -0
- package/lib/components/UIShell/HeaderNavigation.js +7 -13
- package/lib/components/UIShell/HeaderSideNavItems.d.ts +33 -0
- package/lib/components/UIShell/HeaderSideNavItems.js +4 -9
- package/lib/components/UIShell/SideNav.d.ts +21 -0
- package/lib/components/UIShell/SideNav.js +36 -37
- package/lib/components/UIShell/SideNavFooter.js +1 -0
- package/lib/components/UIShell/SideNavHeader.js +1 -0
- package/lib/components/UIShell/SideNavItems.js +1 -0
- package/lib/components/UIShell/SideNavMenu.js +1 -0
- package/lib/index.js +6 -6
- package/lib/internal/useEvent.js +20 -0
- package/lib/types/common.d.ts +11 -0
- package/package.json +7 -7
|
@@ -18,21 +18,19 @@ var PropTypes__default = /*#__PURE__*/_interopDefaultLegacy(PropTypes);
|
|
|
18
18
|
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
|
19
19
|
|
|
20
20
|
const HeadingContext = /*#__PURE__*/React__default["default"].createContext(1);
|
|
21
|
-
|
|
22
21
|
function Section(_ref) {
|
|
23
22
|
let {
|
|
24
23
|
as: BaseComponent = 'section',
|
|
25
24
|
level: levelOverride,
|
|
26
|
-
children,
|
|
27
25
|
...rest
|
|
28
26
|
} = _ref;
|
|
29
27
|
const parentLevel = React__default["default"].useContext(HeadingContext);
|
|
30
|
-
const level =
|
|
28
|
+
const level = levelOverride ?? parentLevel + 1;
|
|
29
|
+
const BaseComponentAsAny = BaseComponent;
|
|
31
30
|
return /*#__PURE__*/React__default["default"].createElement(HeadingContext.Provider, {
|
|
32
31
|
value: Math.min(level, 6)
|
|
33
|
-
}, /*#__PURE__*/React__default["default"].createElement(
|
|
32
|
+
}, /*#__PURE__*/React__default["default"].createElement(BaseComponentAsAny, rest));
|
|
34
33
|
}
|
|
35
|
-
|
|
36
34
|
Section.propTypes = {
|
|
37
35
|
/**
|
|
38
36
|
* Provide an alternative tag or component to use instead of the default
|
|
@@ -55,12 +53,10 @@ Section.propTypes = {
|
|
|
55
53
|
*/
|
|
56
54
|
level: PropTypes__default["default"].number
|
|
57
55
|
};
|
|
58
|
-
|
|
59
56
|
function Heading(props) {
|
|
60
|
-
const
|
|
61
|
-
return /*#__PURE__*/React__default["default"].createElement(
|
|
57
|
+
const HeadingIntrinsic = `h${React__default["default"].useContext(HeadingContext)}`;
|
|
58
|
+
return /*#__PURE__*/React__default["default"].createElement(HeadingIntrinsic, props);
|
|
62
59
|
}
|
|
63
|
-
|
|
64
60
|
Heading.propTypes = {
|
|
65
61
|
/**
|
|
66
62
|
* Specify the content that will be placed in the component
|
|
@@ -385,6 +385,7 @@ class OverflowMenu extends React.Component {
|
|
|
385
385
|
onClick: this.handleClick,
|
|
386
386
|
id: id,
|
|
387
387
|
ref: mergeRefs["default"](this._triggerRef, ref),
|
|
388
|
+
size: size,
|
|
388
389
|
label: iconDescription
|
|
389
390
|
}), /*#__PURE__*/React__default["default"].createElement(IconElement, iconProps)), open && this.state.hasMountedTrigger && wrappedMenuBody));
|
|
390
391
|
}
|
|
@@ -26,15 +26,13 @@ var _span, _span2, _span3;
|
|
|
26
26
|
const StructuredListSkeleton = _ref => {
|
|
27
27
|
let {
|
|
28
28
|
rowCount,
|
|
29
|
-
border,
|
|
30
29
|
className,
|
|
31
30
|
...rest
|
|
32
31
|
} = _ref;
|
|
33
32
|
const prefix = usePrefix.usePrefix();
|
|
34
33
|
const StructuredListSkeletonClasses = cx__default["default"](className, {
|
|
35
34
|
[`${prefix}--skeleton`]: true,
|
|
36
|
-
[`${prefix}--structured-list`]: true
|
|
37
|
-
[`${prefix}--structured-list--border`]: border
|
|
35
|
+
[`${prefix}--structured-list`]: true
|
|
38
36
|
});
|
|
39
37
|
const rows = [];
|
|
40
38
|
|
|
@@ -69,11 +67,6 @@ const StructuredListSkeleton = _ref => {
|
|
|
69
67
|
};
|
|
70
68
|
|
|
71
69
|
StructuredListSkeleton.propTypes = {
|
|
72
|
-
/**
|
|
73
|
-
* Specify whether a border should be added to your StructuredListSkeleton
|
|
74
|
-
*/
|
|
75
|
-
border: PropTypes__default["default"].bool,
|
|
76
|
-
|
|
77
70
|
/**
|
|
78
71
|
* Specify an optional className to add.
|
|
79
72
|
*/
|
|
@@ -85,8 +78,7 @@ StructuredListSkeleton.propTypes = {
|
|
|
85
78
|
rowCount: PropTypes__default["default"].number
|
|
86
79
|
};
|
|
87
80
|
StructuredListSkeleton.defaultProps = {
|
|
88
|
-
rowCount: 5
|
|
89
|
-
border: false
|
|
81
|
+
rowCount: 5
|
|
90
82
|
};
|
|
91
83
|
var StructuredListSkeleton$1 = StructuredListSkeleton;
|
|
92
84
|
|
|
@@ -40,7 +40,7 @@ function StructuredListWrapper(props) {
|
|
|
40
40
|
const classes = cx__default["default"](`${prefix}--structured-list`, className, {
|
|
41
41
|
[`${prefix}--structured-list--selection`]: selection,
|
|
42
42
|
[`${prefix}--structured-list--condensed`]: isCondensed,
|
|
43
|
-
[`${prefix}--structured-list--flush`]: isFlush
|
|
43
|
+
[`${prefix}--structured-list--flush`]: isFlush && !selection
|
|
44
44
|
});
|
|
45
45
|
const [selectedRow, setSelectedRow] = React__default["default"].useState(null);
|
|
46
46
|
return /*#__PURE__*/React__default["default"].createElement(GridSelectedRowStateContext.Provider, {
|
|
@@ -82,7 +82,7 @@ StructuredListWrapper.propTypes = {
|
|
|
82
82
|
isCondensed: PropTypes__default["default"].bool,
|
|
83
83
|
|
|
84
84
|
/**
|
|
85
|
-
* Specify if structured list is flush, default is false
|
|
85
|
+
* Specify if structured list is flush, not valid for selection variant, default is false
|
|
86
86
|
*/
|
|
87
87
|
isFlush: PropTypes__default["default"].bool,
|
|
88
88
|
|
|
@@ -0,0 +1,62 @@
|
|
|
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 React, { ElementType, type PropsWithChildren } from 'react';
|
|
9
|
+
import { PolymorphicProps } from '../../types/common';
|
|
10
|
+
interface GlobalThemeProps {
|
|
11
|
+
theme?: 'white' | 'g10' | 'g90' | 'g100';
|
|
12
|
+
}
|
|
13
|
+
export declare const ThemeContext: React.Context<GlobalThemeProps>;
|
|
14
|
+
export declare function GlobalTheme({ children, theme, }: PropsWithChildren<GlobalThemeProps>): JSX.Element;
|
|
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
|
+
}
|
|
28
|
+
type ThemeBaseProps = GlobalThemeProps & {
|
|
29
|
+
className?: string;
|
|
30
|
+
};
|
|
31
|
+
type ThemeProps<E extends ElementType> = PolymorphicProps<E, ThemeBaseProps>;
|
|
32
|
+
/**
|
|
33
|
+
* Specify the theme to be applied to a page, or a region in a page
|
|
34
|
+
*/
|
|
35
|
+
export declare function Theme<E extends ElementType = 'div'>({ as: BaseComponent, className: customClassName, theme, ...rest }: ThemeProps<E>): JSX.Element;
|
|
36
|
+
export declare namespace Theme {
|
|
37
|
+
var propTypes: {
|
|
38
|
+
/**
|
|
39
|
+
* Specify a custom component or element to be rendered as the top-level
|
|
40
|
+
* element in the component
|
|
41
|
+
*/
|
|
42
|
+
as: PropTypes.Requireable<NonNullable<((...args: any[]) => any) | PropTypes.ReactComponentLike | null | undefined>>;
|
|
43
|
+
/**
|
|
44
|
+
* Provide child elements to be rendered inside of `Theme`
|
|
45
|
+
*/
|
|
46
|
+
children: PropTypes.Requireable<PropTypes.ReactNodeLike>;
|
|
47
|
+
/**
|
|
48
|
+
* Provide a custom class name to be used on the outermost element rendered by
|
|
49
|
+
* the component
|
|
50
|
+
*/
|
|
51
|
+
className: PropTypes.Requireable<string>;
|
|
52
|
+
/**
|
|
53
|
+
* Specify the theme
|
|
54
|
+
*/
|
|
55
|
+
theme: PropTypes.Requireable<string>;
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Get access to the current theme
|
|
60
|
+
*/
|
|
61
|
+
export declare function useTheme(): GlobalThemeProps;
|
|
62
|
+
export {};
|
|
@@ -51,14 +51,13 @@ GlobalTheme.propTypes = {
|
|
|
51
51
|
*/
|
|
52
52
|
theme: PropTypes__default["default"].oneOf(['white', 'g10', 'g90', 'g100'])
|
|
53
53
|
};
|
|
54
|
+
|
|
54
55
|
/**
|
|
55
56
|
* Specify the theme to be applied to a page, or a region in a page
|
|
56
57
|
*/
|
|
57
|
-
|
|
58
58
|
function Theme(_ref2) {
|
|
59
59
|
let {
|
|
60
60
|
as: BaseComponent = 'div',
|
|
61
|
-
children,
|
|
62
61
|
className: customClassName,
|
|
63
62
|
theme,
|
|
64
63
|
...rest
|
|
@@ -76,13 +75,14 @@ function Theme(_ref2) {
|
|
|
76
75
|
theme
|
|
77
76
|
};
|
|
78
77
|
}, [theme]);
|
|
78
|
+
const BaseComponentAsAny = BaseComponent;
|
|
79
79
|
return /*#__PURE__*/React__default["default"].createElement(ThemeContext.Provider, {
|
|
80
80
|
value: value
|
|
81
81
|
}, /*#__PURE__*/React__default["default"].createElement(LayerContext.LayerContext.Provider, {
|
|
82
82
|
value: 1
|
|
83
|
-
}, /*#__PURE__*/React__default["default"].createElement(
|
|
83
|
+
}, /*#__PURE__*/React__default["default"].createElement(BaseComponentAsAny, _rollupPluginBabelHelpers["extends"]({}, rest, {
|
|
84
84
|
className: className
|
|
85
|
-
})
|
|
85
|
+
}))));
|
|
86
86
|
}
|
|
87
87
|
Theme.propTypes = {
|
|
88
88
|
/**
|
|
@@ -11,6 +11,9 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
11
11
|
|
|
12
12
|
var PropTypes = require('prop-types');
|
|
13
13
|
var React = require('react');
|
|
14
|
+
var useEvent = require('../../internal/useEvent.js');
|
|
15
|
+
var match = require('../../internal/keyboard/match.js');
|
|
16
|
+
var keys = require('../../internal/keyboard/keys.js');
|
|
14
17
|
|
|
15
18
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
16
19
|
|
|
@@ -24,6 +27,11 @@ const HeaderContainer = _ref => {
|
|
|
24
27
|
} = _ref;
|
|
25
28
|
//state for expandable sidenav
|
|
26
29
|
const [isSideNavExpandedState, setIsSideNavExpandedState] = React.useState(isSideNavExpanded);
|
|
30
|
+
useEvent.useEvent(window, 'keydown', event => {
|
|
31
|
+
if (match.match(event, keys.Escape)) {
|
|
32
|
+
setIsSideNavExpandedState(false);
|
|
33
|
+
}
|
|
34
|
+
});
|
|
27
35
|
const handleHeaderMenuButtonClick = React.useCallback(() => {
|
|
28
36
|
setIsSideNavExpandedState(prevIsSideNavExpanded => !prevIsSideNavExpanded);
|
|
29
37
|
}, [setIsSideNavExpandedState]);
|
|
@@ -0,0 +1,38 @@
|
|
|
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 { type ComponentProps } from 'react';
|
|
8
|
+
import PropTypes from 'prop-types';
|
|
9
|
+
type HeaderMenuButtonBaseProps = Omit<ComponentProps<'button'>, 'title' | 'type'>;
|
|
10
|
+
interface HeaderMenuButtonProps extends HeaderMenuButtonBaseProps {
|
|
11
|
+
'aria-label'?: string;
|
|
12
|
+
'aria-labelledby'?: string;
|
|
13
|
+
className?: string;
|
|
14
|
+
renderMenuIcon?: JSX.Element;
|
|
15
|
+
renderCloseIcon?: JSX.Element;
|
|
16
|
+
isActive?: boolean;
|
|
17
|
+
isCollapsible?: boolean;
|
|
18
|
+
}
|
|
19
|
+
declare function HeaderMenuButton({ 'aria-label': ariaLabel, 'aria-labelledby': ariaLabelledBy, className: customClassName, renderMenuIcon, renderCloseIcon, isActive, isCollapsible, ...rest }: HeaderMenuButtonProps): JSX.Element;
|
|
20
|
+
declare namespace HeaderMenuButton {
|
|
21
|
+
var propTypes: {
|
|
22
|
+
/**
|
|
23
|
+
* Optionally provide a custom class name that is applied to the underlying
|
|
24
|
+
* button
|
|
25
|
+
*/
|
|
26
|
+
className: PropTypes.Requireable<string>;
|
|
27
|
+
/**
|
|
28
|
+
* Specify whether the menu button is "active".
|
|
29
|
+
*/
|
|
30
|
+
isActive: PropTypes.Requireable<boolean>;
|
|
31
|
+
/**
|
|
32
|
+
* Optionally provide an onClick handler that is called when the underlying
|
|
33
|
+
* button fires it's onclick event
|
|
34
|
+
*/
|
|
35
|
+
onClick: PropTypes.Requireable<(...args: any[]) => any>;
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
export default HeaderMenuButton;
|
|
@@ -24,7 +24,6 @@ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
|
|
24
24
|
var PropTypes__default = /*#__PURE__*/_interopDefaultLegacy(PropTypes);
|
|
25
25
|
|
|
26
26
|
var _Menu, _Close;
|
|
27
|
-
|
|
28
27
|
function HeaderMenuButton(_ref) {
|
|
29
28
|
let {
|
|
30
29
|
'aria-label': ariaLabel,
|
|
@@ -32,38 +31,34 @@ function HeaderMenuButton(_ref) {
|
|
|
32
31
|
className: customClassName,
|
|
33
32
|
renderMenuIcon,
|
|
34
33
|
renderCloseIcon,
|
|
35
|
-
onClick,
|
|
36
34
|
isActive,
|
|
37
35
|
isCollapsible,
|
|
38
36
|
...rest
|
|
39
37
|
} = _ref;
|
|
40
38
|
const prefix = usePrefix.usePrefix();
|
|
41
|
-
const className = cx__default["default"]({
|
|
42
|
-
|
|
39
|
+
const className = cx__default["default"]({ ...(typeof customClassName === 'string' && {
|
|
40
|
+
[customClassName]: !!customClassName
|
|
41
|
+
}),
|
|
43
42
|
[`${prefix}--header__action`]: true,
|
|
44
43
|
[`${prefix}--header__menu-trigger`]: true,
|
|
45
44
|
[`${prefix}--header__action--active`]: isActive,
|
|
46
45
|
[`${prefix}--header__menu-toggle`]: true,
|
|
47
46
|
[`${prefix}--header__menu-toggle__hidden`]: !isCollapsible
|
|
48
47
|
});
|
|
49
|
-
const accessibilityLabel = {
|
|
50
|
-
'aria-label': ariaLabel,
|
|
51
|
-
'aria-labelledby': ariaLabelledBy
|
|
52
|
-
};
|
|
53
48
|
const menuIcon = renderMenuIcon ? renderMenuIcon : _Menu || (_Menu = /*#__PURE__*/React__default["default"].createElement(iconsReact.Menu, {
|
|
54
49
|
size: 20
|
|
55
50
|
}));
|
|
56
51
|
const closeIcon = renderCloseIcon ? renderCloseIcon : _Close || (_Close = /*#__PURE__*/React__default["default"].createElement(iconsReact.Close, {
|
|
57
52
|
size: 20
|
|
58
53
|
}));
|
|
59
|
-
return /*#__PURE__*/React__default["default"].createElement("button", _rollupPluginBabelHelpers["extends"]({}, rest,
|
|
54
|
+
return /*#__PURE__*/React__default["default"].createElement("button", _rollupPluginBabelHelpers["extends"]({}, rest, {
|
|
55
|
+
"aria-label": ariaLabel,
|
|
56
|
+
"aria-labelledby": ariaLabelledBy,
|
|
60
57
|
className: className,
|
|
61
58
|
title: ariaLabel,
|
|
62
|
-
type: "button"
|
|
63
|
-
onClick: onClick
|
|
59
|
+
type: "button"
|
|
64
60
|
}), isActive ? closeIcon : menuIcon);
|
|
65
61
|
}
|
|
66
|
-
|
|
67
62
|
HeaderMenuButton.propTypes = {
|
|
68
63
|
/**
|
|
69
64
|
* Required props for accessibility label on the underlying menu button
|
|
@@ -0,0 +1,24 @@
|
|
|
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 { type ComponentProps } from 'react';
|
|
8
|
+
import PropTypes from 'prop-types';
|
|
9
|
+
type HeaderNavigationProps = ComponentProps<'nav'>;
|
|
10
|
+
declare function HeaderNavigation({ 'aria-label': ariaLabel, 'aria-labelledby': ariaLabelledBy, children, className: customClassName, ...rest }: HeaderNavigationProps): JSX.Element;
|
|
11
|
+
declare namespace HeaderNavigation {
|
|
12
|
+
var propTypes: {
|
|
13
|
+
/**
|
|
14
|
+
* Provide valid children of HeaderNavigation, for example `HeaderMenuItem`
|
|
15
|
+
* or `HeaderMenu`
|
|
16
|
+
*/
|
|
17
|
+
children: PropTypes.Requireable<PropTypes.ReactNodeLike>;
|
|
18
|
+
/**
|
|
19
|
+
* Optionally provide a custom class to apply to the underlying <nav> node
|
|
20
|
+
*/
|
|
21
|
+
className: PropTypes.Requireable<string>;
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
export default HeaderNavigation;
|
|
@@ -22,29 +22,24 @@ var cx__default = /*#__PURE__*/_interopDefaultLegacy(cx);
|
|
|
22
22
|
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
|
23
23
|
var PropTypes__default = /*#__PURE__*/_interopDefaultLegacy(PropTypes);
|
|
24
24
|
|
|
25
|
-
function HeaderNavigation(
|
|
26
|
-
|
|
25
|
+
function HeaderNavigation(_ref) {
|
|
26
|
+
let {
|
|
27
27
|
'aria-label': ariaLabel,
|
|
28
28
|
'aria-labelledby': ariaLabelledBy,
|
|
29
29
|
children,
|
|
30
30
|
className: customClassName,
|
|
31
31
|
...rest
|
|
32
|
-
} =
|
|
32
|
+
} = _ref;
|
|
33
33
|
const prefix = usePrefix.usePrefix();
|
|
34
|
-
const className = cx__default["default"](`${prefix}--header__nav`, customClassName);
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
'aria-label': ariaLabel,
|
|
39
|
-
'aria-labelledby': ariaLabelledBy
|
|
40
|
-
};
|
|
41
|
-
return /*#__PURE__*/React__default["default"].createElement("nav", _rollupPluginBabelHelpers["extends"]({}, rest, accessibilityLabel, {
|
|
34
|
+
const className = cx__default["default"](`${prefix}--header__nav`, customClassName);
|
|
35
|
+
return /*#__PURE__*/React__default["default"].createElement("nav", _rollupPluginBabelHelpers["extends"]({}, rest, {
|
|
36
|
+
"aria-label": ariaLabel,
|
|
37
|
+
"aria-labelledby": ariaLabelledBy,
|
|
42
38
|
className: className
|
|
43
39
|
}), /*#__PURE__*/React__default["default"].createElement("ul", {
|
|
44
40
|
className: `${prefix}--header__menu-bar`
|
|
45
41
|
}, children));
|
|
46
42
|
}
|
|
47
|
-
|
|
48
43
|
HeaderNavigation.propTypes = {
|
|
49
44
|
/**
|
|
50
45
|
* Required props for accessibility label on the underlying menu
|
|
@@ -63,5 +58,4 @@ HeaderNavigation.propTypes = {
|
|
|
63
58
|
className: PropTypes__default["default"].string
|
|
64
59
|
};
|
|
65
60
|
|
|
66
|
-
exports.HeaderNavigation = HeaderNavigation;
|
|
67
61
|
exports["default"] = HeaderNavigation;
|
|
@@ -0,0 +1,33 @@
|
|
|
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 { type ReactNode } from 'react';
|
|
8
|
+
import PropTypes from 'prop-types';
|
|
9
|
+
interface HeaderSideNavItemsProps {
|
|
10
|
+
className?: string | undefined;
|
|
11
|
+
children?: ReactNode;
|
|
12
|
+
hasDivider?: boolean | undefined;
|
|
13
|
+
}
|
|
14
|
+
declare function HeaderSideNavItems({ className: customClassName, children, hasDivider, }: HeaderSideNavItemsProps): JSX.Element;
|
|
15
|
+
declare namespace HeaderSideNavItems {
|
|
16
|
+
var propTypes: {
|
|
17
|
+
/**
|
|
18
|
+
* The child nodes to be rendered
|
|
19
|
+
*/
|
|
20
|
+
children: PropTypes.Requireable<PropTypes.ReactNodeLike>;
|
|
21
|
+
/**
|
|
22
|
+
* Optionally provide a custom class name that is applied to the underlying
|
|
23
|
+
* button
|
|
24
|
+
*/
|
|
25
|
+
className: PropTypes.Requireable<string>;
|
|
26
|
+
/**
|
|
27
|
+
* Optionally specify if container will have a bottom divider to differentiate
|
|
28
|
+
* between original sidenav items and header menu items. False by default.
|
|
29
|
+
*/
|
|
30
|
+
hasDivider: PropTypes.Requireable<boolean>;
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
export default HeaderSideNavItems;
|
|
@@ -20,11 +20,11 @@ var cx__default = /*#__PURE__*/_interopDefaultLegacy(cx);
|
|
|
20
20
|
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
|
21
21
|
var PropTypes__default = /*#__PURE__*/_interopDefaultLegacy(PropTypes);
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
function HeaderSideNavItems(_ref) {
|
|
24
24
|
let {
|
|
25
25
|
className: customClassName,
|
|
26
26
|
children,
|
|
27
|
-
hasDivider
|
|
27
|
+
hasDivider = false
|
|
28
28
|
} = _ref;
|
|
29
29
|
const prefix = usePrefix.usePrefix();
|
|
30
30
|
const className = cx__default["default"]({
|
|
@@ -34,8 +34,7 @@ const HeaderSideNavItems = _ref => {
|
|
|
34
34
|
return /*#__PURE__*/React__default["default"].createElement("ul", {
|
|
35
35
|
className: className
|
|
36
36
|
}, children);
|
|
37
|
-
}
|
|
38
|
-
|
|
37
|
+
}
|
|
39
38
|
HeaderSideNavItems.propTypes = {
|
|
40
39
|
/**
|
|
41
40
|
* The child nodes to be rendered
|
|
@@ -54,9 +53,5 @@ HeaderSideNavItems.propTypes = {
|
|
|
54
53
|
*/
|
|
55
54
|
hasDivider: PropTypes__default["default"].bool
|
|
56
55
|
};
|
|
57
|
-
HeaderSideNavItems.defaultProps = {
|
|
58
|
-
hasDivider: false
|
|
59
|
-
};
|
|
60
|
-
var HeaderSideNavItems$1 = HeaderSideNavItems;
|
|
61
56
|
|
|
62
|
-
exports["default"] = HeaderSideNavItems
|
|
57
|
+
exports["default"] = HeaderSideNavItems;
|
|
@@ -0,0 +1,21 @@
|
|
|
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 React, { type ComponentProps, type FocusEvent, type KeyboardEvent, type MouseEventHandler } from 'react';
|
|
8
|
+
interface SideNavProps extends ComponentProps<'nav'> {
|
|
9
|
+
expanded?: boolean | undefined;
|
|
10
|
+
defaultExpanded?: boolean | undefined;
|
|
11
|
+
isChildOfHeader?: boolean | undefined;
|
|
12
|
+
onToggle?: (event: FocusEvent<HTMLElement> | KeyboardEvent<HTMLElement> | boolean, value: boolean) => void | undefined;
|
|
13
|
+
isFixedNav?: boolean | undefined;
|
|
14
|
+
isRail?: boolean | undefined;
|
|
15
|
+
isPersistent?: boolean | undefined;
|
|
16
|
+
addFocusListeners?: boolean | undefined;
|
|
17
|
+
addMouseListeners?: boolean | undefined;
|
|
18
|
+
onOverlayClick?: MouseEventHandler<HTMLDivElement> | undefined;
|
|
19
|
+
}
|
|
20
|
+
declare const SideNav: React.ForwardRefExoticComponent<Pick<SideNavProps, "children" | "className" | "slot" | "style" | "title" | "dir" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "suppressHydrationWarning" | "accessKey" | "onToggle" | "key" | "id" | "onAnimationEnd" | "aria-controls" | "aria-expanded" | "onClick" | "onKeyDown" | "contentEditable" | "contextMenu" | "draggable" | "hidden" | "lang" | "placeholder" | "spellCheck" | "tabIndex" | "translate" | "radioGroup" | "role" | "about" | "datatype" | "inlist" | "prefix" | "property" | "resource" | "typeof" | "vocab" | "autoCapitalize" | "autoCorrect" | "autoSave" | "color" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "inputMode" | "is" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colspan" | "aria-current" | "aria-describedby" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocus" | "onFocusCapture" | "onBlur" | "onBlurCapture" | "onChange" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerEnterCapture" | "onPointerLeave" | "onPointerLeaveCapture" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onTransitionEnd" | "onTransitionEndCapture" | "expanded" | "defaultExpanded" | "isChildOfHeader" | "isFixedNav" | "isRail" | "isPersistent" | "addFocusListeners" | "addMouseListeners" | "onOverlayClick"> & React.RefAttributes<HTMLElement>>;
|
|
21
|
+
export default SideNav;
|
|
@@ -16,6 +16,8 @@ var PropTypes = require('prop-types');
|
|
|
16
16
|
var AriaPropTypes = require('../../prop-types/AriaPropTypes.js');
|
|
17
17
|
var _utils = require('./_utils.js');
|
|
18
18
|
var usePrefix = require('../../internal/usePrefix.js');
|
|
19
|
+
var match = require('../../internal/keyboard/match.js');
|
|
20
|
+
var keys = require('../../internal/keyboard/keys.js');
|
|
19
21
|
|
|
20
22
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
21
23
|
|
|
@@ -25,26 +27,26 @@ var PropTypes__default = /*#__PURE__*/_interopDefaultLegacy(PropTypes);
|
|
|
25
27
|
|
|
26
28
|
// import SideNavFooter from './SideNavFooter';
|
|
27
29
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
+
function SideNavRenderFunction(_ref, ref) {
|
|
31
|
+
let {
|
|
30
32
|
expanded: expandedProp,
|
|
31
|
-
defaultExpanded,
|
|
32
|
-
isChildOfHeader,
|
|
33
|
+
defaultExpanded = false,
|
|
34
|
+
isChildOfHeader = true,
|
|
33
35
|
'aria-label': ariaLabel,
|
|
34
36
|
'aria-labelledby': ariaLabelledBy,
|
|
35
37
|
children,
|
|
36
38
|
onToggle,
|
|
37
39
|
className: customClassName,
|
|
38
40
|
// TO-DO: comment back in when footer is added for rails
|
|
39
|
-
// translateById: t,
|
|
40
|
-
isFixedNav,
|
|
41
|
+
// translateById: t = (id) => translations[id],
|
|
42
|
+
isFixedNav = false,
|
|
41
43
|
isRail,
|
|
42
|
-
isPersistent,
|
|
43
|
-
addFocusListeners,
|
|
44
|
-
addMouseListeners,
|
|
44
|
+
isPersistent = true,
|
|
45
|
+
addFocusListeners = true,
|
|
46
|
+
addMouseListeners = true,
|
|
45
47
|
onOverlayClick,
|
|
46
48
|
...other
|
|
47
|
-
} =
|
|
49
|
+
} = _ref;
|
|
48
50
|
const prefix = usePrefix.usePrefix();
|
|
49
51
|
const {
|
|
50
52
|
current: controlled
|
|
@@ -77,12 +79,11 @@ const SideNav = /*#__PURE__*/React__default["default"].forwardRef(function SideN
|
|
|
77
79
|
// ? t('carbon.sidenav.state.open')
|
|
78
80
|
// : t('carbon.sidenav.state.closed');
|
|
79
81
|
|
|
80
|
-
const className = cx__default["default"]({
|
|
82
|
+
const className = cx__default["default"](customClassName, {
|
|
81
83
|
[`${prefix}--side-nav`]: true,
|
|
82
84
|
[`${prefix}--side-nav--expanded`]: expanded || expandedViaHoverState,
|
|
83
85
|
[`${prefix}--side-nav--collapsed`]: !expanded && isFixedNav,
|
|
84
86
|
[`${prefix}--side-nav--rail`]: isRail,
|
|
85
|
-
[customClassName]: !!customClassName,
|
|
86
87
|
[`${prefix}--side-nav--ux`]: isChildOfHeader,
|
|
87
88
|
[`${prefix}--side-nav--hidden`]: !isPersistent
|
|
88
89
|
});
|
|
@@ -94,19 +95,25 @@ const SideNav = /*#__PURE__*/React__default["default"].forwardRef(function SideN
|
|
|
94
95
|
|
|
95
96
|
if (isRail) {
|
|
96
97
|
childrenToRender = React__default["default"].Children.map(children, child => {
|
|
97
|
-
var _child$type, _child$type2;
|
|
98
|
-
|
|
99
98
|
// if we are controlled, check for if we have hovered over or the expanded state, else just use the expanded state (uncontrolled)
|
|
100
|
-
|
|
99
|
+
const currentExpansionState = controlled ? expandedViaHoverState || expanded : expanded;
|
|
100
|
+
|
|
101
|
+
if ( /*#__PURE__*/React.isValidElement(child)) {
|
|
102
|
+
var _childJsxElement$type, _childJsxElement$type2;
|
|
103
|
+
|
|
104
|
+
const childJsxElement = child; // avoid spreading `isSideNavExpanded` to non-Carbon UI Shell children
|
|
105
|
+
|
|
106
|
+
return /*#__PURE__*/React__default["default"].cloneElement(childJsxElement, { ...(_utils.CARBON_SIDENAV_ITEMS.includes(((_childJsxElement$type = childJsxElement.type) === null || _childJsxElement$type === void 0 ? void 0 : _childJsxElement$type.displayName) ?? ((_childJsxElement$type2 = childJsxElement.type) === null || _childJsxElement$type2 === void 0 ? void 0 : _childJsxElement$type2.name)) ? {
|
|
107
|
+
isSideNavExpanded: currentExpansionState
|
|
108
|
+
} : {})
|
|
109
|
+
});
|
|
110
|
+
}
|
|
101
111
|
|
|
102
|
-
return
|
|
103
|
-
isSideNavExpanded: currentExpansionState
|
|
104
|
-
} : {})
|
|
105
|
-
});
|
|
112
|
+
return child;
|
|
106
113
|
});
|
|
107
114
|
}
|
|
108
115
|
|
|
109
|
-
|
|
116
|
+
const eventHandlers = {};
|
|
110
117
|
|
|
111
118
|
if (addFocusListeners) {
|
|
112
119
|
eventHandlers.onFocus = event => {
|
|
@@ -120,6 +127,12 @@ const SideNav = /*#__PURE__*/React__default["default"].forwardRef(function SideN
|
|
|
120
127
|
handleToggle(event, false);
|
|
121
128
|
}
|
|
122
129
|
};
|
|
130
|
+
|
|
131
|
+
eventHandlers.onKeyDown = event => {
|
|
132
|
+
if (match.match(event, keys.Escape)) {
|
|
133
|
+
handleToggle(event, false);
|
|
134
|
+
}
|
|
135
|
+
};
|
|
123
136
|
}
|
|
124
137
|
|
|
125
138
|
if (addMouseListeners && isRail) {
|
|
@@ -138,24 +151,10 @@ const SideNav = /*#__PURE__*/React__default["default"].forwardRef(function SideN
|
|
|
138
151
|
ref: ref,
|
|
139
152
|
className: `${prefix}--side-nav__navigation ${className}`
|
|
140
153
|
}, accessibilityLabel, eventHandlers, other), childrenToRender));
|
|
141
|
-
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
const SideNav = /*#__PURE__*/React__default["default"].forwardRef(SideNavRenderFunction);
|
|
142
157
|
SideNav.displayName = 'SideNav';
|
|
143
|
-
SideNav.defaultProps = {
|
|
144
|
-
// TO-DO: comment back in when footer is added for rails
|
|
145
|
-
// translateById: (id) => {
|
|
146
|
-
// const translations = {
|
|
147
|
-
// 'carbon.sidenav.state.open': 'Close',
|
|
148
|
-
// 'carbon.sidenav.state.closed': 'Open',
|
|
149
|
-
// };
|
|
150
|
-
// return translations[id];
|
|
151
|
-
// },
|
|
152
|
-
defaultExpanded: false,
|
|
153
|
-
isChildOfHeader: true,
|
|
154
|
-
isFixedNav: false,
|
|
155
|
-
isPersistent: true,
|
|
156
|
-
addFocusListeners: true,
|
|
157
|
-
addMouseListeners: true
|
|
158
|
-
};
|
|
159
158
|
SideNav.propTypes = {
|
|
160
159
|
/**
|
|
161
160
|
* Required props for accessibility label on the underlying menu
|
|
@@ -34,6 +34,7 @@ const SideNavHeader = _ref => {
|
|
|
34
34
|
}, /*#__PURE__*/React__default["default"].createElement(SideNavIcon["default"], null, /*#__PURE__*/React__default["default"].createElement(IconElement, null)), children);
|
|
35
35
|
};
|
|
36
36
|
|
|
37
|
+
SideNavHeader.displayName = 'SideNavHeader';
|
|
37
38
|
SideNavHeader.propTypes = {
|
|
38
39
|
/**
|
|
39
40
|
* The child nodes to be rendered
|