@activecollab/components 2.0.443 → 2.0.445

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.js CHANGED
@@ -15482,6 +15482,16 @@
15482
15482
  setChildNode = _useState6[1];
15483
15483
  var elementRef = React.useRef(null);
15484
15484
  var isOpenAtLeastOnce = React.useRef(false);
15485
+ var wasOpen = React.useRef(open);
15486
+ var focusBeforeOpen = React.useRef(null);
15487
+ var returnFocusTo = React.useRef(null);
15488
+ var popperRef = React.useRef(null);
15489
+
15490
+ // Read on the render that opens the menu, before the focus lock moves the focus inside it.
15491
+ if (open && !wasOpen.current && typeof document !== "undefined") {
15492
+ focusBeforeOpen.current = document.activeElement;
15493
+ }
15494
+ wasOpen.current = open;
15485
15495
  React.useEffect(function () {
15486
15496
  setOpen(defaultOpen);
15487
15497
  }, [defaultOpen]);
@@ -15519,17 +15529,41 @@
15519
15529
  if (open) {
15520
15530
  isOpenAtLeastOnce.current = true;
15521
15531
  } else if (!open && isOpenAtLeastOnce.current) {
15522
- var _elementRef$current;
15523
- (_elementRef$current = elementRef.current) === null || _elementRef$current === void 0 || _elementRef$current.focus();
15532
+ var previous = focusBeforeOpen.current;
15533
+ var returnTo = previous instanceof HTMLElement && previous.isConnected ? previous : elementRef.current;
15534
+ returnFocusTo.current = returnTo;
15535
+ returnTo === null || returnTo === void 0 || returnTo.focus();
15524
15536
  isOpenAtLeastOnce.current = false;
15525
15537
  }
15526
15538
  }, [open]);
