@hexure/ui 1.13.3 → 1.13.4
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/cjs/index.js +54 -38
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/types/components/ButtonMenu/ButtonMenu.d.ts +1 -1
- package/dist/esm/index.js +55 -39
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/types/components/ButtonMenu/ButtonMenu.d.ts +1 -1
- package/dist/index.d.ts +1 -1
- package/package.json +1 -1
package/dist/cjs/index.js
CHANGED
|
@@ -736,47 +736,17 @@ const MenuWrapper = styled.div `
|
|
|
736
736
|
display: inline-block;
|
|
737
737
|
`;
|
|
738
738
|
const StyledMoreMenu = styled(MoreMenu) `
|
|
739
|
-
position:
|
|
739
|
+
position: fixed;
|
|
740
|
+
top: ${props => props.$top};
|
|
741
|
+
left: ${props => props.$left};
|
|
740
742
|
width: ${props => props.$menuWidth};
|
|
741
743
|
max-height: ${props => props.maxHeight};
|
|
742
744
|
z-index: 10;
|
|
743
|
-
|
|
744
|
-
${props => {
|
|
745
|
-
switch (props.$position) {
|
|
746
|
-
case 'top':
|
|
747
|
-
return `
|
|
748
|
-
bottom: 100%;
|
|
749
|
-
left: 0;
|
|
750
|
-
transform: translateY(-5px); /* Adjust this value as needed */
|
|
751
|
-
`;
|
|
752
|
-
case 'bottom':
|
|
753
|
-
return `
|
|
754
|
-
top: 100%;
|
|
755
|
-
left: 0;
|
|
756
|
-
transform: translateY(5px); /* Adjust this value as needed */
|
|
757
|
-
`;
|
|
758
|
-
case 'left':
|
|
759
|
-
return `
|
|
760
|
-
right: 100%;
|
|
761
|
-
top: 0;
|
|
762
|
-
transform: translateX(-5px); /* Adjust this value as needed */
|
|
763
|
-
`;
|
|
764
|
-
case 'right':
|
|
765
|
-
return `
|
|
766
|
-
left: 100%;
|
|
767
|
-
top: 0;
|
|
768
|
-
transform: translateX(5px); /* Adjust this value as needed */
|
|
769
|
-
`;
|
|
770
|
-
default:
|
|
771
|
-
return `
|
|
772
|
-
top: 0;
|
|
773
|
-
left: 0;
|
|
774
|
-
`;
|
|
775
|
-
}
|
|
776
|
-
}}
|
|
777
745
|
`;
|
|
778
|
-
const ButtonMenu = ({ disabled, label, maxHeight, menuItems, small, position = '
|
|
746
|
+
const ButtonMenu = ({ disabled, label, maxHeight, menuItems, small, position = 'bottomLeft', format = 'primary', menuWidth = '200px', enableHover = true, enableClick = false, }) => {
|
|
779
747
|
const [showMenu, toggleMenu] = React.useState(false);
|
|
748
|
+
const [menuPosition, setMenuPosition] = React.useState({ top: '0px', left: '0px' });
|
|
749
|
+
const menuWrapperRef = React.useRef(null);
|
|
780
750
|
const handleMouseEnter = () => {
|
|
781
751
|
if (!disabled && enableHover) {
|
|
782
752
|
toggleMenu(true);
|
|
@@ -792,9 +762,55 @@ const ButtonMenu = ({ disabled, label, maxHeight, menuItems, small, position = '
|
|
|
792
762
|
toggleMenu(!showMenu);
|
|
793
763
|
}
|
|
794
764
|
};
|
|
795
|
-
|
|
765
|
+
React.useEffect(() => {
|
|
766
|
+
if (showMenu && menuWrapperRef.current) {
|
|
767
|
+
const rect = menuWrapperRef.current.getBoundingClientRect();
|
|
768
|
+
let top = rect.top;
|
|
769
|
+
let left = rect.left;
|
|
770
|
+
switch (position) {
|
|
771
|
+
case 'top':
|
|
772
|
+
top = rect.top - rect.height;
|
|
773
|
+
left = rect.left;
|
|
774
|
+
break;
|
|
775
|
+
case 'bottom':
|
|
776
|
+
top = rect.bottom;
|
|
777
|
+
left = rect.left;
|
|
778
|
+
break;
|
|
779
|
+
case 'left':
|
|
780
|
+
top = rect.top;
|
|
781
|
+
left = rect.left - rect.width;
|
|
782
|
+
break;
|
|
783
|
+
case 'right':
|
|
784
|
+
top = rect.top;
|
|
785
|
+
left = rect.right;
|
|
786
|
+
break;
|
|
787
|
+
case 'bottomRight':
|
|
788
|
+
top = rect.bottom;
|
|
789
|
+
left = rect.left;
|
|
790
|
+
break;
|
|
791
|
+
case 'bottomLeft':
|
|
792
|
+
top = rect.bottom;
|
|
793
|
+
left = rect.right - parseInt(menuWidth, 10);
|
|
794
|
+
break;
|
|
795
|
+
case 'topRight':
|
|
796
|
+
top = rect.top - parseInt(menuWidth, 10);
|
|
797
|
+
left = rect.left;
|
|
798
|
+
break;
|
|
799
|
+
case 'topLeft':
|
|
800
|
+
top = rect.top - parseInt(menuWidth, 10);
|
|
801
|
+
left = rect.right - parseInt(menuWidth, 10);
|
|
802
|
+
break;
|
|
803
|
+
default:
|
|
804
|
+
top = rect.bottom;
|
|
805
|
+
left = rect.left;
|
|
806
|
+
break;
|
|
807
|
+
}
|
|
808
|
+
setMenuPosition({ top: `${top}px`, left: `${left}px` });
|
|
809
|
+
}
|
|
810
|
+
}, [showMenu, position, menuWidth]);
|
|
811
|
+
return (React.createElement(MenuWrapper, { onClick: handleClick, onMouseEnter: handleMouseEnter, onMouseLeave: handleMouseLeave, ref: menuWrapperRef },
|
|
796
812
|
React.createElement(Button, { disabled: disabled, format: format, icon: js.mdiDotsHorizontal, small: small }, label),
|
|
797
|
-
showMenu && (React.createElement(StyledMoreMenu, { "$
|
|
813
|
+
showMenu && (React.createElement(StyledMoreMenu, { "$left": menuPosition.left, "$menuWidth": menuWidth, "$top": menuPosition.top, maxHeight: maxHeight, menuItems: menuItems }))));
|
|
798
814
|
};
|
|
799
815
|
|
|
800
816
|
const Wrapper$c = styled.div `
|