@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
|
@@ -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
|
|
3875
|
-
var
|
|
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
|
|
3967
|
-
if (
|
|
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
|
-
|
|
3973
|
-
|
|
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
|
-
|
|
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
|
-
|
|
4012
|
-
|
|
4013
|
-
|
|
4014
|
-
|
|
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
|
-
}, [
|
|
4022
|
-
|
|
4023
|
-
|
|
4024
|
-
|
|
4025
|
-
|
|
4026
|
-
|
|
4027
|
-
|
|
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:
|
|
4098
|
-
|
|
4099
|
-
}
|
|
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
|
|
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' ? '-
|
|
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",
|