@hyphen/hyphen-components 7.3.0 → 7.3.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.
@@ -3870,9 +3870,13 @@ var _excluded$3 = ["defaultOpen", "open", "storageKey", "onOpenChange", "classNa
3870
3870
  _excluded14 = ["className"],
3871
3871
  _excluded15 = ["className"];
3872
3872
  var SIDEBAR_WIDTH = '16rem';
3873
+ var SIDEBAR_RIGHT_WIDTH = '24rem';
3873
3874
  var SIDEBAR_WIDTH_ICON = '44px';
3874
- var SIDEBAR_KEYBOARD_SHORTCUT = '[';
3875
- var SidebarContext = /*#__PURE__*/React__default.createContext(null);
3875
+ var SIDEBAR_KEYBOARD_SHORTCUT_LEFT = '[';
3876
+ var SIDEBAR_KEYBOARD_SHORTCUT_RIGHT = ']';
3877
+ var SidebarIsMobileContext = /*#__PURE__*/React__default.createContext(null);
3878
+ var SidebarLeftContext = /*#__PURE__*/React__default.createContext(null);
3879
+ var SidebarRightContext = /*#__PURE__*/React__default.createContext(null);
3876
3880
  var SidebarSideContext = /*#__PURE__*/React__default.createContext('left');
3877
3881
  var resolveSideValue = function resolveSideValue(value, side, fallback) {
3878
3882
  if (typeof value === 'boolean') {
@@ -3902,6 +3906,16 @@ var resolveStorageKey = function resolveStorageKey(storageKey, side) {
3902
3906
  }
3903
3907
  return side === 'left' ? 'sidebar_expanded' : 'sidebar_expanded_right';
3904
3908
  };
3909
+ var getSidebarWidth = function getSidebarWidth(state, collapsible) {
3910
+ return state === 'collapsed' && collapsible === 'icon' ? 'var(--sidebar-width-icon)' : state === 'collapsed' ? '0' : 'var(--sidebar-width)';
3911
+ };
3912
+ var getSidebarOffsetStyles = function getSidebarOffsetStyles(side, state, collapsible) {
3913
+ var isVisible = state === 'expanded' || collapsible === 'icon';
3914
+ return {
3915
+ left: side === 'left' ? isVisible ? '0' : 'calc(var(--sidebar-width)*-1)' : undefined,
3916
+ right: side === 'right' ? isVisible ? '0' : 'calc(var(--sidebar-width)*-1)' : undefined
3917
+ };
3918
+ };
3905
3919
  var useSidebarSideState = function useSidebarSideState(_ref) {
3906
3920
  var side = _ref.side,
3907
3921
  isMobile = _ref.isMobile,
@@ -3963,14 +3977,18 @@ var useSidebarSideState = function useSidebarSideState(_ref) {
3963
3977
  }, [state, open, setOpen, openMobile, setOpenMobile, toggleSidebar]);
3964
3978
  };
3965
3979
  function useSidebar(sideOverride) {
3966
- var context = React__default.useContext(SidebarContext);
3967
- if (!context) {
3980
+ var isMobile = React__default.useContext(SidebarIsMobileContext);
3981
+ if (typeof isMobile !== 'boolean') {
3968
3982
  throw new Error('useSidebar must be used within a SidebarProvider.');
3969
3983
  }
3970
3984
  var contextSide = React__default.useContext(SidebarSideContext);
3971
3985
  var side = sideOverride != null ? sideOverride : contextSide;
3972
- return _extends({}, context.sides[side], {
3973
- isMobile: context.isMobile,
3986
+ var sideContext = React__default.useContext(side === 'left' ? SidebarLeftContext : SidebarRightContext);
3987
+ if (!sideContext) {
3988
+ throw new Error('useSidebar must be used within a SidebarProvider.');
3989
+ }
3990
+ return _extends({}, sideContext, {
3991
+ isMobile: isMobile,
3974
3992
  side: side
3975
3993
  });
3976
3994
  }
@@ -3987,6 +4005,8 @@ var SidebarProvider = /*#__PURE__*/forwardRef(function (_ref2, ref) {
3987
4005
  props = _objectWithoutPropertiesLoose(_ref2, _excluded$3);
3988
4006
  var isMobile = useIsMobile();
3989
4007
  var lastToggledSideRef = React__default.useRef('left');
4008
+ var leftToggleRef = React__default.useRef(null);
4009
+ var rightToggleRef = React__default.useRef(null);
3990
4010
  var leftState = useSidebarSideState({
3991
4011
  side: 'left',
3992
4012
  isMobile: isMobile,
@@ -4005,31 +4025,37 @@ var SidebarProvider = /*#__PURE__*/forwardRef(function (_ref2, ref) {
4005
4025
  storageKey: storageKey,
4006
4026
  lastToggledSideRef: lastToggledSideRef
4007
4027
  });
4008
- // Keydown event handler for toggling sidebar
4028
+ useEffect(function () {
4029
+ leftToggleRef.current = leftState.toggleSidebar;
4030
+ }, [leftState.toggleSidebar]);
4031
+ useEffect(function () {
4032
+ rightToggleRef.current = rightState.toggleSidebar;
4033
+ }, [rightState.toggleSidebar]);
4009
4034
  useEffect(function () {
4010
4035
  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();
4036
+ var target = event.target;
4037
+ if (target && (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || target.tagName === 'SELECT' || target.isContentEditable)) {
4038
+ return;
4039
+ }
4040
+ var shortcutSide = event.key === SIDEBAR_KEYBOARD_SHORTCUT_LEFT ? 'left' : event.key === SIDEBAR_KEYBOARD_SHORTCUT_RIGHT ? 'right' : null;
4041
+ if (!shortcutSide) {
4042
+ return;
4015
4043
  }
4044
+ event.preventDefault();
4045
+ var toggleSidebar = shortcutSide === 'left' ? leftToggleRef.current : rightToggleRef.current;
4046
+ toggleSidebar == null || toggleSidebar();
4016
4047
  };
4017
4048
  window.addEventListener('keydown', handleKeyDown);
4018
4049
  return function () {
4019
4050
  return window.removeEventListener('keydown', handleKeyDown);
4020
4051
  };
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
4052
+ }, []);
4053
+ return React__default.createElement(SidebarIsMobileContext.Provider, {
4054
+ value: isMobile
4055
+ }, React__default.createElement(SidebarLeftContext.Provider, {
4056
+ value: leftState
4057
+ }, React__default.createElement(SidebarRightContext.Provider, {
4058
+ value: rightState
4033
4059
  }, React__default.createElement(TooltipProvider, {
4034
4060
  delayDuration: 0
4035
4061
  }, React__default.createElement("div", _extends({
@@ -4038,9 +4064,9 @@ var SidebarProvider = /*#__PURE__*/forwardRef(function (_ref2, ref) {
4038
4064
  '--sidebar-width-icon': SIDEBAR_WIDTH_ICON,
4039
4065
  minBlockSize: '100svh'
4040
4066
  }, style),
4041
- className: classNames('display-flex w-100 background-color-secondary', className),
4067
+ className: classNames('display-flex w-100 background-color-secondary overflow-hidden', className),
4042
4068
  ref: ref
4043
- }, props), children)));
4069
+ }, props), children)))));
4044
4070
  });
