@instructure/ui-menu 11.7.9-snapshot-0 → 11.7.9-snapshot-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 +1 -1
- package/lib/Menu/v1/MenuItem/index.js +17 -23
- package/lib/Menu/v1/MenuItemGroup/index.js +8 -11
- package/lib/Menu/v1/MenuItemSeparator/index.js +2 -2
- package/lib/Menu/v1/index.js +14 -16
- package/lib/Menu/v2/MenuItem/index.js +16 -21
- package/lib/Menu/v2/MenuItemGroup/index.js +8 -11
- package/lib/Menu/v2/MenuItemSeparator/index.js +2 -2
- package/lib/Menu/v2/index.js +14 -16
- package/package.json +18 -18
- package/tsconfig.build.tsbuildinfo +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
-
## [11.7.9-snapshot-
|
|
6
|
+
## [11.7.9-snapshot-2](https://github.com/instructure/instructure-ui/compare/v11.7.8...v11.7.9-snapshot-2) (2026-10-12)
|
|
7
7
|
|
|
8
8
|
**Note:** Version bump only for package @instructure/ui-menu
|
|
9
9
|
|
|
@@ -7,16 +7,10 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
exports.default = exports.MenuItem = void 0;
|
|
8
8
|
var _react = require("react");
|
|
9
9
|
var _keycode = _interopRequireDefault(require("keycode"));
|
|
10
|
-
var
|
|
11
|
-
var
|
|
12
|
-
var
|
|
13
|
-
var
|
|
14
|
-
var _withDeterministicId = require("@instructure/ui-react-utils/lib/DeterministicIdContext/withDeterministicId.js");
|
|
15
|
-
var _callRenderProp = require("@instructure/ui-react-utils/lib/callRenderProp.js");
|
|
16
|
-
var _createChainedFunction = require("@instructure/ui-utils/lib/createChainedFunction.js");
|
|
17
|
-
var _safeLinkProps = require("@instructure/ui-utils/lib/safeLinkProps.js");
|
|
18
|
-
var _isActiveElement = require("@instructure/ui-dom-utils/lib/isActiveElement.js");
|
|
19
|
-
var _findDOMNode = require("@instructure/ui-dom-utils/lib/findDOMNode.js");
|
|
10
|
+
var _uiIcons = require("@instructure/ui-icons");
|
|
11
|
+
var _uiReactUtils = require("@instructure/ui-react-utils");
|
|
12
|
+
var _uiUtils = require("@instructure/ui-utils");
|
|
13
|
+
var _uiDomUtils = require("@instructure/ui-dom-utils");
|
|
20
14
|
var _emotion = require("@instructure/emotion");
|
|
21
15
|
var _MenuContext = require("../../../utils/v1/MenuContext.js");
|
|
22
16
|
var _styles = _interopRequireDefault(require("./styles.js"));
|
|
@@ -53,7 +47,7 @@ parent: Menu
|
|
|
53
47
|
id: Menu.Item
|
|
54
48
|
---
|
|
55
49
|
**/
|
|
56
|
-
let MenuItem = exports.MenuItem = (_dec = (0,
|
|
50
|
+
let MenuItem = exports.MenuItem = (_dec = (0, _uiReactUtils.withDeterministicId)(), _dec2 = (0, _emotion.withStyle)(_styles.default, _theme.default), _dec(_class = _dec2(_class = class MenuItem extends _react.Component {
|
|
57
51
|
static displayName = 'MenuItem';
|
|
58
52
|
static componentId = 'Menu.Item';
|
|
59
53
|
static allowedProps = _props.allowedProps;
|
|
@@ -128,7 +122,7 @@ let MenuItem = exports.MenuItem = (_dec = (0, _withDeterministicId.withDetermini
|
|
|
128
122
|
e.stopPropagation();
|
|
129
123
|
if (enterKey) {
|
|
130
124
|
// handle space key on keyUp for FF
|
|
131
|
-
const refNode = (0,
|
|
125
|
+
const refNode = (0, _uiDomUtils.findDOMNode)(this.ref);
|
|
132
126
|
refNode.click();
|
|
133
127
|
}
|
|
134
128
|
}
|
|
@@ -140,7 +134,7 @@ let MenuItem = exports.MenuItem = (_dec = (0, _withDeterministicId.withDetermini
|
|
|
140
134
|
e.preventDefault();
|
|
141
135
|
e.stopPropagation();
|
|
142
136
|
if (spaceKey) {
|
|
143
|
-
const refNode = (0,
|
|
137
|
+
const refNode = (0, _uiDomUtils.findDOMNode)(this.ref);
|
|
144
138
|
refNode.click();
|
|
145
139
|
}
|
|
146
140
|
}
|
|
@@ -154,7 +148,7 @@ let MenuItem = exports.MenuItem = (_dec = (0, _withDeterministicId.withDetermini
|
|
|
154
148
|
}
|
|
155
149
|
};
|
|
156
150
|
get elementType() {
|
|
157
|
-
return (0,
|
|
151
|
+
return (0, _uiReactUtils.getElementType)(MenuItem, this.props);
|
|
158
152
|
}
|
|
159
153
|
get role() {
|
|
160
154
|
switch (this.props.type) {
|
|
@@ -170,10 +164,10 @@ let MenuItem = exports.MenuItem = (_dec = (0, _withDeterministicId.withDetermini
|
|
|
170
164
|
return typeof this.props.selected === 'undefined' ? this.state.selected : this.props.selected;
|
|
171
165
|
}
|
|
172
166
|
get focused() {
|
|
173
|
-
return (0,
|
|
167
|
+
return (0, _uiDomUtils.isActiveElement)(this.ref);
|
|
174
168
|
}
|
|
175
169
|
focus() {
|
|
176
|
-
const refNode = (0,
|
|
170
|
+
const refNode = (0, _uiDomUtils.findDOMNode)(this.ref);
|
|
177
171
|
refNode.focus();
|
|
178
172
|
}
|
|
179
173
|
renderContent() {
|
|
@@ -185,17 +179,17 @@ let MenuItem = exports.MenuItem = (_dec = (0, _withDeterministicId.withDetermini
|
|
|
185
179
|
return (0, _jsxRuntime.jsxs)("span", {
|
|
186
180
|
children: [(type === 'checkbox' || type === 'radio') && (0, _jsxRuntime.jsx)("span", {
|
|
187
181
|
css: this.props.styles?.icon,
|
|
188
|
-
children: this.selected && (0, _jsxRuntime.jsx)(
|
|
182
|
+
children: this.selected && (0, _jsxRuntime.jsx)(_uiIcons.IconCheckSolid, {})
|
|
189
183
|
}), (0, _jsxRuntime.jsx)("span", {
|
|
190
184
|
css: this.props.styles?.label,
|
|
191
185
|
id: this.labelId,
|
|
192
186
|
children: children
|
|
193
187
|
}), type === 'flyout' && (0, _jsxRuntime.jsx)("span", {
|
|
194
188
|
css: this.props.styles?.icon,
|
|
195
|
-
children: (0, _jsxRuntime.jsx)(
|
|
189
|
+
children: (0, _jsxRuntime.jsx)(_uiIcons.IconArrowOpenEndSolid, {})
|
|
196
190
|
}), renderLabelInfo && (0, _jsxRuntime.jsx)("span", {
|
|
197
191
|
css: this.props.styles?.labelInfo,
|
|
198
|
-
children: (0,
|
|
192
|
+
children: (0, _uiReactUtils.callRenderProp)(renderLabelInfo)
|
|
199
193
|
})]
|
|
200
194
|
});
|
|
201
195
|
}
|
|
@@ -209,12 +203,12 @@ let MenuItem = exports.MenuItem = (_dec = (0, _withDeterministicId.withDetermini
|
|
|
209
203
|
href: rawHref,
|
|
210
204
|
target
|
|
211
205
|
} = this.props;
|
|
212
|
-
const props = (0,
|
|
206
|
+
const props = (0, _uiReactUtils.omitProps)(this.props, MenuItem.allowedProps);
|
|
213
207
|
const ElementType = this.elementType;
|
|
214
208
|
const {
|
|
215
209
|
href,
|
|
216
210
|
rel
|
|
217
|
-
} = (0,
|
|
211
|
+
} = (0, _uiUtils.safeLinkProps)({
|
|
218
212
|
tag: typeof ElementType === 'string' ? ElementType : 'a',
|
|
219
213
|
attr: 'href',
|
|
220
214
|
href: rawHref,
|
|
@@ -234,8 +228,8 @@ let MenuItem = exports.MenuItem = (_dec = (0, _withDeterministicId.withDetermini
|
|
|
234
228
|
"aria-controls": controls,
|
|
235
229
|
"aria-checked": type === 'checkbox' || type === 'radio' ? this.selected ? 'true' : 'false' : undefined,
|
|
236
230
|
onClick: this.handleClick,
|
|
237
|
-
onKeyUp: (0,
|
|
238
|
-
onKeyDown: (0,
|
|
231
|
+
onKeyUp: (0, _uiUtils.createChainedFunction)(onKeyUp, this.handleKeyUp),
|
|
232
|
+
onKeyDown: (0, _uiUtils.createChainedFunction)(onKeyDown, this.handleKeyDown),
|
|
239
233
|
ref: this.handleRef,
|
|
240
234
|
css: this.props.styles?.menuItem,
|
|
241
235
|
onMouseOver: this.handleMouseOver,
|
|
@@ -7,11 +7,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
exports.default = exports.MenuItemGroup = void 0;
|
|
8
8
|
var _react = require("react");
|
|
9
9
|
var _emotion = require("@instructure/emotion");
|
|
10
|
-
var
|
|
11
|
-
var
|
|
12
|
-
var _matchComponentTypes = require("@instructure/ui-react-utils/lib/matchComponentTypes.js");
|
|
13
|
-
var _withDeterministicId = require("@instructure/ui-react-utils/lib/DeterministicIdContext/withDeterministicId.js");
|
|
14
|
-
var _hasVisibleChildren = require("@instructure/ui-a11y-utils/lib/hasVisibleChildren.js");
|
|
10
|
+
var _uiReactUtils = require("@instructure/ui-react-utils");
|
|
11
|
+
var _uiA11yUtils = require("@instructure/ui-a11y-utils");
|
|
15
12
|
var _index = require("../MenuItem/index.js");
|
|
16
13
|
var _styles = _interopRequireDefault(require("./styles.js"));
|
|
17
14
|
var _theme = _interopRequireDefault(require("./theme.js"));
|
|
@@ -47,7 +44,7 @@ parent: Menu
|
|
|
47
44
|
id: Menu.Group
|
|
48
45
|
---
|
|
49
46
|
**/
|
|
50
|
-
let MenuItemGroup = exports.MenuItemGroup = (_dec = (0,
|
|
47
|
+
let MenuItemGroup = exports.MenuItemGroup = (_dec = (0, _uiReactUtils.withDeterministicId)(), _dec2 = (0, _emotion.withStyle)(_styles.default, _theme.default), _dec(_class = _dec2(_class = class MenuItemGroup extends _react.Component {
|
|
51
48
|
static displayName = 'MenuItemGroup';
|
|
52
49
|
static componentId = 'Menu.Group';
|
|
53
50
|
static allowedProps = _props.allowedProps;
|
|
@@ -117,7 +114,7 @@ let MenuItemGroup = exports.MenuItemGroup = (_dec = (0, _withDeterministicId.wit
|
|
|
117
114
|
} = props;
|
|
118
115
|
const selected = [];
|
|
119
116
|
const items = _react.Children.toArray(children).filter(child => {
|
|
120
|
-
return (0,
|
|
117
|
+
return (0, _uiReactUtils.matchComponentTypes)(child, [_index.MenuItem]);
|
|
121
118
|
});
|
|
122
119
|
items.forEach((item, index) => {
|
|
123
120
|
if ((selected.length === 0 || allowMultiple) && (item.props.selected || item.props.defaultSelected)) {
|
|
@@ -137,7 +134,7 @@ let MenuItemGroup = exports.MenuItemGroup = (_dec = (0, _withDeterministicId.wit
|
|
|
137
134
|
const {
|
|
138
135
|
label
|
|
139
136
|
} = this.props;
|
|
140
|
-
return (0,
|
|
137
|
+
return (0, _uiA11yUtils.hasVisibleChildren)(label) ? (0, _jsxRuntime.jsx)("span", {
|
|
141
138
|
css: this.props.styles?.label,
|
|
142
139
|
children: label
|
|
143
140
|
}) : label;
|
|
@@ -153,10 +150,10 @@ let MenuItemGroup = exports.MenuItemGroup = (_dec = (0, _withDeterministicId.wit
|
|
|
153
150
|
const children = this.props.children;
|
|
154
151
|
let index = -1;
|
|
155
152
|
return _react.Children.map(children, child => {
|
|
156
|
-
if ((0,
|
|
153
|
+
if ((0, _uiReactUtils.matchComponentTypes)(child, [_index.MenuItem])) {
|
|
157
154
|
++index;
|
|
158
155
|
const value = child.props.value || index;
|
|
159
|
-
return (0,
|
|
156
|
+
return (0, _uiReactUtils.safeCloneElement)(child, {
|
|
160
157
|
tabIndex: isTabbable && index === 0 ? 0 : -1,
|
|
161
158
|
controls,
|
|
162
159
|
value,
|
|
@@ -174,7 +171,7 @@ let MenuItemGroup = exports.MenuItemGroup = (_dec = (0, _withDeterministicId.wit
|
|
|
174
171
|
});
|
|
175
172
|
}
|
|
176
173
|
render() {
|
|
177
|
-
const props = (0,
|
|
174
|
+
const props = (0, _uiReactUtils.omitProps)(this.props, MenuItemGroup.allowedProps);
|
|
178
175
|
return (0, _jsxRuntime.jsxs)("span", {
|
|
179
176
|
...props,
|
|
180
177
|
css: this.props.styles?.menuItemGroup,
|
|
@@ -7,7 +7,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
exports.default = exports.MenuItemSeparator = void 0;
|
|
8
8
|
var _react = require("react");
|
|
9
9
|
var _emotion = require("@instructure/emotion");
|
|
10
|
-
var
|
|
10
|
+
var _uiReactUtils = require("@instructure/ui-react-utils");
|
|
11
11
|
var _styles = _interopRequireDefault(require("./styles.js"));
|
|
12
12
|
var _theme = _interopRequireDefault(require("./theme.js"));
|
|
13
13
|
var _props = require("./props.js");
|
|
@@ -58,7 +58,7 @@ let MenuItemSeparator = exports.MenuItemSeparator = (_dec = (0, _emotion.withSty
|
|
|
58
58
|
this.props.makeStyles?.();
|
|
59
59
|
}
|
|
60
60
|
render() {
|
|
61
|
-
const props = (0,
|
|
61
|
+
const props = (0, _uiReactUtils.omitProps)(this.props, MenuItemSeparator.allowedProps);
|
|
62
62
|
// role="separator" would fit better here, but it causes NVDA to stop the
|
|
63
63
|
// MenuItem count after it
|
|
64
64
|
return (0, _jsxRuntime.jsx)("div", {
|
package/lib/Menu/v1/index.js
CHANGED
|
@@ -27,11 +27,9 @@ exports.default = void 0;
|
|
|
27
27
|
var _react = require("react");
|
|
28
28
|
var _keycode = _interopRequireDefault(require("keycode"));
|
|
29
29
|
var _v11_ = require("@instructure/ui-popover/v11_6");
|
|
30
|
-
var
|
|
31
|
-
var _matchComponentTypes = require("@instructure/ui-react-utils/lib/matchComponentTypes.js");
|
|
32
|
-
var _withDeterministicId = require("@instructure/ui-react-utils/lib/DeterministicIdContext/withDeterministicId.js");
|
|
30
|
+
var _uiReactUtils = require("@instructure/ui-react-utils");
|
|
33
31
|
var _console = require("@instructure/console");
|
|
34
|
-
var
|
|
32
|
+
var _uiDomUtils = require("@instructure/ui-dom-utils");
|
|
35
33
|
var _MenuContext = require("../../utils/v1/MenuContext.js");
|
|
36
34
|
var _index = require("./MenuItem/index.js");
|
|
37
35
|
var _index2 = require("./MenuItemGroup/index.js");
|
|
@@ -70,7 +68,7 @@ var _dec, _dec2, _class;
|
|
|
70
68
|
category: components
|
|
71
69
|
---
|
|
72
70
|
**/
|
|
73
|
-
let Menu = exports.Menu = (_dec = (0,
|
|
71
|
+
let Menu = exports.Menu = (_dec = (0, _uiReactUtils.withDeterministicId)(), _dec2 = (0, _emotion.withStyle)(_styles.default, _theme.default), _dec(_class = _dec2(_class = class Menu extends _react.Component {
|
|
74
72
|
static displayName = 'Menu';
|
|
75
73
|
static componentId = 'Menu';
|
|
76
74
|
static allowedProps = _props.allowedProps;
|
|
@@ -247,9 +245,9 @@ let Menu = exports.Menu = (_dec = (0, _withDeterministicId.withDeterministicId)(
|
|
|
247
245
|
}
|
|
248
246
|
focused() {
|
|
249
247
|
if (this.shown) {
|
|
250
|
-
return (0,
|
|
248
|
+
return (0, _uiDomUtils.containsActiveElement)(this._menu) || this.state.hasFocus;
|
|
251
249
|
} else {
|
|
252
|
-
return (0,
|
|
250
|
+
return (0, _uiDomUtils.containsActiveElement)(this._trigger);
|
|
253
251
|
}
|
|
254
252
|
}
|
|
255
253
|
get focusedIndex() {
|
|
@@ -277,18 +275,18 @@ let Menu = exports.Menu = (_dec = (0, _withDeterministicId.withDeterministicId)(
|
|
|
277
275
|
} = this.props;
|
|
278
276
|
let count = 0;
|
|
279
277
|
return _react.Children.map(children, child => {
|
|
280
|
-
if (!(0,
|
|
278
|
+
if (!(0, _uiReactUtils.matchComponentTypes)(child, ['MenuItemSeparator', 'MenuItem', 'MenuItemGroup', 'Menu'])) {
|
|
281
279
|
return;
|
|
282
280
|
}
|
|
283
281
|
count += 1;
|
|
284
282
|
const isTabbable = !this.state.hasFocus && count === 1;
|
|
285
|
-
if ((0,
|
|
283
|
+
if ((0, _uiReactUtils.matchComponentTypes)(child, ['MenuItemSeparator'])) {
|
|
286
284
|
return child;
|
|
287
285
|
}
|
|
288
286
|
const menuItemChild = child;
|
|
289
287
|
const controls = menuItemChild.props['aria-controls'] || menuItemChild.props.controls || this.props['aria-controls'] || this.props.controls;
|
|
290
|
-
if ((0,
|
|
291
|
-
return (0,
|
|
288
|
+
if ((0, _uiReactUtils.matchComponentTypes)(child, ['MenuItem'])) {
|
|
289
|
+
return (0, _uiReactUtils.safeCloneElement)(child, {
|
|
292
290
|
controls,
|
|
293
291
|
children: child.props.children,
|
|
294
292
|
disabled: disabled || child.props.disabled,
|
|
@@ -299,8 +297,8 @@ let Menu = exports.Menu = (_dec = (0, _withDeterministicId.withDeterministicId)(
|
|
|
299
297
|
tabIndex: isTabbable ? 0 : -1
|
|
300
298
|
});
|
|
301
299
|
}
|
|
302
|
-
if ((0,
|
|
303
|
-
return (0,
|
|
300
|
+
if ((0, _uiReactUtils.matchComponentTypes)(child, ['MenuItemGroup'])) {
|
|
301
|
+
return (0, _uiReactUtils.safeCloneElement)(child, {
|
|
304
302
|
label: child.props.label,
|
|
305
303
|
controls,
|
|
306
304
|
disabled: disabled || child.props.disabled,
|
|
@@ -311,9 +309,9 @@ let Menu = exports.Menu = (_dec = (0, _withDeterministicId.withDeterministicId)(
|
|
|
311
309
|
isTabbable
|
|
312
310
|
});
|
|
313
311
|
}
|
|
314
|
-
if ((0,
|
|
312
|
+
if ((0, _uiReactUtils.matchComponentTypes)(child, ['Menu'])) {
|
|
315
313
|
const submenuDisabled = disabled || child.props.disabled;
|
|
316
|
-
return (0,
|
|
314
|
+
return (0, _uiReactUtils.safeCloneElement)(child, {
|
|
317
315
|
type: 'flyout',
|
|
318
316
|
controls,
|
|
319
317
|
disabled: submenuDisabled,
|
|
@@ -420,7 +418,7 @@ let Menu = exports.Menu = (_dec = (0, _withDeterministicId.withDeterministicId)(
|
|
|
420
418
|
popoverRef(el);
|
|
421
419
|
}
|
|
422
420
|
},
|
|
423
|
-
renderTrigger: (0,
|
|
421
|
+
renderTrigger: (0, _uiReactUtils.safeCloneElement)(trigger, {
|
|
424
422
|
ref: el => {
|
|
425
423
|
this._trigger = el;
|
|
426
424
|
},
|
|
@@ -8,14 +8,9 @@ exports.default = exports.MenuItem = void 0;
|
|
|
8
8
|
var _react = require("react");
|
|
9
9
|
var _keycode = _interopRequireDefault(require("keycode"));
|
|
10
10
|
var _uiIcons = require("@instructure/ui-icons");
|
|
11
|
-
var
|
|
12
|
-
var
|
|
13
|
-
var
|
|
14
|
-
var _callRenderProp = require("@instructure/ui-react-utils/lib/callRenderProp.js");
|
|
15
|
-
var _createChainedFunction = require("@instructure/ui-utils/lib/createChainedFunction.js");
|
|
16
|
-
var _safeLinkProps = require("@instructure/ui-utils/lib/safeLinkProps.js");
|
|
17
|
-
var _isActiveElement = require("@instructure/ui-dom-utils/lib/isActiveElement.js");
|
|
18
|
-
var _findDOMNode = require("@instructure/ui-dom-utils/lib/findDOMNode.js");
|
|
11
|
+
var _uiReactUtils = require("@instructure/ui-react-utils");
|
|
12
|
+
var _uiUtils = require("@instructure/ui-utils");
|
|
13
|
+
var _uiDomUtils = require("@instructure/ui-dom-utils");
|
|
19
14
|
var _emotion = require("@instructure/emotion");
|
|
20
15
|
var _MenuContext = require("../../../utils/v1/MenuContext.js");
|
|
21
16
|
var _styles = _interopRequireDefault(require("./styles.js"));
|
|
@@ -51,7 +46,7 @@ parent: Menu
|
|
|
51
46
|
id: Menu.Item
|
|
52
47
|
---
|
|
53
48
|
**/
|
|
54
|
-
let MenuItem = exports.MenuItem = (_dec = (0,
|
|
49
|
+
let MenuItem = exports.MenuItem = (_dec = (0, _uiReactUtils.withDeterministicId)(), _dec2 = (0, _emotion.withStyleNew)(_styles.default), _dec(_class = _dec2(_class = class MenuItem extends _react.Component {
|
|
55
50
|
static displayName = 'MenuItem';
|
|
56
51
|
static componentId = 'Menu.Item';
|
|
57
52
|
static allowedProps = _props.allowedProps;
|
|
@@ -126,7 +121,7 @@ let MenuItem = exports.MenuItem = (_dec = (0, _withDeterministicId.withDetermini
|
|
|
126
121
|
e.stopPropagation();
|
|
127
122
|
if (enterKey) {
|
|
128
123
|
// handle space key on keyUp for FF
|
|
129
|
-
const refNode = (0,
|
|
124
|
+
const refNode = (0, _uiDomUtils.findDOMNode)(this.ref);
|
|
130
125
|
refNode.click();
|
|
131
126
|
}
|
|
132
127
|
}
|
|
@@ -138,7 +133,7 @@ let MenuItem = exports.MenuItem = (_dec = (0, _withDeterministicId.withDetermini
|
|
|
138
133
|
e.preventDefault();
|
|
139
134
|
e.stopPropagation();
|
|
140
135
|
if (spaceKey) {
|
|
141
|
-
const refNode = (0,
|
|
136
|
+
const refNode = (0, _uiDomUtils.findDOMNode)(this.ref);
|
|
142
137
|
refNode.click();
|
|
143
138
|
}
|
|
144
139
|
}
|
|
@@ -181,7 +176,7 @@ let MenuItem = exports.MenuItem = (_dec = (0, _withDeterministicId.withDetermini
|
|
|
181
176
|
return this.selected ? 'inverseColor' : 'baseColor';
|
|
182
177
|
};
|
|
183
178
|
get elementType() {
|
|
184
|
-
return (0,
|
|
179
|
+
return (0, _uiReactUtils.getElementType)(MenuItem, this.props);
|
|
185
180
|
}
|
|
186
181
|
get role() {
|
|
187
182
|
switch (this.props.type) {
|
|
@@ -197,10 +192,10 @@ let MenuItem = exports.MenuItem = (_dec = (0, _withDeterministicId.withDetermini
|
|
|
197
192
|
return typeof this.props.selected === 'undefined' ? this.state.selected : this.props.selected;
|
|
198
193
|
}
|
|
199
194
|
get focused() {
|
|
200
|
-
return (0,
|
|
195
|
+
return (0, _uiDomUtils.isActiveElement)(this.ref);
|
|
201
196
|
}
|
|
202
197
|
focus() {
|
|
203
|
-
const refNode = (0,
|
|
198
|
+
const refNode = (0, _uiDomUtils.findDOMNode)(this.ref);
|
|
204
199
|
refNode.focus();
|
|
205
200
|
}
|
|
206
201
|
renderContent() {
|
|
@@ -228,7 +223,7 @@ let MenuItem = exports.MenuItem = (_dec = (0, _withDeterministicId.withDetermini
|
|
|
228
223
|
})
|
|
229
224
|
}), renderLabelInfo && (0, _jsxRuntime.jsx)("span", {
|
|
230
225
|
css: this.props.styles?.labelInfo,
|
|
231
|
-
children: (0,
|
|
226
|
+
children: (0, _uiReactUtils.callRenderProp)(renderLabelInfo)
|
|
232
227
|
})]
|
|
233
228
|
});
|
|
234
229
|
}
|
|
@@ -244,12 +239,12 @@ let MenuItem = exports.MenuItem = (_dec = (0, _withDeterministicId.withDetermini
|
|
|
244
239
|
href: rawHref,
|
|
245
240
|
target
|
|
246
241
|
} = this.props;
|
|
247
|
-
const props = (0,
|
|
242
|
+
const props = (0, _uiReactUtils.omitProps)(this.props, MenuItem.allowedProps);
|
|
248
243
|
const ElementType = this.elementType;
|
|
249
244
|
const {
|
|
250
245
|
href,
|
|
251
246
|
rel
|
|
252
|
-
} = (0,
|
|
247
|
+
} = (0, _uiUtils.safeLinkProps)({
|
|
253
248
|
tag: typeof ElementType === 'string' ? ElementType : 'a',
|
|
254
249
|
attr: 'href',
|
|
255
250
|
href: rawHref,
|
|
@@ -269,15 +264,15 @@ let MenuItem = exports.MenuItem = (_dec = (0, _withDeterministicId.withDetermini
|
|
|
269
264
|
"aria-controls": controls,
|
|
270
265
|
"aria-checked": type === 'checkbox' || type === 'radio' ? this.selected ? 'true' : 'false' : undefined,
|
|
271
266
|
onClick: this.handleClick,
|
|
272
|
-
onKeyUp: (0,
|
|
273
|
-
onKeyDown: (0,
|
|
267
|
+
onKeyUp: (0, _uiUtils.createChainedFunction)(onKeyUp, this.handleKeyUp),
|
|
268
|
+
onKeyDown: (0, _uiUtils.createChainedFunction)(onKeyDown, this.handleKeyDown),
|
|
274
269
|
ref: this.handleRef,
|
|
275
270
|
css: this.props.styles?.menuItem,
|
|
276
271
|
onMouseOver: this.handleMouseOver,
|
|
277
272
|
onMouseEnter: this.handleMouseEnter,
|
|
278
273
|
onMouseLeave: this.handleMouseLeave,
|
|
279
|
-
onFocus: (0,
|
|
280
|
-
onBlur: (0,
|
|
274
|
+
onFocus: (0, _uiUtils.createChainedFunction)(onFocus, this.handleFocusEvent),
|
|
275
|
+
onBlur: (0, _uiUtils.createChainedFunction)(onBlur, this.handleBlurEvent),
|
|
281
276
|
"data-cid": "MenuItem",
|
|
282
277
|
children: this.renderContent()
|
|
283
278
|
});
|
|
@@ -7,11 +7,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
exports.default = exports.MenuItemGroup = void 0;
|
|
8
8
|
var _react = require("react");
|
|
9
9
|
var _emotion = require("@instructure/emotion");
|
|
10
|
-
var
|
|
11
|
-
var
|
|
12
|
-
var _matchComponentTypes = require("@instructure/ui-react-utils/lib/matchComponentTypes.js");
|
|
13
|
-
var _withDeterministicId = require("@instructure/ui-react-utils/lib/DeterministicIdContext/withDeterministicId.js");
|
|
14
|
-
var _hasVisibleChildren = require("@instructure/ui-a11y-utils/lib/hasVisibleChildren.js");
|
|
10
|
+
var _uiReactUtils = require("@instructure/ui-react-utils");
|
|
11
|
+
var _uiA11yUtils = require("@instructure/ui-a11y-utils");
|
|
15
12
|
var _index = require("../MenuItem/index.js");
|
|
16
13
|
var _styles = _interopRequireDefault(require("./styles.js"));
|
|
17
14
|
var _props = require("./props.js");
|
|
@@ -46,7 +43,7 @@ parent: Menu
|
|
|
46
43
|
id: Menu.Group
|
|
47
44
|
---
|
|
48
45
|
**/
|
|
49
|
-
let MenuItemGroup = exports.MenuItemGroup = (_dec = (0,
|
|
46
|
+
let MenuItemGroup = exports.MenuItemGroup = (_dec = (0, _uiReactUtils.withDeterministicId)(), _dec2 = (0, _emotion.withStyleNew)(_styles.default), _dec(_class = _dec2(_class = class MenuItemGroup extends _react.Component {
|
|
50
47
|
static displayName = 'MenuItemGroup';
|
|
51
48
|
static componentId = 'Menu.Group';
|
|
52
49
|
static allowedProps = _props.allowedProps;
|
|
@@ -116,7 +113,7 @@ let MenuItemGroup = exports.MenuItemGroup = (_dec = (0, _withDeterministicId.wit
|
|
|
116
113
|
} = props;
|
|
117
114
|
const selected = [];
|
|
118
115
|
const items = _react.Children.toArray(children).filter(child => {
|
|
119
|
-
return (0,
|
|
116
|
+
return (0, _uiReactUtils.matchComponentTypes)(child, [_index.MenuItem]);
|
|
120
117
|
});
|
|
121
118
|
items.forEach((item, index) => {
|
|
122
119
|
if ((selected.length === 0 || allowMultiple) && (item.props.selected || item.props.defaultSelected)) {
|
|
@@ -136,7 +133,7 @@ let MenuItemGroup = exports.MenuItemGroup = (_dec = (0, _withDeterministicId.wit
|
|
|
136
133
|
const {
|
|
137
134
|
label
|
|
138
135
|
} = this.props;
|
|
139
|
-
return (0,
|
|
136
|
+
return (0, _uiA11yUtils.hasVisibleChildren)(label) ? (0, _jsxRuntime.jsx)("span", {
|
|
140
137
|
css: this.props.styles?.label,
|
|
141
138
|
children: label
|
|
142
139
|
}) : label;
|
|
@@ -152,10 +149,10 @@ let MenuItemGroup = exports.MenuItemGroup = (_dec = (0, _withDeterministicId.wit
|
|
|
152
149
|
const children = this.props.children;
|
|
153
150
|
let index = -1;
|
|
154
151
|
return _react.Children.map(children, child => {
|
|
155
|
-
if ((0,
|
|
152
|
+
if ((0, _uiReactUtils.matchComponentTypes)(child, [_index.MenuItem])) {
|
|
156
153
|
++index;
|
|
157
154
|
const value = child.props.value || index;
|
|
158
|
-
return (0,
|
|
155
|
+
return (0, _uiReactUtils.safeCloneElement)(child, {
|
|
159
156
|
tabIndex: isTabbable && index === 0 ? 0 : -1,
|
|
160
157
|
controls,
|
|
161
158
|
value,
|
|
@@ -173,7 +170,7 @@ let MenuItemGroup = exports.MenuItemGroup = (_dec = (0, _withDeterministicId.wit
|
|
|
173
170
|
});
|
|
174
171
|
}
|
|
175
172
|
render() {
|
|
176
|
-
const props = (0,
|
|
173
|
+
const props = (0, _uiReactUtils.omitProps)(this.props, MenuItemGroup.allowedProps);
|
|
177
174
|
return (0, _jsxRuntime.jsxs)("span", {
|
|
178
175
|
...props,
|
|
179
176
|
css: this.props.styles?.menuItemGroup,
|
|
@@ -7,7 +7,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
exports.default = exports.MenuItemSeparator = void 0;
|
|
8
8
|
var _react = require("react");
|
|
9
9
|
var _emotion = require("@instructure/emotion");
|
|
10
|
-
var
|
|
10
|
+
var _uiReactUtils = require("@instructure/ui-react-utils");
|
|
11
11
|
var _styles = _interopRequireDefault(require("./styles.js"));
|
|
12
12
|
var _props = require("./props.js");
|
|
13
13
|
var _jsxRuntime = require("@emotion/react/jsx-runtime");
|
|
@@ -57,7 +57,7 @@ let MenuItemSeparator = exports.MenuItemSeparator = (_dec = (0, _emotion.withSty
|
|
|
57
57
|
this.props.makeStyles?.();
|
|
58
58
|
}
|
|
59
59
|
render() {
|
|
60
|
-
const props = (0,
|
|
60
|
+
const props = (0, _uiReactUtils.omitProps)(this.props, MenuItemSeparator.allowedProps);
|
|
61
61
|
// role="separator" would fit better here, but it causes NVDA to stop the
|
|
62
62
|
// MenuItem count after it
|
|
63
63
|
return (0, _jsxRuntime.jsx)("div", {
|
package/lib/Menu/v2/index.js
CHANGED
|
@@ -27,11 +27,9 @@ exports.default = void 0;
|
|
|
27
27
|
var _react = require("react");
|
|
28
28
|
var _keycode = _interopRequireDefault(require("keycode"));
|
|
29
29
|
var _latest = require("@instructure/ui-popover/latest");
|
|
30
|
-
var
|
|
31
|
-
var _matchComponentTypes = require("@instructure/ui-react-utils/lib/matchComponentTypes.js");
|
|
32
|
-
var _withDeterministicId = require("@instructure/ui-react-utils/lib/DeterministicIdContext/withDeterministicId.js");
|
|
30
|
+
var _uiReactUtils = require("@instructure/ui-react-utils");
|
|
33
31
|
var _console = require("@instructure/console");
|
|
34
|
-
var
|
|
32
|
+
var _uiDomUtils = require("@instructure/ui-dom-utils");
|
|
35
33
|
var _MenuContext = require("../../utils/v1/MenuContext.js");
|
|
36
34
|
var _index = require("./MenuItem/index.js");
|
|
37
35
|
var _index2 = require("./MenuItemGroup/index.js");
|
|
@@ -69,7 +67,7 @@ var _dec, _dec2, _class;
|
|
|
69
67
|
category: components
|
|
70
68
|
---
|
|
71
69
|
**/
|
|
72
|
-
let Menu = exports.Menu = (_dec = (0,
|
|
70
|
+
let Menu = exports.Menu = (_dec = (0, _uiReactUtils.withDeterministicId)(), _dec2 = (0, _emotion.withStyleNew)(_styles.default), _dec(_class = _dec2(_class = class Menu extends _react.Component {
|
|
73
71
|
static displayName = 'Menu';
|
|
74
72
|
static componentId = 'Menu';
|
|
75
73
|
static allowedProps = _props.allowedProps;
|
|
@@ -246,9 +244,9 @@ let Menu = exports.Menu = (_dec = (0, _withDeterministicId.withDeterministicId)(
|
|
|
246
244
|
}
|
|
247
245
|
focused() {
|
|
248
246
|
if (this.shown) {
|
|
249
|
-
return (0,
|
|
247
|
+
return (0, _uiDomUtils.containsActiveElement)(this._menu) || this.state.hasFocus;
|
|
250
248
|
} else {
|
|
251
|
-
return (0,
|
|
249
|
+
return (0, _uiDomUtils.containsActiveElement)(this._trigger);
|
|
252
250
|
}
|
|
253
251
|
}
|
|
254
252
|
get focusedIndex() {
|
|
@@ -276,18 +274,18 @@ let Menu = exports.Menu = (_dec = (0, _withDeterministicId.withDeterministicId)(
|
|
|
276
274
|
} = this.props;
|
|
277
275
|
let count = 0;
|
|
278
276
|
return _react.Children.map(children, child => {
|
|
279
|
-
if (!(0,
|
|
277
|
+
if (!(0, _uiReactUtils.matchComponentTypes)(child, ['MenuItemSeparator', 'MenuItem', 'MenuItemGroup', 'Menu'])) {
|
|
280
278
|
return;
|
|
281
279
|
}
|
|
282
280
|
count += 1;
|
|
283
281
|
const isTabbable = !this.state.hasFocus && count === 1;
|
|
284
|
-
if ((0,
|
|
282
|
+
if ((0, _uiReactUtils.matchComponentTypes)(child, ['MenuItemSeparator'])) {
|
|
285
283
|
return child;
|
|
286
284
|
}
|
|
287
285
|
const menuItemChild = child;
|
|
288
286
|
const controls = menuItemChild.props['aria-controls'] || menuItemChild.props.controls || this.props['aria-controls'] || this.props.controls;
|
|
289
|
-
if ((0,
|
|
290
|
-
return (0,
|
|
287
|
+
if ((0, _uiReactUtils.matchComponentTypes)(child, ['MenuItem'])) {
|
|
288
|
+
return (0, _uiReactUtils.safeCloneElement)(child, {
|
|
291
289
|
controls,
|
|
292
290
|
children: child.props.children,
|
|
293
291
|
disabled: disabled || child.props.disabled,
|
|
@@ -298,8 +296,8 @@ let Menu = exports.Menu = (_dec = (0, _withDeterministicId.withDeterministicId)(
|
|
|
298
296
|
tabIndex: isTabbable ? 0 : -1
|
|
299
297
|
});
|
|
300
298
|
}
|
|
301
|
-
if ((0,
|
|
302
|
-
return (0,
|
|
299
|
+
if ((0, _uiReactUtils.matchComponentTypes)(child, ['MenuItemGroup'])) {
|
|
300
|
+
return (0, _uiReactUtils.safeCloneElement)(child, {
|
|
303
301
|
label: child.props.label,
|
|
304
302
|
controls,
|
|
305
303
|
disabled: disabled || child.props.disabled,
|
|
@@ -310,9 +308,9 @@ let Menu = exports.Menu = (_dec = (0, _withDeterministicId.withDeterministicId)(
|
|
|
310
308
|
isTabbable
|
|
311
309
|
});
|
|
312
310
|
}
|
|
313
|
-
if ((0,
|
|
311
|
+
if ((0, _uiReactUtils.matchComponentTypes)(child, ['Menu'])) {
|
|
314
312
|
const submenuDisabled = disabled || child.props.disabled;
|
|
315
|
-
return (0,
|
|
313
|
+
return (0, _uiReactUtils.safeCloneElement)(child, {
|
|
316
314
|
type: 'flyout',
|
|
317
315
|
controls,
|
|
318
316
|
disabled: submenuDisabled,
|
|
@@ -419,7 +417,7 @@ let Menu = exports.Menu = (_dec = (0, _withDeterministicId.withDeterministicId)(
|
|
|
419
417
|
popoverRef(el);
|
|
420
418
|
}
|
|
421
419
|
},
|
|
422
|
-
renderTrigger: (0,
|
|
420
|
+
renderTrigger: (0, _uiReactUtils.safeCloneElement)(trigger, {
|
|
423
421
|
ref: el => {
|
|
424
422
|
this._trigger = el;
|
|
425
423
|
},
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@instructure/ui-menu",
|
|
3
|
-
"version": "11.7.9-snapshot-
|
|
3
|
+
"version": "11.7.9-snapshot-2",
|
|
4
4
|
"description": "A dropdown menu component",
|
|
5
5
|
"author": "Instructure, Inc. Engineering and Product Design",
|
|
6
6
|
"module": "./es/index.js",
|
|
@@ -15,25 +15,25 @@
|
|
|
15
15
|
"license": "MIT",
|
|
16
16
|
"dependencies": {
|
|
17
17
|
"@babel/runtime": "^7.29.7",
|
|
18
|
-
"
|
|
19
|
-
"@instructure/
|
|
20
|
-
"@instructure/
|
|
21
|
-
"@instructure/
|
|
22
|
-
"@instructure/ui-dom-utils": "11.7.9-snapshot-
|
|
23
|
-
"@instructure/ui-
|
|
24
|
-
"@instructure/ui-
|
|
25
|
-
"@instructure/ui-
|
|
26
|
-
"@instructure/ui-
|
|
27
|
-
"@instructure/ui-
|
|
28
|
-
"@instructure/ui-
|
|
29
|
-
"@instructure/ui-
|
|
30
|
-
"
|
|
18
|
+
"@instructure/console": "11.7.9-snapshot-2",
|
|
19
|
+
"@instructure/emotion": "11.7.9-snapshot-2",
|
|
20
|
+
"@instructure/shared-types": "11.7.9-snapshot-2",
|
|
21
|
+
"@instructure/ui-a11y-utils": "11.7.9-snapshot-2",
|
|
22
|
+
"@instructure/ui-dom-utils": "11.7.9-snapshot-2",
|
|
23
|
+
"@instructure/ui-icons": "11.7.9-snapshot-2",
|
|
24
|
+
"@instructure/ui-popover": "11.7.9-snapshot-2",
|
|
25
|
+
"@instructure/ui-position": "11.7.9-snapshot-2",
|
|
26
|
+
"@instructure/ui-react-utils": "11.7.9-snapshot-2",
|
|
27
|
+
"@instructure/ui-themes": "11.7.9-snapshot-2",
|
|
28
|
+
"@instructure/ui-utils": "11.7.9-snapshot-2",
|
|
29
|
+
"@instructure/ui-view": "11.7.9-snapshot-2",
|
|
30
|
+
"keycode": "^2"
|
|
31
31
|
},
|
|
32
32
|
"devDependencies": {
|
|
33
|
-
"
|
|
34
|
-
"@instructure/ui-
|
|
35
|
-
"@instructure/ui-
|
|
36
|
-
"
|
|
33
|
+
"@instructure/ui-axe-check": "11.7.9-snapshot-2",
|
|
34
|
+
"@instructure/ui-babel-preset": "11.7.9-snapshot-2",
|
|
35
|
+
"@instructure/ui-color-utils": "11.7.9-snapshot-2",
|
|
36
|
+
"vitest": "^5.0.0"
|
|
37
37
|
},
|
|
38
38
|
"peerDependencies": {
|
|
39
39
|
"react": ">=18 <=19"
|