15539
+
15540
+ // A fading menu is already closed. Its content can still reach for the focus, and would take it away
15541
+ // with it when it unmounts, so the focus goes straight back to where the menu returned it.
15542
+ React.useEffect(function () {
15543
+ if (open || exited) {
15544
+ return undefined;
15545
+ }
15546
+ var keepFocusOut = function keepFocusOut(event) {
15547
+ var _popperRef$current;
15548
+ if ((_popperRef$current = popperRef.current) !== null && _popperRef$current !== void 0 && _popperRef$current.contains(event.target)) {
15549
+ var _returnFocusTo$curren;
15550
+ (_returnFocusTo$curren = returnFocusTo.current) === null || _returnFocusTo$curren === void 0 || _returnFocusTo$curren.focus();
15551
+ }
15552
+ };
15553
+ document.addEventListener("focusin", keepFocusOut, true);
15554
+ return function () {
15555
+ return document.removeEventListener("focusin", keepFocusOut, true);
15556
+ };
15557
+ }, [open, exited]);
15527
15558
  return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, target && /*#__PURE__*/React__default["default"].cloneElement(target, targetProps), open || !exited ? /*#__PURE__*/React__default["default"].createElement(Window, {
15528
15559
  onClose: handleClose,
15529
15560
  disableScrollLock: !handleScroll
15530
- // A closing menu hands the focus back at once, it does not hold it for the length of the fade.
15561
+ // The menu returns the focus itself at once, so a late returnFocus cannot undo a caller's move.
15531
15562
  ,
15532
- disableFocusLock: disableFocusLock || !open,
15563
+ disableFocusLock: disableFocusLock || !open
15564
+ // A fading menu is already closed, so an escape pressed meanwhile belongs to the page behind it.
15565
+ ,
15566
+ disableCloseOnEsc: !open,
15533
15567
  style: {
15534
15568
  position: windowAbsolutelyPositioned ? "absolute" : "fixed"
15535
15569
  }
@@ -15539,6 +15573,7 @@
15539
15573
  tabIndex: -1,
15540
15574
  disableBackgroundColor: true
15541
15575
  }) : null, /*#__PURE__*/React__default["default"].createElement(Popper, {
15576
+ ref: popperRef,
15542
15577
  anchorEl: childNode,
15543
15578
  open: childNode ? open : false,
15544
15579
  placement: position,
@@ -15561,7 +15596,10 @@
15561
15596
  }, /*#__PURE__*/React__default["default"].createElement(StyledMenu$3, {
15562
15597
  className: classNames__default["default"]("c-simple-menu__paper", "c-simple-menu__".concat(mode), menuClassName, className),
15563
15598
  $mode: mode,
15564
- onMouseDown: onMenuClick
15599
+ onMouseDown: onMenuClick,
15600
+ style: open ? undefined : {
15601
+ pointerEvents: "none"
15602
+ }
15565
15603
  }, /*#__PURE__*/React__default["default"].createElement(MenuContextProvider, {
15566
15604
  value: {
15567
15605
  open,
@@ -24847,6 +24885,8 @@
24847
24885
  });
24848
24886
  Textarea.displayName = "Textarea";
24849
24887
 
24888
+ var SHEET_ENTER_MS = 400;
24889
+ var SHEET_EXIT_MS = 200;
24850
24890
  var StyledSheetIcons = styled__default["default"].div.withConfig({
24851
24891
  displayName: "Styles__StyledSheetIcons",
24852
24892
  componentId: "sc-144eyxd-0"
@@ -24856,7 +24896,7 @@
24856
24896
  displayName: "Styles__StyledSheetWrapper",
24857
24897
  componentId: "sc-144eyxd-1"
24858
24898
  })(["", " ", " position:relative;max-width:95vw;display:flex;flex-direction:row;", " ", " ", " ", " ", " ", " ", ""], BoxSizingStyle, FontStyle, function (props) {
24859
- return props.$mode === "stretch" ? styled.css(["margin-top:8px;height:calc(100vh - 16px);width:calc(100vw - 100px);max-width:1000px;", "{flex-direction:column;width:0;height:calc(100vh - 32px);& > *{margin-bottom:8px;animation-fill-mode:both;}span{top:8px;}}"], StyledSheetIcons) : styled.css(["max-height:calc(100vh - 156px);margin-top:126px;margin-bottom:30px;width:540px;flex-direction:column;", "{flex-direction:row-reverse;& > *{margin-left:8px;animation-fill-mode:both;}span{top:-48px;right:8px;}}"], StyledSheetIcons);
24899
+ return props.$mode === "stretch" ? styled.css(["margin-top:8px;height:calc(100vh - 16px);width:calc(100vw - 100px);max-width:1000px;", "{flex-direction:column;width:0;height:calc(100vh - 32px);& > *{margin-bottom:8px;}span{top:8px;}}"], StyledSheetIcons) : styled.css(["max-height:calc(100vh - 156px);margin-top:126px;margin-bottom:30px;width:540px;flex-direction:column;", "{flex-direction:row-reverse;& > *{margin-left:8px;}span{top:-48px;right:8px;}}"], StyledSheetIcons);
24860
24900
  }, function (props) {
24861
24901
  return props.$mode === "stretch" && styled.css(["@media (max-width:640px){width:100%;height:100%;}"]);
24862
24902
  }, function (props) {
@@ -24880,62 +24920,55 @@
24880
24920
  return props.$mode === "stretch" && props.$position === "left" && styled.css(["flex-direction:row-reverse;", "{span{right:-8px;}}"], StyledSheetIcons);
24881
24921
  });
24882
24922
  StyledSheetWrapper.displayName = "StyledSheetWrapper";
24923
+ var StyledSheetSurface = styled__default["default"].div.withConfig({
24924
+ displayName: "Styles__StyledSheetSurface",
24925
+ componentId: "sc-144eyxd-2"
24926
+ })(["display:flex;flex-direction:inherit;flex:1 1 auto;min-width:0;min-height:0;"]);
24927
+ StyledSheetSurface.displayName = "StyledSheetSurface";
24883
24928
  var StyledSheetWrapperPaper = styled__default["default"].div.attrs(function (props) {
24884
24929
  return {
24885
24930
  className: props.paperClass
24886
24931
  };
24887
24932
  }).withConfig({
24888
24933
  displayName: "Styles__StyledSheetWrapperPaper",
24889
- componentId: "sc-144eyxd-2"
24934
+ componentId: "sc-144eyxd-3"
24890
24935
  })(["background-color:var(--page-paper-main);color:var(--color-theme-900);box-shadow:var(--shadow-primary);border-radius:6px;overflow:auto;animation:0.3s linear ease-out;transform:translateZ(0);contain:paint;overscroll-behavior:contain;", ""], {
24891
24936
  "flex": "1 1 auto"
24892
24937
  });
24893
24938
  StyledSheetWrapperPaper.displayName = "StyledSheetWrapperPaper";
24894
- var StyledSheetControlsTop = styled.keyframes(["0%{opacity:0;transform:translateY(-200px);}100%{opacity:1;transform:translateY(0);}"]);
24895
- var StyledSheetControlsBottom = styled.keyframes(["0%{opacity:1;transform:translateY(0);}100%{opacity:0;transform:translateY(-200px);}"]);
24896
- var StyledSheetControlsCenterIn = styled.keyframes(["0%{transform:translateY(-150px);opacity:0;}100%{transform:translateY(0);opacity:1;}"]);
24897
- var StyledSheetControlsCenterOut = styled.keyframes(["0%{transform:translateY(0);opacity:1;}100%{transform:translateY(-150px);opacity:0;}"]);
24898
24939
  var StyledAnimatedSpan = styled__default["default"].span.withConfig({
24899
24940
  displayName: "Styles__StyledAnimatedSpan",
24900
- componentId: "sc-144eyxd-3"
24901
- })(["&:hover svg{fill:var(--color-primary);}", " ", " ", " ", " ", ""], function (props) {
24902
- return props.$state === "entering" && styled.css(["opacity:1;", ""], props.$mode === "stretch" ? styled.css(["animation-name:", ";animation-duration:", ";animation-delay:", ";"], StyledSheetControlsTop, "".concat(props.$durationIn, "s"), "".concat(props.$durationIn, "s")) : styled.css(["animation-name:", ";animation-duration:", ";animation-delay:0s;"], StyledSheetControlsCenterIn, "".concat(props.$maxDurationIn, "s")));
24903
- }, function (props) {
24904
- return props.$state === "entered" && styled.css(["opacity:1;"]);
24905
- }, function (props) {
24941
+ componentId: "sc-144eyxd-4"
24942
+ })(["&:hover svg{fill:var(--color-primary);}", ""], function (props) {
24906
24943
  return props.$disabled && styled.css(["pointer-events:none;svg{opacity:0.5;}"]);
24907
- }, function (props) {
24908
- return props.$state === "exiting" && styled.css(["opacity:0;", ""], props.$mode === "stretch" ? styled.css(["animation-name:", ";animation-duration:", ";animation-delay:", ";"], StyledSheetControlsBottom, "".concat(props.$durationOut, "s"), "".concat(props.$durationOut, "s")) : styled.css(["animation-name:", ";animation-duration:", ";animation-delay:0;"], StyledSheetControlsCenterOut, "".concat(props.$maxDurationOut, "s")));
24909
- }, function (props) {
24910
- return props.$state === "exited" && styled.css(["opacity:0;"]);
24911
24944
  });
24912
24945
  StyledAnimatedSpan.displayName = "StyledAnimatedSpan";
24913
24946
  var StyledCssTransition = styled__default["default"](reactTransitionGroup.CSSTransition).withConfig({
24914
24947
  displayName: "Styles__StyledCssTransition",
24915
- componentId: "sc-144eyxd-4"
24948
+ componentId: "sc-144eyxd-5"
24916
24949
  })(["", " ", " ", " ", ""], function (props) {
24917
- return props.$direction === "top" && styled.css(["&.c-sheet__animation-enter{opacity:0;transform:translateY(-100%);}&.c-sheet__animation-enter-active{opacity:1;transform:translateY(0);transition:opacity 400ms,transform 400ms;}&.c-sheet__animation-appear{opacity:0;transform:translateY(-100%);}&.c-sheet__animation-appear-active{opacity:1;transform:translateY(0);transition:opacity 400ms,transform 400ms;}&.c-sheet__animation-exit{opacity:1;}&.c-sheet__animation-exit-active{opacity:0;transform:translateY(-100%);transition:opacity 200ms,transform 200ms;}"]);
24950
+ return props.$direction === "top" && styled.css(["&.c-sheet__animation-enter{opacity:0;transform:translateY(-100%);}&.c-sheet__animation-enter-active{opacity:1;transform:translateY(0);transition:opacity ", "ms,transform ", "ms;}&.c-sheet__animation-appear{opacity:0;transform:translateY(-100%);}&.c-sheet__animation-appear-active{opacity:1;transform:translateY(0);transition:opacity ", "ms,transform ", "ms;}&.c-sheet__animation-exit{opacity:1;}&.c-sheet__animation-exit-active{opacity:0;transform:translateY(-100%);transition:opacity ", "ms,transform ", "ms;}"], SHEET_ENTER_MS, SHEET_ENTER_MS, SHEET_ENTER_MS, SHEET_ENTER_MS, SHEET_EXIT_MS, SHEET_EXIT_MS);
24918
24951
  }, function (props) {
24919
- return props.$direction === "bottom" && styled.css(["&.c-sheet__animation-enter{opacity:0;transform:translateY(100%);}&.c-sheet__animation-enter-active{opacity:1;transform:translateY(0);transition:opacity 400ms,transform 400ms;}&.c-sheet__animation-appear{opacity:0;transform:translateY(100%);}&.c-sheet__animation-appear-active{opacity:1;transform:translateY(0);transition:opacity 400ms,transform 400ms;}&.c-sheet__animation-exit{opacity:1;}&.c-sheet__animation-exit-active{opacity:0;transform:translateY(100%);transition:opacity 200ms,transform 200ms;}"]);
24952
+ return props.$direction === "bottom" && styled.css(["&.c-sheet__animation-enter{opacity:0;transform:translateY(100%);}&.c-sheet__animation-enter-active{opacity:1;transform:translateY(0);transition:opacity ", "ms,transform ", "ms;}&.c-sheet__animation-appear{opacity:0;transform:translateY(100%);}&.c-sheet__animation-appear-active{opacity:1;transform:translateY(0);transition:opacity ", "ms,transform ", "ms;}&.c-sheet__animation-exit{opacity:1;}&.c-sheet__animation-exit-active{opacity:0;transform:translateY(100%);transition:opacity ", "ms,transform ", "ms;}"], SHEET_ENTER_MS, SHEET_ENTER_MS, SHEET_ENTER_MS, SHEET_ENTER_MS, SHEET_EXIT_MS, SHEET_EXIT_MS);
24920
24953
  }, function (props) {
24921
- return props.$direction === "left" && styled.css(["&.c-sheet__animation-enter{opacity:0;transform:translateX(-100%);}&.c-sheet__animation-enter-active{opacity:1;transform:translateX(0);transition:opacity 400ms,transform 400ms;}&.c-sheet__animation-appear{opacity:0;transform:translateX(-100%);}&.c-sheet__animation-appear-active{opacity:1;transform:translateX(0);transition:opacity 400ms,transform 400ms;}&.c-sheet__animation-exit{opacity:1;}&.c-sheet__animation-exit-active{opacity:0;transform:translateX(-100%);transition:opacity 200ms,transform 200ms;}"]);
24954
+ return props.$direction === "left" && styled.css(["&.c-sheet__animation-enter{opacity:0;transform:translateX(-100%);}&.c-sheet__animation-enter-active{opacity:1;transform:translateX(0);transition:opacity ", "ms,transform ", "ms;}&.c-sheet__animation-appear{opacity:0;transform:translateX(-100%);}&.c-sheet__animation-appear-active{opacity:1;transform:translateX(0);transition:opacity ", "ms,transform ", "ms;}&.c-sheet__animation-exit{opacity:1;}&.c-sheet__animation-exit-active{opacity:0;transform:translateX(-100%);transition:opacity ", "ms,transform ", "ms;}"], SHEET_ENTER_MS, SHEET_ENTER_MS, SHEET_ENTER_MS, SHEET_ENTER_MS, SHEET_EXIT_MS, SHEET_EXIT_MS);
24922
24955
  }, function (props) {
24923
- return props.$direction === "right" && styled.css(["&.c-sheet__animation-enter{opacity:0;transform:translateX(100%);}&.c-sheet__animation-enter-active{opacity:1;transform:translateX(0);transition:opacity 400ms,transform 400ms;}&.c-sheet__animation-appear{opacity:0;transform:translateX(100%);}&.c-sheet__animation-appear-active{opacity:1;transform:translateX(0);transition:opacity 400ms,transform 400ms;}&.c-sheet__animation-exit{opacity:1;}&.c-sheet__animation-exit-active{opacity:0;transform:translateX(100%);transition:opacity 200ms,transform 200ms;}"]);
24956
+ return props.$direction === "right" && styled.css(["&.c-sheet__animation-enter{opacity:0;transform:translateX(100%);}&.c-sheet__animation-enter-active{opacity:1;transform:translateX(0);transition:opacity ", "ms,transform ", "ms;}&.c-sheet__animation-appear{opacity:0;transform:translateX(100%);}&.c-sheet__animation-appear-active{opacity:1;transform:translateX(0);transition:opacity ", "ms,transform ", "ms;}&.c-sheet__animation-exit{opacity:1;}&.c-sheet__animation-exit-active{opacity:0;transform:translateX(100%);transition:opacity ", "ms,transform ", "ms;}"], SHEET_ENTER_MS, SHEET_ENTER_MS, SHEET_ENTER_MS, SHEET_ENTER_MS, SHEET_EXIT_MS, SHEET_EXIT_MS);
24924
24957
  });
24925
24958
  StyledCssTransition.displayName = "StyledCssTransition";
24926
24959
  var StyledListSeparator = styled__default["default"](ListSeparator).withConfig({
24927
24960
  displayName: "Styles__StyledListSeparator",
24928
- componentId: "sc-144eyxd-5"
24961
+ componentId: "sc-144eyxd-6"
24929
24962
  })(["margin:0;"]);
24930
24963
  StyledListSeparator.displayName = "StyledListSeparator";
24931
24964
  var StyledIconsWrapperSmall = styled__default["default"].div.withConfig({
24932
24965
  displayName: "Styles__StyledIconsWrapperSmall",
24933
- componentId: "sc-144eyxd-6"
24966
+ componentId: "sc-144eyxd-7"
24934
24967
  })(["height:40px;display:flex;gap:8px;padding-left:16px;padding-right:16px;align-items:center;place-content:end;flex-direction:row-reverse;"]);
24935
24968
  StyledIconsWrapperSmall.displayName = "StyledIconsWrapperSmall";
24936
24969
  var StyledHeader$1 = styled__default["default"].div.withConfig({
24937
24970
  displayName: "Styles__StyledHeader",
24938
- componentId: "sc-144eyxd-7"
24971
+ componentId: "sc-144eyxd-8"
24939
24972
  })(["@media (min-width:640px){display:none;}"]);
24940
24973
  StyledHeader$1.displayName = "StyledHeader";
24941
24974
 
@@ -25003,55 +25036,44 @@
25003
25036
  onClose: handleClose,
25004
25037
  disableFocusLock: disableFocusLock,
25005
25038
  disableScrollLock: disableScrollLock
25006
- }), open && /*#__PURE__*/React__default["default"].createElement(Overlay, {
25039
+ }), /*#__PURE__*/React__default["default"].createElement(Fade, {
25040
+ in: open,
25041
+ timeout: open ? SHEET_ENTER_MS : SHEET_EXIT_MS
25042
+ }, /*#__PURE__*/React__default["default"].createElement(Overlay, {
25007
25043
  onClick: handleBackgroundClick,
25008
- disableBackgroundColor: disableBackgroundColor
25009
- }), /*#__PURE__*/React__default["default"].createElement(StyledSheetWrapper, {
25044
+ disableBackgroundColor: disableBackgroundColor,
25045
+ style: {
25046
+ pointerEvents: open ? undefined : "none"
25047
+ }
25048
+ })), /*#__PURE__*/React__default["default"].createElement(StyledSheetWrapper, {
25010
25049
  className: classNames__default["default"]("c-sheet__wrapper", bodyClassName),
25011
25050
  style: bodyStyle,
25012
25051
  $position: position,
25013
25052
  $mode: mode
25014
- }, controls.length > 0 && /*#__PURE__*/React__default["default"].createElement(StyledSheetIcons, null, controls.map(function (_ref2, index) {
25015
- var IconComponent = _ref2.icon,
25016
- tooltip = _ref2.tooltip,
25017
- onClick = _ref2.onClick,
25018
- disabled = _ref2.disabled,
25019
- className = _ref2.className;
25020
- var maxDurationIn = 4;
25021
- var maxDurationOut = 2;
25022
- var control = index + 1;
25023
- var durationOut = Math.max(0, maxDurationOut - control);
25024
- var durationIn = Math.min(control, maxDurationIn);
25025
- return /*#__PURE__*/React__default["default"].createElement(reactTransitionGroup.Transition, {
25026
- appear: true,
25027
- in: open,
25028
- timeout: maxDurationIn * 100,
25029
- key: "c-sheet-control-".concat(index)
25030
- }, function (state) {
25031
- return /*#__PURE__*/React__default["default"].createElement(Tooltip, {
25032
- title: tooltip,
25033
- disable: !tooltip || disabled
25034
- }, /*#__PURE__*/React__default["default"].createElement(StyledAnimatedSpan, {
25035
- onClick: onClick,
25036
- $disabled: disabled,
25037
- $mode: mode,
25038
- $state: state,
25039
- className: className,
25040
- $maxDurationIn: maxDurationIn / 10,
25041
- $maxDurationOut: maxDurationOut / 10,
25042
- $durationOut: durationOut / 10,
25043
- $durationIn: durationIn / 10
25044
- }, IconComponent));
25045
- });
25046
- })), /*#__PURE__*/React__default["default"].createElement(StyledCssTransition, {
25053
+ }, /*#__PURE__*/React__default["default"].createElement(StyledCssTransition, {
25047
25054
  appear: true,
25048
25055
  in: open,
25049
- timeout: 400,
25056
+ timeout: SHEET_ENTER_MS,
25050
25057
  classNames: "c-sheet__animation",
25051
25058
  $direction: animation,
25052
25059
  onEnter: handleEnter,
25053
25060
  onExited: handleExited
25054
- }, /*#__PURE__*/React__default["default"].createElement(StyledSheetWrapperPaper, {
25061
+ }, /*#__PURE__*/React__default["default"].createElement(StyledSheetSurface, null, controls.length > 0 && /*#__PURE__*/React__default["default"].createElement(StyledSheetIcons, null, controls.map(function (_ref2, index) {
25062
+ var IconComponent = _ref2.icon,
25063
+ tooltip = _ref2.tooltip,
25064
+ onClick = _ref2.onClick,
25065
+ disabled = _ref2.disabled,
25066
+ className = _ref2.className;
25067
+ return /*#__PURE__*/React__default["default"].createElement(Tooltip, {
25068
+ title: tooltip,
25069
+ disable: !tooltip || disabled,
25070
+ key: "c-sheet-control-".concat(index)
25071
+ }, /*#__PURE__*/React__default["default"].createElement(StyledAnimatedSpan, {
25072
+ onClick: onClick,
25073
+ $disabled: disabled,
25074
+ className: className
25075
+ }, IconComponent));
25076
+ })), /*#__PURE__*/React__default["default"].createElement(StyledSheetWrapperPaper, {
25055
25077
  paperClass: "c-sheet__wrapper__paper"
25056
25078
  }, controls.length > 0 && /*#__PURE__*/React__default["default"].createElement(StyledHeader$1, null, /*#__PURE__*/React__default["default"].createElement(StyledIconsWrapperSmall, null, controls.map(function (_ref3, index) {
25057
25079
  var IconComponent = _ref3.icon,
@@ -25069,7 +25091,7 @@
25069
25091
  className: className,
25070
25092
  variant: "text gray"
25071
25093
  }, IconComponent));
25072
- })), /*#__PURE__*/React__default["default"].createElement(StyledListSeparator, null)), children))));
25094
+ })), /*#__PURE__*/React__default["default"].createElement(StyledListSeparator, null)), children)))));
25073
25095
  });
25074
25096
  Sheet.displayName = "Sheet";
25075
25097