@launchpad-ui/menu 0.3.8 → 0.4.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/dist/index.es.js +249 -189
- package/dist/index.es.js.map +2 -2
- package/dist/index.js +253 -190
- package/dist/index.js.map +2 -2
- package/package.json +7 -7
package/dist/index.es.js
CHANGED
@@ -5,29 +5,34 @@ import * as React from "react";
|
|
5
5
|
import cx from "clsx";
|
6
6
|
import { forwardRef } from "react";
|
7
7
|
import "./styles/Menu.css";
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
8
|
+
import { jsx } from "react/jsx-runtime";
|
9
|
+
var MenuBase = forwardRef(
|
10
|
+
({ children, size, isVirtual, ...props }, ref) => {
|
11
|
+
const classes = cx("Menu", {
|
12
|
+
"Menu--isVirtual": isVirtual,
|
13
|
+
[`MenuSize--${size}`]: size
|
14
|
+
});
|
15
|
+
return /* @__PURE__ */ jsx("div", {
|
16
|
+
...props,
|
17
|
+
role: "menu",
|
18
|
+
className: classes,
|
19
|
+
ref,
|
20
|
+
children
|
21
|
+
});
|
22
|
+
}
|
23
|
+
);
|
20
24
|
MenuBase.displayName = "MenuBase";
|
21
25
|
|
22
26
|
// src/MenuDivider.tsx
|
23
27
|
import { useSeparator } from "@react-aria/separator";
|
24
28
|
import "./styles/Menu.css";
|
29
|
+
import { jsx as jsx2 } from "react/jsx-runtime";
|
25
30
|
var MenuDivider = ({ elementType = "div", orientation, innerRef }) => {
|
26
31
|
const { separatorProps } = useSeparator({
|
27
32
|
orientation,
|
28
33
|
elementType
|
29
34
|
});
|
30
|
-
return /* @__PURE__ */
|
35
|
+
return /* @__PURE__ */ jsx2("div", {
|
31
36
|
...separatorProps,
|
32
37
|
ref: innerRef,
|
33
38
|
className: "Menu-divider"
|
@@ -42,6 +47,7 @@ import { FocusRing } from "@react-aria/focus";
|
|
42
47
|
import cx2 from "clsx";
|
43
48
|
import { Link } from "react-router-dom";
|
44
49
|
import "./styles/Menu.css";
|
50
|
+
import { Fragment, jsx as jsx3, jsxs } from "react/jsx-runtime";
|
45
51
|
var defaultElement = "button";
|
46
52
|
var MenuItem = ({
|
47
53
|
...props
|
@@ -65,28 +71,43 @@ var MenuItem = ({
|
|
65
71
|
...rest
|
66
72
|
} = props;
|
67
73
|
const Component = component || (asChild ? Slot : defaultElement);
|
68
|
-
const renderedItem = /* @__PURE__ */
|
69
|
-
focusRingClass: "has-focus"
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
74
|
+
const renderedItem = /* @__PURE__ */ jsx3(FocusRing, {
|
75
|
+
focusRingClass: "has-focus",
|
76
|
+
children: /* @__PURE__ */ jsx3(Component, {
|
77
|
+
...rest,
|
78
|
+
disabled,
|
79
|
+
"aria-disabled": disabled ? disabled : void 0,
|
80
|
+
className: cx2(
|
81
|
+
"Menu-item",
|
82
|
+
className,
|
83
|
+
{ "is-highlighted": isHighlighted },
|
84
|
+
{ "Menu-item--nested": nested },
|
85
|
+
{ "Menu-item--header": groupHeader }
|
86
|
+
),
|
87
|
+
role,
|
88
|
+
onKeyDown,
|
89
|
+
children: asChild ? children : /* @__PURE__ */ jsxs(Fragment, {
|
90
|
+
children: [
|
91
|
+
Icon && /* @__PURE__ */ jsx3("span", {
|
92
|
+
className: "Menu-item-icon",
|
93
|
+
children: /* @__PURE__ */ jsx3(Icon, {
|
94
|
+
size: IconSize.SMALL
|
95
|
+
})
|
96
|
+
}),
|
97
|
+
children
|
98
|
+
]
|
99
|
+
})
|
100
|
+
})
|
101
|
+
});
|
82
102
|
if (tooltip) {
|
83
|
-
return /* @__PURE__ */
|
103
|
+
return /* @__PURE__ */ jsx3(Tooltip, {
|
84
104
|
content: tooltip,
|
85
105
|
rootElementStyle: { display: "block" },
|
86
106
|
allowBoundaryElementOverflow: true,
|
87
107
|
placement: tooltipPlacement ? tooltipPlacement : "bottom",
|
88
|
-
...tooltipOptions || {}
|
89
|
-
|
108
|
+
...tooltipOptions || {},
|
109
|
+
children: renderedItem
|
110
|
+
});
|
90
111
|
}
|
91
112
|
return renderedItem;
|
92
113
|
};
|
@@ -106,40 +127,45 @@ var MenuItemLink = ({
|
|
106
127
|
rel: newTab ? "noopener noreferrer" : void 0,
|
107
128
|
target: newTab ? "_blank" : void 0
|
108
129
|
};
|
109
|
-
return /* @__PURE__ */
|
110
|
-
...finalProps
|
111
|
-
|
130
|
+
return /* @__PURE__ */ jsx3(MenuItem, {
|
131
|
+
...finalProps,
|
132
|
+
children
|
133
|
+
});
|
112
134
|
};
|
113
135
|
|
114
136
|
// src/MenuItemList.tsx
|
115
137
|
import { forwardRef as forwardRef2 } from "react";
|
116
138
|
import "./styles/Menu.css";
|
117
|
-
|
139
|
+
import { jsx as jsx4 } from "react/jsx-runtime";
|
140
|
+
var MenuItemList = forwardRef2(({ children, ...rest }, ref) => /* @__PURE__ */ jsx4("div", {
|
118
141
|
...rest,
|
119
142
|
ref,
|
120
143
|
"data-test-id": "menu-item-list",
|
121
|
-
className: "Menu-item-list"
|
122
|
-
|
144
|
+
className: "Menu-item-list",
|
145
|
+
children
|
146
|
+
}));
|
123
147
|
MenuItemList.displayName = "MenuItemList";
|
124
148
|
|
125
149
|
// src/MenuSearch.tsx
|
126
150
|
import { TextField } from "@launchpad-ui/form";
|
127
151
|
import { forwardRef as forwardRef3 } from "react";
|
128
152
|
import "./styles/Menu.css";
|
153
|
+
import { jsx as jsx5 } from "react/jsx-runtime";
|
129
154
|
var MenuSearch = forwardRef3((props, ref) => {
|
130
155
|
const { ariaLabel, placeholder, ...finalProps } = props;
|
131
|
-
return /* @__PURE__ */
|
132
|
-
className: "Menu-search"
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
156
|
+
return /* @__PURE__ */ jsx5("div", {
|
157
|
+
className: "Menu-search",
|
158
|
+
children: /* @__PURE__ */ jsx5(TextField, {
|
159
|
+
...finalProps,
|
160
|
+
ref,
|
161
|
+
className: "Menu-search-input",
|
162
|
+
tiny: true,
|
163
|
+
type: "search",
|
164
|
+
autoComplete: "off",
|
165
|
+
placeholder,
|
166
|
+
"aria-label": ariaLabel || "Search"
|
167
|
+
})
|
168
|
+
});
|
143
169
|
});
|
144
170
|
MenuSearch.displayName = "MenuSearch";
|
145
171
|
|
@@ -169,6 +195,7 @@ var chainEventHandlers = (...handlers) => (event) => {
|
|
169
195
|
};
|
170
196
|
|
171
197
|
// src/Menu.tsx
|
198
|
+
import { Fragment as Fragment2, jsx as jsx6, jsxs as jsxs2 } from "react/jsx-runtime";
|
172
199
|
var Menu = (props) => {
|
173
200
|
const {
|
174
201
|
children,
|
@@ -207,65 +234,76 @@ var Menu = (props) => {
|
|
207
234
|
});
|
208
235
|
return { items: elements, searchElement: searchElem };
|
209
236
|
}
|
210
|
-
return childrenProps.reduce(
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
};
|
222
|
-
case MenuItem:
|
223
|
-
case MenuItemLink:
|
224
|
-
return {
|
225
|
-
items: items.concat(child.props.disabled ? cloneElement(child, {
|
226
|
-
onClick: () => void 0,
|
227
|
-
onKeyDown: () => void 0,
|
228
|
-
tabIndex: -1,
|
229
|
-
disabled: true
|
230
|
-
}) : cloneElement(child, {
|
231
|
-
className: cx3(child.props.className, menuItemClassName),
|
232
|
-
item: child.props.item ?? items.length,
|
233
|
-
onClick: chainEventHandlers(child.props.onClick, () => {
|
234
|
-
onSelect?.(child.props.item ?? items.length);
|
235
|
-
}),
|
236
|
-
onKeyDown: (e) => handleKeyboardInteractions(e, {
|
237
|
-
handleDown: handleArrowDown,
|
238
|
-
handleUp: handleArrowUp
|
237
|
+
return childrenProps.reduce(
|
238
|
+
({ items, searchElement }, child) => {
|
239
|
+
switch (child.type) {
|
240
|
+
case MenuSearch:
|
241
|
+
return {
|
242
|
+
items,
|
243
|
+
searchElement: cloneElement(child, {
|
244
|
+
onKeyDown: (e) => handleKeyboardInteractions(e, {
|
245
|
+
handleDown: handleArrowDown,
|
246
|
+
handleUp: handleArrowUp
|
247
|
+
})
|
239
248
|
})
|
240
|
-
}
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
+
};
|
250
|
+
case MenuItem:
|
251
|
+
case MenuItemLink:
|
252
|
+
return {
|
253
|
+
items: items.concat(
|
254
|
+
child.props.disabled ? cloneElement(child, {
|
255
|
+
onClick: () => void 0,
|
256
|
+
onKeyDown: () => void 0,
|
257
|
+
tabIndex: -1,
|
258
|
+
disabled: true
|
259
|
+
}) : cloneElement(child, {
|
260
|
+
className: cx3(child.props.className, menuItemClassName),
|
261
|
+
item: child.props.item ?? items.length,
|
262
|
+
onClick: chainEventHandlers(child.props.onClick, () => {
|
263
|
+
onSelect?.(child.props.item ?? items.length);
|
264
|
+
}),
|
265
|
+
onKeyDown: (e) => handleKeyboardInteractions(e, {
|
266
|
+
handleDown: handleArrowDown,
|
267
|
+
handleUp: handleArrowUp
|
268
|
+
})
|
269
|
+
})
|
270
|
+
),
|
271
|
+
searchElement
|
272
|
+
};
|
273
|
+
case MenuDivider:
|
274
|
+
return { items: items.concat(child), searchElement };
|
275
|
+
default:
|
276
|
+
return { items, searchElement };
|
277
|
+
}
|
278
|
+
},
|
279
|
+
{ items: [], searchElement: null }
|
280
|
+
);
|
249
281
|
}, [children, enableVirtualization, menuItemClassName, handleArrowDown, handleArrowUp, onSelect]);
|
250
282
|
if (enableVirtualization) {
|
251
|
-
return /* @__PURE__ */
|
283
|
+
return /* @__PURE__ */ jsx6(MenuBase, {
|
252
284
|
isVirtual: true,
|
253
|
-
size
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
285
|
+
size,
|
286
|
+
children: /* @__PURE__ */ jsx6(ItemVirtualizer, {
|
287
|
+
items: Children.toArray(reduceItems.items),
|
288
|
+
searchElement: reduceItems.searchElement,
|
289
|
+
overscan,
|
290
|
+
menuItemClassName,
|
291
|
+
onSelect,
|
292
|
+
itemHeight,
|
293
|
+
focusManager
|
294
|
+
})
|
295
|
+
});
|
263
296
|
}
|
264
|
-
return /* @__PURE__ */
|
265
|
-
size
|
266
|
-
|
267
|
-
|
268
|
-
|
297
|
+
return /* @__PURE__ */ jsxs2(MenuBase, {
|
298
|
+
size,
|
299
|
+
children: [
|
300
|
+
reduceItems.searchElement,
|
301
|
+
/* @__PURE__ */ jsx6(MenuItemList, {
|
302
|
+
role: "presentation",
|
303
|
+
children: reduceItems.items
|
304
|
+
})
|
305
|
+
]
|
306
|
+
});
|
269
307
|
};
|
270
308
|
var ItemVirtualizer = (props) => {
|
271
309
|
const {
|
@@ -294,63 +332,72 @@ var ItemVirtualizer = (props) => {
|
|
294
332
|
rowVirtualizer.scrollToIndex(0);
|
295
333
|
searchRef.current?.focus?.();
|
296
334
|
}, [rowVirtualizer]);
|
297
|
-
const focusMenuItem = useCallback(
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
if (hasSearch) {
|
309
|
-
focusSearchBar();
|
310
|
-
} else {
|
311
|
-
focusMenuItem(direction === "next" ? 0 : lastVirtualItemIndex);
|
335
|
+
const focusMenuItem = useCallback(
|
336
|
+
(index) => {
|
337
|
+
rowVirtualizer.scrollToIndex(index);
|
338
|
+
setNextFocusValue(index);
|
339
|
+
},
|
340
|
+
[rowVirtualizer]
|
341
|
+
);
|
342
|
+
const handleKeyboardFocusInteraction = useCallback(
|
343
|
+
(direction) => {
|
344
|
+
if (focusedItemIndex.current === null || focusedItemIndex.current === void 0) {
|
345
|
+
return;
|
312
346
|
}
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
347
|
+
const nextIndex = direction === "next" ? focusedItemIndex.current + 1 : focusedItemIndex.current - 1;
|
348
|
+
const shouldWrap = direction === "next" && focusedItemIndex.current === lastVirtualItemIndex || direction === "previous" && focusedItemIndex.current === 0;
|
349
|
+
if (shouldWrap) {
|
350
|
+
if (hasSearch) {
|
351
|
+
focusSearchBar();
|
352
|
+
} else {
|
353
|
+
focusMenuItem(direction === "next" ? 0 : lastVirtualItemIndex);
|
354
|
+
}
|
355
|
+
return;
|
356
|
+
}
|
357
|
+
switch (direction) {
|
358
|
+
case "next":
|
359
|
+
rowVirtualizer.scrollToIndex(nextIndex);
|
360
|
+
focusManager.focusNext();
|
361
|
+
break;
|
362
|
+
case "previous":
|
363
|
+
rowVirtualizer.scrollToIndex(nextIndex);
|
364
|
+
focusManager.focusPrevious();
|
365
|
+
break;
|
366
|
+
default:
|
367
|
+
break;
|
368
|
+
}
|
369
|
+
},
|
370
|
+
[focusManager, focusMenuItem, focusSearchBar, hasSearch, lastVirtualItemIndex, rowVirtualizer]
|
371
|
+
);
|
372
|
+
const getItemProps = useCallback(
|
373
|
+
(itemElem, index) => {
|
374
|
+
const childProps = itemElem.props;
|
375
|
+
switch (itemElem.type) {
|
376
|
+
case MenuItem:
|
377
|
+
case MenuItemLink:
|
378
|
+
return {
|
379
|
+
className: cx3(childProps.className, menuItemClassName),
|
380
|
+
onKeyDown: childProps.disabled ? () => void 0 : (e) => handleKeyboardFocusKeydown(e, {
|
381
|
+
handleFocusBackward: handleKeyboardFocusInteraction,
|
382
|
+
handleFocusForward: handleKeyboardFocusInteraction
|
383
|
+
}),
|
384
|
+
onFocus: chainEventHandlers(childProps.onFocus, () => {
|
385
|
+
focusedItemIndex.current = index;
|
386
|
+
}),
|
387
|
+
id: createItemId(index, menuId.current),
|
388
|
+
onBlur: chainEventHandlers(childProps.onBlur, () => {
|
389
|
+
focusedItemIndex.current = null;
|
390
|
+
}),
|
391
|
+
onClick: childProps.disabled ? () => void 0 : chainEventHandlers(childProps.onClick, () => {
|
392
|
+
onSelect?.(childProps.item);
|
393
|
+
})
|
394
|
+
};
|
395
|
+
default:
|
396
|
+
return {};
|
397
|
+
}
|
398
|
+
},
|
399
|
+
[handleKeyboardFocusInteraction, menuItemClassName, onSelect]
|
400
|
+
);
|
354
401
|
useEffect(() => {
|
355
402
|
if (nextFocusValue !== null) {
|
356
403
|
requestAnimationFrame(() => {
|
@@ -372,38 +419,51 @@ var ItemVirtualizer = (props) => {
|
|
372
419
|
}
|
373
420
|
}
|
374
421
|
};
|
375
|
-
const renderSearch = useMemo(
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
|
384
|
-
|
385
|
-
|
386
|
-
|
387
|
-
|
388
|
-
|
389
|
-
ref: elem.type !== MenuItem || elem.type !== MenuItemLink ? virtualRow.measureRef : void 0,
|
390
|
-
role: "presentation",
|
391
|
-
className: cx3("VirtualMenu-item"),
|
392
|
-
style: {
|
393
|
-
transform: `translateY(${virtualRow.start}px)`
|
422
|
+
const renderSearch = useMemo(
|
423
|
+
() => searchElement ? cloneElement(searchElement, {
|
424
|
+
onKeyDown: (e) => handleKeyboardFocusKeydown(e, {
|
425
|
+
handleFocusBackward: () => focusMenuItem(lastVirtualItemIndex),
|
426
|
+
handleFocusForward: () => focusMenuItem(0)
|
427
|
+
}),
|
428
|
+
ref: searchRef
|
429
|
+
}) : null,
|
430
|
+
[searchElement, lastVirtualItemIndex, focusMenuItem]
|
431
|
+
);
|
432
|
+
const renderItems = useMemo(
|
433
|
+
() => rowVirtualizer.virtualItems.map((virtualRow) => {
|
434
|
+
if (!items) {
|
435
|
+
return null;
|
394
436
|
}
|
395
|
-
|
396
|
-
|
397
|
-
|
398
|
-
|
399
|
-
|
400
|
-
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
}
|
406
|
-
|
437
|
+
const elem = items[virtualRow.index];
|
438
|
+
return /* @__PURE__ */ jsx6("div", {
|
439
|
+
ref: elem.type !== MenuItem || elem.type !== MenuItemLink ? virtualRow.measureRef : void 0,
|
440
|
+
role: "presentation",
|
441
|
+
className: cx3("VirtualMenu-item"),
|
442
|
+
style: {
|
443
|
+
transform: `translateY(${virtualRow.start}px)`
|
444
|
+
},
|
445
|
+
children: cloneElement(elem, getItemProps(elem, virtualRow.index))
|
446
|
+
}, virtualRow.index);
|
447
|
+
}),
|
448
|
+
[rowVirtualizer.virtualItems, items, getItemProps]
|
449
|
+
);
|
450
|
+
return /* @__PURE__ */ jsxs2(Fragment2, {
|
451
|
+
children: [
|
452
|
+
renderSearch,
|
453
|
+
/* @__PURE__ */ jsx6(MenuItemList, {
|
454
|
+
ref: parentRef,
|
455
|
+
role: "presentation",
|
456
|
+
children: /* @__PURE__ */ jsx6("div", {
|
457
|
+
role: "presentation",
|
458
|
+
className: "VirtualMenu-item-list",
|
459
|
+
style: {
|
460
|
+
height: `${rowVirtualizer.totalSize}px`
|
461
|
+
},
|
462
|
+
children: renderItems
|
463
|
+
})
|
464
|
+
})
|
465
|
+
]
|
466
|
+
});
|
407
467
|
};
|
408
468
|
|
409
469
|
// src/types.ts
|
package/dist/index.es.js.map
CHANGED
@@ -2,6 +2,6 @@
|
|
2
2
|
"version": 3,
|
3
3
|
"sources": ["../../../scripts/react-shim.js", "../src/MenuBase.tsx", "../src/MenuDivider.tsx", "../src/MenuItem.tsx", "../src/MenuItemList.tsx", "../src/MenuSearch.tsx", "../src/Menu.tsx", "../src/utils.ts", "../src/types.ts"],
|
4
4
|
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import type { MenuSize } from './types';\n\nimport cx from 'clsx';\nimport { forwardRef } from 'react';\n\nimport './styles/Menu.css';\n\ntype MenuBaseProps = React.ComponentPropsWithRef<'div'> & {\n isVirtual?: boolean;\n size?: MenuSize;\n};\n\nconst MenuBase = forwardRef<HTMLDivElement, MenuBaseProps>(\n ({ children, size, isVirtual, ...props }, ref) => {\n const classes = cx('Menu', {\n 'Menu--isVirtual': isVirtual,\n [`MenuSize--${size}`]: size,\n });\n\n return (\n <div {...props} role=\"menu\" className={classes} ref={ref}>\n {children}\n </div>\n );\n }\n);\n\nMenuBase.displayName = 'MenuBase';\n\nexport { MenuBase };\nexport type { MenuBaseProps };\n", "import type { SeparatorProps } from '@react-aria/separator';\n\nimport { useSeparator } from '@react-aria/separator';\n\nimport './styles/Menu.css';\n\ntype MenuDividerProps = SeparatorProps & {\n innerRef?: React.RefObject<HTMLDivElement>;\n};\n\nconst MenuDivider = ({ elementType = 'div', orientation, innerRef }: MenuDividerProps) => {\n const { separatorProps } = useSeparator({\n orientation,\n elementType,\n });\n\n return <div {...separatorProps} ref={innerRef} className=\"Menu-divider\" />;\n};\n\nexport { MenuDivider };\nexport type { MenuDividerProps };\n", "import type { Icon } from '@launchpad-ui/icons';\nimport type { PopoverPlacement } from '@launchpad-ui/popover';\n\nimport { IconSize } from '@launchpad-ui/icons';\nimport { Tooltip } from '@launchpad-ui/tooltip';\nimport { Slot } from '@radix-ui/react-slot';\nimport { FocusRing } from '@react-aria/focus';\nimport cx from 'clsx';\nimport { Link } from 'react-router-dom';\n\nimport './styles/Menu.css';\n\n// Merge two types and get rid of overlapping definitions\ntype Merge<T, U> = Omit<T, keyof U> & U;\n\ntype PropsWithComponent<P, T extends React.ElementType> = P & { component?: T };\n\ntype PolymorphicPropsWithRef<P, T extends React.ElementType> = Merge<\n T extends keyof JSX.IntrinsicElements\n ? React.PropsWithRef<JSX.IntrinsicElements[T]>\n : React.ComponentPropsWithRef<T>,\n PropsWithComponent<P, T>\n>;\n\ntype MenuItemOwnProps = {\n isHighlighted?: boolean;\n icon?: typeof Icon | null;\n disabled?: boolean;\n nested?: boolean;\n groupHeader?: boolean;\n tooltip?: string | React.ReactElement;\n tooltipOptions?: typeof Tooltip;\n tooltipPlacement?: PopoverPlacement;\n asChild?: boolean;\n};\n\nconst defaultElement = 'button';\n\ntype MenuItemProps<\n P,\n T extends React.ElementType = typeof defaultElement\n> = PolymorphicPropsWithRef<\n | (MenuItemOwnProps & {\n item: P; // Infer the type if it is included\n })\n | (MenuItemOwnProps & {\n item?: undefined;\n }),\n T\n>;\n\nconst MenuItem = <P, T extends React.ElementType = typeof defaultElement>({\n ...props\n}: MenuItemProps<P, T>) => {\n const {\n // TODO: remove component prop once we migrate over to asChild format\n component,\n children,\n isHighlighted,\n icon: Icon,\n nested,\n groupHeader,\n item,\n disabled,\n className,\n tooltip,\n role = 'menuitem',\n tooltipPlacement,\n onKeyDown,\n tooltipOptions,\n asChild,\n ...rest\n } = props;\n\n const Component: React.ElementType = component || (asChild ? Slot : defaultElement);\n\n const renderedItem = (\n <FocusRing focusRingClass=\"has-focus\">\n <Component\n {...rest}\n disabled={disabled}\n aria-disabled={disabled ? disabled : undefined}\n className={cx(\n 'Menu-item',\n className,\n { 'is-highlighted': isHighlighted },\n { 'Menu-item--nested': nested },\n { 'Menu-item--header': groupHeader }\n )}\n role={role}\n onKeyDown={onKeyDown}\n >\n {asChild ? (\n children\n ) : (\n <>\n {Icon && (\n <span className=\"Menu-item-icon\">\n <Icon size={IconSize.SMALL} />\n </span>\n )}\n {children}\n </>\n )}\n </Component>\n </FocusRing>\n );\n\n if (tooltip) {\n return (\n <Tooltip\n content={tooltip}\n rootElementStyle={{ display: 'block' }}\n allowBoundaryElementOverflow\n placement={tooltipPlacement ? tooltipPlacement : 'bottom'}\n {...(tooltipOptions || {})}\n >\n {renderedItem}\n </Tooltip>\n );\n }\n\n return renderedItem;\n};\n\ntype MenuItemLinkOwnProps = {\n disabled?: boolean;\n useHistory?: boolean;\n newTab?: boolean;\n};\n\ntype MenuItemLinkProps<P, T extends React.ElementType = typeof Link> =\n | Merge<Omit<MenuItemProps<P, T>, 'component' | 'item'>, MenuItemLinkOwnProps> &\n (\n | {\n item?: undefined;\n }\n | {\n item: P;\n }\n );\n\n// By default, this is a Link component whenever useHistory is\n// explicitly not false\n// TODO: deprecate this component\nconst MenuItemLink = <P, T extends React.ElementType = typeof Link>({\n to,\n disabled = false,\n useHistory = true,\n newTab = false,\n children,\n ...props\n}: MenuItemLinkProps<P, T>) => {\n const finalProps = {\n ...props,\n disabled,\n component: useHistory ? Link : ('a' as const),\n [useHistory ? 'to' : 'href']: disabled ? '' : to,\n rel: newTab ? 'noopener noreferrer' : undefined,\n target: newTab ? '_blank' : undefined,\n };\n\n // Ideally if this item is disabled, it should be a button rather\n // than a link https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/anchor-is-valid.md\n\n return <MenuItem {...finalProps}>{children}</MenuItem>;\n};\n\nexport { MenuItem, MenuItemLink };\nexport type { MenuItemProps, MenuItemLinkProps };\n", "import { forwardRef } from 'react';\n\nimport './styles/Menu.css';\n\ntype MenuItemListProps = Omit<React.ComponentPropsWithRef<'div'>, 'className'>;\n\nconst MenuItemList = forwardRef<HTMLDivElement, MenuItemListProps>(({ children, ...rest }, ref) => (\n <div {...rest} ref={ref} data-test-id=\"menu-item-list\" className=\"Menu-item-list\">\n {children}\n </div>\n));\n\nMenuItemList.displayName = 'MenuItemList';\n\nexport { MenuItemList };\nexport type { MenuItemListProps };\n", "import type { ChangeEvent } from 'react';\n\nimport { TextField } from '@launchpad-ui/form';\nimport { forwardRef } from 'react';\n\nimport './styles/Menu.css';\n\ntype MenuSearchProps = {\n ariaLabel?: string;\n value?: string;\n placeholder?: string;\n onChange?(event: ChangeEvent<HTMLInputElement>): void;\n};\n\nconst MenuSearch = forwardRef<HTMLInputElement, MenuSearchProps>((props, ref) => {\n const { ariaLabel, placeholder, ...finalProps } = props;\n\n return (\n <div className=\"Menu-search\">\n <TextField\n {...finalProps}\n ref={ref}\n className=\"Menu-search-input\"\n tiny\n type=\"search\"\n autoComplete=\"off\"\n placeholder={placeholder}\n aria-label={ariaLabel || 'Search'}\n />\n </div>\n );\n});\n\nMenuSearch.displayName = 'MenuSearch';\n\nexport { MenuSearch };\nexport type { MenuSearchProps };\n", "import type { MenuItemProps } from './MenuItem';\nimport type { MenuSize } from './types';\nimport type { FocusManager } from '@react-aria/focus';\nimport type { KeyboardEvent, ReactElement } from 'react';\n\nimport { useFocusManager } from '@react-aria/focus';\nimport cx from 'clsx';\nimport { Children, cloneElement, useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { useVirtual } from 'react-virtual';\nimport { v4 } from 'uuid';\n\nimport { MenuBase } from './MenuBase';\nimport { MenuDivider } from './MenuDivider';\nimport { MenuItem, MenuItemLink } from './MenuItem';\nimport { MenuItemList } from './MenuItemList';\nimport { MenuSearch } from './MenuSearch';\nimport {\n chainEventHandlers,\n createItemId,\n getNodeForIndex,\n handleKeyboardInteractions,\n} from './utils';\n\ntype ControlledMenuProps<T> = {\n children: React.ReactNode;\n onSelect?: (item: T) => void;\n /**\n * Menus items are rendered using react-virtual for\n * additional rendering performance.\n */\n enableVirtualization?: boolean;\n /**\n * Class name to be applied to all MenuItem and MenuItemLink components\n * in the menu.\n */\n menuItemClassName?: string;\n /**\n * Sets the width of the menu. This is especially useful when using virtual items\n * since the width cannot be automatically set by the widest element.\n */\n size?: MenuSize;\n /**\n * Sets the number out of elements rendered outside of the view window\n * when using virtualization\n */\n overscan?: number;\n /**\n * Sets the height for each menu item when using virtualization.\n *\n */\n itemHeight?: number;\n};\n\ntype MenuProps<T extends number | string> = ControlledMenuProps<T>;\n\nconst Menu = <T extends number | string>(props: MenuProps<T>) => {\n const {\n children,\n menuItemClassName,\n onSelect,\n enableVirtualization,\n itemHeight,\n size,\n overscan = 1,\n } = props;\n\n const focusManager = useFocusManager();\n\n const handleArrowDown = useCallback(() => {\n focusManager.focusNext({ wrap: true });\n }, [focusManager]);\n\n const handleArrowUp = useCallback(() => {\n focusManager.focusPrevious({ wrap: true });\n }, [focusManager]);\n\n const reduceItems = useMemo(() => {\n const childrenProps = Children.toArray(children);\n if (enableVirtualization) {\n // the virtualized menu has its own handlers and props\n let searchElem = null;\n let elements: ReactElement[] = [];\n (childrenProps as ReactElement[]).forEach((child: ReactElement) => {\n switch (child.type) {\n case MenuSearch:\n searchElem = child;\n break;\n case MenuItem:\n case MenuItemLink:\n case MenuDivider:\n elements = elements.concat(child);\n break;\n default:\n break;\n }\n });\n return { items: elements, searchElement: searchElem };\n }\n\n return (childrenProps as ReactElement[]).reduce(\n (\n { items, searchElement }: { items: ReactElement[]; searchElement: null | ReactElement },\n child\n ) => {\n switch (child.type) {\n case MenuSearch:\n return {\n items,\n searchElement: cloneElement(child, {\n onKeyDown: (e: KeyboardEvent) =>\n handleKeyboardInteractions(e, {\n handleDown: handleArrowDown,\n handleUp: handleArrowUp,\n }),\n }),\n };\n case MenuItem:\n case MenuItemLink:\n return {\n items: items.concat(\n child.props.disabled\n ? cloneElement(child, {\n onClick: () => undefined,\n onKeyDown: () => undefined,\n tabIndex: -1,\n disabled: true,\n })\n : cloneElement(child, {\n className: cx(child.props.className, menuItemClassName),\n item: child.props.item ?? items.length,\n // set focus on the first menu item if there is no search input, and set in the tab order\n onClick: chainEventHandlers(child.props.onClick, () => {\n onSelect?.(child.props.item ?? items.length);\n }),\n onKeyDown: (e: KeyboardEvent) =>\n handleKeyboardInteractions(e, {\n handleDown: handleArrowDown,\n handleUp: handleArrowUp,\n }),\n })\n ),\n searchElement,\n };\n case MenuDivider:\n return { items: items.concat(child), searchElement };\n default:\n return { items, searchElement };\n }\n },\n { items: [], searchElement: null }\n );\n }, [children, enableVirtualization, menuItemClassName, handleArrowDown, handleArrowUp, onSelect]);\n\n if (enableVirtualization) {\n return (\n <MenuBase isVirtual size={size}>\n <ItemVirtualizer<T>\n items={Children.toArray(reduceItems.items) as ReactElement[]}\n searchElement={reduceItems.searchElement}\n overscan={overscan}\n menuItemClassName={menuItemClassName}\n onSelect={onSelect}\n itemHeight={itemHeight}\n focusManager={focusManager}\n />\n </MenuBase>\n );\n }\n\n return (\n <MenuBase size={size}>\n {reduceItems.searchElement}\n <MenuItemList role=\"presentation\">{reduceItems.items}</MenuItemList>\n </MenuBase>\n );\n};\n\ntype ItemVirtualizerProps<T> = Omit<ControlledMenuProps<T>, 'children'> & {\n items: ReactElement[] | null;\n searchElement?: React.ReactElement | null;\n focusManager: FocusManager;\n};\n\nconst ItemVirtualizer = <T extends number | string>(props: ItemVirtualizerProps<T>) => {\n const {\n overscan,\n searchElement,\n itemHeight = 33,\n menuItemClassName,\n items: items,\n focusManager,\n onSelect,\n } = props;\n\n const menuId = useRef(`menu-ctrl-${v4()}`);\n\n const focusedItemIndex = useRef<number | null>(null);\n const parentRef = useRef<HTMLDivElement | null>(null);\n const searchRef = useRef<HTMLInputElement>();\n\n const [nextFocusValue, setNextFocusValue] = useState<number | null>(null);\n\n const hasSearch = !!searchElement;\n\n const lastVirtualItemIndex = items ? items.length - 1 : 0;\n\n const rowVirtualizer = useVirtual({\n size: items !== null ? items.length : 0,\n parentRef,\n estimateSize: useCallback(() => itemHeight, [itemHeight]),\n overscan,\n });\n\n const focusSearchBar = useCallback(() => {\n rowVirtualizer.scrollToIndex(0);\n searchRef.current?.focus?.();\n }, [rowVirtualizer]);\n\n /**\n * Scrolls to the menu item with the index provided and\n * then manually focuses it using a side effect in useEffect\n */\n const focusMenuItem = useCallback(\n (index: number) => {\n rowVirtualizer.scrollToIndex(index);\n setNextFocusValue(index);\n },\n [rowVirtualizer]\n );\n\n const handleKeyboardFocusInteraction = useCallback(\n (direction: 'next' | 'previous') => {\n if (focusedItemIndex.current === null || focusedItemIndex.current === undefined) {\n return;\n }\n const nextIndex =\n direction === 'next' ? focusedItemIndex.current + 1 : focusedItemIndex.current - 1;\n const shouldWrap =\n (direction === 'next' && focusedItemIndex.current === lastVirtualItemIndex) ||\n (direction === 'previous' && focusedItemIndex.current === 0);\n if (shouldWrap) {\n // we are at the end of the list so we will\n // scroll back to the beginning of the list\n if (hasSearch) {\n focusSearchBar();\n } else {\n // if at end, wrap to beginning, else focus last item\n focusMenuItem(direction === 'next' ? 0 : lastVirtualItemIndex);\n }\n return;\n }\n switch (direction) {\n case 'next':\n rowVirtualizer.scrollToIndex(nextIndex);\n focusManager.focusNext();\n break;\n case 'previous':\n rowVirtualizer.scrollToIndex(nextIndex);\n focusManager.focusPrevious();\n break;\n default:\n break;\n }\n },\n [focusManager, focusMenuItem, focusSearchBar, hasSearch, lastVirtualItemIndex, rowVirtualizer]\n );\n\n const getItemProps = useCallback(\n (itemElem: ReactElement, index: number) => {\n const childProps = itemElem.props as MenuItemProps<T>;\n switch (itemElem.type) {\n case MenuItem:\n case MenuItemLink:\n return {\n className: cx(childProps.className, menuItemClassName),\n // set focus on the first menu item if there is no search input, and set in the tab order\n onKeyDown: childProps.disabled\n ? () => undefined\n : (e: KeyboardEvent) =>\n handleKeyboardFocusKeydown(e, {\n handleFocusBackward: handleKeyboardFocusInteraction,\n handleFocusForward: handleKeyboardFocusInteraction,\n }),\n onFocus: chainEventHandlers(childProps.onFocus, () => {\n focusedItemIndex.current = index;\n }),\n id: createItemId(index, menuId.current),\n onBlur: chainEventHandlers(childProps.onBlur, () => {\n focusedItemIndex.current = null;\n }),\n onClick: childProps.disabled\n ? () => undefined\n : chainEventHandlers(childProps.onClick, () => {\n onSelect?.(childProps.item as T);\n }),\n } as MenuItemProps<T>;\n default:\n return {};\n }\n },\n [handleKeyboardFocusInteraction, menuItemClassName, onSelect]\n );\n\n useEffect(() => {\n if (nextFocusValue !== null) {\n requestAnimationFrame(() => {\n const element = getNodeForIndex(nextFocusValue, menuId.current);\n element?.focus();\n });\n setNextFocusValue(null);\n }\n }, [nextFocusValue]);\n\n /**\n * Calls handleFocusForward when the user is attempting to focus forward using\n * tab or arrow keys. Calls handleFocusBackward when the users wants to move backward.\n */\n const handleKeyboardFocusKeydown = (\n e: KeyboardEvent,\n callbacks: Record<\n 'handleFocusForward' | 'handleFocusBackward',\n (direction: 'next' | 'previous') => void\n >\n ) => {\n const keyOps = ['Tab', 'ArrowUp', 'ArrowDown'];\n if (keyOps.includes(e.key)) {\n e.preventDefault();\n e.stopPropagation();\n if ((e.key === 'Tab' && e.shiftKey) || e.key === 'ArrowUp') {\n callbacks.handleFocusBackward?.('previous');\n } else if (e.key === 'ArrowDown' || e.key === 'Tab') {\n callbacks.handleFocusForward?.('next');\n }\n }\n };\n\n const renderSearch = useMemo(\n () =>\n searchElement\n ? cloneElement(searchElement, {\n onKeyDown: (e: KeyboardEvent) =>\n handleKeyboardFocusKeydown(e, {\n handleFocusBackward: () => focusMenuItem(lastVirtualItemIndex),\n handleFocusForward: () => focusMenuItem(0),\n }),\n ref: searchRef,\n })\n : null,\n [searchElement, lastVirtualItemIndex, focusMenuItem]\n );\n\n const renderItems = useMemo(\n () =>\n rowVirtualizer.virtualItems.map((virtualRow) => {\n if (!items) {\n return null;\n }\n const elem = items[virtualRow.index];\n return (\n <div\n key={virtualRow.index}\n ref={\n elem.type !== MenuItem || elem.type !== MenuItemLink\n ? virtualRow.measureRef\n : undefined\n }\n role=\"presentation\"\n className={cx('VirtualMenu-item')}\n style={{\n transform: `translateY(${virtualRow.start}px)`,\n }}\n >\n {cloneElement(elem, getItemProps(elem, virtualRow.index))}\n </div>\n );\n }),\n [rowVirtualizer.virtualItems, items, getItemProps]\n );\n\n return (\n <>\n {renderSearch}\n <MenuItemList ref={parentRef} role=\"presentation\">\n <div\n role=\"presentation\"\n className=\"VirtualMenu-item-list\"\n style={{\n height: `${rowVirtualizer.totalSize}px`,\n }}\n >\n {renderItems}\n </div>\n </MenuItemList>\n </>\n );\n};\n\nexport { Menu, ItemVirtualizer };\nexport type { MenuProps, ItemVirtualizerProps };\n", "import type { EventHandler, KeyboardEvent, SyntheticEvent } from 'react';\n\nconst createItemId = (index: number, id: string) => `${id}-item-${index}`;\n\nconst getNodeForIndex = (index: number | null, menuId: string) =>\n index === null ? index : document.getElementById(createItemId(index, menuId));\n\nconst handleKeyboardInteractions = (\n event: React.KeyboardEvent,\n keyHandlers: Partial<\n Record<'handleUp' | 'handleDown' | 'handleEnter', (e: KeyboardEvent) => void>\n >\n) => {\n const ops = {\n ArrowUp: keyHandlers.handleUp,\n ArrowDown: keyHandlers.handleDown,\n Enter: keyHandlers.handleEnter,\n } as Record<string, (e: KeyboardEvent) => void | undefined>;\n\n if (ops[event.key]) {\n event.preventDefault();\n ops[event.key]?.call(globalThis, event);\n }\n};\n\nconst chainEventHandlers =\n (...handlers: Array<EventHandler<SyntheticEvent> | undefined>) =>\n (event: SyntheticEvent) => {\n handlers.forEach((h) => typeof h === 'function' && h(event));\n };\n\nexport { createItemId, getNodeForIndex, handleKeyboardInteractions, chainEventHandlers };\n", "enum MenuSize {\n SMALL = 'sm',\n MEDIUM = 'md',\n LARGE = 'lg',\n EXTRA_LARGE = 'xl',\n}\n\nexport { MenuSize };\n"],
|
5
|
-
"mappings": ";AAAA;;;
|
6
|
-
"names": []
|
5
|
+
"mappings": "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",
|
6
|
+
"names": ["jsx", "cx", "jsx", "forwardRef", "jsx", "forwardRef", "jsx", "cx", "Fragment", "jsx", "jsxs", "cx", "MenuSize"]
|
7
7
|
}
|