4045
4071
  SidebarProvider.displayName = 'SidebarProvider';
4046
4072
  var Sidebar = /*#__PURE__*/React__default.forwardRef(function (_ref3, ref) {
@@ -4056,6 +4082,7 @@ var Sidebar = /*#__PURE__*/React__default.forwardRef(function (_ref3, ref) {
4056
4082
  state = _useSidebar.state,
4057
4083
  openMobile = _useSidebar.openMobile,
4058
4084
  setOpenMobile = _useSidebar.setOpenMobile;
4085
+ var sidebarWidth = side === 'right' ? SIDEBAR_RIGHT_WIDTH : SIDEBAR_WIDTH;
4059
4086
  if (isMobile) {
4060
4087
  return React__default.createElement(SidebarSideContext.Provider, {
4061
4088
  value: side
@@ -4077,6 +4104,7 @@ var Sidebar = /*#__PURE__*/React__default.forwardRef(function (_ref3, ref) {
4077
4104
  }, React__default.createElement("div", _extends({
4078
4105
  className: classNames('group display-flex h-100 font-size-xs flex-direction-column background-color-secondary font-color-base', className),
4079
4106
  style: {
4107
+ '--sidebar-width': sidebarWidth,
4080
4108
  width: 'var(--sidebar-width)'
4081
4109
  },
4082
4110
  ref: ref
@@ -4094,9 +4122,9 @@ var Sidebar = /*#__PURE__*/React__default.forwardRef(function (_ref3, ref) {
4094
4122
  color: "base",
4095
4123
  fontSize: "sm",
4096
4124
  position: "relative",
4097
- style: side === 'right' && collapsible === 'offcanvas' ? {
4098
- overflowX: 'hidden'
4099
- } : undefined,
4125
+ style: {
4126
+ '--sidebar-width': sidebarWidth
4127
+ },
4100
4128
  "data-state": state,
4101
4129
  "data-collapsible": collapsible,
4102
4130
  "data-side": side,
@@ -4108,15 +4136,13 @@ var Sidebar = /*#__PURE__*/React__default.forwardRef(function (_ref3, ref) {
4108
4136
  transitionDuration: 'var(--sidebar-transition-duration, 200ms)',
4109
4137
  animationDuration: 'var(--sidebar-transition-duration, 200ms)',
4110
4138
  transitionProperty: 'width',
4111
- width: state === 'collapsed' && collapsible === 'icon' ? 'var(--sidebar-width-icon)' : state === 'collapsed' ? '0' : 'var(--sidebar-width)',
4139
+ width: getSidebarWidth(state, collapsible),
4112
4140
  height: '100svh'
4113
4141
  },
4114
4142
  className: classNames('position-relative', className)
4115
4143
  }), React__default.createElement("div", _extends({
4116
4144
  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,
4145
+ style: _extends({}, getSidebarOffsetStyles(side, state, collapsible), {
4120
4146
  top: '0',
4121
4147
  bottom: '0',
4122
4148
  zIndex: 'var(--size-z-index-drawer)',
@@ -4127,7 +4153,7 @@ var Sidebar = /*#__PURE__*/React__default.forwardRef(function (_ref3, ref) {
4127
4153
  transitionProperty: 'left, right, width',
4128
4154
  width: state === 'collapsed' && collapsible === 'icon' ? 'var(--sidebar-width-icon)' : 'var(--sidebar-width)',
4129
4155
  height: '100svh'
4130
- }
4156
+ })
4131
4157
  }, props), React__default.createElement("div", {
4132
4158
  "data-sidebar": "sidebar",
4133
4159
  className: classNames('display-flex h-100 w-100 flex-direction-column background-color-secondary font-color-base', {
@@ -4359,6 +4385,7 @@ var SidebarRail = /*#__PURE__*/React__default.forwardRef(function (_ref16, ref)
4359
4385
  open = _useSidebar5.open,
4360
4386
  toggleSidebar = _useSidebar5.toggleSidebar,
4361
4387
  side = _useSidebar5.side;
4388
+ var shortcutLabel = side === 'left' ? SIDEBAR_KEYBOARD_SHORTCUT_LEFT : SIDEBAR_KEYBOARD_SHORTCUT_RIGHT;
4362
4389
  var caretIcon = open ? side === 'right' ? 'caret-sm-right' : 'caret-sm-left' : side === 'right' ? 'caret-sm-left' : 'caret-sm-right';
4363
4390
  return React__default.createElement("button", _extends({
4364
4391
  ref: ref,
@@ -4366,7 +4393,7 @@ var SidebarRail = /*#__PURE__*/React__default.forwardRef(function (_ref16, ref)
4366
4393
  "aria-label": "Toggle Sidebar",
4367
4394
  tabIndex: -1,
4368
4395
  onClick: toggleSidebar,
4369
- title: "Toggle Sidebar [",
4396
+ title: "Toggle Sidebar " + shortcutLabel,
4370
4397
  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
4398
  'cursor-w-resize': open && side === 'left' || !open && side === 'right',
4372
4399
  'cursor-e-resize': !open && side === 'left' || open && side === 'right'
@@ -4375,9 +4402,10 @@ var SidebarRail = /*#__PURE__*/React__default.forwardRef(function (_ref16, ref)
4375
4402
  top: '20px',
4376
4403
  bottom: '20px',
4377
4404
  right: side === 'left' ? '-14px' : undefined,
4378
- left: side === 'right' ? '-14px' : undefined,
4405
+ left: side === 'right' ? '-18px' : undefined,
4379
4406
  width: '10px'
4380
- }
4407
+ },
4408
+ type: "button"
4381
4409
  }, props), React__default.createElement(Box, {
4382
4410
  radius: "xl",
4383
4411
  background: "primary",