@jobber/components 4.45.4 → 4.45.5

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.
@@ -394,9 +394,14 @@ function DataListActionsMenu({ visible = false, position, onRequestClose, childr
394
394
  useRefocusOnActivator.useRefocusOnActivator(visible);
395
395
  const focusTrapRef = useFocusTrap.useFocusTrap(visible);
396
396
  useOnKeyDown.useOnKeyDown(onRequestClose, "Escape");
397
- return ReactDOM.createPortal(React__default["default"].createElement(framerMotion.AnimatePresence, null, visible && (React__default["default"].createElement("div", { ref: focusTrapRef },
397
+ return ReactDOM.createPortal(React__default["default"].createElement(framerMotion.AnimatePresence, null, visible && (React__default["default"].createElement("div", { ref: focusTrapRef, onClick: handleClick },
398
398
  React__default["default"].createElement(framerMotion.motion.div, { role: "menu", ref: setRef, variants: variants$1, initial: "hidden", animate: "visible", exit: "hidden", transition: { duration: TRANSITION_DELAY_IN_SECONDS }, className: styles$6.menu, style: getPositionCssVars(), onClick: onRequestClose }, children),
399
399
  React__default["default"].createElement("button", { className: styles$6.overlay, onClick: onRequestClose, "aria-label": "Close menu" })))), document.body);
400
+ function handleClick(event) {
401
+ // Prevent menu from firing the parent's onClick event when it is nested
402
+ // within a clickable list item
403
+ event.stopPropagation();
404
+ }
400
405
  function getPositionCssVars() {
401
406
  const { posX, posY } = getPosition();
402
407
  return {
@@ -428,6 +433,9 @@ function DataListItemActionsOverflow({ actions, }) {
428
433
  React__default["default"].createElement(Button.Button, { icon: "more", ariaLabel: "More actions", type: "secondary", variation: "subtle", onClick: handleMoreClick })),
429
434
  React__default["default"].createElement(DataListActionsMenu, { visible: showMenu, position: menuPosition, onRequestClose: handleClose }, actions)));
430
435
  function handleMoreClick(event) {
436
+ // Prevent firing the parent's onClick event when it is nested
437
+ // within a clickable list item
438
+ event.stopPropagation();
431
439
  setShowMenu(true);
432
440
  const rect = event.currentTarget.getBoundingClientRect();
433
441
  const posX = rect.x;
@@ -520,7 +528,15 @@ function DataListItemClickableInternal({ onClick, url, to, children, }) {
520
528
  return (React__default["default"].createElement("a", { className: styles$e.listItemClickable, href: href, onClick: handleClick }, children));
521
529
  }
522
530
  if (onClick) {
523
- return (React__default["default"].createElement("button", { className: styles$e.listItemClickable, onClick: handleClick }, children));
531
+ return (
532
+ // A button can be nested within the list item. To prevent a button inside
533
+ // button error, we need to manually declare a div to be a button
534
+ React__default["default"].createElement("div", { role: "button", tabIndex: 0, className: styles$e.listItemClickable, onClick: handleClick, onKeyDown: e => {
535
+ if (e.key === "Enter" || e.key === " ") {
536
+ e.preventDefault();
537
+ handleClick();
538
+ }
539
+ } }, children));
524
540
  }
525
541
  return React__default["default"].createElement(React__default["default"].Fragment, null, children);
526
542
  function handleClick() {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jobber/components",
3
- "version": "4.45.4",
3
+ "version": "4.45.5",
4
4
  "license": "MIT",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -84,5 +84,5 @@
84
84
  "> 1%",
85
85
  "IE 10"
86
86
  ],
87
- "gitHead": "58229de1e3ea0c47e84fe6d4168f81e4f388a362"
87
+ "gitHead": "ed8af7e37ad965c44890b8db47b76068c1ee0141"
88
88
  }