@hyphen/hyphen-components 7.3.0 → 7.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3871,8 +3871,11 @@ var _excluded$3 = ["defaultOpen", "open", "storageKey", "onOpenChange", "classNa
3871
3871
  _excluded15 = ["className"];
3872
3872
  var SIDEBAR_WIDTH = '16rem';
3873
3873
  var SIDEBAR_WIDTH_ICON = '44px';
3874
- var SIDEBAR_KEYBOARD_SHORTCUT = '[';
3875
- var SidebarContext = /*#__PURE__*/React__default.createContext(null);
3874
+ var SIDEBAR_KEYBOARD_SHORTCUT_LEFT = '[';
3875
+ var SIDEBAR_KEYBOARD_SHORTCUT_RIGHT = ']';
3876
+ var SidebarIsMobileContext = /*#__PURE__*/React__default.createContext(null);
3877
+ var SidebarLeftContext = /*#__PURE__*/React__default.createContext(null);
3878
+ var SidebarRightContext = /*#__PURE__*/React__default.createContext(null);
3876
3879
  var SidebarSideContext = /*#__PURE__*/React__default.createContext('left');
3877
3880
  var resolveSideValue = function resolveSideValue(value, side, fallback) {
3878
3881
  if (typeof value === 'boolean') {
@@ -3902,6 +3905,16 @@ var resolveStorageKey = function resolveStorageKey(storageKey, side) {
3902
3905
  }
3903
3906
  return side === 'left' ? 'sidebar_expanded' : 'sidebar_expanded_right';
3904
3907
  };
3908
+ var getSidebarWidth = function getSidebarWidth(state, collapsible) {
3909
+ return state === 'collapsed' && collapsible === 'icon' ? 'var(--sidebar-width-icon)' : state === 'collapsed' ? '0' : 'var(--sidebar-width)';
3910
+ };
3911
+ var getSidebarOffsetStyles = function getSidebarOffsetStyles(side, state, collapsible) {
3912
+ var isVisible = state === 'expanded' || collapsible === 'icon';
3913
+ return {
3914
+ left: side === 'left' ? isVisible ? '0' : 'calc(var(--sidebar-width)*-1)' : undefined,
3915
+ right: side === 'right' ? isVisible ? '0' : 'calc(var(--sidebar-width)*-1)' : undefined
3916
+ };
3917
+ };
3905
3918
  var useSidebarSideState = function useSidebarSideState(_ref) {
3906
3919
  var side = _ref.side,
3907
3920
  isMobile = _ref.isMobile,
@@ -3963,14 +3976,18 @@ var useSidebarSideState = function useSidebarSideState(_ref) {
3963
3976
  }, [state, open, setOpen, openMobile, setOpenMobile, toggleSidebar]);
3964
3977
  };
3965
3978
  function useSidebar(sideOverride) {
3966
- var context = React__default.useContext(SidebarContext);
3967
- if (!context) {
3979
+ var isMobile = React__default.useContext(SidebarIsMobileContext);
3980
+ if (typeof isMobile !== 'boolean') {
3968
3981
  throw new Error('useSidebar must be used within a SidebarProvider.');
3969
3982
  }
3970
3983
  var contextSide = React__default.useContext(SidebarSideContext);
3971
3984
  var side = sideOverride != null ? sideOverride : contextSide;
3972
- return _extends({}, context.sides[side], {
3973
- isMobile: context.isMobile,
3985
+ var sideContext = React__default.useContext(side === 'left' ? SidebarLeftContext : SidebarRightContext);
3986
+ if (!sideContext) {
3987
+ throw new Error('useSidebar must be used within a SidebarProvider.');
3988
+ }
3989
+ return _extends({}, sideContext, {
3990
+ isMobile: isMobile,
3974
3991
  side: side
3975
3992
  });
3976
3993
  }
@@ -3987,6 +4004,8 @@ var SidebarProvider = /*#__PURE__*/forwardRef(function (_ref2, ref) {
3987
4004
  props = _objectWithoutPropertiesLoose(_ref2, _excluded$3);
3988
4005
  var isMobile = useIsMobile();
3989
4006
  var lastToggledSideRef = React__default.useRef('left');
4007
+ var leftToggleRef = React__default.useRef(null);
4008
+ var rightToggleRef = React__default.useRef(null);
3990
4009
  var leftState = useSidebarSideState({
3991
4010
  side: 'left',
3992
4011
  isMobile: isMobile,
@@ -4005,31 +4024,37 @@ var SidebarProvider = /*#__PURE__*/forwardRef(function (_ref2, ref) {
4005
4024
  storageKey: storageKey,
4006
4025
  lastToggledSideRef: lastToggledSideRef
4007
4026
  });
4008
- // Keydown event handler for toggling sidebar
4027
+ useEffect(function () {
4028
+ leftToggleRef.current = leftState.toggleSidebar;
4029
+ }, [leftState.toggleSidebar]);
4030
+ useEffect(function () {
4031
+ rightToggleRef.current = rightState.toggleSidebar;
4032
+ }, [rightState.toggleSidebar]);
4009
4033
  useEffect(function () {
4010
4034
  var handleKeyDown = function handleKeyDown(event) {
4011
- if (event.key === SIDEBAR_KEYBOARD_SHORTCUT) {
4012
- event.preventDefault();
4013
- var sideToToggle = lastToggledSideRef.current;
4014
- (sideToToggle === 'left' ? leftState : rightState).toggleSidebar();
4035
+ var target = event.target;
4036
+ if (target && (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || target.tagName === 'SELECT' || target.isContentEditable)) {
4037
+ return;
4038
+ }
4039
+ var shortcutSide = event.key === SIDEBAR_KEYBOARD_SHORTCUT_LEFT ? 'left' : event.key === SIDEBAR_KEYBOARD_SHORTCUT_RIGHT ? 'right' : null;
4040
+ if (!shortcutSide) {
4041
+ return;
4015
4042
  }
4043
+ event.preventDefault();
4044
+ var toggleSidebar = shortcutSide === 'left' ? leftToggleRef.current : rightToggleRef.current;
4045
+ toggleSidebar == null || toggleSidebar();
4016
4046
  };
4017
4047
  window.addEventListener('keydown', handleKeyDown);
4018
4048
  return function () {
4019
4049
  return window.removeEventListener('keydown', handleKeyDown);
4020
4050
  };
4021
- }, [leftState, rightState]);
4022
- var contextValue = useMemo(function () {
4023
- return {
4024
- isMobile: isMobile,
4025
- sides: {
4026
- left: leftState,
4027
- right: rightState
4028
- }
4029
- };
4030
- }, [isMobile, leftState, rightState]);
4031
- return React__default.createElement(SidebarContext.Provider, {
4032
- value: contextValue
4051
+ }, []);
4052
+ return React__default.createElement(SidebarIsMobileContext.Provider, {
4053
+ value: isMobile
4054
+ }, React__default.createElement(SidebarLeftContext.Provider, {
4055
+ value: leftState
4056
+ }, React__default.createElement(SidebarRightContext.Provider, {
4057
+ value: rightState
4033
4058
  }, React__default.createElement(TooltipProvider, {
4034
4059
  delayDuration: 0
4035
4060
  }, React__default.createElement("div", _extends({
@@ -4040,7 +4065,7 @@ var SidebarProvider = /*#__PURE__*/forwardRef(function (_ref2, ref) {
4040
4065
  }, style),
4041
4066
  className: classNames('display-flex w-100 background-color-secondary', className),
4042
4067
  ref: ref
4043
- }, props), children)));
4068
+ }, props), children)))));
4044
4069
  });
4045
4070
  SidebarProvider.displayName = 'SidebarProvider';
4046
4071
  var Sidebar = /*#__PURE__*/React__default.forwardRef(function (_ref3, ref) {
@@ -4108,15 +4133,13 @@ var Sidebar = /*#__PURE__*/React__default.forwardRef(function (_ref3, ref) {
4108
4133
  transitionDuration: 'var(--sidebar-transition-duration, 200ms)',
4109
4134
  animationDuration: 'var(--sidebar-transition-duration, 200ms)',
4110
4135
  transitionProperty: 'width',
4111
- width: state === 'collapsed' && collapsible === 'icon' ? 'var(--sidebar-width-icon)' : state === 'collapsed' ? '0' : 'var(--sidebar-width)',
4136
+ width: getSidebarWidth(state, collapsible),
4112
4137
  height: '100svh'
4113
4138
  },
4114
4139
  className: classNames('position-relative', className)
4115
4140
  }), React__default.createElement("div", _extends({
4116
4141
  className: classNames('position-absolute display-none display-flex-desktop ', className),
4117
- style: {
4118
- left: side === 'left' && (state === 'expanded' || collapsible === 'icon') ? '0' : side === 'left' ? 'calc(var(--sidebar-width)*-1)' : undefined,
4119
- right: side === 'right' && (state === 'expanded' || collapsible === 'icon') ? '0' : side === 'right' ? 'calc(var(--sidebar-width)*-1)' : undefined,
4142
+ style: _extends({}, getSidebarOffsetStyles(side, state, collapsible), {
4120
4143
  top: '0',
4121
4144
  bottom: '0',
4122
4145
  zIndex: 'var(--size-z-index-drawer)',
@@ -4127,7 +4150,7 @@ var Sidebar = /*#__PURE__*/React__default.forwardRef(function (_ref3, ref) {
4127
4150
  transitionProperty: 'left, right, width',
4128
4151
  width: state === 'collapsed' && collapsible === 'icon' ? 'var(--sidebar-width-icon)' : 'var(--sidebar-width)',
4129
4152
  height: '100svh'
4130
- }
4153
+ })
4131
4154
  }, props), React__default.createElement("div", {
4132
4155
  "data-sidebar": "sidebar",
4133
4156
  className: classNames('display-flex h-100 w-100 flex-direction-column background-color-secondary font-color-base', {
@@ -4359,6 +4382,7 @@ var SidebarRail = /*#__PURE__*/React__default.forwardRef(function (_ref16, ref)
4359
4382
  open = _useSidebar5.open,
4360
4383
  toggleSidebar = _useSidebar5.toggleSidebar,
4361
4384
  side = _useSidebar5.side;
4385
+ var shortcutLabel = side === 'left' ? SIDEBAR_KEYBOARD_SHORTCUT_LEFT : SIDEBAR_KEYBOARD_SHORTCUT_RIGHT;
4362
4386
  var caretIcon = open ? side === 'right' ? 'caret-sm-right' : 'caret-sm-left' : side === 'right' ? 'caret-sm-left' : 'caret-sm-right';
4363
4387
  return React__default.createElement("button", _extends({
4364
4388
  ref: ref,
@@ -4366,7 +4390,7 @@ var SidebarRail = /*#__PURE__*/React__default.forwardRef(function (_ref16, ref)
4366
4390
  "aria-label": "Toggle Sidebar",
4367
4391
  tabIndex: -1,
4368
4392
  onClick: toggleSidebar,
4369
- title: "Toggle Sidebar [",
4393
+ title: "Toggle Sidebar " + shortcutLabel,
4370
4394
  className: classNames(styles$8.rail, 'hover-show-child background-color-transparent display-flex p-top-5xl p-left-xl p-right-0 justify-content-center position-absolute', {
4371
4395
  'cursor-w-resize': open && side === 'left' || !open && side === 'right',
4372
4396
  'cursor-e-resize': !open && side === 'left' || open && side === 'right'