@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.
- package/dist/hyphen-components.cjs.development.js +64 -36
- package/dist/hyphen-components.cjs.development.js.map +1 -1
- package/dist/hyphen-components.cjs.production.min.js +1 -1
- package/dist/hyphen-components.cjs.production.min.js.map +1 -1
- package/dist/hyphen-components.esm.js +64 -36
- package/dist/hyphen-components.esm.js.map +1 -1
- package/package.json +1 -1
- package/src/components/Sidebar/Sidebar.test.tsx +115 -1
- package/src/components/Sidebar/Sidebar.tsx +139 -78
|
@@ -3899,9 +3899,13 @@ var _excluded$3 = ["defaultOpen", "open", "storageKey", "onOpenChange", "classNa
|
|
|
3899
3899
|
_excluded14 = ["className"],
|
|
3900
3900
|
_excluded15 = ["className"];
|
|
3901
3901
|
var SIDEBAR_WIDTH = '16rem';
|
|
3902
|
+
var SIDEBAR_RIGHT_WIDTH = '24rem';
|
|
3902
3903
|
var SIDEBAR_WIDTH_ICON = '44px';
|
|
3903
|
-
var
|
|
3904
|
-
var
|
|
3904
|
+
var SIDEBAR_KEYBOARD_SHORTCUT_LEFT = '[';
|
|
3905
|
+
var SIDEBAR_KEYBOARD_SHORTCUT_RIGHT = ']';
|
|
3906
|
+
var SidebarIsMobileContext = /*#__PURE__*/React.createContext(null);
|
|
3907
|
+
var SidebarLeftContext = /*#__PURE__*/React.createContext(null);
|
|
3908
|
+
var SidebarRightContext = /*#__PURE__*/React.createContext(null);
|
|
3905
3909
|
var SidebarSideContext = /*#__PURE__*/React.createContext('left');
|
|
3906
3910
|
var resolveSideValue = function resolveSideValue(value, side, fallback) {
|
|
3907
3911
|
if (typeof value === 'boolean') {
|
|
@@ -3931,6 +3935,16 @@ var resolveStorageKey = function resolveStorageKey(storageKey, side) {
|
|
|
3931
3935
|
}
|
|
3932
3936
|
return side === 'left' ? 'sidebar_expanded' : 'sidebar_expanded_right';
|
|
3933
3937
|
};
|
|
3938
|
+
var getSidebarWidth = function getSidebarWidth(state, collapsible) {
|
|
3939
|
+
return state === 'collapsed' && collapsible === 'icon' ? 'var(--sidebar-width-icon)' : state === 'collapsed' ? '0' : 'var(--sidebar-width)';
|
|
3940
|
+
};
|
|
3941
|
+
var getSidebarOffsetStyles = function getSidebarOffsetStyles(side, state, collapsible) {
|
|
3942
|
+
var isVisible = state === 'expanded' || collapsible === 'icon';
|
|
3943
|
+
return {
|
|
3944
|
+
left: side === 'left' ? isVisible ? '0' : 'calc(var(--sidebar-width)*-1)' : undefined,
|
|
3945
|
+
right: side === 'right' ? isVisible ? '0' : 'calc(var(--sidebar-width)*-1)' : undefined
|
|
3946
|
+
};
|
|
3947
|
+
};
|
|
3934
3948
|
var useSidebarSideState = function useSidebarSideState(_ref) {
|
|
3935
3949
|
var side = _ref.side,
|
|
3936
3950
|
isMobile = _ref.isMobile,
|
|
@@ -3992,14 +4006,18 @@ var useSidebarSideState = function useSidebarSideState(_ref) {
|
|
|
3992
4006
|
}, [state, open, setOpen, openMobile, setOpenMobile, toggleSidebar]);
|
|
3993
4007
|
};
|
|
3994
4008
|
function useSidebar(sideOverride) {
|
|
3995
|
-
var
|
|
3996
|
-
if (
|
|
4009
|
+
var isMobile = React.useContext(SidebarIsMobileContext);
|
|
4010
|
+
if (typeof isMobile !== 'boolean') {
|
|
3997
4011
|
throw new Error('useSidebar must be used within a SidebarProvider.');
|
|
3998
4012
|
}
|
|
3999
4013
|
var contextSide = React.useContext(SidebarSideContext);
|
|
4000
4014
|
var side = sideOverride != null ? sideOverride : contextSide;
|
|
4001
|
-
|
|
4002
|
-
|
|
4015
|
+
var sideContext = React.useContext(side === 'left' ? SidebarLeftContext : SidebarRightContext);
|
|
4016
|
+
if (!sideContext) {
|
|
4017
|
+
throw new Error('useSidebar must be used within a SidebarProvider.');
|
|
4018
|
+
}
|
|
4019
|
+
return _extends({}, sideContext, {
|
|
4020
|
+
isMobile: isMobile,
|
|
4003
4021
|
side: side
|
|
4004
4022
|
});
|
|
4005
4023
|
}
|
|
@@ -4016,6 +4034,8 @@ var SidebarProvider = /*#__PURE__*/React.forwardRef(function (_ref2, ref) {
|
|
|
4016
4034
|
props = _objectWithoutPropertiesLoose(_ref2, _excluded$3);
|
|
4017
4035
|
var isMobile = useIsMobile();
|
|
4018
4036
|
var lastToggledSideRef = React.useRef('left');
|
|
4037
|
+
var leftToggleRef = React.useRef(null);
|
|
4038
|
+
var rightToggleRef = React.useRef(null);
|
|
4019
4039
|
var leftState = useSidebarSideState({
|
|
4020
4040
|
side: 'left',
|
|
4021
4041
|
isMobile: isMobile,
|
|
@@ -4034,31 +4054,37 @@ var SidebarProvider = /*#__PURE__*/React.forwardRef(function (_ref2, ref) {
|
|
|
4034
4054
|
storageKey: storageKey,
|
|
4035
4055
|
lastToggledSideRef: lastToggledSideRef
|
|
4036
4056
|
});
|
|
4037
|
-
|
|
4057
|
+
React.useEffect(function () {
|
|
4058
|
+
leftToggleRef.current = leftState.toggleSidebar;
|
|
4059
|
+
}, [leftState.toggleSidebar]);
|
|
4060
|
+
React.useEffect(function () {
|
|
4061
|
+
rightToggleRef.current = rightState.toggleSidebar;
|
|
4062
|
+
}, [rightState.toggleSidebar]);
|
|
4038
4063
|
React.useEffect(function () {
|
|
4039
4064
|
var handleKeyDown = function handleKeyDown(event) {
|
|
4040
|
-
|
|
4041
|
-
|
|
4042
|
-
|
|
4043
|
-
|
|
4065
|
+
var target = event.target;
|
|
4066
|
+
if (target && (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || target.tagName === 'SELECT' || target.isContentEditable)) {
|
|
4067
|
+
return;
|
|
4068
|
+
}
|
|
4069
|
+
var shortcutSide = event.key === SIDEBAR_KEYBOARD_SHORTCUT_LEFT ? 'left' : event.key === SIDEBAR_KEYBOARD_SHORTCUT_RIGHT ? 'right' : null;
|
|
4070
|
+
if (!shortcutSide) {
|
|
4071
|
+
return;
|
|
4044
4072
|
}
|
|
4073
|
+
event.preventDefault();
|
|
4074
|
+
var toggleSidebar = shortcutSide === 'left' ? leftToggleRef.current : rightToggleRef.current;
|
|
4075
|
+
toggleSidebar == null || toggleSidebar();
|
|
4045
4076
|
};
|
|
4046
4077
|
window.addEventListener('keydown', handleKeyDown);
|
|
4047
4078
|
return function () {
|
|
4048
4079
|
return window.removeEventListener('keydown', handleKeyDown);
|
|
4049
4080
|
};
|
|
4050
|
-
}, [
|
|
4051
|
-
|
|
4052
|
-
|
|
4053
|
-
|
|
4054
|
-
|
|
4055
|
-
|
|
4056
|
-
|
|
4057
|
-
}
|
|
4058
|
-
};
|
|
4059
|
-
}, [isMobile, leftState, rightState]);
|
|
4060
|
-
return React.createElement(SidebarContext.Provider, {
|
|
4061
|
-
value: contextValue
|
|
4081
|
+
}, []);
|
|
4082
|
+
return React.createElement(SidebarIsMobileContext.Provider, {
|
|
4083
|
+
value: isMobile
|
|
4084
|
+
}, React.createElement(SidebarLeftContext.Provider, {
|
|
4085
|
+
value: leftState
|
|
4086
|
+
}, React.createElement(SidebarRightContext.Provider, {
|
|
4087
|
+
value: rightState
|
|
4062
4088
|
}, React.createElement(TooltipProvider, {
|
|
4063
4089
|
delayDuration: 0
|
|
4064
4090
|
}, React.createElement("div", _extends({
|
|
@@ -4067,9 +4093,9 @@ var SidebarProvider = /*#__PURE__*/React.forwardRef(function (_ref2, ref) {
|
|
|
4067
4093
|
'--sidebar-width-icon': SIDEBAR_WIDTH_ICON,
|
|
4068
4094
|
minBlockSize: '100svh'
|
|
4069
4095
|
}, style),
|
|
4070
|
-
className: classNames('display-flex w-100 background-color-secondary', className),
|
|
4096
|
+
className: classNames('display-flex w-100 background-color-secondary overflow-hidden', className),
|
|
4071
4097
|
ref: ref
|
|
4072
|
-
}, props), children)));
|
|
4098
|
+
}, props), children)))));
|
|
4073
4099
|
});
|
|
4074
4100
|
SidebarProvider.displayName = 'SidebarProvider';
|
|
4075
4101
|
var Sidebar = /*#__PURE__*/React.forwardRef(function (_ref3, ref) {
|
|
@@ -4085,6 +4111,7 @@ var Sidebar = /*#__PURE__*/React.forwardRef(function (_ref3, ref) {
|
|
|
4085
4111
|
state = _useSidebar.state,
|
|
4086
4112
|
openMobile = _useSidebar.openMobile,
|
|
4087
4113
|
setOpenMobile = _useSidebar.setOpenMobile;
|
|
4114
|
+
var sidebarWidth = side === 'right' ? SIDEBAR_RIGHT_WIDTH : SIDEBAR_WIDTH;
|
|
4088
4115
|
if (isMobile) {
|
|
4089
4116
|
return React.createElement(SidebarSideContext.Provider, {
|
|
4090
4117
|
value: side
|
|
@@ -4106,6 +4133,7 @@ var Sidebar = /*#__PURE__*/React.forwardRef(function (_ref3, ref) {
|
|
|
4106
4133
|
}, React.createElement("div", _extends({
|
|
4107
4134
|
className: classNames('group display-flex h-100 font-size-xs flex-direction-column background-color-secondary font-color-base', className),
|
|
4108
4135
|
style: {
|
|
4136
|
+
'--sidebar-width': sidebarWidth,
|
|
4109
4137
|
width: 'var(--sidebar-width)'
|
|
4110
4138
|
},
|
|
4111
4139
|
ref: ref
|
|
@@ -4123,9 +4151,9 @@ var Sidebar = /*#__PURE__*/React.forwardRef(function (_ref3, ref) {
|
|
|
4123
4151
|
color: "base",
|
|
4124
4152
|
fontSize: "sm",
|
|
4125
4153
|
position: "relative",
|
|
4126
|
-
style:
|
|
4127
|
-
|
|
4128
|
-
}
|
|
4154
|
+
style: {
|
|
4155
|
+
'--sidebar-width': sidebarWidth
|
|
4156
|
+
},
|
|
4129
4157
|
"data-state": state,
|
|
4130
4158
|
"data-collapsible": collapsible,
|
|
4131
4159
|
"data-side": side,
|
|
@@ -4137,15 +4165,13 @@ var Sidebar = /*#__PURE__*/React.forwardRef(function (_ref3, ref) {
|
|
|
4137
4165
|
transitionDuration: 'var(--sidebar-transition-duration, 200ms)',
|
|
4138
4166
|
animationDuration: 'var(--sidebar-transition-duration, 200ms)',
|
|
4139
4167
|
transitionProperty: 'width',
|
|
4140
|
-
width: state
|
|
4168
|
+
width: getSidebarWidth(state, collapsible),
|
|
4141
4169
|
height: '100svh'
|
|
4142
4170
|
},
|
|
4143
4171
|
className: classNames('position-relative', className)
|
|
4144
4172
|
}), React.createElement("div", _extends({
|
|
4145
4173
|
className: classNames('position-absolute display-none display-flex-desktop ', className),
|
|
4146
|
-
style: {
|
|
4147
|
-
left: side === 'left' && (state === 'expanded' || collapsible === 'icon') ? '0' : side === 'left' ? 'calc(var(--sidebar-width)*-1)' : undefined,
|
|
4148
|
-
right: side === 'right' && (state === 'expanded' || collapsible === 'icon') ? '0' : side === 'right' ? 'calc(var(--sidebar-width)*-1)' : undefined,
|
|
4174
|
+
style: _extends({}, getSidebarOffsetStyles(side, state, collapsible), {
|
|
4149
4175
|
top: '0',
|
|
4150
4176
|
bottom: '0',
|
|
4151
4177
|
zIndex: 'var(--size-z-index-drawer)',
|
|
@@ -4156,7 +4182,7 @@ var Sidebar = /*#__PURE__*/React.forwardRef(function (_ref3, ref) {
|
|
|
4156
4182
|
transitionProperty: 'left, right, width',
|
|
4157
4183
|
width: state === 'collapsed' && collapsible === 'icon' ? 'var(--sidebar-width-icon)' : 'var(--sidebar-width)',
|
|
4158
4184
|
height: '100svh'
|
|
4159
|
-
}
|
|
4185
|
+
})
|
|
4160
4186
|
}, props), React.createElement("div", {
|
|
4161
4187
|
"data-sidebar": "sidebar",
|
|
4162
4188
|
className: classNames('display-flex h-100 w-100 flex-direction-column background-color-secondary font-color-base', {
|
|
@@ -4388,6 +4414,7 @@ var SidebarRail = /*#__PURE__*/React.forwardRef(function (_ref16, ref) {
|
|
|
4388
4414
|
open = _useSidebar5.open,
|
|
4389
4415
|
toggleSidebar = _useSidebar5.toggleSidebar,
|
|
4390
4416
|
side = _useSidebar5.side;
|
|
4417
|
+
var shortcutLabel = side === 'left' ? SIDEBAR_KEYBOARD_SHORTCUT_LEFT : SIDEBAR_KEYBOARD_SHORTCUT_RIGHT;
|
|
4391
4418
|
var caretIcon = open ? side === 'right' ? 'caret-sm-right' : 'caret-sm-left' : side === 'right' ? 'caret-sm-left' : 'caret-sm-right';
|
|
4392
4419
|
return React.createElement("button", _extends({
|
|
4393
4420
|
ref: ref,
|
|
@@ -4395,7 +4422,7 @@ var SidebarRail = /*#__PURE__*/React.forwardRef(function (_ref16, ref) {
|
|
|
4395
4422
|
"aria-label": "Toggle Sidebar",
|
|
4396
4423
|
tabIndex: -1,
|
|
4397
4424
|
onClick: toggleSidebar,
|
|
4398
|
-
title: "Toggle Sidebar
|
|
4425
|
+
title: "Toggle Sidebar " + shortcutLabel,
|
|
4399
4426
|
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', {
|
|
4400
4427
|
'cursor-w-resize': open && side === 'left' || !open && side === 'right',
|
|
4401
4428
|
'cursor-e-resize': !open && side === 'left' || open && side === 'right'
|
|
@@ -4404,9 +4431,10 @@ var SidebarRail = /*#__PURE__*/React.forwardRef(function (_ref16, ref) {
|
|
|
4404
4431
|
top: '20px',
|
|
4405
4432
|
bottom: '20px',
|
|
4406
4433
|
right: side === 'left' ? '-14px' : undefined,
|
|
4407
|
-
left: side === 'right' ? '-
|
|
4434
|
+
left: side === 'right' ? '-18px' : undefined,
|
|
4408
4435
|
width: '10px'
|
|
4409
|
-
}
|
|
4436
|
+
},
|
|
4437
|
+
type: "button"
|
|
4410
4438
|
}, props), React.createElement(Box, {
|
|
4411
4439
|
radius: "xl",
|
|
4412
4440
|
background: "primary",
|