@atlaskit/menu 1.1.3 → 1.2.2
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/CHANGELOG.md +53 -0
- package/dist/cjs/internal/components/menu-item-primitive.js +200 -0
- package/dist/cjs/menu-item/button-item.js +31 -25
- package/dist/cjs/menu-item/custom-item.js +31 -32
- package/dist/cjs/menu-item/heading-item.js +25 -7
- package/dist/cjs/menu-item/link-item.js +50 -45
- package/dist/cjs/menu-item/skeleton-heading-item.js +42 -14
- package/dist/cjs/menu-item/skeleton-item.js +93 -13
- package/dist/cjs/menu-section/menu-group.js +11 -8
- package/dist/cjs/menu-section/section.js +83 -29
- package/dist/cjs/version.json +1 -1
- package/dist/es2019/internal/components/menu-item-primitive.js +180 -0
- package/dist/es2019/menu-item/button-item.js +28 -21
- package/dist/es2019/menu-item/custom-item.js +32 -24
- package/dist/es2019/menu-item/heading-item.js +22 -6
- package/dist/es2019/menu-item/link-item.js +31 -26
- package/dist/es2019/menu-item/skeleton-heading-item.js +37 -11
- package/dist/es2019/menu-item/skeleton-item.js +89 -11
- package/dist/es2019/menu-section/menu-group.js +12 -8
- package/dist/es2019/menu-section/section.js +83 -31
- package/dist/es2019/version.json +1 -1
- package/dist/esm/internal/components/menu-item-primitive.js +184 -0
- package/dist/esm/menu-item/button-item.js +30 -24
- package/dist/esm/menu-item/custom-item.js +32 -26
- package/dist/esm/menu-item/heading-item.js +22 -8
- package/dist/esm/menu-item/link-item.js +49 -45
- package/dist/esm/menu-item/skeleton-heading-item.js +38 -14
- package/dist/esm/menu-item/skeleton-item.js +89 -13
- package/dist/esm/menu-section/menu-group.js +12 -8
- package/dist/esm/menu-section/section.js +82 -32
- package/dist/esm/version.json +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/internal/components/menu-item-primitive.d.ts +17 -0
- package/dist/types/menu-item/button-item.d.ts +1 -1
- package/dist/types/menu-item/custom-item.d.ts +2 -1
- package/dist/types/menu-item/skeleton-heading-item.d.ts +1 -2
- package/dist/types/menu-item/skeleton-item.d.ts +1 -2
- package/dist/types/types.d.ts +27 -7
- package/package.json +4 -2
- package/dist/cjs/internal/components/base-item.js +0 -65
- package/dist/cjs/internal/styles/menu-item/base-item.js +0 -152
- package/dist/cjs/internal/styles/menu-item/button-item.js +0 -28
- package/dist/cjs/internal/styles/menu-item/custom-item.js +0 -24
- package/dist/cjs/internal/styles/menu-item/heading-item.js +0 -28
- package/dist/cjs/internal/styles/menu-item/link-item.js +0 -22
- package/dist/cjs/internal/styles/menu-item/skeleton-heading-item.js +0 -50
- package/dist/cjs/internal/styles/menu-item/skeleton-item.js +0 -98
- package/dist/cjs/internal/styles/menu-section/menu-group.js +0 -24
- package/dist/cjs/internal/styles/menu-section/section.js +0 -83
- package/dist/es2019/internal/components/base-item.js +0 -51
- package/dist/es2019/internal/styles/menu-item/base-item.js +0 -122
- package/dist/es2019/internal/styles/menu-item/button-item.js +0 -9
- package/dist/es2019/internal/styles/menu-item/custom-item.js +0 -5
- package/dist/es2019/internal/styles/menu-item/heading-item.js +0 -16
- package/dist/es2019/internal/styles/menu-item/link-item.js +0 -3
- package/dist/es2019/internal/styles/menu-item/skeleton-heading-item.js +0 -25
- package/dist/es2019/internal/styles/menu-item/skeleton-item.js +0 -75
- package/dist/es2019/internal/styles/menu-section/menu-group.js +0 -14
- package/dist/es2019/internal/styles/menu-section/section.js +0 -62
- package/dist/esm/internal/components/base-item.js +0 -55
- package/dist/esm/internal/styles/menu-item/base-item.js +0 -124
- package/dist/esm/internal/styles/menu-item/button-item.js +0 -16
- package/dist/esm/internal/styles/menu-item/custom-item.js +0 -12
- package/dist/esm/internal/styles/menu-item/heading-item.js +0 -16
- package/dist/esm/internal/styles/menu-item/link-item.js +0 -10
- package/dist/esm/internal/styles/menu-item/skeleton-heading-item.js +0 -33
- package/dist/esm/internal/styles/menu-item/skeleton-item.js +0 -81
- package/dist/esm/internal/styles/menu-section/menu-group.js +0 -15
- package/dist/esm/internal/styles/menu-section/section.js +0 -67
- package/dist/types/internal/components/base-item.d.ts +0 -9
- package/dist/types/internal/styles/menu-item/base-item.d.ts +0 -23
- package/dist/types/internal/styles/menu-item/button-item.d.ts +0 -2
- package/dist/types/internal/styles/menu-item/custom-item.d.ts +0 -2
- package/dist/types/internal/styles/menu-item/heading-item.d.ts +0 -2
- package/dist/types/internal/styles/menu-item/link-item.d.ts +0 -2
- package/dist/types/internal/styles/menu-item/skeleton-heading-item.d.ts +0 -2
- package/dist/types/internal/styles/menu-item/skeleton-item.d.ts +0 -2
- package/dist/types/internal/styles/menu-section/menu-group.d.ts +0 -3
- package/dist/types/internal/styles/menu-section/section.d.ts +0 -2
|
@@ -1,18 +1,44 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
3
5
|
Object.defineProperty(exports, "__esModule", {
|
|
4
6
|
value: true
|
|
5
7
|
});
|
|
6
8
|
exports.default = void 0;
|
|
7
9
|
|
|
8
|
-
var _react = require("react");
|
|
9
|
-
|
|
10
10
|
var _core = require("@emotion/core");
|
|
11
11
|
|
|
12
|
-
var
|
|
12
|
+
var _noop = _interopRequireDefault(require("@atlaskit/ds-lib/noop"));
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
var _colors = require("@atlaskit/theme/colors");
|
|
15
15
|
|
|
16
|
+
var _constants = require("@atlaskit/theme/constants");
|
|
17
|
+
|
|
18
|
+
var _tokens = require("@atlaskit/tokens");
|
|
19
|
+
|
|
20
|
+
/** @jsx jsx */
|
|
21
|
+
var skeletonStyles = (0, _core.css)({
|
|
22
|
+
padding: "0 ".concat((0, _constants.gridSize)() * 2.5, "px"),
|
|
23
|
+
'::after': {
|
|
24
|
+
display: 'block',
|
|
25
|
+
width: '30%',
|
|
26
|
+
height: (0, _constants.gridSize)(),
|
|
27
|
+
backgroundColor: (0, _tokens.token)('color.background.subtleNeutral.resting', (0, _colors.skeleton)()),
|
|
28
|
+
borderRadius: 100,
|
|
29
|
+
content: '""'
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
var defaultWidthStyles = (0, _core.css)({
|
|
33
|
+
'::after': {
|
|
34
|
+
width: '30%'
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
var customWidthStyles = (0, _core.css)({
|
|
38
|
+
'::after': {
|
|
39
|
+
width: 'var(--width)'
|
|
40
|
+
}
|
|
41
|
+
});
|
|
16
42
|
/**
|
|
17
43
|
* __Skeleton heading item__
|
|
18
44
|
*
|
|
@@ -21,20 +47,22 @@ var _skeletonHeadingItem = require("../internal/styles/menu-item/skeleton-headin
|
|
|
21
47
|
* - [Examples](https://atlaskit.atlassian.com/packages/design-system/menu/docs/skeleton-heading-item)
|
|
22
48
|
* - [Code](https://atlaskit.atlassian.com/packages/design-system/menu)
|
|
23
49
|
*/
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
50
|
+
|
|
51
|
+
var SkeletonHeadingItem = function SkeletonHeadingItem(_ref) {
|
|
52
|
+
var testId = _ref.testId,
|
|
53
|
+
width = _ref.width,
|
|
28
54
|
_ref$cssFn = _ref.cssFn,
|
|
29
|
-
cssFn = _ref$cssFn === void 0 ?
|
|
30
|
-
return {};
|
|
31
|
-
} : _ref$cssFn;
|
|
55
|
+
cssFn = _ref$cssFn === void 0 ? _noop.default : _ref$cssFn;
|
|
32
56
|
return (0, _core.jsx)("div", {
|
|
33
|
-
|
|
34
|
-
|
|
57
|
+
style: {
|
|
58
|
+
'--width': width
|
|
59
|
+
},
|
|
60
|
+
css: [skeletonStyles, width ? customWidthStyles : defaultWidthStyles, // eslint-disable-next-line @repo/internal/react/consistent-css-prop-usage
|
|
61
|
+
cssFn(undefined)],
|
|
35
62
|
"data-ds--menu--skeleton-heading-item": true,
|
|
36
63
|
"data-testid": testId
|
|
37
64
|
});
|
|
38
|
-
}
|
|
65
|
+
};
|
|
66
|
+
|
|
39
67
|
var _default = SkeletonHeadingItem;
|
|
40
68
|
exports.default = _default;
|
|
@@ -1,18 +1,97 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
3
5
|
Object.defineProperty(exports, "__esModule", {
|
|
4
6
|
value: true
|
|
5
7
|
});
|
|
6
8
|
exports.default = void 0;
|
|
7
9
|
|
|
8
|
-
var _react = require("react");
|
|
9
|
-
|
|
10
10
|
var _core = require("@emotion/core");
|
|
11
11
|
|
|
12
|
-
var
|
|
12
|
+
var _noop = _interopRequireDefault(require("@atlaskit/ds-lib/noop"));
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
var _colors = require("@atlaskit/theme/colors");
|
|
15
|
+
|
|
16
|
+
var _constants = require("@atlaskit/theme/constants");
|
|
17
|
+
|
|
18
|
+
var _tokens = require("@atlaskit/tokens");
|
|
15
19
|
|
|
20
|
+
/** @jsx jsx */
|
|
21
|
+
var gridSize = (0, _constants.gridSize)();
|
|
22
|
+
var borderRadius = (0, _constants.borderRadius)();
|
|
23
|
+
var itemElemSpacing = gridSize * 1.5;
|
|
24
|
+
var itemExpectedElemSize = gridSize * 3;
|
|
25
|
+
var itemMinHeight = gridSize * 5;
|
|
26
|
+
var itemPadding = gridSize * 2.5;
|
|
27
|
+
var skeletonItemElemSize = gridSize * 2.5;
|
|
28
|
+
var itemElemSkeletonOffset = (itemExpectedElemSize - skeletonItemElemSize) / 2;
|
|
29
|
+
var skeletonTextBorderRadius = 100;
|
|
30
|
+
var skeletonContentHeight = 9;
|
|
31
|
+
var skeletonColor = (0, _tokens.token)('color.background.subtleNeutral.resting', (0, _colors.skeleton)());
|
|
32
|
+
var skeletonStyles = (0, _core.css)({
|
|
33
|
+
display: 'flex',
|
|
34
|
+
minHeight: itemMinHeight,
|
|
35
|
+
padding: "0 ".concat(itemPadding, "px"),
|
|
36
|
+
alignItems: 'center',
|
|
37
|
+
pointerEvents: 'none',
|
|
38
|
+
'::after': {
|
|
39
|
+
height: skeletonContentHeight,
|
|
40
|
+
// This is a little bespoke but we need to push everything down 1px
|
|
41
|
+
// because the skeleton content should align to the bottom of the text.
|
|
42
|
+
// Confirm VR test failures before accepting a change.
|
|
43
|
+
marginTop: 1,
|
|
44
|
+
backgroundColor: skeletonColor,
|
|
45
|
+
borderRadius: skeletonTextBorderRadius,
|
|
46
|
+
content: '""'
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
var defaultWidthStyles = (0, _core.css)({
|
|
50
|
+
':nth-of-type(1n)::after': {
|
|
51
|
+
flexBasis: '70%'
|
|
52
|
+
},
|
|
53
|
+
':nth-of-type(2n)::after': {
|
|
54
|
+
flexBasis: '50%'
|
|
55
|
+
},
|
|
56
|
+
':nth-of-type(3n)::after': {
|
|
57
|
+
flexBasis: '60%'
|
|
58
|
+
},
|
|
59
|
+
':nth-of-type(4n)::after': {
|
|
60
|
+
flexBasis: '90%'
|
|
61
|
+
},
|
|
62
|
+
':nth-of-type(5n)::after': {
|
|
63
|
+
flexBasis: '35%'
|
|
64
|
+
},
|
|
65
|
+
':nth-of-type(6n)::after': {
|
|
66
|
+
flexBasis: '77%'
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
var customWidthStyles = (0, _core.css)({
|
|
70
|
+
'::after': {
|
|
71
|
+
flexBasis: 'var(--width)'
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
var beforeElementStyles = (0, _core.css)({
|
|
75
|
+
'::before': {
|
|
76
|
+
width: skeletonItemElemSize,
|
|
77
|
+
height: skeletonItemElemSize,
|
|
78
|
+
marginRight: itemElemSpacing + itemElemSkeletonOffset,
|
|
79
|
+
marginLeft: itemElemSkeletonOffset,
|
|
80
|
+
flexShrink: 0,
|
|
81
|
+
backgroundColor: skeletonColor,
|
|
82
|
+
content: '""'
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
var avatarStyles = (0, _core.css)({
|
|
86
|
+
'::before': {
|
|
87
|
+
borderRadius: '100%'
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
var iconStyles = (0, _core.css)({
|
|
91
|
+
'::before': {
|
|
92
|
+
borderRadius: borderRadius
|
|
93
|
+
}
|
|
94
|
+
});
|
|
16
95
|
/**
|
|
17
96
|
* __Skeleton item__
|
|
18
97
|
*
|
|
@@ -21,22 +100,23 @@ var _skeletonItem = require("../internal/styles/menu-item/skeleton-item");
|
|
|
21
100
|
* - [Examples](https://atlaskit.atlassian.com/packages/design-system/menu/docs/skeleton-item)
|
|
22
101
|
* - [Code](https://atlaskit.atlassian.com/packages/design-system/menu)
|
|
23
102
|
*/
|
|
24
|
-
|
|
103
|
+
|
|
104
|
+
var SkeletonItem = function SkeletonItem(_ref) {
|
|
25
105
|
var hasAvatar = _ref.hasAvatar,
|
|
26
106
|
hasIcon = _ref.hasIcon,
|
|
27
|
-
width = _ref.width,
|
|
28
107
|
testId = _ref.testId,
|
|
29
|
-
|
|
108
|
+
width = _ref.width,
|
|
30
109
|
_ref$cssFn = _ref.cssFn,
|
|
31
|
-
cssFn = _ref$cssFn === void 0 ?
|
|
32
|
-
return {};
|
|
33
|
-
} : _ref$cssFn;
|
|
110
|
+
cssFn = _ref$cssFn === void 0 ? _noop.default : _ref$cssFn;
|
|
34
111
|
return (0, _core.jsx)("div", {
|
|
35
|
-
|
|
36
|
-
|
|
112
|
+
style: {
|
|
113
|
+
'--width': width
|
|
114
|
+
},
|
|
115
|
+
css: [skeletonStyles, (hasAvatar || hasIcon) && beforeElementStyles, hasAvatar && avatarStyles, hasIcon && iconStyles, width ? customWidthStyles : defaultWidthStyles, // eslint-disable-next-line @repo/internal/react/consistent-css-prop-usage
|
|
37
116
|
cssFn(undefined)],
|
|
38
117
|
"data-testid": testId
|
|
39
118
|
});
|
|
40
|
-
}
|
|
119
|
+
};
|
|
120
|
+
|
|
41
121
|
var _default = SkeletonItem;
|
|
42
122
|
exports.default = _default;
|
|
@@ -13,10 +13,12 @@ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/h
|
|
|
13
13
|
|
|
14
14
|
var _core = require("@emotion/core");
|
|
15
15
|
|
|
16
|
-
var _menuGroup = require("../internal/styles/menu-section/menu-group");
|
|
17
|
-
|
|
18
16
|
/** @jsx jsx */
|
|
19
|
-
|
|
17
|
+
var groupStyles = (0, _core.css)({
|
|
18
|
+
display: 'flex',
|
|
19
|
+
flexDirection: 'column',
|
|
20
|
+
overflow: 'auto'
|
|
21
|
+
});
|
|
20
22
|
/**
|
|
21
23
|
* __Menu group__
|
|
22
24
|
*
|
|
@@ -25,6 +27,7 @@ var _menuGroup = require("../internal/styles/menu-section/menu-group");
|
|
|
25
27
|
* - [Examples](https://atlaskit.atlassian.com/packages/design-system/menu/docs/menu-group)
|
|
26
28
|
* - [Code](https://atlaskit.atlassian.com/packages/design-system/menu)
|
|
27
29
|
*/
|
|
30
|
+
|
|
28
31
|
var MenuGroup = function MenuGroup(_ref) {
|
|
29
32
|
var maxWidth = _ref.maxWidth,
|
|
30
33
|
minWidth = _ref.minWidth,
|
|
@@ -33,13 +36,13 @@ var MenuGroup = function MenuGroup(_ref) {
|
|
|
33
36
|
testId = _ref.testId,
|
|
34
37
|
rest = (0, _objectWithoutProperties2.default)(_ref, ["maxWidth", "minWidth", "minHeight", "maxHeight", "testId"]);
|
|
35
38
|
return (0, _core.jsx)("div", (0, _extends2.default)({
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
maxHeight: maxHeight,
|
|
39
|
+
style: {
|
|
40
|
+
minWidth: minWidth,
|
|
39
41
|
maxWidth: maxWidth,
|
|
40
42
|
minHeight: minHeight,
|
|
41
|
-
|
|
42
|
-
}
|
|
43
|
+
maxHeight: maxHeight
|
|
44
|
+
},
|
|
45
|
+
css: groupStyles,
|
|
43
46
|
"data-testid": testId
|
|
44
47
|
}, rest));
|
|
45
48
|
};
|
|
@@ -15,12 +15,78 @@ var _react = require("react");
|
|
|
15
15
|
|
|
16
16
|
var _core = require("@emotion/core");
|
|
17
17
|
|
|
18
|
-
var
|
|
18
|
+
var _colors = require("@atlaskit/theme/colors");
|
|
19
|
+
|
|
20
|
+
var _constants = require("@atlaskit/theme/constants");
|
|
21
|
+
|
|
22
|
+
var _typography = require("@atlaskit/theme/typography");
|
|
23
|
+
|
|
24
|
+
var _tokens = require("@atlaskit/tokens");
|
|
19
25
|
|
|
20
26
|
var _headingItem = _interopRequireDefault(require("../menu-item/heading-item"));
|
|
21
27
|
|
|
22
28
|
/** @jsx jsx */
|
|
29
|
+
var gridSize = (0, _constants.gridSize)();
|
|
30
|
+
var itemHeadingTopMargin = gridSize * 2.5;
|
|
31
|
+
var itemHeadingBottomMargin = gridSize * 0.75; // Skeleton content is slightly shorter than the real content.
|
|
32
|
+
// Because of that we slightly increase the top margin to offset this so the
|
|
33
|
+
// containing size both real and skeleton always equal approx 30px.
|
|
23
34
|
|
|
35
|
+
var itemHeadingContentHeight = _typography.headingSizes.h100.lineHeight;
|
|
36
|
+
var skeletonHeadingHeight = gridSize;
|
|
37
|
+
var skeletonHeadingMarginOffset = 3;
|
|
38
|
+
var skeletonHeadingTopMargin = itemHeadingTopMargin + (itemHeadingContentHeight - skeletonHeadingHeight) - skeletonHeadingMarginOffset; // We want to move the entire body up by 3px without affecting the height of the skeleton container.
|
|
39
|
+
|
|
40
|
+
var skeletonHeadingBottomMargin = itemHeadingBottomMargin + skeletonHeadingMarginOffset;
|
|
41
|
+
var sectionPaddingTopBottom = gridSize * 0.75;
|
|
42
|
+
var VAR_SEPARATOR_COLOR = '--ds-menu-seperator-color';
|
|
43
|
+
var sectionStyles = (0, _core.css)({
|
|
44
|
+
'&::before, &::after': {
|
|
45
|
+
display: 'block',
|
|
46
|
+
height: sectionPaddingTopBottom,
|
|
47
|
+
content: '""'
|
|
48
|
+
},
|
|
49
|
+
// eslint-disable-next-line @repo/internal/styles/no-nested-styles
|
|
50
|
+
'& [data-ds--menu--heading-item]': {
|
|
51
|
+
marginTop: itemHeadingTopMargin,
|
|
52
|
+
marginBottom: itemHeadingBottomMargin,
|
|
53
|
+
'&:first-of-type': {
|
|
54
|
+
marginTop: itemHeadingTopMargin - sectionPaddingTopBottom
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
// eslint-disable-next-line @repo/internal/styles/no-nested-styles
|
|
58
|
+
'& [data-ds--menu--skeleton-heading-item]': {
|
|
59
|
+
marginTop: skeletonHeadingTopMargin,
|
|
60
|
+
marginBottom: skeletonHeadingBottomMargin,
|
|
61
|
+
'&:first-of-type': {
|
|
62
|
+
marginTop: skeletonHeadingTopMargin - sectionPaddingTopBottom
|
|
63
|
+
}
|
|
64
|
+
},
|
|
65
|
+
'&:focus': {
|
|
66
|
+
// NOTE: Firefox allows elements that have "overflow: auto" to gain focus (as if it had tab-index="0")
|
|
67
|
+
// We have made a deliberate choice to leave this behaviour as is.
|
|
68
|
+
// This makes the outline go inside by 1px so it can actually be displayed
|
|
69
|
+
// else it gets cut off from the overflow: scroll from the parent menu group.
|
|
70
|
+
outlineOffset: -1
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
var scrollableStyles = (0, _core.css)({
|
|
74
|
+
flexShrink: 1,
|
|
75
|
+
overflow: 'auto'
|
|
76
|
+
});
|
|
77
|
+
var unscrollableStyles = (0, _core.css)({
|
|
78
|
+
flexShrink: 0
|
|
79
|
+
});
|
|
80
|
+
var separatorStyles = (0, _core.css)({
|
|
81
|
+
borderTop: "2px solid var(".concat(VAR_SEPARATOR_COLOR, ", ").concat((0, _tokens.token)('color.border.neutral', _colors.N30A), ")")
|
|
82
|
+
});
|
|
83
|
+
var noSeparatorStyles = (0, _core.css)({
|
|
84
|
+
// this is to ensure that adjacent sections without separators don't get additional margins.
|
|
85
|
+
// eslint-disable-next-line @repo/internal/styles/no-nested-styles
|
|
86
|
+
'[data-section] + &': {
|
|
87
|
+
marginTop: -6
|
|
88
|
+
}
|
|
89
|
+
});
|
|
24
90
|
/**
|
|
25
91
|
* __Section__
|
|
26
92
|
*
|
|
@@ -29,45 +95,33 @@ var _headingItem = _interopRequireDefault(require("../menu-item/heading-item"));
|
|
|
29
95
|
* - [Examples](https://atlaskit.atlassian.com/packages/design-system/menu/docs/section)
|
|
30
96
|
* - [Code](https://atlaskit.atlassian.com/packages/design-system/menu)
|
|
31
97
|
*/
|
|
32
|
-
|
|
33
|
-
function (_ref, ref) {
|
|
98
|
+
|
|
99
|
+
var Section = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
|
|
34
100
|
var children = _ref.children,
|
|
35
101
|
overrides = _ref.overrides,
|
|
36
102
|
title = _ref.title,
|
|
37
103
|
testId = _ref.testId,
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
}), (0, _core.jsx)(_headingItem.default // eslint-disable-next-line @repo/internal/react/no-unsafe-overrides
|
|
104
|
+
isScrollable = _ref.isScrollable,
|
|
105
|
+
hasSeparator = _ref.hasSeparator,
|
|
106
|
+
id = _ref.id,
|
|
107
|
+
rest = (0, _objectWithoutProperties2.default)(_ref, ["children", "overrides", "title", "testId", "isScrollable", "hasSeparator", "id"]);
|
|
108
|
+
var childrenMarkup = title !== undefined ? (0, _core.jsx)(_react.Fragment, null, (0, _core.jsx)(_headingItem.default // eslint-disable-next-line @repo/internal/react/no-unsafe-overrides
|
|
44
109
|
, {
|
|
45
110
|
cssFn: overrides && overrides.HeadingItem && overrides.HeadingItem.cssFn,
|
|
46
111
|
testId: testId && "".concat(testId, "--heading"),
|
|
47
112
|
"aria-hidden": true
|
|
48
|
-
}, title), children) :
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
});
|
|
52
|
-
var SectionBase = /*#__PURE__*/(0, _react.forwardRef)( // Type needed on props to extract types with extract react types.
|
|
53
|
-
function (_ref2, ref) {
|
|
54
|
-
var isScrollable = _ref2.isScrollable,
|
|
55
|
-
hasSeparator = _ref2.hasSeparator,
|
|
56
|
-
testId = _ref2.testId,
|
|
57
|
-
rest = (0, _objectWithoutProperties2.default)(_ref2, ["isScrollable", "hasSeparator", "testId"]);
|
|
58
|
-
return (0, _core.jsx)("div", (0, _extends2.default)({
|
|
59
|
-
// NOTE: Firefox allows elements that have "overflow: auto" to gain focus (as if it had tab-index="0")
|
|
113
|
+
}, title), children) : children;
|
|
114
|
+
return (0, _core.jsx)("div", (0, _extends2.default)({}, rest, {
|
|
115
|
+
id: id // NOTE: Firefox allows elements that have "overflow: auto" to gain focus (as if it had tab-index="0")
|
|
60
116
|
// We have made a deliberate choice to leave this behaviour as is.
|
|
61
|
-
// eslint-disable-next-line @repo/internal/react/consistent-css-prop-usage
|
|
62
|
-
css: (0, _section.sectionCSS)(isScrollable, hasSeparator),
|
|
63
|
-
"data-testid": testId,
|
|
64
|
-
role: "group" // this is being used to target CSS selectors
|
|
65
|
-
// where emotion's API was falling a little short.
|
|
66
117
|
,
|
|
67
|
-
|
|
68
|
-
|
|
118
|
+
css: [sectionStyles, isScrollable ? scrollableStyles : unscrollableStyles, hasSeparator ? separatorStyles : noSeparatorStyles],
|
|
119
|
+
"aria-label": title,
|
|
120
|
+
"data-testid": testId,
|
|
121
|
+
role: "group",
|
|
122
|
+
"data-section": true,
|
|
69
123
|
ref: ref
|
|
70
|
-
}));
|
|
124
|
+
}), childrenMarkup);
|
|
71
125
|
});
|
|
72
126
|
var _default = Section;
|
|
73
127
|
exports.default = _default;
|
package/dist/cjs/version.json
CHANGED
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
/** @jsx jsx */
|
|
2
|
+
import { Fragment } from 'react';
|
|
3
|
+
import { ClassNames, css, jsx } from '@emotion/core';
|
|
4
|
+
import FocusRing from '@atlaskit/focus-ring';
|
|
5
|
+
import { N20, N200, N30 } from '@atlaskit/theme/colors';
|
|
6
|
+
import { fontSize as fontSizeFn, gridSize as gridSizeFn } from '@atlaskit/theme/constants';
|
|
7
|
+
import { headingSizes } from '@atlaskit/theme/typography';
|
|
8
|
+
import { token } from '@atlaskit/tokens';
|
|
9
|
+
|
|
10
|
+
const defaultRender = (Component, props) => jsx(Component, props);
|
|
11
|
+
|
|
12
|
+
const gridSize = gridSizeFn();
|
|
13
|
+
const fontSize = fontSizeFn();
|
|
14
|
+
const itemTopBottomPadding = gridSize;
|
|
15
|
+
const itemSidePadding = gridSize * 2.5;
|
|
16
|
+
const itemElemSpacing = gridSize * 1.5;
|
|
17
|
+
const itemDescriptionSpacing = gridSize * 0.375;
|
|
18
|
+
const itemMinHeight = gridSize * 5;
|
|
19
|
+
const beforeElementStyles = css({
|
|
20
|
+
display: 'flex',
|
|
21
|
+
marginRight: itemElemSpacing,
|
|
22
|
+
alignItems: 'center',
|
|
23
|
+
flexShrink: 0
|
|
24
|
+
});
|
|
25
|
+
const afterElementStyles = css({
|
|
26
|
+
display: 'flex',
|
|
27
|
+
marginLeft: itemElemSpacing,
|
|
28
|
+
alignItems: 'center',
|
|
29
|
+
flexShrink: 0
|
|
30
|
+
});
|
|
31
|
+
const contentStyles = css({
|
|
32
|
+
display: 'flex',
|
|
33
|
+
justifyContent: 'center',
|
|
34
|
+
flexDirection: 'column',
|
|
35
|
+
flexGrow: 1,
|
|
36
|
+
// Fix - avoid clipped text descenders when using standard 16px line-height
|
|
37
|
+
lineHeight: 1.22,
|
|
38
|
+
outline: 'none',
|
|
39
|
+
overflow: 'hidden',
|
|
40
|
+
textAlign: 'left'
|
|
41
|
+
});
|
|
42
|
+
const truncateStyles = css({
|
|
43
|
+
display: 'block',
|
|
44
|
+
overflow: 'hidden',
|
|
45
|
+
textOverflow: 'ellipsis',
|
|
46
|
+
whiteSpace: 'nowrap'
|
|
47
|
+
});
|
|
48
|
+
const wordBreakStyles = css({
|
|
49
|
+
wordBreak: 'break-word'
|
|
50
|
+
});
|
|
51
|
+
const descriptionStyles = css({
|
|
52
|
+
marginTop: itemDescriptionSpacing,
|
|
53
|
+
color: token('color.text.lowEmphasis', N200),
|
|
54
|
+
fontSize: headingSizes.h200.size
|
|
55
|
+
});
|
|
56
|
+
const primitiveStyles = css({
|
|
57
|
+
display: 'flex',
|
|
58
|
+
boxSizing: 'border-box',
|
|
59
|
+
width: '100%',
|
|
60
|
+
minHeight: itemMinHeight,
|
|
61
|
+
margin: 0,
|
|
62
|
+
padding: `${itemTopBottomPadding}px ${itemSidePadding}px`,
|
|
63
|
+
alignItems: 'center',
|
|
64
|
+
border: 0,
|
|
65
|
+
fontSize: fontSize,
|
|
66
|
+
outline: 0,
|
|
67
|
+
textDecoration: 'none',
|
|
68
|
+
userSelect: 'none',
|
|
69
|
+
'::-moz-focus-inner': {
|
|
70
|
+
border: 0
|
|
71
|
+
},
|
|
72
|
+
':hover': {
|
|
73
|
+
textDecoration: 'none'
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
const interactiveStyles = css({
|
|
77
|
+
cursor: 'pointer'
|
|
78
|
+
});
|
|
79
|
+
const unselectedStyles = css({
|
|
80
|
+
backgroundColor: 'transparent',
|
|
81
|
+
color: 'currentColor',
|
|
82
|
+
':visited': {
|
|
83
|
+
color: 'currentColor'
|
|
84
|
+
},
|
|
85
|
+
':hover': {
|
|
86
|
+
backgroundColor: token('color.background.transparentNeutral.hover', N20),
|
|
87
|
+
color: 'currentColor'
|
|
88
|
+
},
|
|
89
|
+
':active': {
|
|
90
|
+
backgroundColor: token('color.background.transparentNeutral.pressed', N30),
|
|
91
|
+
boxShadow: 'none',
|
|
92
|
+
color: 'currentColor'
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
const disabledStyles = css({
|
|
96
|
+
cursor: 'not-allowed',
|
|
97
|
+
'&, :hover, :active': {
|
|
98
|
+
backgroundColor: 'transparent',
|
|
99
|
+
color: token('color.text.disabled', N200)
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
const selectedStyles = css({
|
|
103
|
+
backgroundColor: token('color.background.selected.resting', N20),
|
|
104
|
+
// Suppress the need for a fallback as selected color isn't used in the non-tokens world.
|
|
105
|
+
// When removing fallbacks make sure to remove this supression.
|
|
106
|
+
// eslint-disable-next-line @atlaskit/design-system/ensure-design-token-usage
|
|
107
|
+
color: token('color.text.selected'),
|
|
108
|
+
':visited': {
|
|
109
|
+
// eslint-disable-next-line @atlaskit/design-system/ensure-design-token-usage
|
|
110
|
+
color: token('color.text.selected')
|
|
111
|
+
},
|
|
112
|
+
':hover': {
|
|
113
|
+
backgroundColor: token('color.background.selected.hover', N20),
|
|
114
|
+
// eslint-disable-next-line @atlaskit/design-system/ensure-design-token-usage
|
|
115
|
+
color: token('color.text.selected')
|
|
116
|
+
},
|
|
117
|
+
':active': {
|
|
118
|
+
backgroundColor: token('color.background.selected.pressed', N30),
|
|
119
|
+
// eslint-disable-next-line @atlaskit/design-system/ensure-design-token-usage
|
|
120
|
+
color: token('color.text.selected')
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
/**
|
|
124
|
+
* __Menu item primitive__
|
|
125
|
+
*
|
|
126
|
+
* Menu item primitive contains all the styles for menu items,
|
|
127
|
+
* including support for selected, disabled, and interaction states.
|
|
128
|
+
*
|
|
129
|
+
* Using children as function prop you wire up this to your own host element.
|
|
130
|
+
*
|
|
131
|
+
* ```jsx
|
|
132
|
+
* <MenuItemPrimitive>
|
|
133
|
+
* {({ children, ...props }) => <button {...props}>{children}</button>}
|
|
134
|
+
* </MenuItemPrimitive>
|
|
135
|
+
* ```
|
|
136
|
+
*/
|
|
137
|
+
|
|
138
|
+
const MenuItemPrimitive = ({
|
|
139
|
+
children,
|
|
140
|
+
title,
|
|
141
|
+
description,
|
|
142
|
+
iconAfter,
|
|
143
|
+
iconBefore,
|
|
144
|
+
overrides,
|
|
145
|
+
className,
|
|
146
|
+
shouldTitleWrap = false,
|
|
147
|
+
shouldDescriptionWrap = false,
|
|
148
|
+
isDisabled = false,
|
|
149
|
+
isSelected = false
|
|
150
|
+
}) => {
|
|
151
|
+
const renderTitle = overrides && overrides.Title && overrides.Title.render || defaultRender;
|
|
152
|
+
return jsx(ClassNames, null, ({
|
|
153
|
+
css: cn,
|
|
154
|
+
cx
|
|
155
|
+
}) => {
|
|
156
|
+
return jsx(FocusRing, {
|
|
157
|
+
isInset: true
|
|
158
|
+
}, children({
|
|
159
|
+
className: cx([cn([primitiveStyles, !isDisabled && !isSelected && unselectedStyles, !isDisabled && isSelected && selectedStyles, isDisabled ? disabledStyles : interactiveStyles]), className]),
|
|
160
|
+
children: jsx(Fragment, null, iconBefore && jsx("span", {
|
|
161
|
+
"data-item-elem-before": true,
|
|
162
|
+
css: beforeElementStyles
|
|
163
|
+
}, iconBefore), title && jsx("span", {
|
|
164
|
+
css: contentStyles
|
|
165
|
+
}, renderTitle('span', {
|
|
166
|
+
children: title,
|
|
167
|
+
className: cn(shouldTitleWrap ? wordBreakStyles : truncateStyles),
|
|
168
|
+
'data-item-title': true
|
|
169
|
+
}), description && jsx("span", {
|
|
170
|
+
"data-item-description": true,
|
|
171
|
+
css: [descriptionStyles, shouldDescriptionWrap ? wordBreakStyles : truncateStyles]
|
|
172
|
+
}, description)), iconAfter && jsx("span", {
|
|
173
|
+
"data-item-elem-after": true,
|
|
174
|
+
css: afterElementStyles
|
|
175
|
+
}, iconAfter))
|
|
176
|
+
}));
|
|
177
|
+
});
|
|
178
|
+
};
|
|
179
|
+
|
|
180
|
+
export default MenuItemPrimitive;
|
|
@@ -3,14 +3,14 @@ import _extends from "@babel/runtime/helpers/extends";
|
|
|
3
3
|
/** @jsx jsx */
|
|
4
4
|
import { forwardRef, memo } from 'react';
|
|
5
5
|
import { jsx } from '@emotion/core';
|
|
6
|
-
import
|
|
6
|
+
import noop from '@atlaskit/ds-lib/noop';
|
|
7
|
+
import MenuItemPrimitive from '../internal/components/menu-item-primitive';
|
|
7
8
|
import { useBlurOnMouseDown } from '../internal/hooks/use-blur-on-mouse-down';
|
|
8
|
-
import { buttonItemCSS } from '../internal/styles/menu-item/button-item';
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
11
|
* __Button item__
|
|
12
12
|
*
|
|
13
|
-
* A button item is used to populate a menu with items that
|
|
13
|
+
* A button item is used to populate a menu with items that are buttons.
|
|
14
14
|
*
|
|
15
15
|
* - [Examples](https://atlaskit.atlassian.com/packages/design-system/menu/docs/button-item)
|
|
16
16
|
* - [Code](https://atlaskit.atlassian.com/packages/design-system/menu)
|
|
@@ -19,7 +19,7 @@ const ButtonItem = /*#__PURE__*/memo( /*#__PURE__*/forwardRef( // Type needed on
|
|
|
19
19
|
(props, ref) => {
|
|
20
20
|
const {
|
|
21
21
|
children,
|
|
22
|
-
cssFn =
|
|
22
|
+
cssFn = noop,
|
|
23
23
|
description,
|
|
24
24
|
iconAfter,
|
|
25
25
|
iconBefore,
|
|
@@ -31,7 +31,7 @@ const ButtonItem = /*#__PURE__*/memo( /*#__PURE__*/forwardRef( // Type needed on
|
|
|
31
31
|
onMouseDown,
|
|
32
32
|
shouldTitleWrap,
|
|
33
33
|
shouldDescriptionWrap,
|
|
34
|
-
...
|
|
34
|
+
...rest
|
|
35
35
|
} = props;
|
|
36
36
|
const onMouseDownHandler = useBlurOnMouseDown(onMouseDown);
|
|
37
37
|
|
|
@@ -39,27 +39,34 @@ const ButtonItem = /*#__PURE__*/memo( /*#__PURE__*/forwardRef( // Type needed on
|
|
|
39
39
|
return null;
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
-
return jsx(
|
|
43
|
-
|
|
44
|
-
|
|
42
|
+
return jsx(MenuItemPrimitive, _extends({}, rest, {
|
|
43
|
+
// eslint-disable-next-line @repo/internal/react/no-unsafe-overrides
|
|
44
|
+
overrides: overrides,
|
|
45
|
+
iconBefore: iconBefore,
|
|
46
|
+
iconAfter: iconAfter,
|
|
47
|
+
isDisabled: isDisabled,
|
|
48
|
+
isSelected: isSelected,
|
|
49
|
+
description: description,
|
|
50
|
+
title: children,
|
|
51
|
+
shouldTitleWrap: shouldTitleWrap,
|
|
52
|
+
shouldDescriptionWrap: shouldDescriptionWrap,
|
|
53
|
+
css: // eslint-disable-next-line @repo/internal/react/consistent-css-prop-usage
|
|
45
54
|
cssFn({
|
|
46
55
|
isSelected,
|
|
47
56
|
isDisabled
|
|
48
|
-
})
|
|
49
|
-
|
|
50
|
-
|
|
57
|
+
})
|
|
58
|
+
}), ({
|
|
59
|
+
children,
|
|
60
|
+
className
|
|
61
|
+
}) => jsx("button", _extends({
|
|
62
|
+
"data-testid": testId
|
|
63
|
+
}, rest, {
|
|
64
|
+
className: className,
|
|
65
|
+
ref: ref,
|
|
51
66
|
disabled: isDisabled,
|
|
52
67
|
onClick: onClick,
|
|
53
68
|
onMouseDown: onMouseDownHandler,
|
|
54
|
-
|
|
55
|
-
},
|
|
56
|
-
, {
|
|
57
|
-
overrides: overrides,
|
|
58
|
-
iconBefore: iconBefore,
|
|
59
|
-
iconAfter: iconAfter,
|
|
60
|
-
description: description,
|
|
61
|
-
shouldTitleWrap: shouldTitleWrap,
|
|
62
|
-
shouldDescriptionWrap: shouldDescriptionWrap
|
|
63
|
-
}, children));
|
|
69
|
+
type: "button"
|
|
70
|
+
}), children));
|
|
64
71
|
}));
|
|
65
72
|
export default ButtonItem;
|