@instructure/ui-menu 10.26.1-snapshot-2 → 10.26.1
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 +2 -23
- package/es/Menu/MenuItem/index.js +6 -6
- package/es/Menu/MenuItem/props.js +21 -1
- package/es/Menu/MenuItemGroup/index.js +6 -6
- package/es/Menu/MenuItemGroup/props.js +18 -1
- package/es/Menu/MenuItemSeparator/index.js +6 -6
- package/es/Menu/MenuItemSeparator/props.js +2 -1
- package/es/Menu/index.js +6 -7
- package/es/Menu/props.js +34 -1
- package/lib/Menu/MenuItem/index.js +5 -5
- package/lib/Menu/MenuItem/props.js +22 -1
- package/lib/Menu/MenuItemGroup/index.js +5 -5
- package/lib/Menu/MenuItemGroup/props.js +20 -1
- package/lib/Menu/MenuItemSeparator/index.js +5 -5
- package/lib/Menu/MenuItemSeparator/props.js +2 -1
- package/lib/Menu/index.js +5 -6
- package/lib/Menu/props.js +36 -1
- package/package.json +22 -19
- package/src/Menu/MenuItem/index.tsx +4 -2
- package/src/Menu/MenuItem/props.ts +24 -1
- package/src/Menu/MenuItemGroup/index.tsx +4 -2
- package/src/Menu/MenuItemGroup/props.ts +24 -1
- package/src/Menu/MenuItemSeparator/index.tsx +4 -2
- package/src/Menu/MenuItemSeparator/props.ts +4 -1
- package/src/Menu/index.tsx +5 -4
- package/src/Menu/props.ts +50 -2
- package/tsconfig.build.json +2 -0
- package/tsconfig.build.tsbuildinfo +1 -1
- package/types/Menu/MenuItem/index.d.ts +19 -1
- package/types/Menu/MenuItem/index.d.ts.map +1 -1
- package/types/Menu/MenuItem/props.d.ts +3 -2
- package/types/Menu/MenuItem/props.d.ts.map +1 -1
- package/types/Menu/MenuItemGroup/index.d.ts +13 -0
- package/types/Menu/MenuItemGroup/index.d.ts.map +1 -1
- package/types/Menu/MenuItemGroup/props.d.ts +3 -2
- package/types/Menu/MenuItemGroup/props.d.ts.map +1 -1
- package/types/Menu/MenuItemSeparator/index.d.ts +1 -0
- package/types/Menu/MenuItemSeparator/index.d.ts.map +1 -1
- package/types/Menu/MenuItemSeparator/props.d.ts +3 -2
- package/types/Menu/MenuItemSeparator/props.d.ts.map +1 -1
- package/types/Menu/index.d.ts +30 -0
- package/types/Menu/index.d.ts.map +1 -1
- package/types/Menu/props.d.ts +3 -2
- package/types/Menu/props.d.ts.map +1 -1
package/lib/Menu/props.js
CHANGED
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
3
4
|
Object.defineProperty(exports, "__esModule", {
|
|
4
5
|
value: true
|
|
5
6
|
});
|
|
6
|
-
exports.allowedProps = void 0;
|
|
7
|
+
exports.propTypes = exports.allowedProps = void 0;
|
|
8
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
9
|
+
var _PositionPropTypes = require("@instructure/ui-position/lib/PositionPropTypes.js");
|
|
10
|
+
var _controllable = require("@instructure/ui-prop-types/lib/controllable.js");
|
|
11
|
+
var _Children = require("@instructure/ui-prop-types/lib/Children.js");
|
|
7
12
|
/*
|
|
8
13
|
* The MIT License (MIT)
|
|
9
14
|
*
|
|
@@ -28,4 +33,34 @@ exports.allowedProps = void 0;
|
|
|
28
33
|
* SOFTWARE.
|
|
29
34
|
*/
|
|
30
35
|
|
|
36
|
+
const propTypes = exports.propTypes = {
|
|
37
|
+
children: _Children.Children.oneOf(['MenuItem', 'MenuItemGroup', 'MenuItemSeparator', 'Menu']),
|
|
38
|
+
label: _propTypes.default.string,
|
|
39
|
+
disabled: _propTypes.default.bool,
|
|
40
|
+
trigger: _propTypes.default.node,
|
|
41
|
+
placement: _PositionPropTypes.PositionPropTypes.placement,
|
|
42
|
+
defaultShow: _propTypes.default.bool,
|
|
43
|
+
show: (0, _controllable.controllable)(_propTypes.default.bool, 'onToggle', 'defaultShow'),
|
|
44
|
+
onToggle: _propTypes.default.func,
|
|
45
|
+
onSelect: _propTypes.default.func,
|
|
46
|
+
onDismiss: _propTypes.default.func,
|
|
47
|
+
onFocus: _propTypes.default.func,
|
|
48
|
+
onMouseOver: _propTypes.default.func,
|
|
49
|
+
onKeyDown: _propTypes.default.func,
|
|
50
|
+
onKeyUp: _propTypes.default.func,
|
|
51
|
+
menuRef: _propTypes.default.func,
|
|
52
|
+
popoverRef: _propTypes.default.func,
|
|
53
|
+
mountNode: _PositionPropTypes.PositionPropTypes.mountNode,
|
|
54
|
+
constrain: _PositionPropTypes.PositionPropTypes.constrain,
|
|
55
|
+
shouldHideOnSelect: _propTypes.default.bool,
|
|
56
|
+
shouldFocusTriggerOnClose: _propTypes.default.bool,
|
|
57
|
+
positionContainerDisplay: _propTypes.default.oneOf(['inline-block', 'block']),
|
|
58
|
+
type: _propTypes.default.oneOf(['flyout']),
|
|
59
|
+
id: _propTypes.default.string,
|
|
60
|
+
withArrow: _propTypes.default.bool,
|
|
61
|
+
offsetX: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.number]),
|
|
62
|
+
offsetY: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.number]),
|
|
63
|
+
maxHeight: _propTypes.default.string,
|
|
64
|
+
renderLabelInfo: _propTypes.default.node
|
|
65
|
+
};
|
|
31
66
|
const allowedProps = exports.allowedProps = ['children', 'label', 'disabled', 'trigger', 'placement', 'defaultShow', 'show', 'onToggle', 'onSelect', 'onDismiss', 'onFocus', 'onMouseOver', 'onKeyDown', 'onKeyUp', 'menuRef', 'popoverRef', 'mountNode', 'constrain', 'shouldHideOnSelect', 'shouldFocusTriggerOnClose', 'positionContainerDisplay', 'type', 'id', 'withArrow', 'offsetX', 'offsetY', 'maxHeight', 'renderLabelInfo'];
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@instructure/ui-menu",
|
|
3
|
-
"version": "10.26.1
|
|
3
|
+
"version": "10.26.1",
|
|
4
4
|
"description": "A dropdown menu component",
|
|
5
5
|
"author": "Instructure, Inc. Engineering and Product Design",
|
|
6
6
|
"module": "./es/index.js",
|
|
@@ -23,32 +23,35 @@
|
|
|
23
23
|
},
|
|
24
24
|
"license": "MIT",
|
|
25
25
|
"devDependencies": {
|
|
26
|
-
"@instructure/ui-axe-check": "10.26.1
|
|
27
|
-
"@instructure/ui-babel-preset": "10.26.1
|
|
28
|
-
"@instructure/ui-color-utils": "10.26.1
|
|
29
|
-
"@instructure/ui-themes": "10.26.1
|
|
26
|
+
"@instructure/ui-axe-check": "10.26.1",
|
|
27
|
+
"@instructure/ui-babel-preset": "10.26.1",
|
|
28
|
+
"@instructure/ui-color-utils": "10.26.1",
|
|
29
|
+
"@instructure/ui-themes": "10.26.1",
|
|
30
30
|
"@testing-library/jest-dom": "^6.6.3",
|
|
31
|
-
"@testing-library/react": "
|
|
31
|
+
"@testing-library/react": "^16.0.1",
|
|
32
32
|
"@testing-library/user-event": "^14.6.1",
|
|
33
33
|
"vitest": "^3.2.2"
|
|
34
34
|
},
|
|
35
35
|
"dependencies": {
|
|
36
36
|
"@babel/runtime": "^7.27.6",
|
|
37
|
-
"@instructure/console": "10.26.1
|
|
38
|
-
"@instructure/emotion": "10.26.1
|
|
39
|
-
"@instructure/shared-types": "10.26.1
|
|
40
|
-
"@instructure/ui-a11y-utils": "10.26.1
|
|
41
|
-
"@instructure/ui-dom-utils": "10.26.1
|
|
42
|
-
"@instructure/ui-icons": "10.26.1
|
|
43
|
-
"@instructure/ui-popover": "10.26.1
|
|
44
|
-
"@instructure/ui-position": "10.26.1
|
|
45
|
-
"@instructure/ui-
|
|
46
|
-
"@instructure/ui-utils": "10.26.1
|
|
47
|
-
"@instructure/ui-
|
|
48
|
-
"
|
|
37
|
+
"@instructure/console": "10.26.1",
|
|
38
|
+
"@instructure/emotion": "10.26.1",
|
|
39
|
+
"@instructure/shared-types": "10.26.1",
|
|
40
|
+
"@instructure/ui-a11y-utils": "10.26.1",
|
|
41
|
+
"@instructure/ui-dom-utils": "10.26.1",
|
|
42
|
+
"@instructure/ui-icons": "10.26.1",
|
|
43
|
+
"@instructure/ui-popover": "10.26.1",
|
|
44
|
+
"@instructure/ui-position": "10.26.1",
|
|
45
|
+
"@instructure/ui-prop-types": "10.26.1",
|
|
46
|
+
"@instructure/ui-react-utils": "10.26.1",
|
|
47
|
+
"@instructure/ui-testable": "10.26.1",
|
|
48
|
+
"@instructure/ui-utils": "10.26.1",
|
|
49
|
+
"@instructure/ui-view": "10.26.1",
|
|
50
|
+
"keycode": "^2",
|
|
51
|
+
"prop-types": "^15.8.1"
|
|
49
52
|
},
|
|
50
53
|
"peerDependencies": {
|
|
51
|
-
"react": ">=
|
|
54
|
+
"react": ">=16.14 <=18"
|
|
52
55
|
},
|
|
53
56
|
"publishConfig": {
|
|
54
57
|
"access": "public"
|
|
@@ -34,6 +34,7 @@ import {
|
|
|
34
34
|
} from '@instructure/ui-react-utils'
|
|
35
35
|
import { createChainedFunction } from '@instructure/ui-utils'
|
|
36
36
|
import { isActiveElement, findDOMNode } from '@instructure/ui-dom-utils'
|
|
37
|
+
import { testable } from '@instructure/ui-testable'
|
|
37
38
|
import { withStyle } from '@instructure/emotion'
|
|
38
39
|
|
|
39
40
|
import { MenuContext } from '../../MenuContext'
|
|
@@ -41,7 +42,7 @@ import { MenuContext } from '../../MenuContext'
|
|
|
41
42
|
import generateStyle from './styles'
|
|
42
43
|
import generateComponentTheme from './theme'
|
|
43
44
|
|
|
44
|
-
import { allowedProps } from './props'
|
|
45
|
+
import { propTypes, allowedProps } from './props'
|
|
45
46
|
import type { MenuItemProps, MenuItemState } from './props'
|
|
46
47
|
|
|
47
48
|
/**
|
|
@@ -52,9 +53,11 @@ id: Menu.Item
|
|
|
52
53
|
**/
|
|
53
54
|
@withDeterministicId()
|
|
54
55
|
@withStyle(generateStyle, generateComponentTheme)
|
|
56
|
+
@testable()
|
|
55
57
|
class MenuItem extends Component<MenuItemProps, MenuItemState> {
|
|
56
58
|
static readonly componentId = 'Menu.Item'
|
|
57
59
|
|
|
60
|
+
static propTypes = propTypes
|
|
58
61
|
static allowedProps = allowedProps
|
|
59
62
|
static defaultProps = {
|
|
60
63
|
type: 'button',
|
|
@@ -263,7 +266,6 @@ class MenuItem extends Component<MenuItemProps, MenuItemState> {
|
|
|
263
266
|
ref={this.handleRef}
|
|
264
267
|
css={this.props.styles?.menuItem}
|
|
265
268
|
onMouseOver={this.handleMouseOver}
|
|
266
|
-
data-cid="MenuItem"
|
|
267
269
|
>
|
|
268
270
|
{this.renderContent()}
|
|
269
271
|
</ElementType>
|
|
@@ -23,10 +23,13 @@
|
|
|
23
23
|
*/
|
|
24
24
|
|
|
25
25
|
import React from 'react'
|
|
26
|
+
import PropTypes from 'prop-types'
|
|
26
27
|
import MenuItem from '../MenuItem'
|
|
28
|
+
import { controllable } from '@instructure/ui-prop-types'
|
|
27
29
|
|
|
28
30
|
import type {
|
|
29
31
|
AsElementType,
|
|
32
|
+
PropValidators,
|
|
30
33
|
MenuItemTheme,
|
|
31
34
|
OtherHTMLAttributes
|
|
32
35
|
} from '@instructure/shared-types'
|
|
@@ -105,6 +108,26 @@ type MenuItemProps = MenuItemOwnProps &
|
|
|
105
108
|
WithDeterministicIdProps
|
|
106
109
|
|
|
107
110
|
type MenuItemStyle = ComponentStyle<'menuItem' | 'icon' | 'labelInfo' | 'label'>
|
|
111
|
+
|
|
112
|
+
const propTypes: PropValidators<PropKeys> = {
|
|
113
|
+
children: PropTypes.node.isRequired,
|
|
114
|
+
defaultSelected: PropTypes.bool,
|
|
115
|
+
selected: controllable(PropTypes.bool, 'onSelect', 'defaultSelected'),
|
|
116
|
+
onSelect: PropTypes.func,
|
|
117
|
+
onClick: PropTypes.func,
|
|
118
|
+
onKeyDown: PropTypes.func,
|
|
119
|
+
onKeyUp: PropTypes.func,
|
|
120
|
+
onMouseOver: PropTypes.func,
|
|
121
|
+
controls: PropTypes.string,
|
|
122
|
+
disabled: PropTypes.bool,
|
|
123
|
+
as: PropTypes.elementType,
|
|
124
|
+
type: PropTypes.oneOf(['button', 'checkbox', 'radio', 'flyout']),
|
|
125
|
+
value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
|
|
126
|
+
href: PropTypes.string,
|
|
127
|
+
target: PropTypes.string,
|
|
128
|
+
renderLabelInfo: PropTypes.node
|
|
129
|
+
}
|
|
130
|
+
|
|
108
131
|
const allowedProps: AllowedPropKeys = [
|
|
109
132
|
'children',
|
|
110
133
|
'defaultSelected',
|
|
@@ -127,4 +150,4 @@ type MenuItemState = {
|
|
|
127
150
|
selected: boolean
|
|
128
151
|
}
|
|
129
152
|
export type { MenuItemProps, MenuItemStyle, MenuItemState, OnMenuItemSelect }
|
|
130
|
-
export { allowedProps }
|
|
153
|
+
export { propTypes, allowedProps }
|
|
@@ -32,6 +32,7 @@ import {
|
|
|
32
32
|
withDeterministicId
|
|
33
33
|
} from '@instructure/ui-react-utils'
|
|
34
34
|
import { hasVisibleChildren } from '@instructure/ui-a11y-utils'
|
|
35
|
+
import { testable } from '@instructure/ui-testable'
|
|
35
36
|
|
|
36
37
|
import { MenuItem } from '../MenuItem'
|
|
37
38
|
import type { OnMenuItemSelect, MenuItemProps } from '../MenuItem/props'
|
|
@@ -41,7 +42,7 @@ import type { MenuSeparatorProps } from '../MenuItemSeparator/props'
|
|
|
41
42
|
import generateStyle from './styles'
|
|
42
43
|
import generateComponentTheme from './theme'
|
|
43
44
|
|
|
44
|
-
import { allowedProps } from './props'
|
|
45
|
+
import { propTypes, allowedProps } from './props'
|
|
45
46
|
import type { MenuGroupProps, MenuGroupState } from './props'
|
|
46
47
|
|
|
47
48
|
type MenuItemChild = ComponentElement<MenuItemProps, MenuItem>
|
|
@@ -58,9 +59,11 @@ id: Menu.Group
|
|
|
58
59
|
**/
|
|
59
60
|
@withDeterministicId()
|
|
60
61
|
@withStyle(generateStyle, generateComponentTheme)
|
|
62
|
+
@testable()
|
|
61
63
|
class MenuItemGroup extends Component<MenuGroupProps, MenuGroupState> {
|
|
62
64
|
static readonly componentId = 'Menu.Group'
|
|
63
65
|
|
|
66
|
+
static propTypes = propTypes
|
|
64
67
|
static allowedProps = allowedProps
|
|
65
68
|
static defaultProps = {
|
|
66
69
|
disabled: false,
|
|
@@ -228,7 +231,6 @@ class MenuItemGroup extends Component<MenuGroupProps, MenuGroupState> {
|
|
|
228
231
|
{...props}
|
|
229
232
|
css={this.props.styles?.menuItemGroup}
|
|
230
233
|
ref={this.handleRef}
|
|
231
|
-
data-cid="MenuItemGroup"
|
|
232
234
|
>
|
|
233
235
|
{this.renderLabel()}
|
|
234
236
|
<div
|
|
@@ -23,10 +23,18 @@
|
|
|
23
23
|
*/
|
|
24
24
|
|
|
25
25
|
import React from 'react'
|
|
26
|
+
import PropTypes from 'prop-types'
|
|
27
|
+
|
|
28
|
+
import {
|
|
29
|
+
controllable,
|
|
30
|
+
Children as ChildrenPropTypes
|
|
31
|
+
} from '@instructure/ui-prop-types'
|
|
26
32
|
|
|
27
33
|
import { MenuItem } from '../MenuItem'
|
|
34
|
+
import { MenuItemSeparator } from '../MenuItemSeparator'
|
|
28
35
|
|
|
29
36
|
import type {
|
|
37
|
+
PropValidators,
|
|
30
38
|
MenuGroupTheme,
|
|
31
39
|
OtherHTMLAttributes
|
|
32
40
|
} from '@instructure/shared-types'
|
|
@@ -84,6 +92,21 @@ type MenuGroupProps = MenuGroupOwnProps &
|
|
|
84
92
|
WithDeterministicIdProps
|
|
85
93
|
|
|
86
94
|
type MenuGroupStyle = ComponentStyle<'menuItemGroup' | 'label' | 'items'>
|
|
95
|
+
|
|
96
|
+
const propTypes: PropValidators<PropKeys> = {
|
|
97
|
+
label: PropTypes.node.isRequired,
|
|
98
|
+
allowMultiple: PropTypes.bool,
|
|
99
|
+
children: ChildrenPropTypes.oneOf([MenuItem, MenuItemSeparator]),
|
|
100
|
+
selected: controllable(PropTypes.array, 'onSelect', 'defaultSelected'),
|
|
101
|
+
defaultSelected: PropTypes.array,
|
|
102
|
+
onSelect: PropTypes.func,
|
|
103
|
+
onMouseOver: PropTypes.func,
|
|
104
|
+
controls: PropTypes.string,
|
|
105
|
+
itemRef: PropTypes.func,
|
|
106
|
+
disabled: PropTypes.bool,
|
|
107
|
+
isTabbable: PropTypes.bool
|
|
108
|
+
}
|
|
109
|
+
|
|
87
110
|
const allowedProps: AllowedPropKeys = [
|
|
88
111
|
'label',
|
|
89
112
|
'allowMultiple',
|
|
@@ -102,4 +125,4 @@ type MenuGroupState = {
|
|
|
102
125
|
selected: (string | number)[]
|
|
103
126
|
}
|
|
104
127
|
export type { MenuGroupProps, MenuGroupStyle, MenuGroupState }
|
|
105
|
-
export { allowedProps }
|
|
128
|
+
export { propTypes, allowedProps }
|
|
@@ -25,12 +25,13 @@
|
|
|
25
25
|
import { Component } from 'react'
|
|
26
26
|
|
|
27
27
|
import { withStyle } from '@instructure/emotion'
|
|
28
|
+
import { testable } from '@instructure/ui-testable'
|
|
28
29
|
import { omitProps } from '@instructure/ui-react-utils'
|
|
29
30
|
|
|
30
31
|
import generateStyle from './styles'
|
|
31
32
|
import generateComponentTheme from './theme'
|
|
32
33
|
|
|
33
|
-
import { allowedProps } from './props'
|
|
34
|
+
import { propTypes, allowedProps } from './props'
|
|
34
35
|
import type { MenuSeparatorProps } from './props'
|
|
35
36
|
|
|
36
37
|
/**
|
|
@@ -41,9 +42,11 @@ id: Menu.Separator
|
|
|
41
42
|
@module MenuItemSeparator
|
|
42
43
|
**/
|
|
43
44
|
@withStyle(generateStyle, generateComponentTheme)
|
|
45
|
+
@testable()
|
|
44
46
|
class MenuItemSeparator extends Component<MenuSeparatorProps> {
|
|
45
47
|
static readonly componentId = 'Menu.Separator'
|
|
46
48
|
|
|
49
|
+
static propTypes = propTypes
|
|
47
50
|
static allowedProps = allowedProps
|
|
48
51
|
|
|
49
52
|
ref: Element | null = null
|
|
@@ -70,7 +73,6 @@ class MenuItemSeparator extends Component<MenuSeparatorProps> {
|
|
|
70
73
|
role="presentation"
|
|
71
74
|
css={this.props.styles?.menuItemSeparator}
|
|
72
75
|
ref={this.handleRef}
|
|
73
|
-
data-cid="MenuItemSeparator"
|
|
74
76
|
/>
|
|
75
77
|
)
|
|
76
78
|
}
|
|
@@ -24,6 +24,7 @@
|
|
|
24
24
|
|
|
25
25
|
import type { WithStyleProps, ComponentStyle } from '@instructure/emotion'
|
|
26
26
|
import type {
|
|
27
|
+
PropValidators,
|
|
27
28
|
MenuSeparatorTheme,
|
|
28
29
|
OtherHTMLAttributes
|
|
29
30
|
} from '@instructure/shared-types'
|
|
@@ -42,7 +43,9 @@ type MenuSeparatorProps = MenuSeparatorOwnProps &
|
|
|
42
43
|
|
|
43
44
|
type MenuSeparatorStyle = ComponentStyle<'menuItemSeparator'>
|
|
44
45
|
|
|
46
|
+
const propTypes: PropValidators<PropKeys> = {}
|
|
47
|
+
|
|
45
48
|
const allowedProps: AllowedPropKeys = []
|
|
46
49
|
|
|
47
50
|
export type { MenuSeparatorProps, MenuSeparatorStyle }
|
|
48
|
-
export { allowedProps }
|
|
51
|
+
export { propTypes, allowedProps }
|
package/src/Menu/index.tsx
CHANGED
|
@@ -33,6 +33,7 @@ import {
|
|
|
33
33
|
} from '@instructure/ui-react-utils'
|
|
34
34
|
import { logError as error } from '@instructure/console'
|
|
35
35
|
import { containsActiveElement } from '@instructure/ui-dom-utils'
|
|
36
|
+
import { testable } from '@instructure/ui-testable'
|
|
36
37
|
|
|
37
38
|
import { MenuContext } from '../MenuContext'
|
|
38
39
|
import { MenuItem } from './MenuItem'
|
|
@@ -46,7 +47,7 @@ import { withStyle } from '@instructure/emotion'
|
|
|
46
47
|
import generateStyle from './styles'
|
|
47
48
|
import generateComponentTheme from './theme'
|
|
48
49
|
|
|
49
|
-
import { allowedProps } from './props'
|
|
50
|
+
import { propTypes, allowedProps } from './props'
|
|
50
51
|
import type { MenuProps } from './props'
|
|
51
52
|
|
|
52
53
|
type MenuChild = ComponentElement<MenuProps, Menu>
|
|
@@ -64,8 +65,10 @@ category: components
|
|
|
64
65
|
**/
|
|
65
66
|
@withDeterministicId()
|
|
66
67
|
@withStyle(generateStyle, generateComponentTheme)
|
|
68
|
+
@testable()
|
|
67
69
|
class Menu extends Component<MenuProps> {
|
|
68
70
|
static readonly componentId = 'Menu'
|
|
71
|
+
static propTypes = propTypes
|
|
69
72
|
static allowedProps = allowedProps
|
|
70
73
|
static defaultProps = {
|
|
71
74
|
label: null,
|
|
@@ -430,7 +433,6 @@ class Menu extends Component<MenuProps> {
|
|
|
430
433
|
onKeyDown={this.handleMenuKeyDown}
|
|
431
434
|
onKeyUp={onKeyUp}
|
|
432
435
|
ref={this.handleRef}
|
|
433
|
-
data-cid="Menu"
|
|
434
436
|
>
|
|
435
437
|
{this.renderChildren()}
|
|
436
438
|
</div>
|
|
@@ -458,7 +460,6 @@ class Menu extends Component<MenuProps> {
|
|
|
458
460
|
|
|
459
461
|
return trigger ? (
|
|
460
462
|
<Popover
|
|
461
|
-
data-cid="Menu"
|
|
462
463
|
isShowingContent={show}
|
|
463
464
|
defaultIsShowingContent={defaultShow}
|
|
464
465
|
onHideContent={(event, { documentClick }) => {
|
|
@@ -497,7 +498,7 @@ class Menu extends Component<MenuProps> {
|
|
|
497
498
|
id: this._labelId,
|
|
498
499
|
onMouseOver: this.handleTriggerMouseOver,
|
|
499
500
|
onKeyDown: this.handleTriggerKeyDown,
|
|
500
|
-
disabled: (trigger as ReactElement
|
|
501
|
+
disabled: (trigger as ReactElement).props.disabled || disabled
|
|
501
502
|
})}
|
|
502
503
|
defaultFocusElement={() =>
|
|
503
504
|
this._popover?._contentElement?.querySelector('[class$="menuItem"]')
|
package/src/Menu/props.ts
CHANGED
|
@@ -23,8 +23,19 @@
|
|
|
23
23
|
*/
|
|
24
24
|
|
|
25
25
|
import React from 'react'
|
|
26
|
+
import PropTypes from 'prop-types'
|
|
26
27
|
|
|
27
|
-
import
|
|
28
|
+
import { PositionPropTypes } from '@instructure/ui-position'
|
|
29
|
+
import {
|
|
30
|
+
controllable,
|
|
31
|
+
Children as ChildrenPropTypes
|
|
32
|
+
} from '@instructure/ui-prop-types'
|
|
33
|
+
|
|
34
|
+
import type {
|
|
35
|
+
PropValidators,
|
|
36
|
+
MenuTheme,
|
|
37
|
+
OtherHTMLAttributes
|
|
38
|
+
} from '@instructure/shared-types'
|
|
28
39
|
import type { WithStyleProps, ComponentStyle } from '@instructure/emotion'
|
|
29
40
|
import type {
|
|
30
41
|
PlacementPropValues,
|
|
@@ -178,6 +189,43 @@ type MenuProps = MenuOwnProps &
|
|
|
178
189
|
} & WithDeterministicIdProps
|
|
179
190
|
|
|
180
191
|
type MenuStyle = ComponentStyle<'menu'>
|
|
192
|
+
|
|
193
|
+
const propTypes: PropValidators<PropKeys> = {
|
|
194
|
+
children: ChildrenPropTypes.oneOf([
|
|
195
|
+
'MenuItem',
|
|
196
|
+
'MenuItemGroup',
|
|
197
|
+
'MenuItemSeparator',
|
|
198
|
+
'Menu'
|
|
199
|
+
]),
|
|
200
|
+
label: PropTypes.string,
|
|
201
|
+
disabled: PropTypes.bool,
|
|
202
|
+
trigger: PropTypes.node,
|
|
203
|
+
placement: PositionPropTypes.placement,
|
|
204
|
+
defaultShow: PropTypes.bool,
|
|
205
|
+
show: controllable(PropTypes.bool, 'onToggle', 'defaultShow'),
|
|
206
|
+
onToggle: PropTypes.func,
|
|
207
|
+
onSelect: PropTypes.func,
|
|
208
|
+
onDismiss: PropTypes.func,
|
|
209
|
+
onFocus: PropTypes.func,
|
|
210
|
+
onMouseOver: PropTypes.func,
|
|
211
|
+
onKeyDown: PropTypes.func,
|
|
212
|
+
onKeyUp: PropTypes.func,
|
|
213
|
+
menuRef: PropTypes.func,
|
|
214
|
+
popoverRef: PropTypes.func,
|
|
215
|
+
mountNode: PositionPropTypes.mountNode,
|
|
216
|
+
constrain: PositionPropTypes.constrain,
|
|
217
|
+
shouldHideOnSelect: PropTypes.bool,
|
|
218
|
+
shouldFocusTriggerOnClose: PropTypes.bool,
|
|
219
|
+
positionContainerDisplay: PropTypes.oneOf(['inline-block', 'block']),
|
|
220
|
+
type: PropTypes.oneOf(['flyout']),
|
|
221
|
+
id: PropTypes.string,
|
|
222
|
+
withArrow: PropTypes.bool,
|
|
223
|
+
offsetX: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
|
|
224
|
+
offsetY: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
|
|
225
|
+
maxHeight: PropTypes.string,
|
|
226
|
+
renderLabelInfo: PropTypes.node
|
|
227
|
+
}
|
|
228
|
+
|
|
181
229
|
const allowedProps: AllowedPropKeys = [
|
|
182
230
|
'children',
|
|
183
231
|
'label',
|
|
@@ -210,4 +258,4 @@ const allowedProps: AllowedPropKeys = [
|
|
|
210
258
|
]
|
|
211
259
|
|
|
212
260
|
export type { MenuProps, MenuStyle }
|
|
213
|
-
export { allowedProps }
|
|
261
|
+
export { propTypes, allowedProps }
|
package/tsconfig.build.json
CHANGED
|
@@ -18,7 +18,9 @@
|
|
|
18
18
|
{ "path": "../ui-icons/tsconfig.build.json" },
|
|
19
19
|
{ "path": "../ui-popover/tsconfig.build.json" },
|
|
20
20
|
{ "path": "../ui-position/tsconfig.build.json" },
|
|
21
|
+
{ "path": "../ui-prop-types/tsconfig.build.json" },
|
|
21
22
|
{ "path": "../ui-react-utils/tsconfig.build.json" },
|
|
23
|
+
{ "path": "../ui-testable/tsconfig.build.json" },
|
|
22
24
|
{ "path": "../ui-utils/tsconfig.build.json" },
|
|
23
25
|
{ "path": "../ui-axe-check/tsconfig.build.json" },
|
|
24
26
|
{ "path": "../ui-view/tsconfig.build.json" }
|